Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 3 |
CRAP | |
0.00% |
0 / 35 |
cron_runner_listener | |
0.00% |
0 / 1 |
|
0.00% |
0 / 3 |
72.00 | |
0.00% |
0 / 35 |
__construct | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 5 |
|||
on_kernel_terminate | |
0.00% |
0 / 1 |
42.00 | |
0.00% |
0 / 25 |
|||
getSubscribedEvents | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 5 |
<?php | |
/** | |
* | |
* This file is part of the phpBB Forum Software package. | |
* | |
* @copyright (c) phpBB Limited <https://www.phpbb.com> | |
* @license GNU General Public License, version 2 (GPL-2.0) | |
* | |
* For full copyright and license information, please see | |
* the docs/CREDITS.txt file. | |
* | |
*/ | |
namespace phpbb\cron\event; | |
use phpbb\cron\manager; | |
use phpbb\lock\db; | |
use phpbb\request\request_interface; | |
use Symfony\Component\EventDispatcher\EventSubscriberInterface; | |
use Symfony\Component\HttpKernel\KernelEvents; | |
use Symfony\Component\HttpKernel\Event\PostResponseEvent; | |
/** | |
* Event listener that executes cron tasks, after the response was served | |
*/ | |
class cron_runner_listener implements EventSubscriberInterface | |
{ | |
/** | |
* @var db | |
*/ | |
private $cron_lock; | |
/** | |
* @var manager | |
*/ | |
private $cron_manager; | |
/** | |
* @var request_interface | |
*/ | |
private $request; | |
/** | |
* Constructor | |
* | |
* @param db $lock | |
* @param manager $manager | |
* @param request_interface $request | |
*/ | |
public function __construct(db $lock, manager $manager, request_interface $request) | |
{ | |
$this->cron_lock = $lock; | |
$this->cron_manager = $manager; | |
$this->request = $request; | |
} | |
/** | |
* Runs the cron job after the response was sent | |
* | |
* @param PostResponseEvent $event The event | |
*/ | |
public function on_kernel_terminate(PostResponseEvent $event) | |
{ | |
$request = $event->getRequest(); | |
$controller_name = $request->get('_route'); | |
if ($controller_name !== 'phpbb_cron_run') | |
{ | |
return; | |
} | |
$cron_type = $request->get('cron_type'); | |
if ($this->cron_lock->acquire()) | |
{ | |
$task = $this->cron_manager->find_task($cron_type); | |
if ($task) | |
{ | |
if ($task->is_parametrized()) | |
{ | |
$task->parse_parameters($this->request); | |
} | |
if ($task->is_ready()) | |
{ | |
$task->run(); | |
} | |
} | |
$this->cron_lock->release(); | |
} | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
static public function getSubscribedEvents() | |
{ | |
return array( | |
KernelEvents::TERMINATE => 'on_kernel_terminate', | |
); | |
} | |
} |