Ultima atualizacion

This commit is contained in:
Luis.Aguilar 2025-05-16 22:46:53 -06:00
parent 78b55b09c2
commit fcc62cbd5a
8 changed files with 1 additions and 1630 deletions

View File

@ -4,17 +4,12 @@ require '../includes/config.php';
if (!is_logged_in()) {
http_response_code(401);
<<<<<<< HEAD
echo json_encode(['success' => false, 'error' => 'No autenticado']);
=======
echo json_encode(['error' => 'No autenticado']);
>>>>>>> 49de6961bd992546ae0f304455a00253989884a2
exit;
}
$method = $_SERVER['REQUEST_METHOD'];
<<<<<<< HEAD
try {
switch ($method) {
case 'GET':
@ -41,38 +36,6 @@ try {
exit;
}
=======
switch ($method) {
case 'GET':
try {
$stmt = $pdo->query("
SELECT a.*,
GROUP_CONCAT(ac.curso_id) AS cursos
FROM alumnos a
LEFT JOIN alumnos_cursos ac ON a.id = ac.alumno_id
GROUP BY a.id
");
$alumnos = $stmt->fetchAll();
// Convertir cursos a array
foreach ($alumnos as &$alumno) {
$alumno['cursos'] = $alumno['cursos'] ? explode(',', $alumno['cursos']) : [];
}
echo json_encode($alumnos);
} catch (PDOException $e) {
http_response_code(500);
echo json_encode(['error' => 'Error al cargar alumnos']);
}
break;
case 'POST':
$data = json_decode(file_get_contents('php://input'), true);
try {
>>>>>>> 49de6961bd992546ae0f304455a00253989884a2
$stmt = $pdo->prepare("
INSERT INTO alumnos (nombre, email, telefono)
VALUES (?, ?, ?)
@ -83,7 +46,6 @@ switch ($method) {
$data['telefono'] ?? null
]);
<<<<<<< HEAD
echo json_encode([
'success' => true,
'id' => $pdo->lastInsertId(),
@ -155,17 +117,5 @@ switch ($method) {
} catch (PDOException $e) {
http_response_code(500);
echo json_encode(['success' => false, 'error' => 'Error en la base de datos: ' . $e->getMessage()]);
=======
echo json_encode(['success' => true, 'id' => $pdo->lastInsertId()]);
} catch (PDOException $e) {
http_response_code(500);
echo json_encode(['error' => 'Error al crear alumno: ' . $e->getMessage()]);
}
break;
default:
http_response_code(405);
echo json_encode(['error' => 'Método no permitido']);
>>>>>>> 49de6961bd992546ae0f304455a00253989884a2
}
?>

View File

@ -9,7 +9,6 @@ if (!is_logged_in()) {
}
$method = $_SERVER['REQUEST_METHOD'];
<<<<<<< HEAD
$profesorId = $_SESSION['profesor']['id'];
switch ($method) {
@ -23,55 +22,11 @@ switch ($method) {
http_response_code(500);
echo json_encode(['error' => 'Error al cargar cursos']);
}
=======
<<<<<<< HEAD
$profesorId = $_SESSION['profesor']['id'] ?? null;
switch ($method) {
case 'GET':
try {
$query = "
SELECT
c.*,
COUNT(ac.id) AS alumnos_count,
u.nombre AS profesor_nombre
FROM cursos c
LEFT JOIN alumnos_cursos ac ON c.id = ac.curso_id
LEFT JOIN usuarios u ON c.profesor_id = u.id
";
$params = [];
if (isset($_GET['profesor_id'])) {
$query .= " WHERE c.profesor_id = ?";
$params[] = $_GET['profesor_id'];
}
$query .= " GROUP BY c.id ORDER BY c.estado, c.nombre";
$stmt = $pdo->prepare($query);
$stmt->execute($params);
echo json_encode($stmt->fetchAll());
} catch (PDOException $e) {
http_response_code(500);
echo json_encode(['error' => 'Error al cargar cursos: ' . $e->getMessage()]);
}
=======
switch ($method) {
case 'GET':
$stmt = $pdo->query("SELECT * FROM cursos");
echo json_encode($stmt->fetchAll());
>>>>>>> 29e8458d422ce8fe12442f0a06a68c543f23b8b3
>>>>>>> 49de6961bd992546ae0f304455a00253989884a2
break;
case 'POST':
$data = json_decode(file_get_contents('php://input'), true);
<<<<<<< HEAD
if (empty($data['nombre']) || empty($data['tipo'])) {
http_response_code(400);
echo json_encode(['error' => 'Nombre y tipo son requeridos']);
@ -167,69 +122,6 @@ switch ($method) {
http_response_code(500);
echo json_encode(['error' => 'Error al eliminar curso']);
}
=======
<<<<<<< HEAD
try {
$stmt = $pdo->prepare("
INSERT INTO cursos (nombre, descripcion, tipo, estado, profesor_id)
VALUES (?, ?, ?, 'activo', ?)
");
$stmt->execute([
$data['nombre'],
$data['descripcion'] ?? null,
$data['tipo'],
$profesorId
]);
echo json_encode(['success' => true, 'id' => $pdo->lastInsertId()]);
} catch (PDOException $e) {
http_response_code(500);
echo json_encode(['error' => 'Error al crear curso: ' . $e->getMessage()]);
}
break;
case 'DELETE':
$id = $_GET['id'] ?? null;
if (!$id) {
http_response_code(400);
echo json_encode(['error' => 'ID de curso no proporcionado']);
exit;
}
try {
// Verificar que el curso pertenece al profesor
if ($profesorId) {
$stmt = $pdo->prepare("SELECT id FROM cursos WHERE id = ? AND profesor_id = ?");
$stmt->execute([$id, $profesorId]);
if (!$stmt->fetch()) {
http_response_code(403);
echo json_encode(['error' => 'No autorizado']);
exit;
}
}
$stmt = $pdo->prepare("DELETE FROM cursos WHERE id = ?");
$stmt->execute([$id]);
echo json_encode(['success' => true]);
} catch (PDOException $e) {
http_response_code(500);
echo json_encode(['error' => 'Error al eliminar curso: ' . $e->getMessage()]);
}
=======
$stmt = $pdo->prepare("
INSERT INTO cursos (nombre, tipo, competencias)
VALUES (?, ?, ?)
");
$stmt->execute([
$data['nombre'],
$data['tipo'],
$data['competencias'] ?? null
]);
echo json_encode(['success' => true, 'id' => $pdo->lastInsertId()]);
>>>>>>> 29e8458d422ce8fe12442f0a06a68c543f23b8b3
>>>>>>> 49de6961bd992546ae0f304455a00253989884a2
break;
default:

View File

@ -7,42 +7,11 @@ if (!is_logged_in()) {
echo json_encode(['error' => 'No autenticado']);
exit;
}
<<<<<<< HEAD
try {
$profesorId = $_GET['profesor_id'] ?? null;
$query = "
SELECT d.*, a.nombre AS alumno_nombre, c.nombre AS curso_nombre
=======
try {
$profesorId = $_SESSION['profesor']['id'] ?? null;
$action = $_GET['action'] ?? null;
if ($action === 'resend') {
// Lógica para reenviar diploma
$codigo = $_GET['codigo'] ?? null;
if (!$codigo) {
throw new Exception('Código de diploma no proporcionado');
}
// Aquí iría la lógica para reenviar el diploma por email
echo json_encode(['success' => true, 'message' => 'Diploma reenviado']);
exit;
}
$query = "
SELECT
d.id,
d.codigo_unico,
d.fecha_emision,
a.nombre AS alumno_nombre,
a.email AS alumno_email,
c.nombre AS curso_nombre,
c.tipo AS curso_tipo,
c.id AS curso_id,
DATE_FORMAT(d.fecha_emision, '%d/%m/%Y') AS fecha_formateada
>>>>>>> 49de6961bd992546ae0f304455a00253989884a2
FROM diplomas d
JOIN alumnos_cursos ac ON d.alumno_curso_id = ac.id
JOIN alumnos a ON ac.alumno_id = a.id
@ -50,10 +19,6 @@ try {
";
$params = [];
<<<<<<< HEAD
=======
>>>>>>> 49de6961bd992546ae0f304455a00253989884a2
if ($profesorId) {
$query .= " WHERE c.profesor_id = ?";
$params[] = $profesorId;
@ -66,16 +31,6 @@ try {
$diplomas = $stmt->fetchAll();
<<<<<<< HEAD
=======
// Asegurar que todos los diplomas tengan código único
foreach ($diplomas as &$diploma) {
if (empty($diploma['codigo_unico'])) {
$diploma['codigo_unico'] = 'DIPL-' . str_pad($diploma['id'], 6, '0', STR_PAD_LEFT);
}
}
>>>>>>> 49de6961bd992546ae0f304455a00253989884a2
echo json_encode([
'success' => true,
'data' => $diplomas,
@ -84,13 +39,6 @@ try {
} catch (Exception $e) {
http_response_code(500);
<<<<<<< HEAD
echo json_encode(['success' => false, 'error' => $e->getMessage()]);
=======
echo json_encode([
'success' => false,
'error' => $e->getMessage()
]);
>>>>>>> 49de6961bd992546ae0f304455a00253989884a2
}
?>

View File

@ -43,21 +43,11 @@ try {
];
echo json_encode([
<<<<<<< HEAD
'success' => true,
'redirect' => 'dashboard.php',
'profesor_id' => $profesor['id']
]);
=======
'success' => true,
'redirect' => 'dashboard.php',
'profesor' => [
'id' => $profesor['id'],
'nombre' => $profesor['nombre']
]
]);
>>>>>>> 49de6961bd992546ae0f304455a00253989884a2
} catch (PDOException $e) {
error_log('Error en login.php: ' . $e->getMessage());

View File

@ -584,87 +584,17 @@ header h1 {
color: white;
}
<<<<<<< HEAD
.badge.type-inyeccion {
background-color: #2196f3;
=======
<<<<<<< HEAD
#user-info {
order: 1;
display: flex;
align-items: center;
gap: 1rem;
}
/* Estilos para el enlace de cerrar sesión */
.logout-link {
color: #333;
text-decoration: none;
padding: 0.75rem 1rem;
display: block;
transition: all 0.2s ease;
}
.logout-link:hover {
color: #e53e3e;
background-color: #fee2e2;
}
/* Estilos para la columna de acciones */
.courses-table td:last-child {
text-align: center;
}
.download-btn {
padding: 0.4rem 0.8rem;
font-size: 0.9rem;
background-color: #38a169;
}
.download-btn:hover {
background-color: #2f855a;
}
.download-btn:disabled {
background-color: #a0aec0;
cursor: not-allowed;
}
/* Badges para tipos de curso */
.badge {
padding: 4px 8px;
border-radius: 12px;
font-size: 0.8em;
font-weight: 600;
text-transform: capitalize;
}
.badge.active {
background-color: #4CAF50;
color: white;
}
.badge.inactive {
background-color: #f44336;
color: white;
}
.badge.type-inyeccion {
background-color: #2196F3;
>>>>>>> 49de6961bd992546ae0f304455a00253989884a2
color: white;
}
.badge.type-pildora {
<<<<<<< HEAD
background-color: #ff9800;
=======
background-color: #FF9800;
>>>>>>> 49de6961bd992546ae0f304455a00253989884a2
color: white;
}
.badge.type-tratamiento {
<<<<<<< HEAD
background-color: #9c27b0;
color: white;
}
@ -1030,14 +960,3 @@ textarea {
font-size: 0.85rem;
font-weight: 500;
}
=======
background-color: #9C27B0;
color: white;
}
=======
.badge.tratamiento {
background-color: #E0E7FF;
color: #3730A3;
}
>>>>>>> 29e8458d422ce8fe12442f0a06a68c543f23b8b3
>>>>>>> 49de6961bd992546ae0f304455a00253989884a2

File diff suppressed because it is too large Load Diff

View File

@ -2,7 +2,6 @@
include 'includes/config.php';
redirect_if_not_logged_in();
<<<<<<< HEAD
$profesor = $_SESSION['profesor'];
@ -33,9 +32,6 @@ $stmt = $pdo->prepare("
");
$stmt->execute([$profesor['id']]);
$diplomas_emitidos = $stmt->fetch()['total'];
=======
$profesor = $_SESSION['profesor'];
>>>>>>> 49de6961bd992546ae0f304455a00253989884a2
?>
<!DOCTYPE html>
<html lang="es">
@ -45,7 +41,6 @@ $profesor = $_SESSION['profesor'];
<title>DiploMaster - Panel</title>
<link rel="stylesheet" href="assets/css/styles.css">
</head>
<<<<<<< HEAD
<body class="admin">
<div id="app-content">
<header>
@ -55,41 +50,15 @@ $profesor = $_SESSION['profesor'];
<span><?= htmlspecialchars($profesor['nombre']) ?></span>
</div>
=======
<<<<<<< HEAD
<body class="admin">
=======
<body>
>>>>>>> 29e8458d422ce8fe12442f0a06a68c543f23b8b3
<div id="app-content">
<header>
<h1>DiploMaster</h1>
<div id="profesor-info">
<span id="current-profesor"><?= htmlspecialchars($profesor['nombre']) ?></span>
</div>
>>>>>>> 49de6961bd992546ae0f304455a00253989884a2
</header>
<div class="main-container">
<div class="sidebar" id="sidebar">
<ul class="sidebar-menu">
<<<<<<< HEAD
=======
<<<<<<< HEAD
>>>>>>> 49de6961bd992546ae0f304455a00253989884a2
<li class="active" data-section="dashboard"><span>🏠 Inicio</span></li>
<li data-section="courses"><span>📚 Mis Cursos</span></li>
<li data-section="students"><span>👨‍🎓 Gestión de Alumnos</span></li>
<li data-section="diplomas"><span>🎓 Diplomas Emitidos</span></li>
<<<<<<< HEAD
=======
=======
<li class="active" data-section="dashboard"><span>Inicio</span></li>
<li data-section="courses"><span>Gestión de Cursos</span></li>
<li data-section="students"><span>Gestión de Estudiantes</span></li>
<li data-section="diplomas"><span>Diplomas</span></li>
>>>>>>> 29e8458d422ce8fe12442f0a06a68c543f23b8b3
>>>>>>> 49de6961bd992546ae0f304455a00253989884a2
<li><a href="api/logout.php" class="logout-link">Cerrar sesión</a></li>
</ul>
</div>
@ -97,7 +66,6 @@ $profesor = $_SESSION['profesor'];
<div class="content" id="main-content">
<div id="dashboard-content" class="content-section active">
<div class="card">
<<<<<<< HEAD
<h2>Bienvenido <?= htmlspecialchars($profesor['nombre']) ?></h2>
<p>Este es tu panel de gestión de DiploMaster</p>
<div class="stats">
@ -105,24 +73,6 @@ $profesor = $_SESSION['profesor'];
<p> <span id="active-courses-count"><?= $cursos_activos ?></span> cursos activos</p>
<p> <span id="students-count"><?= $alumnos_registrados ?></span> alumnos registrados</p>
<p> <span id="diplomas-count"><?= $diplomas_emitidos ?></span> diplomas emitidos</p>
=======
<<<<<<< HEAD
<h2>Bienvenido <?= htmlspecialchars($profesor['nombre']) ?></h2>
<p>Este es tu panel de gestión de DiploMaster</p>
<div class="stats">
<p><strong>Resumen:</strong></p>
<p> <span id="active-courses-count">0</span> cursos activos</p>
<p> <span id="students-count">0</span> alumnos registrados</p>
=======
<h2>Panel de Administración</h2>
<p>Bienvenido al sistema de gestión de DiploMaster</p>
<div class="stats">
<p><strong>Estadísticas:</strong></p>
<p> <span id="active-courses-count">0</span> cursos activos</p>
<p> <span id="students-count">0</span> estudiantes registrados</p>
>>>>>>> 29e8458d422ce8fe12442f0a06a68c543f23b8b3
<p> <span id="diplomas-count">0</span> diplomas emitidos</p>
>>>>>>> 49de6961bd992546ae0f304455a00253989884a2
</div>
</div>
</div>

View File

@ -1,63 +1,18 @@
<<<<<<< HEAD
-- Crear la base de datos
CREATE DATABASE IF NOT EXISTS diplomaster;
USE diplomaster;
=======
<<<<<<< HEAD
-- Crear la base de datos
CREATE DATABASE IF NOT EXISTS diplomaster;
USE diplomaster;
=======
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";
CREATE database diplomaster;
use diplomaster;
CREATE TABLE `cursos` (
`id` int(11) NOT NULL,
`nombre` varchar(100) NOT NULL,
`tipo` enum('pildora','inyeccion','tratamiento') NOT NULL,
`competencias` text DEFAULT NULL,
`fecha_creacion` timestamp NOT NULL DEFAULT current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
INSERT INTO `cursos` (`id`, `nombre`, `tipo`, `competencias`, `fecha_creacion`) VALUES
(1, 'Seguridad Informática', 'tratamiento', 'Análisis de datos, Comunicación efectiva', '2025-05-05 01:27:58'),
(2, 'Introducción a Python', 'pildora', NULL, '2025-05-05 01:27:58'),
(3, 'Machine Learning Avanzado', 'tratamiento', 'Modelado predictivo, Python', '2025-05-05 01:27:58');
>>>>>>> 29e8458d422ce8fe12442f0a06a68c543f23b8b3
>>>>>>> 49de6961bd992546ae0f304455a00253989884a2
-- Tabla de usuarios (profesores)
CREATE TABLE `usuarios` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`nombre` VARCHAR(100) NOT NULL,
`email` VARCHAR(100) UNIQUE NOT NULL,
`password` VARCHAR(255) NOT NULL,
<<<<<<< HEAD
`aprobado` BOOLEAN NOT NULL DEFAULT 1,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- Tabla de cursos
=======
`aprobado` BOOLEAN NOT NULL DEFAULT 0,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
<<<<<<< HEAD
-- Tabla de cursos (cada profesor crea sus cursos)
>>>>>>> 49de6961bd992546ae0f304455a00253989884a2
CREATE TABLE `cursos` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`nombre` VARCHAR(100) NOT NULL,
@ -65,25 +20,9 @@ CREATE TABLE `cursos` (
`estado` ENUM('activo', 'completado', 'archivado') NOT NULL DEFAULT 'activo',
`tipo` ENUM('inyeccion', 'pildora', 'tratamiento') NOT NULL,
`profesor_id` INT(11) NOT NULL,
<<<<<<< HEAD
PRIMARY KEY (`id`),
FOREIGN KEY (`profesor_id`) REFERENCES `usuarios`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
=======
FOREIGN KEY (`profesor_id`) REFERENCES `usuarios`(`id`) ON DELETE CASCADE,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
-- Tabla de alumnos
CREATE TABLE `alumnos` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`nombre` VARCHAR(100) NOT NULL,
`email` VARCHAR(100) UNIQUE NOT NULL,
`telefono` VARCHAR(15) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
=======
>>>>>>> 49de6961bd992546ae0f304455a00253989884a2
-- Tabla de alumnos
CREATE TABLE `alumnos` (
@ -127,73 +66,10 @@ INSERT INTO `alumnos` (`nombre`, `email`, `telefono`) VALUES
('Alumno Uno', 'alumno1@demo.com', '123456789'),
('Alumno Dos', 'alumno2@demo.com', '987654321');
<<<<<<< HEAD
INSERT INTO `alumnos_cursos` (`alumno_id`, `curso_id`, `estado`) VALUES
(1, 1, 'aprobado'),
(2, 1, 'cursando'),
(1, 2, 'cursando');
INSERT INTO `diplomas` (`alumno_curso_id`, `codigo_unico`) VALUES
(1, 'DIPL-000001');
=======
>>>>>>> 29e8458d422ce8fe12442f0a06a68c543f23b8b3
-- Tabla para vincular alumnos con cursos
CREATE TABLE `alumnos_cursos` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`alumno_id` INT(11) NOT NULL,
`curso_id` INT(11) NOT NULL,
`estado` ENUM('cursando', 'aprobado', 'reprobado') NOT NULL DEFAULT 'cursando',
`competencias` TEXT DEFAULT NULL, -- Solo para tratamiento
FOREIGN KEY (`alumno_id`) REFERENCES `alumnos`(`id`) ON DELETE CASCADE,
FOREIGN KEY (`curso_id`) REFERENCES `cursos`(`id`) ON DELETE CASCADE,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
<<<<<<< HEAD
-- Tabla de diplomas
CREATE TABLE `diplomas` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`alumno_curso_id` INT(11) NOT NULL,
`fecha_emision` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`competencias` TEXT DEFAULT NULL,
FOREIGN KEY (`alumno_curso_id`) REFERENCES `alumnos_cursos`(`id`) ON DELETE CASCADE,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
=======
ALTER TABLE `cursos`
ADD PRIMARY KEY (`id`);
ALTER TABLE `usuarios`
ADD PRIMARY KEY (`id`),
ADD UNIQUE KEY `username` (`username`),
ADD UNIQUE KEY `email` (`email`);
ALTER TABLE `usuario_cursos`
ADD PRIMARY KEY (`id`),
ADD KEY `usuario_id` (`usuario_id`),
ADD KEY `curso_id` (`curso_id`);
ALTER TABLE `cursos`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4;
ALTER TABLE `usuarios`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3;
ALTER TABLE `usuario_cursos`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3;
ALTER TABLE `usuario_cursos`
ADD CONSTRAINT `usuario_cursos_ibfk_1` FOREIGN KEY (`usuario_id`) REFERENCES `usuarios` (`id`),
ADD CONSTRAINT `usuario_cursos_ibfk_2` FOREIGN KEY (`curso_id`) REFERENCES `cursos` (`id`);
COMMIT;
>>>>>>> 29e8458d422ce8fe12442f0a06a68c543f23b8b3
>>>>>>> 49de6961bd992546ae0f304455a00253989884a2
(1, 'DIPL-000001');