PageRenderTime 46ms CodeModel.GetById 15ms RepoModel.GetById 1ms app.codeStats 0ms

/App/AppArchivos/App/Modulos/Administrador/Controladores/Documentos.php

https://bitbucket.org/Vencar/apparchivosweb
PHP | 344 lines | 244 code | 31 blank | 69 comment | 73 complexity | 191e040aceaae5ff971fff1effd4f7d9 MD5 | raw file
Possible License(s): LGPL-2.1, MPL-2.0-no-copyleft-exception, AGPL-3.0, MIT, LGPL-3.0, GPL-2.0, GPL-3.0, Apache-2.0
  1. <?php
  2. /**
  3. * Controlador: Index
  4. */
  5. class Documentos extends Controlador
  6. {
  7. /**
  8. * Metodo: Constructor
  9. */
  10. function __Construct()
  11. {
  12. parent::__Construct();
  13. }
  14. /**
  15. * Metodo: Index
  16. * Se crea la instancia de la plantilla
  17. * Se muestra la vista pricipal del modulo
  18. * Administador
  19. */
  20. public function Index()
  21. {
  22. $Plantilla = new NeuralPlantillasTwig(APP);
  23. echo $Plantilla->MostrarPlantilla(AppPlantilla::Separador(array('Principal', 'Index.html')));
  24. unset($Plantilla);
  25. }
  26. /**
  27. * Metodo: formAgregar
  28. * Se crea la instancia de la plantilla
  29. * Se muestra la vista del formulario para
  30. * Agregar un archivo
  31. */
  32. public function formAgregar()
  33. {
  34. if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) == true AND mb_strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest' AND $_SERVER['HTTP_REFERER'] != $_SERVER['HTTP_HOST']) {
  35. $Categoria = $this->Modelo->ConsultaCategorias();
  36. $Validacion = new NeuralJQueryFormularioValidacion(true, true, false);
  37. $Validacion->Requerido('Titulo', '* Campo requerido');
  38. $Validacion->Requerido('IdCategoria', '* Campo requerido');
  39. $Validacion->Requerido('NombreArchivo', '* Necesita cargar archivo');
  40. $Plantilla = new NeuralPlantillasTwig(APP);
  41. $Plantilla->Parametro('Scripts', $Validacion->Constructor('frmAgregar'));
  42. $Plantilla->Parametro('Token', NeuralCriptografia::Codificar(AppFechas::ObtenerFechaActual(), APP));
  43. $Plantilla->Parametro('Categorias', $Categoria, APP);
  44. echo $Plantilla->MostrarPlantilla(AppPlantilla::Separador(array('Documentos', 'Agregar', 'FormularioCargar.html')));
  45. unset($Plantilla);
  46. }
  47. }
  48. public function ActualizarDocumento()
  49. {
  50. if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) == true AND mb_strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest' AND $_SERVER['HTTP_REFERER'] != $_SERVER['HTTP_HOST']) {
  51. if (isset($_POST) AND isset($_POST['Token']) == true AND (NeuralCriptografia::DeCodificar($_POST['Token'], APP) == AppFechas::ObtenerFechaActual()) == true) {
  52. unset($_POST['Token']);
  53. $_POST['IdInformacionDocuento'] = NeuralCriptografia::DeCodificar($_POST['IdInformacionDocuento']);
  54. $this->ActualizarDatos($_POST);
  55. }
  56. }
  57. }
  58. private function ActualizarDatos($Datos = false)
  59. {
  60. if ($Datos == true and is_array($Datos)) {
  61. $Omitidos = ['Descripcion'];
  62. if (AppPost::DatosVaciosOmitidos($Datos, $Omitidos) == false) {
  63. $DatosPost = AppPost::LimpiarInyeccionSQL($Datos);
  64. $this->Categoria($DatosPost);
  65. }
  66. }
  67. }
  68. private function Categoria($Datos = false)
  69. {
  70. if (isset($Datos) and is_array($Datos)) {
  71. ((int)$Datos['IdCategoria'] > 0 ? $this->ActualizarInformacion($Datos) : $this->ActualizarCategoria($Datos));
  72. }
  73. }
  74. private function ActualizarInformacion($Datos = false)
  75. {
  76. if ($Datos == true and is_array($Datos)) {
  77. ($this->Modelo->ActualizarInformacionDocumento($Datos) ? $this->VistaActualizarExito() : $this->VistaActualizarError());
  78. }
  79. }
  80. private function ActualizarCategoria($Datos = false)
  81. {
  82. if ($Datos == true and is_array($Datos)) {
  83. $this->Modelo->AgregarCategoria($Datos['IdCategoria']);
  84. $IdCategoria = $this->Modelo->ConsultarIdCategoria($Datos['IdCategoria']);
  85. $Datos['IdCategoria'] = $IdCategoria[0]['IdCategoria'];
  86. $this->ActualizarInformacion($Datos);
  87. unset($Datos, $IdCategoria);
  88. }
  89. }
  90. public function formEditar()
  91. {
  92. if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) == true AND mb_strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest' AND $_SERVER['HTTP_REFERER'] != $_SERVER['HTTP_HOST']) {
  93. $Categoria = $this->Modelo->ConsultaCategorias();
  94. $InformacionDocumento =
  95. $this->Modelo->ConsultarInformacionDocumento(NeuralCriptografia::DeCodificar($_POST['IdDocumento']))[0];
  96. $NombreCategoria = $this->Modelo->ConsultarCategoria($InformacionDocumento['IdCategoria'])[0];
  97. $InformacionDocumento['NombreCategoria'] = $NombreCategoria['Descripcion'];
  98. unset($NombreCategoria);
  99. $Validacion = new NeuralJQueryFormularioValidacion(true, true, false);
  100. $Validacion->Requerido('Titulo', '* Campo requerido');
  101. $Validacion->Requerido('IdCategoria', '* Campo requerido');
  102. $Plantilla = new NeuralPlantillasTwig(APP);
  103. $Plantilla->Parametro('Scripts', $Validacion->Constructor('frmEditar'));
  104. $Plantilla->Parametro('Token', NeuralCriptografia::Codificar(AppFechas::ObtenerFechaActual(), APP));
  105. $Plantilla->Parametro('Categorias', $Categoria, APP);
  106. $Plantilla->Parametro('Informacion', $InformacionDocumento);
  107. $Plantilla->Filtro('Cifrado', function ($Parametro) {
  108. return NeuralCriptografia::Codificar($Parametro, APP);
  109. });
  110. echo $Plantilla->MostrarPlantilla(AppPlantilla::Separador(array('Documentos', 'Editar', 'FormularioEditar.html')));
  111. unset($Plantilla);
  112. }
  113. }
  114. /**
  115. * Metodo: Listado
  116. * Se llama al modelo para consultar los documentos existentes
  117. * se pasa el parametro a la plantilla
  118. * y se muestra la tabla con los documentos
  119. */
  120. public function Listado()
  121. {
  122. if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) == true AND mb_strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest' AND $_SERVER['HTTP_REFERER'] != $_SERVER['HTTP_HOST']) {
  123. $ListadoDocumentos = $this->Modelo->ListarDocumentos();
  124. $Plantilla = new NeuralPlantillasTwig(APP);
  125. $Plantilla->Parametro('Listado', $ListadoDocumentos, APP);
  126. $Plantilla->Filtro('Cifrado', function ($Parametro) {
  127. return NeuralCriptografia::Codificar($Parametro, APP);
  128. });
  129. echo $Plantilla->MostrarPlantilla(AppPlantilla::Separador(array('Documentos', 'Listado', 'Listado.html')));
  130. unset($Plantilla, $ListadoDocumentos);
  131. }
  132. }
  133. public function VizualizarDocumento()
  134. {
  135. if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) == true AND mb_strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest' AND $_SERVER['HTTP_REFERER'] != $_SERVER['HTTP_HOST']) {
  136. $IdDocumento = $this->Modelo->ConsultarIdEditar(NeuralCriptografia::DeCodificar($_POST['IdDocumento']))[0];
  137. $RutaDocumento = $this->Modelo->ConsultarRutaDocumento($IdDocumento['IdDocumento'])[0];
  138. $this->ValidarExtencion($RutaDocumento);
  139. }
  140. }
  141. public function ValidarExtencion($Cadena = false)
  142. {
  143. if ($Cadena) {
  144. $Extencion = AppDropzone::ObtenerExtensionArchivo($Cadena['RutaArchivo']);
  145. $Ruta = AppDropzone::RutaArchivo($Cadena['RutaArchivo']);
  146. if ($Extencion == "pdf" || $Extencion == "PDF"){
  147. $this->VisualizarPDF($Ruta);
  148. }
  149. else{
  150. $this->VisualizarExcel($Ruta);
  151. }
  152. }
  153. }
  154. private function VisualizarPDF($Ruta){
  155. $Plantilla = new NeuralPlantillasTwig(APP);
  156. $Plantilla->Parametro('Nombre', $Ruta, APP);
  157. echo $Plantilla->MostrarPlantilla(AppPlantilla::Separador(['Documentos', 'Visualizar', 'Documento.html']));
  158. unset($IdDocumento, $RutaDocumento, $Ruta, $Plantilla);
  159. }
  160. private function VisualizarExcel($Ruta){
  161. $Plantilla = new NeuralPlantillasTwig(APP);
  162. $Plantilla->Parametro('Nombre', $Ruta, APP);
  163. echo $Plantilla->MostrarPlantilla(AppPlantilla::Separador(['Documentos', 'Visualizar', 'DocumentoExcel.html']));
  164. unset($IdDocumento, $RutaDocumento, $Ruta, $Plantilla);
  165. }
  166. /**
  167. * Metodo: Guardar
  168. * Se valida que sea una peticion ajax de la maquina
  169. * se verifica la llave y se manda al metodo VerificarAlmacenarDatos
  170. */
  171. public function Guardar()
  172. {
  173. if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) == true AND mb_strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest' AND $_SERVER['HTTP_REFERER'] != $_SERVER['HTTP_HOST']) {
  174. if (isset($_POST) AND isset($_POST['Token']) == true AND (NeuralCriptografia::DeCodificar($_POST['Token'], APP) == AppFechas::ObtenerFechaActual()) == true) {
  175. unset($_POST['Token']);
  176. $this->VerificarAlmacenarDatos($_POST);
  177. }
  178. }
  179. }
  180. /**
  181. * Metodo: VerificarAlmacenarDatos
  182. * Se limpian los datos de post para evitar
  183. * inyecciones sql y se evalua
  184. * si existe en la base de datos la categoria
  185. * si no existe manda a llamar al metodo para agregarla
  186. * si existe manda a llamar el metodo para guardar la informacion
  187. * del documento
  188. */
  189. private function VerificarAlmacenarDatos($Datos = false)
  190. {
  191. if ($Datos == true and is_array($Datos)) {
  192. $Omitidos = ['Descripcion'];
  193. if (AppPost::DatosVaciosOmitidos($Datos, $Omitidos) == false) {
  194. $DatosPost = AppPost::ConvertirTextoUcwordsOmitido(AppPost::FormatoEspacio(AppPost::LimpiarInyeccionSQL($_POST)), $Omitidos);
  195. ($this->DuplicidadTitulo($DatosPost['Titulo'])['Cantidad'] == 0 ? $this->VerificarCategoria($DatosPost) : $this->VistaError());
  196. unset($Datos, $DatosPost, $IdDocumento);
  197. }
  198. }
  199. }
  200. private function VerificarCategoria($Datos = false)
  201. {
  202. if (isset($Datos) and is_array($Datos)) {
  203. ((int)$Datos['IdCategoria'] > 0 ? $this->InsertarInformacion($Datos) : $this->AgregarCategoria($Datos));
  204. }
  205. }
  206. private function DuplicidadTitulo($Titulo = false)
  207. {
  208. if ($Titulo == true) {
  209. return $this->Modelo->ConsultarTituloExistente($Titulo);
  210. }
  211. }
  212. /**
  213. * Metodo: InsertarInformacion
  214. * Se obtiene el id del documento almacenado
  215. * Se prepara el arreglo para insertar la
  216. * informacion del documento
  217. * maneja las vistas de exito y error
  218. */
  219. public function InsertarInformacion($Datos = false)
  220. {
  221. if ($Datos == true AND is_array($Datos)) {
  222. $IdDocumento = $this->Modelo->ConsultarIdDocumento($Datos['NombreArchivo']);
  223. unset($Datos['NombreArchivo']);
  224. $Datos['IdDocumento'] = $IdDocumento[0]['IdDocumento'];
  225. ($this->Modelo->AlmacenarInformacion($Datos) ? $this->VistaExito() : $this->VistaError());
  226. }
  227. }
  228. /**
  229. * Metodo: AgregarCategoria
  230. * Inserta una cateogira y obtiene su id
  231. * Hace el llamado para insertar la informacion del documento
  232. *
  233. */
  234. public function AgregarCategoria($Datos = false)
  235. {
  236. if ($Datos == true AND is_array($Datos)) {
  237. $this->Modelo->AgregarCategoria($Datos['IdCategoria']);
  238. $IdCategoria = $this->Modelo->ConsultarIdCategoria($Datos['IdCategoria']);
  239. $Datos['IdCategoria'] = $IdCategoria[0]['IdCategoria'];
  240. $this->InsertarInformacion($Datos);
  241. unset($Datos, $IdCategoria);
  242. }
  243. }
  244. /**
  245. * Metodo: VistaExito
  246. * Muestra la plantilla
  247. * de documento agregado
  248. * correctamente
  249. */
  250. private function VistaExito()
  251. {
  252. $Plantilla = new NeuralPlantillasTwig(APP);
  253. echo $Plantilla->MostrarPlantilla(AppPlantilla::Separador(array('Documentos', 'Agregar', 'Mensajes', 'Correcto.html')));
  254. }
  255. private function VistaActualizarExito()
  256. {
  257. $Plantilla = new NeuralPlantillasTwig(APP);
  258. echo $Plantilla->MostrarPlantilla(AppPlantilla::Separador(array('Documentos', 'Editar', 'Mensajes', 'Correcto.html')));
  259. }
  260. /**
  261. * Metodo: VistaError
  262. * Muestra la plantilla
  263. * de error al cargar el documento
  264. */
  265. private function VistaError()
  266. {
  267. $Plantilla = new NeuralPlantillasTwig(APP);
  268. echo $Plantilla->MostrarPlantilla(AppPlantilla::Separador(array('Documentos', 'Agregar', 'Mensajes', 'Error.html')));
  269. }
  270. private function VistaActualizarError()
  271. {
  272. $Plantilla = new NeuralPlantillasTwig(APP);
  273. echo $Plantilla->MostrarPlantilla(AppPlantilla::Separador(array('Documentos', 'Editar', 'Mensajes', 'Error.html')));
  274. }
  275. /**
  276. * Metodo: GuardarArchivo
  277. * Se encarga de guardar el archivo
  278. * subido mediante Dropzone
  279. * y recuperar el nombre para pasarlo al formulario
  280. * para agregar la informacion del documento
  281. */
  282. public function GuardarArchivo()
  283. {
  284. if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) == true AND mb_strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest' AND $_SERVER['HTTP_REFERER'] != $_SERVER['HTTP_HOST']) {
  285. if (is_array($_FILES) == true) {
  286. if ($NombreArchivo = AppDropzone::SubirArchivo($_FILES)) {
  287. $this->Modelo->GuardarDocumento($NombreArchivo);
  288. $Nombre = json_encode(['Nombre' => $NombreArchivo]);
  289. header('Content-Type: application/json');
  290. echo $Nombre;
  291. unset($NombreArchivo, $Nombre);
  292. } else {
  293. $Nombre = json_encode(['Nombre' => "Invalido"]);
  294. header('Content-Type: application/json');
  295. echo $Nombre;
  296. unset($NombreArchivo, $Nombre);
  297. }
  298. }
  299. }
  300. }
  301. public function EliminarDocumento()
  302. {
  303. if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) == true AND mb_strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest' AND $_SERVER['HTTP_REFERER'] != $_SERVER['HTTP_HOST']) {
  304. if (isset($_POST) == true AND isset($_POST['IdDocumento']) == true) {
  305. $IdDocumento = NeuralCriptografia::DeCodificar($_POST['IdDocumento']);
  306. $Arreglo = array('Status' => 'ELIMINADO');
  307. $Condicion = array('IdInformacionDocumento' => $IdDocumento);
  308. $this->Modelo->ActualizarEstadoDocumento($Arreglo, $Condicion);
  309. unset($IdDocumento, $Arreglo, $Condicion);
  310. }
  311. }
  312. }
  313. }