@@ -52,6 +52,11 @@ function settings_diff($expected, $current)
5252 return IntegrityChecker::settingsDiff ($ expected , $ current );
5353}
5454
55+ function widgets_diff ($ expected , $ current )
56+ {
57+ return IntegrityChecker::widgetsDiff ($ expected , $ current );
58+ }
59+
5560// Inizializzazione del modulo corrente
5661$ module = Module::find ($ id_module );
5762
@@ -230,6 +235,7 @@ function highlightDifferences($current, $expected)
230235 // Verifica se mancano i file di riferimento per viste e moduli
231236 $ views_file_missing = !file_exists (base_dir ().'/views.json ' );
232237 $ modules_file_missing = !file_exists (base_dir ().'/modules.json ' );
238+ $ widgets_file_missing = !file_exists (base_dir ().'/widgets.json ' );
233239
234240 // Verifica se manca il file di riferimento per il database
235241 $ file_to_check_database = 'mysql.json ' ;
@@ -832,7 +838,30 @@ function getModuleNameFromReference($reference_file, $folder_name, $modules_json
832838 $ results_settings = settings_diff ($ data_settings , $ settings );
833839 $ results_settings_added = settings_diff ($ settings , $ data_settings );
834840
835- if (!empty ($ results ) || !empty ($ results_added ) || !empty ($ results_settings ) || !empty ($ results_settings_added )) {
841+ $ contents_widgets = file_get_contents (base_dir ().'/widgets.json ' );
842+ $ data_widgets = json_decode ($ contents_widgets , true );
843+
844+ // Carica e accoda i widgets dai file widgets.json presenti nelle sottocartelle di modules/
845+ $ modules_dir = base_dir ().'/modules/ ' ;
846+ $ widgets_json_files = glob ($ modules_dir .'*/widgets.json ' );
847+
848+ if (!empty ($ widgets_json_files )) {
849+ foreach ($ widgets_json_files as $ widgets_json_file ) {
850+ $ widgets_contents = file_get_contents ($ widgets_json_file );
851+ $ widgets_data = json_decode ($ widgets_contents , true );
852+
853+ if (!empty ($ widgets_data ) && is_array ($ widgets_data )) {
854+ // Accoda i widgets del modulo a quelli principali
855+ $ data_widgets = array_merge ($ data_widgets , $ widgets_data );
856+ }
857+ }
858+ }
859+
860+ $ widgets = Update::getWidgets ();
861+ $ results_widgets = widgets_diff ($ data_widgets , $ widgets );
862+ $ results_widgets_added = widgets_diff ($ widgets , $ data_widgets );
863+
864+ if (!empty ($ results ) || !empty ($ results_added ) || !empty ($ results_settings ) || !empty ($ results_settings_added ) || !empty ($ results_widgets ) || !empty ($ results_widgets_added )) {
836865 $ database_has_errors = true ;
837866
838867 // Conta i tipi di errori nei risultati (campi mancanti/modificati)
@@ -899,6 +928,30 @@ function getModuleNameFromReference($reference_file, $folder_name, $modules_json
899928 }
900929 }
901930
931+ // Conta i tipi di errori nei widgets
932+ foreach ($ results_widgets as $ module_key => $ module_widgets ) {
933+ if (is_array ($ module_widgets )) {
934+ foreach ($ module_widgets as $ widget_name => $ widget ) {
935+ if (!$ widget ['current ' ]) {
936+ ++$ database_danger_count ; // Widget mancante
937+ } else {
938+ ++$ database_warning_count ; // Widget modificato
939+ }
940+ }
941+ }
942+ }
943+
944+ // Conta i widgets non previsti
945+ foreach ($ results_widgets_added as $ module_key => $ module_widgets ) {
946+ if (is_array ($ module_widgets )) {
947+ foreach ($ module_widgets as $ widget_name => $ widget ) {
948+ if ($ widget ['current ' ] == null ) {
949+ ++$ database_info_count ; // Widget non previsto
950+ }
951+ }
952+ }
953+ }
954+
902955 $ database_error_count = $ database_danger_count + $ database_warning_count + $ database_info_count + $ database_premium_count ;
903956 }
904957 }
@@ -940,12 +993,113 @@ function getModuleNameFromReference($reference_file, $folder_name, $modules_json
940993
941994 include __DIR__ .'/database.php ' ;
942995
996+ echo '
997+ </div>
998+ </div> ' ;
999+
1000+ // Card Impostazioni personalizzate
1001+ $ settings_danger_count = 0 ;
1002+ $ settings_warning_count = 0 ;
1003+ $ settings_info_count = 0 ;
1004+
1005+ foreach ($ results_settings as $ key => $ setting ) {
1006+ if (!$ setting ['current ' ]) {
1007+ ++$ settings_danger_count ;
1008+ } else {
1009+ ++$ settings_warning_count ;
1010+ }
1011+ }
1012+
1013+ foreach ($ results_settings_added as $ key => $ setting ) {
1014+ if ($ setting ['current ' ] == null ) {
1015+ ++$ settings_info_count ;
1016+ }
1017+ }
1018+
1019+ $ settings_colors = Utils::determineCardColor ($ settings_danger_count , $ settings_warning_count , $ settings_info_count > 0 ? 1 : 0 );
1020+ $ settings_card_color = $ settings_colors ['color ' ];
1021+ $ settings_icon = $ settings_colors ['icon ' ];
1022+
1023+ $ settings_badge_html = Utils::generateBadgeHtml ($ settings_danger_count , $ settings_warning_count , $ settings_info_count );
1024+
1025+ echo '
1026+ <div class="card card-outline card- ' .$ settings_card_color .' requirements-card mb-2 collapsable collapsed-card">
1027+ <div class="card-header with-border requirements-card-header requirements-card-header- ' .$ settings_card_color .'">
1028+ <h3 class="card-title requirements-card-title requirements-card-title- ' .$ settings_card_color .'">
1029+ <i class="fa ' .$ settings_icon .' mr-2 requirements-icon"></i>
1030+ ' .tr ('Impostazioni personalizzate ' ).'
1031+ ' .$ settings_badge_html .'
1032+ </h3>
1033+ <div class="card-tools pull-right">
1034+ <button type="button" class="btn btn-tool" data-card-widget="collapse">
1035+ <i class="fa fa-plus"></i>
1036+ </button>
1037+ </div>
1038+ </div>
1039+ <div class="card-body"> ' ;
1040+
1041+ include __DIR__ .'/settings.php ' ;
1042+
1043+ echo '
1044+ </div>
1045+ </div> ' ;
1046+
1047+ // Card Widgets personalizzati
1048+ $ widgets_danger_count = 0 ;
1049+ $ widgets_warning_count = 0 ;
1050+ $ widgets_info_count = 0 ;
1051+
1052+ foreach ($ results_widgets as $ module_key => $ module_widgets ) {
1053+ if (is_array ($ module_widgets )) {
1054+ foreach ($ module_widgets as $ widget_name => $ widget ) {
1055+ if (!$ widget ['current ' ]) {
1056+ ++$ widgets_danger_count ;
1057+ } else {
1058+ ++$ widgets_warning_count ;
1059+ }
1060+ }
1061+ }
1062+ }
1063+
1064+ foreach ($ results_widgets_added as $ module_key => $ module_widgets ) {
1065+ if (is_array ($ module_widgets )) {
1066+ foreach ($ module_widgets as $ widget_name => $ widget ) {
1067+ if ($ widget ['current ' ] == null ) {
1068+ ++$ widgets_info_count ;
1069+ }
1070+ }
1071+ }
1072+ }
1073+
1074+ $ widgets_colors = Utils::determineCardColor ($ widgets_danger_count , $ widgets_warning_count , $ widgets_info_count > 0 ? 1 : 0 );
1075+ $ widgets_card_color = $ widgets_colors ['color ' ];
1076+ $ widgets_icon = $ widgets_colors ['icon ' ];
1077+
1078+ $ widgets_badge_html = Utils::generateBadgeHtml ($ widgets_danger_count , $ widgets_warning_count , $ widgets_info_count );
1079+
1080+ echo '
1081+ <div class="card card-outline card- ' .$ widgets_card_color .' requirements-card mb-2 collapsable collapsed-card">
1082+ <div class="card-header with-border requirements-card-header requirements-card-header- ' .$ widgets_card_color .'">
1083+ <h3 class="card-title requirements-card-title requirements-card-title- ' .$ widgets_card_color .'">
1084+ <i class="fa ' .$ widgets_icon .' mr-2 requirements-icon"></i>
1085+ ' .tr ('Widgets personalizzati ' ).'
1086+ ' .$ widgets_badge_html .'
1087+ </h3>
1088+ <div class="card-tools pull-right">
1089+ <button type="button" class="btn btn-tool" data-card-widget="collapse">
1090+ <i class="fa fa-plus"></i>
1091+ </button>
1092+ </div>
1093+ </div>
1094+ <div class="card-body"> ' ;
1095+
1096+ include __DIR__ .'/widgets.php ' ;
1097+
9431098 echo '
9441099 </div>
9451100 </div>
9461101 </div>
9471102 </div>
948- </div>
9491103
9501104<script>
9511105$(document).ready(function() {
0 commit comments