1
0
mirror of https://github.com/devcode-it/openstamanager.git synced 2024-12-24 14:31:42 +01:00
openstamanager/include/top.php

693 lines
30 KiB
PHP
Raw Normal View History

<?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/>.
*/
use Util\FileSystem;
2022-07-31 00:51:07 +02:00
include_once __DIR__.'/../core.php';
$paths = App::getPaths();
$user = Auth::user();
2019-01-11 12:02:11 +01:00
$pageTitle = !empty($pageTitle) ? $pageTitle : $structure->title;
2018-09-19 10:44:32 +02:00
2023-08-04 14:54:28 +02:00
$lang = (empty($lang) || $lang == '|lang|') ? 'it_IT' : $lang;
2022-07-31 19:20:49 +02:00
2018-07-19 17:29:21 +02:00
$messages = flash()->getMessages();
2018-02-04 17:31:33 +01:00
echo '<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>'.$pageTitle.' - '.tr('OpenSTAManager').'</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
2018-06-28 15:52:56 +02:00
<meta name="robots" content="noindex,nofollow">
2023-03-22 17:03:51 +01:00
<meta name="description" content="'.tr('OpenSTAManager, il software gestionale open source per assistenza tecnica e fatturazione elettronica.').'">
2022-06-21 18:38:39 +02:00
<meta name="author" content="DevCode s.r.l.">
2020-06-30 17:38:19 +02:00
<link href="'.$paths['img'].'/favicon.png" rel="icon" type="image/x-icon" />';
if (file_exists(base_dir().'/manifest.json')) {
2019-08-02 10:38:55 +02:00
echo '
<link rel="manifest" href="'.base_path().'/manifest.json?r='.rand().'">';
2019-08-02 10:38:55 +02:00
}
2018-06-23 15:41:32 +02:00
// CSS
foreach (App::getAssets()['css'] as $style) {
echo '
<link rel="stylesheet" type="text/css" media="all" href="'.$style.'"/>';
}
2018-06-23 15:41:32 +02:00
// Print CSS
foreach (App::getAssets()['print'] as $style) {
echo '
2018-06-23 15:41:32 +02:00
<link rel="stylesheet" type="text/css" media="print" href="'.$style.'"/>';
}
if (Auth::check()) {
echo '
<script>
search = []';
$array = $_SESSION['module_'.$id_module];
if (!empty($array)) {
foreach ($array as $field => $value) {
if (!empty($value) && string_starts_with($field, 'search_')) {
$field_name = str_replace('search_', '', $field);
echo '
search.push("search_'.$field_name.'");
2020-06-30 17:38:19 +02:00
search["search_'.$field_name.'"] = "'.addslashes($value).'";';
}
}
}
echo '
translations = {';
$translations = [
'day' => tr('Giorno'),
'week' => tr('Settimana'),
'month' => tr('Mese'),
'today' => tr('Oggi'),
'firstThreemester' => tr('I trimestre'),
'secondThreemester' => tr('II trimestre'),
'thirdThreemester' => tr('III trimestre'),
'fourthThreemester' => tr('IV trimestre'),
'firstSemester' => tr('I semestre'),
'secondSemester' => tr('II semestre'),
'thisMonth' => tr('Questo mese'),
'lastMonth' => tr('Mese scorso'),
2021-10-05 11:31:26 +02:00
'nextMonth' => tr('Mese prossimo'),
'thisYear' => tr("Quest'anno"),
'lastYear' => tr('Anno scorso'),
'apply' => tr('Applica'),
'cancel' => tr('Annulla'),
'from' => tr('Da'),
'to' => tr('A'),
'custom' => tr('Personalizzato'),
'delete' => tr('Elimina'),
'deleteTitle' => tr('Sei sicuro?'),
'deleteMessage' => tr('Eliminare questo elemento?'),
2018-08-31 18:06:44 +02:00
'errorTitle' => tr('Errore'),
'errorMessage' => tr("Si è verificato un errore nell'esecuzione dell'operazione richiesta"),
'close' => tr('Chiudi'),
'filter' => tr('Filtra'),
'long' => tr('La ricerca potrebbe richiedere del tempo'),
'details' => tr('Dettagli'),
'loading' => tr('Caricamento'),
'waiting' => tr('Impossibile procedere'),
2022-02-05 22:37:45 +01:00
'waitingMessage' => tr('Prima di proseguire devi selezionare alcuni elementi.'),
2019-05-24 21:36:35 +02:00
'hooksExecuting' => tr('Hooks in esecuzione'),
2019-05-17 05:56:10 +02:00
'hookExecuting' => tr('Hook "_NAME_" in esecuzione'),
'hookMultiple' => tr('Hai _NUM_ notifiche'),
'hookSingle' => tr('Hai 1 notifica'),
'hookNone' => tr('Nessuna notifica'),
2022-02-05 22:37:45 +01:00
'singleCalendar' => tr("E' presente un solo periodo."),
'noResults' => tr('Nessun elemento trovato'),
2022-02-05 22:37:45 +01:00
'signatureMissing' => tr('Firma mancante.'),
];
foreach ($translations as $key => $value) {
echo '
2019-07-11 12:04:22 +02:00
'.$key.': "'.addslashes($value).'",';
}
echo '
allegati: {
messaggio: "'.tr('Clicca o trascina qui per caricare uno o più file').'",
maxFilesize: "'.tr('Dimensione massima: _SIZE_ MB').'",
errore: "'.tr('Errore').'",
modifica: "'.tr('Modifica allegato').'",
elimina: "'.tr('Vuoi eliminare questo file?').'",
procedi: "'.tr('Procedi').'",
},
ajax: {
"missing": {
"title": "'.tr('Errore').'",
"text": "'.tr('Alcuni campi obbligatori non sono stati compilati correttamente').'",
},
"error": {
"title": "'.tr('Errore').'",
"text": "'.tr('Errore durante il salvataggio del record').'",
}
},
2019-08-02 15:58:31 +02:00
password: {
2019-07-30 16:51:33 +02:00
"wordMinLength": "'.tr('La password è troppo corta').'",
"wordMaxLength": "'.tr('La password è troppo lunga').'",
"wordInvalidChar": "'.tr('La password contiene un carattere non valido').'",
2019-07-19 09:32:50 +02:00
"wordNotEmail": "'.tr('Non usare la tua e-mail come password').'",
2019-07-30 16:51:33 +02:00
"wordSimilarToUsername": "'.tr('La password non può contenere il tuo nome').'",
2019-07-19 09:32:50 +02:00
"wordTwoCharacterClasses": "'.tr('Usa classi di caratteri diversi').'",
2019-07-30 16:51:33 +02:00
"wordRepetitions": "'.tr('La password contiene ripetizioni').'",
"wordSequences": "'.tr('La password contiene sequenze').'",
"errorList": "'.tr('Attenzione').':",
2019-07-19 09:32:50 +02:00
"veryWeak": "'.tr('Molto debole').'",
"weak": "'.tr('Debole').'",
"normal": "'.tr('Normale').'",
"medium": "'.tr('Media').'",
"strong": "'.tr('Forte').'",
"veryStrong": "'.tr('Molto forte').'",
},
2019-08-02 15:58:31 +02:00
datatables: {
"emptyTable": "'.tr('Nessun dato presente nella tabella').'",
"info": "'.tr('Vista da _START_ a _END_ di _TOTAL_ elementi').'",
"infoEmpty": "'.tr('Vista da 0 a 0 di 0 elementi').'",
"infoFiltered": "('.tr('filtrati da _MAX_ elementi totali').')",
"infoPostFix": "",
"lengthMenu": "'.tr('Visualizza _MENU_ elementi').'",
"loadingRecords": " ",
"processing": "'.tr('Elaborazione').'...",
"search": "'.tr('Cerca').':",
"zeroRecords": "'.tr('La ricerca non ha portato alcun risultato').'.",
"paginate": {
"first": "'.tr('Inizio').'",
"previous": "'.tr('Precedente').'",
"next": "'.tr('Successivo').'",
"last": "'.tr('Fine').'"
},
},
};
globals = {
rootdir: "'.base_path().'",
2019-07-11 12:04:22 +02:00
js: "'.$paths['js'].'",
css: "'.$paths['css'].'",
img: "'.$paths['img'].'",
2018-02-23 09:49:31 +01:00
2019-07-11 12:04:22 +02:00
id_module: "'.$id_module.'",
id_record: "'.$id_record.'",
2020-06-30 17:38:19 +02:00
2019-07-26 17:40:52 +02:00
is_mobile: '.isMobile().',
2018-02-23 09:49:31 +01:00
2018-07-08 18:11:17 +02:00
cifre_decimali: '.setting('Cifre decimali per importi').',
2018-02-23 09:49:31 +01:00
2019-08-02 15:58:31 +02:00
timestamp_format: "'.formatter()->getTimestampPattern().'",
date_format: "'.formatter()->getDatePattern().'",
time_format: "'.formatter()->getTimePattern().'",
2018-09-20 12:05:22 +02:00
decimals: "'.formatter()->getNumberSeparators()['decimals'].'",
thousands: "'.formatter()->getNumberSeparators()['thousands'].'",
currency: "'.currency().'",
2018-02-23 09:49:31 +01:00
search: search,
translations: translations,
2024-01-15 15:30:45 +01:00
locale: "'.explode('_', $lang)[0].'",
2019-08-02 15:58:31 +02:00
full_locale: "'.$lang.'",
2018-02-23 09:49:31 +01:00
2019-07-11 12:04:22 +02:00
start_date: "'.$_SESSION['period_start'].'",
start_date_formatted: "'.Translator::dateToLocale($_SESSION['period_start']).'",
end_date: "'.$_SESSION['period_end'].'",
end_date_formatted: "'.Translator::dateToLocale($_SESSION['period_end']).'",
minute_stepping: '.setting('Numero di minuti di avanzamento delle sessioni delle attività').',
2018-02-23 09:49:31 +01:00
collapse_plugin_sidebar: '.intval(setting('Nascondere la barra dei plugin di default')).',
2018-02-23 09:49:31 +01:00
ckeditorToolbar: [
2022-07-31 02:59:22 +02:00
["Undo","Redo","-","Cut","Copy","Paste","PasteText","PasteFromWord","-","SpellChecker", "Scayt", "-","Link","Unlink","-","Bold","Italic","Underline","Superscript","SpecialChar","HorizontalRule","-","JustifyLeft","JustifyCenter","JustifyRight","JustifyBlock","-","NumberedList","BulletedList","Outdent","Indent","Blockquote","-","Styles","Format","Image","Table", "TextColor", "BGColor", "EmojiPanel" ],
2018-02-23 09:49:31 +01:00
],
ckeditorToolbar_Full: [
2021-10-25 16:39:37 +02:00
{ name: "document", items : [ "Source", "ExportPdf", "Preview", "Print", "-", "Templates" ] },
{ name: "clipboard", items : [ "Cut","Copy","Paste","PasteText","PasteFromWord","-","Undo","Redo" ] },
{ name: "editing", items : [ "Find","Replace","-","SelectAll","-","SpellChecker", "Scayt" ] },
{ name: "forms", items : [ "Form", "Checkbox", "Radio", "TextField", "Textarea", "Select", "Button", "ImageButton",
"HiddenField" ] },
"/",
2021-10-25 16:39:37 +02:00
{ name: "basicstyles", items : [ "Bold","Italic","Underline","Strike","Subscript","Superscript","-","CopyFormatting","RemoveFormat" ] },
{ name: "paragraph", items : [ "NumberedList","BulletedList","-","Outdent","Indent","-","Blockquote","CreateDiv",
2021-10-25 16:39:37 +02:00
"-","JustifyLeft","JustifyCenter","JustifyRight","JustifyBlock","-","BidiLtr","BidiRtl","Language" ] },
{ name: "links", items : [ "Link","Unlink","Anchor" ] },
2022-07-31 02:59:22 +02:00
{ name: "insert", items : [ "Image","Flash","Table","HorizontalRule","EmojiPanel","SpecialChar","PageBreak","Iframe" ] },
"/",
{ name: "styles", items : [ "Styles","Format","Font","FontSize" ] },
{ name: "colors", items : [ "TextColor","BGColor" ] },
2021-10-25 16:39:37 +02:00
{ name: "tools", items : [ "Maximize", "ShowBlocks" ] },
{ name: "about", items: [ "About" ] }
],
2019-07-11 12:04:22 +02:00
order_manager_id: "'.($dbo->isInstalled() ? Modules::get('Stato dei servizi')['id'] : '').'",
2019-07-09 12:29:39 +02:00
dataload_page_buffer: '.setting('Lunghezza in pagine del buffer Datatables').',
2018-07-08 18:11:17 +02:00
tempo_attesa_ricerche: '.setting('Tempo di attesa ricerche in secondi').',
restrict_summables_to_selected: '.setting('Totali delle tabelle ristretti alla selezione').',
snapDuration: "'.setting('Tempo predefinito di snap attività sul calendario').'"
};
</script>';
} else {
echo '
2018-07-09 10:44:54 +02:00
<script>
globals = {
rootdir: "'.base_path().'",
2020-06-30 17:38:19 +02:00
2019-07-08 12:41:37 +02:00
search: {},
2019-07-19 09:32:50 +02:00
translations: {
password: {
"wordMinLength": "'.tr('La tua password è troppo corta').'",
"wordMaxLength": "'.tr('La tua password è troppo lunga').'",
"wordInvalidChar": "'.tr('La tua password contiene un carattere non valido').'",
"wordNotEmail": "'.tr('Non usare la tua e-mail come password').'",
"wordSimilarToUsername": "'.tr('La tua password non può contenere il tuo nome').'",
"wordTwoCharacterClasses": "'.tr('Usa classi di caratteri diversi').'",
"wordRepetitions": "'.tr('Troppe ripetizioni').'",
"wordSequences": "'.tr('La tua password contiene sequenze').'",
"errorList": "'.tr('Errori').':",
"veryWeak": "'.tr('Molto debole').'",
"weak": "'.tr('Debole').'",
"normal": "'.tr('Normale').'",
"medium": "'.tr('Media').'",
"strong": "'.tr('Forte').'",
"veryStrong": "'.tr('Molto forte').'",
},
},
2020-06-30 17:38:19 +02:00
2019-08-02 15:58:31 +02:00
timestamp_format: "'.formatter()->getTimestampPattern().'",
date_format: "'.formatter()->getDatePattern().'",
time_format: "'.formatter()->getTimePattern().'",
2024-01-15 15:30:45 +01:00
locale: "'.explode('_', $lang)[0].'",
2019-08-02 15:58:31 +02:00
full_locale: "'.$lang.'",
2018-07-09 10:44:54 +02:00
};
</script>';
}
2018-06-23 15:41:32 +02:00
// JS
foreach (App::getAssets()['js'] as $js) {
echo '
<script type="text/javascript" charset="utf-8" src="'.$js.'"></script>';
}
// Impostazioni di default per gli alert
echo '
<script>
swal.setDefaults({
buttonsStyling: false,
confirmButtonClass: "btn btn-lg btn-primary",
cancelButtonClass: "btn btn-lg",
cancelButtonText: "'.tr('Annulla').'",
});
</script>';
2018-07-02 16:56:00 +02:00
if (Auth::check()) {
2018-07-09 10:44:54 +02:00
if (setting('Abilita esportazione Excel e PDF')) {
2018-07-02 16:56:00 +02:00
echo '
<script type="text/javascript" charset="utf-8" src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js"></script>
<script type="text/javascript" charset="utf-8" src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.2.9/pdfmake.min.js"></script>
<script type="text/javascript" charset="utf-8" src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.2.9/vfs_fonts.min.js"></script>';
2018-07-02 16:56:00 +02:00
}
2020-02-20 02:02:01 +01:00
if (setting('Attiva scorciatoie da tastiera')) {
echo '<script type="text/javascript" charset="utf-8" src="'.App::getPaths()['js'].'/hotkeys-js/hotkeys.min.js?v='.$version.'"></script>';
2020-02-20 02:02:01 +01:00
echo '
<script>
hotkeys("f1,f2,f3,f4", function(event, handler) {
switch (handler.key) {
case "f1":
event.preventDefault();
$("button[data-toggle]").first().trigger("click");
break;
case "f2":
event.preventDefault();
$("#save").first().trigger("click");
break;
case "f3":
event.preventDefault();
window.open($("#print-button_p").first().attr("href"));
break;
case "f4":
event.preventDefault();
$("#email-button_p").first().trigger("click");
break;
default: alert(event);
}
2020-02-20 02:02:01 +01:00
});
2020-02-20 02:02:01 +01:00
</script>';
}
}
2024-01-31 14:23:46 +01:00
// Set the group theme
if (isset($user)) {
if ($user->getThemeAttribute()) {
2024-01-19 10:32:20 +01:00
$theme = $user->getThemeAttribute();
}
}
$settings_collapse = session_get('settings.sidebar-collapse') ? 1 : 0;
$hide_sidebar = Auth::check() && (setting('Nascondere la barra sinistra di default') || $settings_collapse);
echo '
</head>
2022-08-29 13:18:45 +02:00
<body class="sidebar-mini skin-'.$theme.(!empty($hide_sidebar) ? ' sidebar-collapse' : '').(!Auth::check() ? ' hold-transition login-page' : '').'">
<div class="'.(!Auth::check() ? '' : 'wrapper').'">';
if (Auth::check()) {
$calendar_color_label = ($_SESSION['period_start'] != date('Y').'-01-01' || $_SESSION['period_end'] != date('Y').'-12-31') ? 'danger' : 'default';
echo '
<!-- Loader principale -->
<div id="main_loading">
<div>
<i class="fa fa-cog fa-spin text-danger"></i>
</div>
</div>
<!-- Loader secondario -->
<div id="mini-loader" style="display:none;">
<div></div>
</div>
<!-- Loader senza overlay -->
<div id="tiny-loader" style="display:none;"></div>
<header class="main-header">
<a href="'.tr('https://www.openstamanager.com').'" class="logo" title="'.tr("Il gestionale open source per l'assistenza tecnica e la fatturazione").'" target="_blank">
<!-- mini logo for sidebar mini 50x50 pixels -->
<span class="logo-mini">'.tr('OSM').'</span>
<!-- logo for regular state and mobile devices -->
<span class="logo-lg">'.tr('OpenSTAManager').'</span>
</a>
<!-- Header Navbar: style can be found in header.less -->
<nav class="navbar navbar-static-top" role="navigation">
2020-06-30 17:38:19 +02:00
<!-- Sidebar toggle button-->
2018-05-05 14:54:47 +02:00
<a href="#" class="sidebar-toggle" data-toggle="push-menu" role="button">
<span class="sr-only">'.tr('Mostra/nascondi menu').'</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>
2019-05-11 05:35:00 +02:00
<!-- Navbar Left Menu -->
<div class="navbar-left">
<ul class="nav navbar-nav">
<li><a href="#" id="daterange" role="button" >
2019-05-11 05:35:00 +02:00
<i class="fa fa-calendar" style="color:inherit"></i> <i class="fa fa-caret-down" style="color:inherit"></i>
</a></li>
2019-08-02 15:58:31 +02:00
<li><a style="cursor:default;padding:0px;padding-right:5px;padding-left:5px;margin-top:15px;" class="label label-'.$calendar_color_label.'">
2019-05-11 05:35:00 +02:00
'.Translator::dateToLocale($_SESSION['period_start']).' - '.Translator::dateToLocale($_SESSION['period_end']).'
</a></li>
</ul>
</div>
2019-08-02 15:58:31 +02:00
2019-05-11 05:35:00 +02:00
<!-- Navbar Right Menu -->
<div class="navbar-custom-menu">
2019-05-10 06:32:06 +02:00
<ul class="nav navbar-nav">
2022-02-05 15:22:46 +01:00
<li class="nav-button hide"><a href="'.base_path().'/bug.php" class="tip nav-button" title="'.tr('Segnalazione bug').'">
<i class="fa fa-bug"></i>
</a></li>
<li class="nav-button" >
<p style="padding:10px 15px;">&nbsp;</p>
</li>';
//Visualizzo gli hooks solo agli amministratori e solo se non sono stati disabilitati.
if ($user->gruppo == 'Amministratori' && !$config['disable_hooks']) {
2023-08-04 14:54:28 +02:00
echo '
2020-08-27 09:24:28 +02:00
<li class="dropdown notifications-menu nav-button">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
2019-05-10 06:32:06 +02:00
<i class="fa fa-bell-o"></i>
<span id="hooks-label" class="label label-warning">
2019-05-10 17:14:34 +02:00
<span id="hooks-loading"><i class="fa fa-spinner fa-spin"></i></span>
2019-08-26 18:02:05 +02:00
<span id="hooks-notified"></span>
2019-05-24 20:15:05 +02:00
<span id="hooks-counter" class="hide">0</span>
2019-08-26 18:02:05 +02:00
<span id="hooks-number" class="hide">0</span>
2019-05-10 17:14:34 +02:00
</span>
2019-05-10 06:32:06 +02:00
</a>
<ul class="dropdown-menu">
2019-05-24 21:36:35 +02:00
<li class="header"><span class="small" id="hooks-header"></span></li>
2019-05-10 06:32:06 +02:00
<li><ul class="menu" id="hooks">
2019-08-02 15:58:31 +02:00
2019-05-10 06:32:06 +02:00
</ul></li>
</ul>
</li>
<li class="nav-button"><a href="#" onclick="window.print()" class="tip nav-button" title="'.tr('Stampa').'">
2019-05-10 06:32:06 +02:00
<i class="fa fa-print"></i>
</a></li>
2019-08-02 15:58:31 +02:00
<li class="nav-button"><a href="'.base_path().'/log.php" class="tip nav-button" title="'.tr('Log accessi').'">
2019-05-10 06:32:06 +02:00
<i class="fa fa-book"></i>
</a></li>';
2023-08-04 14:54:28 +02:00
}
2019-08-02 15:58:31 +02:00
2023-08-04 14:54:28 +02:00
echo '
2023-07-13 10:39:02 +02:00
<li class="nav-button"><a data-href="'.base_path().'/shortcuts.php" data-title="'.tr('Scorciatoie da tastiera').'" class="tip nav-button" title="'.tr('Scorciatoie').'">
2023-06-13 14:07:09 +02:00
<i class="fa fa-keyboard-o"></i>
2019-05-10 06:32:06 +02:00
</a></li>
2019-08-02 15:58:31 +02:00
2023-06-13 14:07:09 +02:00
<li class="nav-button"><a href="'.base_path().'/info.php" class="tip nav-button" title="'.tr('Informazioni').'">
<i class="fa fa-info"></i>
2023-06-13 13:15:31 +02:00
</a></li>
<li class="nav-button"><a href="'.base_path().'/index.php?op=logout" onclick="sessionStorage.clear()" class="bg-red tip" title="'.tr('Esci').'">
2019-05-10 06:32:06 +02:00
<i class="fa fa-power-off"></i>
</a></li>
</ul>
</div>
2019-08-02 15:58:31 +02:00
</nav>
</header>
<aside class="main-sidebar">
<section class="sidebar">
<!-- Sidebar user panel -->
<div class="user-panel text-center info" style="height: 60px">
<div class="info">
<p><a href="'.base_path().'/modules/utenti/info.php">
'.$user['username'].'
</a></p>
<p id="datetime"></p>
</div>
<a class="image" href="'.base_path().'/modules/utenti/info.php">';
$user_photo = $user->photo;
if ($user_photo) {
echo '
2019-07-30 16:51:33 +02:00
<img src="'.$user_photo.'" class="img-circle pull-left" alt="'.$user['username'].'" />';
} else {
echo '
2019-07-24 19:20:55 +02:00
<i class="fa fa-user-circle-o fa-3x pull-left" alt="'.tr('OpenSTAManager').'"></i>';
}
echo '
</a>
</div>
<!-- search form -->
<div class="sidebar-form">
<div class="input-group">
<input type="text" name="q" class="form-control" id="supersearch" placeholder="'.tr('Cerca').'..."/>
<span class="input-group-btn">
<button class="btn btn-flat" id="search-btn" name="search" type="submit">
<i class="fa fa-search"></i>
</button>
</span>
</div>
</div>
<!-- /.search form -->
<ul class="sidebar-menu">';
echo Modules::getMainMenu();
echo '
</ul>
</section>
<!-- /.sidebar -->
</aside>';
if (string_contains($_SERVER['SCRIPT_FILENAME'], 'editor.php')) {
// Menu laterale per la visualizzazione dei plugin
echo '
<aside class="control-sidebar control-sidebar-light">
2024-02-20 14:11:01 +01:00
<h4><i class="fa fa-plug"></i> '.tr('Plugin').'</h4>
<ul class="nav nav-tabs nav-pills nav-stacked">
2022-03-18 10:46:29 +01:00
<li data-toggle="control-sidebar" class="active btn-default">
<a data-toggle="tab" href="#tab_0">
2024-02-20 14:11:01 +01:00
'.$structure['title'].'
</a>
</li>';
// Tab dei plugin
2022-03-11 13:01:11 +01:00
if (!empty($id_record)) {
2024-03-04 13:17:54 +01:00
$plugins = $dbo->fetchArray('SELECT `zz_plugins`.`id`, `title`, `options`, `options2` FROM `zz_plugins` LEFT JOIN `zz_plugins_lang` ON (`zz_plugins`.`id` = `zz_plugins_lang`.`id_record` AND `zz_plugins_lang`.`id_lang` = '.setting('Lingua').') WHERE `idmodule_to`='.prepare($id_module)." AND `position`='tab' AND `enabled` = 1 ORDER BY `zz_plugins`.`order` DESC");
2022-03-11 13:01:11 +01:00
foreach ($plugins as $plugin) {
2024-01-15 15:30:45 +01:00
// Badge count per record plugin
2022-03-11 13:01:11 +01:00
$count = 0;
$opt = '';
2023-08-04 14:54:28 +02:00
if (!empty($plugin['options2'])) {
2022-03-11 13:01:11 +01:00
$opt = json_decode($plugin['options2'], true);
2023-08-04 14:54:28 +02:00
} elseif (!empty($plugin['options'])) {
2022-03-11 13:01:11 +01:00
$opt = json_decode($plugin['options'], true);
}
2023-08-04 14:54:28 +02:00
if (!empty($opt)) {
2022-03-11 13:01:11 +01:00
$q = str_replace('|id_parent|', $id_record, $opt['main_query'][0]['query']);
$count = $dbo->fetchNum($q);
}
2022-03-08 17:00:26 +01:00
2022-03-11 13:01:11 +01:00
echo '
2022-03-18 10:46:29 +01:00
<li data-toggle="control-sidebar" class="btn-default" >
2022-03-11 13:01:11 +01:00
<a data-toggle="tab" href="#tab_'.$plugin['id'].'" id="link-tab_'.$plugin['id'].'">
'.$plugin['title'].'
2023-08-04 14:54:28 +02:00
<span class="badge pull-right">'.($count > 0 ? $count : '').'</span>
2022-03-11 13:01:11 +01:00
</a>
</li>';
2022-03-08 17:00:26 +01:00
}
}
// Tab per le note interne
if ($structure->permission != '-' && $structure->use_notes) {
$notes = $structure->recordNotes($id_record);
echo '
2022-03-18 10:46:29 +01:00
<li data-toggle="control-sidebar" class="btn-default">
<a class="bg-info" data-toggle="tab" href="#tab_note" id="link-tab_note">
'.tr('Note interne').'
2022-03-11 13:01:11 +01:00
<span class="badge pull-right">'.($notes->count() ?: '').'</span>
</a>
</li>';
}
// Tab per le checklist
if ($structure->permission != '-' && $structure->use_checklists) {
2023-05-30 16:06:24 +02:00
$checklists_unchecked = $structure->recordChecks($id_record)->where('checked_at', null);
$checklists_total = $structure->recordChecks($id_record);
echo '
2022-03-18 10:46:29 +01:00
<li data-toggle="control-sidebar" class="btn-default">
<a class="bg-info" data-toggle="tab" href="#tab_checks" id="link-tab_checks">
'.tr('Checklist').'
2023-08-04 14:54:28 +02:00
'.(($checklists_total->count() > 0) ?
2024-01-15 15:30:45 +01:00
'<span class="badge pull-right">'.$checklists_unchecked->count().tr(' / ').$checklists_total->count().'</span>' : '').'
</a>
</li>';
}
// Tab per le informazioni sulle operazioni
if (Auth::admin()) {
echo '
2022-03-18 10:46:29 +01:00
<li data-toggle="control-sidebar" class="btn-default">
<a class="bg-info" data-toggle="tab" href="#tab_info" id="link-tab_info">
'.tr('Info').'
</a>
</li>';
}
echo '
</ul>
</aside>
<div class="control-sidebar-bg"></div>';
}
echo '
<!-- Right side column. Contains the navbar and content of the page -->
<aside class="content-wrapper">
<!-- Main content -->
<section class="content">
<div class="row">';
if (string_contains($_SERVER['SCRIPT_FILENAME'], 'editor.php')) {
$location = 'editor_right';
} elseif (string_contains($_SERVER['SCRIPT_FILENAME'], 'controller.php')) {
$location = 'controller_right';
}
echo '
<div class="col-md-12">';
// Eventuale messaggio personalizzato per l'installazione corrente
$extra_file = App::filepath('include/custom/extra', 'extra.php');
if ($extra_file) {
include_once $extra_file;
}
} else {
// Eventuale messaggio personalizzato per l'installazione corrente
$extra_file = App::filepath('include/custom/extra', 'login.php');
if ($extra_file) {
include_once $extra_file;
}
if (!empty($messages['warning']) || !empty($messages['error'])) {
echo '
<div class="box box-warning box-center">
<div class="box-header with-border text-center">
<h3 class="box-title">'.tr('Informazioni').'</h3>
</div>
<div class="box-body">';
}
}
2018-07-19 12:47:28 +02:00
// Infomazioni
2018-07-19 12:47:28 +02:00
if (!empty($messages['info'])) {
foreach ($messages['info'] as $value) {
echo '
<script>
$(document).ready( function(){
window.parent.toastr.success("'.$value.'", toastr.options);
});
</script>';
2018-07-19 12:47:28 +02:00
}
}
// Errori
2018-07-19 12:47:28 +02:00
if (!empty($messages['error'])) {
foreach ($messages['error'] as $value) {
echo '
<div class="alert alert-danger push">
<h4><i class="icon fa fa fa-ban"></i> '.tr("Errore").'</h4>
'.$value.'
</div>';
2018-07-19 12:47:28 +02:00
}
}
// Avvisi
2018-07-19 12:47:28 +02:00
if (!empty($messages['warning'])) {
foreach ($messages['warning'] as $value) {
echo '
<div class="alert alert-warning push">
<h4><i class="icon fa fa-warning"></i> '.tr("Attenzione").'</h4>
'.$value.'
</div>';
2018-07-19 12:47:28 +02:00
}
}
if (!Auth::check() && (!empty($messages['info']) || !empty($messages['warning']) || !empty($messages['error']))) {
echo '
</div>
</div>';
}
// Messaggio informativo per l'esaurimento dello spazio totale disponibile nel server
$free_space = disk_free_space('.');
$space_limit = 1; // GB
if ($free_space < ($space_limit * (1024 ** 3))) {
echo '
2020-11-24 18:30:52 +01:00
<div class="callout callout-warning">
<h4>
<i class="fa fa-warning"></i> '.tr('Spazio in esaurimento').'
</h4>
<p>'.tr('Lo spazio a disposizione del gestionale è in esaurimento: sono al momento disponibili _TOT_', [
'_TOT_' => FileSystem::formatBytes($free_space),
]).'.</p>
2023-05-11 14:13:37 +02:00
<p>'.tr('Questo può risultare un serio problema per la continuità di funzionamento del software, poiché le operazioni più espansive che richiedono spazio di archiviazione possono causare malfunzionamenti imprevisti').'. '.tr('Ad esempio, le attività di backup, caricamento di allegati o anche l\'utilizzo normale del gestionale potrebbero rendere i dati inaffidabili, provocando pertanto una perdita delle informazioni salvate').'.</p>
2023-08-04 14:54:28 +02:00
<p>'.tr('Contatta gli amministratori di sistema per risolvere al più presto il problema').'.</p>
2020-11-24 18:30:52 +01:00
</div>';
}