@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at recaptime-dev/main 150 lines 4.0 kB view raw
1<?php 2 3final class PhabricatorSearchEditController 4 extends PhabricatorSearchBaseController { 5 6 public function handleRequest(AphrontRequest $request) { 7 $viewer = $this->getViewer(); 8 9 $id = $request->getURIData('id'); 10 if ($id) { 11 $named_query = id(new PhabricatorNamedQueryQuery()) 12 ->setViewer($viewer) 13 ->withIDs(array($id)) 14 ->requireCapabilities( 15 array( 16 PhabricatorPolicyCapability::CAN_VIEW, 17 PhabricatorPolicyCapability::CAN_EDIT, 18 )) 19 ->executeOne(); 20 if (!$named_query) { 21 return new Aphront404Response(); 22 } 23 24 $query_key = $named_query->getQueryKey(); 25 } else { 26 $query_key = $request->getURIData('queryKey'); 27 $named_query = null; 28 } 29 30 $saved_query = id(new PhabricatorSavedQueryQuery()) 31 ->setViewer($viewer) 32 ->withQueryKeys(array($query_key)) 33 ->executeOne(); 34 if (!$saved_query) { 35 return new Aphront404Response(); 36 } 37 38 $engine = $saved_query->newEngine()->setViewer($viewer); 39 40 $complete_uri = $engine->getQueryManagementURI(); 41 $cancel_uri = $complete_uri; 42 43 if (!$named_query) { 44 $named_query = id(new PhabricatorNamedQuery()) 45 ->setUserPHID($viewer->getPHID()) 46 ->setQueryKey($saved_query->getQueryKey()) 47 ->setEngineClassName($saved_query->getEngineClassName()); 48 49 // If we haven't saved the query yet, this is a "Save..." operation, so 50 // take the user back to the query if they cancel instead of back to the 51 // management interface. 52 $cancel_uri = $engine->getQueryResultsPageURI( 53 $saved_query->getQueryKey()); 54 55 $is_new = true; 56 } else { 57 $is_new = false; 58 } 59 60 $can_global = ($viewer->getIsAdmin() && $is_new); 61 62 $v_global = false; 63 64 $e_name = true; 65 $errors = array(); 66 67 if ($request->isFormPost()) { 68 if ($can_global) { 69 $v_global = $request->getBool('global'); 70 if ($v_global) { 71 $named_query->setUserPHID(PhabricatorNamedQuery::SCOPE_GLOBAL); 72 } 73 } 74 75 $named_query->setQueryName($request->getStr('name')); 76 if (!strlen($named_query->getQueryName())) { 77 $e_name = pht('Required'); 78 $errors[] = pht('You must name the query.'); 79 } else { 80 $e_name = null; 81 } 82 83 if (!$errors) { 84 85 $named_query->save(); 86 return id(new AphrontRedirectResponse())->setURI($complete_uri); 87 } 88 } 89 90 $form = id(new AphrontFormView()) 91 ->setUser($viewer); 92 93 $form->appendChild( 94 id(new AphrontFormTextControl()) 95 ->setName('name') 96 ->setLabel(pht('Query Name')) 97 ->setValue($named_query->getQueryName()) 98 ->setError($e_name)); 99 100 if ($can_global) { 101 $form->appendChild( 102 id(new AphrontFormCheckboxControl()) 103 ->addCheckbox( 104 'global', 105 '1', 106 pht( 107 'Save this query as a global query, making it visible to '. 108 'all users.'), 109 $v_global)); 110 } 111 112 $form->appendChild( 113 id(new AphrontFormSubmitControl()) 114 ->setValue(pht('Save Query')) 115 ->addCancelButton($cancel_uri)); 116 117 if ($named_query->getID()) { 118 $title = pht('Edit Saved Query'); 119 $header_icon = 'fa-pencil'; 120 } else { 121 $title = pht('Save Query'); 122 $header_icon = 'fa-search'; 123 } 124 125 $form_box = id(new PHUIObjectBoxView()) 126 ->setHeaderText(pht('Query')) 127 ->setFormErrors($errors) 128 ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) 129 ->setForm($form); 130 131 $crumbs = $this->buildApplicationCrumbs(); 132 $crumbs->addTextCrumb($title); 133 $crumbs->setBorder(true); 134 135 $header = id(new PHUIHeaderView()) 136 ->setHeader($title) 137 ->setHeaderIcon($header_icon); 138 139 $view = id(new PHUITwoColumnView()) 140 ->setHeader($header) 141 ->setFooter($form_box); 142 143 return $this->newPage() 144 ->setTitle($title) 145 ->setCrumbs($crumbs) 146 ->appendChild($view); 147 148 } 149 150}