コード例 #1
0
 /**
  * Given a RedBeanModel, process afterSave actions such as update related, create, and create related.
  * Also process any email messages.  If the workflow is by-time, then we should process the ByTimeWorkflowInQueue
  * model.
  * @param Item $model
  * @param User $triggeredByUser
  * @throws NotSupportedException
  */
 public static function resolveAfterSaveByModel(Item $model, User $triggeredByUser)
 {
     foreach ($model->getWorkflowsToProcessAfterSave() as $workflow) {
         if ($workflow->getType() == Workflow::TYPE_BY_TIME) {
             static::processToByTimeWorkflowInQueue($workflow, $model);
         } elseif ($workflow->getType() == Workflow::TYPE_ON_SAVE) {
             WorkflowActionsUtil::processAfterSave($workflow, $model, $triggeredByUser);
             WorkflowEmailMessagesUtil::processAfterSave($workflow, $model, $triggeredByUser);
         } else {
             throw new NotSupportedException();
         }
     }
 }
コード例 #2
0
 /**
  * @depends testProcessBeforeSave
  */
 public function testProcessAfterSave()
 {
     //Save everyone group
     $group = Group::getByName(Group::EVERYONE_GROUP_NAME);
     $this->assertTrue($group->save());
     //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_ON_SAVE);
     $workflow->setTriggersStructure('1');
     $workflow->setIsActive(true);
     //Add trigger
     $trigger = new TriggerForWorkflowForm('WorkflowsTestModule', 'WorkflowModelTestItem', $workflow->getType());
     $trigger->attributeIndexOrDerivedType = 'string';
     $trigger->value = 'aValue';
     $trigger->operator = 'equals';
     $workflow->addTrigger($trigger);
     //Add action
     $action = new ActionForWorkflowForm('WorkflowModelTestItem', Workflow::TYPE_ON_SAVE);
     $action->type = ActionForWorkflowForm::TYPE_CREATE;
     $action->relation = 'hasOne';
     $attributes = array('name' => array('shouldSetValue' => '1', 'type' => WorkflowActionAttributeForm::TYPE_STATIC, 'value' => 'jason'), 'permissions' => array('shouldSetValue' => '1', 'type' => ExplicitReadWriteModelPermissionsWorkflowActionAttributeForm::TYPE_DYNAMIC_EVERYONE_GROUP));
     $action->setAttributes(array(ActionForWorkflowForm::ACTION_ATTRIBUTES => $attributes));
     $workflow->addAction($action);
     //Create the saved Workflow
     $savedWorkflow = new SavedWorkflow();
     SavedWorkflowToWorkflowAdapter::resolveWorkflowToSavedWorkflow($workflow, $savedWorkflow);
     $saved = $savedWorkflow->save();
     $this->assertTrue($saved);
     $model = new WorkflowModelTestItem();
     $model->string = 'aValue';
     $saved = $savedWorkflow->save();
     $this->assertTrue($saved);
     $this->assertEquals(0, WorkflowModelTestItem2::getCount());
     WorkflowActionsUtil::processAfterSave($workflow, $model, Yii::app()->user->userModel);
     $workflowModelTestItem2s = WorkflowModelTestItem2::getAll();
     $this->assertEquals(1, count($workflowModelTestItem2s));
     //Confirm permissions are on the everyone group
     $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($workflowModelTestItem2s[0]);
     $this->assertEquals(1, $explicitReadWriteModelPermissions->getReadWritePermitablesCount());
     $readWritePermitables = $explicitReadWriteModelPermissions->getReadWritePermitables();
     $everyoneGroup = Group::getByName(Group::EVERYONE_GROUP_NAME);
     $this->assertTrue(isset($readWritePermitables[$everyoneGroup->getClassId('Permitable')]));
 }