コード例 #1
0
 /**
  * Receber dados do _POST, tratá-los e carregá-los no modelo
  *
  * @param array $dados Vetor com as informações referentes aos filtros a serem aplicados
  *
  * @return array Retorna vetor de dados já tratados
  * @throws \DL3Exception
  */
 protected function carregarPost(array $dados = [])
 {
     if (filter_input(INPUT_SERVER, 'REQUEST_METHOD') !== 'POST') {
         return [];
     }
     // Fim if
     # Verificar se o formulário foi validado por um reCaptcha
     $recaptcha = filter_input(INPUT_POST, 'g-recaptcha-response');
     if (isset($recaptcha)) {
         if ($recaptcha === '') {
             throw new \DL3Exception(ERRO_CONTROLEPRINCIPAL_CARREGARPOST_RECAPTCHA_INVALIDO, 1500, 'info');
         }
         // Fim if
         $curl = curl_init("https://www.google.com/recaptcha/api/siteverify?secret=" . \DL3::$recaptcha_chave_secreta . "&response={$recaptcha}&remoteip={$_SERVER['REMOTE_ADDR']}");
         curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
         $resp_google = curl_exec($curl);
         if (!$resp_google) {
             throw new \DL3Exception(ERRO_CONTROLEPRINCIPAL_CARREGARPOST_RECAPTCHA_ROBO_DETECTADO, 1500, 'erro');
         }
         // Fim if
     }
     // Fim if
     $post = filter_input_array(INPUT_POST, $dados);
     $igual = true;
     $pk_cpo = filter_var(\DL3::$conex->identificaPK($this->modelo->bd_tabela, $this->modelo->bd_prefixo), FILTER_SANITIZE_STRING, FILTER_FORCE_ARRAY);
     $pk_val = [];
     # Converter o encode
     \Funcoes::converterEncode($post, \DL3::$charset);
     /*
      * Considerar tanto chaves compostas como simples como vetor para evitar fazer muitas verificações "if".
      */
     foreach ($pk_cpo as $c) {
         $val = $post[$c];
         $pk_val[] = $val;
         if ($this->modelo->{$c} != $val) {
             $igual = false;
         }
         // Fim if
     }
     // Fim foreach
     if (!$igual || $this->modelo->reg_vazio) {
         $this->modelo->selecionarPK($pk_val);
     }
     // Fim if
     # Carregar o modelo com as informações recebidas
     \Funcoes::vetor2Objeto($post, $this->modelo);
     return $post;
 }
コード例 #2
0
 /**
  * Selecionar um registro através da chave primária (UK - Unique Key)
  *
  * @param mixed  $c Nome do campos a ser pesquisado
  * @param mixed  $v Valor a ser pesquisado na UK
  * @param string $a Alias da tabela principal configurado na consulta
  *
  * @return bool
  * @throws \DL3Exception
  */
 public function selecionarUK($c, $v, $a = null)
 {
     if (!method_exists($this, 'listar')) {
         throw new \DL3Exception(printf(ERRO_PADRAO_METODO_NAO_EXISTE, 'listar'), 1500);
     }
     // Fim if
     $al = !isset($a) ? '' : "{$a}.";
     if (is_array($c)) {
         $cv = array_combine($c, $v);
         $tf = [];
         foreach ($cv as $k => $t) {
             $tf[] = "{$al}{$this->bd_prefixo}{$k} = " . \Funcoes::varExportBD($t);
         }
         // Fim foreach
         $flt = implode(' AND ', $tf);
     } else {
         $flt = "{$al}{$this->bd_prefixo}{$c} = " . \Funcoes::varExportBD($v);
     }
     // Fim if
     $ls = $this->listar($flt, null, "{$al}*", 0, 1, 0);
     /*
      * Informar se o registro foi selecionado corretamente antes de carregar as informações
      * Dessa forma é fácil identificar se o registro foi selecionado durante o carregamento das informações e, assim,
      * poder recuperar valores criptografados, por exemplo. Ex. de utilização: Hash de recuperação de senha
      */
     $this->reg_vazio = !(bool) $ls;
     if (!$this->reg_vazio) {
         $dd = array_combine(array_map(function ($v) {
             return preg_replace("~^{$this->bd_prefixo}~", '', $v);
         }, array_keys($ls)), array_values($ls));
         \Funcoes::vetor2Objeto($dd, $this);
     }
     // Fim if
     # Indicar que o registro foi selecionado
     return !$this->reg_vazio;
 }