db()->getRegistros(); $retorno_cliente = "{$data['reg_uniqueid']}|{$data['reg_fone']}|{$data['id']}|"; foreach ($retorno as $key => $value) { if (in_array($key, $params)) { $registros++; $retorno_cliente .= sprintf("%s:%s", strtoupper(str_replace("_", " ", $key)), strtoupper(str_replace("|", "", $value))); if (count($params) > $registros) { $retorno_cliente .= "|"; } } } $this->db()->setRegistros(array('retorno_cliente' => $retorno_cliente)); } /** * Converte um CPF ou CNPJ com marcara referente a cada modelo. * * @param string $string * @return boolean|string */ protected function mask_cpf_cnpj($string) { if (!empty($string)) { if (strlen($string) == 11) { $mask = "%s%s%s.%s%s%s.%s%s%s-%s%s"; } elseif (strlen($string) == 14) { $mask = "%s%s.%s%s%s.%s%s%s/%s%s%s%s-%s%s"; } return vsprintf($mask, str_split($string)); } else { return false; } } /** * Retorna telefone com o (DDD)Numero de acordo com o parametro passado caso nao possua DDD sera o padrao da central. * @param string $telefone * @return array */ protected function mask_phone_tel($telefone) { $retorno = array('telefone' => '', 'type' => ''); if (strlen($telefone) == 11) { $numero_1 = substr($telefone, 2, 5); $numero_2 = substr($telefone, 7, 4); $ddd = substr($telefone, 0, 2); $telefone = "({$ddd}) " . $numero_1 . '-' . $numero_2; $retorno['telefone'] = $telefone; $retorno['type'] = 'celular'; } else if (strlen($telefone) == 12) { $ddd = substr($telefone, 1, 2); $numero = substr($telefone, 3, 10); $telefone = sprintf("(%s) %s", $ddd, $numero); $retorno['telefone'] = $telefone; $retorno['type'] = 'telefone'; } else if (strlen($telefone) == 13) { $ddd = substr($telefone, 2, 2); $numero = substr($telefone, 4, 10); $telefone = "(" . $ddd . ") " . $numero; $retorno['telefone'] = $telefone; $retorno['type'] = 'celular'; } else if (strlen($telefone) == 10) { $numero_1 = substr($telefone, 2, 4); $numero_2 = substr($telefone, 6, 9); $ddd = substr($telefone, 0, 2); $telefone = "({$ddd}) " . $numero_1 . '-' . $numero_2; $retorno['telefone'] = $telefone; $retorno['type'] = 'fixo'; } else { return null; } return $retorno; } /** * Verifica se todos os parametros passados foram completados. * * @param array $args * @return true|false */ protected function getArgs($args) { foreach ($args as $value) { if (!$value) { return false; } } return true; } /** * Verifica a diferenca em dias entre a data de entrada e a data atual. * * @param type $dateParam * @return type */ public function dateDiff($dateParam) { $dateIni = strtotime(date('Y-m-d')); if (strstr($dateParam, "/")) { $dateParam = date(strtotime(str_replace('/', '-', $dateParam))); } else { $dateParam = date(strtotime($dateParam)); } $diff = ($dateIni - $dateParam); $days = (int) floor($diff / (60 * 60 * 24)); return $days; } /** * Realiza a conversao de datas no formato brasileiro para a Defualt. * @param string $data * @return string|boolean */ public function convertDateDefault($data) { if ($data) { $data = explode('/', $data); return "{$data[2]}-{$data[1]}-{$data[0]}"; } return false; } /** * Realiza a validação de pendencia financeira de acordo com a data informada * * OBS: O array deve possui nível = array( array('data' => 'yyyy-mm-dd')) * OBS: O indice deve ser o nome do valor onde se encontra a data. * @param array $array * @param string $indice * @param string $datavalida * @return boolean */ public function verificaDataPendencia($array, $indice, $datavalida = null) { if (!$datavalida) { $datavalida = strototime(date('Y-m-d')); } else { $datavalida = strtotime($datavalida); } foreach ($array as $value) { if (strtotime($value[$indice]) < $datavalida) { return false; } } return true; } /** * Adiciona mascara no telefone para realizar a consulta * * @param type $value * @return boolean */ protected function phoneMask($value) { if (!empty($value)) { if (strlen($value) == 10) { $mask = '(%s%s)%s%s%s%s-%s%s%s%s'; } elseif (strlen($value) == 11) { $mask = '(%s%s)%s%s%s%s%s-%s%s%s%s'; } return vsprintf($mask, str_split($value)); } else { return false; } } /** * Verifica se um servidor esta dando resposta de ping * @param type $ip * @return boolean */ public function verificaLatencia($ip) { $ping = explode(",", shell_exec("ping -c 4 $ip")); $latencia = substr($ping[1], 1, 2); //resposta do ping if ($latencia >= 2) { return true; } return false; } /** * Verbaliza digitos * @param string|int $string */ public function verbaliza($string) { $vocaliza = str_split($string); foreach ($vocaliza as $value) { $this->agi()->say_digits($value); } } /* * Objetct to array */ public function objectToArray($d) { if (is_object($d)) { $d = get_object_vars($d); } if (is_array($d)) { return array_map($this->objectToArray(), $d); } else { return $d; } } ############################################################################ ######## CONFIGURACAO DE EMAIL ######## ############################################################################ /** * Inicia a instanciacao da Classe para envio de Email * @param string $email * @param string $password * @param string $subject */ public function SimpleMail($email, $password, $subject) { $this->mail = new SimpleMail($email, $password, $subject); $this->log->debug("Instanciacao SimpleMail : " . ($this->mail ? "SUCCESS" : "FAIL"), debug_backtrace()); } /** * Configura o servidor de Envio dos Emails. * @param string $host * @param string|int $port * @param string $title * @return boolean */ public function confSMTP($host, $port, $title, $smtpAuth = true, $smtpSecure = 'TLS', $charset = 'UTF8') { $this->log->debug("Configuracao SMTP", debug_backtrace()); if ($this->mail) { $this->mail->config($host, $port, $title, $smtpAuth, $smtpSecure, $charset); } else { return false; } } public function geraProtocoloSimples($uid){ $connPG = $this->db()->getConnection(); $protoAgente = GeraProtocolo($connPG, $uid); return $protoAgente; } ######################################################################## ## FUNCOES IMPORTANTES ## ######################################################################## /** * Instancia um objeto de Logger. * * @param Logger $log */ protected function setLog($log = false) { if (!$this->log) { $this->log = new Logger(CONF_LOGGER_PATH . CONF_NOME_EMPRESA, $log); } } /** * Retorna o objeto de Log. * @return string */ public function log() { return $this->log; } /** * Instancia um objeto de AGI para se conectar com as informações do Asterisk. * * @return AGI */ public function agi() { if (!$this->agi) { $data = $this->db()->getAuthAgi(); $config = array(); $config['phpagi']['error_handler'] = self::AGI_ERROR_HANDLER; $config['asmanager']['server'] = $data['host_sck']; $config['asmanager']['port'] = $data['porta_sck']; $config['asmanager']['username'] = $data['usuario_sck']; $config['asmanager']['secret'] = $data['senha_sck']; $agi = new AGI('phpagi.conf', $config); $this->agi = $agi; return $agi; } return $this->agi; } private function readAgiVariable() { ob_implicit_flush(true); set_time_limit(6); $in = fopen("php://stdin", "r"); $input = str_replace("\n", "", fgets($in, 4096)); fclose($in); $this->log->debug("Reading: " . $input); return $input; } public function getAgiVariable($variable = null) { $this->log->debug("Executing...", debug_backtrace()); while ($env = $this->readAgiVariable()) { $s = explode(": ", $env); $agi[str_replace("agi_", "", $s[0])] = trim($s[1]); $this->log->debug("Data: " . print_r($agi, true), debug_backtrace()); if (($env == "") || ($env == "\n")) { break; } } $this->log->debug("Reading: " . print_r($agi, true)); if (!$variable || $agi[$variable]) { return !$variable ? $agi : $agi[$variable]; } return false; } /** * Instancia um objeto de IntegracaoDataBase para se conectar com dados do * Banco de dados e credenciais do Manager. * * @return IntegracaoDataBase */ public function db() { if (!$this->db) { $db = new IntegracaoDataBase(); $this->db = $db; } return $this->db; } protected function audioError() { $this->log->debug('Audio de error'); $exten = $this->db()->getAnuncio(); $this->log->error('Encaminhando para áudio alternativo de Erros', debug_backtrace()); $this->agi()->exec_goto($exten); exit(); } protected function integracaoReg(){ global $ura, $tronco, $uid, $idMetodo, $uidOld, $numero; $registros = array( "id" => '', "reg_ura" => $ura, "reg_tronco" => $tronco, "reg_uniqueid" => $uid, "reg_id_metodo" => $idMetodo, "reg_uniqueid" => $uid, "reg_uniqueid_old" => $uidOld, "reg_fone" => $numero, "reg_status_exec" => '1', "reg_inicio" => date()); $this->db()->setRegistros($registros); if (CONF_AUDIO_ERROR) { $this->db()->setIdAudioError($this->db()->getAnuncioIdByName(strtoupper(CONF_AUDIO_ERROR.CONF_NOME_EMPRESA.CONF_VERSAO))); } } public function executarFluxo($tipo, $nome){ #INEGRACAO DE TELA if(CONF_INTEGRACAO_TELA){ $parametrosTela = unserialize(CONF_PARAMETROS_TELA); $itgcTela = array(); $itgcTelaNomes = array(); foreach($parametrosTela as $parametro){ $itgcTela[$parametro] = str_replace(array("|",":"),"-",utf8_decode($this->agi()->get_variable($parametro, true))); $itgcTelaNomes[] = "$parametro"; } $this->integracaoAgente($itgcTela, $itgcTelaNomes); } $dbFunction = "get".ucfirst(strtolower($tipo));//CONTRUIR NOME FUNCAO BUSCAR ID $this->agi()->exec_goto($this->db()->$dbFunction(strtoupper($nome)));//REDIRECIONAR FLUXO $this->db()->atualizaIntegracao(); } }