Changeset 112835 in spip-zone for _plugins_/n-core
- Timestamp:
- Dec 16, 2018, 1:59:07 PM (2 years ago)
- Location:
- _plugins_/n-core/trunk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
_plugins_/n-core/trunk/inc/ncore_noisette.php
r112825 r112835 67 67 include_spip('ncore/ncore'); 68 68 69 // On initialise la description de la noisette à ajouter et en particulier on stocke l'id du conteneur 70 // pour simplifier les traitements par la suite. 71 $description = array( 72 'plugin' => $plugin, 73 'type_noisette' => $type_noisette, 74 'conteneur' => serialize($conteneur), 75 'id_conteneur' => ncore_conteneur_identifier($plugin, $conteneur, $stockage), 76 'rang_noisette' => intval($rang), 77 'est_conteneur' => type_noisette_lire($plugin, $type_noisette, 'conteneur', false, $stockage), 78 'parametres' => serialize($parametres), 79 'encapsulation' => 'defaut', 80 'css' => '' 81 ); 82 83 // Mise à jour de la description pour les noisettes conteneur: 84 // -- pas de div englobante. 85 if ($description['est_conteneur'] == 'oui') { 86 $description['encapsulation'] = 'non'; 87 } 88 89 // Complément à la description par défaut, spécifique au plugin utilisateur, si nécessaire. 90 $description = ncore_noisette_completer($plugin, $description, $stockage); 91 92 // On récupère les noisettes déjà affectées au conteneur sous la forme d'un tableau indexé 93 // par le rang de chaque noisette. 94 $noisettes = ncore_noisette_lister($plugin, $conteneur, '', 'rang_noisette', $stockage); 95 96 // On calcule le rang max déjà utilisé. 97 $rang_max = $noisettes ? max(array_keys($noisettes)) : 0; 98 99 if (!$rang or ($rang and ($rang > $rang_max))) { 100 // Si, le rang est nul ou si il est strictement supérieur au rang_max, on positionne la noisette 101 // à ajouter au rang max + 1. 102 // En effet, si le rang est supérieur au rang max c'est que la nouvelle noisette est ajoutée 103 // après les noisettes existantes, donc cela revient à insérer la noisette en fin de liste. 104 // Postionner le rang à max + 1 permet d'éviter d'avoir des trous dans la liste des rangs. 105 $description['rang_noisette'] = $rang_max + 1; 106 } else { 107 // Si le rang est non nul et inférieur ou égal au rang max c'est qu'on insère la noisette dans la liste 108 // existante : il faut décaler d'un rang les noisettes de rang supérieur ou égal si elle existent pour 109 // libérer la position de la nouvelle noisette. 110 if ($rang <= $rang_max) { 111 krsort($noisettes); 112 foreach ($noisettes as $_rang => $_description) { 113 if ($_rang >= $rang) { 114 ncore_noisette_ranger($plugin, $_description, $_rang + 1, $stockage); 69 // On initialise la description de la noisette à ajouter et en particulier on stocke le tableau et l'id du 70 // conteneur pour simplifier les traitements par la suite. 71 // -- Vérification des index du conteneur. 72 $conteneur = ncore_conteneur_verifier($plugin, $conteneur, $stockage); 73 if ($conteneur) { 74 // -- Calculer l'identifiant du conteneur 75 $id_conteneur = ncore_conteneur_identifier($plugin, $conteneur, $stockage); 76 // -- Initialisation par défaut 77 $description = array( 78 'plugin' => $plugin, 79 'type_noisette' => $type_noisette, 80 'conteneur' => serialize($conteneur), 81 'id_conteneur' => $id_conteneur, 82 'rang_noisette' => intval($rang), 83 'est_conteneur' => type_noisette_lire($plugin, $type_noisette, 'conteneur', false, $stockage), 84 'parametres' => serialize($parametres), 85 'encapsulation' => 'defaut', 86 'css' => '' 87 ); 88 // -- Pour les noisettes conteneur pas de capsule englobante. 89 if ($description['est_conteneur'] == 'oui') { 90 $description['encapsulation'] = 'non'; 91 } 92 93 // Complément à la description par défaut, spécifique au plugin utilisateur, si nécessaire. 94 $description = ncore_noisette_completer($plugin, $description, $stockage); 95 96 // On récupère les noisettes déjà affectées au conteneur sous la forme d'un tableau indexé 97 // par le rang de chaque noisette. 98 $noisettes = ncore_noisette_lister($plugin, $id_conteneur, '', 'rang_noisette', $stockage); 99 100 // On calcule le rang max déjà utilisé. 101 $rang_max = $noisettes ? max(array_keys($noisettes)) : 0; 102 103 if (!$rang or ($rang and ($rang > $rang_max))) { 104 // Si, le rang est nul ou si il est strictement supérieur au rang_max, on positionne la noisette 105 // à ajouter au rang max + 1. 106 // En effet, si le rang est supérieur au rang max c'est que la nouvelle noisette est ajoutée 107 // après les noisettes existantes, donc cela revient à insérer la noisette en fin de liste. 108 // Postionner le rang à max + 1 permet d'éviter d'avoir des trous dans la liste des rangs. 109 $description['rang_noisette'] = $rang_max + 1; 110 } else { 111 // Si le rang est non nul et inférieur ou égal au rang max c'est qu'on insère la noisette dans la liste 112 // existante : il faut décaler d'un rang les noisettes de rang supérieur ou égal si elle existent pour 113 // libérer la position de la nouvelle noisette. 114 if ($rang <= $rang_max) { 115 krsort($noisettes); 116 foreach ($noisettes as $_rang => $_description) { 117 if ($_rang >= $rang) { 118 ncore_noisette_ranger($plugin, $_description, $_rang + 1, $stockage); 119 } 115 120 } 116 121 } 117 122 } 118 } 119 120 // La description de la nouvelle noisette est prête à être stockée à sa position.121 $noisette_ajoutee = ncore_noisette_stocker($plugin, $description, $stockage);123 124 // La description de la nouvelle noisette est prête à être stockée à sa position. 125 $noisette_ajoutee = ncore_noisette_stocker($plugin, $description, $stockage); 126 } 122 127 } 123 128 -
_plugins_/n-core/trunk/ncore/ncore.php
r112830 r112835 782 782 783 783 /** 784 * Vérifier la conformité des index du tableau représentant le conteneur et les adapte éventuellement. 785 * N-Core vérifie que pour les noisettes conteneur les seuls index sont le type et l'id de la noisette. 786 * Pour les autres conteneurs, c'est au plugin utilisateur de vérifier le conteneur. 787 * 788 * @package SPIP\NCORE\CONTENEUR\SERVICE 789 * 790 * @uses ncore_chercher_service() 791 * 792 * @param string $plugin 793 * Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier ou 794 * un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe. 795 * @param array $conteneur 796 * Tableau associatif descriptif du conteneur dont les index doivent être vérifiés. 797 * @param string $stockage 798 * Identifiant du service de stockage à utiliser si précisé. 799 * 800 * @return array 801 * Tableau du conteneur dont tous les index sont conformes ou tableau vide si non conforme. 802 */ 803 function ncore_conteneur_verifier($plugin, $conteneur, $stockage = '') { 804 805 static $index_conteneur_noisette = array('type_noisette', 'id_noisette'); 806 807 // N-Core ne vérifie pas les conteneurs spécifiques aux plugins utilisateur 808 // sauf pour les noisettes conteneur qui ne sont déterminées que par leur type et leur id. 809 // Il est donc indispensable que le plugin utilisateur propose toujours une fonction de vérification 810 // pour les conteneurs hors noisette conteneur. 811 $conteneur_verifie = array(); 812 if ($conteneur) { 813 if (isset($conteneur['type_noisette'], $conteneur['id_noisette']) 814 and $conteneur['type_noisette'] 815 and intval($conteneur['id_noisette'])) { 816 // Le conteneur est une noisette, N-Core effectue le filtre des index. 817 $conteneur = array_intersect_key($conteneur, array_flip($index_conteneur_noisette)); 818 if (count($conteneur) == 2) { 819 $conteneur_verifie = $conteneur; 820 } 821 } else { 822 // Le conteneur est spécifique au plugin utilisateur, c'est donc au plugin faire la vérification des index. 823 include_spip('inc/ncore_utils'); 824 if ($verifier = ncore_chercher_service($plugin, 'conteneur_verifier', $stockage)) { 825 $conteneur_verifie = $verifier($plugin, $conteneur); 826 } 827 } 828 } 829 830 return $conteneur_verifie; 831 } 832 833 /** 784 834 * Construit un identifiant unique pour le conteneur sous forme de chaine. 785 * Cette fonction est juste un aiguillage vers la fonction éventuelle du plugin utilisateur786 * car N-Core ne fournit pas de calcul par défaut.835 * N-Core ne fournit d'identifiant que pour les noisettes conteneur. 836 * Pour les autres conteneurs, c'est au plugin utilisateur de calculer l'identifiant. 787 837 * 788 838 * @package SPIP\NCORE\CONTENEUR\SERVICE … … 794 844 * un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe. 795 845 * @param array $conteneur 796 * Tableau associatif descriptif du conteneur accueillant la noisette. Un conteneur peut-être un squelette seul 797 * ou associé à un contexte d'utilisation et dans ce cas il possède un index `squelette` ou un objet quelconque 798 * sans lien avec un squelette. Dans tous les cas, les index, à l'exception de `squelette`, sont spécifiques 799 * à l'utilisation qui en est faite par le plugin. 846 * Tableau associatif descriptif du conteneur. Les index sont spécifiques à l'utilisation qui en est faite 847 * par le plugin utilisateur. Néanmoins, pour une noisette conteneur, le tableau est limité aux index 848 * type de noisette et id de noisette. 800 849 * @param string $stockage 801 850 * Identifiant du service de stockage à utiliser si précisé. … … 807 856 808 857 // Il faut calculer l'identifiant du conteneur pour accéder à la bonne liste de noisettes. 809 // N-Core ne propose pas de fonction par défaut car l'élaboration de l'identifiant est totalement spécifique810 // au plugin utilisateur.811 // Il est donc indispensable que le plugin utilisateur propose toujours une fonction de calcul de l'identifiant .812 // TODO : ne faudrait-il pas calculer automatiquement l'id pour une noisette conteneur ?858 // N-Core ne propose pas de fonction par défaut pour les conteneurs spécifiques aux plugins utilisateur 859 // sauf pour les noisettes conteneur car elles ne sont déterminées que par leur type et leur id. 860 // Il est donc indispensable que le plugin utilisateur propose toujours une fonction de calcul de l'identifiant 861 // pour les conteneurs hors noisette conteneur. 813 862 $id_conteneur = ''; 814 863 if ($conteneur) { 815 include_spip('inc/ncore_utils'); 816 if ($identifier = ncore_chercher_service($plugin, 'conteneur_identifier', $stockage)) { 817 // On passe le plugin appelant à la fonction car cela permet ainsi de mutualiser les services de stockage. 818 $id_conteneur = $identifier($plugin, $conteneur); 864 if (isset($conteneur['type_noisette'], $conteneur['id_noisette']) 865 and $conteneur['type_noisette'] 866 and intval($conteneur['id_noisette'])) { 867 // Le conteneur est une noisette, N-Core effectue le calcul de l'id. 868 $id_conteneur = $conteneur['type_noisette'] . '|noisette|' . $conteneur['id_noisette']; 869 } else { 870 // Le conteneur est spécifique au plugin utilisateur, c'est donc au plugin de le calculer. 871 include_spip('inc/ncore_utils'); 872 if ($identifier = ncore_chercher_service($plugin, 'conteneur_identifier', $stockage)) { 873 $id_conteneur = $identifier($plugin, $conteneur); 874 } 819 875 } 820 876 } -
_plugins_/n-core/trunk/paquet.xml
r112829 r112835 2 2 prefix="ncore" 3 3 categorie="outil" 4 version="0.5. 6"4 version="0.5.7" 5 5 etat="dev" 6 6 compatibilite="[3.2.0;3.2.*]"
Note: See TracChangeset
for help on using the changeset viewer.