Auto cadastro e Gerenciamento de Demandas com Tecnologia GLPI
O projeto PEDEaí surge como uma solução inovadora no cenário do marketing educacional, trazendo autonomia e eficiência para o grupo Fametro. Com a implementação do sistema GLPI, o setor de marketing agora possui uma ferramenta poderosa para rastrear e controlar as demandas com precisão e agilidade.
Auto cadastro e Integração: A chave para a independência do sistema é o módulo de auto cadastro, que permite aos funcionários da Fametro a liberdade de se registrar no GLPI sem intervenção manual. Este processo é estruturado em três códigos PHP principais, que juntos, formam a espinha dorsal do sistema de auto cadastro:
1. Conexão com o Banco de Dados: Este script estabelece uma conexão segura com o banco de dados, garantindo que todas as operações de cadastro sejam realizadas de forma protegida.
<?php
// Conectar ao banco de dados do glpi
$servername = "localhost";
$username = "*****";
$password = "********";
$dbname = "*****";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
else {
echo"<div display='none'>
<script type='text/javascript'>
console.log('Parabéns!! A conexão ao banco de dados ocorreu normalmente!.');
</script>
</div>";
}
?>
2. Validação e Pesquisa: Após a conexão, o sistema realiza pesquisas no banco para validar informações críticas como nome da empresa, cargo e setor, assegurando que os dados inseridos correspondam aos critérios estabelecidos.
<?php
// Incluir o arquivo conexao.php
include("conexao.php");
// Fazer uma consulta SQL para selecionar os dados da tabela glpi_entities
$sql_entidades = "SELECT id, name FROM glpi_entities";
// Executar a consulta e armazenar o resultado
$resultado_entidades = mysqli_query($conn, $sql_entidades);
// Fazer uma consulta SQL para selecionar os dados da tabela glpi_usercategories
$sql_categorias = "SELECT id, name FROM glpi_usercategories";
// Executar a consulta e armazenar o resultado
$resultado_categorias = mysqli_query($conn, $sql_categorias);
// Fazer uma consulta SQL na tabela glpi_locations para retornar os setores cadastrados no banco
$sql_locations = "SELECT id, name FROM glpi_locations";
// Executar a consulta e armazenar o resultado
$resultado_locations = mysqli_query($conn, $sql_locations);
?>
3. Formulário de Cadastro e Inserção de Usuários: O último passo é o formulário de cadastro, criado com HTML e CSS para uma experiência de usuário fluida e amigável. O backend em PHP cuida da inserção dos dados no banco, com verificações de duplicidade, segurança da senha e criptografia.
<html>
<head>
<title>Cadastro de usuário</title>
<style>
/* Estilos para o formulário */
form {
width: 350px;
margin: 50px auto;
padding: 20px;
border: 1px solid #dbdbdb;
border-radius: 5px;
font-family: Arial, sans-serif;
background-color: white;
box-shadow: 0 1px 2px rgba(0,0,0,0.1);
}
h1 {
text-align: center;
font-size: 28px;
color: #262626;
}
label {
display: block;
margin-bottom: 10px;
font-weight: bold;
}
input, select {
width: 100%;
padding: 9px;
border: 1px solid #dbdbdb;
border-radius: 3px;
font-size: 14px;
margin-bottom: 5px;
}
input:focus, select:focus {
width: 100%;
outline: none;
border-color: #0095f6;
}
button {
display: block;
width: 100%;
padding: 9px;
background-color: #0095f6;
color: white;
border: none;
border-radius: 3px;
font-size: 14px;
font-weight: bold;
}
button:hover {
background-color: #0084f4;
}
button:disabled {
background-color: #b2dffc;
}
body {
/* Usar uma imagem de fundo */
background-image: url("/pics/image/bg.jpg");
/* Fazer a imagem cobrir toda a página */
background-size: cover;
/* Centralizar a imagem */
background-position: center;
}
/*Estilizar a mensagem de resposta do processamento no banco*/
</style>
<link rel="shortcut icon" type="images/x-icon" href="/pics/favicon.ico" />
</head>
<body>
<!-- Incluir o arquivo form.php -->
<?php include("pesquisa.php");?>
<!-- Link para voltar à página home -->
<!-- Formulário php -->
<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post">
<!-- Link para voltar à página home -->
<a href="https://marketing.fametro.edu.br">Ir para Login</a>
<h1>Cadastro de Usuário</h1>
<label for="email">Email:</label>
<input type="email" id="email" name="email" required>
<label for="nome">Nome:</label>
<input type="text" id="nome" name="nome" required>
<label for="sobrenome">Sobrenome:</label>
<input type="text" id="sobrenome" name="sobrenome" required>
<label for="usuario">Usuário:</label>
<input type="text" id="usuario" name="usuario" required>
<label for="senha">Senha:</label>
<input type="password" id="senha" name="senha" required>
<label for="confirmacao">Confirme a senha:</label>
<input type="password" id="confirmacao" name="confirmacao" required>
<!-- Campo entidade -->
<label for="entidade">Empresa:</label>
<select id="entidade" name="entidade" required>
<!-- Opções de entidades disponíveis -->
<option value="">Selecione a empresa</option>
<?php
// Percorrer os resultados da consulta de entidades
while ($row_entidades = mysqli_fetch_array($resultado_entidades)) {
// Criar uma opção com o valor e o nome da entidade
echo "<option value='" . $row_entidades['id'] . "'>" . $row_entidades['name'] . "</option>";
}
?>
</select>
<!-- Campo categoria -->
<label for="categoria">Cargo:</label>
<select id="categoria" name="categoria" required>
<!-- Opções de categorias disponíveis -->
<option value="">Selecione o cargo</option>
<?php
// Percorrer os resultados da consulta de categorias
while ($row_categorias = mysqli_fetch_array($resultado_categorias)) {
// Criar uma opção com o valor e o nome da categoria
echo "<option value='" . $row_categorias['id'] . "'>" . $row_categorias['name'] . "</option>";
}
?>
</select>
<!-- Campo Localização -->
<label for="setor">Setor:</label>
<select id="setor" name="setor" required>
<!-- Opções de setores disponíveis -->
<option value="">Selecione o setor</option>
<?php
// Percorrer os resultados da consulta de setores
while ($row_setores = mysqli_fetch_array($resultado_locations)) {
// Criar uma opção com o valor e o nome dos setores
echo "<option value='" . $row_setores['id'] . "'>" . $row_setores['name'] . "</option>";
}
?>
</select>
<button type="submit" name="submit">Cadastrar</button>
<!-- Div para exibir a mensagem de resultado -->
<div id="mensagem"></div>
<div style="margin-top:5px;"> <a href="https://marketing.fametro.edu.br/front/lostpassword.php?lostpassword=1">Esqueceu a senha?</a></div>
</form>
<?php
// Incluir o arquivo conexao.php
include("conexao.php");
if (isset($_POST["submit"])) {
// Verificar se os dados do formulário foram enviados
if (isset($_POST["email"]) && isset($_POST["nome"]) && isset($_POST["sobrenome"]) && isset($_POST["usuario"]) && isset($_POST["senha"]) && isset($_POST["confirmacao"]) && isset($_POST["categoria"]) && isset($_POST["entidade"])&& isset($_POST["setor"])) {
// Obter os dados do formulário
$email = $_POST["email"];
$nome = $_POST["nome"];
$sobrenome = $_POST["sobrenome"];
$usuario = $_POST["usuario"];
$senha = $_POST["senha"];
$confirmacao = $_POST["confirmacao"];
$categoria = $_POST["categoria"];
$entidade = $_POST["entidade"];
$setor = $_POST["setor"];
// Verificar se o email ou o usuário já existem no banco de dados
$sql = "SELECT u.id FROM glpi_users u JOIN glpi_useremails e ON u.id = e.users_id WHERE e.email = '$email' OR u.name = '$usuario'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// O email ou o usuário já existem, mostrar uma mensagem de erro
echo "<style>#mensagem {margin-top:5px; background-color: #f0f0f0; padding: 10px; border-radius: 5px; color: red;}</style>";
echo "<script>document.getElementById('mensagem').innerHTML = 'Esse email ou usuário já estão cadastrados.';</script>";
} else {
// O email e o usuário não existem
//verificar se o domínio do email está nos cadastros da tabela glpi_entities na coluna mail_domain
// Extrair o domínio do email
$dominio = substr($email, strpos($email, "@") + 1);
// Verificar se o domínio existe na tabela glpi_entities
$sql = "SELECT id FROM glpi_entities WHERE mail_domain LIKE '%$dominio%'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// O domínio existe na tabela glpi_entities,
//verificar se as senhas são iguais
if ($senha == $confirmacao) {
// As senhas são iguais, criptografar a senha usando a função password_hash
$senha_criptografada = password_hash($senha, PASSWORD_DEFAULT);
// Fazer uma consulta na tabela glpi_profiles para obter o id da função Self-Service
$sql = "SELECT id FROM glpi_profiles WHERE name = 'Self-Service'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// A função Self-Service existe, obter o id
$row = $result->fetch_assoc();
$profile_id = $row["id"];
// Inserir os dados na tabela glpi_users com a senha criptografada, os parâmetros categoria e entidade e o profile_id
$sql = "INSERT INTO glpi_users (name, password, realname, firstname, locations_id, authtype, usercategories_id, entities_id, profiles_id) VALUES ('$usuario', '$senha_criptografada', '$nome', '$sobrenome', '$setor', '1','$categoria', '$entidade', '$profile_id')";
if ($conn->query($sql) === TRUE) {
// Os dados foram inseridos com sucesso, obter o id do usuário inserido
$user_id = $conn->insert_id;
// Inserir o email na tabela glpi_useremails
$sql = "INSERT INTO glpi_useremails (users_id, is_default, is_dynamic, email) VALUES ('$user_id', '1', '0' , '$email')";
if ($conn->query($sql) === TRUE) {
// O email foi inserido com sucesso, atribuir a autorização Self-Service ao usuário na tabela glpi_profiles_users usando o id obtido
$sql = "INSERT INTO glpi_profiles_users (users_id, profiles_id, entities_id, is_recursive ) VALUES ('$user_id', '$profile_id', '$entidade', '1')";
if ($conn->query($sql) === TRUE) {
// A autorização foi atribuída com sucesso, mostrar uma mensagem de confirmação
echo "<style>#mensagem {margin-top:5px; background-color: #f0f0f0; padding: 10px; border-radius: 5px; color: green;}</style>";
echo "<script>document.getElementById('mensagem').innerHTML = 'Usuário cadastrado e autorizado com sucesso.';</script>";
} else {
// Houve um erro ao atribuir a autorização, mostrar uma mensagem de erro
echo "<style>#mensagem {margin-top:5px; background-color: #f0f0f0; padding: 10px; border-radius: 5px; color: red;}</style>";
echo "<script>document.getElementById('mensagem').innerHTML = 'Erro ao atribuir autorização: " . $conn->error . "';</script>";
}
} else {
// Houve um erro ao inserir o email, mostrar uma mensagem de erro
echo "<style>#mensagem {margin-top:5px; background-color: #f0f0f0; padding: 10px; border-radius: 5px; color: red;}</style>";
echo "<script>document.getElementById('mensagem').innerHTML = 'Erro ao cadastrar email: " . $conn->error . "';</script>";
}
} else {
// Houve um erro ao inserir os dados na tabela glpi_users, mostrar uma mensagem de erro
echo "<style>#mensagem {margin-top:5px; background-color: #f0f0f0; padding: 10px; border-radius: 5px; color: red;}</style>";
echo "<script>document.getElementById('mensagem').innerHTML = 'Erro ao cadastrar usuário: " . $conn->error . "';</script>";
}
} else {
// A função Self-Service não existe, mostrar uma mensagem de erro
echo "<style>#mensagem {margin-top:5px; background-color: #f0f0f0; padding: 10px; border-radius: 5px; color: red;}</style>";
echo "<script>document.getElementById('mensagem').innerHTML = 'A função Self-Service não foi encontrada.';</script>";
}
} else {
// As senhas não são iguais, mostrar uma mensagem de erro
echo "<style>#mensagem {margin-top:5px; background-color: #f0f0f0; padding: 10px; border-radius: 5px; color: red;}</style>";
echo "<script>document.getElementById('mensagem').innerHTML = 'As senhas não conferem.';</script>";
}
} else {
// O domínio não existe na tabela glpi_entities, mostrar uma mensagem de erro
echo "<style>#mensagem {margin-top:5px; background-color: #f0f0f0; padding: 10px; border-radius: 5px; color: red;}</style>";
echo "<script>document.getElementById('mensagem').innerHTML = 'Esse domínio de e-mail não está autorizado, é permitido cadastro somente de e-mail institucional.';</script>";
}
}
} else {
// Os dados do formulário não foram enviados, mostrar uma mensagem de erro
echo "<style>#mensagem {margin-top:5px; background-color: #f0f0f0; padding: 10px; border-radius: 5px; color: red;}</style>";
echo "<script>document.getElementById('mensagem').innerHTML = 'Por favor, preencha todos os campos do formulário.';</script>";
}
}
// Fechar a conexão com o banco de dados
$conn->close();
?>
</body>
</html>
4. Monitoramento e Relatórios: Além do auto cadastro, o PEDEaí oferece uma visão geral dos atendentes e suas funções através de uma interface dedicada, reforçando a transparência e o controle sobre o fluxo de trabalho.
5. Impacto e Resultados: Com mais de 1600 chamados, 13 empresas cadastradas e mais de 21 mil movimentações, o PEDEaí não apenas otimiza o processo de atendimento, mas também promove uma cultura de autoatendimento e responsabilidade entre os colaboradores.
A criação de um formulário de cadastro simplificado é um exemplo de como o projeto facilita a vida dos demandantes, permitindo que eles registrem suas solicitações de maneira rápida e descomplicada.
Conclusão:
O projeto PEDEaí é um exemplo brilhante de como a tecnologia pode ser aplicada para melhorar a eficiência e a autonomia em ambientes corporativos. Através da implementação do sistema de auto cadastro GLPI, o grupo Fametro estabeleceu um novo padrão para o gerenciamento de demandas de marketing, proporcionando aos funcionários as ferramentas necessárias para um controle mais ágil e preciso de suas atividades.
Este avanço não só reflete o compromisso da Fametro com a inovação, mas também destaca a importância de adaptar soluções tecnológicas para atender às necessidades específicas de uma equipe dinâmica. Com o PEDEaí, o grupo Fametro não apenas simplifica processos internos, mas também abre caminho para futuras melhorias e desenvolvimentos no campo do marketing educacional.
0 Comentários