Page MenuHomePhabricator

D20329.id48526.diff
No OneTemporary

D20329.id48526.diff

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,112 @@
+<?php
+
+final class PhabricatorProjectTriggerManiphestOwnerRule
+ extends PhabricatorProjectTriggerRule {
+
+ const TRIGGERTYPE = 'task.owner';
+
+ public function getSelectControlName() {
+ return pht('Assign task to');
+ }
+
+ protected function adjustValueFromRequest($value) {
+ $value = head($value);
+ if ($value === PhabricatorPeopleNoOwnerDatasource::FUNCTION_TOKEN) {
+ return null;
+ } else {
+ return $value;
+ }
+ }
+
+ protected function assertValidRuleValue($value) {
+ if (!is_array($value)) {
+ throw new Exception(
+ pht(
+ 'Owner rule value should be a list, but is not (value is "%s").',
+ phutil_describe_type($value)));
+ }
+
+ if (count($value) != 1) {
+ throw new Exception(
+ pht(
+ 'Owner rule value should be a list of exactly one user PHID, or the '.
+ 'token "none()" (value is "%s").',
+ implode(', ', $value)));
+ }
+ }
+
+ protected function newDropTransactions($object, $value) {
+ return array(
+ $this->newTransaction()
+ ->setTransactionType(ManiphestTaskOwnerTransaction::TRANSACTIONTYPE)
+ ->setNewValue($value),
+ );
+ }
+
+ protected function newDropEffects($value) {
+ return array(
+ $this->newEffect()
+ ->setIcon('fa-user')
+ ->setContent($this->getRuleViewDescription($value))
+ ->addCondition('owner', '!=', $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' => null,
+ );
+ }
+
+ public function getRuleViewLabel() {
+ return pht('Change Owner');
+ }
+
+ public function getRuleViewDescription($value) {
+ if (!$value) {
+ return pht('Unassign task.');
+ } else {
+ return pht(
+ 'Assign task to %s.',
+ phutil_tag(
+ 'strong',
+ array(),
+ $this->getViewer()
+ ->renderHandle($value)
+ ->render()));
+ }
+ }
+
+ public function getRuleViewIcon($value) {
+ return id(new PHUIIconView())
+ ->setIcon('fa-user', 'green');
+ }
+
+
+}
diff --git a/src/applications/project/trigger/PhabricatorProjectTriggerRule.php b/src/applications/project/trigger/PhabricatorProjectTriggerRule.php
--- a/src/applications/project/trigger/PhabricatorProjectTriggerRule.php
+++ b/src/applications/project/trigger/PhabricatorProjectTriggerRule.php
@@ -22,6 +22,7 @@
final public function setRecord(PhabricatorProjectTriggerRuleRecord $record) {
$value = $record->getValue();
+ $record->setValue($this->adjustValueFromRequest($value));
$this->assertValidRuleValue($value);
@@ -37,6 +38,10 @@
return $this->getRecord()->getValue();
}
+ protected function adjustValueFromRequest($value) {
+ return $value;
+ }
+
abstract public function getSelectControlName();
abstract public function getRuleViewLabel();
abstract public function getRuleViewDescription($value);

File Metadata

Mime Type
text/plain
Expires
Sat, Jun 28, 9:40 AM (16 h, 43 m)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
8206200
Default Alt Text
D20329.id48526.diff (8 KB)

Event Timeline