1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2025-01-23 21:18:19 +01:00
phorge-phorge/src/applications/herald/action/HeraldCommentAction.php
epriestley c9a0d68340 Allow Herald rules to add comments
Summary:
See PHI242. All use cases for this that I know of are pretty hacky, but they don't seem perilous, and it's easier than webhooks.

See P1895, T10183, and T9853 for me previously refusing to implement this since all those use cases were also pretty bad.

Test Plan:
  - Wrote a rule to add comments, saw it add comments.
  - Reviewed summary, re-edited rule, reviewed transcript to check that all the strings worked OK.
  - Wrote a new rule for a non-commentable object (a blog) to make sure I wasn't offered the "Add a comment" action.

Reviewers: amckinley

Reviewed By: amckinley

Differential Revision: https://secure.phabricator.com/D18823
2017-12-18 09:10:57 -08:00

79 lines
2 KiB
PHP

<?php
final class HeraldCommentAction extends HeraldAction {
const ACTIONCONST = 'comment';
const DO_COMMENT = 'do.comment';
public function getHeraldActionName() {
return pht('Add comment');
}
public function getActionGroupKey() {
return HeraldUtilityActionGroup::ACTIONGROUPKEY;
}
public function supportsObject($object) {
if (!($object instanceof PhabricatorApplicationTransactionInterface)) {
return false;
}
$xaction = $object->getApplicationTransactionTemplate();
try {
$comment = $xaction->getApplicationTransactionCommentObject();
if (!$comment) {
return false;
}
} catch (PhutilMethodNotImplementedException $ex) {
return false;
}
return true;
}
public function supportsRuleType($rule_type) {
return ($rule_type != HeraldRuleTypeConfig::RULE_TYPE_PERSONAL);
}
public function applyEffect($object, HeraldEffect $effect) {
$adapter = $this->getAdapter();
$comment_text = $effect->getTarget();
$xaction = $adapter->newTransaction()
->setTransactionType(PhabricatorTransactions::TYPE_COMMENT);
$comment = $xaction->getApplicationTransactionCommentObject()
->setContent($comment_text);
$xaction->attachComment($comment);
$adapter->queueTransaction($xaction);
$this->logEffect(self::DO_COMMENT, $comment_text);
}
public function getHeraldActionStandardType() {
return self::STANDARD_REMARKUP;
}
protected function getActionEffectMap() {
return array(
self::DO_COMMENT => array(
'icon' => 'fa-comment',
'color' => 'blue',
'name' => pht('Added Comment'),
),
);
}
public function renderActionDescription($value) {
$summary = PhabricatorMarkupEngine::summarize($value);
return pht('Add comment: %s', $summary);
}
protected function renderActionEffectDescription($type, $data) {
$summary = PhabricatorMarkupEngine::summarize($data);
return pht('Added a comment: %s', $summary);
}
}