/** * Atualiza uma regra de negócio no banco de dados. * * Para usar esse método, basta pegar o objeto da regra do banco de dados. * Edit seus atributos e passá-lo a esse método. * * @param PBX_Rule $rule */ public static function update($rule) { if ($rule->getId() == -1) { throw new PBX_Exception_BadArg("Regra nao possui um id valido."); } $srcs = ""; foreach ($rule->getSrcList() as $src) { $srcs .= "," . trim($src['type'] . ":" . $src['value'], ':'); } $srcs = trim($srcs, ','); $dsts = ""; foreach ($rule->getDstList() as $dst) { $dsts .= "," . trim($dst['type'] . ":" . $dst['value'], ":"); } $dsts = trim($dsts, ','); $validade = implode(",", $rule->getValidTimeList()); $diasDaSemana = implode(",", $rule->getValidWeekDays()); $update_data = array("prio" => $rule->getPriority(), "desc" => $rule->getDesc(), "ativa" => $rule->isActive() ? '1' : '0', "origem" => $srcs, "destino" => $dsts, "record" => $rule->isRecording(), "diasDaSemana" => $diasDaSemana, "validade" => $validade); $db = Snep_Db::getInstance(); $db->beginTransaction(); try { $db->update("regras_negocio", $update_data, "id='{$rule->getId()}'"); $db->delete("regras_negocio_actions", "regra_id='{$rule->getId()}'"); $action_prio = 0; foreach ($rule->getAcoes() as $acao) { $action_update_data = array("regra_id" => $rule->getId(), "prio" => $action_prio, "action" => get_class($acao)); $db->insert("regras_negocio_actions", $action_update_data); foreach ($acao->getConfigArray() as $chave => $valor) { if (!is_null($valor)) { $action_config_data = array("regra_id" => $rule->getId(), "prio" => $action_prio, "key" => $chave, "value" => $valor); $db->insert("regras_negocio_actions_config", $action_config_data); } } $action_prio++; } $db->commit(); } catch (Exception $ex) { $db->rollBack(); throw $ex; } }