'error',
'message' => 'Método no permitido. Solo se aceptan peticiones POST.'
]);
exit;
}
// Función de sanitización
function sanitize_input($data) {
if (is_array($data)) {
return array_map('sanitize_input', $data);
}
$data = trim($data);
$data = stripslashes($data);
return htmlspecialchars($data, ENT_QUOTES, 'UTF-8');
}
// Obtener datos (soporta tanto multipart/form-data o json)
$contentType = isset($_SERVER["CONTENT_TYPE"]) ? trim($_SERVER["CONTENT_TYPE"]) : '';
if (strpos($contentType, 'application/json') !== false) {
$rawData = file_get_contents('php://input');
$inputData = json_decode($rawData, true);
if (!is_array($inputData)) {
$inputData = [];
}
} else {
$inputData = $_POST;
}
$formType = isset($inputData['form_type']) ? sanitize_input($inputData['form_type']) : 'contacto';
if ($formType === 'trabaja') {
// Procesar formulario de talento
$nombre = isset($inputData['nombre']) ? sanitize_input($inputData['nombre']) : '';
$email = isset($inputData['email']) ? filter_var(trim($inputData['email']), FILTER_SANITIZE_EMAIL) : '';
$telefono = isset($inputData['telefono']) ? sanitize_input($inputData['telefono']) : '';
$area = isset($inputData['area']) ? sanitize_input($inputData['area']) : '';
$linkedin = isset($inputData['linkedin']) ? sanitize_input($inputData['linkedin']) : '';
$mensaje = isset($inputData['mensaje']) ? sanitize_input($inputData['mensaje']) : '';
if (empty($nombre) || empty($email) || !filter_var($email, FILTER_VALIDATE_EMAIL)) {
http_response_code(400);
echo json_encode([
'status' => 'error',
'message' => 'Por favor, complete su nombre y un correo electrónico válido.'
]);
exit;
}
$destinatario = CAREERS_EMAIL;
$asunto = DEFAULT_SUBJECT_CAREERS . " - " . $nombre;
$cuerpoHtml = "
Nueva Postulación
Nueva Postulación Laboral - IDE Consultores
Nombre: {$nombre}
Email: {$email}
Teléfono: {$telefono}
Área de interés: {$area}
Perfil de LinkedIn / CV Link: {$linkedin}
Presentación:
{$mensaje}
";
} else {
// Procesar formulario de contacto comercial / diagnósticos
$nombre = isset($inputData['nombre']) ? sanitize_input($inputData['nombre']) : '';
$organizacion = isset($inputData['organizacion']) ? sanitize_input($inputData['organizacion']) : '';
$rol = isset($inputData['rol']) ? sanitize_input($inputData['rol']) : '';
$email = isset($inputData['email']) ? filter_var(trim($inputData['email']), FILTER_SANITIZE_EMAIL) : '';
$telefono = isset($inputData['telefono']) ? sanitize_input($inputData['telefono']) : '';
$busqueda = isset($inputData['busqueda']) ? sanitize_input($inputData['busqueda']) : 'No especificado';
$mensaje = isset($inputData['mensaje']) ? sanitize_input($inputData['mensaje']) : '';
$origen = isset($inputData['origen']) ? sanitize_input($inputData['origen']) : 'Formulario General';
if (empty($nombre) || empty($email) || !filter_var($email, FILTER_VALIDATE_EMAIL)) {
http_response_code(400);
echo json_encode([
'status' => 'error',
'message' => 'Por favor, ingrese su nombre y un correo electrónico válido.'
]);
exit;
}
$destinatario = RECIPIENT_EMAIL;
$asunto = DEFAULT_SUBJECT_CONTACT . " - " . ($organizacion ? "{$organizacion} ({$nombre})" : $nombre);
$cuerpoHtml = "
Nueva Consulta Comercial
Nueva Consulta - IDE Consultores
Origen: {$origen}
Nombre completo: {$nombre}
Organización / Empresa: {$organizacion}
Rol / Cargo: {$rol}
Email de contacto: {$email}
Teléfono: {$telefono}
Motivo / Qué está buscando: {$busqueda}
Detalle o mensaje del desafío:
" . nl2br($mensaje) . "
Enviado desde el sitio web institucional de IDE Consultores.
";
}
// Cabeceras de correo seguras
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=UTF-8\r\n";
$headers .= "From: " . SENDER_NAME . " <" . SENDER_EMAIL . ">\r\n";
$headers .= "Reply-To: {$nombre} <{$email}>\r\n";
$headers .= "X-Mailer: PHP/" . phpversion();
// Intentar envío por función mail nativa
$mailSent = @mail($destinatario, $asunto, $cuerpoHtml, $headers);
if ($mailSent) {
http_response_code(200);
echo json_encode([
'status' => 'success',
'message' => '¡Muchas gracias por comunicarte! Tu mensaje ha sido recibido con éxito. Nos pondremos en contacto a la brevedad.'
]);
} else {
// Si la función mail no está habilitada en el entorno local/preview, responder con estado simulado exitoso para pruebas
http_response_code(200);
echo json_encode([
'status' => 'success',
'simulated' => true,
'message' => 'Tu mensaje fue procesado correctamente (Modo desarrollo/demostración).'
]);
}