cron.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. <?php
  2. require_once 'api/functions.php';
  3. $Organizr = new Organizr();
  4. $Organizr->setLoggerChannel('Cron');
  5. if ($Organizr->isLocalOrServer() && $Organizr->hasDB()) {
  6. // Set user as Organizr API
  7. $_GET['apikey'] = $Organizr->config['organizrAPI'];
  8. // Create a new scheduler
  9. $scheduler = new GO\Scheduler();
  10. // Clear any pre-existing jobs if any
  11. $scheduler->clearJobs();
  12. $Organizr->logger->debug('Cron process starting');
  13. // Auto-update Cron
  14. if ($Organizr->config['autoUpdateCronEnabled'] && $Organizr->config['autoUpdateCronSchedule']) {
  15. try {
  16. $schedule = new Cron\CronExpression($Organizr->config['autoUpdateCronSchedule']);
  17. $Organizr->logger->debug('Cron schedule has passed validation', ['schedule' => $Organizr->config['autoUpdateCronSchedule']]);
  18. $scheduler->call(
  19. function () use ($Organizr) {
  20. $Organizr->logger->debug('Running cron job', ['function' => 'Auto-update']);
  21. return $Organizr->updateOrganizr();
  22. })
  23. ->then(function ($output) use ($Organizr) {
  24. $Organizr->logger->debug('Completed cron job', [
  25. 'output' => $output,
  26. ]);
  27. })
  28. ->at($Organizr->config['autoUpdateCronSchedule']);
  29. } catch (InvalidArgumentException $e) {
  30. $Organizr->logger->warning('Cron schedule has failed validation', ['schedule' => $Organizr->config['autoUpdateCronSchedule']]);
  31. $Organizr->logger->error($e);
  32. } catch (Exception $e) {
  33. $Organizr->logger->error($e);
  34. }
  35. }
  36. // End Auto-update Cron
  37. // Add plugin cron
  38. $Organizr->logger->debug('Checking if any plugins have cron jobs');
  39. foreach ($GLOBALS['cron'] as $cronJob) {
  40. if (isset($cronJob['enabled']) && isset($cronJob['class']) && isset($cronJob['function']) && isset($cronJob['schedule'])) {
  41. $Organizr->logger->debug('Starting cron job for function: ' . $cronJob['function'], ['cronJob' => $cronJob]);
  42. if ($Organizr->config[$cronJob['enabled']]) {
  43. $Organizr->logger->debug('Checking if cron job class exists', ['cronJob' => $cronJob]);
  44. if (class_exists($cronJob['class'])) {
  45. $Organizr->logger->debug('Class exists', ['cronJob' => $cronJob]);
  46. $Organizr->logger->debug('Validating cron job schedule', ['schedule' => $cronJob['schedule']]);
  47. try {
  48. $schedule = new Cron\CronExpression($Organizr->config[$cronJob['schedule']]);
  49. $Organizr->logger->debug('Cron schedule has passed validation', ['schedule' => $Organizr->config[$cronJob['schedule']]]);
  50. $plugin = new $cronJob['class']();
  51. $function = $cronJob['function'];
  52. $Organizr->logger->debug('Checking if cron job method exists', ['cronJob' => $cronJob]);
  53. if (method_exists($plugin, $function)) {
  54. $Organizr->logger->debug('Method exists', ['cronJob' => $cronJob]);
  55. $scheduler->call(
  56. function ($plugin, $function) use ($Organizr) {
  57. $Organizr->logger->debug('Running cron job', ['function' => $function]);
  58. return $plugin->$function();
  59. }, [$plugin, $function])
  60. ->then(function ($output) use ($Organizr) {
  61. $Organizr->logger->debug('Completed cron job', [
  62. 'output' => $output,
  63. ]);
  64. })
  65. ->at($Organizr->config[$cronJob['schedule']]);
  66. } else {
  67. $Organizr->logger->warning('Method error', ['cronJob' => $cronJob['class']]);
  68. }
  69. } catch (InvalidArgumentException $e) {
  70. $Organizr->logger->warning('Cron schedule has failed validation', ['schedule' => $Organizr->config[$cronJob['schedule']]]);
  71. $Organizr->logger->error($e);
  72. break;
  73. } catch (Exception $e) {
  74. $Organizr->logger->error($e);
  75. break;
  76. }
  77. } else {
  78. $Organizr->logger->warning('Class error', ['cronJob' => $cronJob['class']]);
  79. }
  80. } else {
  81. $Organizr->logger->debug('Cron job is not enabled', ['cronJob' => $cronJob]);
  82. }
  83. } else {
  84. $Organizr->logger->warning('Cron job was setup incorrectly', ['cronJob' => $cronJob]);
  85. }
  86. }
  87. $Organizr->logger->debug('Finished processing plugin cron jobs');
  88. /*
  89. * Include plugin advanced cron
  90. */
  91. $Organizr->logger->debug('Checking if any Plugins have advanced cron jobs');
  92. try {
  93. $directoryIterator = new RecursiveDirectoryIterator($Organizr->root . DIRECTORY_SEPARATOR . 'api' . DIRECTORY_SEPARATOR . 'plugins', FilesystemIterator::SKIP_DOTS);
  94. $iteratorIterator = new RecursiveIteratorIterator($directoryIterator);
  95. foreach ($iteratorIterator as $info) {
  96. if ($info->getFilename() == 'advancedCron.php') {
  97. require_once $info->getPathname();
  98. }
  99. }
  100. } catch (UnexpectedValueException $e) {
  101. $Organizr->logger->error($e);
  102. }
  103. $Organizr->logger->debug('Finished processing advanced plugin cron jobs');
  104. // Run cron jobs
  105. $scheduler->run();
  106. // Debug stuff
  107. //$Organizr->prettyPrint($scheduler->getVerboseOutput());
  108. //$Organizr->prettyPrint($scheduler->getFailedJobs());
  109. $Organizr->logger->debug('Cron process completion', ['verbose' => $scheduler->getVerboseOutput()]);
  110. if (!empty($scheduler->getFailedJobs())) {
  111. $Organizr->logger->warning('Cron jobs have failed', ['jobs' => $scheduler->getFailedJobs(), 'verbose' => $scheduler->getVerboseOutput()]);
  112. }
  113. // End Run and set file with time
  114. $Organizr->createCronFile();
  115. } else {
  116. if ($Organizr->hasDB()) {
  117. $Organizr->logger->warning('Unauthorized user tried to access cron file');
  118. die($Organizr->showHTML('Unauthorized', 'Go-on.... Git!!!'));
  119. }
  120. die('Unauthorized');
  121. }