r98918 MediaWiki - Code Review archive

Repository:MediaWiki
Revision:r98917‎ | r98918 | r98919 >
Date:21:03, 4 October 2011
Author:awjrichards
Status:ok
Tags:
Comment:
Copy from trunk r95822
Modified paths:
  • /branches/wmf/1.18wmf1/extensions/CentralNotice/CentralNoticeCampaignLogPager.php (added) (history)

Diff [purge]

Index: branches/wmf/1.18wmf1/extensions/CentralNotice/CentralNoticeCampaignLogPager.php
@@ -0,0 +1,356 @@
 2+<?php
 3+
 4+class CentralNoticeCampaignLogPager 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.18wmf1/extensions/CentralNotice/CentralNoticeCampaignLogPager.php
___________________________________________________________________
Added: svn:eol-style
1358 + native

Past revisions this follows-up on

RevisionCommit summaryAuthorDate
r95822adding banner content and banner message logging to CentralNoticekaldari00:06, 31 August 2011

Status & tagging log