Changeset 110204 in spip-zone


Ignore:
Timestamp:
May 10, 2018, 11:33:22 PM (22 months ago)
Author:
rastapopoulos@…
Message:

Correction gros bug : le plugin supprimer les champs rang même sur les tables qui l'avaient déjà avant. Du coup on fait une fonction avec static qui garde en mémoire les tables avec ce champ déclaré avant que Rang ne complète la déclaration des objets. Et du coup lors de la désinstallation on a cette liste pour ne pas supprimer. Au passage on ne déclare aussi que si le champ n'est pas déjà déclaré.

Location:
_plugins_/rang/branches/automatique
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/rang/branches/automatique/formulaires/configurer_rang.php

    r110177 r110204  
    4747        if (!is_null(_request('objets'))) {
    4848                $objets = array_filter(_request('objets'));
    49                 ecrire_config('rang/objets', $objets;
     49                ecrire_config('rang/objets', $objets);
    5050        }
    5151        ecrire_config('rang/rang_max', _request('rang_max'));
  • _plugins_/rang/branches/automatique/inc/rang_api.php

    r110177 r110204  
    1515
    1616/**
     17 * Remplir ou ressortir les tables ayant déjà un rang
     18 *
     19 * Au premier appel on fournit la liste complète de toutes les tables d'objets, pour faire la recherche.
     20 * Ensuite on peut appeler la fonction sans rien, et elle sortira la liste des tables qui ont un rang AVANT le plugin Rang.
     21 *
     22 * @param array $tables
     23 *              Le tableau complet de toutes les tables d'objets au premier appel
     24 **/
     25function rang_lister_tables_deja_rang($tables=null) {
     26        static $tables_deja_rang = null;
     27       
     28        // Si on n'a pas encore fait la recherche et qu'on a fourni la liste des tables d'objets
     29        if (is_null($tables_deja_rang) and is_array($tables)) {
     30                $tables_deja_rang = array();
     31                foreach ($tables as $table => $description) {
     32                        if (isset($description['field']['rang'])) {
     33                                $tables_deja_rang[] = $table;
     34                        }
     35                }
     36        }
     37       
     38        return $tables_deja_rang;
     39}
     40
     41/**
    1742 * Construire la liste des objets à exclure de la configuration
    1843 *
     
    4671 **/
    4772function rang_creer_champs ($objets) {
    48         foreach ($objets as $key => $table) {
     73        foreach ($objets as $table) {
    4974                if (!empty($table)) {
     75                        $champs_table = sql_showtable($table);
     76                       
    5077                        // si le champ 'rang' n'existe pas, le créer et le remplir
    51                         $champs_table = sql_showtable($table);
    5278                        if (!isset($champs_table['field']['rang'])) {
    53 
    5479                                // créer le champ 'rang'
    55                                 sql_alter('TABLE '.$table.' ADD rang SMALLINT NOT NULL');
     80                                sql_alter('TABLE ' . $table . ' ADD rang SMALLINT NOT NULL');
    5681
    5782                                // remplir #1 : si aucun numero_titre n'est trouvé, on met la valeur de l'id_prefixe dans rang
  • _plugins_/rang/branches/automatique/rang_administrations.php

    r110177 r110204  
    8383function rang_vider_tables($nom_meta_base_version) {
    8484        include_spip('inc/rang_api');
     85        include_spip('base/objets');
     86       
     87        // On appelle la fonction pour que ça lance le pipeline de Rang
     88        // et donc remplisse les tables ayant déjà un rang AVANT
     89        lister_tables_objets_sql();
     90        $tables_deja_rang = rang_lister_tables_deja_rang();
    8591
    86         // supprimer les champs 'rang'
     92        // Supprimer les champs 'rang' sur les tables qui ne l'avaient pas avant
    8793        // note : ici que faire si un objet a ete selectionne, puis deselectionne dans la config ?
    8894        $objets = lire_config('rang/objets');
    89         foreach ($objets as $value) {
    90                 $champs_table = sql_showtable($value);
    91                 if (isset($champs_table['field']['rang'])) {
    92                         sql_alter("TABLE $value DROP rang");
     95        foreach ($objets as $table) {
     96                $champs_table = sql_showtable($table);
     97               
     98                // S'il y a bien toujours un champ "rang" mais que la table ne l'avait PAS avant
     99                if (isset($champs_table['field']['rang']) and !in_array($table, $tables_deja_rang)) {
     100                        sql_alter("TABLE $table DROP rang");
    93101                }
    94102        }
  • _plugins_/rang/branches/automatique/rang_pipelines.php

    r110177 r110204  
    2121 *
    2222 * @param array $tables
    23  *
    2423 * @return array
    2524 */
     
    2726        $tables_objets_selectionnes = lire_config('rang/objets');
    2827       
    29         if (isset($tables_objets_selectionnes) and !empty($tables_objets_selectionnes)) {
     28        // Tant qu'on n'a rien rajouté, on commence par lister les tables qui ont DEJA un champ rang !
     29        $tables_deja_rang = rang_lister_tables_deja_rang($tables);
     30       
     31        // On déclare le champ "rang" sur les tables demandées
     32        if (is_array($tables_objets_selectionnes)) {
    3033                foreach ($tables_objets_selectionnes as $table) {
    31                         $tables[$table]['field']['rang'] = "SMALLINT NOT NULL";
     34                        // Mais on ne déclare le champ que s'il n'existait pas déjà !
     35                        if (!isset($tables[$table]['field']['rang'])) {
     36                                $tables[$table]['field']['rang'] = "SMALLINT NOT NULL";
     37                        }
    3238                }
    3339        }
     
    4046 *
    4147 * @param    array $flux Données du pipeline
    42  *
    4348 * @return    array        Données du pipeline
    4449 */
     
    101106 *
    102107 * @param    array $flux Données du pipeline
    103  *
    104108 * @return    array        Données du pipeline
    105109 */
Note: See TracChangeset for help on using the changeset viewer.