|
|
<?php |
|
|
|
|
|
namespace Kanboard\Core\Plugin; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Hook |
|
|
{ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private $hooks = array(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function on($hook, $value) |
|
|
{ |
|
|
if (! isset($this->hooks[$hook])) { |
|
|
$this->hooks[$hook] = array(); |
|
|
} |
|
|
|
|
|
$this->hooks[$hook][] = $value; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getListeners($hook) |
|
|
{ |
|
|
return isset($this->hooks[$hook]) ? $this->hooks[$hook] : array(); |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function exists($hook) |
|
|
{ |
|
|
return isset($this->hooks[$hook]); |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function merge($hook, array &$values, array $params = array()) |
|
|
{ |
|
|
foreach ($this->getListeners($hook) as $listener) { |
|
|
$result = call_user_func_array($listener, $params); |
|
|
|
|
|
if (is_array($result) && ! empty($result)) { |
|
|
$values = array_merge($values, $result); |
|
|
} |
|
|
} |
|
|
|
|
|
return $values; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function first($hook, array $params = array()) |
|
|
{ |
|
|
foreach ($this->getListeners($hook) as $listener) { |
|
|
return call_user_func_array($listener, $params); |
|
|
} |
|
|
|
|
|
return null; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function reference($hook, &$param) |
|
|
{ |
|
|
foreach ($this->getListeners($hook) as $listener) { |
|
|
$listener($param); |
|
|
} |
|
|
|
|
|
return $param; |
|
|
} |
|
|
} |
|
|
|