Path: blob/master/src/applications/diviner/controller/DivinerBookEditController.php
12256 views
<?php12final class DivinerBookEditController extends DivinerController {34public function handleRequest(AphrontRequest $request) {5$viewer = $request->getViewer();67$book_name = $request->getURIData('book');89$book = id(new DivinerBookQuery())10->setViewer($viewer)11->requireCapabilities(12array(13PhabricatorPolicyCapability::CAN_VIEW,14PhabricatorPolicyCapability::CAN_EDIT,15))16->needProjectPHIDs(true)17->withNames(array($book_name))18->executeOne();1920if (!$book) {21return new Aphront404Response();22}2324$view_uri = '/book/'.$book->getName().'/';2526if ($request->isFormPost()) {27$v_projects = $request->getArr('projectPHIDs');28$v_view = $request->getStr('viewPolicy');29$v_edit = $request->getStr('editPolicy');3031$xactions = array();32$xactions[] = id(new DivinerLiveBookTransaction())33->setTransactionType(PhabricatorTransactions::TYPE_EDGE)34->setMetadataValue(35'edge:type',36PhabricatorProjectObjectHasProjectEdgeType::EDGECONST)37->setNewValue(38array(39'=' => array_fuse($v_projects),40));41$xactions[] = id(new DivinerLiveBookTransaction())42->setTransactionType(PhabricatorTransactions::TYPE_VIEW_POLICY)43->setNewValue($v_view);44$xactions[] = id(new DivinerLiveBookTransaction())45->setTransactionType(PhabricatorTransactions::TYPE_EDIT_POLICY)46->setNewValue($v_edit);4748id(new DivinerLiveBookEditor())49->setContinueOnNoEffect(true)50->setContentSourceFromRequest($request)51->setActor($viewer)52->applyTransactions($book, $xactions);5354return id(new AphrontRedirectResponse())->setURI($view_uri);55}5657$crumbs = $this->buildApplicationCrumbs();58$crumbs->addTextCrumb(pht('Edit Basics'));59$crumbs->setBorder(true);6061$title = pht('Edit Book: %s', $book->getTitle());62$header_icon = 'fa-pencil';6364$policies = id(new PhabricatorPolicyQuery())65->setViewer($viewer)66->setObject($book)67->execute();68$view_capability = PhabricatorPolicyCapability::CAN_VIEW;69$edit_capability = PhabricatorPolicyCapability::CAN_EDIT;7071$form = id(new AphrontFormView())72->setUser($viewer)73->appendControl(74id(new AphrontFormTokenizerControl())75->setDatasource(new PhabricatorProjectDatasource())76->setName('projectPHIDs')77->setLabel(pht('Tags'))78->setValue($book->getProjectPHIDs()))79->appendControl(80id(new AphrontFormTokenizerControl())81->setDatasource(new DiffusionRepositoryDatasource())82->setName('repositoryPHIDs')83->setLabel(pht('Repository'))84->setDisableBehavior(true)85->setLimit(1)86->setValue($book->getRepositoryPHID()87? array($book->getRepositoryPHID())88: null))89->appendChild(90id(new AphrontFormPolicyControl())91->setName('viewPolicy')92->setPolicyObject($book)93->setCapability($view_capability)94->setPolicies($policies))95->appendChild(96id(new AphrontFormPolicyControl())97->setName('editPolicy')98->setPolicyObject($book)99->setCapability($edit_capability)100->setPolicies($policies))101->appendChild(102id(new AphrontFormSubmitControl())103->setValue(pht('Save'))104->addCancelButton($view_uri));105106$box = id(new PHUIObjectBoxView())107->setHeaderText(pht('Book'))108->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)109->setForm($form);110111$timeline = $this->buildTransactionTimeline(112$book,113new DivinerLiveBookTransactionQuery());114$timeline->setShouldTerminate(true);115116$header = id(new PHUIHeaderView())117->setHeader($title)118->setHeaderIcon($header_icon);119120$view = id(new PHUITwoColumnView())121->setHeader($header)122->setFooter(array(123$box,124$timeline,125));126127return $this->newPage()128->setTitle($title)129->setCrumbs($crumbs)130->appendChild($view);131}132133}134135136