2015-07-24 17:19:47 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
abstract class PhabricatorMetaMTAEmailHeraldAction
|
|
|
|
extends HeraldAction {
|
|
|
|
|
|
|
|
const DO_SEND = 'do.send';
|
|
|
|
const DO_FORCE = 'do.force';
|
|
|
|
|
|
|
|
public function supportsObject($object) {
|
|
|
|
// NOTE: This implementation lacks generality, but there's no great way to
|
|
|
|
// figure out if something generates email right now.
|
|
|
|
|
|
|
|
if ($object instanceof DifferentialDiff) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2015-08-15 19:54:33 +02:00
|
|
|
if ($object instanceof PhabricatorMetaMTAMail) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2015-07-24 17:19:47 +02:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getActionGroupKey() {
|
|
|
|
return HeraldNotifyActionGroup::ACTIONGROUPKEY;
|
|
|
|
}
|
|
|
|
|
|
|
|
protected function applyEmail(array $phids, $force) {
|
|
|
|
$adapter = $this->getAdapter();
|
|
|
|
|
2015-08-03 22:34:31 +02:00
|
|
|
$allowed_types = array(
|
|
|
|
PhabricatorPeopleUserPHIDType::TYPECONST,
|
|
|
|
PhabricatorProjectProjectPHIDType::TYPECONST,
|
|
|
|
);
|
|
|
|
|
|
|
|
// There's no stateful behavior for this action: we always just send an
|
|
|
|
// email.
|
|
|
|
$current = array();
|
|
|
|
|
|
|
|
$targets = $this->loadStandardTargets($phids, $allowed_types, $current);
|
|
|
|
if (!$targets) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
$phids = array_fuse(array_keys($targets));
|
|
|
|
|
2015-07-24 17:19:47 +02:00
|
|
|
foreach ($phids as $phid) {
|
|
|
|
$adapter->addEmailPHID($phid, $force);
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($force) {
|
|
|
|
$this->logEffect(self::DO_FORCE, $phids);
|
|
|
|
} else {
|
|
|
|
$this->logEffect(self::DO_SEND, $phids);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
protected function getActionEffectMap() {
|
|
|
|
return array(
|
|
|
|
self::DO_SEND => array(
|
|
|
|
'icon' => 'fa-envelope',
|
|
|
|
'color' => 'green',
|
|
|
|
'name' => pht('Sent Mail'),
|
|
|
|
),
|
|
|
|
self::DO_FORCE => array(
|
|
|
|
'icon' => 'fa-envelope',
|
|
|
|
'color' => 'blue',
|
|
|
|
'name' => pht('Forced Mail'),
|
|
|
|
),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2015-08-03 15:01:24 +02:00
|
|
|
protected function renderActionEffectDescription($type, $data) {
|
2015-07-24 17:19:47 +02:00
|
|
|
switch ($type) {
|
|
|
|
case self::DO_SEND:
|
|
|
|
return pht(
|
|
|
|
'Queued email to be delivered to %s target(s): %s.',
|
|
|
|
new PhutilNumber(count($data)),
|
|
|
|
$this->renderHandleList($data));
|
|
|
|
case self::DO_FORCE:
|
|
|
|
return pht(
|
|
|
|
'Queued email to be delivered to %s target(s), ignoring their '.
|
|
|
|
'notification preferences: %s.',
|
|
|
|
new PhutilNumber(count($data)),
|
|
|
|
$this->renderHandleList($data));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|