constancias_ei_alta.php 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528
  1. <?php
  2. require_once("../include/constantes.php");
  3. require_once("../include/util.php");
  4. require_once("../include/bd_pdo.php");
  5. require_once("../classes/ValidaSesion.php");
  6. require_once("../classes/MainMenu.php");
  7. require_once("./include/constantes.php");
  8. $menu = 30;
  9. $submenu = 304;
  10. //--- Objeto para validar usuario. El id de usuario lo lee desde sesión
  11. $objSesion = new ValidaSesion($pdo, $submenu, CONSTANCIA);
  12. if(!$objSesion->tieneAcceso()){
  13. $objSesion->terminaSesion();
  14. }
  15. $objSesion->validaPeriodoUsuario();//si no tiene periodo manda a main
  16. if(!$objSesion->puedeEditar()){
  17. $errorDesc = "No tienes permiso de editar las fechas.";
  18. }
  19. if(!isset($_POST["part_tipo"], $_POST["part_tipo_desc"], $_POST["concurso"])){
  20. header("Location: constancias_ei.php?error=0");
  21. }
  22. $concurso = filter_input(INPUT_POST, "concurso", FILTER_SANITIZE_NUMBER_INT);//limpia texto
  23. $part = filter_input(INPUT_POST, "part_tipo", FILTER_SANITIZE_NUMBER_INT);//limpia texto
  24. $part_desc = trim(filter_input(INPUT_POST, "part_tipo_desc", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW)));//limpia texto
  25. $doc_id = filter_input(INPUT_POST, "doc_id", FILTER_SANITIZE_NUMBER_INT);//limpia texto
  26. $doc_desc = trim(filter_input(INPUT_POST, "doc_desc", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW)));//limpia texto
  27. ?>
  28. <!DOCTYPE html>
  29. <html lang="es" prefix="og: http://ogp.me/ns#">
  30. <head>
  31. <title>Constancias - Facultad de Ingeniería</title>
  32. <meta charset="utf-8">
  33. <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  34. <link rel="icon" type="image/png" href="../img/favicon.png" />
  35. <link rel="stylesheet" href="../css/bootstrap-ulsa.min.css" type="text/css">
  36. <link rel="stylesheet" href="../css/indivisa.css" type="text/css">
  37. <link rel="stylesheet" href="../css/sgi.css?rand=<?php echo rand();?>" type="text/css">
  38. <link rel="stylesheet" href="../css/fa_all.css" type="text/css">
  39. <link rel="stylesheet" href="../css/jquery-ui.css" type="text/css">
  40. <link rel="stylesheet" href="../css/calendar.css" type="text/css">
  41. <link rel="stylesheet" href="../css/toggle.css" type="text/css">
  42. <style>
  43. .ing-rotate-45 {
  44. -webkit-transform: rotate(315deg);
  45. -moz-transform: rotate(315deg);
  46. -ms-transform: rotate(315deg);
  47. -o-transform: rotate(315deg);
  48. transform: rotate(315deg);
  49. }
  50. #participante_list .form-check-input {
  51. position: relative;
  52. }
  53. </style>
  54. </head>
  55. <body>
  56. <div>
  57. <?php
  58. //--- Objeto que pinta menu
  59. $menuObj = new MainMenu($_SESSION["usuario_id"], $menu, $pdo, CONSTANCIA, "Crear constancias ExpoIngenia");//usr, menu, pdo, sist
  60. $menuObj->printMenu();
  61. //Texto constancia
  62. $stmt = $pdo->prepare('SELECT * FROM fs_textoconstanciasistema(:tipo, '.EXPOING.')');
  63. $stmt->bindParam(":tipo", $part);
  64. if($stmt->execute()){
  65. $texto_rs = $stmt->fetch();
  66. }else{
  67. $errorDesc = "Ocurrió un error al obtener los datos del concurso.";
  68. }
  69. $stmt->closeCursor();
  70. $stmt = null;
  71. //Obtiene IDs de usuarios
  72. $stmt = $pdo->prepare('select * from ei_fs_constanciasconcurso(:conc, :tipo)');
  73. $stmt->bindParam(":conc", $concurso);
  74. $stmt->bindParam(":tipo", $part);
  75. if($stmt->execute()){
  76. $usr_rs = $stmt->fetchAll();
  77. }else{
  78. $errorDesc = "Ocurrió un error al obtener los usuarios.";
  79. }
  80. $stmt->closeCursor();
  81. $stmt = null;
  82. $stmt = $pdo->prepare('Select * from fs_constanciafirma(NULL, true)');
  83. if($stmt->execute()){
  84. $firmas_rs = $stmt->fetchAll();
  85. }
  86. $stmt->closeCursor();
  87. $stmt = null;
  88. //--Manejo de errores y mensajes de exito
  89. if(isset($_GET["error"]) && is_numeric($_GET["error"])){
  90. switch ($_GET["error"]){
  91. case 0: $errorDesc = "No se reciberon los datos para generar el archivo."; break;
  92. case 1: $errorDesc = "No tienes permisos de realizar esa acción."; break;
  93. case 2: $errorDesc = "Ocurrió un error al obtener los datos de las constancias."; break;
  94. case 3: $errorDesc = "Ocurrió un error al generar las constancias."; break;
  95. case 4: $errorDesc = "Ocurrió un error al actualizar el texto de las constancias."; break;
  96. }
  97. }
  98. if(isset($_GET["ok"]) && is_numeric($_GET["ok"])){
  99. switch ($_GET["ok"]){
  100. case 0: $successDesc = "Las fechas se guardaron correctamente."; break;
  101. }
  102. }
  103. ?>
  104. <main class="container-fluid content marco">
  105. <?php include_once("../include/errorMessage.php");?>
  106. <?php if ($objSesion->puedeEditar()){
  107. ?>
  108. <div id="forma_block">
  109. <form action="./export/pdf_constancias_ei_split.php" method="post" id="formaConstancias" enctype="multipart/form-data">
  110. <!-- id documento se obtiene solo cuando se genera -->
  111. <input type="hidden" name="concurso" value="<?php echo $concurso;?>">
  112. <input type="hidden" name="doc_desc" id="doc_desc" value="<?php echo $doc_desc;?>"><!-- texto: constancia, reconocimiento -->
  113. <input type="hidden" name="doc_id" id="doc_id" value="<?php echo $doc_id;?>">
  114. <input type="hidden" id="motivo" name="motivo" value="<?php echo $part_desc;?>"> <!-- participante, ganador..-->
  115. <input type="hidden" id="part_id" name="part_id" value="<?php echo $part;?>"> <!-- participante, ganador..-->
  116. <div class="form-box">
  117. <div class="form-group row">
  118. <label class="col-4 col-form-label">Participantes *</label>
  119. <div class="col-8 col-md-6">
  120. <div style="max-height:200px; overflow:auto; padding-right:10px" id="participante_list">
  121. <?php foreach($usr_rs as $usr){?>
  122. <div class="ml-4">
  123. <input type="checkbox" name="participantes[]" class="form-check-input radio-md participante_check" value="<?php echo $usr["idusuario"];?>" id="usr_check<?php echo $usr["idusuario"];?>" checked="checked">
  124. <label for="usr_check<?php echo $usr["idusuario"];?>"><?php echo $usr["nombre"];?></label>
  125. </div>
  126. <?php } ?>
  127. </div>
  128. </div>
  129. </div>
  130. <div class="form-group row">
  131. <label for="desc" class="col-4 col-form-label">Texto de la constancia *<br><button type="button" class="btn btn-sm btn-outline-secondary" data-toggle="modal" data-target="#modalPalabras">Palabras clave <span class="ing-flecha ing-rotate-45"></span></button></label>
  132. <div class="col-8 col-md-6">
  133. <textarea id="desc" name="desc" class="richtext" rows="4"><?php echo $texto_rs["ConstanciaTextoSistema_desc"]; ?></textarea>
  134. </div>
  135. </div>
  136. <div class="form-group row">
  137. <label for="fecha" class="col-4 col-form-label">Fecha de la constancia *</label>
  138. <div class="col-8 col-md-4">
  139. <input id="fecha" name="fecha" type="text" class="form-control date-picker-all" placeholder="dd/mm/aaaa" maxlength="10" required="required" readonly="readonly" value="<?php echo date("d/m/Y");?>">
  140. </div>
  141. </div>
  142. <div class="form-group row">
  143. <label for="fecha" class="col-4 col-form-label">Imagen adicional</label>
  144. <div class="col-6 col-md-4">
  145. <input id="logo" name="archivo" type="file" class="form-control-file" accept="image/png, image/gif, image/jpeg">
  146. </div>
  147. <!--<div class="col-2">
  148. <button type="button" class="btn btn-outline-danger btn-clear-file btn-block" onclick="$('#logo').val('');"><?php echo $ICO["borrar"];?></button>
  149. </div>-->
  150. </div>
  151. <div class="form-group row">
  152. <label for="tipo" class="col-4 col-form-label">Número de firmas *</label>
  153. <div class="col-8 col-md-4">
  154. <div class="datalist datalist-select mb-1 w-100" id="datalistFirmas">
  155. <div class="datalist-input">1 Firma</div>
  156. <span class="ing-buscar icono"></span>
  157. <ul style="display:none">
  158. <?php for($i=1; $i<=4; $i++) {?>
  159. <li data-id="<?php echo $i;?>"><?php echo $i;?> Firma<?php if ($i>1){echo 's';}?> </li>
  160. <?php }?>
  161. </ul>
  162. <input type="hidden" id="num_firmas" name="num_firmas" value="1">
  163. </div>
  164. </div>
  165. </div>
  166. </div>
  167. <p class="font-weight-bold">Orden de los firmantes</p>
  168. <ul>
  169. <li>Jerarquía alta | Jerarquía baja </li>
  170. <li>Jerarquía baja | Jerarquía alta | Jerarquía media</li>
  171. </ul>
  172. <div class="form-box" id="firmas_block">
  173. <div class="form-group row firma-box" data-id="1">
  174. <div class="col-5">
  175. <div class="datalist datalist-select mb-1 w-100 datalist-firma" id="datalistFirma_1">
  176. <div class="datalist-input">1</div>
  177. <span class="ing-buscar icono"></span>
  178. <ul style="display:none">
  179. <?php foreach($firmas_rs as $firma) { ?>
  180. <li data-id="<?php echo $firma["ConstanciaFirma_id"];?>" data-puesto="<?php echo $firma["ConstanciaFirma_puesto"];?>">
  181. <?php
  182. //echo mb_convert_case(mb_strtolower($firma["ConstanciaFirma_nombre"]), MB_CASE_TITLE, "UTF-8");
  183. echo $firma["ConstanciaFirma_nombre"];
  184. ?>
  185. </li>
  186. <?php }?>
  187. </ul>
  188. <input type="hidden" id="firma_1" name="firma[]" value="0" class="firma_input">
  189. </div>
  190. </div>
  191. <div class="col-5">
  192. <input type="text" id="puesto_1" name="puesto[]" class="form-control puesto_input" placeholder="Puesto" value="<?php echo $firmas_rs[0]["ConstanciaFirma_puesto"];?>" required="required">
  193. </div>
  194. <div class="col-2 pt-1 pl-4">
  195. <input type="checkbox" class="form-check-input radio-md lleva_firma" value="1" id="lleva_firma_1">
  196. <label for="lleva_firma_1">Mostrar firma</label>
  197. <input name="lleva_firma[]" type="hidden" class="lleva_firma_hidden" value="0">
  198. </div>
  199. </div>
  200. </div>
  201. <div class="form-group row">
  202. <div class="col-12 text-center">
  203. <button type="button" class="btn btn-outline-primary btn-abrir-confirm"><?php echo $ICO["aceptar"];?> Generar constancias</button>
  204. <a href="constancias_ei.php?id=<?php echo $concurso;?>" class="btn btn-outline-danger"><span class="ing-cancelar"></span> Regresar</a>
  205. </div>
  206. </div>
  207. </form>
  208. </div>
  209. <div id="generado_block" class="d-none">
  210. <h3 class="mt-5"><?php echo $ICO["alerta"];?> Se está generado el archivo .zip de los documentos elegidos</h3>
  211. <p class="text-center">
  212. <a href="constancias_ei.php?id=<?php echo $concurso;?>" class="btn btn-outline-primary mt-3"><span class=""></span> Regresar</a>
  213. </p>
  214. </div>
  215. <?php } ?>
  216. </main>
  217. <!--- FOOTER--->
  218. <?php require_once("../include/footer.php"); ?>
  219. <!-- Modal -->
  220. <div class="modal fade" id="modal_confirm" tabindex="-1" role="dialog" aria-labelledby="modal" aria-hidden="true">
  221. <div class="modal-dialog modal-dialog-centered modal-lg" role="document">
  222. <div class="modal-content">
  223. <div class="modal-body">
  224. <div class="row">
  225. <div class="col bg-light p-4">
  226. <h4 id="confirm-participante">Nombre</h4>
  227. <div id="confirm-desc">Texto</div>
  228. <p id="confirm-fecha">Fecha</p>
  229. <div class="row" id="confirm-firma-list">
  230. <div class="col">
  231. <p><b class="confirm-firma">Firma</b><br>
  232. <span class="confirm-puesto">Puesto</span>
  233. </p>
  234. </div>
  235. </div>
  236. </div>
  237. </div>
  238. <hr>
  239. <div class="row">
  240. <div class="col">
  241. <p class="font-weight-bold">¿Estás seguro de que quieres generar las constancias?</p>
  242. <p>Una vez generadas se asignará un folio único.<br>En caso de haber errores se deberá cancelar y generar una nueva.</p>
  243. </div>
  244. </div>
  245. </div>
  246. <div class="modal-footer">
  247. <input type="hidden" id="id_borrar" value="">
  248. <button type="button" class="btn btn-outline-primary btn-enviar"><?php echo $ICO["aceptar"];?> Continuar</button>
  249. <button type="button" class="btn btn-outline-danger" data-dismiss="modal" aria-label="Close"><?php echo $ICO["cancelar"];?> Cancelar</button>
  250. </div>
  251. </div>
  252. </div>
  253. </div>
  254. <!-- Plabras clave -->
  255. <div class="modal fade" id="modalPalabras" tabindex="-1" role="dialog" aria-labelledby="modal" aria-hidden="true">
  256. <div class="modal-dialog modal-dialog-centered modal" role="document">
  257. <div class="modal-content">
  258. <div class="modal-header">
  259. <h4 class="col-12 modal-title text-center"><span id="modalLabel">Palabras clave</span>
  260. <button type="button" class="close text-white" data-dismiss="modal" aria-label="Close">
  261. <span aria-hidden="true">&times;</span>
  262. </button></h4>
  263. </div>
  264. <div class="modal-body">
  265. <p>Los códigos serán reemplazados por la información personalizada de la persona o concurso.</p>
  266. <?php foreach($_CODIGO_TEXTO as $codigo){?>
  267. <div class="row mb-2">
  268. <div class="col-6">
  269. <p class="text-right my-2"><?php echo $codigo["desc"];?></p>
  270. </div>
  271. <div class="col-6">
  272. <div class="input-group">
  273. <input type="text" class="form-control texto-copiar text-info" value="<?php echo $codigo["code"];?>" readonly="true">
  274. <div class="input-group-append">
  275. <button class="btn btn-outline-primary btn-copiar" type="button" title="Copiar código" data-dismiss="modal"><span class="ing-copiar"></span></button>
  276. </div>
  277. </div>
  278. </div>
  279. </div>
  280. <?php } ?>
  281. <div class="text-center mt-4"><button type="reset" class="btn btn-outline-danger" data-dismiss="modal"><?php echo $ICO["cancelar"];?> Cerrar</button></div>
  282. </div>
  283. </div>
  284. </div>
  285. </div>
  286. </div>
  287. <script src="../js/jquery.min.js"></script>
  288. <script src="../js/jquery-ui.js"></script>
  289. <script src="../js/datepicker-es.js"></script>
  290. <script src="../js/bootstrap/popper.min.js"></script>
  291. <script src="../js/bootstrap/bootstrap.min.js"></script>
  292. <script src="../js/fechas.js"></script>
  293. <script src="../js/sidebarmenu.js"></script>
  294. <?php if($objSesion->puedeEditar()){ ?>
  295. <script src="../js/toggle.js"></script>
  296. <script src="../js/datalist.js"></script>
  297. <script src="../js/util.js"></script>
  298. <script src="../js/tinymce/tinymce.min.js"></script>
  299. <script>
  300. var datepickerOptions_all = { dateFormat: "dd/mm/yy", changeMonth: true};
  301. tinymce.init({
  302. selector: '.richtext',
  303. statusbar: false,
  304. toolbar: 'undo redo | bold italic',
  305. branding: false,
  306. menubar: false,
  307. valid_elements : 'strong/b,em/i',
  308. });
  309. $(document).ready(function(){
  310. setDatalistFirst("#tipo");
  311. setDatalistFirst("#firma_1");
  312. $(".date-picker-all" ).datepicker(datepickerOptions_all);
  313. $(".date-picker-all" ).datepicker( $.datepicker.regional[ "es" ] );
  314. $("#datalistFirmas ul li").click(function(){//cambia datalist
  315. var total = $("#firmas_block .firma-box").length;
  316. var nuevos = $(this).data('id');
  317. if(total < nuevos){
  318. //Clonar
  319. do{
  320. var cloned = $("#firmas_block >.firma-box:first-child").clone(true).appendTo("#firmas_block");
  321. //cloned.find("input").val("");
  322. total++;
  323. cloned.find(".firma_input").attr("id", "firma_"+total);
  324. cloned.find(".puesto_input").attr("id", "puesto_"+total);
  325. cloned.data("id", total);
  326. cloned.find(".lleva_firma").attr("id", "lleva_firma_"+total);
  327. cloned.find(".lleva_firma").siblings("label").attr("for", "lleva_firma_"+total);
  328. }while(total < nuevos);
  329. }else if(total > nuevos){
  330. //Quitar
  331. do{
  332. $("#firmas_block >.firma-box:last-child").remove();
  333. total--;
  334. }while(total > nuevos);
  335. }
  336. });
  337. $(".datalist-firma ul li").click(function(){//cambia datalist
  338. var id = $(this).parents(".firma-box").data('id');
  339. var puesto = $(this).data('puesto');
  340. console.log("Busca puesto "+id+", "+puesto);
  341. $("#puesto_"+id).val(puesto);
  342. });
  343. $(".btn-copiar").click(function(){
  344. var textoCopiar = $(this).parents(".input-group").find('.texto-copiar');
  345. textoCopiar.select();
  346. document.execCommand("copy");
  347. window.getSelection().removeAllRanges();
  348. //textoCopiar.blur();
  349. });
  350. //--- Modales
  351. $(".block-crear").removeClass("d-none"); // Quitar
  352. $('#modalParticipante').on('show.bs.modal', function (e) {
  353. $('#modalParticipante').find("input[type=text]").val("");
  354. });
  355. $('#modalParticipante').on('shown.bs.modal', function (e) {
  356. $('#modalParticipante').find("input[type=text]:first").focus();
  357. });
  358. $('#modalParticipante input[type=text]').keydown(function(event) {
  359. if (event.keyCode == 13) {
  360. $("#btn-guarda").trigger('click');
  361. }
  362. });
  363. $(".perfil").click(function(){
  364. var show = $(this).data("show");
  365. var hide = $(this).data("hide");
  366. $("."+show).removeClass("d-none");
  367. $("."+hide).addClass("d-none");
  368. $("#resultados").addClass("d-none");
  369. $("#nombre_alumno").removeClass("is-invalid");
  370. });
  371. $("#btn-guarda").click(function(){
  372. $("#nombre_alumno").removeClass("is-invalid");
  373. var nombre_new = trim($("#nombre_alumno").val() );
  374. //console.log(nombre_new);
  375. if(nombre_new == ""){
  376. $("#nombre_alumno").addClass("is-invalid");
  377. return;
  378. }
  379. if($("#participante_list").hasClass("d-none")){
  380. $(".participante-block .part-texto").val( nombre_new );
  381. $(".participante-block .part-texto").attr("disabled", false);
  382. $("#participante_list").removeClass("d-none");
  383. }else{
  384. var cloned = $("#participante_list >.participante-block:first-child").clone(true).appendTo("#participante_list");
  385. cloned.find(".part-texto").val(nombre_new);
  386. }
  387. $('#modalParticipante').modal('hide');
  388. });
  389. $(".btn-abrir-confirm").click(function(){
  390. if(validaForma()){
  391. $('#modal_confirm').modal('show');
  392. }else{
  393. $("#errorBox").collapse('show');
  394. $('#messageBox')[0].scrollIntoView({ block: "end" });
  395. }
  396. });
  397. $('#modal_confirm').on('show.bs.modal', function (e) {
  398. $("#confirm-participante").text( $(".participante-block .part-texto:first-child").val() );
  399. $("#confirm-desc").html( tinymce.get('desc').getContent() );
  400. $("#confirm-fecha").text( $("#fecha").val() );
  401. var firmas_block = $("#confirm-firma-list .col").length;
  402. var firmas = $('.puesto_input').length;
  403. if(firmas_block < firmas){//faltan
  404. do{
  405. var cloned = $("#confirm-firma-list >.col:first-child").clone(true).appendTo("#confirm-firma-list");
  406. firmas_block++;
  407. }while(firmas_block < firmas);
  408. }else{
  409. while(firmas_block > firmas){
  410. $("#confirm-firma-list >col:last-child").remove();
  411. firmas_block--;
  412. }
  413. }
  414. $.each($('#confirm-firma-list .col'), function(i){
  415. var nombre = getDatalistText($("#firma_"+(i+1)), $("#firma_"+(i+1)).val())
  416. $(this).find(".confirm-firma").text( nombre );
  417. $(this).find(".confirm-puesto").text( $("#puesto_"+(i+1)).val() );
  418. });
  419. });
  420. $(".btn-enviar").click(function(){
  421. $.each($('.firma-box'), function(i){
  422. if($(this).find(".lleva_firma").prop("checked")){
  423. $(this).find(".lleva_firma_hidden").val("1");
  424. }else{
  425. $(this).find(".lleva_firma_hidden").val("0");
  426. }
  427. });
  428. $("#formaConstancias").submit();
  429. $('#modal_confirm').modal('hide');
  430. $('#messageBox')[0].scrollIntoView({ block: "end" });
  431. $("#forma_block").addClass("d-none");
  432. $("#generado_block").removeClass("d-none");
  433. });
  434. });
  435. $(document).on( "click", ".btn-borrar", function(event){
  436. if($(".participante-block").length > 1){
  437. $(this).parents(".participante-block").remove();
  438. }else{
  439. $(".participante-block .part-texto").attr("disabled", true).val("");
  440. $("#participante_list").addClass("d-none");
  441. }
  442. });
  443. function validaForma(){
  444. $(".is-invalid").removeClass("is-invalid");
  445. var error = false;
  446. if(tinymce.get('desc').getContent() == ""){
  447. error = true;
  448. }
  449. $.each($('.puesto_input'), function(){
  450. if(trim($(this).val()) == ""){
  451. error = true;
  452. $(this).addClass("is-invalid");
  453. }
  454. });
  455. if(error){
  456. $("#errorBox_text").html("Debes completar todos los campos");
  457. return false;
  458. }
  459. if($(".participante_check:checked").length == 0){
  460. $("#errorBox_text").html("Debes elegir al menos un participante");
  461. return false;
  462. }
  463. return true;
  464. }
  465. </script>
  466. <?php } ?>
  467. </body>
  468. </html>