error al querer imprimir solicitud de becas URGENTE

Hola Luciana, gracias por la información!!!

Probemos lo siguiente:

  1. La librería maennchen/zipstream-php requiere la extensión ext-mbstring, ¿la tenes instalada?

  2. Si en la función accion__imprimir_solicitud de la clase src/siu/operaciones/convocatorias_becas/controlador.php comentas temporalmente los unlink vas a poder ver los PDFs en la carpeta instalacion/temp/<bloque_acceso>:


//unlink($path_pdf_kolla);
//unlink($path_pdf_guarani);

¿Dichos PDFs se generan bien o están corruptos?

  1. También decime cuanto pesan los PDFs, ya que hay una opción de la librería ZipStream donde carga archivos de como máximo 20 megabytes, se puede incrementar dicho valor.

Te adjunto como me lo descarga a mi.

saludos.
2


convocatoria.zip (33 KB)

te envío fotos pero
te recuerdo tengo todas las librerías requeridas en ambos ambientes, no da ningún error ni en el apache o guaraní, ya qeu genera el archivo y lo descarga, el tema es que lo baja como .pdf y no como .zip
si lo cambio de extensión puedo descomprimirlos y están bien los puedo ver y abrir y todo.
Pero los baja con la extensión incorrecta


php.zip (518 KB)

Hola Luciana, gracias por las capturas, parecería estar todo bien!!!

Probemos las siguientes opciones de la librería ZipStream, en la función accion__imprimir_solicitud de la clase src/siu/operaciones/convocatorias_becas/controlador.php:


				$opt = [
					\ZipStream\ZipStream::OPTION_CONTENT_TYPE => 'application/x-zip',
					\ZipStream\ZipStream::OPTION_CONTENT_DISPOSITION => 'attachment; filename=\"convocatoria.zip\"',
					\ZipStream\ZipStream::OPTION_SEND_HTTP_HEADERS => true
				];
				// https://packagist.org/packages/maennchen/zipstream-php#v0.5.2
				$zip = new \ZipStream\ZipStream('convocatoria.zip', $opt);

Avísame si con ese cambio lo descarga con el nombre convocatoria.zip en lugar de convocatoria.pdf.

saludos.
2

eso es lo mas loco que lo descarga como guarani.pdf
ni siquiera como convocatoria.
te paso como sale el archivo.
Aviso qeu sigue igual con las modificaciones qeu me decis.

Te pregunto donde se definen los nombres de lso archivos de bajada, quizá esté ahí el tema, proque ya probé hasta hacer un rename en el controlador y nada

fijate lo que te adjunto, se llama guarani.pdf
pero tendría que ser convocatoria.zip


guarani.pdf (50.2 KB)

Hola Luciana,

Claro, veo que que pone mal la extensión, si le renombro a .zip se descomprime bien!!!

Toda la lógica esta en la función accion__imprimir_solicitud de la clase src/siu/operaciones/convocatorias_becas/controlador.php, yo lo tengo así con los cambios:


	function accion__imprimir_solicitud()
	{
		try {
			
			$hash_habilitacion = $this->validate_param(0, 'get', validador::TIPO_ALPHANUM);
			$convocatorias_aplicadas = $this->modelo()->info__convocatorias_aplicadas();

			// Si existe la convocatoria
			if (isset($convocatorias_aplicadas[$hash_habilitacion])) {

				$convocatoria = $convocatorias_aplicadas[$hash_habilitacion];
				$datos_impresion = $this->modelo()->info__convocatoria_impresion($convocatoria['becas_convocatoria']);
				$datos_impresion['convocatoria_nombre'] = $convocatoria['tehuelche_nombre'];
				$datos_impresion['convocatoria_descripcion'] = $convocatoria['tehuelche_informacion_adicional'];

				$opt = [
					\ZipStream\ZipStream::OPTION_CONTENT_TYPE => 'application/x-zip',
					\ZipStream\ZipStream::OPTION_CONTENT_DISPOSITION => 'attachment; filename=\"convocatoria.zip\"',
					\ZipStream\ZipStream::OPTION_SEND_HTTP_HEADERS => true,
					\ZipStream\ZipStream::OPTION_LARGE_FILE_SIZE => 100 * 1024 * 1024
				];
				// https://packagist.org/packages/maennchen/zipstream-php#v0.5.2
				$zip = new \ZipStream\ZipStream('convocatoria.zip', $opt);

				$path_pdf_kolla = $this->modelo()->info__pdf_formulario_kolla($convocatoria['kolla_id_habilitacion'], $convocatoria['formulario'], $convocatoria['hash'], $convocatoria['kolla_unidad_gestion']);
				$zip->addFileFromPath('kolla.pdf', $path_pdf_kolla);
				unlink($path_pdf_kolla);

				$path_pdf_guarani = $this->generar_pdf_guarani($datos_impresion);
				$zip->addFileFromPath('guarani.pdf', $path_pdf_guarani);
				unlink($path_pdf_guarani);

				$zip->finish();

				
			} else { // sino

				$data['mensaje_tipo'] = 'alert-error';
				$data['mensaje'] = 'convocatorias_becas.convocatoria_inexistente';
				$this->vista()->set_pagelet('mensaje', $data);

			}
		
		} catch (\Exception $e) {
			
			kernel::log()->add_error($e);
			
			$data['mensaje_tipo'] = 'alert-error';
			$data['mensaje'] = 'convocatorias_becas.ha_ocurrido_error';
			$this->vista()->set_pagelet('mensaje', $data);
			
		}
	}

El nombre se lo estoy poniendo en dos lugares:

$zip = new \ZipStream\ZipStream('convocatoria.zip', $opt);

y acá también:

\ZipStream\ZipStream::OPTION_CONTENT_DISPOSITION => 'attachment; filename=\"convocatoria.zip\"',

Este ultimo esta generando problemas, ya que le pone ese nombre:

$zip->addFileFromPath('guarani.pdf', $path_pdf_guarani);

¿que pasa si se lo pasas así?

$zip->addFileFromPath('guarani.pdf', $path_pdf_guarani, [], 'store');

saludos.
2

sigue bajando como guarani.pdf
por eso te decía que debe ser algo qeu hemos cambiado en donde se definen los nombres de lso archivos de bajada, alguna constante que hemos puesto, eso donde se define tiene que ser en algún lugar de la fuente.

Hola Luciana,

Todo se hace en la función finish de vendor/maennchen/zipstream-php/src/ZipStream.php.

Probemos esto antes que nada:

Quizás hay cambios dentro de vendor que se agregaron sin querer. Podes borrar la carpeta vendor y luego volver a ejecutar el comando composer install.

El archivo que tiene la lógica para generar en zip es este: vendor/maennchen/zipstream-php/src/ZipStream.php. Lo revise y no encontré nada raro. Quizás hay cambios que se introdujeron sin querer y por eso falla.

saludos.
2

nop. sigue igual
para mi hemos modificado en algún lado (por eso te preguntaba cual es el archivo que tiene eso) que por defecto la descarga de guarani se llame guarani.pdf
es la única qeu se me ocurre porque siguen saliendo guarani.pdf

Hola Luciana, vamos a tener que deguggear un poco:

En la función sendHttpHeaders de la clase vendor/maennchen/zipstream-php/src/ZipStream.php agrega esto:


	****************************************
	klog2("=== output_name ===", $this->output_name);
	klog2("=== disposition ===", $disposition);
	klog2("=== content_type ===", $content_type);
		
        $headers = array(
            'Content-Type' => $content_type,
            'Content-Disposition' => $disposition,
            'Pragma' => 'public',
            'Cache-Control' => 'public, must-revalidate',
            'Content-Transfer-Encoding' => 'binary'
        );
	****************************************

Luego al descargar el “zip” debuggea los valores del klog2 en el log, en mi caso registra esto:


--  === output_name ===  -------------------------------------------------------

convocatoria.zip

--  === disposition ===  -------------------------------------------------------

attachment; filename="convocatoria.zip"

--  === content_type ===  ------------------------------------------------------

application/x-zip

saludos.
2

Buenos dias,
donde se guardaría ese log?
en los logs del sistema no me sale nada
igualmente te paso lo que sale al momento de la descarga


error_pdf.rar (383 Bytes)

Hola Luciana,

Los logs se encuentran en la carpeta instalacion/log/des01/20201204_144107___3605.log de Autogestión, se genera un archivo por cada petición que haces. “des01” y “20201204_144107___3605.log” depende del nombre del bloque de acceso y la fecha de generación del log.

Por lo que veo no te esta logueando todo, para que loguee todo tenes que modificar el archivo instalacion/config.php y poner:


..........................
		'log' =>
		array(
			'activo' => true,
			/**
			 * Niveles de log: 
			 *  - 'log::NIVEL_DEBUG'	-> Recomendado en Desarrollo
			 *  - 'log::NIVEL_INFO'		-> Solo muestra información de tiempo y memoria consumida
			 *  - 'log::NIVEL_ERROR'	-> Recomendado en Producción
			 */
			'nivel' => log::NIVEL_DEBUG,
..........................

Por lo menos de manera temporal para poder loguear esos valores.

saludos.
2

Claro, lo tengo en nivel error, perdón.
Lo paso a debug y te envío

ahí va el archivo, jaja lo tengo igual qeu vos, es una locura esto


20201209_082638___7627.zip (7.38 KB)

Hola Luciana, gracias por los logs!!!

Tal cual, genera los mismos valores que en mi instalación!!!

Lo único que noto diferente es que tienen personalizado el co_alumnos.php, en dos lugares dice:


--  ############# se incluyo la clase co_personas_UNER del co co_personas ##############  

../../pers_gestion/php/nucleo/matriculas/personas/co_personas_UNER.php

Pero si se generan bien los PDFs no creo que eso sea un problema.

Probemos lo siguiente, en src/siu/operaciones/convocatorias_becas/controlador.php función accion__imprimir_solicitud:


$zip->addFileFromPath('kolla.pdf', $path_pdf_kolla); //<====> Reemplaza esto....
$zip->addFile('kolla.pdf', file_get_contents($path_pdf_kolla)); //<====> ....por esto otro.

$zip->addFileFromPath('guarani.pdf', $path_pdf_guarani); //<====> Reemplaza esto....
$zip->addFile('guarani.pdf', file_get_contents($path_pdf_guarani)); //<====> ....por esto otro.

es decir, usar la función addFile en lugar de addFileFromPath.

saludos.
2

sigue . pdf

te envío el archivo de controlador que tengo en éste momento, quizá vos le encontras algo raro que yo no estoy viendo.


controlador.zip (4.71 KB)

Hola Luciana,

Claro, no esta descargado el parche que te apliqué en el GDS 49120, este es el cambio aplicado a 3W 3.16.2.

Deshace lo que te fui pasando en el foro, y luego hace svn up para descargar lo del GDS.

saludos.
2

pasa el parche no andaba, si aplico el parche
y quiero bajar la convocatoria sale el error “ocurrio un error de conexión”
ni siquiera lo baja por eso lo volví atras

Hola Luciana,

Veamos porque te da el error “ocurrio un error de conexión” con el parche aplicado. Pasame los logs de Apache y de la aplicación al momento del error.

saludos.
2

Sabes que pasa Leonel, que estamos a mitad de una convocatoria, y mal que mal genera el archivo, no puedo cambiarlo para qeu no les funcione, no tengo otro ambiente para replicar el error, ya que testeo apuntando a la misma version de 4 dígitos está funcionando bajando el archivo como convocatoria.zip

Hola Luciana,

Si podes toma los cambios del parche y aplicalos a mano. Son pocas las modificaciones.
Dichas modificaciones no deberían generar error, ya que las mismas salieron con la versión 3.18.1 y fueron testeadas.

saludos.
2