Miglioramento gestione plugins e moduli

This commit is contained in:
Thomas Zilio 2018-07-18 16:12:25 +02:00
parent 08152f23d1
commit f04f2a99da
6 changed files with 132 additions and 169 deletions

View File

@ -4,18 +4,28 @@ include_once __DIR__.'/core.php';
// Lettura parametri iniziali // Lettura parametri iniziali
if (!empty($id_plugin)) { if (!empty($id_plugin)) {
$info = Plugins::get($id_plugin); $element = Plugins::get($id_plugin);
$directory = '/plugins/'.$info['directory']; $directory = '/plugins/'.$element['directory'];
$permesso = $info['idmodule_to']; $id_module = $element['idmodule_to'];
$id_module = $info['idmodule_to'];
} else { } else {
$info = Modules::get($id_module); $element = Modules::get($id_module);
$directory = '/modules/'.$info['directory']; $directory = '/modules/'.$element['directory'];
$permesso = $id_module;
} }
if (empty($element) || empty($element['enabled'])) {
die(tr('Accesso negato'));
}
$php = App::filepath($directory.'|custom|', 'add.php');
$html = App::filepath($directory.'|custom|', 'add.html');
$element['add_file'] = !empty($php) ? $php : $html;
$php = App::filepath($directory.'|custom|', 'edit.php');
$html = App::filepath($directory.'|custom|', 'edit.html');
$element['edit_file'] = !empty($php) ? $php : $html;
$upload_dir = DOCROOT.'/'.Uploads::getDirectory($id_module, $id_plugin); $upload_dir = DOCROOT.'/'.Uploads::getDirectory($id_module, $id_plugin);
$dbo->query('START TRANSACTION'); $dbo->query('START TRANSACTION');
@ -128,95 +138,93 @@ if (filter('op') == 'link_file' || filter('op') == 'unlink_file') {
} }
} }
if (Modules::getPermission($permesso) == 'r' || Modules::getPermission($permesso) == 'rw') { // Inclusione di eventuale plugin personalizzato
// Inclusione di eventuale plugin personalizzato if (!empty($element['script'])) {
if (!empty($info['script'])) { include App::filepath('modules/'.$element['module_dir'].'/plugins|custom|', $element['script']);
include App::filepath('modules/'.$info['module_dir'].'/plugins|custom|', $info['script']);
$dbo->query('COMMIT'); $dbo->query('COMMIT');
return; return;
} }
// Caricamento helper modulo (verifico se ci sono helper personalizzati) // Caricamento helper modulo (verifico se ci sono helper personalizzati)
include_once App::filepath($directory.'|custom|', 'modutil.php'); include_once App::filepath($directory.'|custom|', 'modutil.php');
// Lettura risultato query del modulo // Lettura risultato query del modulo
include App::filepath($directory.'|custom|', 'init.php'); include App::filepath($directory.'|custom|', 'init.php');
// Retrocompatibilità // Retrocompatibilità
if (!isset($record) && isset($records[0])) { if (!isset($record) && isset($records[0])) {
$record = $records[0]; $record = $records[0];
} }
// Registrazione del record // Registrazione del record
HTMLBuilder\HTMLBuilder::setRecord($record); HTMLBuilder\HTMLBuilder::setRecord($record);
if (Modules::getPermission($permesso) == 'rw') { if (Modules::getPermission($id_module) == 'rw') {
// Esecuzione delle operazioni di gruppo // Esecuzione delle operazioni di gruppo
$id_records = post('id_records'); $id_records = post('id_records');
$id_records = is_array($id_records) ? $id_records : explode(';', $id_records); $id_records = is_array($id_records) ? $id_records : explode(';', $id_records);
$id_records = array_filter($id_records, function ($var) {return !empty($var); }); $id_records = array_filter($id_records, function ($var) {return !empty($var); });
$id_records = array_unique($id_records); $id_records = array_unique($id_records);
$bulk = include App::filepath($directory.'|custom|', 'bulk.php'); $bulk = include App::filepath($directory.'|custom|', 'bulk.php');
$bulk = empty($bulk) ? [] : $bulk; $bulk = empty($bulk) ? [] : $bulk;
if (in_array(post('op'), array_keys($bulk))) { if (in_array(post('op'), array_keys($bulk))) {
redirect(ROOTDIR.'/controller.php?id_module='.$id_module, 'js'); redirect(ROOTDIR.'/controller.php?id_module='.$id_module, 'js');
} else { } else {
// Esecuzione delle operazioni del modulo // Esecuzione delle operazioni del modulo
include App::filepath($directory.'|custom|', 'actions.php'); include App::filepath($directory.'|custom|', 'actions.php');
// Operazioni generiche per i campi personalizzati // Operazioni generiche per i campi personalizzati
if (post('op') != null) { if (post('op') != null) {
$query = 'SELECT `id`, `name` FROM `zz_fields` WHERE '; $query = 'SELECT `id`, `name` FROM `zz_fields` WHERE ';
if (!empty($id_plugin)) { if (!empty($id_plugin)) {
$query .= '`id_plugin` = '.prepare($id_plugin); $query .= '`id_plugin` = '.prepare($id_plugin);
} else { } else {
$query .= '`id_module` = '.prepare($id_module); $query .= '`id_module` = '.prepare($id_module);
}
$customs = $dbo->fetchArray($query);
if (!starts_with(post('op'), 'delete')) {
$values = [];
foreach ($customs as $custom) {
if (isset($post[$custom['name']])) {
$values[$custom['id']] = $post[$custom['name']];
}
} }
$customs = $dbo->fetchArray($query);
if (!starts_with(post('op'), 'delete')) { // Inserimento iniziale
$values = []; if (starts_with(post('op'), 'add')) {
foreach ($customs as $custom) { // Informazioni di log
if (isset($post[$custom['name']])) { Filter::set('get', 'id_record', $id_record);
$values[$custom['id']] = $post[$custom['name']];
} foreach ($values as $key => $value) {
$dbo->insert('zz_field_record', [
'id_record' => $id_record,
'id_field' => $key,
'value' => $value,
]);
} }
}
// Inserimento iniziale // Aggiornamento
if (starts_with(post('op'), 'add')) { elseif (starts_with(post('op'), 'update')) {
// Informazioni di log foreach ($values as $key => $value) {
Filter::set('get', 'id_record', $id_record); $dbo->update('zz_field_record', [
foreach ($values as $key => $value) {
$dbo->insert('zz_field_record', [
'id_record' => $id_record,
'id_field' => $key,
'value' => $value,
]);
}
}
// Aggiornamento
elseif (starts_with(post('op'), 'update')) {
foreach ($values as $key => $value) {
$dbo->update('zz_field_record', [
'value' => $value, 'value' => $value,
], [ ], [
'id_record' => $id_record, 'id_record' => $id_record,
'id_field' => $key, 'id_field' => $key,
]); ]);
}
} }
} }
}
// Eliminazione // Eliminazione
elseif (!empty($customs)) { 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')).')'); $dbo->query('DELETE FROM `zz_field_record` WHERE `id_record` = '.prepare($id_record).' AND `id_field` IN ('.implode(',', array_column($customs, 'id')).')');
}
} }
} }
} }

30
add.php
View File

@ -2,37 +2,21 @@
include_once __DIR__.'/core.php'; include_once __DIR__.'/core.php';
if (!empty($id_plugin)) {
$info = Plugins::get($id_plugin);
$directory = '/plugins/'.$info['directory'];
} else {
Permissions::check('rw');
$module = Modules::get($id_module);
$directory = '/modules/'.$module['directory'];
}
// Inclusione elementi fondamentali del modulo // Inclusione elementi fondamentali del modulo
include $docroot.'/actions.php'; include $docroot.'/actions.php';
// Controllo dei permessi
if (empty($id_plugin)) {
Permissions::check('rw');
}
// Caricamento template
echo ' echo '
<div id="form_'.$id_module.'-'.$id_plugin.'"> <div id="form_'.$id_module.'-'.$id_plugin.'">
'; ';
// Caricamento template
$file = !empty(get('edit')) ? 'edit' : 'add'; $file = !empty(get('edit')) ? 'edit' : 'add';
include $element[$file.'_file'];
if (file_exists($docroot.$directory.'/custom/'.$file.'.php')) {
include $docroot.$directory.'/custom/'.$file.'.php';
} elseif (file_exists($docroot.$directory.'/custom/'.$file.'.html')) {
include $docroot.$directory.'/custom/'.$file.'.html';
} elseif (file_exists($docroot.$directory.'/'.$file.'.php')) {
include $docroot.$directory.'/'.$file.'.php';
} elseif (file_exists($docroot.$directory.'/'.$file.'.html')) {
include $docroot.$directory.'/'.$file.'.html';
}
echo ' echo '
</div>'; </div>';

View File

@ -10,16 +10,8 @@ if (!empty($id_record) && !empty($id_module)) {
include_once App::filepath('include|custom|', 'top.php'); include_once App::filepath('include|custom|', 'top.php');
// Lettura parametri iniziali del modulo // Inclusione gli elementi fondamentali
$module = Modules::get($id_module); include_once $docroot.'/actions.php';
if (empty($module) || empty($module['enabled'])) {
die(tr('Accesso negato'));
}
$module_dir = $module['directory'];
include $docroot.'/actions.php';
// Widget in alto // Widget in alto
echo '{( "name": "widgets", "id_module": "'.$id_module.'", "position": "top", "place": "controller" )}'; echo '{( "name": "widgets", "id_module": "'.$id_module.'", "position": "top", "place": "controller" )}';
@ -28,24 +20,23 @@ echo '{( "name": "widgets", "id_module": "'.$id_module.'", "position": "top", "p
echo ' echo '
<div class="nav-tabs-custom"> <div class="nav-tabs-custom">
<ul class="nav nav-tabs pull-right" id="tabs" role="tablist"> <ul class="nav nav-tabs pull-right" id="tabs" role="tablist">
<li class="pull-left active header">'; <li class="pull-left active header">
// Verifico se ho impostato un nome modulo personalizzato
$name = $module['title'];
echo '
<a data-toggle="tab" href="#tab_0"> <a data-toggle="tab" href="#tab_0">
<i class="'.$module['icon'].'"></i> '.$name; <i class="'.$element['icon'].'"></i> '.$element['title'];
// Pulsante "Aggiungi" solo se il modulo è di tipo "table" e se esiste il template per la popup // Pulsante "Aggiungi" solo se il modulo è di tipo "table" e se esiste il template per la popup
if (file_exists($docroot.'/modules/'.$module_dir.'/add.php') && $module['permessi'] == 'rw') { if (!empty($element['add_file']) && $element['permessi'] == 'rw') {
echo ' echo '
<button type="button" class="btn btn-primary" data-toggle="modal" data-title="'.tr('Aggiungi').'..." data-target="#bs-popup" data-href="add.php?id_module='.$id_module.'"><i class="fa fa-plus"></i></button>'; <button type="button" class="btn btn-primary" data-toggle="modal" data-title="'.tr('Aggiungi').'..." data-target="#bs-popup" data-href="add.php?id_module='.$id_module.'&id_plugin='.$id_plugin.'"><i class="fa fa-plus"></i></button>';
} }
echo ' echo '
</a> </a>
</li>'; </li>';
$plugins = $dbo->fetchArray('SELECT id, title FROM zz_plugins WHERE idmodule_to='.prepare($id_module)." AND position='tab_main' AND enabled = 1"); $plugins = $dbo->fetchArray('SELECT id, title FROM zz_plugins WHERE idmodule_to='.prepare($id_module)." AND position='tab_main' AND enabled = 1");
// Tab dei plugin
foreach ($plugins as $plugin) { foreach ($plugins as $plugin) {
echo ' echo '
<li> <li>

View File

@ -10,17 +10,8 @@ if (empty($id_record) && !empty($id_module)) {
include_once App::filepath('include|custom|', 'top.php'); include_once App::filepath('include|custom|', 'top.php');
// Lettura parametri iniziali del modulo // Inclusione gli elementi fondamentali
$module = Modules::get($id_module); include_once $docroot.'/actions.php';
if (empty($module) || empty($module['enabled'])) {
die(tr('Accesso negato'));
}
$module_dir = $module['directory'];
// Inclusione elementi fondamentali del modulo
include $docroot.'/actions.php';
// Widget in alto // Widget in alto
echo '{( "name": "widgets", "id_module": "'.$id_module.'", "id_record": "'.$id_record.'", "position": "top", "place": "editor" )}'; echo '{( "name": "widgets", "id_module": "'.$id_module.'", "id_record": "'.$id_record.'", "position": "top", "place": "editor" )}';
@ -28,6 +19,7 @@ echo '{( "name": "widgets", "id_module": "'.$id_module.'", "id_record": "'.$id_r
$advanced_sessions = setting('Attiva notifica di presenza utenti sul record'); $advanced_sessions = setting('Attiva notifica di presenza utenti sul record');
if ($advanced_sessions) { if ($advanced_sessions) {
$dbo->query('DELETE FROM zz_semaphores WHERE id_utente='.prepare(Auth::user()['id_utente']).' AND posizione='.prepare($id_module.', '.$id_record)); $dbo->query('DELETE FROM zz_semaphores WHERE id_utente='.prepare(Auth::user()['id_utente']).' AND posizione='.prepare($id_module.', '.$id_record));
$dbo->query('INSERT INTO zz_semaphores (id_utente, posizione, updated) VALUES ('.prepare(Auth::user()['id_utente']).', '.prepare($id_module.', '.$id_record).', NOW())'); $dbo->query('INSERT INTO zz_semaphores (id_utente, posizione, updated) VALUES ('.prepare(Auth::user()['id_utente']).', '.prepare($id_module.', '.$id_record).', NOW())');
echo ' echo '
@ -54,19 +46,16 @@ if (empty($record)) {
echo ' echo '
<div class="nav-tabs-custom"> <div class="nav-tabs-custom">
<ul class="nav nav-tabs pull-right" id="tabs" role="tablist"> <ul class="nav nav-tabs pull-right" id="tabs" role="tablist">
<li class="pull-left active header">'; <li class="pull-left active header">
// Verifico se ho impostato un nome modulo personalizzato
$name = $module['title'];
echo '
<a data-toggle="tab" href="#tab_0"> <a data-toggle="tab" href="#tab_0">
<i class="'.$module['icon'].'"></i> '.$name; <i class="'.$element['icon'].'"></i> '.$element['title'];
// Pulsante "Aggiungi" solo se il modulo è di tipo "table" e se esiste il template per la popup // Pulsante "Aggiungi" solo se il modulo è di tipo "table" e se esiste il template per la popup
if (file_exists($docroot.'/modules/'.$module_dir.'/add.php') && $module['permessi'] == 'rw') { if (!empty($element['add_file']) && $element['permessi'] == 'rw') {
echo ' echo '
<button type="button" class="btn btn-primary" data-toggle="modal" data-title="'.tr('Aggiungi').'..." data-target="#bs-popup" data-href="add.php?id_module='.$id_module.'"><i class="fa fa-plus"></i></button>'; <button type="button" class="btn btn-primary" data-toggle="modal" data-title="'.tr('Aggiungi').'..." data-target="#bs-popup" data-href="add.php?id_module='.$id_module.'&id_plugin='.$id_plugin.'"><i class="fa fa-plus"></i></button>';
} }
echo ' echo '
</a> </a>
</li>'; </li>';
@ -173,16 +162,7 @@ if (empty($record)) {
<div id="module-edit">'; <div id="module-edit">';
// Lettura template modulo (verifico se ci sono template personalizzati, altrimenti uso quello base) include $element['edit_file'];
if (file_exists($docroot.'/modules/'.$module_dir.'/custom/edit.php')) {
include $docroot.'/modules/'.$module_dir.'/custom/edit.php';
} elseif (file_exists($docroot.'/modules/'.$module_dir.'/custom/edit.html')) {
include $docroot.'/modules/'.$module_dir.'/custom/edit.html';
} elseif (file_exists($docroot.'/modules/'.$module_dir.'/edit.php')) {
include $docroot.'/modules/'.$module_dir.'/edit.php';
} elseif (file_exists($docroot.'/modules/'.$module_dir.'/edit.html')) {
include $docroot.'/modules/'.$module_dir.'/edit.html';
}
echo ' echo '
</div> </div>
@ -314,7 +294,7 @@ echo '
<script>'; <script>';
// Se l'utente ha i permessi in sola lettura per il modulo, converto tutti i campi di testo in span // Se l'utente ha i permessi in sola lettura per il modulo, converto tutti i campi di testo in span
$read_only = Modules::getPermission($id_module) == 'r'; $read_only = $element['permessi'] == 'r';
if ($read_only || !empty($block_edit)) { if ($read_only || !empty($block_edit)) {
$not = $read_only ? '' : '.not(".unblockable")'; $not = $read_only ? '' : '.not(".unblockable")';

View File

@ -2,10 +2,22 @@
include_once __DIR__.'/../core.php'; include_once __DIR__.'/../core.php';
// Lettura parametri iniziali del modulo // Lettura parametri iniziali
if (!empty($id_plugin)) { if (!empty($id_plugin)) {
$element = Plugins::get($id_plugin); $element = Plugins::get($id_plugin);
$directory = '/plugins/'.$element['directory'];
} else {
$element = Modules::get($id_module);
$directory = '/modules/'.$element['directory'];
}
$php = App::filepath($directory.'|custom|', 'edit.php');
$html = App::filepath($directory.'|custom|', 'edit.html');
$element['edit_file'] = !empty($php) ? $php : $html;
if (!empty($id_plugin)) {
// Inclusione di eventuale plugin personalizzato // Inclusione di eventuale plugin personalizzato
if (!empty($element['script'])) { if (!empty($element['script'])) {
include App::filepath('modules/'.$element['module_dir'].'/plugins|custom|', $element['script']); include App::filepath('modules/'.$element['module_dir'].'/plugins|custom|', $element['script']);
@ -18,23 +30,18 @@ if (!empty($id_plugin)) {
<span class="'.(!empty($element['help']) ? ' tip' : '').'"'.(!empty($element['help']) ? ' title="'.prepareToField($element['help']).'" data-position="bottom"' : '').' > <span class="'.(!empty($element['help']) ? ' tip' : '').'"'.(!empty($element['help']) ? ' title="'.prepareToField($element['help']).'" data-position="bottom"' : '').' >
'.$element['title'].(!empty($element['help']) ? ' <i class="fa fa-question-circle-o"></i>' : '').'</span>'; '.$element['title'].(!empty($element['help']) ? ' <i class="fa fa-question-circle-o"></i>' : '').'</span>';
if (file_exists($docroot.'/plugins/'.$element['directory'].'/add.php')) { if (!empty(Plugins::filepath($id_plugin, 'add.php'))) {
echo ' echo '
<button type="button" class="btn btn-primary" data-toggle="modal" data-title="'.tr('Aggiungi').'..." data-target="#bs-popup" data-href="add.php?id_module='.$id_module.'&id_plugin='.$id_plugin.'&id_parent='.$id_record.'"><i class="fa fa-plus"></i></button>'; <button type="button" class="btn btn-primary" data-toggle="modal" data-title="'.tr('Aggiungi').'..." data-target="#bs-popup" data-href="add.php?id_module='.$id_module.'&id_plugin='.$id_plugin.'&id_parent='.$id_record.'"><i class="fa fa-plus"></i></button>';
} }
echo ' echo '
</h4>'; </h4>';
$directory = '/plugins/'.$element['directory'];
} else {
$element = Modules::get($id_module);
$directory = '/modules/'.$element['directory'];
} }
$total = App::readQuery($element); $total = App::readQuery($element);
$module_options = (!empty($element['options2'])) ? $element['options2'] : $element['options']; $type = $element['option'];
// Caricamento helper modulo (verifico se ci sono helper personalizzati) // Caricamento helper modulo (verifico se ci sono helper personalizzati)
include_once App::filepath($directory.'|custom|', 'modutil.php'); include_once App::filepath($directory.'|custom|', 'modutil.php');
@ -48,8 +55,8 @@ include App::filepath($directory.'|custom|', 'controller_before.php');
/* /*
* Datatables con record * Datatables con record
*/ */
if (!empty($module_options) && $module_options != 'menu' && $module_options != 'custom') { if (!empty($type) && $type != 'menu' && $type != 'custom') {
if (count(Modules::getSegments($id_module)) > 1) { if (empty($id_plugin) && count(Modules::getSegments($id_module)) > 1) {
echo ' echo '
<div class="row"> <div class="row">
<div class="col-md-4 pull-right"> <div class="col-md-4 pull-right">
@ -210,17 +217,8 @@ if (!empty($module_options) && $module_options != 'menu' && $module_options != '
/* /*
* Inclusione modulo personalizzato * Inclusione modulo personalizzato
*/ */
elseif ($module_options == 'custom') { elseif ($type == 'custom') {
// Lettura template modulo (verifico se ci sono template personalizzati, altrimenti uso quello base) include $element['edit_file'];
if (file_exists($docroot.$directory.'/custom/edit.php')) {
include $docroot.$directory.'/custom/edit.php';
} elseif (file_exists($docroot.$directory.'/custom/edit.html')) {
include $docroot.$directory.'/custom/edit.html';
} elseif (file_exists($docroot.$directory.'/edit.php')) {
include $docroot.$directory.'/edit.php';
} elseif (file_exists($docroot.$directory.'/edit.html')) {
include $docroot.$directory.'/edit.html';
}
} }
// Caricamento file aggiuntivo su elenco record // Caricamento file aggiuntivo su elenco record

View File

@ -32,6 +32,8 @@ class Plugins
$result['option'] = empty($result['options2']) ? $result['options'] : $result['options2']; $result['option'] = empty($result['options2']) ? $result['options'] : $result['options2'];
$result['permessi'] = Modules::getPermission($result['idmodule_to']);
$plugins[$result['id']] = $result; $plugins[$result['id']] = $result;
$plugins[$result['name']] = $result['id']; $plugins[$result['name']] = $result['id'];
} }