Changeset 113142 in spip-zone


Ignore:
Timestamp:
Dec 29, 2018, 11:05:03 AM (3 weeks ago)
Author:
root
Message:

Enfin une version qui fonctionne pour l'iumportation ieconfig.
L'export a été modifié pour permettre de ranger les noisettes de façon a faciliter l'import.
Ceci étant tous les exports précédents ne sont pas compatibles.

Location:
_plugins_/noizetier/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/noizetier/trunk/noizetier_ieconfig.php

    r113140 r113142  
    287287        // aux compositions virtuelles et à certains objets précis.
    288288        // -- on fait en sorte que les noisettes conteneur soient les premiers index suivies des noisettes non conteneur.
     289        //    Pour chaque groupe, on sous-classe par profondeur de 0 à n. On utilise donc l'API SQL et pas celle de N-Core.
    289290        // -- on supprime l'id_noisette de chaque noisette car il sera recréé lors de l'import.
    290         include_spip('ncore_fonctions');
    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         );
     291        $where = array('plugin=' . sql_quote('noizetier'));
     292        $order_by = array('est_conteneur DESC', 'profondeur ASC');
     293        $noisettes = sql_allfetsel('*', 'spip_noisettes', $where, array(), $order_by);
    296294        // -- 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');
     295        $export['noisettes'] = array_column($noisettes, null, 'id_noisette');
    298296        foreach($export['noisettes'] as $_id => $_noisette) {
    299297                unset($export['noisettes'][$_id]['id_noisette']);
     
    421419
    422420                        // On insère les noisettes du fichier d'import appartenant à des pages ou des objets disponibles dans la
    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.
     421                        // base. Dans le fichier d'export, les noisettes conteneur sont classées avant les autres noisettes et
     422                        // suivant une profondeur croissante de façon à être créées quand les noisettes imbriquées le nécessiteront.
    425423                        // Cette opération se fait en deux passes pour gérer le fait que les noisettes conteneur vont
    426424                        // changer d'id ce qui change leur identifiant de conteneur :
     
    432430                        include_spip('inc/ncore_noisette');
    433431                        $noisettes_conteneur = $noisettes_imbriquees = array();
    434                         $champs_modifiables = array_flip(array('parametres', 'encapsulation', 'css'));
    435432                        foreach ($contenu_import['noisettes'] as $_id_noisette_ancien => $_noisette) {
    436433                                // On vérifie qu'il faut bien importer la noisette
     
    454451                                if ($noisette_a_importer) {
    455452                                        // La noisette à importer est bien associée à une page ou un objet de la base.
    456                                         // Les noisettes ne sont pas triées dans l'ordre d'insertion, il faut donc se baser sur le rang
    457                                         // dans le fichier d'import. Pour une noisette appartenant à un conteneur noisette on reprend le
    458                                         // rang tel que mais pour une noisette incluse dans un bloc Z il faut recalculer le rang en tenant
    459                                         // compte des noisettes déjà incluses dans la base.
     453                                        // Les noisettes ne sont pas triées dans l'ordre d'insertion pour un conteneur donné,
     454                                        // il faut donc se baser sur le rang dans le fichier d'import. Pour une noisette appartenant à un
     455                                        // conteneur noisette on reprend le rang tel que mais pour une noisette incluse dans un bloc Z il
     456                                        // faut recalculer le rang en tenant compte des noisettes déjà incluses dans la base.
    460457                                        $rang = $_noisette['rang_noisette'];
    461458                                        $conteneur = unserialize($_noisette['conteneur']);
    462459                                        $conteneur_est_noisette = conteneur_est_noisette('noizetier', $conteneur);
    463460                                        if (!$conteneur_est_noisette) {
    464                                                 $rang = !empty($nb_noisettes_base[$_noisette['id_conteneur']])
     461                                                $rang_max = !empty($nb_noisettes_base[$_noisette['id_conteneur']])
    465462                                                        ? $nb_noisettes_base[$_noisette['id_conteneur']]
    466463                                                        : 0;
    467                                                 $rang += $_noisette['rang_noisette'];
     464                                                $rang += $rang_max;
    468465                                        }
    469466                                        $id_noisette_nouveau = noisette_ajouter(
     
    475472                                        // il faut aussi mettre à jour les données paramétrables : parametres, encapsulation et css.
    476473                                        if ($id_noisette_nouveau) {
    477                                                 $modifications = array_intersect_key($_noisette, $champs_modifiables);
     474                                                $champs_modifiables = array('parametres');
     475                                                if ($_noisette['est_conteneur'] != 'oui') {
     476                                                        $champs_modifiables = array_merge($champs_modifiables, array('parametres', 'encapsulation', 'css'));
     477                                                }
     478                                                $modifications = array_intersect_key($_noisette, array_flip($champs_modifiables));
    478479                                                noisette_parametrer('noizetier', $id_noisette_nouveau, $modifications);
    479480                                        }
     
    499500
    500501                        // - Passe 2 : On reprend les noisettes venant d'être insérées dans une noisette conteneur et
    501                         //             on rétablit le bon conteneur (id et tableau sérialisé).
     502                        //             on rétablit le bon conteneur (id et tableau sérialisé), la profondeur et les informations
     503                        //             du bloc Z accueillant les noisettes.
    502504                        if ($noisettes_imbriquees) {
    503505                                foreach ($noisettes_imbriquees as $_id_noisette_nouveau => $_conteneur_ancien) {
    504                                         $where = array('plugin=' . sql_quote('noizetier'), 'id_noisette=' . intval($_id_noisette_nouveau));
     506                                        // Détermination du conteneur
    505507                                        $nouveau_conteneur = $_conteneur_ancien;
    506508                                        $nouveau_conteneur['id_noisette'] = $noisettes_conteneur[$_conteneur_ancien['id_noisette']];
    507                                         $modifications = array(
    508                                                 'conteneur' => serialize($nouveau_conteneur),
    509                                                 'id_conteneur' => conteneur_identifier('noizetier', $nouveau_conteneur)
     509
     510                                        // Détermination de la profondeur et des caractéristiques du bloc Z de plus haut niveau.
     511                                        // Le conteneur est une noisette, qui a été insérée précédemment, on la lit.
     512                                        $select = array('type', 'composition', 'objet', 'id_objet',     'bloc', 'profondeur');
     513                                        $where = array(
     514                                                'id_noisette=' . intval($nouveau_conteneur['id_noisette']),
     515                                                'plugin=' . sql_quote('noizetier')
    510516                                        );
     517                                        $modifications = sql_fetsel($select, 'spip_noisettes', $where);
     518
     519                                        // On finalise les modifications
     520                                        $modifications['profondeur'] += 1;
     521                                        $modifications['conteneur'] = serialize($nouveau_conteneur);
     522                                        $modifications['id_conteneur'] = conteneur_identifier('noizetier', $nouveau_conteneur);
     523
     524                                        // On met à jour le contenu de la noisette en base.
     525                                        $where = array('plugin=' . sql_quote('noizetier'), 'id_noisette=' . intval($_id_noisette_nouveau));
    511526                                        sql_updateq('spip_noisettes', $modifications, $where);
    512527                                }
  • _plugins_/noizetier/trunk/paquet.xml

    r113140 r113142  
    22        prefix="noizetier"
    33        categorie="maintenance"
    4         version="3.0.46"
     4        version="3.0.47"
    55        etat="dev"
    66        compatibilite="[3.2.0;3.2.*]"
Note: See TracChangeset for help on using the changeset viewer.