r92712 MediaWiki - Code Review archive

Repository:MediaWiki
Revision:r92711‎ | r92712 | r92713 >
Date:23:34, 20 July 2011
Author:awjrichards
Status:ok
Tags:
Comment:
Modified paths:
  • /branches/wmf/1.17wmf1/extensions/CentralNotice (modified) (history)
  • /branches/wmf/1.17wmf1/extensions/CentralNotice/CentralNotice.db.php (modified) (history)
  • /branches/wmf/1.17wmf1/extensions/CentralNotice/CentralNotice.i18n.php (modified) (history)
  • /branches/wmf/1.17wmf1/extensions/CentralNotice/CentralNotice.php (modified) (history)
  • /branches/wmf/1.17wmf1/extensions/CentralNotice/CentralNotice.sql (modified) (history)
  • /branches/wmf/1.17wmf1/extensions/CentralNotice/centralnotice.css (modified) (history)
  • /branches/wmf/1.17wmf1/extensions/CentralNotice/centralnotice.js (modified) (history)
  • /branches/wmf/1.17wmf1/extensions/CentralNotice/collapsed.png (added) (history)
  • /branches/wmf/1.17wmf1/extensions/CentralNotice/patches/patch-notice_log.sql (added) (history)
  • /branches/wmf/1.17wmf1/extensions/CentralNotice/patches/patch-notice_logs.sql (deleted) (history)
  • /branches/wmf/1.17wmf1/extensions/CentralNotice/special/SpecialBannerController.php (modified) (history)
  • /branches/wmf/1.17wmf1/extensions/CentralNotice/special/SpecialBannerListLoader.php (modified) (history)
  • /branches/wmf/1.17wmf1/extensions/CentralNotice/special/SpecialBannerLoader.php (modified) (history)
  • /branches/wmf/1.17wmf1/extensions/CentralNotice/special/SpecialCentralNotice.php (modified) (history)
  • /branches/wmf/1.17wmf1/extensions/CentralNotice/special/SpecialCentralNoticeLogs.php (modified) (history)
  • /branches/wmf/1.17wmf1/extensions/CentralNotice/uncollapsed.png (added) (history)

Diff [purge]

Index: branches/wmf/1.17wmf1/extensions/CentralNotice/CentralNotice.php
@@ -147,6 +147,8 @@
148148 $base . '/patches/patch-notice_countries.sql' );
149149 $wgExtNewTables[] = array( 'cn_notice_projects',
150150 $base . '/patches/patch-notice_projects.sql' );
 151+ $wgExtNewTables[] = array( 'cn_notice_log',
 152+ $base . '/patches/patch-notice_log.sql' );
151153 }
152154 } else {
153155 if ( $updater->getDB()->getType() == 'mysql' ) {
@@ -164,6 +166,8 @@
165167 $base . '/patches/patch-notice_countries.sql', true ) );
166168 $updater->addExtensionUpdate( array( 'addTable', 'cn_notice_projects',
167169 $base . '/patches/patch-notice_projects.sql', true ) );
 170+ $updater->addExtensionUpdate( array( 'addTable', 'cn_notice_log',
 171+ $base . '/patches/patch-notice_log.sql', true ) );
168172 }
169173 }
170174 return true;
Property changes on: branches/wmf/1.17wmf1/extensions/CentralNotice/CentralNotice.php
___________________________________________________________________
Modified: svn:mergeinfo
171175 Merged /trunk/extensions/CentralNotice/CentralNotice.php:r91368-92408
Index: branches/wmf/1.17wmf1/extensions/CentralNotice/special/SpecialBannerListLoader.php
@@ -64,12 +64,12 @@
6565 // Quick short circuit to show preferred campaigns
6666 if ( $campaigns ) {
6767 // Pull banners
68 - $banners = CentralNoticeDB::selectBannersAssigned( $campaigns );
 68+ $banners = CentralNoticeDB::getCampaignBanners( $campaigns );
6969 }
7070
7171 // Didn't find any preferred banners so do an old style lookup
7272 if ( !$banners ) {
73 - $banners = CentralNotice::selectNoticeTemplates(
 73+ $banners = CentralNoticeDB::getBannersByTarget(
7474 $this->project, $this->language, $this->location );
7575 }
7676
Property changes on: branches/wmf/1.17wmf1/extensions/CentralNotice/special/SpecialBannerController.php
___________________________________________________________________
Modified: svn:mergeinfo
7777 Merged /trunk/extensions/CentralNotice/special/SpecialBannerController.php:r91368-92408
Index: branches/wmf/1.17wmf1/extensions/CentralNotice/special/SpecialCentralNotice.php
@@ -57,85 +57,9 @@
5858 // Check authentication token
5959 if ( $wgUser->matchEditToken( $wgRequest->getVal( 'authtoken' ) ) ) {
6060
61 - // Handle removing campaigns
62 - $toRemove = $wgRequest->getArray( 'removeNotices' );
63 - if ( $toRemove ) {
64 - // Remove campaigns in list
65 - foreach ( $toRemove as $notice ) {
66 - $this->removeNotice( $notice );
67 - }
68 -
69 - // Skip subsequent form handling and show list of campaigns
70 - $this->listNotices();
71 - $wgOut->addHTML( Xml::closeElement( 'div' ) );
72 - return;
73 - }
74 -
75 - // Handle locking/unlocking campaigns
76 - $lockedNotices = $wgRequest->getArray( 'locked' );
77 - if ( $lockedNotices ) {
78 - // Build list of campaigns to lock
79 - $unlockedNotices = array_diff( $this->getAllCampaignNames(), $lockedNotices );
80 -
81 - // Set locked/unlocked flag accordingly
82 - foreach ( $lockedNotices as $notice ) {
83 - $this->updateLock( $notice, '1' );
84 - }
85 - foreach ( $unlockedNotices as $notice ) {
86 - $this->updateLock( $notice, '0' );
87 - }
88 - // Handle updates if no post content came through (all checkboxes unchecked)
89 - } elseif ( $method !== 'addNotice' ) {
90 - $allNotices = $this->getAllCampaignNames();
91 - foreach ( $allNotices as $notice ) {
92 - $this->updateLock( $notice, '0' );
93 - }
94 - }
95 -
96 - // Handle enabling/disabling campaigns
97 - $enabledNotices = $wgRequest->getArray( 'enabled' );
98 - if ( $enabledNotices ) {
99 - // Build list of campaigns to disable
100 - $disabledNotices = array_diff( $this->getAllCampaignNames(), $enabledNotices );
101 -
102 - // Set enabled/disabled flag accordingly
103 - foreach ( $enabledNotices as $notice ) {
104 - $this->updateEnabled( $notice, '1' );
105 - }
106 - foreach ( $disabledNotices as $notice ) {
107 - $this->updateEnabled( $notice, '0' );
108 - }
109 - // Handle updates if no post content came through (all checkboxes unchecked)
110 - } elseif ( $method !== 'addNotice' ) {
111 - $allNotices = $this->getAllCampaignNames();
112 - foreach ( $allNotices as $notice ) {
113 - $this->updateEnabled( $notice, '0' );
114 - }
115 - }
116 -
117 - // Handle setting preferred campaigns
118 - $preferredNotices = $wgRequest->getArray( 'preferred' );
119 - if ( $preferredNotices ) {
120 - // Build list of campaigns to unset
121 - $unsetNotices = array_diff( $this->getAllCampaignNames(), $preferredNotices );
122 -
123 - // Set flag accordingly
124 - foreach ( $preferredNotices as $notice ) {
125 - $this->updatePreferred( $notice, '1' );
126 - }
127 - foreach ( $unsetNotices as $notice ) {
128 - $this->updatePreferred( $notice, '0' );
129 - }
130 - // Handle updates if no post content came through (all checkboxes unchecked)
131 - } elseif ( $method !== 'addNotice' ) {
132 - $allNotices = $this->getAllCampaignNames();
133 - foreach ( $allNotices as $notice ) {
134 - $this->updatePreferred( $notice, '0' );
135 - }
136 - }
137 -
138 - // Handle adding of campaign
 61+ // Handle adding a campaign
13962 if ( $method == 'addNotice' ) {
 63+
14064 $noticeName = $wgRequest->getVal( 'noticeName' );
14165 $start = $wgRequest->getArray( 'start' );
14266 $projects = $wgRequest->getArray( 'projects' );
@@ -148,6 +72,99 @@
14973 $this->addNotice( $noticeName, '0', $start, $projects,
15074 $project_languages, $geotargeted, $geo_countries );
15175 }
 76+
 77+ // Handle changing settings to existing campaigns
 78+ } else {
 79+
 80+ // Handle removing campaigns
 81+ $toRemove = $wgRequest->getArray( 'removeNotices' );
 82+ if ( $toRemove ) {
 83+ // Remove campaigns in list
 84+ foreach ( $toRemove as $notice ) {
 85+ $this->removeNotice( $notice );
 86+ }
 87+ }
 88+
 89+ // Get all the initial campaign settings for logging
 90+ $allCampaignNames = $this->getAllCampaignNames();
 91+ $allInitialCampaignSettings = array();
 92+ foreach ( $allCampaignNames as $campaignName ) {
 93+ $allInitialCampaignSettings[$campaignName] = CentralNoticeDB::getCampaignSettings( $campaignName, false );
 94+ }
 95+
 96+ // Handle locking/unlocking campaigns
 97+ $lockedNotices = $wgRequest->getArray( 'locked' );
 98+ if ( $lockedNotices ) {
 99+ // Build list of campaigns to lock
 100+ $unlockedNotices = array_diff( $this->getAllCampaignNames(), $lockedNotices );
 101+
 102+ // Set locked/unlocked flag accordingly
 103+ foreach ( $lockedNotices as $notice ) {
 104+ $this->setBooleanCampaignSetting( $notice, 'locked', 1 );
 105+ }
 106+ foreach ( $unlockedNotices as $notice ) {
 107+ $this->setBooleanCampaignSetting( $notice, 'locked', 0 );
 108+ }
 109+ // Handle updates if no post content came through (all checkboxes unchecked)
 110+ } else {
 111+ $allNotices = $this->getAllCampaignNames();
 112+ foreach ( $allNotices as $notice ) {
 113+ $this->setBooleanCampaignSetting( $notice, 'locked', 0 );
 114+ }
 115+ }
 116+
 117+ // Handle enabling/disabling campaigns
 118+ $enabledNotices = $wgRequest->getArray( 'enabled' );
 119+ if ( $enabledNotices ) {
 120+ // Build list of campaigns to disable
 121+ $disabledNotices = array_diff( $this->getAllCampaignNames(), $enabledNotices );
 122+
 123+ // Set enabled/disabled flag accordingly
 124+ foreach ( $enabledNotices as $notice ) {
 125+ $this->setBooleanCampaignSetting( $notice, 'enabled', 1 );
 126+ }
 127+ foreach ( $disabledNotices as $notice ) {
 128+ $this->setBooleanCampaignSetting( $notice, 'enabled', 0 );
 129+ }
 130+ // Handle updates if no post content came through (all checkboxes unchecked)
 131+ } else {
 132+ $allNotices = $this->getAllCampaignNames();
 133+ foreach ( $allNotices as $notice ) {
 134+ $this->setBooleanCampaignSetting( $notice, 'enabled', 0 );
 135+ }
 136+ }
 137+
 138+ // Handle setting preferred campaigns
 139+ $preferredNotices = $wgRequest->getArray( 'preferred' );
 140+ if ( $preferredNotices ) {
 141+ // Build list of campaigns to unset
 142+ $unsetNotices = array_diff( $this->getAllCampaignNames(), $preferredNotices );
 143+
 144+ // Set flag accordingly
 145+ foreach ( $preferredNotices as $notice ) {
 146+ $this->setBooleanCampaignSetting( $notice, 'preferred', 1 );
 147+ }
 148+ foreach ( $unsetNotices as $notice ) {
 149+ $this->setBooleanCampaignSetting( $notice, 'preferred', 0 );
 150+ }
 151+ // Handle updates if no post content came through (all checkboxes unchecked)
 152+ } else {
 153+ $allNotices = $this->getAllCampaignNames();
 154+ foreach ( $allNotices as $notice ) {
 155+ $this->setBooleanCampaignSetting( $notice, 'preferred', 0 );
 156+ }
 157+ }
 158+
 159+ // Get all the final campaign settings for potential logging
 160+ foreach ( $allCampaignNames as $campaignName ) {
 161+ $finalCampaignSettings = CentralNoticeDB::getCampaignSettings( $campaignName, false );
 162+ $diffs = array_diff_assoc( $allInitialCampaignSettings[$campaignName], $finalCampaignSettings );
 163+ // If there are changes, log them
 164+ if ( $diffs ) {
 165+ $campaignId = CentralNotice::getNoticeId( $campaignName );
 166+ $this->logCampaignChange( 'modified', $campaignId, $allInitialCampaignSettings[$campaignName], $finalCampaignSettings );
 167+ }
 168+ }
152169 }
153170
154171 // If there were no errors, reload the page to prevent duplicate form submission
@@ -366,7 +383,7 @@
367384 'method=listNoticeDetail&notice=' . urlencode( $row->not_name ) );
368385
369386 // Projects
370 - $projects = $this->getNoticeProjects( $row->not_name );
 387+ $projects = CentralNotice::getNoticeProjects( $row->not_name );
371388 $project_count = count( $projects );
372389 $projectList = '';
373390 if ( $project_count > 1 ) {
@@ -388,7 +405,7 @@
389406 $fields[] = $projectList;
390407
391408 // Languages
392 - $project_langs = $this->getNoticeLanguages( $row->not_name );
 409+ $project_langs = CentralNotice::getNoticeLanguages( $row->not_name );
393410 $language_count = count( $project_langs );
394411 $languageList = '';
395412 if ( $language_count > 3 ) {
@@ -539,7 +556,7 @@
540557 // Countries
541558 $htmlOut .= Xml::openElement( 'tr' );
542559 $htmlOut .= Xml::tags( 'td', array(),
543 - Xml::label( wfMsg( 'centralnotice-geotargeted' ), 'geotargeted' ) );
 560+ Xml::label( wfMsg( 'centralnotice-geo' ), 'geotargeted' ) );
544561 $htmlOut .= Xml::tags( 'td', array(),
545562 Xml::check( 'geotargeted', false,
546563 wfArrayMerge( $readonly, array( 'value' => 1, 'id' => 'geotargeted' ) ) ) );
@@ -599,36 +616,38 @@
600617 }
601618 }
602619
 620+ $initialCampaignSettings = CentralNoticeDB::getCampaignSettings( $notice );
 621+
603622 // Handle locking/unlocking campaign
604623 if ( $wgRequest->getCheck( 'locked' ) ) {
605 - $this->updateLock( $notice, '1' );
 624+ $this->setBooleanCampaignSetting( $notice, 'locked', 1 );
606625 } else {
607 - $this->updateLock( $notice, 0 );
 626+ $this->setBooleanCampaignSetting( $notice, 'locked', 0 );
608627 }
609628
610629 // Handle enabling/disabling campaign
611630 if ( $wgRequest->getCheck( 'enabled' ) ) {
612 - $this->updateEnabled( $notice, '1' );
 631+ $this->setBooleanCampaignSetting( $notice, 'enabled', 1 );
613632 } else {
614 - $this->updateEnabled( $notice, 0 );
 633+ $this->setBooleanCampaignSetting( $notice, 'enabled', 0 );
615634 }
616635
617636 // Handle setting campaign to preferred/not preferred
618637 if ( $wgRequest->getCheck( 'preferred' ) ) {
619 - $this->updatePreferred( $notice, '1' );
 638+ $this->setBooleanCampaignSetting( $notice, 'preferred', 1 );
620639 } else {
621 - $this->updatePreferred( $notice, 0 );
 640+ $this->setBooleanCampaignSetting( $notice, 'preferred', 0 );
622641 }
623642
624643 // Handle updating geotargeting
625644 if ( $wgRequest->getCheck( 'geotargeted' ) ) {
626 - $this->updateGeotargeted( $notice, 1 );
 645+ $this->setBooleanCampaignSetting( $notice, 'geo', 1 );
627646 $countries = $wgRequest->getArray( 'geo_countries' );
628647 if ( $countries ) {
629648 $this->updateCountries( $notice, $countries );
630649 }
631650 } else {
632 - $this->updateGeotargeted( $notice, 0 );
 651+ $this->setBooleanCampaignSetting( $notice, 'geo', 0 );
633652 }
634653
635654 // Handle updating the start and end settings
@@ -691,6 +710,10 @@
692711 $this->updateProjectLanguages( $notice, $projectLangs );
693712 }
694713
 714+ $finalCampaignSettings = CentralNoticeDB::getCampaignSettings( $notice );
 715+ $campaignId = CentralNotice::getNoticeId( $notice );
 716+ $this->logCampaignChange( 'modified', $campaignId, $initialCampaignSettings, $finalCampaignSettings );
 717+
695718 // If there were no errors, reload the page to prevent duplicate form submission
696719 if ( !$this->centralNoticeError ) {
697720 $wgOut->redirect( $this->getTitle()->getLocalUrl(
@@ -774,26 +797,11 @@
775798 } else {
776799 $readonly = array( 'disabled' => 'disabled' );
777800 }
778 - $dbr = wfGetDB( DB_SLAVE );
779 -
780 - // Get campaign info from database
781 - $row = $dbr->selectRow( 'cn_notices',
782 - array(
783 - 'not_id',
784 - 'not_name',
785 - 'not_start',
786 - 'not_end',
787 - 'not_enabled',
788 - 'not_preferred',
789 - 'not_locked',
790 - 'not_geo'
791 - ),
792 - array( 'not_name' => $notice ),
793 - __METHOD__
794 - );
795801
796 - if ( $row ) {
 802+ $campaign = CentralNoticeDB::getCampaignSettings( $notice );
797803
 804+ if ( $campaign ) {
 805+
798806 // If there was an error, we'll need to restore the state of the form
799807 if ( $wgRequest->wasPosted() ) {
800808 $startArray = $wgRequest->getArray( 'start' );
@@ -818,15 +826,15 @@
819827 $isGeotargeted = $wgRequest->getCheck( 'geotargeted' );
820828 $countries = $wgRequest->getArray( 'geo_countries', array() );
821829 } else { // Defaults
822 - $startTimestamp = $row->not_start;
823 - $endTimestamp = $row->not_end;
824 - $isEnabled = ( $row->not_enabled == '1' );
825 - $isPreferred = ( $row->not_preferred == '1' );
826 - $isLocked = ( $row->not_locked == '1' );
827 - $noticeProjects = $this->getNoticeProjects( $notice );
828 - $noticeLanguages = $this->getNoticeLanguages( $notice );
829 - $isGeotargeted = ( $row->not_geo == '1' );
830 - $countries = $this->getNoticeCountries( $notice );
 830+ $startTimestamp = $campaign['start'];
 831+ $endTimestamp = $campaign['end'];
 832+ $isEnabled = ( $campaign['enabled'] == '1' );
 833+ $isPreferred = ( $campaign['preferred'] == '1' );
 834+ $isLocked = ( $campaign['locked'] == '1' );
 835+ $noticeProjects = CentralNotice::getNoticeProjects( $notice );
 836+ $noticeLanguages = CentralNotice::getNoticeLanguages( $notice );
 837+ $isGeotargeted = ( $campaign['geo'] == '1' );
 838+ $countries = CentralNotice::getNoticeCountries( $notice );
831839 }
832840
833841 // Build Html
@@ -872,12 +880,12 @@
873881 // Countries
874882 $htmlOut .= Xml::openElement( 'tr' );
875883 $htmlOut .= Xml::tags( 'td', array(),
876 - Xml::label( wfMsg( 'centralnotice-geotargeted' ), 'geotargeted' ) );
 884+ Xml::label( wfMsg( 'centralnotice-geo' ), 'geotargeted' ) );
877885 $htmlOut .= Xml::tags( 'td', array(),
878886 Xml::check( 'geotargeted', $isGeotargeted,
879887 wfArrayMerge(
880888 $readonly,
881 - array( 'value' => $row->not_name, 'id' => 'geotargeted' ) ) ) );
 889+ array( 'value' => $notice, 'id' => 'geotargeted' ) ) ) );
882890 $htmlOut .= Xml::closeElement( 'tr' );
883891 if ( $isGeotargeted ) {
884892 $htmlOut .= Xml::openElement( 'tr', array( 'id'=>'geoMultiSelector' ) );
@@ -896,7 +904,7 @@
897905 $htmlOut .= Xml::tags( 'td', array(),
898906 Xml::check( 'enabled', $isEnabled,
899907 wfArrayMerge( $readonly,
900 - array( 'value' => $row->not_name, 'id' => 'enabled' ) ) ) );
 908+ array( 'value' => $notice, 'id' => 'enabled' ) ) ) );
901909 $htmlOut .= Xml::closeElement( 'tr' );
902910 // Preferred
903911 $htmlOut .= Xml::openElement( 'tr' );
@@ -905,7 +913,7 @@
906914 $htmlOut .= Xml::tags( 'td', array(),
907915 Xml::check( 'preferred', $isPreferred,
908916 wfArrayMerge( $readonly,
909 - array( 'value' => $row->not_name, 'id' => 'preferred' ) ) ) );
 917+ array( 'value' => $notice, 'id' => 'preferred' ) ) ) );
910918 $htmlOut .= Xml::closeElement( 'tr' );
911919 // Locked
912920 $htmlOut .= Xml::openElement( 'tr' );
@@ -914,7 +922,7 @@
915923 $htmlOut .= Xml::tags( 'td', array(),
916924 Xml::check( 'locked', $isLocked,
917925 wfArrayMerge( $readonly,
918 - array( 'value' => $row->not_name, 'id' => 'locked' ) ) ) );
 926+ array( 'value' => $notice, 'id' => 'locked' ) ) ) );
919927 $htmlOut .= Xml::closeElement( 'tr' );
920928 if ( $this->editable ) {
921929 // Locked
@@ -923,7 +931,7 @@
924932 Xml::label( wfMsg( 'centralnotice-remove' ), 'remove' ) );
925933 $htmlOut .= Xml::tags( 'td', array(),
926934 Xml::check( 'remove', false,
927 - array( 'value' => $row->not_name, 'id' => 'remove' ) ) );
 935+ array( 'value' => $notice, 'id' => 'remove' ) ) );
928936 $htmlOut .= Xml::closeElement( 'tr' );
929937 }
930938 $htmlOut .= Xml::closeElement( 'table' );
@@ -1074,90 +1082,6 @@
10751083 return $htmlOut;
10761084 }
10771085
1078 - /**
1079 - * Lookup function for active banners under a given language/project/location. This function is
1080 - * called by SpecialBannerListLoader::getJsonList() in order to build the banner list JSON for
1081 - * each project.
1082 - * @return a 2D array of running banners with associated weights and settings
1083 - */
1084 - static function selectNoticeTemplates( $project, $language, $location = null ) {
1085 - global $wgCentralDBname;
1086 -
1087 - $campaigns = array();
1088 - $dbr = wfGetDB( DB_SLAVE, array(), $wgCentralDBname );
1089 - $encTimestamp = $dbr->addQuotes( $dbr->timestamp() );
1090 -
1091 - // Pull non-geotargeted campaigns
1092 - $campaignResults1 = $dbr->select(
1093 - array(
1094 - 'cn_notices',
1095 - 'cn_notice_projects',
1096 - 'cn_notice_languages'
1097 - ),
1098 - array(
1099 - 'not_id'
1100 - ),
1101 - array(
1102 - "not_start <= $encTimestamp",
1103 - "not_end >= $encTimestamp",
1104 - 'not_enabled = 1', // enabled
1105 - 'not_geo = 0', // not geotargeted
1106 - 'np_notice_id = cn_notices.not_id',
1107 - 'np_project' => $project,
1108 - 'nl_notice_id = cn_notices.not_id',
1109 - 'nl_language' => $language
1110 - ),
1111 - __METHOD__
1112 - );
1113 - foreach ( $campaignResults1 as $row ) {
1114 - $campaigns[] = $row->not_id;
1115 - }
1116 - if ( $location ) {
1117 -
1118 - // Normalize location parameter (should be an uppercase 2-letter country code)
1119 - preg_match( '/[a-zA-Z][a-zA-Z]/', $location, $matches );
1120 - if ( $matches ) {
1121 - $location = strtoupper( $matches[0] );
1122 -
1123 - // Pull geotargeted campaigns
1124 - $campaignResults2 = $dbr->select(
1125 - array(
1126 - 'cn_notices',
1127 - 'cn_notice_projects',
1128 - 'cn_notice_languages',
1129 - 'cn_notice_countries'
1130 - ),
1131 - array(
1132 - 'not_id'
1133 - ),
1134 - array(
1135 - "not_start <= $encTimestamp",
1136 - "not_end >= $encTimestamp",
1137 - 'not_enabled = 1', // enabled
1138 - 'not_geo = 1', // geotargeted
1139 - 'nc_notice_id = cn_notices.not_id',
1140 - 'nc_country' => $location,
1141 - 'np_notice_id = cn_notices.not_id',
1142 - 'np_project' => $project,
1143 - 'nl_notice_id = cn_notices.not_id',
1144 - 'nl_language' => $language
1145 - ),
1146 - __METHOD__
1147 - );
1148 - foreach ( $campaignResults2 as $row ) {
1149 - $campaigns[] = $row->not_id;
1150 - }
1151 - }
1152 - }
1153 -
1154 - $templates = array();
1155 - if ( $campaigns ) {
1156 - // Pull all banners assigned to the campaigns
1157 - $templates = CentralNoticeDB::selectBannersAssigned( $campaigns );
1158 - }
1159 - return $templates;
1160 - }
1161 -
11621086 function addNotice( $noticeName, $enabled, $start, $projects,
11631087 $project_languages, $geotargeted, $geo_countries )
11641088 {
@@ -1171,6 +1095,7 @@
11721096 $this->showError( 'centralnotice-no-language' );
11731097 return;
11741098 } else {
 1099+ if ( !$geo_countries ) $geo_countries = array();
11751100 $dbw = wfGetDB( DB_MASTER );
11761101 $dbw->begin();
11771102 $start['hour'] = substr( $start['hour'], 0 , 2 );
@@ -1220,7 +1145,7 @@
12211146 $res = $dbw->insert( 'cn_notice_languages', $insertArray,
12221147 __METHOD__, array( 'IGNORE' ) );
12231148
1224 - if ( $geotargeted && $geo_countries ) {
 1149+ if ( $geotargeted ) {
12251150 // Do multi-row insert for campaign countries
12261151 $insertArray = array();
12271152 foreach( $geo_countries as $code ) {
@@ -1235,16 +1160,15 @@
12361161 // Log the creation of the campaign
12371162 $beginSettings = array();
12381163 $endSettings = array(
1239 - 'notlog_end_name' => $noticeName,
1240 - 'notlog_end_projects' => implode( ", ", $projects ),
1241 - 'notlog_end_languages' => implode( ", ", $project_languages ),
1242 - 'notlog_end_countries' => implode( ", ", $geo_countries ),
1243 - 'notlog_end_start' => $dbw->timestamp( $startTs ),
1244 - 'notlog_end_end' => $dbw->timestamp( $endTs ),
1245 - 'notlog_end_enabled' => $enabled,
1246 - 'notlog_end_preferred' => 0,
1247 - 'notlog_end_locked' => 0,
1248 - 'notlog_end_geo' => $geotargeted
 1164+ 'projects' => implode( ", ", $projects ),
 1165+ 'languages' => implode( ", ", $project_languages ),
 1166+ 'countries' => implode( ", ", $geo_countries ),
 1167+ 'start' => $dbw->timestamp( $startTs ),
 1168+ 'end' => $dbw->timestamp( $endTs ),
 1169+ 'enabled' => $enabled,
 1170+ 'preferred' => 0,
 1171+ 'locked' => 0,
 1172+ 'geo' => $geotargeted
12491173 );
12501174 $this->logCampaignChange( 'created', $not_id, $beginSettings, $endSettings );
12511175
@@ -1267,17 +1191,19 @@
12681192 $this->showError( 'centralnotice-notice-is-locked' );
12691193 return;
12701194 } else {
 1195+ // Log the removal of the campaign
 1196+ $noticeId = CentralNotice::getNoticeId( $noticeName );
 1197+ $this->logCampaignChange( 'removed', $noticeId );
 1198+
12711199 $dbw = wfGetDB( DB_MASTER );
12721200 $dbw->begin();
1273 - $noticeId = htmlspecialchars( $this->getNoticeId( $noticeName ) );
12741201 $res = $dbw->delete( 'cn_assignments', array ( 'not_id' => $noticeId ) );
12751202 $res = $dbw->delete( 'cn_notices', array ( 'not_name' => $noticeName ) );
12761203 $res = $dbw->delete( 'cn_notice_languages', array ( 'nl_notice_id' => $noticeId ) );
 1204+ $res = $dbw->delete( 'cn_notice_projects', array ( 'np_notice_id' => $noticeId ) );
 1205+ $res = $dbw->delete( 'cn_notice_countries', array ( 'nc_notice_id' => $noticeId ) );
12771206 $dbw->commit();
12781207
1279 - // Log the removal of the campaign
1280 - $this->logCampaignChange( 'removed', $noticeId );
1281 -
12821208 return;
12831209 }
12841210 }
@@ -1286,7 +1212,7 @@
12871213 $dbr = wfGetDB( DB_SLAVE );
12881214
12891215 $eNoticeName = htmlspecialchars ( $noticeName );
1290 - $noticeId = $this->getNoticeId( $eNoticeName );
 1216+ $noticeId = CentralNotice::getNoticeId( $eNoticeName );
12911217 $templateId = $this->getTemplateId( $templateName );
12921218 $res = $dbr->select( 'cn_assignments', 'asn_id',
12931219 array(
@@ -1299,7 +1225,7 @@
13001226 } else {
13011227 $dbw = wfGetDB( DB_MASTER );
13021228 $dbw->begin();
1303 - $noticeId = $this->getNoticeId( $eNoticeName );
 1229+ $noticeId = CentralNotice::getNoticeId( $eNoticeName );
13041230 $res = $dbw->insert( 'cn_assignments',
13051231 array(
13061232 'tmp_id' => $templateId,
@@ -1339,7 +1265,7 @@
13401266 return null;
13411267 }
13421268
1343 - function getNoticeProjects( $noticeName ) {
 1269+ static function getNoticeProjects( $noticeName ) {
13441270 $dbr = wfGetDB( DB_SLAVE );
13451271 $eNoticeName = htmlspecialchars( $noticeName );
13461272 $row = $dbr->selectRow( 'cn_notices', 'not_id', array( 'not_name' => $eNoticeName ) );
@@ -1354,7 +1280,7 @@
13551281 return $projects;
13561282 }
13571283
1358 - function getNoticeLanguages( $noticeName ) {
 1284+ static function getNoticeLanguages( $noticeName ) {
13591285 $dbr = wfGetDB( DB_SLAVE );
13601286 $eNoticeName = htmlspecialchars( $noticeName );
13611287 $row = $dbr->selectRow( 'cn_notices', 'not_id', array( 'not_name' => $eNoticeName ) );
@@ -1369,7 +1295,7 @@
13701296 return $languages;
13711297 }
13721298
1373 - function getNoticeCountries( $noticeName ) {
 1299+ static function getNoticeCountries( $noticeName ) {
13741300 $dbr = wfGetDB( DB_SLAVE );
13751301 $eNoticeName = htmlspecialchars( $noticeName );
13761302 $row = $dbr->selectRow( 'cn_notices', 'not_id', array( 'not_name' => $eNoticeName ) );
@@ -1384,14 +1310,6 @@
13851311 return $countries;
13861312 }
13871313
1388 - function getNoticeProjectName( $noticeName ) {
1389 - $dbr = wfGetDB( DB_SLAVE );
1390 - $eNoticeName = htmlspecialchars( $noticeName );
1391 - $res = $dbr->select( 'cn_notices', 'not_project', array( 'not_name' => $eNoticeName ) );
1392 - $row = $dbr->fetchObject( $res );
1393 - return $row->not_project;
1394 - }
1395 -
13961314 function getTemplateId( $templateName ) {
13971315 $dbr = wfGetDB( DB_SLAVE );
13981316 $templateName = htmlspecialchars ( $templateName );
@@ -1403,7 +1321,7 @@
14041322 function removeTemplateFor( $noticeName, $templateName ) {
14051323 $dbw = wfGetDB( DB_MASTER );
14061324 $dbw->begin();
1407 - $noticeId = $this->getNoticeId( $noticeName );
 1325+ $noticeId = CentralNotice::getNoticeId( $noticeName );
14081326 $templateId = $this->getTemplateId( $templateName );
14091327 $dbw->delete( 'cn_assignments', array ( 'tmp_id' => $templateId, 'not_id' => $noticeId ) );
14101328 $dbw->commit();
@@ -1437,70 +1355,30 @@
14381356 array( 'not_name' => $noticeName )
14391357 );
14401358 }
1441 -
1442 - /**
1443 - * Update the enabled/disabled state of a campaign
1444 - */
1445 - private function updateEnabled( $noticeName, $isEnabled ) {
1446 - if ( !$this->noticeExists( $noticeName ) ) {
1447 - $this->showError( 'centralnotice-doesnt-exist' );
1448 - } else {
1449 - $dbw = wfGetDB( DB_MASTER );
1450 - $res = $dbw->update( 'cn_notices',
1451 - array( 'not_enabled' => $isEnabled ),
1452 - array( 'not_name' => $noticeName )
1453 - );
1454 - }
1455 - }
14561359
14571360 /**
1458 - * Update the preferred/not preferred state of a campaign
 1361+ * Update a boolean setting on a campaign
 1362+ * @param $noticeName string: Name of the campaign
 1363+ * @param $settingName string: Name of a boolean setting (enabled, preferred, locked, or geo)
 1364+ * @param $settingValue boolean: Value to use for the setting
14591365 */
1460 - function updatePreferred( $noticeName, $isPreferred ) {
 1366+ private function setBooleanCampaignSetting( $noticeName, $settingName, $settingValue ) {
14611367 if ( !$this->noticeExists( $noticeName ) ) {
1462 - $this->showError( 'centralnotice-doesnt-exist' );
 1368+ // Exit quietly since campaign may have been deleted at the same time.
 1369+ return;
14631370 } else {
 1371+ $settingName = strtolower( $settingName );
14641372 $dbw = wfGetDB( DB_MASTER );
14651373 $res = $dbw->update( 'cn_notices',
1466 - array( 'not_preferred' => $isPreferred ),
 1374+ array( 'not_'.$settingName => $settingValue ),
14671375 array( 'not_name' => $noticeName )
14681376 );
14691377 }
14701378 }
14711379
1472 - /**
1473 - * Update the geotargeted/not geotargeted state of a campaign
1474 - */
1475 - function updateGeotargeted( $noticeName, $isGeotargeted ) {
1476 - if ( !$this->noticeExists( $noticeName ) ) {
1477 - $this->showError( 'centralnotice-doesnt-exist' );
1478 - } else {
1479 - $dbw = wfGetDB( DB_MASTER );
1480 - $res = $dbw->update( 'cn_notices',
1481 - array( 'not_geo' => $isGeotargeted ),
1482 - array( 'not_name' => $noticeName )
1483 - );
1484 - }
1485 - }
1486 -
1487 - /**
1488 - * Update the locked/unlocked state of a campaign
1489 - */
1490 - function updateLock( $noticeName, $isLocked ) {
1491 - if ( !$this->noticeExists( $noticeName ) ) {
1492 - $this->showError( 'centralnotice-doesnt-exist' );
1493 - } else {
1494 - $dbw = wfGetDB( DB_MASTER );
1495 - $res = $dbw->update( 'cn_notices',
1496 - array( 'not_locked' => $isLocked ),
1497 - array( 'not_name' => $noticeName )
1498 - );
1499 - }
1500 - }
1501 -
15021380 function updateWeight( $noticeName, $templateId, $weight ) {
15031381 $dbw = wfGetDB( DB_MASTER );
1504 - $noticeId = $this->getNoticeId( $noticeName );
 1382+ $noticeId = CentralNotice::getNoticeId( $noticeName );
15051383 $dbw->update( 'cn_assignments',
15061384 array ( 'tmp_weight' => $weight ),
15071385 array(
@@ -1645,7 +1523,7 @@
16461524 $dbw->begin();
16471525
16481526 // Get the previously assigned projects
1649 - $oldProjects = $this->getNoticeProjects( $notice );
 1527+ $oldProjects = CentralNotice::getNoticeProjects( $notice );
16501528
16511529 // Get the notice id
16521530 $row = $dbw->selectRow( 'cn_notices', 'not_id', array( 'not_name' => $notice ) );
@@ -1674,7 +1552,7 @@
16751553 $dbw->begin();
16761554
16771555 // Get the previously assigned languages
1678 - $oldLanguages = $this->getNoticeLanguages( $notice );
 1556+ $oldLanguages = CentralNotice::getNoticeLanguages( $notice );
16791557
16801558 // Get the notice id
16811559 $row = $dbw->selectRow( 'cn_notices', 'not_id', array( 'not_name' => $notice ) );
@@ -1702,7 +1580,7 @@
17031581 $dbw = wfGetDB( DB_MASTER );
17041582
17051583 // Get the previously assigned languages
1706 - $oldCountries = $this->getNoticeCountries( $notice );
 1584+ $oldCountries = CentralNotice::getNoticeCountries( $notice );
17071585
17081586 // Get the notice id
17091587 $row = $dbw->selectRow( 'cn_notices', 'not_id', array( 'not_name' => $notice ) );
@@ -1801,13 +1679,13 @@
18021680 /**
18031681 * Log any changes related to a campaign
18041682 * @param $action string: 'created', 'modified', or 'removed'
1805 - * @param $campaign integer: id of campaign
 1683+ * @param $campaignId integer: ID of campaign
18061684 * @param $beginSettings array of campaign settings before changes (optional)
18071685 * @param $endSettings array of campaign settings after changes (optional)
18081686 * @param $beginAssignments array of banner assignments before changes (optional)
18091687 * @param $endAssignments array of banner assignments after changes (optional)
18101688 */
1811 - function logCampaignChange( $action, $campaign, $beginSettings = array(),
 1689+ function logCampaignChange( $action, $campaignId, $beginSettings = array(),
18121690 $endSettings = array(), $beginAssignments = array(), $endAssignments = array() )
18131691 {
18141692 global $wgUser;
@@ -1818,10 +1696,16 @@
18191697 'notlog_timestamp' => $dbw->timestamp(),
18201698 'notlog_user_id' => $wgUser->getId(),
18211699 'notlog_action' => $action,
1822 - 'notlog_not_id' => $campaign
 1700+ 'notlog_not_id' => $campaignId,
 1701+ 'notlog_not_name' => CentralNotice::getNoticeName( $campaignId )
18231702 );
18241703
1825 - $log = array_merge($log, $beginSettings, $endSettings);
 1704+ foreach ( $beginSettings as $key => $value ) {
 1705+ $log['notlog_begin_'.$key] = $value;
 1706+ }
 1707+ foreach ( $endSettings as $key => $value ) {
 1708+ $log['notlog_end_'.$key] = $value;
 1709+ }
18261710
18271711 $res = $dbw->insert( 'cn_notice_log', $log );
18281712 $log_id = $dbw->insertId();
Property changes on: branches/wmf/1.17wmf1/extensions/CentralNotice/special/SpecialBannerLoader.php
___________________________________________________________________
Modified: svn:mergeinfo
18291713 Merged /trunk/extensions/CentralNotice/special/SpecialBannerLoader.php:r91368-92408
Index: branches/wmf/1.17wmf1/extensions/CentralNotice/special/SpecialCentralNoticeLogs.php
@@ -54,7 +54,8 @@
5555 $htmlOut .= Xml::closeElement( 'form' );
5656
5757 // End log selection fieldset
58 - $htmlOut .= Xml::closeElement( 'fieldset' );
 58+ // Uncomment when we have multiple logs
 59+ //$htmlOut .= Xml::closeElement( 'fieldset' );
5960
6061 $wgOut->addHTML( $htmlOut );
6162
@@ -70,14 +71,21 @@
7172 function showLog( $logType ) {
7273 global $wgOut;
7374
 75+ $pager = new CentralNoticeLogPager( $this );
7476 $htmlOut = '';
7577
7678 // Begin log fieldset
77 - $htmlOut .= Xml::openElement( 'fieldset', array( 'class' => 'prefsection' ) );
 79+ // Uncomment when we have multiple logs
 80+ //$htmlOut .= Xml::openElement( 'fieldset', array( 'class' => 'prefsection' ) );
7881
79 - $htmlOut .= Xml::tags( 'p', null,
80 - '<i>Coming soon...</i>'
81 - );
 82+ // Show paginated list of log entries
 83+ $htmlOut .= Xml::tags( 'div',
 84+ array( 'class' => 'cn-pager' ),
 85+ $pager->getNavigationBar() );
 86+ $htmlOut .= $pager->getBody();
 87+ $htmlOut .= Xml::tags( 'div',
 88+ array( 'class' => 'cn-pager' ),
 89+ $pager->getNavigationBar() );
8290
8391 // End log fieldset
8492 $htmlOut .= Xml::closeElement( 'fieldset' );
@@ -86,3 +94,307 @@
8795 }
8896
8997 }
 98+
 99+class CentralNoticeLogPager extends ReverseChronologicalPager {
 100+ var $viewPage, $special;
 101+
 102+ function __construct( $special ) {
 103+ $this->special = $special;
 104+ parent::__construct();
 105+
 106+ // Override paging defaults
 107+ list( $this->mLimit, /* $offset */ ) = $this->mRequest->getLimitOffset( 20, '' );
 108+ $this->mLimitsShown = array( 20, 50, 100 );
 109+
 110+ $this->viewPage = SpecialPage::getTitleFor( 'CentralNotice' );
 111+ }
 112+
 113+ /**
 114+ * Sort the log list by timestamp
 115+ */
 116+ function getIndexField() {
 117+ return 'notlog_timestamp';
 118+ }
 119+
 120+ /**
 121+ * Pull log entries from the database
 122+ */
 123+ function getQueryInfo() {
 124+ return array(
 125+ 'tables' => array( 'cn_notice_log' ),
 126+ 'fields' => '*',
 127+ );
 128+ }
 129+
 130+ /**
 131+ * Generate the content of each table row (1 row = 1 log entry)
 132+ */
 133+ function formatRow( $row ) {
 134+ global $wgLang, $wgExtensionAssetsPath;
 135+
 136+ // Create a user object so we can pull the name, user page, etc.
 137+ $loggedUser = User::newFromId( $row->notlog_user_id );
 138+ // Create the user page link
 139+ $userLink = $this->getSkin()->makeLinkObj( $loggedUser->getUserPage(),
 140+ $loggedUser->getName() );
 141+ $userTalkLink = $this->getSkin()->makeLinkObj( $loggedUser->getTalkPage(),
 142+ wfMsg ( 'centralnotice-talk-link' ) );
 143+
 144+ // Create the campaign link
 145+ $campaignLink = $this->getSkin()->makeLinkObj( $this->viewPage,
 146+ htmlspecialchars( $row->notlog_not_name ),
 147+ 'method=listNoticeDetail&notice=' . urlencode( $row->notlog_not_name ) );
 148+
 149+ // Begin log entry primary row
 150+ $htmlOut = Xml::openElement( 'tr' );
 151+
 152+ $htmlOut .= Xml::openElement( 'td', array( 'valign' => 'top' ) );
 153+ if ( $row->notlog_action !== 'removed' ) {
 154+ $htmlOut .= '<a href="javascript:toggleDisplay(\''.$row->notlog_id.'\')">'.
 155+ '<img src="'.$wgExtensionAssetsPath.'/CentralNotice/collapsed.png" id="cn-collapsed-'.$row->notlog_id.'" style="display:block;vertical-align:baseline;"/>'.
 156+ '<img src="'.$wgExtensionAssetsPath.'/CentralNotice/uncollapsed.png" id="cn-uncollapsed-'.$row->notlog_id.'" style="display:none;vertical-align:baseline;"/>'.
 157+ '</a>';
 158+ }
 159+ $htmlOut .= Xml::closeElement( 'td' );
 160+ $htmlOut .= Xml::tags( 'td', array( 'valign' => 'top', 'class' => 'primary' ),
 161+ $wgLang->date( $row->notlog_timestamp ) . ' ' . $wgLang->time( $row->notlog_timestamp )
 162+ );
 163+ $htmlOut .= Xml::tags( 'td', array( 'valign' => 'top', 'class' => 'primary' ),
 164+ wfMsg ( 'centralnotice-user-links', $userLink, $userTalkLink )
 165+ );
 166+ $htmlOut .= Xml::tags( 'td', array( 'valign' => 'top', 'class' => 'primary' ),
 167+ $row->notlog_action
 168+ );
 169+ $htmlOut .= Xml::tags( 'td', array( 'valign' => 'top', 'class' => 'primary' ),
 170+ $campaignLink
 171+ );
 172+ $htmlOut .= Xml::tags( 'td', array(),
 173+ '&nbsp;'
 174+ );
 175+
 176+ // End log entry primary row
 177+ $htmlOut .= Xml::closeElement( 'tr' );
 178+
 179+ if ( $row->notlog_action !== 'removed' ) {
 180+ // Begin log entry secondary row
 181+ $htmlOut .= Xml::openElement( 'tr', array( 'id' => 'cn-log-details-'.$row->notlog_id, 'style' => 'display:none;' ) );
 182+
 183+ $htmlOut .= Xml::tags( 'td', array( 'valign' => 'top' ),
 184+ '&nbsp;' // force a table cell in older browsers
 185+ );
 186+ $htmlOut .= Xml::openElement( 'td', array( 'valign' => 'top', 'colspan' => '5' ) );
 187+ if ( $row->notlog_action == 'created' ) {
 188+ $htmlOut .= $this->showInitialSettings( $row );
 189+ } else if ( $row->notlog_action == 'modified' ) {
 190+ $htmlOut .= $this->showChanges( $row );
 191+ }
 192+ $htmlOut .= Xml::closeElement( 'td' );
 193+
 194+ // End log entry primary row
 195+ $htmlOut .= Xml::closeElement( 'tr' );
 196+ }
 197+
 198+ return $htmlOut;
 199+ }
 200+
 201+ function showInitialSettings( $row ) {
 202+ global $wgLang;
 203+ $details = '';
 204+ $details .= wfMsg (
 205+ 'centralnotice-log-label',
 206+ wfMsg ( 'centralnotice-start-date' ),
 207+ $wgLang->date( $row->notlog_end_start ).' '.$wgLang->time( $row->notlog_end_start )
 208+ )."<br/>";
 209+ $details .= wfMsg (
 210+ 'centralnotice-log-label',
 211+ wfMsg ( 'centralnotice-end-date' ),
 212+ $wgLang->date( $row->notlog_end_end ).' '.$wgLang->time( $row->notlog_end_end )
 213+ )."<br/>";
 214+ $details .= wfMsg (
 215+ 'centralnotice-log-label',
 216+ wfMsg ( 'centralnotice-projects' ),
 217+ $row->notlog_end_projects
 218+ )."<br/>";
 219+ $language_count = count( explode ( ', ', $row->notlog_end_languages ) );
 220+ $languageList = '';
 221+ if ( $language_count > 15 ) {
 222+ $languageList = wfMsg ( 'centralnotice-multiple-languages', $language_count );
 223+ } elseif ( $language_count > 0 ) {
 224+ $languageList = $row->notlog_end_languages;
 225+ }
 226+ $details .= wfMsg (
 227+ 'centralnotice-log-label',
 228+ wfMsg ( 'centralnotice-languages' ),
 229+ $languageList
 230+ )."<br/>";
 231+ $details .= wfMsg (
 232+ 'centralnotice-log-label',
 233+ wfMsg ( 'centralnotice-geo' ),
 234+ ($row->notlog_end_geo ? 'on' : 'off')
 235+ )."<br/>";
 236+ if ( $row->notlog_end_geo ) {
 237+ $country_count = count( explode ( ', ', $row->notlog_end_countries ) );
 238+ $countryList = '';
 239+ if ( $country_count > 20 ) {
 240+ $countryList = wfMsg ( 'centralnotice-multiple-countries', $country_count );
 241+ } elseif ( $country_count > 0 ) {
 242+ $countryList = $row->notlog_end_countries;
 243+ }
 244+ $details .= wfMsg (
 245+ 'centralnotice-log-label',
 246+ wfMsg ( 'centralnotice-countries' ),
 247+ $countryList
 248+ )."<br/>";
 249+ }
 250+ return $details;
 251+ }
 252+
 253+ function showChanges( $row ) {
 254+ global $wgLang;
 255+ $details = '';
 256+ if ( $row->notlog_begin_start !== $row->notlog_end_start ) {
 257+ $details .= wfMsg (
 258+ 'centralnotice-log-label',
 259+ wfMsg ( 'centralnotice-start-date' ),
 260+ wfMsg (
 261+ 'centralnotice-changed',
 262+ $wgLang->date( $row->notlog_begin_start ).' '.$wgLang->time( $row->notlog_begin_start ),
 263+ $wgLang->date( $row->notlog_end_start ).' '.$wgLang->time( $row->notlog_end_start )
 264+ )
 265+ )."<br/>";
 266+ }
 267+ if ( $row->notlog_begin_end !== $row->notlog_end_end ) {
 268+ $details .= wfMsg (
 269+ 'centralnotice-log-label',
 270+ wfMsg ( 'centralnotice-end-date' ),
 271+ wfMsg (
 272+ 'centralnotice-changed',
 273+ $wgLang->date( $row->notlog_begin_end ).' '.$wgLang->time( $row->notlog_begin_end ),
 274+ $wgLang->date( $row->notlog_end_end ).' '.$wgLang->time( $row->notlog_end_end )
 275+ )
 276+ )."<br/>";
 277+ }
 278+ $details .= $this->testBooleanChange( 'enabled', $row );
 279+ $details .= $this->testBooleanChange( 'preferred', $row );
 280+ $details .= $this->testBooleanChange( 'locked', $row );
 281+ $details .= $this->testBooleanChange( 'geo', $row );
 282+ $details .= $this->testSetChange( 'projects', $row );
 283+ $details .= $this->testSetChange( 'languages', $row );
 284+ $details .= $this->testSetChange( 'countries', $row );
 285+ if ( $row->notlog_begin_banners !== $row->notlog_end_banners ) {
 286+ // Show changes to banner weights and assignment
 287+ $beginBannersObject = json_decode( $row->notlog_begin_banners );
 288+ $endBannersObject = json_decode( $row->notlog_end_banners );
 289+ $beginBanners = array();
 290+ $endBanners = array();
 291+ foreach( $beginBannersObject as $key => $weight ) {
 292+ $beginBanners[$key] = $key.' ('.$weight.')';
 293+ }
 294+ foreach( $endBannersObject as $key => $weight ) {
 295+ $endBanners[$key] = $key.' ('.$weight.')';
 296+ }
 297+ if ( $beginBanners ) {
 298+ $before = implode( ', ', $beginBanners );
 299+ } else {
 300+ $before = wfMsg ( 'centralnotice-no-assignments' );
 301+ }
 302+ if ( $endBanners ) {
 303+ $after = implode( ', ', $endBanners );
 304+ } else {
 305+ $after = wfMsg ( 'centralnotice-no-assignments' );
 306+ }
 307+ $details .= wfMsg (
 308+ 'centralnotice-log-label',
 309+ wfMsg ( 'centralnotice-templates' ),
 310+ wfMsg ( 'centralnotice-changed', $before, $after)
 311+ )."<br/>";
 312+ }
 313+ return $details;
 314+ }
 315+
 316+ private function testBooleanChange( $param, $row ) {
 317+ $result = '';
 318+ $beginField = 'notlog_begin_'.$param;
 319+ $endField = 'notlog_end_'.$param;
 320+ if ( $row->$beginField !== $row->$endField ) {
 321+ $result .= wfMsg (
 322+ 'centralnotice-log-label',
 323+ wfMsg ( 'centralnotice-'.$param ),
 324+ wfMsg (
 325+ 'centralnotice-changed',
 326+ ( $row->$beginField ? wfMsg ( 'centralnotice-on' ) : wfMsg ( 'centralnotice-off' ) ),
 327+ ( $row->$endField ? wfMsg ( 'centralnotice-on' ) : wfMsg ( 'centralnotice-off' ) )
 328+ )
 329+ )."<br/>";
 330+ }
 331+ return $result;
 332+ }
 333+
 334+ private function testSetChange( $param, $row ) {
 335+ $result = '';
 336+ $beginField = 'notlog_begin_'.$param;
 337+ $endField = 'notlog_end_'.$param;
 338+ if ( $row->$beginField !== $row->$endField ) {
 339+ $beginSet = array();
 340+ $endSet = array();
 341+ if ( $row->$beginField ) {
 342+ $beginSet = explode( ', ', $row->$beginField );
 343+ }
 344+ if ( $row->$endField ) {
 345+ $endSet = explode( ', ', $row->$endField );
 346+ }
 347+ $added = array_diff( $endSet, $beginSet );
 348+ $removed = array_diff( $beginSet, $endSet );
 349+ $differences = '';
 350+ if ( $added ) {
 351+ $differences .= wfMsg ( 'centralnotice-added', implode( ', ', $added ) );
 352+ if ( $removed ) $differences .= '; ';
 353+ }
 354+ if ( $removed ) {
 355+ $differences .= wfMsg ( 'centralnotice-removed', implode( ', ', $removed ) );
 356+ }
 357+ $result .= wfMsg (
 358+ 'centralnotice-log-label',
 359+ wfMsg ( 'centralnotice-'.$param ),
 360+ $differences
 361+ )."<br/>";
 362+ }
 363+ return $result;
 364+ }
 365+
 366+ /**
 367+ * Specify table headers
 368+ */
 369+ function getStartBody() {
 370+ $htmlOut = '';
 371+ $htmlOut .= Xml::openElement( 'table', array( 'id' => 'cn-campaign-logs', 'cellpadding' => 3 ) );
 372+ $htmlOut .= Xml::openElement( 'tr' );
 373+ $htmlOut .= Xml::element( 'th', array( 'style' => 'width: 20px;' ) );
 374+ $htmlOut .= Xml::element( 'th', array( 'align' => 'left', 'style' => 'width: 130px;' ),
 375+ wfMsg ( 'centralnotice-timestamp' )
 376+ );
 377+ $htmlOut .= Xml::element( 'th', array( 'align' => 'left', 'style' => 'width: 160px;' ),
 378+ wfMsg ( 'centralnotice-user' )
 379+ );
 380+ $htmlOut .= Xml::element( 'th', array( 'align' => 'left', 'style' => 'width: 100px;' ),
 381+ wfMsg ( 'centralnotice-action' )
 382+ );
 383+ $htmlOut .= Xml::element( 'th', array( 'align' => 'left', 'style' => 'width: 160px;' ),
 384+ wfMsg ( 'centralnotice-notice' )
 385+ );
 386+ $htmlOut .= Xml::tags( 'td', array(),
 387+ '&nbsp;'
 388+ );
 389+ $htmlOut .= Xml::closeElement( 'tr' );
 390+ return $htmlOut;
 391+ }
 392+
 393+ /**
 394+ * Close table
 395+ */
 396+ function getEndBody() {
 397+ $htmlOut = '';
 398+ $htmlOut .= Xml::closeElement( 'table' );
 399+ return $htmlOut;
 400+ }
 401+}
Index: branches/wmf/1.17wmf1/extensions/CentralNotice/centralnotice.css
@@ -57,6 +57,21 @@
5858 margin-left:1.6em;
5959 margin-right:1.6em;
6060 }
 61+#preferences table#cn-campaign-logs {
 62+ width: auto;
 63+}
 64+#preferences table#cn-campaign-logs td.primary {
 65+ background-color: #F0F0F0;
 66+}
 67+#preferences .cn-new-value {
 68+ color: #006400;
 69+}
 70+#preferences .cn-old-value {
 71+ color: #8B0000;
 72+}
 73+#preferences .cn-log-label {
 74+ font-weight: bold;
 75+}
6176
6277 /* Vector-specific definitions */
6378 body.skin-vector #preferences fieldset.prefsection {
Index: branches/wmf/1.17wmf1/extensions/CentralNotice/patches/patch-notice_logs.sql
@@ -1,34 +0,0 @@
2 -
3 -CREATE TABLE IF NOT EXISTS /*$wgDBprefix*/cn_notice_log (
4 - `notlog_id` int unsigned NOT NULL PRIMARY KEY auto_increment,
5 - `notlog_timestamp` binary(14) NOT NULL,
6 - `notlog_user_id` int unsigned NOT NULL,
7 - `notlog_action` enum('created','modified','removed') NOT NULL DEFAULT 'modified',
8 - `notlog_not_id` int unsigned NOT NULL,
9 - `notlog_begin_name` varchar(255),
10 - `notlog_end_name` varchar(255),
11 - `notlog_begin_projects` varchar(255),
12 - `notlog_end_projects` varchar(255),
13 - `notlog_begin_languages` text,
14 - `notlog_end_languages` text,
15 - `notlog_begin_countries` text,
16 - `notlog_end_countries` text,
17 - `notlog_begin_start` char(14),
18 - `notlog_end_start` char(14),
19 - `notlog_begin_end` char(14),
20 - `notlog_end_end` char(14),
21 - `notlog_begin_enabled` tinyint(1),
22 - `notlog_end_enabled` tinyint(1),
23 - `notlog_begin_preferred` tinyint(1),
24 - `notlog_end_preferred` tinyint(1),
25 - `notlog_begin_locked` tinyint(1),
26 - `notlog_end_locked` tinyint(1),
27 - `notlog_begin_geo` tinyint(1),
28 - `notlog_end_geo` tinyint(1),
29 - `notlog_begin_assignments` text,
30 - `notlog_end_assignments` text
31 -) /*$wgDBTableOptions*/;
32 -CREATE INDEX /*i*/notlog_timestamp ON /*_*/cn_notice_log (notlog_timestamp);
33 -CREATE INDEX /*i*/notlog_user_id ON /*_*/cn_notice_log (notlog_user_id, notlog_timestamp);
34 -CREATE INDEX /*i*/notlog_not_id ON /*_*/cn_notice_log (notlog_not_id, notlog_timestamp);
\ No newline at end of file
Index: branches/wmf/1.17wmf1/extensions/CentralNotice/patches/patch-notice_log.sql
@@ -0,0 +1,33 @@
 2+-- Update to allow for logging of changes to campaign settings.
 3+
 4+CREATE TABLE IF NOT EXISTS /*$wgDBprefix*/cn_notice_log (
 5+ `notlog_id` int unsigned NOT NULL PRIMARY KEY auto_increment,
 6+ `notlog_timestamp` binary(14) NOT NULL,
 7+ `notlog_user_id` int unsigned NOT NULL,
 8+ `notlog_action` enum('created','modified','removed') NOT NULL DEFAULT 'modified',
 9+ `notlog_not_id` int unsigned NOT NULL,
 10+ `notlog_not_name` varchar(255) DEFAULT NULL,
 11+ `notlog_begin_projects` varchar(255) DEFAULT NULL,
 12+ `notlog_end_projects` varchar(255) DEFAULT NULL,
 13+ `notlog_begin_languages` text,
 14+ `notlog_end_languages` text,
 15+ `notlog_begin_countries` text,
 16+ `notlog_end_countries` text,
 17+ `notlog_begin_start` char(14) DEFAULT NULL,
 18+ `notlog_end_start` char(14) DEFAULT NULL,
 19+ `notlog_begin_end` char(14) DEFAULT NULL,
 20+ `notlog_end_end` char(14) DEFAULT NULL,
 21+ `notlog_begin_enabled` tinyint(1) DEFAULT NULL,
 22+ `notlog_end_enabled` tinyint(1) DEFAULT NULL,
 23+ `notlog_begin_preferred` tinyint(1) DEFAULT NULL,
 24+ `notlog_end_preferred` tinyint(1) DEFAULT NULL,
 25+ `notlog_begin_locked` tinyint(1) DEFAULT NULL,
 26+ `notlog_end_locked` tinyint(1) DEFAULT NULL,
 27+ `notlog_begin_geo` tinyint(1) DEFAULT NULL,
 28+ `notlog_end_geo` tinyint(1) DEFAULT NULL,
 29+ `notlog_begin_banners` text,
 30+ `notlog_end_banners` text
 31+) /*$wgDBTableOptions*/;
 32+CREATE INDEX /*i*/notlog_timestamp ON /*_*/cn_notice_log (notlog_timestamp);
 33+CREATE INDEX /*i*/notlog_user_id ON /*_*/cn_notice_log (notlog_user_id, notlog_timestamp);
 34+CREATE INDEX /*i*/notlog_not_id ON /*_*/cn_notice_log (notlog_not_id, notlog_timestamp);
\ No newline at end of file
Property changes on: branches/wmf/1.17wmf1/extensions/CentralNotice/patches/patch-notice_log.sql
___________________________________________________________________
Added: svn:eol-style
135 + native
Property changes on: branches/wmf/1.17wmf1/extensions/CentralNotice/CentralNotice.sql
___________________________________________________________________
Modified: svn:mergeinfo
236 Merged /trunk/extensions/CentralNotice/CentralNotice.sql:r91368-92408
Index: branches/wmf/1.17wmf1/extensions/CentralNotice/collapsed.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: branches/wmf/1.17wmf1/extensions/CentralNotice/collapsed.png
___________________________________________________________________
Added: svn:mime-type
337 + application/octet-stream
Index: branches/wmf/1.17wmf1/extensions/CentralNotice/uncollapsed.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: branches/wmf/1.17wmf1/extensions/CentralNotice/uncollapsed.png
___________________________________________________________________
Added: svn:mime-type
438 + application/octet-stream
Index: branches/wmf/1.17wmf1/extensions/CentralNotice/CentralNotice.i18n.php
@@ -39,7 +39,9 @@
4040 'centralnotice-show-notices' => 'Show campaigns',
4141 'centralnotice-list-templates' => 'List banners',
4242 'centralnotice-multiple-projects' => 'Multiple ($1)',
43 - 'centralnotice-multiple-languages' => 'Multiple ($1)', 'centralnotice-all-projects' => 'All projects',
 43+ 'centralnotice-multiple-languages' => 'Multiple ($1)',
 44+ 'centralnotice-multiple-countries' => 'Multiple ($1)',
 45+ 'centralnotice-all-projects' => 'All projects',
4446 'centralnotice-language-listing' => '$1 - $2',
4547 'centralnotice-translations' => 'Translations',
4648 'centralnotice-translate-to' => 'Translate to',
@@ -131,7 +133,7 @@
132134 'centralnotice-banner-fundraising' => 'This is a fundraising banner',
133135 'centralnotice-banner-fundraising-help' => 'Create an anchor tag in the banner body with id="cn_fundraising_link" and enter one or more landing pages below, for example, "JimmyAppeal01". The href of the link will be constructed automatically.',
134136 'centralnotice-banner-landing-pages' => 'Landing pages (comma-separated):',
135 - 'centralnotice-geotargeted' => 'Geotargeted',
 137+ 'centralnotice-geo' => 'Geotargeted',
136138 'centralnotice-countries' => 'Countries',
137139 'centralnotice-allocation' => 'Allocation',
138140 'centralnotice-view-allocation' => 'View banner allocation',
@@ -146,6 +148,19 @@
147149 'centralnotice-preferred' => 'Preferred',
148150 'centralnotice-logs' => 'Logs',
149151 'centralnotice-view-logs' => 'View logs',
 152+ 'centralnotice-timestamp' => 'Timestamp',
 153+ 'centralnotice-user' => 'User',
 154+ 'centralnotice-action' => 'Action',
 155+ 'centralnotice-changed' => 'Changed from <span class="cn-old-value">$1</span> to <span class="cn-new-value">$2</span>',
 156+ 'centralnotice-on' => 'on',
 157+ 'centralnotice-off' => 'off',
 158+ 'centralnotice-added' => 'Added <span class="cn-new-value">$1</span>',
 159+ 'centralnotice-removed' => 'Removed <span class="cn-old-value">$1</span>',
 160+ 'centralnotice-banners-changed' => 'Banner assignments were changed',
 161+ 'centralnotice-no-assignments' => 'no banners assigned',
 162+ 'centralnotice-talk-link' => 'talk',
 163+ 'centralnotice-user-links' => '$1 ($2)',
 164+ 'centralnotice-log-label' => '<span class="cn-log-label">$1:</span> $2',
150165 );
151166
152167 /** Message documentation (Message documentation)
@@ -174,14 +189,22 @@
175190 'centralnotice-summary' => 'Used in Special:CentralNotice',
176191 'centralnotice-end-date' => '{{Identical|End date}}',
177192 'centralnotice-enabled' => '{{Identical|Enabled}}',
178 - 'centralnotice-modify' => '{{Identical|Submit}}',
 193+ 'centralnotice-modify' => 'Submit button on:
 194+* "change translation language" dialog box on [[m:Special:NoticeTemplate]]
 195+* "view banner allocation" on [[m:Special:BannerAllocation]]
 196+* any others?
 197+
 198+{{Identical|Submit}}',
179199 'centralnotice-save-banner' => 'Label for the submit button which saves a CentralNotice banner.',
180200 'centralnotice-preview' => '{{Identical|Preview}}',
181201 'centralnotice-nopreview' => '{{Identical|Nopreview}}',
182202 'centralnotice-remove' => '{{Identical|Remove}}',
183203 'centralnotice-translate-heading' => 'Fieldset label. $1 is a name of a template.',
 204+ 'centralnotice-manage' => 'Title of sub-page of [http://meta.wikimedia.org/wiki/Special:CentralNotice Manage Central Notice] special page.',
184205 'centralnotice-add' => '{{Identical|Add}}',
185 - 'centralnotice-multiple-languages' => '$1 is the number of languages in which the notice is available. It is always greater than 3. This message in the column "languages" in the table.',
 206+ 'centralnotice-multiple-languages' => '$1 is the number of languages in which the notice is available. It is always greater than 3. This message is in the column "languages" in the table.',
 207+ 'centralnotice-multiple-countries' => '$1 is the number of countries in which the notice is available.',
 208+ 'centralnotice-all-projects' => 'Data entry in the column "Projects" in the table on the [[m:Special:CentralNotice|Central Notice]] special page.',
186209 'centralnotice-language-listing' => 'A language listing for the language multi-select box. First parameter is the language code. Second parameter is the name of the language.',
187210 'centralnotice-translations' => '{{Identical|Translation}}',
188211 'centralnotice-translate' => '{{Identical|Translate}}',
@@ -209,15 +232,27 @@
210233 'centralnotice-insert' => '{{Identical|Insert}}',
211234 'centralnotice-hide-button' => 'See also {{msg|Centralnotice-expand-button}}.',
212235 'centralnotice-expand-button' => 'See also {{msg|Centralnotice-hide-button}}.',
213 - 'centralnotice-geotargeted' => 'Used to label a checkbox which activates geotargeting',
 236+ 'centralnotice-geo' => 'Used to label a checkbox which activates geotargeting',
 237+ 'centralnotice-allocation' => 'Tab for sub-page [[m:BannerAllocation|banner allocation]] to central notice special page.',
 238+ 'centralnotice-view-allocation' => 'Heading of dialog box on [[m:Special:BannerAllocation|banner allocation]] special page.',
 239+ 'centralnotice-allocation-instructions' => 'Dialog box instructions on [[m:Special:BannerAllocation|banner allocation]] special page.',
214240 'centralnotice-languages' => '{{Identical|Language}}',
215 - 'centralnotice-projects' => '{{Identical|Project}}',
 241+ 'centralnotice-projects' => 'Column heading of a table in the [http://meta.wikimedia.org/wiki/Special:CentralNotice Manage Central Notice] special page
 242+
 243+{{Identical|Project}}',
216244 'centralnotice-country' => '{{Identical|Country}}',
 245+ 'centralnotice-no-allocation' => 'Message for nil result to query on [[m:Special:BannerAllocation|banner allocation]] special page.',
217246 'centralnotice-allocation-description' => 'A description of the environment the allocation of which is being described.
218247 * $1 is the language code for the site (e.g "en").
219248 * $2 is the project name for the site (e.g. "wikipedia").
220249 * $3 is the country code (e.g. "US").',
221250 'centralnotice-logs' => 'Label for tab which displays a log of changes',
 251+ 'centralnotice-user' => '{{Identical|User}}',
 252+ 'centralnotice-action' => '{{Identical|Action}}',
 253+ 'centralnotice-no-assignments' => 'Appears in the middle of a sentence; should be all lower case.',
 254+ 'centralnotice-talk-link' => 'Link for user talk page; should be lower case.',
 255+ 'centralnotice-user-links' => '$1 is a link to the user page, $2 is a link to the user talk page.',
 256+ 'centralnotice-log-label' => '$1 is a label for a setting, $2 is the value of the setting (or changes to the setting)',
222257 );
223258
224259 /** Afrikaans (Afrikaans)
@@ -415,6 +450,7 @@
416451 'centralnotice' => 'مدير الإخطار المركزي',
417452 'noticetemplate' => 'إداري الإخطار المركزي',
418453 'bannerallocation' => 'أخطار الإداري المركزي',
 454+ 'centralnoticelogs' => 'إداري الإخطار المركزي',
419455 'right-centralnotice-admin' => 'أدر الإخطارات المركزية',
420456 'action-centralnotice-admin' => 'التحكم بالإعلانات المركزية',
421457 'centralnotice-desc' => 'يضيف إعلانا مركزيا للموقع',
@@ -532,7 +568,7 @@
533569 'centralnotice-banner-fundraising' => 'هذا هو شعار جمع التبرعات.',
534570 'centralnotice-banner-fundraising-help' => 'إنشاء علامة ارتساء في نص الشعار مع معرف = "cn_fundraising_link"، وقم بإدخال واحد أو أكثر الصفحات المقصودة أدناه، على سبيل المثال، "JimmyAppeal01". سيتم تعبيد href الارتباط تلقائياً.',
535571 'centralnotice-banner-landing-pages' => 'الصفحات المقصودة (مفصولة بفواصل) :',
536 - 'centralnotice-geotargeted' => 'الاستهداف الجغرافي',
 572+ 'centralnotice-geo' => 'الاستهداف الجغرافي',
537573 'centralnotice-countries' => 'الدول',
538574 'centralnotice-allocation' => 'تخصيص',
539575 'centralnotice-view-allocation' => 'موقع عرض الشعار',
@@ -546,6 +582,11 @@
547583 'centralnotice-documentwrite-error' => 'لا يمكن إستخدام التعبير document.write() في داخل الشعار.
548584 للحصول على مزيد من المعلومات راجع http://meta.wikimedia.org/wiki/Help:CentralNotice .',
549585 'centralnotice-preferred' => 'مفضل',
 586+ 'centralnotice-logs' => 'سجلات',
 587+ 'centralnotice-view-logs' => 'عرض السجلات',
 588+ 'centralnotice-timestamp' => 'طابع زمني',
 589+ 'centralnotice-user' => 'مستخدم',
 590+ 'centralnotice-action' => 'فعل',
550591 );
551592
552593 /** Aramaic (ܐܪܡܝܐ)
@@ -904,7 +945,7 @@
905946 'centralnotice-banner-type' => 'Баннер төрө:',
906947 'centralnotice-banner-hidable' => 'Статик/йәшерелеүсән',
907948 'centralnotice-banner-collapsible' => 'Төрөлөүсән',
908 - 'centralnotice-geotargeted' => 'Геобәйләнеш',
 949+ 'centralnotice-geo' => 'Геобәйләнеш',
909950 'centralnotice-countries' => 'Илдәр',
910951 'centralnotice-allocation' => 'Урынлашыу',
911952 'centralnotice-view-allocation' => 'Баннерҙарҙың урынлашыуын ҡарау',
@@ -920,6 +961,15 @@
921962 'centralnotice-preferred' => 'Өҫтөнлөк бирелгән',
922963 );
923964
 965+/** Bavarian (Boarisch)
 966+ * @author Mucalexx
 967+ */
 968+$messages['bar'] = array(
 969+ 'centralnotice-translate-to' => 'Ywersetzen auf',
 970+ 'centralnotice-translate' => 'Ywersetzen',
 971+ 'centralnotice-english' => 'Englisch',
 972+);
 973+
924974 /** Southern Balochi (بلوچی مکرانی)
925975 * @author Mostafadaneshvar
926976 */
@@ -996,6 +1046,7 @@
9971047 'centralnotice-list-templates' => 'Сьпіс паведамленьняў',
9981048 'centralnotice-multiple-projects' => 'некалькі ($1)',
9991049 'centralnotice-multiple-languages' => 'некалькі ($1)',
 1050+ 'centralnotice-multiple-countries' => 'Некалькі ($1)',
10001051 'centralnotice-all-projects' => 'Усе праекты',
10011052 'centralnotice-translations' => 'Пераклады',
10021053 'centralnotice-translate-to' => 'Пераклад на',
@@ -1087,7 +1138,7 @@
10881139 'centralnotice-banner-fundraising' => 'Гэта банэр для збору ахвяраваньняў',
10891140 'centralnotice-banner-fundraising-help' => 'Стварыце тэг спасылкі ў зьмесьце банэра з id="cn_fundraising_link" і пазначце адну ці некалькі мэтавых старонак, напрыклад, «JimmyAppeal01». Атрыбут href будзе створаны аўтаматычна.',
10901141 'centralnotice-banner-landing-pages' => 'Мэтавыя старонкі (праз коску):',
1091 - 'centralnotice-geotargeted' => 'Геаграфічная прывязка',
 1142+ 'centralnotice-geo' => 'Геаграфічная прывязка',
10921143 'centralnotice-countries' => 'Краіны',
10931144 'centralnotice-allocation' => 'Прызначэньне',
10941145 'centralnotice-view-allocation' => 'Паказаць разьмяшчэньне банэра',
@@ -1103,6 +1154,10 @@
11041155 'centralnotice-preferred' => 'Пажадана',
11051156 'centralnotice-logs' => 'Журналы падзеяў',
11061157 'centralnotice-view-logs' => 'Паказаць журнал падзеяў',
 1158+ 'centralnotice-timestamp' => 'Дата/час',
 1159+ 'centralnotice-user' => 'Удзельнік',
 1160+ 'centralnotice-action' => 'Дзеяньне',
 1161+ 'centralnotice-changed' => 'Зьмяніць з <span class="cn-old-value">$1</span> на <span class="cn-new-value">$2</span>',
11071162 );
11081163
11091164 /** Bulgarian (Български)
@@ -1298,7 +1353,7 @@
12991354 'centralnotice-banner-type' => 'ব্যানারের ধরন:',
13001355 'centralnotice-banner-hidable' => 'স্ট্যাটিক/লুকানোযোগ্য',
13011356 'centralnotice-banner-collapsible' => 'ভাঁজযোগ্য',
1302 - 'centralnotice-geotargeted' => 'স্থানাংকলক্ষ্য',
 1357+ 'centralnotice-geo' => 'স্থানাংকলক্ষ্য',
13031358 'centralnotice-countries' => 'দেশ',
13041359 'centralnotice-languages' => 'ভাষা',
13051360 'centralnotice-projects' => 'প্রকল্প',
@@ -1452,7 +1507,7 @@
14531508 'centralnotice-banner-fundraising' => "Ur giton dastum arc'hant eo hemañ",
14541509 'centralnotice-banner-fundraising-help' => 'Krouiñ ur valizenn eoriañ e-korf ar giton gant id = "cn_fundraising_link" ha merkit ur bajenn dal pe meur a hini a-is, da skouer, "JimmyAppeal01". Savet e vo href al liamm ent emgefre.',
14551510 'centralnotice-banner-landing-pages' => 'Pajennoù pal (dispartiet dre skejoù) :',
1456 - 'centralnotice-geotargeted' => "Geolec'hiet",
 1511+ 'centralnotice-geo' => "Geolec'hiet",
14571512 'centralnotice-countries' => 'Broioù',
14581513 'centralnotice-allocation' => 'Skorenn',
14591514 'centralnotice-view-allocation' => 'Gwelout skorenn ar giton',
@@ -1595,7 +1650,7 @@
15961651 'centralnotice-banner-fundraising' => 'Ovo je plakat za donacije',
15971652 'centralnotice-banner-fundraising-help' => 'Pravi oznaku za uklapanje u tijelo banera sa id="cn_fundraising_link" i unosi jedan ili više ciljnih članaka ispod, naprimjer, "JimmyAppeal01". Oznaka href za link će biti automatski napravljen.',
15981653 'centralnotice-banner-landing-pages' => 'Ciljne stranice (razdvojene zarezima):',
1599 - 'centralnotice-geotargeted' => 'Geociljano',
 1654+ 'centralnotice-geo' => 'Geociljano',
16001655 'centralnotice-countries' => 'Države',
16011656 'centralnotice-allocation' => 'Raspoređivanje',
16021657 'centralnotice-view-allocation' => 'Pogledaj dodjelu obavještenja',
@@ -1740,7 +1795,7 @@
17411796 'centralnotice-banner-type' => 'Tipus de pancarta:',
17421797 'centralnotice-banner-hidable' => 'Estàtic/Amagable',
17431798 'centralnotice-banner-collapsible' => 'Plegable',
1744 - 'centralnotice-geotargeted' => 'Geolocalitzat',
 1799+ 'centralnotice-geo' => 'Geolocalitzat',
17451800 'centralnotice-countries' => 'Països',
17461801 'centralnotice-allocation' => 'Assignació',
17471802 'centralnotice-view-allocation' => 'Veure la disposició de la pancarta',
@@ -1910,7 +1965,7 @@
19111966 'centralnotice-banner-fundraising' => 'Tohle je banner pro fundraising',
19121967 'centralnotice-banner-fundraising-help' => 'V těle banneru vytvořte odkaz s id="cn_fundraising_link" a níže zadejte jednu nebo více cílových stránek, například „JimmyAppeal01“. U odkazu se href vyplní automaticky.',
19131968 'centralnotice-banner-landing-pages' => 'Cílové stránky (oddělené čárkou):',
1914 - 'centralnotice-geotargeted' => 'Zeměpisně cílené',
 1969+ 'centralnotice-geo' => 'Zeměpisně cílené',
19151970 'centralnotice-countries' => 'Země',
19161971 'centralnotice-allocation' => 'Přidělení',
19171972 'centralnotice-view-allocation' => 'Zobrazit přidělení bannerů',
@@ -1933,7 +1988,7 @@
19341989 * @author Xxglennxx
19351990 */
19361991 $messages['cy'] = array(
1937 - 'centralnotice' => "Gweinyddu'r hysbysiad canolog",
 1992+ 'centralnotice' => 'Gweinyddu hysbysiadau canolog',
19381993 'noticetemplate' => "Gweinyddu'r hysbysiad canolog",
19391994 'bannerallocation' => "Gweinyddu'r hysbysiad canolog",
19401995 'right-centralnotice-admin' => 'Gweinyddu hysbysiadau canolog',
@@ -1945,7 +2000,7 @@
19462001 'centralnotice-notice-name' => "Enw'r hysbysiad",
19472002 'centralnotice-end-date' => 'Dyddiad y daw i ben',
19482003 'centralnotice-enabled' => 'Wedi ei alluogi',
1949 - 'centralnotice-modify' => 'Gosoder',
 2004+ 'centralnotice-modify' => 'Dangoser',
19502005 'centralnotice-save-banner' => 'Cadwer y baner',
19512006 'centralnotice-preview' => 'Rhagolwg',
19522007 'centralnotice-add-new' => 'Ychwanegu hysbysiad canolog newydd',
@@ -1959,6 +2014,9 @@
19602015 'centralnotice-add-template' => 'Ychwanegu nodyn',
19612016 'centralnotice-show-notices' => 'Dangos yr hysbysiadau',
19622017 'centralnotice-list-templates' => "Rhestru'r nodiadau",
 2018+ 'centralnotice-multiple-projects' => 'Nifer ($1)',
 2019+ 'centralnotice-multiple-languages' => 'Nifer ($1)',
 2020+ 'centralnotice-all-projects' => 'Pob prosiect',
19632021 'centralnotice-translations' => 'Cyfieithiadau',
19642022 'centralnotice-translate-to' => "Cyfieithu i'r",
19652023 'centralnotice-translate' => 'Cyfieithu',
@@ -1998,6 +2056,7 @@
19992057 'centralnotice-end-time' => 'Amser y daw i ben (UTC)',
20002058 'centralnotice-no-templates' => 'Ni chanfuwyd unrhyw faner.
20012059 Ychwanegwch rai!',
 2060+ 'centralnotice-available-templates' => 'Y baneri sydd ar gael',
20022061 'centralnotice-weights' => 'Pwysau',
20032062 'centralnotice-notice-is-locked' => "Mae'r hysbysiad wedi ei gloi.
20042063 Ni chaiff ei dynnu i ffwrdd",
@@ -2013,13 +2072,24 @@
20142073 'centralnotice-close-button' => 'Botwm cau',
20152074 'centralnotice-translate-button' => 'Cyswllt i annog cyfieithu',
20162075 'centralnotice-donate-button' => 'Botwm rhoi',
 2076+ 'centralnotice-banner-display' => 'Dangos i:',
20172077 'centralnotice-banner-anonymous' => 'Defnyddwyr anhysbys',
 2078+ 'centralnotice-banner-logged-in' => 'Defnyddwyr sydd wedi mewngofnodi',
 2079+ 'centralnotice-banner-fundraising' => 'Mae hwn yn faner codi arian',
20182080 'centralnotice-countries' => 'Gwledydd',
2019 - 'centralnotice-view-allocation' => 'Gweld dosbarthiad y faner',
 2081+ 'centralnotice-allocation' => 'Dyraniad',
 2082+ 'centralnotice-view-allocation' => 'Gweld dyraniad baneri',
 2083+ 'centralnotice-allocation-instructions' => 'Dewiswch y cyfuniad o feysydd yr hoffech weld dyraniad y baneri arno:',
20202084 'centralnotice-languages' => 'Ieithoedd',
 2085+ 'centralnotice-projects' => 'Prosiectau',
20212086 'centralnotice-country' => 'Gwlad',
 2087+ 'centralnotice-no-allocation' => 'Dim baneri wedi eu dyrannu.',
 2088+ 'centralnotice-allocation-description' => 'Dyraniad y baneri ar $1.$2 yn $3:',
20222089 'centralnotice-percentage' => 'Canran',
20232090 'centralnotice-preferred' => 'Gorau gennych',
 2091+ 'centralnotice-logs' => 'Logiau',
 2092+ 'centralnotice-view-logs' => 'Gweld y logiau',
 2093+ 'centralnotice-user' => 'Defnyddiwr',
20242094 );
20252095
20262096 /** Danish (Dansk)
@@ -2117,6 +2187,7 @@
21182188 * @author Metalhead64
21192189 * @author Purodha
21202190 * @author Raimond Spekking
 2191+ * @author Robby
21212192 * @author The Evil IP address
21222193 * @author Umherirrender
21232194 */
@@ -2151,6 +2222,7 @@
21522223 'centralnotice-list-templates' => 'Vorlagen auflisten',
21532224 'centralnotice-multiple-projects' => 'mehrere ($1)',
21542225 'centralnotice-multiple-languages' => 'mehrere ($1)',
 2226+ 'centralnotice-multiple-countries' => 'mehrere ($1)',
21552227 'centralnotice-all-projects' => 'Alle Projekte',
21562228 'centralnotice-translations' => 'Übersetzungen',
21572229 'centralnotice-translate-to' => 'Übersetzen in',
@@ -2242,7 +2314,7 @@
22432315 'centralnotice-banner-fundraising' => 'Dies ist ein Fundraisingbanner',
22442316 'centralnotice-banner-fundraising-help' => 'Ein Ankerelement im Korpus des Banners mit id="cn_fundraising_link" erstellen sowie eine oder mehrere Zielseiten, wie bspw. "JimmysAufruf01". Das href-Attribut des Links wird automatisch erstellt.',
22452317 'centralnotice-banner-landing-pages' => 'Zielseiten (durch Kommata getrennt):',
2246 - 'centralnotice-geotargeted' => 'Geo-anvisiert',
 2318+ 'centralnotice-geo' => 'Geo-anvisiert',
22472319 'centralnotice-countries' => 'Staaten',
22482320 'centralnotice-allocation' => 'Anordnung',
22492321 'centralnotice-view-allocation' => 'Anordnung der Vorlagen ansehen',
@@ -2258,6 +2330,17 @@
22592331 'centralnotice-preferred' => 'Bevorzugt',
22602332 'centralnotice-logs' => 'Logbücher',
22612333 'centralnotice-view-logs' => 'Logbücher ansehen',
 2334+ 'centralnotice-timestamp' => 'Zeitstempel',
 2335+ 'centralnotice-user' => 'Benutzer',
 2336+ 'centralnotice-action' => 'Aktion',
 2337+ 'centralnotice-changed' => 'Von <span class="cn-old-value">$1</span> zu <span class="cn-new-value">$2</span> geändert',
 2338+ 'centralnotice-on' => 'an',
 2339+ 'centralnotice-off' => 'aus',
 2340+ 'centralnotice-added' => '<span class="cn-new-value">$1</span> hinzugefügt',
 2341+ 'centralnotice-removed' => '<span class="cn-old-value">$1</span> entfernt',
 2342+ 'centralnotice-banners-changed' => 'Bannerzuordnungen wurden geändert',
 2343+ 'centralnotice-no-assignments' => 'keine Banner zugeordnet',
 2344+ 'centralnotice-talk-link' => 'Diskussion',
22622345 );
22632346
22642347 /** German (formal address) (‪Deutsch (Sie-Form)‬)
@@ -2478,7 +2561,7 @@
24792562 'centralnotice-banner-type' => 'Chórgojowy typ:',
24802563 'centralnotice-banner-hidable' => 'Statiski/Chowajobny',
24812564 'centralnotice-banner-collapsible' => 'Fałdujobny',
2482 - 'centralnotice-geotargeted' => 'Geolokalizěrowany',
 2565+ 'centralnotice-geo' => 'Geolokalizěrowany',
24832566 'centralnotice-countries' => 'Kraje',
24842567 'centralnotice-allocation' => 'Zrědowanje',
24852568 'centralnotice-view-allocation' => 'Zrědowanje banarja se woglědaś',
@@ -2629,7 +2712,7 @@
26302713 'centralnotice-banner-type' => 'Τύπος banner:',
26312714 'centralnotice-banner-hidable' => 'Στατικό / Αποκρύψιμο',
26322715 'centralnotice-banner-collapsible' => 'Πτυσσόμενο',
2633 - 'centralnotice-geotargeted' => 'Γεωγραφικά στοχοποιημένο',
 2716+ 'centralnotice-geo' => 'Γεωγραφικά στοχοποιημένο',
26342717 'centralnotice-countries' => 'Χώρες',
26352718 'centralnotice-allocation' => 'Κατανομή',
26362719 'centralnotice-view-allocation' => 'Δείτε κατανομή banner',
@@ -2768,7 +2851,7 @@
27692852 'centralnotice-banner-type' => 'Rubanda tipo:',
27702853 'centralnotice-banner-hidable' => 'Statika/Kaŝebla',
27712854 'centralnotice-banner-collapsible' => 'Maletendebla',
2772 - 'centralnotice-geotargeted' => 'Ŝalti geografian lokigadon',
 2855+ 'centralnotice-geo' => 'Ŝalti geografian lokigadon',
27732856 'centralnotice-countries' => 'Landoj',
27742857 'centralnotice-allocation' => 'Asigno',
27752858 'centralnotice-view-allocation' => 'Vidi asignon de reklamrubando',
@@ -2792,6 +2875,7 @@
27932876 * @author Imre
27942877 * @author Locos epraix
27952878 * @author McDutchie
 2879+ * @author Mor
27962880 * @author Muro de Aguas
27972881 * @author Peter17
27982882 * @author Remember the dot
@@ -2850,7 +2934,7 @@
28512935 No se ha añadido',
28522936 'centralnotice-notice-doesnt-exist' => 'La campaña no existe.',
28532937 'centralnotice-remove-notice-doesnt-exist' => 'La campaña no existe.
2854 -Nada que remover.',
 2938+Nada que eliminar.',
28552939 'centralnotice-banner-doesnt-exist' => 'La pancarta no existe.',
28562940 'centralnotice-template-still-bound' => 'La plantilla todavía está enlazada a un aviso.
28572941 No se borrará.',
@@ -2917,7 +3001,7 @@
29183002 'centralnotice-banner-hidable' => 'Estático/Ocultable',
29193003 'centralnotice-banner-collapsible' => 'Colapsable',
29203004 'centralnotice-banner-fundraising' => 'Esto es un anuncio de la campaña de recaudación de fondos',
2921 - 'centralnotice-geotargeted' => 'Geosegmentado',
 3005+ 'centralnotice-geo' => 'Geosegmentado',
29223006 'centralnotice-countries' => 'Países',
29233007 'centralnotice-allocation' => 'Asignación',
29243008 'centralnotice-view-allocation' => 'Asignación de visualización de pancarta',
@@ -3039,7 +3123,7 @@
30403124 'centralnotice-banner-logged-in' => 'Sisseloginud kasutajatele',
30413125 'centralnotice-banner-type' => 'Malli tüüp:',
30423126 'centralnotice-banner-collapsible' => 'Kokkulükatav',
3043 - 'centralnotice-geotargeted' => 'Kohamääranguga',
 3127+ 'centralnotice-geo' => 'Kohamääranguga',
30443128 'centralnotice-countries' => 'Riigid',
30453129 'centralnotice-allocation' => 'Ülesseadmine',
30463130 'centralnotice-view-allocation' => 'Mallide ülesseade vaatamine',
@@ -3242,7 +3326,7 @@
32433327 'centralnotice-banner-type' => 'نوع پرچم:',
32443328 'centralnotice-banner-hidable' => 'ایستا/نهفتنی',
32453329 'centralnotice-banner-collapsible' => 'متلاشی‌پذیر',
3246 - 'centralnotice-geotargeted' => 'دارای تخصیص جغرفیایی',
 3330+ 'centralnotice-geo' => 'دارای تخصیص جغرفیایی',
32473331 'centralnotice-countries' => 'کشورها',
32483332 'centralnotice-allocation' => 'تخصیص',
32493333 'centralnotice-view-allocation' => 'نمایش تخصیص آگهی',
@@ -3384,7 +3468,7 @@
33853469 'centralnotice-banner-type' => 'Bannerityyppi',
33863470 'centralnotice-banner-hidable' => 'Pysyvä/Piilotettava',
33873471 'centralnotice-banner-collapsible' => 'Piilotettava',
3388 - 'centralnotice-geotargeted' => 'Maantieteellisesti suunnattu',
 3472+ 'centralnotice-geo' => 'Maantieteellisesti suunnattu',
33893473 'centralnotice-countries' => 'Maat',
33903474 'centralnotice-allocation' => 'Jakaminen',
33913475 'centralnotice-view-allocation' => 'Näytä bannerin jakaminen',
@@ -3535,7 +3619,7 @@
35363620 'centralnotice-banner-fundraising' => "Il s'agit d'une bannière de levée de fonds",
35373621 'centralnotice-banner-fundraising-help' => 'Créer une balise d\'ancrage dans le corps de la bannière avec id = "cn_fundraising_link" et entrez un ou plusieurs pages de destination ci-dessous, par exemple, "JimmyAppeal01". Le href du lien sera construit automatiquement.',
35383622 'centralnotice-banner-landing-pages' => 'Pages de destination (séparées par des virgules):',
3539 - 'centralnotice-geotargeted' => 'Géolocalisé',
 3623+ 'centralnotice-geo' => 'Géolocalisé',
35403624 'centralnotice-countries' => 'Pays',
35413625 'centralnotice-allocation' => 'Allocation',
35423626 'centralnotice-view-allocation' => 'Voir la disposition de bannière',
@@ -3674,7 +3758,7 @@
36753759 'centralnotice-banner-type' => 'Tipo de baniére :',
36763760 'centralnotice-banner-hidable' => 'Statica / cachâbla',
36773761 'centralnotice-banner-collapsible' => 'Rèductibla',
3678 - 'centralnotice-geotargeted' => 'G·eolocalisâ',
 3762+ 'centralnotice-geo' => 'G·eolocalisâ',
36793763 'centralnotice-countries' => 'Payis',
36803764 'centralnotice-allocation' => 'Alocacion',
36813765 'centralnotice-view-allocation' => 'Vêre l’alocacion de baniére',
@@ -3686,6 +3770,8 @@
36873771 'centralnotice-allocation-description' => 'Alocacion de baniére por $1.$2 en $3 :',
36883772 'centralnotice-percentage' => 'Porcentâjo',
36893773 'centralnotice-preferred' => 'Prèferâ',
 3774+ 'centralnotice-logs' => 'Jornals',
 3775+ 'centralnotice-view-logs' => 'Vêre los jornals',
36903776 );
36913777
36923778 /** Irish (Gaeilge)
@@ -3820,7 +3906,7 @@
38213907 'centralnotice-banner-fundraising' => 'Este é un cartel da recadación de fondos',
38223908 'centralnotice-banner-fundraising-help' => 'Cree unha etiqueta de largo no corpo do cartel con id="cn_fundraising_link" e insira a continuación unha ou máis páxina de destino; por exemplo, "JimmyAppeal01". O parámetro href da ligazón construirase automaticamente.',
38233909 'centralnotice-banner-landing-pages' => 'Páxinas de destino (separadas por comas):',
3824 - 'centralnotice-geotargeted' => 'Localizado xeograficamente',
 3910+ 'centralnotice-geo' => 'Localizado xeograficamente',
38253911 'centralnotice-countries' => 'Países',
38263912 'centralnotice-allocation' => 'Asignación',
38273913 'centralnotice-view-allocation' => 'Ollar a asignación do modelo',
@@ -3983,7 +4069,7 @@
39844070 'centralnotice-banner-type' => 'Bannertyp:',
39854071 'centralnotice-banner-hidable' => 'Statisch/Uusbländbar',
39864072 'centralnotice-banner-collapsible' => 'Yyklappbar',
3987 - 'centralnotice-geotargeted' => 'Geo-aavisiert',
 4073+ 'centralnotice-geo' => 'Geo-aavisiert',
39884074 'centralnotice-countries' => 'Länder',
39894075 'centralnotice-allocation' => 'Zuewysig',
39904076 'centralnotice-view-allocation' => 'Aaornig vu dr Banner aaluege',
@@ -4036,6 +4122,7 @@
40374123 'centralnotice-list-templates' => 'רשימת תבניות',
40384124 'centralnotice-multiple-projects' => 'מרובים ($1)',
40394125 'centralnotice-multiple-languages' => 'מרובות ($1)',
 4126+ 'centralnotice-multiple-countries' => 'מרובות ($1)',
40404127 'centralnotice-all-projects' => 'כל המיזמים',
40414128 'centralnotice-translations' => 'תרגומים',
40424129 'centralnotice-translate-to' => 'תרגום ל',
@@ -4127,7 +4214,7 @@
41284215 'centralnotice-banner-fundraising' => 'זוהי כרזת התרמה',
41294216 'centralnotice-banner-fundraising-help' => 'נא ליצור תג עוגן בגוף הכּרזה עם id="cn_fundraising_link"‎ ולהזין דף נחיתה אחד או יותר בהמשך, למשל "JimmyAppeal01". ערך ה־href של הקישור ייבנה באופן אוטומטי.',
41304217 'centralnotice-banner-landing-pages' => 'דפי נחיתה (מופרדים בפסיקים):',
4131 - 'centralnotice-geotargeted' => 'ממוקד גאוגרפית',
 4218+ 'centralnotice-geo' => 'ממוקד גאוגרפית',
41324219 'centralnotice-countries' => 'מדינות',
41334220 'centralnotice-allocation' => 'הקצאה',
41344221 'centralnotice-view-allocation' => 'צפייה בהקצאת הבאנר',
@@ -4143,6 +4230,17 @@
41444231 'centralnotice-preferred' => 'מועדפת',
41454232 'centralnotice-logs' => 'יומנים',
41464233 'centralnotice-view-logs' => 'הצגת יומנים',
 4234+ 'centralnotice-timestamp' => 'חותם זמן',
 4235+ 'centralnotice-user' => 'משתמש',
 4236+ 'centralnotice-action' => 'פעולה',
 4237+ 'centralnotice-changed' => 'שונה מהערך <span class="cn-old-value">$1</span> לערך <span class="cn-new-value">$2</span>',
 4238+ 'centralnotice-on' => 'פעיל',
 4239+ 'centralnotice-off' => 'כבוי',
 4240+ 'centralnotice-added' => 'נוסף: <span class="cn-new-value">$1</span>',
 4241+ 'centralnotice-removed' => 'הוסר: <span class="cn-old-value">$1</span>',
 4242+ 'centralnotice-banners-changed' => 'הקצאות של כרזות שונו',
 4243+ 'centralnotice-no-assignments' => 'לא הוקצו כרזות',
 4244+ 'centralnotice-talk-link' => 'שיחה',
41474245 );
41484246
41494247 /** Hindi (हिन्दी)
@@ -4284,7 +4382,7 @@
42854383 'centralnotice-banner-type' => 'Tip obavijesti:',
42864384 'centralnotice-banner-hidable' => 'Statični/Dinamični',
42874385 'centralnotice-banner-collapsible' => 'Moguće sakriti',
4288 - 'centralnotice-geotargeted' => 'Geociljano',
 4386+ 'centralnotice-geo' => 'Geociljano',
42894387 'centralnotice-countries' => 'Države',
42904388 'centralnotice-allocation' => 'Dodjela',
42914389 'centralnotice-view-allocation' => 'Prikaži raspodjelu obavijesti',
@@ -4421,7 +4519,7 @@
44224520 'centralnotice-banner-type' => 'Chorhojowy typ:',
44234521 'centralnotice-banner-hidable' => 'Statiski/Chowajomny',
44244522 'centralnotice-banner-collapsible' => 'Fałdujomny',
4425 - 'centralnotice-geotargeted' => 'Geolokalizowany',
 4523+ 'centralnotice-geo' => 'Geolokalizowany',
44264524 'centralnotice-countries' => 'Kraje',
44274525 'centralnotice-allocation' => 'Přidźělenje',
44284526 'centralnotice-view-allocation' => 'Přidźělenje chorhoje sej wobhladać',
@@ -4560,7 +4658,7 @@
45614659 'centralnotice-banner-type' => 'Hirdetés típusa:',
45624660 'centralnotice-banner-hidable' => 'Statikus/elrejthető',
45634661 'centralnotice-banner-collapsible' => 'Becsukható',
4564 - 'centralnotice-geotargeted' => 'Célzás földrajzi hely szerint',
 4662+ 'centralnotice-geo' => 'Célzás földrajzi hely szerint',
45654663 'centralnotice-countries' => 'Országok',
45664664 'centralnotice-allocation' => 'Kiosztás',
45674665 'centralnotice-view-allocation' => 'Hirdetéskiosztás megtekintése',
@@ -4610,6 +4708,7 @@
46114709 'centralnotice-list-templates' => 'Listar bandieras',
46124710 'centralnotice-multiple-projects' => 'multiple ($1)',
46134711 'centralnotice-multiple-languages' => 'multiple ($1)',
 4712+ 'centralnotice-multiple-countries' => 'Multiple ($1)',
46144713 'centralnotice-all-projects' => 'Tote le projectos',
46154714 'centralnotice-translations' => 'Traductiones',
46164715 'centralnotice-translate-to' => 'Traducer in',
@@ -4701,7 +4800,7 @@
47024801 'centralnotice-banner-fundraising' => 'Isto es un bandiera de collecta de fundos',
47034802 'centralnotice-banner-fundraising-help' => 'Crea un etiquetta de ancora in le corpore del bandiera con id="cn_fundraising_link" e entra un o plus paginas de arrivata hic infra, per exemplo "AppelloJimmy01". Le "href" del ligamine essera construite automaticamente.',
47044803 'centralnotice-banner-landing-pages' => 'Paginas de arrivata (separate per commas):',
4705 - 'centralnotice-geotargeted' => 'Localisation geographic',
 4804+ 'centralnotice-geo' => 'Localisation geographic',
47064805 'centralnotice-countries' => 'Paises',
47074806 'centralnotice-allocation' => 'Allocation',
47084807 'centralnotice-view-allocation' => 'Vider allocation de bandieras',
@@ -4717,6 +4816,17 @@
47184817 'centralnotice-preferred' => 'Preferite',
47194818 'centralnotice-logs' => 'Registros',
47204819 'centralnotice-view-logs' => 'Vider registros',
 4820+ 'centralnotice-timestamp' => 'Data e hora',
 4821+ 'centralnotice-user' => 'Usator',
 4822+ 'centralnotice-action' => 'Action',
 4823+ 'centralnotice-changed' => 'Cambiate de <span class="cn-old-value">$1</span> a <span class="cn-new-value">$2</span>',
 4824+ 'centralnotice-on' => 'active',
 4825+ 'centralnotice-off' => 'inactive',
 4826+ 'centralnotice-added' => '<span class="cn-new-value">$1</span> addite',
 4827+ 'centralnotice-removed' => '<span class="cn-old-value">$1</span> removite',
 4828+ 'centralnotice-banners-changed' => 'Assignationes de bandieras ha essite cambiate',
 4829+ 'centralnotice-no-assignments' => 'nulle bandieras assignate',
 4830+ 'centralnotice-talk-link' => 'discussion',
47214831 );
47224832
47234833 /** Indonesian (Bahasa Indonesia)
@@ -4845,7 +4955,7 @@
48464956 'centralnotice-banner-type' => 'Jenis panji:',
48474957 'centralnotice-banner-hidable' => 'Statis/Dapat disembunyikan',
48484958 'centralnotice-banner-collapsible' => 'Dapat dibuka',
4849 - 'centralnotice-geotargeted' => 'Ditargetgeokan',
 4959+ 'centralnotice-geo' => 'Ditargetgeokan',
48504960 'centralnotice-countries' => 'Negara',
48514961 'centralnotice-allocation' => 'Alokasi',
48524962 'centralnotice-view-allocation' => 'Lihat alokasi pengumuman',
@@ -4883,7 +4993,7 @@
48844994 'centralnotice-project-name' => 'Áhà orürü',
48854995 'centralnotice-start-date' => 'Bìdó ubochi',
48864996 'centralnotice-message' => 'Ozi',
4887 - 'centralnotice-clone-name' => 'Áhà',
 4997+ 'centralnotice-clone-name' => 'Áhà:',
48884998 );
48894999
48905000 /** Ingush (ГІалгІай Ğalğaj)
@@ -4938,6 +5048,7 @@
49395049 'centralnotice' => 'Gestione avviso centralizzato',
49405050 'noticetemplate' => 'Gestione avviso centralizzato',
49415051 'bannerallocation' => 'Gestione avviso centralizzato',
 5052+ 'centralnoticelogs' => 'Gestione avviso centralizzato',
49425053 'right-centralnotice-admin' => 'Gestisce gli avvisi centralizzati',
49435054 'action-centralnotice-admin' => 'gestire gli avvisi centralizzati',
49445055 'centralnotice-desc' => 'Aggiunge un avviso centralizzato a inizio pagina (sitenotice)',
@@ -5038,6 +5149,7 @@
50395150 'centralnotice-banner-type' => 'Tipo banner:',
50405151 'centralnotice-banner-hidable' => 'Fisso/Nascondibile',
50415152 'centralnotice-banner-collapsible' => 'Contraibile',
 5153+ 'centralnotice-banner-fundraising' => 'Questo è un banner per la raccolta fondi',
50425154 'centralnotice-countries' => 'Paesi',
50435155 'centralnotice-languages' => 'Lingue',
50445156 'centralnotice-projects' => 'Progetti',
@@ -5046,6 +5158,15 @@
50475159 'centralnotice-documentwrite-error' => 'Non è possibile usare document.write() dentro un banner.
50485160 Vedi http://meta.wikimedia.org/wiki/Help:CentralNotice per maggiori informazioni.',
50495161 'centralnotice-preferred' => 'Preferito',
 5162+ 'centralnotice-logs' => 'Log',
 5163+ 'centralnotice-view-logs' => 'Vedi i log',
 5164+ 'centralnotice-timestamp' => 'Data e ora',
 5165+ 'centralnotice-user' => 'Utente',
 5166+ 'centralnotice-action' => 'Azione',
 5167+ 'centralnotice-changed' => 'Modificato da <span class="cn-old-value">$1</span> a <span class="cn-new-value">$2</span>',
 5168+ 'centralnotice-added' => 'Aggiunto <span class="cn-new-value">$1</span>',
 5169+ 'centralnotice-removed' => 'Rimosso <span class="cn-old-value">$1</span>',
 5170+ 'centralnotice-talk-link' => 'discussione',
50505171 );
50515172
50525173 /** Japanese (日本語)
@@ -5062,6 +5183,7 @@
50635184 'centralnotice' => '中央管理通知の管理',
50645185 'noticetemplate' => '中央管理通知の管理',
50655186 'bannerallocation' => '中央管理通知の管理',
 5187+ 'centralnoticelogs' => '中央管理通知管理',
50665188 'right-centralnotice-admin' => '中央管理通知の管理',
50675189 'action-centralnotice-admin' => '中央管理通知の管理',
50685190 'centralnotice-desc' => '中央管理のサイト通知を追加する',
@@ -5172,7 +5294,8 @@
51735295 'centralnotice-banner-type' => 'テンプレートの種類:',
51745296 'centralnotice-banner-hidable' => '固定/非表示可',
51755297 'centralnotice-banner-collapsible' => '折りたたみ',
5176 - 'centralnotice-geotargeted' => '対象地域',
 5298+ 'centralnotice-banner-fundraising' => 'これは資金調達のバナーです',
 5299+ 'centralnotice-geo' => '対象地域',
51775300 'centralnotice-countries' => '国',
51785301 'centralnotice-allocation' => '割り当て',
51795302 'centralnotice-view-allocation' => 'テンプレートの割り当てを表示',
@@ -5383,7 +5506,7 @@
53845507 'centralnotice-banner-type' => 'ბანერის ტიპი:',
53855508 'centralnotice-banner-hidable' => 'სტატიკური/დაფარული',
53865509 'centralnotice-banner-collapsible' => 'დასაკეცი',
5387 - 'centralnotice-geotargeted' => 'გეო-მიზნობრივი',
 5510+ 'centralnotice-geo' => 'გეო-მიზნობრივი',
53885511 'centralnotice-countries' => 'ქვეყნები',
53895512 'centralnotice-allocation' => 'განაწილება',
53905513 'centralnotice-view-allocation' => 'თარგების განაწილების ხილვა',
@@ -5485,7 +5608,7 @@
54865609 'centralnotice-banner-hidable' => 'នឹងថ្កល់/អាចលាក់បាន',
54875610 'centralnotice-banner-collapsible' => 'អាចបង្រួញបាន',
54885611 'centralnotice-banner-fundraising' => 'នេះជាបដាសំរាប់ឃោសនារៃអង្គាសប្រាក់',
5489 - 'centralnotice-geotargeted' => 'អាចកំនត់តំបន់សំរាប់បង្ហាញ',
 5612+ 'centralnotice-geo' => 'អាចកំនត់តំបន់សំរាប់បង្ហាញ',
54905613 'centralnotice-countries' => 'ប្រទេស',
54915614 'centralnotice-languages' => 'ភាសា',
54925615 'centralnotice-projects' => 'គំរោង',
@@ -5625,7 +5748,7 @@
56265749 'centralnotice-banner-type' => '배너 유형:',
56275750 'centralnotice-banner-hidable' => '정적/숨길 수 있음',
56285751 'centralnotice-banner-collapsible' => '접을 수 있음',
5629 - 'centralnotice-geotargeted' => '특정 지역을 대상으로 공지',
 5752+ 'centralnotice-geo' => '특정 지역을 대상으로 공지',
56305753 'centralnotice-countries' => '국가',
56315754 'centralnotice-allocation' => '배당',
56325755 'centralnotice-languages' => '언어',
@@ -5643,6 +5766,7 @@
56445767 'centralnotice' => 'Zentraal Nohreschte verwallde',
56455768 'noticetemplate' => 'Zentraal Nohreschte verwallde',
56465769 'bannerallocation' => 'Zentraal Nohreschte verwallde',
 5770+ 'centralnoticelogs' => 'Verwalldung vun de zentraal Nohreschte',
56475771 'right-centralnotice-admin' => 'Zentraal Nohreschte verwallde',
56485772 'action-centralnotice-admin' => 'zentraal Nohreschte ze verwallde',
56495773 'centralnotice-desc' => "Brengk en zentraale ''sitenotice'' en et wiki",
@@ -5669,6 +5793,7 @@
56705794 'centralnotice-list-templates' => 'Banner_Schablohne opleßte',
56715795 'centralnotice-multiple-projects' => 'etlijje ($1)',
56725796 'centralnotice-multiple-languages' => 'etlijje ($1)',
 5797+ 'centralnotice-multiple-countries' => 'etlijje ($1)',
56735798 'centralnotice-all-projects' => 'All Projäkte',
56745799 'centralnotice-language-listing' => '$1 — $2',
56755800 'centralnotice-translations' => 'Övversäzonge',
@@ -5760,7 +5885,10 @@
57615886 'centralnotice-banner-type' => 'De Zoot Banner_Schablohn:',
57625887 'centralnotice-banner-hidable' => 'Faß udder ußschaltbaa',
57635888 'centralnotice-banner-collapsible' => 'Enklappbaa',
5764 - 'centralnotice-geotargeted' => 'Met Koodinaate op de Ääd',
 5889+ 'centralnotice-banner-fundraising' => 'Dat es en Banner_Schablohn för noh Jeld ze froore',
 5890+ 'centralnotice-banner-fundraising-help' => 'Donn ene Anker en dä Banner_Schablohn ongerbrenge met <code lang="en">id="cn_fundraising_link"</code> un en Zielsigg udder mieh dovun, esu jät wi „Dem Jimmy-singe-Oproof-01“. E <code lang="en">href</code>-Kommando fö dä Lenk kriss De automattesch dobei jemaat.',
 5891+ 'centralnotice-banner-landing-pages' => 'Zielsigge för aanzekumme, med Kommas dozwesche',
 5892+ 'centralnotice-geo' => 'Met Koodinaate op de Ääd',
57655893 'centralnotice-countries' => 'Länder',
57665894 'centralnotice-allocation' => 'Verdeilong',
57675895 'centralnotice-view-allocation' => 'De Banner_Schablohne iehr Zohdeilong beloore',
@@ -5774,6 +5902,19 @@
57755903 'centralnotice-documentwrite-error' => 'Mer künne <code lang="en">document.write()</code> nit ennerhallef vun ene Banner_Schablohn bruche.
57765904 Loor op http://meta.wikimedia.org/wiki/Help:CentralNotice wann De mieh weße wells.',
57775905 'centralnotice-preferred' => 'Förjetrocke!',
 5906+ 'centralnotice-logs' => 'Logböcher',
 5907+ 'centralnotice-view-logs' => 'Logböcher aanloore',
 5908+ 'centralnotice-timestamp' => 'Dattum un Zick',
 5909+ 'centralnotice-user' => '{{ns:User}}',
 5910+ 'centralnotice-action' => 'Wat jedonn?',
 5911+ 'centralnotice-changed' => 'Vun <span class="cn-old-value">$1</span> op <span class="cn-new-value">$2</span> verändert.',
 5912+ 'centralnotice-on' => 'aan',
 5913+ 'centralnotice-off' => 'uß',
 5914+ 'centralnotice-added' => '<span class="cn-new-value">$1</span> dobei jedonn.',
 5915+ 'centralnotice-removed' => '<span class="cn-new-value">$1</span> fott jenumme.',
 5916+ 'centralnotice-banners-changed' => 'Banner_Schablohne woodte anders udder neu zohjedeilt',
 5917+ 'centralnotice-no-assignments' => 'Kein Banner_Schablohne zohjedeilt',
 5918+ 'centralnotice-talk-link' => 'klaafe',
57785919 );
57795920
57805921 /** Kurdish (Latin) (Kurdî (Latin))
@@ -5846,6 +5987,7 @@
58475988 'centralnotice-list-templates' => 'Lëscht vun de Banneren',
58485989 'centralnotice-multiple-projects' => 'méi ($1)',
58495990 'centralnotice-multiple-languages' => 'méi ($1)',
 5991+ 'centralnotice-multiple-countries' => 'Méi ($1)',
58505992 'centralnotice-all-projects' => 'All Projeten',
58515993 'centralnotice-translations' => 'Iwwersetzungen',
58525994 'centralnotice-translate-to' => 'Iwwersetzen op',
@@ -5935,7 +6077,7 @@
59366078 'centralnotice-banner-hidable' => 'Statesch/Ka verstoppt ginn',
59376079 'centralnotice-banner-collapsible' => 'Aklappbar',
59386080 'centralnotice-banner-fundraising' => "Dëst ass e Banner vun enger Campagne fir Don'en ze sammelen",
5939 - 'centralnotice-geotargeted' => 'Geografesch geziilt',
 6081+ 'centralnotice-geo' => 'Geografesch geziilt',
59406082 'centralnotice-countries' => 'Länner',
59416083 'centralnotice-allocation' => 'Dispositioun',
59426084 'centralnotice-view-allocation' => 'Dispositioun vum Banner weisen',
@@ -5950,6 +6092,15 @@
59516093 Kuckt http://meta.wikimedia.org/wiki/Help:CentralNotice fir méi Informatiounen.',
59526094 'centralnotice-preferred' => 'Am léiwsten',
59536095 'centralnotice-logs' => 'Logbicher',
 6096+ 'centralnotice-view-logs' => 'Logbicher weisen',
 6097+ 'centralnotice-timestamp' => 'Zäitstempel',
 6098+ 'centralnotice-user' => 'Benotzer',
 6099+ 'centralnotice-action' => 'Aktioun',
 6100+ 'centralnotice-on' => 'un',
 6101+ 'centralnotice-off' => 'aus',
 6102+ 'centralnotice-added' => '<span class="cn-new-value">$1</span> derbäigesat',
 6103+ 'centralnotice-removed' => '<span class="cn-old-value">$1</span> ewechgeholl',
 6104+ 'centralnotice-talk-link' => 'Diskussioun',
59546105 );
59556106
59566107 /** Lingua Franca Nova (Lingua Franca Nova)
@@ -6082,7 +6233,7 @@
60836234 'centralnotice-banner-type' => 'Vaantiep:',
60846235 'centralnotice-banner-hidable' => 'Statisch/verbergbaar',
60856236 'centralnotice-banner-collapsible' => 'inklapbaar',
6086 - 'centralnotice-geotargeted' => 'Geografische doele',
 6237+ 'centralnotice-geo' => 'Geografische doele',
60876238 'centralnotice-countries' => 'Lenj',
60886239 'centralnotice-allocation' => 'Toewiezing',
60896240 'centralnotice-view-allocation' => 'Betrach vaantoewiezing',
@@ -6168,7 +6319,7 @@
61696320 'centralnotice-banner-type' => 'Pranešimo tipas:',
61706321 'centralnotice-banner-hidable' => 'Statinis/Paslepiamas',
61716322 'centralnotice-banner-collapsible' => 'Sutraukiamas',
6172 - 'centralnotice-geotargeted' => 'Taikomas geografiškai',
 6323+ 'centralnotice-geo' => 'Taikomas geografiškai',
61736324 'centralnotice-countries' => 'Valstybės',
61746325 'centralnotice-languages' => 'Kalbos',
61756326 'centralnotice-projects' => 'Projektai',
@@ -6326,6 +6477,7 @@
63276478 'centralnotice-list-templates' => 'Наведи шаблони',
63286479 'centralnotice-multiple-projects' => 'повеќе ($1)',
63296480 'centralnotice-multiple-languages' => 'повеќе ($1)',
 6481+ 'centralnotice-multiple-countries' => 'Повеќе ($1)',
63306482 'centralnotice-all-projects' => 'Сите проекти',
63316483 'centralnotice-translations' => 'Преводи',
63326484 'centralnotice-translate-to' => 'Преведи на',
@@ -6417,7 +6569,7 @@
64186570 'centralnotice-banner-fundraising' => 'Ова е плакат за прибирање на средства',
64196571 'centralnotice-banner-fundraising-help' => 'Создајте ознака за вкотвување во содржината на плакатот со id="cn_fundraising_link" и внесете една или повеќе целни страници, како на пр. „JimmyAppeal01“. href на врската ќе се исконструира автоматски.',
64206572 'centralnotice-banner-landing-pages' => 'Целни страници (одделени со запирки):',
6421 - 'centralnotice-geotargeted' => 'Геобележано',
 6573+ 'centralnotice-geo' => 'Геобележано',
64226574 'centralnotice-countries' => 'Земји',
64236575 'centralnotice-allocation' => 'Распределба',
64246576 'centralnotice-view-allocation' => 'Преглед на распределбата на плакати',
@@ -6432,6 +6584,17 @@
64336585 'centralnotice-preferred' => 'Претпочитано',
64346586 'centralnotice-logs' => 'Дневници',
64356587 'centralnotice-view-logs' => 'Погл. дневници',
 6588+ 'centralnotice-timestamp' => 'Време и датум',
 6589+ 'centralnotice-user' => 'Корисник',
 6590+ 'centralnotice-action' => 'Дејство',
 6591+ 'centralnotice-changed' => 'Изменето од <span class="cn-old-value">$1</span> на <span class="cn-new-value">$2</span>',
 6592+ 'centralnotice-on' => 'вкл',
 6593+ 'centralnotice-off' => 'искл',
 6594+ 'centralnotice-added' => 'Додадено <span class="cn-new-value">$1</span>',
 6595+ 'centralnotice-removed' => 'Отстрането <span class="cn-old-value">$1</span>',
 6596+ 'centralnotice-banners-changed' => 'Задавањата на плакатите се изменети',
 6597+ 'centralnotice-no-assignments' => 'нема зададено плакати',
 6598+ 'centralnotice-talk-link' => 'разговор',
64366599 );
64376600
64386601 /** Malayalam (മലയാളം)
@@ -6469,8 +6632,9 @@
64706633 'centralnotice-list-templates' => 'ഫലകങ്ങൾ പട്ടികവത്കരിക്കുക',
64716634 'centralnotice-multiple-projects' => 'നിരവധി ($1)',
64726635 'centralnotice-multiple-languages' => 'നിരവധി ($1)',
 6636+ 'centralnotice-multiple-countries' => 'നിരവധി ($1)',
64736637 'centralnotice-all-projects' => 'എല്ലാ പദ്ധതികളും',
6474 - 'centralnotice-translations' => 'തർജ്ജമകൾ',
 6638+ 'centralnotice-translations' => 'പരിഭാഷകൾ',
64756639 'centralnotice-translate-to' => 'ഇതിലേയ്ക്ക് തർജ്ജമ ചെയ്യുക',
64766640 'centralnotice-translate' => 'തർജ്ജമ ചെയ്യുക',
64776641 'centralnotice-english' => 'ഇംഗ്ലീഷ്',
@@ -6559,7 +6723,7 @@
65606724 'centralnotice-banner-collapsible' => 'ചുരുക്കാവുന്നത്',
65616725 'centralnotice-banner-fundraising' => 'ഇത് ഫണ്ട്‌റൈസിങ് എഴുത്തുപട്ടയാണ്',
65626726 'centralnotice-banner-landing-pages' => 'എത്തിച്ചേരേണ്ട താളുകൾ (അങ്കുശത്താൽ വേർതിരിച്ച്):',
6563 - 'centralnotice-geotargeted' => 'ഭൂപ്രദേശങ്ങൾ ലക്ഷ്യമാക്കിയവ',
 6727+ 'centralnotice-geo' => 'ഭൂപ്രദേശങ്ങൾ ലക്ഷ്യമാക്കിയവ',
65646728 'centralnotice-countries' => 'രാജ്യങ്ങൾ',
65656729 'centralnotice-allocation' => 'വിന്യാസം',
65666730 'centralnotice-view-allocation' => 'എഴുത്തുപട്ടയ്ക്ക് അനുവദിച്ചിരിക്കുന്ന സ്ഥാനം കാണുക',
@@ -6575,6 +6739,15 @@
65766740 'centralnotice-preferred' => 'അഭിലഷണീയമായുള്ളത്',
65776741 'centralnotice-logs' => 'പ്രവർത്തനരേഖകൾ',
65786742 'centralnotice-view-logs' => 'പ്രവർത്തനരേഖകൾ കാണുക',
 6743+ 'centralnotice-timestamp' => 'സമയമുദ്ര',
 6744+ 'centralnotice-user' => 'ഉപയോക്താവ്',
 6745+ 'centralnotice-action' => 'നടപടി',
 6746+ 'centralnotice-changed' => '<span class="cn-old-value">$1</span> എന്നത് <span class="cn-new-value">$2</span> എന്നാക്കി മാറ്റിയിരിക്കുന്നു',
 6747+ 'centralnotice-on' => 'സജ്ജമാക്കുക',
 6748+ 'centralnotice-off' => 'പ്രവർത്തനരഹിതമാക്കുക',
 6749+ 'centralnotice-added' => '<span class="cn-new-value">$1</span> കൂട്ടിച്ചേർത്തിരിക്കുന്നു',
 6750+ 'centralnotice-removed' => '<span class="cn-old-value">$1</span> നീക്കം ചെയ്തിരിക്കുന്നു',
 6751+ 'centralnotice-talk-link' => 'സംവാദം',
65796752 );
65806753
65816754 /** Mongolian (Монгол)
@@ -6640,28 +6813,35 @@
66416814 $messages['ms'] = array(
66426815 'centralnotice' => 'Pentadbiran pemberitahuan pusat',
66436816 'noticetemplate' => 'Pentadbiran pemberitahuan pusat',
 6817+ 'bannerallocation' => 'Pentadbiran pemberitahuan pusat',
 6818+ 'centralnoticelogs' => 'Pentadbiran pemberitahuan pusat',
66446819 'right-centralnotice-admin' => 'Mengurus pemberitahuan pusat',
66456820 'action-centralnotice-admin' => 'mengurus pemberitahuan pusat',
6646 - 'centralnotice-desc' => 'Menambah pemberitahuan pusat',
6647 - 'centralnotice-summary' => 'Anda boleh menggunakan modul ini untuk menyunting pemberitahuan pusat yang disediakan. Anda juga boleh menambah atau membuang pemberitahuan yang lama.',
6648 - 'centralnotice-query' => 'Ubah suai pemberitahuan semasa',
6649 - 'centralnotice-notice-name' => 'Nama pemberitahuan',
 6821+ 'centralnotice-desc' => 'Menambahkan pemberitahuan pusat',
 6822+ 'centralnotice-summary' => 'Anda boleh menggunakan modul ini untuk menyunting pemberitahuan pusat yang disediakan.
 6823+Anda juga boleh menambahkan atau membuang pemberitahuan yang lama.',
 6824+ 'centralnotice-query' => 'Ubah suai kempen semasa',
 6825+ 'centralnotice-notice-name' => 'Nama kempen',
66506826 'centralnotice-end-date' => 'Tarikh tamat',
66516827 'centralnotice-enabled' => 'Dihidupkan',
66526828 'centralnotice-modify' => 'Serahkan',
 6829+ 'centralnotice-save-banner' => 'Simpan sepanduk',
66536830 'centralnotice-preview' => 'Pralihat',
66546831 'centralnotice-nopreview' => '(Tiada pralihat)',
6655 - 'centralnotice-add-new' => 'Tambah pemberitahuan pusat baru',
 6832+ 'centralnotice-add-new' => 'Tambahkan kempen baru',
66566833 'centralnotice-remove' => 'Buang',
66576834 'centralnotice-translate-heading' => 'Penterjemahan $1',
6658 - 'centralnotice-manage' => 'Urus pemberitahuan pusat',
 6835+ 'centralnotice-manage' => 'Urus kempen',
 6836+ 'centralnotice-manage-templates' => 'Urus sepanduk',
66596837 'centralnotice-add' => 'Tambahkan',
6660 - 'centralnotice-add-notice' => 'Tambah pemberitahuan',
 6838+ 'centralnotice-add-notice' => 'Tambahkan kempen',
 6839+ 'centralnotice-edit-notice' => 'Sunting kempen',
66616840 'centralnotice-add-template' => 'Tambah templat',
6662 - 'centralnotice-show-notices' => 'Papar pemberitahuan',
 6841+ 'centralnotice-show-notices' => 'Paparkan kempen',
66636842 'centralnotice-list-templates' => 'Senarai templat',
66646843 'centralnotice-multiple-projects' => 'Berbilang ($1)',
66656844 'centralnotice-multiple-languages' => 'Berbilang ($1)',
 6845+ 'centralnotice-multiple-countries' => 'Berbilang ($1)',
66666846 'centralnotice-all-projects' => 'Semua projek',
66676847 'centralnotice-translations' => 'Terjemahan',
66686848 'centralnotice-translate-to' => 'Terjemah',
@@ -6675,12 +6855,19 @@
66766856 'centralnotice-locked' => 'Dikunci',
66776857 'centralnotice-notice' => 'Kempen',
66786858 'centralnotice-notice-heading' => 'Kempen: $1',
6679 - 'centralnotice-notices' => 'Pemberitahuan',
6680 - 'centralnotice-notice-exists' => 'Pemberitahuan telah pun wujud dan tidak ditambah.',
6681 - 'centralnotice-template-exists' => 'Templat telah pun wujud dan tidak ditambah.',
 6859+ 'centralnotice-notices' => 'Kempen',
 6860+ 'centralnotice-notice-exists' => 'Kempen telah pun wujud.
 6861+Tidak boleh ditambahkan.',
 6862+ 'centralnotice-no-language' => 'Tiada bahasa dipilih untuk kempen. Tidak boleh ditambahkan.',
 6863+ 'centralnotice-no-project' => 'Tiada projek dipilih untuk kempen. Tidak boleh ditambahkan.',
 6864+ 'centralnotice-template-exists' => 'Sepanduk telah pun wujud.
 6865+Tidak boleh ditambahkan.',
66826866 'centralnotice-notice-doesnt-exist' => 'Kempen tidak wujud.',
 6867+ 'centralnotice-remove-notice-doesnt-exist' => 'Kempen tidak wujud.
 6868+Tiada apa untuk dibuang.',
66836869 'centralnotice-banner-doesnt-exist' => 'Sepanduk tak wujud.',
6684 - 'centralnotice-template-still-bound' => 'Templat masih digunakan untuk pemberitahuan dan tidak dibuang.',
 6870+ 'centralnotice-template-still-bound' => 'Sepanduk masih terikat dengan kempen.
 6871+Tidak boleh dibuang.',
66856872 'centralnotice-template-body' => 'Kandungan templat:',
66866873 'centralnotice-day' => 'Hari',
66876874 'centralnotice-year' => 'Tahun',
@@ -6712,6 +6899,7 @@
67136900 'centralnotice-number-uses' => 'Penggunaan',
67146901 'centralnotice-settings' => 'Tetapan',
67156902 'centralnotice-edit-template' => 'Sunting templat',
 6903+ 'centralnotice-edit-template-summary' => 'Untuk mencipta pesanan yang boleh disetempatkan, sertakan rentetan bertanda dalam tiga pasang tanda pendakap, cth. {{{jimbo-quote}}}.',
67166904 'centralnotice-message' => 'Pesanan',
67176905 'centralnotice-message-not-set' => 'Pesanan tidak ditetapkan',
67186906 'centralnotice-clone' => 'Salin',
@@ -6721,12 +6909,48 @@
67226910 'centralnotice-insert' => 'Masukkan: $1',
67236911 'centralnotice-hide-button' => 'Sorokkan pautan',
67246912 'centralnotice-collapse-button' => 'Lipat pautan',
6725 - 'centralnotice-expand-button' => 'Bentangkan pautan',
 6913+ 'centralnotice-expand-button' => 'Kembangkan pautan',
67266914 'centralnotice-close-button' => 'Butang tutup',
67276915 'centralnotice-translate-button' => 'Pautan bantu menterjemah',
 6916+ 'centralnotice-donate-button' => 'Butang derma',
 6917+ 'centralnotice-expanded-banner' => 'Sepanduk kembang',
 6918+ 'centralnotice-collapsed-banner' => 'Sepanduk terlipat',
 6919+ 'centralnotice-banner-display' => 'Paparkan ke:',
 6920+ 'centralnotice-banner-anonymous' => 'Pengguna tanpa nama',
 6921+ 'centralnotice-banner-logged-in' => 'Pengguna log masuk',
 6922+ 'centralnotice-banner-type' => 'Jenis sepanduk:',
 6923+ 'centralnotice-banner-hidable' => 'Statik/Boleh sorok',
 6924+ 'centralnotice-banner-collapsible' => 'Boleh lipat',
 6925+ 'centralnotice-banner-fundraising' => 'Ini ialah sepanduk pungut derma',
 6926+ 'centralnotice-banner-fundraising-help' => 'Cipta tag sauh dalam badan sepanduk dengan id="cn_fundraising_link" dan isikan satu atau lebih laman pendaratan di bawah, contohnya, "JimmyAppeal01". href pautan akan dibina secara automatik.',
 6927+ 'centralnotice-banner-landing-pages' => 'Laman pendaratan (diasingkan dengan tanda koma):',
 6928+ 'centralnotice-geo' => 'Digeosasar',
 6929+ 'centralnotice-countries' => 'Negara',
 6930+ 'centralnotice-allocation' => 'Peruntukan',
 6931+ 'centralnotice-view-allocation' => 'Lihat peruntukan sepanduk',
 6932+ 'centralnotice-allocation-instructions' => 'Pilih persekitaran yang mana anda ingin melihat peruntukan sepanduk:',
67286933 'centralnotice-languages' => 'Bahasa',
 6934+ 'centralnotice-projects' => 'Projek',
67296935 'centralnotice-country' => 'Negara',
 6936+ 'centralnotice-no-allocation' => 'Tiada sepanduk diperuntukkan.',
 6937+ 'centralnotice-allocation-description' => 'Peruntukan sepanduk untuk $1.$2 di $3:',
 6938+ 'centralnotice-percentage' => 'Peratusan',
 6939+ 'centralnotice-documentwrite-error' => 'document.write() tidak boleh digunakan di dalam sepanduk.
 6940+Rujuk http://meta.wikimedia.org/wiki/Help:CentralNotice untuk maklumat lanjut.',
67306941 'centralnotice-preferred' => 'Dipilih',
 6942+ 'centralnotice-logs' => 'Log',
 6943+ 'centralnotice-view-logs' => 'Lihat log',
 6944+ 'centralnotice-timestamp' => 'Cop masa',
 6945+ 'centralnotice-user' => 'Pengguna',
 6946+ 'centralnotice-action' => 'Tindakan',
 6947+ 'centralnotice-changed' => 'Ditukar dari <span class="cn-old-value">$1</span> ke <span class="cn-new-value">$2</span>',
 6948+ 'centralnotice-on' => 'buka',
 6949+ 'centralnotice-off' => 'tutup',
 6950+ 'centralnotice-added' => '<span class="cn-new-value">$1</span> ditambahkan',
 6951+ 'centralnotice-removed' => '<span class="cn-new-value">$1</span> dibuang',
 6952+ 'centralnotice-banners-changed' => 'Peruntukan sepanduk diubah',
 6953+ 'centralnotice-no-assignments' => 'tiada sepanduk yang diberikan',
 6954+ 'centralnotice-talk-link' => 'bincang',
67316955 );
67326956
67336957 /** Maltese (Malti)
@@ -6949,6 +7173,7 @@
69507174 'centralnotice-list-templates' => 'Sjablonen weergeven',
69517175 'centralnotice-multiple-projects' => 'meerdere ($1)',
69527176 'centralnotice-multiple-languages' => 'meerdere ($1)',
 7177+ 'centralnotice-multiple-countries' => 'Meerdere ($1)',
69537178 'centralnotice-all-projects' => 'Alle projecten',
69547179 'centralnotice-translations' => 'Vertalingen',
69557180 'centralnotice-translate-to' => 'Vertalen naar',
@@ -7041,7 +7266,7 @@
70427267 'centralnotice-banner-fundraising' => 'Dit is een fondsenwervingsbanner',
70437268 'centralnotice-banner-fundraising-help' => 'Maak een ankertag in de body van de banner met id="cn_fundraising_link" en voer hieronder een of meer bestemmingspagina\'s in, bijvoorbeeld "JimmyAppeal01". De href voor de verwijzing wordt automatisch geconstrueerd.',
70447269 'centralnotice-banner-landing-pages' => "Landingspagina's (kommagescheiden):",
7045 - 'centralnotice-geotargeted' => 'Geografische doelen',
 7270+ 'centralnotice-geo' => 'Geografische doelen',
70467271 'centralnotice-countries' => 'Landen',
70477272 'centralnotice-allocation' => 'Toewijzing',
70487273 'centralnotice-view-allocation' => 'Bannertoewijzing bekijken',
@@ -7057,6 +7282,17 @@
70587283 'centralnotice-preferred' => 'Voorkeur',
70597284 'centralnotice-logs' => 'Logboeken',
70607285 'centralnotice-view-logs' => 'Logboeken bekijken',
 7286+ 'centralnotice-timestamp' => 'Tijdstip',
 7287+ 'centralnotice-user' => 'Gebruiker',
 7288+ 'centralnotice-action' => 'Handeling',
 7289+ 'centralnotice-changed' => 'Gewijzigd van <span class="cn-old-value">$1</span> naar <span class="cn-new-value">$2</span>',
 7290+ 'centralnotice-on' => 'aan',
 7291+ 'centralnotice-off' => 'af',
 7292+ 'centralnotice-added' => '<span class="cn-new-value">$1</span> toegevoegd',
 7293+ 'centralnotice-removed' => '<span class="cn-old-value">$1</span> verwijderd',
 7294+ 'centralnotice-banners-changed' => 'Bannertoewijzingen zijn gewijzigd',
 7295+ 'centralnotice-no-assignments' => 'geen banners toegewezen',
 7296+ 'centralnotice-talk-link' => 'overleg',
70617297 );
70627298
70637299 /** Norwegian Nynorsk (‪Norsk (nynorsk)‬)
@@ -7266,7 +7502,7 @@
72677503 'centralnotice-banner-type' => 'Banner type:',
72687504 'centralnotice-banner-hidable' => 'Statisk/skjulbar',
72697505 'centralnotice-banner-collapsible' => 'Sammenleggbar',
7270 - 'centralnotice-geotargeted' => 'Geografisk målrettet',
 7506+ 'centralnotice-geo' => 'Geografisk målrettet',
72717507 'centralnotice-countries' => 'Land',
72727508 'centralnotice-allocation' => 'Tildeling',
72737509 'centralnotice-view-allocation' => 'Vis bannertildeling',
@@ -7471,6 +7707,7 @@
74727708 'centralnotice-list-templates' => 'Lista szablonów',
74737709 'centralnotice-multiple-projects' => 'wiele ($1)',
74747710 'centralnotice-multiple-languages' => 'wiele ($1)',
 7711+ 'centralnotice-multiple-countries' => 'Wiele ($1)',
74757712 'centralnotice-all-projects' => 'Wszystkie projekty',
74767713 'centralnotice-translations' => 'Tłumaczenia',
74777714 'centralnotice-translate-to' => 'Przetłumacz na',
@@ -7555,7 +7792,7 @@
75567793 'centralnotice-banner-fundraising' => 'Baner zbiórki pieniędzy',
75577794 'centralnotice-banner-fundraising-help' => 'Utwórz znacznik kotwicy w ciele banera z id="cn_fundraising_link" i wprowadź jedną lub więcej stron docelowych, na przykład "ApelJimmiego01". Dla linku href zostanie wygenerowane automatycznie.',
75587795 'centralnotice-banner-landing-pages' => 'Strony docelowe (rozdzielone przecinkami):',
7559 - 'centralnotice-geotargeted' => 'Geograficznie nakierowane',
 7796+ 'centralnotice-geo' => 'Geograficznie nakierowane',
75607797 'centralnotice-countries' => 'Kraje',
75617798 'centralnotice-allocation' => 'Przydział',
75627799 'centralnotice-view-allocation' => 'Zobacz przydziały dla banera',
@@ -7571,6 +7808,17 @@
75727809 'centralnotice-preferred' => 'Preferowany',
75737810 'centralnotice-logs' => 'Rejestr operacji',
75747811 'centralnotice-view-logs' => 'Rejestr odsłon',
 7812+ 'centralnotice-timestamp' => 'Data i czas',
 7813+ 'centralnotice-user' => 'Użytkownik',
 7814+ 'centralnotice-action' => 'Akcja',
 7815+ 'centralnotice-changed' => 'Zmieniono z <span class="cn-old-value">$1</span> na <span class="cn-new-value">$2</span>',
 7816+ 'centralnotice-on' => 'włączone',
 7817+ 'centralnotice-off' => 'wyłączone',
 7818+ 'centralnotice-added' => 'Dodano <span class="cn-new-value">$1</span>',
 7819+ 'centralnotice-removed' => 'Usunięto <span class="cn-old-value">$1</span>',
 7820+ 'centralnotice-banners-changed' => 'Zmieniono przydział banera',
 7821+ 'centralnotice-no-assignments' => 'brak przydzielonych banerów',
 7822+ 'centralnotice-talk-link' => 'dyskusja',
75757823 );
75767824
75777825 /** Piedmontese (Piemontèis)
@@ -7695,7 +7943,7 @@
76967944 'centralnotice-banner-type' => 'Sòrt ëd tilèt:',
76977945 'centralnotice-banner-hidable' => 'Stàtich/Stërmàbil',
76987946 'centralnotice-banner-collapsible' => 'Strenzìbil',
7699 - 'centralnotice-geotargeted' => 'Geolocalisà',
 7947+ 'centralnotice-geo' => 'Geolocalisà',
77007948 'centralnotice-countries' => 'Pais',
77017949 'centralnotice-allocation' => 'Alocassion',
77027950 'centralnotice-view-allocation' => 'Vëdde la disposission dël tilèt',
@@ -7800,8 +8048,9 @@
78018049 'centralnotice-add-template' => 'Adicionar um modelo',
78028050 'centralnotice-show-notices' => 'Mostrar avisos',
78038051 'centralnotice-list-templates' => 'Listar modelos',
7804 - 'centralnotice-multiple-projects' => 'múltiplas ($1)',
7805 - 'centralnotice-multiple-languages' => 'múltiplas ($1)',
 8052+ 'centralnotice-multiple-projects' => 'Múltiplos ($1)',
 8053+ 'centralnotice-multiple-languages' => 'Múltiplas ($1)',
 8054+ 'centralnotice-multiple-countries' => 'Múltiplos ($1)',
78068055 'centralnotice-all-projects' => 'Todos os projetos',
78078056 'centralnotice-translations' => 'Traduções',
78088057 'centralnotice-translate-to' => 'Traduzir para',
@@ -7819,7 +8068,7 @@
78208069 'centralnotice-notice-exists' => 'O aviso já existe.
78218070 Não será adicionado.',
78228071 'centralnotice-no-language' => 'Não foi seleccionada uma língua para o aviso centralizado. O aviso não será adicionado.',
7823 - 'centralnotice-no-project' => 'Nenhum projeto foi selecionado para a campanha. Não acrescentado.',
 8072+ 'centralnotice-no-project' => 'Não foi seleccionado um projecto para o aviso centralizado. O aviso não será adicionado.',
78248073 'centralnotice-template-exists' => 'O modelo já existe.
78258074 Não será adicionado.',
78268075 'centralnotice-notice-doesnt-exist' => 'O aviso não existe.',
@@ -7893,7 +8142,7 @@
78948143 'centralnotice-banner-fundraising' => 'Este é um modelo de angariação de fundos',
78958144 'centralnotice-banner-fundraising-help' => 'Crie uma âncora no corpo do modelo com id="cn_fundraising_link" e introduza abaixo uma ou mais páginas de destino. Por exemplo, "ApeloJimmy01". O parâmetro href do link será construído automaticamente.',
78968145 'centralnotice-banner-landing-pages' => 'Páginas de destino (separadas por vírgulas):',
7897 - 'centralnotice-geotargeted' => 'Com segmentação geográfica',
 8146+ 'centralnotice-geo' => 'Com segmentação geográfica',
78988147 'centralnotice-countries' => 'Países',
78998148 'centralnotice-allocation' => 'Atribuição',
79008149 'centralnotice-view-allocation' => 'Ver atribuição de modelos',
@@ -7909,6 +8158,17 @@
79108159 'centralnotice-preferred' => 'Preferido',
79118160 'centralnotice-logs' => 'Registos',
79128161 'centralnotice-view-logs' => 'Ver registos',
 8162+ 'centralnotice-timestamp' => 'Data e hora',
 8163+ 'centralnotice-user' => 'Utilizador',
 8164+ 'centralnotice-action' => 'Acção',
 8165+ 'centralnotice-changed' => 'Alterado de <span class="cn-old-value">$1</span> para <span class="cn-new-value">$2</span>',
 8166+ 'centralnotice-on' => 'activo',
 8167+ 'centralnotice-off' => 'inactivo',
 8168+ 'centralnotice-added' => '<span class="cn-new-value">$1</span> foi adicionado',
 8169+ 'centralnotice-removed' => '<span class="cn-old-value">$1</span> foi removido',
 8170+ 'centralnotice-banners-changed' => 'As atribuições de modelos foram alteradas',
 8171+ 'centralnotice-no-assignments' => 'não há modelos atribuídos',
 8172+ 'centralnotice-talk-link' => 'discussão',
79138173 );
79148174
79158175 /** Brazilian Portuguese (Português do Brasil)
@@ -7948,6 +8208,7 @@
79498209 'centralnotice-list-templates' => 'Listar modelos',
79508210 'centralnotice-multiple-projects' => 'múltiplas ($1)',
79518211 'centralnotice-multiple-languages' => 'múltiplas ($1)',
 8212+ 'centralnotice-multiple-countries' => 'Múltiplos ($1)',
79528213 'centralnotice-all-projects' => 'Todos os projetos',
79538214 'centralnotice-translations' => 'Traduções',
79548215 'centralnotice-translate-to' => 'Traduzir para',
@@ -8039,7 +8300,7 @@
80408301 'centralnotice-banner-fundraising' => 'Este é um banner de angariação de fundos',
80418302 'centralnotice-banner-fundraising-help' => 'Crie uma âncora no corpo do banner com id="cn_fundraising_link" e introduza abaixo uma ou mais páginas de destino. Por exemplo, "ApeloJimmy01". O parâmetro href do link será construído automaticamente.',
80428303 'centralnotice-banner-landing-pages' => 'Páginas de destino (separadas por vírgulas):',
8043 - 'centralnotice-geotargeted' => 'Localizado geograficamente',
 8304+ 'centralnotice-geo' => 'Localizado geograficamente',
80448305 'centralnotice-countries' => 'Países',
80458306 'centralnotice-allocation' => 'Atribuição',
80468307 'centralnotice-view-allocation' => 'Ver atribuição de modelos',
@@ -8055,6 +8316,17 @@
80568317 'centralnotice-preferred' => 'Preferido',
80578318 'centralnotice-logs' => 'Registros',
80588319 'centralnotice-view-logs' => 'Ver registros',
 8320+ 'centralnotice-timestamp' => 'Data e hora',
 8321+ 'centralnotice-user' => 'Usuário',
 8322+ 'centralnotice-action' => 'Ação',
 8323+ 'centralnotice-changed' => 'Alterado de <span class="cn-old-value">$1</span> para <span class="cn-new-value">$2</span>',
 8324+ 'centralnotice-on' => 'ativo',
 8325+ 'centralnotice-off' => 'inativo',
 8326+ 'centralnotice-added' => '<span class="cn-new-value">$1</span> foi adicionado',
 8327+ 'centralnotice-removed' => '<span class="cn-old-value">$1</span> foi removido',
 8328+ 'centralnotice-banners-changed' => 'As atribuições do banner foram alteradas',
 8329+ 'centralnotice-no-assignments' => 'não há banners atribuídos',
 8330+ 'centralnotice-talk-link' => 'discussão',
80598331 );
80608332
80618333 /** Quechua (Runa Simi)
@@ -8178,7 +8450,7 @@
81798451 'centralnotice-banner-type' => 'Unancha laya:',
81808452 'centralnotice-banner-hidable' => 'Ranuy/Pakana',
81818453 'centralnotice-banner-collapsible' => 'Thuñichina',
8182 - 'centralnotice-geotargeted' => 'Allpapacha taripanachasqa',
 8454+ 'centralnotice-geo' => 'Allpapacha taripanachasqa',
81838455 'centralnotice-countries' => 'Mama llaqtakuna',
81848456 'centralnotice-allocation' => 'Ñiqinchay',
81858457 'centralnotice-view-allocation' => 'Unancha ñiqinchayta qhaway',
@@ -8319,7 +8591,9 @@
83208592 'centralnotice-banner-type' => 'Tip banner:',
83218593 'centralnotice-banner-hidable' => 'Static/Ascuns',
83228594 'centralnotice-banner-collapsible' => 'Reductibil',
8323 - 'centralnotice-geotargeted' => 'Geolocalizat',
 8595+ 'centralnotice-banner-fundraising' => 'Acesta este un banner pentru strângerea de fonduri',
 8596+ 'centralnotice-banner-landing-pages' => 'Pagini de destinație (separate prin virgulă):',
 8597+ 'centralnotice-geo' => 'Geolocalizat',
83248598 'centralnotice-countries' => 'Țări',
83258599 'centralnotice-allocation' => 'Alocare',
83268600 'centralnotice-view-allocation' => 'Vedeți alocarea bannerului',
@@ -8327,10 +8601,16 @@
83288602 'centralnotice-projects' => 'Proiecte',
83298603 'centralnotice-country' => 'Țară',
83308604 'centralnotice-no-allocation' => 'Niciun banner alocat.',
 8605+ 'centralnotice-allocation-description' => 'Alocare de banner pentru $1.$2 în $3:',
83318606 'centralnotice-percentage' => 'Procentaj',
83328607 'centralnotice-documentwrite-error' => 'document.write() nu poate fi folosit într-un banner.
83338608 Vedeți http://meta.wikimedia.org/wiki/Help:CentralNotice pentru mai multe informații.',
83348609 'centralnotice-preferred' => 'Preferat',
 8610+ 'centralnotice-logs' => 'Jurnale',
 8611+ 'centralnotice-view-logs' => 'Vezi jurnale',
 8612+ 'centralnotice-timestamp' => 'Data și ora',
 8613+ 'centralnotice-user' => 'Utilizator',
 8614+ 'centralnotice-action' => 'Acțiune',
83358615 );
83368616
83378617 /** Tarandíne (Tarandíne)
@@ -8455,7 +8735,7 @@
84568736 'centralnotice-banner-type' => 'Tipe de banner:',
84578737 'centralnotice-banner-hidable' => 'Stateche/Scunnibbele',
84588738 'centralnotice-banner-collapsible' => 'Collassabbele',
8459 - 'centralnotice-geotargeted' => 'Geo referenziate',
 8739+ 'centralnotice-geo' => 'Geo referenziate',
84608740 'centralnotice-countries' => 'Paìse',
84618741 'centralnotice-allocation' => 'Allocazione',
84628742 'centralnotice-view-allocation' => "Visualizze l'assignazione d'u banner",
@@ -8602,7 +8882,7 @@
86038883 'centralnotice-banner-fundraising' => 'Это баннер сбора средств',
86048884 'centralnotice-banner-fundraising-help' => 'Создайте тег ссылки в тела баннера с id="cn_fundraising_link" и укажите ниже одну или несколько целевых страниц, например, «JimmyAppeal01». Поле HREF ссылки будет создано автоматически.',
86058885 'centralnotice-banner-landing-pages' => 'Целевые страницы (через запятую):',
8606 - 'centralnotice-geotargeted' => 'Геопривязка',
 8886+ 'centralnotice-geo' => 'Геопривязка',
86078887 'centralnotice-countries' => 'Страны',
86088888 'centralnotice-allocation' => 'Распределение',
86098889 'centralnotice-view-allocation' => 'Просмотр размещения баннеров',
@@ -8618,6 +8898,9 @@
86198899 'centralnotice-preferred' => 'Желательно',
86208900 'centralnotice-logs' => 'Журналы',
86218901 'centralnotice-view-logs' => 'Просмотр журналов',
 8902+ 'centralnotice-timestamp' => 'Дата/время',
 8903+ 'centralnotice-user' => 'Участник',
 8904+ 'centralnotice-action' => 'Действие',
86228905 );
86238906
86248907 /** Rusyn (Русиньскый)
@@ -8735,7 +9018,7 @@
87369019 'centralnotice-banner-type' => 'Тіп банера:',
87379020 'centralnotice-banner-hidable' => 'Статічный / Сховательный',
87389021 'centralnotice-banner-collapsible' => 'Зложытельный',
8739 - 'centralnotice-geotargeted' => 'Ґеоґрафічно цілене',
 9022+ 'centralnotice-geo' => 'Ґеоґрафічно цілене',
87409023 'centralnotice-countries' => 'Країны',
87419024 'centralnotice-allocation' => 'Придїлїня',
87429025 'centralnotice-view-allocation' => 'Зобразити придїлїня баверів',
@@ -8874,7 +9157,7 @@
88759158 'centralnotice-banner-hidable' => 'Статическэй / Кистэниллэр',
88769159 'centralnotice-banner-collapsible' => 'Кыччатыллар',
88779160 'centralnotice-banner-fundraising' => 'Харчы хомуйуу бааннера',
8878 - 'centralnotice-geotargeted' => 'Сиргэ баайыы',
 9161+ 'centralnotice-geo' => 'Сиргэ баайыы',
88799162 'centralnotice-countries' => 'Дойдулар',
88809163 'centralnotice-allocation' => 'Тарҕаныыта',
88819164 'centralnotice-view-allocation' => 'Бааннердар ханна баалларын көрүү',
@@ -9107,7 +9390,7 @@
91089391 'centralnotice-banner-type' => 'බැනර වර්ගය:',
91099392 'centralnotice-banner-hidable' => 'ස්ථිතික/සැඟවිය හැකි',
91109393 'centralnotice-banner-collapsible' => 'කුඩා කළ හැකි',
9111 - 'centralnotice-geotargeted' => 'භූමි එල්ල කළ (geotargeted)',
 9394+ 'centralnotice-geo' => 'භූමි එල්ල කළ (geotargeted)',
91129395 'centralnotice-countries' => 'රටවල්',
91139396 'centralnotice-allocation' => 'වෙන්කිරීම',
91149397 'centralnotice-view-allocation' => 'බැනරයේ වෙන්කිරීම පෙන්වන්න',
@@ -9233,7 +9516,7 @@
92349517 'centralnotice-banner-type' => 'Typ oznamu:',
92359518 'centralnotice-banner-hidable' => 'Statický/skrývateľný',
92369519 'centralnotice-banner-collapsible' => 'Zbaliteľný',
9237 - 'centralnotice-geotargeted' => 'Geograficky cielený',
 9520+ 'centralnotice-geo' => 'Geograficky cielený',
92389521 'centralnotice-countries' => 'Krajiny',
92399522 'centralnotice-allocation' => 'Alokácia',
92409523 'centralnotice-view-allocation' => 'Zobraziť alokáciu oznamu',
@@ -9283,6 +9566,7 @@
92849567 'centralnotice-list-templates' => 'Seznam pasic',
92859568 'centralnotice-multiple-projects' => 'več ($1)',
92869569 'centralnotice-multiple-languages' => 'več ($1)',
 9570+ 'centralnotice-multiple-countries' => 'Več ($1)',
92879571 'centralnotice-all-projects' => 'Vsi projekti',
92889572 'centralnotice-translations' => 'Prevodi',
92899573 'centralnotice-translate-to' => 'Prevedi v',
@@ -9374,7 +9658,7 @@
93759659 'centralnotice-banner-fundraising' => 'To je donatorska pasica',
93769660 'centralnotice-banner-fundraising-help' => 'Ustvarite sidrno oznako v telesu pasice z id="cn_fundraising_link" in spodaj vnesite eno ali več ciljnih strani, na primer "JimmyAppeal01". Celotna povezava bo ustvarjena samodejno.',
93779661 'centralnotice-banner-landing-pages' => 'Ciljne strani (ločene z vejicami):',
9378 - 'centralnotice-geotargeted' => 'Geociljano',
 9662+ 'centralnotice-geo' => 'Geociljano',
93799663 'centralnotice-countries' => 'Države',
93809664 'centralnotice-allocation' => 'Dodelitev',
93819665 'centralnotice-view-allocation' => 'Ogled dodelitve pasic',
@@ -9390,6 +9674,17 @@
93919675 'centralnotice-preferred' => 'Prednostno',
93929676 'centralnotice-logs' => 'Dnevniki',
93939677 'centralnotice-view-logs' => 'Ogled dnevnikov',
 9678+ 'centralnotice-timestamp' => 'Časovni žig',
 9679+ 'centralnotice-user' => 'Uporabnik',
 9680+ 'centralnotice-action' => 'Dejanje',
 9681+ 'centralnotice-changed' => 'Spremenjeno iz <span class="cn-old-value">$1</span> v <span class="cn-new-value">$2</span>',
 9682+ 'centralnotice-on' => 'vklopljeno',
 9683+ 'centralnotice-off' => 'izklopljeno',
 9684+ 'centralnotice-added' => 'Dodano <span class="cn-new-value">$1</span>',
 9685+ 'centralnotice-removed' => 'Odstranjeno <span class="cn-old-value">$1</span>',
 9686+ 'centralnotice-banners-changed' => 'Naloge pasice so spremenjene',
 9687+ 'centralnotice-no-assignments' => 'ni dodeljenih pasic',
 9688+ 'centralnotice-talk-link' => 'pogovor',
93949689 );
93959690
93969691 /** Albanian (Shqip)
@@ -9519,7 +9814,7 @@
95209815 'centralnotice-banner-fundraising' => 'Ky është një flamur për mbledhjen e fondeve',
95219816 'centralnotice-banner-fundraising-help' => 'Krijo një spirancë tag në trup flamurin me id = "cn_fundraising_link" dhe hyjnë në një apo më shumë faqe ulje më poshtë, për shembull, "JimmyAppeal01". Href e lidhjes do të ndërtohet automatikisht.',
95229817 'centralnotice-banner-landing-pages' => 'Faqet ulje (comma-ndarë):',
9523 - 'centralnotice-geotargeted' => 'Geo-objektiv',
 9818+ 'centralnotice-geo' => 'Geo-objektiv',
95249819 'centralnotice-countries' => 'Shtetet',
95259820 'centralnotice-allocation' => 'Rregullimi',
95269821 'centralnotice-view-allocation' => 'Shikoni rregullimin e Stampës',
@@ -9777,9 +10072,11 @@
977810073 * @author Cohan
977910074 * @author Fluff
978010075 * @author Lejonel
 10076+ * @author Lokal Profil
978110077 * @author M.M.S.
978210078 * @author Najami
978310079 * @author Tobulos1
 10080+ * @author WikiPhoenix
978410081 */
978510082 $messages['sv'] = array(
978610083 'centralnotice' => 'Centralmeddelande-administration',
@@ -9899,7 +10196,7 @@
990010197 'centralnotice-banner-type' => 'Bannertyp:',
990110198 'centralnotice-banner-hidable' => 'Statisk/gömbar',
990210199 'centralnotice-banner-collapsible' => 'Hopfällbar',
9903 - 'centralnotice-geotargeted' => 'Geografiskt fokuserat',
 10200+ 'centralnotice-geo' => 'Geografiskt fokuserat',
990410201 'centralnotice-countries' => 'Länder',
990510202 'centralnotice-allocation' => 'Tilldelning',
990610203 'centralnotice-view-allocation' => 'Visa bannertilldelning',
@@ -9913,6 +10210,15 @@
991410211 'centralnotice-documentwrite-error' => 'document.write() kan inte användas inom en banner.
991510212 Se http://meta.wikimedia.org/wiki/Help:CentralNotice för mer information.',
991610213 'centralnotice-preferred' => 'Föredragen',
 10214+ 'centralnotice-logs' => 'Loggar',
 10215+ 'centralnotice-view-logs' => 'Visa loggar',
 10216+ 'centralnotice-timestamp' => 'Tidsstämpel',
 10217+ 'centralnotice-user' => 'Användare',
 10218+ 'centralnotice-action' => 'Åtgärd',
 10219+ 'centralnotice-on' => 'på',
 10220+ 'centralnotice-off' => 'av',
 10221+ 'centralnotice-added' => 'Lade till <span class="cn-new-value">$1</span>',
 10222+ 'centralnotice-removed' => 'Tog bort <span class="cn-old-value">$1</span>',
991710223 );
991810224
991910225 /** Swahili (Kiswahili)
@@ -10511,7 +10817,7 @@
1051210818 'centralnotice-banner-type' => 'Banner görnüşi:',
1051310819 'centralnotice-banner-hidable' => 'Statik/Gizlenilýän',
1051410820 'centralnotice-banner-collapsible' => 'Düýrlenýän',
10515 - 'centralnotice-geotargeted' => 'Geo-bellikli',
 10821+ 'centralnotice-geo' => 'Geo-bellikli',
1051610822 'centralnotice-countries' => 'Ýurtlar',
1051710823 'centralnotice-allocation' => 'Ýerleşiş',
1051810824 'centralnotice-view-allocation' => 'Bannerleriň ýerleşişini görkez',
@@ -10642,7 +10948,7 @@
1064310949 'centralnotice-banner-type' => 'Uri ng bandera:',
1064410950 'centralnotice-banner-hidable' => 'Hindi tumitinag/Maitatago',
1064510951 'centralnotice-banner-collapsible' => 'Maititiklop',
10646 - 'centralnotice-geotargeted' => 'Puntiryang heograpiya',
 10952+ 'centralnotice-geo' => 'Puntiryang heograpiya',
1064710953 'centralnotice-countries' => 'Mga bansa',
1064810954 'centralnotice-allocation' => 'Paglalaan',
1064910955 'centralnotice-view-allocation' => 'Tingnan ang kabahagi ng bandera',
@@ -10790,7 +11096,7 @@
1079111097 'centralnotice-banner-type' => 'Afiş türü:',
1079211098 'centralnotice-banner-hidable' => 'Statik/Gizlenebilir',
1079311099 'centralnotice-banner-collapsible' => 'Daralabilir',
10794 - 'centralnotice-geotargeted' => 'Geo-hedefli',
 11100+ 'centralnotice-geo' => 'Geo-hedefli',
1079511101 'centralnotice-countries' => 'Ülkeler',
1079611102 'centralnotice-allocation' => 'Tahsis',
1079711103 'centralnotice-view-allocation' => 'Afiş tahsisini gör',
@@ -10913,7 +11219,7 @@
1091411220 'centralnotice-banner-type' => 'Өлгенең төре:',
1091511221 'centralnotice-banner-hidable' => 'Тикторышлы/ Ябылучан',
1091611222 'centralnotice-banner-collapsible' => 'Ябылучан',
10917 - 'centralnotice-geotargeted' => 'Геоялгану',
 11223+ 'centralnotice-geo' => 'Геоялгану',
1091811224 'centralnotice-countries' => 'Илләр',
1091911225 'centralnotice-allocation' => 'Таралу',
1092011226 'centralnotice-view-allocation' => 'Өлгеләрнең таралуын карау',
@@ -11080,7 +11386,7 @@
1108111387 'centralnotice-banner-type' => 'Тип банера:',
1108211388 'centralnotice-banner-hidable' => 'Статичний / Приховуваний',
1108311389 'centralnotice-banner-collapsible' => 'Що згортається',
11084 - 'centralnotice-geotargeted' => "Геоприв'язка",
 11390+ 'centralnotice-geo' => "Геоприв'язка",
1108511391 'centralnotice-countries' => 'Країни',
1108611392 'centralnotice-allocation' => 'Розподіл',
1108711393 'centralnotice-view-allocation' => 'Переглянути розміщення банера',
@@ -11214,7 +11520,7 @@
1121511521 'centralnotice-banner-type' => 'Tipo de banner:',
1121611522 'centralnotice-banner-hidable' => 'Statico/Che se sara',
1121711523 'centralnotice-banner-collapsible' => 'Che se sara',
11218 - 'centralnotice-geotargeted' => 'Geolocalisà',
 11524+ 'centralnotice-geo' => 'Geolocalisà',
1121911525 'centralnotice-countries' => 'Paesi',
1122011526 'centralnotice-allocation' => 'Alocassion',
1122111527 'centralnotice-view-allocation' => 'Varda la disposission dei banner',
@@ -11335,6 +11641,7 @@
1133611642 'centralnotice-list-templates' => 'Liệt kê các bảng',
1133711643 'centralnotice-multiple-projects' => 'đa ngữ ($1)',
1133811644 'centralnotice-multiple-languages' => 'đa ngữ ($1)',
 11645+ 'centralnotice-multiple-countries' => 'Đa quốc gia ($1)',
1133911646 'centralnotice-all-projects' => 'Tất cả các dự án',
1134011647 'centralnotice-language-listing' => '$1 – $2',
1134111648 'centralnotice-translations' => 'Bản dịch',
@@ -11416,7 +11723,7 @@
1141711724 'centralnotice-banner-fundraising' => 'Đây là một biểu ngữ gây quỹ',
1141811725 'centralnotice-banner-fundraising-help' => 'Tạo một thẻ neo trong phần chính của biểu ngữ có thuộc tính id="cn_fundraising_link" và nhập tên của ít nhất một trang đích ở dưới, thí dụ “JimmyAppeal01”. Thuộc tính href của liên kết sẽ được biên soạn tự động.',
1141911726 'centralnotice-banner-landing-pages' => 'Các trang đích (định giới bằng dấu phẩy):',
11420 - 'centralnotice-geotargeted' => 'Mục tiêu địa lý',
 11727+ 'centralnotice-geo' => 'Mục tiêu địa lý',
1142111728 'centralnotice-countries' => 'Quốc gia',
1142211729 'centralnotice-allocation' => 'Phân bổ',
1142311730 'centralnotice-view-allocation' => 'Xem cách phân phối bảng',
@@ -11432,6 +11739,17 @@
1143311740 'centralnotice-preferred' => 'Nổi bật hơn',
1143411741 'centralnotice-logs' => 'Nhật trình',
1143511742 'centralnotice-view-logs' => 'Xem nhật trình',
 11743+ 'centralnotice-timestamp' => 'Thời gian',
 11744+ 'centralnotice-user' => 'Người dùng',
 11745+ 'centralnotice-action' => 'Tác vụ',
 11746+ 'centralnotice-changed' => 'Thay đổi từ <span class="cn-old-value">$1</span> thành <span class="cn-new-value">$2</span>',
 11747+ 'centralnotice-on' => 'bật',
 11748+ 'centralnotice-off' => 'tắt',
 11749+ 'centralnotice-added' => 'Thêm <span class="cn-new-value">$1</span>',
 11750+ 'centralnotice-removed' => 'Gỡ <span class="cn-old-value">$1</span>',
 11751+ 'centralnotice-banners-changed' => 'Đã thay đổi các chỉ định biểu ngữ',
 11752+ 'centralnotice-no-assignments' => 'không chỉ định biểu ngữ',
 11753+ 'centralnotice-talk-link' => 'thảo luận',
1143611754 );
1143711755
1143811756 /** Volapük (Volapük)
@@ -11706,7 +12024,7 @@
1170712025 'centralnotice-settings' => '设置',
1170812026 'centralnotice-edit-template' => '编辑模板',
1170912027 'centralnotice-edit-template-summary' => '欲创建一个可本地化的消息,请用三对花括号分隔含连字符的字符串,例如{{{jimbo-quote}}}。',
11710 - 'centralnotice-message' => '消息',
 12028+ 'centralnotice-message' => '信息',
1171112029 'centralnotice-message-not-set' => '没有设置消息',
1171212030 'centralnotice-clone' => '建立副本',
1171312031 'centralnotice-clone-notice' => '创建一个模板的副本',
@@ -11729,7 +12047,7 @@
1173012048 'centralnotice-banner-collapsible' => '可收缩',
1173112049 'centralnotice-banner-fundraising' => '这是一个筹款横幅',
1173212050 'centralnotice-banner-landing-pages' => '登录页(逗号分隔):',
11733 - 'centralnotice-geotargeted' => '已地理定位的',
 12051+ 'centralnotice-geo' => '已地理定位的',
1173412052 'centralnotice-countries' => '国家',
1173512053 'centralnotice-allocation' => '配额',
1173612054 'centralnotice-view-allocation' => '察看横幅配额',
@@ -11872,7 +12190,7 @@
1187312191 'centralnotice-banner-type' => '橫幅類型:',
1187412192 'centralnotice-banner-hidable' => '靜態可隱藏',
1187512193 'centralnotice-banner-collapsible' => '可摺疊',
11876 - 'centralnotice-geotargeted' => '已地理定位的',
 12194+ 'centralnotice-geo' => '已地理定位的',
1187712195 'centralnotice-countries' => '國家',
1187812196 'centralnotice-allocation' => '分配',
1187912197 'centralnotice-view-allocation' => '查看橫幅分配',
Index: branches/wmf/1.17wmf1/extensions/CentralNotice/CentralNotice.db.php
@@ -118,13 +118,73 @@
119119
120120 return $notices;
121121 }
 122+
 123+ /*
 124+ * Return settings for a campaign
 125+ * @param $campaignName string: The name of the campaign
 126+ * @param $detailed boolean: Whether or not to include targeting and banner assignment info
 127+ * @return an array of settings
 128+ */
 129+ static function getCampaignSettings( $campaignName, $detailed = true ) {
 130+ global $wgCentralDBname;
 131+
 132+ $dbr = wfGetDB( DB_SLAVE, array(), $wgCentralDBname );
 133+
 134+ $campaign = array();
122135
 136+ // Get campaign info from database
 137+ $row = $dbr->selectRow( 'cn_notices',
 138+ array(
 139+ 'not_id',
 140+ 'not_start',
 141+ 'not_end',
 142+ 'not_enabled',
 143+ 'not_preferred',
 144+ 'not_locked',
 145+ 'not_geo'
 146+ ),
 147+ array( 'not_name' => $campaignName ),
 148+ __METHOD__
 149+ );
 150+ if ( $row ) {
 151+ $campaign = array(
 152+ 'start' => $row->not_start,
 153+ 'end' => $row->not_end,
 154+ 'enabled' => $row->not_enabled,
 155+ 'preferred' => $row->not_preferred,
 156+ 'locked' => $row->not_locked,
 157+ 'geo' => $row->not_geo
 158+ );
 159+ }
 160+
 161+ if ( $detailed ) {
 162+ $projects = CentralNotice::getNoticeProjects( $campaignName );
 163+ $languages = CentralNotice::getNoticeLanguages( $campaignName );
 164+ $geo_countries = CentralNotice::getNoticeCountries( $campaignName );
 165+ $campaign['projects'] = implode( ", ", $projects );
 166+ $campaign['languages'] = implode( ", ", $languages );
 167+ $campaign['countries'] = implode( ", ", $geo_countries );
 168+
 169+ $bannersIn = CentralNoticeDB::getCampaignBanners( $row->not_id );
 170+ $bannersOut = array();
 171+ // All we want are the banner names and weights
 172+ foreach ( $bannersIn as $key => $row ) {
 173+ $outKey = $bannersIn[$key]['name'];
 174+ $bannersOut[$outKey] = $bannersIn[$key]['weight'];
 175+ }
 176+ // Encode into a JSON string for storage
 177+ $campaign['banners'] = FormatJson::encode( $bannersOut );
 178+ }
 179+
 180+ return $campaign;
 181+ }
 182+
123183 /*
124184 * Given one or more campaign ids, return all banners bound to them
125185 * @param $campaigns An array of id numbers
126186 * @return a 2D array of banners with associated weights and settings
127187 */
128 - static function selectBannersAssigned( $campaigns ) {
 188+ static function getCampaignBanners( $campaigns ) {
129189 global $wgCentralDBname;
130190
131191 $dbr = wfGetDB( DB_SLAVE, array(), $wgCentralDBname );
@@ -170,6 +230,90 @@
171231 return $templates;
172232 }
173233
 234+ /**
 235+ * Lookup function for active banners under a given language/project/location. This function is
 236+ * called by SpecialBannerListLoader::getJsonList() in order to build the banner list JSON for
 237+ * each project.
 238+ * @return a 2D array of running banners with associated weights and settings
 239+ */
 240+ static function getBannersByTarget( $project, $language, $location = null ) {
 241+ global $wgCentralDBname;
 242+
 243+ $campaigns = array();
 244+ $dbr = wfGetDB( DB_SLAVE, array(), $wgCentralDBname );
 245+ $encTimestamp = $dbr->addQuotes( $dbr->timestamp() );
 246+
 247+ // Pull non-geotargeted campaigns
 248+ $campaignResults1 = $dbr->select(
 249+ array(
 250+ 'cn_notices',
 251+ 'cn_notice_projects',
 252+ 'cn_notice_languages'
 253+ ),
 254+ array(
 255+ 'not_id'
 256+ ),
 257+ array(
 258+ "not_start <= $encTimestamp",
 259+ "not_end >= $encTimestamp",
 260+ 'not_enabled = 1', // enabled
 261+ 'not_geo = 0', // not geotargeted
 262+ 'np_notice_id = cn_notices.not_id',
 263+ 'np_project' => $project,
 264+ 'nl_notice_id = cn_notices.not_id',
 265+ 'nl_language' => $language
 266+ ),
 267+ __METHOD__
 268+ );
 269+ foreach ( $campaignResults1 as $row ) {
 270+ $campaigns[] = $row->not_id;
 271+ }
 272+ if ( $location ) {
 273+
 274+ // Normalize location parameter (should be an uppercase 2-letter country code)
 275+ preg_match( '/[a-zA-Z][a-zA-Z]/', $location, $matches );
 276+ if ( $matches ) {
 277+ $location = strtoupper( $matches[0] );
 278+
 279+ // Pull geotargeted campaigns
 280+ $campaignResults2 = $dbr->select(
 281+ array(
 282+ 'cn_notices',
 283+ 'cn_notice_projects',
 284+ 'cn_notice_languages',
 285+ 'cn_notice_countries'
 286+ ),
 287+ array(
 288+ 'not_id'
 289+ ),
 290+ array(
 291+ "not_start <= $encTimestamp",
 292+ "not_end >= $encTimestamp",
 293+ 'not_enabled = 1', // enabled
 294+ 'not_geo = 1', // geotargeted
 295+ 'nc_notice_id = cn_notices.not_id',
 296+ 'nc_country' => $location,
 297+ 'np_notice_id = cn_notices.not_id',
 298+ 'np_project' => $project,
 299+ 'nl_notice_id = cn_notices.not_id',
 300+ 'nl_language' => $language
 301+ ),
 302+ __METHOD__
 303+ );
 304+ foreach ( $campaignResults2 as $row ) {
 305+ $campaigns[] = $row->not_id;
 306+ }
 307+ }
 308+ }
 309+
 310+ $templates = array();
 311+ if ( $campaigns ) {
 312+ // Pull all banners assigned to the campaigns
 313+ $templates = CentralNoticeDB::getCampaignBanners( $campaigns );
 314+ }
 315+ return $templates;
 316+ }
 317+
174318 /*
175319 * See if a given banner exists in the database
176320 */
Index: branches/wmf/1.17wmf1/extensions/CentralNotice/centralnotice.js
@@ -1,3 +1,17 @@
 2+function toggleDisplay( logId ) {
 3+ var thisCollapsed = document.getElementById( 'cn-collapsed-'+logId );
 4+ var thisUncollapsed = document.getElementById( 'cn-uncollapsed-'+logId );
 5+ var thisDetails = document.getElementById( 'cn-log-details-'+logId );
 6+ if ( thisCollapsed.style.display == "none" ) {
 7+ thisUncollapsed.style.display = "none";
 8+ thisCollapsed.style.display = "block";
 9+ thisDetails.style.display = "none";
 10+ } else {
 11+ thisCollapsed.style.display = "none";
 12+ thisUncollapsed.style.display = "block";
 13+ thisDetails.style.display = "table-row";
 14+ }
 15+}
216 function selectProjects( selectAll ) {
317 var selectBox = document.getElementById('projects[]');
418 var firstSelect = selectBox.options.length - 1;
Property changes on: branches/wmf/1.17wmf1/extensions/CentralNotice
___________________________________________________________________
Modified: svn:mergeinfo
519 Merged /trunk/extensions/CentralNotice:r91368-92408

Past revisions this follows-up on

RevisionCommit summaryAuthorDate
r91368Localisation updates for core and extension messages from translatewiki.net (...raymond20:52, 2 July 2011
r92408Localisation updates for core and extension messages from translatewiki.net (...raymond19:50, 17 July 2011

Status & tagging log