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