Introduzione del componente Filesystem

Introduzione del componente Filesystem di Symfony per gestire in modo omogeneo il filesystem.
This commit is contained in:
Thomas Zilio 2017-09-11 17:49:03 +02:00
parent f9346b3923
commit a89ad1feee
23 changed files with 248 additions and 219 deletions

View File

@ -29,7 +29,7 @@ if (filter('op') == 'link_file' || filter('op') == 'unlink_file') {
}
// Controllo sui permessi di scrittura per il file system
elseif ((!is_dir($upload_dir) && !create_dir($upload_dir)) || (is_dir($upload_dir) && !is_writable($upload_dir))) {
elseif (!directory($upload_dir)) {
$_SESSION['errors'][] = tr('Non hai i permessi di scrittura nella cartella _DIR_!', [
'_DIR_' => '"files"',
]);
@ -192,7 +192,7 @@ if (filter('op') == 'link_file' || filter('op') == 'unlink_file') {
$rs = $dbo->fetchArray('SELECT * FROM zz_files WHERE id_module='.prepare($id_module).' AND id='.prepare(filter('id')).' AND filename='.prepare($filename));
if (unlink($upload_dir.'/'.$filename)) {
if (delete($upload_dir.'/'.$filename)) {
$query = 'DELETE FROM zz_files WHERE id_module='.prepare($id_module).' AND id='.prepare(filter('id')).' AND filename='.prepare($filename);
if ($dbo->query($query)) {
$_SESSION['infos'][] = tr('File _FILE_ eliminato!', [
@ -212,7 +212,7 @@ if (filter('op') == 'link_file' || filter('op') == 'unlink_file') {
} elseif (filter('op') == 'download_file') {
$rs = $dbo->fetchArray('SELECT * FROM zz_files WHERE id_module='.prepare($id_module).' AND id='.prepare(filter('id')).' AND filename='.prepare(filter('filename')));
force_download($rs[0]['original'], $upload_dir.'/'.$rs[0]['filename']);
download($upload_dir.'/'.$rs[0]['filename'], $rs[0]['original']);
}
if (Modules::getPermission($permesso) == 'rw') {

View File

@ -555,11 +555,14 @@ div.DTS tbody th {
max-width: 500px;
}
.table-responsive th>input,
.table-responsive td>input {
input.min-width {
min-width: 200px;
}
input.small-width {
min-width: 100px;
}
table.table:not(.dataTable) th,
table.table:not(.dataTable) td {
word-wrap: break-word;

View File

@ -103,7 +103,7 @@ if (filter('op') == 'send') {
$mail->SmtpClose();
if (!empty($post['sql'])) {
unlink($backup_file);
delete($backup_file);
}
redirect($rootdir.'/bug.php');

View File

@ -35,6 +35,7 @@
"paragonie/random_compat": "^2.0",
"phpmailer/phpmailer": "^5.2",
"spipu/html2pdf": "^5.0",
"symfony/filesystem": "^3.3",
"symfony/finder": "^3.3",
"symfony/translation": "^3.3"
},

View File

@ -32,7 +32,7 @@ switch ($op) {
$_SESSION['infos'][] = tr('Backup saltato perché già esistente!');
} elseif (empty($backup_dir)) {
$_SESSION['errors'][] = tr('Non è possibile eseguire i backup poichè la cartella di backup non è stata impostata!!!');
} elseif (file_exists($backup_dir) || create_dir($backup_dir)) {
} elseif (directory($backup_dir)) {
$_SESSION['infos'][] = tr('La cartella di backup è stata creata correttamente.');
if (do_backup()) {
$_SESSION['infos'][] = tr('Backup automatico eseguito correttamente!');

View File

@ -1023,3 +1023,34 @@ function filelist_and_upload($id_module, $id_record, $label = 'Nuovo allegato:',
</div>';
}
}
/**
* Rimuove ricorsivamente una directory.
*
* @param unknown $path
*
* @return bool
*/
function deltree($path)
{
trigger_error('Funzione deprecata!', E_USER_DEPRECATED);
$path = realpath($path);
if (is_dir($path)) {
$files = scandir($path);
if (empty($files)) {
$files = [];
}
foreach ($files as $file) {
if ($file != '.' && $file != '..') {
deltree($path.DIRECTORY_SEPARATOR.$file);
}
}
return rmdir($path);
} elseif (file_exists($path)) {
return unlink($path);
}
}

View File

@ -36,33 +36,39 @@ function sanitizeFilename($filename)
return $filename;
}
/**
* Rimuove ricorsivamente una directory.
*
* @param unknown $path
*
* @return bool
*/
function deltree($path)
function delete($files)
{
$path = realpath($path);
// Filesystem Symfony
$fs = new Symfony\Component\Filesystem\Filesystem();
if (is_dir($path)) {
$files = scandir($path);
if (empty($files)) {
$files = [];
}
foreach ($files as $file) {
if ($file != '.' && $file != '..') {
deltree($path.DIRECTORY_SEPARATOR.$file);
}
}
return rmdir($path);
} elseif (file_exists($path)) {
return unlink($path);
// Eliminazione
try {
$fs->remove($files);
} catch (Symfony\Component\Filesystem\Exception\IOException $e) {
return false;
}
return true;
}
function directory($path)
{
if (is_dir($path) && is_writable($path)) {
return true;
} elseif (!is_dir($path)) {
// Filesystem Symfony
$fs = new Symfony\Component\Filesystem\Filesystem();
// Tentativo di creazione
try {
$fs->mkdir($path);
return true;
} catch (Symfony\Component\Filesystem\Exception\IOException $e) {
}
}
return false;
}
/**
@ -99,21 +105,13 @@ function copyr($source, $destination, $ignores = [])
foreach ($finder as $file) {
$filename = rtrim($destination, DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR.$file->getRelativePathname();
// Creazione della cartella di base
if (!file_exists(dirname($filename))) {
create_dir(dirname($filename));
}
// Filesystem Symfony
$fs = new Symfony\Component\Filesystem\Filesystem();
// Simple copy for a file
if (is_file($file)) {
copy($file, $filename);
}
// If the source is a symlink
if (is_link($file)) {
$link_dest = readlink($file);
symlink($link_dest, $filename);
// Copia
try {
$fs->copy($file, $filename);
} catch (Symfony\Component\Filesystem\Exception\IOException $e) {
}
}
@ -226,8 +224,8 @@ function do_backup($path = null)
$backup_name = 'OSM backup '.date('Y-m-d').' '.date('H_i_s');
if (
(extension_loaded('zip') && (file_exists($backup_dir.'tmp') || create_dir($backup_dir.'tmp'))) ||
(!extension_loaded('zip') && (file_exists($backup_dir.$backup_name) || create_dir($backup_dir.$backup_name)))
(extension_loaded('zip') && directory($backup_dir.'tmp')) ||
(!extension_loaded('zip') && directory($backup_dir.$backup_name))
) {
// Backup del database
$database_file = $backup_dir.(extension_loaded('zip') ? 'tmp' : $backup_name).'/database.sql';
@ -255,7 +253,7 @@ function do_backup($path = null)
}
// Rimozione cartella temporanea
unlink($database_file);
delete($database_file);
}
// Copia dei file di OSM
else {
@ -284,11 +282,7 @@ function do_backup($path = null)
$cont = 1;
foreach ($backups as $backup) {
if ($cont > $max_backups) {
if (preg_match('/^OSM backup ([0-9\-]{10}) ([0-9_]{8})$/', $backup, $m)) {
deltree($backup_dir.'/'.$backup);
} elseif (preg_match('/^OSM backup ([0-9\-]{10}) ([0-9_]{8})\.zip$/', $backup, $m)) {
unlink($backup_dir.'/'.$backup);
}
delete($backup_dir.'/'.$backup);
}
++$cont;
}
@ -534,7 +528,7 @@ function create_thumbnails($tmp, $filename, $dir)
$name = $infos['filename'];
$extension = strtolower($infos['extension']);
if ((is_dir($dir) && !is_writable($dir)) || (!is_dir($dir) && !create_dir($dir))) {
if (!directory($dir)) {
return false;
}
@ -828,8 +822,3 @@ function redirectOperation($id_module, $id_record)
}
}
}
function create_dir($path)
{
return mkdir($path, 0777, true);
}

View File

@ -174,7 +174,7 @@ if (!function_exists('secure_random_string')) {
}
}
if (!function_exists('force_download')) {
if (!function_exists('download')) {
/**
* Transmit headers that force a browser to display the download file
* dialog. Cross browser compatible. Only fires if headers have not
@ -190,9 +190,12 @@ if (!function_exists('force_download')) {
*
* @return bool
*/
function force_download($filename, $content = false)
function download($file, $filename = null)
{
if (!headers_sent()) {
$filename = !empty($filename) ? $filename : basename($file);
$content = !is_file($file) ? $file : file_get_contents($file);
// Required for some browsers
if (ini_get('zlib.output_compression')) {
@ini_set('zlib.output_compression', 'Off');
@ -209,20 +212,10 @@ if (!function_exists('force_download')) {
header('Content-Type: application/force-download');
header('Content-Transfer-Encoding: binary');
if (empty($content) && is_file($filename)) {
$content = $filename;
}
if (is_file($content)) {
$content = file_get_contents($content);
}
ob_clean();
flush();
if ($content) {
echo $content;
}
echo $content;
return true;
}

View File

@ -27,10 +27,11 @@ switch (post('op')) {
include_once $uninstall_script;
}
deltree($docroot.'/modules/'.$module_dir.'/');
delete($docroot.'/modules/'.$module_dir.'/');
$_SESSION['infos'][] = tr('Modulo _MODULE_ disinstallato!', [
'_MODULE_' => '"'.$modulo.'"',
]);
'_MODULE_' => '"'.$modulo.'"',
]);
}
}

View File

@ -21,9 +21,10 @@ if (!extension_loaded('zip')) {
if ($zip->open($tmp)) {
$tmpdir = 'tmp/';
if (!file_exists($docroot.'/'.$tmpdir)) {
create_dir($docroot.'/'.$tmpdir, 0755, true);
}
// Controllo sulla cartella
directory($docroot.'/'.$tmpdir);
$zip->extractTo($docroot.'/'.$tmpdir);
// AGGIORNAMENTO
@ -87,25 +88,18 @@ if (!extension_loaded('zip')) {
// Sposto il file di versione nella root per forzare l'aggiornamento del db
file_put_contents($docroot.'/VERSION_'.$module_dir, $module_version);
// Sposto i file della cartella "share/" nella root
$share_dir = $docroot.'/modules/'.$module_dir.'/share/';
if (is_dir($share_dir)) {
copyr($share_dir, $docroot.'/share');
deltree($share_dir);
}
// Sposto i file della cartella "lib/" nella root
$lib_dir = $docroot.'/modules/'.$module_dir.'/lib/';
if (is_dir($lib_dir)) {
copyr($lib_dir, $docroot.'/lib');
deltree($lib_dir);
delete($lib_dir);
}
// Sposto i file della cartella "files/" nella root
$files_dir = $docroot.'/modules/'.$module_dir.'/files/';
if (is_dir($files_dir)) {
copyr($files_dir, $docroot.'/files');
deltree($files_dir);
delete($files_dir);
}
// Inserimento delle voci del modulo nel db per ogni sezione [sezione]
@ -114,7 +108,7 @@ if (!extension_loaded('zip')) {
$n = $dbo->fetchNum($query);
if ($n == 0) {
$query = 'INSERT INTO zz_modules(`name`, `title`, `directory`, `options`, `icon`, `version`, `compatibility`, `order`, `parent`, `default`, `enabled`) VALUES('.prepare($module_name).', '.prepare($module_name).', '.prepare($module_dir).', '.prepare($module_info['module_options']).', '.prepare($module_info['module_icon']).', '.prepare($module_version).', '.prepare($module_info['module_compatibility']).', "100", '.prepare($module_info['module_parent']).", 0, 1)";
$query = 'INSERT INTO zz_modules(`name`, `title`, `directory`, `options`, `icon`, `version`, `compatibility`, `order`, `parent`, `default`, `enabled`) VALUES('.prepare($module_name).', '.prepare($module_name).', '.prepare($module_dir).', '.prepare($module_info['module_options']).', '.prepare($module_info['module_icon']).', '.prepare($module_version).', '.prepare($module_info['module_compatibility']).', "100", '.prepare($module_info['module_parent']).', 0, 1)';
$dbo->query($query);
}
@ -127,7 +121,7 @@ if (!extension_loaded('zip')) {
}
}
deltree($docroot.'/'.$tmpdir);
delete($docroot.'/'.$tmpdir);
} else {
$_SESSION['errors'][] = checkZip($tmp);
}

View File

@ -90,9 +90,9 @@ switch (post('op')) {
$filename = post('immagine01');
$f = pathinfo($filename);
unlink($upload_dir.'/'.$f['filename'].'.'.$f['extension']);
unlink($upload_dir.'/'.$f['filename'].'_thumb100.'.$f['extension']);
unlink($upload_dir.'/'.$f['filename'].'_thumb250.'.$f['extension']);
delete($upload_dir.'/'.$f['filename'].'.'.$f['extension']);
delete($upload_dir.'/'.$f['filename'].'_thumb100.'.$f['extension']);
delete($upload_dir.'/'.$f['filename'].'_thumb250.'.$f['extension']);
$dbo->query("UPDATE mg_articoli SET immagine01 = '' WHERE id=".prepare($id_record));
}

View File

@ -6,13 +6,14 @@ switch (filter('op')) {
case 'getfile':
$file = filter('file');
force_download($file, file_get_contents($backup_dir.$file));
download($backup_dir.$file, $file);
break;
case 'del':
$file = filter('file');
deltree($backup_dir.$file);
delete($backup_dir.$file);
if (!file_exists($backup_dir.$file)) {
$_SESSION['infos'][] = tr('Backup _FILE_ eliminato!', [

View File

@ -2,46 +2,55 @@
include_once __DIR__.'/../../core.php';
echo '<p>'.tr('Il backup è molto importante perchè permette di creare una copia della propria installazione con relativi dati per poterla ripristinare in seguito a errori, cancellazione di dati accidentale o guasti hardware').'.</p>
echo '<p>'.tr('Il backup è molto importante perchè permette di creare una copia della propria installazione con relativi dati per poterla ripristinare in seguito a errori, cancellazione di dati accidentale o guasti hardware').'.</p>';
if (!extension_loaded('zip')) {
echo "
<div class='alert alert-warning'>
<i class='fa fa-times'></i> ".tr('Estensione zip non supportata!').'
'.tr('Il backup verrà eseguito ma non in formato zip e quindi scaricabile solo tramite ftp o con copia-incolla').'.
</div>';
}
echo '
<div class="callout callout-success">
<p>';
<div class="row">
<div class="col-md-12 col-lg-6">
<div class="callout callout-success">
<p>';
if (!empty($backup_dir)) {
echo tr('Il percorso di backup è attualmente in').': <b>'.slashes($backup_dir).'</b>';
} else {
echo tr('Sembra che tu non abbia ancora specificato un percorso per il backup').'.';
}
echo '
</p>
<p><small>'.tr('Puoi modificare il percorso di backup dal tuo file _FILE_', [
'_FILE_' => '<b>config.inc.php</b>',
]).'</small></p>';
if (strstr($backup_dir, $docroot)) {
</p>
<p><small>'.tr('Puoi modificare il percorso di backup dal tuo file _FILE_', [
'_FILE_' => '<b>config.inc.php</b>',
]).'</small></p>';
if (starts_with($backup_dir, $docroot)) {
echo '
<div class="alert alert-warning">
<i class="fa fa-warning"></i> '.tr('Per motivi di sicurezza si consiglia di modificare il percorso della cartella di backup al di fuori delle cartelle di OSM, possibilmente in una unità esterna').'.
</div>';
<div class="alert alert-warning">
<i class="fa fa-warning"></i> '.tr('Per motivi di sicurezza si consiglia di modificare il percorso della cartella di backup al di fuori delle cartelle di OSM, possibilmente in una unità esterna').'.
</div>';
}
if (!is_writable($backup_dir)) {
echo '
<div class="alert alert-warning">
<i class="fa fa-warning"></i> '.tr('La cartella di backup presente nella configurazione non è utilizzabile dal gestionale!').'. '.tr('Verificare che la cartella abbia i permessi di scrittura abilitati').'.
</div>';
<div class="alert alert-warning">
<i class="fa fa-warning"></i> '.tr('La cartella di backup presente nella configurazione non è utilizzabile dal gestionale!').'.
'.tr('Verificare che la cartella abbia i permessi di scrittura abilitati').'.
</div>';
}
echo '
</div>';
</div>
echo '
</div>
<div class="col-md-12 col-lg-6">';
// Se la cartella di backup non esiste provo a crearla
if (!file_exists($backup_dir)) {
create_dir($backup_dir);
}
<!-- PULSANTI -->
<div class="row">
<div class="col-md-12 text-right">
<button type="button" class="btn btn-primary pull-right" onclick="continue_backup()"><i class="fa fa-database"></i> '.tr('Crea backup').'...</button>
</div>
</div>';
//Lettura file di backup
if (file_exists($backup_dir)) {
@ -61,94 +70,113 @@ if (file_exists($backup_dir)) {
if (empty($backups_zip) && empty($backups_file)) {
echo '
<div class="alert alert-warning"><i class="fa fa-warning"></i> '.tr('Non è ancora stato trovato alcun backup!').' '.tr('Se hai già inserito dei dati su OSM crealo il prima possibile...')."</div>\n";
<div class="alert alert-warning">
<i class="fa fa-warning"></i> '.tr('Non è ancora stato trovato alcun backup!').'
'.tr('Se hai già inserito dei dati su OSM crealo il prima possibile...').'
</div>';
} else {
// Ordino i backup dal più recente al più vecchio
arsort($backups_zip);
arsort($backups_file);
echo '
<div class="row">
<div class="col-xs-12 col-md-6">
<h3>'.tr('Backup compressi').'</h3>';
if (!empty($backups_zip)) {
foreach ($backups_zip as $backup) {
$name = basename($backup);
preg_match('/^OSM backup ([0-9\-]{10}) ([0-9_]{8})\.zip$/', $name, $m);
echo '
<div class="callout callout-info">
<h4>'.tr('Backup del _DATE_ alle _TIME_', [
'_DATE_' => Translator::dateToLocale($m[1]),
'_TIME_' => Translator::timeToLocale(str_replace('_', ':', $m[2])),
]).'</h4>
<p><small>
'.tr('Nome del file').': '.$name.'<br>
'.tr('Dimensione').': '.Translator::numberToLocale(filesize($backup) / 1024 / 1024).'MB
</small></p>
<div class="callout callout-info">
<h4>'.tr('Backup del _DATE_ alle _TIME_', [
'_DATE_' => Translator::dateToLocale($m[1]),
'_TIME_' => Translator::timeToLocale(str_replace('_', ':', $m[2])),
]).'</h4>
<p><small>
'.tr('Nome del file').': '.$name.'<br>
'.tr('Dimensione').': '.Translator::numberToLocale(filesize($backup) / 1024 / 1024).'MB
</small></p>
<a class="btn btn-sm btn-primary" href="'.$rootdir.'/modules/backup/actions.php?op=getfile&file='.$name.'" target="_blank"><i class="fa fa-download"></i> '.tr('Scarica').'</a>
<a class="btn btn-sm btn-primary" href="'.$rootdir.'/modules/backup/actions.php?op=getfile&file='.$name.'" target="_blank"><i class="fa fa-download"></i> '.tr('Scarica').'</a>
<a class="btn btn-danger ask pull-right" title="'.tr('Elimina backup').'" data-backto="record-list" data-op="del" data-file="'.$name.'">
<i class="fa fa-trash"></i>
</a>
</div>';
<a class="btn btn-danger ask pull-right" title="'.tr('Elimina backup').'" data-backto="record-list" data-op="del" data-file="'.$name.'">
<i class="fa fa-trash"></i>
</a>
</div>';
}
} else {
echo '
<div class="alert alert-warning">
<i class="fa fa-warning"></i> '.tr('Non è stato trovato alcun backup di questa tipologia!').'
</div>';
}
echo '
</div>
<div class="col-xs-12 col-md-6">
<h3>'.tr('Backup non compressi').'</h3>';
// Backup non compressi e quindi non scaricabili
if (!empty($backups_file)) {
echo '<hr><b>'.tr('Backup non compressi')."</b>\n";
foreach ($backups_file as $backup) {
$name = basename($backup);
preg_match('/^OSM backup ([0-9\-]{10}) ([0-9_]{8})$/', $name, $m);
echo '
<div class="callout callout-warning">
<h4>'.tr('Backup del _DATE_ alle _TIME_', [
'_DATE_' => Translator::dateToLocale($m[1]),
'_TIME_' => Translator::timeToLocale(str_replace('_', ':', $m[2])),
]).'</h4>
<p><small>
'.tr('Nome del file').': '.$name.'<br>
'.tr('Dimensione').': '.Translator::numberToLocale(filesize($backup) / 1024 / 1024).'MB
</small></p>
<div class="callout callout-warning">
<h4>'.tr('Backup del _DATE_ alle _TIME_', [
'_DATE_' => Translator::dateToLocale($m[1]),
'_TIME_' => Translator::timeToLocale(str_replace('_', ':', $m[2])),
]).'</h4>
<p><small>
'.tr('Nome del file').': '.$name.'<br>
'.tr('Dimensione').': '.Translator::numberToLocale(filesize($backup) / 1024 / 1024).'MB
</small></p>
<a class="btn btn-sm btn-warning disabled" href="javascript:;"><i class="fa fa-times"></i> '.tr('Non scaricabile').'</a>
<a class="btn btn-sm btn-warning disabled" href="javascript:;"><i class="fa fa-times"></i> '.tr('Non scaricabile').'</a>
<a class="btn btn-danger ask pull-right" title="'.tr('Elimina backup').'" data-backto="record-list" data-op="del" data-file="'.$name.'">
<i class="fa fa-trash"></i>
</a>
</div>';
<a class="btn btn-danger ask pull-right" title="'.tr('Elimina backup').'" data-backto="record-list" data-op="del" data-file="'.$name.'">
<i class="fa fa-trash"></i>
</a>
</div>';
}
} else {
echo '
<div class="alert alert-warning">
<i class="fa fa-warning"></i> '.tr('Non è stato trovato alcun backup di questa tipologia!').'
</div>';
}
echo '
</div>
</div>';
}
} else {
echo '
<div class="alert alert-danger">'.tr('La cartella di backup non esiste!').' '.tr('Non è possibile eseguire i backup!').'</div>';
}
echo '
</div>
</div>';
if (!extension_loaded('zip')) {
echo "<div class='alert alert-warning'><i class='fa fa-times'></i> ".tr('Estensione zip non supportata!').' '.tr('Il backup verrà eseguito ma non in formato zip e quindi scaricabile solo tramite ftp o con copia-incolla').".</div>\n";
<div class="alert alert-danger">'.tr('La cartella di backup non esiste!').' '.tr('Non è possibile eseguire i backup!').'</div>';
}
if ($backup_dir != '') {
if (!empty($backup_dir)) {
echo '
<button type="button" class="btn btn-primary" onclick="continue_backup()"><i class="fa fa-database"></i> '.tr('Crea backup').'...</button>
<button type="button" class="btn btn-primary" onclick="continue_backup()"><i class="fa fa-database"></i> '.tr('Crea backup').'...</button>
<script>
function continue_backup(){
swal({
title: "'.tr('Nuovo backup').'",
text: "'.tr('Sei sicuro di voler creare un nuovo backup?').'",
type: "warning",
showCancelButton: true,
confirmButtonClass: "btn btn-lg btn-success",
confirmButtonText: "'.tr('Crea').'",
}).then(
function(){
location.href = globals.rootdir + "/editor.php?id_module='.$id_module.'&op=backup";
}, function(){});
}
</script>';
<script>
function continue_backup(){
swal({
title: "'.tr('Nuovo backup').'",
text: "'.tr('Sei sicuro di voler creare un nuovo backup?').'",
type: "warning",
showCancelButton: true,
confirmButtonClass: "btn btn-lg btn-success",
confirmButtonText: "'.tr('Crea').'",
}).then(
function(){
location.href = globals.rootdir + "/editor.php?id_module='.$id_module.'&op=backup";
}, function(){});
}
</script>';
}

View File

@ -9,7 +9,7 @@ switch (post('op')) {
// Rimozione dei contenuti precedenti
$files = glob($dir.'/*.zip');
foreach ($files as $file) {
unlink($file);
delete($file);
}
// Selezione delle fatture da stampare
@ -38,10 +38,10 @@ switch (post('op')) {
create_zip($dir.'tmp/', $file);
// Invio al browser dello zip
force_download($file);
download($file);
// Rimozione dei contenuti
deltree($dir.'tmp/');
delete($dir.'tmp/');
}
break;

View File

@ -48,7 +48,8 @@ switch (post('op')) {
$nomefile = post('nomefile');
if (!empty($nomefile)) {
unlink($path.$nomefile);
delete($path.$nomefile);
$_SESSION['infos'][] = tr('File _FILE_ rimosso correttamente!', [
'_FILE_' => "'".$nomefile."'",
]);

View File

@ -306,7 +306,7 @@ switch (post('op')) {
$rs = $dbo->fetchArray('SELECT filename FROM zz_files WHERE id_module='.prepare($id_module).' AND id='.prepare($id_record));
for ($i = 0; $i < count($rs); ++$i) {
@unlink($docroot.'/files/interventi/'.$rs[$i]['filename']);
delete($docroot.'/files/interventi/'.$rs[$i]['filename']);
}
$dbo->query('DELETE FROM zz_files WHERE id_module='.prepare($id_module).' AND id='.prepare($id_record));
@ -535,9 +535,7 @@ switch (post('op')) {
break;
case 'firma':
$directory_exists = (file_exists($docroot.'/files/interventi') || create_dir($docroot.'/files/interventi'));
if ($directory_exists) {
if (directory($docroot.'/files/interventi')) {
if (post('firma_base64') != '') {
// Salvataggio firma
$firma_file = 'firma_'.time().'.png';

View File

@ -129,7 +129,7 @@ if (!empty($rs2)) {
<input type="hidden" name="orario_inizio['.$id.']" value="'.$orario_inizio.'">';
} else {
echo '
{[ "type": "timestamp", "name": "orario_inizio['.$id.']", "id": "inizio_'.$id.'", "value": "'.$orario_inizio.'", "class": "orari" ]}';
{[ "type": "timestamp", "name": "orario_inizio['.$id.']", "id": "inizio_'.$id.'", "value": "'.$orario_inizio.'", "class": "orari min-width" ]}';
}
echo '
</td>';
@ -143,7 +143,7 @@ if (!empty($rs2)) {
<input type="hidden" name="orario_fine['.$id.']" value="'.$orario_fine.'">';
} else {
echo '
{[ "type": "timestamp", "name": "orario_fine['.$id.']", "id": "fine_'.$id.'", "value": "'.$orario_fine.'", "class": "orari", "min-date": "'.$orario_inizio.'" ]}';
{[ "type": "timestamp", "name": "orario_fine['.$id.']", "id": "fine_'.$id.'", "value": "'.$orario_fine.'", "class": "orari min-width", "min-date": "'.$orario_inizio.'" ]}';
}
echo '
</td>';
@ -151,7 +151,7 @@ if (!empty($rs2)) {
// ORE
echo '
<td style="border-right:1px solid #aaa;">
{[ "type": "number", "name": "ore['.$id.']", "value": "'.$ore.'", "disabled": 1 ]}
{[ "type": "number", "name": "ore['.$id.']", "value": "'.$ore.'", "disabled": 1, "class": "small-width" ]}
<div class="extra hide">
<table class="table table-condensed table-bordered">
@ -165,7 +165,7 @@ if (!empty($rs2)) {
// KM
echo '
<td style="border-right:1px solid #aaa;">
{[ "type": "number", "name": "km['.$id.']", "value": "'.$km.'" ]}
{[ "type": "number", "name": "km['.$id.']", "value": "'.$km.'", "class": "small-width" ]}
<div class="extra hide">
<table class="table table-condensed table-bordered">
@ -200,7 +200,7 @@ if (!empty($rs2)) {
<td style="border-right:1px solid #aaa;">';
if ($user['idanagrafica'] == 0 || $show_costi) {
echo '
{[ "type": "number", "name": "sconto['.$id.']", "value": "'.$sconto_unitario.'", "icon-after": "choice|untprc|'.$tipo_sconto.'" ]}';
{[ "type": "number", "name": "sconto['.$id.']", "value": "'.$sconto_unitario.'", "icon-after": "choice|untprc|'.$tipo_sconto.'", "class": "small-width" ]}';
} else {
echo '
<input type="hidden" name="sconto['.$id.']" value="'.Translator::numberToLocale($sconto_unitario).'" />
@ -215,7 +215,7 @@ if (!empty($rs2)) {
<td style="border-right:1px solid #aaa;">';
if ($user['idanagrafica'] == 0 || $show_costi) {
echo '
{[ "type": "number", "name": "scontokm['.$id.']", "value": "'.$scontokm_unitario.'", "icon-after": "choice|untprc|'.$tipo_scontokm.'" ]}';
{[ "type": "number", "name": "scontokm['.$id.']", "value": "'.$scontokm_unitario.'", "icon-after": "choice|untprc|'.$tipo_scontokm.'", "class": "small-width" ]}';
} else {
echo '
<input type="hidden" name="scontokm['.$id.']" value="'.Translator::numberToLocale($scontokm_unitario).'" />

View File

@ -5,7 +5,7 @@ include_once __DIR__.'/../../core.php';
unset($_SESSION['superselect']['idanagrafica']);
$_SESSION['superselect']['idanagrafica'] = $records[0]['idanagrafica'];
if ($records[0]['firma_file'] == '') {
if (empty($records[0]['firma_file'])) {
$frase = tr('Anteprima e firma');
$info_firma = '';
} else {
@ -13,7 +13,7 @@ if ($records[0]['firma_file'] == '') {
$info_firma = '<span class="label label-success"><i class="fa fa-edit"></i> '.tr('Firmato il _DATE_ alle _TIME_ da _PERSON_', [
'_DATE_' => Translator::dateToLocale($records[0]['firma_data']),
'_TIME_' => Translator::timeToLocale($records[0]['firma_data']),
'_NUM_' => '<b>'.$records[0]['firma_nome'].'</b>',
'_PERSON_' => '<b>'.$records[0]['firma_nome'].'</b>',
]).'</span>';
}
@ -259,7 +259,7 @@ if ($records[0]['firma_file'] == '') {
<div class="alert alert-success"><i class="fa fa-check"></i> '.tr('Firmato il _DATE_ alle _TIME_ da _PERSON_', [
'_DATE_' => Translator::dateToLocale($records[0]['firma_data']),
'_TIME_' => Translator::timeToLocale($records[0]['firma_data']),
'_NUM_' => '<b>'.$records[0]['firma_nome'].'</b>',
'_PERSON_' => '<b>'.$records[0]['firma_nome'].'</b>',
]).'</div>';
}
?>

View File

@ -66,7 +66,7 @@ switch ($op) {
// Eliminazione file
if (post('delete_immagine') !== null) {
$filename = basename(post('immagine'));
unlink($upload_dir.'/'.$filename);
delete($upload_dir.'/'.$filename);
$dbo->query("UPDATE my_impianti SET immagine='' WHERE id=".prepare($id_record));
}

View File

@ -123,7 +123,7 @@ include $docroot.'/templates/replace.php';
// Individuazione dellla configurazione
$directory = dirname($filename);
if (!empty($filename) && ((is_dir($directory) && !is_writable($directory)) || (!is_dir($directory) && !create_dir($directory)))) {
if (!empty($filename) && !directory($directory)) {
$error = tr('Non hai i permessi per creare directory e files in _DIRECTORY_', [
'_DIRECTORY_' => $directory,
]);

View File

@ -1,7 +1,7 @@
<?php
if (file_exists($docroot.'/lib/jscripts/fullcalendar.min.js')) {
@unlink($docroot.'/lib/jscripts/fullcalendar.min.js');
delete($docroot.'/lib/jscripts/fullcalendar.min.js');
}
// Riporto su ogni riga della fattura la relativa rivalsa inps e ritenuta d'acconto se impostate

View File

@ -87,8 +87,11 @@ for ($i = 0; $i < sizeof($rs); ++$i) {
}
// Eliminazione vecchi file
@unlink($docroot.'/share/themes/default/css/font-awesome.css');
@deltree($docroot.'/modules/preventivi/js/');
$files = [
$docroot.'/share/themes/default/css/font-awesome.css',
$docroot.'/modules/preventivi/js/'
];
delete($files);
/*
* Spostamento agente di riferimento su nuova tabella an_anagrafiche_agenti

View File

@ -59,23 +59,12 @@ $database->query('ALTER TABLE `zz_files` DROP `data`');
* Rimozione file e cartelle deprecati
*/
// Cartelle deprecate
$dirs = [
// File e cartelle deprecate
$files = [
'lib/jscripts',
'lib/html2pdf',
'widgets',
'share',
];
foreach ($dirs as $dir) {
$dir = realpath($docroot.'/'.$dir);
if (is_dir($dir)) {
deltree($dir);
}
}
// File deprecati
$files = [
'lib/class.phpmailer.php',
'lib/class.pop3.php',
'lib/class.smtp.php',
@ -99,13 +88,12 @@ $files = [
'README',
];
foreach ($files as $file) {
$file = realpath($docroot.'/'.$file);
if (file_exists($file)) {
unlink($file);
}
foreach ($files as $key => $value) {
$files[$key] = realpath($docroot.'/'.$value);
}
delete($files);
// File .html dei moduli di default
// Per un problema sulla lunghezza massima del path su glob è necessario dividere le cartelle dei moduli di default da pulire
$dirs = [
@ -149,7 +137,5 @@ $pieces = array_chunk($dirs, 5);
foreach ($pieces as $piece) {
$files = glob($docroot.'/modules/{'.implode(',', $piece).'}/*.html', GLOB_BRACE);
foreach ($files as $file) {
unlink($file);
}
delete($files);
}