@@ -81,6 +81,21 @@ function customTables()
8181 {
8282 $ tables = include base_dir ().'/update/tables.php ' ;
8383
84+ // Carica e accoda le tabelle dai file tables.php presenti nelle cartelle update dei moduli
85+ $ modules_dir = base_dir ().'/modules/ ' ;
86+ $ module_tables_files = glob ($ modules_dir .'*/update/tables.php ' );
87+
88+ if (!empty ($ module_tables_files )) {
89+ foreach ($ module_tables_files as $ module_tables_file ) {
90+ $ module_tables = include $ module_tables_file ;
91+
92+ if (!empty ($ module_tables ) && is_array ($ module_tables )) {
93+ // Accoda le tabelle del modulo a quelle principali
94+ $ tables = array_merge ($ tables , $ module_tables );
95+ }
96+ }
97+ }
98+
8499 $ names = [];
85100 foreach ($ tables as $ table ) {
86101 $ names [] = prepare ($ table );
@@ -327,6 +342,64 @@ function customViewsNotStandard()
327342 }
328343 }
329344
345+ // Carica e accoda le viste dai file views.json presenti nelle sottocartelle di modules/
346+ $ modules_dir = base_dir ().'/modules/ ' ;
347+ $ views_json_files = glob ($ modules_dir .'*/views.json ' );
348+
349+ // Traccia i moduli che provengono dai file modules.json nelle sottocartelle (moduli premium)
350+ $ premium_modules = [];
351+
352+ // Prima carica i moduli dai file modules.json per identificare quelli premium
353+ $ module_json_files = glob ($ modules_dir .'*/modules.json ' );
354+ if (!empty ($ module_json_files )) {
355+ foreach ($ module_json_files as $ module_json_file ) {
356+ $ module_contents = file_get_contents ($ module_json_file );
357+ $ module_data = json_decode ($ module_contents , true );
358+
359+ if (!empty ($ module_data ) && is_array ($ module_data )) {
360+ foreach ($ module_data as $ module_name => $ data ) {
361+ if (is_array ($ data )) {
362+ $ premium_modules [$ module_name ] = true ;
363+ }
364+ }
365+ }
366+ }
367+ }
368+
369+ if (!empty ($ views_json_files )) {
370+ foreach ($ views_json_files as $ views_json_file ) {
371+ $ views_contents = file_get_contents ($ views_json_file );
372+ $ views_data = json_decode ($ views_contents , true );
373+
374+ if (!empty ($ views_data ) && is_array ($ views_data )) {
375+ // Accoda le viste del modulo a quelle principali
376+ foreach ($ views_data as $ module_name => $ module_views ) {
377+ $ module_key = trim ((string ) $ module_name );
378+
379+ if ($ module_key === '' || !is_array ($ module_views )) {
380+ continue ;
381+ }
382+
383+ foreach ($ module_views as $ view_name => $ view_query ) {
384+ $ view_key = trim ((string ) $ view_name );
385+
386+ if ($ view_key === '' ) {
387+ continue ;
388+ }
389+
390+ // Se view_query è un array (struttura estesa), estrai il campo 'id'
391+ if (is_array ($ view_query ) && isset ($ view_query ['id ' ])) {
392+ $ standard_views [$ module_key ][$ view_key ] = $ view_query ['id ' ];
393+ } elseif (is_string ($ view_query )) {
394+ // Se è una stringa (struttura semplice), usala direttamente
395+ $ standard_views [$ module_key ][$ view_key ] = $ view_query ;
396+ }
397+ }
398+ }
399+ }
400+ }
401+ }
402+
330403 // Ottieni tutte le viste presenti nel database
331404 $ query = "SELECT
332405 zv.id,
@@ -378,7 +451,12 @@ function customViewsNotStandard()
378451
379452 if (!isset ($ standard_views [$ module_name ])) {
380453 $ is_custom = true ;
381- $ reason = 'Modulo non previsto ' ;
454+ // Verifica se il modulo proviene da un file modules.json in una sottocartella (modulo premium)
455+ if (isset ($ premium_modules [$ module_name ])) {
456+ $ reason = 'Modulo premium ' ;
457+ } else {
458+ $ reason = 'Modulo non previsto ' ;
459+ }
382460 } elseif (!isset ($ standard_views [$ module_name ][$ view_name ])) {
383461 $ is_custom = true ;
384462 $ reason = 'Vista aggiuntiva ' ;
@@ -519,6 +597,34 @@ function customModulesNotStandard()
519597 }
520598 }
521599
600+ // Carica i moduli dai file modules.json presenti nelle sottocartelle di modules/ (moduli premium)
601+ // NOTA: Non li aggiungiamo a $standard_modules per poterli mostrare nella lista come premium
602+ $ modules_dir = base_dir ().'/modules/ ' ;
603+ $ module_json_files = glob ($ modules_dir .'*/modules.json ' );
604+
605+ // Traccia i moduli che provengono dai file modules.json nelle sottocartelle (moduli premium)
606+ $ premium_modules = [];
607+
608+ if (!empty ($ module_json_files )) {
609+ foreach ($ module_json_files as $ module_json_file ) {
610+ $ module_contents = file_get_contents ($ module_json_file );
611+ $ module_data = json_decode ($ module_contents , true );
612+
613+ if (!empty ($ module_data ) && is_array ($ module_data )) {
614+ // Traccia i moduli premium senza aggiungerli a $standard_modules
615+ foreach ($ module_data as $ module_name => $ data ) {
616+ if (is_array ($ data )) {
617+ // Traccia questo modulo come premium
618+ $ premium_modules [$ module_name ] = [
619+ 'options ' => $ data ['options ' ] ?? '' ,
620+ 'options2 ' => $ data ['options2 ' ] ?? '' ,
621+ ];
622+ }
623+ }
624+ }
625+ }
626+ }
627+
522628 // Ottieni tutti i moduli presenti nel database
523629 $ query = "SELECT
524630 zm.id,
@@ -538,6 +644,8 @@ function customModulesNotStandard()
538644 $ module_name = $ module ['name ' ];
539645 $ is_custom = false ;
540646 $ reason = '' ;
647+ $ expected_options = '' ;
648+ $ expected_options2 = '' ;
541649
542650 // Normalizza le options del modulo corrente
543651 $ current_options = normalizeModuleOptions ($ module ['options ' ]);
@@ -550,10 +658,19 @@ function customModulesNotStandard()
550658 // Controlla se il modulo non è previsto nel file standard
551659 if (!isset ($ standard_modules [$ module_name ])) {
552660 $ is_custom = true ;
553- $ reason = 'Modulo non previsto ' ;
661+ // Verifica se il modulo proviene da un file modules.json in una sottocartella (modulo premium)
662+ if (isset ($ premium_modules [$ module_name ])) {
663+ $ reason = 'Modulo premium ' ;
664+ // Per i moduli premium, usa le options definite nel file premium
665+ $ expected_options = $ premium_modules [$ module_name ]['options ' ] ?? '' ;
666+ $ expected_options2 = $ premium_modules [$ module_name ]['options2 ' ] ?? '' ;
667+ } else {
668+ $ reason = 'Modulo non previsto ' ;
669+ }
554670 } else {
555671 // Normalizza le options standard
556672 $ expected_options = normalizeModuleOptions ($ standard_modules [$ module_name ]['options ' ]);
673+ $ expected_options2 = $ standard_modules [$ module_name ]['options2 ' ] ?? '' ;
557674
558675 // Controlla se options2 è valorizzato (modulo personalizzato)
559676 if (!empty ($ current_options2 )) {
@@ -575,8 +692,8 @@ function customModulesNotStandard()
575692 'reason ' => $ reason ,
576693 'current_options ' => $ module ['options ' ],
577694 'current_options2 ' => $ module ['options2 ' ],
578- 'expected_options ' => $ standard_modules [ $ module_name ][ ' options ' ] ?? '' ,
579- 'expected_options2 ' => $ standard_modules [ $ module_name ][ ' options2 ' ] ?? '' ,
695+ 'expected_options ' => $ expected_options ,
696+ 'expected_options2 ' => $ expected_options2 ,
580697 ];
581698 }
582699 }
0 commit comments