/** * Constructs an EntityChange from the given old and new Entity. * * @since 0.5 * * @param string $action The action name * @param EntityDocument|null $oldEntity * @param EntityDocument|null $newEntity * @param array $fields additional fields to set * * @return EntityChange * @throws MWException */ public function newFromUpdate($action, EntityDocument $oldEntity = null, EntityDocument $newEntity = null, array $fields = array()) { if ($oldEntity === null && $newEntity === null) { throw new MWException('Either $oldEntity or $newEntity must be given'); } if ($oldEntity === null) { $oldEntity = $this->entityFactory->newEmpty($newEntity->getType()); $id = $newEntity->getId(); } elseif ($newEntity === null) { $newEntity = $this->entityFactory->newEmpty($oldEntity->getType()); $id = $oldEntity->getId(); } elseif ($oldEntity->getType() !== $newEntity->getType()) { throw new MWException('Entity type mismatch'); } else { $id = $newEntity->getId(); } // HACK: don't include statements diff, since those are unused and not helpful // performance-wise to the dispatcher and change handling. // For a better solution, see T113468. if ($oldEntity instanceof StatementListHolder) { $oldEntity->setStatements(new StatementList()); $newEntity->setStatements(new StatementList()); } $diff = $this->entityDiffer->diffEntities($oldEntity, $newEntity); /** @var EntityChange $instance */ $instance = self::newForEntity($action, $id, $fields); $instance->setDiff($diff); return $instance; }
/** * Build the HTML form */ private function setForm() { $options = array($this->msg('wikibase-entitieswithoutlabel-label-alltypes')->text() => ''); foreach ($this->entityFactory->getEntityTypes() as $type) { // Messages: wikibase-entity-item, wikibase-entity-property, wikibase-entity-query $options[$this->msg('wikibase-entity-' . $type)->text()] = $type; } $this->getOutput()->addModules('wikibase.special.languageSuggester'); $formDescriptor = array('language' => array('name' => 'language', 'default' => $this->language, 'type' => 'text', 'cssclass' => 'wb-language-suggester', 'id' => 'wb-entitieswithoutpage-language', 'label-message' => 'wikibase-entitieswithoutlabel-label-language'), 'type' => array('name' => 'type', 'options' => $options, 'default' => $this->type, 'type' => 'select', 'id' => 'wb-entitieswithoutpage-type', 'label-message' => 'wikibase-entitieswithoutlabel-label-type'), 'submit' => array('name' => '', 'default' => $this->msg('wikibase-entitieswithoutlabel-submit')->text(), 'type' => 'submit', 'id' => 'wikibase-entitieswithoutpage-submit')); HTMLForm::factory('inline', $formDescriptor, $this->getContext())->setId('wb-entitieswithoutpage-form')->setMethod('get')->setWrapperLegendMsg($this->legendMsg)->suppressDefaultSubmit()->setSubmitCallback(function () { // no-op })->show(); }
/** * @see ModifyEntity::getAllowedParams */ protected function getAllowedParams() { return array_merge(parent::getAllowedParams(), array('data' => array(self::PARAM_TYPE => 'text', self::PARAM_REQUIRED => true), 'clear' => array(self::PARAM_TYPE => 'boolean', self::PARAM_DFLT => false), 'new' => array(self::PARAM_TYPE => $this->entityFactory->getEntityTypes()))); }
private function makeDiff($objectId, $revA, $revB) { $entityClasses = array(Item::ENTITY_TYPE => 'Wikibase\\DataModel\\Entity\\Item'); $lookup = $this->getEntityRevisionLookup(); $entityFactory = new EntityFactory($entityClasses); $itemId = new ItemId($objectId); if ($revA === 0) { $oldEntity = $entityFactory->newEmpty(Item::ENTITY_TYPE); } else { $oldEntity = $lookup->getEntityRevision($itemId, $revA)->getEntity(); } if ($revB === 0) { $newEntity = $entityFactory->newEmpty(Item::ENTITY_TYPE); } else { $newEntity = $lookup->getEntityRevision($itemId, $revB)->getEntity(); } $differ = new ItemDiffer(); return $differ->diffEntities($oldEntity, $newEntity); }