2020
2121use API \Services ;
2222use Carbon \Carbon ;
23+ use Models \User ;
24+ use Util \FileSystem ;
2325
2426include_once __DIR__ .'/../../core.php ' ;
2527
3840 </div>
3941
4042 <div class="card-body p-0"> ' ;
43+ $ servizi = Services::getServiziAttivi (true )->flatten (1 );
44+ if (!$ servizi ->isEmpty ()) {
45+ // Calcolo degli elementi in scadenza e scadut
46+ $ servizi_in_scadenza = $ servizi ->filter (function ($ item ) use ($ limite_scadenze ) {
47+ if (!is_array ($ item ) || !isset ($ item ['data_conclusione ' ])) {
48+ return false ;
49+ }
50+ $ scadenza = Carbon::parse ($ item ['data_conclusione ' ]);
51+ $ is_expiring = $ scadenza ->greaterThan (Carbon::now ()) && $ scadenza ->lessThan ($ limite_scadenze );
4152
42- // Recupero di tutti i servizi e risorse attivi
43- $ servizi = Services::getServiziAttivi (true );
53+ return $ is_expiring ;
54+ });
55+
56+ $ servizi_scaduti = $ servizi ->filter (function ($ item ) {
57+ if (!is_array ($ item ) || !isset ($ item ['data_conclusione ' ])) {
58+ return false ;
59+ }
60+ $ scadenza = Carbon::parse ($ item ['data_conclusione ' ]);
61+ $ is_expired = $ scadenza ->lessThan (Carbon::now ());
62+
63+ return $ is_expired ;
64+ });
65+
66+ // Messaggi di avviso
67+ if (!$ servizi_scaduti ->isEmpty ()) {
68+ echo '
69+ <div class="alert alert-danger m-3 mb-0">
70+ <i class="fa fa-exclamation-triangle mr-2"></i> ' .tr ('Attenzione, alcuni elementi sono scaduti: _NUM_ ' , [
71+ '_NUM_ ' => $ servizi_scaduti ->count (),
72+ ]).'
73+ </div> ' ;
74+ }
75+
76+ if (!$ servizi_in_scadenza ->isEmpty ()) {
77+ echo '
78+ <div class="alert alert-warning m-3 mb-0">
79+ <i class="fa fa-clock-o mr-2"></i> ' .tr ('Attenzione, alcuni elementi sono in scadenza: _NUM_ ' , [
80+ '_NUM_ ' => $ servizi_in_scadenza ->count (),
81+ ]).'
82+ </div> ' ;
83+ }
84+
85+ echo '
86+ <table class="table table-hover table-striped table-sm mb-0">
87+ <thead>
88+ <tr>
89+ <th width="5%" class="text-center"> ' .tr ('Stato ' ).'</th>
90+ <th> ' .tr ('Nome ' ).'</th>
91+ <th width="15%"> ' .tr ('Tipo ' ).'</th>
92+ <th width="15%"> ' .tr ('Scadenza ' ).'</th>
93+ <th width="20%" class="text-center"></th>
94+ </tr>
95+ </thead>
96+
97+ <tbody> ' ;
98+ foreach ($ servizi as $ servizio ) {
99+ $ scadenza = Carbon::parse ($ servizio ['data_conclusione ' ]);
100+ $ is_expired = $ scadenza ->lessThan (Carbon::now ());
101+ $ is_expiring = $ scadenza ->greaterThan (Carbon::now ()) && $ scadenza ->lessThan ($ limite_scadenze );
102+
103+ $ spazio_utilizzato = FileSystem::folderSize (base_dir (), ['htaccess ' ]) / (1024 ** 3 );
104+ $ utenti_attivi = User::where ('enabled ' , 1 )->count ();
105+ $ spazio_warning = $ servizio ['spazio_limite ' ] && $ spazio_utilizzato >= $ servizio ['spazio_limite ' ];
106+ $ utenti_warning = $ servizio ['utenti_limite ' ] && $ utenti_attivi >= $ servizio ['utenti_limite ' ];
107+
108+ // Determinazione dello stato
109+ $ status_class = $ is_expired ? 'table-danger ' : ($ is_expiring ? 'table-warning ' : '' );
110+ $ status_icon = $ is_expired ? '<i class="fa fa-times-circle text-danger" title=" ' .tr ('Scaduto/Esaurito ' ).'"></i> ' :
111+ ($ is_expiring ? '<i class="fa fa-exclamation-triangle text-warning" title=" ' .tr ('Attenzione ' ).'"></i> ' :
112+ '<i class="fa fa-check-circle text-success" title=" ' .tr ('Attivo ' ).'"></i> ' );
113+
114+ $ spazio_class = ($ spazio_warning ? 'danger ' : 'secondary ' );
115+ $ spazio_icon = ($ spazio_warning ? '<i class="fa fa-exclamation-triangle" title=" ' .tr ('Attenzione ' ).'"></i> ' : '' );
116+ $ utenti_class = ($ utenti_warning ? 'danger ' : 'secondary ' );
117+ $ utenti_icon = ($ utenti_warning ? '<i class="fa fa-exclamation-triangle" title=" ' .tr ('Attenzione ' ).'"></i> ' : '' );
118+ echo '
119+ <tr class=" ' .$ status_class .'">
120+ <td class="text-center"> ' .$ status_icon .'</td>
121+ <td><strong> ' .$ servizio ['codice ' ].'</strong><br><small class="text-muted"> ' .$ servizio ['nome ' ].'</small></td>
122+ <td><span class="badge badge-info"> ' .$ servizio ['sottocategoria ' ].'</span></td>
123+ <td> ' .dateFormat ($ scadenza ).' <br><small class="text-muted"> ' .$ scadenza ->diffForHumans ().'</small></td>
124+ <td class="text-center">
125+ ' .($ servizio ['spazio_limite ' ] ? '<span class="badge badge- ' .$ spazio_class .'"><i class="fa fa-database mr-1"></i> ' .numberFormat ($ spazio_utilizzato ,1 ).' / ' .numberFormat ($ servizio ['spazio_limite ' ],1 ).' ' .tr ('GB ' ).' ' .$ spazio_icon .'</span> ' : '' ).'
126+ ' .($ servizio ['utenti_limite ' ] ? '<br><span class="badge badge- ' .$ utenti_class .'"><i class="fa fa-users mr-1"></i> ' .$ utenti_attivi .' / ' .$ servizio ['utenti_limite ' ].' ' .tr ('utenti ' ).' ' .$ utenti_icon .'</span> ' : '' ).'
127+ </td>
128+ </tr> ' ;
129+ }
130+
131+ // Conteggio servizi e risorse
132+ $ count_servizi = $ servizi ->filter (fn ($ item ) => !isset ($ item ['credits ' ]))->count ();
133+ echo '
134+ </tbody>
135+ <tfoot>
136+ <tr class="table-light">
137+ <td colspan="4">
138+ <strong> ' .tr ('Totale elementi: _NUM_ ' , ['_NUM_ ' => $ servizi ->count ()]).'</strong>
139+ </td>
140+ <td colspan="2" class="text-right"> ' ;
141+ if (!$ servizi_in_scadenza ->isEmpty () || !$ servizi_scaduti ->isEmpty ()) {
142+ echo '<a href="https://marketplace.devcode.it/" target="_blank" id="btn_rinnova" class="btn btn-sm btn-warning"><i class="fa fa-shopping-cart mr-1"></i> ' .tr ('Rinnova ' ).'</a> ' ;
143+ }
144+ echo '
145+ </td>
146+ </tr>
147+ </tfoot>
148+ </table> ' ;
149+ } else {
150+ echo '
151+ <div class="alert alert-info m-3">
152+ <i class="fa fa-info-circle mr-2"></i> ' .tr ('Nessun servizio abilitato al momento ' ).'.
153+ </div> ' ;
154+ }
155+ echo '
156+ </div>
157+ </div>
158+
159+ <div class="card card-primary card-outline">
160+ <div class="card-header">
161+ <div class="card-title">
162+ <i class="fa fa-cubes mr-2"></i> ' .tr ('Risorse ' ).'
163+ </div>
164+ </div>
44165
166+ <div class="card-body p-0"> ' ;
167+
168+ // Recupero di tutti i servizi e risorse attivi
169+ $ servizi = Services::getRisorseAttive (true );
45170 if (!$ servizi ->isEmpty ()) {
46171 // Calcolo degli elementi in scadenza e scadut
47172 $ servizi_in_scadenza = $ servizi ->filter (function ($ item ) use ($ limite_scadenze ) {
90215 <thead>
91216 <tr>
92217 <th width="5%" class="text-center"> ' .tr ('Stato ' ).'</th>
93- <th width="35%" > ' .tr ('Nome ' ).'</th>
218+ <th> ' .tr ('Nome ' ).'</th>
94219 <th width="15%"> ' .tr ('Tipo ' ).'</th>
95- <th width="15%"> ' .tr ('Crediti ' ).'</th>
96- <th width="20%"> ' .tr ('Scadenza ' ).'</th>
97- <th width="10%" class="text-center"> ' .tr ('# ' ).'</th>
220+ <th width="15%"> ' .tr ('Scadenza ' ).'</th>
221+ <th width="20%" class="text-center"> ' .tr ('# ' ).'</th>
98222 </tr>
99223 </thead>
100224
118242 (($ is_expiring || $ credits_warning ) ? '<i class="fa fa-exclamation-triangle text-warning" title=" ' .tr ('Attenzione ' ).'"></i> ' :
119243 '<i class="fa fa-check-circle text-success" title=" ' .tr ('Attivo ' ).'"></i> ' );
120244
245+ $ credits_class = ($ credits_expired ? 'danger ' : ($ credits_warning ? 'warning ' : 'secondary ' ));
246+ $ credits_icon = ($ credits_warning || $ credits_expired ? '<i class="fa fa-exclamation-triangle" title=" ' .tr ('Attenzione ' ).'"></i> ' : '' );
247+
248+
121249 // Campi dell'elemento
122250 $ codice = $ elemento ['code ' ] ?? $ elemento ['name ' ] ?? 'N/A ' ;
123251 $ nome = $ elemento ['name ' ] ?? 'N/A ' ;
132260 <tr class=" ' .$ status_class .'">
133261 <td class="text-center"> ' .$ status_icon .'</td>
134262 <td><strong> ' .$ codice .'</strong><br><small class="text-muted"> ' .$ nome .'</small></td>
135- <td><span class="badge badge-secondary"> ' .$ tipo .'</span></td>
136- <td> ' .$ crediti_display .'</td>
263+ <td><span class="badge badge-info"> ' .$ tipo .'</span></td>
137264 <td> ' .dateFormat ($ scadenza ).' <br><small class="text-muted"> ' .$ scadenza ->diffForHumans ().'</small></td>
138265 <td class="text-center">
139- <input type="checkbox" class="check_rinnova ' .( $ is_expiring || $ is_expired || $ credits_warning || $ credits_expired ? '' : ' hide ' ).'" name="rinnova[]" value=" ' .$ codice . ' " >
266+ <span class="badge badge- ' . $ credits_class . ' "> ' . $ crediti_display . ' ' . tr ( ' Crediti ' ).' ' .$ credits_icon . ' </span >
140267 </td>
141268 </tr> ' ;
142269 }
152279 <strong> ' .tr ('Totale elementi: _NUM_ ' , ['_NUM_ ' => $ servizi ->count ()]).'</strong>
153280 </td>
154281 <td colspan="2" class="text-right"> ' ;
155-
156- if (!$ servizi_in_scadenza ->isEmpty () || !$ servizi_scaduti ->isEmpty ()) {
157- echo '<a href="https://marketplace.devcode.it/" target="_blank" id="btn_rinnova" class="btn btn-sm btn-primary"><i class="fa fa-shopping-cart mr-1"></i> ' .tr ('Rinnova ' ).'</a> ' ;
158- }
159-
160- echo ' </td>
282+ if (!$ servizi_in_scadenza ->isEmpty () || !$ servizi_scaduti ->isEmpty ()) {
283+ echo '<a href="https://marketplace.devcode.it/" target="_blank" id="btn_rinnova" class="btn btn-sm btn-warning"><i class="fa fa-shopping-cart mr-1"></i> ' .tr ('Rinnova ' ).'</a> ' ;
284+ }
285+ echo '
286+ </td>
161287 </tr>
162288 </tfoot>
163289 </table> ' ;
168294 <i class="fa fa-info-circle mr-2"></i> ' .tr ('Nessun servizio OSMCloud abilitato al momento ' ).'.
169295 </div> ' ;
170296 }
171-
172297 echo '
173298 </div>
174299 </div>
319444 </div>
320445</div>
321446<script>
322-
323- $(".check_rinnova").each(function() {
324-
325- var len = 0;
326-
327- input(this).change(function() {
328-
329- len = $("input[type=checkbox]:checked.check_rinnova").length;
330-
331- if (len>0){
332- $("#btn_rinnova").removeClass("disabled");
333- }else{
334- $("#btn_rinnova").addClass("disabled");
335- }
336-
337- });
338- });
339-
340447function aggiornaStatisticheFE(){
341448 $.ajax({
342449 url: globals.rootdir + "/actions.php",
@@ -358,7 +465,6 @@ function aggiornaStatisticheFE(){
358465 if (response.avviso_spazio) {
359466
360467 $("#spazio-fe").removeClass("hidden");
361- $("input.check_rinnova").addClass("disabled");
362468
363469 response.spazio_occupato = parseFloat(response.spazio_occupato);
364470 response.spazio_totale = parseFloat(response.spazio_totale);
@@ -386,10 +492,8 @@ function aggiornaStatisticheFE(){
386492 if (response.history.length) {
387493
388494 for (let i = 0; i < response.history.length; i++) {
389-
390495 const data = response.history[i];
391496 if (data["year"] == ' .date ('Y ' ).'){
392-
393497 var highlight = "<tr class=\"info\" >";
394498 var number = data["number"];
395499
@@ -403,10 +507,7 @@ function aggiornaStatisticheFE(){
403507 $("#numero-fe-totale").html(response.maxNumber);
404508
405509 if (response.avviso_numero) {
406-
407510 $("#numero-fe").removeClass("hidden");
408- $("input.check_rinnova").addClass("disabled");
409-
410511 if (number<response.maxNumber){
411512 $("#numero-fe-icon").addClass("fa fa-clock-o");
412513 $("#numero-fe").addClass("alert-warning");
0 commit comments