2017-08-04 16:28:16 +02:00
< ? php
2020-09-07 15:04:06 +02:00
/*
* OpenSTAManager : il software gestionale open source per l ' assistenza tecnica e la fatturazione
2021-01-20 15:08:51 +01:00
* Copyright ( C ) DevCode s . r . l .
2020-09-07 15:04:06 +02:00
*
* This program is free software : you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation , either version 3 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program . If not , see < https :// www . gnu . org / licenses />.
*/
2017-08-04 16:28:16 +02:00
include_once __DIR__ . '/core.php' ;
2024-03-22 15:52:24 +01:00
use Models\Module ;
2019-07-26 17:40:52 +02:00
use Models\Note ;
2019-08-28 16:58:47 +02:00
use Models\OperationLog ;
2021-03-04 15:24:20 +01:00
use Models\Upload ;
2019-07-29 13:16:55 +02:00
use Modules\Checklists\Check ;
2019-07-29 17:42:24 +02:00
use Modules\Checklists\Checklist ;
2019-08-29 10:25:14 +02:00
use Modules\Emails\Template ;
2020-02-05 10:05:15 +01:00
use Notifications\EmailNotification ;
2023-03-30 14:29:51 +02:00
use Util\Zip ;
2019-07-26 11:57:59 +02:00
2018-09-19 10:44:32 +02:00
if ( empty ( $structure ) || empty ( $structure [ 'enabled' ])) {
2021-02-18 18:48:44 +01:00
exit ( tr ( 'Accesso negato' ));
2018-07-18 16:12:25 +02:00
}
2020-09-23 13:36:37 +02:00
$upload_dir = base_dir () . '/' . Uploads :: getDirectory ( $id_module , $id_plugin );
2017-08-28 09:49:38 +02:00
2018-08-09 15:33:01 +02:00
$database -> beginTransaction ();
2017-08-04 16:28:16 +02:00
2019-07-05 12:28:19 +02:00
// Upload allegati e rimozione
2021-03-04 15:24:20 +01:00
if ( filter ( 'op' ) == 'aggiungi-allegato' || filter ( 'op' ) == 'rimuovi-allegato' ) {
2017-08-04 16:28:16 +02:00
// Controllo sui permessi di scrittura per il modulo
if ( Modules :: getPermission ( $id_module ) != 'rw' ) {
2018-07-19 17:29:21 +02:00
flash () -> error ( tr ( 'Non hai permessi di scrittura per il modulo _MODULE_' , [
2024-03-20 11:13:28 +01:00
'_MODULE_' => '"' . Module :: find ( $id_module ) -> getTranslation ( 'name' ) . '"' ,
2018-07-07 13:56:22 +02:00
]));
2017-08-04 16:28:16 +02:00
}
// Gestione delle operazioni
else {
2024-01-15 15:30:45 +01:00
// UPLOAD PER CKEDITOR
2022-07-31 19:20:49 +02:00
if ( filter ( 'op' ) == 'aggiungi-allegato' && ! empty ( $_FILES ) && ! empty ( $_FILES [ 'upload' ][ 'name' ])) {
2022-08-04 22:05:28 +02:00
$CKEditor = get ( 'CKEditor' );
$funcNum = get ( 'CKEditorFuncNum' );
2022-07-31 19:20:49 +02:00
2023-08-04 14:54:28 +02:00
$allowed_extension = [
'png' , 'jpg' , 'jpeg' ,
];
2022-08-04 22:05:28 +02:00
2024-01-15 15:30:45 +01:00
// Maximum file limit (unit: byte)
$max_size = '2097152' ; // 2MB
2022-07-31 19:20:49 +02:00
// Get image file extension
2023-08-04 14:54:28 +02:00
$file_extension = pathinfo ( $_FILES [ 'upload' ][ 'name' ], PATHINFO_EXTENSION );
2022-07-31 19:20:49 +02:00
2023-08-04 14:54:28 +02:00
if ( in_array ( strtolower ( $file_extension ), $allowed_extension ) && $_FILES [ 'upload' ][ 'size' ] < $max_size ) {
2022-07-31 19:20:49 +02:00
$upload = Uploads :: upload ( $_FILES [ 'upload' ], [
'name' => filter ( 'nome_allegato' ),
'category' => filter ( 'categoria' ),
2024-03-27 16:59:46 +01:00
'id_module' => ( new Module ()) -> getByField ( 'name' , 'Gestione documentale' , Models\Locale :: getPredefined () -> id ),
2022-07-31 19:20:49 +02:00
'id_record' => $id_record ,
]);
2022-10-27 19:05:35 +02:00
// Upload da form
2023-08-04 14:54:28 +02:00
if ( ! empty ( $funcNum )) {
2022-10-27 19:05:35 +02:00
echo '
< link rel = " stylesheet " type = " text/css " href = " '. $baseurl .'/assets/dist/css/app.min.css " />
< script src = " '. $baseurl .'/assets/dist/js/app.min.js " ></ script > ' ;
}
2023-08-04 14:54:28 +02:00
2022-07-31 19:20:49 +02:00
// Creazione file fisico
if ( ! empty ( $upload )) {
2024-01-15 15:30:45 +01:00
// flash()->info(tr('File caricato correttamente!'));
2022-07-31 19:20:49 +02:00
$id_allegato = $dbo -> lastInsertedID ();
$upload = Upload :: find ( $id_allegato );
2022-10-27 14:49:35 +02:00
$response = [
'fileName' => basename ( $upload -> filepath ),
'uploaded' => 1 ,
2023-08-04 14:54:28 +02:00
'url' => $upload -> filepath ,
2022-10-27 14:49:35 +02:00
];
2022-10-27 19:05:35 +02:00
// Upload da form
2023-08-04 14:54:28 +02:00
if ( ! empty ( $funcNum )) {
2022-10-27 19:05:35 +02:00
echo '
< script type = " text/javascript " >
$ ( document ) . ready ( function () {
window . parent . toastr . success ( " '.tr('Caricamento riuscito').' " );
window . parent . CKEDITOR . tools . callFunction ( '.$funcNum.' , " '. $baseurl .'/'. $upload->filepath .' " );
});
</ script > ' ;
}
2023-08-04 14:54:28 +02:00
2022-10-27 19:05:35 +02:00
// Copia-incolla
else {
echo json_encode ( $response );
}
2022-07-31 19:20:49 +02:00
} else {
2024-01-15 15:30:45 +01:00
// flash()->error(tr('Errore durante il caricamento del file!'));
2022-08-04 22:05:28 +02:00
echo '<script type="text/javascript"> window.parent.toastr.error("' . tr ( 'Errore durante il caricamento del file!' ) . '"); </script>' ;
2022-07-31 19:20:49 +02:00
}
2023-08-04 14:54:28 +02:00
} else {
2024-01-15 15:30:45 +01:00
// flash()->error(tr('Estensione non permessa!'));
2022-08-04 22:05:28 +02:00
echo '<script type="text/javascript"> window.parent.toastr.error("' . tr ( 'Estensione non permessa' ) . '"); </script>' ;
2022-07-31 19:20:49 +02:00
}
2023-08-04 14:54:28 +02:00
2024-01-15 15:30:45 +01:00
exit ;
2022-07-31 19:20:49 +02:00
}
2017-08-04 16:28:16 +02:00
// UPLOAD
2021-03-04 15:24:20 +01:00
if ( filter ( 'op' ) == 'aggiungi-allegato' && ! empty ( $_FILES ) && ! empty ( $_FILES [ 'file' ][ 'name' ])) {
2020-06-17 17:44:16 +02:00
$upload = Uploads :: upload ( $_FILES [ 'file' ], [
2018-07-03 11:12:32 +02:00
'name' => filter ( 'nome_allegato' ),
'category' => filter ( 'categoria' ),
'id_module' => $id_module ,
'id_plugin' => $id_plugin ,
2018-07-03 21:22:29 +02:00
'id_record' => $id_record ,
2018-07-03 11:12:32 +02:00
]);
2018-05-22 17:42:19 +02:00
2017-09-10 14:35:41 +02:00
// Creazione file fisico
2018-07-03 21:22:29 +02:00
if ( ! empty ( $upload )) {
2018-07-19 17:29:21 +02:00
flash () -> info ( tr ( 'File caricato correttamente!' ));
2017-09-10 14:35:41 +02:00
} else {
2018-07-19 17:29:21 +02:00
flash () -> error ( tr ( 'Errore durante il caricamento del file!' ));
2017-09-10 14:35:41 +02:00
}
2017-08-04 16:28:16 +02:00
}
// DELETE
2021-03-04 15:24:20 +01:00
elseif ( filter ( 'op' ) == 'rimuovi-allegato' && filter ( 'filename' ) !== null ) {
2018-07-03 21:22:29 +02:00
$name = Uploads :: delete ( filter ( 'filename' ), [
'id_module' => $id_module ,
'id_plugin' => $id_plugin ,
'id_record' => $id_record ,
]);
2017-08-04 16:28:16 +02:00
2018-07-03 21:22:29 +02:00
if ( ! empty ( $name )) {
2018-07-19 17:29:21 +02:00
flash () -> info ( tr ( 'File _FILE_ eliminato!' , [
2018-07-03 21:22:29 +02:00
'_FILE_' => '"' . $name . '"' ,
2018-07-07 13:56:22 +02:00
]));
2018-07-03 21:22:29 +02:00
} else {
2018-07-19 17:29:21 +02:00
flash () -> error ( tr ( " Errore durante l'eliminazione del file! " ));
2017-08-04 16:28:16 +02:00
}
}
2020-09-23 17:53:19 +02:00
redirect ( base_path () . '/editor.php?id_module=' . $id_module . '&id_record=' . $id_record . (( ! empty ( $options [ 'id_plugin' ])) ? '#tab_' . $options [ 'id_plugin' ] : '' ));
2017-08-04 16:28:16 +02:00
}
2019-07-05 12:28:19 +02:00
}
// Download allegati
2021-03-04 15:24:20 +01:00
elseif ( filter ( 'op' ) == 'download-allegato' ) {
2017-08-28 09:49:38 +02:00
$rs = $dbo -> fetchArray ( 'SELECT * FROM zz_files WHERE id_module=' . prepare ( $id_module ) . ' AND id=' . prepare ( filter ( 'id' )) . ' AND filename=' . prepare ( filter ( 'filename' )));
2024-03-22 15:52:24 +01:00
// download($upload_dir.'/'.$rs[0]['filename'], $rs[0]['original']);
$file = Upload :: find ( $rs [ 0 ][ 'id' ]);
2024-03-19 13:23:08 +01:00
if ( ! empty ( $file )) {
$content = $file -> get_contents ();
header ( 'Content-Type: application/octet-stream' );
header ( 'Content-Transfer-Encoding: Binary' );
header ( 'Content-disposition: attachment; filename="' . basename ( $file -> original_name ) . '"' );
echo $content ;
}
2021-03-15 16:39:32 +01:00
} elseif ( filter ( 'op' ) == 'visualizza-modifica-allegato' ) {
2021-03-04 15:24:20 +01:00
include_once base_dir () . '/include/modifica_allegato.php' ;
}
2023-03-30 14:29:51 +02:00
// Zip allegati
elseif ( filter ( 'op' ) == 'download-zip-allegati' ) {
2023-08-04 14:54:28 +02:00
$rs = $dbo -> fetchArray ( 'SELECT * FROM zz_files WHERE id_module=' . prepare ( $id_module ) . ' AND id IN(' . implode ( ',' , json_decode ( filter ( 'id' ))) . ')' );
2023-03-30 14:29:51 +02:00
$dir = base_dir () . '/' . $module -> upload_directory ;
directory ( $dir . 'tmp/' );
$dir = slashes ( $dir );
$zip = slashes ( $dir . '_' . time () . '.zip' );
// Rimozione dei contenuti precedenti
$files = glob ( $dir . '/*.zip' );
foreach ( $files as $file ) {
delete ( $file );
}
foreach ( $rs as $r ) {
$allegato = Upload :: find ( $r [ 'id' ]);
$src = basename ( $allegato -> filepath );
$dst = basename ( $allegato -> original_name );
2024-04-03 16:18:09 +02:00
$file_content = $allegato -> get_contents ();
2023-03-30 14:29:51 +02:00
2024-04-03 16:18:09 +02:00
$dest = slashes ( $dir . 'tmp/' . $dst );
file_put_contents ( $dest , $file_content );
2023-03-30 14:29:51 +02:00
}
// Creazione zip
if ( extension_loaded ( 'zip' )) {
Zip :: create ( $dir . 'tmp/' , $zip );
// Invio al browser il file zip
download ( $zip );
// Rimozione dei contenuti
delete ( $dir . 'tmp/' );
}
}
2021-03-04 15:24:20 +01:00
// Modifica dati di un allegato
elseif ( filter ( 'op' ) == 'modifica-allegato' ) {
2023-08-04 14:54:28 +02:00
$id_allegati = explode ( ';' , filter ( 'id_allegati' ));
2023-04-17 17:28:17 +02:00
if ( sizeof ( $id_allegati ) == 1 ) {
$upload = Upload :: find ( $id_allegati [ 0 ]);
2024-03-20 11:13:28 +01:00
$upload -> setTranslation ( 'name' , post ( 'nome_allegato' ));
2023-03-30 14:29:51 +02:00
$upload -> category = post ( 'categoria_allegato' );
$upload -> save ();
} else {
foreach ( $id_allegati as $id_allegato ) {
$upload = Upload :: find ( $id_allegato );
$upload -> category = post ( 'categoria_allegato' );
$upload -> save ();
}
}
2021-03-04 15:24:20 +01:00
}
2019-07-31 11:52:13 +02:00
// Modifica nome della categoria degli allegati
2021-03-04 15:24:20 +01:00
elseif ( filter ( 'op' ) == 'modifica-categoria-allegato' ) {
2019-07-31 11:52:13 +02:00
$category = post ( 'category' );
$name = post ( 'name' );
$uploads = $structure -> uploads ( $id_record ) -> where ( 'category' , $category );
foreach ( $uploads as $upload ) {
$upload -> category = $name ;
$upload -> save ();
}
}
2019-07-05 12:28:19 +02:00
// Validazione dati
elseif ( filter ( 'op' ) == 'validate' ) {
// Lettura informazioni di base
$init = $structure -> filepath ( 'init.php' );
if ( ! empty ( $init )) {
include_once $init ;
}
// Validazione del campo
$validation = $structure -> filepath ( 'validation.php' );
if ( ! empty ( $validation )) {
include_once $validation ;
}
echo json_encode ( $response );
return ;
}
2019-07-26 11:57:59 +02:00
// Aggiunta nota interna
2021-03-04 15:24:20 +01:00
elseif ( filter ( 'op' ) == 'aggiungi-nota' ) {
2019-07-26 11:57:59 +02:00
$contenuto = post ( 'contenuto' );
$data_notifica = post ( 'data_notifica' ) ? : null ;
$nota = Note :: build ( $user , $structure , $id_record , $contenuto , $data_notifica );
flash () -> info ( tr ( 'Nota interna aggiunta correttamente!' ));
}
2019-07-30 16:50:10 +02:00
// Rimozione data di notifica dalla nota interna
2021-03-04 15:24:20 +01:00
elseif ( filter ( 'op' ) == 'rimuovi-notifica-nota' ) {
2019-07-30 16:50:10 +02:00
$id_nota = post ( 'id_nota' );
$nota = Note :: find ( $id_nota );
$nota -> notification_date = null ;
$nota -> save ();
flash () -> info ( tr ( 'Data di notifica rimossa dalla nota interna!' ));
}
2019-07-26 16:24:20 +02:00
// Rimozione nota interna
2021-03-04 15:24:20 +01:00
elseif ( filter ( 'op' ) == 'rimuovi-nota' ) {
2019-07-26 11:57:59 +02:00
$id_nota = post ( 'id_nota' );
$nota = Note :: find ( $id_nota );
$nota -> delete ();
flash () -> info ( tr ( 'Nota interna aggiunta correttamente!' ));
}
2019-07-29 17:42:24 +02:00
// Clonazione di una checklist
2021-03-04 15:24:20 +01:00
elseif ( filter ( 'op' ) == 'copia-checklist' ) {
2019-07-29 17:42:24 +02:00
$content = post ( 'content' );
$checklist_id = post ( 'checklist' );
2023-03-30 14:29:51 +02:00
2023-02-20 19:01:24 +01:00
$users = post ( 'assigned_users' );
$users = array_clean ( $users );
2023-03-30 14:29:51 +02:00
2023-02-20 19:01:24 +01:00
$group_id = post ( 'group_id' );
2023-03-30 14:29:51 +02:00
2019-07-29 17:42:24 +02:00
$checklist = Checklist :: find ( $checklist_id );
2019-07-30 16:50:10 +02:00
$checklist -> copia ( $user , $id_record , $users , $group_id );
2019-07-29 17:42:24 +02:00
}
// Aggiunta check alla checklist
2021-03-04 15:24:20 +01:00
elseif ( filter ( 'op' ) == 'aggiungi-check' ) {
2019-07-26 16:24:20 +02:00
$content = post ( 'content' );
$parent_id = post ( 'parent' ) ? : null ;
2023-07-21 17:20:16 +02:00
$is_titolo = post ( 'is_titolo' );
2019-07-26 16:24:20 +02:00
2023-02-20 19:01:24 +01:00
$users = post ( 'assigned_users' );
$users = array_clean ( $users );
2023-03-30 14:29:51 +02:00
2023-02-20 19:01:24 +01:00
$group_id = post ( 'group_id' );
2019-07-26 16:24:20 +02:00
2023-07-21 17:20:16 +02:00
$check = Check :: build ( $user , $structure , $id_record , $content , $parent_id , $is_titolo );
2019-07-30 16:50:10 +02:00
$check -> setAccess ( $users , $group_id );
2019-07-26 16:24:20 +02:00
}
2019-07-29 17:42:24 +02:00
// Rimozione di un check della checklist
2021-03-04 15:24:20 +01:00
elseif ( filter ( 'op' ) == 'rimuovi-check' ) {
2019-07-26 16:24:20 +02:00
$check_id = post ( 'check_id' );
2019-07-26 18:05:19 +02:00
$check = Check :: find ( $check_id );
2019-07-26 16:24:20 +02:00
2019-07-30 16:50:10 +02:00
if ( ! empty ( $check ) && $check -> user -> id == $user -> id ) {
2019-07-29 13:16:55 +02:00
$check -> delete ();
2019-07-30 16:50:10 +02:00
} else {
flash () -> error ( tr ( 'Impossibile eliminare il check!' ));
2019-07-29 13:16:55 +02:00
}
2019-07-26 16:24:20 +02:00
}
// Gestione check per le checklist
2021-03-04 15:24:20 +01:00
elseif ( filter ( 'op' ) == 'toggle-check' ) {
2019-07-26 16:24:20 +02:00
$check_id = post ( 'check_id' );
2019-07-26 18:05:19 +02:00
$check = Check :: find ( $check_id );
2019-07-26 16:24:20 +02:00
2019-07-30 16:50:10 +02:00
if ( ! empty ( $check ) && $check -> assignedUsers -> pluck ( 'id' ) -> search ( $user -> id ) !== false ) {
2019-07-30 17:44:15 +02:00
$check -> toggleCheck ( $user );
2019-07-30 16:50:10 +02:00
} else {
flash () -> error ( tr ( 'Impossibile cambiare lo stato del check!' ));
}
}
// Gestione ordine per le checklist
2021-03-04 15:24:20 +01:00
elseif ( filter ( 'op' ) == 'ordina-checks' ) {
2019-07-30 16:50:10 +02:00
$ids = explode ( ',' , $_POST [ 'order' ]);
$order = 0 ;
foreach ( $ids as $id ) {
$dbo -> query ( 'UPDATE `zz_checks` SET `order` = ' . prepare ( $order ) . ' WHERE id = ' . prepare ( $id ));
++ $order ;
2019-07-26 16:24:20 +02:00
}
}
2019-08-26 18:02:05 +02:00
// Inizializzazione email
2019-07-05 12:28:19 +02:00
elseif ( post ( 'op' ) == 'send-email' ) {
2019-08-29 10:25:14 +02:00
$template = Template :: find ( post ( 'template' ));
2018-06-26 14:26:40 +02:00
2024-01-15 15:30:45 +01:00
$mail = Modules\Emails\Mail :: build ( $user , $template , $id_record );
2018-02-20 17:57:16 +01:00
2019-06-04 20:45:40 +02:00
// Rimozione allegati predefiniti
2019-08-26 18:02:05 +02:00
$mail -> resetPrints ();
2019-06-04 20:45:40 +02:00
2018-09-20 14:41:01 +02:00
// Destinatari
2018-09-28 16:43:40 +02:00
$receivers = array_clean ( post ( 'destinatari' ));
2018-09-20 14:41:01 +02:00
$types = post ( 'tipo_destinatari' );
foreach ( $receivers as $key => $receiver ) {
$mail -> addReceiver ( $receiver , $types [ $key ]);
2018-02-21 17:47:43 +01:00
}
2018-02-20 17:57:16 +01:00
2018-09-20 14:41:01 +02:00
// Contenuti
2019-08-26 18:02:05 +02:00
$mail -> subject = post ( 'subject' );
2022-09-29 10:19:08 +02:00
$mail -> content = $_POST [ 'body' ]; // post('body', true);
2019-08-26 18:02:05 +02:00
// Conferma di lettura
$mail -> read_notify = post ( 'read_notify' );
2018-02-20 17:57:16 +01:00
2020-03-31 19:52:58 +02:00
// Stampe da allegare
$prints = post ( 'prints' );
foreach ( $prints as $print ) {
$mail -> addPrint ( $print );
}
2018-09-20 14:41:01 +02:00
// Allegati originali
2019-08-29 10:25:14 +02:00
$files = post ( 'uploads' );
2018-11-23 15:17:52 +01:00
foreach ( $files as $file ) {
2019-08-29 10:25:14 +02:00
$mail -> addUpload ( $file );
2018-09-20 14:41:01 +02:00
}
2018-02-20 17:57:16 +01:00
2020-03-31 20:34:31 +02:00
// Salvataggio email nella coda di invio
2019-08-26 18:02:05 +02:00
$mail -> save ();
2019-09-11 18:21:40 +02:00
2020-02-05 10:05:15 +01:00
// Invio mail istantaneo
2020-03-31 19:52:58 +02:00
$email = EmailNotification :: build ( $mail );
2020-02-05 10:05:15 +01:00
$email_success = $email -> send ();
2020-02-05 14:51:39 +01:00
if ( $email_success ) {
2020-02-05 10:05:15 +01:00
OperationLog :: setInfo ( 'id_email' , $mail -> id );
flash () -> info ( tr ( 'Email inviata correttamente!' ));
} else {
$mail -> delete ();
flash () -> error ( tr ( 'Errore durante l\'invio email! Verifica i parametri dell\'account SMTP utilizzato.' ));
}
2020-08-20 15:59:13 +02:00
} elseif ( filter ( 'op' ) == 'aggiorna_colonne' ) {
2020-09-23 13:36:37 +02:00
include_once base_dir () . '/include/colonne.php' ;
2020-12-22 16:11:48 +01:00
} elseif ( filter ( 'op' ) == 'toggle_colonna' ) {
$visible = filter ( 'visible' );
$id_riga = filter ( 'id_vista' );
2024-03-11 11:21:05 +01:00
$dbo -> query ( 'UPDATE `zz_views` SET `visible` = ' . prepare ( $visible ) . ' WHERE `id` = ' . prepare ( $id_riga ));
2020-12-22 16:11:48 +01:00
} elseif ( filter ( 'op' ) == 'ordina_colonne' ) {
$order = explode ( ',' , post ( 'order' , true ));
foreach ( $order as $i => $id_riga ) {
2024-03-11 11:21:05 +01:00
$dbo -> query ( 'UPDATE `zz_views` SET `order` = ' . prepare ( $i ) . ' WHERE `id`=' . prepare ( $id_riga ));
2020-12-22 16:11:48 +01:00
}
2020-07-06 13:19:20 +02:00
} elseif ( filter ( 'op' ) == 'visualizza_righe_riferimenti' ) {
2021-02-18 17:46:38 +01:00
include_once base_dir () . '/include/riferimenti/riferimenti.php' ;
2020-07-06 13:19:20 +02:00
} elseif ( filter ( 'op' ) == 'visualizza_righe_documento' ) {
2020-09-23 13:36:37 +02:00
include_once base_dir () . '/include/riferimenti/righe_documento.php' ;
2020-07-06 13:19:20 +02:00
} elseif ( filter ( 'op' ) == 'salva_riferimento_riga' ) {
$database -> insert ( 'co_riferimenti_righe' , [
'source_type' => filter ( 'source_type' ),
'source_id' => filter ( 'source_id' ),
'target_type' => filter ( 'target_type' ),
'target_id' => filter ( 'target_id' ),
]);
} elseif ( filter ( 'op' ) == 'rimuovi_riferimento_riga' ) {
$database -> delete ( 'co_riferimenti_righe' , [
2021-02-18 17:46:38 +01:00
'id' => filter ( 'idriferimento' ),
2020-07-06 13:19:20 +02:00
]);
2017-08-04 16:28:16 +02:00
}
2018-07-18 16:12:25 +02:00
// Inclusione di eventuale plugin personalizzato
2018-09-19 10:44:32 +02:00
if ( ! empty ( $structure [ 'script' ])) {
2021-04-26 09:53:41 +02:00
$path = $structure -> getEditFile ();
if ( ! empty ( $path )) {
include $path ;
}
2017-08-04 16:28:16 +02:00
2018-08-11 15:37:38 +02:00
$database -> commitTransaction ();
2018-07-02 15:41:38 +02:00
2018-07-18 16:12:25 +02:00
return ;
}
2017-08-04 16:28:16 +02:00
2018-07-18 16:12:25 +02:00
// Lettura risultato query del modulo
2018-09-19 10:44:32 +02:00
$init = $structure -> filepath ( 'init.php' );
2018-07-19 12:47:28 +02:00
if ( ! empty ( $init )) {
include_once $init ;
}
2017-08-04 16:28:16 +02:00
2018-07-18 16:12:25 +02:00
// Retrocompatibilità
if ( ! isset ( $record ) && isset ( $records [ 0 ])) {
$record = $records [ 0 ];
2018-07-19 09:58:28 +02:00
} elseif ( ! isset ( $records [ 0 ]) && isset ( $record )) {
$records = [ $record ];
2018-07-19 12:47:28 +02:00
} elseif ( ! isset ( $record )) {
$record = [];
$records = [ $record ];
2018-07-18 16:12:25 +02:00
}
2018-07-18 14:50:46 +02:00
2018-07-18 16:12:25 +02:00
// Registrazione del record
HTMLBuilder\HTMLBuilder :: setRecord ( $record );
2018-09-19 10:44:32 +02:00
if ( $structure -> permission == 'rw' ) {
2018-07-18 16:12:25 +02:00
// Esecuzione delle operazioni di gruppo
2023-08-04 14:54:28 +02:00
if ( ! empty ( post ( 'id_records' ))) {
2022-03-18 17:43:50 +01:00
$id_records = post ( 'id_records' );
$id_records = is_array ( $id_records ) ? $id_records : explode ( ';' , $id_records );
$id_records = array_clean ( $id_records );
$id_records = array_unique ( $id_records );
}
2018-07-18 16:12:25 +02:00
2018-09-19 10:44:32 +02:00
$bulk = $structure -> filepath ( 'bulk.php' );
2018-07-19 12:47:28 +02:00
$bulk = empty ( $bulk ) ? [] : include $bulk ;
2018-07-18 16:12:25 +02:00
$bulk = empty ( $bulk ) ? [] : $bulk ;
if ( in_array ( post ( 'op' ), array_keys ( $bulk ))) {
2020-09-23 17:53:19 +02:00
redirect ( base_path () . '/controller.php?id_module=' . $id_module , 'js' );
2018-07-18 16:12:25 +02:00
} else {
// Esecuzione delle operazioni del modulo
2020-10-20 10:46:34 +02:00
( $include_file = $structure -> filepath ( 'actions.php' )) ? include $include_file : null ;
2018-07-18 16:12:25 +02:00
// Operazioni generiche per i campi personalizzati
if ( post ( 'op' ) != null ) {
2019-02-19 18:34:44 +01:00
$custom_where = ! empty ( $id_plugin ) ? '`id_plugin` = ' . prepare ( $id_plugin ) : '`id_module` = ' . prepare ( $id_module );
$query = 'SELECT `id`, `html_name` AS `name` FROM `zz_fields` WHERE ' . $custom_where ;
2018-07-18 16:12:25 +02:00
$customs = $dbo -> fetchArray ( $query );
2024-01-31 14:23:46 +01:00
if ( post ( 'op' ) != 'delete' ) {
2018-07-18 16:12:25 +02:00
$values = [];
foreach ( $customs as $custom ) {
2018-07-19 15:33:32 +02:00
if ( post ( $custom [ 'name' ]) !== null ) {
$values [ $custom [ 'id' ]] = post ( $custom [ 'name' ]);
2023-12-06 15:06:49 +01:00
} else {
2023-12-06 11:20:28 +01:00
$values [ $custom [ 'id' ]] = '' ;
2018-02-15 17:30:42 +01:00
}
2018-07-18 16:12:25 +02:00
}
// Inserimento iniziale
2024-01-31 14:23:46 +01:00
if ( post ( 'op' ) == 'add' ) {
2018-07-18 16:12:25 +02:00
// Informazioni di log
Filter :: set ( 'get' , 'id_record' , $id_record );
2018-02-10 17:24:16 +01:00
2018-07-18 16:12:25 +02:00
foreach ( $values as $key => $value ) {
$dbo -> insert ( 'zz_field_record' , [
'id_record' => $id_record ,
'id_field' => $key ,
'value' => $value ,
]);
2018-02-10 17:24:16 +01:00
}
2018-07-18 16:12:25 +02:00
}
2018-02-10 17:24:16 +01:00
2018-07-18 16:12:25 +02:00
// Aggiornamento
2024-01-31 14:23:46 +01:00
if ( post ( 'op' ) == 'update' ) {
2019-02-19 18:34:44 +01:00
$query = 'SELECT `zz_field_record`.`id_field` FROM `zz_field_record` JOIN `zz_fields` ON `zz_fields`.`id` = `zz_field_record`.`id_field` WHERE id_record = ' . prepare ( $id_record ) . ' AND ' . $custom_where ;
$customs_present = $dbo -> fetchArray ( $query );
$customs_present = array_column ( $customs_present , 'id_field' );
2018-07-18 16:12:25 +02:00
foreach ( $values as $key => $value ) {
2023-12-06 11:20:28 +01:00
$value = ( ! is_array ( $value ) ? $value : json_encode ( $value ));
2019-02-19 18:34:44 +01:00
if ( in_array ( $key , $customs_present )) {
$dbo -> update ( 'zz_field_record' , [
'value' => $value ,
], [
'id_record' => $id_record ,
'id_field' => $key ,
]);
} else {
$dbo -> insert ( 'zz_field_record' , [
'id_record' => $id_record ,
'id_field' => $key ,
'value' => $value ,
]);
}
2018-02-10 17:24:16 +01:00
}
}
2018-07-18 16:12:25 +02:00
}
2018-02-10 17:24:16 +01:00
2018-07-18 16:12:25 +02:00
// Eliminazione
elseif ( ! empty ( $customs )) {
$dbo -> query ( 'DELETE FROM `zz_field_record` WHERE `id_record` = ' . prepare ( $id_record ) . ' AND `id_field` IN (' . implode ( ',' , array_column ( $customs , 'id' )) . ')' );
2018-02-10 17:24:16 +01:00
}
2017-08-04 16:28:16 +02:00
}
}
}
2018-08-09 15:33:01 +02:00
$database -> commitTransaction ();