source: spip-zone/_plugins_/tickets/trunk/inc/migration_180.php @ 81326

Last change on this file since 81326 was 81326, checked in by severo@…, 6 years ago

tickets - pour le champ "severite" on insère un logo

correspondant à la puce accolée dans les squelettes,
pour les mots clés créés lors de la migration.

File size: 7.7 KB
Line 
1<?php
2
3/*
4 * Migrer 7 champs de la table spip_tickets vers des groupes de mots-clés
5 *
6 * Le résultat de la migration est stocké dans une meta au cas où :
7 *
8 * tickets/migration_180/champs/severite/id_groupe (int)
9 *                                      /erreur_groupe (str)
10 *                                      /valeurs/1/id_mot (int)
11 *                                                /erreur_mot (str)
12 */
13function migrer_champs_vers_mots_cles() {
14        include_spip('inc/config');
15        include_spip('action/editer_groupe_mots');
16        include_spip('action/editer_mot');
17        $trouver_table = charger_fonction('trouver_table','base');
18        $desc = $trouver_table(table_objet_sql('ticket'));
19        if (!$desc OR !array_key_exists('field',$desc))
20                return;
21        else
22                $field = $desc['field'];
23
24        $a_migrer = array(
25                'severite'=>array('champs_groupe'=>array('titre'=>_T('tickets:champ_severite_th'),'unseul'=>'oui','obligatoire'=>'oui')),
26                'tracker'=>array('champs_groupe'=>array('titre'=>_T('tickets:champ_type_th'),'unseul'=>'oui','obligatoire'=>'oui')),
27                'navigateur'=>array('champs_groupe'=>array('titre'=>_T('tickets:champ_navigateur'),'unseul'=>'non','obligatoire'=>'non')),
28                'projet'=>array('champs_groupe'=>array('titre'=>_T('tickets:champ_projet_th'),'unseul'=>'oui','obligatoire'=>'non'),'meta'=>'tickets/general/projets'),
29                'composant'=>array('champs_groupe'=>array('titre'=>_T('tickets:champ_composant_th'),'unseul'=>'oui','obligatoire'=>'non'),'meta'=>'tickets/general/composants'),
30                'version'=>array('champs_groupe'=>array('titre'=>_T('tickets:champ_version_th'),'unseul'=>'oui','obligatoire'=>'non'),'meta'=>'tickets/general/versions'),
31                'jalon'=>array('champs_groupe'=>array('titre'=>_T('tickets:champ_jalon_th'),'unseul'=>'oui','obligatoire'=>'non'),'meta'=>'tickets/general/jalons')
32                );
33
34        // pour chaque champ
35        spip_log("**** migration 1.8.0 - début ****", "tickets");
36        foreach ($a_migrer as $k=>$v) {
37                // est-ce que la colonne existe encore ?
38                if (!array_key_exists($k,$field))
39                        continue;
40
41                // récupérer la liste de valeurs du champ (base de données ou code)
42                $valeurs = array();
43                $f = 'tickets_liste_'.$k;
44                if (function_exists($f))
45                        $valeurs = $f();
46                if (count($valeurs)) {
47                        // si non vide, créer le groupe de mots
48                        // on regarde dans la meta si on a déjà migré ce champ
49                        $meta = 'tickets/migration_180/champs/'.$k.'/id_groupe';
50                        $meta_err = 'tickets/migration_180/champs/'.$k.'/erreur_groupe';
51                        if (!intval($id_groupe = lire_config($meta))) {
52                                $v['champs_groupe'] = array_merge($v['champs_groupe'], array('tables_liees'=>'tickets','comite'=>'non','forum'=>'non','minirezo'=>'oui'));
53                                $id_groupe = groupemots_inserer();
54                                if ($id_groupe>0 AND $err = groupemots_modifier($id_groupe, $v['champs_groupe'])) {
55                                        ecrire_config($meta_err,'Erreur - '.$err);
56                                        continue;
57                                }
58                                ecrire_config($meta,intval($id_groupe));
59                                spip_log(" champ '".$k."' - création du groupe id_groupe = ".$id_groupe, "tickets");
60                        } else {
61                                spip_log(" champ '".$k."' - groupe id_groupe = ".$id_groupe." déjà créé", "tickets");
62                        }
63                        // créer un mot-clé pour chaque valeur
64                        foreach ($valeurs as $kv=>$vv) {
65                                // on regarde si on a déjà migré ce mot
66                                $meta = 'tickets/migration_180/champs/'.$k.'/valeurs/'.$kv.'/id_mot';
67                                $meta_err = 'tickets/migration_180/champs/'.$k.'/valeurs/'.$kv.'/erreur_mot';
68                                if (!intval($id_mot = lire_config($meta))) {
69                                        $id_mot = mot_inserer($id_groupe);
70                                        if ($id_mot>0 AND $err = mot_modifier($id_mot, array('titre'=>$vv))) {
71                                                ecrire_config($meta_err,'Erreur - '.$err);
72                                                continue;
73                                        }
74                                        ecrire_config($meta,intval($id_mot));
75                                        spip_log("   valeur '".$kv."' - création du mot id_mot = ".$id_mot, "tickets");
76                                        if ($k==='severite') {
77                                                if ($err = ajouter_logo_mot_severite($kv,$id_mot))
78                                                        spip_log("     erreur lors de l'ajout du logo ".$err, "tickets");
79                                                else
80                                                        spip_log("     logo ajouté", "tickets");
81                                        }
82                                } else {
83                                        spip_log("   valeur '".$kv."' - mot id_mot = ".$id_mot." déjà créé", "tickets");
84                                }
85                                // lier les tickets correspondant à ce mot-clé
86                                $ids_tickets = array_map('array_shift',sql_allfetsel(id_table_objet('ticket'), table_objet_sql('ticket'), $k."='".$kv."'"));
87                                $nb_lies = mot_associer($id_mot, array('ticket'=>$ids_tickets));
88                                spip_log('     '.$nb_lies.' tickets liés','tickets');
89                        }
90                }
91                // supprimer la configuration du champ dans spip_meta
92                if (array_key_exists('meta',$v)) {
93                        effacer_config($v['meta']);
94                        spip_log('   valeurs du champs "'.$k.'" supprimées dans la meta "'.$v['meta'].'"','tickets');
95                }
96                // supprimer la colonne de la table spip_tickets
97                sql_alter("TABLE ".table_objet_sql('ticket')." DROP ".$k);
98                spip_log('   colonne "'.$k.'" supprimée','tickets');
99        }
100        spip_log("**** migration 1.8.0 - fin ****", "tickets");
101}
102
103function nettoyer_migration_champs_vers_mots_cles() {
104        include_spip('inc/autoriser');
105        include_spip('action/editer_mot');
106
107        $c = lire_config('tickets/migration_180/champs', array());
108        $supprimer_groupe_mots = charger_fonction('supprimer_groupe_mots','action');
109
110        spip_log("**** nettoyage de la migration 1.8.0 - début ****", "tickets");
111        foreach ($c as $k=>$v) {
112                $meta = 'tickets/migration_180/champs/'.$k.'/valeurs';
113                if (is_array($valeurs = lire_config($meta))) {
114                        foreach ($valeurs as $kv=>$vv) {
115                                $meta = 'tickets/migration_180/champs/'.$k.'/valeurs/'.$kv.'/id_mot';
116                                if (intval($id_mot = lire_config($meta))) {
117                                        spip_log("   valeur '".$kv."' - suppression du mot id_mot=".$id_mot,"tickets");
118                                        supprimer_logo_mot($id_mot);
119                                        mot_supprimer($id_mot);
120                                        effacer_config('tickets/migration_180/champs/'.$kv.'/valeurs/'.$kv);
121                                }
122                        }
123                }
124                $meta = 'tickets/migration_180/champs/'.$k.'/id_groupe';
125                if (intval($id_groupe = lire_config($meta))) {
126                        spip_log(" champ '".$k."' - suppression de groupe id_groupe=".$id_groupe,"tickets");
127                        $supprimer_groupe_mots($id_groupe);
128                }
129                effacer_config('tickets/migration_180/champs/'.$k);
130        }
131        effacer_config('tickets/migration_180/champs');
132        effacer_config('tickets/migration_180');
133        spip_log("**** nettoyage de la migration 1.8.0 - fin ****", "tickets");
134}
135
136function tickets_liste_projet(){
137        return tickets_liste_champ('_TICKETS_LISTE_PROJETS','tickets/general/projets');
138}
139function tickets_liste_composant(){
140        return tickets_liste_champ('_TICKETS_LISTE_COMPOSANTS','tickets/general/composants');
141}
142function tickets_liste_version(){
143        return tickets_liste_champ('_TICKETS_LISTE_VERSIONS','tickets/general/versions');
144}
145function tickets_liste_jalon(){
146        return tickets_liste_champ('_TICKETS_LISTE_JALONS','tickets/general/jalons');
147}
148function tickets_liste_champ($constante,$meta){
149        $liste = array();
150        if (defined($constante) OR lire_config($meta)) {
151                if (defined($constante))
152                        $liste = explode(":", constant($constante));
153                else
154                        $liste = explode(":", lire_config($meta));
155
156                $liste = array_filter(array_map('trim',$liste));
157                $liste = array_combine($liste, $liste);
158        }
159        return $liste;
160}
161
162function ajouter_logo_mot_severite($niveau,$id_mot){
163        include_spip('inc/chercher_logo');
164        include_spip('action/iconifier');
165        $chercher_logo = charger_fonction('chercher_logo','inc');
166        $ajouter_image = charger_fonction('spip_image_ajouter','action');
167
168        $_id_mot = id_table_objet('mot');
169        $etat = 'on';
170        $type = type_du_logo($_id_mot);
171
172        $file = find_in_path(tickets_icone_severite($niveau),'prive/images/');
173        $source = array('erreur'=>'','tmp_name'=>$file);
174        $logo = $chercher_logo($id_mot, $_id_mot, $etat);
175        if ($logo)
176                spip_unlink($logo[0]);
177        $err = $ajouter_image($type.$etat.$id_mot," ",$source,true);
178        return $err;
179}
180function supprimer_logo_mot($id_mot){
181        include_spip('inc/chercher_logo');
182        $chercher_logo = charger_fonction('chercher_logo','inc');
183
184        $_id_mot = id_table_objet('mot');
185        $etat = 'on';
186        $type = type_du_logo($_id_mot);
187
188        $logo = $chercher_logo($id_mot, $_id_mot, $etat);
189        if ($logo)
190                spip_unlink($logo[0]);
191}
192?>
Note: See TracBrowser for help on using the repository browser.