Skip to content

Commit 045ed0d

Browse files
committed
fix: migrazione categorie impianto
1 parent c5b297c commit 045ed0d

1 file changed

Lines changed: 78 additions & 0 deletions

File tree

update/2_8_3.php

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
<?php
2+
3+
include __DIR__.'/../config.inc.php';
4+
5+
$dbo->query('ALTER TABLE `zz_categorie_lang` CHANGE `note` `note` VARCHAR(255) NULL');
6+
7+
// Verifica se la colonna 'name' esiste già nella tabella zz_categorie
8+
$column_exists = $dbo->fetchOne('
9+
SELECT COUNT(*) as cont
10+
FROM INFORMATION_SCHEMA.COLUMNS
11+
WHERE TABLE_SCHEMA = DATABASE()
12+
AND TABLE_NAME = "zz_categorie"
13+
AND COLUMN_NAME = "name"
14+
');
15+
16+
// Se la colonna 'name' non esiste, significa che il sistema è stato aggiornato prima del fix
17+
// Procediamo con la correzione
18+
if ($column_exists['cont'] == 0) {
19+
$dbo->query('ALTER TABLE `zz_categorie` ADD `name` VARCHAR(255) NULL');
20+
21+
22+
// Estrai tutte le categorie senza colore con is_impianto = 1, ordinate per ID
23+
$categorie_senza_colore = $dbo->fetchArray('
24+
SELECT `id`
25+
FROM `zz_categorie`
26+
WHERE (`colore` IS NULL OR `colore` = "")
27+
AND `is_impianto` = 1
28+
AND `id_parent` IS NULL
29+
ORDER BY `id` ASC
30+
');
31+
32+
if (!empty($categorie_senza_colore)) {
33+
// Estrai tutte le traduzioni disponibili per queste categorie, ordinate per come vengono incontrate
34+
$traduzioni_disponibili = $dbo->fetchArray('
35+
SELECT DISTINCT `title`, `id_lang`
36+
FROM `zz_categorie_lang` `lang`
37+
INNER JOIN `zz_categorie` `cat` ON `lang`.`id_record` = `cat`.`id`
38+
WHERE (`cat`.`colore` IS NULL OR `cat`.`colore` = "")
39+
AND `cat`.`is_impianto` = 1
40+
AND `id_lang` = 1
41+
');
42+
43+
// Cicla ogni categoria senza colore e assegna una traduzione unica in ordine sequenziale
44+
$indice_traduzione = 0;
45+
$total_categorie = count($categorie_senza_colore);
46+
47+
foreach ($categorie_senza_colore as $index => $categoria) {
48+
$id_categoria = $categoria['id'];
49+
$nome_categoria = $categoria['name'];
50+
51+
// Se abbiamo esaurito le traduzioni disponibili, ricomincia dal primo
52+
if ($indice_traduzione >= count($traduzioni_disponibili)) {
53+
$indice_traduzione = 0;
54+
}
55+
56+
$traduzione_assegnata = $traduzioni_disponibili[$indice_traduzione];
57+
$title_assegnato = $traduzione_assegnata['title'];
58+
$id_lang = $traduzione_assegnata['id_lang'];
59+
60+
// Rimuovi tutte le traduzioni esistenti per questa categoria
61+
$dbo->query('DELETE FROM `zz_categorie_lang` WHERE `id_record` = '.prepare($id_categoria));
62+
63+
// Aggiorna anche il campo name nella tabella principale se necessario
64+
if (empty($nome_categoria) || $nome_categoria != $title_assegnato) {
65+
$dbo->update('zz_categorie', [
66+
'name' => $title_assegnato,
67+
], [
68+
'id' => $id_categoria,
69+
]);
70+
71+
}
72+
73+
// Passa alla traduzione successiva
74+
$indice_traduzione++;
75+
}
76+
}
77+
}
78+

0 commit comments

Comments
 (0)