Classe para gerenciar postagens
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);
Discussão (13)
Carregando comentários...