Changeset 103211 in spip-zone


Ignore:
Timestamp:
Mar 9, 2017, 3:39:28 PM (3 years ago)
Author:
teddy.spip@…
Message:

Comme discuté sur IRC, évolution de cette fonction pour permettre l'ajout d'un 'a' devant la chaine de caractères nettoyée pour avoir une chaine compatible pour les identifiants de tag.

  • simplification de trim.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/spip-bonux-3/spip_bonux_fonctions.php

    r103210 r103211  
    2121 * @param string $alt
    2222 * @param string $class
     23 *
    2324 * @return string
    2425 */
     
    2930}
    3031
    31 if (!defined('_PREVISU_TEMPORAIRE_VALIDITE')) define('_PREVISU_TEMPORAIRE_VALIDITE', 12);
     32if (!defined('_PREVISU_TEMPORAIRE_VALIDITE')) {
     33        define('_PREVISU_TEMPORAIRE_VALIDITE', 12);
     34}
    3235
    3336function previsu_verifier_cle_temporaire($cle) {
     
    5356
    5457        $url = self();
    55         $cle = md5($url.$date.secret_du_site());
     58        $cle = md5($url . $date . secret_du_site());
    5659
    5760        return $cle;
     
    5962
    6063if (!function_exists('push_table_valeur')) {
    61 /**
    62  * Filtre ajoutant une valeur à la fin d'une liste, possiblement dans une clé d'un tableau (comme table_valeur()).
    63  *
    64  * Attention, cette fonction est bien un "push", c'est-à-dire qu'elle ajoute un élément à la fin d'une liste.
    65  *
    66  * `#TABLEAU|push_table_valeur{a/b/c, valeur, #CONDITION}`
    67  * - si la clé "c" est une liste : on ajoute "valeur" à la fin
    68  * - si la clé "c" n'existe pas : on crée une liste et on met la première valeur dedans
    69  * - si la clé "c" est un scalaire : on ne fait rien
    70  * - si les clés autres que la dernière n'existent pas : on en fait des tableaux en cascade
    71  *
    72  * @see table_valeur
    73  * @filtre
    74  * @param array|object|string $table
    75  *     Table ou objet dont on veut modifier ou augmenter une des clés/propriétés. Peut être une chaîne à désérialiser contenant ce tableau ou cet objet.
    76  * @param string $chemin
    77  *     Une suite de clés ou de propriétés d'objet, séparées par le caractère "/" : un/element/ici
    78  * @param mixed $valeur
    79  *     Une valeur à ajouter au paramètre précédent.
    80  * @param mixed $condition=true
    81  *     Une valeur quelconque qui sera testée de manière booléenne pour savoir si on fait le traitement ou pas.
    82  *     Cela allège l'écriture si l'ajout de valeur ne doit se faire que sous condition, notamment que s'il y a une valeur à ajouter.
    83  * @param string $cle_finale
    84  *     Une clé dans laquelle placer la valeur si précisée
    85  * @return array|object
    86  *     Retourne le tableau ou l'objet initial, modifié suivant les paramètres.
    87  */
    88 function push_table_valeur($table, $chemin, $valeur, $condition = true, $cle_finale = false) {
    89         // Si la condition est fausse, on ne fait rien du tout
    90         if ($condition) {
    91                 $table = is_string($table) ? @unserialize($table) : $table;
    92                 $element_a_modifier =& $table;
     64        /**
     65         * Filtre ajoutant une valeur à la fin d'une liste, possiblement dans une clé d'un tableau (comme table_valeur()).
     66         *
     67         * Attention, cette fonction est bien un "push", c'est-à-dire qu'elle ajoute un élément à la fin d'une liste.
     68         *
     69         * `#TABLEAU|push_table_valeur{a/b/c, valeur, #CONDITION}`
     70         * - si la clé "c" est une liste : on ajoute "valeur" à la fin
     71         * - si la clé "c" n'existe pas : on crée une liste et on met la première valeur dedans
     72         * - si la clé "c" est un scalaire : on ne fait rien
     73         * - si les clés autres que la dernière n'existent pas : on en fait des tableaux en cascade
     74         *
     75         * @see table_valeur
     76         * @filtre
     77         *
     78         * @param array|object|string $table
     79         *                         Table ou objet dont on veut modifier ou augmenter une des clés/propriétés. Peut être une chaîne à désérialiser contenant ce tableau ou cet objet.
     80         * @param string $chemin
     81         *                         Une suite de clés ou de propriétés d'objet, séparées par le caractère "/" : un/element/ici
     82         * @param mixed $valeur
     83         *                         Une valeur à ajouter au paramètre précédent.
     84         * @param mixed $condition =true
     85         *                         Une valeur quelconque qui sera testée de manière booléenne pour savoir si on fait le traitement ou pas.
     86         *                         Cela allège l'écriture si l'ajout de valeur ne doit se faire que sous condition, notamment que s'il y a une valeur à ajouter.
     87         * @param string $cle_finale
     88         *                         Une clé dans laquelle placer la valeur si précisée
     89         *
     90         * @return array|object
     91         *     Retourne le tableau ou l'objet initial, modifié suivant les paramètres.
     92         */
     93        function push_table_valeur($table, $chemin, $valeur, $condition = true, $cle_finale = false) {
     94                // Si la condition est fausse, on ne fait rien du tout
     95                if ($condition) {
     96                        $table = is_string($table) ? @unserialize($table) : $table;
     97                        $element_a_modifier =& $table;
    9398
    94                 // S'il y a un emplacement donné, on cherche si c'est un tableau
    95                 if ($chemin and is_string($chemin) and $chemin = explode('/', $chemin) and is_array($chemin)) {
    96                         $i = 0;
    97                         foreach ($chemin as $cle) {
    98                                 $i += 1;
    99                                 // On ne fait que s'il la clé vaut quelque chose
    100                                 if ($cle !== '') {
    101                                         // Si c'est un tableau, on vérifie si la clé existe
    102                                         if (is_array($element_a_modifier)) {
    103                                                 // Si la clé n'existe pas : on met un tableau vide qui se remplira
    104                                                 if (!isset($element_a_modifier[$cle])) {
    105                                                         $element_a_modifier[$cle] = array();
     99                        // S'il y a un emplacement donné, on cherche si c'est un tableau
     100                        if ($chemin and is_string($chemin) and $chemin = explode('/', $chemin) and is_array($chemin)) {
     101                                $i = 0;
     102                                foreach ($chemin as $cle) {
     103                                        $i += 1;
     104                                        // On ne fait que s'il la clé vaut quelque chose
     105                                        if ($cle !== '') {
     106                                                // Si c'est un tableau, on vérifie si la clé existe
     107                                                if (is_array($element_a_modifier)) {
     108                                                        // Si la clé n'existe pas : on met un tableau vide qui se remplira
     109                                                        if (!isset($element_a_modifier[$cle])) {
     110                                                                $element_a_modifier[$cle] = array();
     111                                                        }
     112                                                        $element_a_modifier =& $element_a_modifier[$cle];
     113                                                } elseif (is_object($element_a_modifier)) {
     114                                                        // Si c'est un objet on vérifie si la propriété existe
     115                                                        // Si la propriété n'existe pas : on met un tableau vide qui se remplira
     116                                                        if (!isset($element_a_modifier->$cle)) {
     117                                                                $element_a_modifier->$cle = array();
     118                                                        }
     119                                                        $element_a_modifier =& $element_a_modifier->$cle;
    106120                                                }
    107                                                 $element_a_modifier =& $element_a_modifier[$cle];
    108                                         } elseif (is_object($element_a_modifier)) {
    109                                                 // Si c'est un objet on vérifie si la propriété existe
    110                                                 // Si la propriété n'existe pas : on met un tableau vide qui se remplira
    111                                                 if (!isset($element_a_modifier->$cle)) {
    112                                                         $element_a_modifier->$cle = array();
    113                                                 }
    114                                                 $element_a_modifier =& $element_a_modifier->$cle;
    115121                                        }
    116122                                }
    117123                        }
     124
     125                        // Maintenant on est au bon endroit de ce qu'on veut modifier :
     126
     127                        // Si l'élément à modifier est bien un tableau : on push la valeur dedans
     128                        if (is_array($element_a_modifier)) {
     129                                if ($cle_finale and is_string($cle_finale)) {
     130                                        $element_a_modifier[$cle_finale] = $valeur;
     131                                } else {
     132                                        array_push($element_a_modifier, $valeur);
     133                                }
     134                        }
     135                        // Sinon (si c'est un scalaire) on ne fait rien et il faudra utiliser set_table_valeur() par exemple
    118136                }
    119137
    120                 // Maintenant on est au bon endroit de ce qu'on veut modifier :
    121 
    122                 // Si l'élément à modifier est bien un tableau : on push la valeur dedans
    123                 if (is_array($element_a_modifier)) {
    124                         if ($cle_finale and is_string($cle_finale)) {
    125                                 $element_a_modifier[$cle_finale] = $valeur;
    126                         } else {
    127                                 array_push($element_a_modifier, $valeur);
    128                         }
    129                 }
    130                 // Sinon (si c'est un scalaire) on ne fait rien et il faudra utiliser set_table_valeur() par exemple
     138                return $table;
    131139        }
    132 
    133         return $table;
    134 }
    135140}
    136141
     
    144149         * @return string
    145150         */
    146         function slug($subject, $separateur = '_') {
     151        function slug($texte, $type = '', $separateur = '_') {
    147152                include_spip('inc/charsets');
    148                 $nom_tmp = trim($subject); // On enlève les espaces indésirables
     153                $nom_tmp = trim($texte); // On enlève les espaces indésirables
    149154                $nom_tmp = translitteration($nom_tmp); // On enlève les accents et cie
    150155                $nom_tmp = preg_replace(",\W,", $separateur, $nom_tmp); // On enlève les espaces et les slashs
    151156                $nom_tmp = preg_replace("/(" . $separateur . "+)/", $separateur, $nom_tmp); // pas de double underscores
    152                 if (preg_match("/" . $separateur . "$/", $nom_tmp)) {
    153                         $nom_tmp = trim($nom_tmp, $separateur); // On ne doit pas terminer par le séparateur
    154                 }
     157                $nom_tmp = rtrim($nom_tmp, $separateur); // On ne doit pas terminer par le séparateur
    155158                $nom_tmp = preg_replace("/'/", $separateur, $nom_tmp); // pas d'apostrophes
    156159                $nom_tmp = strtolower($nom_tmp); // On met en minuscules
     160
     161                if ($type === 'css' and preg_match(',^\d,', $nom_tmp)) {
     162                        $nom_tmp = "a$nom_tmp";
     163                }
    157164
    158165                return $nom_tmp;
Note: See TracChangeset for help on using the changeset viewer.