[ Index ]

PHP Cross Reference of MediaWiki-1.24.0

title

Body

[close]

/includes/logging/ -> DeleteLogFormatter.php (source)

   1  <?php
   2  /**
   3   * Formatter for delete log entries.
   4   *
   5   * This program is free software; you can redistribute it and/or modify
   6   * it under the terms of the GNU General Public License as published by
   7   * the Free Software Foundation; either version 2 of the License, or
   8   * (at your option) any later version.
   9   *
  10   * This program is distributed in the hope that it will be useful,
  11   * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13   * GNU General Public License for more details.
  14   *
  15   * You should have received a copy of the GNU General Public License along
  16   * with this program; if not, write to the Free Software Foundation, Inc.,
  17   * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  18   * http://www.gnu.org/copyleft/gpl.html
  19   *
  20   * @file
  21   * @author Niklas Laxström
  22   * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
  23   * @since 1.22
  24   */
  25  
  26  /**
  27   * This class formats delete log entries.
  28   *
  29   * @since 1.19
  30   */
  31  class DeleteLogFormatter extends LogFormatter {
  32  	protected function getMessageKey() {
  33          $key = parent::getMessageKey();
  34          if ( in_array( $this->entry->getSubtype(), array( 'event', 'revision' ) ) ) {
  35              if ( count( $this->getMessageParameters() ) < 5 ) {
  36                  return "$key-legacy";
  37              }
  38          }
  39  
  40          return $key;
  41      }
  42  
  43  	protected function getMessageParameters() {
  44          if ( isset( $this->parsedParametersDeleteLog ) ) {
  45              return $this->parsedParametersDeleteLog;
  46          }
  47  
  48          $params = parent::getMessageParameters();
  49          $subtype = $this->entry->getSubtype();
  50          if ( in_array( $subtype, array( 'event', 'revision' ) ) ) {
  51              // $params[3] here is 'revision' or 'archive' for page revisions, 'oldimage' or
  52              // 'filearchive' for file versions, or a comma-separated list of log_ids for log
  53              // entries. $subtype here is 'revision' for page revisions and file
  54              // versions, or 'event' for log entries.
  55              if ( ( $subtype === 'event' && count( $params ) === 6 )
  56                  || ( $subtype === 'revision' && isset( $params[3] )
  57                      && ( $params[3] === 'revision' || $params[3] === 'oldimage'
  58                          || $params[3] === 'archive' || $params[3] === 'filearchive' )
  59                  )
  60              ) {
  61                  $paramStart = $subtype === 'revision' ? 4 : 3;
  62  
  63                  $old = $this->parseBitField( $params[$paramStart + 1] );
  64                  $new = $this->parseBitField( $params[$paramStart + 2] );
  65                  list( $hid, $unhid, $extra ) = RevisionDeleter::getChanges( $new, $old );
  66                  $changes = array();
  67                  // messages used: revdelete-content-hid, revdelete-summary-hid, revdelete-uname-hid
  68                  foreach ( $hid as $v ) {
  69                      $changes[] = $this->msg( "$v-hid" )->plain();
  70                  }
  71                  // messages used: revdelete-content-unhid, revdelete-summary-unhid, revdelete-uname-unhid
  72                  foreach ( $unhid as $v ) {
  73                      $changes[] = $this->msg( "$v-unhid" )->plain();
  74                  }
  75                  foreach ( $extra as $v ) {
  76                      $changes[] = $this->msg( $v )->plain();
  77                  }
  78                  $changeText = $this->context->getLanguage()->listToText( $changes );
  79  
  80                  $newParams = array_slice( $params, 0, 3 );
  81                  $newParams[3] = $changeText;
  82                  $count = count( explode( ',', $params[$paramStart] ) );
  83                  $newParams[4] = $this->context->getLanguage()->formatNum( $count );
  84  
  85                  $this->parsedParametersDeleteLog = $newParams;
  86                  return $this->parsedParametersDeleteLog;
  87              } else {
  88                  $this->parsedParametersDeleteLog = array_slice( $params, 0, 3 );
  89                  return $this->parsedParametersDeleteLog;
  90              }
  91          }
  92  
  93          $this->parsedParametersDeleteLog = $params;
  94          return $this->parsedParametersDeleteLog;
  95      }
  96  
  97  	protected function parseBitField( $string ) {
  98          // Input is like ofield=2134 or just the number
  99          if ( strpos( $string, 'field=' ) === 1 ) {
 100              list( , $field ) = explode( '=', $string );
 101  
 102              return (int)$field;
 103          } else {
 104              return (int)$string;
 105          }
 106      }
 107  
 108  	public function getActionLinks() {
 109          $user = $this->context->getUser();
 110          if ( !$user->isAllowed( 'deletedhistory' )
 111              || $this->entry->isDeleted( LogPage::DELETED_ACTION )
 112          ) {
 113              return '';
 114          }
 115  
 116          switch ( $this->entry->getSubtype() ) {
 117              case 'delete': // Show undelete link
 118                  if ( $user->isAllowed( 'undelete' ) ) {
 119                      $message = 'undeletelink';
 120                  } else {
 121                      $message = 'undeleteviewlink';
 122                  }
 123                  $revert = Linker::linkKnown(
 124                      SpecialPage::getTitleFor( 'Undelete' ),
 125                      $this->msg( $message )->escaped(),
 126                      array(),
 127                      array( 'target' => $this->entry->getTarget()->getPrefixedDBkey() )
 128                  );
 129  
 130                  return $this->msg( 'parentheses' )->rawParams( $revert )->escaped();
 131  
 132              case 'revision': // If an edit was hidden from a page give a review link to the history
 133                  $params = $this->extractParameters();
 134                  if ( !isset( $params[3] ) || !isset( $params[4] ) ) {
 135                      return '';
 136                  }
 137  
 138                  // Different revision types use different URL params...
 139                  $key = $params[3];
 140                  // This is a CSV of the IDs
 141                  $ids = explode( ',', $params[4] );
 142  
 143                  $links = array();
 144  
 145                  // If there's only one item, we can show a diff link
 146                  if ( count( $ids ) == 1 ) {
 147                      // Live revision diffs...
 148                      if ( $key == 'oldid' || $key == 'revision' ) {
 149                          $links[] = Linker::linkKnown(
 150                              $this->entry->getTarget(),
 151                              $this->msg( 'diff' )->escaped(),
 152                              array(),
 153                              array(
 154                                  'diff' => intval( $ids[0] ),
 155                                  'unhide' => 1
 156                              )
 157                          );
 158                          // Deleted revision diffs...
 159                      } elseif ( $key == 'artimestamp' || $key == 'archive' ) {
 160                          $links[] = Linker::linkKnown(
 161                              SpecialPage::getTitleFor( 'Undelete' ),
 162                              $this->msg( 'diff' )->escaped(),
 163                              array(),
 164                              array(
 165                                  'target' => $this->entry->getTarget()->getPrefixedDBkey(),
 166                                  'diff' => 'prev',
 167                                  'timestamp' => $ids[0]
 168                              )
 169                          );
 170                      }
 171                  }
 172  
 173                  // View/modify link...
 174                  $links[] = Linker::linkKnown(
 175                      SpecialPage::getTitleFor( 'Revisiondelete' ),
 176                      $this->msg( 'revdel-restore' )->escaped(),
 177                      array(),
 178                      array(
 179                          'target' => $this->entry->getTarget()->getPrefixedText(),
 180                          'type' => $key,
 181                          'ids' => implode( ',', $ids ),
 182                      )
 183                  );
 184  
 185                  return $this->msg( 'parentheses' )->rawParams(
 186                      $this->context->getLanguage()->pipeList( $links ) )->escaped();
 187  
 188              case 'event': // Hidden log items, give review link
 189                  $params = $this->extractParameters();
 190                  if ( !isset( $params[3] ) ) {
 191                      return '';
 192                  }
 193                  // This is a CSV of the IDs
 194                  $query = $params[3];
 195                  // Link to each hidden object ID, $params[1] is the url param
 196                  $revert = Linker::linkKnown(
 197                      SpecialPage::getTitleFor( 'Revisiondelete' ),
 198                      $this->msg( 'revdel-restore' )->escaped(),
 199                      array(),
 200                      array(
 201                          'target' => $this->entry->getTarget()->getPrefixedText(),
 202                          'type' => 'logging',
 203                          'ids' => $query
 204                      )
 205                  );
 206  
 207                  return $this->msg( 'parentheses' )->rawParams( $revert )->escaped();
 208              default:
 209                  return '';
 210          }
 211      }
 212  }


Generated: Fri Nov 28 14:03:12 2014 Cross-referenced by PHPXref 0.7.1