public final function readFromRequest(AphrontRequest $request)
 {
     $this->uri = $request->getRequestURI();
     $this->afterID = $request->getStr('after');
     $this->beforeID = $request->getStr('before');
     return $this;
 }
 public function handleRequest(AphrontRequest $request)
 {
     $viewer = $request->getUser();
     $file = PhabricatorFile::initializeNewFile();
     $e_file = true;
     $errors = array();
     if ($request->isFormPost()) {
         $view_policy = $request->getStr('viewPolicy');
         if (!$request->getFileExists('file')) {
             $e_file = pht('Required');
             $errors[] = pht('You must select a file to upload.');
         } else {
             $file = PhabricatorFile::newFromPHPUpload(idx($_FILES, 'file'), array('name' => $request->getStr('name'), 'authorPHID' => $viewer->getPHID(), 'viewPolicy' => $view_policy, 'isExplicitUpload' => true));
         }
         if (!$errors) {
             return id(new AphrontRedirectResponse())->setURI($file->getInfoURI());
         }
         $file->setViewPolicy($view_policy);
     }
     $support_id = celerity_generate_unique_node_id();
     $instructions = id(new AphrontFormMarkupControl())->setControlID($support_id)->setControlStyle('display: none')->setValue(hsprintf('<br /><br /><strong>%s</strong> %s<br /><br />', pht('Drag and Drop:'), pht('You can also upload files by dragging and dropping them from your ' . 'desktop onto this page or the Phabricator home page.')));
     $policies = id(new PhabricatorPolicyQuery())->setViewer($viewer)->setObject($file)->execute();
     $form = id(new AphrontFormView())->setUser($viewer)->setEncType('multipart/form-data')->appendChild(id(new AphrontFormFileControl())->setLabel(pht('File'))->setName('file')->setError($e_file))->appendChild(id(new AphrontFormTextControl())->setLabel(pht('Name'))->setName('name')->setValue($request->getStr('name')))->appendChild(id(new AphrontFormPolicyControl())->setUser($viewer)->setCapability(PhabricatorPolicyCapability::CAN_VIEW)->setPolicyObject($file)->setPolicies($policies)->setName('viewPolicy'))->appendChild(id(new AphrontFormSubmitControl())->setValue(pht('Upload'))->addCancelButton('/file/'))->appendChild($instructions);
     $crumbs = $this->buildApplicationCrumbs();
     $crumbs->addTextCrumb(pht('Upload'), $request->getRequestURI());
     $crumbs->setBorder(true);
     $title = pht('Upload File');
     $global_upload = id(new PhabricatorGlobalUploadTargetView())->setUser($viewer)->setShowIfSupportedID($support_id);
     $form_box = id(new PHUIObjectBoxView())->setHeaderText(pht('File'))->setFormErrors($errors)->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)->setForm($form);
     $header = id(new PHUIHeaderView())->setHeader($title)->setHeaderIcon('fa-upload');
     $view = id(new PHUITwoColumnView())->setHeader($header)->setFooter(array($form_box, $global_upload));
     return $this->newPage()->setTitle($title)->setCrumbs($crumbs)->appendChild($view);
 }
Example #3
0
 public final function readFromRequest(AphrontRequest $request)
 {
     $this->uri = $request->getRequestURI();
     $this->pagingParameter = 'offset';
     $this->offset = $request->getInt($this->pagingParameter);
     return $this;
 }
 public function handleRequest(AphrontRequest $request)
 {
     $viewer = $request->getViewer();
     if ($request->isFormPost()) {
         $uri = $request->getRequestURI();
         $project = head($request->getArr('set_project'));
         $project = nonempty($project, null);
         $uri = $uri->alter('project', $project);
         $window = $request->getStr('set_window');
         $uri = $uri->alter('window', $window);
         return id(new AphrontRedirectResponse())->setURI($uri);
     }
     $nav = $this->buildNavMenu();
     $this->view = $nav->selectFilter($this->view, 'List');
     switch ($this->view) {
         case 'list':
         case 'user':
         case 'project':
             $core = id(new SprintReportOpenTasksView())->setUser($viewer)->setRequest($request)->setView($this->view);
             break;
         case 'burn':
             $core = id(new SprintReportBurnUpView())->setUser($viewer)->setRequest($request);
             break;
         case 'history':
             $core = id(new SprintHistoryTableView())->setUser($viewer)->setRequest($request);
             break;
         default:
             return new Aphront404Response();
     }
     $can_create = $this->hasApplicationCapability(ProjectCreateProjectsCapability::CAPABILITY);
     $nav->appendChild($core);
     $nav->setCrumbs($this->buildSprintApplicationCrumbs($can_create)->setBorder(true)->addTextCrumb(pht('Reports')));
     return $this->buildApplicationPage($nav, array('title' => pht('Sprint Reports'), 'device' => false));
 }
 public function handleRequest(AphrontRequest $request)
 {
     $this->viewer = $request->getViewer();
     if ($request->isFormPost()) {
         $uri = $request->getRequestURI();
         $project = head($request->getArr('set_project'));
         $project = nonempty($project, null);
         $uri = $uri->alter('project', $project);
         $window = $request->getStr('set_window');
         $uri = $uri->alter('window', $window);
         return id(new AphrontRedirectResponse())->setURI($uri);
     }
     $error_box = null;
     $history_model = id(new SprintHistoryDataProvider())->setViewer($this->viewer)->setRequest($request)->execute();
     try {
         $sprintlist_table = id(new SprintHistoryTableView())->setViewer($this->viewer)->setRequest($request)->setTableData($history_model)->render();
     } catch (Exception $e) {
         $error_box = $this->getErrorBox($e);
     }
     $can_create = $this->hasApplicationCapability(ProjectCreateProjectsCapability::CAPABILITY);
     $crumbs = $this->buildSprintApplicationCrumbs($can_create);
     $crumbs->addTextCrumb(pht('Task Project History'));
     $help = id(new PHUIBoxView())->appendChild(phutil_tag('p', array(), 'This is a history of tasks and logs when a project was added or removed'))->appendChild(phutil_tag('br', array(), ''))->appendChild(phutil_tag('p', array(), 'NOTE: The tasks are selected from the current tasks in the project.  Tasks previously removed
         will not appear!'))->addMargin(PHUI::MARGIN_LARGE);
     $nav = $this->buildNavMenu();
     $this->view = $nav->selectFilter($this->view, 'history');
     $nav->appendChild(array($error_box, $crumbs, $help, $sprintlist_table));
     return $this->buildApplicationPage($nav, array('title' => array(pht('Task Project History')), 'device' => true));
 }
 protected function processDiffusionRequest(AphrontRequest $request)
 {
     $limit = 500;
     $offset = $request->getInt('offset', 0);
     $drequest = $this->getDiffusionRequest();
     $branch = $drequest->loadBranch();
     $messages = $this->loadLintMessages($branch, $limit, $offset);
     $is_dir = substr('/' . $drequest->getPath(), -1) == '/';
     $authors = $this->loadViewerHandles(ipull($messages, 'authorPHID'));
     $rows = array();
     foreach ($messages as $message) {
         $path = phutil_tag('a', array('href' => $drequest->generateURI(array('action' => 'lint', 'path' => $message['path']))), substr($message['path'], strlen($drequest->getPath()) + 1));
         $line = phutil_tag('a', array('href' => $drequest->generateURI(array('action' => 'browse', 'path' => $message['path'], 'line' => $message['line'], 'commit' => $branch->getLintCommit()))), $message['line']);
         $author = $message['authorPHID'];
         if ($author && $authors[$author]) {
             $author = $authors[$author]->renderLink();
         }
         $rows[] = array($path, $line, $author, ArcanistLintSeverity::getStringForSeverity($message['severity']), $message['name'], $message['description']);
     }
     $table = id(new AphrontTableView($rows))->setHeaders(array(pht('Path'), pht('Line'), pht('Author'), pht('Severity'), pht('Name'), pht('Description')))->setColumnClasses(array('', 'n'))->setColumnVisibility(array($is_dir));
     $content = array();
     $pager = id(new AphrontPagerView())->setPageSize($limit)->setOffset($offset)->setHasMorePages(count($messages) >= $limit)->setURI($request->getRequestURI(), 'offset');
     $content[] = id(new PHUIObjectBoxView())->setHeaderText(pht('Lint Details'))->appendChild($table);
     $crumbs = $this->buildCrumbs(array('branch' => true, 'path' => true, 'view' => 'lint'));
     return $this->buildApplicationPage(array($crumbs, $content, $pager), array('title' => array(pht('Lint'), $drequest->getRepository()->getCallsign())));
 }
 public function handleRequest(AphrontRequest $request)
 {
     $phid = $request->getURIData('phid');
     $file = id(new PhabricatorFileQuery())->setViewer($request->getUser())->withPHIDs(array($phid))->executeOne();
     if (!$file) {
         return new Aphront404Response();
     }
     $data = $file->loadFileData();
     try {
         $data = phutil_json_decode($data);
     } catch (PhutilJSONParserException $ex) {
         throw new PhutilProxyException(pht('Failed to unserialize XHProf profile!'), $ex);
     }
     $symbol = $request->getStr('symbol');
     $is_framed = $request->getBool('frame');
     if ($symbol) {
         $view = new PhabricatorXHProfProfileSymbolView();
         $view->setSymbol($symbol);
     } else {
         $view = new PhabricatorXHProfProfileTopLevelView();
         $view->setFile($file);
         $view->setLimit(100);
     }
     $view->setBaseURI($request->getRequestURI()->getPath());
     $view->setIsFramed($is_framed);
     $view->setProfileData($data);
     $crumbs = $this->buildApplicationCrumbs();
     $crumbs->addTextCrumb(pht('%s Profile', $symbol));
     return $this->buildStandardPageResponse(array($crumbs, $view), array('title' => pht('Profile'), 'frame' => $is_framed));
 }
 public function handleRequest(AphrontRequest $request)
 {
     $viewer = $request->getViewer();
     $pager = new PHUIPagerView();
     $pager->setURI($request->getRequestURI(), 'page');
     $pager->setOffset($request->getInt('page'));
     $query = id(new PhabricatorTokenReceiverQuery());
     $objects = $query->setViewer($viewer)->executeWithOffsetPager($pager);
     $counts = $query->getTokenCounts();
     $handles = array();
     $phids = array();
     if ($counts) {
         $phids = mpull($objects, 'getPHID');
         $handles = id(new PhabricatorHandleQuery())->setViewer($viewer)->withPHIDs($phids)->execute();
     }
     $list = new PHUIObjectItemListView();
     foreach ($phids as $object) {
         $count = idx($counts, $object, 0);
         $item = id(new PHUIObjectItemView());
         $handle = $handles[$object];
         $item->setHeader($handle->getFullName());
         $item->setHref($handle->getURI());
         $item->addAttribute(pht('Tokens: %s', $count));
         $list->addItem($item);
     }
     $title = pht('Token Leader Board');
     $box = id(new PHUIObjectBoxView())->setHeaderText($title)->setObjectList($list);
     $nav = $this->buildSideNav();
     $nav->setCrumbs($this->buildApplicationCrumbs()->addTextCrumb($title));
     $nav->selectFilter('leaders/');
     $nav->appendChild($box);
     $nav->appendChild($pager);
     return $this->newPage()->setTitle($title)->appendChild($nav);
 }
 public function handleRequest(AphrontRequest $request)
 {
     $user = $request->getUser();
     $nav = $this->renderSideNavFilterView(null);
     $filter = $request->getURIData('filter');
     $filter = $nav->selectFilter('blog/' . $filter, 'blog/user');
     $query = id(new PhameBlogQuery())->setViewer($user);
     switch ($filter) {
         case 'blog/all':
             $title = pht('All Blogs');
             $nodata = pht('No blogs have been created.');
             break;
         case 'blog/user':
             $title = pht('Joinable Blogs');
             $nodata = pht('There are no blogs you can contribute to.');
             $query->requireCapabilities(array(PhabricatorPolicyCapability::CAN_JOIN));
             break;
         default:
             throw new Exception(pht("Unknown filter '%s'!", $filter));
     }
     $pager = id(new AphrontPagerView())->setURI($request->getRequestURI(), 'offset')->setOffset($request->getInt('offset'));
     $blogs = $query->executeWithOffsetPager($pager);
     $blog_list = $this->renderBlogList($blogs, $user, $nodata);
     $blog_list->setPager($pager);
     $crumbs = $this->buildApplicationCrumbs();
     $crumbs->addTextCrumb($title, $this->getApplicationURI());
     $nav->appendChild(array($crumbs, $blog_list));
     return $this->buildApplicationPage($nav, array('title' => $title));
 }
 private static function getCallsign(AphrontRequest $request)
 {
     $uri = $request->getRequestURI();
     $regex = '@^/diffusion/(?P<callsign>[A-Z]+)(/|$)@';
     $matches = null;
     if (!preg_match($regex, (string) $uri, $matches)) {
         return null;
     }
     return $matches['callsign'];
 }
 public function handleRequest(AphrontRequest $request)
 {
     $viewer = $request->getViewer();
     $id = $request->getURIData('id');
     $product = id(new PhortuneProductQuery())->setViewer($viewer)->withIDs(array($id))->executeOne();
     if (!$product) {
         return new Aphront404Response();
     }
     $title = pht('Product: %s', $product->getProductName());
     $header = id(new PHUIHeaderView())->setHeader($product->getProductName());
     $edit_uri = $this->getApplicationURI('product/edit/' . $product->getID() . '/');
     $actions = id(new PhabricatorActionListView())->setUser($viewer)->setObjectURI($request->getRequestURI());
     $crumbs = $this->buildApplicationCrumbs();
     $crumbs->addTextCrumb(pht('Products'), $this->getApplicationURI('product/'));
     $crumbs->addTextCrumb(pht('#%d', $product->getID()), $request->getRequestURI());
     $properties = id(new PHUIPropertyListView())->setUser($viewer)->setActionList($actions)->addProperty(pht('Price'), $product->getPriceAsCurrency()->formatForDisplay());
     $object_box = id(new PHUIObjectBoxView())->setHeader($header)->addPropertyList($properties);
     return $this->buildApplicationPage(array($crumbs, $object_box), array('title' => $title));
 }
 public function handleRequest(AphrontRequest $request)
 {
     $viewer = $request->getViewer();
     $view = $request->getURIData('view');
     if (!$view) {
         $view = 'all';
     }
     $pager = new PHUIPagerView();
     $pager->setOffset($request->getInt('page'));
     switch ($view) {
         case 'sampled':
             $clause = 'sampleRate > 0';
             $show_type = false;
             break;
         case 'my-runs':
             $clause = qsprintf(id(new PhabricatorXHProfSample())->establishConnection('r'), 'sampleRate = 0 AND userPHID = %s', $request->getUser()->getPHID());
             $show_type = false;
             break;
         case 'manual':
             $clause = 'sampleRate = 0';
             $show_type = false;
             break;
         case 'all':
         default:
             $clause = '1 = 1';
             $show_type = true;
             break;
     }
     $samples = id(new PhabricatorXHProfSample())->loadAllWhere('%Q ORDER BY id DESC LIMIT %d, %d', $clause, $pager->getOffset(), $pager->getPageSize() + 1);
     $samples = $pager->sliceResults($samples);
     $pager->setURI($request->getRequestURI(), 'page');
     $list = new PHUIObjectItemListView();
     foreach ($samples as $sample) {
         $file_phid = $sample->getFilePHID();
         $item = id(new PHUIObjectItemView())->setObjectName($sample->getID())->setHeader($sample->getRequestPath())->setHref($this->getApplicationURI('profile/' . $file_phid . '/'))->addAttribute(number_format($sample->getUsTotal()) . " μs");
         if ($sample->getController()) {
             $item->addAttribute($sample->getController());
         }
         $item->addAttribute($sample->getHostName());
         $rate = $sample->getSampleRate();
         if ($rate == 0) {
             $item->addIcon('flag-6', pht('Manual Run'));
         } else {
             $item->addIcon('flag-7', pht('Sampled (1/%d)', $rate));
         }
         $item->addIcon('none', phabricator_datetime($sample->getDateCreated(), $viewer));
         $list->addItem($item);
     }
     $list->setPager($pager);
     $list->setNoDataString(pht('There are no profiling samples.'));
     $crumbs = $this->buildApplicationCrumbs();
     $crumbs->addTextCrumb(pht('XHProf Samples'));
     $title = pht('XHProf Samples');
     return $this->newPage()->setTitle($title)->setCrumbs($crumbs)->appendChild($list);
 }
 public function handleRequest(AphrontRequest $request)
 {
     $viewer = $this->getViewer();
     $key = $request->getURIData('key');
     $var = id(new PhluxVariableQuery())->setViewer($viewer)->withKeys(array($key))->executeOne();
     if (!$var) {
         return new Aphront404Response();
     }
     $crumbs = $this->buildApplicationCrumbs();
     $title = $var->getVariableKey();
     $crumbs->addTextCrumb($title, $request->getRequestURI());
     $header = id(new PHUIHeaderView())->setHeader($title)->setUser($viewer)->setPolicyObject($var);
     $actions = id(new PhabricatorActionListView())->setUser($viewer)->setObjectURI($request->getRequestURI())->setObject($var);
     $can_edit = PhabricatorPolicyFilter::hasCapability($viewer, $var, PhabricatorPolicyCapability::CAN_EDIT);
     $actions->addAction(id(new PhabricatorActionView())->setIcon('fa-pencil')->setName(pht('Edit Variable'))->setHref($this->getApplicationURI('/edit/' . $var->getVariableKey() . '/'))->setDisabled(!$can_edit)->setWorkflow(!$can_edit));
     $display_value = json_encode($var->getVariableValue());
     $properties = id(new PHUIPropertyListView())->setUser($viewer)->setObject($var)->setActionList($actions)->addProperty(pht('Value'), $display_value);
     $timeline = $this->buildTransactionTimeline($var, new PhluxTransactionQuery());
     $timeline->setShouldTerminate(true);
     $object_box = id(new PHUIObjectBoxView())->setHeader($header)->addPropertyList($properties);
     return $this->buildApplicationPage(array($crumbs, $object_box, $timeline), array('title' => $title));
 }
 public function handleRequest(AphrontRequest $request)
 {
     $viewer = $request->getViewer();
     $issue_key = $request->getURIData('key');
     $issues = PhabricatorSetupCheck::runAllChecks();
     PhabricatorSetupCheck::setOpenSetupIssueKeys(PhabricatorSetupCheck::getUnignoredIssueKeys($issues), $update_database = true);
     if (empty($issues[$issue_key])) {
         $content = id(new PHUIInfoView())->setSeverity(PHUIInfoView::SEVERITY_NOTICE)->setTitle(pht('Issue Resolved'))->appendChild(pht('This setup issue has been resolved. '))->appendChild(phutil_tag('a', array('href' => $this->getApplicationURI('issue/')), pht('Return to Open Issue List')));
         $title = pht('Resolved Issue');
     } else {
         $issue = $issues[$issue_key];
         $content = $this->renderIssue($issue);
         $title = $issue->getShortName();
     }
     $crumbs = $this->buildApplicationCrumbs()->setBorder(true)->addTextCrumb(pht('Setup Issues'), $this->getApplicationURI('issue/'))->addTextCrumb($title, $request->getRequestURI());
     return $this->newPage()->setTitle($title)->setCrumbs($crumbs)->appendChild($content);
 }
 public function handleRequest(AphrontRequest $request)
 {
     $viewer = $this->getViewer();
     $authority = $this->loadMerchantAuthority();
     $subscription_query = id(new PhortuneSubscriptionQuery())->setViewer($viewer)->withIDs(array($request->getURIData('id')))->needTriggers(true);
     if ($authority) {
         $subscription_query->withMerchantPHIDs(array($authority->getPHID()));
     }
     $subscription = $subscription_query->executeOne();
     if (!$subscription) {
         return new Aphront404Response();
     }
     $can_edit = PhabricatorPolicyFilter::hasCapability($viewer, $subscription, PhabricatorPolicyCapability::CAN_EDIT);
     $merchant = $subscription->getMerchant();
     $account = $subscription->getAccount();
     $account_id = $account->getID();
     $subscription_id = $subscription->getID();
     $title = $subscription->getSubscriptionFullName();
     $header = id(new PHUIHeaderView())->setHeader($title);
     $actions = id(new PhabricatorActionListView())->setUser($viewer)->setObjectURI($request->getRequestURI());
     $edit_uri = $subscription->getEditURI();
     $actions->addAction(id(new PhabricatorActionView())->setIcon('fa-pencil')->setName(pht('Edit Subscription'))->setHref($edit_uri)->setDisabled(!$can_edit)->setWorkflow(!$can_edit));
     $crumbs = $this->buildApplicationCrumbs();
     if ($authority) {
         $this->addMerchantCrumb($crumbs, $merchant);
     } else {
         $this->addAccountCrumb($crumbs, $account);
     }
     $crumbs->addTextCrumb($subscription->getSubscriptionCrumbName());
     $properties = id(new PHUIPropertyListView())->setUser($viewer)->setActionList($actions);
     $next_invoice = $subscription->getTrigger()->getNextEventPrediction();
     $properties->addProperty(pht('Next Invoice'), phabricator_datetime($next_invoice, $viewer));
     $default_method = $subscription->getDefaultPaymentMethodPHID();
     if ($default_method) {
         $handles = $this->loadViewerHandles(array($default_method));
         $autopay_method = $handles[$default_method]->renderLink();
     } else {
         $autopay_method = phutil_tag('em', array(), pht('No Autopay Method Configured'));
     }
     $properties->addProperty(pht('Autopay With'), $autopay_method);
     $object_box = id(new PHUIObjectBoxView())->setHeader($header)->addPropertyList($properties);
     $due_box = $this->buildDueInvoices($subscription, $authority);
     $invoice_box = $this->buildPastInvoices($subscription, $authority);
     return $this->buildApplicationPage(array($crumbs, $object_box, $due_box, $invoice_box), array('title' => $title));
 }
 public function handleRequest(AphrontRequest $request)
 {
     $user = $request->getViewer();
     $id = $request->getURIData('id');
     $post = id(new PhamePostQuery())->setViewer($user)->withIDs(array($id))->requireCapabilities(array(PhabricatorPolicyCapability::CAN_EDIT))->executeOne();
     if (!$post) {
         return new Aphront404Response();
     }
     $blog = $post->getBlog();
     $phame_request = $request->setPath('/post/' . $post->getPhameTitle());
     $skin = $post->getBlog()->getSkinRenderer($phame_request);
     $uri = clone $request->getRequestURI();
     $uri->setPath('/phame/live/' . $blog->getID() . '/');
     $skin->setPreview(true)->setBlog($post->getBlog())->setBaseURI((string) $uri);
     $response = $skin->processRequest();
     $response->setFrameable(true);
     return $response;
 }
 protected function processDiffusionRequest(AphrontRequest $request)
 {
     $drequest = $this->diffusionRequest;
     $viewer = $request->getUser();
     $repository = $drequest->getRepository();
     $page_size = $request->getInt('pagesize', 100);
     $offset = $request->getInt('offset', 0);
     $params = array('commit' => $drequest->getCommit(), 'path' => $drequest->getPath(), 'offset' => $offset, 'limit' => $page_size + 1);
     if (!$request->getBool('copies')) {
         $params['needDirectChanges'] = true;
         $params['needChildChanges'] = true;
     }
     $history_results = $this->callConduitWithDiffusionRequest('diffusion.historyquery', $params);
     $history = DiffusionPathChange::newFromConduit($history_results['pathChanges']);
     $pager = new AphrontPagerView();
     $pager->setPageSize($page_size);
     $pager->setOffset($offset);
     $history = $pager->sliceResults($history);
     $pager->setURI($request->getRequestURI(), 'offset');
     $show_graph = !strlen($drequest->getPath());
     $content = array();
     $history_table = new DiffusionHistoryTableView();
     $history_table->setUser($request->getUser());
     $history_table->setDiffusionRequest($drequest);
     $history_table->setHistory($history);
     $history_table->loadRevisions();
     $phids = $history_table->getRequiredHandlePHIDs();
     $handles = $this->loadViewerHandles($phids);
     $history_table->setHandles($handles);
     if ($show_graph) {
         $history_table->setParents($history_results['parents']);
         $history_table->setIsHead($offset == 0);
     }
     $history_panel = new PHUIObjectBoxView();
     $history_panel->setHeaderText(pht('History'));
     $history_panel->appendChild($history_table);
     $content[] = $history_panel;
     $header = id(new PHUIHeaderView())->setUser($viewer)->setPolicyObject($repository)->setHeader($this->renderPathLinks($drequest, $mode = 'history'));
     $actions = $this->buildActionView($drequest);
     $properties = $this->buildPropertyView($drequest, $actions);
     $object_box = id(new PHUIObjectBoxView())->setHeader($header)->addPropertyList($properties);
     $crumbs = $this->buildCrumbs(array('branch' => true, 'path' => true, 'view' => 'history'));
     return $this->buildApplicationPage(array($crumbs, $object_box, $content, $pager), array('title' => array(pht('History'), pht('%s Repository', $drequest->getRepository()->getCallsign()))));
 }
 public function handleRequest(AphrontRequest $request)
 {
     $viewer = $request->getViewer();
     $id = $request->getURIData('id');
     $image_id = $request->getURIData('imageID');
     $mock = id(new PholioMockQuery())->setViewer($viewer)->withIDs(array($id))->needImages(true)->needInlineComments(true)->executeOne();
     if (!$mock) {
         return new Aphront404Response();
     }
     $phids = PhabricatorEdgeQuery::loadDestinationPHIDs($mock->getPHID(), PholioMockHasTaskEdgeType::EDGECONST);
     $this->setManiphestTaskPHIDs($phids);
     $engine = id(new PhabricatorMarkupEngine())->setViewer($viewer);
     $engine->addObject($mock, PholioMock::MARKUP_FIELD_DESCRIPTION);
     $title = $mock->getName();
     if ($mock->isClosed()) {
         $header_icon = 'fa-ban';
         $header_name = pht('Closed');
         $header_color = 'dark';
     } else {
         $header_icon = 'fa-square-o';
         $header_name = pht('Open');
         $header_color = 'bluegrey';
     }
     $header = id(new PHUIHeaderView())->setHeader($title)->setUser($viewer)->setStatus($header_icon, $header_color, $header_name)->setPolicyObject($mock);
     $timeline = $this->buildTransactionTimeline($mock, new PholioTransactionQuery(), $engine);
     $timeline->setMock($mock);
     $actions = $this->buildActionView($mock);
     $properties = $this->buildPropertyView($mock, $engine, $actions);
     require_celerity_resource('pholio-css');
     require_celerity_resource('pholio-inline-comments-css');
     $comment_form_id = celerity_generate_unique_node_id();
     $mock_view = id(new PholioMockImagesView())->setRequestURI($request->getRequestURI())->setCommentFormID($comment_form_id)->setUser($viewer)->setMock($mock)->setImageID($image_id);
     $this->addExtraQuicksandConfig(array('mockViewConfig' => $mock_view->getBehaviorConfig()));
     $output = id(new PHUIObjectBoxView())->setHeaderText(pht('Image'))->appendChild($mock_view);
     $add_comment = $this->buildAddCommentView($mock, $comment_form_id);
     $crumbs = $this->buildApplicationCrumbs();
     $crumbs->addTextCrumb('M' . $mock->getID(), '/M' . $mock->getID());
     $object_box = id(new PHUIObjectBoxView())->setHeader($header)->addPropertyList($properties);
     $thumb_grid = id(new PholioMockThumbGridView())->setUser($viewer)->setMock($mock);
     $content = array($crumbs, $object_box, $output, $thumb_grid, $timeline, $add_comment);
     return $this->buildApplicationPage($content, array('title' => 'M' . $mock->getID() . ' ' . $title, 'pageObjects' => array($mock->getPHID())));
 }
 public function handleRequest(AphrontRequest $request)
 {
     $viewer = $request->getViewer();
     $id = $request->getURIData('id');
     $product = id(new PhortuneProductQuery())->setViewer($viewer)->withIDs(array($id))->executeOne();
     if (!$product) {
         return new Aphront404Response();
     }
     $title = pht('Product: %s', $product->getProductName());
     $header = id(new PHUIHeaderView())->setHeader($product->getProductName())->setHeaderIcon('fa-gift');
     $edit_uri = $this->getApplicationURI('product/edit/' . $product->getID() . '/');
     $crumbs = $this->buildApplicationCrumbs();
     $crumbs->addTextCrumb(pht('Products'), $this->getApplicationURI('product/'));
     $crumbs->addTextCrumb(pht('#%d', $product->getID()), $request->getRequestURI());
     $crumbs->setBorder(true);
     $properties = id(new PHUIPropertyListView())->setUser($viewer)->addProperty(pht('Price'), $product->getPriceAsCurrency()->formatForDisplay());
     $object_box = id(new PHUIObjectBoxView())->setHeaderText(pht('Details'))->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)->addPropertyList($properties);
     $view = id(new PHUITwoColumnView())->setHeader($header)->setFooter(array($object_box));
     return $this->newPage()->setTitle($title)->setCrumbs($crumbs)->appendChild($view);
 }
 public function handlePanelRequest(AphrontRequest $request, PhabricatorController $controller)
 {
     $viewer = $request->getViewer();
     $application = $this->getApplication();
     $path = $request->getURIData('path');
     if (strlen($path)) {
         return new Aphront404Response();
     }
     $uri = $request->getRequestURI();
     $uri->setQueryParams(array());
     $new = $request->getStr('new');
     $edit = $request->getInt('edit');
     $delete = $request->getInt('delete');
     if ($new) {
         return $this->returnNewAddressResponse($request, $uri, $application);
     }
     if ($edit) {
         return $this->returnEditAddressResponse($request, $uri, $edit);
     }
     if ($delete) {
         return $this->returnDeleteAddressResponse($request, $uri, $delete);
     }
     $table = $this->buildEmailTable($is_edit = true, $request->getInt('id'));
     $form = id(new AphrontFormView())->setUser($viewer);
     $crumbs = $controller->buildPanelCrumbs($this);
     $crumbs->addTextCrumb(pht('Edit Application Emails'));
     $crumbs->setBorder(true);
     $header = id(new PHUIHeaderView())->setHeader(pht('Edit Application Emails: %s', $application->getName()))->setSubheader($application->getAppEmailBlurb())->setHeaderIcon('fa-pencil');
     $icon = id(new PHUIIconView())->setIcon('fa-plus');
     $button = new PHUIButtonView();
     $button->setText(pht('Add New Address'));
     $button->setTag('a');
     $button->setHref($uri->alter('new', 'true'));
     $button->setIcon($icon);
     $button->addSigil('workflow');
     $header->addActionLink($button);
     $object_box = id(new PHUIObjectBoxView())->setHeaderText(pht('Emails'))->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)->setTable($table);
     $title = $application->getName();
     $view = id(new PHUITwoColumnView())->setHeader($header)->setFooter($object_box);
     return $controller->buildPanelPage($this, $title, $crumbs, $view);
 }
 public function handleRequest(AphrontRequest $request)
 {
     $id = $request->getURIData('requestID');
     $viewer = $request->getViewer();
     $pull = id(new ReleephRequestQuery())->setViewer($viewer)->withIDs(array($id))->executeOne();
     if (!$pull) {
         return new Aphront404Response();
     }
     $this->setBranch($pull->getBranch());
     // Redirect older URIs to new "Y" URIs.
     // TODO: Get rid of this eventually.
     $actual_path = $request->getRequestURI()->getPath();
     $expect_path = '/' . $pull->getMonogram();
     if ($actual_path != $expect_path) {
         return id(new AphrontRedirectResponse())->setURI($expect_path);
     }
     // TODO: Break this 1:1 stuff?
     $branch = $pull->getBranch();
     $field_list = PhabricatorCustomField::getObjectFields($pull, PhabricatorCustomField::ROLE_VIEW);
     $field_list->setViewer($viewer)->readFieldsFromStorage($pull);
     // TODO: This should be more modern and general.
     $engine = id(new PhabricatorMarkupEngine())->setViewer($viewer);
     foreach ($field_list->getFields() as $field) {
         if ($field->shouldMarkup()) {
             $field->setMarkupEngine($engine);
         }
     }
     $engine->process();
     $pull_box = id(new ReleephRequestView())->setUser($viewer)->setCustomFields($field_list)->setPullRequest($pull);
     $timeline = $this->buildTransactionTimeline($pull, new ReleephRequestTransactionQuery());
     $add_comment_header = pht('Plea or Yield');
     $draft = PhabricatorDraft::newFromUserAndKey($viewer, $pull->getPHID());
     $title = hsprintf('%s %s', $pull->getMonogram(), $pull->getSummaryForDisplay());
     $add_comment_form = id(new PhabricatorApplicationTransactionCommentView())->setUser($viewer)->setObjectPHID($pull->getPHID())->setDraft($draft)->setHeaderText($add_comment_header)->setAction($this->getApplicationURI('/request/comment/' . $pull->getID() . '/'))->setSubmitButtonName(pht('Comment'));
     $crumbs = $this->buildApplicationCrumbs();
     $crumbs->addTextCrumb($pull->getMonogram(), '/' . $pull->getMonogram());
     $crumbs->setBorder(true);
     $header = id(new PHUIHeaderView())->setHeader($title)->setHeaderIcon('fa-flag-checkered');
     $view = id(new PHUITwoColumnView())->setHeader($header)->setFooter(array($pull_box, $timeline, $add_comment_form));
     return $this->newPage()->setTitle($title)->setCrumbs($crumbs)->appendChild($view);
 }
 public function handleRequest(AphrontRequest $request)
 {
     $this->requireApplicationCapability(PeopleCreateUsersCapability::CAPABILITY);
     $admin = $request->getUser();
     $content = array();
     $form = id(new AphrontFormView())->setAction($request->getRequestURI()->alter('search', 'true')->alter('import', null))->setUser($admin)->appendChild(id(new AphrontFormTextControl())->setLabel(pht('LDAP username'))->setName('username'))->appendChild(id(new AphrontFormPasswordControl())->setDisableAutocomplete(true)->setLabel(pht('Password'))->setName('password'))->appendChild(id(new AphrontFormTextControl())->setLabel(pht('LDAP query'))->setCaption(pht('A filter such as %s.', '(objectClass=*)'))->setName('query'))->appendChild(id(new AphrontFormSubmitControl())->setValue(pht('Search')));
     $panel = id(new PHUIObjectBoxView())->setHeaderText(pht('Import LDAP Users'))->setForm($form);
     $crumbs = $this->buildApplicationCrumbs();
     $crumbs->addTextCrumb(pht('Import Ldap Users'), $this->getApplicationURI('/ldap/'));
     $nav = $this->buildSideNavView();
     $nav->selectFilter('ldap');
     $nav->appendChild($content);
     if ($request->getStr('import')) {
         $nav->appendChild($this->processImportRequest($request));
     }
     $nav->appendChild($panel);
     if ($request->getStr('search')) {
         $nav->appendChild($this->processSearchRequest($request));
     }
     return $this->newPage()->setTitle(pht('Import Ldap Users'))->setCrumbs($crumbs)->setNavigation($nav);
 }
 protected function processDiffusionRequest(AphrontRequest $request)
 {
     $drequest = $this->getDiffusionRequest();
     $viewer = $request->getUser();
     $repository = $drequest->getRepository();
     $pager = new PHUIPagerView();
     $pager->setURI($request->getRequestURI(), 'offset');
     $pager->setOffset($request->getInt('offset'));
     $params = array('limit' => $pager->getPageSize() + 1, 'offset' => $pager->getOffset());
     if ($drequest->getSymbolicCommit()) {
         $is_commit = true;
         $params['commit'] = $drequest->getSymbolicCommit();
     } else {
         $is_commit = false;
     }
     switch ($repository->getVersionControlSystem()) {
         case PhabricatorRepositoryType::REPOSITORY_TYPE_SVN:
             $tags = array();
             break;
         default:
             $conduit_result = $this->callConduitWithDiffusionRequest('diffusion.tagsquery', $params);
             $tags = DiffusionRepositoryTag::newFromConduit($conduit_result);
             break;
     }
     $tags = $pager->sliceResults($tags);
     $content = null;
     if (!$tags) {
         $content = $this->renderStatusMessage(pht('No Tags'), $is_commit ? pht('This commit has no tags.') : pht('This repository has no tags.'));
     } else {
         $commits = id(new DiffusionCommitQuery())->setViewer($viewer)->withRepository($repository)->withIdentifiers(mpull($tags, 'getCommitIdentifier'))->needCommitData(true)->execute();
         $view = id(new DiffusionTagListView())->setTags($tags)->setUser($viewer)->setCommits($commits)->setDiffusionRequest($drequest);
         $phids = $view->getRequiredHandlePHIDs();
         $handles = $this->loadViewerHandles($phids);
         $view->setHandles($handles);
         $panel = id(new PHUIObjectBoxView())->setHeaderText(pht('Tags'))->appendChild($view);
         $content = $panel;
     }
     $crumbs = $this->buildCrumbs(array('tags' => true, 'commit' => $drequest->getSymbolicCommit()));
     return $this->buildApplicationPage(array($crumbs, $content, $pager), array('title' => array(pht('Tags'), pht('%s Repository', $repository->getCallsign()))));
 }
 public function handleRequest(AphrontRequest $request)
 {
     $viewer = $this->getViewer();
     $key = $request->getURIData('key');
     $var = id(new PhluxVariableQuery())->setViewer($viewer)->withKeys(array($key))->executeOne();
     if (!$var) {
         return new Aphront404Response();
     }
     $title = $var->getVariableKey();
     $crumbs = $this->buildApplicationCrumbs();
     $crumbs->addTextCrumb($title, $request->getRequestURI());
     $crumbs->setBorder(true);
     $curtain = $this->buildCurtainView($var);
     $header = id(new PHUIHeaderView())->setHeader($title)->setUser($viewer)->setPolicyObject($var)->setHeaderIcon('fa-copy');
     $display_value = json_encode($var->getVariableValue());
     $properties = id(new PHUIPropertyListView())->setUser($viewer)->addProperty(pht('Value'), $display_value);
     $timeline = $this->buildTransactionTimeline($var, new PhluxTransactionQuery());
     $timeline->setShouldTerminate(true);
     $object_box = id(new PHUIObjectBoxView())->setHeaderText(pht('Details'))->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)->addPropertyList($properties);
     $view = id(new PHUITwoColumnView())->setHeader($header)->setCurtain($curtain)->setMainColumn(array($object_box, $timeline));
     return $this->newPage()->setTitle($title)->setCrumbs($crumbs)->appendChild($view);
 }
 public function handleRequest(AphrontRequest $request)
 {
     $viewer = $this->getViewer();
     // TODO: Currently, you must be able to edit an account to view the detail
     // page, because the account must be broadly visible so merchants can
     // process orders but merchants should not be able to see all the details
     // of an account. Ideally this page should be visible to merchants, too,
     // just with less information.
     $can_edit = true;
     $account = id(new PhortuneAccountQuery())->setViewer($viewer)->withIDs(array($request->getURIData('accountID')))->requireCapabilities(array(PhabricatorPolicyCapability::CAN_VIEW, PhabricatorPolicyCapability::CAN_EDIT))->executeOne();
     if (!$account) {
         return new Aphront404Response();
     }
     $title = $account->getName();
     $invoices = id(new PhortuneCartQuery())->setViewer($viewer)->withAccountPHIDs(array($account->getPHID()))->needPurchases(true)->withInvoices(true)->execute();
     $crumbs = $this->buildApplicationCrumbs();
     $this->addAccountCrumb($crumbs, $account, $link = false);
     $header = id(new PHUIHeaderView())->setHeader($title);
     $edit_uri = $this->getApplicationURI('account/edit/' . $account->getID() . '/');
     $actions = id(new PhabricatorActionListView())->setUser($viewer)->setObjectURI($request->getRequestURI())->addAction(id(new PhabricatorActionView())->setName(pht('Edit Account'))->setIcon('fa-pencil')->setHref($edit_uri)->setDisabled(!$can_edit)->setWorkflow(!$can_edit));
     $properties = id(new PHUIPropertyListView())->setObject($account)->setUser($viewer);
     $properties->addProperty(pht('Members'), $viewer->renderHandleList($account->getMemberPHIDs()));
     $status_items = $this->getStatusItemsForAccount($account, $invoices);
     $status_view = new PHUIStatusListView();
     foreach ($status_items as $item) {
         $status_view->addItem(id(new PHUIStatusItemView())->setIcon(idx($item, 'icon'), idx($item, 'color'), idx($item, 'label'))->setTarget(idx($item, 'target'))->setNote(idx($item, 'note')));
     }
     $properties->addProperty(pht('Status'), $status_view);
     $properties->setActionList($actions);
     $invoices = $this->buildInvoicesSection($account, $invoices);
     $purchase_history = $this->buildPurchaseHistorySection($account);
     $charge_history = $this->buildChargeHistorySection($account);
     $subscriptions = $this->buildSubscriptionsSection($account);
     $payment_methods = $this->buildPaymentMethodsSection($account);
     $timeline = $this->buildTransactionTimeline($account, new PhortuneAccountTransactionQuery());
     $timeline->setShouldTerminate(true);
     $object_box = id(new PHUIObjectBoxView())->setHeader($header)->addPropertyList($properties);
     return $this->buildApplicationPage(array($crumbs, $object_box, $invoices, $purchase_history, $charge_history, $subscriptions, $payment_methods, $timeline), array('title' => $title));
 }
 public function handleRequest(AphrontRequest $request)
 {
     $viewer = $this->getViewer();
     $this->view = $request->getURIData('view');
     if ($request->isFormPost()) {
         $uri = $request->getRequestURI();
         $project = head($request->getArr('set_project'));
         $project = nonempty($project, null);
         $uri = $uri->alter('project', $project);
         $window = $request->getStr('set_window');
         $uri = $uri->alter('window', $window);
         return id(new AphrontRedirectResponse())->setURI($uri);
     }
     $nav = new AphrontSideNavFilterView();
     $nav->setBaseURI(new PhutilURI('/maniphest/report/'));
     $nav->addLabel(pht('Open Tasks'));
     $nav->addFilter('user', pht('By User'));
     $nav->addFilter('project', pht('By Project'));
     $nav->addLabel(pht('Burnup'));
     $nav->addFilter('burn', pht('Burnup Rate'));
     $this->view = $nav->selectFilter($this->view, 'user');
     require_celerity_resource('maniphest-report-css');
     switch ($this->view) {
         case 'burn':
             $core = $this->renderBurn();
             break;
         case 'user':
         case 'project':
             $core = $this->renderOpenTasks();
             break;
         default:
             return new Aphront404Response();
     }
     $crumbs = $this->buildApplicationCrumbs()->addTextCrumb(pht('Reports'));
     $nav->appendChild($core);
     $title = pht('Maniphest Reports');
     return $this->newPage()->setTitle($title)->setCrumbs($crumbs)->setNavigation($nav);
 }
 public function handleRequest(AphrontRequest $request)
 {
     $viewer = $request->getViewer();
     $issue_key = $request->getURIData('key');
     $engine = new PhabricatorSetupEngine();
     $response = $engine->execute();
     if ($response) {
         return $response;
     }
     $issues = $engine->getIssues();
     $nav = $this->buildSideNavView();
     $nav->selectFilter('issue/');
     if (empty($issues[$issue_key])) {
         $content = id(new PHUIInfoView())->setSeverity(PHUIInfoView::SEVERITY_NOTICE)->setTitle(pht('Issue Resolved'))->appendChild(pht('This setup issue has been resolved. '))->appendChild(phutil_tag('a', array('href' => $this->getApplicationURI('issue/')), pht('Return to Open Issue List')));
         $title = pht('Resolved Issue');
     } else {
         $issue = $issues[$issue_key];
         $content = $this->renderIssue($issue);
         $title = $issue->getShortName();
     }
     $crumbs = $this->buildApplicationCrumbs()->setBorder(true)->addTextCrumb(pht('Setup Issues'), $this->getApplicationURI('issue/'))->addTextCrumb($title, $request->getRequestURI())->setBorder(true);
     return $this->newPage()->setTitle($title)->setCrumbs($crumbs)->setNavigation($nav)->appendChild($content)->addClass('white-background');
 }
 protected function processDiffusionRequest(AphrontRequest $request)
 {
     $drequest = $this->getDiffusionRequest();
     $viewer = $request->getUser();
     $repository = $drequest->getRepository();
     $pager = new AphrontPagerView();
     $pager->setURI($request->getRequestURI(), 'offset');
     $pager->setOffset($request->getInt('offset'));
     // TODO: Add support for branches that contain commit
     $branches = $this->callConduitWithDiffusionRequest('diffusion.branchquery', array('offset' => $pager->getOffset(), 'limit' => $pager->getPageSize() + 1));
     $branches = $pager->sliceResults($branches);
     $branches = DiffusionRepositoryRef::loadAllFromDictionaries($branches);
     $content = null;
     if (!$branches) {
         $content = $this->renderStatusMessage(pht('No Branches'), pht('This repository has no branches.'));
     } else {
         $commits = id(new DiffusionCommitQuery())->setViewer($viewer)->withIdentifiers(mpull($branches, 'getCommitIdentifier'))->withRepository($repository)->execute();
         $view = id(new DiffusionBranchTableView())->setUser($viewer)->setBranches($branches)->setCommits($commits)->setDiffusionRequest($drequest);
         $panel = id(new PHUIObjectBoxView())->setHeaderText(pht('Branches'))->appendChild($view);
         $content = $panel;
     }
     $crumbs = $this->buildCrumbs(array('branches' => true));
     return $this->buildApplicationPage(array($crumbs, $content, $pager), array('title' => array(pht('Branches'), 'r' . $repository->getCallsign())));
 }
 public function handleRequest(AphrontRequest $request)
 {
     $viewer = $request->getViewer();
     $id = $request->getURIData('id');
     $current_version = null;
     if ($id) {
         $document = id(new PhrictionDocumentQuery())->setViewer($viewer)->withIDs(array($id))->needContent(true)->requireCapabilities(array(PhabricatorPolicyCapability::CAN_VIEW, PhabricatorPolicyCapability::CAN_EDIT))->executeOne();
         if (!$document) {
             return new Aphront404Response();
         }
         $current_version = $document->getContent()->getVersion();
         $revert = $request->getInt('revert');
         if ($revert) {
             $content = id(new PhrictionContent())->loadOneWhere('documentID = %d AND version = %d', $document->getID(), $revert);
             if (!$content) {
                 return new Aphront404Response();
             }
         } else {
             $content = $document->getContent();
         }
     } else {
         $slug = $request->getStr('slug');
         $slug = PhabricatorSlug::normalize($slug);
         if (!$slug) {
             return new Aphront404Response();
         }
         $document = id(new PhrictionDocumentQuery())->setViewer($viewer)->withSlugs(array($slug))->needContent(true)->executeOne();
         if ($document) {
             $content = $document->getContent();
             $current_version = $content->getVersion();
         } else {
             $document = PhrictionDocument::initializeNewDocument($viewer, $slug);
             $content = $document->getContent();
         }
     }
     if ($request->getBool('nodraft')) {
         $draft = null;
         $draft_key = null;
     } else {
         if ($document->getPHID()) {
             $draft_key = $document->getPHID() . ':' . $content->getVersion();
         } else {
             $draft_key = 'phriction:' . $content->getSlug();
         }
         $draft = id(new PhabricatorDraft())->loadOneWhere('authorPHID = %s AND draftKey = %s', $viewer->getPHID(), $draft_key);
     }
     if ($draft && strlen($draft->getDraft()) && $draft->getDraft() != $content->getContent()) {
         $content_text = $draft->getDraft();
         $discard = phutil_tag('a', array('href' => $request->getRequestURI()->alter('nodraft', true)), pht('discard this draft'));
         $draft_note = new PHUIInfoView();
         $draft_note->setSeverity(PHUIInfoView::SEVERITY_NOTICE);
         $draft_note->setTitle(pht('Recovered Draft'));
         $draft_note->appendChild(hsprintf('<p>%s</p>', pht('Showing a saved draft of your edits, you can %s.', $discard)));
     } else {
         $content_text = $content->getContent();
         $draft_note = null;
     }
     require_celerity_resource('phriction-document-css');
     $e_title = true;
     $e_content = true;
     $validation_exception = null;
     $notes = null;
     $title = $content->getTitle();
     $overwrite = false;
     $v_cc = PhabricatorSubscribersQuery::loadSubscribersForPHID($document->getPHID());
     if ($request->isFormPost()) {
         $title = $request->getStr('title');
         $content_text = $request->getStr('content');
         $notes = $request->getStr('description');
         $current_version = $request->getInt('contentVersion');
         $v_view = $request->getStr('viewPolicy');
         $v_edit = $request->getStr('editPolicy');
         $v_cc = $request->getArr('cc');
         $xactions = array();
         $xactions[] = id(new PhrictionTransaction())->setTransactionType(PhrictionTransaction::TYPE_TITLE)->setNewValue($title);
         $xactions[] = id(new PhrictionTransaction())->setTransactionType(PhrictionTransaction::TYPE_CONTENT)->setNewValue($content_text);
         $xactions[] = id(new PhrictionTransaction())->setTransactionType(PhabricatorTransactions::TYPE_VIEW_POLICY)->setNewValue($v_view);
         $xactions[] = id(new PhrictionTransaction())->setTransactionType(PhabricatorTransactions::TYPE_EDIT_POLICY)->setNewValue($v_edit);
         $xactions[] = id(new PhrictionTransaction())->setTransactionType(PhabricatorTransactions::TYPE_SUBSCRIBERS)->setNewValue(array('=' => $v_cc));
         $editor = id(new PhrictionTransactionEditor())->setActor($viewer)->setContentSourceFromRequest($request)->setContinueOnNoEffect(true)->setDescription($notes)->setProcessContentVersionError(!$request->getBool('overwrite'))->setContentVersion($current_version);
         try {
             $editor->applyTransactions($document, $xactions);
             if ($draft) {
                 $draft->delete();
             }
             $uri = PhrictionDocument::getSlugURI($document->getSlug());
             return id(new AphrontRedirectResponse())->setURI($uri);
         } catch (PhabricatorApplicationTransactionValidationException $ex) {
             $validation_exception = $ex;
             $e_title = nonempty($ex->getShortMessage(PhrictionTransaction::TYPE_TITLE), true);
             $e_content = nonempty($ex->getShortMessage(PhrictionTransaction::TYPE_CONTENT), true);
             // if we're not supposed to process the content version error, then
             // overwrite that content...!
             if (!$editor->getProcessContentVersionError()) {
                 $overwrite = true;
             }
             $document->setViewPolicy($v_view);
             $document->setEditPolicy($v_edit);
         }
     }
     if ($document->getID()) {
         $panel_header = pht('Edit Document: %s', $content->getTitle());
         $page_title = pht('Edit Document');
         $header_icon = 'fa-pencil';
         if ($overwrite) {
             $submit_button = pht('Overwrite Changes');
         } else {
             $submit_button = pht('Save Changes');
         }
     } else {
         $panel_header = pht('Create New Phriction Document');
         $submit_button = pht('Create Document');
         $page_title = pht('Create Document');
         $header_icon = 'fa-plus-square';
     }
     $uri = $document->getSlug();
     $uri = PhrictionDocument::getSlugURI($uri);
     $uri = PhabricatorEnv::getProductionURI($uri);
     $cancel_uri = PhrictionDocument::getSlugURI($document->getSlug());
     $policies = id(new PhabricatorPolicyQuery())->setViewer($viewer)->setObject($document)->execute();
     $view_capability = PhabricatorPolicyCapability::CAN_VIEW;
     $edit_capability = PhabricatorPolicyCapability::CAN_EDIT;
     $form = id(new AphrontFormView())->setUser($viewer)->addHiddenInput('slug', $document->getSlug())->addHiddenInput('nodraft', $request->getBool('nodraft'))->addHiddenInput('contentVersion', $current_version)->addHiddenInput('overwrite', $overwrite)->appendChild(id(new AphrontFormTextControl())->setLabel(pht('Title'))->setValue($title)->setError($e_title)->setName('title'))->appendChild(id(new AphrontFormStaticControl())->setLabel(pht('URI'))->setValue($uri))->appendChild(id(new PhabricatorRemarkupControl())->setLabel(pht('Content'))->setValue($content_text)->setError($e_content)->setHeight(AphrontFormTextAreaControl::HEIGHT_VERY_TALL)->setName('content')->setID('document-textarea')->setUser($viewer))->appendControl(id(new AphrontFormTokenizerControl())->setLabel(pht('Subscribers'))->setName('cc')->setValue($v_cc)->setUser($viewer)->setDatasource(new PhabricatorMetaMTAMailableDatasource()))->appendChild(id(new AphrontFormPolicyControl())->setName('viewPolicy')->setPolicyObject($document)->setCapability($view_capability)->setPolicies($policies)->setCaption($document->describeAutomaticCapability($view_capability)))->appendChild(id(new AphrontFormPolicyControl())->setName('editPolicy')->setPolicyObject($document)->setCapability($edit_capability)->setPolicies($policies)->setCaption($document->describeAutomaticCapability($edit_capability)))->appendChild(id(new AphrontFormTextControl())->setLabel(pht('Edit Notes'))->setValue($notes)->setError(null)->setName('description'))->appendChild(id(new AphrontFormSubmitControl())->addCancelButton($cancel_uri)->setValue($submit_button));
     $form_box = id(new PHUIObjectBoxView())->setHeaderText(pht('Document'))->setValidationException($validation_exception)->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)->setForm($form);
     $preview = id(new PHUIRemarkupPreviewPanel())->setHeader($content->getTitle())->setPreviewURI('/phriction/preview/' . $document->getSlug())->setControlID('document-textarea')->setPreviewType(PHUIRemarkupPreviewPanel::DOCUMENT);
     $crumbs = $this->buildApplicationCrumbs();
     if ($document->getID()) {
         $crumbs->addTextCrumb($content->getTitle(), PhrictionDocument::getSlugURI($document->getSlug()));
         $crumbs->addTextCrumb(pht('Edit'));
     } else {
         $crumbs->addTextCrumb(pht('Create'));
     }
     $crumbs->setBorder(true);
     $header = id(new PHUIHeaderView())->setHeader($panel_header)->setHeaderIcon($header_icon);
     $view = id(new PHUITwoColumnView())->setHeader($header)->setFooter(array($draft_note, $form_box, $preview));
     return $this->newPage()->setTitle($page_title)->setCrumbs($crumbs)->appendChild($view);
 }
 public function processRequest(AphrontRequest $request)
 {
     $user = $this->getUser();
     $editable = PhabricatorEnv::getEnvConfig('account.editable');
     $uri = $request->getRequestURI();
     $uri->setQueryParams(array());
     if ($editable) {
         $new = $request->getStr('new');
         if ($new) {
             return $this->returnNewAddressResponse($request, $uri, $new);
         }
         $delete = $request->getInt('delete');
         if ($delete) {
             return $this->returnDeleteAddressResponse($request, $uri, $delete);
         }
     }
     $verify = $request->getInt('verify');
     if ($verify) {
         return $this->returnVerifyAddressResponse($request, $uri, $verify);
     }
     $primary = $request->getInt('primary');
     if ($primary) {
         return $this->returnPrimaryAddressResponse($request, $uri, $primary);
     }
     $emails = id(new PhabricatorUserEmail())->loadAllWhere('userPHID = %s ORDER BY address', $user->getPHID());
     $rowc = array();
     $rows = array();
     foreach ($emails as $email) {
         $button_verify = javelin_tag('a', array('class' => 'button small grey', 'href' => $uri->alter('verify', $email->getID()), 'sigil' => 'workflow'), pht('Verify'));
         $button_make_primary = javelin_tag('a', array('class' => 'button small grey', 'href' => $uri->alter('primary', $email->getID()), 'sigil' => 'workflow'), pht('Make Primary'));
         $button_remove = javelin_tag('a', array('class' => 'button small grey', 'href' => $uri->alter('delete', $email->getID()), 'sigil' => 'workflow'), pht('Remove'));
         $button_primary = phutil_tag('a', array('class' => 'button small disabled'), pht('Primary'));
         if (!$email->getIsVerified()) {
             $action = $button_verify;
         } else {
             if ($email->getIsPrimary()) {
                 $action = $button_primary;
             } else {
                 $action = $button_make_primary;
             }
         }
         if ($email->getIsPrimary()) {
             $remove = $button_primary;
             $rowc[] = 'highlighted';
         } else {
             $remove = $button_remove;
             $rowc[] = null;
         }
         $rows[] = array($email->getAddress(), $action, $remove);
     }
     $table = new AphrontTableView($rows);
     $table->setHeaders(array(pht('Email'), pht('Status'), pht('Remove')));
     $table->setColumnClasses(array('wide', 'action', 'action'));
     $table->setRowClasses($rowc);
     $table->setColumnVisibility(array(true, true, $editable));
     $view = new PHUIObjectBoxView();
     $header = new PHUIHeaderView();
     $header->setHeader(pht('Email Addresses'));
     if ($editable) {
         $button = new PHUIButtonView();
         $button->setText(pht('Add New Address'));
         $button->setTag('a');
         $button->setHref($uri->alter('new', 'true'));
         $button->setIcon('fa-plus');
         $button->addSigil('workflow');
         $header->addActionLink($button);
     }
     $view->setHeader($header);
     $view->setTable($table);
     return $view;
 }