diff --git a/lib/util.php b/lib/util.php index 7d5eabac2..4c1d193c6 100755 --- a/lib/util.php +++ b/lib/util.php @@ -567,3 +567,35 @@ if (!function_exists('temp_file')) { return $file; } } + +if (!function_exists('adjustBrightness')) { + /** + * Increases or decreases the brightness of a color by a percentage of the current brightness. + * + * @param string $hexCode Supported formats: `#FFF`, `#FFFFFF`, `FFF`, `FFFFFF` + * @param float $adjustPercent A number between -1 and 1. E.g. 0.3 = 30% lighter; -0.4 = 40% darker. + * + * @return string + * + * @author maliayas + */ + function adjustBrightness($hexCode, $adjustPercent) + { + $hexCode = ltrim($hexCode, '#'); + + if (strlen($hexCode) == 3) { + $hexCode = $hexCode[0].$hexCode[0].$hexCode[1].$hexCode[1].$hexCode[2].$hexCode[2]; + } + + $hexCode = array_map('hexdec', str_split($hexCode, 2)); + + foreach ($hexCode as &$color) { + $adjustableLimit = $adjustPercent < 0 ? $color : 255 - $color; + $adjustAmount = ceil($adjustableLimit * $adjustPercent); + + $color = str_pad(dechex($color + $adjustAmount), 2, '0', STR_PAD_LEFT); + } + + return '#'.implode($hexCode); + } +} diff --git a/modules/stato_servizi/actions.php b/modules/stato_servizi/actions.php index b23573a4d..7ca0b9271 100755 --- a/modules/stato_servizi/actions.php +++ b/modules/stato_servizi/actions.php @@ -21,101 +21,230 @@ include_once __DIR__.'/../../core.php'; use API\Services; use Models\Cache; +use Models\Module; +use Models\Plugin; use Util\FileSystem; $id = post('id'); switch (filter('op')) { - case 'uninstall': - if (!empty($id)) { - // Leggo l'id del modulo - $rs = $dbo->fetchArray('SELECT id, name, directory FROM zz_modules WHERE id='.prepare($id).' AND `default`=0'); - $modulo = $rs[0]['title']; - $module_dir = $rs[0]['directory']; + case 'rimuovi-modulo': + $id = filter('id'); + $is_plugin = filter('tipo') == 'plugin'; + if (empty($id)) { + echo json_encode([]); + } - if (count($rs) == 1) { - // Elimino il modulo dal menu - $dbo->query('DELETE FROM zz_modules WHERE id='.prepare($id).' OR parent='.prepare($id)); + // Ricerca del modulo/plugin tra quelli disponibili + if (!$is_plugin) { + $struttura = Module::where('default', '=', 0)->find($id); + } else { + $struttura = Plugin::where('default', '=', 0)->find($id); + } - $uninstall_script = base_dir().'/modules/'.$module_dir.'/update/uninstall.php'; + // Modulo/plugin non trovato + if (empty($struttura)) { + echo json_encode([]); + } - if (file_exists($uninstall_script)) { - include_once $uninstall_script; - } + // Eliminazione del modulo/plugin dal sistema di navigazione + $struttura->delete(); - delete(base_dir().'/modules/'.$module_dir.'/'); + // Esecuzione dello script di disinstallazione (se presente) + $uninstall_script = $struttura->path.'/update/uninstall.php'; + if (file_exists($uninstall_script)) { + include_once $uninstall_script; + } - flash()->info(tr('Modulo "_MODULE_" disinstallato!', [ - '_MODULE_' => $modulo, - ])); + // Eliminazione dei file del modulo/plugin + delete($struttura->path); + + // Messaggio informativo + if (!$is_plugin) { + flash()->info(tr('Modulo "_NAME_" disinstallato!', [ + '_NAME_' => $struttura->title, + ])); + } else { + flash()->info(tr('Plugin "_NAME_" disinstallato!', [ + '_NAME_' => $struttura->title, + ])); + } + + echo json_encode([]); + + break; + + case 'disabilita-modulo': + $id = filter('id'); + $is_plugin = filter('tipo') == 'plugin'; + + // Disabilitazione del modulo indicato + $database->table($is_plugin ? 'zz_plugins' : 'zz_modules') + ->where('id', '=', $id) + ->update(['enabled' => 0]); + + // Cascata in tutti i sotto-moduli + if (!$is_plugin) { + $moduli_interessati = collect([$id]); + while (!$moduli_interessati->isEmpty()) { + $id_modulo = $moduli_interessati->pop(); + + // Disabilitazione dei sotto-moduli + $database->table('zz_modules') + ->where('parent', '=', $id_modulo) + ->update(['enabled' => 0]); + + // Ricerca sotto-moduli + $sotto_moduli = $database->table('zz_modules') + ->where('parent', '=', $id_modulo) + ->select('id') + ->get()->pluck('id'); + $moduli_interessati->concat($sotto_moduli); } } - break; + // Disabilitazione modulo/plugin indicato + $moduli_sempre_attivi = ['Utenti e permessi', 'Stato dei servizi']; + $database->table('zz_modules') + ->whereIn('name', $moduli_sempre_attivi) + ->update(['enabled' => 1]); - case 'disable': - $dbo->query('UPDATE `zz_modules` SET `enabled` = 0 WHERE (`id` = '.prepare($id).' OR `parent` = '.prepare($id).') AND `id` != '.prepare(Modules::get('Stato dei servizi')['id'])); + // Messaggio informativo + $struttura = $is_plugin ? Plugin::find($id) : Module::find($id); + if (!$is_plugin) { + flash()->info(tr('Modulo "_NAME_" disabilitato!', [ + '_NAME_' => $struttura->title, + ])); + } else { + flash()->info(tr('Plugin "_NAME_" disabilitato!', [ + '_NAME_' => $struttura->title, + ])); + } - flash()->info(tr('Modulo "_MODULE_" disabilitato!', [ - '_MODULE_' => Modules::get($id)['title'], - ])); + echo json_encode([]); break; - case 'enable': - $dbo->query('UPDATE `zz_modules` SET `enabled` = 1 WHERE `id` = '.prepare($id).' OR `parent` = '.prepare($id)); + case 'abilita-sotto-modulo': + $id = filter('id'); - flash()->info(tr('Modulo "_MODULE_" abilitato!', [ - '_MODULE_' => Modules::get($id)['title'], - ])); + // Cascata in tutti i sotto-moduli + $moduli_interessati = collect([$id]); + while (!$moduli_interessati->isEmpty()) { + $id_modulo = $moduli_interessati->pop(); + + // Disabilitazione dei sotto-moduli + $database->table('zz_modules') + ->where('parent', '=', $id_modulo) + ->update(['enabled' => 1]); + + // Ricerca sotto-moduli + $sotto_moduli = $database->table('zz_modules') + ->where('parent', '=', $id_modulo) + ->select('id') + ->get()->pluck('id'); + $moduli_interessati->concat($sotto_moduli); + } + + // no break + case 'abilita-modulo': + $id = filter('id'); + $is_plugin = filter('tipo') == 'plugin'; + + // Abilitazione del modulo/plugin indicato + $database->table($is_plugin ? 'zz_plugins' : 'zz_modules') + ->where('id', '=', $id) + ->update(['enabled' => 1]); + + // Messaggio informativo + $struttura = $is_plugin ? Plugin::find($id) : Module::find($id); + if (!isset($moduli_interessati)) { + if (!$is_plugin) { + flash()->info(tr('Modulo "_NAME_" abilitato!', [ + '_NAME_' => $struttura->title, + ])); + } else { + flash()->info(tr('Plugin "_NAME_" abilitato!', [ + '_NAME_' => $struttura->title, + ])); + } + } else { + $modulo = Modules::get($id); + flash()->info(tr('Moduli sotto a "_NAME_" abilitati!', [ + '_NAME_' => $struttura->title, + ])); + } + + echo json_encode([]); break; - case 'disable_widget': - $dbo->query('UPDATE zz_widgets SET enabled = 0 WHERE id = '.prepare($id)); + case 'disabilita-widget': + $id = filter('id'); - $rs = $dbo->fetchArray('SELECT id, name FROM zz_widgets WHERE id='.prepare($id)); - $widget = $rs[0]['name']; + // Abilitazione del widget indicato + $database->table('zz_widgets') + ->where('id', '=', $id) + ->update(['enabled' => 0]); - flash()->info(tr('Widget "_WIDGET_" disabilitato!', [ - '_WIDGET_' => $widget, + // Messaggio informativo + $widget = $database->table('zz_widgets') + ->where('id', '=', $id) + ->first(); + flash()->info(tr('Widget "_NAME_" disabilitato!', [ + '_NAME_' => $widget->name, ])); + echo json_encode([]); + break; - case 'enable_widget': - $dbo->query('UPDATE zz_widgets SET enabled=1 WHERE id='.prepare($id)); + case 'abilita-widget': + $id = filter('id'); - $rs = $dbo->fetchArray('SELECT id, name FROM zz_widgets WHERE id='.prepare($id)); - $widget = $rs[0]['name']; + // Abilitazione del widget indicato + $database->table('zz_widgets') + ->where('id', '=', $id) + ->update(['enabled' => 1]); - flash()->info(tr('Widget "_WIDGET_" abilitato!', [ - '_WIDGET_' => $widget, + // Messaggio informativo + $widget = $database->table('zz_widgets') + ->where('id', '=', $id) + ->first(); + flash()->info(tr('Widget "_NAME_" abilitato!', [ + '_NAME_' => $widget->name, ])); + echo json_encode([]); + break; - case 'change_position_widget_top': - $dbo->query("UPDATE zz_widgets SET location='controller_top' WHERE id=".prepare($id)); + case 'sposta-widget': + $id = filter('id'); - $rs = $dbo->fetchArray('SELECT id, name FROM zz_widgets WHERE id='.prepare($id)); - $widget = $rs[0]['name']; + // Individuazione widget + $widget = $database->table('zz_widgets') + ->where('id', '=', $id) + ->first(); + if (empty($widget)) { + echo json_encode([]); + } - flash()->info(tr('Posizione del widget "_WIDGET_" aggiornata!', [ - '_WIDGET_' => $widget, + // Individuazione dello spostamento da effettuare + $pieces = explode('_', $widget->location); + $location = $pieces[0].'_'.($pieces[1] == 'right' ? 'top' : 'right'); + + // Abilitazione del widget indicato + $database->table('zz_widgets') + ->where('id', '=', $id) + ->update(['location' => $location]); + + // Messaggio informativo + flash()->info(tr('Posizione del widget "_NAME_" aggiornata!', [ + '_NAME_' => $widget->name, ])); - break; - - case 'change_position_widget_right': - $dbo->query("UPDATE zz_widgets SET location='controller_right' WHERE id=".prepare($id)); - - $rs = $dbo->fetchArray('SELECT id, name FROM zz_widgets WHERE id='.prepare($id)); - $widget = $rs[0]['name']; - - flash()->info(tr('Posizione del widget "_WIDGET_" aggiornata!', [ - '_WIDGET_' => $widget, - ])); + echo json_encode([]); break; @@ -178,14 +307,18 @@ switch (filter('op')) { $informazioni = $info->content; - // Formattazione dei contenuti + // Restrizione storico agli ultimi 3 anni $history = (array) $informazioni['history']; + $history = array_slice($history, 0, 3); + + // Formattazione dei contenuti dello storico foreach ($history as $key => $value) { $history[$key]['size'] = Filesystem::formatBytes($value['size']); $history[$key]['invoices_size'] = Filesystem::formatBytes($value['invoices_size']); $history[$key]['notifies_size'] = Filesystem::formatBytes($value['notifies_size']); } + // Formattazione dei contenuti generici echo json_encode([ 'invoice_number' => $informazioni['invoice_number'], 'size' => Filesystem::formatBytes($informazioni['size']), diff --git a/modules/stato_servizi/edit.php b/modules/stato_servizi/edit.php index a416b55c0..8a4eb5353 100755 --- a/modules/stato_servizi/edit.php +++ b/modules/stato_servizi/edit.php @@ -17,222 +17,270 @@ * along with this program. If not, see . */ -// Elenco moduli installati use API\Services; use Carbon\Carbon; use Models\Cache; +use Modules\StatoServizi\ServicesHook; +include_once __DIR__.'/../../core.php'; + +// Informazioni sui servizi attivi echo ' -
-
-

'.tr('Moduli installati').'

- - - - - - - - '; - -$modules = Modules::getHierarchy(); - -$osm_version = Update::getVersion(); - -echo submodules($modules); - -echo ' -
'.tr('Nome').''.tr('Versione').''.tr('Stato').''.tr('Compatibilità').''.tr('Opzioni').'
-
'; +
'; +/** + * Contenuto aggiornato e gestito dall'Hook ServicesHook. + * + * @var array + */ +$response = Cache::pool('Informazioni su Services')->content; +$limite_scadenze = (new Carbon())->addDays(60); if (Services::isEnabled()) { - // Informazioni su Services - $servizi = Cache::pool('Informazioni su Services')->content; - - if (!empty($servizi)) { - // Elaborazione dei servizi in scadenza - $limite_scadenze = (new Carbon())->addDays(60); - $servizi_in_scadenza = []; - foreach ($servizi as $servizio) { - // Gestione per data di scadenza - $scadenza = new Carbon($servizio['expiration_at']); - if ( - (isset($servizio['expiration_at']) && $scadenza->lessThan($limite_scadenze)) - ) { - $servizi_in_scadenza[] = $servizio['name'].' ('.$scadenza->diffForHumans().')'; - } - // Gestione per crediti - elseif ( - (isset($servizio['credits']) && $servizio['credits'] < 100) - ) { - $servizi_in_scadenza[] = $servizio['name'].' ('.$servizio['credits'].' crediti)'; - } - } - - echo ' -
-
-
-

- '.tr('Informazioni su Services').' -

-
+ echo ' + +
+
+
+

+ '.tr('Servizi attivi').' +

'; - if (empty($servizi_in_scadenza)) { + $servizi = collect($response['servizi'])->flatten(1); + if (!$servizi->isEmpty()) { + echo ' + + + + + + + + + + '; + foreach ($servizi as $servizio) { + $scadenza = Carbon::parse($servizio['data_conclusione']); + echo ' -

'.tr('Nessun servizio in scadenza').'.

'; + + + + + '; + } + + echo ' + +
'.tr('Tipo').''.tr('Nome').''.tr('Scadenza').'
'.$servizio['sottocategoria'].''.$servizio['codice'].' - '.$servizio['nome'].''.dateFormat($scadenza).' ('.$scadenza->diffForHumans().')
'; + } else { + echo ' + '; + } + + echo ' +
+
+
+ + +
+
+
+

+ '.tr('Risorse Services').' +

+
+ +
'; + + // Elaborazione delle risorse API in scadenza + if (!empty($response['risorse-api'])) { + $risorse_in_scadenza = ServicesHook::getRisorseInScadenza($response['risorse-api'], $limite_scadenze); + if (!$risorse_in_scadenza->isEmpty()) { + echo ' +

'.tr('Le seguenti risorse sono in scadenza:').'

+ + + + + + + + + + '; + foreach ($risorse_in_scadenza as $servizio) { + $scadenza = Carbon::parse($servizio['data_scadenza']); + echo ' + + + + + '; + } + + echo ' + +
'.tr('Nome').''.tr('Crediti').''.tr('Scadenza').'
'.$servizio['nome'].''.$servizio['crediti'].''.dateFormat($scadenza).' ('.$scadenza->diffForHumans().')
'; } else { echo ' -

'.tr('I seguenti servizi sono in scadenza:').'

-
    '; - foreach ($servizi_in_scadenza as $servizio) { - echo ' -
  • '.$servizio.'
  • '; - } - echo ' -
'; +

'.tr('Nessuna risorsa in scadenza').'.

'; } echo ' -

+

-

'.tr('Statistiche su Fatture Elettroniche').'

- - - - - + + + + + + +
'.tr('Anno').''.tr('Documenti archiviati').' +

'.tr('Statistiche su Fatture Elettroniche').'

+ + + + + + - - - + + + - - - - - - - -
'.tr('Anno').' + '.tr('Documenti archiviati').' - '.tr('Totale spazio occupato').' + + '.tr('Totale spazio occupato').' -
'.tr('Totale').'
- - +
'.tr('Totale').'
- '; + '; } else { echo ' -
'; + '; } + + echo ' + +
+
'; +} else { + echo ' +
+ +
'; } +echo ' +
+ +
+
+
+
+

+ '.tr('Moduli disponibili').' +

+
+ +
+
+
+
'; + // Widgets echo '
-

'.tr('Widgets').'

- - - - - - - '; +
+
+

+ '.tr('Widget disponibili').' +

+
-$widgets = $dbo->fetchArray('SELECT zz_widgets.id, zz_widgets.name AS widget_name, zz_modules.name AS module_name, zz_widgets.enabled AS enabled, location, help FROM zz_widgets INNER JOIN zz_modules ON zz_widgets.id_module=zz_modules.id ORDER BY `id_module` ASC, `zz_widgets`.`order` ASC'); +
+
+
+ + -$previous = ''; +'; diff --git a/modules/stato_servizi/elenco-moduli.php b/modules/stato_servizi/elenco-moduli.php new file mode 100644 index 000000000..a3904f3ad --- /dev/null +++ b/modules/stato_servizi/elenco-moduli.php @@ -0,0 +1,388 @@ +. + */ + +include_once __DIR__.'/../../core.php'; + +echo ' +
'.tr('Nome').''.tr('Posizione').''.tr('Stato').''.tr('Posizione').'
+ + + + + + + + + + '; + +$moduli = Modules::getHierarchy(); +echo renderElencoModuli($moduli); + +echo ' + +
'.tr('Nome').''.tr('Versione').''.tr('Stato').'#
+ + + +'; + +function renderElencoModuli($elenco, $depth = 0) +{ + $versione_gestionale = Update::getVersion(); + $moduli_sempre_attivi = ['Utenti e permessi', 'Stato dei servizi']; + + $result = ''; + foreach ($elenco as $record) { + $record_bloccato = in_array($record['name'], $moduli_sempre_attivi); + + $is_plugin = !empty($record['idmodule_to']); + $nome_tipo = string_lowercase($is_plugin ? tr('Plugin') : tr('Modulo')); + + // Render per sotto-moduli + $sotto_moduli = renderElencoModuli($record['all_children'], $depth + 1); + + $elenco_plugin = null; + if (empty($record['idmodule_to'])) { + $plugins = database()->table('zz_plugins') + ->where('idmodule_to', '=', $record['id']) + ->get()->map(function ($i) { + return (array) $i; + })->toArray(); + + $elenco_plugin = renderElencoModuli($plugins, $depth + 1); + } + + // COMPATIBILITA' + // Controllo per ogni versione se la regexp combacia per dire che è compatibile o meno + $compatibile = false; + $versioni_compatibili = explode(',', $record['compatibility']); + foreach ($versioni_compatibili as $versione) { + $compatibile = (preg_match('/'.$versione.'/', $versione_gestionale)) ? true : $compatibile; + } + + if ($compatibile) { + $class = ($record['enabled']) ? 'success' : 'warning'; + } else { + $class = 'danger'; + } + + $result .= ' + + + '.str_repeat(' ', $depth * 4).'- '.$record['title'].' + '.($compatibile ? '' : + '
+ + + +
' + ).' + + '.($is_plugin ? ''.tr('Plugin').'' : '').' + + '.$record['version'].' + '; + + // Possibilità di disabilitare o abilitare il moduli/plugin + if (!$record_bloccato) { + if ($record['enabled']) { + $result .= ' +
+ +
'; + + // Possibilità di abilitare tutti i sottomoduli + $sotto_moduli_disabilitato = strpos($sotto_moduli, 'fa fa-plug') !== false; + if ($sotto_moduli_disabilitato) { + $result .= ' +
+ +
'; + } + } else { + $result .= ' +
+ +
'; + } + } else { + $result .= ' +
+ +
'; + } + + $result .= ' + + '; + + // Possibilità di disinstallare solo se il modulo/plugin non è tra quelli predefiniti + if (empty($record['default'])) { + $result .= ' +
+ +
'; + } else { + $result .= ' +
+ +
'; + } + + $result .= ' + + '; + + $result .= $elenco_plugin; + $result .= $sotto_moduli; + } + + return $result; +} diff --git a/modules/stato_servizi/elenco-widget.php b/modules/stato_servizi/elenco-widget.php new file mode 100644 index 000000000..218c8d1db --- /dev/null +++ b/modules/stato_servizi/elenco-widget.php @@ -0,0 +1,253 @@ +. + */ + +include_once __DIR__.'/../../core.php'; + +echo ' + + + + + + + + + '; + +$widgets = $dbo->fetchArray('SELECT zz_widgets.*, zz_modules.name AS modulo +FROM zz_widgets + INNER JOIN zz_modules ON zz_widgets.id_module = zz_modules.id +ORDER BY `id_module` ASC, `zz_widgets`.`order` ASC'); + +$gruppi = collect($widgets)->groupBy('modulo'); +foreach ($gruppi as $modulo => $widgets) { + echo ' + + + + + + + '; + + foreach ($widgets as $widget) { + $class = $widget['enabled'] ? 'success' : 'warning'; + $nome_tipo = 'widget'; + + echo ' + + + + + + '; + } + + echo ' + '; +} + +echo ' +
'.tr('Nome').''.tr('Posizione').''.tr('Stato').''.tr('Posizione').'
'.$modulo.'
+ '.$widget['name'].(!empty($widget['help']) ? ' + ' : '').' + '.( + string_starts_with($widget['location'], 'controller') ? + tr('Schermata modulo') : + tr('Schermata dettagli') + ).''; + + // Possibilità di disabilitare o abilitare il widget + if ($widget['enabled']) { + echo ' +
+ +
'; + } else { + echo ' +
+ +
'; + } + + echo ' +
'; + + // Possibilità di spostare il widget + if (string_ends_with($widget['location'], 'top')) { + echo ' +
+ +
+ +
+ +
'; + } else { + echo ' +
+ +
+ +
+ +
'; + } + + echo ' +
+ +'; diff --git a/modules/stato_servizi/modutil.php b/modules/stato_servizi/modutil.php deleted file mode 100755 index 54e3a43e3..000000000 --- a/modules/stato_servizi/modutil.php +++ /dev/null @@ -1,98 +0,0 @@ -. - */ - -function submodules($list, $depth = 0) -{ - $osm_version = Update::getVersion(); - - $id_module = Modules::getCurrent()['id']; - - $result = ''; - - foreach ($list as $sub) { - $locked = in_array($sub['name'], ['Utenti e permessi', 'Stato dei servizi']); - - // STATO - if (!empty($sub['enabled'])) { - $text = tr('Abilitato'); - $text .= !$locked ? '. '.tr('Clicca per disabilitarlo').'...' : ''; - $stato = ''; - } else { - $stato = ''; - $class = 'warning'; - } - - // Possibilità di disabilitare o abilitare i moduli tranne quello degli aggiornamenti - if (!$locked) { - if ($sub['enabled']) { - $stato = "".$stato."\n"; - } else { - $stato = "".$stato."\n"; - } - } - - // COMPATIBILITA' - // Controllo per ogni versione se la regexp combacia per dire che è compatibile o meno - $compatibilities = explode(',', $sub['compatibility']); - - $comp = false; - foreach ($compatibilities as $compatibility) { - $comp = (preg_match('/'.$compatibility.'/', $osm_version)) ? true : $comp; - } - - if ($comp) { - $compatible = ''; - ($sub['enabled']) ? $class = 'success' : $class = 'warning'; - } else { - $compatible = ''; - $class = 'danger'; - } - - $result .= ' - - '.str_repeat(' ', $depth * 4).'- '.$sub['title'].' - '.$sub['version'].' - '.$stato.' - '.$compatible.''; - - $result .= ' - '; - - // Possibilità di disinstallare solo se il modulo non è tra quelli predefiniti - if (empty($sub['default'])) { - $result .= ' - - - "; - } else { - $result .= " - - - "; - } - - $result .= ' - - '; - - $result .= submodules($sub['all_children'], $depth + 1); - } - - return $result; -} diff --git a/modules/stato_servizi/src/ServicesHook.php b/modules/stato_servizi/src/ServicesHook.php index a5bb439e2..fdfe85555 100644 --- a/modules/stato_servizi/src/ServicesHook.php +++ b/modules/stato_servizi/src/ServicesHook.php @@ -32,44 +32,50 @@ class ServicesHook extends CachedManager public function cacheData() { - $response = Services::request('POST', 'informazioni_servizi'); - $body = Services::responseBody($response); + $response = Services::request('GET', 'info'); - return $body['services']; + return Services::responseBody($response); } public function response() { $servizi = $this->getCache()->content; + $limite_scadenze = (new Carbon())->addDays(60); // Elaborazione dei servizi in scadenza - $limite_scadenze = (new Carbon())->addDays(60); - $servizi_in_scadenza = []; - foreach ($servizi as $servizio) { - // Gestione per data di scadenza - $scadenza = new Carbon($servizio['expiration_at']); - if ( - (isset($servizio['expiration_at']) && $scadenza->lessThan($limite_scadenze)) - ) { - $servizi_in_scadenza[] = $servizio['name'].' ('.$scadenza->diffForHumans().')'; - } - - // Gestione per crediti - elseif ( - (isset($servizio['credits']) && $servizio['credits'] < 100) - ) { - $servizi_in_scadenza[] = $servizio['name'].' ('.$servizio['credits'].' crediti)'; - } - } + $risorse_in_scadenza = self::getRisorseInScadenza($servizi['risorse-api'], $limite_scadenze); $message = tr('I seguenti servizi sono in scadenza: _LIST_', [ - '_LIST_' => implode(', ', $servizi_in_scadenza), + '_LIST_' => implode(', ', $risorse_in_scadenza->pluck('nome')->all()), ]); return [ 'icon' => 'fa fa-refresh text-warning', 'message' => $message, - 'show' => !empty($servizi_in_scadenza), + 'show' => !$risorse_in_scadenza->isEmpty(), ]; } + + /** + * Restituisce l'elenco delle risorse API in scadenza, causa data oppure crediti. + * + * @param $servizi + */ + public static function getRisorseInScadenza($risorse, $limite_scadenze) + { + // Elaborazione dei servizi in scadenza + $risorse_in_scadenza = collect($risorse) + ->filter(function ($item) use ($limite_scadenze) { + return (isset($item['expiration_at']) && Carbon::parse($item['expiration_at'])->lessThan($limite_scadenze)) + || (isset($item['credits']) && $item['credits'] < 100); + }); + + return $risorse_in_scadenza->transform(function ($item, $key) { + return [ + 'nome' => $item['name'], + 'data_scadenza' => $item['expiration_at'], + 'crediti' => $item['credits'], + ]; + }); + } } diff --git a/update/2_4_26.sql b/update/2_4_26.sql index 325b9f3d5..84eac304a 100644 --- a/update/2_4_26.sql +++ b/update/2_4_26.sql @@ -82,4 +82,10 @@ INSERT INTO `zz_views` (`id_module`, `name`, `query`, `order`, `search`, `slow`, '(SELECT CONCAT(co_banche.nome, '' - '' , co_banche.iban) FROM co_banche WHERE co_banche.id = id_banca_azienda)', 6, 1, 0, 1); -- Rimosso reversed sulle note di debito -UPDATE `co_tipidocumento` SET `reversed` = '0' WHERE `co_tipidocumento`.`descrizione` = 'Nota di debito'; \ No newline at end of file +UPDATE `co_tipidocumento` SET `reversed` = '0' WHERE `co_tipidocumento`.`descrizione` = 'Nota di debito'; + +-- Fix recupero informazioni sui servizi attivi +UPDATE `zz_cache` SET `expire_at` = NULL WHERE `zz_cache`.`name` = 'Informazioni su Services'; + +-- Fix flag default per i plugin +UPDATE `zz_plugins` SET `default` = 1, `version` = '' WHERE `zz_plugins`.`name` IN ('Impianti del cliente', 'Impianti', 'Referenti', 'Sedi', 'Statistiche', 'Interventi svolti', 'Componenti ini', 'Movimenti', 'Serial', 'Consuntivo', 'Consuntivo', 'Pianificazione interventi', 'Ddt del cliente', 'Fatturazione Elettronica', 'Fatturazione Elettronica', 'Revisioni', 'Ricevute FE', 'Giacenze', 'Rinnovi', 'Statistiche', 'Dichiarazioni d''Intento', 'Pianificazione fatturazione', 'Listino Clienti', 'Storico attività', 'Consuntivo', 'Allegati', 'Componenti', 'Listino Fornitori', 'Piani di sconto/maggiorazione', 'Varianti Articolo')