openstamanager/src/HTMLBuilder/Manager/FileManager.php

216 lines
8.3 KiB
PHP
Raw Normal View History

<?php
namespace HTMLBuilder\Manager;
/**
* Gestione allegati.
*
* @since 2.3
*/
class FileManager implements ManagerInterface
{
2018-06-23 15:41:32 +02:00
/**
* Gestione "filelist_and_upload".
* Esempio: {( "name": "filelist_and_upload", "id_module": "2", "id_record": "1", "readonly": "false", "ajax": "true" )}.
*
* @param array $options
*
* @return string
*/
public function manage($options)
{
2018-06-23 15:41:32 +02:00
$options['readonly'] = !empty($options['readonly']) ? true : false;
2018-05-16 11:03:58 +02:00
$options['ajax'] = isset($options['ajax']) ? $options['ajax'] : false;
2018-06-23 15:41:32 +02:00
$options['showpanel'] = isset($options['showpanel']) ? $options['showpanel'] : true;
$options['label'] = isset($options['label']) ? $options['label'] : tr('Nuovo allegato').':';
2018-06-23 15:41:32 +02:00
// Riferimento ad un plugin
$plugin = null;
if (!empty($options['id_plugin'])) {
$plugin = '_'.$options['id_plugin'];
}
$dbo = \Database::getConnection();
2018-06-23 15:41:32 +02:00
$result = '
<div id="attachments_'.$options['id_record'].$plugin.'" >
2018-05-16 11:03:58 +02:00
<a name="attachments_'.rand().'"></a>';
if (!empty($options['showpanel'])) {
$result .= '
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title">'.tr('Allegati').'</h3>
</div>
<div class="panel-body">';
}
// Visualizzo l'elenco di file già caricati
2018-05-23 18:05:49 +02:00
$query = 'SELECT * FROM zz_files WHERE id_record = '.prepare($options['id_record']).' AND id_module'.((!empty($options['id_module'])) ? ' = '.prepare($options['id_module']) : ' IS NULL').' AND id_plugin'.((!empty($options['id_plugin'])) ? ' = '.prepare($options['id_plugin']) : ' IS NULL').'';
$rs = $dbo->fetchArray($query);
if (!empty($rs)) {
$result .= '
<table class="table table-condensed table-hover table-bordered">
<tr>
<th>'.tr('Nome').'</th>
<th>'.tr('Data').'</th>
<th width="15%" class="text-center">#</th>
</tr>';
foreach ($rs as $r) {
$result .= '
<tr>
<td align="left">
<a href="'.ROOTDIR.'/files/'.\Modules::get($options['id_module'])['directory'].'/'.$r['filename'].'" target="_blank">
<i class="fa fa-external-link"></i> '.$r['nome'].'
</a>
</td>
<td>'.\Translator::timestampToLocale($r['created_at']).'</td>
<td class="text-center">
2018-06-23 15:41:32 +02:00
<a class="btn btn-sm btn-primary" href="'.ROOTDIR.'/actions.php?id_module='.$options['id_module'].'&op=download_file&id='.$r['id'].'&filename='.$r['filename'].'" target="_blank">
<i class="fa fa-download"></i>
</a>';
2018-06-23 15:41:32 +02:00
2018-06-23 18:35:08 +02:00
// Anteprime supportate dal browser
$extension = pathinfo($r['original'])['extension'];
2018-06-23 15:41:32 +02:00
$supported_extensions = ['pdf', 'jpg', 'png', 'gif', 'jpeg', 'bmp'];
if (in_array($extension, $supported_extensions)) {
$result .= "<div class='hide' id='view-".$r['id']."' >";
if ($extension == 'pdf') {
$result .= '
<iframe src="'.ROOTDIR.'/files/'.\Modules::get($options['id_module'])['directory'].'/'.$r['filename'].'" frameborder="0" scrolling="no" width="100%" height="550"></iframe>';
} else {
$result .= '
<img src="'.ROOTDIR.'/files/'.\Modules::get($options['id_module'])['directory'].'/'.$r['filename'].'" width="100%" ></img>';
}
$result .= '</div>';
$result .= ' <button class="btn btn-sm btn-info" data-target="#bs-popup" type="button" data-title="'.htmlentities($r['nome'], ENT_QUOTES, 'UTF-8').' <small><em>('.$r['filename'].')</em></small>" data-href="#view-'.$r['id']."\" ><i class='fa fa-eye'></i></button>";
} else {
$result .= ' <button class="btn btn-sm btn-default" title="'.tr('Anteprima file non disponibile').".\" onclick=\"alert('".tr('Anteprima file di tipo "'.$extension.'" non supportata.')."');\" ><i class='fa fa-eye'></i></button>\n";
}
if (!$options['readonly']) {
$result .= '
<a class="btn btn-sm btn-danger ask" data-backto="record-edit" data-msg="'.tr('Vuoi eliminare questo file?').'" data-op="unlink_file" data-id="'.$r['id'].'" data-filename="'.$r['filename'].'">
<i class="fa fa-trash"></i>
</a>';
2018-06-23 15:41:32 +02:00
}
$result .= '
</td>
</tr>';
}
$result .= '
</table>
<div class="clearfix"></div>
<br>';
2018-06-23 15:41:32 +02:00
} else {
//in caso di readonly, se non è stato caricato nessun allegato mostro almeno box informativo
if ($options['readonly']) {
$result .= '
<div class="alert alert-info" style="margin-bottom:0px;" >
<i class="fa fa-info-circle"></i>
'.tr('Nessun allegato è stato caricato', []).'.
</div>';
2018-06-23 15:41:32 +02:00
}
}
2018-06-23 15:41:32 +02:00
if (!$options['readonly']) {
// Form per l'upload di un nuovo file
$result .= '
<b>'.$options['label'].'</b>
<div class="row">
2018-06-23 15:41:32 +02:00
<div class="col-lg-4">
2018-06-23 15:41:32 +02:00
{[ "type": "text", "placeholder": "'.tr('Nome').'", "name": "nome_allegato", "id": "nome_allegato_'.$options['id_record'].$plugin.'" ]}
</div>
<div class="col-lg-6">
2018-06-23 15:41:32 +02:00
{[ "type": "file", "placeholder": "'.tr('File').'", "name": "blob", "id": "blob_'.$options['id_record'].$plugin.'", "required": 0 ]}
</div>';
2018-06-23 15:41:32 +02:00
$result .= '
<div class="col-lg-2 text-right">
2018-06-23 15:41:32 +02:00
<button type="button" class="btn btn-success" onclick="saveFile_'.$options['id_record'].$plugin.' ( $(this) );">
<i class="fa fa-upload"></i> '.tr('Carica').'
</button>
</div>';
2018-06-23 15:41:32 +02:00
$result .= '
</div>';
2018-06-23 15:41:32 +02:00
}
$result .= '
<script>
2018-06-23 15:41:32 +02:00
function saveFile_'.$options['id_record'].$plugin.' (btn){
if(!$("#blob_'.$options['id_record'].$plugin.'").val()){
swal("'.addslashes(tr('Attenzione!')).'", "'.addslashes(tr('Devi selezionare un file con il tasto "Sfoglia"')).'...", "warning");
return false;
}
2018-06-23 15:41:32 +02:00
var file_data = $("#blob_'.$options['id_record'].$plugin.'").prop("files")[0];
var form_data = new FormData();
2018-06-23 15:41:32 +02:00
form_data.append("blob", file_data);
2018-06-23 15:41:32 +02:00
form_data.append("nome_allegato", $("input[id=nome_allegato_'.$options['id_record'].$plugin.']").val());
form_data.append("op","link_file");
form_data.append("id_record","'.$options['id_record'].'");
2018-06-23 15:41:32 +02:00
form_data.append("id_module", "'.$options['id_module'].'");';
if (!empty($options['id_plugin'])) {
$result .= '
form_data.append("id_plugin","'.$options['id_plugin'].'");';
}
$result .= '
prev_html = btn.html();
2018-06-23 15:41:32 +02:00
btn.html("<i class=\"fa fa-spinner fa-pulse fa-fw\"></i>'.tr('Attendere...').'");
btn.prop("disabled", true);
$.ajax({
url: "'.ROOTDIR.'/actions.php",
cache: false,
type: "post",
processData: false,
contentType: false,
dataType : "html",
data: form_data,
success: function(data) {
2018-06-23 15:41:32 +02:00
btn.html(prev_html);
2018-05-16 11:03:58 +02:00
btn.prop("disabled", false);';
2018-06-23 15:41:32 +02:00
if ($options['ajax']) {
$result .= '$("#attachments_'.$options['id_record'].$plugin.'").load( globals.rootdir + "/ajax.php?op=list_attachments&id_module='.$options['id_module'].'&id_record='.$options['id_record'].((!empty($options['id_plugin'])) ? '&id_plugin='.$options['id_plugin'].'#tab_'.$options['id_plugin'] : '').'" );';
} else {
$result .= 'location.href = globals.rootdir + "/editor.php?id_module='.$options['id_module'].'&id_record='.$options['id_record'].((!empty($options['id_plugin'])) ? '#tab_'.$options['id_plugin'] : '').'";';
}
$result .= '},
error: function(data) {
alert(data);
}
})
}
</script>';
if (!empty($options['showpanel'])) {
$result .= '
</div>
2018-05-16 11:03:58 +02:00
</div>
</div>';
}
return $result;
}
2018-06-23 15:41:32 +02:00
}