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