diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -4180,6 +4180,7 @@ 'PhabricatorProjectTriggerEditor' => 'applications/project/editor/PhabricatorProjectTriggerEditor.php', 'PhabricatorProjectTriggerInvalidRule' => 'applications/project/trigger/PhabricatorProjectTriggerInvalidRule.php', 'PhabricatorProjectTriggerListController' => 'applications/project/controller/trigger/PhabricatorProjectTriggerListController.php', + 'PhabricatorProjectTriggerManiphestOwnerRule' => 'applications/project/trigger/PhabricatorProjectTriggerManiphestOwnerRule.php', 'PhabricatorProjectTriggerManiphestPriorityRule' => 'applications/project/trigger/PhabricatorProjectTriggerManiphestPriorityRule.php', 'PhabricatorProjectTriggerManiphestStatusRule' => 'applications/project/trigger/PhabricatorProjectTriggerManiphestStatusRule.php', 'PhabricatorProjectTriggerNameTransaction' => 'applications/project/xaction/trigger/PhabricatorProjectTriggerNameTransaction.php', @@ -10319,6 +10320,7 @@ 'PhabricatorProjectTriggerEditor' => 'PhabricatorApplicationTransactionEditor', 'PhabricatorProjectTriggerInvalidRule' => 'PhabricatorProjectTriggerRule', 'PhabricatorProjectTriggerListController' => 'PhabricatorProjectTriggerController', + 'PhabricatorProjectTriggerManiphestOwnerRule' => 'PhabricatorProjectTriggerRule', 'PhabricatorProjectTriggerManiphestPriorityRule' => 'PhabricatorProjectTriggerRule', 'PhabricatorProjectTriggerManiphestStatusRule' => 'PhabricatorProjectTriggerRule', 'PhabricatorProjectTriggerNameTransaction' => 'PhabricatorProjectTriggerTransactionType', diff --git a/src/applications/project/controller/PhabricatorProjectBoardViewController.php b/src/applications/project/controller/PhabricatorProjectBoardViewController.php --- a/src/applications/project/controller/PhabricatorProjectBoardViewController.php +++ b/src/applications/project/controller/PhabricatorProjectBoardViewController.php @@ -621,19 +621,26 @@ $panel->setCards($cards); $board->addPanel($panel); + $trigger = null; + if ($column->canHaveTrigger()) { + $trigger = $column->getTrigger(); + if ($trigger) { + foreach ($trigger->getTriggerRules() as $rule) { + $rule->setViewer($viewer); + } + } + } + $drop_effects = $column->getDropEffects(); $drop_effects = mpull($drop_effects, 'toDictionary'); $preview_effect = null; - if ($column->canHaveTrigger()) { - $trigger = $column->getTrigger(); - if ($trigger) { - $preview_effect = $trigger->getPreviewEffect() - ->toDictionary(); + if ($trigger) { + $preview_effect = $trigger->getPreviewEffect() + ->toDictionary(); - foreach ($trigger->getSoundEffects() as $sound) { - $sounds[] = $sound; - } + foreach ($trigger->getSoundEffects() as $sound) { + $sounds[] = $sound; } } diff --git a/src/applications/project/controller/trigger/PhabricatorProjectTriggerEditController.php b/src/applications/project/controller/trigger/PhabricatorProjectTriggerEditController.php --- a/src/applications/project/controller/trigger/PhabricatorProjectTriggerEditController.php +++ b/src/applications/project/controller/trigger/PhabricatorProjectTriggerEditController.php @@ -272,6 +272,10 @@ $rule_list = array_values($rule_list); $type_list = PhabricatorProjectTriggerRule::getAllTriggerRules(); + + foreach ($type_list as $rule) { + $rule->setViewer($this->getViewer()); + } $type_list = mpull($type_list, 'newTemplate'); $type_list = array_values($type_list); diff --git a/src/applications/project/controller/trigger/PhabricatorProjectTriggerViewController.php b/src/applications/project/controller/trigger/PhabricatorProjectTriggerViewController.php --- a/src/applications/project/controller/trigger/PhabricatorProjectTriggerViewController.php +++ b/src/applications/project/controller/trigger/PhabricatorProjectTriggerViewController.php @@ -21,6 +21,10 @@ return new Aphront404Response(); } + foreach ($trigger->getTriggerRules() as $rule) { + $rule->setViewer($viewer); + } + $rules_view = $this->newRulesView($trigger); $columns_view = $this->newColumnsView($trigger); @@ -166,6 +170,7 @@ $rows = array(); foreach ($rules as $rule) { + $rule->setViewer($viewer); $value = $rule->getRecord()->getValue(); $rows[] = array( diff --git a/src/applications/project/trigger/PhabricatorProjectTriggerManiphestOwnerRule.php b/src/applications/project/trigger/PhabricatorProjectTriggerManiphestOwnerRule.php new file mode 100644 --- /dev/null +++ b/src/applications/project/trigger/PhabricatorProjectTriggerManiphestOwnerRule.php @@ -0,0 +1,106 @@ +newTransaction() + ->setTransactionType(ManiphestTaskOwnerTransaction::TRANSACTIONTYPE) + ->setNewValue($phid), + ); + } + + protected function newDropEffects($value) { + return array( + $this->newEffect() + ->addCondition('owner', '!=', $value) + ->setContent($this->getRuleViewDescription($value)), + ); + } + + protected function getDefaultValue() { + return null; + } + + protected function getPHUIXControlType() { + return 'tokenizer'; + } + + protected function getDatasource() { + return id(new ManiphestAssigneeDatasource()) + ->setViewer($this->getViewer()) + ->setLimit(1); + } + + protected function getPHUIXControlSpecification() { + $template = id(new AphrontTokenizerTemplateView()) + ->setViewer($this->getViewer()); + $template_markup = $template->render(); + + $datasource = $this->getDatasource(); + return array( + 'markup' => (string)hsprintf('%s', $template_markup), + 'config' => array( + 'src' => $datasource->getDatasourceURI(), + 'browseURI' => $datasource->getBrowseURI(), + 'placeholder' => $datasource->getPlaceholderText(), + 'limit' => $datasource->getLimit(), + ), + 'value' => 'wang', + ); + } + + public function getRuleViewLabel() { + return pht('Change Owner'); + } + + public function getRuleViewDescription($value) { + if (head($value) === PhabricatorPeopleNoOwnerDatasource::FUNCTION_TOKEN) { + return pht('Unassign task.'); + } else { + return pht( + 'Assign task to: %s.', + $this->getViewer() + ->renderHandleList($value) + ->setAsInline(true) + ->render()); + } + } + + public function getRuleViewIcon($value) { + return id(new PHUIIconView()) + ->setIcon('fa-user', 'green'); + } + + +}