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); }
/** * @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); }
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; }
/** * 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'))); }
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); }