Changeset 112848 in spip-zone


Ignore:
Timestamp:
Dec 16, 2018, 8:49:52 PM (3 months ago)
Author:
root
Message:

Mise à jour du noiZetier pour prendre en compte N-Core 0.5.9.
ATTENTION : la table noisettes a changé et la compatibilité n'est pas assurée avec la version précédente.
Il faut donc réinstaller le plugin et recréer les tables.
Le déplacement dans un autre conteneur est opérationnel (à tester quand même).

Location:
_plugins_/noizetier/trunk
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/noizetier/trunk/action/deplacer_noisette.php

    r111301 r112848  
    22/**
    33 * Ce fichier contient l'action `deplacer_noisette` lancée par un utilisateur pour
    4  * déplacer d'un rang vers le haut ou vers le bas de façon sécurisée une noisette donnée.
     4 * déplacer d'un rang vers le haut ou vers le bas de façon sécurisée une noisette donnée
     5 * dans le même conteneur.
    56 *
    67 * @package SPIP\NOIZETIER\NOISETTE\ACTION
     
    2627
    2728        // Les arguments attendus dépendent du contexte et la chaine peut prendre les formes suivantes:
    28         // - bas:id_noisette:nb_noisettes_du_conteneur, pour déplacer la noisette d'un rang vers le bas.
    29         // - haut:id_noisette:nb_noisettes_du_conteneur, pour déplacer la noisette d'un rang vers le haut.
     29        // - bas:id_noisette:id_conteneur:nb_noisettes_du_conteneur, pour déplacer la noisette d'un rang vers le bas.
     30        // - haut:id_noisette:id_conteneur:nb_noisettes_du_conteneur, pour déplacer la noisette d'un rang vers le haut.
    3031        $securiser_action = charger_fonction('securiser_action', 'inc');
    3132        $arguments = $securiser_action();
     
    3334        if ($arguments) {
    3435                // Identification des arguments
    35                 list($sens, $id_noisette, $nb_noisettes) = explode(':', $arguments);
     36                list($sens, $id_noisette, $id_conteneur, $nb_noisettes) = explode(':', $arguments);
    3637
    3738                // Recherche des informations sur la noisette.
     
    7576                        // Déplacement de la noisette par modification de son rang en base de données.
    7677                        include_spip('inc/ncore_noisette');
    77                         noisette_deplacer('noizetier', $id_noisette, $rang_destination);
     78                        noisette_deplacer('noizetier', $id_noisette, $id_conteneur, $rang_destination);
    7879                }
    7980        }
  • _plugins_/noizetier/trunk/action/deplacer_noisette_ajax.php

    r112612 r112848  
    11<?php
     2/**
     3 * Ce fichier contient l'action `deplacer_noisette_ajax` lancée par un utilisateur pour
     4 * déplacer une noisette d'un rang donné dans un conteneur à un autre rang dans le même
     5 * conteneur ou dans un conteneur différent.
     6 *
     7 * @package SPIP\NOIZETIER\NOISETTE\ACTION
     8 */
     9
     10if (!defined('_ECRIRE_INC_VERSION')) {
     11        return;
     12}
     13
    214
    315/**
     
    1022 * @Note : cette action diffère de deplacer_noisette.php qui permet de déplacer d'un unique rang, au sein du même conteneur
    1123 *
    12  * @plugin     Noizetier
    13  * @copyright  2018
    14  * @licence    GNU/GPL
    15  * @package    SPIP\Noizetier\Action
     24 * @return
    1625 */
    17 
    18 if (!defined('_ECRIRE_INC_VERSION')) {
    19         return;
    20 }
    21 
    2226function action_deplacer_noisette_ajax_dist() {
    2327
     
    3539        // Rustine temporaire : l'API de déplacement ne prévoit pas de changement de conteneur
    3640        // Dans ce cas on modifie le conteneur avec un rang libre en amont afin de forcer le changement
    37         $nouveau_conteneur = ($id_conteneur_destination != $id_conteneur_origine);
    38         if ($nouveau_conteneur) {
    39                 $set = array(
    40                         'id_conteneur'  => $id_conteneur_destination,
    41                         'rang_noisette' => 9999,
    42                 );
    43                 $update = objet_modifier('noisette', $id_noisette, $set);
    44         }
     41//      $nouveau_conteneur = ($id_conteneur_destination != $id_conteneur_origine);
     42//      if ($nouveau_conteneur) {
     43//              $set = array(
     44//                      'id_conteneur'  => $id_conteneur_destination,
     45//                      'rang_noisette' => 9999,
     46//              );
     47//              $update = objet_modifier('noisette', $id_noisette, $set);
     48//      }
    4549
    46         $deplacer = noisette_deplacer('noizetier', $id_noisette, $rang);
     50        $deplacer = noisette_deplacer('noizetier', $id_noisette, $id_conteneur_destination, $rang);
    4751        $deplacer = true;
    4852
     
    6367}
    6468
     69/**
     70 * @param $data
     71 *
     72 * @return void
     73 */
    6574function envoyer_json_envoi($data) {
    6675        header('Content-Type: application/json; charset=' . $GLOBALS['meta']['charset']);
  • _plugins_/noizetier/trunk/base/noizetier_tables.php

    r112726 r112848  
    3939        $interface['table_des_traitements']['NOM']['types_noisettes'] = '_T_ou_typo(%s)';
    4040        $interface['table_des_traitements']['DESCRIPTION']['types_noisettes'] = '_T_ou_typo(%s)';
     41        // - table spip_noisettes : on desérialise les tableaux
     42        $interface['table_des_traitements']['PARAMETRES']['noisettes'] = 'unserialize(%s)';
     43        $interface['table_des_traitements']['CONTENEUR']['noisettes'] = 'unserialize(%s)';
    4144
    4245        return $interface;
     
    135138                'id_conteneur'  => "varchar(255) DEFAULT '' NOT NULL",
    136139                'rang_noisette' => "smallint DEFAULT 1 NOT NULL",
     140                'conteneur'     => "text DEFAULT '' NOT NULL",
    137141                'type'          => "varchar(127) DEFAULT '' NOT NULL",
    138142                'composition'   => "varchar(127) DEFAULT '' NOT NULL",
  • _plugins_/noizetier/trunk/formulaires/inclure/inc-resume_noisette.html

    r112579 r112848  
    6565                                        [(#ENV{nb_noisettes}|>{1}|oui)
    6666                                                [<li class="groupe">
    67                                                         <a href="(#URL_ACTION_AUTEUR{deplacer_noisette, [haut:(#ID_NOISETTE):#ENV{nb_noisettes}], #ENV{url_page}})">
     67                                                        <a href="(#URL_ACTION_AUTEUR{deplacer_noisette, [haut:(#ID_NOISETTE):#ID_CONTENEUR:#ENV{nb_noisettes}], #ENV{url_page}})">
    6868                                                                ↑&nbsp;<:noizetier:formulaire_deplacer_haut:>
    6969                                                        </a>
    7070                                                </li>]
    7171                                                [<li>
    72                                                         <a href="(#URL_ACTION_AUTEUR{deplacer_noisette, [bas:(#ID_NOISETTE):#ENV{nb_noisettes}], #ENV{url_page}})">
     72                                                        <a href="(#URL_ACTION_AUTEUR{deplacer_noisette, [bas:(#ID_NOISETTE):#ID_CONTENEUR:#ENV{nb_noisettes}], #ENV{url_page}})">
    7373                                                                ↓&nbsp;<:noizetier:formulaire_deplacer_bas:>
    7474                                                        </a>
  • _plugins_/noizetier/trunk/formulaires/inclure/inc-resume_noisette_boutons.html

    r110817 r112848  
    2626        <div class="edition">
    2727        [(#ENV{nb_noisettes}|>{1}|oui)
    28                 [<a href="(#URL_ACTION_AUTEUR{deplacer_noisette, [haut:(#ID_NOISETTE):#ENV{nb_noisettes}], #ENV{url_page}})"
     28                [<a href="(#URL_ACTION_AUTEUR{deplacer_noisette, [haut:(#ID_NOISETTE):#ID_CONTENEUR:#ENV{nb_noisettes}], #ENV{url_page}})"
    2929                        title="<:noizetier:formulaire_deplacer_haut:>">
    3030                        [<img height="24" width="24" src="(#CHEMIN_IMAGE{noisette-up-24.png})" alt="" />]
    3131                </a>]
    32                 [<a href="(#URL_ACTION_AUTEUR{deplacer_noisette, [bas:(#ID_NOISETTE):#ENV{nb_noisettes}], #ENV{url_page}})"
     32                [<a href="(#URL_ACTION_AUTEUR{deplacer_noisette, [bas:(#ID_NOISETTE):#ID_CONTENEUR:#ENV{nb_noisettes}], #ENV{url_page}})"
    3333                        title="<:noizetier:formulaire_deplacer_bas:>">
    3434                        [<img height="24" width="24" src="(#CHEMIN_IMAGE{noisette-down-24.png})" alt="" />]
  • _plugins_/noizetier/trunk/inc/noizetier_conteneur.php

    r111233 r112848  
    5353
    5454        // Calcul de l'identifiant du conteneur
    55         include_spip('ncore/noizetier');
    56         $id_conteneur = noizetier_conteneur_identifier('noizetier', $conteneur);
     55        include_spip('ncore_fonctions');
     56        $id_conteneur = conteneur_identifier('noizetier', $conteneur);
    5757
    5858        return $id_conteneur;
  • _plugins_/noizetier/trunk/ncore/noizetier.php

    r112728 r112848  
    258258
    259259/**
     260 * Transfère une noisette d'un conteneur vers un autre à un rang donné.
     261 * Le rang destination n'est pas vérifié lors du rangement dans le conteneur destination. Il convient
     262 * à l'appelant de vérifier que le rang est libre.
     263 * La description complète de la noisette est renvoyée avec mise à jour des champs de positionnement (id_conteneur,
     264 * conteneur et rang_noisette).
     265 *
     266 * @param string $plugin
     267 *        Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier ou
     268 *        un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe.
     269 * @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.
     272 * @param string $id_conteneur
     273 * @param int    $rang
     274 *
     275 * @return array
     276 *         Description de la noisette mise à jour avec les informations sur le nouvel emplacement
     277 */
     278function noizetier_noisette_changer_conteneur($plugin, $description, $id_conteneur, $rang) {
     279
     280        // On rajoute la description à son emplacement destination en prenant soin de modifier les index id_conteneur,
     281        // conteneur et rang_noisette qui doivent représenter le conteneur destination.
     282        $description['id_conteneur'] = $id_conteneur;
     283        $description['conteneur'] = ncore_conteneur_construire($plugin, $id_conteneur);
     284        $description['rang_noisette'] = $rang;
     285
     286        // On met à jour l'objet en base
     287        // On sauvegarde l'id de la noisette et on le retire de la description pour éviter une erreur à l'update.
     288        $id_noisette = intval($description['id_noisette']);
     289        unset($description['id_noisette']);
     290
     291        // Mise à jour de la noisette.
     292        $where = array('id_noisette=' . $id_noisette, 'plugin=' . sql_quote($plugin));
     293        sql_updateq('spip_noisettes', $description, $where);
     294
     295        // On remet l'ide de la noisette pour renvoyer la description complète
     296        $description['id_noisette'] = $id_noisette;
     297
     298        return $description;
     299}
     300
     301/**
    260302 * Complète la description fournie avec les champs propres au noiZetier, à savoir, ceux identifiant
    261303 * la page/composition ou l'objet et le bloc.
     
    291333
    292334                // Détermination du complément en fonction du fait que le conteneur soit une noisette ou pas.
     335                // TODO : pourquoi on utilise pas la fonction qui permet de décomposer le conteneur ?
    293336                if (!empty($conteneur['id_noisette']) and ($id_noisette = intval($conteneur['id_noisette']))) {
    294337                        // -- si le conteneur est une noisette on récupère les informations de son conteneur. Comme les noisettes
     
    326369                // Ajout du complément à la description.
    327370                $description = array_merge($description, $complement);
    328 
    329                 // On supprime l'index 'conteneur' qui n'est pas utile pour le noiZetier qui utilise uniquement les
    330                 // données de page et d'objet venant d'être ajoutées et l'id du conteneur.
    331                 unset($description['conteneur']);
    332371        }
    333372
     
    543582
    544583/**
    545  * Construit un identifiant unique pour le conteneur de noisettes.
    546  * Pour le noiZetier, un conteneur est toujours un squelette, soit générique soit d'un objet donné ou
    547  * une noisette de type conteneur.
     584 * Vérifie la conformité des index du tableau représentant le conteneur et supprime les index inutiles, si besoin.
     585 * Pour le noiZetier, la vérification concerne uniquement les conteneurs non noisette. Dans ce cas, le conteneur
     586 * est toujours un squelette, soit générique soit d'un objet donné.
    548587 *
    549588 * @package SPIP\NOIZETIER\CONTENEUR\SERVICE
     
    552591 *        Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier ou
    553592 *        un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe.
     593 * @param array  $conteneur
     594 *        Tableau associatif descriptif du conteneur dont les index doivent être vérifiés.
     595 *
     596 * @return array
     597 *         Tableau du conteneur dont tous les index sont conformes (`squelette` et éventuellement `objet`, `id_objet`)
     598 *         ou tableau vide si non conforme.
     599 */
     600function noizetier_conteneur_verifier($plugin, $conteneur) {
     601
     602        // Liste des index autorisés.
     603        static $index_conteneur = array('squelette', 'objet', 'id_objet');
     604
     605        // On vérifie que les index autorisés sont les seuls retournés.
     606        $conteneur_verifie = array();
     607        if ($conteneur) {
     608                // L'index squelette doit toujours être présent.
     609                if ((isset($conteneur['squelette']) and $conteneur['squelette'])) {
     610                        $conteneur = array_intersect_key($conteneur, array_flip($index_conteneur));
     611                        if ((count($conteneur) == 1)
     612                        or ((count($conteneur) == 3)
     613                                and isset($conteneur['objet'], $conteneur['id_objet'])
     614                                and $conteneur['objet']
     615                                and intval($conteneur['id_objet']))) {
     616                                // Le conteneur coincide avec un squelette de bloc générique ou d'un objet donné.
     617                                $conteneur_verifie = $conteneur;
     618                        }
     619                }
     620        }
     621
     622        return $conteneur_verifie;
     623}
     624
     625/**
     626 * Construit un identifiant unique pour le conteneur de noisettes hors les noisettes conteneur.
     627 * Pour le noiZetier, un conteneur est toujours un squelette, soit générique soit d'un objet donné.
     628 *
     629 * @package SPIP\NOIZETIER\CONTENEUR\SERVICE
     630 *
     631 * @param string $plugin
     632 *        Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier ou
     633 *        un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe.
    554634 * @param array $conteneur
    555  *        Tableau associatif descriptif du conteneur accueillant la noisette. Un conteneur peut-être un squelette seul
    556  *        ou associé à un contexte d'utilisation et dans ce cas il possède un index `squelette` ou un objet quelconque
    557  *        sans lien avec un squelette. Dans tous les cas, les index, à l'exception de `squelette`, sont spécifiques
    558  *        à l'utilisation qui en est faite par le plugin.
     635 *        Tableau associatif descriptif du conteneur. Pour le noiZetier, les seuls index autorisés sont
     636 *        `squelette`, `objet` et `id_objet`.
    559637 *
    560638 * @return string
     639 *         L'identifiant calculé à partir du tableau.
    561640 */
    562641function noizetier_conteneur_identifier($plugin, $conteneur) {
    563642
    564643        // On initialise l'identifiant à vide.
    565         $identifiant = '';
    566 
     644        $id_conteneur = '';
     645
     646        // Les noisettes conteneur ont été identifiées par N-Core, inutile donc de s'en préoccuper.
    567647        if ($conteneur) {
    568                 // Cas d'une noisette conteneur.
    569                 if (!empty($conteneur['type_noisette']) and intval($conteneur['id_noisette'])) {
    570                         $identifiant = $conteneur['type_noisette'] . '|noisette|' . $conteneur['id_noisette'];
    571                 } else {
    572                         // Le nom du squelette en premier si il existe (normalement toujours).
    573                         if (!empty($conteneur['squelette'])) {
    574                                 $identifiant .= $conteneur['squelette'];
    575                         }
    576 
    577                         // L'objet et son id si on est en présence d'un objet.
    578                         if (!empty($conteneur['objet']) and !empty($conteneur['id_objet']) and intval($conteneur['id_objet'])) {
    579                                 $identifiant .= ($identifiant ? '|' : '') . "{$conteneur['objet']}|{$conteneur['id_objet']}";
    580                         }
    581                 }
    582         }
    583 
    584         return $identifiant;
     648                // Le nom du squelette en premier si il existe (normalement toujours).
     649                if (!empty($conteneur['squelette'])) {
     650                        $id_conteneur .= $conteneur['squelette'];
     651                }
     652                // L'objet et son id si on est en présence d'un objet.
     653                if (!empty($conteneur['objet']) and !empty($conteneur['id_objet']) and intval($conteneur['id_objet'])) {
     654                        $id_conteneur .= ($id_conteneur ? '|' : '') . "{$conteneur['objet']}|{$conteneur['id_objet']}";
     655                }
     656        }
     657
     658        return $id_conteneur;
     659}
     660
     661/**
     662 * Reconstruit le conteneur sous forme de tableau à partir de son identifiant unique (fonction inverse
     663 * de `ncore_conteneur_identifier`).
     664 * N-Core ne fournit le conteneur pour les noisettes conteneur.
     665 * Pour les autres conteneurs, c'est au plugin utilisateur de calculer le tableau.
     666 *
     667 * @package SPIP\NOIZETIER\CONTENEUR\SERVICE
     668 *
     669 * @param string $plugin
     670 *        Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier ou
     671 *        un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe.
     672 * @param string $id_conteneur
     673 *        Identifiant unique du conteneur. Si l'id correspond à une noisette conteneur le traitement sera fait
     674 *        par N-Core, sinon par le plugin utilisateur
     675 * @param string $stockage
     676 *        Identifiant du service de stockage à utiliser si précisé.
     677 *
     678 * @return array
     679 *        Tableau représentatif du conteneur ou tableau vide en cas d'erreur.
     680 */
     681function noizetier_conteneur_construire($plugin, $id_conteneur, $stockage = '') {
     682
     683        // Il faut recomposer le tableau du conteneur à partir de son id.
     684        // N-Core s'occupe des noisettes conteneur; le noiZetier n'a donc plus qu'à traiter les autres conteneur,
     685        // à savoir ses conteneurs spécifiques.
     686        $conteneur = array();
     687        if ($id_conteneur) {
     688                $elements = explode('|', $id_conteneur);
     689                if (count($elements) == 1) {
     690                        // C'est une page ou une composition : seul l'index squelette est positionné.
     691                        $conteneur['squelette'] = $id_conteneur;
     692                } elseif (count($elements) == 3) {
     693                        // C'est un objet
     694                        // -- le type d'objet et son id
     695                        $conteneur['objet'] = $elements[1];
     696                        $conteneur['id_objet'] = $elements[2];
     697                        // -- le squelette
     698                        $conteneur['squelette'] = $elements[0];
     699                }
     700        }
     701
     702        return $conteneur;
    585703}
    586704
  • _plugins_/noizetier/trunk/noizetier_administrations.php

    r112726 r112848  
    129129        sql_alter("TABLE spip_noisettes ADD plugin varchar(30) DEFAULT '' NOT NULL AFTER id_noisette");
    130130        sql_alter("TABLE spip_noisettes ADD id_conteneur varchar(255) DEFAULT '' NOT NULL AFTER plugin");
     131        sql_alter("TABLE spip_noisettes ADD conteneur text DEFAULT '' NOT NULL AFTER id_conteneur");
    131132        sql_alter("TABLE spip_noisettes ADD est_conteneur varchar(3) DEFAULT 'non' NOT NULL AFTER type_noisette");
    132133        sql_alter("TABLE spip_noisettes ADD encapsulation varchar(6) DEFAULT 'defaut' NOT NULL AFTER parametres");
     
    154155        sql_alter("TABLE spip_noisettes ADD INDEX rang_noisette (rang_noisette)");
    155156        // -- Remplissage de la nouvelle colonne plugin avec la valeur 'noizetier'
    156         //    et de la colonne id_conteneur à partir des autres colonnes existantes.
     157        //    et des colonnes id_conteneur et conteneur à partir des autres colonnes existantes.
    157158        $select = array('id_noisette', 'type', 'composition', 'objet', 'id_objet', 'bloc');
    158159        $from = 'spip_noisettes';
     
    165166                        // On calcule le conteneur au format tableau et on appelle la fonction de service de construction
    166167                        // de l'id du conteneur
     168                        // TODO : utiliser la fonction composer_conteneur
    167169                        $conteneur = array();
    168170                        if (!empty($_noisette['objet']) and !empty($_noisette['id_objet']) and intval($_noisette['id_objet'])) {
     
    175177                                $conteneur['squelette'] = "{$_noisette['bloc']}/${page}";
    176178                        }
     179                        $noisettes[$_cle]['conteneur'] = serialize($conteneur);
    177180                        $noisettes[$_cle]['id_conteneur'] = noizetier_conteneur_identifier('noizetier', $conteneur);
    178181                }
  • _plugins_/noizetier/trunk/paquet.xml

    r112827 r112848  
    22        prefix="noizetier"
    33        categorie="maintenance"
    4         version="3.0.37"
     4        version="3.0.38"
    55        etat="dev"
    66        compatibilite="[3.0.0;3.2.*]"
     
    4040        <pipeline nom="insert_head" action="insert_head_css" inclure="noizetier_pipelines.php" />
    4141
    42         <necessite nom="ncore" compatibilite="[0.5.5;[" />
     42        <necessite nom="ncore" compatibilite="[0.5.9;[" />
    4343        <necessite nom="saisies" compatibilite="[2.2.3;[" />
    4444        <necessite nom="verifier" compatibilite="[1.0.5;[" />
Note: See TracChangeset for help on using the changeset viewer.