| 1 | <?php |
|---|
| 2 | /** |
|---|
| 3 | * Plugin Spip-Bonux |
|---|
| 4 | * Le plugin qui lave plus SPIP que SPIP |
|---|
| 5 | * (c) 2008 Mathieu Marcillaud, Cedric Morin, Romy Tetue |
|---|
| 6 | * Licence GPL |
|---|
| 7 | * |
|---|
| 8 | */ |
|---|
| 9 | |
|---|
| 10 | /** |
|---|
| 11 | * une fonction qui regarde si $texte est une chaine de langue |
|---|
| 12 | * de la forme <:qqch:> |
|---|
| 13 | * si oui applique _T() |
|---|
| 14 | * si non applique typo() suivant le mode choisi |
|---|
| 15 | * |
|---|
| 16 | * @param unknown_type $valeur Une valeur à tester. Si c'est un tableau, la fonction s'appliquera récursivement dessus. |
|---|
| 17 | * @param string $mode_typo Le mode d'application de la fonction typo(), avec trois valeurs possibles "toujours", "jamais" ou "multi". |
|---|
| 18 | * @return unknown_type Retourne la valeur éventuellement modifiée. |
|---|
| 19 | */ |
|---|
| 20 | function _T_ou_typo($valeur, $mode_typo='toujours') { |
|---|
| 21 | |
|---|
| 22 | // Si la valeur est bien une chaine (et pas non plus un entier déguisé) |
|---|
| 23 | if (is_string($valeur) and !intval($valeur)){ |
|---|
| 24 | // Si la chaine est du type <:truc:> on passe à _T() |
|---|
| 25 | if (preg_match('/^\<:(.*?):\>$/', $valeur, $match)) |
|---|
| 26 | $valeur = _T($match[1]); |
|---|
| 27 | // Sinon on la passe a typo() |
|---|
| 28 | else { |
|---|
| 29 | if (!in_array($mode_typo, array('toujours', 'multi', 'jamais'))) |
|---|
| 30 | $mode_typo = 'toujours'; |
|---|
| 31 | |
|---|
| 32 | if ($mode_typo == 'toujours' or ($mode_typo == 'multi' and strpos($valeur, '<multi>') !== false)){ |
|---|
| 33 | include_spip('inc/texte'); |
|---|
| 34 | $valeur = typo($valeur); |
|---|
| 35 | } |
|---|
| 36 | } |
|---|
| 37 | } |
|---|
| 38 | // Si c'est un tableau, on reapplique la fonction récursivement |
|---|
| 39 | elseif (is_array($valeur)){ |
|---|
| 40 | foreach ($valeur as $cle => $valeur2){ |
|---|
| 41 | $valeur[$cle] = _T_ou_typo($valeur2, $mode_typo); |
|---|
| 42 | } |
|---|
| 43 | } |
|---|
| 44 | |
|---|
| 45 | return $valeur; |
|---|
| 46 | |
|---|
| 47 | } |
|---|
| 48 | |
|---|
| 49 | /* |
|---|
| 50 | * InsÚre toutes les valeurs du tableau $arr2 aprÚs (ou avant) $cle dans le tableau $arr1. |
|---|
| 51 | * Si $cle n'est pas trouvé, les valeurs de $arr2 seront ajoutés à la fin de $arr1. |
|---|
| 52 | * |
|---|
| 53 | * La fonction garde autant que possible les associations entre les clés. Elle fonctionnera donc aussi bien |
|---|
| 54 | * avec des tableaux à index numérique que des tableaux associatifs. |
|---|
| 55 | * Attention tout de même, elle utilise array_merge() donc les valeurs de clés étant en conflits seront écrasées. |
|---|
| 56 | * |
|---|
| 57 | * @param array $arr1 Tableau dans lequel se fera l'insertion |
|---|
| 58 | * @param unknown_type $cle Clé de $arr1 aprÚs (ou avant) laquelle se fera l'insertion |
|---|
| 59 | * @param array $arr2 Tableau contenant les valeurs à insérer |
|---|
| 60 | * @param bool $avant Indique si l'insertion se fait avant la clé (par défaut c'est aprÚs) |
|---|
| 61 | * @return array Retourne le tableau avec l'insertion |
|---|
| 62 | */ |
|---|
| 63 | function array_insert($arr1, $cle, $arr2, $avant=false){ |
|---|
| 64 | $index = array_search($cle, array_keys($arr1)); |
|---|
| 65 | if($index === false){ |
|---|
| 66 | $index = count($arr1); // insert @ end of array if $key not found |
|---|
| 67 | } |
|---|
| 68 | else { |
|---|
| 69 | if(!$avant){ |
|---|
| 70 | $index++; |
|---|
| 71 | } |
|---|
| 72 | } |
|---|
| 73 | $fin = array_splice($arr1, $index); |
|---|
| 74 | return array_merge($arr1, $arr2, $fin); |
|---|
| 75 | } |
|---|
| 76 | |
|---|
| 77 | /* |
|---|
| 78 | * Une fonction extrêmement pratique, mais qui n'est disponible qu'à partir de PHP 5.3 ! |
|---|
| 79 | * cf. http://www.php.net/manual/fr/function.array-replace-recursive.php |
|---|
| 80 | */ |
|---|
| 81 | if (!function_exists('array_replace_recursive')){ |
|---|
| 82 | function array_replace_recursive($array, $array1){ |
|---|
| 83 | function recurse($array, $array1){ |
|---|
| 84 | foreach ($array1 as $key => $value){ |
|---|
| 85 | // create new key in $array, if it is empty or not an array |
|---|
| 86 | if (!isset($array[$key]) || (isset($array[$key]) && !is_array($array[$key]))) |
|---|
| 87 | $array[$key] = array(); |
|---|
| 88 | // overwrite the value in the base array |
|---|
| 89 | if (is_array($value)) |
|---|
| 90 | $value = recurse($array[$key], $value); |
|---|
| 91 | $array[$key] = $value; |
|---|
| 92 | } |
|---|
| 93 | return $array; |
|---|
| 94 | } |
|---|
| 95 | |
|---|
| 96 | // handle the arguments, merge one by one |
|---|
| 97 | $args = func_get_args(); |
|---|
| 98 | $array = $args[0]; |
|---|
| 99 | if (!is_array($array)) |
|---|
| 100 | return $array; |
|---|
| 101 | |
|---|
| 102 | for ($i = 1; $i < count($args); $i++) |
|---|
| 103 | if (is_array($args[$i])) |
|---|
| 104 | $array = recurse($array, $args[$i]); |
|---|
| 105 | |
|---|
| 106 | return $array; |
|---|
| 107 | } |
|---|
| 108 | } |
|---|
| 109 | |
|---|
| 110 | if (defined('_BONUX_STYLE')) |
|---|
| 111 | _chemin(_DIR_PLUGIN_SPIP_BONUX."spip21/"); |
|---|
| 112 | |
|---|
| 113 | ?> |
|---|