protected function resolveMetadataBeforeMakingDataProvider(&$metadata)
 {
     $metadata = SavedWorkflowsUtil::resolveSearchAttributeDataByModuleClassNames($metadata, Workflow::getWorkflowSupportedModulesClassNamesCurrentUserHasAccessTo());
 }
 /**
  * Given a event, process any workflow rules
  * @param CEvent $event
  */
 public function processWorkflowAfterSave(CEvent $event)
 {
     $model = $event->sender;
     if ($this->depth < 11 && $model->shouldProcessWorkflowOnSave()) {
         try {
             $this->depth = $this->depth + 1;
             $triggeredByUser = Yii::app()->user->userModel;
             Yii::app()->user->userModel = BaseControlUserConfigUtil::getUserToRunAs();
             $model->setDoNotProcessWorkflowOnSave();
             SavedWorkflowsUtil::resolveAfterSaveByModel($model, $triggeredByUser);
             $model->setProcessWorkflowOnSave();
             Yii::app()->user->userModel = $triggeredByUser;
         } catch (MissingASuperAdministratorException $e) {
             //skip running workflow, since no super administrators are available.
         }
         $this->depth = $this->depth - 1;
     } elseif ($this->depth > 10) {
         $message = new NotificationMessage();
         $message->htmlContent = Zurmo::t('WorkflowsModule', 'The combination of workflow rules setup caused ' . 'an infinite loop and processing was stopped prematurely while saving the ' . 'following record: {modelName}', array('{modelName}' => strval($model)));
         $url = Yii::app()->createAbsoluteUrl('workflows/default/list');
         $message->htmlContent .= "<br/>" . ZurmoHtml::link(Zurmo::t('WorkflowsModule', 'Manage Workflows'), $url);
         $rules = new WorkflowMaximumDepthNotificationRules();
         NotificationsUtil::submit($message, $rules);
     }
 }
 /**
  * @depends testResolveAfterSaveByModel
  */
 public function testResolveAfterSaveByModelForByTime()
 {
     //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);
     $workflow->setId($savedWorkflow->id);
     //set Id back.
     $model = new WorkflowModelTestItem();
     $model->lastName = 'something';
     $model->string = 'aValue';
     $model->date = '2013-03-03';
     $saved = $model->save();
     $this->assertTrue($saved);
     $model->addWorkflowToProcessAfterSave($workflow);
     $this->assertEquals(0, count(ByTimeWorkflowInQueue::getAll()));
     SavedWorkflowsUtil::resolveAfterSaveByModel($model, Yii::app()->user->userModel);
     $this->assertEquals(1, count(ByTimeWorkflowInQueue::getAll()));
 }