Page MenuHomePhorge

D25080.1734694917.diff
No OneTemporary

D25080.1734694917.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
@@ -4491,6 +4491,7 @@
'PhabricatorProjectTransactionType' => 'applications/project/xaction/PhabricatorProjectTransactionType.php',
'PhabricatorProjectTrigger' => 'applications/project/storage/PhabricatorProjectTrigger.php',
'PhabricatorProjectTriggerAddProjectsRule' => 'applications/project/trigger/PhabricatorProjectTriggerAddProjectsRule.php',
+ 'PhabricatorProjectTriggerAddSubscribersRule' => 'applications/project/trigger/PhabricatorProjectTriggerAddSubscribersRule.php',
'PhabricatorProjectTriggerController' => 'applications/project/controller/trigger/PhabricatorProjectTriggerController.php',
'PhabricatorProjectTriggerCorruptionException' => 'applications/project/exception/PhabricatorProjectTriggerCorruptionException.php',
'PhabricatorProjectTriggerEditController' => 'applications/project/controller/trigger/PhabricatorProjectTriggerEditController.php',
@@ -4505,6 +4506,7 @@
'PhabricatorProjectTriggerPlaySoundRule' => 'applications/project/trigger/PhabricatorProjectTriggerPlaySoundRule.php',
'PhabricatorProjectTriggerQuery' => 'applications/project/query/PhabricatorProjectTriggerQuery.php',
'PhabricatorProjectTriggerRemoveProjectsRule' => 'applications/project/trigger/PhabricatorProjectTriggerRemoveProjectsRule.php',
+ 'PhabricatorProjectTriggerRemoveSubscribersRule' => 'applications/project/trigger/PhabricatorProjectTriggerRemoveSubscribersRule.php',
'PhabricatorProjectTriggerRule' => 'applications/project/trigger/PhabricatorProjectTriggerRule.php',
'PhabricatorProjectTriggerRuleRecord' => 'applications/project/trigger/PhabricatorProjectTriggerRuleRecord.php',
'PhabricatorProjectTriggerRulesetTransaction' => 'applications/project/xaction/trigger/PhabricatorProjectTriggerRulesetTransaction.php',
@@ -11129,6 +11131,7 @@
'PhabricatorDestructibleInterface',
),
'PhabricatorProjectTriggerAddProjectsRule' => 'PhabricatorProjectTriggerRule',
+ 'PhabricatorProjectTriggerAddSubscribersRule' => 'PhabricatorProjectTriggerRule',
'PhabricatorProjectTriggerController' => 'PhabricatorProjectController',
'PhabricatorProjectTriggerCorruptionException' => 'Exception',
'PhabricatorProjectTriggerEditController' => 'PhabricatorProjectTriggerController',
@@ -11143,6 +11146,7 @@
'PhabricatorProjectTriggerPlaySoundRule' => 'PhabricatorProjectTriggerRule',
'PhabricatorProjectTriggerQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorProjectTriggerRemoveProjectsRule' => 'PhabricatorProjectTriggerRule',
+ 'PhabricatorProjectTriggerRemoveSubscribersRule' => 'PhabricatorProjectTriggerRule',
'PhabricatorProjectTriggerRule' => 'Phobject',
'PhabricatorProjectTriggerRuleRecord' => 'Phobject',
'PhabricatorProjectTriggerRulesetTransaction' => 'PhabricatorProjectTriggerTransactionType',
diff --git a/src/applications/project/trigger/PhabricatorProjectTriggerAddSubscribersRule.php b/src/applications/project/trigger/PhabricatorProjectTriggerAddSubscribersRule.php
new file mode 100644
--- /dev/null
+++ b/src/applications/project/trigger/PhabricatorProjectTriggerAddSubscribersRule.php
@@ -0,0 +1,127 @@
+<?php
+
+/**
+ * Trigger Rule that Adds Subscribers
+ *
+ * This may be useful to automatically engage some
+ * Users or Project Tags on certain Workboard areas.
+ *
+ * This class was adapted from these classes:
+ * - PhabricatorProjectTriggerAddProjectsRule
+ * - PhabricatorProjectTriggerManiphestOwnerRule
+ *
+ * https://we.phorge.it/T15162
+ */
+final class PhabricatorProjectTriggerAddSubscribersRule
+ extends PhabricatorProjectTriggerRule {
+
+ const TRIGGERTYPE = 'task.subscriber.add';
+
+ public function getSelectControlName() {
+ return pht('Add subscribers');
+ }
+
+ protected function getValueForEditorField() {
+ return $this->getDatasource()->getWireTokens($this->getValue());
+ }
+
+ protected function assertValidRuleRecordFormat($value) {
+ if (!is_array($value)) {
+ throw new Exception(
+ pht(
+ 'Add subscribers rule value should be a list, but is not '.
+ '(value is "%s").',
+ phutil_describe_type($value)));
+ }
+ }
+
+ protected function assertValidRuleRecordValue($value) {
+ if (!$value) {
+ throw new Exception(
+ pht(
+ 'You must select at least one user or project tag to add.'));
+ }
+ }
+
+ protected function newDropTransactions($object, $value) {
+ $subscriber_edge_type = PhabricatorObjectHasSubscriberEdgeType::EDGECONST;
+
+ $xaction = $object->getApplicationTransactionTemplate()
+ ->setTransactionType(PhabricatorTransactions::TYPE_EDGE)
+ ->setMetadataValue('edge:type', $subscriber_edge_type)
+ ->setNewValue(
+ array(
+ '+' => array_fuse($value),
+ ));
+
+ return array($xaction);
+ }
+
+ protected function newDropEffects($value) {
+ return array(
+ $this->newEffect()
+ ->setIcon('fa-briefcase')
+ ->setContent($this->getRuleViewDescription($value)),
+ );
+ }
+
+ protected function getDefaultValue() {
+ return null;
+ }
+
+ protected function getPHUIXControlType() {
+ return 'tokenizer';
+ }
+
+ private function getDatasource() {
+ $datasource = new PhabricatorProjectOrUserDatasource();
+
+ if ($this->getViewer()) {
+ $datasource->setViewer($this->getViewer());
+ }
+
+ return $datasource;
+ }
+
+ 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('Add subscribers');
+ }
+
+ public function getRuleViewDescription($value) {
+ return pht(
+ 'Add subscribers: %s.',
+ phutil_tag(
+ 'strong',
+ array(),
+ $this->getViewer()
+ ->renderHandleList($value)
+ ->setAsInline(true)
+ ->render()));
+ }
+
+ public function getRuleViewIcon($value) {
+ return id(new PHUIIconView())
+ ->setIcon('fa-users', 'green');
+ }
+
+
+}
diff --git a/src/applications/project/trigger/PhabricatorProjectTriggerRemoveSubscribersRule.php b/src/applications/project/trigger/PhabricatorProjectTriggerRemoveSubscribersRule.php
new file mode 100644
--- /dev/null
+++ b/src/applications/project/trigger/PhabricatorProjectTriggerRemoveSubscribersRule.php
@@ -0,0 +1,127 @@
+<?php
+
+/**
+ * Trigger Rule that Removes Subscribers
+ *
+ * This may be useful to have a column that simplify
+ * Task handovers. You can remove both Users or Project Tags
+ * from the list of Task Subscribers.
+ *
+ * This class was adapted from these classes:
+ * - PhabricatorProjectTriggerRemoveProjectsRule
+ * - PhabricatorProjectTriggerManiphestOwnerRule
+ *
+ * https://we.phorge.it/T15162
+ */
+final class PhabricatorProjectTriggerRemoveSubscribersRule
+ extends PhabricatorProjectTriggerRule {
+
+ const TRIGGERTYPE = 'task.subscriber.remove';
+
+ public function getSelectControlName() {
+ return pht('Remove subscribers');
+ }
+
+ protected function getValueForEditorField() {
+ return $this->getDatasource()->getWireTokens($this->getValue());
+ }
+
+ protected function assertValidRuleRecordFormat($value) {
+ if (!is_array($value)) {
+ throw new Exception(
+ pht(
+ 'Remove subscribers rule value should be a list, but is not '.
+ '(value is "%s").',
+ phutil_describe_type($value)));
+ }
+ }
+
+ protected function assertValidRuleRecordValue($value) {
+ if (!$value) {
+ throw new Exception(
+ pht(
+ 'You must select at least one user or project tag to remove.'));
+ }
+ }
+
+ protected function newDropTransactions($object, $value) {
+ $subscriber_edge_type = PhabricatorObjectHasSubscriberEdgeType::EDGECONST;
+
+ $xaction = $object->getApplicationTransactionTemplate()
+ ->setTransactionType(PhabricatorTransactions::TYPE_EDGE)
+ ->setMetadataValue('edge:type', $subscriber_edge_type)
+ ->setNewValue(
+ array(
+ '-' => array_fuse($value),
+ ));
+
+ return array($xaction);
+ }
+
+ protected function newDropEffects($value) {
+ return array(
+ $this->newEffect()
+ ->setIcon('fa-briefcase')
+ ->setContent($this->getRuleViewDescription($value)),
+ );
+ }
+
+ protected function getDefaultValue() {
+ return null;
+ }
+
+ protected function getPHUIXControlType() {
+ return 'tokenizer';
+ }
+
+ private function getDatasource() {
+ $datasource = new PhabricatorProjectOrUserDatasource();
+
+ if ($this->getViewer()) {
+ $datasource->setViewer($this->getViewer());
+ }
+
+ return $datasource;
+ }
+
+ 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('Remove subscribers');
+ }
+
+ public function getRuleViewDescription($value) {
+ return pht(
+ 'Remove subscribers: %s.',
+ phutil_tag(
+ 'strong',
+ array(),
+ $this->getViewer()
+ ->renderHandleList($value)
+ ->setAsInline(true)
+ ->render()));
+ }
+
+ public function getRuleViewIcon($value) {
+ return id(new PHUIIconView())
+ ->setIcon('fa-users', 'red');
+ }
+
+}

File Metadata

Mime Type
text/plain
Expires
Fri, Dec 20, 11:41 (12 h, 42 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1015331
Default Alt Text
D25080.1734694917.diff (10 KB)

Event Timeline