From 01fea6935267d5b3755fcee7e4e7811960263e7f Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Tue, 3 Sep 2019 15:38:59 +0200 Subject: [PATCH] Limit some workflow elements to moderators Allows to streamline triaging and keeping track of reports status, together with removing confusing elements which non-moderators can not use anyway. --- ...abricatorFavoritesMainMenuBarExtension.php | 4 ++++ .../maniphest/editor/ManiphestEditEngine.php | 24 +++++++++++++++++++ .../people/storage/PhabricatorUser.php | 14 +++++++++++ .../PhabricatorProjectBoardViewController.php | 6 +++-- 4 files changed, 46 insertions(+), 2 deletions(-) diff --git a/src/applications/favorites/engineextension/PhabricatorFavoritesMainMenuBarExtension.php b/src/applications/favorites/engineextension/PhabricatorFavoritesMainMenuBarExtension.php index a6cd4fc069..7f9e3154f9 100644 --- a/src/applications/favorites/engineextension/PhabricatorFavoritesMainMenuBarExtension.php +++ b/src/applications/favorites/engineextension/PhabricatorFavoritesMainMenuBarExtension.php @@ -18,6 +18,10 @@ final class PhabricatorFavoritesMainMenuBarExtension public function buildMainMenus() { $viewer = $this->getViewer(); + if ($viewer->limitNonContributorUI()) { + return array(); + } + $dropdown = $this->newDropdown($viewer); if (!$dropdown) { return array(); diff --git a/src/applications/maniphest/editor/ManiphestEditEngine.php b/src/applications/maniphest/editor/ManiphestEditEngine.php index 19080b5e59..48b35f4300 100644 --- a/src/applications/maniphest/editor/ManiphestEditEngine.php +++ b/src/applications/maniphest/editor/ManiphestEditEngine.php @@ -353,6 +353,18 @@ EODOCS continue; } + // Blender: limit task reopen to contributors. + // + // NOTE: Similar to other semantic check here we don't do it in the + // Conduit. + $viewer = $this->getViewer(); + if (ManiphestTaskStatus::isClosedStatus($current_status) && + ManiphestTaskStatus::isOpenStatus($status) && + $viewer->limitNonContributorUI()) { + unset($status_map[$status]); + continue; + } + // Don't allow tasks to be changed directly into "Closed, Duplicate" // status. Instead, you have to merge them. See T4819. if ($status == $dup_status) { @@ -382,6 +394,18 @@ EODOCS continue; } + // Blender: limit triaging to contributors. + // + // NOTE: Similar to other semantic check here we don't do it in the + // Conduit. + $viewer = $this->getViewer(); + if ($priority != $current_priority) { + if (array_search('triage', $priority_keywords[$priority]) === false && + $viewer->limitNonContributorUI()) { + continue; + } + } + $keyword = head(idx($priority_keywords, $priority)); $results[$keyword] = $priority_name; } diff --git a/src/applications/people/storage/PhabricatorUser.php b/src/applications/people/storage/PhabricatorUser.php index 655f75340c..6ce1837f76 100644 --- a/src/applications/people/storage/PhabricatorUser.php +++ b/src/applications/people/storage/PhabricatorUser.php @@ -1574,5 +1574,19 @@ final class PhabricatorUser return $list; } + // Blender: Limit certain workflow steps to regular contributors, making it + // easier to follow status of the tracker. + public function limitNonContributorUI() { + if ($this->getIsAdmin()) { + return false; + } + $project = id(new PhabricatorProjectQuery()) + ->setViewer($this) + ->withNames(array('Moderators')) + ->withMemberPHIDs(array($this->getPHID())) + ->executeOne(); + + return is_null($project); + } } diff --git a/src/applications/project/controller/PhabricatorProjectBoardViewController.php b/src/applications/project/controller/PhabricatorProjectBoardViewController.php index 13a75c5a73..6e05378847 100644 --- a/src/applications/project/controller/PhabricatorProjectBoardViewController.php +++ b/src/applications/project/controller/PhabricatorProjectBoardViewController.php @@ -178,8 +178,10 @@ final class PhabricatorProjectBoardViewController $panel->addClass('project-panel-hidden'); } - $column_menu = $this->buildColumnMenu($project, $column); - $panel->addHeaderAction($column_menu); + if (!$viewer->limitNonContributorUI()) { + $column_menu = $this->buildColumnMenu($project, $column); + $panel->addHeaderAction($column_menu); + } if ($column->canHaveTrigger()) { $trigger = $column->getTrigger();