r95522 MediaWiki - Code Review archive

Repository:MediaWiki
Revision:r95521‎ | r95522 | r95523 >
Date:21:05, 25 August 2011
Author:awjrichards
Status:ok
Tags:
Comment:
copying from trunk r91487, r94856, r94187
Modified paths:
  • /branches/wmf/1.17wmf1/extensions/CentralNotice/CentralNoticeBannerLogPager.php (added) (history)
  • /branches/wmf/1.17wmf1/extensions/CentralNotice/CentralNoticeLogPager.php (added) (history)
  • /branches/wmf/1.17wmf1/extensions/CentralNotice/CentralNoticePager.php (added) (history)

Diff [purge]

Index: branches/wmf/1.17wmf1/extensions/CentralNotice/CentralNoticeBannerLogPager.php
@@ -0,0 +1,215 @@
 2+<?php
 3+
 4+class CentralNoticeBannerLogPager extends CentralNoticeLogPager {
 5+ var $viewPage, $special;
 6+
 7+ function __construct( $special ) {
 8+ $this->special = $special;
 9+ parent::__construct($special);
 10+
 11+ $this->viewPage = SpecialPage::getTitleFor( 'NoticeTemplate', 'view' );
 12+ }
 13+
 14+ /**
 15+ * Sort the log list by timestamp
 16+ */
 17+ function getIndexField() {
 18+ return 'tmplog_timestamp';
 19+ }
 20+
 21+ /**
 22+ * Pull log entries from the database
 23+ */
 24+ function getQueryInfo() {
 25+ return array(
 26+ 'tables' => array( 'cn_template_log' ),
 27+ 'fields' => '*',
 28+ );
 29+ }
 30+
 31+ /**
 32+ * Generate the content of each table row (1 row = 1 log entry)
 33+ */
 34+ function formatRow( $row ) {
 35+ global $wgLang, $wgExtensionAssetsPath;
 36+
 37+ // Create a user object so we can pull the name, user page, etc.
 38+ $loggedUser = User::newFromId( $row->tmplog_user_id );
 39+ // Create the user page link
 40+ $userLink = $this->getSkin()->makeLinkObj( $loggedUser->getUserPage(),
 41+ $loggedUser->getName() );
 42+ $userTalkLink = $this->getSkin()->makeLinkObj( $loggedUser->getTalkPage(),
 43+ wfMsg ( 'centralnotice-talk-link' ) );
 44+
 45+ // Create the banner link
 46+ $bannerLink = $this->getSkin()->makeLinkObj( $this->viewPage,
 47+ htmlspecialchars( $row->tmplog_template_name ),
 48+ 'template=' . urlencode( $row->tmplog_template_name ) );
 49+
 50+ // Begin log entry primary row
 51+ $htmlOut = Xml::openElement( 'tr' );
 52+
 53+ $htmlOut .= Xml::openElement( 'td', array( 'valign' => 'top' ) );
 54+ if ( $row->tmplog_action !== 'removed' ) {
 55+ $htmlOut .= '<a href="javascript:toggleDisplay(\''.$row->tmplog_id.'\')">'.
 56+ '<img src="'.$wgExtensionAssetsPath.'/CentralNotice/collapsed.png" id="cn-collapsed-'.$row->tmplog_id.'" style="display:block;vertical-align:baseline;"/>'.
 57+ '<img src="'.$wgExtensionAssetsPath.'/CentralNotice/uncollapsed.png" id="cn-uncollapsed-'.$row->tmplog_id.'" style="display:none;vertical-align:baseline;"/>'.
 58+ '</a>';
 59+ }
 60+ $htmlOut .= Xml::closeElement( 'td' );
 61+ $htmlOut .= Xml::tags( 'td', array( 'valign' => 'top', 'class' => 'primary' ),
 62+ $wgLang->date( $row->tmplog_timestamp ) . ' ' . $wgLang->time( $row->tmplog_timestamp )
 63+ );
 64+ $htmlOut .= Xml::tags( 'td', array( 'valign' => 'top', 'class' => 'primary' ),
 65+ wfMsg ( 'centralnotice-user-links', $userLink, $userTalkLink )
 66+ );
 67+ $htmlOut .= Xml::tags( 'td', array( 'valign' => 'top', 'class' => 'primary' ),
 68+ $row->tmplog_action
 69+ );
 70+ $htmlOut .= Xml::tags( 'td', array( 'valign' => 'top', 'class' => 'primary' ),
 71+ $bannerLink
 72+ );
 73+ $htmlOut .= Xml::tags( 'td', array(),
 74+ '&nbsp;'
 75+ );
 76+
 77+ // End log entry primary row
 78+ $htmlOut .= Xml::closeElement( 'tr' );
 79+
 80+ if ( $row->tmplog_action !== 'removed' ) {
 81+ // Begin log entry secondary row
 82+ $htmlOut .= Xml::openElement( 'tr', array( 'id' => 'cn-log-details-'.$row->tmplog_id, 'style' => 'display:none;' ) );
 83+
 84+ $htmlOut .= Xml::tags( 'td', array( 'valign' => 'top' ),
 85+ '&nbsp;' // force a table cell in older browsers
 86+ );
 87+ $htmlOut .= Xml::openElement( 'td', array( 'valign' => 'top', 'colspan' => '5' ) );
 88+ if ( $row->tmplog_action == 'created' ) {
 89+ $htmlOut .= $this->showInitialSettings( $row );
 90+ } else if ( $row->tmplog_action == 'modified' ) {
 91+ $htmlOut .= $this->showChanges( $row );
 92+ }
 93+ $htmlOut .= Xml::closeElement( 'td' );
 94+
 95+ // End log entry primary row
 96+ $htmlOut .= Xml::closeElement( 'tr' );
 97+ }
 98+
 99+ return $htmlOut;
 100+ }
 101+
 102+ function getStartBody() {
 103+ $htmlOut = '';
 104+ $htmlOut .= Xml::openElement( 'table', array( 'id' => 'cn-campaign-logs', 'cellpadding' => 3 ) );
 105+ $htmlOut .= Xml::openElement( 'tr' );
 106+ $htmlOut .= Xml::element( 'th', array( 'style' => 'width: 20px;' ) );
 107+ $htmlOut .= Xml::element( 'th', array( 'align' => 'left', 'style' => 'width: 130px;' ),
 108+ wfMsg ( 'centralnotice-timestamp' )
 109+ );
 110+ $htmlOut .= Xml::element( 'th', array( 'align' => 'left', 'style' => 'width: 160px;' ),
 111+ wfMsg ( 'centralnotice-user' )
 112+ );
 113+ $htmlOut .= Xml::element( 'th', array( 'align' => 'left', 'style' => 'width: 100px;' ),
 114+ wfMsg ( 'centralnotice-action' )
 115+ );
 116+ $htmlOut .= Xml::element( 'th', array( 'align' => 'left', 'style' => 'width: 160px;' ),
 117+ wfMsg ( 'centralnotice-banner' )
 118+ );
 119+ $htmlOut .= Xml::tags( 'td', array(),
 120+ '&nbsp;'
 121+ );
 122+ $htmlOut .= Xml::closeElement( 'tr' );
 123+ return $htmlOut;
 124+ }
 125+
 126+ /**
 127+ * Close table
 128+ */
 129+ function getEndBody() {
 130+ $htmlOut = '';
 131+ $htmlOut .= Xml::closeElement( 'table' );
 132+ return $htmlOut;
 133+ }
 134+
 135+ function showInitialSettings( $row ) {
 136+ global $wgLang;
 137+ $details = '';
 138+ $details .= wfMsg (
 139+ 'centralnotice-log-label',
 140+ wfMsg ( 'centralnotice-anon' ),
 141+ ($row->tmplog_end_anon ? 'on' : 'off')
 142+ )."<br/>";
 143+ $details .= wfMsg (
 144+ 'centralnotice-log-label',
 145+ wfMsg ( 'centralnotice-account' ),
 146+ ($row->tmplog_end_account ? 'on' : 'off')
 147+ )."<br/>";
 148+ $details .= wfMsg (
 149+ 'centralnotice-log-label',
 150+ wfMsg ( 'centralnotice-fundraising' ),
 151+ ($row->tmplog_end_fundraising ? 'on' : 'off')
 152+ )."<br/>";
 153+ if ( $row->tmplog_end_landingpages ) {
 154+ $details .= wfMsg (
 155+ 'centralnotice-log-label',
 156+ wfMsg ( 'centralnotice-landingpages' ),
 157+ $row->tmplog_end_landingpages
 158+ )."<br/>";
 159+ }
 160+ return $details;
 161+ }
 162+
 163+ function showChanges( $row ) {
 164+ global $wgLang;
 165+ $details = '';
 166+ $details .= $this->testBooleanChange( 'anon', $row );
 167+ $details .= $this->testBooleanChange( 'account', $row );
 168+ $details .= $this->testBooleanChange( 'fundraising', $row );
 169+ $details .= $this->testTextChange( 'landingpages', $row );
 170+ if ( $row->tmplog_content_change ) {
 171+ // Show changes to banner content
 172+ $details .= wfMsg (
 173+ 'centralnotice-log-label',
 174+ wfMsg ( 'centralnotice-banner-content' ),
 175+ wfMsg ( 'centralnotice-banner-content-changed' )
 176+ )."<br/>";
 177+ }
 178+ return $details;
 179+ }
 180+
 181+ private function testBooleanChange( $param, $row ) {
 182+ $result = '';
 183+ $beginField = 'tmplog_begin_'.$param;
 184+ $endField = 'tmplog_end_'.$param;
 185+ if ( $row->$beginField !== $row->$endField ) {
 186+ $result .= wfMsg (
 187+ 'centralnotice-log-label',
 188+ wfMsg ( 'centralnotice-'.$param ),
 189+ wfMsg (
 190+ 'centralnotice-changed',
 191+ ( $row->$beginField ? wfMsg ( 'centralnotice-on' ) : wfMsg ( 'centralnotice-off' ) ),
 192+ ( $row->$endField ? wfMsg ( 'centralnotice-on' ) : wfMsg ( 'centralnotice-off' ) )
 193+ )
 194+ )."<br/>";
 195+ }
 196+ return $result;
 197+ }
 198+
 199+ private function testTextChange( $param, $row ) {
 200+ $result = '';
 201+ $beginField = 'tmplog_begin_'.$param;
 202+ $endField = 'tmplog_end_'.$param;
 203+ if ( $row->$beginField !== $row->$endField ) {
 204+ $result .= wfMsg (
 205+ 'centralnotice-log-label',
 206+ wfMsg ( 'centralnotice-'.$param ),
 207+ wfMsg (
 208+ 'centralnotice-changed',
 209+ $row->$beginField,
 210+ $row->$endField
 211+ )
 212+ )."<br/>";
 213+ }
 214+ return $result;
 215+ }
 216+}
Property changes on: branches/wmf/1.17wmf1/extensions/CentralNotice/CentralNoticeBannerLogPager.php
___________________________________________________________________
Added: svn:eol-style
1217 + native
Index: branches/wmf/1.17wmf1/extensions/CentralNotice/CentralNoticePager.php
@@ -0,0 +1,121 @@
 2+<?php
 3+
 4+class CentralNoticePager extends TemplatePager {
 5+ var $viewPage, $special;
 6+ var $editable;
 7+
 8+ function __construct( $special ) {
 9+ parent::__construct( $special );
 10+ }
 11+
 12+ /**
 13+ * Pull banners from the database
 14+ */
 15+ function getQueryInfo() {
 16+ $notice = $this->mRequest->getVal( 'notice' );
 17+ $noticeId = CentralNotice::getNoticeId( $notice );
 18+ if ( $noticeId ) {
 19+ // Return all the banners not already assigned to the current campaign
 20+ return array(
 21+ 'tables' => array( 'cn_assignments', 'cn_templates' ),
 22+ 'fields' => array( 'cn_templates.tmp_name', 'cn_templates.tmp_id' ),
 23+ 'conds' => array( 'cn_assignments.tmp_id IS NULL' ),
 24+ 'join_conds' => array(
 25+ 'cn_assignments' => array(
 26+ 'LEFT JOIN',
 27+ "cn_assignments.tmp_id = cn_templates.tmp_id " .
 28+ "AND cn_assignments.not_id = $noticeId"
 29+ )
 30+ )
 31+ );
 32+ } else {
 33+ // Return all the banners in the database
 34+ return array(
 35+ 'tables' => 'cn_templates',
 36+ 'fields' => array( 'tmp_name', 'tmp_id' ),
 37+ );
 38+ }
 39+ }
 40+
 41+ /**
 42+ * Generate the content of each table row (1 row = 1 banner)
 43+ */
 44+ function formatRow( $row ) {
 45+
 46+ // Begin banner row
 47+ $htmlOut = Xml::openElement( 'tr' );
 48+
 49+ if ( $this->editable ) {
 50+ // Add box
 51+ $htmlOut .= Xml::tags( 'td', array( 'valign' => 'top' ),
 52+ Xml::check( 'addTemplates[]', '', array ( 'value' => $row->tmp_name ) )
 53+ );
 54+ // Weight select
 55+ $htmlOut .= Xml::tags( 'td', array( 'valign' => 'top' ),
 56+ Xml::listDropDown( "weight[$row->tmp_id]",
 57+ CentralNotice::dropDownList(
 58+ wfMsg( 'centralnotice-weight' ), range ( 0, 100, 5 )
 59+ ) ,
 60+ '',
 61+ '25',
 62+ '',
 63+ '' )
 64+ );
 65+ }
 66+
 67+ // Link and Preview
 68+ $render = new SpecialBannerLoader();
 69+ $render->siteName = 'Wikipedia';
 70+ $render->language = $this->mRequest->getVal( 'wpUserLanguage' );
 71+ try {
 72+ $preview = $render->getHtmlNotice( $row->tmp_name );
 73+ } catch ( SpecialBannerLoaderException $e ) {
 74+ $preview = wfMsg( 'centralnotice-nopreview' );
 75+ }
 76+ $htmlOut .= Xml::tags( 'td', array( 'valign' => 'top' ),
 77+ $this->getSkin()->makeLinkObj( $this->viewPage,
 78+ htmlspecialchars( $row->tmp_name ),
 79+ 'template=' . urlencode( $row->tmp_name ) ) .
 80+ Xml::fieldset( wfMsg( 'centralnotice-preview' ),
 81+ $preview,
 82+ array( 'class' => 'cn-bannerpreview')
 83+ )
 84+ );
 85+
 86+ // End banner row
 87+ $htmlOut .= Xml::closeElement( 'tr' );
 88+
 89+ return $htmlOut;
 90+ }
 91+
 92+ /**
 93+ * Specify table headers
 94+ */
 95+ function getStartBody() {
 96+ $htmlOut = '';
 97+ $htmlOut .= Xml::openElement( 'table', array( 'cellpadding' => 9 ) );
 98+ $htmlOut .= Xml::openElement( 'tr' );
 99+ if ( $this->editable ) {
 100+ $htmlOut .= Xml::element( 'th', array( 'align' => 'left', 'width' => '5%' ),
 101+ wfMsg ( "centralnotice-add" )
 102+ );
 103+ $htmlOut .= Xml::element( 'th', array( 'align' => 'left', 'width' => '5%' ),
 104+ wfMsg ( "centralnotice-weight" )
 105+ );
 106+ }
 107+ $htmlOut .= Xml::element( 'th', array( 'align' => 'left' ),
 108+ wfMsg ( 'centralnotice-templates' )
 109+ );
 110+ $htmlOut .= Xml::closeElement( 'tr' );
 111+ return $htmlOut;
 112+ }
 113+
 114+ /**
 115+ * Close table
 116+ */
 117+ function getEndBody() {
 118+ $htmlOut = '';
 119+ $htmlOut .= Xml::closeElement( 'table' );
 120+ return $htmlOut;
 121+ }
 122+}
Property changes on: branches/wmf/1.17wmf1/extensions/CentralNotice/CentralNoticePager.php
___________________________________________________________________
Added: svn:eol-style
1123 + native
Index: branches/wmf/1.17wmf1/extensions/CentralNotice/CentralNoticeLogPager.php
@@ -0,0 +1,356 @@
 2+<?php
 3+
 4+class CentralNoticeLogPager extends ReverseChronologicalPager {
 5+ var $viewPage, $special;
 6+
 7+ function __construct( $special ) {
 8+ global $wgRequest;
 9+ $this->special = $special;
 10+ parent::__construct();
 11+
 12+ // Override paging defaults
 13+ list( $this->mLimit, /* $offset */ ) = $this->mRequest->getLimitOffset( 20, '' );
 14+ $this->mLimitsShown = array( 20, 50, 100 );
 15+
 16+ $this->viewPage = SpecialPage::getTitleFor( 'CentralNotice' );
 17+ }
 18+
 19+ /**
 20+ * Sort the log list by timestamp
 21+ */
 22+ function getIndexField() {
 23+ return 'notlog_timestamp';
 24+ }
 25+
 26+ /**
 27+ * Pull log entries from the database
 28+ */
 29+ function getQueryInfo() {
 30+ global $wgRequest;
 31+
 32+ $filterStartDate = 0;
 33+ $filterEndDate = 0;
 34+ $startYear = $wgRequest->getVal( 'start_year' );
 35+ if ( $startYear === 'other' ) $startYear = null;
 36+ $startMonth = $wgRequest->getVal( 'start_month' );
 37+ if ( $startMonth === 'other' ) $startMonth = null;
 38+ $startDay = $wgRequest->getVal( 'start_day' );
 39+ if ( $startDay === 'other' ) $startDay = null;
 40+ $endYear = $wgRequest->getVal( 'end_year' );
 41+ if ( $endYear === 'other' ) $endYear = null;
 42+ $endMonth = $wgRequest->getVal( 'end_month' );
 43+ if ( $endMonth === 'other' ) $endMonth = null;
 44+ $endDay = $wgRequest->getVal( 'end_day' );
 45+ if ( $endDay === 'other' ) $endDay = null;
 46+
 47+ if ( $startYear && $startMonth && $startDay ) {
 48+ $filterStartDate = $startYear . $startMonth . $startDay;
 49+ }
 50+ if ( $endYear && $endMonth && $endDay ) {
 51+ $filterEndDate = $endYear . $endMonth . $endDay;
 52+ }
 53+ $filterCampaign = $wgRequest->getVal( 'campaign' );
 54+ $filterUser = $wgRequest->getVal( 'user' );
 55+ $reset = $wgRequest->getVal( 'centralnoticelogreset' );
 56+
 57+ $info = array(
 58+ 'tables' => array( 'cn_notice_log' ),
 59+ 'fields' => '*',
 60+ 'conds' => array()
 61+ );
 62+
 63+ if ( !$reset ) {
 64+ if ( $filterStartDate > 0 ) {
 65+ $filterStartDate = intval( $filterStartDate.'000000' );
 66+ $info['conds'][] = "notlog_timestamp >= $filterStartDate";
 67+ }
 68+ if ( $filterEndDate > 0 ) {
 69+ $filterEndDate = intval( $filterEndDate.'000000' );
 70+ $info['conds'][] = "notlog_timestamp < $filterEndDate";
 71+ }
 72+ if ( $filterCampaign ) {
 73+ $info['conds'][] = "notlog_not_name LIKE '$filterCampaign'";
 74+ }
 75+ if ( $filterUser ) {
 76+ $user = User::newFromName( $filterUser );
 77+ $userId = $user->getId();
 78+ $info['conds'][] = "notlog_user_id = $userId";
 79+ }
 80+ }
 81+
 82+ return $info;
 83+ }
 84+
 85+ /**
 86+ * Generate the content of each table row (1 row = 1 log entry)
 87+ */
 88+ function formatRow( $row ) {
 89+ global $wgLang, $wgExtensionAssetsPath;
 90+
 91+ // Create a user object so we can pull the name, user page, etc.
 92+ $loggedUser = User::newFromId( $row->notlog_user_id );
 93+ // Create the user page link
 94+ $userLink = $this->getSkin()->makeLinkObj( $loggedUser->getUserPage(),
 95+ $loggedUser->getName() );
 96+ $userTalkLink = $this->getSkin()->makeLinkObj( $loggedUser->getTalkPage(),
 97+ wfMsg ( 'centralnotice-talk-link' ) );
 98+
 99+ // Create the campaign link
 100+ $campaignLink = $this->getSkin()->makeLinkObj( $this->viewPage,
 101+ htmlspecialchars( $row->notlog_not_name ),
 102+ 'method=listNoticeDetail&notice=' . urlencode( $row->notlog_not_name ) );
 103+
 104+ // Begin log entry primary row
 105+ $htmlOut = Xml::openElement( 'tr' );
 106+
 107+ $htmlOut .= Xml::openElement( 'td', array( 'valign' => 'top' ) );
 108+ if ( $row->notlog_action !== 'removed' ) {
 109+ $htmlOut .= '<a href="javascript:toggleLogDisplay(\''.$row->notlog_id.'\')">'.
 110+ '<img src="'.$wgExtensionAssetsPath.'/CentralNotice/collapsed.png" id="cn-collapsed-'.$row->notlog_id.'" style="display:block;"/>'.
 111+ '<img src="'.$wgExtensionAssetsPath.'/CentralNotice/uncollapsed.png" id="cn-uncollapsed-'.$row->notlog_id.'" style="display:none;"/>'.
 112+ '</a>';
 113+ }
 114+ $htmlOut .= Xml::closeElement( 'td' );
 115+ $htmlOut .= Xml::tags( 'td', array( 'valign' => 'top', 'class' => 'primary' ),
 116+ $wgLang->date( $row->notlog_timestamp ) . ' ' . $wgLang->time( $row->notlog_timestamp )
 117+ );
 118+ $htmlOut .= Xml::tags( 'td', array( 'valign' => 'top', 'class' => 'primary' ),
 119+ wfMsg ( 'centralnotice-user-links', $userLink, $userTalkLink )
 120+ );
 121+ $htmlOut .= Xml::tags( 'td', array( 'valign' => 'top', 'class' => 'primary' ),
 122+ $row->notlog_action
 123+ );
 124+ $htmlOut .= Xml::tags( 'td', array( 'valign' => 'top', 'class' => 'primary' ),
 125+ $campaignLink
 126+ );
 127+ $htmlOut .= Xml::tags( 'td', array(),
 128+ '&nbsp;'
 129+ );
 130+
 131+ // End log entry primary row
 132+ $htmlOut .= Xml::closeElement( 'tr' );
 133+
 134+ if ( $row->notlog_action !== 'removed' ) {
 135+ // Begin log entry secondary row
 136+ $htmlOut .= Xml::openElement( 'tr', array( 'id' => 'cn-log-details-'.$row->notlog_id, 'style' => 'display:none;' ) );
 137+
 138+ $htmlOut .= Xml::tags( 'td', array( 'valign' => 'top' ),
 139+ '&nbsp;' // force a table cell in older browsers
 140+ );
 141+ $htmlOut .= Xml::openElement( 'td', array( 'valign' => 'top', 'colspan' => '5' ) );
 142+ if ( $row->notlog_action == 'created' ) {
 143+ $htmlOut .= $this->showInitialSettings( $row );
 144+ } else if ( $row->notlog_action == 'modified' ) {
 145+ $htmlOut .= $this->showChanges( $row );
 146+ }
 147+ $htmlOut .= Xml::closeElement( 'td' );
 148+
 149+ // End log entry primary row
 150+ $htmlOut .= Xml::closeElement( 'tr' );
 151+ }
 152+
 153+ return $htmlOut;
 154+ }
 155+
 156+ function showInitialSettings( $row ) {
 157+ global $wgLang;
 158+ $details = '';
 159+ $details .= wfMsg (
 160+ 'centralnotice-log-label',
 161+ wfMsg ( 'centralnotice-start-date' ),
 162+ $wgLang->date( $row->notlog_end_start ).' '.$wgLang->time( $row->notlog_end_start )
 163+ )."<br/>";
 164+ $details .= wfMsg (
 165+ 'centralnotice-log-label',
 166+ wfMsg ( 'centralnotice-end-date' ),
 167+ $wgLang->date( $row->notlog_end_end ).' '.$wgLang->time( $row->notlog_end_end )
 168+ )."<br/>";
 169+ $details .= wfMsg (
 170+ 'centralnotice-log-label',
 171+ wfMsg ( 'centralnotice-projects' ),
 172+ $row->notlog_end_projects
 173+ )."<br/>";
 174+ $language_count = count( explode ( ', ', $row->notlog_end_languages ) );
 175+ $languageList = '';
 176+ if ( $language_count > 15 ) {
 177+ $languageList = wfMsg ( 'centralnotice-multiple-languages', $language_count );
 178+ } elseif ( $language_count > 0 ) {
 179+ $languageList = $row->notlog_end_languages;
 180+ }
 181+ $details .= wfMsg (
 182+ 'centralnotice-log-label',
 183+ wfMsg ( 'centralnotice-languages' ),
 184+ $languageList
 185+ )."<br/>";
 186+ $details .= wfMsg (
 187+ 'centralnotice-log-label',
 188+ wfMsg ( 'centralnotice-geo' ),
 189+ ($row->notlog_end_geo ? 'on' : 'off')
 190+ )."<br/>";
 191+ if ( $row->notlog_end_geo ) {
 192+ $country_count = count( explode ( ', ', $row->notlog_end_countries ) );
 193+ $countryList = '';
 194+ if ( $country_count > 20 ) {
 195+ $countryList = wfMsg ( 'centralnotice-multiple-countries', $country_count );
 196+ } elseif ( $country_count > 0 ) {
 197+ $countryList = $row->notlog_end_countries;
 198+ }
 199+ $details .= wfMsg (
 200+ 'centralnotice-log-label',
 201+ wfMsg ( 'centralnotice-countries' ),
 202+ $countryList
 203+ )."<br/>";
 204+ }
 205+ return $details;
 206+ }
 207+
 208+ function showChanges( $row ) {
 209+ global $wgLang;
 210+ $details = '';
 211+ if ( $row->notlog_begin_start !== $row->notlog_end_start ) {
 212+ $details .= wfMsg (
 213+ 'centralnotice-log-label',
 214+ wfMsg ( 'centralnotice-start-date' ),
 215+ wfMsg (
 216+ 'centralnotice-changed',
 217+ $wgLang->date( $row->notlog_begin_start ).' '.$wgLang->time( $row->notlog_begin_start ),
 218+ $wgLang->date( $row->notlog_end_start ).' '.$wgLang->time( $row->notlog_end_start )
 219+ )
 220+ )."<br/>";
 221+ }
 222+ if ( $row->notlog_begin_end !== $row->notlog_end_end ) {
 223+ $details .= wfMsg (
 224+ 'centralnotice-log-label',
 225+ wfMsg ( 'centralnotice-end-date' ),
 226+ wfMsg (
 227+ 'centralnotice-changed',
 228+ $wgLang->date( $row->notlog_begin_end ).' '.$wgLang->time( $row->notlog_begin_end ),
 229+ $wgLang->date( $row->notlog_end_end ).' '.$wgLang->time( $row->notlog_end_end )
 230+ )
 231+ )."<br/>";
 232+ }
 233+ $details .= $this->testBooleanChange( 'enabled', $row );
 234+ $details .= $this->testBooleanChange( 'preferred', $row );
 235+ $details .= $this->testBooleanChange( 'locked', $row );
 236+ $details .= $this->testBooleanChange( 'geo', $row );
 237+ $details .= $this->testSetChange( 'projects', $row );
 238+ $details .= $this->testSetChange( 'languages', $row );
 239+ $details .= $this->testSetChange( 'countries', $row );
 240+ if ( $row->notlog_begin_banners !== $row->notlog_end_banners ) {
 241+ // Show changes to banner weights and assignment
 242+ $beginBannersObject = json_decode( $row->notlog_begin_banners );
 243+ $endBannersObject = json_decode( $row->notlog_end_banners );
 244+ $beginBanners = array();
 245+ $endBanners = array();
 246+ foreach( $beginBannersObject as $key => $weight ) {
 247+ $beginBanners[$key] = $key.' ('.$weight.')';
 248+ }
 249+ foreach( $endBannersObject as $key => $weight ) {
 250+ $endBanners[$key] = $key.' ('.$weight.')';
 251+ }
 252+ if ( $beginBanners ) {
 253+ $before = implode( ', ', $beginBanners );
 254+ } else {
 255+ $before = wfMsg ( 'centralnotice-no-assignments' );
 256+ }
 257+ if ( $endBanners ) {
 258+ $after = implode( ', ', $endBanners );
 259+ } else {
 260+ $after = wfMsg ( 'centralnotice-no-assignments' );
 261+ }
 262+ $details .= wfMsg (
 263+ 'centralnotice-log-label',
 264+ wfMsg ( 'centralnotice-templates' ),
 265+ wfMsg ( 'centralnotice-changed', $before, $after)
 266+ )."<br/>";
 267+ }
 268+ return $details;
 269+ }
 270+
 271+ private function testBooleanChange( $param, $row ) {
 272+ $result = '';
 273+ $beginField = 'notlog_begin_'.$param;
 274+ $endField = 'notlog_end_'.$param;
 275+ if ( $row->$beginField !== $row->$endField ) {
 276+ $result .= wfMsg (
 277+ 'centralnotice-log-label',
 278+ wfMsg ( 'centralnotice-'.$param ),
 279+ wfMsg (
 280+ 'centralnotice-changed',
 281+ ( $row->$beginField ? wfMsg ( 'centralnotice-on' ) : wfMsg ( 'centralnotice-off' ) ),
 282+ ( $row->$endField ? wfMsg ( 'centralnotice-on' ) : wfMsg ( 'centralnotice-off' ) )
 283+ )
 284+ )."<br/>";
 285+ }
 286+ return $result;
 287+ }
 288+
 289+ private function testSetChange( $param, $row ) {
 290+ $result = '';
 291+ $beginField = 'notlog_begin_'.$param;
 292+ $endField = 'notlog_end_'.$param;
 293+ if ( $row->$beginField !== $row->$endField ) {
 294+ $beginSet = array();
 295+ $endSet = array();
 296+ if ( $row->$beginField ) {
 297+ $beginSet = explode( ', ', $row->$beginField );
 298+ }
 299+ if ( $row->$endField ) {
 300+ $endSet = explode( ', ', $row->$endField );
 301+ }
 302+ $added = array_diff( $endSet, $beginSet );
 303+ $removed = array_diff( $beginSet, $endSet );
 304+ $differences = '';
 305+ if ( $added ) {
 306+ $differences .= wfMsg ( 'centralnotice-added', implode( ', ', $added ) );
 307+ if ( $removed ) $differences .= '; ';
 308+ }
 309+ if ( $removed ) {
 310+ $differences .= wfMsg ( 'centralnotice-removed', implode( ', ', $removed ) );
 311+ }
 312+ $result .= wfMsg (
 313+ 'centralnotice-log-label',
 314+ wfMsg ( 'centralnotice-'.$param ),
 315+ $differences
 316+ )."<br/>";
 317+ }
 318+ return $result;
 319+ }
 320+
 321+ /**
 322+ * Specify table headers
 323+ */
 324+ function getStartBody() {
 325+ $htmlOut = '';
 326+ $htmlOut .= Xml::openElement( 'table', array( 'id' => 'cn-campaign-logs', 'cellpadding' => 3 ) );
 327+ $htmlOut .= Xml::openElement( 'tr' );
 328+ $htmlOut .= Xml::element( 'th', array( 'style' => 'width: 20px;' ) );
 329+ $htmlOut .= Xml::element( 'th', array( 'align' => 'left', 'style' => 'width: 130px;' ),
 330+ wfMsg ( 'centralnotice-timestamp' )
 331+ );
 332+ $htmlOut .= Xml::element( 'th', array( 'align' => 'left', 'style' => 'width: 160px;' ),
 333+ wfMsg ( 'centralnotice-user' )
 334+ );
 335+ $htmlOut .= Xml::element( 'th', array( 'align' => 'left', 'style' => 'width: 100px;' ),
 336+ wfMsg ( 'centralnotice-action' )
 337+ );
 338+ $htmlOut .= Xml::element( 'th', array( 'align' => 'left', 'style' => 'width: 160px;' ),
 339+ wfMsg ( 'centralnotice-notice' )
 340+ );
 341+ $htmlOut .= Xml::tags( 'td', array(),
 342+ '&nbsp;'
 343+ );
 344+ $htmlOut .= Xml::closeElement( 'tr' );
 345+ return $htmlOut;
 346+ }
 347+
 348+ /**
 349+ * Close table
 350+ */
 351+ function getEndBody() {
 352+ $htmlOut = '';
 353+ $htmlOut .= Xml::closeElement( 'table' );
 354+ return $htmlOut;
 355+ }
 356+
 357+}
Property changes on: branches/wmf/1.17wmf1/extensions/CentralNotice/CentralNoticeLogPager.php
___________________________________________________________________
Added: svn:eol-style
1358 + native

Past revisions this follows-up on

RevisionCommit summaryAuthorDate
r91487Needs $IP, to accomodate wikis with different directory structureneilk20:45, 5 July 2011
r94187svn:eol-style nativeialex19:18, 10 August 2011
r94856date range for campaign log filterkaldari01:46, 18 August 2011

Status & tagging log