Crie a tabela de Certificado Digital
CREATE TABLE `certificado_digital` (
`id_certificado_digital` bigint(20) UNSIGNED NOT NULL,
`cnpj` varchar(20) NOT NULL,
`nome_arquivo` varchar(120) DEFAULT NULL,
`arquivo_binario` blob DEFAULT NULL,
`senha` varchar(60) NOT NULL,
`inicio` varchar(100) DEFAULT NULL,
`expiracao` varchar(100) DEFAULT NULL,
`serial` varchar(100) DEFAULT NULL,
`identificador` varchar(150) DEFAULT NULL,
`csc` varchar(80) DEFAULT NULL,
`csc_id` varchar(50) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
ALTER TABLE `certificado_digital`
ADD PRIMARY KEY (`id_certificado_digital`);
ALTER TABLE `certificado_digital`
MODIFY `id_certificado_digital` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;
COMMIT;
Crie um método chamado index para chamar a listagem de certificado digital, com os seguintes itens:
- crie um array chamados dados que servirá para passar as variáveis para a view
- Faça uma consulta retornando todos os certificado, o resultado da consulta coloque na variável $dados com um índice chamado lista
- Crie uma variável view inicializada como "CertificadoDigital/Index"
- chame o método load passando como parâmetro a view template e o array dados
public function index(){
$dados["lista"] = Service::lista("certificado_digital");
$dados["view"] = "CertificadoDigital/Index";
$this->load("template", $dados);
}
Crie uma pasta dentro de views Chamada CertificadoDigital, a qual servirá para conter todas funcionalidades visuais referente ao Certificado
- Crie um arquivo chamado Index.php.
- Abra o lista-certificado.html do layout baixado e copie o conteúdo referente à listagem de Certificado no arquivo Index.php
Na view CertificadoDigital/Index, faça os seguintes procedimentos:
- Faça o loop para receber os dados da lista de certificados e mostre o resultado no componente de tabela, vinculando cada linha com o seu respectivo campo
- Configure o link para fazer a edição de um registro, chamando a o método edit(id)
- Configure o link para fazer a exclusão de um registro, chamando o método excluir(id)
<?php foreach ($lista as $l) { ?>
<tr>
<td align="center"><?php echo $l->id_certificado_digital ?></td>
<td align="center">*****************</td>
<td align="center"><?php echo $l->cnpj ?></td>
<td align="center">15/06/2022 13:51:00</td>
<td align="center">15/06/2023 13:51:00</td>
<td align="center">
<a href="<?php echo URL_BASE . 'certificadodigital/edit/'. $l->id_certificado_digital ?>"
class="d-inline-block btn btn-verde btn-circulo btn-pequeno" title="Editar"><i
class="fas fa-edit"></i></a>
</td>
<td align="center">
<a href="javascript:;" onclick="excluir(this)" data-entidade="certificadodigital"
data-id="<?php echo $l->id_certificado_digital; ?>" class="ml-2"><svg width="16" height="18"
viewBox="0 0 16 18" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M10.0172 6.53874L9.73331 13.9232M5.80479 13.9232L5.52091 6.53874M13.6996 3.90497C13.9802 3.94763 14.2591 3.99276 14.5381 4.04117M13.6996 3.90497L12.8233 15.2958C12.7875 15.7596 12.578 16.1928 12.2366 16.5087C11.8953 16.8247 11.4472 17.0001 10.9821 17H4.55601C4.09087 17.0001 3.64282 16.8247 3.30146 16.5087C2.9601 16.1928 2.75059 15.7596 2.71483 15.2958L1.83854 3.90497M13.6996 3.90497C12.7526 3.7618 11.8007 3.65315 10.8459 3.57923M1.83854 3.90497C1.55793 3.94681 1.27897 3.99194 1 4.04035M1.83854 3.90497C2.7855 3.76181 3.73735 3.65316 4.69221 3.57923M10.8459 3.57923V2.82766C10.8459 1.85948 10.0992 1.05212 9.13106 1.02176C8.22329 0.992747 7.31481 0.992747 6.40704 1.02176C5.43886 1.05212 4.69221 1.8603 4.69221 2.82766V3.57923M10.8459 3.57923C8.79772 3.42094 6.74038 3.42094 4.69221 3.57923"
stroke="#E5616B" stroke-width="1.5" stroke-linecap="round"
stroke-linejoin="round" />
</svg>
</a>
</td>
</tr>
<?php } ?>
Teste o sistema chamando a listagem, não é pra listar nenhum registro, mas também não é para apresentar nenhum erro.
Crie um método chamado create para chamar o formulário de certificado digital , com os seguintes itens:
- crie um array chamados dados que servirá para passar as variáveis para a view
- Crie uma variável view inicializada como "CertificadoDigital/Create"
- chame o método load passando como parâmetro a view template e o array dados
public function create(){
$dados["ceritificadodigital"] = Flash::getForm();
$dados["view"] = "CertificadoDigital/Create";
$this->load("template", $dados);
}
Configure os inputs do formulário, seguindo os passos:
- Na propriedade name atribua o nomem nome igual ao que foi definido na criação da tabela,
- Verifique os tipos de dados e atribua a propriedade type de acordo com o tipo de dado
- Observe os campos que são obrigatórios atribua a eles a propriedade required
- Insira um campo do tipo hidden chamado id_cliente
<div class="col-3 mb-3">
<label class="text-label">CNPJ</label>
<input type="text" name="cnpj" required=""
value="<?php echo $certificadodigital->cnpj ?? null ?>"
class="form-campo">
</div>
No controller CertificadodigitalController crie um método chamado salvar, o qual deverá:
- Criar um objeto do tipo stdclass chamado certificado
- atribua os dados recebidos ao objeto certificado
- use o método file_get_contents para ler o conteúdo do arquivo
- verifique se já existe um certificado cadastrado buscando pelo cnpj
- salve os dados no banco de dados
public function salvar(){
$certificado = new \stdClass();
$certificado->id_certificado_digital = $_POST["id_certificado_digital"] ? $_POST["id_certificado_digital"] : null;
$certificado->cnpj = $_POST["cnpj"] ?? null;
$certificado->senha = $_POST["senha"] ?? null;
$certificado->csc = $_POST["csc"] ?? null;
$certificado->csc_id = $_POST["csc_id"] ?? null;
// Verifica se o arquivo foi enviado
if (isset($_FILES['arquivo']["tmp_name"])) {
if($_FILES['arquivo']["tmp_name"]){
$certificado->arquivo_binario = file_get_contents($_FILES["arquivo"]["tmp_name"]);
}
}
Flash::setForm($certificado);
if(CertificadoDigitalService::salvar($certificado, "id_certificado_digital", "certificado_digital")){
$this->redirect(URL_BASE."certificadodigital");
}else{
if(!$certificado->id_certificado_digital){
$this->redirect(URL_BASE."certificadodigital/create");
}else{
$this->redirect(URL_BASE."certificadodigital/edit/".$certificado->id_certificado_digital);
}
}
}
implemente um método estático chamado salvar dentro da classe CertificadoService, o qual deverá:
- receber como parâmetro o objeto certificado, o nome campo de chave primária e o nome da tabela
- chamar o método salvar da validacao CertificadoValidacao
- salvar os dados no banco de dados através do método salvar da classe Service
public static function salvar($certificado, $campo, $tabela){
$validacao = CertificadoValidacao::salvar($certificado);
return Service::salvar($certificado, $campo, $validacao->listaErros(), $tabela);
}
implemente um método estático chamado salvar dentro da classe CertificadoDigitalValidacao, o qual deverá:
- receber como parâmetro o objeto certidicado
- criar um objeto do tipo Validacao
- setar (setData) os campos necessários para a validação
- chamar (getData) a validação de acordo com o necessário
- verificar se já existe um certificado pelo cnpj
- retornar a validacao
public static function salvar($certificado){
$validacao = new Validacao();
$validacao->setData("cnpj", $certificado->cnpj);
$validacao->setData("senha", $certificado->senha);
//fazendo a validação
$validacao->getData("cnpj")->isVazio()->isMinimo(5);
$validacao->getData("senha")->isVazio();
return $validacao;
}
Teste o seu sistema fazendo cadastro e verifique se as validações estão todas funcionando corretamente,.
Na classe CertificadoDigitalController crie um método chamado edit, o qual deverá:
- receber o id_certificado_digitalcomo parametro
- Buscar o certificado digital pelo id e enviar os dados para a view
- Chamar a view CertificadoDigital/Create
public function edit($id_certificado_digital){
$dados["certificadodigital"] = Service::get("certificado_digital","id_certificado_digital", $id_certificado_digital);
$dados["view"] = "CertificadoDigital/Create";
$this->load("template", $dados);
}
Na classe CertificadoDigitalController crie um método chamado excluir, o qual deverá:
- receber o id_certificado_digtial como parametro
- chamar o método excluir da classe Service
- redirecionar para a listagem de certificado digital
public function excluir($id){
Service::excluir("certificado_digital","id_certificado_digital",$id);
$this->redirect(URL_BASE."certificadodigital");
}