✏️ 正在编辑: IntegracaoFtp.php
路径:
/srv/systems_dir/yuppiecred/library/Core/Callcenter/Service/IntegracaoFtp.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php class Core_Callcenter_Service_IntegracaoFtp { //Padrão dos arquivos listados no ftp private $padrao = "/^[a-z]{3,8}-\d{5,14}-\d{5,14}-\d{8}-\d{6}-.*.[a-z]{3}$/"; /** * Valida uma amostra para verificar se os arquivos correspondem a essa implementação * @param string $amostra Amostra a ser validada * @return boolean TRUE caso a amostra seja válida, FALSE, caso contrário */ public function validarDados($amostra) { return preg_match($this->padrao, $amostra); } /** * Retorna o diretório de acordo com os parametros enviados * @param array | string $parametros Array de dados * provenientes da requisição ou String com o nome do arquivo para * extracao dos dados * @return string Caminho formatado para acesso aos arquivos */ public function getDir($parametros) { $data = Zend_Date::now(); if( is_array($parametros) ){ if( !isset($parametros['data']) || !Zend_Date::isDate($parametros['data'], 'dd/MM/yyyy') ){ throw new Exception('Data inválida ou não informada'); } $data->setDate($parametros['data'], 'dd/MM/yyyy'); } //sobrecarga do método if( is_string($parametros) ){ $dados = explode('-', $parametros); $data->setDate($dados[3], 'yyyyMMdd'); } return $data->get('yyyy/MM/dd'); } /** * Formata e filtra os dados para exibição * @param array $files Lista de arquivos retornados pelo ftp * @return array Dados normalizados para exibição conforme a classe selecionada */ public function formatarDados(array $files) { $arquivos = array(); foreach ( $files as $i => $gravacao ) { $dados = explode('-', $gravacao); $data = new Zend_Date($dados[3], 'yyyyMMdd'); $data->setTime($dados[4], 'hhmmss'); $arquivos[$i] = array( 'arquivo' => $gravacao, 'origem' => $dados[0] == 'out' ? 'Interna' : 'Externa', 'telefone' => $dados[0] == 'out' ? $dados[1] : $dados[2], 'ramal' => $dados[0] == 'out' ? $dados[2] : $dados[1], 'data' => $data->get('yyyy-MM-dd HH:mm:ss') ); } return $arquivos; } /** * Verifica se o arquivo atende aos filtros enviados por parametro * @param array $files Lista de arquivos serem filtrados * @param array $dados Parâmetros provenientes da requisição * @return array Dados filtrados conforme os parâmetros */ public function aplicarFiltros(array $files, array $dados) { $arquivos = array(); foreach ( $files as $file ) { $fileInfo = preg_split('/\s+/', $file, 9); $parametros = array_filter($dados); if( !empty($parametros['data']) ){ $data = new Zend_Date($parametros['data'], 'dd/MM/YYYY'); $parametros['data'] = $data->get('yyyyMMdd'); } if( !empty($parametros['telefone']) ){ $parametros['telefone'] = ltrim($parametros['telefone'], '0'); } $size = $fileInfo[4]; $name = $fileInfo[8]; $matches = array_filter($parametros, function($parametro) use ($name, $size) { return $this->validarDados($name) && $size > 44 && preg_match("/$parametro/", $name); }); if(count($matches) == count($parametros)){ $arquivos[] = $name; } } return $this->fetchSalvos($arquivos); } protected function fetchSalvos(array $arquivos) { if(count($arquivos)){ $arquivos = str_replace("wav", "mp3", $arquivos); $dbGravacoes = new Model_DbTable_CallcenterGravacao(); $gravacoesSalvas = $dbGravacoes->fetchPairs( "arquivo", "arquivo IN ('" . implode("','", $arquivos) . "')"); return str_replace("mp3", "wav", array_diff($arquivos, $gravacoesSalvas)); } return array(); } }
💾 保存文件
← 返回文件管理器