/**
* Triggers an Elgg event.
*
* @see elgg_trigger_event
* @see elgg_trigger_after_event
* @access private
*/
public function trigger($event, $type, $object = null, array $options = array())
{
$options = array_merge(array(self::OPTION_STOPPABLE => true, self::OPTION_DEPRECATION_MESSAGE => '', self::OPTION_DEPRECATION_VERSION => ''), $options);
$events = $this->hasHandler($event, $type);
if ($events && $options[self::OPTION_DEPRECATION_MESSAGE]) {
elgg_deprecated_notice($options[self::OPTION_DEPRECATION_MESSAGE], $options[self::OPTION_DEPRECATION_VERSION], 2);
}
$events = $this->getOrderedHandlers($event, $type);
$args = array($event, $type, $object);
foreach ($events as $callback) {
if (!is_callable($callback)) {
if ($this->logger) {
$this->logger->warn("handler for event [{$event}, {$type}] is not callable: " . $this->inspector->describeCallable($callback));
}
continue;
}
if ($this->timer && $type === 'system' && $event !== 'shutdown') {
$callback_as_string = $this->inspector->describeCallable($callback) . "()";
$this->timer->begin(["[{$event},{$type}]", $callback_as_string]);
$return = call_user_func_array($callback, $args);
$this->timer->end(["[{$event},{$type}]", $callback_as_string]);
} else {
$return = call_user_func_array($callback, $args);
}
if (!empty($options[self::OPTION_STOPPABLE]) && $return === false) {
return false;
}
}
return true;
}