pdf_plancatedra_all.php 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  1. <?php
  2. /* AJAX
  3. * Genera plan de cátedra del área elegida
  4. */
  5. setlocale(LC_TIME, 'es_MX.UTF-8');
  6. require_once("../../include/nocache.php");
  7. require_once("../../include/constantes.php");
  8. require_once("../../include/bd_pdo.php");
  9. require_once("../../include/util.php");
  10. require_once("../../classes/ValidaSesion.php");
  11. include_once('../../include/xTemplate/xtemplate.class.php'); // including mpdf.php
  12. include_once('../../include/mpdf/autoload.php'); // including mpdf.php
  13. include_once('../classes/PlanCatedra.php');
  14. ini_set('post_max_size', 1);
  15. ini_set('max_execution_time', 8*60);
  16. set_time_limit(8*60);
  17. $menu = 7;
  18. $submenu = 74;
  19. //--- Objeto para validar usuario. El id de usuario lo lee desde sesión
  20. $objSesion = new ValidaSesion($pdo, $submenu, APSA);
  21. if(!$objSesion->tieneAcceso()){
  22. header("Location: ".$pag."?error=3");
  23. exit();
  24. }
  25. unset($objValida);
  26. if(!isset($_SESSION["periodo_id"])){
  27. echo "No se ha especificado el periodo";
  28. exit();
  29. }
  30. if(isset($_POST["area"]) && is_numeric($_POST["area"]) && $_POST["area"]!=""){
  31. $area = filter_input(INPUT_POST, "area", FILTER_SANITIZE_NUMBER_INT);//limpia texto
  32. }
  33. if(isset($area) && !empty($area)){
  34. $stmt = $pdo->prepare('Select * from fs_materiasprofesor(:periodo, null) where "Area_id" = :area');
  35. $stmt->bindParam(":area", $_POST["area"]);
  36. }else{
  37. $stmt = $pdo->prepare('Select * from fs_materiasprofesor(:periodo, null)');
  38. }
  39. $stmt->bindParam(":periodo", $_SESSION["periodo_id"]);
  40. if(!$stmt->execute()){
  41. //print_r($stmt->errorInfo());
  42. $errorDesc = "Ocurrió un error al cargar los datos del periodo";
  43. }else{
  44. $periodo_rs = $stmt->fetchAll();
  45. }
  46. $stmt->closeCursor();
  47. //Obtiene áreas académicas
  48. if(!isset($area)){
  49. $area_nombre = "Todas";
  50. }else{
  51. $stmt = $pdo->prepare("Select * from fs_areaacademica(:area, NULL)");
  52. $stmt->bindParam(":area", $area);
  53. if(!$stmt->execute()){
  54. $errorDesc = "Ocurrió un error al cargar las áreas académicas.";
  55. }else{
  56. $areas_rs = $stmt->fetch();
  57. $area_nombre = $areas_rs["Area_desc"];
  58. }
  59. $stmt->closeCursor();
  60. }
  61. //----------- Archivos y zip ---
  62. $tmp_folder = "./zip/pdf_".date("dmyhis");//carpeta temporal
  63. if (!file_exists($tmp_folder)) {
  64. mkdir($tmp_folder, 0777, true);
  65. }
  66. $zip = new ZipArchive();
  67. $zip_filename =strtolower("./zip/plancatedra_".$area_nombre."_".date("Ymd_his").".zip");//nombre de archivo final
  68. if ($zip->open($zip_filename, ZipArchive::CREATE)!==TRUE) {
  69. exit("cannot open <$zip_filename>\n");
  70. }
  71. //-----
  72. $defaultConfig = (new Mpdf\Config\ConfigVariables())->getDefaults();
  73. $fontDirs = $defaultConfig['fontDir'];
  74. $defaultFontConfig = (new Mpdf\Config\FontVariables())->getDefaults();
  75. $fontData = $defaultFontConfig['fontdata'];
  76. $pdf_list = [];
  77. $xtpl = new XTemplate('../tpl/syllabus.tpl.html');
  78. foreach($periodo_rs as $periodo){
  79. $filter_mat = $periodo["Materia_id"]."_".$periodo["Grupo_id"]."_".$periodo["Submateria_id"];
  80. $filter_materia_nom = $periodo["Materia_desc"];
  81. $filter_gpo_nom = $periodo["Grupo_desc"];
  82. $matArr = explode("_",$filter_mat);
  83. //--
  84. $mat = $periodo["Materia_id"];
  85. $gpo = $periodo["Grupo_id"];
  86. $gpo_nom = $periodo["Grupo_desc"].$periodo["Carrera_prefijo"];
  87. $usr = $periodo["Usuario_id"];
  88. $stmt = $pdo->prepare('Select * from fs_usuario(:usr)');
  89. $stmt->bindParam(":usr", $usr);
  90. if(!$stmt->execute()){
  91. header("Location: ".$pag."?error=5");
  92. exit();
  93. }else{
  94. $usr_rs = $stmt->fetch();
  95. $usr_nombre = $usr_rs["Usuario_nombre"]." ".$usr_rs["Usuario_apellidos"];
  96. }
  97. $stmt->closeCursor();
  98. if($periodo["Submateria_id"]!= ""){
  99. $sub = $periodo["Submateria_id"];
  100. }else{
  101. $sub=null;
  102. }
  103. $planObj = new PlanCatedra($pdo);
  104. if(!$planObj->generaCalendario($usr, $usr_nombre, $mat, $gpo, $gpo_nom, $sub)){
  105. $errorDesc = "Ocurrió un error al generar el plan de .".$usr_nombre." ".$mat." ".$gpo_nom." ".$sub;
  106. }
  107. //--Nombre de materia
  108. $mat_nombre = "";
  109. $mat_sem = "";
  110. if(!isset($sub)){
  111. $stmt = $pdo->prepare('Select "Materia_desc", "Materia_semestre" from fs_materia(:mat, NULL, NULL,NULL,NULL,0,NULL)');
  112. $stmt->bindParam(":mat", $mat);
  113. if(!$stmt->execute()){
  114. return false;
  115. //header("Location: ".$this->pag."?error=3");
  116. exit();
  117. }
  118. $mat_rs = $stmt->fetch();
  119. $stmt->closeCursor();
  120. $mat_nombre = $mat_rs["Materia_desc"];
  121. $mat_sem = $mat_rs["Materia_semestre"];
  122. unset($mat_rs);
  123. }else{
  124. $stmt = $pdo->prepare('Select "Submateria_desc", "Materia_semestre" from fs_submateria(:mat, :sub)');
  125. $stmt->bindParam(":mat", $mat);
  126. $stmt->bindParam(":sub", $sub);
  127. if(!$stmt->execute()){
  128. //header("Location: ".$this->pag."?error=3");
  129. return false;
  130. exit();
  131. }
  132. $mat_rs = $stmt->fetch();
  133. $stmt->closeCursor();
  134. $mat_nombre = $mat_rs["Submateria_desc"];
  135. $mat_sem = $mat_rs["Materia_semestre"];
  136. unset($mat_rs);
  137. }
  138. $pdf_list[] = array("contenido"=> $planObj->getPlan(), "materia"=> $mat_nombre, "grupo"=> $gpo_nom, "profesor"=> iniciales($usr_nombre));
  139. /*if(!isset($errorDesc))
  140. $mpdf->WriteHTML($pdf_full);
  141. else
  142. $mpdf->WriteHTML($errorDesc);
  143. */
  144. }
  145. /*
  146. echo $stylesheet;
  147. echo $pdf_full;
  148. exit;*/
  149. $stylesheet = "<style>";
  150. $stylesheet .= file_get_contents('../../css/indivisa.css'); // external css
  151. $stylesheet .= file_get_contents('../css/syllabus.css'); // external css
  152. $stylesheet .= "</style>";
  153. $num = 0;
  154. foreach($pdf_list as $pdf){
  155. $mpdf = new \Mpdf\Mpdf([
  156. 'mode' => 'utf-8',
  157. 'format' => [215, 279],
  158. 'orientation' => 'P',
  159. 'margin_left' => 14,
  160. 'margin_right' => 14,
  161. 'margin_top' => 27,
  162. 'margin_bottom' => 27,
  163. 'fontDir' => array_merge($fontDirs, [
  164. __DIR__ . '/../../fonts/indivisaFont/ttf',
  165. ]),
  166. 'fontdata' => $fontData + [
  167. 'indivisa-display' => [
  168. 'R' => 'IndivisaDisplaySans-Regular.ttf',
  169. ],
  170. 'indivisa-title' => [
  171. 'R' => 'IndivisaDisplaySerif-RegularItalic.ttf',
  172. ],
  173. 'indivisa-text' => [
  174. 'R' => 'IndivisaTextSans-Regular.ttf',
  175. ]
  176. ],
  177. 'default_font' => 'indivisa-text',
  178. ]);
  179. //$mpdf->SetDisplayMode('fullpage');
  180. $header = '<table style="width:100%"><tr>
  181. <td><img src="../../img/logopdf.png" width="40mm" class=""></td>
  182. <td align="right"><h1 class="titulo">PLAN DE CÁTEDRA | FACULTAD DE INGENIERÍA</h1></td>
  183. </tr></table>';
  184. $mpdf->SHYlang = 'es';
  185. $mpdf-> SetTitle('Plan de cátedra');
  186. $mpdf-> SetAuthor('Facultad de Ingeniería. © Universidad La Salle A.C. '.date("Y").' Todos los derechos Reservados.');
  187. $mpdf->SetHTMLHeader($header);//se pone como fondo
  188. $mpdf->SetHTMLFooter('<img src="../../img/footer_docs.png" >');//se pone como fondo
  189. $mpdf->WriteHTML($stylesheet);
  190. if(!isset($errorDesc)){
  191. $mpdf->WriteHTML($pdf["contenido"]);
  192. //if($num < count($pdf_list)-1)
  193. // $mpdf->AddPage();
  194. }else
  195. $mpdf->WriteHTML($errorDesc);
  196. //$mpdf->Output($_SESSION["periodo_id"]."syllabus_".$area_nombre.".pdf", 'D');
  197. $mpdf->Output($tmp_folder."/syllabus_".$num.".pdf", 'F');
  198. $zip->addFile(
  199. $tmp_folder."/syllabus_".$num.".pdf",
  200. $pdf["materia"]."_".$pdf["grupo"]."_".$pdf["profesor"].".pdf"
  201. );
  202. $num++;
  203. }
  204. //$mpdf->Output($_SESSION["periodo_id"]."planesCatedra_".$area_nombre.".pdf", 'D');
  205. if($zip->numFiles<=0){
  206. $pdo->rollBack();
  207. echo "Error al guardar en el zip";
  208. $zip->close();
  209. unlink($zip_filename);
  210. exit();
  211. }
  212. $zip->close();
  213. removeFolder($tmp_folder);
  214. header("Content-Type: application/zip");
  215. header("Content-Disposition: attachment; filename=".basename($zip_filename));
  216. header("Pragma: no-cache");
  217. header("Expires: 0");
  218. ob_end_clean();
  219. flush();
  220. readfile($zip_filename);
  221. unlink($zip_filename);
  222. function removeFolder($folderName) {
  223. if (is_dir($folderName))
  224. $folderHandle = opendir($folderName);
  225. if (!$folderHandle)
  226. return false;
  227. while($file = readdir($folderHandle)) {
  228. if ($file != "." && $file != "..") {
  229. if (!is_dir($folderName."/".$file))
  230. unlink($folderName."/".$file);
  231. else
  232. removeFolder($folderName.'/'.$file);
  233. }
  234. }
  235. closedir($folderHandle);
  236. rmdir($folderName);
  237. return true;
  238. }
  239. //funcion que recibe un nombre separado por espacios y regresa las iniciales
  240. function iniciales($nombre){
  241. $nombre = explode(" ", $nombre);
  242. $iniciales = "";
  243. foreach($nombre as $n){
  244. $iniciales .= substr($n, 0, 1);
  245. }
  246. return strtoupper($iniciales);
  247. }
  248. ?>