public function testSetAndGetModel() { $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); $savedWorkflowId = $savedWorkflow->id; $savedWorkflow->forget(); $savedWorkflow = SavedWorkflow::getById($savedWorkflowId); $this->assertEquals('some workflow', $savedWorkflow->name); $this->assertEquals('description', $savedWorkflow->description); $this->assertEquals('WorkflowsTestModule', $savedWorkflow->moduleClassName); $this->assertEquals(Workflow::TRIGGER_ON_NEW, $savedWorkflow->triggerOn); $this->assertEquals('some type', $savedWorkflow->type); $this->assertEquals(serialize(array('something')), $savedWorkflow->serializedData); }
/** * @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 testEditAction */ public function testManageOrder() { //Create a second workflow $savedWorkflow = new SavedWorkflow(); $savedWorkflow->name = 'some workflow2'; $savedWorkflow->description = 'description2'; $savedWorkflow->moduleClassName = 'WorkflowsTestModule'; $savedWorkflow->triggerOn = Workflow::TRIGGER_ON_NEW; $savedWorkflow->type = Workflow::TYPE_ON_SAVE; $savedWorkflow->serializedData = serialize(array(ComponentForWorkflowForm::TYPE_TRIGGERS => array(), ComponentForWorkflowForm::TYPE_ACTIONS => array(), ComponentForWorkflowForm::TYPE_EMAIL_MESSAGES => array())); $savedWorkflow->isActive = true; $savedWorkflow->order = 2; $saved = $savedWorkflow->save(); $this->assertTrue($saved); //Go to manage order $this->resetGetArray(); $this->resetPostArray(); $this->runControllerWithNoExceptionsAndGetContent('workflows/default/manageOrder'); //loadOrderByModule - where none exist $this->setGetArray(array('moduleClassName' => 'OpportunitiesModule')); $content = $this->runControllerWithExitExceptionAndGetContent('workflows/default/loadOrderByModule'); $this->assertEquals('{"dataToOrder":"false"}', $content); //load orderByModule - where at least one exists $this->setGetArray(array('moduleClassName' => 'WorkflowsTestModule')); $content = $this->runControllerWithNoExceptionsAndGetContent('workflows/default/loadOrderByModule'); $this->assertNotEquals('{"dataToOrder":"false"}', $content); //saveOrder, switching order $savedWorkflows = SavedWorkflow::getAll('order'); $this->assertEquals(2, count($savedWorkflows)); $firstOrder = $savedWorkflows[0]->order; $secondOrder = $savedWorkflows[1]->order; $this->resetGetArray(); $this->setPostArray(array('SavedWorkflow' => array('moduleClassName' => 'WorkflowsTestModule', 'savedWorkflowIds' => array($savedWorkflows[1]->id, $savedWorkflows[0]->id)))); $content = $this->runControllerWithExitExceptionAndGetContent('workflows/default/saveOrder'); $this->assertEquals('{"message":"Order saved successfully.","type":"message"}', $content); // Not Coding Standard $this->assertEquals($firstOrder, SavedWorkflow::getById($savedWorkflows[1]->id)->order); $this->assertEquals($secondOrder, SavedWorkflow::getById($savedWorkflows[0]->id)->order); }
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 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 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'); } }