protected function renderObjectRef($object, PhabricatorObjectHandle $handle, $anchor, $id)
 {
     if ($this->getEngine()->isTextMode()) {
         return '#' . $id;
     }
     $tag = $handle->renderTag();
     $tag->setPHID($handle->getPHID());
     return $tag;
 }
 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);
 }
 protected function getDefaultPrivateReplyHandlerEmailAddress(PhabricatorObjectHandle $handle, $prefix)
 {
     if ($handle->getType() != PhabricatorPHIDConstants::PHID_TYPE_USER) {
         // You must be a real user to get a private reply handler address.
         return null;
     }
     $receiver = $this->getMailReceiver();
     $receiver_id = $receiver->getID();
     $user_id = $handle->getAlternateID();
     $hash = PhabricatorMetaMTAReceivedMail::computeMailHash($receiver->getMailKey(), $handle->getPHID());
     $domain = $this->getReplyHandlerDomain();
     $address = "{$prefix}{$receiver_id}+{$user_id}+{$hash}@{$domain}";
     return $this->getSingleReplyHandlerPrefix($address);
 }
 protected function getDefaultPrivateReplyHandlerEmailAddress(PhabricatorObjectHandle $handle, $prefix)
 {
     if ($handle->getType() != PhabricatorPeopleUserPHIDType::TYPECONST) {
         // You must be a real user to get a private reply handler address.
         return null;
     }
     $user = id(new PhabricatorPeopleQuery())->setViewer(PhabricatorUser::getOmnipotentUser())->withPHIDs(array($handle->getPHID()))->executeOne();
     if (!$user) {
         // This may happen if a user was subscribed to something, and was then
         // deleted.
         return null;
     }
     $receiver = $this->getMailReceiver();
     $receiver_id = $receiver->getID();
     $user_id = $user->getID();
     $hash = PhabricatorObjectMailReceiver::computeMailHash($receiver->getMailKey(), $handle->getPHID());
     $domain = $this->getReplyHandlerDomain();
     $address = "{$prefix}{$receiver_id}+{$user_id}+{$hash}@{$domain}";
     return $this->getSingleReplyHandlerPrefix($address);
 }
 private function buildCommitView(PhabricatorObjectHandle $handle = null)
 {
     $request = $this->getRequest();
     $query = new PhabricatorAuditCommitQuery();
     $query->needCommitData(true);
     $use_pager = $this->filter != 'active';
     if ($use_pager) {
         $pager = new AphrontPagerView();
         $pager->setURI($request->getRequestURI(), 'offset');
         $pager->setOffset($request->getInt('offset'));
         $query->setOffset($pager->getOffset());
         $query->setLimit($pager->getPageSize() + 1);
     }
     switch ($this->filter) {
         case 'active':
         case 'author':
             $query->withAuthorPHIDs(array($handle->getPHID()));
             break;
         case 'packagecommits':
             $query->withPackagePHIDs(array($handle->getPHID()));
             break;
     }
     switch ($this->filter) {
         case 'active':
             $query->withStatus(PhabricatorAuditQuery::STATUS_OPEN);
             break;
         case 'author':
         case 'packagecommits':
             switch ($this->filterStatus) {
                 case 'open':
                     $query->withStatus(PhabricatorAuditQuery::STATUS_OPEN);
                     break;
             }
             break;
     }
     if ($handle) {
         $handle_name = phutil_escape_html($handle->getName());
     } else {
         $handle_name = null;
     }
     switch ($this->filter) {
         case 'active':
             $header = 'Problem Commits';
             $nodata = 'None of your commits have open concerns.';
             break;
         case 'author':
             $header = "Commits by {$handle_name}";
             $nodata = "No matching commits by {$handle_name}.";
             break;
         case 'commits':
             $header = "Commits";
             $nodata = "No matching commits.";
             break;
         case 'packagecommits':
             $header = "Commits in Package '{$handle_name}'";
             $nodata = "No matching commits in package '{$handle_name}'.";
             break;
     }
     $commits = $query->execute();
     if ($use_pager) {
         $commits = $pager->sliceResults($commits);
     }
     $view = new PhabricatorAuditCommitListView();
     $view->setUser($request->getUser());
     $view->setCommits($commits);
     $view->setNoDataString($nodata);
     $phids = $view->getRequiredHandlePHIDs();
     $handles = id(new PhabricatorObjectHandleData($phids))->loadHandles();
     $view->setHandles($handles);
     $panel = new AphrontPanelView();
     $panel->setHeader($header);
     $panel->appendChild($view);
     if ($use_pager) {
         $panel->appendChild($pager);
     }
     return $panel;
 }
 public function addButton(PhabricatorObjectHandle $handle, $button)
 {
     $this->buttons[$handle->getPHID()][] = $button;
     return $this;
 }
 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());
 }