Differential D18426 Diff 44366 src/applications/search/controller/PhabricatorApplicationSearchController.php
Changeset View
Changeset View
Standalone View
Standalone View
src/applications/search/controller/PhabricatorApplicationSearchController.php
| Show First 20 Lines • Show All 168 Lines • ▼ Show 20 Lines | private function processSearchRequest() { | ||||
| } | } | ||||
| $submit = id(new AphrontFormSubmitControl()) | $submit = id(new AphrontFormSubmitControl()) | ||||
| ->setValue(pht('Search')); | ->setValue(pht('Search')); | ||||
| if ($run_query && !$named_query && $user->isLoggedIn()) { | if ($run_query && !$named_query && $user->isLoggedIn()) { | ||||
| $save_button = id(new PHUIButtonView()) | $save_button = id(new PHUIButtonView()) | ||||
| ->setTag('a') | ->setTag('a') | ||||
| ->setHref('/search/edit/'.$saved_query->getQueryKey().'/') | ->setHref('/search/edit/key/'.$saved_query->getQueryKey().'/') | ||||
| ->setText(pht('Save Query')) | ->setText(pht('Save Query')) | ||||
| ->setIcon('fa-floppy-o'); | ->setIcon('fa-floppy-o'); | ||||
| $submit->addButton($save_button); | $submit->addButton($save_button); | ||||
| } | } | ||||
| // TODO: A "Create Dashboard Panel" action goes here somewhere once | // TODO: A "Create Dashboard Panel" action goes here somewhere once | ||||
| // we sort out T5307. | // we sort out T5307. | ||||
| ▲ Show 20 Lines • Show All 186 Lines • ▼ Show 20 Lines | return $this->newPage() | ||||
| ->setNavigation($nav) | ->setNavigation($nav) | ||||
| ->addClass('application-search-view') | ->addClass('application-search-view') | ||||
| ->appendChild($body); | ->appendChild($body); | ||||
| } | } | ||||
| private function processEditRequest() { | private function processEditRequest() { | ||||
| $parent = $this->getDelegatingController(); | $parent = $this->getDelegatingController(); | ||||
| $request = $this->getRequest(); | $request = $this->getRequest(); | ||||
| $user = $request->getUser(); | $viewer = $request->getUser(); | ||||
| $engine = $this->getSearchEngine(); | $engine = $this->getSearchEngine(); | ||||
| $nav = $this->getNavigation(); | $nav = $this->getNavigation(); | ||||
| if (!$nav) { | if (!$nav) { | ||||
| $nav = $this->buildNavigation(); | $nav = $this->buildNavigation(); | ||||
| } | } | ||||
| $named_queries = $engine->loadAllNamedQueries(); | $named_queries = $engine->loadAllNamedQueries(); | ||||
| $list_id = celerity_generate_unique_node_id(); | $can_global = $viewer->getIsAdmin(); | ||||
| $groups = array( | |||||
| 'personal' => array( | |||||
| 'name' => pht('Personal Saved Queries'), | |||||
| 'items' => array(), | |||||
| 'edit' => true, | |||||
| ), | |||||
| 'global' => array( | |||||
| 'name' => pht('Global Saved Queries'), | |||||
| 'items' => array(), | |||||
| 'edit' => $can_global, | |||||
| ), | |||||
| ); | |||||
| foreach ($named_queries as $named_query) { | |||||
| if ($named_query->isGlobal()) { | |||||
| $group = 'global'; | |||||
| } else { | |||||
| $group = 'personal'; | |||||
| } | |||||
| $groups[$group]['items'][] = $named_query; | |||||
| } | |||||
| $default_key = $engine->getDefaultQueryKey(); | |||||
| $lists = array(); | |||||
| foreach ($groups as $group) { | |||||
| $lists[] = $this->newQueryListView( | |||||
| $group['name'], | |||||
| $group['items'], | |||||
| $default_key, | |||||
| $group['edit']); | |||||
| } | |||||
| $crumbs = $parent | |||||
| ->buildApplicationCrumbs() | |||||
| ->addTextCrumb(pht('Saved Queries'), $engine->getQueryManagementURI()) | |||||
| ->setBorder(true); | |||||
| $nav->selectFilter('query/edit'); | |||||
| $header = id(new PHUIHeaderView()) | |||||
| ->setHeader(pht('Saved Queries')) | |||||
| ->setProfileHeader(true); | |||||
| $view = id(new PHUITwoColumnView()) | |||||
| ->setHeader($header) | |||||
| ->setFooter($lists); | |||||
| return $this->newPage() | |||||
| ->setApplicationMenu($this->buildApplicationMenu()) | |||||
| ->setTitle(pht('Saved Queries')) | |||||
| ->setCrumbs($crumbs) | |||||
| ->setNavigation($nav) | |||||
| ->appendChild($view); | |||||
| } | |||||
| private function newQueryListView( | |||||
| $list_name, | |||||
| array $named_queries, | |||||
| $default_key, | |||||
| $can_edit) { | |||||
| $engine = $this->getSearchEngine(); | |||||
| $viewer = $this->getViewer(); | |||||
| $list = id(new PHUIObjectItemListView()) | |||||
| ->setViewer($viewer); | |||||
| $list = new PHUIObjectItemListView(); | if ($can_edit) { | ||||
| $list->setUser($user); | $list_id = celerity_generate_unique_node_id(); | ||||
| $list->setID($list_id); | $list->setID($list_id); | ||||
| Javelin::initBehavior( | Javelin::initBehavior( | ||||
| 'search-reorder-queries', | 'search-reorder-queries', | ||||
| array( | array( | ||||
| 'listID' => $list_id, | 'listID' => $list_id, | ||||
| 'orderURI' => '/search/order/'.get_class($engine).'/', | 'orderURI' => '/search/order/'.get_class($engine).'/', | ||||
| )); | )); | ||||
| } | |||||
| $default_key = $engine->getDefaultQueryKey(); | |||||
| foreach ($named_queries as $named_query) { | foreach ($named_queries as $named_query) { | ||||
| $class = get_class($engine); | $class = get_class($engine); | ||||
| $key = $named_query->getQueryKey(); | $key = $named_query->getQueryKey(); | ||||
| $item = id(new PHUIObjectItemView()) | $item = id(new PHUIObjectItemView()) | ||||
| ->setHeader($named_query->getQueryName()) | ->setHeader($named_query->getQueryName()) | ||||
| ->setHref($engine->getQueryResultsPageURI($key)); | ->setHref($engine->getQueryResultsPageURI($key)); | ||||
| if ($named_query->getIsDisabled()) { | |||||
| if ($can_edit) { | |||||
| $item->setDisabled(true); | |||||
| } else { | |||||
| // If an item is disabled and you don't have permission to edit it, | |||||
| // just skip it. | |||||
| continue; | |||||
| } | |||||
| } | |||||
| if ($can_edit) { | |||||
| if ($named_query->getIsBuiltin() && $named_query->getIsDisabled()) { | if ($named_query->getIsBuiltin() && $named_query->getIsDisabled()) { | ||||
| $icon = 'fa-plus'; | $icon = 'fa-plus'; | ||||
| $disable_name = pht('Enable'); | $disable_name = pht('Enable'); | ||||
| } else { | } else { | ||||
| $icon = 'fa-times'; | $icon = 'fa-times'; | ||||
| if ($named_query->getIsBuiltin()) { | if ($named_query->getIsBuiltin()) { | ||||
| $disable_name = pht('Disable'); | $disable_name = pht('Disable'); | ||||
| } else { | } else { | ||||
| $disable_name = pht('Delete'); | $disable_name = pht('Delete'); | ||||
| } | } | ||||
| } | } | ||||
| if ($named_query->getID()) { | |||||
| $disable_href = '/search/delete/id/'.$named_query->getID().'/'; | |||||
| } else { | |||||
| $disable_href = '/search/delete/key/'.$key.'/'.$class.'/'; | |||||
| } | |||||
| $item->addAction( | $item->addAction( | ||||
| id(new PHUIListItemView()) | id(new PHUIListItemView()) | ||||
| ->setIcon($icon) | ->setIcon($icon) | ||||
| ->setHref('/search/delete/'.$key.'/'.$class.'/') | ->setHref($disable_href) | ||||
| ->setRenderNameAsTooltip(true) | ->setRenderNameAsTooltip(true) | ||||
| ->setName($disable_name) | ->setName($disable_name) | ||||
| ->setWorkflow(true)); | ->setWorkflow(true)); | ||||
| } | |||||
| $default_disabled = $named_query->getIsDisabled(); | $default_disabled = $named_query->getIsDisabled(); | ||||
| $default_icon = 'fa-thumb-tack'; | $default_icon = 'fa-thumb-tack'; | ||||
| if ($default_key === $key) { | if ($default_key === $key) { | ||||
| $default_color = 'green'; | $default_color = 'green'; | ||||
| } else { | } else { | ||||
| $default_color = null; | $default_color = null; | ||||
| } | } | ||||
| $item->addAction( | $item->addAction( | ||||
| id(new PHUIListItemView()) | id(new PHUIListItemView()) | ||||
| ->setIcon("{$default_icon} {$default_color}") | ->setIcon("{$default_icon} {$default_color}") | ||||
| ->setHref('/search/default/'.$key.'/'.$class.'/') | ->setHref('/search/default/'.$key.'/'.$class.'/') | ||||
| ->setRenderNameAsTooltip(true) | ->setRenderNameAsTooltip(true) | ||||
| ->setName(pht('Make Default')) | ->setName(pht('Make Default')) | ||||
| ->setWorkflow(true) | ->setWorkflow(true) | ||||
| ->setDisabled($default_disabled)); | ->setDisabled($default_disabled)); | ||||
| if ($can_edit) { | |||||
| if ($named_query->getIsBuiltin()) { | if ($named_query->getIsBuiltin()) { | ||||
| $edit_icon = 'fa-lock lightgreytext'; | $edit_icon = 'fa-lock lightgreytext'; | ||||
| $edit_disabled = true; | $edit_disabled = true; | ||||
| $edit_name = pht('Builtin'); | $edit_name = pht('Builtin'); | ||||
| $edit_href = null; | $edit_href = null; | ||||
| } else { | } else { | ||||
| $edit_icon = 'fa-pencil'; | $edit_icon = 'fa-pencil'; | ||||
| $edit_disabled = false; | $edit_disabled = false; | ||||
| $edit_name = pht('Edit'); | $edit_name = pht('Edit'); | ||||
| $edit_href = '/search/edit/'.$key.'/'; | $edit_href = '/search/edit/id/'.$named_query->getID().'/'; | ||||
| } | } | ||||
| $item->addAction( | $item->addAction( | ||||
| id(new PHUIListItemView()) | id(new PHUIListItemView()) | ||||
| ->setIcon($edit_icon) | ->setIcon($edit_icon) | ||||
| ->setHref($edit_href) | ->setHref($edit_href) | ||||
| ->setRenderNameAsTooltip(true) | ->setRenderNameAsTooltip(true) | ||||
| ->setName($edit_name) | ->setName($edit_name) | ||||
| ->setDisabled($edit_disabled)); | ->setDisabled($edit_disabled)); | ||||
| if ($named_query->getIsDisabled()) { | |||||
| $item->setDisabled(true); | |||||
| } | } | ||||
| $item->setGrippable(true); | $item->setGrippable($can_edit); | ||||
| $item->addSigil('named-query'); | $item->addSigil('named-query'); | ||||
| $item->setMetadata( | $item->setMetadata( | ||||
| array( | array( | ||||
| 'queryKey' => $named_query->getQueryKey(), | 'queryKey' => $named_query->getQueryKey(), | ||||
| )); | )); | ||||
| $list->addItem($item); | $list->addItem($item); | ||||
| } | } | ||||
| $list->setNoDataString(pht('No saved queries.')); | $list->setNoDataString(pht('No saved queries.')); | ||||
| $crumbs = $parent | return id(new PHUIObjectBoxView()) | ||||
| ->buildApplicationCrumbs() | ->setHeaderText($list_name) | ||||
| ->addTextCrumb(pht('Saved Queries'), $engine->getQueryManagementURI()) | ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) | ||||
| ->setBorder(true); | ->setObjectList($list); | ||||
| $nav->selectFilter('query/edit'); | |||||
| $header = id(new PHUIHeaderView()) | |||||
| ->setHeader(pht('Saved Queries')) | |||||
| ->setProfileHeader(true); | |||||
| $box = id(new PHUIObjectBoxView()) | |||||
| ->setHeader($header) | |||||
| ->setObjectList($list) | |||||
| ->addClass('application-search-results'); | |||||
| $nav->addClass('application-search-view'); | |||||
| require_celerity_resource('application-search-view-css'); | |||||
| return $this->newPage() | |||||
| ->setApplicationMenu($this->buildApplicationMenu()) | |||||
| ->setTitle(pht('Saved Queries')) | |||||
| ->setCrumbs($crumbs) | |||||
| ->setNavigation($nav) | |||||
| ->appendChild($box); | |||||
| } | } | ||||
| public function buildApplicationMenu() { | public function buildApplicationMenu() { | ||||
| $menu = $this->getDelegatingController() | $menu = $this->getDelegatingController() | ||||
| ->buildApplicationMenu(); | ->buildApplicationMenu(); | ||||
| if ($menu instanceof PHUIApplicationMenuView) { | if ($menu instanceof PHUIApplicationMenuView) { | ||||
| $menu->setSearchEngine($this->getSearchEngine()); | $menu->setSearchEngine($this->getSearchEngine()); | ||||
| ▲ Show 20 Lines • Show All 174 Lines • Show Last 20 Lines | |||||