Skip to content

Commit 0c24d5b

Browse files
committed
fix: controlli integrità su widgets premium
1 parent 7f105f7 commit 0c24d5b

4 files changed

Lines changed: 285 additions & 82 deletions

File tree

modules/aggiornamenti/edit.php

Lines changed: 43 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,11 @@ function widgets_diff($expected, $current)
5757
return IntegrityChecker::widgetsDiff($expected, $current);
5858
}
5959

60+
function widgets_added($current, $expected)
61+
{
62+
return IntegrityChecker::widgetsAdded($current, $expected);
63+
}
64+
6065
// Inizializzazione del modulo corrente
6166
$module = Module::find($id_module);
6267

@@ -847,29 +852,20 @@ function editGroupErrorsByTable($results, $results_added, $premium_fields, $prem
847852
$premium_settings = $settings_reference_data['premium_settings'];
848853

849854
$settings = Update::getSettings();
855+
$current_premium_settings = aggiornamentiGetCurrentPremiumSettings($settings, $premium_settings, $data_settings);
850856
$results_settings = settings_diff($data_settings, $settings);
851857
$results_settings_added = settings_diff($settings, $data_settings);
852858

853859
$contents_widgets = file_get_contents(base_dir().'/widgets.json');
854860
$data_widgets = json_decode($contents_widgets, true);
855-
856-
// Carica e accoda i widgets dai file widgets.json presenti nelle sottocartelle di moduli e plugin
857-
$widgets_json_files = aggiornamentiGetReferenceJsonFiles('widgets.json');
858-
859-
if (!empty($widgets_json_files)) {
860-
foreach ($widgets_json_files as $widgets_json_file) {
861-
$widgets_data = aggiornamentiReadJsonFile($widgets_json_file);
862-
863-
if (!empty($widgets_data) && is_array($widgets_data)) {
864-
// Accoda i widgets del componente a quelli principali
865-
$data_widgets = array_merge($data_widgets, $widgets_data);
866-
}
867-
}
868-
}
861+
$widgets_reference_data = aggiornamentiMergeWidgetsReferenceData($data_widgets);
862+
$data_widgets = $widgets_reference_data['data'];
863+
$premium_widgets = $widgets_reference_data['premium_widgets'];
869864

870865
$widgets = Update::getWidgets();
866+
$current_premium_widgets = aggiornamentiGetCurrentPremiumWidgets($widgets, $premium_widgets, $data_widgets);
871867
$results_widgets = widgets_diff($data_widgets, $widgets);
872-
$results_widgets_added = widgets_diff($widgets, $data_widgets);
868+
$results_widgets_added = widgets_added($widgets, $data_widgets);
873869

874870
// Raggruppa gli errori per tabella (stessa logica di database.php)
875871
$grouped_errors = editGroupErrorsByTable($results, $results_added, $premium_fields, $premium_foreign_keys, $data);
@@ -943,7 +939,7 @@ function editGroupErrorsByTable($results, $results_added, $premium_fields, $prem
943939
</div>';
944940

945941
// Card Impostazioni personalizzate
946-
$has_settings_data_issues = !empty($results_settings) || !empty($results_settings_added);
942+
$has_settings_data_issues = !empty($results_settings) || !empty($results_settings_added) || !empty($current_premium_settings);
947943

948944
// Conta gli avvisi per tipo
949945
$settings_danger_count = 0;
@@ -953,6 +949,10 @@ function editGroupErrorsByTable($results, $results_added, $premium_fields, $prem
953949

954950
if ($has_settings_data_issues) {
955951
foreach ($results_settings as $key => $setting) {
952+
if (isset($premium_settings[$key])) {
953+
continue;
954+
}
955+
956956
if (!$setting['current']) {
957957
++$settings_danger_count;
958958
} else {
@@ -961,14 +961,16 @@ function editGroupErrorsByTable($results, $results_added, $premium_fields, $prem
961961
}
962962

963963
foreach ($results_settings_added as $key => $setting) {
964+
if (isset($premium_settings[$key])) {
965+
continue;
966+
}
967+
964968
if ($setting['current'] == null) {
965-
if (isset($premium_settings[$key])) {
966-
++$settings_premium_count;
967-
} else {
968-
++$settings_info_count;
969-
}
969+
++$settings_info_count;
970970
}
971971
}
972+
973+
$settings_premium_count = count($current_premium_settings);
972974
}
973975

974976
// Determina il colore della card in base all'avviso più grave
@@ -1022,17 +1024,22 @@ function editGroupErrorsByTable($results, $results_added, $premium_fields, $prem
10221024
</div>';
10231025

10241026
// Card Widgets personalizzati
1025-
$has_widgets_data_issues = !empty($results_widgets) || !empty($results_widgets_added);
1027+
$has_widgets_data_issues = !empty($results_widgets) || !empty($results_widgets_added) || !empty($current_premium_widgets);
10261028

10271029
// Conta gli avvisi per tipo
10281030
$widgets_danger_count = 0;
10291031
$widgets_warning_count = 0;
10301032
$widgets_info_count = 0;
1033+
$widgets_premium_count = 0;
10311034

10321035
if ($has_widgets_data_issues) {
10331036
foreach ($results_widgets as $module_key => $module_widgets) {
10341037
if (is_array($module_widgets)) {
10351038
foreach ($module_widgets as $widget_name => $widget) {
1039+
if (aggiornamentiFindPremiumWidgetReference($module_key, $widget_name, $premium_widgets, $data_widgets) !== null) {
1040+
continue;
1041+
}
1042+
10361043
if (!$widget['current']) {
10371044
++$widgets_danger_count;
10381045
} else {
@@ -1045,12 +1052,20 @@ function editGroupErrorsByTable($results, $results_added, $premium_fields, $prem
10451052
foreach ($results_widgets_added as $module_key => $module_widgets) {
10461053
if (is_array($module_widgets)) {
10471054
foreach ($module_widgets as $widget_name => $widget) {
1048-
if ($widget['current'] == null) {
1055+
if (aggiornamentiFindPremiumWidgetReference($module_key, $widget_name, $premium_widgets, $data_widgets) !== null) {
1056+
continue;
1057+
}
1058+
1059+
if ($widget['expected'] == null) {
10491060
++$widgets_info_count;
10501061
}
10511062
}
10521063
}
10531064
}
1065+
1066+
foreach ($current_premium_widgets as $module_widgets) {
1067+
$widgets_premium_count += count((array) $module_widgets);
1068+
}
10541069
}
10551070

10561071
// Determina il colore della card in base all'avviso più grave
@@ -1061,6 +1076,11 @@ function editGroupErrorsByTable($results, $results_added, $premium_fields, $prem
10611076
$widgets_icon = $widgets_colors['icon'];
10621077

10631078
$widgets_badge_html = Utils::generateBadgeHtml($widgets_danger_count, $widgets_warning_count, $widgets_info_count);
1079+
1080+
// Aggiungi badge per i widgets premium
1081+
if ($widgets_premium_count > 0) {
1082+
$widgets_badge_html .= '<span class="badge badge-primary ml-2">'.$widgets_premium_count.'</span>';
1083+
}
10641084

10651085
echo '
10661086
<div class="card card-outline card-'.$widgets_card_color.' requirements-card mb-2 collapsable collapsed-card">

modules/aggiornamenti/modutil.php

Lines changed: 131 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -496,53 +496,152 @@ function aggiornamentiMergeSettingsReferenceData($data_settings)
496496
$data_settings = array_merge($data_settings, $settings_data);
497497
}
498498

499-
foreach (aggiornamentiGetCurrentPluginSettingsMetadata() as $setting_key => $plugin_setting) {
500-
if (!isset($premium_settings[$setting_key])) {
501-
$premium_settings[$setting_key] = $plugin_setting;
499+
return [
500+
'data' => $data_settings,
501+
'premium_settings' => $premium_settings,
502+
];
503+
}
504+
}
505+
506+
if (!function_exists('aggiornamentiGetCurrentPremiumSettings')) {
507+
function aggiornamentiGetCurrentPremiumSettings($settings, $premium_settings, $data_settings = [])
508+
{
509+
$current_premium_settings = [];
510+
511+
foreach ((array) $settings as $setting_name => $current_type) {
512+
$setting_key = trim((string) $setting_name);
513+
514+
if ($setting_key === '' || !isset($premium_settings[$setting_key])) {
515+
continue;
516+
}
517+
518+
$current_premium_settings[$setting_key] = [
519+
'current' => $current_type,
520+
'expected' => $data_settings[$setting_key] ?? null,
521+
'premium_setting' => $premium_settings[$setting_key],
522+
];
523+
}
524+
525+
return $current_premium_settings;
526+
}
527+
}
528+
529+
if (!function_exists('aggiornamentiMergeWidgetsReferenceData')) {
530+
function aggiornamentiMergeWidgetsReferenceData($data_widgets)
531+
{
532+
$data_widgets = is_array($data_widgets) ? $data_widgets : [];
533+
$premium_widgets = [];
534+
535+
foreach (aggiornamentiGetReferenceJsonFiles('widgets.json') as $widgets_json_file) {
536+
$widgets_data = aggiornamentiReadJsonFile($widgets_json_file);
537+
538+
if (empty($widgets_data) || !is_array($widgets_data)) {
539+
continue;
540+
}
541+
542+
$component_dir = dirname((string) $widgets_json_file);
543+
$component_name = aggiornamentiGetComponentDisplayName($component_dir);
544+
$component_type = aggiornamentiGetComponentTypeFromPath($widgets_json_file);
545+
546+
foreach ($widgets_data as $module_name => $module_widgets) {
547+
if (!is_array($module_widgets)) {
548+
continue;
549+
}
550+
551+
foreach ($module_widgets as $widget_name => $widget_query) {
552+
$widget_key = $module_name.':'.$widget_name;
553+
554+
$premium_widgets[$widget_key] = [
555+
'name' => $component_name,
556+
'type' => $component_type,
557+
];
558+
}
559+
560+
// Accoda i widgets del componente a quelli principali
561+
if (!isset($data_widgets[$module_name])) {
562+
$data_widgets[$module_name] = [];
563+
}
564+
$data_widgets[$module_name] = array_merge($data_widgets[$module_name], $module_widgets);
502565
}
503566
}
504567

505568
return [
506-
'data' => $data_settings,
507-
'premium_settings' => $premium_settings,
569+
'data' => $data_widgets,
570+
'premium_widgets' => $premium_widgets,
508571
];
509572
}
510573
}
511574

512-
if (!function_exists('aggiornamentiGetCurrentPluginSettingsMetadata')) {
513-
function aggiornamentiGetCurrentPluginSettingsMetadata()
575+
if (!function_exists('aggiornamentiFindPremiumWidgetReference')) {
576+
function aggiornamentiFindPremiumWidgetReference($module_name, $widget_name, $premium_widgets, $data_widgets = [])
514577
{
515-
$database = database();
516-
$default_lang = $database->fetchOne("SELECT valore FROM zz_settings WHERE nome = 'Lingua'")['valore'] ?? 1;
517-
$result = [];
518-
519-
$query = 'SELECT DISTINCT
520-
zs.nome,
521-
COALESCE(zpl.title, zp.name) AS plugin_name
522-
FROM zz_settings zs
523-
INNER JOIN zz_plugins zp ON 1=1
524-
LEFT JOIN zz_plugins_lang zpl ON (
525-
zp.id = zpl.id_record
526-
AND zpl.id_lang = '.prepare($default_lang).'
527-
)
528-
WHERE LOWER(TRIM(zs.sezione)) = LOWER(TRIM(COALESCE(zpl.title, zp.name)))
529-
OR LOWER(TRIM(zs.sezione)) = LOWER(TRIM(zp.name))';
530-
531-
foreach ($database->fetchArray($query) as $setting) {
532-
$setting_key = trim((string) $setting['nome']);
533-
$plugin_name = trim((string) $setting['plugin_name']);
534-
535-
if ($setting_key === '' || $plugin_name === '') {
578+
$module_key = trim((string) $module_name);
579+
$widget_key = trim((string) $widget_name);
580+
581+
if ($module_key === '' || $widget_key === '') {
582+
return null;
583+
}
584+
585+
$reference_key = $module_key.':'.$widget_key;
586+
if (isset($premium_widgets[$reference_key])) {
587+
return [
588+
'key' => $reference_key,
589+
'module_name' => $module_key,
590+
'widget_name' => $widget_key,
591+
'expected_query' => $data_widgets[$module_key][$widget_key] ?? null,
592+
'premium_widget' => $premium_widgets[$reference_key],
593+
];
594+
}
595+
596+
foreach ($premium_widgets as $premium_key => $premium_info) {
597+
$premium_parts = explode(':', (string) $premium_key, 2);
598+
599+
if (count($premium_parts) !== 2 || trim((string) $premium_parts[1]) !== $widget_key) {
536600
continue;
537601
}
538602

539-
$result[$setting_key] = [
540-
'name' => $plugin_name,
541-
'type' => 'plugin',
603+
$premium_module_name = trim((string) $premium_parts[0]);
604+
605+
return [
606+
'key' => $premium_key,
607+
'module_name' => $premium_module_name,
608+
'widget_name' => $widget_key,
609+
'expected_query' => $data_widgets[$premium_module_name][$widget_key] ?? null,
610+
'premium_widget' => $premium_info,
542611
];
543612
}
544613

545-
return $result;
614+
return null;
615+
}
616+
}
617+
618+
if (!function_exists('aggiornamentiGetCurrentPremiumWidgets')) {
619+
function aggiornamentiGetCurrentPremiumWidgets($widgets, $premium_widgets, $data_widgets = [])
620+
{
621+
$current_premium_widgets = [];
622+
623+
foreach ((array) $widgets as $module_key => $module_widgets) {
624+
if (!is_array($module_widgets)) {
625+
continue;
626+
}
627+
628+
foreach ($module_widgets as $widget_name => $current_query) {
629+
$premium_reference = aggiornamentiFindPremiumWidgetReference($module_key, $widget_name, $premium_widgets, $data_widgets);
630+
631+
if ($premium_reference === null) {
632+
continue;
633+
}
634+
635+
$current_premium_widgets[$module_key][$widget_name] = [
636+
'current' => $current_query,
637+
'expected' => $premium_reference['expected_query'],
638+
'premium_widget' => $premium_reference['premium_widget'],
639+
'reference_module_name' => $premium_reference['module_name'],
640+
];
641+
}
642+
}
643+
644+
return $current_premium_widgets;
546645
}
547646
}
548647

0 commit comments

Comments
 (0)