<?php
/**
- * File for BacklinkCache class
+ * Class for fetching backlink lists, approximate backlink counts and
+ * partitions.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
* @file
+ * @author Tim Starling
+ * @copyright © 2009, Tim Starling, Domas Mituzas
+ * @copyright © 2010, Max Sem
+ * @copyright © 2011, Antoine Musso
*/
/**
* Introduced by r47317
*
* @internal documentation reviewed on 18 Mar 2011 by hashar
- *
- * @author Tim Starling
- * @copyright © 2009, Tim Starling, Domas Mituzas
- * @copyright © 2010, Max Sem
- * @copyright © 2011, Ashar Voultoiz
*/
class BacklinkCache {
* Serialization handler, diasallows to serialize the database to prevent
* failures after this class is deserialized from cache with dead DB
* connection.
+ *
+ * @return array
*/
function __sleep() {
return array( 'partitionCache', 'fullResultCache', 'title' );
/**
* Get the slave connection to the database
* When non existing, will initialize the connection.
- * @return Database object
+ * @return DatabaseBase object
*/
protected function getDB() {
if ( !isset( $this->db ) ) {
/**
* Get the field name prefix for a given table
* @param $table String
+ * @return null|string
*/
protected function getPrefix( $table ) {
static $prefixes = array(
if ( isset( $prefixes[$table] ) ) {
return $prefixes[$table];
} else {
- throw new MWException( "Invalid table \"$table\" in " . __CLASS__ );
+ $prefix = null;
+ wfRunHooks( 'BacklinkCacheGetPrefix', array( $table, &$prefix ) );
+ if( $prefix ) {
+ return $prefix;
+ } else {
+ throw new MWException( "Invalid table \"$table\" in " . __CLASS__ );
+ }
}
}
* Get the SQL condition array for selecting backlinks, with a join
* on the page table.
* @param $table String
+ * @return array|null
*/
protected function getConditions( $table ) {
$prefix = $this->getPrefix( $table );
$conds = array(
"{$prefix}_namespace" => $this->title->getNamespace(),
"{$prefix}_title" => $this->title->getDBkey(),
- "{$prefix}_interwiki" => '',
+ $this->getDb()->makeList( array(
+ "{$prefix}_interwiki = ''",
+ "{$prefix}_interwiki is null",
+ ), LIST_OR ),
"page_id={$prefix}_from"
);
break;
);
break;
default:
- throw new MWException( "Invalid table \"$table\" in " . __CLASS__ );
+ $conds = null;
+ wfRunHooks( 'BacklinkCacheGetConditions', array( $table, $this->title, &$conds ) );
+ if( !$conds )
+ throw new MWException( "Invalid table \"$table\" in " . __CLASS__ );
}
return $conds;