public function execute(&$params)
 {
     $workflowId = $this->parseOption('workflowId', $params);
     $stageNumber = $this->parseOption('stageNumber', $params);
     $stageComment = $this->parseOption('stageComment', $params);
     $model = $params['model'];
     $type = lcfirst(X2Model::getModuleName(get_class($model)));
     $modelId = $model->id;
     $workflowStatus = Workflow::getWorkflowStatus($workflowId, $modelId, $type);
     $message = '';
     if (Workflow::validateAction('complete', $workflowStatus, $stageNumber, $stageComment, $message)) {
         list($started, $workflowStatus) = Workflow::completeStage($workflowId, $stageNumber, $model, $stageComment, false, $workflowStatus);
         assert($started);
         return array(true, Yii::t('studio', 'Stage "{stageName}" completed for {recordName}', array('{stageName}' => $workflowStatus['stages'][$stageNumber]['name'], '{recordName}' => $model->getLink())));
     } else {
         return array(false, $message);
     }
 }
Esempio n. 2
0
 public function actionCompleteStage($workflowId, $stageNumber, $modelId, $type, $comment = '')
 {
     $model = $this->validateParams($workflowId, $stageNumber, $modelId, $type);
     $workflowStatus = Workflow::getWorkflowStatus($workflowId, $modelId, $type);
     $message = '';
     if (Workflow::validateAction('complete', $workflowStatus, $stageNumber, $comment, $message)) {
         list($completed, $workflowStatus) = Workflow::completeStage($workflowId, $stageNumber, $model, $comment, true);
     }
     // $record=X2Model::model(ucfirst($type))->findByPk($modelId);
     // if($record->hasAttribute('lastActivity')){
     // $record->lastActivity=time();
     // $record->save();
     // }
     echo CJSON::encode(array('workflowStatus' => $workflowStatus, 'flashes' => array('error' => !empty($message) ? array($message) : array(), 'success' => empty($message) ? array(Yii::t('workflow', 'Stage completed')) : array())));
 }
Esempio n. 3
0
 /**
  * Moves a record up or down a workflow. Assumes that stageA is started but not completed.
  * Intermediate stages and stageB can be in any state.
  * @param int $workflowId
  * @param int $stageA Start stage (indexed by 1) 
  * @param int $stageB End stage (indexed by 1) 
  * @param object $model model associated with workflow
  * @param array $comments comment strings indexed by workflow stage number
  * Precondition: $stageA !== $stageB
  * @return array first element is success, the second is an optional message
  */
 public static function moveFromStageAToStageB($workflowId, $stageA, $stageB, $model, $comments = array())
 {
     if ($stageA === $stageB && YII_DEBUG) {
         throw new CException('Precondition violation: $stageA === $stageB');
     }
     $modelId = $model->id;
     $type = lcfirst(X2Model::getModuleName(get_class($model)));
     $retVal = self::validateStageChange($workflowId, $stageA, $stageB, $modelId, $type, $comments);
     if (!$retVal[0]) {
         return $retVal;
     }
     // enact stage change
     if ($stageA < $stageB) {
         // complete first stage
         list($success, $status) = Workflow::completeStage($workflowId, $stageA, $model, isset($comments[$stageA]) ? $comments[$stageA] : '', false);
         for ($i = $stageA + 1; $i < $stageB; ++$i) {
             // start and complete intermediate stages
             list($success, $status) = Workflow::startStage($workflowId, $i, $model, $status);
             list($success, $status) = Workflow::completeStage($workflowId, $i, $model, isset($comments[$i]) ? $comments[$i] : '', false, $status);
         }
         list($success, $status) = Workflow::startStage($workflowId, $stageB, $model, $status);
         // uncomplete a completed final stage
         list($success, $status) = Workflow::revertStage($workflowId, $stageB, $model, false, $status);
     } else {
         // $stageA > $stageB
         // unstart first stage
         list($success, $status) = Workflow::revertStage($workflowId, $stageA, $model);
         for ($i = $stageA - 1; $i > $stageB; --$i) {
             // uncomplete and unstart intermediate stages
             list($success, $status) = Workflow::revertStage($workflowId, $i, $model, $status);
             list($success, $status) = Workflow::revertStage($workflowId, $i, $model, $status);
         }
         // uncomplete a completed final stage
         list($success, $status) = Workflow::revertStage($workflowId, $stageB, $model, false, $status);
         list($success, $status) = Workflow::startStage($workflowId, $stageB, $model, false, $status);
     }
     return array(true);
 }
Esempio n. 4
0
 public function testStartStage()
 {
     $workflow = $this->workflows('workflow2');
     $model = $this->contacts('contact935');
     list($success, $status) = Workflow::startStage($workflow->id, 5, $model);
     // couldn't start a stage which requires previous, uncompleted stage
     $this->assertFalse($success);
     // complete stage 4 and disable auto start so that stage 5 doesn't get started
     list($success, $status) = Workflow::completeStage($workflow->id, 4, $model, 'test comment', false);
     list($success, $status) = Workflow::startStage($workflow->id, 5, $model);
     // should have been able to start stage 5 now that 4 is completed
     $this->assertTrue($success);
 }