示例#1
0
 /**
  * 
  * @param int $id
  * @return boolean
  */
 public static function disable($id)
 {
     $workflow = BpmWorkflow::findOne(['id' => $id]);
     $workflow->active = 0;
     $domain = Domain::findOne(['name' => $workflow->domain]);
     if (!$domain) {
         return false;
     }
     if (!$workflow->save()) {
         return false;
     }
     // Procura por execuções em aberto envolvendo o workflow.
     $flows = BpmFlow::find()->where(['workflow_id' => $id])->all();
     foreach ($flows as $flow) {
         $conId = $flow->connection_id;
         //Deleta o fluxo
         $flow->delete();
         //Deleta autorizações
         ConnectionAuth::deleteAll(['connection_id' => $conId, 'domain' => $domain->name]);
         //Cria novo fluxo, com workflow desativado
         BpmFlow::startFlow($conId, $domain->name);
         //Dispara continuidade dos workflows
         Connection::continueWorkflows($conId, true);
     }
     return true;
 }
示例#2
0
 public function executeWorkflows($id)
 {
     $paths = ConnectionPath::find()->select('DISTINCT `domain`')->where(['conn_id' => $id])->all();
     Yii::trace("Dominios envolvidos:");
     foreach ($paths as $path) {
         Yii::trace($path->domain);
     }
     $conn = Connection::findOne(['id' => $id]);
     $conn->auth_status = self::AUTH_STATUS_PENDING;
     $conn->save();
     //Cria execução dos Workflows
     foreach ($paths as $path) {
         //Utiliza unique para não executar duas vezes em intradominios.
         $domain = Domain::findOne(['name' => $path->domain]);
         if (isset($domain)) {
             BpmFlow::startFlow($id, $domain->name);
         }
         if (Connection::findOne(['id' => $id])->auth_status != self::AUTH_STATUS_PENDING) {
             break;
         }
         //Para quando ja negou.
     }
     //Executa primeira vez IMPEDINDO que sejam feitas perguntas.
     //Sai caso aceite, rejeite ou entre em modo de espera para perguntar.
     Connection::continueWorkflows($id, false);
     //Executa segunda vez, liberando as perguntas.
     Connection::continueWorkflows($id);
 }