Files
safekat/ci4/app/Models/Presupuestos/PresupuestoFicheroModel.php

123 lines
3.7 KiB
PHP
Executable File

<?php
namespace App\Models\Presupuestos;
class PresupuestoFicheroModel extends \App\Models\BaseModel
{
protected $table = "presupuesto_ficheros";
/**
* Whether primary key uses auto increment.
*
* @var bool
*/
protected $useAutoIncrement = true;
protected $allowedFields = ["presupuesto_id", "nombre", "file_path", "upload_by", "upload_at"];
protected $returnType = "App\Entities\Presupuestos\PresupuestoFicheroEntity";
protected $useTimestamps = false;
protected $useSoftDeletes = false;
public static $labelField = "nombre";
public function saveFileInBBDD($presupuesto_id, $filename, $extension, $user_id)
{
try {
$new_filename = $this->generateFileHash($filename) . '.' . $extension;
$this->db->table($this->table . " t1")
->set('presupuesto_id', $presupuesto_id)
->set('nombre', $filename)
->set('file_path', WRITEPATH . 'uploads/presupuestos/' . $new_filename)
->set('upload_by', $user_id)
->set('upload_at', date('Y-m-d H:i:s'))
->insert();
return $new_filename;
} catch (\Exception $e) {
return null;
}
}
public function deleteFiles($presupuesto_id, $old_files = [])
{
$files = $this->db
->table($this->table . " t1")
->where('presupuesto_id', $presupuesto_id)->get()->getResult();
if ($files) {
foreach ($files as $file) {
// se comprueba que el $file->nombre no sea igual a ninguno de los elementos del array $old_files
if (!in_array($file->nombre, $old_files)) {
if (file_exists($file->file_path)) {
unlink($file->file_path);
}
$this->db
->table($this->table . " t1")
->where('presupuesto_id', $presupuesto_id)
->where('nombre', $file->nombre)
->delete();
}
}
}
}
public function copyFiles($presupuesto_id_origen, $presupuesto_id_destino)
{
$files = $this->db
->table($this->table . " t1")
->where('presupuesto_id', $presupuesto_id_origen)->get()->getResult();
if ($files) {
foreach ($files as $file) {
$hash = $this->generateFileHash($file->nombre);
// se copia el fichero a la nueva ubicación
if (!file_exists(WRITEPATH . $file->file_path)) {
copy($file->file_path, WRITEPATH . 'uploads/presupuestos/' . $hash);
}
$this->db->table($this->table . " t1")
->set('presupuesto_id', $presupuesto_id_destino)
->set('nombre', $file->nombre)
->set('file_path', WRITEPATH . 'uploads/presupuestos/' . $hash)
->set('upload_by', auth()->user()->id)
->set('upload_at', date('Y-m-d H:i:s'))
->insert();
}
}
}
public function getFiles($presupuesto_id)
{
return $this->db
->table($this->table . " t1")
->where('presupuesto_id', $presupuesto_id)->get()->getResult();
}
/**
* Función para convertir el nombre y extensión de un fichero en un hash único
* usando cifrado simétrico.
*
* @param string $filename Nombre del fichero con extensión
* @return string Hash encriptado del fichero
*/
private function generateFileHash($filename)
{
return hash('sha256', $filename);
}
}