Example #1
0
/**
 * Fire server side event
 *
 * This function calls every defined listener for fired event
 */
function fireEvent($eventName, &$params)
{
    //check if triggers not disabled
    if (Config::getFlag('disableTriggers')) {
        return;
    }
    $triggerDepth = Config::get('runningTriggerDepth', 0);
    // dont allow triggers run deeper then 3rd level
    if ($triggerDepth > 3) {
        return;
    }
    $listeners = Config::getListeners();
    if (empty($listeners[$eventName])) {
        return;
    }
    foreach ($listeners[$eventName] as $className => $methods) {
        $className = str_replace('_', '\\', $className);
        $class = new $className();
        if (!is_array($methods)) {
            $methods = array($methods);
        }
        foreach ($methods as $method) {
            Config::setEnvVar('runningTriggerDepth', $triggerDepth + 1);
            try {
                $class->{$method}($params);
            } catch (\Exception $e) {
                debug('Event Exception for ' . $className . '->' . $method . "\n" . $e->getMessage() . "\n" . $e->getTraceAsString());
            }
            Config::setEnvVar('runningTriggerDepth', $triggerDepth);
        }
        unset($class);
    }
}