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