Changeset 81319 in spip-zone


Ignore:
Timestamp:
Mar 13, 2014, 8:41:07 AM (5 years ago)
Author:
severo@…
Message:

tickets - fonctions de migration dans un fichier dédié

Location:
_plugins_/tickets/trunk
Files:
1 added
1 edited

Legend:

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

    r81313 r81319  
    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  */
    135 function 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 
    219 function 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 
    251 function tickets_liste_projet(){
    252         return tickets_liste_champ('_TICKETS_LISTE_PROJETS','tickets/general/projets');
    253 }
    254 function tickets_liste_composant(){
    255         return tickets_liste_champ('_TICKETS_LISTE_COMPOSANTS','tickets/general/composants');
    256 }
    257 function tickets_liste_version(){
    258         return tickets_liste_champ('_TICKETS_LISTE_VERSIONS','tickets/general/versions');
    259 }
    260 function tickets_liste_jalon(){
    261         return tickets_liste_champ('_TICKETS_LISTE_JALONS','tickets/general/jalons');
    262 }
    263 function 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 
    277124?>
Note: See TracChangeset for help on using the changeset viewer.