Path: blob/master/src/applications/auth/controller/message/PhabricatorAuthMessageViewController.php
12263 views
<?php12final class PhabricatorAuthMessageViewController3extends PhabricatorAuthMessageController {45public function handleRequest(AphrontRequest $request) {6$viewer = $this->getViewer();78$this->requireApplicationCapability(9AuthManageProvidersCapability::CAPABILITY);1011// The "id" in the URI may either be an actual storage record ID (if a12// message has already been created) or a message type key (for a message13// type which does not have a record yet).1415// This flow allows messages which have not been set yet to have a detail16// page (so users can get detailed information about the message and see17// any default value).1819$id = $request->getURIData('id');20if (ctype_digit($id)) {21$message = id(new PhabricatorAuthMessageQuery())22->setViewer($viewer)23->withIDs(array($id))24->executeOne();25if (!$message) {26return new Aphront404Response();27}28} else {29$types = PhabricatorAuthMessageType::getAllMessageTypes();30if (!isset($types[$id])) {31return new Aphront404Response();32}3334// If this message type already has a storage record, redirect to the35// canonical page for the record.36$message = id(new PhabricatorAuthMessageQuery())37->setViewer($viewer)38->withMessageKeys(array($id))39->executeOne();40if ($message) {41$message_uri = $message->getURI();42return id(new AphrontRedirectResponse())->setURI($message_uri);43}4445// Otherwise, create an empty placeholder message object with the46// appropriate message type.47$message = PhabricatorAuthMessage::initializeNewMessage($types[$id]);48}4950$crumbs = $this->buildApplicationCrumbs()51->addTextCrumb($message->getMessageType()->getDisplayName())52->setBorder(true);5354$header = $this->buildHeaderView($message);55$properties = $this->buildPropertiesView($message);56$curtain = $this->buildCurtain($message);5758if ($message->getID()) {59$timeline = $this->buildTransactionTimeline(60$message,61new PhabricatorAuthMessageTransactionQuery());62$timeline->setShouldTerminate(true);63} else {64$timeline = null;65}6667$view = id(new PHUITwoColumnView())68->setHeader($header)69->setCurtain($curtain)70->setMainColumn(71array(72$timeline,73))74->addPropertySection(pht('Details'), $properties);7576return $this->newPage()77->setTitle($message->getMessageTypeDisplayName())78->setCrumbs($crumbs)79->setPageObjectPHIDs(80array(81$message->getPHID(),82))83->appendChild($view);84}8586private function buildHeaderView(PhabricatorAuthMessage $message) {87$viewer = $this->getViewer();8889$view = id(new PHUIHeaderView())90->setViewer($viewer)91->setHeader($message->getMessageTypeDisplayName());9293return $view;94}9596private function buildPropertiesView(PhabricatorAuthMessage $message) {97$viewer = $this->getViewer();9899$message_type = $message->getMessageType();100101$view = id(new PHUIPropertyListView())102->setViewer($viewer);103104$full_description = $message_type->getFullDescription();105if (strlen($full_description)) {106$view->addTextContent(new PHUIRemarkupView($viewer, $full_description));107} else {108$short_description = $message_type->getShortDescription();109$view->addProperty(pht('Description'), $short_description);110}111112$message_text = $message->getMessageText();113if (strlen($message_text)) {114$view->addSectionHeader(115pht('Message Preview'),116PHUIPropertyListView::ICON_SUMMARY);117118$view->addTextContent(new PHUIRemarkupView($viewer, $message_text));119}120121$default_text = $message_type->getDefaultMessageText();122if (strlen($default_text)) {123$view->addSectionHeader(124pht('Default Message'),125PHUIPropertyListView::ICON_SUMMARY);126127$view->addTextContent(new PHUIRemarkupView($viewer, $default_text));128}129130return $view;131}132133private function buildCurtain(PhabricatorAuthMessage $message) {134$viewer = $this->getViewer();135$id = $message->getID();136137$can_edit = PhabricatorPolicyFilter::hasCapability(138$viewer,139$message,140PhabricatorPolicyCapability::CAN_EDIT);141142if ($id) {143$edit_uri = urisprintf('message/edit/%s/', $id);144$edit_name = pht('Edit Message');145} else {146$edit_uri = urisprintf('message/edit/');147$params = array(148'messageKey' => $message->getMessageKey(),149);150$edit_uri = new PhutilURI($edit_uri, $params);151152$edit_name = pht('Customize Message');153}154$edit_uri = $this->getApplicationURI($edit_uri);155156$curtain = $this->newCurtainView($message);157158$curtain->addAction(159id(new PhabricatorActionView())160->setName($edit_name)161->setIcon('fa-pencil')162->setHref($edit_uri)163->setDisabled(!$can_edit)164->setWorkflow(!$can_edit));165166return $curtain;167}168169}170171172