Guía 19 – Identificar quién descarga un archivo

Este ejemplo surge porque unos de los desarrolladores con PHPRunner desea identificar quienes y cuándo se descargan los archivos de una aplicación.

Como todos conocemos, por defecto, PHPRunner muestra los archivos que previamente se han cargado y ofrece un enlace para descargar el mismo. Esta situación es muy potente y casi siempre es la preferida pero algunas veces nos puede interesar saber cuándo y quién ha descargado los archivos.

Objetivo

Mostrar los archivos asociados a un registro sin el enlace de descarga y al hacer clic, registrar la descarga y enviar email al administrador del sistema.

DEMO: https://fhumanes.com/download

Usuarios:

admin/admin
user1/user1

Solución técnica

El ejemplo es muy sencillo y para cualquier desarrollador experto, tiene muy poco que aprender con él, pero como aún existe desarrolladores novatos, puede que algunos conceptos  puedan ser aplicados a sus proyectos.

 Como podéis apreciar el campo “Files” tiene el aspecto estándar, pero se ha eliminado el link de descarga.

Al pulsar sobre el campo, aparece:

En este caso se muestra la visualización estándar de PHPRunner, pero antes de mostrar los registros se ha grabado que el usuario ha “hecho la descarga de los archivos” y se ha enviado email al administrador del sistema.

Para hacer una presentación especial del contenido del campo “File” he definido un formato “Custom” con el siguiente código:

$fileArray = my_json_decode($value);
$value = '';

foreach ($fileArray as &$file) {
    $image = getIconByFileType($file['type'], $file['usrName']);
    $value .= '<img style="vertical-align: middle;" src="images/icons/'.$image.'">'.$file['usrName'].'<br>';
}

Para registrarla descarga y el envío del email he utilizado el evento Process record values, con este código:

// Insert table Trace
$data = array();
$data["dnld_files_id"] = $values['id_dnld_files'];
$data["dnld_user_id"]  = $_SESSION['id_user'];
$data["date_dnld"] = now();
DB::Insert("dnld_trace", $data );

// Send email to Admiistrator
$email="[email protected]";  // Email of Administrator
$userName = Security::getDisplayName();
$file = $values['title'];
$id_file = $values['id_dnld_files'];

$message=<<<EOT
Hello,<br>
<br>
There has been a download of a file:<br>
ID File: <b>$id_file</b> <br>
Title of the file: <b>$file</b> <br>
User making download: <b>$userName</b> <br>
<br>
Greetings, <br>
EOT;
$subject="Download File";
runner_mail(array('to' => $email, 'subject' => $subject, 
'htmlbody' => $message, 'charset' => 'UTF-8'));

Para cualquier duda o lo que necesitéis, contactar conmigo a través de mi email [email protected].

Os adjunto el proyecto y el backup de la base de datos de ejemplo, para que los podáis instalar en vuestros PC’s.  Acordaros que no os facilito el directorio de los ficheros del ejemplo, por lo que tendréis que dar nuevos registros de alta con el usuario “admin“.

 

 

Adjuntos

Archivo Tamaño de archivo Descargas
zip PHPrunner 10.2 y backup de base de datos 1 MB 399

Blog personal para facilitar soporte gratuito a usuarios de PHPRunner