Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 19
0.00% covered (danger)
0.00%
0 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
cron_runner_listener
0.00% covered (danger)
0.00%
0 / 19
0.00% covered (danger)
0.00%
0 / 3
72
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
2
 on_kernel_terminate
0.00% covered (danger)
0.00%
0 / 13
0.00% covered (danger)
0.00%
0 / 1
42
 getSubscribedEvents
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2/**
3 *
4 * This file is part of the phpBB Forum Software package.
5 *
6 * @copyright (c) phpBB Limited <https://www.phpbb.com>
7 * @license GNU General Public License, version 2 (GPL-2.0)
8 *
9 * For full copyright and license information, please see
10 * the docs/CREDITS.txt file.
11 *
12 */
13
14namespace phpbb\cron\event;
15
16use phpbb\cron\manager;
17use phpbb\lock\db;
18use phpbb\request\request_interface;
19use Symfony\Component\EventDispatcher\EventSubscriberInterface;
20use Symfony\Component\HttpKernel\KernelEvents;
21use Symfony\Component\HttpKernel\Event\TerminateEvent;
22
23/**
24 * Event listener that executes cron tasks, after the response was served
25 */
26class cron_runner_listener implements EventSubscriberInterface
27{
28    /**
29     * @var db
30     */
31    private $cron_lock;
32
33    /**
34     * @var manager
35     */
36    private $cron_manager;
37
38    /**
39     * @var request_interface
40     */
41    private $request;
42
43    /**
44     * Constructor
45     *
46     * @param db                 $lock
47     * @param manager            $manager
48     * @param request_interface    $request
49     */
50    public function __construct(db $lock, manager $manager, request_interface $request)
51    {
52        $this->cron_lock    = $lock;
53        $this->cron_manager    = $manager;
54        $this->request        = $request;
55    }
56
57    /**
58     * Runs the cron job after the response was sent
59     *
60     * @param TerminateEvent    $event    The event
61     */
62    public function on_kernel_terminate(TerminateEvent $event)
63    {
64        $request = $event->getRequest();
65        $controller_name = $request->get('_route');
66
67        if ($controller_name !== 'phpbb_cron_run')
68        {
69            return;
70        }
71
72        $cron_type = $request->get('cron_type');
73
74        if ($this->cron_lock->acquire())
75        {
76            $task = $this->cron_manager->find_task($cron_type);
77            if ($task)
78            {
79                if ($task->is_parametrized())
80                {
81                    $task->parse_parameters($this->request);
82                }
83
84                if ($task->is_ready())
85                {
86                    $task->run();
87                }
88            }
89            $this->cron_lock->release();
90        }
91    }
92
93    /**
94     * {@inheritdoc}
95     */
96    public static function getSubscribedEvents()
97    {
98        return array(
99            KernelEvents::TERMINATE        => 'on_kernel_terminate',
100        );
101    }
102}