FOF30\Controller\Controller::triggerEvent PHP Method

triggerEvent() protected method

EXAMPLE Component: com_foobar, Object name: item, Event: onBeforeSomething, Arguments: array(123, 456) The event calls: 1. $this->onBeforeSomething(123, 456) 2. $this->checkACL('@something') if there is no onBeforeSomething and the event starts with onBefore 3. Joomla! plugin event onComFoobarControllerItemBeforeSomething($this, 123, 456)
protected triggerEvent ( string $event, array $arguments = [] ) : boolean
$event string The name of the event, typically named onPredicateVerb e.g. onBeforeKick
$arguments array The arguments to pass to the event handlers
return boolean
    protected function triggerEvent($event, array $arguments = array())
    {
        $result = true;
        // If there is an object method for this event, call it
        if (method_exists($this, $event)) {
            switch (count($arguments)) {
                case 0:
                    $result = $this->{$event}();
                    break;
                case 1:
                    $result = $this->{$event}($arguments[0]);
                    break;
                case 2:
                    $result = $this->{$event}($arguments[0], $arguments[1]);
                    break;
                case 3:
                    $result = $this->{$event}($arguments[0], $arguments[1], $arguments[2]);
                    break;
                case 4:
                    $result = $this->{$event}($arguments[0], $arguments[1], $arguments[2], $arguments[3]);
                    break;
                case 5:
                    $result = $this->{$event}($arguments[0], $arguments[1], $arguments[2], $arguments[3], $arguments[4]);
                    break;
                default:
                    $result = call_user_func_array(array($this, $event), $arguments);
                    break;
            }
        } elseif (substr($event, 0, 8) == 'onBefore') {
            $task = substr($event, 8);
            $result = $this->checkACL('@' . $task);
        }
        if ($result === false) {
            return false;
        }
        // All other event handlers live outside this object, therefore they need to be passed a reference to this
        // objects as the first argument.
        array_unshift($arguments, $this);
        // If we have an "on" prefix for the event (e.g. onFooBar) remove it and stash it for later.
        $prefix = '';
        if (substr($event, 0, 2) == 'on') {
            $prefix = 'on';
            $event = substr($event, 2);
        }
        // Get the component/model prefix for the event
        $prefix .= 'Com' . ucfirst($this->container->bareComponentName) . 'Controller';
        $prefix .= ucfirst($this->getName());
        // The event name will be something like onComFoobarItemsBeforeSomething
        $event = $prefix . $event;
        // Call the Joomla! plugins
        $results = $this->container->platform->runPlugins($event, $arguments);
        if (!empty($results)) {
            foreach ($results as $result) {
                if ($result === false) {
                    return false;
                }
            }
        }
        return true;
    }