pdf_constancias_cidit_split.php 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284
  1. <?php
  2. /*ini_set('display_errors', 1);
  3. ini_set('display_startup_errors', 1);
  4. error_reporting(E_ALL);*/
  5. //ini_set('max_execution_time', 150);
  6. setlocale(LC_TIME, 'es_MX.UTF-8');
  7. require_once("../../include/nocache.php");
  8. require_once("../../include/bd_pdo.php");
  9. require_once("../../include/util.php");
  10. require_once("../../include/constantes.php");
  11. require_once("../../classes/ValidaSesion.php");
  12. include_once('../../include/xTemplate/xtemplate.class.php'); // including mpdf.php
  13. include_once('../../include/mpdf/autoload.php'); // including mpdf.php
  14. include_once('../include/util.php');
  15. $pag = "../constancias_cidit.php";
  16. $sist = CIDIT;
  17. //--- Objeto para validar usuario. El id de usuario lo lee desde sesión
  18. $objSesion = new ValidaSesion($pdo, 301, CONSTANCIA);
  19. if(!$objSesion->tieneAcceso()){
  20. header("Location: ".$pag."?error=1");
  21. exit();
  22. }
  23. unset($objValida);
  24. if(!isset($_POST["doc_id"]) || !isset($_POST["participantes"]) || !isset($_POST["desc"]) || !isset($_POST["fecha"]) || !isset($_POST["num_firmas"], $_POST["firma"], $_POST["puesto"], $_POST["motivo"])){
  25. header("Location: ".$pag."?error=0");
  26. exit();
  27. }
  28. $concurso = filter_input(INPUT_POST, "concurso", FILTER_SANITIZE_NUMBER_INT);//limpia texto
  29. $part_tipo = filter_input(INPUT_POST, "part_id", FILTER_SANITIZE_NUMBER_INT);//limpia texto
  30. $motivo = trim(filter_input(INPUT_POST, "motivo", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW)));
  31. $doc_id = filter_input(INPUT_POST, "doc_id", FILTER_SANITIZE_NUMBER_INT);//limpia texto
  32. $doc_desc = trim(filter_input(INPUT_POST, "doc_desc", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW)));
  33. $participantes = $_POST["participantes"];//array
  34. $desc = $_POST["desc"];
  35. $fecha = trim(filter_input(INPUT_POST, "fecha", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW)));//limpia texto
  36. $numFirmas = filter_input(INPUT_POST, "num_firmas", FILTER_SANITIZE_NUMBER_INT);//limpia texto
  37. $firma = $_POST["firma"];//array
  38. $lleva_firma = $_POST["lleva_firma"];//array
  39. $puesto = $_POST["puesto"];//array
  40. $firmasArr = array();
  41. try {
  42. $pdo->beginTransaction();
  43. $i = 0;
  44. while($i < $numFirmas){
  45. $stmt = $pdo->prepare('Select * from fs_constanciafirma(:id, NULL )');//firmas
  46. $stmt->bindParam(":id", $firma[$i]);
  47. if(!$stmt->execute()){
  48. $pdo->rollBack();
  49. header("Location:".$pag."?error=2");
  50. //print_r($stmt->errorInfo());
  51. exit();
  52. }
  53. $firma_rs = $stmt->fetch();
  54. $stmt->closeCursor();
  55. $firmasArr[] = array("id"=>$firma_rs["ConstanciaFirma_id"] ,"grado"=>$firma_rs["ConstanciaFirma_grado"] ,
  56. "nombre"=> $firma_rs["ConstanciaFirma_nombre"], "puesto"=>$puesto[$i],
  57. "firma"=> $firma_rs["ConstanciaFirma_imagen"], "lleva_firma"=>($lleva_firma[$i]==1)?true:false
  58. );
  59. $i++;
  60. }
  61. $stmt = $pdo->prepare('Select * from cidit_fs_concurso(:id)');
  62. $stmt->bindParam(":id", $concurso);
  63. if(!$stmt->execute()){
  64. $pdo->rollBack();
  65. header("Location:".$pag."?error=2");
  66. //print_r($stmt->errorInfo());
  67. exit();
  68. }
  69. $concurso_rs = $stmt->fetch();
  70. $stmt->closeCursor();
  71. $evento_marca = $concurso_rs["nom"]." CIDIT ".$concurso_rs["anio"];
  72. //Actualizar texto para constancia del tipo actual
  73. //$stmt = $pdo->prepare('Select * from cidit_fu_textoconstancia(:id, :text)');
  74. $stmt = $pdo->prepare('Select * from fu_textoconstanciasistema(:text, :id, '.CIDIT.')');
  75. $stmt->bindParam(":id", $part_tipo);
  76. $stmt->bindParam(":text", $desc);
  77. if(!$stmt->execute()){
  78. $pdo->rollBack();
  79. header("Location:".$pag."?error=4");
  80. exit();
  81. }
  82. $stmt->closeCursor();
  83. $defaultConfig = (new Mpdf\Config\ConfigVariables())->getDefaults();
  84. $fontDirs = $defaultConfig['fontDir'];
  85. $defaultFontConfig = (new Mpdf\Config\FontVariables())->getDefaults();
  86. $fontData = $defaultFontConfig['fontdata'] +
  87. [ 'tipo' => [
  88. 'R' => 'IndivisaDisplaySans-Thin.ttf',
  89. ]] +
  90. [ 'texto-a' => [
  91. 'R' => 'IndivisaTextSans-Light.ttf',
  92. ]] +
  93. ['indivisa-text' => [
  94. 'R' => 'IndivisaTextSans-Regular.ttf',
  95. 'B' => 'IndivisaTextSans-Bold.ttf',
  96. 'BI' => 'IndivisaTextSans-BoldItalic.ttf',
  97. ]];
  98. $stylesheet = "<style>";
  99. //$stylesheet .= file_get_contents('../../css/indivisa.css'); // external css
  100. $stylesheet .= file_get_contents('../css/constancia.css'); // external css
  101. $stylesheet .= "</style>";
  102. //----------- Archivos y zip ---
  103. $tmp_folder = "./zip/pdf_".fechaGuion($fecha);
  104. if (!file_exists($tmp_folder)) {
  105. mkdir($tmp_folder, 0777, true);
  106. }
  107. $zip = new ZipArchive();
  108. $zip_filename = "zip/CIDIT_".$motivo."_".fechaGuion($fecha)."_".date("his").".zip";
  109. if ($zip->open($zip_filename, ZipArchive::CREATE)!==TRUE) {
  110. $pdo->rollBack();
  111. exit("cannot open <$zip_filename>\n");
  112. }
  113. //Marca de agua
  114. if (file_exists($_SERVER['DOCUMENT_ROOT']. '/const/export/zip/marca.png')) {
  115. unlink($_SERVER['DOCUMENT_ROOT']. '/const/export/zip/marca.png');
  116. }
  117. $marca = mb_strtoupper($evento_marca,'UTF-8') . ' ' . fechaGuion($fecha). ' | '; //No acepta caracteres especiales
  118. generaMarcaDeAgua($marca, "zip/");
  119. $header = '<img id="logo" src="../img/lasalle_pdf.jpg">';
  120. //Footer
  121. $footer = "";
  122. $num = 1;
  123. foreach($participantes as $part){
  124. $stmt = $pdo->prepare('Select * from cidit_fs_generaconstancia(:conc, :usr, :tipo)');
  125. $stmt->bindParam(":conc", $concurso);
  126. $stmt->bindParam(":tipo", $part_tipo);
  127. $stmt->bindParam(":usr", $part);
  128. if(!$stmt->execute()){
  129. $pdo->rollBack();
  130. header("Location:".$pag."?error=2");
  131. //print_r($stmt->errorInfo());
  132. exit();
  133. }
  134. $datos_rs = $stmt->fetch();
  135. $stmt->closeCursor();
  136. $nombre = $datos_rs["nombre"];
  137. $codeArr = array();
  138. $codeArr[] = array("busca"=>'$_PROYECTO', "reemplaza"=>$datos_rs["proyecto"]);
  139. $codeArr[] = array("busca"=>'$_CONCURSO', "reemplaza"=>$datos_rs["concurso"]);
  140. $codeArr[] = array("busca"=>'$_ANIO', "reemplaza"=>$datos_rs["anio"]);
  141. $codeArr[] = array("busca"=>'$_LUGAR', "reemplaza"=>textoLugar($datos_rs["lugar"]));
  142. $codeArr[] = array("busca"=>'$_CATEGORIA', "reemplaza"=>$datos_rs["categoria"]);
  143. $codeArr[] = array("busca"=>'$_PUESTO', "reemplaza"=>$datos_rs["puesto"]);
  144. $desc_new = cambiaTextos($desc, $codeArr);
  145. $mpdf = new \Mpdf\Mpdf([
  146. 'mode'=>'utf-8', 'format'=>'Letter',
  147. 'margin_header'=> 21, 'margin_top'=>52, 'margin_left'=> 35, 'margin_right'=> 30, 'margin_footer'=>10,
  148. 'orientation' => 'P',
  149. 'fontDir' => array_merge($fontDirs, [
  150. __DIR__ . '/../../fonts/indivisaFont/ttf',
  151. ]),
  152. 'fontdata' => $fontData,
  153. 'default_font' => 'indivisa-text'
  154. ]);
  155. $xtpl = new XTemplate('../tpl/constancia.tpl.html');
  156. $xtpl->assign("TIPO", $doc_desc);
  157. $xtpl->assign("NOMBRE", $nombre);
  158. $xtpl->assign("TEXTO", $desc_new);
  159. $xtpl->parse("main");
  160. $footer = generaFooter($pdo, $sist, $pag, $fecha, $numFirmas, $firmasArr, $nombre, $motivo, $doc_id, $evento_marca, $desc_new, $concurso_rs["carpeta"]);
  161. /*echo $stylesheet;
  162. echo $header;
  163. echo $xtpl->text("main");
  164. echo $footer;
  165. exit();*/
  166. $mpdf->SHYlang = 'es';
  167. $mpdf-> SetTitle($doc_desc . '-' . $nombre);
  168. $mpdf-> SetAuthor('Facultad de Ingeniería. © Universidad La Salle A.C. '.$datos_rs["anio"].' Todos los derechos Reservados.');
  169. $mpdf->SetHTMLHeader($header);
  170. $mpdf->WriteHTML($stylesheet);
  171. $mpdf->WriteHTML($xtpl->text("main"));
  172. $mpdf->SetHTMLFooter($footer);
  173. $mpdf->SetProtection(array('print', 'print-highres'), '', md5(time()));
  174. //$mpdf->Output("file.pdf", 'I');exit();//Test imprime en pantalla
  175. $mpdf->Output($tmp_folder."/".$doc_desc."_".$num.".pdf", 'F');
  176. if(!empty($datos_rs["clave"]) && $datos_rs["clave"] != "")
  177. $zip_innerfilename = $doc_desc."_".$nombre."[".$datos_rs["clave"]."].pdf";
  178. else
  179. $zip_innerfilename = $doc_desc."_".$nombre.".pdf";
  180. $zip->addFile(
  181. $tmp_folder."/".$doc_desc."_".$num.".pdf",
  182. $doc_desc."s_".fechaGuion($fecha)."/".$zip_innerfilename
  183. );
  184. $num++;
  185. }//for participante
  186. if($zip->numFiles<=0){
  187. $pdo->rollBack();
  188. echo "Error al guardar en el zip";
  189. $zip->close();
  190. unlink($zip_filename);
  191. exit();
  192. }
  193. $zip->close();
  194. removeFolder($tmp_folder);
  195. header("Content-Type: application/zip");
  196. header("Content-Disposition: attachment; filename=".basename($zip_filename));
  197. header("Pragma: no-cache");
  198. header("Expires: 0");
  199. ob_end_clean();
  200. flush();
  201. readfile($zip_filename);
  202. $pdo->commit();
  203. unlink("zip/marca.png");
  204. //unlink($zip_filename);//Test el archivo se queda para no generar de nuevo
  205. } catch(PDOException $e) {
  206. $pdo->rollBack();
  207. header("Location:".$pag."?error=2");
  208. //print_r($e);
  209. exit();
  210. }
  211. function removeFolder($folderName) {
  212. if (is_dir($folderName))
  213. $folderHandle = opendir($folderName);
  214. if (!$folderHandle)
  215. return false;
  216. while($file = readdir($folderHandle)) {
  217. if ($file != "." && $file != "..") {
  218. if (!is_dir($folderName."/".$file))
  219. unlink($folderName."/".$file);
  220. else
  221. removeFolder($folderName.'/'.$file);
  222. }
  223. }
  224. closedir($folderHandle);
  225. rmdir($folderName);
  226. return true;
  227. }
  228. ?>