/** * Given a event, process any workflow rules * @param CEvent $event */ public function processWorkflowBeforeSave(CEvent $event) { $model = $event->sender; if ($model->shouldProcessWorkflowOnSave()) { try { $triggeredByUser = Yii::app()->user->userModel; Yii::app()->user->userModel = BaseControlUserConfigUtil::getUserToRunAs(); $model->setDoNotProcessWorkflowOnSave(); SavedWorkflowsUtil::resolveBeforeSaveByModel($model, $triggeredByUser); $model->setProcessWorkflowOnSave(); Yii::app()->user->userModel = $triggeredByUser; } catch (MissingASuperAdministratorException $e) { //skip running workflow, since no super administrators are available. } } }
/** * @depends testResolveBeforeSaveByModel */ public function testResolveBeforeSaveByModelForByTime() { //Create workflow $workflow = new Workflow(); $workflow->setDescription('aDescription'); $workflow->setIsActive(true); $workflow->setOrder(5); $workflow->setModuleClassName('WorkflowsTestModule'); $workflow->setName('myFirstWorkflow'); $workflow->setTriggerOn(Workflow::TRIGGER_ON_NEW_AND_EXISTING); $workflow->setType(Workflow::TYPE_BY_TIME); $workflow->setTriggersStructure('1'); $workflow->setIsActive(true); //Add time trigger $trigger = new TimeTriggerForWorkflowForm('WorkflowsTestModule', 'WorkflowModelTestItem', $workflow->getType()); $trigger->attributeIndexOrDerivedType = 'date'; $trigger->durationSeconds = '500'; $trigger->valueType = 'Is Time For'; $workflow->setTimeTrigger($trigger); //Create the saved Workflow $savedWorkflow = new SavedWorkflow(); SavedWorkflowToWorkflowAdapter::resolveWorkflowToSavedWorkflow($workflow, $savedWorkflow); $saved = $savedWorkflow->save(); $this->assertTrue($saved); //Confirm that the workflow processes and the attribute gets updated $model = new WorkflowModelTestItem(); $model->string = 'aValue'; $model->date = '2013-02-02'; $this->assertEquals(0, count($model->getWorkflowsToProcessAfterSave())); SavedWorkflowsUtil::resolveBeforeSaveByModel($model, Yii::app()->user->userModel); $this->assertEquals(1, count($model->getWorkflowsToProcessAfterSave())); $this->assertTrue($model->id < 0); }