/** * @param Entity $entity */ private function buildResult(Entity $entity) { $builder = $this->getResultBuilder(); if ($entity instanceof FingerprintProvider) { $fingerprint = $entity->getFingerprint(); $builder->addLabels($fingerprint->getLabels(), 'entity'); $builder->addDescriptions($fingerprint->getDescriptions(), 'entity'); $builder->addAliasGroupList($fingerprint->getAliasGroups(), 'entity'); } if ($entity instanceof Item) { $builder->addSiteLinkList($entity->getSiteLinkList(), 'entity'); } $builder->addStatements($entity->getClaims(), 'entity'); }
/** * @see ChangeOp::apply */ public function apply(Entity $entity, Summary $summary = null) { if (!$entity instanceof Item) { throw new InvalidArgumentException('ChangeOpSiteLink can only be applied to Item instances'); } $siteLinks = $entity->getSiteLinkList(); if ($this->pageName === null && $this->badges === null || $this->pageName === '') { if ($siteLinks->hasLinkWithSiteId($this->siteId)) { $this->updateSummary($summary, 'remove', $this->siteId, $siteLinks->getBySiteId($this->siteId)->getPageName()); $siteLinks->removeLinkWithSiteId($this->siteId); } else { //TODO: throw error, or ignore silently? } } else { $commentArgs = array(); if ($this->pageName === null) { if (!$siteLinks->hasLinkWithSiteId($this->siteId)) { throw new InvalidArgumentException('The sitelink does not exist'); } // If page name is not set (but badges are) make sure that it remains intact $pageName = $siteLinks->getBySiteId($this->siteId)->getPageName(); } else { $pageName = $this->pageName; $commentArgs[] = $pageName; } $action = $siteLinks->hasLinkWithSiteId($this->siteId) ? 'set' : 'add'; $badges = $this->applyBadges($siteLinks, $action, $commentArgs); $this->updateSummary($summary, $action, $this->siteId, $commentArgs); // FIXME: Use SiteLinkList::setNewSiteLink. $siteLinks->removeLinkWithSiteId($this->siteId); $siteLinks->addNewSiteLink($this->siteId, $pageName, $badges); } }
private function createEntity(Entity $entity) { $entity->setId(null); $entity->setStatements(new StatementList()); if ($entity instanceof Item) { $siteLinkList = $this->badgeItemUpdater->replaceBadges($entity->getSiteLinkList()); $entity->setSiteLinkList($siteLinkList); } return $this->entityStore->saveEntity($entity, 'Import entity', $this->importUser, EDIT_NEW); }