1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-12-20 04:20:55 +01:00

Inlines for custom herald actions

Summary: Ref D8784.  Didn't see all of the inlines before hitting `arc land`.  This fixes up the issues raised (and makes all the code nicer).

Test Plan: Made sure custom actions only appear for appropriate adapters and checked to ensure that they triggered correctly.

Reviewers: #blessed_reviewers, epriestley

Reviewed By: #blessed_reviewers, epriestley

Subscribers: edutibau, ite-klass, epriestley, Korvin

Differential Revision: https://secure.phabricator.com/D9796
This commit is contained in:
James Rhodes 2014-07-03 13:49:57 +10:00
parent 5d91b2f0aa
commit 7baa0941b9

View file

@ -106,15 +106,28 @@ abstract class HeraldAdapter {
public function getCustomActions() { public function getCustomActions() {
if ($this->customActions === null) { if ($this->customActions === null) {
$this->customActions = id(new PhutilSymbolLoader()) $custom_actions = id(new PhutilSymbolLoader())
->setAncestorClass('HeraldCustomAction') ->setAncestorClass('HeraldCustomAction')
->loadObjects(); ->loadObjects();
foreach ($this->customActions as $key => $object) { foreach ($custom_actions as $key => $object) {
if (!$object->appliesToAdapter($this)) { if (!$object->appliesToAdapter($this)) {
unset($this->customActions[$key]); unset($custom_actions[$key]);
} }
} }
$this->customActions = array();
foreach ($custom_actions as $action) {
$key = $action->getActionKey();
if (array_key_exists($key, $this->customActions)) {
throw new Exception(
'More than one Herald custom action implementation '.
'handles the action key: \''.$key.'\'.');
}
$this->customActions[$key] = $action;
}
} }
return $this->customActions; return $this->customActions;
@ -163,20 +176,16 @@ abstract class HeraldAdapter {
} }
} }
public abstract function applyHeraldEffects(array $effects); abstract public function applyHeraldEffects(array $effects);
protected function handleCustomHeraldEffect(HeraldEffect $effect) { protected function handleCustomHeraldEffect(HeraldEffect $effect) {
foreach ($this->getCustomActions() as $custom_action) { $custom_action = idx($this->getCustomActions(), $effect->getAction());
if ($effect->getAction() == $custom_action->getActionKey()) {
$result = $custom_action->applyEffect(
$this,
$this->getObject(),
$effect);
if ($result !== null) { if ($custom_action !== null) {
return $result; return $custom_action->applyEffect(
} $this,
} $this->getObject(),
$effect);
} }
return null; return null;
@ -688,16 +697,21 @@ abstract class HeraldAdapter {
/* -( Actions )------------------------------------------------------------ */ /* -( Actions )------------------------------------------------------------ */
public function getActions($rule_type) { public function getCustomActionsForRuleType($rule_type) {
$results = array(); $results = array();
foreach ($this->getCustomActions() as $custom_action) { foreach ($this->getCustomActions() as $custom_action) {
if ($custom_action->appliesToRuleType($rule_type)) { if ($custom_action->appliesToRuleType($rule_type)) {
$results[] = $custom_action->getActionKey(); $results[] = $custom_action;
} }
} }
return $results; return $results;
} }
public function getActions($rule_type) {
$custom_actions = $this->getCustomActionsForRuleType($rule_type);
return mpull($custom_actions, 'getActionKey');
}
public function getActionNameMap($rule_type) { public function getActionNameMap($rule_type) {
switch ($rule_type) { switch ($rule_type) {
case HeraldRuleTypeConfig::RULE_TYPE_GLOBAL: case HeraldRuleTypeConfig::RULE_TYPE_GLOBAL:
@ -737,12 +751,8 @@ abstract class HeraldAdapter {
throw new Exception("Unknown rule type '{$rule_type}'!"); throw new Exception("Unknown rule type '{$rule_type}'!");
} }
foreach ($this->getCustomActions() as $custom_action) { $custom_actions = $this->getCustomActionsForRuleType($rule_type);
if ($custom_action->appliesToRuleType($rule_type)) { $standard += mpull($custom_actions, 'getActionName', 'getActionKey');
$standard[$custom_action->getActionKey()] =
$custom_action->getActionName();
}
}
return $standard; return $standard;
} }
@ -922,12 +932,9 @@ abstract class HeraldAdapter {
} }
} }
foreach ($this->getCustomActions() as $custom_action) { $custom_action = idx($this->getCustomActions(), $action);
if ($custom_action->appliesToRuleType($rule_type)) { if ($custom_action !== null) {
if ($action === $custom_action->getActionKey()) { return $custom_action->getActionType();
return $custom_action->getActionType();
}
}
} }
throw new Exception("Unknown or invalid action '".$action."'."); throw new Exception("Unknown or invalid action '".$action."'.");