Esempio n. 1
0
 /**
  * Fetches the site from the database and loads them into the sites field.
  *
  * @since 1.25
  */
 protected function loadSites()
 {
     $this->sites = new SiteList();
     $dbr = $this->dbLoadBalancer->getConnection(DB_SLAVE);
     $res = $dbr->select('sites', ['site_id', 'site_global_key', 'site_type', 'site_group', 'site_source', 'site_language', 'site_protocol', 'site_domain', 'site_data', 'site_forward', 'site_config'], '', __METHOD__, ['ORDER BY' => 'site_global_key']);
     foreach ($res as $row) {
         $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->setSource($row->site_source);
         $site->setExtraData(unserialize($row->site_data));
         $site->setExtraConfig(unserialize($row->site_config));
         $this->sites[] = $site;
     }
     // Batch load the local site identifiers.
     $ids = $dbr->select('site_identifiers', ['si_site', 'si_type', 'si_key'], [], __METHOD__);
     foreach ($ids as $id) {
         if ($this->sites->hasInternalId($id->si_site)) {
             $site = $this->sites->getSiteByInternalId($id->si_site);
             $site->addLocalId($id->si_type, $id->si_key);
             $this->sites->setSite($site);
         }
     }
     $this->dbLoadBalancer->reuseConnection($dbr);
 }
 /**
  * Returns a new Site object constructed from the provided ORMRow.
  *
  * @since 1.25
  *
  * @param ORMRow $siteRow
  *
  * @return Site
  */
 protected function siteFromRow(ORMRow $siteRow)
 {
     $site = Site::newForType($siteRow->getField('type', Site::TYPE_UNKNOWN));
     $site->setGlobalId($siteRow->getField('global_key'));
     $site->setInternalId($siteRow->getField('id'));
     if ($siteRow->hasField('forward')) {
         $site->setForward($siteRow->getField('forward'));
     }
     if ($siteRow->hasField('group')) {
         $site->setGroup($siteRow->getField('group'));
     }
     if ($siteRow->hasField('language')) {
         $site->setLanguageCode($siteRow->getField('language') === '' ? null : $siteRow->getField('language'));
     }
     if ($siteRow->hasField('source')) {
         $site->setSource($siteRow->getField('source'));
     }
     if ($siteRow->hasField('data')) {
         $site->setExtraData($siteRow->getField('data'));
     }
     if ($siteRow->hasField('config')) {
         $site->setExtraConfig($siteRow->getField('config'));
     }
     return $site;
 }
Esempio n. 3
0
 public function testImportFromFile()
 {
     $foo = Site::newForType(Site::TYPE_UNKNOWN);
     $foo->setGlobalId('Foo');
     $acme = Site::newForType(Site::TYPE_UNKNOWN);
     $acme->setGlobalId('acme.com');
     $acme->setGroup('Test');
     $acme->addLocalId(Site::ID_INTERWIKI, 'acme');
     $acme->setPath(Site::PATH_LINK, 'http://acme.com/');
     $dewiki = Site::newForType(Site::TYPE_MEDIAWIKI);
     $dewiki->setGlobalId('dewiki');
     $dewiki->setGroup('wikipedia');
     $dewiki->setForward(true);
     $dewiki->addLocalId(Site::ID_INTERWIKI, 'wikipedia');
     $dewiki->addLocalId(Site::ID_EQUIVALENT, 'de');
     $dewiki->setPath(Site::PATH_LINK, 'http://de.wikipedia.org/w/');
     $dewiki->setPath(MediaWikiSite::PATH_PAGE, 'http://de.wikipedia.org/wiki/');
     $dewiki->setSource('meta.wikimedia.org');
     $importer = $this->newSiteImporter(array($foo, $acme, $dewiki), 0);
     $file = __DIR__ . '/SiteImporterTest.xml';
     $importer->importFromFile($file);
 }
Esempio n. 4
0
 /**
  * @param DOMElement $siteElement
  *
  * @return Site
  * @throws InvalidArgumentException
  */
 public function makeSite(DOMElement $siteElement)
 {
     if ($siteElement->tagName !== 'site') {
         throw new InvalidArgumentException('Expected <site> tag, found ' . $siteElement->tagName);
     }
     $type = $this->getAttributeValue($siteElement, 'type', Site::TYPE_UNKNOWN);
     $site = Site::newForType($type);
     $site->setForward($this->hasChild($siteElement, 'forward'));
     $site->setGlobalId($this->getChildText($siteElement, 'globalid'));
     $site->setGroup($this->getChildText($siteElement, 'group', Site::GROUP_NONE));
     $site->setSource($this->getChildText($siteElement, 'source', Site::SOURCE_LOCAL));
     $pathTags = $siteElement->getElementsByTagName('path');
     for ($i = 0; $i < $pathTags->length; $i++) {
         $pathElement = $pathTags->item($i);
         $pathType = $this->getAttributeValue($pathElement, 'type');
         $path = $pathElement->textContent;
         $site->setPath($pathType, $path);
     }
     $idTags = $siteElement->getElementsByTagName('localid');
     for ($i = 0; $i < $idTags->length; $i++) {
         $idElement = $idTags->item($i);
         $idType = $this->getAttributeValue($idElement, 'type');
         $id = $idElement->textContent;
         $site->addLocalId($idType, $id);
     }
     //@todo: import <data>
     //@todo: import <config>
     return $site;
 }
 public function provideRoundTrip()
 {
     $foo = Site::newForType(Site::TYPE_UNKNOWN);
     $foo->setGlobalId('Foo');
     $acme = Site::newForType(Site::TYPE_UNKNOWN);
     $acme->setGlobalId('acme.com');
     $acme->setGroup('Test');
     $acme->addLocalId(Site::ID_INTERWIKI, 'acme');
     $acme->setPath(Site::PATH_LINK, 'http://acme.com/');
     $dewiki = Site::newForType(Site::TYPE_MEDIAWIKI);
     $dewiki->setGlobalId('dewiki');
     $dewiki->setGroup('wikipedia');
     $dewiki->setForward(true);
     $dewiki->addLocalId(Site::ID_INTERWIKI, 'wikipedia');
     $dewiki->addLocalId(Site::ID_EQUIVALENT, 'de');
     $dewiki->setPath(Site::PATH_LINK, 'http://de.wikipedia.org/w/');
     $dewiki->setPath(MediaWikiSite::PATH_PAGE, 'http://de.wikipedia.org/wiki/');
     $dewiki->setSource('meta.wikimedia.org');
     return array('empty' => array(new SiteList()), 'some' => array(new SiteList(array($foo, $acme, $dewiki))));
 }
 /**
  * @param array $data
  *
  * @return Site
  */
 private function newSiteFromArray(array $data)
 {
     $siteType = array_key_exists('type', $data) ? $data['type'] : Site::TYPE_UNKNOWN;
     $site = Site::newForType($siteType);
     $site->setGlobalId($data['globalid']);
     $site->setForward($data['forward']);
     $site->setGroup($data['group']);
     $site->setLanguageCode($data['language']);
     $site->setSource($data['source']);
     $site->setExtraData($data['data']);
     $site->setExtraConfig($data['config']);
     foreach ($data['identifiers'] as $identifier) {
         $site->addLocalId($identifier['type'], $identifier['key']);
     }
     return $site;
 }