/** * @depends testSetAndGetModel */ public function testGetActiveByModuleClassNameAndIsNewModel() { $savedWorkflow = new SavedWorkflow(); $savedWorkflow->name = 'some workflow'; $savedWorkflow->description = 'description'; $savedWorkflow->moduleClassName = 'WorkflowsTestModule'; $savedWorkflow->triggerOn = Workflow::TRIGGER_ON_EXISTING; $savedWorkflow->type = 'some type'; $savedWorkflow->order = 1; $savedWorkflow->serializedData = serialize(array('something')); $savedWorkflow->isActive = true; $saved = $savedWorkflow->save(); $this->assertTrue($saved); $this->assertEquals(2, SavedWorkflow::getCount()); $savedWorkflows = SavedWorkflow::getActiveByModuleClassNameAndIsNewModel('WorkflowsTestModule', true); $this->assertEquals(1, count($savedWorkflows)); $savedWorkflowId = $savedWorkflows[0]->id; $savedWorkflows = SavedWorkflow::getActiveByModuleClassNameAndIsNewModel('WorkflowsTestModule', false); $this->assertEquals(1, count($savedWorkflows)); $this->assertTrue($savedWorkflowId != $savedWorkflows[0]->id); }
/** * Given a RedBeanModel, query workflow rules and process any beforeSave triggers for either on-save or * by-time workflows. Called from @see WokflowsObserver->processWorkflowBeforeSave * @param Item $model * @param User $triggeredByUser * @throws NotSupportedException if the workflow type is not valid */ public static function resolveBeforeSaveByModel(Item $model, User $triggeredByUser) { $savedWorkflows = SavedWorkflow::getActiveByModuleClassNameAndIsNewModel($model::getModuleClassName(), $model->getIsNewModel()); foreach ($savedWorkflows as $savedWorkflow) { $workflow = SavedWorkflowToWorkflowAdapter::makeWorkflowBySavedWorkflow($savedWorkflow); if (WorkflowTriggersUtil::areTriggersTrueBeforeSave($workflow, $model)) { if ($workflow->getType() == Workflow::TYPE_BY_TIME) { $model->addWorkflowToProcessAfterSave($workflow); } elseif ($workflow->getType() == Workflow::TYPE_ON_SAVE) { WorkflowActionsUtil::processBeforeSave($workflow, $model, $triggeredByUser); $model->addWorkflowToProcessAfterSave($workflow); } else { throw new NotSupportedException(); } } } }