cron.php 7.0 KB

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