public function processRequest()
 {
     $can_edit = $this->requireApplicationCapability(NuanceSourceManageCapability::CAPABILITY);
     $request = $this->getRequest();
     $user = $request->getUser();
     $source_id = $this->getSourceID();
     $is_new = !$source_id;
     if ($is_new) {
         $source = NuanceSource::initializeNewSource($user);
     } else {
         $source = id(new NuanceSourceQuery())->setViewer($user)->withIDs(array($source_id))->requireCapabilities(array(PhabricatorPolicyCapability::CAN_VIEW, PhabricatorPolicyCapability::CAN_EDIT))->executeOne();
     }
     if (!$source) {
         return new Aphront404Response();
     }
     $definition = NuanceSourceDefinition::getDefinitionForSource($source);
     $definition->setActor($user);
     $response = $definition->buildEditLayout($request);
     if ($response instanceof AphrontResponse) {
         return $response;
     }
     $layout = $response;
     $crumbs = $this->buildApplicationCrumbs();
     return $this->buildApplicationPage(array($crumbs, $layout), array('title' => $definition->getEditTitle()));
 }
 private function buildPropertyView(NuanceSource $source, PhabricatorActionListView $actions)
 {
     $viewer = $this->getRequest()->getUser();
     $properties = id(new PHUIPropertyListView())->setUser($viewer)->setObject($source)->setActionList($actions);
     $definition = NuanceSourceDefinition::getDefinitionForSource($source);
     $properties->addProperty(pht('Source Type'), $definition->getName());
     $descriptions = PhabricatorPolicyQuery::renderPolicyDescriptions($viewer, $source);
     $properties->addProperty(pht('Editable By'), $descriptions[PhabricatorPolicyCapability::CAN_EDIT]);
     return $properties;
 }
 public function handleRequest(AphrontRequest $request)
 {
     $viewer = $this->getViewer();
     $source = id(new NuanceSourceQuery())->setViewer($viewer)->withIDs(array($request->getURIData('id')))->executeOne();
     if (!$source) {
         return new Aphront404Response();
     }
     $def = NuanceSourceDefinition::getDefinitionForSource($source);
     $def->setActor($viewer);
     $response = $def->handleActionRequest($request);
     if ($response instanceof AphrontResponse) {
         return $response;
     }
     $title = $source->getName();
     $crumbs = $this->buildApplicationCrumbs();
     $crumbs->addTextCrumb($title);
     return $this->buildApplicationPage(array($crumbs, $response), array('title' => $title));
 }
 public function handleRequest(AphrontRequest $request)
 {
     $can_edit = $this->requireApplicationCapability(NuanceSourceManageCapability::CAPABILITY);
     $viewer = $this->getViewer();
     $sources_uri = $this->getApplicationURI('source/');
     $source_id = $request->getURIData('id');
     $is_new = !$source_id;
     if ($is_new) {
         $source = NuanceSource::initializeNewSource($viewer);
         $type = $request->getURIData('type');
         $map = NuanceSourceDefinition::getAllDefinitions();
         if (empty($map[$type])) {
             return new Aphront404Response();
         }
         $source->setType($type);
         $cancel_uri = $sources_uri;
     } else {
         $source = id(new NuanceSourceQuery())->setViewer($viewer)->withIDs(array($source_id))->requireCapabilities(array(PhabricatorPolicyCapability::CAN_VIEW, PhabricatorPolicyCapability::CAN_EDIT))->executeOne();
         if (!$source) {
             return new Aphront404Response();
         }
         $cancel_uri = $source->getURI();
     }
     $definition = NuanceSourceDefinition::getDefinitionForSource($source);
     $definition->setActor($viewer);
     $response = $definition->buildEditLayout($request);
     if ($response instanceof AphrontResponse) {
         return $response;
     }
     $layout = $response;
     $crumbs = $this->buildApplicationCrumbs();
     $crumbs->addTextCrumb(pht('Sources'), $sources_uri);
     if ($is_new) {
         $crumbs->addTextCrumb(pht('New'));
     } else {
         $crumbs->addTextCrumb($source->getName(), $cancel_uri);
         $crumbs->addTextCrumb(pht('Edit'));
     }
     return $this->buildApplicationPage(array($crumbs, $layout), array('title' => $definition->getEditTitle()));
 }