Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F15367574
D19400.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
5 KB
Referenced Files
None
Subscribers
None
D19400.diff
View Options
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
@@ -1485,12 +1485,14 @@
'HeraldRemarkupFieldValue' => 'applications/herald/value/HeraldRemarkupFieldValue.php',
'HeraldRemarkupRule' => 'applications/herald/remarkup/HeraldRemarkupRule.php',
'HeraldRule' => 'applications/herald/storage/HeraldRule.php',
+ 'HeraldRuleAdapter' => 'applications/herald/adapter/HeraldRuleAdapter.php',
'HeraldRuleController' => 'applications/herald/controller/HeraldRuleController.php',
'HeraldRuleDatasource' => 'applications/herald/typeahead/HeraldRuleDatasource.php',
'HeraldRuleEditor' => 'applications/herald/editor/HeraldRuleEditor.php',
'HeraldRuleListController' => 'applications/herald/controller/HeraldRuleListController.php',
'HeraldRulePHIDType' => 'applications/herald/phid/HeraldRulePHIDType.php',
'HeraldRuleQuery' => 'applications/herald/query/HeraldRuleQuery.php',
+ 'HeraldRuleReplyHandler' => 'applications/herald/mail/HeraldRuleReplyHandler.php',
'HeraldRuleSearchEngine' => 'applications/herald/query/HeraldRuleSearchEngine.php',
'HeraldRuleSerializer' => 'applications/herald/editor/HeraldRuleSerializer.php',
'HeraldRuleTestCase' => 'applications/herald/storage/__tests__/HeraldRuleTestCase.php',
@@ -6918,12 +6920,14 @@
'PhabricatorDestructibleInterface',
'PhabricatorSubscribableInterface',
),
+ 'HeraldRuleAdapter' => 'HeraldAdapter',
'HeraldRuleController' => 'HeraldController',
'HeraldRuleDatasource' => 'PhabricatorTypeaheadDatasource',
'HeraldRuleEditor' => 'PhabricatorApplicationTransactionEditor',
'HeraldRuleListController' => 'HeraldController',
'HeraldRulePHIDType' => 'PhabricatorPHIDType',
'HeraldRuleQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
+ 'HeraldRuleReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler',
'HeraldRuleSearchEngine' => 'PhabricatorApplicationSearchEngine',
'HeraldRuleSerializer' => 'Phobject',
'HeraldRuleTestCase' => 'PhabricatorTestCase',
diff --git a/src/applications/herald/adapter/HeraldRuleAdapter.php b/src/applications/herald/adapter/HeraldRuleAdapter.php
new file mode 100644
--- /dev/null
+++ b/src/applications/herald/adapter/HeraldRuleAdapter.php
@@ -0,0 +1,74 @@
+<?php
+
+final class HeraldRuleAdapter extends HeraldAdapter {
+
+ private $rule;
+
+ protected function newObject() {
+ return new HeraldRule();
+ }
+
+ public function getAdapterApplicationClass() {
+ return 'PhabricatorHeraldApplication';
+ }
+
+ public function getAdapterContentDescription() {
+ return pht('React to Herald rules being created or updated.');
+ }
+
+ public function isTestAdapterForObject($object) {
+ return ($object instanceof HeraldRule);
+ }
+
+ public function getAdapterTestDescription() {
+ return pht(
+ 'Test rules which run when another Herald rule is created or '.
+ 'updated.');
+ }
+
+ protected function initializeNewAdapter() {
+ $this->rule = $this->newObject();
+ }
+
+ public function supportsApplicationEmail() {
+ return true;
+ }
+
+ public function supportsRuleType($rule_type) {
+ switch ($rule_type) {
+ case HeraldRuleTypeConfig::RULE_TYPE_GLOBAL:
+ case HeraldRuleTypeConfig::RULE_TYPE_PERSONAL:
+ return true;
+ case HeraldRuleTypeConfig::RULE_TYPE_OBJECT:
+ default:
+ return false;
+ }
+ }
+
+ public function setRule(HeraldRule $rule) {
+ $this->rule = $rule;
+ return $this;
+ }
+
+ public function getRule() {
+ return $this->rule;
+ }
+
+ public function setObject($object) {
+ $this->rule = $object;
+ return $this;
+ }
+
+ public function getObject() {
+ return $this->rule;
+ }
+
+ public function getAdapterContentName() {
+ return pht('Herald Rules');
+ }
+
+ public function getHeraldName() {
+ return $this->getRule()->getMonogram();
+ }
+
+}
diff --git a/src/applications/herald/editor/HeraldRuleEditor.php b/src/applications/herald/editor/HeraldRuleEditor.php
--- a/src/applications/herald/editor/HeraldRuleEditor.php
+++ b/src/applications/herald/editor/HeraldRuleEditor.php
@@ -87,4 +87,54 @@
return;
}
+ protected function shouldApplyHeraldRules(
+ PhabricatorLiskDAO $object,
+ array $xactions) {
+ return true;
+ }
+
+ protected function buildHeraldAdapter(
+ PhabricatorLiskDAO $object,
+ array $xactions) {
+ return id(new HeraldRuleAdapter())
+ ->setRule($object);
+ }
+
+ protected function shouldSendMail(
+ PhabricatorLiskDAO $object,
+ array $xactions) {
+ return true;
+ }
+
+ protected function getMailTo(PhabricatorLiskDAO $object) {
+ $phids = array();
+
+ $phids[] = $this->getActingAsPHID();
+
+ if ($object->isPersonalRule()) {
+ $phids[] = $object->getAuthorPHID();
+ }
+
+ return $phids;
+ }
+
+ protected function buildReplyHandler(PhabricatorLiskDAO $object) {
+ return id(new HeraldRuleReplyHandler())
+ ->setMailReceiver($object);
+ }
+
+ protected function buildMailTemplate(PhabricatorLiskDAO $object) {
+ $monogram = $object->getMonogram();
+ $name = $object->getName();
+
+ $subject = pht('%s: %s', $monogram, $name);
+
+ return id(new PhabricatorMetaMTAMail())
+ ->setSubject($subject);
+ }
+
+ protected function getMailSubjectPrefix() {
+ return pht('[Herald]');
+ }
+
}
diff --git a/src/applications/herald/mail/HeraldRuleReplyHandler.php b/src/applications/herald/mail/HeraldRuleReplyHandler.php
new file mode 100644
--- /dev/null
+++ b/src/applications/herald/mail/HeraldRuleReplyHandler.php
@@ -0,0 +1,16 @@
+<?php
+
+final class HeraldRuleReplyHandler
+ extends PhabricatorApplicationTransactionReplyHandler {
+
+ public function validateMailReceiver($mail_receiver) {
+ if (!($mail_receiver instanceof HeraldRule)) {
+ throw new Exception(pht('Mail receiver is not a %s!', 'HeraldRule'));
+ }
+ }
+
+ public function getObjectPrefix() {
+ return 'H';
+ }
+
+}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Wed, Mar 12, 7:45 PM (12 h, 53 m)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7593071
Default Alt Text
D19400.diff (5 KB)
Attached To
Mode
D19400: Support Herald rules for Herald rules
Attached
Detach File
Event Timeline
Log In to Comment