Example #1
0
 /**
  * Parse a route based on it's POST.
  * It's assumed here that all fields are already validated
  *
  * @param array $postData optional for ovewrite post data
  * @return PBX_Rule
  */
 protected function parseRuleFromPost($post = null)
 {
     $post = $post === null ? $_POST : $post;
     $rule = new PBX_Rule();
     // Adicionando dias da semana
     $weekDays = array("sun", "mon", "tue", "wed", "thu", "fri", "sat");
     $rule->cleanValidWeekList();
     foreach ($weekDays as $day) {
         if (in_array($day, $post['week'])) {
             $rule->addWeekDay($day);
         }
     }
     // Adicionando Origens
     foreach (explode(',', $post['srcValue']) as $src) {
         if (!strpos($src, ':')) {
             $rule->addSrc(array("type" => $src, "value" => ""));
         } else {
             $info = explode(':', $src);
             if (!is_array($info) or count($info) != 2) {
                 throw new PBX_Exception_BadArg("Valor errado para origem da regra de negocio.");
             }
             if ($info[0] == "T") {
                 try {
                     PBX_Trunks::get($info[1]);
                 } catch (PBX_Exception_NotFound $ex) {
                     throw new PBX_Exception_BadArg("Tronco inválido para origem da regra");
                 }
             }
             $rule->addSrc(array("type" => $info[0], "value" => $info[1]));
         }
     }
     // Adding destinys
     foreach (explode(',', $post['dstValue']) as $dst) {
         if (!strpos($dst, ':')) {
             $rule->addDst(array("type" => $dst, "value" => ""));
         } else {
             $info = explode(':', $dst);
             if (!is_array($info) or count($info) != 2) {
                 throw new PBX_Exception_BadArg("Valor errado para destino da regra de negocio.");
             }
             if ($info[0] == "T") {
                 try {
                     PBX_Trunks::get($info[1]);
                 } catch (PBX_Exception_NotFound $ex) {
                     throw new PBX_Exception_BadArg("Tronco inválido para destino da regra");
                 }
             }
             $rule->addDst(array("type" => $info[0], "value" => $info[1]));
         }
     }
     // Adding time
     $rule->cleanValidTimeList();
     foreach (explode(',', $post['timeValue']) as $time_period) {
         $rule->addValidTime($time_period);
     }
     // Adding Description
     $rule->setDesc($post['desc']);
     // Defining recording order
     if (isset($post['record']) && $post['record']) {
         $rule->record();
     }
     // Defining priority
     $rule->setPriority(substr($post['prio'], 1));
     if (isset($post['actions_order'])) {
         parse_str($post['actions_order'], $actions_order);
         foreach ($actions_order['actions_list'] as $action) {
             $real_action = new $post["action_{$action}"]["action_type"]();
             $action_config = new Snep_Rule_ActionConfig($real_action->getConfig());
             $real_action->setConfig($action_config->parseConfig($post["action_{$action}"]));
             $rule->addAction($real_action);
         }
     }
     return $rule;
 }
Example #2
0
 /**
  * Cadastra uma regra de negócio no banco de dados do Snep.
  * 
  * @param PBX_Rule $rule
  */
 public static function register($rule)
 {
     $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());
     $insert_data = array("prio" => $rule->getPriority(), "desc" => $rule->getDesc(), "origem" => $srcs, "destino" => $dsts, "validade" => $validade, "diasDaSemana" => $diasDaSemana, "record" => $rule->isRecording());
     $db = Snep_Db::getInstance();
     $db->beginTransaction();
     try {
         $db->insert("regras_negocio", $insert_data);
         $rule->setId((int) $db->lastInsertId('regras_negocio_id'));
         $action_prio = 0;
         foreach ($rule->getAcoes() as $acao) {
             $action_insert_data = array("regra_id" => $rule->getId(), "prio" => $action_prio, "action" => get_class($acao));
             $db->insert("regras_negocio_actions", $action_insert_data);
             foreach ($acao->getConfigArray() as $chave => $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;
     }
 }