terminado dropzone

This commit is contained in:
2024-06-05 11:35:29 +02:00
parent 7e68ec5948
commit 1453140005
4 changed files with 27137 additions and 36 deletions

View File

@ -812,10 +812,14 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
foreach ($files as $file) { foreach ($files as $file) {
$size = filesize($file->file_path); $size = filesize($file->file_path);
$splitPath = explode("presupuestos/", $file->file_path);
// se crea un objeto con el nombre del fichero y el tamaño // se crea un objeto con el nombre del fichero y el tamaño
$obj = (object) array( $obj = (object) array(
'name' => $file->nombre, 'name' => $file->nombre,
'size' => $size); 'size' => $size,
'hash' => $splitPath[1] ?? $file->file_path);
// se añade el objeto al array // se añade el objeto al array
array_push($result, $obj); array_push($result, $obj);
@ -832,30 +836,36 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
if ($_SERVER['REQUEST_METHOD'] == 'POST') { if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$presupuesto_id = $_POST['presupuesto_id']; $presupuesto_id = $_POST['presupuesto_id'];
$old_files = json_decode($_POST['oldFiles']);
// Comprobar si se han subido archivos // Comprobar si se han subido archivos
if (!empty($_FILES['file'])) { if (!empty($_FILES['file']) || !empty($old_files)) {
$files = $_FILES['file'];
// Borrar los archivos existentes del presupuesto // Borrar los archivos existentes del presupuesto
$model->deleteFiles($presupuesto_id); $model->deleteFiles($presupuesto_id, $old_files);
// Iterar sobre los archivos if (!empty($_FILES['file'])){
for ($i = 0; $i < count($files['name']); $i++) { $files = $_FILES['file'];
// Aquí puedes acceder a las propiedades del archivo
$name = $files['name'][$i];
$tmp_name = $files['tmp_name'][$i];
$new_name = $model->saveFileInBBDD($presupuesto_id, $name, auth()->id()); // Iterar sobre los archivos
for ($i = 0; $i < count($files['name']); $i++) {
// Se sube el fichero // Aquí puedes acceder a las propiedades del archivo
// Pero primero se comprueba que la carpeta presupuestos exista $name = $files['name'][$i];
if (!is_dir(WRITEPATH . 'uploads/presupuestos')) { $extension = explode('.', $files['name'][$i])[1];
mkdir(WRITEPATH . 'uploads/presupuestos', 0777, true); $tmp_name = $files['tmp_name'][$i];
}
if(!is_null($new_name)){ $new_name = $model->saveFileInBBDD($presupuesto_id, $name, $extension, auth()->id());
move_uploaded_file($tmp_name, WRITEPATH . 'uploads/presupuestos/' . $new_name);
// Se sube el fichero
// Pero primero se comprueba que la carpeta presupuestos exista
if (!is_dir(WRITEPATH . 'uploads/presupuestos')) {
mkdir(WRITEPATH . 'uploads/presupuestos', 0777, true);
}
if(!is_null($new_name)){
move_uploaded_file($tmp_name, WRITEPATH . 'uploads/presupuestos/' . $new_name);
}
} }
} }
} }

View File

@ -24,10 +24,10 @@ class PresupuestoFicheroModel extends \App\Models\BaseModel
public static $labelField = "nombre"; public static $labelField = "nombre";
public function saveFileInBBDD($presupuesto_id, $filename, $user_id) { public function saveFileInBBDD($presupuesto_id, $filename, $extension ,$user_id) {
try{ try{
$new_filename = $this->generateFileHash($filename); $new_filename = $this->generateFileHash($filename) . '.' . $extension;
$this->db->table($this->table . " t1") $this->db->table($this->table . " t1")
->set('presupuesto_id', $presupuesto_id) ->set('presupuesto_id', $presupuesto_id)
->set('nombre', $filename) ->set('nombre', $filename)
@ -42,21 +42,28 @@ class PresupuestoFicheroModel extends \App\Models\BaseModel
} }
} }
public function deleteFiles($presupuesto_id){ public function deleteFiles($presupuesto_id, $old_files = []){
$files = $this->db $files = $this->db
->table($this->table . " t1") ->table($this->table . " t1")
->where('presupuesto_id', $presupuesto_id)->get()->getResult(); ->where('presupuesto_id', $presupuesto_id)->get()->getResult();
if($files){ if($files){
foreach($files as $file){ foreach($files as $file){
if(file_exists($file->file_path)){
unlink($file->file_path); // 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();
} }
} }
} }
$this->db
->table($this->table . " t1")
->where('presupuesto_id', $presupuesto_id)->delete();
} }

View File

@ -206,8 +206,8 @@ if(<?php echo $presupuestoEntity->estado_id?>==2){
const previewTemplate = `<div class="dz-preview dz-file-preview"> const previewTemplate = `<div class="dz-preview dz-file-preview">
<div class="dz-details"> <div class="dz-details">
<div class="dz-thumbnail"> <div class="dz-thumbnail">
<img data-dz-thumbnail> <!---<img data-dz-thumbnail>
<span class="dz-nopreview">No preview</span> <span class="dz-nopreview">No preview</span> --->
<div class="dz-success-mark"></div> <div class="dz-success-mark"></div>
<div class="dz-error-mark"></div> <div class="dz-error-mark"></div>
<div class="dz-error-message"><span data-dz-errormessage></span></div> <div class="dz-error-message"><span data-dz-errormessage></span></div>
@ -231,10 +231,12 @@ if(<?php echo $presupuestoEntity->estado_id?>==2){
parallelUploads: 4, // Ajusta este número al máximo número de archivos que esperas subir a la vez parallelUploads: 4, // Ajusta este número al máximo número de archivos que esperas subir a la vez
maxFiles: 5, // Ajusta este número al máximo número de archivos que esperas subir a la vez maxFiles: 5, // Ajusta este número al máximo número de archivos que esperas subir a la vez
autoProcessQueue: true, autoProcessQueue: true,
dictRemoveFile: "Eliminar",
acceptedFiles: 'image/*, application/pdf', acceptedFiles: 'image/*, application/pdf',
maxFilesize: 5e+7, // Bytes maxFilesize: 5e+7, // Bytes
init: function() { init: function() {
thisDropzone = this; thisDropzone = this;
$('#loader').show();
$.ajax({ $.ajax({
url: "<?= site_url('presupuestos/presupuestocliente/get_files') ?>", url: "<?= site_url('presupuestos/presupuestocliente/get_files') ?>",
@ -247,12 +249,28 @@ if(<?php echo $presupuestoEntity->estado_id?>==2){
} }
values = JSON.parse(response); values = JSON.parse(response);
for(var i = 0; i < values.length; i++){ for(var i = 0; i < values.length; i++){
var mockFile = { name: values[i].name, size: values[i].size }; var mockFile = { name: values[i].name, size: values[i].size, hash: values[i].hash};
thisDropzone.options.addedfile.call(thisDropzone, mockFile);
thisDropzone.options.thumbnail.call(thisDropzone, mockFile, "uploads/"+values[i].name); thisDropzone.files.push(mockFile); // add to files array
thisDropzone.options.complete.call(thisDropzone, mockFile); thisDropzone.emit("addedfile", mockFile);
thisDropzone.emit("thumbnail", mockFile, window.location.host + "/sistema/intranet/presupuestos/"+values[i].hash);
thisDropzone.emit("complete", mockFile);
thisDropzone.options.success.call(thisDropzone, mockFile); thisDropzone.options.success.call(thisDropzone, mockFile);
}; };
}).always(function() {
$('#loader').hide();
});
this.on("addedfile", function (file) {
if(file.hash){
var viewButton = Dropzone.createElement("<span class='dz-remove'>Ver</span>");
file.previewElement.appendChild(viewButton);
// Listen to the view button click event
viewButton.addEventListener("click", function (e) {
window.open(window.location.protocol + "//" + window.location.host + "/sistema/intranet/presupuestos/"+file.hash, '_blank');
});
}
}); });
} }
}); });
@ -260,12 +278,23 @@ if(<?php echo $presupuestoEntity->estado_id?>==2){
$('#presupuesto-cliente-form').submit(function(e){ $('#presupuesto-cliente-form').submit(function(e){
e.preventDefault(); e.preventDefault();
var files = dropzoneMulti.files; var files = dropzoneMulti.files;
$('#loader').show();
var formData = new FormData(); var formData = new FormData();
var oldFiles = [];
var counter = 0;
for (var i = 0; i < files.length; i++) { for (var i = 0; i < files.length; i++) {
var file = files[i];
formData.append('file[' + i + ']', file); if(files[i].upload){
var file = files[i];
formData.append('file[' + counter + ']', file);
counter += 1;
}
else{
oldFiles.push(files[i].name);
}
} }
formData.append('oldFiles', JSON.stringify(oldFiles));
formData.append('presupuesto_id', <?= $presupuestoEntity->id ?>); formData.append('presupuesto_id', <?= $presupuestoEntity->id ?>);
@ -277,7 +306,9 @@ if(<?php echo $presupuestoEntity->estado_id?>==2){
contentType: false // Indicar a jQuery que no establezca el tipo de contenido contentType: false // Indicar a jQuery que no establezca el tipo de contenido
}).done(function(response) { }).done(function(response) {
// Aquí puedes manejar la respuesta del servidor // Aquí puedes manejar la respuesta del servidor
}); }).always(function() {
$('#loader').hide();
})
return false; return false;
}); });

27053
xdebug.log

File diff suppressed because one or more lines are too long