public function jobqueueExecute($jobId)
 {
     $this->queuedJobService->checkJobHealth();
     $job = DataList::create('QueuedJobDescriptor')->byID($jobId);
     if ($job) {
         // check that we're not trying to execute something tooo soon
         if (strtotime($job->StartAfter) > time()) {
             return;
         }
         $this->queuedJobService->runJob($jobId);
     }
 }
 public function process()
 {
     $sent = 0;
     $filter = array('WorkflowStatus' => array('Active', 'Paused'), 'Definition.RemindDays:GreaterThan' => 0);
     $active = WorkflowInstance::get()->filter($filter);
     foreach ($active as $instance) {
         $edited = strtotime($instance->LastEdited);
         $days = $instance->Definition()->RemindDays;
         if ($edited + $days * 3600 * 24 > time()) {
             continue;
         }
         $email = new Email();
         $bcc = '';
         $members = $instance->getAssignedMembers();
         $target = $instance->getTarget();
         if (!$members || !count($members)) {
             continue;
         }
         $email->setSubject("Workflow Reminder: {$instance->Title}");
         $email->setBcc(implode(', ', $members->column('Email')));
         $email->setTemplate('WorkflowReminderEmail');
         $email->populateTemplate(array('Instance' => $instance, 'Link' => $target instanceof SiteTree ? "admin/show/{$target->ID}" : ''));
         $email->send();
         $sent++;
         // add a comment to the workflow if possible
         $action = $instance->CurrentAction();
         $currentComment = $action->Comment;
         $action->Comment = sprintf(_t('AdvancedWorkflow.JOB_REMINDER_COMMENT', '%s: Reminder email sent\\n\\n'), date('Y-m-d H:i:s')) . $currentComment;
         try {
             $action->write();
         } catch (Exception $ex) {
             SS_Log::log($ex, SS_Log::WARN);
         }
         $instance->LastEdited = time();
         try {
             $instance->write();
         } catch (Exception $ex) {
             SS_Log::log($ex, SS_Log::WARN);
         }
     }
     $this->currentStep = 2;
     $this->isComplete = true;
     $nextDate = date('Y-m-d H:i:s', time() + $this->repeatInterval);
     $this->queuedJobService->queueJob(new WorkflowReminderJob($this->repeatInterval), $nextDate);
 }
 /**
  * Save the post
  * 
  * @param DataObject $post
  * @param type $data 
  */
 public function savePost(DataObject $post, $data)
 {
     if ($post->checkPerm('Write') && isset($data['Content'])) {
         $post->Content = $data['Content'];
         if ($this->securityContext->getMember()->Balance >= MicroBlogMember::BALANCE_THRESHOLD) {
             $post->analyseContent();
             $post->write();
         } else {
             $this->queuedJobService->queueJob(new ProcessPostJob($post));
         }
         $html = $post->renderWith('PostContent');
         return $post;
     }
 }
 public function getEditForm($id = null, $fields = null)
 {
     $form = parent::getEditForm($id, $fields);
     $filter = $this->jobQueue->getJobListFilter(null, 300);
     $list = DataList::create('QueuedJobDescriptor');
     $list = $list->where($filter);
     $grid = new GridField('QueuedJobDescriptor', _t('QueuedJobs.JobsFieldTitle', 'Jobs'), $list);
     $grid->setForm($form);
     $form->Fields()->replaceField('QueuedJobDescriptor', $grid);
     $grid->getConfig()->addComponent(new GridFieldQueuedJobExecute());
     $grid->getConfig()->addComponent(new GridFieldQueuedJobExecute('pause', function ($record) {
         return $record->JobStatus == QueuedJob::STATUS_WAIT || $record->JobStatus == QueuedJob::STATUS_RUN;
     }));
     $grid->getConfig()->addComponent(new GridFieldQueuedJobExecute('resume', function ($record) {
         return $record->JobStatus == QueuedJob::STATUS_PAUSED || $record->JobStatus == QueuedJob::STATUS_BROKEN;
     }));
     $grid->getConfig()->addComponent(new GridFieldDeleteAction());
     $formatting = array('Messages' => function ($val, $obj) {
         return "<div style='max-width: 300px; max-height: 200px; overflow: auto;'>{$obj->Messages}</div>";
     });
     $grid->getConfig()->getComponentByType('GridFieldDataColumns')->setFieldFormatting($formatting);
     return $form;
 }
 /**
  * @param array $data
  * @param Form $form
  * @return SS_HTTPResponse
  */
 public function createjob($data, Form $form)
 {
     if (Permission::check('ADMIN')) {
         $jobType = isset($data['JobType']) ? $data['JobType'] : '';
         $params = isset($data['JobParams']) ? $data['JobParams'] : array();
         $time = isset($data['JobStart']) ? $data['JobStart'] : null;
         $js = $form->Fields()->dataFieldByName('JobStart');
         $time = $js->Value();
         if ($jobType && class_exists($jobType)) {
             $jobClass = new ReflectionClass($jobType);
             $job = $jobClass->newInstanceArgs($params);
             $this->jobQueue->queueJob($job, $time);
         }
     }
     return $this->responseNegotiator->respond($this->getRequest());
 }
 /**
  * @param QueuedJobDescriptor $job
  */
 public function startJobOnQueue(QueuedJobDescriptor $job)
 {
     $this->queuedJobService->runJob($job->ID);
 }