136 lines
4.2 KiB
PHP
136 lines
4.2 KiB
PHP
<?php
|
|
require '../includes/config.php';
|
|
require '../fpdf/fpdf.php';
|
|
require '../fpdf/src/autoload.php';
|
|
require '../includes/mailer_config.php';
|
|
require '../vendor/autoload.php';
|
|
|
|
use setasign\Fpdi\Fpdi;
|
|
use PHPMailer\PHPMailer\Exception;
|
|
use Endroid\QrCode\Builder\Builder;
|
|
use Endroid\QrCode\Writer\PngWriter;
|
|
|
|
header('Content-Type: application/json');
|
|
|
|
$codigo = $_GET['codigo'] ?? null;
|
|
if (!$codigo) {
|
|
http_response_code(400);
|
|
echo json_encode(['success' => false, 'error' => 'Código no proporcionado']);
|
|
exit;
|
|
}
|
|
|
|
$stmt = $pdo->prepare("
|
|
SELECT
|
|
a.nombre AS alumno_nombre,
|
|
a.email AS alumno_email,
|
|
a.telefono AS alumno_telefono,
|
|
c.nombre AS curso_nombre,
|
|
c.tipo,
|
|
c.horas_trabajadas,
|
|
c.competencias,
|
|
d.fecha_emision
|
|
FROM diplomas d
|
|
JOIN alumnos_cursos ac ON d.alumno_curso_id = ac.id
|
|
JOIN alumnos a ON ac.alumno_id = a.id
|
|
JOIN cursos c ON ac.curso_id = c.id
|
|
WHERE d.codigo_unico = ?
|
|
");
|
|
$stmt->execute([$codigo]);
|
|
$diploma = $stmt->fetch(PDO::FETCH_ASSOC);
|
|
|
|
if (!$diploma) {
|
|
http_response_code(404);
|
|
echo json_encode(['success' => false, 'error' => 'Diploma no encontrado']);
|
|
exit;
|
|
}
|
|
|
|
function t($txt) {
|
|
return iconv('UTF-8', 'windows-1252//TRANSLIT', $txt);
|
|
}
|
|
|
|
$alumno = $diploma['alumno_nombre'];
|
|
$email = $diploma['alumno_email'];
|
|
$telefono = $diploma['alumno_telefono'];
|
|
$telefonoFormateado = '52' . preg_replace('/\D/', '', $telefono);
|
|
$curso = $diploma['curso_nombre'];
|
|
$tipo = $diploma['tipo'];
|
|
$horas = $diploma['horas_trabajadas'];
|
|
$competencias = $diploma['competencias'] ?? '';
|
|
$fecha = new DateTime($diploma['fecha_emision']);
|
|
$dia = str_pad($fecha->format('d'), 2, '0', STR_PAD_LEFT);
|
|
$mes = $fecha->format('m');
|
|
$anio = $fecha->format('Y');
|
|
|
|
$host = $_SERVER['HTTP_HOST'];
|
|
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? "https" : "http";
|
|
$baseDir = explode('/api', $_SERVER['SCRIPT_NAME'])[0];
|
|
$validationUrl = "$protocol://$host$baseDir/certificado.php?codigo=$codigo";
|
|
|
|
$qrPath = __DIR__ . "/../temp/qr_$codigo.png";
|
|
Builder::create()
|
|
->writer(new PngWriter())
|
|
->data($validationUrl)
|
|
->size(150)
|
|
->margin(5)
|
|
->build()
|
|
->saveToFile($qrPath);
|
|
|
|
$pdf = new Fpdi();
|
|
$pdf->AddPage();
|
|
$pdf->setSourceFile(__DIR__ . '/../fpdf/formatodiploma.pdf');
|
|
$template = $pdf->importPage(1);
|
|
$pdf->useTemplate($template);
|
|
$pdf->SetTextColor(33, 37, 41);
|
|
|
|
$pdf->SetFont('Helvetica', 'B', 12);
|
|
$pdf->SetXY(0, 245);
|
|
$pdf->Cell(210, 10, t("Dr. Juan Manuel Gutiérrez Méndez"), 0, 1, 'C');
|
|
$pdf->SetFont('Helvetica', '', 11);
|
|
$pdf->Cell(210, 6, t("Director de Proyectos"), 0, 1, 'C');
|
|
|
|
$pdf->SetFont('Helvetica', 'I', 10);
|
|
$pdf->SetXY(0, 268);
|
|
$pdf->Cell(210, 6, t("Se expide en la ciudad de Xalapa, Ver., a los {$dia} días de {$mes} de {$anio}"), 0, 1, 'C');
|
|
|
|
$pdf->Image($qrPath, 10, 240, 25, 25);
|
|
unlink($qrPath);
|
|
|
|
$tempPath = "/tmp/diploma_$codigo.pdf";
|
|
$pdf->Output($tempPath, 'F');
|
|
|
|
$mail = getMailer();
|
|
$mail->addAddress($email, $alumno);
|
|
$mail->Subject = "Tu diploma del curso {$curso}";
|
|
$mail->Body = "Hola {$alumno},\n\nAdjunto encontrarás tu diploma por haber concluido satisfactoriamente el curso tipo " . ucfirst($tipo) . ": {$curso}.\n\nGracias por tu participación.\n\nPuedes validar el diploma escaneando el código QR o visitando:\n$validationUrl";
|
|
$mail->addAttachment($tempPath, "Diploma-$codigo.pdf");
|
|
|
|
try {
|
|
$mail->send();
|
|
unlink($tempPath);
|
|
$instanceId = 'instance126094';
|
|
$token = 'd7n8da6p4iixalci';
|
|
$mensajeWA = "Hola {$alumno}, hemos enviado el diploma de LANIA a tu correo personal. ¡Felicidades por concluir el curso!";
|
|
|
|
$waUrl = "https://api.ultramsg.com/$instanceId/messages/chat";
|
|
$waData = [
|
|
'token' => $token,
|
|
'to' => $telefonoFormateado,
|
|
'body' => $mensajeWA
|
|
];
|
|
|
|
$ch = curl_init();
|
|
curl_setopt_array($ch, [
|
|
CURLOPT_URL => $waUrl,
|
|
CURLOPT_RETURNTRANSFER => true,
|
|
CURLOPT_POST => true,
|
|
CURLOPT_POSTFIELDS => http_build_query($waData)
|
|
]);
|
|
$waResponse = curl_exec($ch);
|
|
curl_close($ch);
|
|
|
|
echo json_encode(['success' => true, 'message' => 'Diploma enviado por correo y WhatsApp']);
|
|
|
|
} catch (Exception $e) {
|
|
echo json_encode(['success' => false, 'error' => $mail->ErrorInfo]);
|
|
}
|