Ejemplo n.º 1
0
 /**
  * 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;
     }
 }