public function handleRequest(AphrontRequest $request) { $viewer = $request->getViewer(); $object_name = trim($request->getStr('object_name')); $e_name = true; $errors = array(); if ($request->isFormPost()) { if (!$object_name) { $e_name = pht('Required'); $errors[] = pht('An object name is required.'); } if (!$errors) { $object = id(new PhabricatorObjectQuery())->setViewer($viewer)->withNames(array($object_name))->executeOne(); if (!$object) { $e_name = pht('Invalid'); $errors[] = pht('No object exists with that name.'); } if (!$errors) { // TODO: Let the adapters claim objects instead. if ($object instanceof DifferentialRevision) { $adapter = HeraldDifferentialRevisionAdapter::newLegacyAdapter($object, $object->loadActiveDiff()); } else { if ($object instanceof PhabricatorRepositoryCommit) { $adapter = id(new HeraldCommitAdapter())->setCommit($object); } else { if ($object instanceof ManiphestTask) { $adapter = id(new HeraldManiphestTaskAdapter())->setTask($object); } else { if ($object instanceof PholioMock) { $adapter = id(new HeraldPholioMockAdapter())->setMock($object); } else { if ($object instanceof PhrictionDocument) { $adapter = id(new PhrictionDocumentHeraldAdapter())->setDocument($object); } else { throw new Exception(pht('Can not build adapter for object!')); } } } } } $adapter->setIsNewObject(false); $rules = id(new HeraldRuleQuery())->setViewer($viewer)->withContentTypes(array($adapter->getAdapterContentType()))->withDisabled(false)->needConditionsAndActions(true)->needAppliedToPHIDs(array($object->getPHID()))->needValidateAuthors(true)->execute(); $engine = id(new HeraldEngine())->setDryRun(true); $effects = $engine->applyRules($rules, $adapter); $engine->applyEffects($effects, $adapter, $rules); $xscript = $engine->getTranscript(); return id(new AphrontRedirectResponse())->setURI('/herald/transcript/' . $xscript->getID() . '/'); } } } $form = id(new AphrontFormView())->setUser($viewer)->appendRemarkupInstructions(pht('Enter an object to test rules for, like a Diffusion commit (e.g., ' . '`rX123`) or a Differential revision (e.g., `D123`). You will be ' . 'shown the results of a dry run on the object.'))->appendChild(id(new AphrontFormTextControl())->setLabel(pht('Object Name'))->setName('object_name')->setError($e_name)->setValue($object_name))->appendChild(id(new AphrontFormSubmitControl())->setValue(pht('Test Rules'))); $box = id(new PHUIObjectBoxView())->setHeaderText(pht('Herald Test Console'))->setFormErrors($errors)->setForm($form); $nav = $this->buildSideNavView(); $nav->selectFilter('test'); $nav->appendChild($box); $crumbs = id($this->buildApplicationCrumbs())->addTextCrumb(pht('Test Console')); $nav->setCrumbs($crumbs); return $this->buildApplicationPage($nav, array('title' => pht('Test Console'))); }
protected function buildHeraldAdapter(PhabricatorLiskDAO $object, array $xactions) { $revision = id(new DifferentialRevisionQuery())->setViewer($this->getActor())->withPHIDs(array($object->getPHID()))->needActiveDiffs(true)->needReviewerStatus(true)->executeOne(); if (!$revision) { throw new Exception(pht('Failed to load revision for Herald adapter construction!')); } $adapter = HeraldDifferentialRevisionAdapter::newLegacyAdapter($revision, $revision->getActiveDiff()); $reviewers = $revision->getReviewerStatus(); $reviewer_phids = mpull($reviewers, 'getReviewerPHID'); $adapter->setExplicitReviewers($reviewer_phids); return $adapter; }
protected function buildHeraldAdapter(PhabricatorLiskDAO $object, array $xactions) { $unsubscribed_phids = PhabricatorEdgeQuery::loadDestinationPHIDs($object->getPHID(), PhabricatorEdgeConfig::TYPE_OBJECT_HAS_UNSUBSCRIBER); $subscribed_phids = PhabricatorSubscribersQuery::loadSubscribersForPHID($object->getPHID()); $revision = id(new DifferentialRevisionQuery())->setViewer($this->getActor())->withPHIDs(array($object->getPHID()))->needActiveDiffs(true)->needReviewerStatus(true)->executeOne(); if (!$revision) { throw new Exception(pht('Failed to load revision for Herald adapter construction!')); } $adapter = HeraldDifferentialRevisionAdapter::newLegacyAdapter($revision, $revision->getActiveDiff()); $reviewers = $revision->getReviewerStatus(); $reviewer_phids = mpull($reviewers, 'getReviewerPHID'); $adapter->setExplicitCCs($subscribed_phids); $adapter->setExplicitReviewers($reviewer_phids); $adapter->setForbiddenCCs($unsubscribed_phids); $adapter->setIsNewObject($this->getIsNewObject()); return $adapter; }