[ Index ]

PHP Cross Reference of MediaWiki-1.24.0

title

Body

[close]

/maintenance/ -> deleteRevision.php (source)

   1  <?php
   2  /**
   3   * Delete one or more revisions by moving them to the archive table.
   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   * @ingroup Maintenance
  22   */
  23  
  24  require_once  __DIR__ . '/Maintenance.php';
  25  
  26  /**
  27   * Maintenance script that deletes one or more revisions by moving them
  28   * to the archive table.
  29   *
  30   * @ingroup Maintenance
  31   */
  32  class DeleteRevision extends Maintenance {
  33  
  34  	public function __construct() {
  35          parent::__construct();
  36          $this->mDescription = "Delete one or more revisions by moving them to the archive table";
  37      }
  38  
  39  	public function execute() {
  40          if ( count( $this->mArgs ) == 0 ) {
  41              $this->error( "No revisions specified", true );
  42          }
  43  
  44          $this->output( "Deleting revision(s) " . implode( ',', $this->mArgs ) .
  45              " from " . wfWikiID() . "...\n" );
  46          $dbw = wfGetDB( DB_MASTER );
  47  
  48          $affected = 0;
  49          foreach ( $this->mArgs as $revID ) {
  50              $dbw->insertSelect( 'archive', array( 'page', 'revision' ),
  51                  array(
  52                      'ar_namespace' => 'page_namespace',
  53                      'ar_title' => 'page_title',
  54                      'ar_page_id' => 'page_id',
  55                      'ar_comment' => 'rev_comment',
  56                      'ar_user' => 'rev_user',
  57                      'ar_user_text' => 'rev_user_text',
  58                      'ar_timestamp' => 'rev_timestamp',
  59                      'ar_minor_edit' => 'rev_minor_edit',
  60                      'ar_rev_id' => 'rev_id',
  61                      'ar_text_id' => 'rev_text_id',
  62                      'ar_deleted' => 'rev_deleted',
  63                      'ar_len' => 'rev_len',
  64                  ),
  65                  array(
  66                      'rev_id' => $revID,
  67                      'page_id = rev_page'
  68                  ),
  69                  __METHOD__
  70              );
  71              if ( !$dbw->affectedRows() ) {
  72                  $this->output( "Revision $revID not found\n" );
  73              } else {
  74                  $affected += $dbw->affectedRows();
  75                  $pageID = $dbw->selectField(
  76                      'revision',
  77                      'rev_page',
  78                      array( 'rev_id' => $revID ),
  79                      __METHOD__
  80                  );
  81                  $pageLatest = $dbw->selectField(
  82                      'page',
  83                      'page_latest',
  84                      array( 'page_id' => $pageID ),
  85                      __METHOD__
  86                  );
  87                  $dbw->delete( 'revision', array( 'rev_id' => $revID ) );
  88                  if ( $pageLatest == $revID ) {
  89                      // Database integrity
  90                      $newLatest = $dbw->selectField(
  91                          'revision',
  92                          'rev_id',
  93                          array( 'rev_page' => $pageID ),
  94                          __METHOD__,
  95                          array( 'ORDER BY' => 'rev_timestamp DESC' )
  96                      );
  97                      $dbw->update(
  98                          'page',
  99                          array( 'page_latest' => $newLatest ),
 100                          array( 'page_id' => $pageID ),
 101                          __METHOD__
 102                      );
 103                  }
 104              }
 105          }
 106          $this->output( "Deleted $affected revisions\n" );
 107      }
 108  }
 109  
 110  $maintClass = "DeleteRevision";
 111  require_once RUN_MAINTENANCE_IF_MAIN;


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