mediawiki-extensions-PageIm.../initImageData.php
csteipp 7f9dfa7068 Ensure $id is an integer
In the spirit of escaping as close to the output as possible, cast $id
to an int before using it in the sql query where other types could lead
to sql injection.

Change-Id: I9e4ceaf67df4e0d2270302bd65ff0a022de03e6b
2015-03-24 12:59:01 -07:00

63 lines
1.7 KiB
PHP

<?php
$IP = getenv( 'MW_INSTALL_PATH' );
if ( $IP === false ) {
$IP = dirname( dirname( dirname( __FILE__ ) ) );
}
require_once( "$IP/maintenance/Maintenance.php" );
class InitImageData extends Maintenance {
const BATCH_SIZE = 100;
public function __construct() {
parent::__construct();
$this->mDescription = 'Initializes PageImages data';
$this->addOption( 'namespaces', 'Comma-separated list of namespace(s) to refresh', false, true );
$this->addOption( 'earlier-than', 'Run only on pages earlier than this timestamp', false, true );
}
public function execute() {
global $wgPageImagesNamespaces;
$id = 0;
do {
$tables = array( 'page', 'imagelinks' );
$conds = array(
'page_id > ' . (int) $id,
'il_from IS NOT NULL',
'page_is_redirect' => 0,
);
$fields = array( 'page_id' );
$joinConds = array( 'imagelinks' => array(
'LEFT JOIN', 'page_id = il_from',
) );
if ( $this->hasOption( 'namespaces' ) ) {
$ns = explode( ',', $this->getOption( 'namespaces' ) );
$conds['page_namespace'] = $ns;
} else {
$conds['page_namespace'] = $wgPageImagesNamespaces;
}
if ( $this->hasOption( 'earlier-than' ) ) {
$conds[] = "page_touched < '{$this->getOption( 'earlier-than' )}'";
}
$dbr = wfGetDB( DB_SLAVE );
$res = $dbr->select( $tables, $fields, $conds, __METHOD__,
array( 'LIMIT' => self::BATCH_SIZE, 'ORDER_BY' => 'page_id', 'GROUP BY' => 'page_id' ),
$joinConds
);
foreach ( $res as $row ) {
$id = $row->page_id;
RefreshLinks::fixLinksFromArticle( $id );
wfWaitForSlaves();
}
$this->output( "$id\n" );
} while ( $res->numRows() );
$this->output( "done\n" );
}
}
$maintClass = 'InitImageData';
require_once( DO_MAINTENANCE );