/** * @param Workflow $workflow * @param EmailMessageForWorkflowForm $emailMessage * @param RedBeanModel $model * @param User $triggeredByUser * @throws FailedToSaveModelException */ protected static function processEmailMessageAfterSave(Workflow $workflow, EmailMessageForWorkflowForm $emailMessage, RedBeanModel $model, User $triggeredByUser) { if ($emailMessage->sendAfterDurationInterval == 0) { $helper = new WorkflowEmailMessageProcessingHelper($emailMessage, $model, $triggeredByUser); $helper->process(); } else { $emailMessageData = SavedWorkflowToWorkflowAdapter::makeArrayFromEmailMessageForWorkflowFormAttributesData(array($emailMessage)); $workflowMessageInQueue = new WorkflowMessageInQueue(); $workflowMessageInQueue->processDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime($emailMessage->resolveNewTimeStampForDuration(time())); $workflowMessageInQueue->savedWorkflow = SavedWorkflow::getById((int) $workflow->getId()); $workflowMessageInQueue->modelClassName = get_class($model); $workflowMessageInQueue->modelItem = $model; $workflowMessageInQueue->serializedData = serialize($emailMessageData); $workflowMessageInQueue->triggeredByUser = $triggeredByUser; $saved = $workflowMessageInQueue->save(); if (!$saved) { throw new FailedToSaveModelException(); } } }
/** * @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)); }
/** * Special method to load ByTimeWorkflowInQueue models */ public function actionLoadWorkflowMessageInQueue() { if (!Group::isUserASuperAdministrator(Yii::app()->user->userModel)) { throw new NotSupportedException(); } $model = new Account(); $model->name = 'test account'; $saved = $model->save(); if (!$saved) { throw new NotSupportedException(); } $savedWorkflow = new SavedWorkflow(); $savedWorkflow->name = 'Test for demo Message Queue model'; $savedWorkflow->description = 'description'; $savedWorkflow->moduleClassName = 'AccountsModule'; $savedWorkflow->triggerOn = Workflow::TRIGGER_ON_NEW; $savedWorkflow->type = Workflow::TYPE_BY_TIME; $savedWorkflow->isActive = false; $savedWorkflow->order = 1; $savedWorkflow->serializedData = serialize(array(ComponentForWorkflowForm::TYPE_TRIGGERS => array(), ComponentForWorkflowForm::TYPE_ACTIONS => array(), ComponentForWorkflowForm::TYPE_EMAIL_MESSAGES => array())); $saved = $savedWorkflow->save(); if (!$saved) { throw new NotSupportedException(); } for ($i = 1; $i < 6; $i++) { $workflowMessageInQueue = new WorkflowMessageInQueue(); $workflowMessageInQueue->processDateTime = '2014-03-0' . $i . ' 00:00:00'; $workflowMessageInQueue->savedWorkflow = $savedWorkflow; $workflowMessageInQueue->modelClassName = get_class($model); $workflowMessageInQueue->modelItem = $model; $workflowMessageInQueue->serializedData = serialize(array()); $workflowMessageInQueue->triggeredByUser = Yii::app()->user->userModel; $saved = $workflowMessageInQueue->save(); if (!$saved) { throw new NotSupportedException(); } } }
public static function createExpiredWorkflowMessageInQueue(RedBeanModel $model, SavedWorkflow $savedWorkflow, $serializedData = array()) { if (empty($serializedData)) { $serializedData = serialize(array('something')); } $workflowMessageInQueue = new WorkflowMessageInQueue(); $workflowMessageInQueue->modelClassName = get_class($model); $workflowMessageInQueue->modelItem = $model; $workflowMessageInQueue->processDateTime = '2007-02-02 00:00:00'; $workflowMessageInQueue->savedWorkflow = $savedWorkflow; $workflowMessageInQueue->triggeredByUser = Yii::app()->user->userModel; $workflowMessageInQueue->serializedData = $serializedData; $saved = $workflowMessageInQueue->save(); assert($saved); // Not Coding Standard return $workflowMessageInQueue; }