PageRenderTime 41ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/concrete/controllers/frontend/jobs.php

https://gitlab.com/koodersmiikka/operaatio-terveys
PHP | 234 lines | 199 code | 29 blank | 6 comment | 36 complexity | 90b007a99a73353627c883a2087055b2 MD5 | raw file
  1. <?php
  2. namespace Concrete\Controller\Frontend;
  3. use Controller;
  4. use stdClass;
  5. use Job;
  6. use JobSet;
  7. use Response;
  8. class Jobs extends Controller
  9. {
  10. public function view()
  11. {
  12. if (!ini_get('safe_mode')) {
  13. @set_time_limit(0);
  14. }
  15. //Disable job scheduling so we don't end up in a loop
  16. \Config::set('concrete.jobs.enable_scheduling', false);
  17. $response = new Response();
  18. $response->headers->set('Content-Type', 'application/json');
  19. $r = new stdClass;
  20. $r->error = false;
  21. $r->results = array();
  22. if (Job::authenticateRequest($_REQUEST['auth'])) {
  23. $js = null;
  24. if ($_REQUEST['jID']) {
  25. $j = Job::getByID($_REQUEST['jID']);
  26. $r->results[] = $j->executeJob();
  27. } else if ($_REQUEST['jHandle']) {
  28. $j = Job::getByHandle($_REQUEST['jHandle']);
  29. $r->results[] = $j->executeJob();
  30. } else if ($_REQUEST['jsID']) {
  31. $js = JobSet::getByID($_REQUEST['jsID']);
  32. } else {
  33. // default set legacy support
  34. $js = JobSet::getDefault();
  35. }
  36. if (is_object($js)) {
  37. $jobs = $js->getJobs();
  38. $js->markStarted();
  39. foreach ($jobs as $j) {
  40. $obj = $j->executeJob();
  41. $r->results[] = $obj;
  42. }
  43. }
  44. if(count($r->results)) {
  45. $response->setStatusCode(Response::HTTP_OK);
  46. $response->setContent(json_encode($r));
  47. $response->send();
  48. \Core::shutdown();
  49. } else {
  50. $r->error = t('Unknown Job');
  51. $response->setStatusCode(Response::HTTP_NOT_FOUND);
  52. $response->setContent(json_encode($r));
  53. $response->send();
  54. \Core::shutdown();
  55. }
  56. } else {
  57. $r->error = t('Access Denied');
  58. $response->setStatusCode(Response::HTTP_FORBIDDEN);
  59. $response->setContent(json_encode($r));
  60. $response->send();
  61. \Core::shutdown();
  62. }
  63. }
  64. public function run_single()
  65. {
  66. if (!ini_get('safe_mode')) {
  67. @set_time_limit(0);
  68. }
  69. //Disable job scheduling so we don't end up in a loop
  70. \Config::set('concrete.jobs.enable_scheduling', false);
  71. $response = new Response();
  72. $response->headers->set('Content-Type', 'application/json');
  73. $r = new stdClass;
  74. $r->error = false;
  75. $job = null;
  76. if (Job::authenticateRequest($_REQUEST['auth'])) {
  77. if(strlen($_REQUEST['jHandle']) > 0 || intval($_REQUEST['jID']) > 0 ) {
  78. if($_REQUEST['jHandle']) {
  79. $job = Job::getByHandle($_REQUEST['jHandle']);
  80. } else {
  81. $job = Job::getByID(intval($_REQUEST['jID']));
  82. }
  83. }
  84. if (is_object($job)) {
  85. if ($job->supportsQueue()) {
  86. $q = $job->getQueueObject();
  87. if ($_POST['process']) {
  88. $obj = new stdClass;
  89. $obj->error = false;
  90. try {
  91. $messages = $q->receive($job->getJobQueueBatchSize());
  92. foreach ($messages as $key => $p) {
  93. $job->processQueueItem($p);
  94. $q->deleteMessage($p);
  95. }
  96. $totalItems = $q->count();
  97. $obj->totalItems = $totalItems;
  98. if ($q->count() == 0) {
  99. $result = $job->finish($q);
  100. $obj = $job->markCompleted(0, $result);
  101. $obj->error = false;
  102. $obj->totalItems = $totalItems;
  103. }
  104. } catch (\Exception $e) {
  105. $obj = $job->markCompleted(Job::JOB_ERROR_EXCEPTION_GENERAL, $e->getMessage());
  106. $obj->error = true;
  107. $obj->message = $obj->result; // needed for progressive library.
  108. }
  109. $response->setStatusCode(Response::HTTP_OK);
  110. $response->setContent(json_encode($obj));
  111. $response->send();
  112. \Core::shutdown();
  113. } else {
  114. if ($q->count() == 0) {
  115. $q = $job->markStarted();
  116. $job->start($q);
  117. }
  118. }
  119. $totalItems = $q->count();
  120. \View::element('progress_bar', array(
  121. 'totalItems' => $totalItems,
  122. 'totalItemsSummary' => t2("%d item", "%d items", $totalItems)
  123. ));
  124. \Core::shutdown();
  125. } else {
  126. $r = $job->executeJob();
  127. $response->setStatusCode(Response::HTTP_OK);
  128. $response->setContent(json_encode($r));
  129. $response->send();
  130. \Core::shutdown();
  131. }
  132. } else {
  133. $r->error = t('Unknown Job');
  134. $response->setStatusCode(Response::HTTP_NOT_FOUND);
  135. $response->setContent(json_encode($r));
  136. $response->send();
  137. \Core::shutdown();
  138. }
  139. } else {
  140. $r->error = t('Access Denied');
  141. $response->setStatusCode(Response::HTTP_FORBIDDEN);
  142. $response->setContent(json_encode($r));
  143. $response->send();
  144. \Core::shutdown();
  145. }
  146. }
  147. public function check_queue()
  148. {
  149. if (!ini_get('safe_mode')) {
  150. @set_time_limit(0);
  151. }
  152. //Disable job scheduling so we don't end up in a loop
  153. \Config::set('concrete.jobs.enable_scheduling', false);
  154. $response = new Response();
  155. $response->headers->set('Content-Type', 'application/json');
  156. $r = new stdClass;
  157. $r->error = false;
  158. $r->results = array();
  159. if (Job::authenticateRequest($_REQUEST['auth'])) {
  160. $list = Job::getList();
  161. foreach($list as $job) {
  162. if ($job->supportsQueue()) {
  163. $q = $job->getQueueObject();
  164. // don't process queues that are empty
  165. if ($q->count() < 1) {
  166. continue;
  167. }
  168. $obj = new stdClass;
  169. try {
  170. $messages = $q->receive($job->getJobQueueBatchSize());
  171. foreach ($messages as $key => $p) {
  172. $job->processQueueItem($p);
  173. $q->deleteMessage($p);
  174. }
  175. $totalItems = $q->count();
  176. $obj->totalItems = $totalItems;
  177. $obj->jHandle = $job->getJobHandle();
  178. $obj->jID = $job->getJobID();
  179. if ($q->count() == 0) {
  180. $result = $job->finish($q);
  181. $obj = $job->markCompleted(0, $result);
  182. $obj->totalItems = $totalItems;
  183. }
  184. } catch (\Exception $e) {
  185. $obj = $job->markCompleted(Job::JOB_ERROR_EXCEPTION_GENERAL, $e->getMessage());
  186. $obj->message = $obj->result; // needed for progressive library.
  187. }
  188. $r->results[] = $obj;
  189. // End when one queue has processed a batch step
  190. break;
  191. }
  192. }
  193. $response->setStatusCode(Response::HTTP_OK);
  194. $response->setContent(json_encode($r));
  195. $response->send();
  196. \Core::shutdown();
  197. } else {
  198. $r->error = t('Access Denied');
  199. $response->setStatusCode(Response::HTTP_FORBIDDEN);
  200. $response->setContent(json_encode($r));
  201. $response->send();
  202. \Core::shutdown();
  203. }
  204. }
  205. }