Changeset 113140 in spip-zone


Ignore:
Timestamp:
Dec 28, 2018, 7:51:38 PM (3 weeks ago)
Author:
eric@…
Message:

Prise en compte du nouveau champ profondeur dans la table des noisettes et dans le service de stockage.
Ceinture et bretelles pour les champs modifiables d'une noisette conteneur ou pas : on fait aussi en sorte de pas fournir des champs inutiles même si N-Core sait les filtrer.
On améliore l'importation ieconfig mais elle ne fonctionne toujours pas correctement. La profondeur va permettre de corriger le dernier souci.

Location:
_plugins_/noizetier/trunk
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/noizetier/trunk/base/noizetier_tables.php

    r112848 r113140  
    149149                'encapsulation' => "varchar(6) DEFAULT 'defaut' NOT NULL",
    150150                'css'           => "tinytext DEFAULT '' NOT NULL",
     151                'profondeur'    => "smallint DEFAULT 0 NOT NULL",
    151152        );
    152153
  • _plugins_/noizetier/trunk/formulaires/editer_noisette.html

    r112728 r113140  
    77                #ACTION_FORMULAIRE{#ENV{action}}
    88                <input type="hidden" name="type_noisette" value="#ENV{type_noisette}" />
     9                <input type="hidden" name="est_conteneur" value="#ENV{est_conteneur}" />
    910
    1011                [(#REM) Paramètres de configuration propres à la noisette ]
  • _plugins_/noizetier/trunk/formulaires/editer_noisette.php

    r112728 r113140  
    111111                }
    112112
    113                 // Paramètres généraux d'inclusion de la noisette
    114                 include_spip('inc/config');
    115                 $encapsulation = _request('encapsulation');
    116                 $css = _request('css');
    117                 if (($encapsulation == 'non') or (($encapsulation == 'defaut') and !lire_config('noizetier/encapsulation_noisette'))) {
    118                         // on remet à zéro les css si la capsule englobante n'est pas active
    119                         $css = '';
     113                // Paramètres généraux d'inclusion de la noisette : on distingue les noisettes conteneur et les autres.
     114                // Pour les noisettes conteneur, l'encapsulation et les css ne sont pas éditables.
     115                $valeurs = array('parametres' => serialize($parametres));
     116                if (_request('est_conteneur') != 'oui') {
     117                        include_spip('inc/config');
     118                        $encapsulation = _request('encapsulation');
     119                        $css = _request('css');
     120                        if (($encapsulation == 'non') or (($encapsulation == 'defaut') and !lire_config('noizetier/encapsulation_noisette'))) {
     121                                // on remet à zéro les css si la capsule englobante n'est pas active
     122                                $css = '';
     123                        }
     124                        $valeurs = array_merge($valeurs, array('encapsulation' => $encapsulation, 'css' => $css));
    120125                }
    121126
     
    125130                // Mise à jour de la noisette en base de données
    126131                include_spip('inc/ncore_noisette');
    127                 $valeurs = array('parametres' => serialize($parametres), 'encapsulation' => $encapsulation, 'css' => $css);
    128132                if (noisette_parametrer('noizetier', intval($id_noisette), $valeurs)) {
    129133                        // On invalide le cache
  • _plugins_/noizetier/trunk/formulaires/etendre_noisette.html

    r110817 r113140  
    99                #ACTION_FORMULAIRE{#ENV{action}}
    1010                <input type="hidden" name="conteneur_id" value="#ENV{id_conteneur}" />
     11                <input type="hidden" name="est_conteneur" value="#ENV{est_conteneur}" />
    1112
    1213                <fieldset>
     
    2829                                })]
    2930
    30                                 [(#SAISIE{case, copie_balise,
    31                                         label_case=<:noizetier:label_copie_noisette_balise:>,
    32                                 })]
     31                                [(#ENV{est_conteneur}|=={non}|oui)
     32                                        [(#SAISIE{case, copie_encapsulation,
     33                                                label_case=<:noizetier:label_copie_noisette_balise:>,
     34                                        })]
    3335
    34                                 [(#SAISIE{case, copie_css,
    35                                         label_case=<:noizetier:label_copie_noisette_css:>,
    36                                 })]
     36                                        [(#SAISIE{case, copie_css,
     37                                                label_case=<:noizetier:label_copie_noisette_css:>,
     38                                        })]
     39                                ]
    3740                        </div>
    3841                </fieldset>
  • _plugins_/noizetier/trunk/formulaires/etendre_noisette.php

    r110841 r113140  
    2929        $valeurs = array();
    3030
    31         // On récupère le type de page et la composition associé au type de noisette
    32         $select = array('type', 'composition');
     31        // On récupère le type de page et la composition associé au type de noisette.
     32        // On récupère aussi sa nature conteneur ou pas qui s'applique donc à la noisette à copier.
     33        $select = array('type', 'composition', 'conteneur');
    3334        $where = array('type_noisette=' . sql_quote($noisette['type_noisette']));
    3435        $type_noisette = sql_fetsel($select, 'spip_types_noisettes', $where);
     36        $valeurs['est_conteneur'] = $type_noisette['conteneur'];
    3537
    3638        // On cherche la liste des pages:
     
    101103                                // pour chaque page.
    102104                                $valeurs = array();
    103                                 foreach (array('copie_parametres', 'copie_balise', 'copie_css') as $_champ) {
     105                                $champs = array('copie_parametres');
     106                                if (_request('est_conteneur') != 'oui') {
     107                                        $champs = array_merge($valeurs, array('copie_encapsulation', 'copie_css'));
     108                                }
     109                                foreach ($champs as $_champ) {
    104110                                        if (_request($_champ)) {
    105111                                                $champ_noisette = str_replace('copie_', '', $_champ);
  • _plugins_/noizetier/trunk/lang/noizetier_fr.php

    r113121 r113140  
    136136        'ieconfig_non_installe' => '<b>Plugin Importeur/Exporteur de configurations :</b> ce plugin n’est pas installé sur votre site. Il n’est pas nécessaire au fonctionnement du noizetier. Cependant, s’il est activé, vous pourrez exporter et importer des configurations de noisettes dans le noizetier.',
    137137        'ieconfig_probleme_import_config' => 'Un problème a été rencontré lors de l’importation de la configuration du noiZetier.',
    138         'import_compositions_virtuelles_ajouter' => 'Ajouter les compositions virtuelles du fichier d’import. Les compositions de la base aussi disponibles dans le fichier d\\import ne seront pas modifiées.',
    139         'import_compositions_virtuelles_avertissement1' => 'Il n’existe pas de compositions virtuelles dans la base. Il est juste possible d\\importer celles du fichier d’import.',
     138        'import_compositions_virtuelles_ajouter' => 'Ajouter les compositions virtuelles du fichier d’import. Les compositions virtuelles disponibles sur le site ne seront pas modifiées.',
     139        'import_compositions_virtuelles_avertissement1' => 'Il n’existe pas de compositions virtuelles dans la site. Il est juste possible d\\importer celles du fichier d’import.',
    140140        'import_compositions_virtuelles_avertissement2' => 'Aucune composition virtuelle n’est disponible dans le fichier d’import. Aucune importation n’est donc possible.',
    141         'import_compositions_virtuelles_explication' => 'Il existe des compositions virtuelles dans la base et dans le fichier d’import',
    142         'import_compositions_virtuelles_fusionner' => 'Ajouter les compositions virtuelles du fichier d’import et remplacer les compositions de la base aussi disponibles dans le fichier d’import.',
     141        'import_compositions_virtuelles_explication' => 'Il existe des compositions virtuelles dans le site et dans le fichier d’import.',
     142        'import_compositions_virtuelles_fusionner' => 'Ajouter les compositions virtuelles du fichier d’import et remplacer les compositions virtuelles du site aussi disponibles dans le fichier d’import.',
    143143        'import_compositions_virtuelles_label' => 'Les compositions virtuelles',
    144         'import_compositions_virtuelles_remplacer' => 'Remplacer les compositions virtuelles de la base par celles du fichiers d’import',
     144        'import_compositions_virtuelles_remplacer' => 'Remplacer les compositions virtuelles disponibles sur le site par celles du fichier d’import',
    145145        'import_configuration_avertissement' => 'La version @version@ du plugin noiZetier actif sur ce site possède un schéma @schema@ différent de celui du fichier d’import. <b>Vérifier la compatibilité des configurations avant d’importer celle du fichier</b>.',
    146         'import_configuration_explication' => 'La version @version@ du plugin noiZetier actif sur ce site possède le même schéma @schema@ que celui du fichier d’import',
     146        'import_configuration_explication' => 'La version @version@ du plugin noiZetier actif sur ce site possède le même schéma @schema@ que celui du fichier d’import.',
    147147        'import_configuration_label' => 'La configuration du plugin',
    148         'import_configuration_labelcase' => 'Remplacer la configuration actuelle par celle du fichier d’import',
    149         'import_noisettes_ajouter' => 'Ajouter noisettes du fichier d’import dans les pages concernées. Le noisettes actuellement dans la base ne seront pas modifiées.',
    150         'import_noisettes_avertissement1' => 'Il n’existe pas de pages communes dans la base et dans le fichier d’import qui possèdent des noisettes. Aucune importation n’est donc possible.',
     148        'import_configuration_labelcase' => 'Remplacer la configuration actuelle du noiZetier par celle du fichier d’import',
     149        'import_noisettes_ajouter' => 'Ajouter les noisettes du fichier d’import dans les pages ou objets concernés. Les noisettes actuellement configurées sur le site ne seront pas modifiées',
     150        'import_noisettes_avertissement1' => 'Il n’existe pas de pages ou objets communs dans le site et dans le fichier d’import. Aucune importation n’est donc possible.',
    151151        'import_noisettes_avertissement2' => 'Aucune noisette n’est disponible dans le fichier d’import. Aucune importation n’est donc possible.',
    152         'import_noisettes_explication' => 'Il existe des pages communes dans la base et dans le fichier d’import qui possèdent des noisettes',
     152        'import_noisettes_explication' => 'Il existe des pages ou objets communs dans le site et dans le fichier d’import.',
    153153        'import_noisettes_label' => 'Les noisettes',
    154         'import_noisettes_remplacer' => 'Remplacer par les noisettes du fichier d’import les noisettes de la base pour les pages concernées.',
    155         'import_pages_explicites_avertissement1' => 'Il n’existe pas de pages ou compositions explicites communes entre la base et le fichier d’import. Toute importation est donc inutile.',
    156         'import_pages_explicites_avertissement2' => 'Aucune pages ou compositions explicites disponibles en base. Toute importation est donc inutile.',
    157         'import_pages_explicites_explication' => 'Il existe des pages et compositions explicites communes entre la base et le fichier d’import',
     154        'import_noisettes_remplacer' => 'Remplacer, pour les pages ou objets concernés, les noisettes actuellement configurées pour le site par les noisettes du fichier d’import',
     155        'import_pages_explicites_avertissement1' => 'Il n’existe pas de pages ou compositions explicites communes entre le site et le fichier d’import. Toute importation est donc inutile.',
     156        'import_pages_explicites_avertissement2' => 'Aucune pages ou compositions explicites disponibles sur le site. Toute importation est donc inutile.',
     157        'import_pages_explicites_explication' => 'Il existe des pages et compositions explicites communes entre le site et le fichier d’import.',
    158158        'import_pages_explicites_label' => 'Les blocs exclus des pages explicites',
    159         'import_pages_explicites_labelcase' => 'Importer les blocs exclus dans les pages explicites existantes',
     159        'import_pages_explicites_labelcase' => 'Remplacer les blocs exclus des pages explicites du site par ceux du fichier d\'import',
    160160        'import_resume' => 'Le fichier à importer a été construit avec le noiZetier en version @version@, schéma de données @schema@.',
    161161        'info_1_noisette_ajoutee' => '1 noisette a été ajoutée',
     
    170170        'label_afficher_titre_noisette' => 'Afficher un titre de noisettes ?',
    171171        'label_code' => 'Code Spip :',
    172         'label_copie_noisette_balise' => 'Copier l’indicateur de balise englobante.',
    173         'label_copie_noisette_css' => 'Copier les styles éventuels associés à la balise englobante.',
     172        'label_copie_noisette_balise' => 'Copier l’indicateur d\'encapsulation.',
     173        'label_copie_noisette_css' => 'Copier les styles éventuels associés à la capsule englobante.',
    174174        'label_copie_noisette_parametres' => 'Copier les paramètres de configuration de la noisette source.',
    175175        'label_description_code' => 'Description :',
  • _plugins_/noizetier/trunk/ncore/noizetier.php

    r113001 r113140  
    262262 * à l'appelant de vérifier que le rang est libre.
    263263 * La description complète de la noisette est renvoyée avec mise à jour des champs de positionnement (id_conteneur,
    264  * conteneur et rang_noisette).
     264 * conteneur, rang_noisette et profondeur).
    265265 *
    266266 * @param string $plugin
     
    268268 *        un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe.
    269269 * @param array  $description
    270  *        Description de la noisette. Soit la description ne contient pas l'id de la noisette et c'est un ajout,
    271  *        soit la description contient l'id et c'est une mise à jour.
     270 *        Description de la noisette à changer de conteneur.
    272271 * @param string $id_conteneur
     272 *        Identifiant unique sous forme de chaine du conteneur destination.
    273273 * @param int    $rang
     274 *        Rang où positionner la noisette dans le conteneur destination. Il faut toujours vérifier au préalable
     275 *        que ce rang est libre.
     276 * @param int    $profondeur
     277 *        Profondeur de la noisette à sa nouvelle position.
    274278 *
    275279 * @return array
    276280 *         Description de la noisette mise à jour avec les informations sur le nouvel emplacement
    277281 */
    278 function noizetier_noisette_changer_conteneur($plugin, $description, $id_conteneur, $rang) {
     282function noizetier_noisette_changer_conteneur($plugin, $description, $id_conteneur, $rang, $profondeur) {
    279283
    280284        // On rajoute la description à son emplacement destination en prenant soin de modifier les index id_conteneur,
     
    284288        $description['id_conteneur'] = $id_conteneur;
    285289        $description['rang_noisette'] = $rang;
     290        $description['profondeur'] = $profondeur;
    286291
    287292        // On met à jour l'objet en base
     
    334339
    335340                // Détermination du complément en fonction du fait que le conteneur soit une noisette ou pas.
    336                 // TODO : pourquoi on utilise pas la fonction qui permet de décomposer le conteneur ?
    337                 if (!empty($conteneur['id_noisette']) and ($id_noisette = intval($conteneur['id_noisette']))) {
     341                include_spip('inc/ncore_conteneur');
     342                if (conteneur_est_noisette('noizetier', $conteneur)) {
    338343                        // -- si le conteneur est une noisette on récupère les informations de son conteneur. Comme les noisettes
    339344                        //    sont insérées par niveau on duplique forcément les informations du bloc supérieur à chaque imbrication.
    340345                        //    Il est donc inutile de remonter au bloc racine.
    341346                        $select = array_keys($complement);
    342                         $where = array('id_noisette=' . $id_noisette, 'plugin=' . sql_quote($plugin));
    343                         $complement = sql_fetsel($select, 'spip_noisettes', $where);
     347                        $where = array('id_noisette=' . intval($conteneur['id_noisette']), 'plugin=' . sql_quote($plugin));
     348                        // Il est possible que le conteneur ne soit pas déjà en base (cas improbable) et donc pour éviter une
     349                        // notice on fait en sorte que $complement soit toujours un tableau.
     350                        if ($informations_bloc = sql_fetsel($select, 'spip_noisettes', $where)) {
     351                                $complement = $informations_bloc;
     352                        }
    344353                } else {
    345354                        // -- si le conteneur n'est pas une noisette, le complément se déduit du conteneur lui-même.
  • _plugins_/noizetier/trunk/noizetier_administrations.php

    r113001 r113140  
    126126        // -- Ajout de la colonne 'id_conteneur'.
    127127        // -- Ajout de la colonne 'est_conteneur' toujours à la valeur 'non' car il n'existe pas de noisette de ce type
     128        // -- Ajout de la colonne 'profondeur' à la valeur par défaut 0
    128129        //    dans les versions précédentes du plugin.
    129130        sql_alter("TABLE spip_noisettes ADD plugin varchar(30) DEFAULT '' NOT NULL AFTER id_noisette");
     
    132133        sql_alter("TABLE spip_noisettes ADD est_conteneur varchar(3) DEFAULT 'non' NOT NULL AFTER type_noisette");
    133134        sql_alter("TABLE spip_noisettes ADD encapsulation varchar(6) DEFAULT 'defaut' NOT NULL AFTER parametres");
     135        sql_alter("TABLE spip_noisettes ADD profondeur smallint DEFAULT 0 NOT NULL AFTER css");
    134136        // -- Changement du nom du champ 'rang' en 'rang_noisette'
    135137        sql_alter("TABLE spip_noisettes CHANGE rang rang_noisette smallint DEFAULT 1 NOT NULL");
  • _plugins_/noizetier/trunk/noizetier_ieconfig.php

    r113134 r113140  
    286286        // Exportation de la tables spip_noisettes qui contient les noisettes associées aux pages explicites,
    287287        // aux compositions virtuelles et à certains objets précis.
     288        // -- on fait en sorte que les noisettes conteneur soient les premiers index suivies des noisettes non conteneur.
    288289        // -- on supprime l'id_noisette de chaque noisette car il sera recréé lors de l'import.
    289290        include_spip('ncore_fonctions');
    290         $export['noisettes'] = noisette_repertorier('noizetier', array(), 'id_noisette');
     291        $noisettes_conteneur = noisette_repertorier('noizetier', array('est_conteneur' => 'oui'), 'id_noisette');
     292        $export['noisettes'] = array_merge(
     293                $noisettes_conteneur,
     294                noisette_repertorier('noizetier', array('est_conteneur' => 'non'), 'id_noisette')
     295        );
     296        // -- le array_merge a changé les index numériques de 0 à n, il faut remettre les id de noisette.
     297        $export['noisettes'] = array_column($export['noisettes'], null, 'id_noisette');
    291298        foreach($export['noisettes'] as $_id => $_noisette) {
    292299                unset($export['noisettes'][$_id]['id_noisette']);
     
    393400                        // On vide d'abord la table spip_noisettes de toutes les noisettes du noiZetier.
    394401                        $where = array('plugin=' . sql_quote('noizetier'));
    395                         if (!sql_delete('spip_noisettes', $where)) {
     402                        if (sql_delete('spip_noisettes', $where) === false) {
    396403                                $retour = false;
    397404                        }
     
    409416                        $group_by = array('id_conteneur');
    410417                        $nb_noisettes_base = sql_allfetsel($select, 'spip_noisettes', $where, $group_by);
    411                         $nb_noisettes_base = array_column($nb_noisettes_base, 'nb_noisettes', 'id_conteneur');
     418                        if ($nb_noisettes_base) {
     419                                $nb_noisettes_base = array_column($nb_noisettes_base, 'nb_noisettes', 'id_conteneur');
     420                        }
    412421
    413422                        // On insère les noisettes du fichier d'import appartenant à des pages ou des objets disponibles dans la
    414                         // base. Cette opération se fait en deux passes pour gérer le fait que les noisettes conteneur vont
     423                        // base. Dans le fichier d'export, les noisettes conteneur sont classées avant les autres noisettes de façon
     424                        // à être créées quand les noisettes imbriquées le nécessiteront.
     425                        // Cette opération se fait en deux passes pour gérer le fait que les noisettes conteneur vont
    415426                        // changer d'id ce qui change leur identifiant de conteneur :
    416427                        // - Passe 1 : si la noisette est à insérer on l'ajoute dans le conteneur sans se préoccuper du changement
     
    451462                                        $conteneur_est_noisette = conteneur_est_noisette('noizetier', $conteneur);
    452463                                        if (!$conteneur_est_noisette) {
    453                                                 $rang = $nb_noisettes_base[$_noisette['id_conteneur']] + $_noisette['rang_noisette'];
     464                                                $rang = !empty($nb_noisettes_base[$_noisette['id_conteneur']])
     465                                                        ? $nb_noisettes_base[$_noisette['id_conteneur']]
     466                                                        : 0;
     467                                                $rang += $_noisette['rang_noisette'];
    454468                                        }
    455469                                        $id_noisette_nouveau = noisette_ajouter(
  • _plugins_/noizetier/trunk/paquet.xml

    r113134 r113140  
    22        prefix="noizetier"
    33        categorie="maintenance"
    4         version="3.0.45"
     4        version="3.0.46"
    55        etat="dev"
    66        compatibilite="[3.2.0;3.2.*]"
     
    4040        <pipeline nom="insert_head" action="insert_head_css" inclure="noizetier_pipelines.php" />
    4141
    42         <necessite nom="ncore" compatibilite="[0.5.14;[" />
     42        <necessite nom="ncore" compatibilite="[0.6.1;[" />
    4343        <necessite nom="saisies" compatibilite="[2.28.0;[" />
    4444        <necessite nom="verifier" compatibilite="[1.6.3;[" />
Note: See TracChangeset for help on using the changeset viewer.