Skip to content

Commit 4f8b74a

Browse files
Alpha 1.0
O teste começa agora.
1 parent bf94916 commit 4f8b74a

File tree

14 files changed

+1245
-0
lines changed

14 files changed

+1245
-0
lines changed
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
-- DROP DATABASE CameraCruzamento;
2+
3+
CREATE DATABASE IF NOT EXISTS CameraCruzamento
4+
DEFAULT CHARACTER SET utf8mb4
5+
DEFAULT COLLATE utf8mb4_general_ci;
6+
7+
USE CameraCruzamento;
8+
9+
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
10+
START TRANSACTION;
11+
SET time_zone = "+00:00";
12+
13+
SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT;
14+
SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS;
15+
SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION;
16+
SET NAMES utf8mb4;
17+
18+
-- Usuários do sistema (Secretaria, Operador, etc.)
19+
CREATE TABLE Usuarios (
20+
id INT AUTO_INCREMENT PRIMARY KEY,
21+
nome VARCHAR(100) NOT NULL,
22+
email VARCHAR(100) NOT NULL UNIQUE,
23+
senha VARCHAR(255) NOT NULL,
24+
tipo ENUM('Secretaria', 'Operador') NOT NULL,
25+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
26+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
27+
) DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
28+
29+
-- Dispositivos (Câmeras)
30+
CREATE TABLE Dispositivos (
31+
id INT AUTO_INCREMENT PRIMARY KEY,
32+
nome VARCHAR(100) NOT NULL,
33+
id_ponto VARCHAR(50) NOT NULL,
34+
localizacao VARCHAR(255) NOT NULL, -- endereço ou coordenadas
35+
status ENUM('Ativo', 'Inativo', 'Manutenção') NOT NULL DEFAULT 'Ativo',
36+
observacao VARCHAR(255),
37+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
38+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
39+
) DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
40+
41+
-- Eventos detectados pelas câmeras
42+
CREATE TABLE Eventos_Cameras (
43+
id INT AUTO_INCREMENT PRIMARY KEY,
44+
id_camera INT NOT NULL,
45+
id_ponto VARCHAR(50) NOT NULL,
46+
timestamp DATETIME NOT NULL,
47+
tipo ENUM('carro', 'caminhao', 'moto', 'onibus', 'pedestre') NOT NULL,
48+
status_camera ENUM('em funcionamento', 'pouco alterado', 'muito alterado', 'desligado') NOT NULL,
49+
observacao VARCHAR(255),
50+
FOREIGN KEY (id_camera) REFERENCES Dispositivos(id)
51+
ON DELETE CASCADE
52+
ON UPDATE CASCADE
53+
) DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
54+
55+
COMMIT;
56+
57+
-- Exemplo de inserção de usuário
58+
INSERT INTO Usuarios (nome, email, senha, tipo) VALUES
59+
('Administrador', '[email protected]', '$2y$10$ul4Wr3Bqq2Cz1ElJtFua2e0Ku9cGVZxcP1yW8vdCKTbdu/7pnVqcq', 'Secretaria');
60+
61+
-- Exemplo de inserção de dispositivos
62+
INSERT INTO Dispositivos (nome, id_ponto, localizacao, status, observacao) VALUES
63+
('Câmera Cruzamento 1', 'P1', '-23.55052,-46.633308', 'Ativo', 'Cruzamento Av. Paulista x Rua Augusta'),
64+
('Câmera Cruzamento 2', 'P2', '-23.551234,-46.634567', 'Manutenção', 'Cruzamento Av. Brasil x Rua Bela Vista');
65+
66+
-- Exemplo de inserção de eventos
67+
INSERT INTO Eventos_Cameras (id_camera, id_ponto, timestamp, tipo, status_camera, observacao) VALUES
68+
(1, 'P1', '2025-10-01 14:23:00', 'carro', 'em funcionamento', 'Trânsito normal'),
69+
(2, 'P2', '2025-10-01 14:25:00', 'pedestre', 'pouco alterado', 'Movimento incomum detectado');
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?php if (session_status() === PHP_SESSION_NONE) session_start(); ?>
2+
<header class="w-full bg-blue-900 text-white py-4 px-6 flex justify-between items-center shadow-md fixed top-0 left-0 z-10">
3+
<div class="flex items-center space-x-2">
4+
<a href="menu.php" class="flex items-center space-x-2 hover:text-gray-300 transition">
5+
<i class="fa-solid fa-building-columns text-2xl"></i>
6+
<span class="font-bold text-lg">CORSA</span>
7+
</a>
8+
</div>
9+
<div class="flex items-center space-x-4">
10+
<?php if (isset($_SESSION['usuario_id'])): ?>
11+
<span class="hidden sm:inline">
12+
Olá, <?php echo htmlspecialchars($_SESSION['nome'] ?? $_SESSION['tipo'] ?? 'Usuário'); ?>
13+
</span>
14+
<form action="logout.php" method="post" class="inline">
15+
<button type="submit" class="bg-red-600 hover:bg-red-700 px-3 py-1 rounded text-white font-medium transition">Sair</button>
16+
</form>
17+
<?php endif; ?>
18+
</div>
19+
</header>

SinalizacaoCruzamento/cadastro.php

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
<?php
2+
include 'config.php';
3+
session_start();
4+
if (!isset($_SESSION['usuario_id'])) {
5+
header("Location: login.php");
6+
exit;
7+
}
8+
$mensagem = '';
9+
$mensagem_tipo = '';
10+
11+
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
12+
$nome = $_POST['nome'];
13+
$id_ponto = $_POST['id_ponto'];
14+
$localizacao = $_POST['localizacao'];
15+
$status = $_POST['status'];
16+
$observacao = $_POST['observacao'];
17+
18+
$sql = "INSERT INTO Dispositivos (nome, id_ponto, localizacao, status, observacao) VALUES (?, ?, ?, ?, ?)";
19+
$valores = [$nome, $id_ponto, $localizacao, $status, $observacao];
20+
21+
$stmt = $conn->prepare($sql);
22+
if ($stmt->execute($valores)) {
23+
$mensagem = "Dispositivo cadastrado com sucesso!";
24+
$mensagem_tipo = "sucesso";
25+
} else {
26+
$mensagem = "Erro ao cadastrar dispositivo: " . $stmt->errorInfo()[2];
27+
$mensagem_tipo = "erro";
28+
}
29+
}
30+
?>
31+
<!DOCTYPE html>
32+
<html lang="pt-BR">
33+
<head>
34+
<meta charset="UTF-8">
35+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
36+
<title>Cadastro de Dispositivo</title>
37+
<script src="https://cdn.tailwindcss.com"></script>
38+
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
39+
<link rel="stylesheet" href="estilo.css">
40+
</head>
41+
<body class="bg-gray-50 font-sans">
42+
<?php include 'cabecalho.php'; ?>
43+
<div class="w-full min-h-screen gradient-bg flex items-center justify-center p-4" style="padding-top: 88px;">
44+
<div class="bg-white rounded-xl shadow-2xl p-8 w-full max-w-2xl">
45+
<div class="text-center mb-8">
46+
<h1 class="text-2xl font-bold text-gray-800 mt-4">Cadastro de Dispositivo</h1>
47+
<p class="text-gray-600">Preencha os dados para cadastrar um novo dispositivo de monitoramento</p>
48+
</div>
49+
<?php if ($mensagem): ?>
50+
<div class="mb-4">
51+
<div class="<?php echo $mensagem_tipo === 'sucesso' ? 'bg-green-100 border border-green-400 text-green-700' : 'bg-red-100 border border-red-400 text-red-700'; ?> px-4 py-3 rounded relative text-center" role="alert">
52+
<?php echo $mensagem; ?>
53+
</div>
54+
</div>
55+
<?php if ($mensagem_tipo === 'sucesso'): ?>
56+
<script>
57+
setTimeout(() => { window.location.href = "menu.php"; }, 2000);
58+
</script>
59+
<?php endif; ?>
60+
<?php endif; ?>
61+
<form id="cadastro-dispositivo-form" class="space-y-6" method="POST" autocomplete="off">
62+
<div class="mb-4">
63+
<label for="nome" class="block text-sm font-medium text-gray-700">Nome do Dispositivo</label>
64+
<input type="text" id="nome" name="nome" required class="mt-1 block w-full border border-gray-300 rounded-md shadow-sm py-2 px-3 focus:outline-none focus:ring-blue-500 focus:border-blue-500">
65+
</div>
66+
<div class="mb-4">
67+
<label for="id_ponto" class="block text-sm font-medium text-gray-700">ID do Ponto</label>
68+
<input type="text" id="id_ponto" name="id_ponto" required class="mt-1 block w-full border border-gray-300 rounded-md shadow-sm py-2 px-3 focus:outline-none focus:ring-blue-500 focus:border-blue-500">
69+
</div>
70+
<div class="mb-4">
71+
<label for="localizacao" class="block text-sm font-medium text-gray-700">Localização (Endereço ou Coordenadas)</label>
72+
<input type="text" id="localizacao" name="localizacao" required class="mt-1 block w-full border border-gray-300 rounded-md shadow-sm py-2 px-3 focus:outline-none focus:ring-blue-500 focus:border-blue-500">
73+
</div>
74+
<div class="mb-4">
75+
<label for="status" class="block text-sm font-medium text-gray-700">Status</label>
76+
<select id="status" name="status" required class="mt-1 block w-full border border-gray-300 rounded-md shadow-sm py-2 px-3 focus:outline-none focus:ring-blue-500 focus:border-blue-500">
77+
<option value="Ativo">Ativo</option>
78+
<option value="Inativo">Inativo</option>
79+
<option value="Manutenção">Manutenção</option>
80+
</select>
81+
</div>
82+
<div class="mb-4">
83+
<label for="observacao" class="block text-sm font-medium text-gray-700">Observação</label>
84+
<textarea id="observacao" name="observacao" rows="2" class="mt-1 block w-full border border-gray-300 rounded-md shadow-sm py-2 px-3 focus:outline-none focus:ring-blue-500 focus:border-blue-500"></textarea>
85+
</div>
86+
<div class="flex flex-col sm:flex-row justify-end sm:space-x-2 space-y-2 sm:space-y-0">
87+
<a href="menu.php" class="w-full sm:w-auto inline-flex justify-center rounded-md border border-gray-300 shadow-sm px-4 py-2 bg-white text-base font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500">Cancelar</a>
88+
<button type="submit"
89+
class="w-full sm:w-auto inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-blue-600 text-base font-medium text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500">
90+
Cadastrar
91+
</button>
92+
</div>
93+
</form>
94+
</div>
95+
</div>
96+
</body>
97+
</html>
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"require": {
3+
"vlucas/phpdotenv": "^5.6"
4+
}
5+
}

0 commit comments

Comments
 (0)