/** * Register a cron job * @param $name String The name of the cron job * @param $class mixed The class which manages the cron job * @param $interval int The interval in minutes between execution */ public function addCronJob($name, $class, $interval) { PluginManager::addCronJob($name, $class, $interval); }
/** * @param $core Core */ public static function processCronJobs($core) { // Get internal entity manager $em = $core->getInternalDatabase()->getEntityManager(); // Go throw every cron job foreach (PluginManager::$cronjobs as $name => $data) { // Validate if (array_key_exists('class', $data) && array_key_exists('interval', $data)) { /** @var $class CronJob */ $class = $data['class']; $interval = $data['interval']; // Get details from database /** @var $details DBO\CronJob */ $details = $em->getRepository('Quantum\\DBO\\CronJob')->findOneBy(array('name' => $name)); if ($details == null) { $details = new DBO\CronJob(); $details->setName($name); $details->setLastRun(0); $em->persist($details); } // Check if the cron job should now be executed if (PluginManager::timeMinutes() >= $details->getLastRun() + $interval * 60) { if ($core->inDev()) { echo 'Execute cron job "' . $name . '"' . PHP_EOL; } if ($class->execute($core)) { // Run was successful $details->setLastRun(PluginManager::timeMinutes()); $em->persist($details); if ($core->inDev()) { echo 'Success!' . PHP_EOL; } } else { // todo logging if ($core->inDev()) { echo 'Failed!' . PHP_EOL; } } } else { if ($core->inDev()) { echo 'Cron job "' . $name . '" is not needed in this run!' . PHP_EOL; } } } } $em->flush(); }
private function initPlugins() { PluginManager::load($this); }