43 $this->dbProvider = $dbProvider;
66 $dbr = $this->dbProvider->getReplicaDatabase();
68 $res = $dbr->newSelectQueryBuilder()
83 ->orderBy(
'site_global_key' )
84 ->caller( __METHOD__ )->fetchResultSet();
86 foreach ( $res as $row ) {
88 $site->setGlobalId( $row->site_global_key );
89 $site->setInternalId( (
int)$row->site_id );
90 $site->setForward( (
bool)$row->site_forward );
91 $site->setGroup( $row->site_group );
92 $site->setLanguageCode( $row->site_language ===
''
96 $site->setSource( $row->site_source );
97 $site->setExtraData( unserialize( $row->site_data ) );
98 $site->setExtraConfig( unserialize( $row->site_config ) );
99 $this->sites[] = $site;
103 $ids = $dbr->newSelectQueryBuilder()
104 ->select( [
'si_site',
'si_type',
'si_key', ] )
105 ->from(
'site_identifiers' )
106 ->caller( __METHOD__ )->fetchResultSet();
108 foreach ( $ids as $id ) {
109 if ( $this->sites->hasInternalId( $id->si_site ) ) {
110 $site = $this->sites->getSiteByInternalId( $id->si_site );
111 $site->addLocalId( $id->si_type, $id->si_key );
112 $this->sites->setSite( $site );
125 if ( $this->sites ===
null ) {
129 return $this->sites->hasSite( $globalId ) ? $this->sites->getSite( $globalId ) :
null;
155 $dbw = $this->dbProvider->getPrimaryDatabase();
157 $dbw->startAtomic( __METHOD__ );
162 foreach (
$sites as $site ) {
163 if ( $site->getInternalId() !==
null ) {
164 $internalIds[] = $site->getInternalId();
169 'site_global_key' => $site->getGlobalId(),
170 'site_type' => $site->getType(),
171 'site_group' => $site->getGroup(),
172 'site_source' => $site->getSource(),
173 'site_language' => $site->getLanguageCode() ??
'',
174 'site_protocol' => $site->getProtocol(),
175 'site_domain' => strrev( $site->getDomain() ??
'' ) .
'.',
176 'site_data' => serialize( $site->getExtraData() ),
179 'site_forward' => $site->shouldForward() ? 1 : 0,
180 'site_config' => serialize( $site->getExtraConfig() ),
183 $rowId = $site->getInternalId();
184 if ( $rowId !==
null ) {
185 $dbw->newUpdateQueryBuilder()
188 ->where( [
'site_id' => $rowId ] )
189 ->caller( __METHOD__ )->execute();
191 $dbw->newInsertQueryBuilder()
192 ->insertInto(
'sites' )
194 ->caller( __METHOD__ )->execute();
195 $rowId = $dbw->insertId();
198 foreach ( $site->getLocalIds() as $idType => $ids ) {
199 foreach ( $ids as $id ) {
200 $localIds[] = [ $rowId, $idType, $id ];
205 if ( $internalIds !== [] ) {
206 $dbw->newDeleteQueryBuilder()
207 ->deleteFrom(
'site_identifiers' )
208 ->where( [
'si_site' => $internalIds ] )
209 ->caller( __METHOD__ )->execute();
212 foreach ( $localIds as $localId ) {
213 $dbw->newInsertQueryBuilder()
214 ->insertInto(
'site_identifiers' )
215 ->row( [
'si_site' => $localId[0],
'si_type' => $localId[1],
'si_key' => $localId[2] ] )
216 ->caller( __METHOD__ )->execute();
219 $dbw->endAtomic( __METHOD__ );
241 $dbw = $this->dbProvider->getPrimaryDatabase();
243 $dbw->startAtomic( __METHOD__ );
244 $dbw->newDeleteQueryBuilder()
245 ->deleteFrom(
'sites' )
246 ->where( IDatabase::ALL_ROWS )
247 ->caller( __METHOD__ )->execute();
248 $dbw->newDeleteQueryBuilder()
249 ->deleteFrom(
'site_identifiers' )
250 ->where( IDatabase::ALL_ROWS )
251 ->caller( __METHOD__ )->execute();
252 $dbw->endAtomic( __METHOD__ );
Holds a list of sites stored in the database.
reset()
Resets the SiteList.
loadSites()
Fetches the site from the database and loads them into the sites field.
clear()
Clears the list of sites stored in the database.
__construct(IConnectionProvider $dbProvider)
Array-like collection of Site objects.
Represents a single site.
static newForType( $siteType)
Interface for storing and retrieving Site objects.