/**
  * @see BaseJob::run()
  */
 public function run()
 {
     $workflows = WorkflowActionsUtil::getWorkflowsMissingRequiredActionAttributes();
     if (count($workflows) > 0) {
         $message = new NotificationMessage();
         $message->htmlContent = Zurmo::t('WorkflowsModule', 'As a result of a field or fields recently ' . 'becoming required, at least 1 workflow rule will no longer work properly.');
         $message->htmlContent .= "<div><ul>";
         foreach ($workflows as $workflow) {
             $message->htmlContent .= "<li>";
             $url = Yii::app()->createUrl('workflows/default/details', array('id' => $workflow->getId()));
             $message->htmlContent .= ZurmoHtml::link(strval($workflow), $url);
             $message->htmlContent .= "</li>";
         }
         $message->htmlContent .= "</ul></div>";
         $rules = new WorkflowValidityCheckNotificationRules();
         NotificationsUtil::submit($message, $rules);
     }
     return true;
 }
 /**
  * @see BaseJob::run()
  */
 public function run()
 {
     $workflowsWithInvalidActions = WorkflowActionsUtil::getWorkflowsMissingRequiredActionAttributes();
     if (count($workflowsWithInvalidActions) > 0) {
         $commonMessage = Zurmo::t('WorkflowsModule', 'As a result of a field or fields recently ' . 'becoming required, at least 1 workflow action rule will no longer work properly:');
         $message = new NotificationMessage();
         $message = $this->updateNotificationMessage($workflowsWithInvalidActions, $message, $commonMessage);
     }
     $workflowsWithInvalidTriggers = WorkflowTriggersUtil::getWorkflowsWithInvalidTriggerCustomFieldValue();
     if (count($workflowsWithInvalidTriggers) > 0) {
         if (!isset($message)) {
             $message = new NotificationMessage();
         }
         $commonMessage = Zurmo::t('WorkflowsModule', 'As a result of modifying picklist data recently, ' . 'at least 1 workflow trigger rule will no longer work properly:');
         $message = $this->updateNotificationMessage($workflowsWithInvalidTriggers, $message, $commonMessage);
     }
     if (count($workflowsWithInvalidActions) > 0 || count($workflowsWithInvalidTriggers) > 0) {
         $rules = new WorkflowValidityCheckNotificationRules();
         NotificationsUtil::submit($message, $rules);
     }
     return true;
 }
 /**
  * @depends testGetWorkflowsMissingRequiredActionAttributesWhereActionIsOk
  */
 public function testGetWorkflowsMissingRequiredActionAttributesWhereActionIsMissingRequiredAttribute()
 {
     //Create workflow
     $workflow = new Workflow();
     $workflow->setDescription('aDescription');
     $workflow->setIsActive(true);
     $workflow->setOrder(5);
     $workflow->setModuleClassName('WorkflowsTest2Module');
     $workflow->setName('myFirstWorkflow');
     $workflow->setTriggerOn(Workflow::TRIGGER_ON_NEW_AND_EXISTING);
     $workflow->setType(Workflow::TYPE_ON_SAVE);
     $workflow->setTriggersStructure('1');
     //Add action that is missing required owner
     $action = new ActionForWorkflowForm('WorkflowModelTestItem2', Workflow::TYPE_ON_SAVE);
     $action->type = ActionForWorkflowForm::TYPE_CREATE;
     $action->relation = 'hasMany2';
     $attributes = array('string' => array('shouldSetValue' => '1', 'type' => WorkflowActionAttributeForm::TYPE_STATIC, 'value' => 'jason'), 'lastName' => array('shouldSetValue' => '1', 'type' => WorkflowActionAttributeForm::TYPE_STATIC, 'value' => 'jason'));
     $action->setAttributes(array(ActionForWorkflowForm::ACTION_ATTRIBUTES => $attributes));
     $workflow->addAction($action);
     //Create the saved Workflow
     $savedWorkflow = new SavedWorkflow();
     SavedWorkflowToWorkflowAdapter::resolveWorkflowToSavedWorkflow($workflow, $savedWorkflow);
     $saved = $savedWorkflow->save();
     $workflow = SavedWorkflowToWorkflowAdapter::makeWorkflowBySavedWorkflow($savedWorkflow);
     $this->assertTrue($saved);
     $this->assertEquals(array($workflow), WorkflowActionsUtil::getWorkflowsMissingRequiredActionAttributes());
 }