tieneAcceso()) { header("Location: " . $pag . "?error=1"); exit(); } unset($objValida); if (!isset($alumnos, $fecha_carta, $firmado, $tamano)) { header("Location: " . $pag . "?error=0"); exit(); } else { // echo $fecha_carta; // exit; } # Function to query the database and return the result function query(string $sql, array $bind_params = [], bool $print = false) { global $pdo, $pag; if ($print) { echo $sql; print_r($bind_params); exit; } $stmt = $pdo->prepare($sql); foreach ($bind_params as $param => $value) $stmt->bindParam($param, $value); if (!$stmt->execute()) { $pdo->rollBack(); header("Location:" . $pag . "?error=2"); //print_r($stmt->errorInfo()); exit(); } $result_set = $stmt->fetchAll(); $stmt->closeCursor(); $stmt = null; return $result_set; } $defaultConfig = (new \Mpdf\Config\ConfigVariables())->getDefaults(); /********* FONTS **********/ $fontDirs = $defaultConfig['fontDir']; $defaultFontConfig = (new \Mpdf\Config\FontVariables())->getDefaults(); $fontData = $defaultFontConfig['fontdata'] + ['indivisatext' => [ 'R' => '../../fonts/indivisaFont/ttf/IndivisaTextSans-Regular.ttf', 'I' => '../../fonts/indivisaFont/ttf/IndivisaTextSans-RegularItalic.ttf', 'B' => '../../fonts/indivisaFont/ttf/IndivisaTextSans-Bold.ttf', 'BI' => '../../fonts/indivisaFont/ttf/IndivisaTextSans-BoldItalic.ttf', ]] + ['indivisadisplay' => [ 'R' => '../../fonts/indivisaFont/ttf/IndivisaDisplaySans-Regular.ttf', 'I' => '../../fonts/indivisaFont/ttf/IndivisaDisplaySans-RegularItalic.ttf', 'B' => '../../fonts/indivisaFont/ttf/IndivisaDisplaySans-Heavy.ttf', 'BI' => '../../fonts/indivisaFont/ttf/IndivisaDisplaySans-HeavyItalic.ttf', ]] + ['fontawesome' => [ 'R' => '../../fonts/fa/fa-regular-400.ttf', 'B' => '../../fonts/fa/fa-solid-900.ttf', ]]; /********* CONFIGURACIÓN INICIAL **********/ $config = [ 'mode' => 'utf-8', 'format' => 'Letter', 'margin_header' => 12, 'margin_top' => 25, 'margin_left' => 15, 'margin_right' => 15, 'margin_footer' => 4, 'fontDir' => array_merge($fontDirs, [__DIR__]), 'fontdata' => $fontData, 'default_font' => 'indivisatext' ]; /********* TEMPLATE **********/ $carta = new XTemplate('../tpl/carta.tpl.html'); $carta->parse('header'); $carta->parse('footer'); /********* PDF **********/ $mpdf = new \Mpdf\Mpdf($config); $mpdf->SHYlang = 'es'; # FIRMAS DE LOS DIRECTORES $carta->assign("FECHA", fechaConstancia($fecha_carta)); $mpdf->SetHTMLHeader($carta->text('header')); $mpdf->SetHTMLFooter($carta->text('footer')); $mpdf->SetTitle("Insignias | $fecha_carta"); $mpdf->SetAuthor('Facultad de Ingeniería. © Universidad La Salle A.C. 2022 Todos los derechos Reservados.'); /********* HOJA DE ESTILOS **********/ $mpdf->WriteHTML(''); //$firmas_id = [8, 27]; # Get firmas from fs_constanciafirma function //$firmas = query('SELECT * FROM fs_constanciafirma(NULL, true) WHERE "Usuario_id" IN (' . implode(',', $firmas_id) . ")"); $firmas_id = [1, 12]; # Get firmas from fs_constanciafirma function $firmas = query('SELECT * FROM fs_constanciafirma(NULL, true) as c INNER JOIN "Puesto" p ON c."Usuario_id"=p."Usuario_id" WHERE p."Puesto_id" IN (' . implode(',', $firmas_id) . ")"); // INSIGNIAS -> DESCRIPCIÓN for ($i = 0; $i < 2; $i++) { $carta->assign("NOMBRE$i", $firmas[$i]["ConstanciaFirma_grado"] . ' ' . $firmas[$i]["ConstanciaFirma_nombre"]); $carta->assign("CARGO$i", $firmas[$i]["ConstanciaFirma_puesto"]); } $marca = 'INSIGNIAS ' . fechaGuion($fecha_carta) . ' | '; //No acepta caracteres especiales // generaMarcaDeAgua($marca, "zip/"); $carta->assign('MARCA', 'zip/marca.png'); for ($i = 1; $i <= 2; $i++) $carta->assign("FIRMA$i", $firmado ? $firmas[$i - 1]["ConstanciaFirma_imagen"]: "fondo.png"); $carta->parse('main.firmas'); $totalAlumnos = count($alumnos) - 1; $alumnosConInsignias = 0; foreach ($alumnos as $alumno_key => $alumno_id) { $insignias_rs = query('SELECT * FROM fs_insigniareportealumno(:id_alumno)', [':id_alumno' => $alumno_id]); if (empty($insignias_rs)) continue; else // add insignia $alumnosConInsignias++; $alumno_carta = new XTemplate('../tpl/carta.tpl.html'); $usuario_rs = query('SELECT * FROM fs_alumno(:id_alumno, NULL)', [':id_alumno' => $alumno_id]); $usuario = $usuario_rs[0]; // TÍTULO $alumno = $usuario['Usuario_nombre'] . ' ' . $usuario['Usuario_apellidos']; $mpdf->WriteHTML($alumno_carta->text("resumen")); $alumno_carta->assign('ALUMNO', $alumno); $carrera = mb_strtoupper($usuario['Carrera_desc'], 'UTF-8'); $alumno_carta->assign('CARRERA', $carrera); if ($alumnosConInsignias > 1) $mpdf->AddPage(); $alumno_carta->parse("main.titulo"); $mpdf->WriteHTML($alumno_carta->text("main.titulo")); foreach ($insignias_rs as $key => $insignia) { # if the insignia tipo is new if ($key == 0 || $insignia["InsigniaTipo_desc"] != $insignias_rs[$key - 1]["InsigniaTipo_desc"]) { $alumno_carta->assign('INSIGNIA_TIPO', $insignia["InsigniaTipo_desc"]); $alumno_carta->assign('INSIGNIA_COLOR', $insignia["InsigniaTipo_color"]); $alumno_carta->parse('main.insignias.tipo'); $mpdf->writeHTML($alumno_carta->text("main.insignia.tipo")); } $alumno_carta->assign('INSIGNIA_TITULO', $insignia["Insignia_titulo"]); $alumno_carta->assign('ESPACIO', $tamano); $alumno_carta->assign('INSIGNIA_DESCRIPCION', $insignia["Insignia_desc"]); # If fecha inicial is the same as fecha final // if insignia is general entonces query fecha if (!$insignia["InsigniaTipo_general"]) { $fecha_inicial = date_create($insignia["InsigniaPersonal_fecha_inicial"]); $fecha_final = date_create($insignia["InsigniaPersonal_fecha_final"]); # If fecha inicial is the same as fecha final if ($fecha_inicial == $fecha_final || $insignia["InsigniaPersonal_fecha_inicial"] == null) { $alumno_carta->assign('INSIGNIA_FECHA', Fechas::romanizaFecha($fecha_final)); } else { $alumno_carta->assign('INSIGNIA_FECHA', Fechas::estandarizaDia($fecha_inicial, $fecha_final, 'ultimos')); } } else { $reglas_rs = query('SELECT * FROM fs_insigniageneralreglas(:id_insignia)', [':id_insignia' => $insignia["Insignia_id"]])[0]; $fecha_inicial = date_create($reglas_rs["CalendarioEvento_fecha"]); switch ($reglas_rs["CalendarioReglas_intervalo"]) { case 1: { $fecha_final = date_create($reglas_rs["CalendarioReglas_fecha_final"]); // add one day to fecha_inicial $tipo = (new DateTime($fecha_inicial->format('Y-m-d')))->modify('+1 day') == $fecha_final ? 'ultimos' : 'rango'; $alumno_carta->assign('INSIGNIA_FECHA', Fechas::estandarizaDia($fecha_inicial, $fecha_final, $tipo)); break; // diario } case 2: $alumno_carta->assign('INSIGNIA_FECHA', "Pendiente semanal"); break; // semanal case 3: $alumno_carta->assign('INSIGNIA_FECHA', "Pendiente mensual"); break; // mensual default: $alumno_carta->assign('INSIGNIA_FECHA', Fechas::romanizaFecha($fecha_inicial)); break; // una vez } } $alumno_carta->assign('FOLIO', encripta($alumno_id . ',' . $insignia['Insignia_id'])); $llevaLínea = isset($insignias_rs[$key + 1]) && $insignias_rs[$key + 1]["InsigniaTipo_desc"] == $insignia["InsigniaTipo_desc"]; $alumno_carta->assign('INSIGNIA_LINEA', $llevaLínea ? 'linea' : ''); $alumno_carta->parse('main.insignias.descripcion'); $alumno_carta->parse('main.insignias.descripcion.calendar'); $alumno_carta->parse('main.insignias'); } # Prevent the blank page at the end of the document $mpdf->WriteHTML($alumno_carta->text('main.insignias')); if ($mpdf->y > 180.0) $mpdf->AddPage(); $mpdf->WriteHTML($carta->text('main.firmas')); } if ($alumnosConInsignias > 0) $mpdf->Output('cartas.pdf', 'I'); else header("Location:" . $pag . "?error=3");