Path: blob/master/src/applications/macro/controller/PhabricatorMacroViewController.php
12241 views
<?php12final class PhabricatorMacroViewController3extends PhabricatorMacroController {45public function shouldAllowPublic() {6return true;7}89public function handleRequest(AphrontRequest $request) {10$viewer = $request->getViewer();11$id = $request->getURIData('id');1213$macro = id(new PhabricatorMacroQuery())14->setViewer($viewer)15->withIDs(array($id))16->needFiles(true)17->executeOne();18if (!$macro) {19return new Aphront404Response();20}2122$title_short = pht('Macro "%s"', $macro->getName());23$title_long = pht('Image Macro "%s"', $macro->getName());2425$curtain = $this->buildCurtain($macro);26$subheader = $this->buildSubheaderView($macro);27$file = $this->buildFileView($macro);28$details = $this->buildPropertySectionView($macro);2930$crumbs = $this->buildApplicationCrumbs();31$crumbs->addTextCrumb($macro->getName());32$crumbs->setBorder(true);3334$timeline = $this->buildTransactionTimeline(35$macro,36new PhabricatorMacroTransactionQuery());3738$comment_form = $this->buildCommentForm($macro, $timeline);3940$header = id(new PHUIHeaderView())41->setUser($viewer)42->setPolicyObject($macro)43->setHeader($macro->getName())44->setHeaderIcon('fa-file-image-o');4546if (!$macro->getIsDisabled()) {47$header->setStatus('fa-check', 'bluegrey', pht('Active'));48} else {49$header->setStatus('fa-ban', 'indigo', pht('Archived'));50}5152$view = id(new PHUITwoColumnView())53->setHeader($header)54->setSubheader($subheader)55->setCurtain($curtain)56->setMainColumn(array(57$timeline,58$comment_form,59))60->addPropertySection(pht('Macro'), $file)61->addPropertySection(pht('Details'), $details);6263return $this->newPage()64->setTitle($title_short)65->setCrumbs($crumbs)66->setPageObjectPHIDs(array($macro->getPHID()))67->appendChild($view);68}6970private function buildCommentForm(71PhabricatorFileImageMacro $macro, $timeline) {72$viewer = $this->getViewer();7374return id(new PhabricatorMacroEditEngine())75->setViewer($viewer)76->buildEditEngineCommentView($macro)77->setTransactionTimeline($timeline);78}7980private function buildCurtain(81PhabricatorFileImageMacro $macro) {82$can_manage = $this->hasApplicationCapability(83PhabricatorMacroManageCapability::CAPABILITY);8485$curtain = $this->newCurtainView($macro);8687$curtain->addAction(88id(new PhabricatorActionView())89->setName(pht('Edit Macro'))90->setHref($this->getApplicationURI('/edit/'.$macro->getID().'/'))91->setDisabled(!$can_manage)92->setWorkflow(!$can_manage)93->setIcon('fa-pencil'));9495$curtain->addAction(96id(new PhabricatorActionView())97->setName(pht('Edit Audio'))98->setHref($this->getApplicationURI('/audio/'.$macro->getID().'/'))99->setDisabled(!$can_manage)100->setWorkflow(!$can_manage)101->setIcon('fa-music'));102103if ($macro->getIsDisabled()) {104$curtain->addAction(105id(new PhabricatorActionView())106->setName(pht('Activate Macro'))107->setHref($this->getApplicationURI('/disable/'.$macro->getID().'/'))108->setWorkflow(true)109->setDisabled(!$can_manage)110->setIcon('fa-check'));111} else {112$curtain->addAction(113id(new PhabricatorActionView())114->setName(pht('Archive Macro'))115->setHref($this->getApplicationURI('/disable/'.$macro->getID().'/'))116->setWorkflow(true)117->setDisabled(!$can_manage)118->setIcon('fa-ban'));119}120121return $curtain;122}123124private function buildSubheaderView(125PhabricatorFileImageMacro $macro) {126$viewer = $this->getViewer();127128$author_phid = $macro->getAuthorPHID();129130$author = $viewer->renderHandle($author_phid)->render();131$date = phabricator_datetime($macro->getDateCreated(), $viewer);132$author = phutil_tag('strong', array(), $author);133134$handles = $viewer->loadHandles(array($author_phid));135$image_uri = $handles[$author_phid]->getImageURI();136$image_href = $handles[$author_phid]->getURI();137138if (!$date) {139$content = pht(140'Masterfully imagined by %s in ages long past.', $author);141} else {142$content = pht('Masterfully imagined by %s on %s.', $author, $date);143}144145return id(new PHUIHeadThingView())146->setImage($image_uri)147->setImageHref($image_href)148->setContent($content);149}150151private function buildPropertySectionView(152PhabricatorFileImageMacro $macro) {153$viewer = $this->getViewer();154155$view = id(new PHUIPropertyListView())156->setUser($viewer);157158switch ($macro->getAudioBehavior()) {159case PhabricatorFileImageMacro::AUDIO_BEHAVIOR_ONCE:160$view->addProperty(pht('Audio Behavior'), pht('Play Once'));161break;162case PhabricatorFileImageMacro::AUDIO_BEHAVIOR_LOOP:163$view->addProperty(pht('Audio Behavior'), pht('Loop'));164break;165}166167$audio_phid = $macro->getAudioPHID();168if ($audio_phid) {169$view->addProperty(170pht('Audio'),171$viewer->renderHandle($audio_phid));172}173174if ($view->hasAnyProperties()) {175return $view;176}177178return null;179}180181private function buildFileView(182PhabricatorFileImageMacro $macro) {183$viewer = $this->getViewer();184185$view = id(new PHUIPropertyListView())186->setUser($viewer);187188$file = $macro->getFile();189if ($file) {190$view->addImageContent(191phutil_tag(192'img',193array(194'src' => $file->getViewURI(),195'class' => 'phabricator-image-macro-hero',196)));197return $view;198}199return null;200}201202}203204205