public function testItemSerializerWithOptionObjectsForMaps()
 {
     $serializer = $this->buildSerializer(true);
     $item = new Item();
     $item->addSiteLink(new SiteLink('enwiki', 'Nyan Cat'));
     $sitelinks = new \stdClass();
     $sitelinks->enwiki = array('site' => 'enwiki', 'title' => 'Nyan Cat', 'badges' => array());
     $serial = array('type' => 'item', 'labels' => array(), 'descriptions' => array(), 'aliases' => array(), 'claims' => array(), 'sitelinks' => $sitelinks);
     $this->assertEquals($serial, $serializer->serialize($item));
 }
 public function deserializationProvider()
 {
     $provider = array(array(new Item(), array('type' => 'item')));
     $item = new Item(new ItemId('Q42'));
     $provider[] = array($item, array('type' => 'item', 'id' => 'Q42'));
     $item = new Item();
     $item->getFingerprint()->setLabel('en', 'foo');
     $provider[] = array($item, array('type' => 'item', 'labels' => array('en' => array('lang' => 'en', 'value' => 'foo'))));
     $item = new Item();
     $item->getFingerprint()->setDescription('en', 'foo');
     $provider[] = array($item, array('type' => 'item', 'descriptions' => array('en' => array('lang' => 'en', 'value' => 'foo'))));
     $item = new Item();
     $item->getFingerprint()->setAliasGroup('en', array('foo', 'bar'));
     $provider[] = array($item, array('type' => 'item', 'aliases' => array('en' => array('lang' => 'en', 'values' => array('foo', 'bar')))));
     $item = new Item();
     $item->getStatements()->addNewStatement(new PropertyNoValueSnak(42), null, null, 'test');
     $provider[] = array($item, array('type' => 'item', 'claims' => array('P42' => array(array('mainsnak' => array('snaktype' => 'novalue', 'property' => 'P42'), 'type' => 'statement', 'rank' => 'normal')))));
     $item = new Item();
     $item->addSiteLink(new SiteLink('enwiki', 'Nyan Cat'));
     $provider[] = array($item, array('type' => 'item', 'sitelinks' => array('enwiki' => array('site' => 'enwiki', 'title' => 'Nyan Cat', 'badges' => array()))));
     return $provider;
 }
 public function entityProvider()
 {
     $entities = array();
     $entity = new Item(new ItemId('Q42'));
     $entities[] = array($entity);
     $entity = new Item();
     $entity->setLabels(array('en' => 'Nyan Cat', 'fr' => 'Nyan Cat'));
     $entities[] = array($entity);
     $entity = new Item();
     $entity->setDescriptions(array('en' => 'A Nyan Cat', 'fr' => 'A Nyan Cat'));
     $entities[] = array($entity);
     $entity = new Item();
     $entity->setAliases('en', array('Cat', 'My cat'));
     $entity->setAliases('fr', array('Cat'));
     $entities[] = array($entity);
     $entity = new Item();
     $entity->getStatements()->addNewStatement(new PropertyNoValueSnak(42), null, null, 'guid');
     $entities[] = array($entity);
     $item = new Item();
     $item->addSiteLink(new SiteLink('enwiki', 'Nyan Cat'));
     $entities[] = array($item);
     $entities[] = array(Property::newFromType('string'));
     return $entities;
 }
 /**
  * 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);
 }
Example #5
0
 public function testAddSiteLinkOverridesOldLinks()
 {
     $item = new Item();
     $item->getSiteLinkList()->addNewSiteLink('kittens', 'foo');
     $newLink = new SiteLink('kittens', 'bar');
     $item->addSiteLink($newLink);
     $this->assertTrue($item->getSiteLinkList()->getBySiteId('kittens')->equals($newLink));
 }