Backend\Core\Cronjobs\ProcessQueuedHooks::execute PHP Метод

execute() публичный Метод

Execute the action
public execute ( )
    public function execute()
    {
        trigger_error('Deprecated, you should use the symfony event dispatcher', E_USER_DEPRECATED);
        // no timelimit
        set_time_limit(0);
        // get database
        $db = BackendModel::getContainer()->get('database');
        // create log
        $log = BackendModel::getContainer()->get('logger');
        // get process-id
        $pid = getmypid();
        // store PID
        $filesystem = new Filesystem();
        $filesystem->dumpFile($this->getContainer()->getParameter('kernel.cache_dir') . '/Hooks/pid', $pid);
        while (true) {
            // get 1 item
            $item = $db->getRecord('SELECT *
                 FROM hooks_queue
                 WHERE status = ?
                 LIMIT 1', array('queued'));
            // any item?
            if (!empty($item)) {
                // init var
                $processedSuccessfully = true;
                // set item as busy
                $db->update('hooks_queue', array('status' => 'busy'), 'id = ?', array($item['id']));
                // unserialize data
                $item['callback'] = unserialize($item['callback']);
                $item['data'] = unserialize($item['data']);
                // check if the item is callable
                if (!is_callable($item['callback'])) {
                    // in debug mode we want to know if there are errors
                    if ($this->getContainer()->getParameter('kernel.debug')) {
                        throw new Exception('The given callback is not a valid callable!');
                    }
                    // set to error state
                    $db->update('hooks_queue', array('status' => 'error'), 'id = ?', $item['id']);
                    // reset state
                    $processedSuccessfully = false;
                    $log->info('Callback (' . serialize($item['callback']) . ') failed.');
                }
                try {
                    $log->info('Callback (' . serialize($item['callback']) . ') called.');
                    // call the callback
                    $return = call_user_func($item['callback'], $item['data']);
                    // failed?
                    if ($return === false) {
                        // set to error state
                        $db->update('hooks_queue', array('status' => 'error'), 'id = ?', $item['id']);
                        // reset state
                        $processedSuccessfully = false;
                        $log->info('Callback (' . serialize($item['callback']) . ') failed.');
                    }
                } catch (Exception $e) {
                    // set to error state
                    $db->update('hooks_queue', array('status' => 'error'), 'id = ?', $item['id']);
                    // reset state
                    $processedSuccessfully = false;
                    // logging when we are in debugmode
                    if ($this->getContainer()->getParameter('kernel.debug')) {
                        $log->err('Callback (' . serialize($item['callback']) . ') failed.');
                    }
                }
                // everything went fine so delete the item
                if ($processedSuccessfully) {
                    $db->delete('hooks_queue', 'id = ?', $item['id']);
                }
                // logging when we are in debugmode
                if ($this->getContainer()->getParameter('kernel.debug')) {
                    $log->info('Callback (' . serialize($item['callback']) . ') finished.');
                }
            } else {
                $filesystem = new Filesystem();
                $filesystem->remove($this->getContainer()->getParameter('kernel.cache_dir') . '/Hooks/pid');
                throw new ExitException('All hooks have been processed');
            }
        }
    }
ProcessQueuedHooks