[ Index ]

PHP Cross Reference of MediaWiki-1.24.0

title

Body

[close]

/maintenance/ -> attachLatest.php (source)

   1  <?php
   2  /**
   3   * Corrects wrong values in the `page_latest` field in the database.
   4   *
   5   * Copyright © 2005 Brion Vibber <[email protected]>
   6   * https://www.mediawiki.org/
   7   *
   8   * This program is free software; you can redistribute it and/or modify
   9   * it under the terms of the GNU General Public License as published by
  10   * the Free Software Foundation; either version 2 of the License, or
  11   * (at your option) any later version.
  12   *
  13   * This program is distributed in the hope that it will be useful,
  14   * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  16   * GNU General Public License for more details.
  17   *
  18   * You should have received a copy of the GNU General Public License along
  19   * with this program; if not, write to the Free Software Foundation, Inc.,
  20   * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  21   * http://www.gnu.org/copyleft/gpl.html
  22   *
  23   * @file
  24   * @ingroup Maintenance
  25   */
  26  
  27  require_once  __DIR__ . '/Maintenance.php';
  28  
  29  /**
  30   * Maintenance script to correct wrong values in the `page_latest` field
  31   * in the database.
  32   *
  33   * @ingroup Maintenance
  34   */
  35  class AttachLatest extends Maintenance {
  36  	public function __construct() {
  37          parent::__construct();
  38          $this->addOption( "fix", "Actually fix the entries, will dry run otherwise" );
  39          $this->addOption( "regenerate-all",
  40              "Regenerate the page_latest field for all records in table page" );
  41          $this->mDescription = "Fix page_latest entries in the page table";
  42      }
  43  
  44  	public function execute() {
  45          $this->output( "Looking for pages with page_latest set to 0...\n" );
  46          $dbw = wfGetDB( DB_MASTER );
  47          $conds = array( 'page_latest' => 0 );
  48          if ( $this->hasOption( 'regenerate-all' ) ) {
  49              $conds = '';
  50          }
  51          $result = $dbw->select( 'page',
  52              array( 'page_id', 'page_namespace', 'page_title' ),
  53              $conds,
  54              __METHOD__ );
  55  
  56          $n = 0;
  57          foreach ( $result as $row ) {
  58              $pageId = intval( $row->page_id );
  59              $title = Title::makeTitle( $row->page_namespace, $row->page_title );
  60              $name = $title->getPrefixedText();
  61              $latestTime = $dbw->selectField( 'revision',
  62                  'MAX(rev_timestamp)',
  63                  array( 'rev_page' => $pageId ),
  64                  __METHOD__ );
  65              if ( !$latestTime ) {
  66                  $this->output( wfWikiID() . " $pageId [[$name]] can't find latest rev time?!\n" );
  67                  continue;
  68              }
  69  
  70              $revision = Revision::loadFromTimestamp( $dbw, $title, $latestTime );
  71              if ( is_null( $revision ) ) {
  72                  $this->output( wfWikiID()
  73                      . " $pageId [[$name]] latest time $latestTime, can't find revision id\n" );
  74                  continue;
  75              }
  76              $id = $revision->getId();
  77              $this->output( wfWikiID() . " $pageId [[$name]] latest time $latestTime, rev id $id\n" );
  78              if ( $this->hasOption( 'fix' ) ) {
  79                  $page = WikiPage::factory( $title );
  80                  $page->updateRevisionOn( $dbw, $revision );
  81              }
  82              $n++;
  83          }
  84          $this->output( "Done! Processed $n pages.\n" );
  85          if ( !$this->hasOption( 'fix' ) ) {
  86              $this->output( "This was a dry run; rerun with --fix to update page_latest.\n" );
  87          }
  88      }
  89  }
  90  
  91  $maintClass = "AttachLatest";
  92  require_once RUN_MAINTENANCE_IF_MAIN;


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