private function newSiteLinks()
 {
     $links = new SiteLinkList();
     $links->addNewSiteLink('enwiki', 'En Page');
     $links->addNewSiteLink('dewiki', 'De Page');
     return $links;
 }
 public function entitiesProvider()
 {
     $statements = new StatementList();
     $statements->addNewStatement(new PropertyNoValueSnak(1));
     $q1 = new Item(null, null, null, $statements);
     $siteLinks = new SiteLinkList();
     $siteLinks->addNewSiteLink('enwiki', 'Title');
     $q2 = new Item(null, null, $siteLinks);
     return array(array(array(), 0, 0), array(array($q1), 1, 0), array(array($q2), 0, 1), array(array($q1, $q2), 1, 1));
 }
 /**
  * @param SiteLinkList $siteLinks
  * @param Diff $patch
  *
  * @return SiteLinkList
  * @throws InvalidArgumentException
  */
 public function getPatchedSiteLinkList(SiteLinkList $siteLinks, Diff $patch)
 {
     $baseData = $this->getSiteLinksInDiffFormat($siteLinks);
     $patchedData = $this->patcher->patch($baseData, $patch);
     $patchedSiteLinks = new SiteLinkList();
     foreach ($patchedData as $siteId => $siteLinkData) {
         if (array_key_exists('name', $siteLinkData)) {
             $patchedSiteLinks->addNewSiteLink($siteId, $siteLinkData['name'], $this->getBadgesFromSiteLinkData($siteLinkData));
         }
     }
     return $patchedSiteLinks;
 }
 public function testPatchesMultipleSiteLinks()
 {
     $links = new SiteLinkList();
     $links->addNewSiteLink('dewiki', 'bar');
     $links->addNewSiteLink('nlwiki', 'baz', array(new ItemId('Q42')));
     $patch = new Diff(array('nlwiki' => new Diff(array('name' => new DiffOpChange('baz', 'kittens'), 'badges' => new Diff(array(new DiffOpRemove('Q42')), false))), 'frwiki' => new Diff(array('name' => new DiffOpAdd('Berlin'), 'badges' => new Diff(array(new DiffOpAdd('Q42')), false)))));
     $expectedLinks = new SiteLinkList();
     $expectedLinks->addNewSiteLink('dewiki', 'bar');
     $expectedLinks->addNewSiteLink('nlwiki', 'kittens');
     $expectedLinks->addNewSiteLink('frwiki', 'Berlin', array(new ItemId('Q42')));
     $this->assertLinksResultsFromPatch($expectedLinks, $links, $patch);
 }
Example #5
0
 /**
  * @see Comparable::equals
  *
  * Two items are considered equal if they are of the same
  * type and have the same value. The value does not include
  * the id, so entities with the same value but different id
  * are considered equal.
  *
  * @since 0.1
  *
  * @param mixed $target
  *
  * @return bool
  */
 public function equals($target)
 {
     if ($this === $target) {
         return true;
     }
     return $target instanceof self && $this->fingerprint->equals($target->fingerprint) && $this->siteLinks->equals($target->siteLinks) && $this->statements->equals($target->statements);
 }
Example #6
0
 private function setSiteLinksFromSerialization(SiteLinkList $siteLinkList, array $serialization)
 {
     if (!array_key_exists('sitelinks', $serialization)) {
         return;
     }
     $this->assertAttributeIsArray($serialization, 'sitelinks');
     foreach ($serialization['sitelinks'] as $siteLinksSerialization) {
         $siteLinkList->addSiteLink($this->siteLinkDeserializer->deserialize($siteLinksSerialization));
     }
 }
 /**
  * Main method. Does the actual work and sets the result.
  *
  * @since 0.1
  */
 public function execute()
 {
     $lookup = $this->revisionLookup;
     $params = $this->extractRequestParams();
     $this->validateParameters($params);
     // Sites are already tested through allowed params ;)
     $sites = $this->siteLinkTargetProvider->getSiteList($this->siteLinkGroups);
     /** @var Site $fromSite */
     list($fromSite, $fromPage) = $this->getSiteAndNormalizedPageName($sites, $params['fromsite'], $params['fromtitle']);
     /** @var Site $toSite */
     list($toSite, $toPage) = $this->getSiteAndNormalizedPageName($sites, $params['tosite'], $params['totitle']);
     $siteLinkStore = WikibaseRepo::getDefaultInstance()->getStore()->newSiteLinkStore();
     $fromId = $siteLinkStore->getItemIdForLink($fromSite->getGlobalId(), $fromPage);
     $toId = $siteLinkStore->getItemIdForLink($toSite->getGlobalId(), $toPage);
     $siteLinkList = new SiteLinkList();
     $flags = 0;
     $item = null;
     $summary = new Summary($this->getModuleName());
     $summary->addAutoSummaryArgs($fromSite->getGlobalId() . ':' . $fromPage, $toSite->getGlobalId() . ':' . $toPage);
     //FIXME: use ChangeOps for consistency!
     // Figure out which parts to use and what to create anew
     if ($fromId === null && $toId === null) {
         // create new item
         $item = new Item();
         $toLink = new SiteLink($toSite->getGlobalId(), $toPage);
         $item->addSiteLink($toLink);
         $siteLinkList->addSiteLink($toLink);
         $fromLink = new SiteLink($fromSite->getGlobalId(), $fromPage);
         $item->addSiteLink($fromLink);
         $siteLinkList->addSiteLink($fromLink);
         $flags |= EDIT_NEW;
         $summary->setAction('create');
     } elseif ($fromId === null && $toId !== null) {
         // reuse to-site's item
         /** @var Item $item */
         $itemRev = $lookup->getEntityRevision($toId, EntityRevisionLookup::LATEST_FROM_MASTER);
         $item = $itemRev->getEntity();
         $fromLink = new SiteLink($fromSite->getGlobalId(), $fromPage);
         $item->addSiteLink($fromLink);
         $siteLinkList->addSiteLink($fromLink);
         $summary->setAction('connect');
     } elseif ($fromId !== null && $toId === null) {
         // reuse from-site's item
         /** @var Item $item */
         $itemRev = $lookup->getEntityRevision($fromId, EntityRevisionLookup::LATEST_FROM_MASTER);
         $item = $itemRev->getEntity();
         $toLink = new SiteLink($toSite->getGlobalId(), $toPage);
         $item->addSiteLink($toLink);
         $siteLinkList->addSiteLink($toLink);
         $summary->setAction('connect');
     } elseif ($fromId->equals($toId)) {
         // no-op
         $this->errorReporter->dieError('Common item detected, sitelinks are both on the same item', 'common-item');
     } else {
         // dissimilar items
         $this->errorReporter->dieError('No common item detected, unable to link titles', 'no-common-item');
     }
     $this->resultBuilder->addSiteLinkList($siteLinkList, 'entity');
     $status = $this->getAttemptSaveStatus($item, $summary, $flags);
     $this->buildResult($item, $status);
 }
 /**
  * @param SiteLinkList $siteLinks
  * @param string &$action
  * @param array &$commentArgs
  *
  * @return ItemId[]
  */
 private function applyBadges(SiteLinkList $siteLinks, &$action, array &$commentArgs)
 {
     // If badges are not set in the change make sure they remain intact
     if ($this->badges === null) {
         return $siteLinks->hasLinkWithSiteId($this->siteId) ? $siteLinks->getBySiteId($this->siteId)->getBadges() : array();
     }
     if ($this->badgesAreEmptyAndUnchanged($siteLinks)) {
         return array();
     }
     $action .= $this->pageName === null ? '-badges' : '-both';
     $commentArgs[] = $this->badges;
     return $this->badges;
 }
 /**
  * @param SiteLinkList $siteLinkList
  * @param string $suffix
  *
  * @return SiteLinkList
  */
 public static function getSitelinksWiteSiteIdSuffix(SiteLinkList $siteLinkList, $suffix)
 {
     $filteredSiteLinkList = new SiteLinkList();
     foreach ($siteLinkList->getIterator() as $siteLink) {
         $siteId = $siteLink->getSiteId();
         if (substr($siteId, -strlen($suffix)) == $suffix) {
             $filteredSiteLinkList->addSiteLink($siteLink);
         }
     }
     return $filteredSiteLinkList;
 }
Example #10
0
 /**
  * Adds fake serialization to show a sitelink has been removed
  *
  * @since 0.5
  *
  * @param SiteLinkList $siteLinkList
  * @param array|string $path where the data is located
  */
 public function addRemovedSiteLinks(SiteLinkList $siteLinkList, $path)
 {
     $serializer = $this->serializerFactory->newSiteLinkSerializer();
     $values = array();
     foreach ($siteLinkList->toArray() as $siteLink) {
         $value = $serializer->serialize($siteLink);
         $value['removed'] = '';
         $values[$siteLink->getSiteId()] = $value;
     }
     if ($this->addMetaData) {
         $values = $this->modifier->modifyUsingCallback($values, null, $this->callbackFactory->getCallbackToSetArrayType('kvp', 'site'));
         $values[ApiResult::META_KVP_MERGE] = true;
     }
     $this->setList($path, 'sitelinks', $values, 'sitelink');
 }
 public function entityIdProvider()
 {
     $set1 = new StatementList();
     $this->addStatement($set1, 'Q1');
     $set2 = new StatementList();
     $this->addStatement($set2, 'Q20');
     $this->addStatement($set2, 'Q21');
     $set2->addNewStatement(new PropertyValueSnak(1, QuantityValue::newFromNumber(1, self::UNIT_PREFIX . 'Q22')));
     $siteLinks = new SiteLinkList();
     $siteLinks->addNewSiteLink('siteId', 'pageName', array(new ItemId('Q1')));
     return array(array(new StatementList(), null, array()), array($set1, null, array('P1', 'Q1')), array(new StatementList(), $siteLinks, array('Q1')), array($set1, $siteLinks, array('P1', 'Q1')), array($set2, null, array('P1', 'Q20', 'Q21', 'Q22')), array($set2, $siteLinks, array('P1', 'Q20', 'Q21', 'Q22', 'Q1')));
 }
Example #12
0
 public function testGivenSiteLinkWithExistingId_setNewSiteLinkReplacesIt()
 {
     $list = new SiteLinkList();
     $list->addNewSiteLink('enwiki', 'foo');
     $list->addNewSiteLink('dewiki', 'bar');
     $list->setNewSiteLink('enwiki', 'HAX');
     $expectedList = new SiteLinkList();
     $expectedList->addNewSiteLink('enwiki', 'HAX');
     $expectedList->addNewSiteLink('dewiki', 'bar');
     $this->assertEquals($expectedList, $list);
 }