Esempio n. 1
0
 private function addIdLinkForLanguage($languageCode)
 {
     $links = $this->item->getSiteLinkList();
     if ($links->hasLinkWithSiteId($languageCode . 'wiki')) {
         $this->simpleItem->ids[$languageCode . '_wikipedia'] = $links->getBySiteId($languageCode . 'wiki')->getPageName();
     }
 }
 /**
  * @param ItemId[] $links
  *
  * @return SiteLinkLookup
  */
 private function getSiteLinkLookup(array $links)
 {
     $siteLinkLookup = new HashSiteLinkStore();
     foreach ($links as $pageId => $itemId) {
         $pageName = self::PAGE_NAME_PREFIX . $pageId;
         $item = new Item($itemId);
         $item->getSiteLinkList()->addNewSiteLink('testwiki', $pageName);
         $item->getSiteLinkList()->addNewSiteLink('badwiki', $pageName);
         $item->getSiteLinkList()->addNewSiteLink('sadwiki', 'Other stuff');
         $siteLinkLookup->saveLinksOfItem($item);
     }
     return $siteLinkLookup;
 }
 private function addWikipediaHtmlUrl()
 {
     $wikiId = $this->getWikiId($this->languageCode);
     if ($this->item->getSiteLinkList()->hasLinkWithSiteId($wikiId)) {
         $this->simpleItem->wikipediaHtmlUrl = $this->urlBuilder->getSiteLinkBasedRerirectUrl($wikiId, $this->item->getId());
     }
 }
 /**
  * @return EntityRevisionLookup
  */
 private function getEntityRevisionLookup()
 {
     $repo = new MockRepository();
     $offsets = array('Q1' => 1100, 'Q2' => 1200);
     foreach ($offsets as $qid => $offset) {
         // entity 1, revision 1111
         $entity1 = new Item(new ItemId($qid));
         $entity1->setLabel('en', 'ORIGINAL');
         $entity1->getSiteLinkList()->addNewSiteLink('enwiki', 'Original');
         $repo->putEntity($entity1, $offset + 11);
         // entity 1, revision 1112
         $entity1->setLabel('de', 'HINZUGEFÜGT');
         $repo->putEntity($entity1, $offset + 12);
         // entity 1, revision 1113
         $entity1->setLabel('nl', 'Addiert');
         $repo->putEntity($entity1, $offset + 13);
         // entity 1, revision 1114
         $entity1->getSiteLinkList()->addNewSiteLink('dewiki', 'Testen');
         $repo->putEntity($entity1, $offset + 14);
         // entity 1, revision 1117
         $entity1->getSiteLinkList()->setSiteLink(new SiteLink('enwiki', 'Spam', array(new ItemId('Q12345'))));
         $repo->putEntity($entity1, $offset + 17);
         // entity 1, revision 1118
         $entity1->getSiteLinkList()->setSiteLink(new SiteLink('enwiki', 'Spam', array(new ItemId('Q54321'))));
         $repo->putEntity($entity1, $offset + 18);
     }
     return $repo;
 }
 /**
  * Get a SiteLink for a specific item and site
  *
  * @param Item $item
  * @param string $globalId
  *
  * @return SiteLink|null
  */
 private function getSiteLink($item, $globalId)
 {
     try {
         return $item->getSiteLinkList()->getBySiteId($globalId);
     } catch (OutOfBoundsException $e) {
         return null;
     }
 }
Esempio n. 6
0
 private function patchItem(Item $item, EntityDiff $patch)
 {
     $this->fingerprintPatcher->patchFingerprint($item->getFingerprint(), $patch);
     if ($patch instanceof ItemDiff) {
         $item->setSiteLinkList($this->siteLinkListPatcher->getPatchedSiteLinkList($item->getSiteLinkList(), $patch->getSiteLinkDiff()));
     }
     $item->setStatements($this->statementListPatcher->getPatchedStatementList($item->getStatements(), $patch->getClaimsDiff()));
 }
 public function testGivenUntrimmedPageName_generateDoesNotTrim()
 {
     $item = new Item();
     $item->getFingerprint()->setLabel('en', ' untrimmed label ');
     $item->getSiteLinkList()->addNewSiteLink('enwiki', ' untrimmed pageName ');
     $generator = new ItemSearchTextGenerator();
     $text = $generator->generate($item);
     $this->assertSame(" untrimmed label \n untrimmed pageName ", $text);
 }
Esempio n. 8
0
 public function testGivenEmptyDiff_itemIsReturnedAsIs()
 {
     $item = new Item();
     $item->getFingerprint()->setLabel('en', 'foo');
     $item->getSiteLinkList()->addNewSiteLink('enwiki', 'bar');
     $patchedItem = $this->getPatchedItem($item, new ItemDiff());
     $this->assertInstanceOf('Wikibase\\DataModel\\Entity\\Item', $patchedItem);
     $this->assertTrue($item->equals($patchedItem));
 }
 /**
  * @param Item $item
  *
  * @return string
  */
 public function generate(Item $item)
 {
     $fingerprintGenerator = new FingerprintSearchTextGenerator();
     $text = $fingerprintGenerator->generate($item->getFingerprint());
     foreach ($item->getSiteLinkList()->toArray() as $siteLink) {
         $text .= "\n" . $siteLink->getPageName();
     }
     return trim($text, "\n");
 }
 /**
  * @depends testCreateItem
  * @depends testSetSitelink
  */
 public function testLinkSitelinks()
 {
     $factory = $factory = TestEnvironment::newDefault()->getFactory();
     $enwikiLondon = new SiteLink('enwiki', 'London');
     $dewikiBerlin = new Sitelink('dewiki', 'Berlin');
     $r = $factory->newSiteLinkLinker()->link($enwikiLondon, $dewikiBerlin);
     $this->assertTrue($r);
     self::$localItem->getSiteLinkList()->addSiteLink($dewikiBerlin);
 }
Esempio n. 11
0
 public function testConstructionDiffContainsAddOperations()
 {
     $item = new Item();
     $item->getFingerprint()->setLabel('en', 'foo');
     $item->getSiteLinkList()->addNewSiteLink('bar', 'baz');
     $differ = new ItemDiffer();
     $diff = $differ->getConstructionDiff($item);
     $this->assertEquals(new Diff(array('en' => new DiffOpAdd('foo'))), $diff->getLabelsDiff());
     $this->assertEquals(new Diff(array('bar' => new Diff(array('name' => new DiffOpAdd('baz'))))), $diff->getSiteLinkDiff());
 }
Esempio n. 12
0
 private function generateSitelinksChangeOps()
 {
     foreach ($this->fromItem->getSiteLinkList()->toArray() as $fromSiteLink) {
         $siteId = $fromSiteLink->getSiteId();
         if (!$this->toItem->getSiteLinkList()->hasLinkWithSiteId($siteId)) {
             $this->generateSitelinksChangeOpsWithNoConflict($fromSiteLink);
         } else {
             $this->generateSitelinksChangeOpsWithConflict($fromSiteLink);
         }
     }
 }
Esempio n. 13
0
 private function getLinksInDiffFormat(Item $item)
 {
     $links = array();
     /**
      * @var SiteLink $siteLink
      */
     foreach ($item->getSiteLinkList() as $siteLink) {
         $links[$siteLink->getSiteId()] = array('name' => $siteLink->getPageName(), 'badges' => array_map(function (ItemId $id) {
             return $id->getSerialization();
         }, $siteLink->getBadges()));
     }
     return $links;
 }
 /**
  * @param EntityId $id
  *
  * @throws InvalidArgumentException
  * @return Item|Property
  */
 protected function makeEntity(EntityId $id)
 {
     if ($id instanceof ItemId) {
         $entity = new Item($id);
         $entity->getSiteLinkList()->addNewSiteLink('test', 'Foo');
     } elseif ($id instanceof PropertyId) {
         $entity = new Property($id, null, 'wibblywobbly');
     } else {
         throw new InvalidArgumentException('Unsupported entity type ' . $id->getEntityType());
     }
     $entity->setLabel('en', 'label:' . $id->getSerialization());
     return $entity;
 }
 public function testValidateEntity_conflict()
 {
     $badEntity = new Item(new ItemId('Q7'));
     $badEntity->getSiteLinkList()->addNewSiteLink('testwiki', 'DUPE');
     $siteLinkConflictLookup = $this->getMockSiteLinkConflictLookup();
     $validator = new SiteLinkUniquenessValidator($siteLinkConflictLookup);
     $result = $validator->validateEntity($badEntity);
     $this->assertFalse($result->isValid(), 'isValid');
     $errors = $result->getErrors();
     $this->assertEquals('sitelink-conflict', $errors[0]->getCode());
     $this->assertInstanceOf('Wikibase\\Repo\\Validators\\UniquenessViolation', $errors[0]);
     //NOTE: ChangeOpTestMockProvider::getSiteLinkConflictsForItem() uses 'Q666' as
     //      the conflicting item for all site links with the name 'DUPE'.
     $this->assertEquals('Q666', $errors[0]->getConflictingEntity());
 }
 private function createItems()
 {
     $store = WikibaseRepo::getDefaultInstance()->getEntityStore();
     $badge = new Item();
     $badge->setLabel('de', 'Guter Artikel');
     $store->saveEntity($badge, "testing", $GLOBALS['wgUser'], EDIT_NEW);
     $item = new Item();
     $item->getSiteLinkList()->addNewSiteLink('dewiki', 'Wikidata', array($badge->getId()));
     $store->saveEntity($item, "testing", $GLOBALS['wgUser'], EDIT_NEW);
     $redirect = new EntityRedirect(new ItemId('Q12345678'), $item->getId());
     $store->saveRedirect($redirect, "testing", $GLOBALS['wgUser'], EDIT_NEW);
     self::$badgeId = $badge->getId()->getSerialization();
     self::$itemId = $item->getId()->getSerialization();
     self::$redirectId = $redirect->getEntityId()->getSerialization();
 }
 /**
  * @dataProvider runProvider
  *
  * @param bool $expected
  * @param bool $titleExists
  * @param string $oldTitle
  */
 public function testRun($expected, $titleExists, $oldTitle)
 {
     $item = new Item();
     $item->getSiteLinkList()->addNewSiteLink('enwiki', 'Delete me', array(new ItemId('Q42')));
     $mockRepository = new MockRepository();
     $user = User::newFromName('UpdateRepo');
     // Needed as UpdateRepoOnDeleteJob instantiates a User object
     $user->addToDatabase();
     $mockRepository->saveEntity($item, 'UpdateRepoOnDeleteJobTest', $user, EDIT_NEW);
     $params = array('siteId' => 'enwiki', 'entityId' => $item->getId()->getSerialization(), 'title' => $oldTitle, 'user' => $user->getName());
     $job = new UpdateRepoOnDeleteJob(Title::newMainPage(), $params);
     $job->initServices($mockRepository, $mockRepository, $this->getSummaryFormatter(), $this->getSiteStore($titleExists), new EditEntityFactory($this->getEntityTitleLookup($item->getId()), $mockRepository, $mockRepository, $this->getEntityPermissionChecker(), $this->getMockEditFitlerHookRunner()));
     $job->run();
     $item = $mockRepository->getEntity($item->getId());
     $this->assertSame(!$expected, $item->getSiteLinkList()->hasLinkWithSiteId('enwiki'), 'Sitelink has been removed.');
 }
Esempio n. 18
0
 public function provideApplyData()
 {
     $originalTests = $this->generateApplyData(Item::ENTITY_TYPE);
     $tests = array();
     /**
      * @var Item $a
      * @var Item $b
      */
     // add link ------------------------------
     $a = new Item();
     $a->getSiteLinkList()->addNewSiteLink('enwiki', 'Test', array(new ItemId('Q42'), new ItemId('Q3')));
     $b = $a->copy();
     $b->getSiteLinkList()->addNewSiteLink('dewiki', 'Test', array(new ItemId('Q42')));
     $tests[] = array($a, $b);
     // add badges
     $a = new Item();
     $a->getSiteLinkList()->addNewSiteLink('enwiki', 'Test', array(new ItemId('Q42')));
     $b = new Item();
     $b->getSiteLinkList()->addNewSiteLink('enwiki', 'Test', array(new ItemId('Q42'), new ItemId('Q3')));
     $tests[] = array($a, $b);
     // remove badges
     $a = new Item();
     $a->getSiteLinkList()->addNewSiteLink('enwiki', 'Test', array(new ItemId('Q42'), new ItemId('Q3')));
     $b = new Item();
     $b->getSiteLinkList()->addNewSiteLink('enwiki', 'Test', array(new ItemId('Q42')));
     // modify badges
     $a = new Item();
     $a->getSiteLinkList()->addNewSiteLink('enwiki', 'Test', array(new ItemId('Q41'), new ItemId('Q3')));
     $b = new Item();
     $b->getSiteLinkList()->addNewSiteLink('enwiki', 'Test', array(new ItemId('Q42'), new ItemId('Q3')));
     $tests[] = array($a, $b);
     // remove link
     $a = new Item();
     $a->getSiteLinkList()->addNewSiteLink('enwiki', 'Test', array(new ItemId('Q42')));
     $a->getSiteLinkList()->addNewSiteLink('dewiki', 'Test', array(new ItemId('Q3')));
     $b = $a->copy();
     $b->getSiteLinkList()->removeLinkWithSiteId('enwiki');
     $tests[] = array($a, $b);
     // change link
     $a = new Item();
     $a->getSiteLinkList()->addNewSiteLink('enwiki', 'Test', array(new ItemId('Q42'), new ItemId('Q3')));
     $b = new Item();
     $b->getSiteLinkList()->addNewSiteLink('enwiki', 'Test!!!', array(new ItemId('Q42'), new ItemId('Q3')));
     $tests[] = array($a, $b);
     return array_merge($originalTests, $tests);
 }
 public function testAttemptSave()
 {
     $mockApiBase = $this->getMockApiBase();
     $mockApiBase->expects($this->once())->method('isWriteMode')->will($this->returnValue(true));
     $mockApiBase->expects($this->atLeastOnce())->method('getContext')->will($this->returnValue($this->newContext()));
     $mockApiBase->expects($this->atLeastOnce())->method('extractRequestParams')->will($this->returnValue(array()));
     $helper = new EntitySavingHelper($mockApiBase, $this->getMockErrorReporter(), $this->getMockSummaryFormatter(), $this->getMockEditEntityFactory(1));
     $entity = new Item();
     $entity->setId(new ItemId('Q444'));
     $entity->getFingerprint()->setLabel('en', 'Foo');
     $entity->getSiteLinkList()->addNewSiteLink('enwiki', 'APage');
     $entity->getStatements()->addNewStatement(new PropertyNoValueSnak(new PropertyId('P8')));
     $summary = 'A String Summary';
     $flags = 0;
     $status = $helper->attemptSaveEntity($entity, $summary, $flags);
     $this->assertTrue($status->isGood());
 }
 /**
  * @dataProvider runProvider
  * @param string $expected
  * @param string $normalizedPageName
  * @param string $oldTitle
  */
 public function testRun($expected, $normalizedPageName, $oldTitle)
 {
     $user = User::newFromName('UpdateRepo');
     // Needed as UpdateRepoOnMoveJob instantiates a User object
     $user->addToDatabase();
     $item = new Item();
     $item->getSiteLinkList()->addNewSiteLink('enwiki', 'Old page name', array(new ItemId('Q42')));
     $mockRepository = new MockRepository();
     $mockRepository->saveEntity($item, 'UpdateRepoOnDeleteJobTest', $user, EDIT_NEW);
     $params = array('siteId' => 'enwiki', 'entityId' => $item->getId()->getSerialization(), 'oldTitle' => $oldTitle, 'newTitle' => 'New page name', 'user' => $user->getName());
     $job = new UpdateRepoOnMoveJob(Title::newMainPage(), $params);
     $job->initServices($mockRepository, $mockRepository, $this->getSummaryFormatter(), $this->getSiteStore($normalizedPageName), new EditEntityFactory($this->getEntityTitleLookup($item->getId()), $mockRepository, $mockRepository, $this->getEntityPermissionChecker(), $this->getMockEditFitlerHookRunner()));
     $job->run();
     /** @var Item $item */
     $item = $mockRepository->getEntity($item->getId());
     $this->assertSame($expected, $item->getSiteLinkList()->getBySiteId('enwiki')->getPageName(), 'Title linked on enwiki after the job ran');
     $this->assertEquals($item->getSiteLinkList()->getBySiteId('enwiki')->getBadges(), array(new ItemId('Q42')));
 }
 private function getItems()
 {
     $items = array();
     $item = new Item(new ItemId('Q1'));
     $item->setLabel('en', 'Foo');
     $links = $item->getSiteLinkList();
     $links->addNewSiteLink('dewiki', 'Foo de');
     $links->addNewSiteLink('enwiki', 'Foo en', array(new ItemId('Q17')));
     $links->addNewSiteLink('srwiki', 'Foo sr');
     $links->addNewSiteLink('dewiktionary', 'Foo de word');
     $links->addNewSiteLink('enwiktionary', 'Foo en word');
     $items[] = $item;
     $item = new Item(new ItemId('Q2'));
     $item->setLabel('en', 'Talk:Foo');
     $links = $item->getSiteLinkList();
     $links->addNewSiteLink('dewiki', 'Talk:Foo de');
     $links->addNewSiteLink('enwiki', 'Talk:Foo en');
     $links->addNewSiteLink('srwiki', 'Talk:Foo sr');
     $items[] = $item;
     return $items;
 }
 public function execute()
 {
     global $wgUser;
     $user = $wgUser;
     $store = WikibaseRepo::getDefaultInstance()->getEntityStore();
     if (!defined('WB_VERSION')) {
         $this->output("You need to have Wikibase enabled in order to use this maintenance script!\n\n");
         exit;
     }
     $report = function ($message) {
         echo $message . "\n";
     };
     $items = array('Q1' => 'Universe', 'Q2' => 'Earth', 'Q3' => 'Life', 'Q4' => 'Death', 'Q5' => 'Human', 'Q8' => 'Happiness', 'Q13' => 'Triskaidekaphobia', 'Q23' => 'George Washington', 'Q24' => 'Jack Bauer', 'Q42' => 'Douglas Adams', 'Q80' => 'Tim Berners-Lee', 'Q666' => 'Number of the Beast', 'Q1337' => 'Leet', 'Q1868' => 'Paul Otlet', 'Q1971' => 'Imagine (song)', 'Q2001' => 'Stanley Kubrick', 'Q2012' => 'Maya calendar', 'Q2013' => 'Wikidata');
     $report('Starting import...');
     foreach ($items as $id => $name) {
         $report("   Importing {$name} as item {$id}...");
         $item = new Item(new ItemId($id));
         $item->getFingerprint()->setLabel('en', $name);
         $item->getSiteLinkList()->addNewSiteLink('enwiki', $name);
         $store->saveEntity($item, 'Import', $user, EDIT_NEW);
     }
     $report('Import completed.');
 }
 /**
  * @see SiteLinkConflictLookup::getConflictsForItem
  *
  * @param Item $item
  * @param DatabaseBase|null $db
  *
  * @return array[]
  */
 public function getConflictsForItem(Item $item, DatabaseBase $db = null)
 {
     $siteLinks = $item->getSiteLinkList();
     if ($siteLinks->isEmpty()) {
         return array();
     }
     if ($db) {
         $dbr = $db;
     } else {
         $dbr = $this->getConnection(DB_SLAVE);
     }
     $anyOfTheLinks = '';
     /** @var SiteLink $siteLink */
     foreach ($siteLinks as $siteLink) {
         if ($anyOfTheLinks !== '') {
             $anyOfTheLinks .= "\nOR ";
         }
         $anyOfTheLinks .= '(';
         $anyOfTheLinks .= 'ips_site_id=' . $dbr->addQuotes($siteLink->getSiteId());
         $anyOfTheLinks .= ' AND ';
         $anyOfTheLinks .= 'ips_site_page=' . $dbr->addQuotes($siteLink->getPageName());
         $anyOfTheLinks .= ')';
     }
     // TODO: $anyOfTheLinks might get very large and hit some size limit imposed
     //       by the database. We could chop it up of we know that size limit.
     //       For MySQL, it's select @@max_allowed_packet.
     $conflictingLinks = $dbr->select('wb_items_per_site', array('ips_site_id', 'ips_site_page', 'ips_item_id'), "({$anyOfTheLinks}) AND ips_item_id != " . (int) $item->getId()->getNumericId(), __METHOD__);
     $conflicts = array();
     foreach ($conflictingLinks as $link) {
         $conflicts[] = array('siteId' => $link->ips_site_id, 'itemId' => (int) $link->ips_item_id, 'sitePage' => $link->ips_site_page);
     }
     if (!$db) {
         $this->releaseConnection($dbr);
     }
     return $conflicts;
 }
 /**
  * Adds the site links of the given item to the RDF graph.
  *
  * @param Item $item
  */
 public function addSiteLinks(Item $item)
 {
     $entityLName = $this->vocabulary->getEntityLName($item->getId());
     /** @var SiteLink $siteLink */
     foreach ($item->getSiteLinkList() as $siteLink) {
         if (!$this->isSiteIncluded($siteLink->getSiteId())) {
             continue;
         }
         // FIXME: we should check the site exists using hasGlobalId here before asuming it does
         $site = $this->siteLookup->getSite($siteLink->getSiteId());
         // XXX: ideally, we'd use https if the target site supports it.
         $baseUrl = str_replace('$1', rawurlencode($siteLink->getPageName()), $site->getLinkPath());
         // $site->getPageUrl( $siteLink->getPageName() );
         if (!parse_url($baseUrl, PHP_URL_SCHEME)) {
             $url = "http:" . $baseUrl;
         } else {
             $url = $baseUrl;
         }
         $this->writer->about($url)->a(RdfVocabulary::NS_SCHEMA_ORG, 'Article')->say(RdfVocabulary::NS_SCHEMA_ORG, 'about')->is(RdfVocabulary::NS_ENTITY, $entityLName)->say(RdfVocabulary::NS_SCHEMA_ORG, 'inLanguage')->text($this->vocabulary->getCanonicalLanguageCode($site->getLanguageCode()));
         foreach ($siteLink->getBadges() as $badge) {
             $this->writer->say(RdfVocabulary::NS_ONTOLOGY, 'badge')->is(RdfVocabulary::NS_ENTITY, $this->vocabulary->getEntityLName($badge));
         }
     }
 }
 /**
  * @see https://phabricator.wikimedia.org/T68181
  */
 public function testAddEntityRevisionInIndexedModeWithSiteLinksFilter()
 {
     $item = new Item(new ItemId('Q123100'));
     $item->getSiteLinkList()->addNewSiteLink('enwiki', 'Berlin');
     $item->getSiteLinkList()->addNewSiteLink('dewiki', 'Berlin');
     $entityRevision = new EntityRevision($item);
     $props = array('sitelinks');
     $siteIds = array('enwiki');
     $result = $this->getDefaultResult();
     $resultBuilder = $this->getResultBuilder($result, true);
     $resultBuilder->addEntityRevision(null, $entityRevision, $props, $siteIds);
     $expected = array('entities' => array('Q123100' => array('id' => 'Q123100', 'type' => 'item', 'sitelinks' => array('enwiki' => array('site' => 'enwiki', 'title' => 'Berlin', 'badges' => array('_element' => 'badge')), '_element' => 'sitelink', '_type' => 'kvp', '_kvpkeyname' => 'site', '_kvpmerge' => true)), '_element' => 'entity', '_type' => 'kvp', '_kvpkeyname' => 'id', '_kvpmerge' => true), '_type' => 'assoc');
     $data = $result->getResultData();
     $this->assertEquals($expected, $data);
 }
Esempio n. 26
0
 private function addSiteLinksToSerialization(Item $item, array &$serialization)
 {
     $serialization['sitelinks'] = array();
     foreach ($item->getSiteLinkList()->toArray() as $siteLink) {
         $serialization['sitelinks'][$siteLink->getSiteId()] = $this->siteLinkSerializer->serialize($siteLink);
     }
     if ($this->useObjectsForMaps) {
         $serialization['sitelinks'] = (object) $serialization['sitelinks'];
     }
 }
 /**
  * @depends testSaveLinksOfItem
  * @dataProvider itemProvider
  */
 public function testGetItemIdForLink(Item $item)
 {
     foreach ($item->getSiteLinkList()->toArray() as $siteLink) {
         $this->assertEquals($item->getId(), $this->siteLinkTable->getItemIdForLink($siteLink->getSiteId(), $siteLink->getPageName()));
     }
 }
 public function testFullEntityGetEntityResponse()
 {
     $item = new Item(new ItemId('Q123098'));
     //Basic
     $item->setLabel('de', 'foo-de');
     $item->setLabel('qu', 'foo-qu');
     $item->setAliases('en', array('bar', 'baz'));
     $item->setAliases('de-formal', array('bar', 'baz'));
     $item->setDescription('en', 'en-desc');
     $item->setDescription('pt', 'ptDesc');
     $item->getSiteLinkList()->addNewSiteLink('enwiki', 'Berlin', array(new ItemId('Q333')));
     $item->getSiteLinkList()->addNewSiteLink('zh_classicalwiki', 'User:Addshore', array());
     $snak = new PropertyValueSnak(65, new StringValue('snakStringValue'));
     $qualifiers = new SnakList();
     $qualifiers->addSnak(new PropertyValueSnak(65, new StringValue('string!')));
     $qualifiers->addSnak(new PropertySomeValueSnak(65));
     $references = new ReferenceList();
     $references->addNewReference(array(new PropertySomeValueSnak(65), new PropertySomeValueSnak(68)));
     $guid = 'imaguid';
     $item->getStatements()->addNewStatement($snak, $qualifiers, $references, $guid);
     $entityLookup = new MockRepository();
     $entityLookup->putEntity($item);
     $entityAccessor = $this->getEntityAccessor($entityLookup, null, 'qug');
     $expected = array('id' => 'Q123098', 'type' => 'item', 'labels' => array('de' => array('language' => 'de', 'value' => 'foo-de')), 'descriptions' => array('en' => array('language' => 'en', 'value' => 'en-desc')), 'aliases' => array('en' => array(1 => array('language' => 'en', 'value' => 'bar'), 2 => array('language' => 'en', 'value' => 'baz'))), 'claims' => array('P65' => array(1 => array('id' => 'imaguid', 'type' => 'statement', 'mainsnak' => array('snaktype' => 'value', 'property' => 'P65', 'datatype' => 'structured-cat', 'datavalue' => array('value' => 'snakStringValue', 'type' => 'string')), 'qualifiers' => array('P65' => array(1 => array('hash' => 'e95e866e7fa1c18bd06dae9b712cb99545107eb8', 'snaktype' => 'value', 'property' => 'P65', 'datavalue' => array('value' => 'string!', 'type' => 'string'), 'datatype' => 'structured-cat'), 2 => array('hash' => '210b00274bf03247a89de918f15b12142ebf9e56', 'snaktype' => 'somevalue', 'property' => 'P65', 'datatype' => 'structured-cat'))), 'rank' => 'normal', 'qualifiers-order' => array(1 => 'P65'), 'references' => array(1 => array('hash' => 'bdc5f7185904d6d3219e13b7443571dda8c4bee8', 'snaks' => array('P65' => array(1 => array('snaktype' => 'somevalue', 'property' => 'P65', 'datatype' => 'structured-cat')), 'P68' => array(1 => array('snaktype' => 'somevalue', 'property' => 'P68', 'datatype' => 'structured-cat'))), 'snaks-order' => array(1 => 'P65', 2 => 'P68')))))), 'sitelinks' => array('enwiki' => array('site' => 'enwiki', 'title' => 'Berlin', 'badges' => array(1 => 'Q333')), 'zh_classicalwiki' => array('site' => 'zh_classicalwiki', 'title' => 'User:Addshore', 'badges' => array())), 'schemaVersion' => 2);
     $this->assertEquals($expected, $entityAccessor->getEntity('Q123098'));
 }
 private function getContent()
 {
     $item = new Item();
     $item->getFingerprint()->setLabel('en', 'Kitten');
     $item->getSiteLinkList()->addNewSiteLink('enwiki', 'Kitten');
     $item->getStatements()->addNewStatement(new PropertyNoValueSnak(new PropertyId('P1')));
     $entityContentFactory = WikibaseRepo::getDefaultInstance()->getEntityContentFactory();
     return $entityContentFactory->newFromEntity($item);
 }
 /**
  * @param Item $item
  */
 private function processItem(Item $item)
 {
     if (empty($this->siteLinkDataUpdaters)) {
         return;
     }
     foreach ($item->getSiteLinkList() as $siteLink) {
         foreach ($this->siteLinkDataUpdaters as $updater) {
             $updater->processSiteLink($siteLink);
         }
     }
 }