/** * * @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; }
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); }