Quantcast
Channel: Últimos conteúdos
Viewing all articles
Browse latest Browse all 14190

Classe para gerenciar postagens

$
0
0

Boa noite!

 

Acabei de criar a classe que faz toda gestão dos dados enviados via $_POST. O tratamento é feito com AJAX e gostaria de saber a opinião de vocês quando a melhorias no código. Eu fazia manualmente um a um e durante algumas semanas fiquei pensando em como automatizar todo esse processo. Ainda estou aprendendo e tenho me esforçado ao máximo pra poder entender todo o conceito do POO. Sei que é muita coisa mas um dia chego lá. Então lá vai

 

<?php
/**
 * UpdateData.class [ Helper ]
 * Responsável por verificar os dados enviado via $_POST e inserir ou atualizar essas informações 
 * no banco de dados
 * 
 */
class UpdateData {   
    /** A data e hora atual */
    private $DataCadastro;
    
    /** A tabela que receberá a ação */
    private $Table;
    
    /** Os campos que serão validados e salvos na tabela */
    private $Fields;
    
    /** Os dados que serão utilizados para realizar a ação na tabela */
    private $DataObj;
    
    /** A mensagem de erro */
    private $Errors;
    
    /** A mensagem de sucesso */
    private $Success;
    
    /** Itens para checar se o registro já existe */
    private $Itens;
    
    /** Construct */
    function __construct($Table, array $Fields, $Itens = null) {
        $this->Table = $Table;
        $this->Fields = $Fields;
        $this->Itens = $Itens;
        $this->DataCadastro = date('Y-m-d H:i:s');
        
        // Execute methods
        $this->CheckFields();
        $this->SetAction();
    }
 
    /**
     * <b>CheckFields: </b> Método responsável por verificar se o campo está vazio e retornar a mensagem
     * de erro em formato de json
     * 
     * @return json
     */
    public function CheckFields(){        
        if(is_array($this->Fields)):
            /** Define os dados que serão utilizados para manipular a tabela */
            $this->DataObj = $this->Fields;
        
            /** Trata alguns campos removendo caracteres da máscara jQuery */
            foreach($this->DataObj as $IndiceObj):
                if($IndiceObj=='cnpj' || $IndiceObj=='cpf' || $IndiceObj=='cep' || $IndiceObj=='telefone'):
                    $this->DataObj = str_replace(['_', '-', '.', '/'], '', $this->DataObj);
                endif;
            endforeach;
            
            /** Passwords => For change | Encoding sha1() */
            if(isset($this->Fields['senha']) && !empty($this->Fields['senha'])):
                foreach($this->Fields as $Indice => $Val):
                    if($Indice == 'senha'):
                        $this->Fields['senha'] = sha1($this->Fields['senha']);
                    endif;
                endforeach;
            endif;
            
            /** Passwords => For check if it's correctly */
            if(isset($this->Fields['atual_pass']) && !empty($this->Fields['atual_pass'])):
                foreach($this->Fields as $Indice => $Val):
                    if($Indice == 'atual_pass'):
                        $this->Fields['atual_pass'] = sha1($this->Fields['atual_pass']);
                    endif;
                endforeach;
                
                $ReadPass = new Read;
                $ReadPass->ExeRead('rio_clientes', 'senha,id,email', 'WHERE senha = :senha_atual', "senha_atual={$this->Fields['atual_pass']}");
                
                if(!$ReadPass->getResult() && empty($this->Success)):
                    $this->Errors=['erros' => "A senha atual está incorreta#exibir_erros"];
                    echo json_encode($this->Errors);
                    exit;
                endif;
            endif;          
 
            /** Validação para tela de alteração de dados */
            if($this->CheckAction()==1):
                $this->Errors=['erros' => "Preencha ou o campo com o novo e-mail ou o campo com a nova senha. E informe a senha atual para concluir.#exibir_erros"];
                echo json_encode($this->Errors);
                exit;
            elseif($this->CheckAction()==2):
                $this->Errors=['erros' => "Tudo certo. Basta informar sua senha atual.#exibir_erros"];
                echo json_encode($this->Errors);
                exit;
            elseif($this->DataObj['action']!='validate_data_access'):
                /** Faz a validação dos campos */
                foreach($this->Fields as $Indice => $Val):           
                    if($Indice != 'action' && $Indice != 'id' && empty($Val)):
                        $this->Errors=['erros' => "Campo obrigatório#{$Indice}"];
                        echo json_encode($this->Errors);
                        exit;
                    endif;
                 endforeach;
            endif;
        endif;
    }
    
    /** PRIVATES METHODS */
    /**
     * <b>CheckDuplicidade: </b> Método responsável por verificar se o registro já existe na tabela
     * 
     * @return boolean
     */
    private function CheckDuplicidade() {
        if(!empty($this->Itens) && !empty($this->Fields[$this->Itens])):
            $ReadItens = new Read;
            $ReadItens->ExeRead($this->Table, $this->Itens, "WHERE {$this->Itens} = :itens AND id != :id", "itens={$this->Fields[$this->Itens]}&id={$this->Fields['id']}");
 
            if($ReadItens->getResult()):
                return false;
            else:
                return  true;
            endif;
        else:
            return true;
        endif;
    }
    
    /**
     * 
     */
    private function CheckAction() {
         if($this->DataObj['action']=='validate_data_access'):
            if(empty($this->DataObj['email']) && empty($this->DataObj['senha'])):
                return 1;
            elseif(!empty($this->DataObj['email']) && empty($this->DataObj['senha']) && empty($this->DataObj['atual_pass'])):
                return 2;
            elseif(empty($this->DataObj['email']) && !empty($this->DataObj['senha']) && empty($this->DataObj['atual_pass'])):
                return 2;
            endif;
        endif;
    }
    
    /**
     * <b>SetAction: </b> Método privado responsável por realizar a ação na tabela
     * 
     * @return boolean
     */
    private function SetAction() {
         /** Remove alguns índices do array, por padrão todos os campos que não estão na tabela */
        unset($this->DataObj['id']);
        unset($this->DataObj['action']);
        unset($this->DataObj['atual_pass']);
        
        // Elimina o e-mail do update, se ele estiver vazio
        if(empty($this->DataObj['email'])):
            unset($this->DataObj['email']);
        endif;
        
        // Elimina a senha do update, se ela estiver vazia
        if(empty($this->DataObj['senha'])):
            unset($this->DataObj['senha']);
        endif;
        
        // Realiza o insert
        if(!isset($this->Fields['id']) || empty($this->Fields['id'])):
            if($this->CheckDuplicidade()===true):
                $InsertData = new Create;
                $InsertData->ExeCreate($this->Table, $this->DataObj);
 
                 if($InsertData->getResult()):
                    $this->Success=['sucesso' => "Registro inserido com sucesso#sucesso"];
                    echo json_encode($this->Success);
                endif;
            else:
                $this->Errors=['erros' => "Esse registro já existe. Não será possível realizar essa ação com essa informações.#exibir_erros"];
                echo json_encode($this->Errors);
                exit;
            endif;
        // Realiza o update
        else:
            if($this->CheckDuplicidade()===true):
                
                // Salva a data de alteração da senha
                if(!empty($this->DataObj['senha'])):
                    $this->DataObj['data_alteracao_senha'] = $this->DataCadastro;
                endif;                
                
                // Realiza o update
                $UpdateData = new Update;
                $UpdateData->ExeUpdate($this->Table,$this->DataObj, "WHERE id=:id", "id={$this->Fields['id']}");
 
                // Atualiza a sessão com o novo e-mail
                if(!empty($this->DataObj['email'])):
                    $sessao = new Session;
                    $_SESSION['logado'] = $this->DataObj['email'];
                endif;
        
                // Mensagem de sucesso
                if($UpdateData->getResult()):
                    $this->Success=['sucesso' => "Dados atualizados com sucesso#sucesso"];
                    echo json_encode($this->Success);
                endif;
            else:
                $this->Errors=['erros' => "Esse registro já existe. Não será possível realizar essa ação com essa informações.#exibir_erros"];
                echo json_encode($this->Errors);
                exit;
            endif;
        endif;
    }
}

 

Usage

 

/** Post form */
$Post=filter_input_array(INPUT_POST);
 
/** Define as variáveis utilizadas pela classe */
switch($Post['action']):
    // Meus dados
    case "validate_meus_dados":
        $Table = 'clientes';
        $Iten = ''; // Quando existir, irá verificar se o registro é duplicado ou não
        break;
endswitch;
 
/** Objeto da classe */
$updData=new UpdateData($Table, $Post, $Iten);

Viewing all articles
Browse latest Browse all 14190