cron.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <?php
  2. require_once 'api/functions.php';
  3. $Organizr = new Organizr();
  4. $Organizr->setLoggerChannel('Cron');
  5. if ($Organizr->isLocalOrServer() && $Organizr->hasDB()) {
  6. // Create a new scheduler
  7. $scheduler = new GO\Scheduler();
  8. // Clear any pre-existing jobs if any
  9. $scheduler->clearJobs();
  10. $Organizr->logger->debug('Cron process starting');
  11. // Add plugin cron
  12. $Organizr->logger->debug('Checking if any plugins have cron jobs');
  13. foreach ($GLOBALS['cron'] as $cronJob) {
  14. if (isset($cronJob['enabled']) && isset($cronJob['class']) && isset($cronJob['function']) && isset($cronJob['schedule'])) {
  15. if ($Organizr->config[$cronJob['enabled']]) {
  16. if (class_exists($cronJob['class'])) {
  17. $Organizr->logger->debug('Starting cron job for function: ' . $cronJob['function'], ['cronJob' => $cronJob]);
  18. $Organizr->logger->debug('Validating cron job schedule', ['schedule' => $cronJob['schedule']]);
  19. try {
  20. $schedule = new Cron\CronExpression($Organizr->config[$cronJob['schedule']]);
  21. $Organizr->logger->debug('Cron schedule has passed validation', ['schedule' => $Organizr->config[$cronJob['schedule']]]);
  22. } catch (InvalidArgumentException $e) {
  23. $Organizr->logger->warn('Cron schedule has failed validation', ['schedule' => $Organizr->config[$cronJob['schedule']]]);
  24. $Organizr->logger->error($e);
  25. break;
  26. }
  27. $plugin = new $cronJob['class']();
  28. $function = $cronJob['function'];
  29. if (method_exists($plugin, $function)) {
  30. $scheduler->call(
  31. function ($plugin, $function) use ($Organizr) {
  32. $Organizr->logger->debug('Starting cron job for function: ' . $function);
  33. return $plugin->$function();
  34. }, [$plugin, $function])
  35. ->then(function ($output) use ($Organizr) {
  36. $Organizr->logger->debug('Completed cron job', [
  37. 'output' => $output,
  38. ]);
  39. })
  40. ->at($Organizr->config[$cronJob['schedule']]);
  41. }
  42. }
  43. } else {
  44. $Organizr->logger->debug('Cron job is not enabled', ['cronJob' => $cronJob]);
  45. }
  46. } else {
  47. $Organizr->logger->warning('Cron job was setup incorrectly', ['cronJob' => $cronJob]);
  48. }
  49. }
  50. $Organizr->logger->debug('Finished processing plugin cron jobs');
  51. /*
  52. * Include plugin advanced cron
  53. */
  54. $Organizr->logger->debug('Checking if any Plugins have advanced cron jobs');
  55. try {
  56. $directoryIterator = new RecursiveDirectoryIterator($Organizr->root . DIRECTORY_SEPARATOR . 'api' . DIRECTORY_SEPARATOR . 'plugins', FilesystemIterator::SKIP_DOTS);
  57. $iteratorIterator = new RecursiveIteratorIterator($directoryIterator);
  58. foreach ($iteratorIterator as $info) {
  59. if ($info->getFilename() == 'advancedCron.php') {
  60. require_once $info->getPathname();
  61. }
  62. }
  63. } catch (UnexpectedValueException $e) {
  64. $Organizr->logger->error($e);
  65. }
  66. $Organizr->logger->debug('Finished processing advanced plugin cron jobs');
  67. // Run cron jobs
  68. $scheduler->run();
  69. // Debug stuff
  70. //$Organizr->prettyPrint($scheduler->getVerboseOutput());
  71. //$Organizr->prettyPrint($scheduler->getFailedJobs());
  72. $Organizr->logger->debug('Cron process completion', ['verbose' => $scheduler->getVerboseOutput()]);
  73. if (!empty($scheduler->getFailedJobs())) {
  74. $Organizr->logger->warning('Cron jobs have failed', ['jobs' => $scheduler->getFailedJobs()]);
  75. }
  76. } else {
  77. if ($Organizr->hasDB()) {
  78. $Organizr->logger->warning('Unauthorized user tried to access cron file');
  79. }
  80. die($Organizr->showHTML('Unauthorized', 'Go-on.... Git!!!'));
  81. }