Changeset 81313 in spip-zone


Ignore:
Timestamp:
Mar 12, 2014, 5:53:52 PM (5 years ago)
Author:
severo@…
Message:

tickets - fonctions pour préparer la migration.

Ne fait rien pour l'instant...

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/tickets/trunk/tickets_options.php

    r80800 r81313  
    122122}
    123123
     124
     125/*
     126 * Migrer 7 champs de la table spip_tickets vers des groupes de mots-clés
     127 *
     128 * Le résultat de la migration est stocké dans une meta au cas où :
     129 *
     130 * tickets/migration_180/champs/severite/id_groupe (int)
     131 *                                      /erreur_groupe (str)
     132 *                                      /valeurs/1/id_mot (int)
     133 *                                                /erreur_mot (str)
     134 */
     135function migrer_champs_vers_mots_cles() {
     136        include_spip('inc/config');
     137        include_spip('action/editer_groupe_mots');
     138        include_spip('action/editer_mot');
     139        $trouver_table = charger_fonction('trouver_table','base');
     140        $desc = $trouver_table(table_objet_sql('ticket'));
     141        if (!$desc OR !array_key_exists('field',$desc))
     142                return;
     143        else
     144                $field = $desc['field'];
     145
     146        $a_migrer = array(
     147                'severite'=>array('champs_groupe'=>array('titre'=>_T('tickets:champ_severite_th'),'unseul'=>'oui','obligatoire'=>'oui')),
     148                'tracker'=>array('champs_groupe'=>array('titre'=>_T('tickets:champ_type_th'),'unseul'=>'oui','obligatoire'=>'oui')),
     149                'navigateur'=>array('champs_groupe'=>array('titre'=>_T('tickets:champ_navigateur'),'unseul'=>'non','obligatoire'=>'non')),
     150                'projet'=>array('champs_groupe'=>array('titre'=>_T('tickets:champ_projet_th'),'unseul'=>'oui','obligatoire'=>'non'),'meta'=>'tickets/general/projets'),
     151                'composant'=>array('champs_groupe'=>array('titre'=>_T('tickets:champ_composant_th'),'unseul'=>'oui','obligatoire'=>'non'),'meta'=>'tickets/general/composants'),
     152                'version'=>array('champs_groupe'=>array('titre'=>_T('tickets:champ_version_th'),'unseul'=>'oui','obligatoire'=>'non'),'meta'=>'tickets/general/versions'),
     153                'jalon'=>array('champs_groupe'=>array('titre'=>_T('tickets:champ_jalon_th'),'unseul'=>'oui','obligatoire'=>'non'),'meta'=>'tickets/general/jalons')
     154                );
     155
     156        // pour chaque champ
     157        spip_log("**** migration 1.8.0 - début ****", "tickets");
     158        foreach ($a_migrer as $k=>$v) {
     159                // est-ce que la colonne existe encore ?
     160                if (!array_key_exists($k,$field))
     161                        continue;
     162
     163                // récupérer la liste de valeurs du champ (base de données ou code)
     164                $valeurs = array();
     165                $f = 'tickets_liste_'.$k;
     166                if (function_exists($f))
     167                        $valeurs = $f();
     168                if (count($valeurs)) {
     169                        // si non vide, créer le groupe de mots
     170                        // on regarde dans la meta si on a déjà migré ce champ
     171                        $meta = 'tickets/migration_180/champs/'.$k.'/id_groupe';
     172                        $meta_err = 'tickets/migration_180/champs/'.$k.'/erreur_groupe';
     173                        if (!intval($id_groupe = lire_config($meta))) {
     174                                $v['champs_groupe'] = array_merge($v['champs_groupe'], array('tables_liees'=>'tickets','comite'=>'non','forum'=>'non','minirezo'=>'oui'));
     175                                $id_groupe = groupemots_inserer();
     176                                if ($id_groupe>0 AND $err = groupemots_modifier($id_groupe, $v['champs_groupe'])) {
     177                                        ecrire_config($meta_err,'Erreur - '.$err);
     178                                        continue;
     179                                }
     180                                ecrire_config($meta,intval($id_groupe));
     181                                spip_log(" champ '".$k."' - création du groupe id_groupe = ".$id_groupe, "tickets");
     182                        } else {
     183                                spip_log(" champ '".$k."' - groupe id_groupe = ".$id_groupe." déjà créé", "tickets");
     184                        }
     185                        // créer un mot-clé pour chaque valeur
     186                        foreach ($valeurs as $kv=>$vv) {
     187                                // on regarde si on a déjà migré ce mot
     188                                $meta = 'tickets/migration_180/champs/'.$k.'/valeurs/'.$kv.'/id_mot';
     189                                $meta_err = 'tickets/migration_180/champs/'.$k.'/valeurs/'.$kv.'/erreur_mot';
     190                                if (!intval($id_mot = lire_config($meta))) {
     191                                        $id_mot = mot_inserer($id_groupe);
     192                                        if ($id_mot>0 AND $err = mot_modifier($id_mot, array('titre'=>$vv))) {
     193                                                ecrire_config($meta_err,'Erreur - '.$err);
     194                                                continue;
     195                                        }
     196                                        ecrire_config($meta,intval($id_mot));
     197                                        spip_log("   valeur '".$kv."' - création du mot id_mot = ".$id_mot, "tickets");
     198                                } else {
     199                                        spip_log("   valeur '".$kv."' - mot id_mot = ".$id_mot." déjà créé", "tickets");
     200                                }
     201                                // lier les tickets correspondant à ce mot-clé
     202                                $ids_tickets = array_map('array_shift',sql_allfetsel(id_table_objet('ticket'), table_objet_sql('ticket'), $k."='".$kv."'"));
     203                                $nb_lies = mot_associer($id_mot, array('ticket'=>$ids_tickets));
     204                                spip_log('     '.$nb_lies.' tickets liés','tickets');
     205                        }
     206                }
     207                // supprimer la configuration du champ dans spip_meta
     208                if (array_key_exists('meta',$v)) {
     209                        effacer_config($v['meta']);
     210                        spip_log('   valeurs du champs "'.$k.'" supprimées dans la meta "'.$v['meta'].'"','tickets');
     211                }
     212                // supprimer la colonne de la table spip_tickets
     213                sql_alter("TABLE ".table_objet_sql('ticket')." DROP ".$k);
     214                spip_log('   colonne "'.$k.'" supprimée','tickets');
     215        }
     216        spip_log("**** migration 1.8.0 - fin ****", "tickets");
     217}
     218
     219function nettoyer_migration_champs_vers_mots_cles() {
     220        include_spip('inc/autoriser');
     221        include_spip('action/editer_mot');
     222
     223        $c = lire_config('tickets/migration_180/champs', array());
     224        $supprimer_groupe_mots = charger_fonction('supprimer_groupe_mots','action');
     225
     226        spip_log("**** nettoyage de la migration 1.8.0 - début ****", "tickets");
     227        foreach ($c as $k=>$v) {
     228                $meta = 'tickets/migration_180/champs/'.$k.'/valeurs';
     229                if (is_array($valeurs = lire_config($meta))) {
     230                        foreach ($valeurs as $kv=>$vv) {
     231                                $meta = 'tickets/migration_180/champs/'.$k.'/valeurs/'.$kv.'/id_mot';
     232                                if (intval($id_mot = lire_config($meta))) {
     233                                        spip_log("   valeur '".$kv."' - suppression du mot id_mot=".$id_mot,"tickets");
     234                                        mot_supprimer($id_mot);
     235                                        effacer_config('tickets/migration_180/champs/'.$kv.'/valeurs/'.$kv);
     236                                }
     237                        }
     238                }
     239                $meta = 'tickets/migration_180/champs/'.$k.'/id_groupe';
     240                if (intval($id_groupe = lire_config($meta))) {
     241                        spip_log(" champ '".$k."' - suppression de groupe id_groupe=".$id_groupe,"tickets");
     242                        $supprimer_groupe_mots($id_groupe);
     243                }
     244                effacer_config('tickets/migration_180/champs/'.$k);
     245        }
     246        effacer_config('tickets/migration_180/champs');
     247        effacer_config('tickets/migration_180');
     248        spip_log("**** nettoyage de la migration 1.8.0 - fin ****", "tickets");
     249}
     250
     251function tickets_liste_projet(){
     252        return tickets_liste_champ('_TICKETS_LISTE_PROJETS','tickets/general/projets');
     253}
     254function tickets_liste_composant(){
     255        return tickets_liste_champ('_TICKETS_LISTE_COMPOSANTS','tickets/general/composants');
     256}
     257function tickets_liste_version(){
     258        return tickets_liste_champ('_TICKETS_LISTE_VERSIONS','tickets/general/versions');
     259}
     260function tickets_liste_jalon(){
     261        return tickets_liste_champ('_TICKETS_LISTE_JALONS','tickets/general/jalons');
     262}
     263function tickets_liste_champ($constante,$meta){
     264        $liste = array();
     265        if (defined($constante) OR lire_config($meta)) {
     266                if (defined($constante))
     267                        $liste = explode(":", constant($constante));
     268                else
     269                        $liste = explode(":", lire_config($meta));
     270
     271                $liste = array_filter(array_map('trim',$liste));
     272                $liste = array_combine($liste, $liste);
     273        }
     274        return $liste;
     275}
     276
    124277?>
Note: See TracChangeset for help on using the changeset viewer.