public static function newFromHandle(PhabricatorObjectHandle $handle)
 {
     $token = id(new PhabricatorTypeaheadTokenView())->setKey($handle->getPHID())->setValue($handle->getFullName())->setIcon($handle->getIcon());
     if ($handle->isDisabled() || $handle->getStatus() == PhabricatorObjectHandle::STATUS_CLOSED) {
         $token->setTokenType(self::TYPE_DISABLED);
     } else {
         $token->setColor($handle->getTagColor());
     }
     return $token;
 }
 public static function newFromPolicyAndHandle($policy_identifier, PhabricatorObjectHandle $handle = null)
 {
     $is_global = PhabricatorPolicyQuery::isGlobalPolicy($policy_identifier);
     if ($is_global) {
         return PhabricatorPolicyQuery::getGlobalPolicy($policy_identifier);
     }
     $policy = PhabricatorPolicyQuery::getObjectPolicy($policy_identifier);
     if ($policy) {
         return $policy;
     }
     if (!$handle) {
         throw new Exception(pht("Policy identifier is an object PHID ('%s'), but no object handle " . "was provided. A handle must be provided for object policies.", $policy_identifier));
     }
     $handle_phid = $handle->getPHID();
     if ($policy_identifier != $handle_phid) {
         throw new Exception(pht("Policy identifier is an object PHID ('%s'), but the provided " . "handle has a different PHID ('%s'). The handle must correspond " . "to the policy identifier.", $policy_identifier, $handle_phid));
     }
     $policy = id(new PhabricatorPolicy())->setPHID($policy_identifier)->setHref($handle->getURI());
     $phid_type = phid_get_type($policy_identifier);
     switch ($phid_type) {
         case PhabricatorProjectProjectPHIDType::TYPECONST:
             $policy->setType(PhabricatorPolicyType::TYPE_PROJECT);
             $policy->setName($handle->getName());
             break;
         case PhabricatorPeopleUserPHIDType::TYPECONST:
             $policy->setType(PhabricatorPolicyType::TYPE_USER);
             $policy->setName($handle->getFullName());
             break;
         case PhabricatorPolicyPHIDTypePolicy::TYPECONST:
             // TODO: This creates a weird handle-based version of a rule policy.
             // It behaves correctly, but can't be applied since it doesn't have
             // any rules. It is used to render transactions, and might need some
             // cleanup.
             break;
         default:
             $policy->setType(PhabricatorPolicyType::TYPE_MASKED);
             $policy->setName($handle->getFullName());
             break;
     }
     $policy->makeEphemeral();
     return $policy;
 }
 protected function renderObjectEmbed($object, PhabricatorObjectHandle $handle, $options)
 {
     $name = $handle->getFullName();
     $href = $handle->getURI();
     $status_closed = PhabricatorObjectHandle::STATUS_CLOSED;
     $attr = array('phid' => $handle->getPHID(), 'closed' => $handle->getStatus() == $status_closed);
     return $this->renderHovertag($name, $href, $attr);
 }
 private function buildListFilters(PhabricatorObjectHandle $handle = null)
 {
     $request = $this->getRequest();
     $user = $request->getUser();
     $form = new AphrontFormView();
     $form->setUser($user);
     $show_status = false;
     $show_user = false;
     $show_project = false;
     $show_package = false;
     switch ($this->filter) {
         case 'audits':
         case 'commits':
             $show_status = true;
             break;
         case 'active':
             $show_user = true;
             break;
         case 'author':
         case 'user':
             $show_user = true;
             $show_status = true;
             break;
         case 'project':
             $show_project = true;
             $show_status = true;
             break;
         case 'package':
         case 'packagecommits':
             $show_package = true;
             $show_status = true;
             break;
     }
     if ($show_user || $show_project || $show_package) {
         if ($show_user) {
             $uri = '/typeahead/common/users/';
             $label = 'User';
         } else {
             if ($show_project) {
                 $uri = '/typeahead/common/projects/';
                 $label = 'Project';
             } else {
                 if ($show_package) {
                     $uri = '/typeahead/common/packages/';
                     $label = 'Package';
                 }
             }
         }
         $tok_value = null;
         if ($handle) {
             $tok_value = array($handle->getPHID() => $handle->getFullName());
         }
         $form->appendChild(id(new AphrontFormTokenizerControl())->setName('set_phid')->setLabel($label)->setLimit(1)->setDatasource($uri)->setValue($tok_value));
     }
     if ($show_status) {
         $form->appendChild(id(new AphrontFormToggleButtonsControl())->setName('status')->setLabel('Status')->setBaseURI($request->getRequestURI(), 'status')->setValue($this->filterStatus)->setButtons(array('all' => 'All', 'open' => 'Open')));
     }
     $form->appendChild(id(new AphrontFormSubmitControl())->setValue('Filter Audits'));
     $view = new AphrontListFilterView();
     $view->appendChild($form);
     return $view;
 }
 protected function buildHandleInformationDictionary(PhabricatorObjectHandle $handle)
 {
     return array('phid' => $handle->getPHID(), 'uri' => PhabricatorEnv::getProductionURI($handle->getURI()), 'typeName' => $handle->getTypeName(), 'type' => $handle->getType(), 'name' => $handle->getName(), 'fullName' => $handle->getFullName(), 'status' => $handle->getStatus());
 }