Elgg  Version 1.10
HooksRegistrationService.php
Go to the documentation of this file.
1 <?php
2 namespace Elgg;
3 
15 abstract class HooksRegistrationService {
16 
17  private $handlers = array();
18 
22  protected $logger;
23 
30  public function setLogger(\Elgg\Logger $logger = null) {
31  $this->logger = $logger;
32  return $this;
33  }
34 
43  public function registerHandler($name, $type, $callback, $priority = 500) {
44  if (empty($name) || empty($type) || !is_callable($callback, true)) {
45  return false;
46  }
47 
48  if (!isset($this->handlers[$name])) {
49  $this->handlers[$name] = array();
50  }
51 
52  if (!isset($this->handlers[$name][$type])) {
53  $this->handlers[$name][$type] = array();
54  }
55 
56  // Priority cannot be lower than 0
57  $priority = max((int) $priority, 0);
58 
59  while (isset($this->handlers[$name][$type][$priority])) {
60  $priority++;
61  }
62 
63  $this->handlers[$name][$type][$priority] = $callback;
64  ksort($this->handlers[$name][$type]);
65 
66  return true;
67  }
68 
79  public function unregisterHandler($name, $type, $callback) {
80  if (isset($this->handlers[$name]) && isset($this->handlers[$name][$type])) {
81  foreach ($this->handlers[$name][$type] as $key => $name_callback) {
82  if ($name_callback == $callback) {
83  unset($this->handlers[$name][$type][$key]);
84  return true;
85  }
86  }
87  }
88 
89  return false;
90  }
91 
103  public function getAllHandlers() {
104  return $this->handlers;
105  }
106 
114  public function hasHandler($name, $type) {
115  return isset($this->handlers[$name][$type]);
116  }
117 
126  protected function getOrderedHandlers($name, $type) {
127  $handlers = array();
128 
129  if (isset($this->handlers[$name][$type])) {
130  if ($name != 'all' && $type != 'all') {
131  $handlers = array_merge($handlers, array_values($this->handlers[$name][$type]));
132  }
133  }
134  if (isset($this->handlers['all'][$type])) {
135  if ($type != 'all') {
136  $handlers = array_merge($handlers, array_values($this->handlers['all'][$type]));
137  }
138  }
139  if (isset($this->handlers[$name]['all'])) {
140  if ($name != 'all') {
141  $handlers = array_merge($handlers, array_values($this->handlers[$name]['all']));
142  }
143  }
144  if (isset($this->handlers['all']['all'])) {
145  $handlers = array_merge($handlers, array_values($this->handlers['all']['all']));
146  }
147 
148  return $handlers;
149  }
150 
159  protected function describeCallable($callable) {
160  if (is_string($callable)) {
161  return $callable;
162  }
163  if (is_array($callable) && array_keys($callable) === array(0, 1) && is_string($callable[1])) {
164  if (is_string($callable[0])) {
165  return "{$callable[0]}::{$callable[1]}";
166  }
167  return "(" . get_class($callable[0]) . ")->{$callable[1]}";
168  }
169  if ($callable instanceof \Closure) {
170  $ref = new \ReflectionFunction($callable);
171  $file = $ref->getFileName();
172  $line = $ref->getStartLine();
173  return "(Closure {$file}:{$line})";
174  }
175  if (is_object($callable)) {
176  return "(" . get_class($callable) . ")->__invoke()";
177  }
178  return "(unknown)";
179  }
180 }
181 
hasHandler($name, $type)
Does the hook have a handler?
setLogger(\Elgg\Logger $logger=null)
Set a logger instance, e.g.
if($guid==elgg_get_logged_in_user_guid()) $name
Definition: delete.php:21
describeCallable($callable)
Get a string description of a callback.
registerHandler($name, $type, $callback, $priority=500)
Registers a handler.
Save menu items.
$key
Definition: summary.php:34
$type
Definition: add.php:8
getAllHandlers()
Returns all registered handlers as array( $name => array( $type => array( $priority => callback...
unregisterHandler($name, $type, $callback)
Unregister a handler.
$priority
getOrderedHandlers($name, $type)
Returns an ordered array of handlers registered for $name and $type.