/** * @see BaseJob::run() */ public function run() { try { $originalUser = Yii::app()->user->userModel; Yii::app()->user->userModel = BaseControlUserConfigUtil::getUserToRunAs(); $processedModelsCount = 0; $batchSize = $this->resolveBatchSize(); if ($batchSize != null) { $resolvedBatchSize = $batchSize + 1; } else { $resolvedBatchSize = null; } foreach (WorkflowMessageInQueue::getModelsToProcess($resolvedBatchSize) as $workflowMessageInQueue) { if ($processedModelsCount < $batchSize || $batchSize == null) { try { $model = $this->resolveModel($workflowMessageInQueue); $this->resolveSavedWorkflowIsValid($workflowMessageInQueue); $this->processWorkflowMessageInQueue($workflowMessageInQueue, $model); } catch (NotFoundException $e) { } $workflowMessageInQueue->delete(); $processedModelsCount++; } else { Yii::app()->jobQueue->add('WorkflowMessageInQueue', 5); break; } } Yii::app()->user->userModel = $originalUser; return true; } catch (MissingASuperAdministratorException $e) { //skip running workflow, since no super administrators are available. $this->errorMessage = Zurmo::t('WorkflowsModule', 'Could not process since no super administrators were found'); return false; } }
/** * @see BaseJob::run() */ public function run() { try { $originalUser = Yii::app()->user->userModel; Yii::app()->user->userModel = BaseJobControlUserConfigUtil::getUserToRunAs(); foreach (WorkflowMessageInQueue::getModelsToProcess(self::$pageSize) as $workflowMessageInQueue) { try { $model = $this->resolveModel($workflowMessageInQueue); $this->resolveSavedWorkflowIsValid($workflowMessageInQueue); $this->processWorkflowMessageInQueue($workflowMessageInQueue, $model); } catch (NotFoundException $e) { } $workflowMessageInQueue->delete(); } Yii::app()->user->userModel = $originalUser; return true; } catch (MissingASuperAdministratorException $e) { //skip running workflow, since no super administrators are available. $this->errorMessage = Zurmo::t('WorkflowsModule', 'Could not process since no super administrators were found'); return false; } }
/** * @depends testSetAndGet */ public function testGetModelsToProcess($pageSize) { $this->assertEquals(1, WorkflowMessageInQueue::getCount()); $models = WorkflowMessageInQueue::getModelsToProcess(10); $this->assertEquals(1, count($models)); //Now have one that is not ready for processing. It should still only get 1 $model = new WorkflowModelTestItem(); $model->lastName = 'Green2'; $model->string = 'string2'; $saved = $model->save(); $this->assertTrue($saved); $savedWorkflows = SavedWorkflow::getByName('some workflow'); $workflowMessageInQueue = new WorkflowMessageInQueue(); $workflowMessageInQueue->modelClassName = get_class($model); $workflowMessageInQueue->modelItem = $model; $workflowMessageInQueue->processDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time() + 86400); $workflowMessageInQueue->savedWorkflow = $savedWorkflows[0]; $workflowMessageInQueue->serializedData = serialize(array('something')); $saved = $workflowMessageInQueue->save(); $this->assertTrue($saved); $models = WorkflowMessageInQueue::getModelsToProcess(10); $this->assertEquals(1, count($models)); }