@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.

Rebuild query panels on top of EditEngine

Summary: Depends on D20377. Ref T13272. In D20372, I temporarily removed the controls for actually editing Query panels. Restore them.

Test Plan:
- Viewed existing Query panels, saw them working like they did before.
- Created and edited Query panels.

Reviewers: amckinley

Reviewed By: amckinley

Maniphest Tasks: T13272

Differential Revision: https://secure.phabricator.com/D20382

+191 -2
+8
src/__phutil_library_map__.php
··· 2973 2973 'PhabricatorDashboardProfileMenuItem' => 'applications/search/menuitem/PhabricatorDashboardProfileMenuItem.php', 2974 2974 'PhabricatorDashboardProjectInstallWorkflow' => 'applications/dashboard/install/PhabricatorDashboardProjectInstallWorkflow.php', 2975 2975 'PhabricatorDashboardQuery' => 'applications/dashboard/query/PhabricatorDashboardQuery.php', 2976 + 'PhabricatorDashboardQueryPanelApplicationEditField' => 'applications/dashboard/editfield/PhabricatorDashboardQueryPanelApplicationEditField.php', 2977 + 'PhabricatorDashboardQueryPanelApplicationTransaction' => 'applications/dashboard/xaction/panel/PhabricatorDashboardQueryPanelApplicationTransaction.php', 2976 2978 'PhabricatorDashboardQueryPanelInstallController' => 'applications/dashboard/controller/PhabricatorDashboardQueryPanelInstallController.php', 2979 + 'PhabricatorDashboardQueryPanelQueryEditField' => 'applications/dashboard/editfield/PhabricatorDashboardQueryPanelQueryEditField.php', 2980 + 'PhabricatorDashboardQueryPanelQueryTransaction' => 'applications/dashboard/xaction/panel/PhabricatorDashboardQueryPanelQueryTransaction.php', 2977 2981 'PhabricatorDashboardQueryPanelType' => 'applications/dashboard/paneltype/PhabricatorDashboardQueryPanelType.php', 2978 2982 'PhabricatorDashboardRemarkupRule' => 'applications/dashboard/remarkup/PhabricatorDashboardRemarkupRule.php', 2979 2983 'PhabricatorDashboardRemovePanelController' => 'applications/dashboard/controller/PhabricatorDashboardRemovePanelController.php', ··· 8952 8956 'PhabricatorDashboardProfileMenuItem' => 'PhabricatorProfileMenuItem', 8953 8957 'PhabricatorDashboardProjectInstallWorkflow' => 'PhabricatorDashboardObjectInstallWorkflow', 8954 8958 'PhabricatorDashboardQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 8959 + 'PhabricatorDashboardQueryPanelApplicationEditField' => 'PhabricatorEditField', 8960 + 'PhabricatorDashboardQueryPanelApplicationTransaction' => 'PhabricatorDashboardPanelPropertyTransaction', 8955 8961 'PhabricatorDashboardQueryPanelInstallController' => 'PhabricatorDashboardController', 8962 + 'PhabricatorDashboardQueryPanelQueryEditField' => 'PhabricatorEditField', 8963 + 'PhabricatorDashboardQueryPanelQueryTransaction' => 'PhabricatorDashboardPanelPropertyTransaction', 8956 8964 'PhabricatorDashboardQueryPanelType' => 'PhabricatorDashboardPanelType', 8957 8965 'PhabricatorDashboardRemarkupRule' => 'PhabricatorObjectRemarkupRule', 8958 8966 'PhabricatorDashboardRemovePanelController' => 'PhabricatorDashboardController',
+59
src/applications/dashboard/editfield/PhabricatorDashboardQueryPanelApplicationEditField.php
··· 1 + <?php 2 + 3 + final class PhabricatorDashboardQueryPanelApplicationEditField 4 + extends PhabricatorEditField { 5 + 6 + private $controlID; 7 + 8 + protected function newControl() { 9 + $engines = id(new PhutilClassMapQuery()) 10 + ->setAncestorClass('PhabricatorApplicationSearchEngine') 11 + ->setFilterMethod('canUseInPanelContext') 12 + ->execute(); 13 + 14 + $all_apps = id(new PhabricatorApplicationQuery()) 15 + ->setViewer($this->getViewer()) 16 + ->withUnlisted(false) 17 + ->withInstalled(true) 18 + ->execute(); 19 + foreach ($engines as $index => $engine) { 20 + if (!isset($all_apps[$engine->getApplicationClassName()])) { 21 + unset($engines[$index]); 22 + continue; 23 + } 24 + } 25 + 26 + $options = array(); 27 + 28 + $value = $this->getValueForControl(); 29 + if (strlen($value) && empty($engines[$value])) { 30 + $options[$value] = $value; 31 + } 32 + 33 + $engines = msort($engines, 'getResultTypeDescription'); 34 + foreach ($engines as $class_name => $engine) { 35 + $options[$class_name] = $engine->getResultTypeDescription(); 36 + } 37 + 38 + return id(new AphrontFormSelectControl()) 39 + ->setID($this->getControlID()) 40 + ->setOptions($options); 41 + } 42 + 43 + protected function newHTTPParameterType() { 44 + return new AphrontSelectHTTPParameterType(); 45 + } 46 + 47 + public function getControlID() { 48 + if (!$this->controlID) { 49 + $this->controlID = celerity_generate_unique_node_id(); 50 + } 51 + 52 + return $this->controlID; 53 + } 54 + 55 + protected function newConduitParameterType() { 56 + return new ConduitStringParameterType(); 57 + } 58 + 59 + }
+77
src/applications/dashboard/editfield/PhabricatorDashboardQueryPanelQueryEditField.php
··· 1 + <?php 2 + 3 + final class PhabricatorDashboardQueryPanelQueryEditField 4 + extends PhabricatorEditField { 5 + 6 + private $applicationControlID; 7 + 8 + public function setApplicationControlID($id) { 9 + $this->applicationControlID = $id; 10 + return $this; 11 + } 12 + 13 + public function getApplicationControlID() { 14 + return $this->applicationControlID; 15 + } 16 + 17 + protected function newControl() { 18 + $engines = id(new PhutilClassMapQuery()) 19 + ->setAncestorClass('PhabricatorApplicationSearchEngine') 20 + ->setFilterMethod('canUseInPanelContext') 21 + ->execute(); 22 + 23 + $value = $this->getValueForControl(); 24 + 25 + $queries = array(); 26 + $seen = false; 27 + foreach ($engines as $engine_class => $engine) { 28 + $engine->setViewer($this->getViewer()); 29 + $engine_queries = $engine->loadEnabledNamedQueries(); 30 + $query_map = mpull($engine_queries, 'getQueryName', 'getQueryKey'); 31 + asort($query_map); 32 + 33 + foreach ($query_map as $key => $name) { 34 + $queries[$engine_class][] = array('key' => $key, 'name' => $name); 35 + if ($key == $value) { 36 + $seen = true; 37 + } 38 + } 39 + } 40 + 41 + if (strlen($value) && !$seen) { 42 + $name = pht('Custom Query ("%s")', $value); 43 + } else { 44 + $name = pht('(None)'); 45 + } 46 + 47 + $options = array($value => $name); 48 + 49 + $application_id = $this->getApplicationControlID(); 50 + $control_id = celerity_generate_unique_node_id(); 51 + 52 + Javelin::initBehavior( 53 + 'dashboard-query-panel-select', 54 + array( 55 + 'applicationID' => $application_id, 56 + 'queryID' => $control_id, 57 + 'options' => $queries, 58 + 'value' => array( 59 + 'key' => strlen($value) ? $value : null, 60 + 'name' => $name, 61 + ), 62 + )); 63 + 64 + return id(new AphrontFormSelectControl()) 65 + ->setID($control_id) 66 + ->setOptions($options); 67 + } 68 + 69 + protected function newHTTPParameterType() { 70 + return new AphrontSelectHTTPParameterType(); 71 + } 72 + 73 + protected function newConduitParameterType() { 74 + return new ConduitStringParameterType(); 75 + } 76 + 77 + }
+23 -2
src/applications/dashboard/paneltype/PhabricatorDashboardQueryPanelType.php
··· 22 22 } 23 23 24 24 protected function newEditEngineFields(PhabricatorDashboardPanel $panel) { 25 - // TODO: Restore this using EditEngine instead of CustomField. 26 - return array(); 25 + $application_field = 26 + id(new PhabricatorDashboardQueryPanelApplicationEditField()) 27 + ->setKey('class') 28 + ->setLabel(pht('Search For')) 29 + ->setTransactionType( 30 + PhabricatorDashboardQueryPanelApplicationTransaction::TRANSACTIONTYPE) 31 + ->setValue($panel->getProperty('class', '')); 32 + 33 + $application_id = $application_field->getControlID(); 34 + 35 + $query_field = 36 + id(new PhabricatorDashboardQueryPanelQueryEditField()) 37 + ->setKey('key') 38 + ->setLabel(pht('Query')) 39 + ->setApplicationControlID($application_id) 40 + ->setTransactionType( 41 + PhabricatorDashboardQueryPanelQueryTransaction::TRANSACTIONTYPE) 42 + ->setValue($panel->getProperty('key', '')); 43 + 44 + return array( 45 + $application_field, 46 + $query_field, 47 + ); 27 48 } 28 49 29 50 public function initializeFieldsFromRequest(
+12
src/applications/dashboard/xaction/panel/PhabricatorDashboardQueryPanelApplicationTransaction.php
··· 1 + <?php 2 + 3 + final class PhabricatorDashboardQueryPanelApplicationTransaction 4 + extends PhabricatorDashboardPanelPropertyTransaction { 5 + 6 + const TRANSACTIONTYPE = 'query.application'; 7 + 8 + protected function getPropertyKey() { 9 + return 'class'; 10 + } 11 + 12 + }
+12
src/applications/dashboard/xaction/panel/PhabricatorDashboardQueryPanelQueryTransaction.php
··· 1 + <?php 2 + 3 + final class PhabricatorDashboardQueryPanelQueryTransaction 4 + extends PhabricatorDashboardPanelPropertyTransaction { 5 + 6 + const TRANSACTIONTYPE = 'search.query'; 7 + 8 + protected function getPropertyKey() { 9 + return 'key'; 10 + } 11 + 12 + }