Sistema de Bolsa de Trabajo
El sistema es una plataforma de Bolsa de Trabajo diseñada para conectar a profesionales (candidatos) que buscan empleo con administradores o reclutadores. Permite a los candidatos registrarse, construir un perfil profesional detallado (incluyendo datos personales, formación, experiencia y documentos de respaldo) y a los administradores gestionar, valorar y contactar a estos candidatos.
La aplicación sigue una arquitectura web clásica basada en PHP y MySQL. La lógica se divide en tres componentes principales:
index.php
): Punto de entrada para el registro y acceso de usuarios.perfil.php
): Área privada donde los candidatos gestionan toda la información de su perfil una vez que inician sesión.admin_postulaciones.php
): Interfaz protegida por contraseña para la gestión, visualización y comunicación con los candidatos registrados.El sistema utiliza sesiones de PHP ($_SESSION
) para manejar la autenticación de usuarios y mantener el estado entre las diferentes páginas.
index.php
y completa el formulario de registro.bolsa_usuarios_temp
con un código de verificación y una fecha de expiración.enviarCorreoVerificacion()
).bolsa_usuarios_temp
.bolsa_usuarios
y un perfil básico en bolsa_perfiles_profesionales
, y elimina el registro temporal.index.php
, lo que crea una sesión ($_SESSION['bolsa_id']
).perfil.php
, que actúa como un panel de control con pestañas.perfil.php
(usando POST) y se ejecutan las sentencias INSERT
o UPDATE
en las tablas correspondientes.admin_postulaciones.php
e ingresa una clave de acceso (hardcodeada en el script).verificar_perfil.php
, donde se genera un correo para notificar al usuario sobre el estado de su perfil (completo o incompleto).bolsa_valoraciones
a través de guardar_valoracion.php
.cambiar_estado.php
.Basado en el análisis de los archivos, la estructura de directorios del proyecto es la siguiente:
uploads/perfiles/
. El script genera un nombre de archivo único para cada foto.uploads/documentos/
, también con nombres de archivo únicos para evitar conflictos.El corazón del sistema es su base de datos. A continuación se detallan las tablas, sus campos y el propósito de cada uno dentro del flujo de la aplicación.
bolsa_usuarios
Almacena la información fundamental de cada cuenta de usuario.
Campo | Tipo | Descripción y Objetivo |
---|---|---|
id | INT | Identificador único para cada usuario. |
email | VARCHAR | Correo electrónico del usuario. Se usa para el login y es un campo único. |
password | VARCHAR | Contraseña del usuario, almacenada de forma segura usando password_hash() . |
nombre_completo | VARCHAR | Nombre completo del usuario. |
telefono | VARCHAR | Número de teléfono de contacto. |
rut | VARCHAR | RUT del usuario, para identificación local. |
fecha_registro | DATETIME | Fecha y hora en que se creó la cuenta. |
ultimo_acceso | DATETIME | Registra la última vez que el usuario inició sesión. |
estado | ENUM | Define el estado de la cuenta: 'activo', 'inactivo', 'pendiente'. Es gestionado por el administrador. |
tipo_usuario | ENUM | Define el rol del usuario: 'profesional', 'empresa', 'admin'. |
bolsa_perfiles_profesionales
Contiene la información detallada que complementa el perfil de un profesional.
Campo | Tipo | Descripción y Objetivo |
---|---|---|
id_usuario | INT | Vincula este perfil con un registro en bolsa_usuarios . |
fecha_nacimiento , direccion , comuna , ciudad , region | DATE/VARCHAR | Datos demográficos y de ubicación del profesional. |
profesion , titulo | VARCHAR | Campos para la profesión y título oficial. Clave para búsquedas. |
resumen | TEXT | Un párrafo extenso donde el candidato describe sus habilidades y experiencia. |
aspiracion_salarial | INT | Expectativa de sueldo del candidato. |
disponibilidad | ENUM | Indica la disponibilidad del candidato ('inmediata', 'plazo', 'a definir'). |
foto_perfil , linkedin , sitio_web | VARCHAR | Almacenan las rutas a la foto y enlaces a perfiles externos. |
bolsa_formacion_academica
y bolsa_experiencia_laboral
Tablas estructuradas para registrar el historial académico y laboral, respectivamente. Ambas se vinculan con id_usuario
y permiten añadir múltiples registros por cada candidato.
bolsa_documentos
Gestiona los archivos que los candidatos suben para respaldar su perfil.
Campo | Tipo | Descripción y Objetivo |
---|---|---|
id_usuario | INT | Vincula el documento al usuario propietario. |
tipo | ENUM | Clasifica el documento: 'cv', 'certificado', 'titulo', 'carta', 'otro'. |
nombre | VARCHAR | Nombre descriptivo que el usuario le da al archivo. |
ruta_archivo | VARCHAR | Guarda la ruta física del archivo en el servidor. |
bolsa_usuarios_temp
: Tabla de paso para el proceso de registro con verificación por correo.bolsa_envio_correo
: Un log de todos los correos enviados desde el sistema, útil para auditoría.bolsa_valoraciones
: Almacena las calificaciones y comentarios que los administradores asignan a los postulantes.El diseño visual se basa en los colores estándar de Bootstrap y una paleta personalizada visible en los componentes principales:
password_hash()
y password_verify()
, lo cual es una práctica segura y estándar para el manejo de contraseñas.$mysqli->real_escape_string()
en la mayoría de los casos para prevenir ataques de inyección SQL. Se recomienda estandarizar su uso o migrar a consultas preparadas para una seguridad aún mayor, como se ve en enviar_correo.php
.admin_postulaciones.php
) está hardcodeada en el archivo ($clave_acceso = "castillo2727"
). Esto es un riesgo de seguridad crítico. Se debe cambiar inmediatamente y, a futuro, implementar un sistema de roles desde la base de datos para los usuarios tipo 'admin'.uploads/perfiles/
y uploads/documentos/
para que la subida de archivos funcione correctamente.mail()
de PHP depende de la configuración del servidor. Para que el envío de correos de verificación funcione, el servidor debe estar configurado como un servidor de correo o tener un relay SMTP configurado en el `php.ini`.crea_sql.php
en el servidor. Este archivo verificará y creará todas las tablas necesarias para el funcionamiento del sistema.bolsa/
) y asegurarse de que las subcarpetas uploads/perfiles/
y uploads/documentos/
existan y tengan permisos de escritura.include/conecta_mysql.php
con las credenciales correctas de acceso a la base de datos (servidor, usuario, contraseña, nombre de la base de datos).admin_postulaciones.php
por una clave segura.