*
* @license GNU GPL v2+
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
+ * @author Daniel Kinzler
*/
class DBSiteStore implements SiteStore {
protected $sites = null;
/**
- * @since 1.25
- * @param null $sitesTable Unused since 1.27
+ * @var LoadBalancer
*/
- public function __construct( $sitesTable = null ) {
- if ( $sitesTable !== null ) {
- throw new InvalidArgumentException(
- __METHOD__ . ': $sitesTable parameter must be null'
- );
- }
+ private $dbLoadBalancer;
+
+ /**
+ * @var string[]
+ */
+ private $languageCodeMapping = [];
+
+ /**
+ * @since 1.27
+ *
+ * @todo: inject some kind of connection manager that is aware of the target wiki,
+ * instead of injecting a LoadBalancer.
+ *
+ * @param LoadBalancer $dbLoadBalancer
+ */
+ public function __construct( LoadBalancer $dbLoadBalancer ) {
+ $this->dbLoadBalancer = $dbLoadBalancer;
}
/**
protected function loadSites() {
$this->sites = new SiteList();
- $dbr = wfGetDB( DB_SLAVE );
+ $dbr = $this->dbLoadBalancer->getConnection( DB_SLAVE );
$res = $dbr->select(
'sites',
);
foreach ( $res as $row ) {
+ $languageCode = $row->site_language === '' ? null : $row->site_language;
+ if ( isset( $this->languageCodeMapping[ $languageCode ] ) ) {
+ $languageCode = $this->languageCodeMapping[ $languageCode ];
+ }
+
$site = Site::newForType( $row->site_type );
$site->setGlobalId( $row->site_global_key );
$site->setInternalId( (int)$row->site_id );
$site->setForward( (bool)$row->site_forward );
$site->setGroup( $row->site_group );
- $site->setLanguageCode( $row->site_language === ''
- ? null
- : $row->site_language
- );
+ $site->setLanguageCode( $languageCode );
$site->setSource( $row->site_source );
$site->setExtraData( unserialize( $row->site_data ) );
$site->setExtraConfig( unserialize( $row->site_config ) );
$this->sites->setSite( $site );
}
}
+
+ $this->dbLoadBalancer->reuseConnection( $dbr );
}
/**
return true;
}
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->dbLoadBalancer->getConnection( DB_MASTER );
$dbw->startAtomic( __METHOD__ );
$dbw->endAtomic( __METHOD__ );
+ $this->dbLoadBalancer->reuseConnection( $dbw );
+
$this->reset();
return $success;
* @return bool Success
*/
public function clear() {
- $dbw = wfGetDB( DB_MASTER );
+ $dbw = $this->dbLoadBalancer->getConnection( DB_MASTER );
$dbw->startAtomic( __METHOD__ );
$ok = $dbw->delete( 'sites', '*', __METHOD__ );
$ok = $dbw->delete( 'site_identifiers', '*', __METHOD__ ) && $ok;
$dbw->endAtomic( __METHOD__ );
+ $this->dbLoadBalancer->reuseConnection( $dbw );
+
$this->reset();
return $ok;
}
+ /**
+ * Provide an array that maps language codes
+ *
+ * @param string[] $newMapping
+ */
+ public function setLanguageCodeMapping( array $newMapping ) {
+ $this->languageCodeMapping = $newMapping;
+ }
+
}