public function setUp() { parent::setUp(); $this->super = $this->logoutCurrentUserLoginNewUserAndGetByUsername('super'); $savedWorkflows = SavedWorkflow::getAll(); $this->savedWorkflow = $savedWorkflows[0]; $models = WorkflowModelTestItem::getAll(); $this->model = $models[0]; }
public static function createByTimeSavedWorkflow(array $timeTrigger = array(), array $triggers = array(), array $actions = array(), array $messages = array()) { $savedWorkflow = new SavedWorkflow(); $savedWorkflow->name = 'some workflow'; $savedWorkflow->description = 'description'; $savedWorkflow->moduleClassName = 'WorkflowsTestModule'; $savedWorkflow->triggerOn = Workflow::TRIGGER_ON_NEW; $savedWorkflow->type = Workflow::TYPE_BY_TIME; $data[ComponentForWorkflowForm::TYPE_TIME_TRIGGER] = $timeTrigger; $data[ComponentForWorkflowForm::TYPE_TRIGGERS] = $triggers; $data[ComponentForWorkflowForm::TYPE_ACTIONS] = $actions; $data[ComponentForWorkflowForm::TYPE_EMAIL_MESSAGES] = $messages; $savedWorkflow->serializedData = serialize($data); $savedWorkflow->isActive = true; $saved = $savedWorkflow->save(); assert($saved); // Not Coding Standard return $savedWorkflow; }
public static function setUpBeforeClass() { parent::setUpBeforeClass(); ContactsModule::loadStartingData(); $super = User::getByUsername('super'); $super->primaryEmail = new Email(); $super->primaryEmail->emailAddress = '*****@*****.**'; assert($super->save()); // Not Coding Standard $savedWorkflow = new SavedWorkflow(); $savedWorkflow->name = 'some workflow'; $savedWorkflow->description = 'description'; $savedWorkflow->moduleClassName = 'moduleClassName'; $savedWorkflow->triggerOn = Workflow::TRIGGER_ON_NEW; $savedWorkflow->type = 'some type'; $savedWorkflow->serializedData = serialize(array('something')); $saved = $savedWorkflow->save(); assert($saved); // Not Coding Standard self::$savedWorkflow = $savedWorkflow; }
public static function setUpBeforeClass() { parent::setUpBeforeClass(); $savedWorkflow = new SavedWorkflow(); $savedWorkflow->name = 'some workflow'; $savedWorkflow->description = 'description'; $savedWorkflow->moduleClassName = 'moduleClassName'; $savedWorkflow->triggerOn = Workflow::TRIGGER_ON_NEW; $savedWorkflow->type = 'some type'; $savedWorkflow->serializedData = serialize(array('something')); $saved = $savedWorkflow->save(); if (!$saved) { throw new FailedToSaveModelException(); } self::$savedWorkflow = $savedWorkflow; $model = new WorkflowModelTestItem(); $model->lastName = 'Green'; $model->string = 'string'; $saved = $model->save(); if (!$saved) { throw new FailedToSaveModelException(); } self::$testModel = $model; }
protected function clearNotificationsWorkflowsAndEmailMessages() { $notifications = Notification::getAll(); foreach ($notifications as $notification) { $notification->delete(); } $emailMessages = EmailMessage::getAll(); foreach ($emailMessages as $emailMessage) { $emailMessage->delete(); } $workflows = SavedWorkflow::getAll(); foreach ($workflows as $workflow) { $workflow->delete(); } }
/** * 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(); } } }
/** * @depends testMessageQueueController */ public function testCopyingWorkflow() { $savedWorkflows = SavedWorkflow::getAll(); $this->assertEquals(1, count($savedWorkflows)); $this->setGetArray(array('type' => 'OnSave', 'id' => $savedWorkflows[0]->id)); $data = array(); $data['OnSaveWorkflowWizardForm'] = array('description' => 'someDescription', 'isActive' => '0', 'name' => 'someName', 'triggerOn' => Workflow::TRIGGER_ON_NEW, 'triggersStructure' => '1 AND 2', 'moduleClassName' => 'WorkflowsTestModule'); $this->setPostArray($data); $this->runControllerWithExitExceptionAndGetContent('workflows/default/save'); $savedWorkflows = SavedWorkflow::getAll(); $this->assertEquals(1, count($savedWorkflows)); //Now test copying $this->setGetArray(array('type' => 'OnSave', 'id' => $savedWorkflows[0]->id, 'isBeingCopied' => true)); $this->runControllerWithExitExceptionAndGetContent('workflows/default/save'); $savedWorkflows = SavedWorkflow::getAll(); $this->assertEquals(2, count($savedWorkflows)); }
protected function resolveSavedWorkflowAndWorkflowByPostData(array $postData, &$savedWorkflow, &$workflow, $type, $id = null, $isBeingCopied = false) { if ($id == null) { $this->resolveCanCurrentUserAccessWorkflows(); $savedWorkflow = new SavedWorkflow(); $workflow = new Workflow(); $workflow->setType($type); } elseif ($isBeingCopied) { $savedWorkflow = new SavedWorkflow(); $oldWorkflow = SavedWorkflow::getById(intval($id)); ControllerSecurityUtil::resolveAccessCanCurrentUserReadModel($oldWorkflow); ZurmoCopyModelUtil::copy($oldWorkflow, $savedWorkflow); $workflow = SavedWorkflowToWorkflowAdapter::makeWorkflowBySavedWorkflow($savedWorkflow); } else { $savedWorkflow = SavedWorkflow::getById(intval($id)); ControllerSecurityUtil::resolveAccessCanCurrentUserWriteModel($savedWorkflow); $workflow = SavedWorkflowToWorkflowAdapter::makeWorkflowBySavedWorkflow($savedWorkflow); } DataToWorkflowUtil::resolveWorkflowByWizardPostData($workflow, $postData, WorkflowToWizardFormAdapter::getFormClassNameByType($type)); }
/** * @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)); }
/** * Check if picklist modification caused some issues with workflow triggers and if yes notify users * @return array * @throws NotSupportedException */ public static function getWorkflowsWithInvalidTriggerCustomFieldValue() { $savedWorkflows = SavedWorkflow::getAll(); $workflows = array(); foreach ($savedWorkflows as $savedWorkflow) { $workflow = SavedWorkflowToWorkflowAdapter::makeWorkflowBySavedWorkflow($savedWorkflow); $hasInvalidCustomFieldValue = false; foreach ($workflow->getTriggers() as $trigger) { $modelClassName = $trigger->getModelClassName(); $customFieldAttributeNames = CustomFieldUtil::getCustomFieldAttributeNames($modelClassName); $triggerAttributeName = $trigger->getAttribute(); if (in_array($triggerAttributeName, $customFieldAttributeNames)) { $customFieldData = CustomFieldDataModelUtil::getDataByModelClassNameAndAttributeName($modelClassName, $triggerAttributeName); $allCustomFieldValues = unserialize($customFieldData->serializedData); // Check with triggers that allow single value if (in_array($trigger->getOperator(), array(OperatorRules::TYPE_EQUALS, OperatorRules::TYPE_DOES_NOT_EQUAL, OperatorRules::TYPE_BECOMES, OperatorRules::TYPE_WAS))) { if (!in_array($trigger->value, $allCustomFieldValues)) { $hasInvalidCustomFieldValue = true; break; } } elseif (in_array($trigger->getOperator(), array(OperatorRules::TYPE_BECOMES_ONE_OF, OperatorRules::TYPE_WAS_ONE_OF, OperatorRules::TYPE_ONE_OF))) { $triggerSelectedCustomFieldValues = MultiSelectDropDownSanitizerUtil::getCustomFieldValuesFromValueString($trigger->value); foreach ($triggerSelectedCustomFieldValues as $triggerValue) { if (!in_array($triggerValue, $allCustomFieldValues)) { $hasInvalidCustomFieldValue = true; break 2; } } } } } if ($hasInvalidCustomFieldValue) { $workflows[] = $workflow; } } return $workflows; }
/** * @param Workflow $workflow * @param RedBeanModel $model * @throws FailedToSaveModelException */ protected static function processToByTimeWorkflowInQueue(Workflow $workflow, RedBeanModel $model) { assert('$workflow->getId() > 0'); try { $byTimeWorkflowInQueue = ByTimeWorkflowInQueue::resolveByWorkflowIdAndModel(SavedWorkflow::getById((int) $workflow->getId()), $model); $byTimeWorkflowInQueue->processDateTime = static::resolveProcessDateTimeByWorkflowAndModel($workflow, $model); $saved = $byTimeWorkflowInQueue->save(); if (!$saved) { throw new FailedToSaveModelException(); } } catch (ValueForProcessDateTimeIsNullException $e) { //For now just log this exception. If this exception is thrown it means a date or dateTime //somehow was set to empty, so we can't properly process this. WorkflowUtil::handleProcessingException($e, 'application.modules.workflows.utils.SavedWorkflowsUtil.processToByTimeWorkflowInQueue'); } }
/** * Test sending an email that should go out as a processing that this job would typically do. * Also tests that item does not get trashed when deleting the WorkflowMessageInQueue. * Also tests that if there is more than one emailmessage against the workflow, that it does not send * to all of them * @depends testWorkflowMessageInQueueProperlySavesWithoutTrashingRelatedModelItem */ public function testRun() { Yii::app()->user->userModel = User::getByUsername('super'); $emailTemplate = new EmailTemplate(); $emailTemplate->builtType = EmailTemplate::BUILT_TYPE_PASTED_HTML; $emailTemplate->name = 'the name'; $emailTemplate->modelClassName = 'Account'; $emailTemplate->type = 2; $emailTemplate->subject = 'subject'; $emailTemplate->textContent = 'sample text content'; $saved = $emailTemplate->save(); $this->assertTrue($saved); $this->assertEquals(0, Yii::app()->emailHelper->getQueuedCount()); $model = ContactTestHelper::createContactByNameForOwner('Jason', Yii::app()->user->userModel); $model->primaryEmail->emailAddress = '*****@*****.**'; $saved = $model->save(); $this->assertTrue($saved); $modelId = $model->id; $model->forget(); $model = Contact::getById($modelId); $trigger = array('attributeIndexOrDerivedType' => 'firstName', 'operator' => OperatorRules::TYPE_EQUALS, 'durationInterval' => '333'); $actions = array(array('type' => ActionForWorkflowForm::TYPE_UPDATE_SELF, ActionForWorkflowForm::ACTION_ATTRIBUTES => array('description' => array('shouldSetValue' => '1', 'type' => WorkflowActionAttributeForm::TYPE_STATIC, 'value' => 'some new description')))); $emailMessages = array(); $emailMessages[0]['emailTemplateId'] = $emailTemplate->id; $emailMessages[0]['sendFromType'] = EmailMessageForWorkflowForm::SEND_FROM_TYPE_DEFAULT; $emailMessages[0]['sendAfterDurationSeconds'] = '0'; $emailMessages[0][EmailMessageForWorkflowForm::EMAIL_MESSAGE_RECIPIENTS] = array(array('type' => WorkflowEmailMessageRecipientForm::TYPE_DYNAMIC_TRIGGERED_MODEL, 'audienceType' => EmailMessageRecipient::TYPE_TO)); $emailMessages[1]['emailTemplateId'] = $emailTemplate->id; $emailMessages[1]['sendFromType'] = EmailMessageForWorkflowForm::SEND_FROM_TYPE_DEFAULT; $emailMessages[1]['sendAfterDurationSeconds'] = '10000'; $emailMessages[1][EmailMessageForWorkflowForm::EMAIL_MESSAGE_RECIPIENTS] = array(array('type' => WorkflowEmailMessageRecipientForm::TYPE_DYNAMIC_TRIGGERED_MODEL, 'audienceType' => EmailMessageRecipient::TYPE_TO)); $savedWorkflow = new SavedWorkflow(); $savedWorkflow->name = 'some workflow'; $savedWorkflow->description = 'description'; $savedWorkflow->moduleClassName = 'ContactsModule'; $savedWorkflow->triggerOn = Workflow::TRIGGER_ON_NEW_AND_EXISTING; $savedWorkflow->type = Workflow::TYPE_ON_SAVE; $data[ComponentForWorkflowForm::TYPE_TRIGGERS] = array($trigger); $data[ComponentForWorkflowForm::TYPE_ACTIONS] = $actions; $data[ComponentForWorkflowForm::TYPE_EMAIL_MESSAGES] = $emailMessages; $savedWorkflow->serializedData = serialize($data); $savedWorkflow->isActive = true; $saved = $savedWorkflow->save(); $this->assertTrue($saved); WorkflowTestHelper::createExpiredWorkflowMessageInQueue($model, $savedWorkflow, serialize(array($emailMessages[1]))); RedBeanModelsCache::forgetAll(true); //simulates page change, required to confirm Item does not get trashed $this->assertEquals(1, WorkflowMessageInQueue::getCount()); $job = new WorkflowMessageInQueueJob(); $this->assertTrue($job->run()); $this->assertEquals(0, WorkflowMessageInQueue::getCount()); RedBeanModelsCache::forgetAll(true); //simulates page change, required to confirm Item does not get trashed $this->assertEquals(1, Yii::app()->emailHelper->getQueuedCount()); }
public function testMakeEmailMessageForWorkflowFormByQueueModelAndWorkflow() { $model = ContactTestHelper::createContactByNameForOwner('Jason', Yii::app()->user->userModel); $savedWorkflow = new SavedWorkflow(); $savedWorkflow->name = 'some workflow'; $savedWorkflow->description = 'description'; $savedWorkflow->moduleClassName = 'WorkflowsTestModule'; $savedWorkflow->triggerOn = Workflow::TRIGGER_ON_NEW; $savedWorkflow->type = 'some type'; $savedWorkflow->order = 1; $savedWorkflow->serializedData = serialize(array('something')); $savedWorkflow->isActive = true; $saved = $savedWorkflow->save(); $this->assertTrue($saved); $emailMessage = null; $emailMessage['emailTemplateId'] = 5; $emailMessage['sendFromType'] = EmailMessageForWorkflowForm::SEND_FROM_TYPE_DEFAULT; $emailMessage['sendAfterDurationType'] = TimeDurationUtil::DURATION_TYPE_DAY; $emailMessage['sendAfterDurationInterval'] = '44'; $emailMessage[EmailMessageForWorkflowForm::EMAIL_MESSAGE_RECIPIENTS] = array(array('type' => WorkflowEmailMessageRecipientForm::TYPE_DYNAMIC_TRIGGERED_MODEL, 'audienceType' => EmailMessageRecipient::TYPE_TO)); $workflowMessageInQueue = WorkflowTestHelper::createExpiredWorkflowMessageInQueue($model, $savedWorkflow, serialize(array($emailMessage))); $workflow = new Workflow(); $workflow->setModuleClassName('WorkflowsTestModule'); $workflow->setType(Workflow::TYPE_ON_SAVE); $emailMessageForWorkflowForm = WorkflowEmailMessagesUtil::makeEmailMessageForWorkflowFormByQueueModelAndWorkflow($workflowMessageInQueue, $workflow); $this->assertEquals(5, $emailMessageForWorkflowForm->emailTemplateId); $this->assertEquals(EmailMessageForWorkflowForm::SEND_FROM_TYPE_DEFAULT, $emailMessageForWorkflowForm->sendFromType); $this->assertEquals(TimeDurationUtil::DURATION_TYPE_DAY, $emailMessageForWorkflowForm->sendAfterDurationType); $this->assertEquals(44, $emailMessageForWorkflowForm->sendAfterDurationInterval); $this->assertEquals(1, count($emailMessageForWorkflowForm->getEmailMessageRecipients())); }
/** * @depends testResolveWorkflowToSavedWorkflow */ public function testMakeWorkflowBySavedWorkflow() { $savedWorkflows = SavedWorkflow::getAll(); $this->assertEquals(1, count($savedWorkflows)); $savedWorkflow = $savedWorkflows[0]; $workflow = SavedWorkflowToWorkflowAdapter::makeWorkflowBySavedWorkflow($savedWorkflow); $triggers = $workflow->getTriggers(); $this->assertEquals('WorkflowsTestModule', $workflow->getModuleClassName()); $this->assertEquals('myFirstWorkflow', $workflow->getName()); $this->assertEquals('aDescription', $workflow->getDescription()); $this->assertTrue($workflow->getIsActive()); $this->assertEquals(5, $workflow->getOrder()); $this->assertEquals(Workflow::TRIGGER_ON_NEW, $workflow->getTriggerOn()); $this->assertEquals(Workflow::TYPE_ON_SAVE, $workflow->getType()); $this->assertEquals('1 and 2 or 3 or 4', $workflow->getTriggersStructure()); $this->assertCount(4, $triggers); }
/** * @depends testGetActiveByModuleClassNameAndIsNewModel */ public function testGetAllByModuleClassName() { $savedWorkflows = SavedWorkflow::getAllByModuleClassName('WorkflowsTestModule'); $this->assertEquals(2, count($savedWorkflows)); }
/** * @depends testResolveProcessDateTimeByWorkflowAndModelWithPseudoNullDateTime */ public function testResolveOrder() { $this->assertCount(0, SavedWorkflow::getAll()); $savedWorkflow = new SavedWorkflow(); $savedWorkflow->name = 'the name'; $savedWorkflow->moduleClassName = 'AccountsModule'; $savedWorkflow->serializedData = serialize(array('some data')); $savedWorkflow->triggerOn = Workflow::TRIGGER_ON_NEW; $savedWorkflow->type = Workflow::TYPE_ON_SAVE; $this->assertNull($savedWorkflow->order); SavedWorkflowsUtil::resolveOrder($savedWorkflow); $this->assertEquals(1, $savedWorkflow->order); $saved = $savedWorkflow->save(); $this->assertTrue($saved); $savedWorkflowId1 = $savedWorkflow->id; $savedWorkflow = new SavedWorkflow(); $savedWorkflow->name = 'the name 2'; $savedWorkflow->moduleClassName = 'AccountsModule'; $savedWorkflow->serializedData = serialize(array('some data 2')); $savedWorkflow->triggerOn = Workflow::TRIGGER_ON_NEW; $savedWorkflow->type = Workflow::TYPE_ON_SAVE; $this->assertNull($savedWorkflow->order); SavedWorkflowsUtil::resolveOrder($savedWorkflow); $this->assertEquals(2, $savedWorkflow->order); $saved = $savedWorkflow->save(); $this->assertTrue($saved); $savedWorkflowId2 = $savedWorkflow->id; $savedWorkflow = new SavedWorkflow(); $savedWorkflow->name = 'the name 3'; $savedWorkflow->moduleClassName = 'AccountsModule'; $savedWorkflow->serializedData = serialize(array('some data 2')); $savedWorkflow->triggerOn = Workflow::TRIGGER_ON_NEW; $savedWorkflow->type = Workflow::TYPE_ON_SAVE; $this->assertNull($savedWorkflow->order); SavedWorkflowsUtil::resolveOrder($savedWorkflow); $this->assertEquals(3, $savedWorkflow->order); $saved = $savedWorkflow->save(); $this->assertTrue($saved); $savedWorkflowId3 = $savedWorkflow->id; $savedWorkflow = new SavedWorkflow(); $savedWorkflow->name = 'the name 4'; $savedWorkflow->moduleClassName = 'ContactsModule'; $savedWorkflow->serializedData = serialize(array('some data')); $savedWorkflow->triggerOn = Workflow::TRIGGER_ON_NEW; $savedWorkflow->type = Workflow::TYPE_ON_SAVE; $this->assertNull($savedWorkflow->order); SavedWorkflowsUtil::resolveOrder($savedWorkflow); $this->assertEquals(1, $savedWorkflow->order); $saved = $savedWorkflow->save(); $this->assertTrue($saved); $savedWorkflowId4 = $savedWorkflow->id; $savedWorkflow = SavedWorkflow::getById($savedWorkflowId2); $this->assertEquals(2, $savedWorkflow->order); SavedWorkflowsUtil::resolveOrder($savedWorkflow); $this->assertEquals(2, $savedWorkflow->order); //Change the moduleClassName to opportunities, it should show 1 $savedWorkflow->moduleClassName = 'OpportunitiesModule'; SavedWorkflowsUtil::resolveOrder($savedWorkflow); $this->assertEquals(1, $savedWorkflow->order); //Delete the workflow. When creating a new AccountsWorkflow, it should show order 4 since the max //is still 3. $deleted = $savedWorkflow->delete(); $this->assertTrue($deleted); $savedWorkflow = new SavedWorkflow(); $savedWorkflow->name = 'the name 5'; $savedWorkflow->moduleClassName = 'AccountsModule'; $savedWorkflow->serializedData = serialize(array('some data 2')); $savedWorkflow->triggerOn = Workflow::TRIGGER_ON_NEW; $savedWorkflow->type = Workflow::TYPE_ON_SAVE; $this->assertNull($savedWorkflow->order); SavedWorkflowsUtil::resolveOrder($savedWorkflow); $this->assertEquals(4, $savedWorkflow->order); $saved = $savedWorkflow->save(); $this->assertTrue($saved); //Try to resolve order for the same SavedWorkflowsUtil::resolveOrder($savedWorkflow); $this->assertEquals(4, $savedWorkflow->order); //Resolve order when copying. It should increase SavedWorkflowsUtil::resolveOrder($savedWorkflow, true); $this->assertEquals(5, $savedWorkflow->order); }
/** * @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(); } } }
public static function getWorkflowsMissingRequiredActionAttributes() { $savedWorkflows = SavedWorkflow::getAll(); $workflows = array(); foreach ($savedWorkflows as $savedWorkflow) { $workflow = SavedWorkflowToWorkflowAdapter::makeWorkflowBySavedWorkflow($savedWorkflow); $missingRequired = false; foreach ($workflow->getActions() as $action) { if ($action->isModelActionVariant() && !$action->isTypeAnUpdateVariant() && $action->isMissingRequiredActionAttributes()) { $missingRequired = true; break; } } if ($missingRequired) { $workflows[] = $workflow; } } return $workflows; }