pdf_syllabus_all.php 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435
  1. <?php
  2. setlocale(LC_TIME, 'es_MX.UTF-8');
  3. require_once("../../include/nocache.php");
  4. require_once("../../include/constantes.php");
  5. require_once("../../include/bd_pdo.php");
  6. require_once("../../include/util.php");
  7. require_once("../../classes/ValidaSesion.php");
  8. include_once('../../include/xTemplate/xtemplate.class.php'); // including mpdf.php
  9. include_once('../../include/mpdf/autoload.php'); // including mpdf.php
  10. //increase timeout to 10 minutes
  11. //ini_set('display_errors', 1);
  12. //ini_set('display_startup_errors', 1);
  13. ini_set('post_max_size', 1);
  14. ini_set('max_execution_time', 8*60);
  15. set_time_limit(8*60);
  16. /*ini_set('display_errors', 1);
  17. ini_set('display_startup_errors', 1);
  18. error_reporting(E_ALL);*/
  19. $menu = 7;
  20. $submenu = 74;
  21. $objSesion = new ValidaSesion($pdo, $submenu, APSA);
  22. if(!$objSesion->tieneAcceso()){
  23. $objSesion->terminaSesion();
  24. }
  25. if(!isset($_SESSION["periodo_id"])){
  26. echo "No se ha especificado el periodo";
  27. exit();
  28. }
  29. //Obtiene área del jefe de carrera
  30. /*if($_SESSION["jefe_carrera"] == 1){
  31. $stmt = $pdo->prepare('Select * from fs_areausuario(:usr, NULL)');
  32. $stmt->bindParam(":usr", $_SESSION["usuario_id"]);
  33. if(!$stmt->execute()){
  34. header("Location: ".$pag."?error=5");
  35. exit();
  36. }else{
  37. $area_rs = $stmt->fetch();
  38. $area = $area_rs["Area_id"];
  39. }
  40. $stmt->closeCursor();
  41. }else{*/
  42. if(isset($_POST["area"]) && is_numeric($_POST["area"]) && $_POST["area"]!=""){
  43. $area = filter_input(INPUT_POST, "area", FILTER_SANITIZE_NUMBER_INT);//limpia texto
  44. }
  45. //}
  46. if(isset($area) && !empty($area)){
  47. $stmt = $pdo->prepare('Select * from fs_materiasprofesor(:periodo, null) where "Area_id" = :area');
  48. $stmt->bindParam(":area", $_POST["area"]);
  49. }else{
  50. $stmt = $pdo->prepare('Select * from fs_materiasprofesor(:periodo, null)');
  51. }
  52. $stmt->bindParam(":periodo", $_SESSION["periodo_id"]);
  53. if(!$stmt->execute()){
  54. //print_r($stmt->errorInfo());
  55. $errorDesc = "Ocurrió un error al cargar los datos del periodo";
  56. }else{
  57. $periodo_rs = $stmt->fetchAll();
  58. }
  59. $stmt->closeCursor();
  60. //Obtiene áreas académicas
  61. if(!isset($area)){
  62. $area_nombre = "Todas";
  63. }else{
  64. $stmt = $pdo->prepare("Select * from fs_areaacademica(:area, NULL)");
  65. $stmt->bindParam(":area", $area);
  66. if(!$stmt->execute()){
  67. $errorDesc = "Ocurrió un error al cargar las áreas académicas.";
  68. }else{
  69. $areas_rs = $stmt->fetch();
  70. $area_nombre = $areas_rs["Area_desc"];
  71. }
  72. $stmt->closeCursor();
  73. }
  74. //----------- Archivos y zip ---
  75. $tmp_folder = "./zip/pdf_".date("dmyhis");//carpeta temporal
  76. if (!file_exists($tmp_folder)) {
  77. mkdir($tmp_folder, 0777, true);
  78. }
  79. $zip = new ZipArchive();
  80. $zip_filename =strtolower("./zip/syllabus_".$area_nombre."_".date("Ymd_his").".zip");//nombre de archivo final
  81. if ($zip->open($zip_filename, ZipArchive::CREATE)!==TRUE) {
  82. exit("cannot open <$zip_filename>\n");
  83. }
  84. //-----
  85. $defaultConfig = (new Mpdf\Config\ConfigVariables())->getDefaults();
  86. $fontDirs = $defaultConfig['fontDir'];
  87. $defaultFontConfig = (new Mpdf\Config\FontVariables())->getDefaults();
  88. $fontData = $defaultFontConfig['fontdata'];
  89. $pdf_list = [];
  90. $xtpl = new XTemplate('../tpl/syllabus.tpl.html');
  91. foreach($periodo_rs as $periodo){
  92. $filter_mat = $periodo["Materia_id"]."_".$periodo["Grupo_id"]."_".$periodo["Submateria_id"];
  93. $filter_materia_nom = $periodo["Materia_desc"];
  94. $filter_gpo_nom = $periodo["Grupo_desc"];
  95. $matArr = explode("_",$filter_mat);
  96. //--
  97. $mat = $periodo["Materia_id"];
  98. $gpo = $periodo["Grupo_id"];
  99. $gpo_nom = $periodo["Grupo_desc"].$periodo["Carrera_prefijo"];
  100. $usr = $periodo["Usuario_id"];
  101. $stmt = $pdo->prepare('Select * from fs_usuario(:usr)');
  102. $stmt->bindParam(":usr", $usr);
  103. if(!$stmt->execute()){
  104. header("Location: ".$pag."?error=5");
  105. exit();
  106. }else{
  107. $usr_rs = $stmt->fetch();
  108. $usr_nombre = $usr_rs["Usuario_nombre"]." ".$usr_rs["Usuario_apellidos"];
  109. }
  110. $stmt->closeCursor();
  111. if($periodo["Submateria_id"]!= ""){
  112. $sub = $periodo["Submateria_id"];
  113. $stmt = $pdo->prepare('Select * from fs_syllabus(:periodo, :prof, :mat, :gpo, :sub )');
  114. $stmt->bindParam(":sub", $sub);
  115. }else{
  116. $stmt = $pdo->prepare('Select * from fs_syllabus(:periodo, :prof, :mat, :gpo, NULL )');
  117. }
  118. $stmt->bindParam(":periodo", $_SESSION["periodo_id"]);
  119. $stmt->bindParam(":prof", $usr);
  120. $stmt->bindParam(":mat", $mat);
  121. $stmt->bindParam(":gpo", $gpo);
  122. if(!$stmt->execute()){
  123. header("Location: ".$pag."?error=3");
  124. //$errorDesc = "Error al cargar los datos del alumno";
  125. //print_r($stmt->errorInfo());
  126. exit();
  127. }
  128. $syllabus_rs = $stmt->fetch();
  129. $stmt->closeCursor();
  130. if($syllabus_rs!==false){
  131. $xtpl->reset("main");
  132. //print_r($syllabus_rs); exit;
  133. $stmt = $pdo->prepare('Select * from fs_periodo(:periodo, NULL, NULL, NULL )');
  134. $stmt->bindParam(":periodo", $_SESSION["periodo_id"]);
  135. if(!$stmt->execute()){
  136. header("Location: ".$pag."?error=3");
  137. //$errorDesc = "Error al cargar los datos del alumno";
  138. //print_r($stmt->errorInfo());
  139. exit();
  140. }
  141. $periodo_rs = $stmt->fetch();
  142. $stmt->closeCursor();
  143. if(isset($sub)){
  144. $stmt = $pdo->prepare('SELECT hg."Horario_hora", s."Salon_desc", s."Salon_desc_larga", d."Dia_desc"
  145. from fs_horariogrupo(:gpo, NULL, false) AS hg INNER JOIN "Dia" d ON hg."Dia_id" = d."Dia_id"
  146. INNER JOIN "Submateria_HorarioGrupo_Profesor" shgp ON hg."HorarioGrupo_id" = shgp."HorarioGrupo_id" AND shgp."Submateria_id" = :sub
  147. INNER JOIN "Salon" s ON shgp."Salon_id" = s."Salon_id" WHERE "Materia_id" = :mat ORDER BY d."Dia_id", hg."Horario_hora"' );
  148. $stmt->bindParam(":sub", $sub);
  149. }else{
  150. $stmt = $pdo->prepare('SELECT hg."Horario_hora", hg."Salon_desc", hg."Salon_desc_larga", d."Dia_desc"
  151. from fs_horariogrupo(:gpo, NULL, false) AS hg INNER JOIN "Dia" d ON hg."Dia_id" = d."Dia_id" WHERE "Materia_id" = :mat ORDER BY d."Dia_id", hg."Horario_hora"' );
  152. }
  153. $stmt->bindParam(":gpo", $gpo);
  154. $stmt->bindParam(":mat", $mat);
  155. if(!$stmt->execute()){
  156. header("Location: ".$pag."?error=3");
  157. // print_r($stmt->errorInfo());
  158. exit();
  159. }
  160. $horario_rs = $stmt->fetchAll();
  161. $stmt->closeCursor();
  162. //print_r($horario_rs); exit;
  163. $mat_nombre = !empty($syllabus_rs["Submateria_desc"])?$syllabus_rs["Submateria_desc"]:$syllabus_rs["Materia_desc"];
  164. foreach($horario_rs as $h){
  165. $xtpl->assign("MATERIA", $mat_nombre." ".$gpo_nom);
  166. $xtpl->assign("SEMESTRE", $syllabus_rs["Materia_semestre"]);
  167. $xtpl->assign("PERIODO", $periodo_rs["Periodo_desc"]);
  168. $xtpl->assign("PROFESOR", $usr_nombre);
  169. $hora = substr($h["Horario_hora"], 0, 5);
  170. if(empty($h["Salon_desc"])){
  171. $salon = "Salón pendiente";
  172. }else{
  173. $salon = $h["Salon_desc"];
  174. if(!empty($h["Salon_desc_larga"])){
  175. $salon .=" (".$h["Salon_desc_larga"].")";
  176. }
  177. }
  178. $xtpl->assign("DIA", $h["Dia_desc"]);
  179. $xtpl->assign("HORA", $hora);
  180. $xtpl->assign("SALON", $salon);
  181. $xtpl->parse("main.content.fechas");
  182. }
  183. //---Atributos
  184. //Obtiene mapa
  185. $stmt = $pdo->prepare('select * from fs_atributoegreso_materia(:mat)');
  186. $stmt->bindParam(":mat", $mat);
  187. if(!$stmt->execute()){
  188. header("Location: ".$pag."?error=5");
  189. }else{
  190. $atributos_rs = $stmt->fetchAll();
  191. }
  192. //----
  193. $datos = array(
  194. array("titulo"=>"Información de la asignatura", "bd"=>"informacion", "subbloques"=>
  195. array(
  196. array("subtitulo"=>"Descripción","bd"=>"desc", "nobreak"=>false),
  197. array("subtitulo"=>"Objetivos","bd"=>"obj", "nobreak"=>false),
  198. array("subtitulo"=>"Capacidades y habilidades que desarrollar","bd"=>"capacidades", "nobreak"=>false),
  199. array("subtitulo"=>"Prerrequisitos","bd"=>"prerrequisitos", "nobreak"=>false),
  200. array("subtitulo"=>"Temario","bd"=>"temario", "nobreak"=>false),
  201. array("subtitulo"=>"Construcción de la calificación final","bd"=>"calificacion", "nobreak"=>true),
  202. array("subtitulo"=>"Fechas importantes","bd"=>"fechas", "nobreak"=>true),
  203. )
  204. ),
  205. array("titulo"=>"Lineamientos generales", "bd"=>"", "subbloques"=>
  206. array(
  207. array("subtitulo"=>"De la asistencia y puntualidad","bd"=>"asistencia", "nobreak"=>false),
  208. array("subtitulo"=>"Del comportamiento en clase","bd"=>"comportamiento", "nobreak"=>false),
  209. array("subtitulo"=>"De los exámenes","bd"=>"examenes", "nobreak"=>false),
  210. array("subtitulo"=>"De las tareas, prácticas y exposiciones","bd"=>"tareas", "nobreak"=>false),
  211. array("subtitulo"=>"Trabajos de investigación","bd"=>"investigacion", "nobreak"=>false),
  212. )
  213. ),
  214. array("titulo"=>"Bibliografía recomendada", "bd"=>"bibliografia", "subbloques"=>
  215. array(
  216. array("subtitulo"=>"","bd"=>"", "nobreak"=>true, "texto"=>"La/el docente que imparte la presente materia, en sus opiniones, posturas o críticas, citas o referencias de consulta, por la metodología didáctica que utiliza, por las herramientas pedagógicas de apoyo en la práctica educativa y, el desarrollo de los contenidos que integran el programa de la presente asignatura o por la implementación del modelo educativo de la Universidad, no tiene por objeto obstaculizar, restringir, impedir, menoscabar, anular o suprimir la orientación sexual, identidad o expresión de género de su alumnado; por ello, partiendo de su derecho de libertad de cátedra, enseña y promueve la construcción de conocimientos con objetividad e imparcialidad, sin censura ni restricciones, propiciando el debate y el análisis de los temas para enriquecer el aprendizaje, sin tener más límite que el respeto a los derechos del estudiantado."),
  217. )
  218. )
  219. );
  220. $atributos = false;
  221. foreach($datos as $bloque){
  222. if($bloque["titulo"] != ""){
  223. $xtpl->assign("TITULO", $bloque["titulo"]);
  224. }
  225. if(isset($bloque["inclusion"])){
  226. $xtpl->parse("main.content.bloque.inclusion");
  227. $xtpl->parse("main.content.bloque");
  228. }else{
  229. if($bloque["bd"]!= ""){
  230. $xtpl->assign("INFO", $syllabus_rs["Syllabus_".$bloque["bd"]]);
  231. $xtpl->parse("main.content.bloque.titulo.info");
  232. $xtpl->parse("main.content.bloque.titulo");
  233. $xtpl->parse("main.content.bloque");
  234. }
  235. if(!$atributos ){
  236. $atributos = true;
  237. if(count($atributos_rs) > 0){
  238. $html = "<ul>";
  239. foreach($atributos_rs as $atr){
  240. $html.="<li><b>Atributo {$atr["AtributoEgreso_id"]} nivel {$atr["AtributoNivel_desc"]}:</b> {$atr["AtributoEgreso_desc"]}</li>";
  241. }
  242. $html.="</ul>";
  243. $xtpl->assign("SUBTITULO", "Atributos de egreso");
  244. $xtpl->assign("INFO", $html);
  245. $xtpl->parse("main.content.bloque.subbloque");
  246. $xtpl->parse("main.content.bloque");
  247. }
  248. }
  249. foreach($bloque["subbloques"] as $subbloque){
  250. $xtpl->assign("SUBTITULO", $subbloque["subtitulo"]);
  251. if($subbloque["bd"]!= ""){
  252. $xtpl->assign("INFO", $syllabus_rs["Syllabus_".$subbloque["bd"]]);
  253. }else{
  254. $xtpl->assign("INFO", $subbloque["texto"]);
  255. }
  256. if($subbloque["nobreak"]) $xtpl->parse("main.content.bloque.subbloque_nobreak");
  257. else $xtpl->parse("main.content.bloque.subbloque");
  258. $xtpl->parse("main.content.bloque");
  259. }
  260. }
  261. }
  262. $xtpl->parse("main.content");
  263. $xtpl->parse("main");
  264. $pdf_list[] = array("contenido"=> $xtpl->text("main"), "materia"=> $mat_nombre, "grupo"=> $gpo_nom, "profesor"=> iniciales($usr_nombre));
  265. }//if syllabus no vacío
  266. }//foreach
  267. /*
  268. echo $stylesheet;
  269. foreach($pdf_list as $pdf){
  270. echo $pdf;
  271. }
  272. exit;*/
  273. $stylesheet = "<style>";
  274. $stylesheet .= file_get_contents('../../css/indivisa.css'); // external css
  275. $stylesheet .= file_get_contents('../css/syllabus.css'); // external css
  276. $stylesheet .= "</style>";
  277. $num = 0;
  278. foreach($pdf_list as $pdf){
  279. $mpdf = new \Mpdf\Mpdf([
  280. 'mode' => 'utf-8',
  281. 'format' => [215, 279],
  282. 'orientation' => 'P',
  283. 'margin_left' => 14,
  284. 'margin_right' => 14,
  285. 'margin_top' => 27,
  286. 'margin_bottom' => 27,
  287. 'fontDir' => array_merge($fontDirs, [
  288. __DIR__ . '/../../fonts/indivisaFont/ttf',
  289. ]),
  290. 'fontdata' => $fontData + [
  291. 'indivisa-display' => [
  292. 'R' => 'IndivisaDisplaySans-Regular.ttf',
  293. ],
  294. 'indivisa-title' => [
  295. 'R' => 'IndivisaDisplaySerif-RegularItalic.ttf',
  296. ],
  297. 'indivisa-text' => [
  298. 'R' => 'IndivisaTextSans-Regular.ttf',
  299. ]
  300. ],
  301. 'default_font' => 'indivisa-text',
  302. ]);
  303. //$mpdf->SetDisplayMode('fullpage');
  304. $header = '<table style="width:100%"><tr>
  305. <td><img src="../../img/logopdf.png" width="40mm" class=""></td>
  306. <td align="right"><h1 class="titulo">SYLLABUS | FACULTAD DE INGENIERÍA</h1></td>
  307. </tr></table>';
  308. $mpdf->SHYlang = 'es';
  309. $mpdf-> SetTitle('Syllabus');
  310. $mpdf-> SetAuthor('Facultad de Ingeniería. © Universidad La Salle A.C. '.date("Y").' Todos los derechos Reservados.');
  311. $mpdf->SetHTMLHeader($header);//se pone como fondo
  312. $mpdf->SetHTMLFooter('<img src="../../img/footer_docs.png" >');//se pone como fondo
  313. $mpdf->WriteHTML($stylesheet);
  314. if(!isset($errorDesc)){
  315. $mpdf->WriteHTML($pdf["contenido"]);
  316. //if($num < count($pdf_list)-1)
  317. // $mpdf->AddPage();
  318. }else
  319. $mpdf->WriteHTML($errorDesc);
  320. //$mpdf->Output($_SESSION["periodo_id"]."syllabus_".$area_nombre.".pdf", 'D');
  321. $mpdf->Output($tmp_folder."/syllabus_".$num.".pdf", 'F');
  322. $zip->addFile(
  323. $tmp_folder."/syllabus_".$num.".pdf",
  324. $pdf["materia"]."_".$pdf["grupo"]."_".$pdf["profesor"].".pdf"
  325. );
  326. $num++;
  327. }
  328. if($zip->numFiles<=0){
  329. $pdo->rollBack();
  330. echo "Error al guardar en el zip";
  331. $zip->close();
  332. unlink($zip_filename);
  333. exit();
  334. }
  335. $zip->close();
  336. removeFolder($tmp_folder);
  337. header("Content-Type: application/zip");
  338. header("Content-Disposition: attachment; filename=".basename($zip_filename));
  339. header("Pragma: no-cache");
  340. header("Expires: 0");
  341. ob_end_clean();
  342. flush();
  343. readfile($zip_filename);
  344. unlink($zip_filename);
  345. function removeFolder($folderName) {
  346. if (is_dir($folderName))
  347. $folderHandle = opendir($folderName);
  348. if (!$folderHandle)
  349. return false;
  350. while($file = readdir($folderHandle)) {
  351. if ($file != "." && $file != "..") {
  352. if (!is_dir($folderName."/".$file))
  353. unlink($folderName."/".$file);
  354. else
  355. removeFolder($folderName.'/'.$file);
  356. }
  357. }
  358. closedir($folderHandle);
  359. rmdir($folderName);
  360. return true;
  361. }
  362. //funcion que recibe un nombre separado por espacios y regresa las iniciales
  363. function iniciales($nombre){
  364. $nombre = explode(" ", $nombre);
  365. $iniciales = "";
  366. foreach($nombre as $n){
  367. $iniciales .= substr($n, 0, 1);
  368. }
  369. return strtoupper($iniciales);
  370. }