@@ -61,7 +61,7 @@ discard block |
||
| 61 | 61 | supprime_invalideurs(); |
| 62 | 62 | @spip_unlink(_CACHE_RUBRIQUES); |
| 63 | 63 | @spip_unlink(_CACHE_CHEMIN); |
| 64 | - @spip_unlink(_DIR_TMP . "plugin_xml_cache.gz"); |
|
| 64 | + @spip_unlink(_DIR_TMP."plugin_xml_cache.gz"); |
|
| 65 | 65 | // on ne supprime que _CACHE_PLUGINS_OPT qui declenche la reconstruction des 3 |
| 66 | 66 | // _CACHE_PIPELINES _CACHE_PLUGINS_PATH et _CACHE_PLUGINS_FCT |
| 67 | 67 | // pour eviter des problemes de concurence |
@@ -72,8 +72,8 @@ discard block |
||
| 72 | 72 | @spip_unlink(_CACHE_PLUGINS_OPT); |
| 73 | 73 | purger_repertoire(_DIR_CACHE, array('subdir' => true)); |
| 74 | 74 | purger_repertoire(_DIR_AIDE); |
| 75 | - purger_repertoire(_DIR_VAR . 'cache-css'); |
|
| 76 | - purger_repertoire(_DIR_VAR . 'cache-js'); |
|
| 75 | + purger_repertoire(_DIR_VAR.'cache-css'); |
|
| 76 | + purger_repertoire(_DIR_VAR.'cache-js'); |
|
| 77 | 77 | break; |
| 78 | 78 | |
| 79 | 79 | case 'squelettes': |
@@ -81,10 +81,10 @@ discard block |
||
| 81 | 81 | break; |
| 82 | 82 | |
| 83 | 83 | case 'vignettes': |
| 84 | - purger_repertoire(_DIR_VAR . 'cache-gd2', array('subdir' => true)); |
|
| 85 | - purger_repertoire(_DIR_VAR . 'cache-texte', array('subdir' => true)); |
|
| 86 | - purger_repertoire(_DIR_VAR . 'cache-vignettes', array('subdir' => true)); |
|
| 87 | - purger_repertoire(_DIR_VAR . 'cache-TeX', array('subdir' => true)); |
|
| 84 | + purger_repertoire(_DIR_VAR.'cache-gd2', array('subdir' => true)); |
|
| 85 | + purger_repertoire(_DIR_VAR.'cache-texte', array('subdir' => true)); |
|
| 86 | + purger_repertoire(_DIR_VAR.'cache-vignettes', array('subdir' => true)); |
|
| 87 | + purger_repertoire(_DIR_VAR.'cache-TeX', array('subdir' => true)); |
|
| 88 | 88 | supprime_invalideurs(); |
| 89 | 89 | purger_repertoire(_DIR_CACHE, array('subdir' => true)); |
| 90 | 90 | break; |
@@ -16,7 +16,7 @@ discard block |
||
| 16 | 16 | * @package SPIP\Core\Cache |
| 17 | 17 | **/ |
| 18 | 18 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 19 | - return; |
|
| 19 | + return; |
|
| 20 | 20 | } |
| 21 | 21 | |
| 22 | 22 | /** |
@@ -39,57 +39,57 @@ discard block |
||
| 39 | 39 | * de l'action sécurisée. |
| 40 | 40 | */ |
| 41 | 41 | function action_purger_dist($arg = null) { |
| 42 | - if (is_null($arg)) { |
|
| 43 | - $securiser_action = charger_fonction('securiser_action', 'inc'); |
|
| 44 | - $arg = $securiser_action(); |
|
| 45 | - } |
|
| 42 | + if (is_null($arg)) { |
|
| 43 | + $securiser_action = charger_fonction('securiser_action', 'inc'); |
|
| 44 | + $arg = $securiser_action(); |
|
| 45 | + } |
|
| 46 | 46 | |
| 47 | - include_spip('inc/invalideur'); |
|
| 47 | + include_spip('inc/invalideur'); |
|
| 48 | 48 | |
| 49 | - spip_log("purger $arg"); |
|
| 49 | + spip_log("purger $arg"); |
|
| 50 | 50 | |
| 51 | - switch ($arg) { |
|
| 52 | - case 'inhibe_cache': |
|
| 53 | - // inhiber le cache pendant 24h |
|
| 54 | - ecrire_meta('cache_inhib', $_SERVER['REQUEST_TIME'] + 24 * 3600); |
|
| 55 | - break; |
|
| 56 | - case 'reactive_cache': |
|
| 57 | - effacer_meta('cache_inhib'); |
|
| 58 | - break; |
|
| 51 | + switch ($arg) { |
|
| 52 | + case 'inhibe_cache': |
|
| 53 | + // inhiber le cache pendant 24h |
|
| 54 | + ecrire_meta('cache_inhib', $_SERVER['REQUEST_TIME'] + 24 * 3600); |
|
| 55 | + break; |
|
| 56 | + case 'reactive_cache': |
|
| 57 | + effacer_meta('cache_inhib'); |
|
| 58 | + break; |
|
| 59 | 59 | |
| 60 | - case 'cache': |
|
| 61 | - supprime_invalideurs(); |
|
| 62 | - @spip_unlink(_CACHE_RUBRIQUES); |
|
| 63 | - @spip_unlink(_CACHE_CHEMIN); |
|
| 64 | - @spip_unlink(_DIR_TMP . "plugin_xml_cache.gz"); |
|
| 65 | - // on ne supprime que _CACHE_PLUGINS_OPT qui declenche la reconstruction des 3 |
|
| 66 | - // _CACHE_PIPELINES _CACHE_PLUGINS_PATH et _CACHE_PLUGINS_FCT |
|
| 67 | - // pour eviter des problemes de concurence |
|
| 68 | - // cf https://core.spip.net/issues/2989 |
|
| 69 | - //@spip_unlink(_CACHE_PIPELINES); |
|
| 70 | - //@spip_unlink(_CACHE_PLUGINS_PATH); |
|
| 71 | - //@spip_unlink(_CACHE_PLUGINS_FCT); |
|
| 72 | - @spip_unlink(_CACHE_PLUGINS_OPT); |
|
| 73 | - purger_repertoire(_DIR_CACHE, array('subdir' => true)); |
|
| 74 | - purger_repertoire(_DIR_AIDE); |
|
| 75 | - purger_repertoire(_DIR_VAR . 'cache-css'); |
|
| 76 | - purger_repertoire(_DIR_VAR . 'cache-js'); |
|
| 77 | - break; |
|
| 60 | + case 'cache': |
|
| 61 | + supprime_invalideurs(); |
|
| 62 | + @spip_unlink(_CACHE_RUBRIQUES); |
|
| 63 | + @spip_unlink(_CACHE_CHEMIN); |
|
| 64 | + @spip_unlink(_DIR_TMP . "plugin_xml_cache.gz"); |
|
| 65 | + // on ne supprime que _CACHE_PLUGINS_OPT qui declenche la reconstruction des 3 |
|
| 66 | + // _CACHE_PIPELINES _CACHE_PLUGINS_PATH et _CACHE_PLUGINS_FCT |
|
| 67 | + // pour eviter des problemes de concurence |
|
| 68 | + // cf https://core.spip.net/issues/2989 |
|
| 69 | + //@spip_unlink(_CACHE_PIPELINES); |
|
| 70 | + //@spip_unlink(_CACHE_PLUGINS_PATH); |
|
| 71 | + //@spip_unlink(_CACHE_PLUGINS_FCT); |
|
| 72 | + @spip_unlink(_CACHE_PLUGINS_OPT); |
|
| 73 | + purger_repertoire(_DIR_CACHE, array('subdir' => true)); |
|
| 74 | + purger_repertoire(_DIR_AIDE); |
|
| 75 | + purger_repertoire(_DIR_VAR . 'cache-css'); |
|
| 76 | + purger_repertoire(_DIR_VAR . 'cache-js'); |
|
| 77 | + break; |
|
| 78 | 78 | |
| 79 | - case 'squelettes': |
|
| 80 | - purger_repertoire(_DIR_SKELS); |
|
| 81 | - break; |
|
| 79 | + case 'squelettes': |
|
| 80 | + purger_repertoire(_DIR_SKELS); |
|
| 81 | + break; |
|
| 82 | 82 | |
| 83 | - case 'vignettes': |
|
| 84 | - purger_repertoire(_DIR_VAR . 'cache-gd2', array('subdir' => true)); |
|
| 85 | - purger_repertoire(_DIR_VAR . 'cache-texte', array('subdir' => true)); |
|
| 86 | - purger_repertoire(_DIR_VAR . 'cache-vignettes', array('subdir' => true)); |
|
| 87 | - purger_repertoire(_DIR_VAR . 'cache-TeX', array('subdir' => true)); |
|
| 88 | - supprime_invalideurs(); |
|
| 89 | - purger_repertoire(_DIR_CACHE, array('subdir' => true)); |
|
| 90 | - break; |
|
| 91 | - } |
|
| 83 | + case 'vignettes': |
|
| 84 | + purger_repertoire(_DIR_VAR . 'cache-gd2', array('subdir' => true)); |
|
| 85 | + purger_repertoire(_DIR_VAR . 'cache-texte', array('subdir' => true)); |
|
| 86 | + purger_repertoire(_DIR_VAR . 'cache-vignettes', array('subdir' => true)); |
|
| 87 | + purger_repertoire(_DIR_VAR . 'cache-TeX', array('subdir' => true)); |
|
| 88 | + supprime_invalideurs(); |
|
| 89 | + purger_repertoire(_DIR_CACHE, array('subdir' => true)); |
|
| 90 | + break; |
|
| 91 | + } |
|
| 92 | 92 | |
| 93 | - // le faire savoir aux plugins |
|
| 94 | - pipeline('trig_purger', $arg); |
|
| 93 | + // le faire savoir aux plugins |
|
| 94 | + pipeline('trig_purger', $arg); |
|
| 95 | 95 | } |
@@ -17,13 +17,13 @@ discard block |
||
| 17 | 17 | **/ |
| 18 | 18 | |
| 19 | 19 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 20 | - return; |
|
| 20 | + return; |
|
| 21 | 21 | } |
| 22 | 22 | |
| 23 | 23 | if (!defined('IMG_SVG')) { |
| 24 | - // complete IMG_BMP | IMG_GIF | IMG_JPG | IMG_PNG | IMG_WBMP | IMG_XPM | IMG_WEBP |
|
| 25 | - define('IMG_SVG',128); |
|
| 26 | - define('IMAGETYPE_SVG', 19); |
|
| 24 | + // complete IMG_BMP | IMG_GIF | IMG_JPG | IMG_PNG | IMG_WBMP | IMG_XPM | IMG_WEBP |
|
| 25 | + define('IMG_SVG',128); |
|
| 26 | + define('IMAGETYPE_SVG', 19); |
|
| 27 | 27 | } |
| 28 | 28 | |
| 29 | 29 | /** |
@@ -39,39 +39,39 @@ discard block |
||
| 39 | 39 | * false si on a pas pu charger l'image |
| 40 | 40 | */ |
| 41 | 41 | function svg_charger($fichier, $maxlen=null) { |
| 42 | - if (strpos($fichier, "data:image/svg+xml") === 0) { |
|
| 43 | - $image = explode(";", $fichier, 2); |
|
| 44 | - $image = end($image); |
|
| 45 | - if (strpos($image, "base64,") === 0) { |
|
| 46 | - $image = base64_decode(substr($image, 7)); |
|
| 47 | - } |
|
| 48 | - if (strpos($image, "<svg") !== false) { |
|
| 49 | - return $image; |
|
| 50 | - } |
|
| 51 | - // encodage inconnu ou autre format d'image ? |
|
| 52 | - return false; |
|
| 53 | - } |
|
| 54 | - // c'est peut etre deja une image svg ? |
|
| 55 | - if (strpos($fichier, "<svg") !== false) { |
|
| 56 | - return $fichier; |
|
| 57 | - } |
|
| 58 | - if (!file_exists($fichier)) { |
|
| 59 | - $fichier = supprimer_timestamp($fichier); |
|
| 60 | - if (!file_exists($fichier)) { |
|
| 61 | - return false; |
|
| 62 | - } |
|
| 63 | - } |
|
| 64 | - if (is_null($maxlen)) { |
|
| 65 | - $image = file_get_contents($fichier); |
|
| 66 | - } |
|
| 67 | - else { |
|
| 68 | - $image = file_get_contents($fichier, false,null,0, $maxlen); |
|
| 69 | - } |
|
| 70 | - // est-ce bien une image svg ? |
|
| 71 | - if (strpos($image, "<svg") !== false) { |
|
| 72 | - return $image; |
|
| 73 | - } |
|
| 74 | - return false; |
|
| 42 | + if (strpos($fichier, "data:image/svg+xml") === 0) { |
|
| 43 | + $image = explode(";", $fichier, 2); |
|
| 44 | + $image = end($image); |
|
| 45 | + if (strpos($image, "base64,") === 0) { |
|
| 46 | + $image = base64_decode(substr($image, 7)); |
|
| 47 | + } |
|
| 48 | + if (strpos($image, "<svg") !== false) { |
|
| 49 | + return $image; |
|
| 50 | + } |
|
| 51 | + // encodage inconnu ou autre format d'image ? |
|
| 52 | + return false; |
|
| 53 | + } |
|
| 54 | + // c'est peut etre deja une image svg ? |
|
| 55 | + if (strpos($fichier, "<svg") !== false) { |
|
| 56 | + return $fichier; |
|
| 57 | + } |
|
| 58 | + if (!file_exists($fichier)) { |
|
| 59 | + $fichier = supprimer_timestamp($fichier); |
|
| 60 | + if (!file_exists($fichier)) { |
|
| 61 | + return false; |
|
| 62 | + } |
|
| 63 | + } |
|
| 64 | + if (is_null($maxlen)) { |
|
| 65 | + $image = file_get_contents($fichier); |
|
| 66 | + } |
|
| 67 | + else { |
|
| 68 | + $image = file_get_contents($fichier, false,null,0, $maxlen); |
|
| 69 | + } |
|
| 70 | + // est-ce bien une image svg ? |
|
| 71 | + if (strpos($image, "<svg") !== false) { |
|
| 72 | + return $image; |
|
| 73 | + } |
|
| 74 | + return false; |
|
| 75 | 75 | } |
| 76 | 76 | |
| 77 | 77 | /** |
@@ -80,29 +80,29 @@ discard block |
||
| 80 | 80 | * @return array|bool |
| 81 | 81 | */ |
| 82 | 82 | function svg_lire_balise_svg($fichier) { |
| 83 | - if (!$debut_fichier = svg_charger($fichier, 4096)) { |
|
| 84 | - return false; |
|
| 85 | - } |
|
| 83 | + if (!$debut_fichier = svg_charger($fichier, 4096)) { |
|
| 84 | + return false; |
|
| 85 | + } |
|
| 86 | 86 | |
| 87 | - if (($ps = stripos($debut_fichier, "<svg")) !== false) { |
|
| 87 | + if (($ps = stripos($debut_fichier, "<svg")) !== false) { |
|
| 88 | 88 | |
| 89 | - $pe = stripos($debut_fichier, ">", $ps); |
|
| 90 | - $balise_svg = substr($debut_fichier, $ps, $pe - $ps +1); |
|
| 89 | + $pe = stripos($debut_fichier, ">", $ps); |
|
| 90 | + $balise_svg = substr($debut_fichier, $ps, $pe - $ps +1); |
|
| 91 | 91 | |
| 92 | - if (preg_match_all(",([\w:\-]+)=,Uims", $balise_svg, $matches)) { |
|
| 93 | - if (!function_exists('extraire_attribut')) { |
|
| 94 | - include_spip('inc/filtres'); |
|
| 95 | - } |
|
| 96 | - $attributs = []; |
|
| 97 | - foreach ($matches[1] as $att) { |
|
| 98 | - $attributs[$att] = extraire_attribut($balise_svg, $att); |
|
| 99 | - } |
|
| 92 | + if (preg_match_all(",([\w:\-]+)=,Uims", $balise_svg, $matches)) { |
|
| 93 | + if (!function_exists('extraire_attribut')) { |
|
| 94 | + include_spip('inc/filtres'); |
|
| 95 | + } |
|
| 96 | + $attributs = []; |
|
| 97 | + foreach ($matches[1] as $att) { |
|
| 98 | + $attributs[$att] = extraire_attribut($balise_svg, $att); |
|
| 99 | + } |
|
| 100 | 100 | |
| 101 | - return [$balise_svg, $attributs]; |
|
| 102 | - } |
|
| 103 | - } |
|
| 101 | + return [$balise_svg, $attributs]; |
|
| 102 | + } |
|
| 103 | + } |
|
| 104 | 104 | |
| 105 | - return false; |
|
| 105 | + return false; |
|
| 106 | 106 | } |
| 107 | 107 | |
| 108 | 108 | /** |
@@ -112,12 +112,12 @@ discard block |
||
| 112 | 112 | */ |
| 113 | 113 | function svg_lire_attributs($img) { |
| 114 | 114 | |
| 115 | - if ($svg_infos = svg_lire_balise_svg($img)) { |
|
| 116 | - list($balise_svg, $attributs) = $svg_infos; |
|
| 117 | - return $attributs; |
|
| 118 | - } |
|
| 115 | + if ($svg_infos = svg_lire_balise_svg($img)) { |
|
| 116 | + list($balise_svg, $attributs) = $svg_infos; |
|
| 117 | + return $attributs; |
|
| 118 | + } |
|
| 119 | 119 | |
| 120 | - return false; |
|
| 120 | + return false; |
|
| 121 | 121 | } |
| 122 | 122 | |
| 123 | 123 | /** |
@@ -127,38 +127,38 @@ discard block |
||
| 127 | 127 | * @return bool|float|int |
| 128 | 128 | */ |
| 129 | 129 | function svg_dimension_to_pixels($dimension, $precision = 2) { |
| 130 | - if (preg_match(',^(-?\d+(\.\d+)?)([^\d]*),i', trim($dimension), $m)){ |
|
| 131 | - switch (strtolower($m[2])) { |
|
| 132 | - case '%': |
|
| 133 | - // on ne sait pas faire :( |
|
| 134 | - return false; |
|
| 135 | - break; |
|
| 136 | - case 'em': |
|
| 137 | - return round($m[1]*16, $precision); // 16px font-size par defaut |
|
| 138 | - break; |
|
| 139 | - case 'ex': |
|
| 140 | - return round($m[1]*16, $precision); // 16px font-size par defaut |
|
| 141 | - break; |
|
| 142 | - case 'pc': |
|
| 143 | - return round($m[1]*16, $precision); // 1/6 inch = 96px/6 in CSS |
|
| 144 | - break; |
|
| 145 | - case 'cm': |
|
| 146 | - return round($m[1]*96/2.54, $precision); // 96px / 2.54cm; |
|
| 147 | - break; |
|
| 148 | - case 'mm': |
|
| 149 | - return round($m[1]*96/25.4, $precision); // 96px / 25.4mm; |
|
| 150 | - break; |
|
| 151 | - case 'in': |
|
| 152 | - return round($m[1]*96, $precision); // 1 inch = 96px in CSS |
|
| 153 | - break; |
|
| 154 | - case 'px': |
|
| 155 | - case 'pt': |
|
| 156 | - default: |
|
| 157 | - return $m[1]; |
|
| 158 | - break; |
|
| 159 | - } |
|
| 160 | - } |
|
| 161 | - return false; |
|
| 130 | + if (preg_match(',^(-?\d+(\.\d+)?)([^\d]*),i', trim($dimension), $m)){ |
|
| 131 | + switch (strtolower($m[2])) { |
|
| 132 | + case '%': |
|
| 133 | + // on ne sait pas faire :( |
|
| 134 | + return false; |
|
| 135 | + break; |
|
| 136 | + case 'em': |
|
| 137 | + return round($m[1]*16, $precision); // 16px font-size par defaut |
|
| 138 | + break; |
|
| 139 | + case 'ex': |
|
| 140 | + return round($m[1]*16, $precision); // 16px font-size par defaut |
|
| 141 | + break; |
|
| 142 | + case 'pc': |
|
| 143 | + return round($m[1]*16, $precision); // 1/6 inch = 96px/6 in CSS |
|
| 144 | + break; |
|
| 145 | + case 'cm': |
|
| 146 | + return round($m[1]*96/2.54, $precision); // 96px / 2.54cm; |
|
| 147 | + break; |
|
| 148 | + case 'mm': |
|
| 149 | + return round($m[1]*96/25.4, $precision); // 96px / 25.4mm; |
|
| 150 | + break; |
|
| 151 | + case 'in': |
|
| 152 | + return round($m[1]*96, $precision); // 1 inch = 96px in CSS |
|
| 153 | + break; |
|
| 154 | + case 'px': |
|
| 155 | + case 'pt': |
|
| 156 | + default: |
|
| 157 | + return $m[1]; |
|
| 158 | + break; |
|
| 159 | + } |
|
| 160 | + } |
|
| 161 | + return false; |
|
| 162 | 162 | } |
| 163 | 163 | |
| 164 | 164 | /** |
@@ -169,15 +169,15 @@ discard block |
||
| 169 | 169 | * @return string |
| 170 | 170 | */ |
| 171 | 171 | function svg_change_balise_svg($svg, $old_balise_svg, $attributs) { |
| 172 | - $new_balise_svg = "<svg"; |
|
| 173 | - foreach ($attributs as $k=>$v) { |
|
| 174 | - $new_balise_svg .= " $k=\"".entites_html($v)."\""; |
|
| 175 | - } |
|
| 176 | - $new_balise_svg .= ">"; |
|
| 177 | - |
|
| 178 | - $p = strpos($svg, $old_balise_svg); |
|
| 179 | - $svg = substr_replace($svg, $new_balise_svg, $p, strlen($old_balise_svg)); |
|
| 180 | - return $svg; |
|
| 172 | + $new_balise_svg = "<svg"; |
|
| 173 | + foreach ($attributs as $k=>$v) { |
|
| 174 | + $new_balise_svg .= " $k=\"".entites_html($v)."\""; |
|
| 175 | + } |
|
| 176 | + $new_balise_svg .= ">"; |
|
| 177 | + |
|
| 178 | + $p = strpos($svg, $old_balise_svg); |
|
| 179 | + $svg = substr_replace($svg, $new_balise_svg, $p, strlen($old_balise_svg)); |
|
| 180 | + return $svg; |
|
| 181 | 181 | } |
| 182 | 182 | |
| 183 | 183 | /** |
@@ -189,15 +189,15 @@ discard block |
||
| 189 | 189 | */ |
| 190 | 190 | function svg_insert_shapes($svg, $shapes, $start=true) { |
| 191 | 191 | |
| 192 | - if ($start === false or $start === 'end') { |
|
| 193 | - $svg = str_replace("</svg>", $shapes . "</svg>", $svg); |
|
| 194 | - } |
|
| 195 | - else { |
|
| 196 | - $p = stripos($svg, "<svg"); |
|
| 197 | - $p = strpos($svg, ">", $p); |
|
| 198 | - $svg = substr_replace($svg, $shapes, $p+1, 0); |
|
| 199 | - } |
|
| 200 | - return $svg; |
|
| 192 | + if ($start === false or $start === 'end') { |
|
| 193 | + $svg = str_replace("</svg>", $shapes . "</svg>", $svg); |
|
| 194 | + } |
|
| 195 | + else { |
|
| 196 | + $p = stripos($svg, "<svg"); |
|
| 197 | + $p = strpos($svg, ">", $p); |
|
| 198 | + $svg = substr_replace($svg, $shapes, $p+1, 0); |
|
| 199 | + } |
|
| 200 | + return $svg; |
|
| 201 | 201 | } |
| 202 | 202 | |
| 203 | 203 | /** |
@@ -210,13 +210,13 @@ discard block |
||
| 210 | 210 | * @return string |
| 211 | 211 | */ |
| 212 | 212 | function svg_clip_in_box($svg, $x, $y, $width, $height) { |
| 213 | - $rect = "<rect x=\"$x\" y=\"$y\" width=\"$width\" height=\"$height\" />"; |
|
| 214 | - $id = 'clip-'.substr(md5($rect . strlen($svg)),0,8); |
|
| 215 | - $clippath = "<clipPath id=\"$id\">$rect</clipPath>"; |
|
| 216 | - $g = "<g clip-path=\"url(#$id)\">"; |
|
| 217 | - $svg = svg_insert_shapes($svg, $clippath . $g); |
|
| 218 | - $svg = svg_insert_shapes($svg, "</g>", false); |
|
| 219 | - return $svg; |
|
| 213 | + $rect = "<rect x=\"$x\" y=\"$y\" width=\"$width\" height=\"$height\" />"; |
|
| 214 | + $id = 'clip-'.substr(md5($rect . strlen($svg)),0,8); |
|
| 215 | + $clippath = "<clipPath id=\"$id\">$rect</clipPath>"; |
|
| 216 | + $g = "<g clip-path=\"url(#$id)\">"; |
|
| 217 | + $svg = svg_insert_shapes($svg, $clippath . $g); |
|
| 218 | + $svg = svg_insert_shapes($svg, "</g>", false); |
|
| 219 | + return $svg; |
|
| 220 | 220 | } |
| 221 | 221 | |
| 222 | 222 | /** |
@@ -227,21 +227,21 @@ discard block |
||
| 227 | 227 | * @return bool|string |
| 228 | 228 | */ |
| 229 | 229 | function svg_redimensionner($img, $new_width, $new_height) { |
| 230 | - if ($svg = svg_charger($img) |
|
| 231 | - and $svg_infos = svg_lire_balise_svg($svg)) { |
|
| 230 | + if ($svg = svg_charger($img) |
|
| 231 | + and $svg_infos = svg_lire_balise_svg($svg)) { |
|
| 232 | 232 | |
| 233 | - list($balise_svg, $attributs) = $svg_infos; |
|
| 234 | - if (!isset($attributs['viewBox'])) { |
|
| 235 | - $attributs['viewBox'] = "0 0 " . $attributs['width'] . " " . $attributs['height']; |
|
| 236 | - } |
|
| 237 | - $attributs['width'] = strval($new_width); |
|
| 238 | - $attributs['height'] = strval($new_height); |
|
| 233 | + list($balise_svg, $attributs) = $svg_infos; |
|
| 234 | + if (!isset($attributs['viewBox'])) { |
|
| 235 | + $attributs['viewBox'] = "0 0 " . $attributs['width'] . " " . $attributs['height']; |
|
| 236 | + } |
|
| 237 | + $attributs['width'] = strval($new_width); |
|
| 238 | + $attributs['height'] = strval($new_height); |
|
| 239 | 239 | |
| 240 | - $svg = svg_change_balise_svg($svg, $balise_svg, $attributs); |
|
| 241 | - return $svg; |
|
| 242 | - } |
|
| 240 | + $svg = svg_change_balise_svg($svg, $balise_svg, $attributs); |
|
| 241 | + return $svg; |
|
| 242 | + } |
|
| 243 | 243 | |
| 244 | - return $img; |
|
| 244 | + return $img; |
|
| 245 | 245 | } |
| 246 | 246 | |
| 247 | 247 | /** |
@@ -250,15 +250,15 @@ discard block |
||
| 250 | 250 | * @return string |
| 251 | 251 | */ |
| 252 | 252 | function svg_couleur_to_hexa($couleur) { |
| 253 | - if (strpos($couleur, "rgb(")===0) { |
|
| 254 | - $c = explode(',', substr($couleur, 4)); |
|
| 255 | - $couleur = _couleur_dec_to_hex(intval($c[0]), intval($c[1]), intval($c[2])); |
|
| 256 | - } |
|
| 257 | - else { |
|
| 258 | - $couleur = couleur_html_to_hex($couleur); |
|
| 259 | - } |
|
| 260 | - $couleur = '#'.ltrim($couleur,'#'); |
|
| 261 | - return $couleur; |
|
| 253 | + if (strpos($couleur, "rgb(")===0) { |
|
| 254 | + $c = explode(',', substr($couleur, 4)); |
|
| 255 | + $couleur = _couleur_dec_to_hex(intval($c[0]), intval($c[1]), intval($c[2])); |
|
| 256 | + } |
|
| 257 | + else { |
|
| 258 | + $couleur = couleur_html_to_hex($couleur); |
|
| 259 | + } |
|
| 260 | + $couleur = '#'.ltrim($couleur,'#'); |
|
| 261 | + return $couleur; |
|
| 262 | 262 | } |
| 263 | 263 | |
| 264 | 264 | /** |
@@ -267,11 +267,11 @@ discard block |
||
| 267 | 267 | * @return array |
| 268 | 268 | */ |
| 269 | 269 | function svg_couleur_to_rgb($couleur) { |
| 270 | - if (strpos($couleur, "rgb(")===0) { |
|
| 271 | - $c = explode(',', substr($couleur, 4)); |
|
| 272 | - return ['red' => intval($c[0]),'green' => intval($c[1]),'blue' => intval($c[2])]; |
|
| 273 | - } |
|
| 274 | - return _couleur_hex_to_dec($couleur); |
|
| 270 | + if (strpos($couleur, "rgb(")===0) { |
|
| 271 | + $c = explode(',', substr($couleur, 4)); |
|
| 272 | + return ['red' => intval($c[0]),'green' => intval($c[1]),'blue' => intval($c[2])]; |
|
| 273 | + } |
|
| 274 | + return _couleur_hex_to_dec($couleur); |
|
| 275 | 275 | } |
| 276 | 276 | |
| 277 | 277 | |
@@ -281,66 +281,66 @@ discard block |
||
| 281 | 281 | * @return array |
| 282 | 282 | */ |
| 283 | 283 | function svg_getimagesize_from_attr($attributs) { |
| 284 | - $width = 350; // default width |
|
| 285 | - $height = 150; // default height |
|
| 286 | - |
|
| 287 | - $viewBox = "0 0 $width $height"; |
|
| 288 | - if (isset($attributs['viewBox'])) { |
|
| 289 | - $viewBox = $attributs['viewBox']; |
|
| 290 | - $viewBox = preg_replace(",\s+,", " ", $viewBox); |
|
| 291 | - } |
|
| 292 | - // et on la convertit en px |
|
| 293 | - $viewBox = explode(' ', $viewBox); |
|
| 294 | - $viewBox = array_map('svg_dimension_to_pixels', $viewBox); |
|
| 295 | - if (!$viewBox[2]) { |
|
| 296 | - $viewBox[2] = $width; |
|
| 297 | - } |
|
| 298 | - if (!$viewBox[3]) { |
|
| 299 | - $viewBox[3] = $height; |
|
| 300 | - } |
|
| 301 | - |
|
| 302 | - $coeff = 1; |
|
| 303 | - if (isset($attributs['width']) |
|
| 304 | - and $w = svg_dimension_to_pixels($attributs['width'])) { |
|
| 305 | - $width = $w; |
|
| 306 | - } |
|
| 307 | - else { |
|
| 308 | - // si on recupere la taille de la viewbox mais si la viewbox est petite on met un multiplicateur pour la taille finale |
|
| 309 | - $width = $viewBox[2]; |
|
| 310 | - if ($width < 1) { |
|
| 311 | - $coeff = max($coeff, 1000); |
|
| 312 | - } |
|
| 313 | - elseif ($width < 10) { |
|
| 314 | - $coeff = max($coeff, 100); |
|
| 315 | - } |
|
| 316 | - elseif ($width < 100) { |
|
| 317 | - $coeff = max($coeff, 10); |
|
| 318 | - } |
|
| 319 | - } |
|
| 320 | - if (isset($attributs['height']) |
|
| 321 | - and $h = svg_dimension_to_pixels($attributs['height'])) { |
|
| 322 | - $height = $h; |
|
| 323 | - } |
|
| 324 | - else { |
|
| 325 | - $height = $viewBox[3]; |
|
| 326 | - if ($height < 1) { |
|
| 327 | - $coeff = max($coeff, 1000); |
|
| 328 | - } |
|
| 329 | - elseif ($height < 10) { |
|
| 330 | - $coeff = max($coeff, 100); |
|
| 331 | - } |
|
| 332 | - elseif ($height < 100) { |
|
| 333 | - $coeff = max($coeff, 10); |
|
| 334 | - } |
|
| 335 | - } |
|
| 336 | - |
|
| 337 | - // arrondir le width et height en pixel in fine |
|
| 338 | - $width = round($coeff * $width); |
|
| 339 | - $height = round($coeff * $height); |
|
| 340 | - |
|
| 341 | - $viewBox = implode(' ', $viewBox); |
|
| 342 | - |
|
| 343 | - return array($width, $height, $viewBox); |
|
| 284 | + $width = 350; // default width |
|
| 285 | + $height = 150; // default height |
|
| 286 | + |
|
| 287 | + $viewBox = "0 0 $width $height"; |
|
| 288 | + if (isset($attributs['viewBox'])) { |
|
| 289 | + $viewBox = $attributs['viewBox']; |
|
| 290 | + $viewBox = preg_replace(",\s+,", " ", $viewBox); |
|
| 291 | + } |
|
| 292 | + // et on la convertit en px |
|
| 293 | + $viewBox = explode(' ', $viewBox); |
|
| 294 | + $viewBox = array_map('svg_dimension_to_pixels', $viewBox); |
|
| 295 | + if (!$viewBox[2]) { |
|
| 296 | + $viewBox[2] = $width; |
|
| 297 | + } |
|
| 298 | + if (!$viewBox[3]) { |
|
| 299 | + $viewBox[3] = $height; |
|
| 300 | + } |
|
| 301 | + |
|
| 302 | + $coeff = 1; |
|
| 303 | + if (isset($attributs['width']) |
|
| 304 | + and $w = svg_dimension_to_pixels($attributs['width'])) { |
|
| 305 | + $width = $w; |
|
| 306 | + } |
|
| 307 | + else { |
|
| 308 | + // si on recupere la taille de la viewbox mais si la viewbox est petite on met un multiplicateur pour la taille finale |
|
| 309 | + $width = $viewBox[2]; |
|
| 310 | + if ($width < 1) { |
|
| 311 | + $coeff = max($coeff, 1000); |
|
| 312 | + } |
|
| 313 | + elseif ($width < 10) { |
|
| 314 | + $coeff = max($coeff, 100); |
|
| 315 | + } |
|
| 316 | + elseif ($width < 100) { |
|
| 317 | + $coeff = max($coeff, 10); |
|
| 318 | + } |
|
| 319 | + } |
|
| 320 | + if (isset($attributs['height']) |
|
| 321 | + and $h = svg_dimension_to_pixels($attributs['height'])) { |
|
| 322 | + $height = $h; |
|
| 323 | + } |
|
| 324 | + else { |
|
| 325 | + $height = $viewBox[3]; |
|
| 326 | + if ($height < 1) { |
|
| 327 | + $coeff = max($coeff, 1000); |
|
| 328 | + } |
|
| 329 | + elseif ($height < 10) { |
|
| 330 | + $coeff = max($coeff, 100); |
|
| 331 | + } |
|
| 332 | + elseif ($height < 100) { |
|
| 333 | + $coeff = max($coeff, 10); |
|
| 334 | + } |
|
| 335 | + } |
|
| 336 | + |
|
| 337 | + // arrondir le width et height en pixel in fine |
|
| 338 | + $width = round($coeff * $width); |
|
| 339 | + $height = round($coeff * $height); |
|
| 340 | + |
|
| 341 | + $viewBox = implode(' ', $viewBox); |
|
| 342 | + |
|
| 343 | + return array($width, $height, $viewBox); |
|
| 344 | 344 | } |
| 345 | 345 | |
| 346 | 346 | /** |
@@ -356,24 +356,24 @@ discard block |
||
| 356 | 356 | * @return string |
| 357 | 357 | */ |
| 358 | 358 | function svg_force_viewBox_px($img, $force_width_and_height = false) { |
| 359 | - if ($svg = svg_charger($img) |
|
| 360 | - and $svg_infos = svg_lire_balise_svg($svg)){ |
|
| 359 | + if ($svg = svg_charger($img) |
|
| 360 | + and $svg_infos = svg_lire_balise_svg($svg)){ |
|
| 361 | 361 | |
| 362 | - list($balise_svg, $attributs) = $svg_infos; |
|
| 362 | + list($balise_svg, $attributs) = $svg_infos; |
|
| 363 | 363 | |
| 364 | - list($width, $height, $viewBox) = svg_getimagesize_from_attr($attributs); |
|
| 364 | + list($width, $height, $viewBox) = svg_getimagesize_from_attr($attributs); |
|
| 365 | 365 | |
| 366 | - if ($force_width_and_height) { |
|
| 367 | - $attributs['width'] = $width; |
|
| 368 | - $attributs['height'] = $height; |
|
| 369 | - } |
|
| 366 | + if ($force_width_and_height) { |
|
| 367 | + $attributs['width'] = $width; |
|
| 368 | + $attributs['height'] = $height; |
|
| 369 | + } |
|
| 370 | 370 | |
| 371 | - $attributs['viewBox'] = $viewBox; |
|
| 371 | + $attributs['viewBox'] = $viewBox; |
|
| 372 | 372 | |
| 373 | - $svg = svg_change_balise_svg($svg, $balise_svg, $attributs); |
|
| 374 | - return $svg; |
|
| 375 | - } |
|
| 376 | - return $img; |
|
| 373 | + $svg = svg_change_balise_svg($svg, $balise_svg, $attributs); |
|
| 374 | + return $svg; |
|
| 375 | + } |
|
| 376 | + return $img; |
|
| 377 | 377 | } |
| 378 | 378 | |
| 379 | 379 | /** |
@@ -382,12 +382,12 @@ discard block |
||
| 382 | 382 | * @return array|mixed |
| 383 | 383 | */ |
| 384 | 384 | function svg_extract_couleurs($img) { |
| 385 | - if ($svg = svg_charger($img)) { |
|
| 386 | - if (preg_match_all("/(#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f])|(rgb\([\s\d]+,[\s\d]+,[\s\d]+\))|(#[0-9a-f][0-9a-f][0-9a-f])/imS", $svg, $matches)) { |
|
| 387 | - return $matches[0]; |
|
| 388 | - } |
|
| 389 | - } |
|
| 390 | - return []; |
|
| 385 | + if ($svg = svg_charger($img)) { |
|
| 386 | + if (preg_match_all("/(#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f])|(rgb\([\s\d]+,[\s\d]+,[\s\d]+\))|(#[0-9a-f][0-9a-f][0-9a-f])/imS", $svg, $matches)) { |
|
| 387 | + return $matches[0]; |
|
| 388 | + } |
|
| 389 | + } |
|
| 390 | + return []; |
|
| 391 | 391 | } |
| 392 | 392 | |
| 393 | 393 | /** |
@@ -398,56 +398,56 @@ discard block |
||
| 398 | 398 | * @return bool|string |
| 399 | 399 | */ |
| 400 | 400 | function svg_recadrer($img, $new_width, $new_height, $offset_width, $offset_height, $background_color='') { |
| 401 | - if ($svg = svg_force_viewBox_px($img) |
|
| 402 | - and $svg_infos = svg_lire_balise_svg($svg)) { |
|
| 403 | - |
|
| 404 | - list($balise_svg, $attributs) = $svg_infos; |
|
| 405 | - $viewBox = explode(' ', $attributs['viewBox']); |
|
| 406 | - |
|
| 407 | - $viewport_w = $new_width; |
|
| 408 | - $viewport_h = $new_height; |
|
| 409 | - $viewport_ox = $offset_width; |
|
| 410 | - $viewport_oy = $offset_height; |
|
| 411 | - |
|
| 412 | - // si on a un width/height qui rescale, il faut rescaler |
|
| 413 | - if (isset ($attributs['width']) |
|
| 414 | - and $w = svg_dimension_to_pixels($attributs['width']) |
|
| 415 | - and isset ($attributs['height']) |
|
| 416 | - and $h = svg_dimension_to_pixels($attributs['height'])) { |
|
| 417 | - |
|
| 418 | - $xscale = $viewBox[2] / $w; |
|
| 419 | - $viewport_w = round($viewport_w * $xscale, 2); |
|
| 420 | - $viewport_ox = round($viewport_ox * $xscale, 2); |
|
| 421 | - $yscale = $viewBox[3] / $h; |
|
| 422 | - $viewport_h = round($viewport_h * $yscale, 2); |
|
| 423 | - $viewport_oy = round($viewport_oy * $yscale, 2); |
|
| 424 | - } |
|
| 425 | - |
|
| 426 | - if ($viewport_w>$viewBox[2] or $viewport_h>$viewBox[3]) { |
|
| 427 | - $svg = svg_clip_in_box($svg, $viewBox[0], $viewBox[1], $viewBox[2], $viewBox[3]); |
|
| 428 | - } |
|
| 429 | - |
|
| 430 | - // maintenant on redefinit la viewBox |
|
| 431 | - $viewBox[0] += $viewport_ox; |
|
| 432 | - $viewBox[1] += $viewport_oy; |
|
| 433 | - $viewBox[2] = $viewport_w; |
|
| 434 | - $viewBox[3] = $viewport_h; |
|
| 435 | - |
|
| 436 | - $attributs['viewBox'] = implode(' ', $viewBox); |
|
| 437 | - $attributs['width'] = strval($new_width); |
|
| 438 | - $attributs['height'] = strval($new_height); |
|
| 439 | - |
|
| 440 | - $svg = svg_change_balise_svg($svg, $balise_svg, $attributs); |
|
| 441 | - |
|
| 442 | - // ajouter un background |
|
| 443 | - if ($background_color and $background_color!=='transparent') { |
|
| 444 | - $svg = svg_ajouter_background($svg, $background_color); |
|
| 445 | - } |
|
| 446 | - |
|
| 447 | - return $svg; |
|
| 448 | - } |
|
| 449 | - |
|
| 450 | - return $img; |
|
| 401 | + if ($svg = svg_force_viewBox_px($img) |
|
| 402 | + and $svg_infos = svg_lire_balise_svg($svg)) { |
|
| 403 | + |
|
| 404 | + list($balise_svg, $attributs) = $svg_infos; |
|
| 405 | + $viewBox = explode(' ', $attributs['viewBox']); |
|
| 406 | + |
|
| 407 | + $viewport_w = $new_width; |
|
| 408 | + $viewport_h = $new_height; |
|
| 409 | + $viewport_ox = $offset_width; |
|
| 410 | + $viewport_oy = $offset_height; |
|
| 411 | + |
|
| 412 | + // si on a un width/height qui rescale, il faut rescaler |
|
| 413 | + if (isset ($attributs['width']) |
|
| 414 | + and $w = svg_dimension_to_pixels($attributs['width']) |
|
| 415 | + and isset ($attributs['height']) |
|
| 416 | + and $h = svg_dimension_to_pixels($attributs['height'])) { |
|
| 417 | + |
|
| 418 | + $xscale = $viewBox[2] / $w; |
|
| 419 | + $viewport_w = round($viewport_w * $xscale, 2); |
|
| 420 | + $viewport_ox = round($viewport_ox * $xscale, 2); |
|
| 421 | + $yscale = $viewBox[3] / $h; |
|
| 422 | + $viewport_h = round($viewport_h * $yscale, 2); |
|
| 423 | + $viewport_oy = round($viewport_oy * $yscale, 2); |
|
| 424 | + } |
|
| 425 | + |
|
| 426 | + if ($viewport_w>$viewBox[2] or $viewport_h>$viewBox[3]) { |
|
| 427 | + $svg = svg_clip_in_box($svg, $viewBox[0], $viewBox[1], $viewBox[2], $viewBox[3]); |
|
| 428 | + } |
|
| 429 | + |
|
| 430 | + // maintenant on redefinit la viewBox |
|
| 431 | + $viewBox[0] += $viewport_ox; |
|
| 432 | + $viewBox[1] += $viewport_oy; |
|
| 433 | + $viewBox[2] = $viewport_w; |
|
| 434 | + $viewBox[3] = $viewport_h; |
|
| 435 | + |
|
| 436 | + $attributs['viewBox'] = implode(' ', $viewBox); |
|
| 437 | + $attributs['width'] = strval($new_width); |
|
| 438 | + $attributs['height'] = strval($new_height); |
|
| 439 | + |
|
| 440 | + $svg = svg_change_balise_svg($svg, $balise_svg, $attributs); |
|
| 441 | + |
|
| 442 | + // ajouter un background |
|
| 443 | + if ($background_color and $background_color!=='transparent') { |
|
| 444 | + $svg = svg_ajouter_background($svg, $background_color); |
|
| 445 | + } |
|
| 446 | + |
|
| 447 | + return $svg; |
|
| 448 | + } |
|
| 449 | + |
|
| 450 | + return $img; |
|
| 451 | 451 | } |
| 452 | 452 | |
| 453 | 453 | /** |
@@ -457,25 +457,25 @@ discard block |
||
| 457 | 457 | * @return bool|string |
| 458 | 458 | */ |
| 459 | 459 | function svg_ajouter_background($img, $background_color) { |
| 460 | - if ($svg = svg_charger($img) |
|
| 461 | - and $svg_infos = svg_lire_balise_svg($svg)){ |
|
| 462 | - |
|
| 463 | - if ($background_color and $background_color!=='transparent') { |
|
| 464 | - list($balise_svg, $attributs) = $svg_infos; |
|
| 465 | - |
|
| 466 | - $background_color = svg_couleur_to_hexa($background_color); |
|
| 467 | - if (isset($attributs['viewBox'])) { |
|
| 468 | - $viewBox = explode(' ', $attributs['viewBox']); |
|
| 469 | - $rect = "<rect x=\"".$viewBox[0]."\" y=\"".$viewBox[1]."\" width=\"".$viewBox[2]."\" height=\"".$viewBox[3]."\" fill=\"$background_color\"/>"; |
|
| 470 | - } |
|
| 471 | - else { |
|
| 472 | - $rect = "<rect width=\"100%\" height=\"100%\" fill=\"$background_color\"/>"; |
|
| 473 | - } |
|
| 474 | - $svg = svg_insert_shapes($svg, $rect); |
|
| 475 | - } |
|
| 476 | - return $svg; |
|
| 477 | - } |
|
| 478 | - return $img; |
|
| 460 | + if ($svg = svg_charger($img) |
|
| 461 | + and $svg_infos = svg_lire_balise_svg($svg)){ |
|
| 462 | + |
|
| 463 | + if ($background_color and $background_color!=='transparent') { |
|
| 464 | + list($balise_svg, $attributs) = $svg_infos; |
|
| 465 | + |
|
| 466 | + $background_color = svg_couleur_to_hexa($background_color); |
|
| 467 | + if (isset($attributs['viewBox'])) { |
|
| 468 | + $viewBox = explode(' ', $attributs['viewBox']); |
|
| 469 | + $rect = "<rect x=\"".$viewBox[0]."\" y=\"".$viewBox[1]."\" width=\"".$viewBox[2]."\" height=\"".$viewBox[3]."\" fill=\"$background_color\"/>"; |
|
| 470 | + } |
|
| 471 | + else { |
|
| 472 | + $rect = "<rect width=\"100%\" height=\"100%\" fill=\"$background_color\"/>"; |
|
| 473 | + } |
|
| 474 | + $svg = svg_insert_shapes($svg, $rect); |
|
| 475 | + } |
|
| 476 | + return $svg; |
|
| 477 | + } |
|
| 478 | + return $img; |
|
| 479 | 479 | } |
| 480 | 480 | |
| 481 | 481 | |
@@ -486,25 +486,25 @@ discard block |
||
| 486 | 486 | * @return bool|string |
| 487 | 487 | */ |
| 488 | 488 | function svg_ajouter_voile($img, $background_color, $opacity) { |
| 489 | - if ($svg = svg_charger($img) |
|
| 490 | - and $svg_infos = svg_lire_balise_svg($svg)){ |
|
| 491 | - |
|
| 492 | - if ($background_color and $background_color!=='transparent') { |
|
| 493 | - list($balise_svg, $attributs) = $svg_infos; |
|
| 494 | - |
|
| 495 | - $background_color = svg_couleur_to_hexa($background_color); |
|
| 496 | - if (isset($attributs['viewBox'])) { |
|
| 497 | - $viewBox = explode(' ', $attributs['viewBox']); |
|
| 498 | - $rect = "<rect x=\"".$viewBox[0]."\" y=\"".$viewBox[1]."\" width=\"".$viewBox[2]."\" height=\"".$viewBox[3]."\" fill=\"$background_color\" opacity=\"$opacity\"/>"; |
|
| 499 | - } |
|
| 500 | - else { |
|
| 501 | - $rect = "<rect width=\"100%\" height=\"100%\" fill=\"$background_color\"/>"; |
|
| 502 | - } |
|
| 503 | - $svg = svg_insert_shapes($svg, $rect, false); |
|
| 504 | - } |
|
| 505 | - return $svg; |
|
| 506 | - } |
|
| 507 | - return $img; |
|
| 489 | + if ($svg = svg_charger($img) |
|
| 490 | + and $svg_infos = svg_lire_balise_svg($svg)){ |
|
| 491 | + |
|
| 492 | + if ($background_color and $background_color!=='transparent') { |
|
| 493 | + list($balise_svg, $attributs) = $svg_infos; |
|
| 494 | + |
|
| 495 | + $background_color = svg_couleur_to_hexa($background_color); |
|
| 496 | + if (isset($attributs['viewBox'])) { |
|
| 497 | + $viewBox = explode(' ', $attributs['viewBox']); |
|
| 498 | + $rect = "<rect x=\"".$viewBox[0]."\" y=\"".$viewBox[1]."\" width=\"".$viewBox[2]."\" height=\"".$viewBox[3]."\" fill=\"$background_color\" opacity=\"$opacity\"/>"; |
|
| 499 | + } |
|
| 500 | + else { |
|
| 501 | + $rect = "<rect width=\"100%\" height=\"100%\" fill=\"$background_color\"/>"; |
|
| 502 | + } |
|
| 503 | + $svg = svg_insert_shapes($svg, $rect, false); |
|
| 504 | + } |
|
| 505 | + return $svg; |
|
| 506 | + } |
|
| 507 | + return $img; |
|
| 508 | 508 | } |
| 509 | 509 | |
| 510 | 510 | |
@@ -515,26 +515,26 @@ discard block |
||
| 515 | 515 | * @return bool|string |
| 516 | 516 | */ |
| 517 | 517 | function svg_transformer($img, $attributs) { |
| 518 | - if ($svg = svg_charger($img) |
|
| 519 | - and $svg_infos = svg_lire_balise_svg($svg)){ |
|
| 520 | - |
|
| 521 | - if ($attributs) { |
|
| 522 | - list($balise_svg, ) = $svg_infos; |
|
| 523 | - $g = "<g"; |
|
| 524 | - foreach ($attributs as $k=>$v) { |
|
| 525 | - if (strlen($v)) { |
|
| 526 | - $g .= " $k=\"".attribut_html($v)."\""; |
|
| 527 | - } |
|
| 528 | - } |
|
| 529 | - if (strlen($g) > 2) { |
|
| 530 | - $g .= ">"; |
|
| 531 | - $svg = svg_insert_shapes($svg, $g); |
|
| 532 | - $svg = svg_insert_shapes($svg, "</g>", false); |
|
| 533 | - } |
|
| 534 | - } |
|
| 535 | - return $svg; |
|
| 536 | - } |
|
| 537 | - return $img; |
|
| 518 | + if ($svg = svg_charger($img) |
|
| 519 | + and $svg_infos = svg_lire_balise_svg($svg)){ |
|
| 520 | + |
|
| 521 | + if ($attributs) { |
|
| 522 | + list($balise_svg, ) = $svg_infos; |
|
| 523 | + $g = "<g"; |
|
| 524 | + foreach ($attributs as $k=>$v) { |
|
| 525 | + if (strlen($v)) { |
|
| 526 | + $g .= " $k=\"".attribut_html($v)."\""; |
|
| 527 | + } |
|
| 528 | + } |
|
| 529 | + if (strlen($g) > 2) { |
|
| 530 | + $g .= ">"; |
|
| 531 | + $svg = svg_insert_shapes($svg, $g); |
|
| 532 | + $svg = svg_insert_shapes($svg, "</g>", false); |
|
| 533 | + } |
|
| 534 | + } |
|
| 535 | + return $svg; |
|
| 536 | + } |
|
| 537 | + return $img; |
|
| 538 | 538 | } |
| 539 | 539 | |
| 540 | 540 | /** |
@@ -545,20 +545,20 @@ discard block |
||
| 545 | 545 | * @return bool|string |
| 546 | 546 | */ |
| 547 | 547 | function svg_apply_filter($img, $filter_def) { |
| 548 | - if ($svg = svg_charger($img) |
|
| 549 | - and $svg_infos = svg_lire_balise_svg($svg)){ |
|
| 550 | - |
|
| 551 | - if ($filter_def) { |
|
| 552 | - list($balise_svg, ) = $svg_infos; |
|
| 553 | - $filter_id = "filter-". substr(md5($filter_def . strlen($svg)), 0, 8); |
|
| 554 | - $filter = "<defs><filter id=\"$filter_id\">$filter_def</filter></defs>"; |
|
| 555 | - $g = "<g filter=\"url(#$filter_id)\">"; |
|
| 556 | - $svg = svg_insert_shapes($svg, $filter . $g); |
|
| 557 | - $svg = svg_insert_shapes($svg, "</g>", false); |
|
| 558 | - } |
|
| 559 | - return $svg; |
|
| 560 | - } |
|
| 561 | - return $img; |
|
| 548 | + if ($svg = svg_charger($img) |
|
| 549 | + and $svg_infos = svg_lire_balise_svg($svg)){ |
|
| 550 | + |
|
| 551 | + if ($filter_def) { |
|
| 552 | + list($balise_svg, ) = $svg_infos; |
|
| 553 | + $filter_id = "filter-". substr(md5($filter_def . strlen($svg)), 0, 8); |
|
| 554 | + $filter = "<defs><filter id=\"$filter_id\">$filter_def</filter></defs>"; |
|
| 555 | + $g = "<g filter=\"url(#$filter_id)\">"; |
|
| 556 | + $svg = svg_insert_shapes($svg, $filter . $g); |
|
| 557 | + $svg = svg_insert_shapes($svg, "</g>", false); |
|
| 558 | + } |
|
| 559 | + return $svg; |
|
| 560 | + } |
|
| 561 | + return $img; |
|
| 562 | 562 | } |
| 563 | 563 | |
| 564 | 564 | /** |
@@ -568,8 +568,8 @@ discard block |
||
| 568 | 568 | * @return string |
| 569 | 569 | */ |
| 570 | 570 | function svg_filter_blur($img, $blur_width) { |
| 571 | - $blur_width = intval($blur_width); |
|
| 572 | - return svg_apply_filter($img, "<feGaussianBlur stdDeviation=\"$blur_width\"/>"); |
|
| 571 | + $blur_width = intval($blur_width); |
|
| 572 | + return svg_apply_filter($img, "<feGaussianBlur stdDeviation=\"$blur_width\"/>"); |
|
| 573 | 573 | } |
| 574 | 574 | |
| 575 | 575 | /** |
@@ -579,10 +579,10 @@ discard block |
||
| 579 | 579 | * @return bool|string |
| 580 | 580 | */ |
| 581 | 581 | function svg_filter_grayscale($img, $intensity) { |
| 582 | - $value = round(1.0 - $intensity, 2); |
|
| 583 | - //$filter = "<feColorMatrix type=\"matrix\" values=\"0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\"/>"; |
|
| 584 | - $filter = "<feColorMatrix type=\"saturate\" values=\"$value\"/>"; |
|
| 585 | - return svg_apply_filter($img, $filter); |
|
| 582 | + $value = round(1.0 - $intensity, 2); |
|
| 583 | + //$filter = "<feColorMatrix type=\"matrix\" values=\"0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\"/>"; |
|
| 584 | + $filter = "<feColorMatrix type=\"saturate\" values=\"$value\"/>"; |
|
| 585 | + return svg_apply_filter($img, $filter); |
|
| 586 | 586 | } |
| 587 | 587 | |
| 588 | 588 | /** |
@@ -592,8 +592,8 @@ discard block |
||
| 592 | 592 | * @return bool|string |
| 593 | 593 | */ |
| 594 | 594 | function svg_filter_sepia($img, $intensity) { |
| 595 | - $filter = "<feColorMatrix type=\"matrix\" values=\"0.30 0.30 0.30 0.0 0 0.25 0.25 0.25 0.0 0 0.20 0.20 0.20 0.0 0 0.00 0.00 0.00 1 0\"/>"; |
|
| 596 | - return svg_apply_filter($img, $filter); |
|
| 595 | + $filter = "<feColorMatrix type=\"matrix\" values=\"0.30 0.30 0.30 0.0 0 0.25 0.25 0.25 0.0 0 0.20 0.20 0.20 0.0 0 0.00 0.00 0.00 1 0\"/>"; |
|
| 596 | + return svg_apply_filter($img, $filter); |
|
| 597 | 597 | } |
| 598 | 598 | |
| 599 | 599 | /** |
@@ -603,30 +603,30 @@ discard block |
||
| 603 | 603 | * @return bool|string |
| 604 | 604 | */ |
| 605 | 605 | function svg_flip($img, $HorV) { |
| 606 | - if ($svg = svg_force_viewBox_px($img) |
|
| 607 | - and $svg_infos = svg_lire_balise_svg($svg)){ |
|
| 608 | - |
|
| 609 | - list($balise_svg, $atts) = $svg_infos; |
|
| 610 | - $viewBox = explode(' ', $atts['viewBox']); |
|
| 611 | - |
|
| 612 | - if (!in_array($HorV, ['h', 'H'])) { |
|
| 613 | - $transform = "scale(-1,1)"; |
|
| 614 | - |
|
| 615 | - $x = intval($viewBox[0]) + intval($viewBox[2]/2); |
|
| 616 | - $mx = -$x; |
|
| 617 | - $transform = "translate($x, 0) $transform translate($mx, 0)"; |
|
| 618 | - } |
|
| 619 | - else { |
|
| 620 | - $transform = "scale(1,-1)"; |
|
| 621 | - |
|
| 622 | - $y = intval($viewBox[1]) + intval($viewBox[3]/2); |
|
| 623 | - $my = -$y; |
|
| 624 | - $transform = "translate(0, $y) $transform translate(0, $my)"; |
|
| 625 | - } |
|
| 626 | - $svg = svg_transformer($svg, ['transform' => $transform]); |
|
| 627 | - return $svg; |
|
| 628 | - } |
|
| 629 | - return $img; |
|
| 606 | + if ($svg = svg_force_viewBox_px($img) |
|
| 607 | + and $svg_infos = svg_lire_balise_svg($svg)){ |
|
| 608 | + |
|
| 609 | + list($balise_svg, $atts) = $svg_infos; |
|
| 610 | + $viewBox = explode(' ', $atts['viewBox']); |
|
| 611 | + |
|
| 612 | + if (!in_array($HorV, ['h', 'H'])) { |
|
| 613 | + $transform = "scale(-1,1)"; |
|
| 614 | + |
|
| 615 | + $x = intval($viewBox[0]) + intval($viewBox[2]/2); |
|
| 616 | + $mx = -$x; |
|
| 617 | + $transform = "translate($x, 0) $transform translate($mx, 0)"; |
|
| 618 | + } |
|
| 619 | + else { |
|
| 620 | + $transform = "scale(1,-1)"; |
|
| 621 | + |
|
| 622 | + $y = intval($viewBox[1]) + intval($viewBox[3]/2); |
|
| 623 | + $my = -$y; |
|
| 624 | + $transform = "translate(0, $y) $transform translate(0, $my)"; |
|
| 625 | + } |
|
| 626 | + $svg = svg_transformer($svg, ['transform' => $transform]); |
|
| 627 | + return $svg; |
|
| 628 | + } |
|
| 629 | + return $img; |
|
| 630 | 630 | } |
| 631 | 631 | |
| 632 | 632 | /** |
@@ -640,19 +640,19 @@ discard block |
||
| 640 | 640 | * @return bool|string |
| 641 | 641 | */ |
| 642 | 642 | function svg_rotate($img, $angle, $center_x, $center_y) { |
| 643 | - if ($svg = svg_force_viewBox_px($img) |
|
| 644 | - and $svg_infos = svg_lire_balise_svg($svg)){ |
|
| 643 | + if ($svg = svg_force_viewBox_px($img) |
|
| 644 | + and $svg_infos = svg_lire_balise_svg($svg)){ |
|
| 645 | 645 | |
| 646 | - list($balise_svg, $atts) = $svg_infos; |
|
| 647 | - $viewBox = explode(' ', $atts['viewBox']); |
|
| 646 | + list($balise_svg, $atts) = $svg_infos; |
|
| 647 | + $viewBox = explode(' ', $atts['viewBox']); |
|
| 648 | 648 | |
| 649 | - $center_x = round($viewBox[0] + $center_x * $viewBox[2]); |
|
| 650 | - $center_y = round($viewBox[1] + $center_y * $viewBox[3]); |
|
| 651 | - $svg = svg_transformer($svg, ['transform' => "rotate($angle $center_x $center_y)"]); |
|
| 649 | + $center_x = round($viewBox[0] + $center_x * $viewBox[2]); |
|
| 650 | + $center_y = round($viewBox[1] + $center_y * $viewBox[3]); |
|
| 651 | + $svg = svg_transformer($svg, ['transform' => "rotate($angle $center_x $center_y)"]); |
|
| 652 | 652 | |
| 653 | - return $svg; |
|
| 654 | - } |
|
| 655 | - return $img; |
|
| 653 | + return $svg; |
|
| 654 | + } |
|
| 655 | + return $img; |
|
| 656 | 656 | } |
| 657 | 657 | |
| 658 | 658 | /** |
@@ -664,40 +664,40 @@ discard block |
||
| 664 | 664 | * @return bool|mixed|string |
| 665 | 665 | */ |
| 666 | 666 | function svg_filtrer_couleurs($img, $callback_filter) { |
| 667 | - if ($svg = svg_force_viewBox_px($img) |
|
| 668 | - and $colors = svg_extract_couleurs($svg)) { |
|
| 669 | - |
|
| 670 | - $colors = array_unique($colors); |
|
| 671 | - |
|
| 672 | - $short = []; |
|
| 673 | - $long = []; |
|
| 674 | - while (count($colors)) { |
|
| 675 | - $c = array_shift($colors); |
|
| 676 | - if (strlen($c) == 4) { |
|
| 677 | - $short[] = $c; |
|
| 678 | - } |
|
| 679 | - else { |
|
| 680 | - $long[] = $c; |
|
| 681 | - } |
|
| 682 | - } |
|
| 683 | - |
|
| 684 | - $colors = array_merge($long, $short); |
|
| 685 | - $new_colors = []; |
|
| 686 | - $colors = array_flip($colors); |
|
| 687 | - foreach ($colors as $c => $k) { |
|
| 688 | - $colors[$c] = "@@@COLOR$$k$@@@"; |
|
| 689 | - } |
|
| 690 | - |
|
| 691 | - |
|
| 692 | - foreach ($colors as $original => $replace) { |
|
| 693 | - $new = svg_couleur_to_hexa($original); |
|
| 694 | - $new_colors[$replace] = $callback_filter($new); |
|
| 695 | - } |
|
| 696 | - |
|
| 697 | - $svg = str_replace(array_keys($colors), array_values($colors), $svg); |
|
| 698 | - $svg = str_replace(array_keys($new_colors), array_values($new_colors), $svg); |
|
| 699 | - |
|
| 700 | - return $svg; |
|
| 701 | - } |
|
| 702 | - return $img; |
|
| 667 | + if ($svg = svg_force_viewBox_px($img) |
|
| 668 | + and $colors = svg_extract_couleurs($svg)) { |
|
| 669 | + |
|
| 670 | + $colors = array_unique($colors); |
|
| 671 | + |
|
| 672 | + $short = []; |
|
| 673 | + $long = []; |
|
| 674 | + while (count($colors)) { |
|
| 675 | + $c = array_shift($colors); |
|
| 676 | + if (strlen($c) == 4) { |
|
| 677 | + $short[] = $c; |
|
| 678 | + } |
|
| 679 | + else { |
|
| 680 | + $long[] = $c; |
|
| 681 | + } |
|
| 682 | + } |
|
| 683 | + |
|
| 684 | + $colors = array_merge($long, $short); |
|
| 685 | + $new_colors = []; |
|
| 686 | + $colors = array_flip($colors); |
|
| 687 | + foreach ($colors as $c => $k) { |
|
| 688 | + $colors[$c] = "@@@COLOR$$k$@@@"; |
|
| 689 | + } |
|
| 690 | + |
|
| 691 | + |
|
| 692 | + foreach ($colors as $original => $replace) { |
|
| 693 | + $new = svg_couleur_to_hexa($original); |
|
| 694 | + $new_colors[$replace] = $callback_filter($new); |
|
| 695 | + } |
|
| 696 | + |
|
| 697 | + $svg = str_replace(array_keys($colors), array_values($colors), $svg); |
|
| 698 | + $svg = str_replace(array_keys($new_colors), array_values($new_colors), $svg); |
|
| 699 | + |
|
| 700 | + return $svg; |
|
| 701 | + } |
|
| 702 | + return $img; |
|
| 703 | 703 | } |
| 704 | 704 | \ No newline at end of file |
@@ -22,7 +22,7 @@ discard block |
||
| 22 | 22 | |
| 23 | 23 | if (!defined('IMG_SVG')) { |
| 24 | 24 | // complete IMG_BMP | IMG_GIF | IMG_JPG | IMG_PNG | IMG_WBMP | IMG_XPM | IMG_WEBP |
| 25 | - define('IMG_SVG',128); |
|
| 25 | + define('IMG_SVG', 128); |
|
| 26 | 26 | define('IMAGETYPE_SVG', 19); |
| 27 | 27 | } |
| 28 | 28 | |
@@ -38,7 +38,7 @@ discard block |
||
| 38 | 38 | * @return bool|string |
| 39 | 39 | * false si on a pas pu charger l'image |
| 40 | 40 | */ |
| 41 | -function svg_charger($fichier, $maxlen=null) { |
|
| 41 | +function svg_charger($fichier, $maxlen = null) { |
|
| 42 | 42 | if (strpos($fichier, "data:image/svg+xml") === 0) { |
| 43 | 43 | $image = explode(";", $fichier, 2); |
| 44 | 44 | $image = end($image); |
@@ -56,7 +56,7 @@ discard block |
||
| 56 | 56 | return $fichier; |
| 57 | 57 | } |
| 58 | 58 | if (!file_exists($fichier)) { |
| 59 | - $fichier = supprimer_timestamp($fichier); |
|
| 59 | + $fichier = supprimer_timestamp($fichier); |
|
| 60 | 60 | if (!file_exists($fichier)) { |
| 61 | 61 | return false; |
| 62 | 62 | } |
@@ -65,7 +65,7 @@ discard block |
||
| 65 | 65 | $image = file_get_contents($fichier); |
| 66 | 66 | } |
| 67 | 67 | else { |
| 68 | - $image = file_get_contents($fichier, false,null,0, $maxlen); |
|
| 68 | + $image = file_get_contents($fichier, false, null, 0, $maxlen); |
|
| 69 | 69 | } |
| 70 | 70 | // est-ce bien une image svg ? |
| 71 | 71 | if (strpos($image, "<svg") !== false) { |
@@ -87,7 +87,7 @@ discard block |
||
| 87 | 87 | if (($ps = stripos($debut_fichier, "<svg")) !== false) { |
| 88 | 88 | |
| 89 | 89 | $pe = stripos($debut_fichier, ">", $ps); |
| 90 | - $balise_svg = substr($debut_fichier, $ps, $pe - $ps +1); |
|
| 90 | + $balise_svg = substr($debut_fichier, $ps, $pe - $ps + 1); |
|
| 91 | 91 | |
| 92 | 92 | if (preg_match_all(",([\w:\-]+)=,Uims", $balise_svg, $matches)) { |
| 93 | 93 | if (!function_exists('extraire_attribut')) { |
@@ -127,29 +127,29 @@ discard block |
||
| 127 | 127 | * @return bool|float|int |
| 128 | 128 | */ |
| 129 | 129 | function svg_dimension_to_pixels($dimension, $precision = 2) { |
| 130 | - if (preg_match(',^(-?\d+(\.\d+)?)([^\d]*),i', trim($dimension), $m)){ |
|
| 130 | + if (preg_match(',^(-?\d+(\.\d+)?)([^\d]*),i', trim($dimension), $m)) { |
|
| 131 | 131 | switch (strtolower($m[2])) { |
| 132 | 132 | case '%': |
| 133 | 133 | // on ne sait pas faire :( |
| 134 | 134 | return false; |
| 135 | 135 | break; |
| 136 | 136 | case 'em': |
| 137 | - return round($m[1]*16, $precision); // 16px font-size par defaut |
|
| 137 | + return round($m[1] * 16, $precision); // 16px font-size par defaut |
|
| 138 | 138 | break; |
| 139 | 139 | case 'ex': |
| 140 | - return round($m[1]*16, $precision); // 16px font-size par defaut |
|
| 140 | + return round($m[1] * 16, $precision); // 16px font-size par defaut |
|
| 141 | 141 | break; |
| 142 | 142 | case 'pc': |
| 143 | - return round($m[1]*16, $precision); // 1/6 inch = 96px/6 in CSS |
|
| 143 | + return round($m[1] * 16, $precision); // 1/6 inch = 96px/6 in CSS |
|
| 144 | 144 | break; |
| 145 | 145 | case 'cm': |
| 146 | - return round($m[1]*96/2.54, $precision); // 96px / 2.54cm; |
|
| 146 | + return round($m[1] * 96 / 2.54, $precision); // 96px / 2.54cm; |
|
| 147 | 147 | break; |
| 148 | 148 | case 'mm': |
| 149 | - return round($m[1]*96/25.4, $precision); // 96px / 25.4mm; |
|
| 149 | + return round($m[1] * 96 / 25.4, $precision); // 96px / 25.4mm; |
|
| 150 | 150 | break; |
| 151 | 151 | case 'in': |
| 152 | - return round($m[1]*96, $precision); // 1 inch = 96px in CSS |
|
| 152 | + return round($m[1] * 96, $precision); // 1 inch = 96px in CSS |
|
| 153 | 153 | break; |
| 154 | 154 | case 'px': |
| 155 | 155 | case 'pt': |
@@ -187,15 +187,15 @@ discard block |
||
| 187 | 187 | * inserer au debut (true) ou a la fin (false) |
| 188 | 188 | * @return string |
| 189 | 189 | */ |
| 190 | -function svg_insert_shapes($svg, $shapes, $start=true) { |
|
| 190 | +function svg_insert_shapes($svg, $shapes, $start = true) { |
|
| 191 | 191 | |
| 192 | 192 | if ($start === false or $start === 'end') { |
| 193 | - $svg = str_replace("</svg>", $shapes . "</svg>", $svg); |
|
| 193 | + $svg = str_replace("</svg>", $shapes."</svg>", $svg); |
|
| 194 | 194 | } |
| 195 | 195 | else { |
| 196 | 196 | $p = stripos($svg, "<svg"); |
| 197 | 197 | $p = strpos($svg, ">", $p); |
| 198 | - $svg = substr_replace($svg, $shapes, $p+1, 0); |
|
| 198 | + $svg = substr_replace($svg, $shapes, $p + 1, 0); |
|
| 199 | 199 | } |
| 200 | 200 | return $svg; |
| 201 | 201 | } |
@@ -211,10 +211,10 @@ discard block |
||
| 211 | 211 | */ |
| 212 | 212 | function svg_clip_in_box($svg, $x, $y, $width, $height) { |
| 213 | 213 | $rect = "<rect x=\"$x\" y=\"$y\" width=\"$width\" height=\"$height\" />"; |
| 214 | - $id = 'clip-'.substr(md5($rect . strlen($svg)),0,8); |
|
| 214 | + $id = 'clip-'.substr(md5($rect.strlen($svg)), 0, 8); |
|
| 215 | 215 | $clippath = "<clipPath id=\"$id\">$rect</clipPath>"; |
| 216 | 216 | $g = "<g clip-path=\"url(#$id)\">"; |
| 217 | - $svg = svg_insert_shapes($svg, $clippath . $g); |
|
| 217 | + $svg = svg_insert_shapes($svg, $clippath.$g); |
|
| 218 | 218 | $svg = svg_insert_shapes($svg, "</g>", false); |
| 219 | 219 | return $svg; |
| 220 | 220 | } |
@@ -232,7 +232,7 @@ discard block |
||
| 232 | 232 | |
| 233 | 233 | list($balise_svg, $attributs) = $svg_infos; |
| 234 | 234 | if (!isset($attributs['viewBox'])) { |
| 235 | - $attributs['viewBox'] = "0 0 " . $attributs['width'] . " " . $attributs['height']; |
|
| 235 | + $attributs['viewBox'] = "0 0 ".$attributs['width']." ".$attributs['height']; |
|
| 236 | 236 | } |
| 237 | 237 | $attributs['width'] = strval($new_width); |
| 238 | 238 | $attributs['height'] = strval($new_height); |
@@ -250,14 +250,14 @@ discard block |
||
| 250 | 250 | * @return string |
| 251 | 251 | */ |
| 252 | 252 | function svg_couleur_to_hexa($couleur) { |
| 253 | - if (strpos($couleur, "rgb(")===0) { |
|
| 253 | + if (strpos($couleur, "rgb(") === 0) { |
|
| 254 | 254 | $c = explode(',', substr($couleur, 4)); |
| 255 | 255 | $couleur = _couleur_dec_to_hex(intval($c[0]), intval($c[1]), intval($c[2])); |
| 256 | 256 | } |
| 257 | 257 | else { |
| 258 | 258 | $couleur = couleur_html_to_hex($couleur); |
| 259 | 259 | } |
| 260 | - $couleur = '#'.ltrim($couleur,'#'); |
|
| 260 | + $couleur = '#'.ltrim($couleur, '#'); |
|
| 261 | 261 | return $couleur; |
| 262 | 262 | } |
| 263 | 263 | |
@@ -267,9 +267,9 @@ discard block |
||
| 267 | 267 | * @return array |
| 268 | 268 | */ |
| 269 | 269 | function svg_couleur_to_rgb($couleur) { |
| 270 | - if (strpos($couleur, "rgb(")===0) { |
|
| 270 | + if (strpos($couleur, "rgb(") === 0) { |
|
| 271 | 271 | $c = explode(',', substr($couleur, 4)); |
| 272 | - return ['red' => intval($c[0]),'green' => intval($c[1]),'blue' => intval($c[2])]; |
|
| 272 | + return ['red' => intval($c[0]), 'green' => intval($c[1]), 'blue' => intval($c[2])]; |
|
| 273 | 273 | } |
| 274 | 274 | return _couleur_hex_to_dec($couleur); |
| 275 | 275 | } |
@@ -357,7 +357,7 @@ discard block |
||
| 357 | 357 | */ |
| 358 | 358 | function svg_force_viewBox_px($img, $force_width_and_height = false) { |
| 359 | 359 | if ($svg = svg_charger($img) |
| 360 | - and $svg_infos = svg_lire_balise_svg($svg)){ |
|
| 360 | + and $svg_infos = svg_lire_balise_svg($svg)) { |
|
| 361 | 361 | |
| 362 | 362 | list($balise_svg, $attributs) = $svg_infos; |
| 363 | 363 | |
@@ -397,7 +397,7 @@ discard block |
||
| 397 | 397 | * @param $new_height |
| 398 | 398 | * @return bool|string |
| 399 | 399 | */ |
| 400 | -function svg_recadrer($img, $new_width, $new_height, $offset_width, $offset_height, $background_color='') { |
|
| 400 | +function svg_recadrer($img, $new_width, $new_height, $offset_width, $offset_height, $background_color = '') { |
|
| 401 | 401 | if ($svg = svg_force_viewBox_px($img) |
| 402 | 402 | and $svg_infos = svg_lire_balise_svg($svg)) { |
| 403 | 403 | |
@@ -423,7 +423,7 @@ discard block |
||
| 423 | 423 | $viewport_oy = round($viewport_oy * $yscale, 2); |
| 424 | 424 | } |
| 425 | 425 | |
| 426 | - if ($viewport_w>$viewBox[2] or $viewport_h>$viewBox[3]) { |
|
| 426 | + if ($viewport_w > $viewBox[2] or $viewport_h > $viewBox[3]) { |
|
| 427 | 427 | $svg = svg_clip_in_box($svg, $viewBox[0], $viewBox[1], $viewBox[2], $viewBox[3]); |
| 428 | 428 | } |
| 429 | 429 | |
@@ -440,7 +440,7 @@ discard block |
||
| 440 | 440 | $svg = svg_change_balise_svg($svg, $balise_svg, $attributs); |
| 441 | 441 | |
| 442 | 442 | // ajouter un background |
| 443 | - if ($background_color and $background_color!=='transparent') { |
|
| 443 | + if ($background_color and $background_color !== 'transparent') { |
|
| 444 | 444 | $svg = svg_ajouter_background($svg, $background_color); |
| 445 | 445 | } |
| 446 | 446 | |
@@ -458,9 +458,9 @@ discard block |
||
| 458 | 458 | */ |
| 459 | 459 | function svg_ajouter_background($img, $background_color) { |
| 460 | 460 | if ($svg = svg_charger($img) |
| 461 | - and $svg_infos = svg_lire_balise_svg($svg)){ |
|
| 461 | + and $svg_infos = svg_lire_balise_svg($svg)) { |
|
| 462 | 462 | |
| 463 | - if ($background_color and $background_color!=='transparent') { |
|
| 463 | + if ($background_color and $background_color !== 'transparent') { |
|
| 464 | 464 | list($balise_svg, $attributs) = $svg_infos; |
| 465 | 465 | |
| 466 | 466 | $background_color = svg_couleur_to_hexa($background_color); |
@@ -487,9 +487,9 @@ discard block |
||
| 487 | 487 | */ |
| 488 | 488 | function svg_ajouter_voile($img, $background_color, $opacity) { |
| 489 | 489 | if ($svg = svg_charger($img) |
| 490 | - and $svg_infos = svg_lire_balise_svg($svg)){ |
|
| 490 | + and $svg_infos = svg_lire_balise_svg($svg)) { |
|
| 491 | 491 | |
| 492 | - if ($background_color and $background_color!=='transparent') { |
|
| 492 | + if ($background_color and $background_color !== 'transparent') { |
|
| 493 | 493 | list($balise_svg, $attributs) = $svg_infos; |
| 494 | 494 | |
| 495 | 495 | $background_color = svg_couleur_to_hexa($background_color); |
@@ -516,10 +516,10 @@ discard block |
||
| 516 | 516 | */ |
| 517 | 517 | function svg_transformer($img, $attributs) { |
| 518 | 518 | if ($svg = svg_charger($img) |
| 519 | - and $svg_infos = svg_lire_balise_svg($svg)){ |
|
| 519 | + and $svg_infos = svg_lire_balise_svg($svg)) { |
|
| 520 | 520 | |
| 521 | 521 | if ($attributs) { |
| 522 | - list($balise_svg, ) = $svg_infos; |
|
| 522 | + list($balise_svg,) = $svg_infos; |
|
| 523 | 523 | $g = "<g"; |
| 524 | 524 | foreach ($attributs as $k=>$v) { |
| 525 | 525 | if (strlen($v)) { |
@@ -546,14 +546,14 @@ discard block |
||
| 546 | 546 | */ |
| 547 | 547 | function svg_apply_filter($img, $filter_def) { |
| 548 | 548 | if ($svg = svg_charger($img) |
| 549 | - and $svg_infos = svg_lire_balise_svg($svg)){ |
|
| 549 | + and $svg_infos = svg_lire_balise_svg($svg)) { |
|
| 550 | 550 | |
| 551 | 551 | if ($filter_def) { |
| 552 | - list($balise_svg, ) = $svg_infos; |
|
| 553 | - $filter_id = "filter-". substr(md5($filter_def . strlen($svg)), 0, 8); |
|
| 552 | + list($balise_svg,) = $svg_infos; |
|
| 553 | + $filter_id = "filter-".substr(md5($filter_def.strlen($svg)), 0, 8); |
|
| 554 | 554 | $filter = "<defs><filter id=\"$filter_id\">$filter_def</filter></defs>"; |
| 555 | 555 | $g = "<g filter=\"url(#$filter_id)\">"; |
| 556 | - $svg = svg_insert_shapes($svg, $filter . $g); |
|
| 556 | + $svg = svg_insert_shapes($svg, $filter.$g); |
|
| 557 | 557 | $svg = svg_insert_shapes($svg, "</g>", false); |
| 558 | 558 | } |
| 559 | 559 | return $svg; |
@@ -604,7 +604,7 @@ discard block |
||
| 604 | 604 | */ |
| 605 | 605 | function svg_flip($img, $HorV) { |
| 606 | 606 | if ($svg = svg_force_viewBox_px($img) |
| 607 | - and $svg_infos = svg_lire_balise_svg($svg)){ |
|
| 607 | + and $svg_infos = svg_lire_balise_svg($svg)) { |
|
| 608 | 608 | |
| 609 | 609 | list($balise_svg, $atts) = $svg_infos; |
| 610 | 610 | $viewBox = explode(' ', $atts['viewBox']); |
@@ -612,14 +612,14 @@ discard block |
||
| 612 | 612 | if (!in_array($HorV, ['h', 'H'])) { |
| 613 | 613 | $transform = "scale(-1,1)"; |
| 614 | 614 | |
| 615 | - $x = intval($viewBox[0]) + intval($viewBox[2]/2); |
|
| 615 | + $x = intval($viewBox[0]) + intval($viewBox[2] / 2); |
|
| 616 | 616 | $mx = -$x; |
| 617 | 617 | $transform = "translate($x, 0) $transform translate($mx, 0)"; |
| 618 | 618 | } |
| 619 | 619 | else { |
| 620 | 620 | $transform = "scale(1,-1)"; |
| 621 | 621 | |
| 622 | - $y = intval($viewBox[1]) + intval($viewBox[3]/2); |
|
| 622 | + $y = intval($viewBox[1]) + intval($viewBox[3] / 2); |
|
| 623 | 623 | $my = -$y; |
| 624 | 624 | $transform = "translate(0, $y) $transform translate(0, $my)"; |
| 625 | 625 | } |
@@ -641,7 +641,7 @@ discard block |
||
| 641 | 641 | */ |
| 642 | 642 | function svg_rotate($img, $angle, $center_x, $center_y) { |
| 643 | 643 | if ($svg = svg_force_viewBox_px($img) |
| 644 | - and $svg_infos = svg_lire_balise_svg($svg)){ |
|
| 644 | + and $svg_infos = svg_lire_balise_svg($svg)) { |
|
| 645 | 645 | |
| 646 | 646 | list($balise_svg, $atts) = $svg_infos; |
| 647 | 647 | $viewBox = explode(' ', $atts['viewBox']); |
@@ -63,8 +63,7 @@ discard block |
||
| 63 | 63 | } |
| 64 | 64 | if (is_null($maxlen)) { |
| 65 | 65 | $image = file_get_contents($fichier); |
| 66 | - } |
|
| 67 | - else { |
|
| 66 | + } else { |
|
| 68 | 67 | $image = file_get_contents($fichier, false,null,0, $maxlen); |
| 69 | 68 | } |
| 70 | 69 | // est-ce bien une image svg ? |
@@ -191,8 +190,7 @@ discard block |
||
| 191 | 190 | |
| 192 | 191 | if ($start === false or $start === 'end') { |
| 193 | 192 | $svg = str_replace("</svg>", $shapes . "</svg>", $svg); |
| 194 | - } |
|
| 195 | - else { |
|
| 193 | + } else { |
|
| 196 | 194 | $p = stripos($svg, "<svg"); |
| 197 | 195 | $p = strpos($svg, ">", $p); |
| 198 | 196 | $svg = substr_replace($svg, $shapes, $p+1, 0); |
@@ -253,8 +251,7 @@ discard block |
||
| 253 | 251 | if (strpos($couleur, "rgb(")===0) { |
| 254 | 252 | $c = explode(',', substr($couleur, 4)); |
| 255 | 253 | $couleur = _couleur_dec_to_hex(intval($c[0]), intval($c[1]), intval($c[2])); |
| 256 | - } |
|
| 257 | - else { |
|
| 254 | + } else { |
|
| 258 | 255 | $couleur = couleur_html_to_hex($couleur); |
| 259 | 256 | } |
| 260 | 257 | $couleur = '#'.ltrim($couleur,'#'); |
@@ -303,33 +300,27 @@ discard block |
||
| 303 | 300 | if (isset($attributs['width']) |
| 304 | 301 | and $w = svg_dimension_to_pixels($attributs['width'])) { |
| 305 | 302 | $width = $w; |
| 306 | - } |
|
| 307 | - else { |
|
| 303 | + } else { |
|
| 308 | 304 | // si on recupere la taille de la viewbox mais si la viewbox est petite on met un multiplicateur pour la taille finale |
| 309 | 305 | $width = $viewBox[2]; |
| 310 | 306 | if ($width < 1) { |
| 311 | 307 | $coeff = max($coeff, 1000); |
| 312 | - } |
|
| 313 | - elseif ($width < 10) { |
|
| 308 | + } elseif ($width < 10) { |
|
| 314 | 309 | $coeff = max($coeff, 100); |
| 315 | - } |
|
| 316 | - elseif ($width < 100) { |
|
| 310 | + } elseif ($width < 100) { |
|
| 317 | 311 | $coeff = max($coeff, 10); |
| 318 | 312 | } |
| 319 | 313 | } |
| 320 | 314 | if (isset($attributs['height']) |
| 321 | 315 | and $h = svg_dimension_to_pixels($attributs['height'])) { |
| 322 | 316 | $height = $h; |
| 323 | - } |
|
| 324 | - else { |
|
| 317 | + } else { |
|
| 325 | 318 | $height = $viewBox[3]; |
| 326 | 319 | if ($height < 1) { |
| 327 | 320 | $coeff = max($coeff, 1000); |
| 328 | - } |
|
| 329 | - elseif ($height < 10) { |
|
| 321 | + } elseif ($height < 10) { |
|
| 330 | 322 | $coeff = max($coeff, 100); |
| 331 | - } |
|
| 332 | - elseif ($height < 100) { |
|
| 323 | + } elseif ($height < 100) { |
|
| 333 | 324 | $coeff = max($coeff, 10); |
| 334 | 325 | } |
| 335 | 326 | } |
@@ -467,8 +458,7 @@ discard block |
||
| 467 | 458 | if (isset($attributs['viewBox'])) { |
| 468 | 459 | $viewBox = explode(' ', $attributs['viewBox']); |
| 469 | 460 | $rect = "<rect x=\"".$viewBox[0]."\" y=\"".$viewBox[1]."\" width=\"".$viewBox[2]."\" height=\"".$viewBox[3]."\" fill=\"$background_color\"/>"; |
| 470 | - } |
|
| 471 | - else { |
|
| 461 | + } else { |
|
| 472 | 462 | $rect = "<rect width=\"100%\" height=\"100%\" fill=\"$background_color\"/>"; |
| 473 | 463 | } |
| 474 | 464 | $svg = svg_insert_shapes($svg, $rect); |
@@ -496,8 +486,7 @@ discard block |
||
| 496 | 486 | if (isset($attributs['viewBox'])) { |
| 497 | 487 | $viewBox = explode(' ', $attributs['viewBox']); |
| 498 | 488 | $rect = "<rect x=\"".$viewBox[0]."\" y=\"".$viewBox[1]."\" width=\"".$viewBox[2]."\" height=\"".$viewBox[3]."\" fill=\"$background_color\" opacity=\"$opacity\"/>"; |
| 499 | - } |
|
| 500 | - else { |
|
| 489 | + } else { |
|
| 501 | 490 | $rect = "<rect width=\"100%\" height=\"100%\" fill=\"$background_color\"/>"; |
| 502 | 491 | } |
| 503 | 492 | $svg = svg_insert_shapes($svg, $rect, false); |
@@ -615,8 +604,7 @@ discard block |
||
| 615 | 604 | $x = intval($viewBox[0]) + intval($viewBox[2]/2); |
| 616 | 605 | $mx = -$x; |
| 617 | 606 | $transform = "translate($x, 0) $transform translate($mx, 0)"; |
| 618 | - } |
|
| 619 | - else { |
|
| 607 | + } else { |
|
| 620 | 608 | $transform = "scale(1,-1)"; |
| 621 | 609 | |
| 622 | 610 | $y = intval($viewBox[1]) + intval($viewBox[3]/2); |
@@ -675,8 +663,7 @@ discard block |
||
| 675 | 663 | $c = array_shift($colors); |
| 676 | 664 | if (strlen($c) == 4) { |
| 677 | 665 | $short[] = $c; |
| 678 | - } |
|
| 679 | - else { |
|
| 666 | + } else { |
|
| 680 | 667 | $long[] = $c; |
| 681 | 668 | } |
| 682 | 669 | } |
@@ -4,311 +4,311 @@ discard block |
||
| 4 | 4 | // ** ne pas modifier le fichier ** |
| 5 | 5 | |
| 6 | 6 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 7 | - return; |
|
| 7 | + return; |
|
| 8 | 8 | } |
| 9 | 9 | |
| 10 | 10 | $GLOBALS[$GLOBALS['idx_lang']] = array( |
| 11 | 11 | |
| 12 | - // A |
|
| 13 | - 'activer_plugin' => 'Активирайте плъгина', |
|
| 14 | - 'aide_non_disponible' => 'Тази част от рубриката "Помощник" все още не е публикувана на български език.', |
|
| 15 | - 'auteur' => 'Автор:', |
|
| 16 | - 'avis_acces_interdit' => 'Забранен достъп.', |
|
| 17 | - 'avis_article_modifie' => 'Предупреждение! @nom_auteur_modif@ е работил по тази статия преди @date_diff@ минути', |
|
| 18 | - 'avis_aucun_resultat' => 'Няма намерени резултати.', |
|
| 19 | - 'avis_chemin_invalide_1' => 'Името на файла, което сте избрали', |
|
| 20 | - 'avis_chemin_invalide_2' => 'е грешно. Моля, върнете се на предишната страница, за за проверите подадената информация. ', |
|
| 21 | - 'avis_connexion_echec_1' => 'Връзката към SQL сървъра се разпадна.', # MODIF |
|
| 22 | - 'avis_connexion_echec_2' => 'Моля, върнете се на предишната страница, за да проверите подадената информация.', |
|
| 23 | - 'avis_connexion_echec_3' => '<b>ВНИМАНИЕ!</b> За достъп до голяма част от сървърите е необходимо да се изпрати <b>заявка</b> за активиране достъпа до базите данни SQL, преди използването им. Ако не успеете да се свържете, проверете дали сте изпратили заявката.', # MODIF |
|
| 24 | - 'avis_connexion_ldap_echec_1' => 'Връзката с LDAP сървъра пропадна.', |
|
| 25 | - 'avis_connexion_ldap_echec_2' => 'Моля, върнете се на предишната страница, за за проверите подадената информация.', |
|
| 26 | - 'avis_connexion_ldap_echec_3' => 'Без използване на LDAP-поддръжка за вписване на потребители.', |
|
| 27 | - 'avis_deplacement_rubrique' => 'Предупреждение! Рубриката съдържа @contient_breves@ новина@scb@: ако желаете да я преместите, отметнете в полето за потвърждение. ', |
|
| 28 | - 'avis_erreur_connexion_mysql' => 'Грешка при свързване с SQL', |
|
| 29 | - 'avis_espace_interdit' => '<b>Забранена област</b><p>СПИП е вече инсталиран.', # MODIF |
|
| 30 | - 'avis_lecture_noms_bases_1' => 'Инсталаторът не може да прочете имената на инсталираните бази данни.', |
|
| 31 | - 'avis_lecture_noms_bases_2' => 'Или не съществува база данни, или свойството, позволяващо преглед на базите данни е забранено |
|
| 12 | + // A |
|
| 13 | + 'activer_plugin' => 'Активирайте плъгина', |
|
| 14 | + 'aide_non_disponible' => 'Тази част от рубриката "Помощник" все още не е публикувана на български език.', |
|
| 15 | + 'auteur' => 'Автор:', |
|
| 16 | + 'avis_acces_interdit' => 'Забранен достъп.', |
|
| 17 | + 'avis_article_modifie' => 'Предупреждение! @nom_auteur_modif@ е работил по тази статия преди @date_diff@ минути', |
|
| 18 | + 'avis_aucun_resultat' => 'Няма намерени резултати.', |
|
| 19 | + 'avis_chemin_invalide_1' => 'Името на файла, което сте избрали', |
|
| 20 | + 'avis_chemin_invalide_2' => 'е грешно. Моля, върнете се на предишната страница, за за проверите подадената информация. ', |
|
| 21 | + 'avis_connexion_echec_1' => 'Връзката към SQL сървъра се разпадна.', # MODIF |
|
| 22 | + 'avis_connexion_echec_2' => 'Моля, върнете се на предишната страница, за да проверите подадената информация.', |
|
| 23 | + 'avis_connexion_echec_3' => '<b>ВНИМАНИЕ!</b> За достъп до голяма част от сървърите е необходимо да се изпрати <b>заявка</b> за активиране достъпа до базите данни SQL, преди използването им. Ако не успеете да се свържете, проверете дали сте изпратили заявката.', # MODIF |
|
| 24 | + 'avis_connexion_ldap_echec_1' => 'Връзката с LDAP сървъра пропадна.', |
|
| 25 | + 'avis_connexion_ldap_echec_2' => 'Моля, върнете се на предишната страница, за за проверите подадената информация.', |
|
| 26 | + 'avis_connexion_ldap_echec_3' => 'Без използване на LDAP-поддръжка за вписване на потребители.', |
|
| 27 | + 'avis_deplacement_rubrique' => 'Предупреждение! Рубриката съдържа @contient_breves@ новина@scb@: ако желаете да я преместите, отметнете в полето за потвърждение. ', |
|
| 28 | + 'avis_erreur_connexion_mysql' => 'Грешка при свързване с SQL', |
|
| 29 | + 'avis_espace_interdit' => '<b>Забранена област</b><p>СПИП е вече инсталиран.', # MODIF |
|
| 30 | + 'avis_lecture_noms_bases_1' => 'Инсталаторът не може да прочете имената на инсталираните бази данни.', |
|
| 31 | + 'avis_lecture_noms_bases_2' => 'Или не съществува база данни, или свойството, позволяващо преглед на базите данни е забранено |
|
| 32 | 32 | поради съображения за сигурност (какъвто е случаят с много доставчици).', |
| 33 | - 'avis_lecture_noms_bases_3' => 'Ако втората възможност се окаже вярна, тогава е възможно да се използва базата данни, указана след Вашето влизане в системата.', |
|
| 34 | - 'avis_non_acces_page' => 'Забранен достъп до тази страница.', |
|
| 35 | - 'avis_operation_echec' => 'Операцията пропадна.', |
|
| 36 | - 'avis_suppression_base' => 'ПРЕДУПРЕЖДЕНИЕ: изтриването на данните е необратимо', |
|
| 33 | + 'avis_lecture_noms_bases_3' => 'Ако втората възможност се окаже вярна, тогава е възможно да се използва базата данни, указана след Вашето влизане в системата.', |
|
| 34 | + 'avis_non_acces_page' => 'Забранен достъп до тази страница.', |
|
| 35 | + 'avis_operation_echec' => 'Операцията пропадна.', |
|
| 36 | + 'avis_suppression_base' => 'ПРЕДУПРЕЖДЕНИЕ: изтриването на данните е необратимо', |
|
| 37 | 37 | |
| 38 | - // B |
|
| 39 | - 'bouton_acces_ldap' => 'Добавяне достъп до LDAP >>', |
|
| 40 | - 'bouton_ajouter' => 'Добавяне', |
|
| 41 | - 'bouton_demande_publication' => 'Заявка за публикуване на статията', |
|
| 42 | - 'bouton_desactive_tout' => 'Деактивирайте всички', |
|
| 43 | - 'bouton_effacer_tout' => 'Изтриване на ВСИЧКО', |
|
| 44 | - 'bouton_envoyer_message' => 'Последно съобщение: изпращане', |
|
| 45 | - 'bouton_modifier' => 'Промяна', |
|
| 46 | - 'bouton_radio_afficher' => 'Показване', |
|
| 47 | - 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Добяване към списъка на текущо свързаните редактори', |
|
| 48 | - 'bouton_radio_envoi_annonces_adresse' => 'Изпращане на съобщения до следния адрес:', |
|
| 49 | - 'bouton_radio_envoi_liste_nouveautes' => 'Изпращане на списък с новини', |
|
| 50 | - 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Изключване от списъка на текущо свързаните редактори', |
|
| 51 | - 'bouton_radio_non_envoi_annonces_editoriales' => 'Отказ от изпращане на редакторски съобщения', |
|
| 52 | - 'bouton_redirection' => 'ПРЕНАСОЧВАНЕ', |
|
| 53 | - 'bouton_relancer_installation' => 'Подновяване на инсталацията', |
|
| 54 | - 'bouton_suivant' => 'По-нататък', |
|
| 55 | - 'bouton_tenter_recuperation' => 'Опит за възстановяване', |
|
| 56 | - 'bouton_test_proxy' => 'Тестване на прокси', |
|
| 57 | - 'bouton_vider_cache' => 'Изпразване на кеш-паметта', |
|
| 38 | + // B |
|
| 39 | + 'bouton_acces_ldap' => 'Добавяне достъп до LDAP >>', |
|
| 40 | + 'bouton_ajouter' => 'Добавяне', |
|
| 41 | + 'bouton_demande_publication' => 'Заявка за публикуване на статията', |
|
| 42 | + 'bouton_desactive_tout' => 'Деактивирайте всички', |
|
| 43 | + 'bouton_effacer_tout' => 'Изтриване на ВСИЧКО', |
|
| 44 | + 'bouton_envoyer_message' => 'Последно съобщение: изпращане', |
|
| 45 | + 'bouton_modifier' => 'Промяна', |
|
| 46 | + 'bouton_radio_afficher' => 'Показване', |
|
| 47 | + 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Добяване към списъка на текущо свързаните редактори', |
|
| 48 | + 'bouton_radio_envoi_annonces_adresse' => 'Изпращане на съобщения до следния адрес:', |
|
| 49 | + 'bouton_radio_envoi_liste_nouveautes' => 'Изпращане на списък с новини', |
|
| 50 | + 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Изключване от списъка на текущо свързаните редактори', |
|
| 51 | + 'bouton_radio_non_envoi_annonces_editoriales' => 'Отказ от изпращане на редакторски съобщения', |
|
| 52 | + 'bouton_redirection' => 'ПРЕНАСОЧВАНЕ', |
|
| 53 | + 'bouton_relancer_installation' => 'Подновяване на инсталацията', |
|
| 54 | + 'bouton_suivant' => 'По-нататък', |
|
| 55 | + 'bouton_tenter_recuperation' => 'Опит за възстановяване', |
|
| 56 | + 'bouton_test_proxy' => 'Тестване на прокси', |
|
| 57 | + 'bouton_vider_cache' => 'Изпразване на кеш-паметта', |
|
| 58 | 58 | |
| 59 | - // C |
|
| 60 | - 'cache_modifiable_webmestre' => 'Параметърът може да бъде променен от уеб-администратора. ', |
|
| 61 | - 'calendrier_synchro' => 'Ако инсталирате приложение за дневник, съвместимо с <b>iCal</b>, ще можете да го синхронизирате с информацията от сайта.', |
|
| 59 | + // C |
|
| 60 | + 'cache_modifiable_webmestre' => 'Параметърът може да бъде променен от уеб-администратора. ', |
|
| 61 | + 'calendrier_synchro' => 'Ако инсталирате приложение за дневник, съвместимо с <b>iCal</b>, ще можете да го синхронизирате с информацията от сайта.', |
|
| 62 | 62 | |
| 63 | - // D |
|
| 64 | - 'date_mot_heures' => 'ч.', |
|
| 63 | + // D |
|
| 64 | + 'date_mot_heures' => 'ч.', |
|
| 65 | 65 | |
| 66 | - // E |
|
| 67 | - 'email' => 'електронен адрес', |
|
| 68 | - 'email_2' => 'електронен адрес:', |
|
| 69 | - 'entree_adresse_annuaire' => 'Адрес на директорията', |
|
| 70 | - 'entree_adresse_email' => 'Електронен адрес (е-mail)', |
|
| 71 | - 'entree_base_donnee_1' => 'Адрес на базата данни', |
|
| 72 | - 'entree_base_donnee_2' => '(Често адресът съвпада с адрес от Вашия сайт, понякога съответства на името «localhost», а понякога се оставя празен.)', |
|
| 73 | - 'entree_biographie' => 'Кратка биография с няколко думи.', |
|
| 74 | - 'entree_chemin_acces' => '<b>Въвеждане</b> на път:', |
|
| 75 | - 'entree_cle_pgp' => 'PGP ключ', |
|
| 76 | - 'entree_contenu_rubrique' => '(Кратко съдържание на рубриката.)', |
|
| 77 | - 'entree_identifiants_connexion' => 'Идентефикатори за свързване', |
|
| 78 | - 'entree_informations_connexion_ldap' => 'Моля, попълнете бланката с информацията за LDAP връзка. Тази информация ще получите от системния или мрежовия администратор.', |
|
| 79 | - 'entree_infos_perso' => 'Кой си ти?', |
|
| 80 | - 'entree_interieur_rubrique' => 'В рубриката:', |
|
| 81 | - 'entree_liens_sites' => '<b>Хипертекстова препратка</b> (препратка, сайт за посещаване и т.н.)', |
|
| 82 | - 'entree_login' => 'Вход', |
|
| 83 | - 'entree_login_connexion_1' => 'Потребителско име за свързване', |
|
| 84 | - 'entree_login_connexion_2' => '(Понякога съвпада с Вашето потребителско име към FTP достъпа, понякога се оставя празно)', |
|
| 85 | - 'entree_mot_passe' => 'Парола', |
|
| 86 | - 'entree_mot_passe_1' => 'Парола за свързване', |
|
| 87 | - 'entree_mot_passe_2' => '(Понякога съвпада с паролата Ви за FTP-достъп, понякога се оставя празно)', |
|
| 88 | - 'entree_nom_fichier' => 'Моля, попълнете име на файла @texte_compresse@:', |
|
| 89 | - 'entree_nom_pseudo' => 'Име или прякор', |
|
| 90 | - 'entree_nom_pseudo_1' => '(Име или прякор)', |
|
| 91 | - 'entree_nom_site' => 'Име на сайта', |
|
| 92 | - 'entree_nouveau_passe' => 'Нова парола', |
|
| 93 | - 'entree_passe_ldap' => 'Парола', |
|
| 94 | - 'entree_port_annuaire' => 'Номер на порта на директорията', |
|
| 95 | - 'entree_signature' => 'Подпис', |
|
| 96 | - 'entree_titre_obligatoire' => '<b>Заглавие</b> [Задължително]<br />', |
|
| 97 | - 'entree_url' => 'URL на сайта', |
|
| 98 | - 'erreur_plugin_fichier_absent' => 'Липсва файл', |
|
| 99 | - 'erreur_plugin_fichier_def_absent' => 'Файлът - дефиниция липсва', |
|
| 100 | - 'erreur_plugin_nom_fonction_interdit' => 'Забранено име на функцията', |
|
| 101 | - 'erreur_plugin_nom_manquant' => 'Липсва име на плъгина', |
|
| 102 | - 'erreur_plugin_prefix_manquant' => 'Не е определено име, указващо мястото на плъгина', |
|
| 103 | - 'erreur_plugin_tag_plugin_absent' => '<плъгин> липсва във файла - дефиниция', |
|
| 104 | - 'erreur_plugin_version_manquant' => 'Липсва версията на плъгина', |
|
| 66 | + // E |
|
| 67 | + 'email' => 'електронен адрес', |
|
| 68 | + 'email_2' => 'електронен адрес:', |
|
| 69 | + 'entree_adresse_annuaire' => 'Адрес на директорията', |
|
| 70 | + 'entree_adresse_email' => 'Електронен адрес (е-mail)', |
|
| 71 | + 'entree_base_donnee_1' => 'Адрес на базата данни', |
|
| 72 | + 'entree_base_donnee_2' => '(Често адресът съвпада с адрес от Вашия сайт, понякога съответства на името «localhost», а понякога се оставя празен.)', |
|
| 73 | + 'entree_biographie' => 'Кратка биография с няколко думи.', |
|
| 74 | + 'entree_chemin_acces' => '<b>Въвеждане</b> на път:', |
|
| 75 | + 'entree_cle_pgp' => 'PGP ключ', |
|
| 76 | + 'entree_contenu_rubrique' => '(Кратко съдържание на рубриката.)', |
|
| 77 | + 'entree_identifiants_connexion' => 'Идентефикатори за свързване', |
|
| 78 | + 'entree_informations_connexion_ldap' => 'Моля, попълнете бланката с информацията за LDAP връзка. Тази информация ще получите от системния или мрежовия администратор.', |
|
| 79 | + 'entree_infos_perso' => 'Кой си ти?', |
|
| 80 | + 'entree_interieur_rubrique' => 'В рубриката:', |
|
| 81 | + 'entree_liens_sites' => '<b>Хипертекстова препратка</b> (препратка, сайт за посещаване и т.н.)', |
|
| 82 | + 'entree_login' => 'Вход', |
|
| 83 | + 'entree_login_connexion_1' => 'Потребителско име за свързване', |
|
| 84 | + 'entree_login_connexion_2' => '(Понякога съвпада с Вашето потребителско име към FTP достъпа, понякога се оставя празно)', |
|
| 85 | + 'entree_mot_passe' => 'Парола', |
|
| 86 | + 'entree_mot_passe_1' => 'Парола за свързване', |
|
| 87 | + 'entree_mot_passe_2' => '(Понякога съвпада с паролата Ви за FTP-достъп, понякога се оставя празно)', |
|
| 88 | + 'entree_nom_fichier' => 'Моля, попълнете име на файла @texte_compresse@:', |
|
| 89 | + 'entree_nom_pseudo' => 'Име или прякор', |
|
| 90 | + 'entree_nom_pseudo_1' => '(Име или прякор)', |
|
| 91 | + 'entree_nom_site' => 'Име на сайта', |
|
| 92 | + 'entree_nouveau_passe' => 'Нова парола', |
|
| 93 | + 'entree_passe_ldap' => 'Парола', |
|
| 94 | + 'entree_port_annuaire' => 'Номер на порта на директорията', |
|
| 95 | + 'entree_signature' => 'Подпис', |
|
| 96 | + 'entree_titre_obligatoire' => '<b>Заглавие</b> [Задължително]<br />', |
|
| 97 | + 'entree_url' => 'URL на сайта', |
|
| 98 | + 'erreur_plugin_fichier_absent' => 'Липсва файл', |
|
| 99 | + 'erreur_plugin_fichier_def_absent' => 'Файлът - дефиниция липсва', |
|
| 100 | + 'erreur_plugin_nom_fonction_interdit' => 'Забранено име на функцията', |
|
| 101 | + 'erreur_plugin_nom_manquant' => 'Липсва име на плъгина', |
|
| 102 | + 'erreur_plugin_prefix_manquant' => 'Не е определено име, указващо мястото на плъгина', |
|
| 103 | + 'erreur_plugin_tag_plugin_absent' => '<плъгин> липсва във файла - дефиниция', |
|
| 104 | + 'erreur_plugin_version_manquant' => 'Липсва версията на плъгина', |
|
| 105 | 105 | |
| 106 | - // I |
|
| 107 | - 'ical_info1' => 'Тази страница представя няколко начина да останете във връзка с дейността на сайта.', |
|
| 108 | - 'ical_info2' => 'За повече информация, отидете на <a href="@spipnet@">Документация за СПИП</a>.', # MODIF |
|
| 109 | - 'ical_info_calendrier' => 'Имате на разположение два календара. Първият е карта на сайта, указваща всички публикувани статии. Вторият съдържа обявления за редакторите, както и най-новите лични съобщения до Вас. Този календар се показва само на Вас, благодарение на личнен ключ, който можете да променяте по всяко време чрез смяна на паролата.', |
|
| 110 | - 'ical_methode_http' => 'Сваляне', |
|
| 111 | - 'ical_methode_webcal' => 'Синхронизация (webcal://)', # MODIF |
|
| 112 | - 'ical_texte_js' => 'Един ред на скрипт Java позволява на всяка страница от сайта лесно да се показват най-новите публикувани статии.', |
|
| 113 | - 'ical_texte_prive' => 'Календарът е строго личен. Той уведомява за вътрешните редакторски дейности на сайта (напр. задачи, лични срещи, изпратени статии и новини и др.)', |
|
| 114 | - 'ical_texte_public' => 'Календарът Ви дава възможност да следите публичните дейности на сайта (напр. публикувани статии и новини).', |
|
| 115 | - 'ical_texte_rss' => 'Можете да обедините последните новини от сайта на всеки файлов четец от типа XML/RSS (Rich Site Summary). Това е същият формат, който позволява на СПИП да чете последните новини, публикувани от други сайтове като за целта използва съвместим формат за обмен.', |
|
| 116 | - 'ical_titre_js' => 'Скрипт Java', |
|
| 117 | - 'ical_titre_mailing' => 'Пощенски списък', |
|
| 118 | - 'ical_titre_rss' => 'Файлове за обединение', |
|
| 119 | - 'icone_activer_cookie' => 'Поставяне на cookie', |
|
| 120 | - 'icone_admin_plugin' => 'Управление на плъгините', |
|
| 121 | - 'icone_afficher_auteurs' => 'Показване на авторите', |
|
| 122 | - 'icone_afficher_visiteurs' => 'Показване на посетителите', |
|
| 123 | - 'icone_arret_discussion' => 'Прекъсване участието в тази дискусия', |
|
| 124 | - 'icone_calendrier' => 'Календар', |
|
| 125 | - 'icone_creer_auteur' => 'Създаване на автор и свързване със статията', |
|
| 126 | - 'icone_creer_mot_cle' => 'Създаване на ключова дума и свързване със статията', |
|
| 127 | - 'icone_creer_rubrique_2' => 'Създаване на рубрика', |
|
| 128 | - 'icone_modifier_article' => 'Промяна на статията', |
|
| 129 | - 'icone_modifier_rubrique' => 'Промяна на рубриката', |
|
| 130 | - 'icone_retour' => 'Обратно', |
|
| 131 | - 'icone_retour_article' => 'Обратно към статията', |
|
| 132 | - 'icone_supprimer_cookie' => 'Изтриване на cookie', |
|
| 133 | - 'icone_supprimer_rubrique' => 'Изтриване на рубриката', |
|
| 134 | - 'icone_supprimer_signature' => 'Изтриване на записа', |
|
| 135 | - 'icone_valider_signature' => 'Одобряване на записа', |
|
| 136 | - 'image_administrer_rubrique' => 'Управление на рубриката', |
|
| 137 | - 'impossible_modifier_login_auteur' => 'Impossible de modifier le login.', # MODIF |
|
| 138 | - 'impossible_modifier_pass_auteur' => 'Impossible de modifier le mot de passe.', # MODIF |
|
| 139 | - 'info_1_article' => '1 статия', |
|
| 140 | - 'info_activer_cookie' => 'Възможност за активиране на <b>cookie администриране</b>, което позволява |
|
| 106 | + // I |
|
| 107 | + 'ical_info1' => 'Тази страница представя няколко начина да останете във връзка с дейността на сайта.', |
|
| 108 | + 'ical_info2' => 'За повече информация, отидете на <a href="@spipnet@">Документация за СПИП</a>.', # MODIF |
|
| 109 | + 'ical_info_calendrier' => 'Имате на разположение два календара. Първият е карта на сайта, указваща всички публикувани статии. Вторият съдържа обявления за редакторите, както и най-новите лични съобщения до Вас. Този календар се показва само на Вас, благодарение на личнен ключ, който можете да променяте по всяко време чрез смяна на паролата.', |
|
| 110 | + 'ical_methode_http' => 'Сваляне', |
|
| 111 | + 'ical_methode_webcal' => 'Синхронизация (webcal://)', # MODIF |
|
| 112 | + 'ical_texte_js' => 'Един ред на скрипт Java позволява на всяка страница от сайта лесно да се показват най-новите публикувани статии.', |
|
| 113 | + 'ical_texte_prive' => 'Календарът е строго личен. Той уведомява за вътрешните редакторски дейности на сайта (напр. задачи, лични срещи, изпратени статии и новини и др.)', |
|
| 114 | + 'ical_texte_public' => 'Календарът Ви дава възможност да следите публичните дейности на сайта (напр. публикувани статии и новини).', |
|
| 115 | + 'ical_texte_rss' => 'Можете да обедините последните новини от сайта на всеки файлов четец от типа XML/RSS (Rich Site Summary). Това е същият формат, който позволява на СПИП да чете последните новини, публикувани от други сайтове като за целта използва съвместим формат за обмен.', |
|
| 116 | + 'ical_titre_js' => 'Скрипт Java', |
|
| 117 | + 'ical_titre_mailing' => 'Пощенски списък', |
|
| 118 | + 'ical_titre_rss' => 'Файлове за обединение', |
|
| 119 | + 'icone_activer_cookie' => 'Поставяне на cookie', |
|
| 120 | + 'icone_admin_plugin' => 'Управление на плъгините', |
|
| 121 | + 'icone_afficher_auteurs' => 'Показване на авторите', |
|
| 122 | + 'icone_afficher_visiteurs' => 'Показване на посетителите', |
|
| 123 | + 'icone_arret_discussion' => 'Прекъсване участието в тази дискусия', |
|
| 124 | + 'icone_calendrier' => 'Календар', |
|
| 125 | + 'icone_creer_auteur' => 'Създаване на автор и свързване със статията', |
|
| 126 | + 'icone_creer_mot_cle' => 'Създаване на ключова дума и свързване със статията', |
|
| 127 | + 'icone_creer_rubrique_2' => 'Създаване на рубрика', |
|
| 128 | + 'icone_modifier_article' => 'Промяна на статията', |
|
| 129 | + 'icone_modifier_rubrique' => 'Промяна на рубриката', |
|
| 130 | + 'icone_retour' => 'Обратно', |
|
| 131 | + 'icone_retour_article' => 'Обратно към статията', |
|
| 132 | + 'icone_supprimer_cookie' => 'Изтриване на cookie', |
|
| 133 | + 'icone_supprimer_rubrique' => 'Изтриване на рубриката', |
|
| 134 | + 'icone_supprimer_signature' => 'Изтриване на записа', |
|
| 135 | + 'icone_valider_signature' => 'Одобряване на записа', |
|
| 136 | + 'image_administrer_rubrique' => 'Управление на рубриката', |
|
| 137 | + 'impossible_modifier_login_auteur' => 'Impossible de modifier le login.', # MODIF |
|
| 138 | + 'impossible_modifier_pass_auteur' => 'Impossible de modifier le mot de passe.', # MODIF |
|
| 139 | + 'info_1_article' => '1 статия', |
|
| 140 | + 'info_activer_cookie' => 'Възможност за активиране на <b>cookie администриране</b>, което позволява |
|
| 141 | 141 | улеснено превключване между публичния сайт и личната зона.', |
| 142 | - 'info_administrateur' => 'Администратор', |
|
| 143 | - 'info_administrateur_1' => 'Администратор', |
|
| 144 | - 'info_administrateur_2' => 'на сайта (<i>внимавайте</i>)', |
|
| 145 | - 'info_administrateur_site_01' => 'Ако сте администратор на сайта, моля', |
|
| 146 | - 'info_administrateur_site_02' => 'посещаване на препратката', |
|
| 147 | - 'info_administrateurs' => 'Администратори', |
|
| 148 | - 'info_administrer_rubrique' => 'Вие можете да управлявате рубриката', |
|
| 149 | - 'info_adresse' => 'към адрес:', |
|
| 150 | - 'info_adresse_url' => 'Публичен URL на сайта ', |
|
| 151 | - 'info_aide_en_ligne' => 'Помощник', |
|
| 152 | - 'info_ajout_image' => 'Когато се добавят изображения под формата на приложени документи към |
|
| 142 | + 'info_administrateur' => 'Администратор', |
|
| 143 | + 'info_administrateur_1' => 'Администратор', |
|
| 144 | + 'info_administrateur_2' => 'на сайта (<i>внимавайте</i>)', |
|
| 145 | + 'info_administrateur_site_01' => 'Ако сте администратор на сайта, моля', |
|
| 146 | + 'info_administrateur_site_02' => 'посещаване на препратката', |
|
| 147 | + 'info_administrateurs' => 'Администратори', |
|
| 148 | + 'info_administrer_rubrique' => 'Вие можете да управлявате рубриката', |
|
| 149 | + 'info_adresse' => 'към адрес:', |
|
| 150 | + 'info_adresse_url' => 'Публичен URL на сайта ', |
|
| 151 | + 'info_aide_en_ligne' => 'Помощник', |
|
| 152 | + 'info_ajout_image' => 'Когато се добавят изображения под формата на приложени документи към |
|
| 153 | 153 | статия, СПИП автоматично създава умалени образи (винетки) |
| 154 | 154 | на поместените изображения. Това позволява, например да се създаде |
| 155 | 155 | автоматично галерия от изображения.', |
| 156 | - 'info_ajouter_rubrique' => 'Добавяне на друга рубрика за управление:', |
|
| 157 | - 'info_annonce_nouveautes' => 'Най-новите съобщения', |
|
| 158 | - 'info_article' => 'статия', |
|
| 159 | - 'info_article_2' => 'статии', |
|
| 160 | - 'info_article_a_paraitre' => 'Статии за одобрение със стара дата ', |
|
| 161 | - 'info_articles_02' => 'статии', |
|
| 162 | - 'info_articles_2' => 'Статии', |
|
| 163 | - 'info_articles_auteur' => 'Статиите на автора', |
|
| 164 | - 'info_articles_trouves' => 'Намерени статии', |
|
| 165 | - 'info_attente_validation' => 'Вашите статии, очакващи одобрение за публикуване', |
|
| 166 | - 'info_aujourdhui' => 'днес:', |
|
| 167 | - 'info_auteur_gere_toutes_rubriques_2' => 'Je gère <b>toutes les rubriques</b>', # MODIF |
|
| 168 | - 'info_auteurs' => 'Автори', |
|
| 169 | - 'info_auteurs_par_tri' => 'Автори@partri@', |
|
| 170 | - 'info_auteurs_trouves' => 'Намерени автори', |
|
| 171 | - 'info_authentification_externe' => 'Външно удостоверяване на автентичността', |
|
| 172 | - 'info_avertissement' => 'Предупреждение', |
|
| 173 | - 'info_base_installee' => 'Структурата на Вашата база данни е инсталирана.', |
|
| 174 | - 'info_chapeau' => 'Преглед', |
|
| 175 | - 'info_chapeau_2' => 'Въведение:', |
|
| 176 | - 'info_chemin_acces_1' => 'Опции: <b>Път за достъп до директорията</b>', |
|
| 177 | - 'info_chemin_acces_2' => 'От сега нататък Вие трябва да определяте пътя за достъп до данните в директорията. Тази информация дава възможност за преглед на потребителските профили, съхранени там.', |
|
| 178 | - 'info_chemin_acces_annuaire' => 'Опции: <b>Път за достъп</b>', |
|
| 179 | - 'info_choix_base' => 'Трета стъпка:', |
|
| 180 | - 'info_classement_1' => '<sup>st</sup> от общо @liste@', |
|
| 181 | - 'info_classement_2' => '<sup>th</sup> от общо @liste@', |
|
| 182 | - 'info_code_acces' => 'Не забравяйте личния си код за достъп!', |
|
| 183 | - 'info_config_suivi' => 'Ако адресът отговаря а даден пощенски списък, можете да окажете отдолу адресът, където участниците на сайта биха могли да се регистрират. Този адрес може да бъде URL (наример страницата, където се прави регистрация през Интернет страница), или електронен адрес, заедно с определена тема на писмото (например: <tt>@adresse_suivi@?subject=subscribe</tt>):', |
|
| 184 | - 'info_config_suivi_explication' => 'Можете да се абонирате за пощенския списък на сайта. За целта ще получите автоматично електронно съобщение с обявленията, свързани с новините и статиите, изпратени за публикуване.', |
|
| 185 | - 'info_confirmer_passe' => 'Потвърдете новата парола:', |
|
| 186 | - 'info_connexion_base' => 'Втора стъпка: <b>Опит за свързване с базата данни</b>', |
|
| 187 | - 'info_connexion_ldap_ok' => '<b>Успешна LDAP връзка</b><p> Преминете към следващата стъпка.', # MODIF |
|
| 188 | - 'info_connexion_mysql' => 'Първа стъпка: <b>Вашата SQL връзка</b>', |
|
| 189 | - 'info_connexion_ok' => 'Успешно свързване.', |
|
| 190 | - 'info_contact' => 'Контакт', |
|
| 191 | - 'info_contenu_articles' => 'Съдържание на статиите', |
|
| 192 | - 'info_creation_paragraphe' => '(За нов ред оставете празни редове.)', # MODIF |
|
| 193 | - 'info_creation_rubrique' => 'Трябва да създадете поне една рубрика,<br />преди да започнете да пишете статии.<br />', |
|
| 194 | - 'info_creation_tables' => 'Четвърта стъпка: <b>Създаване на таблици с бази данни</b>', |
|
| 195 | - 'info_creer_base' => '<b>Създаване</b> на нова база данни:', |
|
| 196 | - 'info_dans_rubrique' => 'В рубриката:', |
|
| 197 | - 'info_date_publication_anterieure' => 'Дата на предишно публикуване:', |
|
| 198 | - 'info_date_referencement' => 'ДАТА НА СВЪРЗВАНЕ НА САЙТА:', |
|
| 199 | - 'info_derniere_etape' => 'Последна стъпка: <b>Приключено!', |
|
| 200 | - 'info_descriptif' => 'Описание:', |
|
| 201 | - 'info_discussion_cours' => 'Дискусии в ход', |
|
| 202 | - 'info_ecrire_article' => 'Преди да започнете за пишете статии, трябва да създадете поне една рубрика.', |
|
| 203 | - 'info_email_envoi' => 'Електронен адрес на изпращача (по желание)', |
|
| 204 | - 'info_email_envoi_txt' => 'Впишете електронния адрес на изпращача, който използвате (по подразбиране, адресът на получателя ще се използва за адрес на изпращача):', |
|
| 205 | - 'info_email_webmestre' => 'Електронен адрес на уеб-администратора (незадължителен)', # MODIF |
|
| 206 | - 'info_envoi_email_automatique' => 'Автоматично изпращане на съобщение', |
|
| 207 | - 'info_envoyer_maintenant' => 'Изпращане', |
|
| 208 | - 'info_etape_suivante' => 'Преминете към следващата стъпка', |
|
| 209 | - 'info_etape_suivante_1' => 'Можете да преминете към следващата стъпка.', |
|
| 210 | - 'info_etape_suivante_2' => 'Можете да преминете към следващата стъпка.', |
|
| 211 | - 'info_exportation_base' => 'експортиране на базата данни в @archive@', |
|
| 212 | - 'info_facilite_suivi_activite' => 'За улесняване по-нататъшните действия на редакторите, |
|
| 156 | + 'info_ajouter_rubrique' => 'Добавяне на друга рубрика за управление:', |
|
| 157 | + 'info_annonce_nouveautes' => 'Най-новите съобщения', |
|
| 158 | + 'info_article' => 'статия', |
|
| 159 | + 'info_article_2' => 'статии', |
|
| 160 | + 'info_article_a_paraitre' => 'Статии за одобрение със стара дата ', |
|
| 161 | + 'info_articles_02' => 'статии', |
|
| 162 | + 'info_articles_2' => 'Статии', |
|
| 163 | + 'info_articles_auteur' => 'Статиите на автора', |
|
| 164 | + 'info_articles_trouves' => 'Намерени статии', |
|
| 165 | + 'info_attente_validation' => 'Вашите статии, очакващи одобрение за публикуване', |
|
| 166 | + 'info_aujourdhui' => 'днес:', |
|
| 167 | + 'info_auteur_gere_toutes_rubriques_2' => 'Je gère <b>toutes les rubriques</b>', # MODIF |
|
| 168 | + 'info_auteurs' => 'Автори', |
|
| 169 | + 'info_auteurs_par_tri' => 'Автори@partri@', |
|
| 170 | + 'info_auteurs_trouves' => 'Намерени автори', |
|
| 171 | + 'info_authentification_externe' => 'Външно удостоверяване на автентичността', |
|
| 172 | + 'info_avertissement' => 'Предупреждение', |
|
| 173 | + 'info_base_installee' => 'Структурата на Вашата база данни е инсталирана.', |
|
| 174 | + 'info_chapeau' => 'Преглед', |
|
| 175 | + 'info_chapeau_2' => 'Въведение:', |
|
| 176 | + 'info_chemin_acces_1' => 'Опции: <b>Път за достъп до директорията</b>', |
|
| 177 | + 'info_chemin_acces_2' => 'От сега нататък Вие трябва да определяте пътя за достъп до данните в директорията. Тази информация дава възможност за преглед на потребителските профили, съхранени там.', |
|
| 178 | + 'info_chemin_acces_annuaire' => 'Опции: <b>Път за достъп</b>', |
|
| 179 | + 'info_choix_base' => 'Трета стъпка:', |
|
| 180 | + 'info_classement_1' => '<sup>st</sup> от общо @liste@', |
|
| 181 | + 'info_classement_2' => '<sup>th</sup> от общо @liste@', |
|
| 182 | + 'info_code_acces' => 'Не забравяйте личния си код за достъп!', |
|
| 183 | + 'info_config_suivi' => 'Ако адресът отговаря а даден пощенски списък, можете да окажете отдолу адресът, където участниците на сайта биха могли да се регистрират. Този адрес може да бъде URL (наример страницата, където се прави регистрация през Интернет страница), или електронен адрес, заедно с определена тема на писмото (например: <tt>@adresse_suivi@?subject=subscribe</tt>):', |
|
| 184 | + 'info_config_suivi_explication' => 'Можете да се абонирате за пощенския списък на сайта. За целта ще получите автоматично електронно съобщение с обявленията, свързани с новините и статиите, изпратени за публикуване.', |
|
| 185 | + 'info_confirmer_passe' => 'Потвърдете новата парола:', |
|
| 186 | + 'info_connexion_base' => 'Втора стъпка: <b>Опит за свързване с базата данни</b>', |
|
| 187 | + 'info_connexion_ldap_ok' => '<b>Успешна LDAP връзка</b><p> Преминете към следващата стъпка.', # MODIF |
|
| 188 | + 'info_connexion_mysql' => 'Първа стъпка: <b>Вашата SQL връзка</b>', |
|
| 189 | + 'info_connexion_ok' => 'Успешно свързване.', |
|
| 190 | + 'info_contact' => 'Контакт', |
|
| 191 | + 'info_contenu_articles' => 'Съдържание на статиите', |
|
| 192 | + 'info_creation_paragraphe' => '(За нов ред оставете празни редове.)', # MODIF |
|
| 193 | + 'info_creation_rubrique' => 'Трябва да създадете поне една рубрика,<br />преди да започнете да пишете статии.<br />', |
|
| 194 | + 'info_creation_tables' => 'Четвърта стъпка: <b>Създаване на таблици с бази данни</b>', |
|
| 195 | + 'info_creer_base' => '<b>Създаване</b> на нова база данни:', |
|
| 196 | + 'info_dans_rubrique' => 'В рубриката:', |
|
| 197 | + 'info_date_publication_anterieure' => 'Дата на предишно публикуване:', |
|
| 198 | + 'info_date_referencement' => 'ДАТА НА СВЪРЗВАНЕ НА САЙТА:', |
|
| 199 | + 'info_derniere_etape' => 'Последна стъпка: <b>Приключено!', |
|
| 200 | + 'info_descriptif' => 'Описание:', |
|
| 201 | + 'info_discussion_cours' => 'Дискусии в ход', |
|
| 202 | + 'info_ecrire_article' => 'Преди да започнете за пишете статии, трябва да създадете поне една рубрика.', |
|
| 203 | + 'info_email_envoi' => 'Електронен адрес на изпращача (по желание)', |
|
| 204 | + 'info_email_envoi_txt' => 'Впишете електронния адрес на изпращача, който използвате (по подразбиране, адресът на получателя ще се използва за адрес на изпращача):', |
|
| 205 | + 'info_email_webmestre' => 'Електронен адрес на уеб-администратора (незадължителен)', # MODIF |
|
| 206 | + 'info_envoi_email_automatique' => 'Автоматично изпращане на съобщение', |
|
| 207 | + 'info_envoyer_maintenant' => 'Изпращане', |
|
| 208 | + 'info_etape_suivante' => 'Преминете към следващата стъпка', |
|
| 209 | + 'info_etape_suivante_1' => 'Можете да преминете към следващата стъпка.', |
|
| 210 | + 'info_etape_suivante_2' => 'Можете да преминете към следващата стъпка.', |
|
| 211 | + 'info_exportation_base' => 'експортиране на базата данни в @archive@', |
|
| 212 | + 'info_facilite_suivi_activite' => 'За улесняване по-нататъшните действия на редакторите, |
|
| 213 | 213 | СПИП изпраща по електронна поща съобщение с молбите за публикуване и одобрените статии до |
| 214 | 214 | някой пощенски списък |
| 215 | 215 | на редактори, например. |
| 216 | 216 | ', |
| 217 | - 'info_fichiers_authent' => 'Файл за удостоверяване автентичността: .htpasswd', |
|
| 218 | - 'info_forums_abo_invites' => 'Сайтът Ви съдържа форуми посредством предварителен абонамент; посетителите могат да се регистират за тях през публичния сайт.', |
|
| 219 | - 'info_gauche_admin_tech' => '<b>Само администратори имат достъп до тази страница.</b><p> Тя осигурява достъп до различни |
|
| 217 | + 'info_fichiers_authent' => 'Файл за удостоверяване автентичността: .htpasswd', |
|
| 218 | + 'info_forums_abo_invites' => 'Сайтът Ви съдържа форуми посредством предварителен абонамент; посетителите могат да се регистират за тях през публичния сайт.', |
|
| 219 | + 'info_gauche_admin_tech' => '<b>Само администратори имат достъп до тази страница.</b><p> Тя осигурява достъп до различни |
|
| 220 | 220 | технически задачи за поддръжка. Някои от тях позволяват специфичен процес на |
| 221 | 221 | идентификация и изискват FTP достъп до сайта.', # MODIF |
| 222 | - 'info_gauche_admin_vider' => '<b>Само администратори имат достъп до тази страница.</b><p> Тя осигурява достъп доразлични |
|
| 222 | + 'info_gauche_admin_vider' => '<b>Само администратори имат достъп до тази страница.</b><p> Тя осигурява достъп доразлични |
|
| 223 | 223 | технически задачи за поддръжка. Някои от тях позволяват специфичен процес на |
| 224 | 224 | идентификация и изискват FTP достъп до сайта.', # MODIF |
| 225 | - 'info_gauche_auteurs' => 'Тук ще намерите всички автори на сайта. |
|
| 225 | + 'info_gauche_auteurs' => 'Тук ще намерите всички автори на сайта. |
|
| 226 | 226 | Статусът на всеки от тях е обозначен с цвета на неговата икона (редактор - жълта; администратор - зелена).', |
| 227 | - 'info_gauche_auteurs_exterieurs' => 'Външни автори, без достъп до сайта, са обозначени със синя икона; изтритите автори - с кошче за боклук.', # MODIF |
|
| 228 | - 'info_gauche_messagerie' => 'Изпращането на съобщения позволява да се обменя информация между редакторите, да се съхраняват бележки (за лично ползване) или да се публикуват обяви в началната страница на личната зона (ако сте администратор).', |
|
| 229 | - 'info_gauche_statistiques_referers' => 'Тази страница показва списък с <i>препратки към сайтове</i>: т.е. сайтовете, съдържащи връзка към Вашия сайт, само за вчера и днес: този списък се акуализира на всеки 24 часа.', |
|
| 230 | - 'info_gauche_visiteurs_enregistres' => 'Тук ще намерите посетителите, регистрирани |
|
| 227 | + 'info_gauche_auteurs_exterieurs' => 'Външни автори, без достъп до сайта, са обозначени със синя икона; изтритите автори - с кошче за боклук.', # MODIF |
|
| 228 | + 'info_gauche_messagerie' => 'Изпращането на съобщения позволява да се обменя информация между редакторите, да се съхраняват бележки (за лично ползване) или да се публикуват обяви в началната страница на личната зона (ако сте администратор).', |
|
| 229 | + 'info_gauche_statistiques_referers' => 'Тази страница показва списък с <i>препратки към сайтове</i>: т.е. сайтовете, съдържащи връзка към Вашия сайт, само за вчера и днес: този списък се акуализира на всеки 24 часа.', |
|
| 230 | + 'info_gauche_visiteurs_enregistres' => 'Тук ще намерите посетителите, регистрирани |
|
| 231 | 231 | в публичната зона на сайта (форумите са с предварително записване).', |
| 232 | - 'info_generation_miniatures_images' => 'Генерирана на умалени образи на изображенията', |
|
| 233 | - 'info_hebergeur_desactiver_envoi_email' => 'Някои доставчици не позволяват изпращането на автоматични съобщения |
|
| 232 | + 'info_generation_miniatures_images' => 'Генерирана на умалени образи на изображенията', |
|
| 233 | + 'info_hebergeur_desactiver_envoi_email' => 'Някои доставчици не позволяват изпращането на автоматични съобщения |
|
| 234 | 234 | от техните сървъри. В този случай, следните свойства |
| 235 | 235 | на СПИП не работят:', |
| 236 | - 'info_hier' => 'вчера:', |
|
| 237 | - 'info_identification_publique' => 'Публична самоличност...', |
|
| 238 | - 'info_image_process' => 'Изберете най-удобният начин да създавате миниатюри, чрез натискане въру съответната картинка.', |
|
| 239 | - 'info_image_process2' => '<b>N.B.</b> <i>Ако не можете да видите никакво изображение, следователно сървърът Ви не е конфигуриран да използва такива инструменти. Ако искате да ползвате това свойство, трябва да се свържете с доставчика си и да поискате да ви инсталират разширения от типа "GD" или "Imagick"</i>', # MODIF |
|
| 240 | - 'info_images_auto' => 'Автоматично изчислени изображения', |
|
| 241 | - 'info_informations_personnelles' => 'Стъпка пет: <b>Лични данни</b>', |
|
| 242 | - 'info_inscription_automatique' => 'Автоматична регистрация на нови редактори', |
|
| 243 | - 'info_jeu_caractere' => 'Кодировка на сайта', |
|
| 244 | - 'info_jours' => 'дни', |
|
| 245 | - 'info_laisser_champs_vides' => 'оставите празни полетата)', |
|
| 246 | - 'info_langues' => 'Езици на сайта', |
|
| 247 | - 'info_ldap_ok' => 'Инсталирана е аутентификация за LDAP.', |
|
| 248 | - 'info_lien_hypertexte' => 'Хипертекстова препратка:', |
|
| 249 | - 'info_liste_redacteurs_connectes' => 'Списък на свързаните редактори', |
|
| 250 | - 'info_login_existant' => 'Потребителското име вече съществува.', |
|
| 251 | - 'info_login_trop_court' => 'Потребителското име е твърде кратко.', |
|
| 252 | - 'info_maximum' => 'максимум:', |
|
| 253 | - 'info_meme_rubrique' => 'В същата рубрика', |
|
| 254 | - 'info_message_en_redaction' => 'Съобщения в процес на обработка', |
|
| 255 | - 'info_message_technique' => 'Техническо съобщение:', |
|
| 256 | - 'info_messagerie_interne' => 'Система за вътрешни съобщения', |
|
| 257 | - 'info_mise_a_niveau_base' => 'Актуализиране на базата данни SQL', |
|
| 258 | - 'info_mise_a_niveau_base_2' => '{{Предупреждение!}} Инсталираната версия на СПИП |
|
| 236 | + 'info_hier' => 'вчера:', |
|
| 237 | + 'info_identification_publique' => 'Публична самоличност...', |
|
| 238 | + 'info_image_process' => 'Изберете най-удобният начин да създавате миниатюри, чрез натискане въру съответната картинка.', |
|
| 239 | + 'info_image_process2' => '<b>N.B.</b> <i>Ако не можете да видите никакво изображение, следователно сървърът Ви не е конфигуриран да използва такива инструменти. Ако искате да ползвате това свойство, трябва да се свържете с доставчика си и да поискате да ви инсталират разширения от типа "GD" или "Imagick"</i>', # MODIF |
|
| 240 | + 'info_images_auto' => 'Автоматично изчислени изображения', |
|
| 241 | + 'info_informations_personnelles' => 'Стъпка пет: <b>Лични данни</b>', |
|
| 242 | + 'info_inscription_automatique' => 'Автоматична регистрация на нови редактори', |
|
| 243 | + 'info_jeu_caractere' => 'Кодировка на сайта', |
|
| 244 | + 'info_jours' => 'дни', |
|
| 245 | + 'info_laisser_champs_vides' => 'оставите празни полетата)', |
|
| 246 | + 'info_langues' => 'Езици на сайта', |
|
| 247 | + 'info_ldap_ok' => 'Инсталирана е аутентификация за LDAP.', |
|
| 248 | + 'info_lien_hypertexte' => 'Хипертекстова препратка:', |
|
| 249 | + 'info_liste_redacteurs_connectes' => 'Списък на свързаните редактори', |
|
| 250 | + 'info_login_existant' => 'Потребителското име вече съществува.', |
|
| 251 | + 'info_login_trop_court' => 'Потребителското име е твърде кратко.', |
|
| 252 | + 'info_maximum' => 'максимум:', |
|
| 253 | + 'info_meme_rubrique' => 'В същата рубрика', |
|
| 254 | + 'info_message_en_redaction' => 'Съобщения в процес на обработка', |
|
| 255 | + 'info_message_technique' => 'Техническо съобщение:', |
|
| 256 | + 'info_messagerie_interne' => 'Система за вътрешни съобщения', |
|
| 257 | + 'info_mise_a_niveau_base' => 'Актуализиране на базата данни SQL', |
|
| 258 | + 'info_mise_a_niveau_base_2' => '{{Предупреждение!}} Инсталираната версия на СПИП |
|
| 259 | 259 | е по-стара от тази, показана на този сайт |
| 260 | 260 | Има риск за изгубване на данни, както и Вашият сайт да |
| 261 | 261 | спре да работи.<br />{{Преинсталирай |
| 262 | 262 | файловете на СПИП.}}', |
| 263 | - 'info_modifier_rubrique' => 'Промяна на настройките на рубриката:', |
|
| 264 | - 'info_modifier_titre' => 'Промяна: @titre@', |
|
| 265 | - 'info_mon_site_spip' => 'Моят сайт под СПИП', |
|
| 266 | - 'info_moyenne' => 'средно:', |
|
| 267 | - 'info_multi_cet_article' => 'Език на статията:', |
|
| 268 | - 'info_multi_langues_choisies' => 'Изберете по-долу езиците, които желаете да са активни за редакторите на сайта. |
|
| 263 | + 'info_modifier_rubrique' => 'Промяна на настройките на рубриката:', |
|
| 264 | + 'info_modifier_titre' => 'Промяна: @titre@', |
|
| 265 | + 'info_mon_site_spip' => 'Моят сайт под СПИП', |
|
| 266 | + 'info_moyenne' => 'средно:', |
|
| 267 | + 'info_multi_cet_article' => 'Език на статията:', |
|
| 268 | + 'info_multi_langues_choisies' => 'Изберете по-долу езиците, които желаете да са активни за редакторите на сайта. |
|
| 269 | 269 | Езиците, които вече са използвани в сайта (в началото на списъка) не могат да бъдат деактивирани.', |
| 270 | - 'info_multi_secteurs' => ' ... само за рубрики, намиращи се в схемата?', |
|
| 271 | - 'info_nom' => 'Име', |
|
| 272 | - 'info_nom_destinataire' => 'Име на получателя', |
|
| 273 | - 'info_nom_site' => 'Име на сайта Ви', |
|
| 274 | - 'info_nombre_articles' => '@nb_articles@ статии,', |
|
| 275 | - 'info_nombre_rubriques' => '@nb_rubriques@ рубрики,', |
|
| 276 | - 'info_nombre_sites' => '@nb_sites@ сайтове,', |
|
| 277 | - 'info_non_deplacer' => 'Не правете нищо...', |
|
| 278 | - 'info_non_envoi_annonce_dernieres_nouveautes' => 'СПИП може да изпраща регулярно информация за новостите на сайта. |
|
| 270 | + 'info_multi_secteurs' => ' ... само за рубрики, намиращи се в схемата?', |
|
| 271 | + 'info_nom' => 'Име', |
|
| 272 | + 'info_nom_destinataire' => 'Име на получателя', |
|
| 273 | + 'info_nom_site' => 'Име на сайта Ви', |
|
| 274 | + 'info_nombre_articles' => '@nb_articles@ статии,', |
|
| 275 | + 'info_nombre_rubriques' => '@nb_rubriques@ рубрики,', |
|
| 276 | + 'info_nombre_sites' => '@nb_sites@ сайтове,', |
|
| 277 | + 'info_non_deplacer' => 'Не правете нищо...', |
|
| 278 | + 'info_non_envoi_annonce_dernieres_nouveautes' => 'СПИП може да изпраща регулярно информация за новостите на сайта. |
|
| 279 | 279 | (напр. съобщения за наскоро публикуваните статии и новини).', |
| 280 | - 'info_non_envoi_liste_nouveautes' => 'Бе изпращане на списък с най-новите съобщения', |
|
| 281 | - 'info_non_modifiable' => 'промяната е невъзможна', |
|
| 282 | - 'info_non_suppression_mot_cle' => 'Отказ от изтриване на ключовата дума.', |
|
| 283 | - 'info_notes' => 'Бележки под линия', |
|
| 284 | - 'info_nouvel_article' => 'Нова статия', |
|
| 285 | - 'info_nouvelle_traduction' => 'Нов превод:', |
|
| 286 | - 'info_numero_article' => 'НОМЕР НА СТАТИЯТА:', |
|
| 287 | - 'info_obligatoire_02' => '[Задължително]', # MODIF |
|
| 288 | - 'info_option_accepter_visiteurs' => 'Позволяване регистрацията на посетители от публичния сайт', |
|
| 289 | - 'info_option_ne_pas_accepter_visiteurs' => 'Отказ за регистрация на посетител', |
|
| 290 | - 'info_options_avancees' => 'ПОДРОБНИ ОПЦИИ', |
|
| 291 | - 'info_ou' => 'или ...', |
|
| 292 | - 'info_page_interdite' => 'Забранена страница', |
|
| 293 | - 'info_par_nombre_article' => '(по номер на статията)', |
|
| 294 | - 'info_passe_trop_court' => 'Паролата не е достатъчно дълга.', |
|
| 295 | - 'info_passes_identiques' => 'Двете пароли не съвадат.', |
|
| 296 | - 'info_plus_cinq_car' => 'повече от 5 знака', |
|
| 297 | - 'info_plus_cinq_car_2' => '(повече от 5 знака)', |
|
| 298 | - 'info_plus_trois_car' => '(повече от 3 знака)', |
|
| 299 | - 'info_popularite' => 'популярност: @popularite@; посещения: @visites@', |
|
| 300 | - 'info_post_scriptum' => 'Постскриптум', |
|
| 301 | - 'info_post_scriptum_2' => 'Постскриптум:', |
|
| 302 | - 'info_pour' => 'за', |
|
| 303 | - 'info_preview_texte' => 'Възможно е да се прави предварителен преглед на сайта все едно, че всички статии и новини (които имат статус "изпратени") са вече публикувани. Да бъде ли даден достъп към тази функция на администраторите само, да бъде ли възможна за всички автори на сайта или да бъде изключена напълно?', # MODIF |
|
| 304 | - 'info_procedez_par_etape' => 'моля, продължете напред стъпка по стъпка', |
|
| 305 | - 'info_procedure_maj_version' => 'процедурата по обновяване трябва да се стартира, |
|
| 280 | + 'info_non_envoi_liste_nouveautes' => 'Бе изпращане на списък с най-новите съобщения', |
|
| 281 | + 'info_non_modifiable' => 'промяната е невъзможна', |
|
| 282 | + 'info_non_suppression_mot_cle' => 'Отказ от изтриване на ключовата дума.', |
|
| 283 | + 'info_notes' => 'Бележки под линия', |
|
| 284 | + 'info_nouvel_article' => 'Нова статия', |
|
| 285 | + 'info_nouvelle_traduction' => 'Нов превод:', |
|
| 286 | + 'info_numero_article' => 'НОМЕР НА СТАТИЯТА:', |
|
| 287 | + 'info_obligatoire_02' => '[Задължително]', # MODIF |
|
| 288 | + 'info_option_accepter_visiteurs' => 'Позволяване регистрацията на посетители от публичния сайт', |
|
| 289 | + 'info_option_ne_pas_accepter_visiteurs' => 'Отказ за регистрация на посетител', |
|
| 290 | + 'info_options_avancees' => 'ПОДРОБНИ ОПЦИИ', |
|
| 291 | + 'info_ou' => 'или ...', |
|
| 292 | + 'info_page_interdite' => 'Забранена страница', |
|
| 293 | + 'info_par_nombre_article' => '(по номер на статията)', |
|
| 294 | + 'info_passe_trop_court' => 'Паролата не е достатъчно дълга.', |
|
| 295 | + 'info_passes_identiques' => 'Двете пароли не съвадат.', |
|
| 296 | + 'info_plus_cinq_car' => 'повече от 5 знака', |
|
| 297 | + 'info_plus_cinq_car_2' => '(повече от 5 знака)', |
|
| 298 | + 'info_plus_trois_car' => '(повече от 3 знака)', |
|
| 299 | + 'info_popularite' => 'популярност: @popularite@; посещения: @visites@', |
|
| 300 | + 'info_post_scriptum' => 'Постскриптум', |
|
| 301 | + 'info_post_scriptum_2' => 'Постскриптум:', |
|
| 302 | + 'info_pour' => 'за', |
|
| 303 | + 'info_preview_texte' => 'Възможно е да се прави предварителен преглед на сайта все едно, че всички статии и новини (които имат статус "изпратени") са вече публикувани. Да бъде ли даден достъп към тази функция на администраторите само, да бъде ли възможна за всички автори на сайта или да бъде изключена напълно?', # MODIF |
|
| 304 | + 'info_procedez_par_etape' => 'моля, продължете напред стъпка по стъпка', |
|
| 305 | + 'info_procedure_maj_version' => 'процедурата по обновяване трябва да се стартира, |
|
| 306 | 306 | за да може базата данни да се адаптира към новата версия на СПИП.', |
| 307 | - 'info_ps' => 'П.С. ', |
|
| 308 | - 'info_publier' => 'публикуване', |
|
| 309 | - 'info_publies' => 'Вашите публикувани статии', |
|
| 310 | - 'info_question_accepter_visiteurs' => 'Ако шаблоните на сайта Ви позволяват посетителите да се регистират без да влизат в личната зона, активирайте следната опция:', |
|
| 311 | - 'info_question_inscription_nouveaux_redacteurs' => 'Позволявате ли регистрацията на нови редактори от |
|
| 307 | + 'info_ps' => 'П.С. ', |
|
| 308 | + 'info_publier' => 'публикуване', |
|
| 309 | + 'info_publies' => 'Вашите публикувани статии', |
|
| 310 | + 'info_question_accepter_visiteurs' => 'Ако шаблоните на сайта Ви позволяват посетителите да се регистират без да влизат в личната зона, активирайте следната опция:', |
|
| 311 | + 'info_question_inscription_nouveaux_redacteurs' => 'Позволявате ли регистрацията на нови редактори от |
|
| 312 | 312 | публикувания сайт. Ако сте съгласни, посетителите трябва да се |
| 313 | 313 | регистрират през автоматичната форма, за да имат достъп до личната зона и |
| 314 | 314 | да предложат свои собствени статии. <blockquote><i>По време на регистрацията |
@@ -317,208 +317,208 @@ discard block |
||
| 317 | 317 | доставчици спират съобщения, изпратени |
| 318 | 318 | до техни сървъри: в този случай автоматичната регистрация |
| 319 | 319 | не би могла да се осъществи.', # MODIF |
| 320 | - 'info_qui_edite' => '@nom_auteur_modif@ a travaillé sur ce contenu il y a @date_diff@ minutes', # MODIF |
|
| 321 | - 'info_racine_site' => 'Схема на сайта', |
|
| 322 | - 'info_recharger_page' => 'Моля, презаредете страницата след малко.', |
|
| 323 | - 'info_recherche_auteur_zero' => 'Няма намерени резултати за @cherche_auteur@.', |
|
| 324 | - 'info_recommencer' => 'Моля, опитайте отново.', |
|
| 325 | - 'info_redacteur_1' => 'Редактор', |
|
| 326 | - 'info_redacteur_2' => 'достъп до личната зона(<i>препоръчително</i>)', |
|
| 327 | - 'info_redacteurs' => 'Редактори', |
|
| 328 | - 'info_redaction_en_cours' => 'В ХОД Е ПИСАНЕ', |
|
| 329 | - 'info_redirection' => 'Пренасочване', |
|
| 330 | - 'info_refuses' => 'Вашите отхвърлени статии', |
|
| 331 | - 'info_reglage_ldap' => 'Опции: <b>Приспособяване на вписването чрез LDAP</b>', |
|
| 332 | - 'info_renvoi_article' => '<b>Пренасочване.</b> Статията се отнася към страница:', |
|
| 333 | - 'info_reserve_admin' => 'Този адрес може да се променя само от администратори.', |
|
| 334 | - 'info_restreindre_rubrique' => 'Забрана за управление на рубриката:', |
|
| 335 | - 'info_resultat_recherche' => 'Намерени резултати:', |
|
| 336 | - 'info_rubriques' => 'Рубрики', |
|
| 337 | - 'info_rubriques_02' => 'рубрики', |
|
| 338 | - 'info_rubriques_trouvees' => 'Намерени рубрики', |
|
| 339 | - 'info_sans_titre' => 'Без заглавие', |
|
| 340 | - 'info_selection_chemin_acces' => '<b>Изберете</b> по-долу път за достъп в директорията:', |
|
| 341 | - 'info_signatures' => 'подписи', |
|
| 342 | - 'info_site' => 'Сайт', |
|
| 343 | - 'info_site_2' => 'сайт:', |
|
| 344 | - 'info_site_min' => 'сайт', |
|
| 345 | - 'info_site_reference_2' => 'Свързан сайт', |
|
| 346 | - 'info_site_web' => 'ИНТЕРНЕТ САЙТ:', # MODIF |
|
| 347 | - 'info_sites' => 'сайтове', |
|
| 348 | - 'info_sites_lies_mot' => 'Свързани сайтове, асоциирани с ключовата дума', |
|
| 349 | - 'info_sites_proxy' => 'Използване на прокси', |
|
| 350 | - 'info_sites_trouves' => 'Намерени сайтове', |
|
| 351 | - 'info_sous_titre' => 'Подзаглавие:', |
|
| 352 | - 'info_statut_administrateur' => 'Администратор', |
|
| 353 | - 'info_statut_auteur' => 'Статус на автора:', # MODIF |
|
| 354 | - 'info_statut_auteur_a_confirmer' => 'Регистрация, предстояща за потвърждение', |
|
| 355 | - 'info_statut_auteur_autre' => 'Друг статус:', |
|
| 356 | - 'info_statut_redacteur' => 'Редактор', |
|
| 357 | - 'info_statut_utilisateurs_1' => 'Статус "по подразбиране" на вписаните потребители', |
|
| 358 | - 'info_statut_utilisateurs_2' => 'Изберете статус за хората, вписани в LDAP-директорията при свързването им за първи път. По-късно ще можете да променяте тази характеристика за всеки автор по отделно.', |
|
| 359 | - 'info_suivi_activite' => 'Дейности на редакторите', |
|
| 360 | - 'info_surtitre' => 'Челно заглавие:', |
|
| 361 | - 'info_syndication_integrale_1' => 'Сайтът Ви предлага файлове за обединение (вж <a href="@url@">@titre@</a>).', |
|
| 362 | - 'info_syndication_integrale_2' => 'Желаете ли да изпратите цели статии или само резюме от няколко стотин знака?', |
|
| 363 | - 'info_taille_maximale_vignette' => 'Максимален размер на винетките, който е генериран от системата:', |
|
| 364 | - 'info_terminer_installation' => 'Сега можете да приключите с процеса по стандартна инсталация.', |
|
| 365 | - 'info_texte' => 'Текст', |
|
| 366 | - 'info_texte_explicatif' => 'Обяснителен текст', |
|
| 367 | - 'info_texte_long' => '(текстът е прекалено дълъг: той ще се появи в няколко части, които ще бъдат събрани след одобрението.)', |
|
| 368 | - 'info_texte_message' => 'Текст на съобщението:', # MODIF |
|
| 369 | - 'info_texte_message_02' => 'Текст на съобщение', |
|
| 370 | - 'info_titre' => 'Заглавие:', |
|
| 371 | - 'info_total' => 'общо:', |
|
| 372 | - 'info_tous_articles_en_redaction' => 'Всички статии в процес на обработка', |
|
| 373 | - 'info_tous_articles_presents' => 'Всички статии в рубриката', |
|
| 374 | - 'info_tous_les' => 'всички:', |
|
| 375 | - 'info_tout_site' => 'Целият сайт', |
|
| 376 | - 'info_tout_site2' => 'Статията не е преведена на дадения език.', |
|
| 377 | - 'info_tout_site3' => 'Статията е преведена на дадения език, но след това са направени промени в основната статия. Преводът изисква актуализация.', |
|
| 378 | - 'info_tout_site4' => 'Статията е преведена на дадения език, а преводът - актуализиран.', |
|
| 379 | - 'info_tout_site5' => 'Оригинална статия.', |
|
| 380 | - 'info_tout_site6' => '<b>Предупреждение:</b> показани са само оригинални статии. |
|
| 320 | + 'info_qui_edite' => '@nom_auteur_modif@ a travaillé sur ce contenu il y a @date_diff@ minutes', # MODIF |
|
| 321 | + 'info_racine_site' => 'Схема на сайта', |
|
| 322 | + 'info_recharger_page' => 'Моля, презаредете страницата след малко.', |
|
| 323 | + 'info_recherche_auteur_zero' => 'Няма намерени резултати за @cherche_auteur@.', |
|
| 324 | + 'info_recommencer' => 'Моля, опитайте отново.', |
|
| 325 | + 'info_redacteur_1' => 'Редактор', |
|
| 326 | + 'info_redacteur_2' => 'достъп до личната зона(<i>препоръчително</i>)', |
|
| 327 | + 'info_redacteurs' => 'Редактори', |
|
| 328 | + 'info_redaction_en_cours' => 'В ХОД Е ПИСАНЕ', |
|
| 329 | + 'info_redirection' => 'Пренасочване', |
|
| 330 | + 'info_refuses' => 'Вашите отхвърлени статии', |
|
| 331 | + 'info_reglage_ldap' => 'Опции: <b>Приспособяване на вписването чрез LDAP</b>', |
|
| 332 | + 'info_renvoi_article' => '<b>Пренасочване.</b> Статията се отнася към страница:', |
|
| 333 | + 'info_reserve_admin' => 'Този адрес може да се променя само от администратори.', |
|
| 334 | + 'info_restreindre_rubrique' => 'Забрана за управление на рубриката:', |
|
| 335 | + 'info_resultat_recherche' => 'Намерени резултати:', |
|
| 336 | + 'info_rubriques' => 'Рубрики', |
|
| 337 | + 'info_rubriques_02' => 'рубрики', |
|
| 338 | + 'info_rubriques_trouvees' => 'Намерени рубрики', |
|
| 339 | + 'info_sans_titre' => 'Без заглавие', |
|
| 340 | + 'info_selection_chemin_acces' => '<b>Изберете</b> по-долу път за достъп в директорията:', |
|
| 341 | + 'info_signatures' => 'подписи', |
|
| 342 | + 'info_site' => 'Сайт', |
|
| 343 | + 'info_site_2' => 'сайт:', |
|
| 344 | + 'info_site_min' => 'сайт', |
|
| 345 | + 'info_site_reference_2' => 'Свързан сайт', |
|
| 346 | + 'info_site_web' => 'ИНТЕРНЕТ САЙТ:', # MODIF |
|
| 347 | + 'info_sites' => 'сайтове', |
|
| 348 | + 'info_sites_lies_mot' => 'Свързани сайтове, асоциирани с ключовата дума', |
|
| 349 | + 'info_sites_proxy' => 'Използване на прокси', |
|
| 350 | + 'info_sites_trouves' => 'Намерени сайтове', |
|
| 351 | + 'info_sous_titre' => 'Подзаглавие:', |
|
| 352 | + 'info_statut_administrateur' => 'Администратор', |
|
| 353 | + 'info_statut_auteur' => 'Статус на автора:', # MODIF |
|
| 354 | + 'info_statut_auteur_a_confirmer' => 'Регистрация, предстояща за потвърждение', |
|
| 355 | + 'info_statut_auteur_autre' => 'Друг статус:', |
|
| 356 | + 'info_statut_redacteur' => 'Редактор', |
|
| 357 | + 'info_statut_utilisateurs_1' => 'Статус "по подразбиране" на вписаните потребители', |
|
| 358 | + 'info_statut_utilisateurs_2' => 'Изберете статус за хората, вписани в LDAP-директорията при свързването им за първи път. По-късно ще можете да променяте тази характеристика за всеки автор по отделно.', |
|
| 359 | + 'info_suivi_activite' => 'Дейности на редакторите', |
|
| 360 | + 'info_surtitre' => 'Челно заглавие:', |
|
| 361 | + 'info_syndication_integrale_1' => 'Сайтът Ви предлага файлове за обединение (вж <a href="@url@">@titre@</a>).', |
|
| 362 | + 'info_syndication_integrale_2' => 'Желаете ли да изпратите цели статии или само резюме от няколко стотин знака?', |
|
| 363 | + 'info_taille_maximale_vignette' => 'Максимален размер на винетките, който е генериран от системата:', |
|
| 364 | + 'info_terminer_installation' => 'Сега можете да приключите с процеса по стандартна инсталация.', |
|
| 365 | + 'info_texte' => 'Текст', |
|
| 366 | + 'info_texte_explicatif' => 'Обяснителен текст', |
|
| 367 | + 'info_texte_long' => '(текстът е прекалено дълъг: той ще се появи в няколко части, които ще бъдат събрани след одобрението.)', |
|
| 368 | + 'info_texte_message' => 'Текст на съобщението:', # MODIF |
|
| 369 | + 'info_texte_message_02' => 'Текст на съобщение', |
|
| 370 | + 'info_titre' => 'Заглавие:', |
|
| 371 | + 'info_total' => 'общо:', |
|
| 372 | + 'info_tous_articles_en_redaction' => 'Всички статии в процес на обработка', |
|
| 373 | + 'info_tous_articles_presents' => 'Всички статии в рубриката', |
|
| 374 | + 'info_tous_les' => 'всички:', |
|
| 375 | + 'info_tout_site' => 'Целият сайт', |
|
| 376 | + 'info_tout_site2' => 'Статията не е преведена на дадения език.', |
|
| 377 | + 'info_tout_site3' => 'Статията е преведена на дадения език, но след това са направени промени в основната статия. Преводът изисква актуализация.', |
|
| 378 | + 'info_tout_site4' => 'Статията е преведена на дадения език, а преводът - актуализиран.', |
|
| 379 | + 'info_tout_site5' => 'Оригинална статия.', |
|
| 380 | + 'info_tout_site6' => '<b>Предупреждение:</b> показани са само оригинални статии. |
|
| 381 | 381 | Преводите са свързани с оригинала в цвят, посочващ техния статус:', |
| 382 | - 'info_traductions' => 'Преводи', |
|
| 383 | - 'info_travail_colaboratif' => 'Съвместна работа по статии', |
|
| 384 | - 'info_un_article' => 'една статия,', |
|
| 385 | - 'info_un_site' => 'сайт,', |
|
| 386 | - 'info_une_rubrique' => 'рубрика,', |
|
| 387 | - 'info_une_rubrique_02' => '1 рубрика', |
|
| 388 | - 'info_url' => 'URL:', |
|
| 389 | - 'info_urlref' => 'Препратка в хипертекст:', |
|
| 390 | - 'info_utilisation_spip' => 'СПИП вече е готов за използване.', |
|
| 391 | - 'info_visites_par_mois' => 'Месечен дисплей:', |
|
| 392 | - 'info_visiteur_1' => 'Посетител', |
|
| 393 | - 'info_visiteur_2' => 'публичен сайт', |
|
| 394 | - 'info_visiteurs' => 'Посетители', |
|
| 395 | - 'info_visiteurs_02' => 'Посетители на публичния сайт', |
|
| 396 | - 'install_echec_annonce' => 'Инсталацията Ви вероятно няма да проработи или сайтът, който правите ще даде лош резултат...', |
|
| 397 | - 'install_extension_mbstring' => 'СПИП не работи с:', |
|
| 398 | - 'install_extension_php_obligatoire' => 'СПИП изисква разширение от типа php:', |
|
| 399 | - 'install_select_langue' => 'Изберете език и след това натиснете бутон по-нататък, за да стартирате процедурата по инсталацията.', |
|
| 400 | - 'intem_redacteur' => 'редактор', |
|
| 401 | - 'item_accepter_inscriptions' => 'Позволяване на регистрации', |
|
| 402 | - 'item_activer_messages_avertissement' => 'Активиране на предупредителни съобщения', |
|
| 403 | - 'item_administrateur_2' => 'администратор', |
|
| 404 | - 'item_afficher_calendrier' => 'Показване в календара', |
|
| 405 | - 'item_autoriser_syndication_integrale' => 'Включване на цели статии във файловете за обединяване', |
|
| 406 | - 'item_choix_administrateurs' => 'администратори', |
|
| 407 | - 'item_choix_generation_miniature' => 'Автоматично генериране на умалени образи.', |
|
| 408 | - 'item_choix_non_generation_miniature' => 'Без генериране на умалени образи.', |
|
| 409 | - 'item_choix_redacteurs' => 'редактори', |
|
| 410 | - 'item_choix_visiteurs' => 'посетители на публичния сайт', |
|
| 411 | - 'item_creer_fichiers_authent' => 'Създаване на файлове от типа .htpasswd', |
|
| 412 | - 'item_login' => 'Потребителско име', |
|
| 413 | - 'item_mots_cles_association_articles' => 'статиите', |
|
| 414 | - 'item_mots_cles_association_rubriques' => 'рубриките', |
|
| 415 | - 'item_mots_cles_association_sites' => 'свързаните или обединени сайтове.', |
|
| 416 | - 'item_non' => 'Не', |
|
| 417 | - 'item_non_accepter_inscriptions' => 'Забрана на регистрации', |
|
| 418 | - 'item_non_activer_messages_avertissement' => 'Без предупредителни съобщения', |
|
| 419 | - 'item_non_afficher_calendrier' => 'Без показване в календара', |
|
| 420 | - 'item_non_autoriser_syndication_integrale' => 'Изпращане на резюме', |
|
| 421 | - 'item_non_creer_fichiers_authent' => 'Забрана за създаване на файловете', |
|
| 422 | - 'item_non_publier_articles' => 'Забраняване публикуването на статии преди техните дати на публикуване.', |
|
| 423 | - 'item_nouvel_auteur' => 'Нов автор', |
|
| 424 | - 'item_nouvelle_rubrique' => 'Нова рубрика', |
|
| 425 | - 'item_oui' => 'Да', |
|
| 426 | - 'item_publier_articles' => 'Публикуване на статиите независимо от техните дати на публикуване.', |
|
| 427 | - 'item_reponse_article' => 'Отговор на статията', |
|
| 428 | - 'item_visiteur' => 'посетител', |
|
| 382 | + 'info_traductions' => 'Преводи', |
|
| 383 | + 'info_travail_colaboratif' => 'Съвместна работа по статии', |
|
| 384 | + 'info_un_article' => 'една статия,', |
|
| 385 | + 'info_un_site' => 'сайт,', |
|
| 386 | + 'info_une_rubrique' => 'рубрика,', |
|
| 387 | + 'info_une_rubrique_02' => '1 рубрика', |
|
| 388 | + 'info_url' => 'URL:', |
|
| 389 | + 'info_urlref' => 'Препратка в хипертекст:', |
|
| 390 | + 'info_utilisation_spip' => 'СПИП вече е готов за използване.', |
|
| 391 | + 'info_visites_par_mois' => 'Месечен дисплей:', |
|
| 392 | + 'info_visiteur_1' => 'Посетител', |
|
| 393 | + 'info_visiteur_2' => 'публичен сайт', |
|
| 394 | + 'info_visiteurs' => 'Посетители', |
|
| 395 | + 'info_visiteurs_02' => 'Посетители на публичния сайт', |
|
| 396 | + 'install_echec_annonce' => 'Инсталацията Ви вероятно няма да проработи или сайтът, който правите ще даде лош резултат...', |
|
| 397 | + 'install_extension_mbstring' => 'СПИП не работи с:', |
|
| 398 | + 'install_extension_php_obligatoire' => 'СПИП изисква разширение от типа php:', |
|
| 399 | + 'install_select_langue' => 'Изберете език и след това натиснете бутон по-нататък, за да стартирате процедурата по инсталацията.', |
|
| 400 | + 'intem_redacteur' => 'редактор', |
|
| 401 | + 'item_accepter_inscriptions' => 'Позволяване на регистрации', |
|
| 402 | + 'item_activer_messages_avertissement' => 'Активиране на предупредителни съобщения', |
|
| 403 | + 'item_administrateur_2' => 'администратор', |
|
| 404 | + 'item_afficher_calendrier' => 'Показване в календара', |
|
| 405 | + 'item_autoriser_syndication_integrale' => 'Включване на цели статии във файловете за обединяване', |
|
| 406 | + 'item_choix_administrateurs' => 'администратори', |
|
| 407 | + 'item_choix_generation_miniature' => 'Автоматично генериране на умалени образи.', |
|
| 408 | + 'item_choix_non_generation_miniature' => 'Без генериране на умалени образи.', |
|
| 409 | + 'item_choix_redacteurs' => 'редактори', |
|
| 410 | + 'item_choix_visiteurs' => 'посетители на публичния сайт', |
|
| 411 | + 'item_creer_fichiers_authent' => 'Създаване на файлове от типа .htpasswd', |
|
| 412 | + 'item_login' => 'Потребителско име', |
|
| 413 | + 'item_mots_cles_association_articles' => 'статиите', |
|
| 414 | + 'item_mots_cles_association_rubriques' => 'рубриките', |
|
| 415 | + 'item_mots_cles_association_sites' => 'свързаните или обединени сайтове.', |
|
| 416 | + 'item_non' => 'Не', |
|
| 417 | + 'item_non_accepter_inscriptions' => 'Забрана на регистрации', |
|
| 418 | + 'item_non_activer_messages_avertissement' => 'Без предупредителни съобщения', |
|
| 419 | + 'item_non_afficher_calendrier' => 'Без показване в календара', |
|
| 420 | + 'item_non_autoriser_syndication_integrale' => 'Изпращане на резюме', |
|
| 421 | + 'item_non_creer_fichiers_authent' => 'Забрана за създаване на файловете', |
|
| 422 | + 'item_non_publier_articles' => 'Забраняване публикуването на статии преди техните дати на публикуване.', |
|
| 423 | + 'item_nouvel_auteur' => 'Нов автор', |
|
| 424 | + 'item_nouvelle_rubrique' => 'Нова рубрика', |
|
| 425 | + 'item_oui' => 'Да', |
|
| 426 | + 'item_publier_articles' => 'Публикуване на статиите независимо от техните дати на публикуване.', |
|
| 427 | + 'item_reponse_article' => 'Отговор на статията', |
|
| 428 | + 'item_visiteur' => 'посетител', |
|
| 429 | 429 | |
| 430 | - // J |
|
| 431 | - 'jour_non_connu_nc' => 'непознат', |
|
| 430 | + // J |
|
| 431 | + 'jour_non_connu_nc' => 'непознат', |
|
| 432 | 432 | |
| 433 | - // L |
|
| 434 | - 'lien_ajouter_auteur' => 'Добавяне на автора', |
|
| 435 | - 'lien_email' => 'Електронен адрес', |
|
| 436 | - 'lien_nom_site' => 'ИМЕ НА САЙТА:', |
|
| 437 | - 'lien_retirer_auteur' => 'Премахване на автор', |
|
| 438 | - 'lien_site' => 'сайт', |
|
| 439 | - 'lien_tout_deplier' => 'Разширяване на всички', |
|
| 440 | - 'lien_tout_replier' => 'Разтваряне на всички', |
|
| 441 | - 'lien_trier_nom' => 'Подреждане по име', |
|
| 442 | - 'lien_trier_nombre_articles' => 'Подреждане по номер на статията', |
|
| 443 | - 'lien_trier_statut' => 'Подреждане по статус', |
|
| 444 | - 'lien_voir_en_ligne' => 'ИЗГЛЕД НА САЙТА:', |
|
| 445 | - 'logo_article' => 'ЛОГО НА СТАТИЯТА', # MODIF |
|
| 446 | - 'logo_auteur' => 'ЛОГО НА АВТОРА', # MODIF |
|
| 447 | - 'logo_rubrique' => 'ЛОГО НА РУБРИКАТА', # MODIF |
|
| 448 | - 'logo_site' => 'ЛОГО НА САЙТА', # MODIF |
|
| 449 | - 'logo_standard_rubrique' => 'СТАНДАРТНО ЛОГО ЗА РУБРИКИ', # MODIF |
|
| 450 | - 'logo_survol' => 'АЛТЕРНАТИВНО ЛОГО', # MODIF |
|
| 433 | + // L |
|
| 434 | + 'lien_ajouter_auteur' => 'Добавяне на автора', |
|
| 435 | + 'lien_email' => 'Електронен адрес', |
|
| 436 | + 'lien_nom_site' => 'ИМЕ НА САЙТА:', |
|
| 437 | + 'lien_retirer_auteur' => 'Премахване на автор', |
|
| 438 | + 'lien_site' => 'сайт', |
|
| 439 | + 'lien_tout_deplier' => 'Разширяване на всички', |
|
| 440 | + 'lien_tout_replier' => 'Разтваряне на всички', |
|
| 441 | + 'lien_trier_nom' => 'Подреждане по име', |
|
| 442 | + 'lien_trier_nombre_articles' => 'Подреждане по номер на статията', |
|
| 443 | + 'lien_trier_statut' => 'Подреждане по статус', |
|
| 444 | + 'lien_voir_en_ligne' => 'ИЗГЛЕД НА САЙТА:', |
|
| 445 | + 'logo_article' => 'ЛОГО НА СТАТИЯТА', # MODIF |
|
| 446 | + 'logo_auteur' => 'ЛОГО НА АВТОРА', # MODIF |
|
| 447 | + 'logo_rubrique' => 'ЛОГО НА РУБРИКАТА', # MODIF |
|
| 448 | + 'logo_site' => 'ЛОГО НА САЙТА', # MODIF |
|
| 449 | + 'logo_standard_rubrique' => 'СТАНДАРТНО ЛОГО ЗА РУБРИКИ', # MODIF |
|
| 450 | + 'logo_survol' => 'АЛТЕРНАТИВНО ЛОГО', # MODIF |
|
| 451 | 451 | |
| 452 | - // M |
|
| 453 | - 'menu_aide_installation_choix_base' => 'Избор на база данни', |
|
| 454 | - 'module_fichier_langue' => 'Езиков файл', |
|
| 455 | - 'module_raccourci' => 'Кратка команда', |
|
| 456 | - 'module_texte_affiche' => 'Показан текст', |
|
| 457 | - 'module_texte_explicatif' => 'Можете да впишете следните кратки команди в шаблоните на сайта си. Те ще бъдат автоматично преведени на различни езици, за които има езиков файл.', |
|
| 458 | - 'module_texte_traduction' => 'Езиковият файл ,, @module@ ’’ е достъпен на:', |
|
| 459 | - 'mois_non_connu' => 'непознат', |
|
| 452 | + // M |
|
| 453 | + 'menu_aide_installation_choix_base' => 'Избор на база данни', |
|
| 454 | + 'module_fichier_langue' => 'Езиков файл', |
|
| 455 | + 'module_raccourci' => 'Кратка команда', |
|
| 456 | + 'module_texte_affiche' => 'Показан текст', |
|
| 457 | + 'module_texte_explicatif' => 'Можете да впишете следните кратки команди в шаблоните на сайта си. Те ще бъдат автоматично преведени на различни езици, за които има езиков файл.', |
|
| 458 | + 'module_texte_traduction' => 'Езиковият файл ,, @module@ ’’ е достъпен на:', |
|
| 459 | + 'mois_non_connu' => 'непознат', |
|
| 460 | 460 | |
| 461 | - // O |
|
| 462 | - 'onglet_repartition_actuelle' => 'сега', |
|
| 461 | + // O |
|
| 462 | + 'onglet_repartition_actuelle' => 'сега', |
|
| 463 | 463 | |
| 464 | - // P |
|
| 465 | - 'plugin_etat_developpement' => 'в развитие', |
|
| 466 | - 'plugin_etat_experimental' => 'експериментален', |
|
| 467 | - 'plugin_etat_stable' => 'стабилен', |
|
| 468 | - 'plugin_etat_test' => 'в процес на тестване', |
|
| 469 | - 'plugins_liste' => 'Списък с плъгини', |
|
| 464 | + // P |
|
| 465 | + 'plugin_etat_developpement' => 'в развитие', |
|
| 466 | + 'plugin_etat_experimental' => 'експериментален', |
|
| 467 | + 'plugin_etat_stable' => 'стабилен', |
|
| 468 | + 'plugin_etat_test' => 'в процес на тестване', |
|
| 469 | + 'plugins_liste' => 'Списък с плъгини', |
|
| 470 | 470 | |
| 471 | - // R |
|
| 472 | - 'repertoire_plugins' => 'Директория:', |
|
| 473 | - 'required' => '[Задължително]', # MODIF |
|
| 471 | + // R |
|
| 472 | + 'repertoire_plugins' => 'Директория:', |
|
| 473 | + 'required' => '[Задължително]', # MODIF |
|
| 474 | 474 | |
| 475 | - // S |
|
| 476 | - 'statut_admin_restreint' => '(ограничен администратор)', # MODIF |
|
| 475 | + // S |
|
| 476 | + 'statut_admin_restreint' => '(ограничен администратор)', # MODIF |
|
| 477 | 477 | |
| 478 | - // T |
|
| 479 | - 'taille_cache_image' => 'Изображенията, изчислени автоматично от СПИП (умалени изображения, заглавия, преобразени в графики, математически формули в TeX формат и др.) заемат общо @taille@ в директорията @dir@.', |
|
| 480 | - 'taille_cache_infinie' => 'Този сайт няма фиксиран лимит за размера на <code>CACHE/</code> директорията.', |
|
| 481 | - 'taille_cache_maxi' => 'СПИП се опитва да намали размера на данните в <code>CACHE/</code> директорията до около <b>@octets@</b>.', |
|
| 482 | - 'taille_cache_octets' => 'Размерът на кеш-паметта в момента е @octets@.', # MODIF |
|
| 483 | - 'taille_cache_vide' => 'Кеш-паметта е празна.', |
|
| 484 | - 'taille_repertoire_cache' => 'Размер на кеш-паметта в момента', |
|
| 485 | - 'text_article_propose_publication' => 'Изпратена е статия със заявка за публикуване. Не се колебайте да дадете мнението си за нея във форума, който е прикрепен към нея (най-долу на страницата).', # MODIF |
|
| 486 | - 'texte_acces_ldap_anonyme_1' => 'Някои LDAP-сървъри не позволяват анонимен достъп. В такива случаи, за да можете да правите справка в директорията, трябва да използвате началното си потребителско име за достъп. Въпреки това, в повечето случаи можете да оставяте следните полета празни. ', |
|
| 487 | - 'texte_admin_effacer_01' => 'Тази команда изтрива <i>цялото</i> съдържание в базата данни, |
|
| 478 | + // T |
|
| 479 | + 'taille_cache_image' => 'Изображенията, изчислени автоматично от СПИП (умалени изображения, заглавия, преобразени в графики, математически формули в TeX формат и др.) заемат общо @taille@ в директорията @dir@.', |
|
| 480 | + 'taille_cache_infinie' => 'Този сайт няма фиксиран лимит за размера на <code>CACHE/</code> директорията.', |
|
| 481 | + 'taille_cache_maxi' => 'СПИП се опитва да намали размера на данните в <code>CACHE/</code> директорията до около <b>@octets@</b>.', |
|
| 482 | + 'taille_cache_octets' => 'Размерът на кеш-паметта в момента е @octets@.', # MODIF |
|
| 483 | + 'taille_cache_vide' => 'Кеш-паметта е празна.', |
|
| 484 | + 'taille_repertoire_cache' => 'Размер на кеш-паметта в момента', |
|
| 485 | + 'text_article_propose_publication' => 'Изпратена е статия със заявка за публикуване. Не се колебайте да дадете мнението си за нея във форума, който е прикрепен към нея (най-долу на страницата).', # MODIF |
|
| 486 | + 'texte_acces_ldap_anonyme_1' => 'Някои LDAP-сървъри не позволяват анонимен достъп. В такива случаи, за да можете да правите справка в директорията, трябва да използвате началното си потребителско име за достъп. Въпреки това, в повечето случаи можете да оставяте следните полета празни. ', |
|
| 487 | + 'texte_admin_effacer_01' => 'Тази команда изтрива <i>цялото</i> съдържание в базата данни, |
|
| 488 | 488 | включително <i>всички</i> параметри за достъп за редактори и администратори. След нейното изпълнение, трябва |
| 489 | 489 | да се преинсталира СПИП, за да се създаде нова база данни и първи администраторски достъп.', |
| 490 | - 'texte_adresse_annuaire_1' => '( Ако директорията Ви е инсталирана на същата машина, на която и Интернет сайта, вероятно е «localhost».)', |
|
| 491 | - 'texte_ajout_auteur' => 'Следният автор бе добавен към статията:', |
|
| 492 | - 'texte_annuaire_ldap_1' => 'Ако разполагате с достъп до (LDAP) директория, можете да я използвате, за да вписвате автоматично потребители в СПИП.', |
|
| 493 | - 'texte_article_statut' => 'Статията е:', |
|
| 494 | - 'texte_article_virtuel' => 'Виртуална статия', |
|
| 495 | - 'texte_article_virtuel_reference' => '<b>Виртуална статия:</b> свързана статия на Вашия СПИП сайт, която се пренасочва към друг URL адрес. За да премахнете пренасочването, изтрийте горепосочения URL.', |
|
| 496 | - 'texte_aucun_resultat_auteur' => 'Няма намерен разултат за @cherche_auteur@.', |
|
| 497 | - 'texte_auteur_messagerie' => 'Сайт може продължително да следи списъка от свързани редактори, което позволява изпращането та съобщения в реално време (ако съобщението е забранено по-горе, тогава целият списък от редактори е забранен). Вие можете да решите да не се появявате в този списък (т.е. да сте невидим за останалите потребители).', |
|
| 498 | - 'texte_auteurs' => 'АВТОРИТЕ', |
|
| 499 | - 'texte_choix_base_1' => 'Изберете база данни:', |
|
| 500 | - 'texte_choix_base_2' => 'Сървърът SQL съдържа няколко бази данни.', |
|
| 501 | - 'texte_choix_base_3' => '<b>Изберете</b> по-долу това, което доставчикът Ви e разрешил:', |
|
| 502 | - 'texte_compte_element' => '@count@ елемент', |
|
| 503 | - 'texte_compte_elements' => '@count@ елементи', |
|
| 504 | - 'texte_connexion_mysql' => 'Погледнете информацията, предоставена от доставчика Ви: ако доставчикът ви поддържа SQL, трябва да са дадени кодовете за връзка със сървъра SQL.', # MODIF |
|
| 505 | - 'texte_contenu_article' => '(Съдържание на статията с няколко думи.)', |
|
| 506 | - 'texte_contenu_articles' => 'Въз основа на оформлението на сайта Ви, може да решите |
|
| 490 | + 'texte_adresse_annuaire_1' => '( Ако директорията Ви е инсталирана на същата машина, на която и Интернет сайта, вероятно е «localhost».)', |
|
| 491 | + 'texte_ajout_auteur' => 'Следният автор бе добавен към статията:', |
|
| 492 | + 'texte_annuaire_ldap_1' => 'Ако разполагате с достъп до (LDAP) директория, можете да я използвате, за да вписвате автоматично потребители в СПИП.', |
|
| 493 | + 'texte_article_statut' => 'Статията е:', |
|
| 494 | + 'texte_article_virtuel' => 'Виртуална статия', |
|
| 495 | + 'texte_article_virtuel_reference' => '<b>Виртуална статия:</b> свързана статия на Вашия СПИП сайт, която се пренасочва към друг URL адрес. За да премахнете пренасочването, изтрийте горепосочения URL.', |
|
| 496 | + 'texte_aucun_resultat_auteur' => 'Няма намерен разултат за @cherche_auteur@.', |
|
| 497 | + 'texte_auteur_messagerie' => 'Сайт може продължително да следи списъка от свързани редактори, което позволява изпращането та съобщения в реално време (ако съобщението е забранено по-горе, тогава целият списък от редактори е забранен). Вие можете да решите да не се появявате в този списък (т.е. да сте невидим за останалите потребители).', |
|
| 498 | + 'texte_auteurs' => 'АВТОРИТЕ', |
|
| 499 | + 'texte_choix_base_1' => 'Изберете база данни:', |
|
| 500 | + 'texte_choix_base_2' => 'Сървърът SQL съдържа няколко бази данни.', |
|
| 501 | + 'texte_choix_base_3' => '<b>Изберете</b> по-долу това, което доставчикът Ви e разрешил:', |
|
| 502 | + 'texte_compte_element' => '@count@ елемент', |
|
| 503 | + 'texte_compte_elements' => '@count@ елементи', |
|
| 504 | + 'texte_connexion_mysql' => 'Погледнете информацията, предоставена от доставчика Ви: ако доставчикът ви поддържа SQL, трябва да са дадени кодовете за връзка със сървъра SQL.', # MODIF |
|
| 505 | + 'texte_contenu_article' => '(Съдържание на статията с няколко думи.)', |
|
| 506 | + 'texte_contenu_articles' => 'Въз основа на оформлението на сайта Ви, може да решите |
|
| 507 | 507 | да не използвате някои елементи на статиите. |
| 508 | 508 | Използвайте този списък, за да изберете кои елементи искате да направите активни.', |
| 509 | - 'texte_crash_base' => 'Ако Вашата база данни |
|
| 509 | + 'texte_crash_base' => 'Ако Вашата база данни |
|
| 510 | 510 | блокира, можете да се опитате да я поправите |
| 511 | 511 | автоматично.', |
| 512 | - 'texte_creer_rubrique' => 'Преди да пишете статии,<br /> трябва да създадете рубрика.', |
|
| 513 | - 'texte_date_creation_article' => 'ДАТА НА СЪЗДАВАНЕ НА СТАТИЯТА:', |
|
| 514 | - 'texte_date_publication_anterieure' => 'Дата на предишно публикуване:', |
|
| 515 | - 'texte_date_publication_anterieure_nonaffichee' => 'Скриване датата на предишно публикуване.', |
|
| 516 | - 'texte_date_publication_article' => 'ДАТА НА ПУБЛИКУВАНЕ В ИНТЕРНЕТ:', |
|
| 517 | - 'texte_descriptif_rapide' => 'Кратко описание', |
|
| 518 | - 'texte_effacer_base' => 'Изтриване на базата данни СПИП', |
|
| 519 | - 'texte_en_cours_validation' => 'Изпратени са следните статии със заявка за публикуване. Не се колебайте да дадете мнението си за тях във форума, който е прикрепен към тях. ', # MODIF |
|
| 520 | - 'texte_enrichir_mise_a_jour' => 'Можете да обогатите външния вид на текста като използвате «Типографски кратки команди».', |
|
| 521 | - 'texte_fichier_authent' => '<b>Да създаде ли СПИП специални <tt>.htpasswd</tt> |
|
| 512 | + 'texte_creer_rubrique' => 'Преди да пишете статии,<br /> трябва да създадете рубрика.', |
|
| 513 | + 'texte_date_creation_article' => 'ДАТА НА СЪЗДАВАНЕ НА СТАТИЯТА:', |
|
| 514 | + 'texte_date_publication_anterieure' => 'Дата на предишно публикуване:', |
|
| 515 | + 'texte_date_publication_anterieure_nonaffichee' => 'Скриване датата на предишно публикуване.', |
|
| 516 | + 'texte_date_publication_article' => 'ДАТА НА ПУБЛИКУВАНЕ В ИНТЕРНЕТ:', |
|
| 517 | + 'texte_descriptif_rapide' => 'Кратко описание', |
|
| 518 | + 'texte_effacer_base' => 'Изтриване на базата данни СПИП', |
|
| 519 | + 'texte_en_cours_validation' => 'Изпратени са следните статии със заявка за публикуване. Не се колебайте да дадете мнението си за тях във форума, който е прикрепен към тях. ', # MODIF |
|
| 520 | + 'texte_enrichir_mise_a_jour' => 'Можете да обогатите външния вид на текста като използвате «Типографски кратки команди».', |
|
| 521 | + 'texte_fichier_authent' => '<b>Да създаде ли СПИП специални <tt>.htpasswd</tt> |
|
| 522 | 522 | и <tt>.htpasswd-admin</tt> файлове в директорията@dossier@?</b><p> |
| 523 | 523 | Тези файлове ще бъдат използвани за ограничаване достъпа на авторите |
| 524 | 524 | и администраторите до други части на сайта |
@@ -526,44 +526,44 @@ discard block |
||
| 526 | 526 | Ако не сте използвали такива файлове преди, можете да осигурите възможност |
| 527 | 527 | за стойност "по подразбиране" (без |
| 528 | 528 | да се създават файлове).', # MODIF |
| 529 | - 'texte_informations_personnelles_1' => 'Системата сега ще създаде личен достъп до сайта. ', |
|
| 530 | - 'texte_informations_personnelles_2' => '(Забележка: ако това е преинсталация и достъпът Ви все още е активен, можете', # MODIF |
|
| 531 | - 'texte_introductif_article' => '(Въведение към статията.)', |
|
| 532 | - 'texte_jeu_caractere' => 'Препоръчваме да използвате на сайта универсална кодировка на знаците от азбуката (<tt>utf-8</tt>), за да може да се показва под формата на текст на всякакъв език. Никой от настоящите Интернет - навигатори нямат проблеми с нея. ', |
|
| 533 | - 'texte_jeu_caractere_3' => 'Настоящата кодировка на сайта е:', |
|
| 534 | - 'texte_jeu_caractere_4' => 'Ако това не отговаря на ситуацията, която имате с данните си (например след възстановяване на базата от данни от архива) или ако <em>правите настройка на сайта си в момента</em> и желаете да използвате различна кодировка на символите, моля да обозначите кодировката тук:', |
|
| 535 | - 'texte_login_ldap_1' => '(Оставете празно поле за потребител за анонимен достъп или попълнете пълния път за достъп, например «<tt>uid=smith, ou=users, dc=my-domain, dc=com</tt>».)', |
|
| 536 | - 'texte_login_precaution' => 'Внимание! Това е потребителското име, с което в момента сте се свързали. |
|
| 529 | + 'texte_informations_personnelles_1' => 'Системата сега ще създаде личен достъп до сайта. ', |
|
| 530 | + 'texte_informations_personnelles_2' => '(Забележка: ако това е преинсталация и достъпът Ви все още е активен, можете', # MODIF |
|
| 531 | + 'texte_introductif_article' => '(Въведение към статията.)', |
|
| 532 | + 'texte_jeu_caractere' => 'Препоръчваме да използвате на сайта универсална кодировка на знаците от азбуката (<tt>utf-8</tt>), за да може да се показва под формата на текст на всякакъв език. Никой от настоящите Интернет - навигатори нямат проблеми с нея. ', |
|
| 533 | + 'texte_jeu_caractere_3' => 'Настоящата кодировка на сайта е:', |
|
| 534 | + 'texte_jeu_caractere_4' => 'Ако това не отговаря на ситуацията, която имате с данните си (например след възстановяване на базата от данни от архива) или ако <em>правите настройка на сайта си в момента</em> и желаете да използвате различна кодировка на символите, моля да обозначите кодировката тук:', |
|
| 535 | + 'texte_login_ldap_1' => '(Оставете празно поле за потребител за анонимен достъп или попълнете пълния път за достъп, например «<tt>uid=smith, ou=users, dc=my-domain, dc=com</tt>».)', |
|
| 536 | + 'texte_login_precaution' => 'Внимание! Това е потребителското име, с което в момента сте се свързали. |
|
| 537 | 537 | Предпазливо използвайте формата ...', |
| 538 | - 'texte_mise_a_niveau_base_1' => 'СПИП файловете са актуализирани. |
|
| 538 | + 'texte_mise_a_niveau_base_1' => 'СПИП файловете са актуализирани. |
|
| 539 | 539 | Сега остава да обновите базата данни на |
| 540 | 540 | сайта.', |
| 541 | - 'texte_modifier_article' => 'Промяна на статията:', |
|
| 542 | - 'texte_multilinguisme' => 'Ако желаете да боравите със статии на няколко езика с усложнена навигация, можете да добавите меню "избор на език" към статиите и/или към рубриките, в зависимост от организацията на сайта Ви.', # MODIF |
|
| 543 | - 'texte_multilinguisme_trad' => 'Също така, можете да активирате система за управление на препратките към различните преводи на статията.', # MODIF |
|
| 544 | - 'texte_non_compresse' => '<i>uncompressed</i> (сървърът ви не поддрържа това свойство)', |
|
| 545 | - 'texte_nouvelle_version_spip_1' => 'Току-що инсталирахте нова версия на СПИП.', |
|
| 546 | - 'texte_nouvelle_version_spip_2' => 'Тази нова версия налага по-сериозна от обикновената актуализация. Ако сте администратор на сайта, изтрийте файла <tt>inc_connect.php3</tt> от директория <tt>ecrire</tt> и стартирайте отново инсталацията, с цел да актуализирате параметрите на базата данни за връзка. <p>(NB: ако сте забравили параметрите на базата данни за връзка, погледнете следния файл <tt>inc_connect.php3</tt> преди да го изтриете).', # MODIF |
|
| 547 | - 'texte_operation_echec' => 'Върнете се на предишната страница, за да изберете друга база или да създадете нова. Потвърдете информацията, изпратена от Вашия доставчик. ', |
|
| 548 | - 'texte_plus_trois_car' => 'повече от 3 знака', |
|
| 549 | - 'texte_plusieurs_articles' => 'Бяха намерени няколко автора за @cherche_auteur@:', |
|
| 550 | - 'texte_port_annuaire' => '(Обичайната стойност е подходяща като цяло.)', |
|
| 551 | - 'texte_presente_plugin' => 'На тази страница са указани наличните на сайта плъгини. Активирайте тези от тях, които Ви трябват, чрез отбелязване в съответната кутийка.', |
|
| 552 | - 'texte_proposer_publication' => 'Когато напишете статията,<br /> можете да я изпратите за публикуване.', |
|
| 553 | - 'texte_proxy' => 'В някои случаи (интранет, защитени мрежи и др.), |
|
| 541 | + 'texte_modifier_article' => 'Промяна на статията:', |
|
| 542 | + 'texte_multilinguisme' => 'Ако желаете да боравите със статии на няколко езика с усложнена навигация, можете да добавите меню "избор на език" към статиите и/или към рубриките, в зависимост от организацията на сайта Ви.', # MODIF |
|
| 543 | + 'texte_multilinguisme_trad' => 'Също така, можете да активирате система за управление на препратките към различните преводи на статията.', # MODIF |
|
| 544 | + 'texte_non_compresse' => '<i>uncompressed</i> (сървърът ви не поддрържа това свойство)', |
|
| 545 | + 'texte_nouvelle_version_spip_1' => 'Току-що инсталирахте нова версия на СПИП.', |
|
| 546 | + 'texte_nouvelle_version_spip_2' => 'Тази нова версия налага по-сериозна от обикновената актуализация. Ако сте администратор на сайта, изтрийте файла <tt>inc_connect.php3</tt> от директория <tt>ecrire</tt> и стартирайте отново инсталацията, с цел да актуализирате параметрите на базата данни за връзка. <p>(NB: ако сте забравили параметрите на базата данни за връзка, погледнете следния файл <tt>inc_connect.php3</tt> преди да го изтриете).', # MODIF |
|
| 547 | + 'texte_operation_echec' => 'Върнете се на предишната страница, за да изберете друга база или да създадете нова. Потвърдете информацията, изпратена от Вашия доставчик. ', |
|
| 548 | + 'texte_plus_trois_car' => 'повече от 3 знака', |
|
| 549 | + 'texte_plusieurs_articles' => 'Бяха намерени няколко автора за @cherche_auteur@:', |
|
| 550 | + 'texte_port_annuaire' => '(Обичайната стойност е подходяща като цяло.)', |
|
| 551 | + 'texte_presente_plugin' => 'На тази страница са указани наличните на сайта плъгини. Активирайте тези от тях, които Ви трябват, чрез отбелязване в съответната кутийка.', |
|
| 552 | + 'texte_proposer_publication' => 'Когато напишете статията,<br /> можете да я изпратите за публикуване.', |
|
| 553 | + 'texte_proxy' => 'В някои случаи (интранет, защитени мрежи и др.), |
|
| 554 | 554 | е нужно да се използва <i>HTTP прокси</i>, за да се достигне до обединените сайтове. |
| 555 | 555 | Ако има прокси, впишете адрес му отдолу по следния начин |
| 556 | 556 | <tt><html>http://proxy:8080</html></tt>. По принцип, |
| 557 | 557 | това поле се оставя празно.', |
| 558 | - 'texte_publication_articles_post_dates' => 'Какво би трябвало да направи СПИП във връзка със статии, |
|
| 558 | + 'texte_publication_articles_post_dates' => 'Какво би трябвало да направи СПИП във връзка със статии, |
|
| 559 | 559 | чиято публикация е зададена |
| 560 | 560 | за бъдеща дата?', |
| 561 | - 'texte_rappel_selection_champs' => '[Не забравяйте да изберете правилното поле.]', |
|
| 562 | - 'texte_recalcul_page' => 'Ако желаете да |
|
| 561 | + 'texte_rappel_selection_champs' => '[Не забравяйте да изберете правилното поле.]', |
|
| 562 | + 'texte_recalcul_page' => 'Ако желаете да |
|
| 563 | 563 | презаредите само една страница, по-добре направете това от публичната зона, като използвате « бутона "Презареждане" ».', |
| 564 | - 'texte_recuperer_base' => 'Поправка на базата данни', |
|
| 565 | - 'texte_reference_mais_redirige' => 'свързана статия на Вашия СПИП сайт, но пренасочена към друг URL адрес.', |
|
| 566 | - 'texte_requetes_echouent' => '<b>Когато някои SQL справки |
|
| 564 | + 'texte_recuperer_base' => 'Поправка на базата данни', |
|
| 565 | + 'texte_reference_mais_redirige' => 'свързана статия на Вашия СПИП сайт, но пренасочена към друг URL адрес.', |
|
| 566 | + 'texte_requetes_echouent' => '<b>Когато някои SQL справки |
|
| 567 | 567 | системно и без налична причина заочнат да се развалят, възможно е |
| 568 | 568 | базата данни сама да |
| 569 | 569 | го прави.</b> |
@@ -574,7 +574,7 @@ discard block |
||
| 574 | 574 | указания за това, което е развалено. |
| 575 | 575 | <p>Ако проблемът все още е налице, обадете се |
| 576 | 576 | на Вашия хост.', # MODIF |
| 577 | - 'texte_selection_langue_principale' => 'Посочете по-долу основният език на сайта. За щастие, този избор не ограничава статиите Ви да бъдат написани на избран от Вас езит. Той позволявя да определите |
|
| 577 | + 'texte_selection_langue_principale' => 'Посочете по-долу основният език на сайта. За щастие, този избор не ограничава статиите Ви да бъдат написани на избран от Вас езит. Той позволявя да определите |
|
| 578 | 578 | |
| 579 | 579 | <ul><li> формата по подразбиране на данните в публичния сайт</li> |
| 580 | 580 | |
@@ -583,71 +583,71 @@ discard block |
||
| 583 | 583 | <li> езикът, който се използва във формите на публичния сайт</li> |
| 584 | 584 | |
| 585 | 585 | <li> езикът по подразбиране на данните в личната зона.</li></ul>', |
| 586 | - 'texte_sous_titre' => 'Подзаглавие', |
|
| 587 | - 'texte_statistiques_visites' => '(тъмни ивици: неделя / тъмна крива: средно развитие)', |
|
| 588 | - 'texte_statut_attente_validation' => 'за одобрение', |
|
| 589 | - 'texte_statut_publies' => 'публикувани на сайта', |
|
| 590 | - 'texte_statut_refuses' => 'отхвърлени', |
|
| 591 | - 'texte_suppression_fichiers' => 'Тази команда служи за изтриване на всички |
|
| 586 | + 'texte_sous_titre' => 'Подзаглавие', |
|
| 587 | + 'texte_statistiques_visites' => '(тъмни ивици: неделя / тъмна крива: средно развитие)', |
|
| 588 | + 'texte_statut_attente_validation' => 'за одобрение', |
|
| 589 | + 'texte_statut_publies' => 'публикувани на сайта', |
|
| 590 | + 'texte_statut_refuses' => 'отхвърлени', |
|
| 591 | + 'texte_suppression_fichiers' => 'Тази команда служи за изтриване на всички |
|
| 592 | 592 | файлове в кеш-паметта на СПИП. Това позволява да се актуализират принудително всички страници, в |
| 593 | 593 | случаи, когато са направени важни изменения в графиките или структурата на сайта.', |
| 594 | - 'texte_sur_titre' => 'Челно заглавие', |
|
| 595 | - 'texte_table_ok' => ' : тази таблица е добра.', |
|
| 596 | - 'texte_tentative_recuperation' => 'Опит за поправка', |
|
| 597 | - 'texte_tenter_reparation' => 'Опит за поправка на базата данни', |
|
| 598 | - 'texte_test_proxy' => 'За да изпробвате дали работи проксито, впишете на това място |
|
| 594 | + 'texte_sur_titre' => 'Челно заглавие', |
|
| 595 | + 'texte_table_ok' => ' : тази таблица е добра.', |
|
| 596 | + 'texte_tentative_recuperation' => 'Опит за поправка', |
|
| 597 | + 'texte_tenter_reparation' => 'Опит за поправка на базата данни', |
|
| 598 | + 'texte_test_proxy' => 'За да изпробвате дали работи проксито, впишете на това място |
|
| 599 | 599 | URL-a на желана Интернет страница.', |
| 600 | - 'texte_titre_02' => 'Тема:', |
|
| 601 | - 'texte_titre_obligatoire' => '<b>Заглавие</b> [Задължително]', |
|
| 602 | - 'texte_travail_article' => '@nom_auteur_modif@ е работил по статията преди @date_diff@ минути', |
|
| 603 | - 'texte_travail_collaboratif' => 'Ако се случва често няколко редактора да |
|
| 600 | + 'texte_titre_02' => 'Тема:', |
|
| 601 | + 'texte_titre_obligatoire' => '<b>Заглавие</b> [Задължително]', |
|
| 602 | + 'texte_travail_article' => '@nom_auteur_modif@ е работил по статията преди @date_diff@ минути', |
|
| 603 | + 'texte_travail_collaboratif' => 'Ако се случва често няколко редактора да |
|
| 604 | 604 | работят по една и съща статия, системата |
| 605 | 605 | може да покаже наскоро отваряните статии, |
| 606 | 606 | с цел да избегнат едновременни промени. |
| 607 | 607 | Тази операция е изключена по начало, |
| 608 | 608 | с цел да не се показват излишни |
| 609 | 609 | предупредителни съобщения.', |
| 610 | - 'texte_vide' => 'празно', |
|
| 611 | - 'texte_vider_cache' => 'Изпразване на кеш-паметта', |
|
| 612 | - 'titre_admin_tech' => 'Техническа поддръжка', |
|
| 613 | - 'titre_admin_vider' => 'Техническа поддръжка', |
|
| 614 | - 'titre_cadre_afficher_article' => 'Показване на статиите:', |
|
| 615 | - 'titre_cadre_afficher_traductions' => 'Показване статуса на превод на следния език:', |
|
| 616 | - 'titre_cadre_ajouter_auteur' => 'ДОБАВЯНЕ НА АВТОР:', |
|
| 617 | - 'titre_cadre_interieur_rubrique' => 'В рубрика', |
|
| 618 | - 'titre_cadre_numero_auteur' => 'НОМЕР НА АВТОРА', |
|
| 619 | - 'titre_cadre_signature_obligatoire' => '<b>Подпис</b> [Задължителен]<br />', |
|
| 620 | - 'titre_config_fonctions' => 'Конфигуриране на сайта', |
|
| 621 | - 'titre_configuration' => 'Конфигуриране на сайта', |
|
| 622 | - 'titre_connexion_ldap' => 'Възможности: <b>Вашата LDAP-връзка</b>', |
|
| 623 | - 'titre_groupe_mots' => 'ГРУПА ОТ КЛЮЧОВИ ДУМИ:', |
|
| 624 | - 'titre_langue_article' => 'ЕЗИК НА СТАТИЯТА', # MODIF |
|
| 625 | - 'titre_langue_rubrique' => 'ЕЗИК НА РУБРИКАТА', # MODIF |
|
| 626 | - 'titre_langue_trad_article' => 'ЕЗИК И ПРЕВОДИ НА СТАТИЯТА', |
|
| 627 | - 'titre_les_articles' => 'СТАТИИ', |
|
| 628 | - 'titre_naviguer_dans_le_site' => 'Търсене на сайта', |
|
| 629 | - 'titre_nouvelle_rubrique' => 'Нова рубрика', |
|
| 630 | - 'titre_numero_rubrique' => 'НОМЕР НА РУБРИКАТА:', |
|
| 631 | - 'titre_page_articles_edit' => 'Промяна: @titre@', |
|
| 632 | - 'titre_page_articles_page' => 'Статии', |
|
| 633 | - 'titre_page_articles_tous' => 'Целият сайт', |
|
| 634 | - 'titre_page_calendrier' => 'Календар @nom_mois@ @annee@', |
|
| 635 | - 'titre_page_config_contenu' => 'Конфигуриране на сайта', |
|
| 636 | - 'titre_page_delete_all' => 'пълно и безвъзвратно изтриване', |
|
| 637 | - 'titre_page_recherche' => 'Резултати от търсенето @recherche@', |
|
| 638 | - 'titre_page_statistiques_referers' => 'Статистика (входящи препратки)', |
|
| 639 | - 'titre_page_upgrade' => 'Актуализация на СПИП', |
|
| 640 | - 'titre_publication_articles_post_dates' => 'Публикуване на статии с отминала дата', |
|
| 641 | - 'titre_reparation' => 'Поправка', |
|
| 642 | - 'titre_suivi_petition' => 'Допълнения на молбите', |
|
| 643 | - 'trad_article_traduction' => 'Всички версии на статията:', |
|
| 644 | - 'trad_delier' => 'Отказ от свързване на статията с нейните преводи', # MODIF |
|
| 645 | - 'trad_lier' => 'Статията е превод на статия номер ', |
|
| 646 | - 'trad_new' => 'Писане на нов превод на статията', # MODIF |
|
| 610 | + 'texte_vide' => 'празно', |
|
| 611 | + 'texte_vider_cache' => 'Изпразване на кеш-паметта', |
|
| 612 | + 'titre_admin_tech' => 'Техническа поддръжка', |
|
| 613 | + 'titre_admin_vider' => 'Техническа поддръжка', |
|
| 614 | + 'titre_cadre_afficher_article' => 'Показване на статиите:', |
|
| 615 | + 'titre_cadre_afficher_traductions' => 'Показване статуса на превод на следния език:', |
|
| 616 | + 'titre_cadre_ajouter_auteur' => 'ДОБАВЯНЕ НА АВТОР:', |
|
| 617 | + 'titre_cadre_interieur_rubrique' => 'В рубрика', |
|
| 618 | + 'titre_cadre_numero_auteur' => 'НОМЕР НА АВТОРА', |
|
| 619 | + 'titre_cadre_signature_obligatoire' => '<b>Подпис</b> [Задължителен]<br />', |
|
| 620 | + 'titre_config_fonctions' => 'Конфигуриране на сайта', |
|
| 621 | + 'titre_configuration' => 'Конфигуриране на сайта', |
|
| 622 | + 'titre_connexion_ldap' => 'Възможности: <b>Вашата LDAP-връзка</b>', |
|
| 623 | + 'titre_groupe_mots' => 'ГРУПА ОТ КЛЮЧОВИ ДУМИ:', |
|
| 624 | + 'titre_langue_article' => 'ЕЗИК НА СТАТИЯТА', # MODIF |
|
| 625 | + 'titre_langue_rubrique' => 'ЕЗИК НА РУБРИКАТА', # MODIF |
|
| 626 | + 'titre_langue_trad_article' => 'ЕЗИК И ПРЕВОДИ НА СТАТИЯТА', |
|
| 627 | + 'titre_les_articles' => 'СТАТИИ', |
|
| 628 | + 'titre_naviguer_dans_le_site' => 'Търсене на сайта', |
|
| 629 | + 'titre_nouvelle_rubrique' => 'Нова рубрика', |
|
| 630 | + 'titre_numero_rubrique' => 'НОМЕР НА РУБРИКАТА:', |
|
| 631 | + 'titre_page_articles_edit' => 'Промяна: @titre@', |
|
| 632 | + 'titre_page_articles_page' => 'Статии', |
|
| 633 | + 'titre_page_articles_tous' => 'Целият сайт', |
|
| 634 | + 'titre_page_calendrier' => 'Календар @nom_mois@ @annee@', |
|
| 635 | + 'titre_page_config_contenu' => 'Конфигуриране на сайта', |
|
| 636 | + 'titre_page_delete_all' => 'пълно и безвъзвратно изтриване', |
|
| 637 | + 'titre_page_recherche' => 'Резултати от търсенето @recherche@', |
|
| 638 | + 'titre_page_statistiques_referers' => 'Статистика (входящи препратки)', |
|
| 639 | + 'titre_page_upgrade' => 'Актуализация на СПИП', |
|
| 640 | + 'titre_publication_articles_post_dates' => 'Публикуване на статии с отминала дата', |
|
| 641 | + 'titre_reparation' => 'Поправка', |
|
| 642 | + 'titre_suivi_petition' => 'Допълнения на молбите', |
|
| 643 | + 'trad_article_traduction' => 'Всички версии на статията:', |
|
| 644 | + 'trad_delier' => 'Отказ от свързване на статията с нейните преводи', # MODIF |
|
| 645 | + 'trad_lier' => 'Статията е превод на статия номер ', |
|
| 646 | + 'trad_new' => 'Писане на нов превод на статията', # MODIF |
|
| 647 | 647 | |
| 648 | - // U |
|
| 649 | - 'utf8_convert_erreur_orig' => 'Грешка: кодировката на символите @charset@ не се поддържа.', |
|
| 648 | + // U |
|
| 649 | + 'utf8_convert_erreur_orig' => 'Грешка: кодировката на символите @charset@ не се поддържа.', |
|
| 650 | 650 | |
| 651 | - // V |
|
| 652 | - 'version' => 'Версия:' |
|
| 651 | + // V |
|
| 652 | + 'version' => 'Версия:' |
|
| 653 | 653 | ); |
@@ -890,8 +890,7 @@ |
||
| 890 | 890 | if (isset($boucles[$idb]->descr['sourcefile'])) { |
| 891 | 891 | $descr['sourcefile'] = $boucles[$idb]->descr['sourcefile']; |
| 892 | 892 | } |
| 893 | - } |
|
| 894 | - else { |
|
| 893 | + } else { |
|
| 895 | 894 | $descr = array(); |
| 896 | 895 | } |
| 897 | 896 | } |
@@ -18,7 +18,7 @@ discard block |
||
| 18 | 18 | **/ |
| 19 | 19 | |
| 20 | 20 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 21 | - return; |
|
| 21 | + return; |
|
| 22 | 22 | } |
| 23 | 23 | |
| 24 | 24 | /** Repérer un code ne calculant rien, meme avec commentaire */ |
@@ -60,91 +60,91 @@ discard block |
||
| 60 | 60 | |
| 61 | 61 | // https://code.spip.net/@argumenter_inclure |
| 62 | 62 | function argumenter_inclure( |
| 63 | - $params, |
|
| 64 | - $rejet_filtres, |
|
| 65 | - $p, |
|
| 66 | - &$boucles, |
|
| 67 | - $id_boucle, |
|
| 68 | - $echap = true, |
|
| 69 | - $lang = '', |
|
| 70 | - $fond1 = false |
|
| 63 | + $params, |
|
| 64 | + $rejet_filtres, |
|
| 65 | + $p, |
|
| 66 | + &$boucles, |
|
| 67 | + $id_boucle, |
|
| 68 | + $echap = true, |
|
| 69 | + $lang = '', |
|
| 70 | + $fond1 = false |
|
| 71 | 71 | ) { |
| 72 | - $l = array(); |
|
| 73 | - $erreur_p_i_i = ''; |
|
| 74 | - if (!is_array($params)) { |
|
| 75 | - return $l; |
|
| 76 | - } |
|
| 77 | - foreach ($params as $k => $couple) { |
|
| 78 | - // la liste d'arguments d'inclusion peut se terminer par un filtre |
|
| 79 | - $filtre = array_shift($couple); |
|
| 80 | - if ($filtre) { |
|
| 81 | - break; |
|
| 82 | - } |
|
| 83 | - foreach ($couple as $n => $val) { |
|
| 84 | - $var = $val[0]; |
|
| 85 | - if ($var->type != 'texte') { |
|
| 86 | - if ($n or $k or $fond1) { |
|
| 87 | - $erreur_p_i_i = array( |
|
| 88 | - 'zbug_parametres_inclus_incorrects', |
|
| 89 | - array('param' => $var->nom_champ) |
|
| 90 | - ); |
|
| 91 | - erreur_squelette($erreur_p_i_i, $p); |
|
| 92 | - break; |
|
| 93 | - } else { |
|
| 94 | - $l[1] = calculer_liste($val, $p->descr, $boucles, $id_boucle); |
|
| 95 | - } |
|
| 96 | - } else { |
|
| 97 | - preg_match(",^([^=]*)(=?)(.*)$,m", $var->texte, $m); |
|
| 98 | - $m = array_pad($m, 3, null); |
|
| 99 | - $var = $m[1]; |
|
| 100 | - $auto = false;; |
|
| 101 | - if ($m[2]) { |
|
| 102 | - $v = $m[3]; |
|
| 103 | - if (preg_match(',^[\'"](.*)[\'"]$,', $v, $m)) { |
|
| 104 | - $v = $m[1]; |
|
| 105 | - } |
|
| 106 | - $val[0] = new Texte; |
|
| 107 | - $val[0]->texte = $v; |
|
| 108 | - } elseif ($k or $n or $fond1) { |
|
| 109 | - $auto = true; |
|
| 110 | - } else { |
|
| 111 | - $var = 1; |
|
| 112 | - } |
|
| 113 | - |
|
| 114 | - if ($var == 'lang') { |
|
| 115 | - $lang = !$auto |
|
| 116 | - ? calculer_liste($val, $p->descr, $boucles, $id_boucle) |
|
| 117 | - : '$GLOBALS["spip_lang"]'; |
|
| 118 | - } else { |
|
| 119 | - $val = $auto |
|
| 120 | - ? index_pile($id_boucle, $var, $boucles) |
|
| 121 | - : calculer_liste($val, $p->descr, $boucles, $id_boucle); |
|
| 122 | - if ($var !== 1) { |
|
| 123 | - $val = ($echap ? "\'$var\' => ' . argumenter_squelette(" : "'$var' => ") |
|
| 124 | - . $val . ($echap ? ") . '" : " "); |
|
| 125 | - } else { |
|
| 126 | - $val = $echap ? "'.$val.'" : $val; |
|
| 127 | - } |
|
| 128 | - $l[$var] = $val; |
|
| 129 | - } |
|
| 130 | - } |
|
| 131 | - } |
|
| 132 | - } |
|
| 133 | - if ($erreur_p_i_i) { |
|
| 134 | - return false; |
|
| 135 | - } |
|
| 136 | - // Cas particulier de la langue : si {lang=xx} est definie, on |
|
| 137 | - // la passe, sinon on passe la langue courante au moment du calcul |
|
| 138 | - // sauf si on n'en veut pas |
|
| 139 | - if ($lang === false) { |
|
| 140 | - return $l; |
|
| 141 | - } |
|
| 142 | - if (!$lang) { |
|
| 143 | - $lang = '$GLOBALS["spip_lang"]'; |
|
| 144 | - } |
|
| 145 | - $l['lang'] = ($echap ? "\'lang\' => ' . argumenter_squelette(" : "'lang' => ") . $lang . ($echap ? ") . '" : " "); |
|
| 146 | - |
|
| 147 | - return $l; |
|
| 72 | + $l = array(); |
|
| 73 | + $erreur_p_i_i = ''; |
|
| 74 | + if (!is_array($params)) { |
|
| 75 | + return $l; |
|
| 76 | + } |
|
| 77 | + foreach ($params as $k => $couple) { |
|
| 78 | + // la liste d'arguments d'inclusion peut se terminer par un filtre |
|
| 79 | + $filtre = array_shift($couple); |
|
| 80 | + if ($filtre) { |
|
| 81 | + break; |
|
| 82 | + } |
|
| 83 | + foreach ($couple as $n => $val) { |
|
| 84 | + $var = $val[0]; |
|
| 85 | + if ($var->type != 'texte') { |
|
| 86 | + if ($n or $k or $fond1) { |
|
| 87 | + $erreur_p_i_i = array( |
|
| 88 | + 'zbug_parametres_inclus_incorrects', |
|
| 89 | + array('param' => $var->nom_champ) |
|
| 90 | + ); |
|
| 91 | + erreur_squelette($erreur_p_i_i, $p); |
|
| 92 | + break; |
|
| 93 | + } else { |
|
| 94 | + $l[1] = calculer_liste($val, $p->descr, $boucles, $id_boucle); |
|
| 95 | + } |
|
| 96 | + } else { |
|
| 97 | + preg_match(",^([^=]*)(=?)(.*)$,m", $var->texte, $m); |
|
| 98 | + $m = array_pad($m, 3, null); |
|
| 99 | + $var = $m[1]; |
|
| 100 | + $auto = false;; |
|
| 101 | + if ($m[2]) { |
|
| 102 | + $v = $m[3]; |
|
| 103 | + if (preg_match(',^[\'"](.*)[\'"]$,', $v, $m)) { |
|
| 104 | + $v = $m[1]; |
|
| 105 | + } |
|
| 106 | + $val[0] = new Texte; |
|
| 107 | + $val[0]->texte = $v; |
|
| 108 | + } elseif ($k or $n or $fond1) { |
|
| 109 | + $auto = true; |
|
| 110 | + } else { |
|
| 111 | + $var = 1; |
|
| 112 | + } |
|
| 113 | + |
|
| 114 | + if ($var == 'lang') { |
|
| 115 | + $lang = !$auto |
|
| 116 | + ? calculer_liste($val, $p->descr, $boucles, $id_boucle) |
|
| 117 | + : '$GLOBALS["spip_lang"]'; |
|
| 118 | + } else { |
|
| 119 | + $val = $auto |
|
| 120 | + ? index_pile($id_boucle, $var, $boucles) |
|
| 121 | + : calculer_liste($val, $p->descr, $boucles, $id_boucle); |
|
| 122 | + if ($var !== 1) { |
|
| 123 | + $val = ($echap ? "\'$var\' => ' . argumenter_squelette(" : "'$var' => ") |
|
| 124 | + . $val . ($echap ? ") . '" : " "); |
|
| 125 | + } else { |
|
| 126 | + $val = $echap ? "'.$val.'" : $val; |
|
| 127 | + } |
|
| 128 | + $l[$var] = $val; |
|
| 129 | + } |
|
| 130 | + } |
|
| 131 | + } |
|
| 132 | + } |
|
| 133 | + if ($erreur_p_i_i) { |
|
| 134 | + return false; |
|
| 135 | + } |
|
| 136 | + // Cas particulier de la langue : si {lang=xx} est definie, on |
|
| 137 | + // la passe, sinon on passe la langue courante au moment du calcul |
|
| 138 | + // sauf si on n'en veut pas |
|
| 139 | + if ($lang === false) { |
|
| 140 | + return $l; |
|
| 141 | + } |
|
| 142 | + if (!$lang) { |
|
| 143 | + $lang = '$GLOBALS["spip_lang"]'; |
|
| 144 | + } |
|
| 145 | + $l['lang'] = ($echap ? "\'lang\' => ' . argumenter_squelette(" : "'lang' => ") . $lang . ($echap ? ") . '" : " "); |
|
| 146 | + |
|
| 147 | + return $l; |
|
| 148 | 148 | } |
| 149 | 149 | |
| 150 | 150 | /** |
@@ -168,77 +168,77 @@ discard block |
||
| 168 | 168 | **/ |
| 169 | 169 | function calculer_inclure($p, &$boucles, $id_boucle) { |
| 170 | 170 | |
| 171 | - $_contexte = argumenter_inclure($p->param, false, $p, $boucles, $id_boucle, true, '', true); |
|
| 172 | - if (is_string($p->texte)) { |
|
| 173 | - $fichier = $p->texte; |
|
| 174 | - $code = "\"".str_replace('"','\"',$fichier)."\""; |
|
| 175 | - |
|
| 176 | - } else { |
|
| 177 | - $code = calculer_liste($p->texte, $p->descr, $boucles, $id_boucle); |
|
| 178 | - if ($code and preg_match("/^'([^']*)'/s", $code, $r)) { |
|
| 179 | - $fichier = $r[1]; |
|
| 180 | - } else { |
|
| 181 | - $fichier = ''; |
|
| 182 | - } |
|
| 183 | - } |
|
| 184 | - if (!$code or $code === '""' or $code === "''") { |
|
| 185 | - $trace = $p->fonctions; |
|
| 186 | - while (is_array($trace) |
|
| 187 | - and $trace = array_filter($trace) |
|
| 188 | - and count($trace)==1) { |
|
| 189 | - $trace = reset($trace); |
|
| 190 | - } |
|
| 191 | - $erreur_p_i_i = array( |
|
| 192 | - 'zbug_parametres_inclus_incorrects', |
|
| 193 | - array('param' => print_r($trace, true)) |
|
| 194 | - ); |
|
| 195 | - erreur_squelette($erreur_p_i_i, $p); |
|
| 196 | - |
|
| 197 | - return "''"; |
|
| 198 | - } |
|
| 199 | - $compil = texte_script(memoriser_contexte_compil($p)); |
|
| 200 | - |
|
| 201 | - if (is_array($_contexte)) { |
|
| 202 | - // Critere d'inclusion {env} (et {self} pour compatibilite ascendante) |
|
| 203 | - if ($env = (isset($_contexte['env']) || isset($_contexte['self']))) { |
|
| 204 | - unset($_contexte['env']); |
|
| 205 | - } |
|
| 206 | - |
|
| 207 | - // noter les doublons dans l'appel a public.php |
|
| 208 | - if (isset($_contexte['doublons'])) { |
|
| 209 | - $_contexte['doublons'] = "\\'doublons\\' => '.var_export(\$doublons,true).'"; |
|
| 210 | - } |
|
| 211 | - |
|
| 212 | - if ($ajax = isset($_contexte['ajax'])) { |
|
| 213 | - $ajax = preg_replace(",=>(.*)$,ims", '=> ($v=(\\1))?$v:true', $_contexte['ajax']); |
|
| 214 | - unset($_contexte['ajax']); |
|
| 215 | - } |
|
| 216 | - |
|
| 217 | - $_contexte = join(",\n\t", $_contexte); |
|
| 218 | - } else { |
|
| 219 | - return false; |
|
| 220 | - } // j'aurais voulu toucher le fond ... |
|
| 221 | - |
|
| 222 | - $contexte = 'array(' . $_contexte . ')'; |
|
| 223 | - |
|
| 224 | - if ($env) { |
|
| 225 | - $contexte = "array_merge('.var_export(\$Pile[0],1).',$contexte)"; |
|
| 226 | - } |
|
| 227 | - |
|
| 228 | - // s'il y a une extension .php, ce n'est pas un squelette |
|
| 229 | - if ($fichier and preg_match('/^.+[.]php$/s', $fichier)) { |
|
| 230 | - $code = sandbox_composer_inclure_php($fichier, $p, $contexte); |
|
| 231 | - } else { |
|
| 232 | - $_options[] = "\"compil\"=>array($compil)"; |
|
| 233 | - if ($ajax) { |
|
| 234 | - $_options[] = $ajax; |
|
| 235 | - } |
|
| 236 | - $code = " ' . argumenter_squelette($code) . '"; |
|
| 237 | - $code = "echo " . sprintf(CODE_RECUPERER_FOND, $code, $contexte, implode(',', $_options), |
|
| 238 | - "_request(\"connect\")") . ';'; |
|
| 239 | - } |
|
| 240 | - |
|
| 241 | - return "\n'<'.'" . "?php " . $code . "\n?'." . "'>'"; |
|
| 171 | + $_contexte = argumenter_inclure($p->param, false, $p, $boucles, $id_boucle, true, '', true); |
|
| 172 | + if (is_string($p->texte)) { |
|
| 173 | + $fichier = $p->texte; |
|
| 174 | + $code = "\"".str_replace('"','\"',$fichier)."\""; |
|
| 175 | + |
|
| 176 | + } else { |
|
| 177 | + $code = calculer_liste($p->texte, $p->descr, $boucles, $id_boucle); |
|
| 178 | + if ($code and preg_match("/^'([^']*)'/s", $code, $r)) { |
|
| 179 | + $fichier = $r[1]; |
|
| 180 | + } else { |
|
| 181 | + $fichier = ''; |
|
| 182 | + } |
|
| 183 | + } |
|
| 184 | + if (!$code or $code === '""' or $code === "''") { |
|
| 185 | + $trace = $p->fonctions; |
|
| 186 | + while (is_array($trace) |
|
| 187 | + and $trace = array_filter($trace) |
|
| 188 | + and count($trace)==1) { |
|
| 189 | + $trace = reset($trace); |
|
| 190 | + } |
|
| 191 | + $erreur_p_i_i = array( |
|
| 192 | + 'zbug_parametres_inclus_incorrects', |
|
| 193 | + array('param' => print_r($trace, true)) |
|
| 194 | + ); |
|
| 195 | + erreur_squelette($erreur_p_i_i, $p); |
|
| 196 | + |
|
| 197 | + return "''"; |
|
| 198 | + } |
|
| 199 | + $compil = texte_script(memoriser_contexte_compil($p)); |
|
| 200 | + |
|
| 201 | + if (is_array($_contexte)) { |
|
| 202 | + // Critere d'inclusion {env} (et {self} pour compatibilite ascendante) |
|
| 203 | + if ($env = (isset($_contexte['env']) || isset($_contexte['self']))) { |
|
| 204 | + unset($_contexte['env']); |
|
| 205 | + } |
|
| 206 | + |
|
| 207 | + // noter les doublons dans l'appel a public.php |
|
| 208 | + if (isset($_contexte['doublons'])) { |
|
| 209 | + $_contexte['doublons'] = "\\'doublons\\' => '.var_export(\$doublons,true).'"; |
|
| 210 | + } |
|
| 211 | + |
|
| 212 | + if ($ajax = isset($_contexte['ajax'])) { |
|
| 213 | + $ajax = preg_replace(",=>(.*)$,ims", '=> ($v=(\\1))?$v:true', $_contexte['ajax']); |
|
| 214 | + unset($_contexte['ajax']); |
|
| 215 | + } |
|
| 216 | + |
|
| 217 | + $_contexte = join(",\n\t", $_contexte); |
|
| 218 | + } else { |
|
| 219 | + return false; |
|
| 220 | + } // j'aurais voulu toucher le fond ... |
|
| 221 | + |
|
| 222 | + $contexte = 'array(' . $_contexte . ')'; |
|
| 223 | + |
|
| 224 | + if ($env) { |
|
| 225 | + $contexte = "array_merge('.var_export(\$Pile[0],1).',$contexte)"; |
|
| 226 | + } |
|
| 227 | + |
|
| 228 | + // s'il y a une extension .php, ce n'est pas un squelette |
|
| 229 | + if ($fichier and preg_match('/^.+[.]php$/s', $fichier)) { |
|
| 230 | + $code = sandbox_composer_inclure_php($fichier, $p, $contexte); |
|
| 231 | + } else { |
|
| 232 | + $_options[] = "\"compil\"=>array($compil)"; |
|
| 233 | + if ($ajax) { |
|
| 234 | + $_options[] = $ajax; |
|
| 235 | + } |
|
| 236 | + $code = " ' . argumenter_squelette($code) . '"; |
|
| 237 | + $code = "echo " . sprintf(CODE_RECUPERER_FOND, $code, $contexte, implode(',', $_options), |
|
| 238 | + "_request(\"connect\")") . ';'; |
|
| 239 | + } |
|
| 240 | + |
|
| 241 | + return "\n'<'.'" . "?php " . $code . "\n?'." . "'>'"; |
|
| 242 | 242 | } |
| 243 | 243 | |
| 244 | 244 | |
@@ -256,7 +256,7 @@ discard block |
||
| 256 | 256 | * true pour ne tester que le cas publie et ignorer l'eventuel var_mode=preview de la page |
| 257 | 257 | */ |
| 258 | 258 | function instituer_boucle(&$boucle, $echapper = true, $ignore_previsu = false) { |
| 259 | - /* |
|
| 259 | + /* |
|
| 260 | 260 | $show['statut'][] = array( |
| 261 | 261 | 'champ'=>'statut', // champ de la table sur lequel porte le filtrage par le statut |
| 262 | 262 | 'publie'=>'publie', // valeur ou liste de valeurs, qui definissent l'objet comme publie. |
@@ -280,71 +280,71 @@ discard block |
||
| 280 | 280 | champstatut est alors le champ statut sur la tablen |
| 281 | 281 | dans les jointures, clen peut etre un tableau pour une jointure complexe : array('id_objet','id_article','objet','article') |
| 282 | 282 | */ |
| 283 | - $id_table = $boucle->id_table; |
|
| 284 | - $show = $boucle->show; |
|
| 285 | - if (isset($show['statut']) and $show['statut']) { |
|
| 286 | - foreach ($show['statut'] as $k => $s) { |
|
| 287 | - // Restreindre aux elements publies si pas de {statut} ou autre dans les criteres |
|
| 288 | - $filtrer = true; |
|
| 289 | - if (isset($s['exception'])) { |
|
| 290 | - foreach (is_array($s['exception']) ? $s['exception'] : array($s['exception']) as $m) { |
|
| 291 | - if (isset($boucle->modificateur[$m]) or isset($boucle->modificateur['criteres'][$m])) { |
|
| 292 | - $filtrer = false; |
|
| 293 | - break; |
|
| 294 | - } |
|
| 295 | - } |
|
| 296 | - } |
|
| 297 | - |
|
| 298 | - if ($filtrer) { |
|
| 299 | - if (is_array($s['champ'])) { |
|
| 300 | - $statut = preg_replace(',\W,', '', array_pop($s['champ'])); // securite |
|
| 301 | - $jointures = array(); |
|
| 302 | - // indiquer la description de chaque table dans le tableau de jointures, |
|
| 303 | - // ce qui permet d'eviter certains GROUP BY inutiles. |
|
| 304 | - $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 305 | - foreach ($s['champ'] as $j) { |
|
| 306 | - $id = reset($j); |
|
| 307 | - $def = $trouver_table($id); |
|
| 308 | - $jointures[] = array('', array($id, $def), end($j)); |
|
| 309 | - } |
|
| 310 | - $jointures[0][0] = $id_table; |
|
| 311 | - if (!array_search($id, $boucle->from)) { |
|
| 312 | - include_spip('public/jointures'); |
|
| 313 | - fabrique_jointures($boucle, $jointures, true, $boucle->show, $id_table, '', $echapper); |
|
| 314 | - } |
|
| 315 | - // trouver l'alias de la table d'arrivee qui porte le statut |
|
| 316 | - $id = array_search($id, $boucle->from); |
|
| 317 | - } else { |
|
| 318 | - $id = $id_table; |
|
| 319 | - $statut = preg_replace(',\W,', '', $s['champ']); // securite |
|
| 320 | - } |
|
| 321 | - $mstatut = $id . '.' . $statut; |
|
| 322 | - |
|
| 323 | - $arg_ignore_previsu = ($ignore_previsu ? ",true" : ''); |
|
| 324 | - include_spip('public/quete'); |
|
| 325 | - if (isset($s['post_date']) and $s['post_date'] |
|
| 326 | - and $GLOBALS['meta']["post_dates"] == 'non' |
|
| 327 | - ) { |
|
| 328 | - $date = $id . '.' . preg_replace(',\W,', '', $s['post_date']); // securite |
|
| 329 | - array_unshift($boucle->where, |
|
| 330 | - $echapper ? |
|
| 331 | - "\nquete_condition_postdates('$date'," . _q($boucle->sql_serveur) . "$arg_ignore_previsu)" |
|
| 332 | - : |
|
| 333 | - quete_condition_postdates($date, $boucle->sql_serveur, $ignore_previsu) |
|
| 334 | - ); |
|
| 335 | - } |
|
| 336 | - array_unshift($boucle->where, |
|
| 337 | - $echapper ? |
|
| 338 | - "\nquete_condition_statut('$mstatut'," |
|
| 339 | - . _q($s['previsu']) . "," |
|
| 340 | - . _q($s['publie']) . "," |
|
| 341 | - . _q($boucle->sql_serveur) . "$arg_ignore_previsu)" |
|
| 342 | - : |
|
| 343 | - quete_condition_statut($mstatut, $s['previsu'], $s['publie'], $boucle->sql_serveur, $ignore_previsu) |
|
| 344 | - ); |
|
| 345 | - } |
|
| 346 | - } |
|
| 347 | - } |
|
| 283 | + $id_table = $boucle->id_table; |
|
| 284 | + $show = $boucle->show; |
|
| 285 | + if (isset($show['statut']) and $show['statut']) { |
|
| 286 | + foreach ($show['statut'] as $k => $s) { |
|
| 287 | + // Restreindre aux elements publies si pas de {statut} ou autre dans les criteres |
|
| 288 | + $filtrer = true; |
|
| 289 | + if (isset($s['exception'])) { |
|
| 290 | + foreach (is_array($s['exception']) ? $s['exception'] : array($s['exception']) as $m) { |
|
| 291 | + if (isset($boucle->modificateur[$m]) or isset($boucle->modificateur['criteres'][$m])) { |
|
| 292 | + $filtrer = false; |
|
| 293 | + break; |
|
| 294 | + } |
|
| 295 | + } |
|
| 296 | + } |
|
| 297 | + |
|
| 298 | + if ($filtrer) { |
|
| 299 | + if (is_array($s['champ'])) { |
|
| 300 | + $statut = preg_replace(',\W,', '', array_pop($s['champ'])); // securite |
|
| 301 | + $jointures = array(); |
|
| 302 | + // indiquer la description de chaque table dans le tableau de jointures, |
|
| 303 | + // ce qui permet d'eviter certains GROUP BY inutiles. |
|
| 304 | + $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 305 | + foreach ($s['champ'] as $j) { |
|
| 306 | + $id = reset($j); |
|
| 307 | + $def = $trouver_table($id); |
|
| 308 | + $jointures[] = array('', array($id, $def), end($j)); |
|
| 309 | + } |
|
| 310 | + $jointures[0][0] = $id_table; |
|
| 311 | + if (!array_search($id, $boucle->from)) { |
|
| 312 | + include_spip('public/jointures'); |
|
| 313 | + fabrique_jointures($boucle, $jointures, true, $boucle->show, $id_table, '', $echapper); |
|
| 314 | + } |
|
| 315 | + // trouver l'alias de la table d'arrivee qui porte le statut |
|
| 316 | + $id = array_search($id, $boucle->from); |
|
| 317 | + } else { |
|
| 318 | + $id = $id_table; |
|
| 319 | + $statut = preg_replace(',\W,', '', $s['champ']); // securite |
|
| 320 | + } |
|
| 321 | + $mstatut = $id . '.' . $statut; |
|
| 322 | + |
|
| 323 | + $arg_ignore_previsu = ($ignore_previsu ? ",true" : ''); |
|
| 324 | + include_spip('public/quete'); |
|
| 325 | + if (isset($s['post_date']) and $s['post_date'] |
|
| 326 | + and $GLOBALS['meta']["post_dates"] == 'non' |
|
| 327 | + ) { |
|
| 328 | + $date = $id . '.' . preg_replace(',\W,', '', $s['post_date']); // securite |
|
| 329 | + array_unshift($boucle->where, |
|
| 330 | + $echapper ? |
|
| 331 | + "\nquete_condition_postdates('$date'," . _q($boucle->sql_serveur) . "$arg_ignore_previsu)" |
|
| 332 | + : |
|
| 333 | + quete_condition_postdates($date, $boucle->sql_serveur, $ignore_previsu) |
|
| 334 | + ); |
|
| 335 | + } |
|
| 336 | + array_unshift($boucle->where, |
|
| 337 | + $echapper ? |
|
| 338 | + "\nquete_condition_statut('$mstatut'," |
|
| 339 | + . _q($s['previsu']) . "," |
|
| 340 | + . _q($s['publie']) . "," |
|
| 341 | + . _q($boucle->sql_serveur) . "$arg_ignore_previsu)" |
|
| 342 | + : |
|
| 343 | + quete_condition_statut($mstatut, $s['previsu'], $s['publie'], $boucle->sql_serveur, $ignore_previsu) |
|
| 344 | + ); |
|
| 345 | + } |
|
| 346 | + } |
|
| 347 | + } |
|
| 348 | 348 | } |
| 349 | 349 | |
| 350 | 350 | /** |
@@ -363,29 +363,29 @@ discard block |
||
| 363 | 363 | */ |
| 364 | 364 | function calculer_boucle($id_boucle, &$boucles) { |
| 365 | 365 | |
| 366 | - $boucle = &$boucles[$id_boucle]; |
|
| 367 | - instituer_boucle($boucle); |
|
| 368 | - $boucles[$id_boucle] = pipeline('post_boucle', $boucles[$id_boucle]); |
|
| 369 | - |
|
| 370 | - // en mode debug memoriser les premiers passages dans la boucle, |
|
| 371 | - // mais pas tous, sinon ca pete. |
|
| 372 | - if (_request('var_mode_affiche') != 'resultat') { |
|
| 373 | - $trace = ''; |
|
| 374 | - } else { |
|
| 375 | - $_trace = $boucles[$id_boucle]->descr['nom'] . $id_boucle; |
|
| 376 | - $_trace = "\$GLOBALS['debug_objets']['resultat']['$_trace']"; |
|
| 377 | - $trace = " |
|
| 366 | + $boucle = &$boucles[$id_boucle]; |
|
| 367 | + instituer_boucle($boucle); |
|
| 368 | + $boucles[$id_boucle] = pipeline('post_boucle', $boucles[$id_boucle]); |
|
| 369 | + |
|
| 370 | + // en mode debug memoriser les premiers passages dans la boucle, |
|
| 371 | + // mais pas tous, sinon ca pete. |
|
| 372 | + if (_request('var_mode_affiche') != 'resultat') { |
|
| 373 | + $trace = ''; |
|
| 374 | + } else { |
|
| 375 | + $_trace = $boucles[$id_boucle]->descr['nom'] . $id_boucle; |
|
| 376 | + $_trace = "\$GLOBALS['debug_objets']['resultat']['$_trace']"; |
|
| 377 | + $trace = " |
|
| 378 | 378 | if (empty($_trace)) { |
| 379 | 379 | $_trace = []; |
| 380 | 380 | } |
| 381 | 381 | if (count($_trace) < 3) { |
| 382 | 382 | $_trace" . "[] = \$t0; |
| 383 | 383 | }"; |
| 384 | - } |
|
| 384 | + } |
|
| 385 | 385 | |
| 386 | - return ($boucles[$id_boucle]->type_requete == TYPE_RECURSIF) |
|
| 387 | - ? calculer_boucle_rec($id_boucle, $boucles, $trace) |
|
| 388 | - : calculer_boucle_nonrec($id_boucle, $boucles, $trace); |
|
| 386 | + return ($boucles[$id_boucle]->type_requete == TYPE_RECURSIF) |
|
| 387 | + ? calculer_boucle_rec($id_boucle, $boucles, $trace) |
|
| 388 | + : calculer_boucle_nonrec($id_boucle, $boucles, $trace); |
|
| 389 | 389 | } |
| 390 | 390 | |
| 391 | 391 | |
@@ -408,15 +408,15 @@ discard block |
||
| 408 | 408 | * Code PHP compilé de la boucle récursive |
| 409 | 409 | **/ |
| 410 | 410 | function calculer_boucle_rec($id_boucle, &$boucles, $trace) { |
| 411 | - $nom = $boucles[$id_boucle]->param[0]; |
|
| 412 | - |
|
| 413 | - return |
|
| 414 | - // Numrows[$nom] peut ne pas être encore defini |
|
| 415 | - "\n\t\$save_numrows = (isset(\$Numrows['$nom']) ? \$Numrows['$nom'] : array());" |
|
| 416 | - . "\n\t\$t0 = " . $boucles[$id_boucle]->return . ";" |
|
| 417 | - . "\n\t\$Numrows['$nom'] = (\$save_numrows);" |
|
| 418 | - . $trace |
|
| 419 | - . "\n\treturn \$t0;"; |
|
| 411 | + $nom = $boucles[$id_boucle]->param[0]; |
|
| 412 | + |
|
| 413 | + return |
|
| 414 | + // Numrows[$nom] peut ne pas être encore defini |
|
| 415 | + "\n\t\$save_numrows = (isset(\$Numrows['$nom']) ? \$Numrows['$nom'] : array());" |
|
| 416 | + . "\n\t\$t0 = " . $boucles[$id_boucle]->return . ";" |
|
| 417 | + . "\n\t\$Numrows['$nom'] = (\$save_numrows);" |
|
| 418 | + . $trace |
|
| 419 | + . "\n\treturn \$t0;"; |
|
| 420 | 420 | } |
| 421 | 421 | |
| 422 | 422 | /** |
@@ -470,170 +470,170 @@ discard block |
||
| 470 | 470 | **/ |
| 471 | 471 | function calculer_boucle_nonrec($id_boucle, &$boucles, $trace) { |
| 472 | 472 | |
| 473 | - $boucle = &$boucles[$id_boucle]; |
|
| 474 | - $return = $boucle->return; |
|
| 475 | - $type_boucle = $boucle->type_requete; |
|
| 476 | - $primary = $boucle->primary; |
|
| 477 | - $constant = preg_match(CODE_MONOTONE, str_replace("\\'", '', $return)); |
|
| 478 | - $flag_cpt = $boucle->mode_partie || $boucle->cptrows; |
|
| 479 | - $corps = ''; |
|
| 480 | - |
|
| 481 | - // faudrait expanser le foreach a la compil, car y en a souvent qu'un |
|
| 482 | - // et puis faire un [] plutot qu'un "','." |
|
| 483 | - if ($boucle->doublons) { |
|
| 484 | - $corps .= "\n\t\t\tforeach(" . $boucle->doublons . ' as $k) $doublons[$k] .= "," . ' . |
|
| 485 | - index_pile($id_boucle, $primary, $boucles) |
|
| 486 | - . "; // doublons\n"; |
|
| 487 | - } |
|
| 488 | - |
|
| 489 | - // La boucle doit-elle selectionner la langue ? |
|
| 490 | - // - par defaut, les boucles suivantes le font |
|
| 491 | - // (sauf si forcer_lang==true ou si le titre contient <multi>). |
|
| 492 | - // - a moins d'une demande explicite via {!lang_select} |
|
| 493 | - if (!$constant && $boucle->lang_select != 'non' && |
|
| 494 | - (($boucle->lang_select == 'oui') || |
|
| 495 | - in_array($type_boucle, array( |
|
| 496 | - 'articles', |
|
| 497 | - 'rubriques', |
|
| 498 | - 'hierarchie', |
|
| 499 | - 'breves' |
|
| 500 | - ))) |
|
| 501 | - ) { |
|
| 502 | - // Memoriser la langue avant la boucle et la restituer apres |
|
| 503 | - // afin que le corps de boucle affecte la globale directement |
|
| 504 | - $init_lang = "lang_select(\$GLOBALS['spip_lang']);\n\t"; |
|
| 505 | - $fin_lang = "lang_select();\n\t"; |
|
| 506 | - $fin_lang_select_public = "\n\t\tlang_select();"; |
|
| 507 | - |
|
| 508 | - $corps .= |
|
| 509 | - "\n\t\tlang_select_public(" |
|
| 510 | - . index_pile($id_boucle, 'lang', $boucles) |
|
| 511 | - . ", '" . $boucle->lang_select . "'" |
|
| 512 | - . (in_array($type_boucle, array( |
|
| 513 | - 'articles', |
|
| 514 | - 'rubriques', |
|
| 515 | - 'hierarchie', |
|
| 516 | - 'breves' |
|
| 517 | - )) ? ', ' . index_pile($id_boucle, 'titre', $boucles) : '') |
|
| 518 | - . ');'; |
|
| 519 | - } else { |
|
| 520 | - $init_lang = ''; |
|
| 521 | - $fin_lang = ''; |
|
| 522 | - $fin_lang_select_public = ''; |
|
| 523 | - // sortir les appels au traducteur (invariants de boucle) |
|
| 524 | - if (strpos($return, '?php') === false |
|
| 525 | - and preg_match_all("/\W(_T[(]'[^']*'[)])/", $return, $r) |
|
| 526 | - ) { |
|
| 527 | - $i = 1; |
|
| 528 | - foreach ($r[1] as $t) { |
|
| 529 | - $init_lang .= "\n\t\$l$i = $t;"; |
|
| 530 | - $return = str_replace($t, "\$l$i", $return); |
|
| 531 | - $i++; |
|
| 532 | - } |
|
| 533 | - } |
|
| 534 | - } |
|
| 535 | - |
|
| 536 | - // gestion optimale des separateurs et des boucles constantes |
|
| 537 | - if (count($boucle->separateur)) { |
|
| 538 | - $code_sep = ("'" . str_replace("'", "\'", join('', $boucle->separateur)) . "'"); |
|
| 539 | - } |
|
| 540 | - |
|
| 541 | - $corps .= |
|
| 542 | - ((!$boucle->separateur) ? |
|
| 543 | - (($constant && !$corps && !$flag_cpt) ? $return : |
|
| 544 | - (($return === "''") ? '' : |
|
| 545 | - ("\n\t\t" . '$t0 .= ' . $return . ";"))) : |
|
| 546 | - ("\n\t\t\$t1 " . |
|
| 547 | - ((strpos($return, '$t1.') === 0) ? |
|
| 548 | - (".=" . substr($return, 4)) : |
|
| 549 | - ('= ' . $return)) . |
|
| 550 | - ";\n\t\t" . |
|
| 551 | - '$t0 .= ((strlen($t1) && strlen($t0)) ? ' . $code_sep . " : '') . \$t1;")); |
|
| 552 | - |
|
| 553 | - // Calculer les invalideurs si c'est une boucle non constante et si on |
|
| 554 | - // souhaite invalider ces elements |
|
| 555 | - if (!$constant and $primary) { |
|
| 556 | - include_spip('inc/invalideur'); |
|
| 557 | - $corps = calcul_invalideurs($corps, $primary,$boucles, $id_boucle); |
|
| 558 | - } |
|
| 559 | - |
|
| 560 | - // gerer le compteur de boucle |
|
| 561 | - // avec ou sans son utilisation par les criteres {1/3} {1,4} {n-2,1}... |
|
| 562 | - |
|
| 563 | - if ($boucle->partie or $boucle->cptrows) { |
|
| 564 | - $corps = "\n\t\t\$Numrows['$id_boucle']['compteur_boucle']++;" |
|
| 565 | - . $boucle->partie |
|
| 566 | - . $corps; |
|
| 567 | - } |
|
| 568 | - |
|
| 569 | - // depiler la lang de la boucle si besoin |
|
| 570 | - $corps .= $fin_lang_select_public; |
|
| 571 | - |
|
| 572 | - // si le corps est une constante, ne pas appeler le serveur N fois! |
|
| 573 | - |
|
| 574 | - if (preg_match(CODE_MONOTONE, str_replace("\\'", '', $corps), $r)) { |
|
| 575 | - if (!isset($r[2]) or (!$r[2])) { |
|
| 576 | - if (!$boucle->numrows) { |
|
| 577 | - return "\n\t\$t0 = '';"; |
|
| 578 | - } else { |
|
| 579 | - $corps = ""; |
|
| 580 | - } |
|
| 581 | - } else { |
|
| 582 | - $boucle->numrows = true; |
|
| 583 | - $corps = "\n\t\$t0 = str_repeat($corps, \$Numrows['$id_boucle']['total']);"; |
|
| 584 | - } |
|
| 585 | - } else { |
|
| 586 | - $corps = "while (\$Pile[\$SP]=\$iter->fetch()) {\n$corps\n }"; |
|
| 587 | - } |
|
| 588 | - |
|
| 589 | - $count = ''; |
|
| 590 | - if (!$boucle->select) { |
|
| 591 | - if (!$boucle->numrows or $boucle->limit or $boucle->mode_partie or $boucle->group) { |
|
| 592 | - $count = '1'; |
|
| 593 | - } else { |
|
| 594 | - $count = 'count(*)'; |
|
| 595 | - } |
|
| 596 | - $boucles[$id_boucle]->select[] = $count; |
|
| 597 | - } |
|
| 598 | - |
|
| 599 | - if ($flag_cpt) { |
|
| 600 | - $nums = "\n\t// COMPTEUR\n\t" |
|
| 601 | - . "\$Numrows['$id_boucle']['compteur_boucle'] = 0;\n\t"; |
|
| 602 | - } else { |
|
| 603 | - $nums = ''; |
|
| 604 | - } |
|
| 605 | - |
|
| 606 | - if ($boucle->numrows or $boucle->mode_partie) { |
|
| 607 | - $nums .= "\$Numrows['$id_boucle']['command'] = \$command;\n\t" |
|
| 608 | - . "\$Numrows['$id_boucle']['total'] = @intval(\$iter->count());" |
|
| 609 | - . $boucle->mode_partie |
|
| 610 | - . "\n\t"; |
|
| 611 | - } |
|
| 612 | - |
|
| 613 | - // Ne calculer la requete que maintenant |
|
| 614 | - // car ce qui precede appelle index_pile qui influe dessus |
|
| 615 | - |
|
| 616 | - $init = (($init = $boucles[$id_boucle]->doublons) |
|
| 617 | - ? ("\n\t$init = array();") : '') |
|
| 618 | - . calculer_requete_sql($boucles[$id_boucle]); |
|
| 619 | - |
|
| 620 | - $contexte = memoriser_contexte_compil($boucle); |
|
| 621 | - |
|
| 622 | - $a = sprintf(CODE_CORPS_BOUCLE, |
|
| 623 | - $init, |
|
| 624 | - $boucle->iterateur, |
|
| 625 | - "\$command", |
|
| 626 | - $contexte, |
|
| 627 | - $nums, |
|
| 628 | - $init_lang, |
|
| 629 | - $corps, |
|
| 630 | - $fin_lang, |
|
| 631 | - $trace, |
|
| 632 | - 'BOUCLE' . $id_boucle . ' @ ' . ($boucle->descr['sourcefile']) |
|
| 633 | - ); |
|
| 473 | + $boucle = &$boucles[$id_boucle]; |
|
| 474 | + $return = $boucle->return; |
|
| 475 | + $type_boucle = $boucle->type_requete; |
|
| 476 | + $primary = $boucle->primary; |
|
| 477 | + $constant = preg_match(CODE_MONOTONE, str_replace("\\'", '', $return)); |
|
| 478 | + $flag_cpt = $boucle->mode_partie || $boucle->cptrows; |
|
| 479 | + $corps = ''; |
|
| 480 | + |
|
| 481 | + // faudrait expanser le foreach a la compil, car y en a souvent qu'un |
|
| 482 | + // et puis faire un [] plutot qu'un "','." |
|
| 483 | + if ($boucle->doublons) { |
|
| 484 | + $corps .= "\n\t\t\tforeach(" . $boucle->doublons . ' as $k) $doublons[$k] .= "," . ' . |
|
| 485 | + index_pile($id_boucle, $primary, $boucles) |
|
| 486 | + . "; // doublons\n"; |
|
| 487 | + } |
|
| 488 | + |
|
| 489 | + // La boucle doit-elle selectionner la langue ? |
|
| 490 | + // - par defaut, les boucles suivantes le font |
|
| 491 | + // (sauf si forcer_lang==true ou si le titre contient <multi>). |
|
| 492 | + // - a moins d'une demande explicite via {!lang_select} |
|
| 493 | + if (!$constant && $boucle->lang_select != 'non' && |
|
| 494 | + (($boucle->lang_select == 'oui') || |
|
| 495 | + in_array($type_boucle, array( |
|
| 496 | + 'articles', |
|
| 497 | + 'rubriques', |
|
| 498 | + 'hierarchie', |
|
| 499 | + 'breves' |
|
| 500 | + ))) |
|
| 501 | + ) { |
|
| 502 | + // Memoriser la langue avant la boucle et la restituer apres |
|
| 503 | + // afin que le corps de boucle affecte la globale directement |
|
| 504 | + $init_lang = "lang_select(\$GLOBALS['spip_lang']);\n\t"; |
|
| 505 | + $fin_lang = "lang_select();\n\t"; |
|
| 506 | + $fin_lang_select_public = "\n\t\tlang_select();"; |
|
| 507 | + |
|
| 508 | + $corps .= |
|
| 509 | + "\n\t\tlang_select_public(" |
|
| 510 | + . index_pile($id_boucle, 'lang', $boucles) |
|
| 511 | + . ", '" . $boucle->lang_select . "'" |
|
| 512 | + . (in_array($type_boucle, array( |
|
| 513 | + 'articles', |
|
| 514 | + 'rubriques', |
|
| 515 | + 'hierarchie', |
|
| 516 | + 'breves' |
|
| 517 | + )) ? ', ' . index_pile($id_boucle, 'titre', $boucles) : '') |
|
| 518 | + . ');'; |
|
| 519 | + } else { |
|
| 520 | + $init_lang = ''; |
|
| 521 | + $fin_lang = ''; |
|
| 522 | + $fin_lang_select_public = ''; |
|
| 523 | + // sortir les appels au traducteur (invariants de boucle) |
|
| 524 | + if (strpos($return, '?php') === false |
|
| 525 | + and preg_match_all("/\W(_T[(]'[^']*'[)])/", $return, $r) |
|
| 526 | + ) { |
|
| 527 | + $i = 1; |
|
| 528 | + foreach ($r[1] as $t) { |
|
| 529 | + $init_lang .= "\n\t\$l$i = $t;"; |
|
| 530 | + $return = str_replace($t, "\$l$i", $return); |
|
| 531 | + $i++; |
|
| 532 | + } |
|
| 533 | + } |
|
| 534 | + } |
|
| 535 | + |
|
| 536 | + // gestion optimale des separateurs et des boucles constantes |
|
| 537 | + if (count($boucle->separateur)) { |
|
| 538 | + $code_sep = ("'" . str_replace("'", "\'", join('', $boucle->separateur)) . "'"); |
|
| 539 | + } |
|
| 540 | + |
|
| 541 | + $corps .= |
|
| 542 | + ((!$boucle->separateur) ? |
|
| 543 | + (($constant && !$corps && !$flag_cpt) ? $return : |
|
| 544 | + (($return === "''") ? '' : |
|
| 545 | + ("\n\t\t" . '$t0 .= ' . $return . ";"))) : |
|
| 546 | + ("\n\t\t\$t1 " . |
|
| 547 | + ((strpos($return, '$t1.') === 0) ? |
|
| 548 | + (".=" . substr($return, 4)) : |
|
| 549 | + ('= ' . $return)) . |
|
| 550 | + ";\n\t\t" . |
|
| 551 | + '$t0 .= ((strlen($t1) && strlen($t0)) ? ' . $code_sep . " : '') . \$t1;")); |
|
| 552 | + |
|
| 553 | + // Calculer les invalideurs si c'est une boucle non constante et si on |
|
| 554 | + // souhaite invalider ces elements |
|
| 555 | + if (!$constant and $primary) { |
|
| 556 | + include_spip('inc/invalideur'); |
|
| 557 | + $corps = calcul_invalideurs($corps, $primary,$boucles, $id_boucle); |
|
| 558 | + } |
|
| 559 | + |
|
| 560 | + // gerer le compteur de boucle |
|
| 561 | + // avec ou sans son utilisation par les criteres {1/3} {1,4} {n-2,1}... |
|
| 562 | + |
|
| 563 | + if ($boucle->partie or $boucle->cptrows) { |
|
| 564 | + $corps = "\n\t\t\$Numrows['$id_boucle']['compteur_boucle']++;" |
|
| 565 | + . $boucle->partie |
|
| 566 | + . $corps; |
|
| 567 | + } |
|
| 568 | + |
|
| 569 | + // depiler la lang de la boucle si besoin |
|
| 570 | + $corps .= $fin_lang_select_public; |
|
| 571 | + |
|
| 572 | + // si le corps est une constante, ne pas appeler le serveur N fois! |
|
| 573 | + |
|
| 574 | + if (preg_match(CODE_MONOTONE, str_replace("\\'", '', $corps), $r)) { |
|
| 575 | + if (!isset($r[2]) or (!$r[2])) { |
|
| 576 | + if (!$boucle->numrows) { |
|
| 577 | + return "\n\t\$t0 = '';"; |
|
| 578 | + } else { |
|
| 579 | + $corps = ""; |
|
| 580 | + } |
|
| 581 | + } else { |
|
| 582 | + $boucle->numrows = true; |
|
| 583 | + $corps = "\n\t\$t0 = str_repeat($corps, \$Numrows['$id_boucle']['total']);"; |
|
| 584 | + } |
|
| 585 | + } else { |
|
| 586 | + $corps = "while (\$Pile[\$SP]=\$iter->fetch()) {\n$corps\n }"; |
|
| 587 | + } |
|
| 588 | + |
|
| 589 | + $count = ''; |
|
| 590 | + if (!$boucle->select) { |
|
| 591 | + if (!$boucle->numrows or $boucle->limit or $boucle->mode_partie or $boucle->group) { |
|
| 592 | + $count = '1'; |
|
| 593 | + } else { |
|
| 594 | + $count = 'count(*)'; |
|
| 595 | + } |
|
| 596 | + $boucles[$id_boucle]->select[] = $count; |
|
| 597 | + } |
|
| 598 | + |
|
| 599 | + if ($flag_cpt) { |
|
| 600 | + $nums = "\n\t// COMPTEUR\n\t" |
|
| 601 | + . "\$Numrows['$id_boucle']['compteur_boucle'] = 0;\n\t"; |
|
| 602 | + } else { |
|
| 603 | + $nums = ''; |
|
| 604 | + } |
|
| 605 | + |
|
| 606 | + if ($boucle->numrows or $boucle->mode_partie) { |
|
| 607 | + $nums .= "\$Numrows['$id_boucle']['command'] = \$command;\n\t" |
|
| 608 | + . "\$Numrows['$id_boucle']['total'] = @intval(\$iter->count());" |
|
| 609 | + . $boucle->mode_partie |
|
| 610 | + . "\n\t"; |
|
| 611 | + } |
|
| 612 | + |
|
| 613 | + // Ne calculer la requete que maintenant |
|
| 614 | + // car ce qui precede appelle index_pile qui influe dessus |
|
| 615 | + |
|
| 616 | + $init = (($init = $boucles[$id_boucle]->doublons) |
|
| 617 | + ? ("\n\t$init = array();") : '') |
|
| 618 | + . calculer_requete_sql($boucles[$id_boucle]); |
|
| 619 | + |
|
| 620 | + $contexte = memoriser_contexte_compil($boucle); |
|
| 621 | + |
|
| 622 | + $a = sprintf(CODE_CORPS_BOUCLE, |
|
| 623 | + $init, |
|
| 624 | + $boucle->iterateur, |
|
| 625 | + "\$command", |
|
| 626 | + $contexte, |
|
| 627 | + $nums, |
|
| 628 | + $init_lang, |
|
| 629 | + $corps, |
|
| 630 | + $fin_lang, |
|
| 631 | + $trace, |
|
| 632 | + 'BOUCLE' . $id_boucle . ' @ ' . ($boucle->descr['sourcefile']) |
|
| 633 | + ); |
|
| 634 | 634 | |
| 635 | 635 | # var_dump($a);exit; |
| 636 | - return $a; |
|
| 636 | + return $a; |
|
| 637 | 637 | } |
| 638 | 638 | |
| 639 | 639 | |
@@ -649,43 +649,43 @@ discard block |
||
| 649 | 649 | * Code PHP compilé définissant les informations de requête |
| 650 | 650 | **/ |
| 651 | 651 | function calculer_requete_sql($boucle) { |
| 652 | - $init = array(); |
|
| 653 | - $init[] = calculer_dec('table', "'" . $boucle->id_table . "'"); |
|
| 654 | - $init[] = calculer_dec('id', "'" . $boucle->id_boucle . "'"); |
|
| 655 | - # En absence de champ c'est un decompte : |
|
| 656 | - $init[] = calculer_dec('from', calculer_from($boucle)); |
|
| 657 | - $init[] = calculer_dec('type', calculer_from_type($boucle)); |
|
| 658 | - $init[] = calculer_dec('groupby', |
|
| 659 | - 'array(' . (($g = join("\",\n\t\t\"", $boucle->group)) ? '"' . $g . '"' : '') . ")"); |
|
| 660 | - $init[] = calculer_dec('select', 'array("' . join("\",\n\t\t\"", $boucle->select) . "\")"); |
|
| 661 | - $init[] = calculer_dec('orderby', 'array(' . calculer_order($boucle) . ")"); |
|
| 662 | - $init[] = calculer_dec('where', calculer_dump_array($boucle->where)); |
|
| 663 | - $init[] = calculer_dec('join', calculer_dump_join($boucle->join)); |
|
| 664 | - $init[] = calculer_dec('limit', |
|
| 665 | - (strpos($boucle->limit, 'intval') === false ? |
|
| 666 | - "'" . $boucle->limit . "'" |
|
| 667 | - : |
|
| 668 | - $boucle->limit)); |
|
| 669 | - $init[] = calculer_dec('having', calculer_dump_array($boucle->having)); |
|
| 670 | - $s = $d = ""; |
|
| 671 | - // l'index 0 de $i indique si l'affectation est statique (contenu) |
|
| 672 | - // ou recalculée à chaque passage (vide) |
|
| 673 | - foreach ($init as $i) { |
|
| 674 | - if (reset($i)) { |
|
| 675 | - $s .= "\n\t\t" . end($i); |
|
| 676 | - } # statique |
|
| 677 | - else { |
|
| 678 | - $d .= "\n\t" . end($i); |
|
| 679 | - } # dynamique |
|
| 680 | - } |
|
| 681 | - |
|
| 682 | - return ($boucle->hierarchie ? "\n\t$boucle->hierarchie" : '') |
|
| 683 | - . $boucle->in |
|
| 684 | - . $boucle->hash |
|
| 685 | - . "\n\t" . 'if (!isset($command[\'table\'])) {' |
|
| 686 | - . $s |
|
| 687 | - . "\n\t}" |
|
| 688 | - . $d; |
|
| 652 | + $init = array(); |
|
| 653 | + $init[] = calculer_dec('table', "'" . $boucle->id_table . "'"); |
|
| 654 | + $init[] = calculer_dec('id', "'" . $boucle->id_boucle . "'"); |
|
| 655 | + # En absence de champ c'est un decompte : |
|
| 656 | + $init[] = calculer_dec('from', calculer_from($boucle)); |
|
| 657 | + $init[] = calculer_dec('type', calculer_from_type($boucle)); |
|
| 658 | + $init[] = calculer_dec('groupby', |
|
| 659 | + 'array(' . (($g = join("\",\n\t\t\"", $boucle->group)) ? '"' . $g . '"' : '') . ")"); |
|
| 660 | + $init[] = calculer_dec('select', 'array("' . join("\",\n\t\t\"", $boucle->select) . "\")"); |
|
| 661 | + $init[] = calculer_dec('orderby', 'array(' . calculer_order($boucle) . ")"); |
|
| 662 | + $init[] = calculer_dec('where', calculer_dump_array($boucle->where)); |
|
| 663 | + $init[] = calculer_dec('join', calculer_dump_join($boucle->join)); |
|
| 664 | + $init[] = calculer_dec('limit', |
|
| 665 | + (strpos($boucle->limit, 'intval') === false ? |
|
| 666 | + "'" . $boucle->limit . "'" |
|
| 667 | + : |
|
| 668 | + $boucle->limit)); |
|
| 669 | + $init[] = calculer_dec('having', calculer_dump_array($boucle->having)); |
|
| 670 | + $s = $d = ""; |
|
| 671 | + // l'index 0 de $i indique si l'affectation est statique (contenu) |
|
| 672 | + // ou recalculée à chaque passage (vide) |
|
| 673 | + foreach ($init as $i) { |
|
| 674 | + if (reset($i)) { |
|
| 675 | + $s .= "\n\t\t" . end($i); |
|
| 676 | + } # statique |
|
| 677 | + else { |
|
| 678 | + $d .= "\n\t" . end($i); |
|
| 679 | + } # dynamique |
|
| 680 | + } |
|
| 681 | + |
|
| 682 | + return ($boucle->hierarchie ? "\n\t$boucle->hierarchie" : '') |
|
| 683 | + . $boucle->in |
|
| 684 | + . $boucle->hash |
|
| 685 | + . "\n\t" . 'if (!isset($command[\'table\'])) {' |
|
| 686 | + . $s |
|
| 687 | + . "\n\t}" |
|
| 688 | + . $d; |
|
| 689 | 689 | } |
| 690 | 690 | |
| 691 | 691 | /** |
@@ -703,13 +703,13 @@ discard block |
||
| 703 | 703 | * qui peut être utilisé pour la production d'un tableau array() |
| 704 | 704 | **/ |
| 705 | 705 | function memoriser_contexte_compil($p) { |
| 706 | - return join(',', array( |
|
| 707 | - _q(isset($p->descr['sourcefile']) ? $p->descr['sourcefile'] : ''), |
|
| 708 | - _q(isset($p->descr['nom']) ? $p->descr['nom'] : ''), |
|
| 709 | - _q(isset($p->id_boucle) ? $p->id_boucle : null), |
|
| 710 | - intval($p->ligne), |
|
| 711 | - '$GLOBALS[\'spip_lang\']' |
|
| 712 | - )); |
|
| 706 | + return join(',', array( |
|
| 707 | + _q(isset($p->descr['sourcefile']) ? $p->descr['sourcefile'] : ''), |
|
| 708 | + _q(isset($p->descr['nom']) ? $p->descr['nom'] : ''), |
|
| 709 | + _q(isset($p->id_boucle) ? $p->id_boucle : null), |
|
| 710 | + intval($p->ligne), |
|
| 711 | + '$GLOBALS[\'spip_lang\']' |
|
| 712 | + )); |
|
| 713 | 713 | } |
| 714 | 714 | |
| 715 | 715 | /** |
@@ -727,19 +727,19 @@ discard block |
||
| 727 | 727 | * Objet Contexte |
| 728 | 728 | **/ |
| 729 | 729 | function reconstruire_contexte_compil($context_compil) { |
| 730 | - if (!is_array($context_compil)) { |
|
| 731 | - return $context_compil; |
|
| 732 | - } |
|
| 733 | - $p = new Contexte; |
|
| 734 | - $p->descr = array( |
|
| 735 | - 'sourcefile' => $context_compil[0], |
|
| 736 | - 'nom' => $context_compil[1] |
|
| 737 | - ); |
|
| 738 | - $p->id_boucle = $context_compil[2]; |
|
| 739 | - $p->ligne = $context_compil[3]; |
|
| 740 | - $p->lang = $context_compil[4]; |
|
| 741 | - |
|
| 742 | - return $p; |
|
| 730 | + if (!is_array($context_compil)) { |
|
| 731 | + return $context_compil; |
|
| 732 | + } |
|
| 733 | + $p = new Contexte; |
|
| 734 | + $p->descr = array( |
|
| 735 | + 'sourcefile' => $context_compil[0], |
|
| 736 | + 'nom' => $context_compil[1] |
|
| 737 | + ); |
|
| 738 | + $p->id_boucle = $context_compil[2]; |
|
| 739 | + $p->ligne = $context_compil[3]; |
|
| 740 | + $p->lang = $context_compil[4]; |
|
| 741 | + |
|
| 742 | + return $p; |
|
| 743 | 743 | } |
| 744 | 744 | |
| 745 | 745 | /** |
@@ -765,12 +765,12 @@ discard block |
||
| 765 | 765 | * - index 1 : Code de l'affectation |
| 766 | 766 | **/ |
| 767 | 767 | function calculer_dec($nom, $val) { |
| 768 | - $static = 'if (!isset($command[\'' . $nom . '\'])) '; |
|
| 769 | - // si une variable apparait dans le calcul de la clause |
|
| 770 | - // il faut la re-evaluer a chaque passage |
|
| 771 | - if ( |
|
| 772 | - strpos($val, '$') !== false |
|
| 773 | - /* |
|
| 768 | + $static = 'if (!isset($command[\'' . $nom . '\'])) '; |
|
| 769 | + // si une variable apparait dans le calcul de la clause |
|
| 770 | + // il faut la re-evaluer a chaque passage |
|
| 771 | + if ( |
|
| 772 | + strpos($val, '$') !== false |
|
| 773 | + /* |
|
| 774 | 774 | OR strpos($val, 'sql_') !== false |
| 775 | 775 | OR ( |
| 776 | 776 | $test = str_replace(array("array(",'\"',"\'"),array("","",""),$val) // supprimer les array( et les echappements de guillemets |
@@ -778,11 +778,11 @@ discard block |
||
| 778 | 778 | AND $test = preg_replace(",'[^']*',UimsS","",$test) // supprimer les chaines qui peuvent contenir des fonctions SQL qui ne genent pas |
| 779 | 779 | AND preg_match(",\w+\s*\(,UimsS",$test,$regs) // tester la presence de fonctions restantes |
| 780 | 780 | )*/ |
| 781 | - ) { |
|
| 782 | - $static = ""; |
|
| 783 | - } |
|
| 781 | + ) { |
|
| 782 | + $static = ""; |
|
| 783 | + } |
|
| 784 | 784 | |
| 785 | - return array($static, '$command[\'' . $nom . '\'] = ' . $val . ';'); |
|
| 785 | + return array($static, '$command[\'' . $nom . '\'] = ' . $val . ';'); |
|
| 786 | 786 | } |
| 787 | 787 | |
| 788 | 788 | /** |
@@ -802,33 +802,33 @@ discard block |
||
| 802 | 802 | * Expression PHP décrivant un texte ou un tableau |
| 803 | 803 | **/ |
| 804 | 804 | function calculer_dump_array($a) { |
| 805 | - if (!is_array($a)) { |
|
| 806 | - return $a; |
|
| 807 | - } |
|
| 808 | - $res = ""; |
|
| 809 | - if ($a and $a[0] == "'?'") { |
|
| 810 | - return ("(" . calculer_dump_array($a[1]) . |
|
| 811 | - " ? " . calculer_dump_array($a[2]) . |
|
| 812 | - " : " . calculer_dump_array($a[3]) . |
|
| 813 | - ")"); |
|
| 814 | - } else { |
|
| 815 | - foreach ($a as $k => $v) { |
|
| 816 | - $showk = (is_numeric($k) ? '' : sql_quote($k) . ' => '); |
|
| 817 | - $res .= ", " . $showk . calculer_dump_array($v); |
|
| 818 | - } |
|
| 819 | - |
|
| 820 | - return "\n\t\t\tarray(" . substr($res, 2) . ')'; |
|
| 821 | - } |
|
| 805 | + if (!is_array($a)) { |
|
| 806 | + return $a; |
|
| 807 | + } |
|
| 808 | + $res = ""; |
|
| 809 | + if ($a and $a[0] == "'?'") { |
|
| 810 | + return ("(" . calculer_dump_array($a[1]) . |
|
| 811 | + " ? " . calculer_dump_array($a[2]) . |
|
| 812 | + " : " . calculer_dump_array($a[3]) . |
|
| 813 | + ")"); |
|
| 814 | + } else { |
|
| 815 | + foreach ($a as $k => $v) { |
|
| 816 | + $showk = (is_numeric($k) ? '' : sql_quote($k) . ' => '); |
|
| 817 | + $res .= ", " . $showk . calculer_dump_array($v); |
|
| 818 | + } |
|
| 819 | + |
|
| 820 | + return "\n\t\t\tarray(" . substr($res, 2) . ')'; |
|
| 821 | + } |
|
| 822 | 822 | } |
| 823 | 823 | |
| 824 | 824 | // https://code.spip.net/@calculer_dump_join |
| 825 | 825 | function calculer_dump_join($a) { |
| 826 | - $res = ""; |
|
| 827 | - foreach ($a as $k => $v) { |
|
| 828 | - $res .= ", '$k' => array(" . implode(',', $v) . ")"; |
|
| 829 | - } |
|
| 826 | + $res = ""; |
|
| 827 | + foreach ($a as $k => $v) { |
|
| 828 | + $res .= ", '$k' => array(" . implode(',', $v) . ")"; |
|
| 829 | + } |
|
| 830 | 830 | |
| 831 | - return 'array(' . substr($res, 2) . ')'; |
|
| 831 | + return 'array(' . substr($res, 2) . ')'; |
|
| 832 | 832 | } |
| 833 | 833 | |
| 834 | 834 | /** |
@@ -840,12 +840,12 @@ discard block |
||
| 840 | 840 | * Code PHP construisant un tableau des alias et noms des tables du FROM |
| 841 | 841 | **/ |
| 842 | 842 | function calculer_from(&$boucle) { |
| 843 | - $res = ""; |
|
| 844 | - foreach ($boucle->from as $k => $v) { |
|
| 845 | - $res .= ",'$k' => '$v'"; |
|
| 846 | - } |
|
| 843 | + $res = ""; |
|
| 844 | + foreach ($boucle->from as $k => $v) { |
|
| 845 | + $res .= ",'$k' => '$v'"; |
|
| 846 | + } |
|
| 847 | 847 | |
| 848 | - return 'array(' . substr($res, 1) . ')'; |
|
| 848 | + return 'array(' . substr($res, 1) . ')'; |
|
| 849 | 849 | } |
| 850 | 850 | |
| 851 | 851 | /** |
@@ -858,30 +858,30 @@ discard block |
||
| 858 | 858 | * Code PHP construisant un tableau des alias et type de jointure du FROM |
| 859 | 859 | **/ |
| 860 | 860 | function calculer_from_type(&$boucle) { |
| 861 | - $res = ""; |
|
| 862 | - foreach ($boucle->from_type as $k => $v) { |
|
| 863 | - $res .= ",'$k' => '$v'"; |
|
| 864 | - } |
|
| 861 | + $res = ""; |
|
| 862 | + foreach ($boucle->from_type as $k => $v) { |
|
| 863 | + $res .= ",'$k' => '$v'"; |
|
| 864 | + } |
|
| 865 | 865 | |
| 866 | - return 'array(' . substr($res, 1) . ')'; |
|
| 866 | + return 'array(' . substr($res, 1) . ')'; |
|
| 867 | 867 | } |
| 868 | 868 | |
| 869 | 869 | // https://code.spip.net/@calculer_order |
| 870 | 870 | function calculer_order(&$boucle) { |
| 871 | - if (!$order = $boucle->order |
|
| 872 | - and !$order = $boucle->default_order |
|
| 873 | - ) { |
|
| 874 | - $order = array(); |
|
| 875 | - } |
|
| 871 | + if (!$order = $boucle->order |
|
| 872 | + and !$order = $boucle->default_order |
|
| 873 | + ) { |
|
| 874 | + $order = array(); |
|
| 875 | + } |
|
| 876 | 876 | |
| 877 | - /*if (isset($boucle->modificateur['collate'])){ |
|
| 877 | + /*if (isset($boucle->modificateur['collate'])){ |
|
| 878 | 878 | $col = "." . $boucle->modificateur['collate']; |
| 879 | 879 | foreach($order as $k=>$o) |
| 880 | 880 | if (strpos($order[$k],'COLLATE')===false) |
| 881 | 881 | $order[$k].= $col; |
| 882 | 882 | }*/ |
| 883 | 883 | |
| 884 | - return join(', ', $order); |
|
| 884 | + return join(', ', $order); |
|
| 885 | 885 | } |
| 886 | 886 | |
| 887 | 887 | // Production du code PHP a partir de la sequence livree par le phraseur |
@@ -891,59 +891,59 @@ discard block |
||
| 891 | 891 | |
| 892 | 892 | // https://code.spip.net/@calculer_liste |
| 893 | 893 | function calculer_liste($tableau, $descr, &$boucles, $id_boucle = '') { |
| 894 | - if (!$tableau) { |
|
| 895 | - return "''"; |
|
| 896 | - } |
|
| 897 | - if (is_string($descr)) { |
|
| 898 | - if (isset($boucles[$descr])) { |
|
| 899 | - $idb = $descr; |
|
| 900 | - $descr = []; |
|
| 901 | - if (isset($boucles[$idb]->descr['id_mere_contexte'])) { |
|
| 902 | - $descr['id_mere'] = $boucles[$idb]->descr['id_mere_contexte']; |
|
| 903 | - } |
|
| 904 | - if (isset($boucles[$idb]->descr['sourcefile'])) { |
|
| 905 | - $descr['sourcefile'] = $boucles[$idb]->descr['sourcefile']; |
|
| 906 | - } |
|
| 907 | - } |
|
| 908 | - else { |
|
| 909 | - $descr = array(); |
|
| 910 | - } |
|
| 911 | - } |
|
| 912 | - if (!isset($descr['niv'])) { |
|
| 913 | - $descr['niv'] = 0; |
|
| 914 | - } |
|
| 915 | - $codes = compile_cas($tableau, $descr, $boucles, $id_boucle); |
|
| 916 | - if ($codes === false) { |
|
| 917 | - return false; |
|
| 918 | - } |
|
| 919 | - $n = count($codes); |
|
| 920 | - if (!$n) { |
|
| 921 | - return "''"; |
|
| 922 | - } |
|
| 923 | - $tab = str_repeat("\t", $descr['niv']); |
|
| 924 | - if (_request('var_mode_affiche') != 'validation') { |
|
| 925 | - if ($n == 1) { |
|
| 926 | - return $codes[0]; |
|
| 927 | - } else { |
|
| 928 | - $res = ''; |
|
| 929 | - foreach ($codes as $code) { |
|
| 930 | - if (!preg_match("/^'[^']*'$/", $code) |
|
| 931 | - or substr($res, -1, 1) !== "'" |
|
| 932 | - ) { |
|
| 933 | - $res .= " .\n$tab$code"; |
|
| 934 | - } else { |
|
| 935 | - $res = substr($res, 0, -1) . substr($code, 1); |
|
| 936 | - } |
|
| 937 | - } |
|
| 938 | - |
|
| 939 | - return '(' . substr($res, 2 + $descr['niv']) . ')'; |
|
| 940 | - } |
|
| 941 | - } else { |
|
| 942 | - $nom = $descr['nom'] . $id_boucle . ($descr['niv'] ? $descr['niv'] : ''); |
|
| 943 | - |
|
| 944 | - return "join('', array_map('array_shift', \$GLOBALS['debug_objets']['sequence']['$nom'] = array(" . join(" ,\n$tab", |
|
| 945 | - $codes) . ")))"; |
|
| 946 | - } |
|
| 894 | + if (!$tableau) { |
|
| 895 | + return "''"; |
|
| 896 | + } |
|
| 897 | + if (is_string($descr)) { |
|
| 898 | + if (isset($boucles[$descr])) { |
|
| 899 | + $idb = $descr; |
|
| 900 | + $descr = []; |
|
| 901 | + if (isset($boucles[$idb]->descr['id_mere_contexte'])) { |
|
| 902 | + $descr['id_mere'] = $boucles[$idb]->descr['id_mere_contexte']; |
|
| 903 | + } |
|
| 904 | + if (isset($boucles[$idb]->descr['sourcefile'])) { |
|
| 905 | + $descr['sourcefile'] = $boucles[$idb]->descr['sourcefile']; |
|
| 906 | + } |
|
| 907 | + } |
|
| 908 | + else { |
|
| 909 | + $descr = array(); |
|
| 910 | + } |
|
| 911 | + } |
|
| 912 | + if (!isset($descr['niv'])) { |
|
| 913 | + $descr['niv'] = 0; |
|
| 914 | + } |
|
| 915 | + $codes = compile_cas($tableau, $descr, $boucles, $id_boucle); |
|
| 916 | + if ($codes === false) { |
|
| 917 | + return false; |
|
| 918 | + } |
|
| 919 | + $n = count($codes); |
|
| 920 | + if (!$n) { |
|
| 921 | + return "''"; |
|
| 922 | + } |
|
| 923 | + $tab = str_repeat("\t", $descr['niv']); |
|
| 924 | + if (_request('var_mode_affiche') != 'validation') { |
|
| 925 | + if ($n == 1) { |
|
| 926 | + return $codes[0]; |
|
| 927 | + } else { |
|
| 928 | + $res = ''; |
|
| 929 | + foreach ($codes as $code) { |
|
| 930 | + if (!preg_match("/^'[^']*'$/", $code) |
|
| 931 | + or substr($res, -1, 1) !== "'" |
|
| 932 | + ) { |
|
| 933 | + $res .= " .\n$tab$code"; |
|
| 934 | + } else { |
|
| 935 | + $res = substr($res, 0, -1) . substr($code, 1); |
|
| 936 | + } |
|
| 937 | + } |
|
| 938 | + |
|
| 939 | + return '(' . substr($res, 2 + $descr['niv']) . ')'; |
|
| 940 | + } |
|
| 941 | + } else { |
|
| 942 | + $nom = $descr['nom'] . $id_boucle . ($descr['niv'] ? $descr['niv'] : ''); |
|
| 943 | + |
|
| 944 | + return "join('', array_map('array_shift', \$GLOBALS['debug_objets']['sequence']['$nom'] = array(" . join(" ,\n$tab", |
|
| 945 | + $codes) . ")))"; |
|
| 946 | + } |
|
| 947 | 947 | } |
| 948 | 948 | |
| 949 | 949 | |
@@ -954,203 +954,203 @@ discard block |
||
| 954 | 954 | // https://code.spip.net/@compile_cas |
| 955 | 955 | function compile_cas($tableau, $descr, &$boucles, $id_boucle) { |
| 956 | 956 | |
| 957 | - $codes = array(); |
|
| 958 | - // cas de la boucle recursive |
|
| 959 | - if (is_array($id_boucle)) { |
|
| 960 | - $id_boucle = $id_boucle[0]; |
|
| 961 | - } |
|
| 962 | - $type = !$id_boucle ? '' : $boucles[$id_boucle]->type_requete; |
|
| 963 | - $tab = str_repeat("\t", ++$descr['niv']); |
|
| 964 | - $mode = _request('var_mode_affiche'); |
|
| 965 | - $err_e_c = ''; |
|
| 966 | - // chaque commentaire introduit dans le code doit commencer |
|
| 967 | - // par un caractere distinguant le cas, pour exploitation par debug. |
|
| 968 | - foreach ($tableau as $p) { |
|
| 969 | - |
|
| 970 | - switch ($p->type) { |
|
| 971 | - // texte seul |
|
| 972 | - case 'texte': |
|
| 973 | - $code = sandbox_composer_texte($p->texte, $p); |
|
| 974 | - $commentaire = strlen($p->texte) . " signes"; |
|
| 975 | - $avant = ''; |
|
| 976 | - $apres = ''; |
|
| 977 | - $altern = "''"; |
|
| 978 | - break; |
|
| 979 | - |
|
| 980 | - case 'polyglotte': |
|
| 981 | - $code = ""; |
|
| 982 | - foreach ($p->traductions as $k => $v) { |
|
| 983 | - $code .= ",'" . |
|
| 984 | - str_replace(array("\\", "'"), array("\\\\", "\\'"), $k) . |
|
| 985 | - "' => '" . |
|
| 986 | - str_replace(array("\\", "'"), array("\\\\", "\\'"), $v) . |
|
| 987 | - "'"; |
|
| 988 | - } |
|
| 989 | - $code = "choisir_traduction(array(" . |
|
| 990 | - substr($code, 1) . |
|
| 991 | - "))"; |
|
| 992 | - $commentaire = '&'; |
|
| 993 | - $avant = ''; |
|
| 994 | - $apres = ''; |
|
| 995 | - $altern = "''"; |
|
| 996 | - break; |
|
| 997 | - |
|
| 998 | - // inclure |
|
| 999 | - case 'include': |
|
| 1000 | - $p->descr = $descr; |
|
| 1001 | - $code = calculer_inclure($p, $boucles, $id_boucle); |
|
| 1002 | - if ($code === false) { |
|
| 1003 | - $err_e_c = true; |
|
| 1004 | - $code = "''"; |
|
| 1005 | - } else { |
|
| 1006 | - $commentaire = '<INCLURE ' . addslashes(str_replace("\n", ' ', $code)) . '>'; |
|
| 1007 | - $avant = ''; |
|
| 1008 | - $apres = ''; |
|
| 1009 | - $altern = "''"; |
|
| 1010 | - } |
|
| 1011 | - break; |
|
| 1012 | - |
|
| 1013 | - // boucle |
|
| 1014 | - case TYPE_RECURSIF: |
|
| 1015 | - $nom = $p->id_boucle; |
|
| 1016 | - $newdescr = $descr; |
|
| 1017 | - $newdescr['id_mere'] = $nom; |
|
| 1018 | - $newdescr['niv']++; |
|
| 1019 | - $preaff = calculer_liste($p->preaff, $newdescr, $boucles, $id_boucle); |
|
| 1020 | - $avant = calculer_liste($p->avant, $newdescr, $boucles, $id_boucle); |
|
| 1021 | - $apres = calculer_liste($p->apres, $newdescr, $boucles, $id_boucle); |
|
| 1022 | - $postaff = calculer_liste($p->postaff, $newdescr, $boucles, $id_boucle); |
|
| 1023 | - $newdescr['niv']--; |
|
| 1024 | - $altern = calculer_liste($p->altern, $newdescr, $boucles, $id_boucle); |
|
| 1025 | - if ($preaff === false |
|
| 1026 | - or $avant === false |
|
| 1027 | - or $apres === false |
|
| 1028 | - or $altern === false |
|
| 1029 | - or $postaff === false) { |
|
| 1030 | - $err_e_c = true; |
|
| 1031 | - $code = "''"; |
|
| 1032 | - } else { |
|
| 1033 | - $code = 'BOUCLE' . |
|
| 1034 | - str_replace("-", "_", $nom) . $descr['nom'] . |
|
| 1035 | - '($Cache, $Pile, $doublons, $Numrows, $SP)'; |
|
| 1036 | - $commentaire = "?$nom"; |
|
| 1037 | - if (!$boucles[$nom]->milieu |
|
| 1038 | - and $boucles[$nom]->type_requete <> TYPE_RECURSIF |
|
| 1039 | - ) { |
|
| 1040 | - if ($preaff != "''") { |
|
| 1041 | - $code .= "\n. $preaff"; |
|
| 1042 | - } |
|
| 1043 | - if ($altern != "''") { |
|
| 1044 | - $code .= "\n. $altern"; |
|
| 1045 | - } |
|
| 1046 | - if ($postaff != "''") { |
|
| 1047 | - $code .= "\n. $postaff"; |
|
| 1048 | - } |
|
| 1049 | - if ($avant <> "''" or $apres <> "''") { |
|
| 1050 | - spip_log("boucle $nom toujours vide, code superflu dans $descr[sourcefile]"); |
|
| 1051 | - } |
|
| 1052 | - $avant = $apres = $altern = "''"; |
|
| 1053 | - } else { |
|
| 1054 | - if ($preaff != "''") { |
|
| 1055 | - $avant = compile_concatene_parties_codes($preaff, $avant); |
|
| 1056 | - $altern = compile_concatene_parties_codes($preaff, $altern); |
|
| 1057 | - } |
|
| 1058 | - if ($postaff != "''") { |
|
| 1059 | - $apres = compile_concatene_parties_codes($apres, $postaff); |
|
| 1060 | - $altern = compile_concatene_parties_codes($altern, $postaff); |
|
| 1061 | - } |
|
| 1062 | - if ($altern != "''") { |
|
| 1063 | - $altern = "($altern)"; |
|
| 1064 | - } |
|
| 1065 | - } |
|
| 1066 | - } |
|
| 1067 | - break; |
|
| 1068 | - |
|
| 1069 | - case 'idiome': |
|
| 1070 | - $l = array(); |
|
| 1071 | - $code = ''; |
|
| 1072 | - foreach ($p->arg as $k => $v) { |
|
| 1073 | - $_v = calculer_liste($v, $descr, $boucles, $id_boucle); |
|
| 1074 | - if ($k) { |
|
| 1075 | - $l[] = _q($k) . ' => ' . $_v; |
|
| 1076 | - } else { |
|
| 1077 | - $code = $_v; |
|
| 1078 | - } |
|
| 1079 | - } |
|
| 1080 | - // Si le module n'est pas fourni, l'expliciter sauf si calculé |
|
| 1081 | - if ($p->module) { |
|
| 1082 | - $m = $p->module . ':' . $p->nom_champ; |
|
| 1083 | - } elseif ($p->nom_champ) { |
|
| 1084 | - $m = MODULES_IDIOMES . ':' . $p->nom_champ; |
|
| 1085 | - } else { |
|
| 1086 | - $m = ''; |
|
| 1087 | - } |
|
| 1088 | - |
|
| 1089 | - $code = (!$code ? "'$m'" : |
|
| 1090 | - ($m ? "'$m' . $code" : |
|
| 1091 | - ("(strpos(\$x=$code, ':') ? \$x : ('" . MODULES_IDIOMES . ":' . \$x))"))) |
|
| 1092 | - . (!$l ? '' : (", array(" . implode(",\n", $l) . ")")); |
|
| 1093 | - $code = "_T($code)"; |
|
| 1094 | - if ($p->param) { |
|
| 1095 | - $p->id_boucle = $id_boucle; |
|
| 1096 | - $p->boucles = &$boucles; |
|
| 1097 | - $code = compose_filtres($p, $code); |
|
| 1098 | - } |
|
| 1099 | - $commentaire = ":"; |
|
| 1100 | - $avant = ''; |
|
| 1101 | - $apres = ''; |
|
| 1102 | - $altern = "''"; |
|
| 1103 | - break; |
|
| 1104 | - |
|
| 1105 | - case 'champ': |
|
| 1106 | - |
|
| 1107 | - // cette structure pourrait etre completee des le phrase' (a faire) |
|
| 1108 | - $p->id_boucle = $id_boucle; |
|
| 1109 | - $p->boucles = &$boucles; |
|
| 1110 | - $p->descr = $descr; |
|
| 1111 | - #$p->interdire_scripts = true; |
|
| 1112 | - $p->type_requete = $type; |
|
| 1113 | - |
|
| 1114 | - $code = calculer_champ($p); |
|
| 1115 | - $commentaire = '#' . $p->nom_champ . $p->etoile; |
|
| 1116 | - $avant = calculer_liste($p->avant, |
|
| 1117 | - $descr, $boucles, $id_boucle); |
|
| 1118 | - $apres = calculer_liste($p->apres, |
|
| 1119 | - $descr, $boucles, $id_boucle); |
|
| 1120 | - $altern = "''"; |
|
| 1121 | - // Si la valeur est destinee a une comparaison a '' |
|
| 1122 | - // forcer la conversion en une chaine par strval |
|
| 1123 | - // si ca peut etre autre chose qu'une chaine |
|
| 1124 | - if (($avant != "''" or $apres != "''") |
|
| 1125 | - and $code[0] != "'" |
|
| 957 | + $codes = array(); |
|
| 958 | + // cas de la boucle recursive |
|
| 959 | + if (is_array($id_boucle)) { |
|
| 960 | + $id_boucle = $id_boucle[0]; |
|
| 961 | + } |
|
| 962 | + $type = !$id_boucle ? '' : $boucles[$id_boucle]->type_requete; |
|
| 963 | + $tab = str_repeat("\t", ++$descr['niv']); |
|
| 964 | + $mode = _request('var_mode_affiche'); |
|
| 965 | + $err_e_c = ''; |
|
| 966 | + // chaque commentaire introduit dans le code doit commencer |
|
| 967 | + // par un caractere distinguant le cas, pour exploitation par debug. |
|
| 968 | + foreach ($tableau as $p) { |
|
| 969 | + |
|
| 970 | + switch ($p->type) { |
|
| 971 | + // texte seul |
|
| 972 | + case 'texte': |
|
| 973 | + $code = sandbox_composer_texte($p->texte, $p); |
|
| 974 | + $commentaire = strlen($p->texte) . " signes"; |
|
| 975 | + $avant = ''; |
|
| 976 | + $apres = ''; |
|
| 977 | + $altern = "''"; |
|
| 978 | + break; |
|
| 979 | + |
|
| 980 | + case 'polyglotte': |
|
| 981 | + $code = ""; |
|
| 982 | + foreach ($p->traductions as $k => $v) { |
|
| 983 | + $code .= ",'" . |
|
| 984 | + str_replace(array("\\", "'"), array("\\\\", "\\'"), $k) . |
|
| 985 | + "' => '" . |
|
| 986 | + str_replace(array("\\", "'"), array("\\\\", "\\'"), $v) . |
|
| 987 | + "'"; |
|
| 988 | + } |
|
| 989 | + $code = "choisir_traduction(array(" . |
|
| 990 | + substr($code, 1) . |
|
| 991 | + "))"; |
|
| 992 | + $commentaire = '&'; |
|
| 993 | + $avant = ''; |
|
| 994 | + $apres = ''; |
|
| 995 | + $altern = "''"; |
|
| 996 | + break; |
|
| 997 | + |
|
| 998 | + // inclure |
|
| 999 | + case 'include': |
|
| 1000 | + $p->descr = $descr; |
|
| 1001 | + $code = calculer_inclure($p, $boucles, $id_boucle); |
|
| 1002 | + if ($code === false) { |
|
| 1003 | + $err_e_c = true; |
|
| 1004 | + $code = "''"; |
|
| 1005 | + } else { |
|
| 1006 | + $commentaire = '<INCLURE ' . addslashes(str_replace("\n", ' ', $code)) . '>'; |
|
| 1007 | + $avant = ''; |
|
| 1008 | + $apres = ''; |
|
| 1009 | + $altern = "''"; |
|
| 1010 | + } |
|
| 1011 | + break; |
|
| 1012 | + |
|
| 1013 | + // boucle |
|
| 1014 | + case TYPE_RECURSIF: |
|
| 1015 | + $nom = $p->id_boucle; |
|
| 1016 | + $newdescr = $descr; |
|
| 1017 | + $newdescr['id_mere'] = $nom; |
|
| 1018 | + $newdescr['niv']++; |
|
| 1019 | + $preaff = calculer_liste($p->preaff, $newdescr, $boucles, $id_boucle); |
|
| 1020 | + $avant = calculer_liste($p->avant, $newdescr, $boucles, $id_boucle); |
|
| 1021 | + $apres = calculer_liste($p->apres, $newdescr, $boucles, $id_boucle); |
|
| 1022 | + $postaff = calculer_liste($p->postaff, $newdescr, $boucles, $id_boucle); |
|
| 1023 | + $newdescr['niv']--; |
|
| 1024 | + $altern = calculer_liste($p->altern, $newdescr, $boucles, $id_boucle); |
|
| 1025 | + if ($preaff === false |
|
| 1026 | + or $avant === false |
|
| 1027 | + or $apres === false |
|
| 1028 | + or $altern === false |
|
| 1029 | + or $postaff === false) { |
|
| 1030 | + $err_e_c = true; |
|
| 1031 | + $code = "''"; |
|
| 1032 | + } else { |
|
| 1033 | + $code = 'BOUCLE' . |
|
| 1034 | + str_replace("-", "_", $nom) . $descr['nom'] . |
|
| 1035 | + '($Cache, $Pile, $doublons, $Numrows, $SP)'; |
|
| 1036 | + $commentaire = "?$nom"; |
|
| 1037 | + if (!$boucles[$nom]->milieu |
|
| 1038 | + and $boucles[$nom]->type_requete <> TYPE_RECURSIF |
|
| 1039 | + ) { |
|
| 1040 | + if ($preaff != "''") { |
|
| 1041 | + $code .= "\n. $preaff"; |
|
| 1042 | + } |
|
| 1043 | + if ($altern != "''") { |
|
| 1044 | + $code .= "\n. $altern"; |
|
| 1045 | + } |
|
| 1046 | + if ($postaff != "''") { |
|
| 1047 | + $code .= "\n. $postaff"; |
|
| 1048 | + } |
|
| 1049 | + if ($avant <> "''" or $apres <> "''") { |
|
| 1050 | + spip_log("boucle $nom toujours vide, code superflu dans $descr[sourcefile]"); |
|
| 1051 | + } |
|
| 1052 | + $avant = $apres = $altern = "''"; |
|
| 1053 | + } else { |
|
| 1054 | + if ($preaff != "''") { |
|
| 1055 | + $avant = compile_concatene_parties_codes($preaff, $avant); |
|
| 1056 | + $altern = compile_concatene_parties_codes($preaff, $altern); |
|
| 1057 | + } |
|
| 1058 | + if ($postaff != "''") { |
|
| 1059 | + $apres = compile_concatene_parties_codes($apres, $postaff); |
|
| 1060 | + $altern = compile_concatene_parties_codes($altern, $postaff); |
|
| 1061 | + } |
|
| 1062 | + if ($altern != "''") { |
|
| 1063 | + $altern = "($altern)"; |
|
| 1064 | + } |
|
| 1065 | + } |
|
| 1066 | + } |
|
| 1067 | + break; |
|
| 1068 | + |
|
| 1069 | + case 'idiome': |
|
| 1070 | + $l = array(); |
|
| 1071 | + $code = ''; |
|
| 1072 | + foreach ($p->arg as $k => $v) { |
|
| 1073 | + $_v = calculer_liste($v, $descr, $boucles, $id_boucle); |
|
| 1074 | + if ($k) { |
|
| 1075 | + $l[] = _q($k) . ' => ' . $_v; |
|
| 1076 | + } else { |
|
| 1077 | + $code = $_v; |
|
| 1078 | + } |
|
| 1079 | + } |
|
| 1080 | + // Si le module n'est pas fourni, l'expliciter sauf si calculé |
|
| 1081 | + if ($p->module) { |
|
| 1082 | + $m = $p->module . ':' . $p->nom_champ; |
|
| 1083 | + } elseif ($p->nom_champ) { |
|
| 1084 | + $m = MODULES_IDIOMES . ':' . $p->nom_champ; |
|
| 1085 | + } else { |
|
| 1086 | + $m = ''; |
|
| 1087 | + } |
|
| 1088 | + |
|
| 1089 | + $code = (!$code ? "'$m'" : |
|
| 1090 | + ($m ? "'$m' . $code" : |
|
| 1091 | + ("(strpos(\$x=$code, ':') ? \$x : ('" . MODULES_IDIOMES . ":' . \$x))"))) |
|
| 1092 | + . (!$l ? '' : (", array(" . implode(",\n", $l) . ")")); |
|
| 1093 | + $code = "_T($code)"; |
|
| 1094 | + if ($p->param) { |
|
| 1095 | + $p->id_boucle = $id_boucle; |
|
| 1096 | + $p->boucles = &$boucles; |
|
| 1097 | + $code = compose_filtres($p, $code); |
|
| 1098 | + } |
|
| 1099 | + $commentaire = ":"; |
|
| 1100 | + $avant = ''; |
|
| 1101 | + $apres = ''; |
|
| 1102 | + $altern = "''"; |
|
| 1103 | + break; |
|
| 1104 | + |
|
| 1105 | + case 'champ': |
|
| 1106 | + |
|
| 1107 | + // cette structure pourrait etre completee des le phrase' (a faire) |
|
| 1108 | + $p->id_boucle = $id_boucle; |
|
| 1109 | + $p->boucles = &$boucles; |
|
| 1110 | + $p->descr = $descr; |
|
| 1111 | + #$p->interdire_scripts = true; |
|
| 1112 | + $p->type_requete = $type; |
|
| 1113 | + |
|
| 1114 | + $code = calculer_champ($p); |
|
| 1115 | + $commentaire = '#' . $p->nom_champ . $p->etoile; |
|
| 1116 | + $avant = calculer_liste($p->avant, |
|
| 1117 | + $descr, $boucles, $id_boucle); |
|
| 1118 | + $apres = calculer_liste($p->apres, |
|
| 1119 | + $descr, $boucles, $id_boucle); |
|
| 1120 | + $altern = "''"; |
|
| 1121 | + // Si la valeur est destinee a une comparaison a '' |
|
| 1122 | + // forcer la conversion en une chaine par strval |
|
| 1123 | + // si ca peut etre autre chose qu'une chaine |
|
| 1124 | + if (($avant != "''" or $apres != "''") |
|
| 1125 | + and $code[0] != "'" |
|
| 1126 | 1126 | # AND (strpos($code,'interdire_scripts') !== 0) |
| 1127 | - and !preg_match(_REGEXP_COND_VIDE_NONVIDE, $code) |
|
| 1128 | - and !preg_match(_REGEXP_COND_NONVIDE_VIDE, $code) |
|
| 1129 | - and !preg_match(_REGEXP_CONCAT_NON_VIDE, $code) |
|
| 1130 | - ) { |
|
| 1131 | - $code = "strval($code)"; |
|
| 1132 | - } |
|
| 1133 | - break; |
|
| 1134 | - |
|
| 1135 | - default: |
|
| 1136 | - // Erreur de construction de l'arbre de syntaxe abstraite |
|
| 1137 | - $code = "''"; |
|
| 1138 | - $p->descr = $descr; |
|
| 1139 | - $err_e_c = _T('zbug_erreur_compilation'); |
|
| 1140 | - erreur_squelette($err_e_c, $p); |
|
| 1141 | - } // switch |
|
| 1142 | - |
|
| 1143 | - if ($code != "''") { |
|
| 1144 | - $code = compile_retour($code, $avant, $apres, $altern, $tab, $descr['niv']); |
|
| 1145 | - $codes[] = (($mode == 'validation') ? |
|
| 1146 | - "array($code, '$commentaire', " . $p->ligne . ")" |
|
| 1147 | - : (($mode == 'code') ? |
|
| 1148 | - "\n// $commentaire\n$code" : |
|
| 1149 | - $code)); |
|
| 1150 | - } |
|
| 1151 | - } // foreach |
|
| 1152 | - |
|
| 1153 | - return $err_e_c ? false : $codes; |
|
| 1127 | + and !preg_match(_REGEXP_COND_VIDE_NONVIDE, $code) |
|
| 1128 | + and !preg_match(_REGEXP_COND_NONVIDE_VIDE, $code) |
|
| 1129 | + and !preg_match(_REGEXP_CONCAT_NON_VIDE, $code) |
|
| 1130 | + ) { |
|
| 1131 | + $code = "strval($code)"; |
|
| 1132 | + } |
|
| 1133 | + break; |
|
| 1134 | + |
|
| 1135 | + default: |
|
| 1136 | + // Erreur de construction de l'arbre de syntaxe abstraite |
|
| 1137 | + $code = "''"; |
|
| 1138 | + $p->descr = $descr; |
|
| 1139 | + $err_e_c = _T('zbug_erreur_compilation'); |
|
| 1140 | + erreur_squelette($err_e_c, $p); |
|
| 1141 | + } // switch |
|
| 1142 | + |
|
| 1143 | + if ($code != "''") { |
|
| 1144 | + $code = compile_retour($code, $avant, $apres, $altern, $tab, $descr['niv']); |
|
| 1145 | + $codes[] = (($mode == 'validation') ? |
|
| 1146 | + "array($code, '$commentaire', " . $p->ligne . ")" |
|
| 1147 | + : (($mode == 'code') ? |
|
| 1148 | + "\n// $commentaire\n$code" : |
|
| 1149 | + $code)); |
|
| 1150 | + } |
|
| 1151 | + } // foreach |
|
| 1152 | + |
|
| 1153 | + return $err_e_c ? false : $codes; |
|
| 1154 | 1154 | } |
| 1155 | 1155 | |
| 1156 | 1156 | /** |
@@ -1160,13 +1160,13 @@ discard block |
||
| 1160 | 1160 | * @return string |
| 1161 | 1161 | */ |
| 1162 | 1162 | function compile_concatene_parties_codes($partie1, $partie2) { |
| 1163 | - if ($partie1 === "''") { |
|
| 1164 | - return $partie2; |
|
| 1165 | - } |
|
| 1166 | - if ($partie2 === "''") { |
|
| 1167 | - return $partie1; |
|
| 1168 | - } |
|
| 1169 | - return "$partie1\n. $partie2"; |
|
| 1163 | + if ($partie1 === "''") { |
|
| 1164 | + return $partie2; |
|
| 1165 | + } |
|
| 1166 | + if ($partie2 === "''") { |
|
| 1167 | + return $partie1; |
|
| 1168 | + } |
|
| 1169 | + return "$partie1\n. $partie2"; |
|
| 1170 | 1170 | } |
| 1171 | 1171 | |
| 1172 | 1172 | |
@@ -1191,57 +1191,57 @@ discard block |
||
| 1191 | 1191 | * @return mixed|string |
| 1192 | 1192 | */ |
| 1193 | 1193 | function compile_retour($code, $avant, $apres, $altern, $tab, $n) { |
| 1194 | - if ($avant === "''") { |
|
| 1195 | - $avant = ''; |
|
| 1196 | - } |
|
| 1197 | - if ($apres === "''") { |
|
| 1198 | - $apres = ''; |
|
| 1199 | - } |
|
| 1200 | - if ($avant or $apres or ($altern !== "''")){ |
|
| 1201 | - if (preg_match(_REGEXP_CONCAT_NON_VIDE, $code)){ |
|
| 1202 | - $t = $code; |
|
| 1203 | - $cond = ''; |
|
| 1204 | - } elseif (preg_match(_REGEXP_COND_VIDE_NONVIDE, $code, $r)) { |
|
| 1205 | - $t = $r[2]; |
|
| 1206 | - $cond = '!' . $r[1]; |
|
| 1207 | - } else { |
|
| 1208 | - if (preg_match(_REGEXP_COND_NONVIDE_VIDE, $code, $r)){ |
|
| 1209 | - $t = $r[2]; |
|
| 1210 | - $cond = $r[1]; |
|
| 1211 | - } else { |
|
| 1212 | - $t = '$t' . $n; |
|
| 1213 | - $cond = "($t = $code)!==''"; |
|
| 1214 | - } |
|
| 1215 | - } |
|
| 1216 | - |
|
| 1217 | - $res = (!$avant ? "" : "$avant . ") . |
|
| 1218 | - $t . |
|
| 1219 | - (!$apres ? "" : " . $apres"); |
|
| 1220 | - |
|
| 1221 | - if ($res!==$t){ |
|
| 1222 | - $res = "($res)"; |
|
| 1223 | - } |
|
| 1224 | - |
|
| 1225 | - $code = (!$cond ? $res : "($cond ?\n\t$tab$res :\n\t$tab$altern)"); |
|
| 1226 | - } |
|
| 1227 | - |
|
| 1228 | - return $code; |
|
| 1194 | + if ($avant === "''") { |
|
| 1195 | + $avant = ''; |
|
| 1196 | + } |
|
| 1197 | + if ($apres === "''") { |
|
| 1198 | + $apres = ''; |
|
| 1199 | + } |
|
| 1200 | + if ($avant or $apres or ($altern !== "''")){ |
|
| 1201 | + if (preg_match(_REGEXP_CONCAT_NON_VIDE, $code)){ |
|
| 1202 | + $t = $code; |
|
| 1203 | + $cond = ''; |
|
| 1204 | + } elseif (preg_match(_REGEXP_COND_VIDE_NONVIDE, $code, $r)) { |
|
| 1205 | + $t = $r[2]; |
|
| 1206 | + $cond = '!' . $r[1]; |
|
| 1207 | + } else { |
|
| 1208 | + if (preg_match(_REGEXP_COND_NONVIDE_VIDE, $code, $r)){ |
|
| 1209 | + $t = $r[2]; |
|
| 1210 | + $cond = $r[1]; |
|
| 1211 | + } else { |
|
| 1212 | + $t = '$t' . $n; |
|
| 1213 | + $cond = "($t = $code)!==''"; |
|
| 1214 | + } |
|
| 1215 | + } |
|
| 1216 | + |
|
| 1217 | + $res = (!$avant ? "" : "$avant . ") . |
|
| 1218 | + $t . |
|
| 1219 | + (!$apres ? "" : " . $apres"); |
|
| 1220 | + |
|
| 1221 | + if ($res!==$t){ |
|
| 1222 | + $res = "($res)"; |
|
| 1223 | + } |
|
| 1224 | + |
|
| 1225 | + $code = (!$cond ? $res : "($cond ?\n\t$tab$res :\n\t$tab$altern)"); |
|
| 1226 | + } |
|
| 1227 | + |
|
| 1228 | + return $code; |
|
| 1229 | 1229 | |
| 1230 | 1230 | } |
| 1231 | 1231 | |
| 1232 | 1232 | |
| 1233 | 1233 | function compile_inclure_doublons($lexemes) { |
| 1234 | - foreach ($lexemes as $v) { |
|
| 1235 | - if ($v->type === 'include' and $v->param) { |
|
| 1236 | - foreach ($v->param as $r) { |
|
| 1237 | - if (trim($r[0]) === 'doublons') { |
|
| 1238 | - return true; |
|
| 1239 | - } |
|
| 1240 | - } |
|
| 1241 | - } |
|
| 1242 | - } |
|
| 1243 | - |
|
| 1244 | - return false; |
|
| 1234 | + foreach ($lexemes as $v) { |
|
| 1235 | + if ($v->type === 'include' and $v->param) { |
|
| 1236 | + foreach ($v->param as $r) { |
|
| 1237 | + if (trim($r[0]) === 'doublons') { |
|
| 1238 | + return true; |
|
| 1239 | + } |
|
| 1240 | + } |
|
| 1241 | + } |
|
| 1242 | + } |
|
| 1243 | + |
|
| 1244 | + return false; |
|
| 1245 | 1245 | } |
| 1246 | 1246 | |
| 1247 | 1247 | // Prend en argument le texte d'un squelette, le nom de son fichier d'origine, |
@@ -1261,348 +1261,348 @@ discard block |
||
| 1261 | 1261 | |
| 1262 | 1262 | // https://code.spip.net/@public_compiler_dist |
| 1263 | 1263 | function public_compiler_dist($squelette, $nom, $gram, $sourcefile, $connect = '') { |
| 1264 | - // Pre-traitement : reperer le charset du squelette, et le convertir |
|
| 1265 | - // Bonus : supprime le BOM |
|
| 1266 | - include_spip('inc/charsets'); |
|
| 1267 | - $squelette = transcoder_page($squelette); |
|
| 1268 | - |
|
| 1269 | - // rendre inertes les echappements de #[](){}<> |
|
| 1270 | - $i = 0; |
|
| 1271 | - while (false !== strpos($squelette, $inerte = '-INERTE' . $i)) { |
|
| 1272 | - $i++; |
|
| 1273 | - } |
|
| 1274 | - $squelette = preg_replace_callback(',\\\\([#[()\]{}<>]),', |
|
| 1275 | - function($a) use ($inerte) { |
|
| 1276 | - return "$inerte-" . ord($a[1]) . '-'; |
|
| 1277 | - }, |
|
| 1278 | - $squelette, |
|
| 1279 | - -1, |
|
| 1280 | - $esc |
|
| 1281 | - ); |
|
| 1282 | - |
|
| 1283 | - $descr = array( |
|
| 1284 | - 'nom' => $nom, |
|
| 1285 | - 'gram' => $gram, |
|
| 1286 | - 'sourcefile' => $sourcefile, |
|
| 1287 | - 'squelette' => $squelette |
|
| 1288 | - ); |
|
| 1289 | - |
|
| 1290 | - // Phraser le squelette, selon sa grammaire |
|
| 1291 | - |
|
| 1292 | - $boucles = array(); |
|
| 1293 | - $f = charger_fonction('phraser_' . $gram, 'public'); |
|
| 1294 | - |
|
| 1295 | - $squelette = $f($squelette, '', $boucles, $descr); |
|
| 1296 | - |
|
| 1297 | - $boucles = compiler_squelette($squelette, $boucles, $nom, $descr, $sourcefile, $connect); |
|
| 1298 | - |
|
| 1299 | - // restituer les echappements |
|
| 1300 | - if ($esc) { |
|
| 1301 | - foreach ($boucles as $i => $boucle) { |
|
| 1302 | - $boucles[$i]->return = preg_replace_callback( |
|
| 1303 | - ",$inerte-(\d+)-,", |
|
| 1304 | - function($a) { |
|
| 1305 | - return chr($a[1]); |
|
| 1306 | - }, |
|
| 1307 | - $boucle->return |
|
| 1308 | - ); |
|
| 1309 | - $boucles[$i]->descr['squelette'] = preg_replace_callback( |
|
| 1310 | - ",$inerte-(\d+)-,", |
|
| 1311 | - function($a) { |
|
| 1312 | - return "\\\\" . chr($a[1]); |
|
| 1313 | - }, |
|
| 1314 | - $boucle->descr['squelette'] |
|
| 1315 | - ); |
|
| 1316 | - } |
|
| 1317 | - } |
|
| 1318 | - |
|
| 1319 | - $debug = ($boucles and defined('_VAR_MODE') and _VAR_MODE == 'debug'); |
|
| 1320 | - if ($debug) { |
|
| 1321 | - include_spip('public/decompiler'); |
|
| 1322 | - foreach ($boucles as $id => $boucle) { |
|
| 1323 | - if ($id) { |
|
| 1324 | - $decomp = "\n/* BOUCLE " . |
|
| 1325 | - $boucle->type_requete . |
|
| 1326 | - " " . |
|
| 1327 | - str_replace('*/', '* /', public_decompiler($boucle, $gram, 0, 'criteres')) . |
|
| 1328 | - ($boucle->debug ? "\n *\n * " . implode("\n * ", $boucle->debug) . "\n" : '') . |
|
| 1329 | - " */\n"; |
|
| 1330 | - } else { |
|
| 1331 | - $decomp = ("\n/*\n" . |
|
| 1332 | - str_replace('*/', '* /', public_decompiler($squelette, $gram)) |
|
| 1333 | - . "\n*/"); |
|
| 1334 | - } |
|
| 1335 | - $boucles[$id]->return = $decomp . $boucle->return; |
|
| 1336 | - $GLOBALS['debug_objets']['code'][$nom . $id] = $boucle->return; |
|
| 1337 | - } |
|
| 1338 | - } |
|
| 1339 | - |
|
| 1340 | - return $boucles; |
|
| 1264 | + // Pre-traitement : reperer le charset du squelette, et le convertir |
|
| 1265 | + // Bonus : supprime le BOM |
|
| 1266 | + include_spip('inc/charsets'); |
|
| 1267 | + $squelette = transcoder_page($squelette); |
|
| 1268 | + |
|
| 1269 | + // rendre inertes les echappements de #[](){}<> |
|
| 1270 | + $i = 0; |
|
| 1271 | + while (false !== strpos($squelette, $inerte = '-INERTE' . $i)) { |
|
| 1272 | + $i++; |
|
| 1273 | + } |
|
| 1274 | + $squelette = preg_replace_callback(',\\\\([#[()\]{}<>]),', |
|
| 1275 | + function($a) use ($inerte) { |
|
| 1276 | + return "$inerte-" . ord($a[1]) . '-'; |
|
| 1277 | + }, |
|
| 1278 | + $squelette, |
|
| 1279 | + -1, |
|
| 1280 | + $esc |
|
| 1281 | + ); |
|
| 1282 | + |
|
| 1283 | + $descr = array( |
|
| 1284 | + 'nom' => $nom, |
|
| 1285 | + 'gram' => $gram, |
|
| 1286 | + 'sourcefile' => $sourcefile, |
|
| 1287 | + 'squelette' => $squelette |
|
| 1288 | + ); |
|
| 1289 | + |
|
| 1290 | + // Phraser le squelette, selon sa grammaire |
|
| 1291 | + |
|
| 1292 | + $boucles = array(); |
|
| 1293 | + $f = charger_fonction('phraser_' . $gram, 'public'); |
|
| 1294 | + |
|
| 1295 | + $squelette = $f($squelette, '', $boucles, $descr); |
|
| 1296 | + |
|
| 1297 | + $boucles = compiler_squelette($squelette, $boucles, $nom, $descr, $sourcefile, $connect); |
|
| 1298 | + |
|
| 1299 | + // restituer les echappements |
|
| 1300 | + if ($esc) { |
|
| 1301 | + foreach ($boucles as $i => $boucle) { |
|
| 1302 | + $boucles[$i]->return = preg_replace_callback( |
|
| 1303 | + ",$inerte-(\d+)-,", |
|
| 1304 | + function($a) { |
|
| 1305 | + return chr($a[1]); |
|
| 1306 | + }, |
|
| 1307 | + $boucle->return |
|
| 1308 | + ); |
|
| 1309 | + $boucles[$i]->descr['squelette'] = preg_replace_callback( |
|
| 1310 | + ",$inerte-(\d+)-,", |
|
| 1311 | + function($a) { |
|
| 1312 | + return "\\\\" . chr($a[1]); |
|
| 1313 | + }, |
|
| 1314 | + $boucle->descr['squelette'] |
|
| 1315 | + ); |
|
| 1316 | + } |
|
| 1317 | + } |
|
| 1318 | + |
|
| 1319 | + $debug = ($boucles and defined('_VAR_MODE') and _VAR_MODE == 'debug'); |
|
| 1320 | + if ($debug) { |
|
| 1321 | + include_spip('public/decompiler'); |
|
| 1322 | + foreach ($boucles as $id => $boucle) { |
|
| 1323 | + if ($id) { |
|
| 1324 | + $decomp = "\n/* BOUCLE " . |
|
| 1325 | + $boucle->type_requete . |
|
| 1326 | + " " . |
|
| 1327 | + str_replace('*/', '* /', public_decompiler($boucle, $gram, 0, 'criteres')) . |
|
| 1328 | + ($boucle->debug ? "\n *\n * " . implode("\n * ", $boucle->debug) . "\n" : '') . |
|
| 1329 | + " */\n"; |
|
| 1330 | + } else { |
|
| 1331 | + $decomp = ("\n/*\n" . |
|
| 1332 | + str_replace('*/', '* /', public_decompiler($squelette, $gram)) |
|
| 1333 | + . "\n*/"); |
|
| 1334 | + } |
|
| 1335 | + $boucles[$id]->return = $decomp . $boucle->return; |
|
| 1336 | + $GLOBALS['debug_objets']['code'][$nom . $id] = $boucle->return; |
|
| 1337 | + } |
|
| 1338 | + } |
|
| 1339 | + |
|
| 1340 | + return $boucles; |
|
| 1341 | 1341 | } |
| 1342 | 1342 | |
| 1343 | 1343 | // Point d'entree pour arbre de syntaxe abstraite fourni en premier argument |
| 1344 | 1344 | // Autres specifications comme ci-dessus |
| 1345 | 1345 | |
| 1346 | 1346 | function compiler_squelette($squelette, $boucles, $nom, $descr, $sourcefile, $connect = '') { |
| 1347 | - static $trouver_table; |
|
| 1348 | - spip_timer('calcul_skel'); |
|
| 1349 | - |
|
| 1350 | - if (defined('_VAR_MODE') and _VAR_MODE == 'debug') { |
|
| 1351 | - $GLOBALS['debug_objets']['squelette'][$nom] = $descr['squelette']; |
|
| 1352 | - $GLOBALS['debug_objets']['sourcefile'][$nom] = $sourcefile; |
|
| 1353 | - |
|
| 1354 | - if (!isset($GLOBALS['debug_objets']['principal'])) { |
|
| 1355 | - $GLOBALS['debug_objets']['principal'] = $nom; |
|
| 1356 | - } |
|
| 1357 | - } |
|
| 1358 | - foreach ($boucles as $id => $boucle) { |
|
| 1359 | - $GLOBALS['debug_objets']['boucle'][$nom . $id] = $boucle; |
|
| 1360 | - } |
|
| 1361 | - $descr['documents'] = compile_inclure_doublons($squelette); |
|
| 1362 | - |
|
| 1363 | - // Demander la description des tables une fois pour toutes |
|
| 1364 | - if (!$trouver_table) { |
|
| 1365 | - $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 1366 | - } |
|
| 1367 | - |
|
| 1368 | - // reperer si les doublons sont demandes |
|
| 1369 | - // pour un inclure ou une boucle document |
|
| 1370 | - // c'est utile a la fonction champs_traitements |
|
| 1371 | - foreach ($boucles as $id => $boucle) { |
|
| 1372 | - if (!($type = $boucle->type_requete)) { |
|
| 1373 | - continue; |
|
| 1374 | - } |
|
| 1375 | - if (!$descr['documents'] and ( |
|
| 1376 | - (($type == 'documents') and $boucle->doublons) or |
|
| 1377 | - compile_inclure_doublons($boucle->avant) or |
|
| 1378 | - compile_inclure_doublons($boucle->apres) or |
|
| 1379 | - compile_inclure_doublons($boucle->milieu) or |
|
| 1380 | - compile_inclure_doublons($boucle->altern)) |
|
| 1381 | - ) { |
|
| 1382 | - $descr['documents'] = true; |
|
| 1383 | - } |
|
| 1384 | - if ($type != TYPE_RECURSIF) { |
|
| 1385 | - if (!$boucles[$id]->sql_serveur and $connect) { |
|
| 1386 | - $boucles[$id]->sql_serveur = $connect; |
|
| 1387 | - } |
|
| 1388 | - |
|
| 1389 | - // chercher dans les iterateurs du repertoire iterateur/ |
|
| 1390 | - if ($g = charger_fonction( |
|
| 1391 | - preg_replace('/\W/', '_', $boucle->type_requete), 'iterateur', true) |
|
| 1392 | - ) { |
|
| 1393 | - $boucles[$id] = $g($boucle); |
|
| 1394 | - |
|
| 1395 | - // sinon, en cas de requeteur d'un type predefini, |
|
| 1396 | - // utiliser les informations donnees par le requeteur |
|
| 1397 | - // cas "php:xx" et "data:xx". |
|
| 1398 | - } else { |
|
| 1399 | - if ($boucle->sql_serveur and $requeteur = charger_fonction($boucle->sql_serveur, 'requeteur', true)) { |
|
| 1400 | - $requeteur($boucles, $boucle, $id); |
|
| 1401 | - |
|
| 1402 | - // utiliser la description des champs transmis |
|
| 1403 | - } else { |
|
| 1404 | - $show = $trouver_table($type, $boucles[$id]->sql_serveur); |
|
| 1405 | - // si la table n'existe pas avec le connecteur par defaut, |
|
| 1406 | - // c'est peut etre une table qui necessite son connecteur dedie fourni |
|
| 1407 | - // permet une ecriture allegee (GEO) -> (geo:GEO) |
|
| 1408 | - if (!$show |
|
| 1409 | - and $show = $trouver_table($type, strtolower($type)) |
|
| 1410 | - ) { |
|
| 1411 | - $boucles[$id]->sql_serveur = strtolower($type); |
|
| 1412 | - } |
|
| 1413 | - if ($show) { |
|
| 1414 | - $boucles[$id]->show = $show; |
|
| 1415 | - // recopie les infos les plus importantes |
|
| 1416 | - $boucles[$id]->primary = isset($show['key']["PRIMARY KEY"]) ? $show['key']["PRIMARY KEY"] : ''; |
|
| 1417 | - $boucles[$id]->id_table = $x = preg_replace(",^spip_,", "", $show['id_table']); |
|
| 1418 | - $boucles[$id]->from[$x] = $nom_table = $show['table']; |
|
| 1419 | - $boucles[$id]->iterateur = 'SQL'; |
|
| 1420 | - |
|
| 1421 | - if (empty($boucles[$id]->descr)) { |
|
| 1422 | - $boucles[$id]->descr = &$descr; |
|
| 1423 | - } |
|
| 1424 | - if ((!$boucles[$id]->jointures) |
|
| 1425 | - and is_array($show['tables_jointures']) |
|
| 1426 | - and count($x = $show['tables_jointures']) |
|
| 1427 | - ) { |
|
| 1428 | - $boucles[$id]->jointures = $x; |
|
| 1429 | - } |
|
| 1430 | - if ($boucles[$id]->jointures_explicites) { |
|
| 1431 | - $jointures = preg_split("/\s+/", $boucles[$id]->jointures_explicites); |
|
| 1432 | - while ($j = array_pop($jointures)) { |
|
| 1433 | - array_unshift($boucles[$id]->jointures, $j); |
|
| 1434 | - } |
|
| 1435 | - } |
|
| 1436 | - } else { |
|
| 1437 | - // Pas une erreur si la table est optionnelle |
|
| 1438 | - if ($boucles[$id]->table_optionnelle) { |
|
| 1439 | - $boucles[$id]->type_requete = ''; |
|
| 1440 | - } else { |
|
| 1441 | - $boucles[$id]->type_requete = false; |
|
| 1442 | - $boucle = $boucles[$id]; |
|
| 1443 | - $x = (!$boucle->sql_serveur ? '' : |
|
| 1444 | - ($boucle->sql_serveur . ":")) . |
|
| 1445 | - $type; |
|
| 1446 | - $msg = array( |
|
| 1447 | - 'zbug_table_inconnue', |
|
| 1448 | - array('table' => $x) |
|
| 1449 | - ); |
|
| 1450 | - erreur_squelette($msg, $boucle); |
|
| 1451 | - } |
|
| 1452 | - } |
|
| 1453 | - } |
|
| 1454 | - } |
|
| 1455 | - } |
|
| 1456 | - } |
|
| 1457 | - |
|
| 1458 | - // Commencer par reperer les boucles appelees explicitement |
|
| 1459 | - // car elles indexent les arguments de maniere derogatoire |
|
| 1460 | - foreach ($boucles as $id => $boucle) { |
|
| 1461 | - if ($boucle->type_requete == TYPE_RECURSIF and $boucle->param) { |
|
| 1462 | - $boucles[$id]->descr = &$descr; |
|
| 1463 | - $rec = &$boucles[$boucle->param[0]]; |
|
| 1464 | - if (!$rec) { |
|
| 1465 | - $msg = array( |
|
| 1466 | - 'zbug_boucle_recursive_undef', |
|
| 1467 | - array('nom' => $boucle->param[0]) |
|
| 1468 | - ); |
|
| 1469 | - erreur_squelette($msg, $boucle); |
|
| 1470 | - $boucles[$id]->type_requete = false; |
|
| 1471 | - } else { |
|
| 1472 | - $rec->externe = $id; |
|
| 1473 | - $descr['id_mere'] = $id; |
|
| 1474 | - $boucles[$id]->return = |
|
| 1475 | - calculer_liste(array($rec), |
|
| 1476 | - $descr, |
|
| 1477 | - $boucles, |
|
| 1478 | - $boucle->param); |
|
| 1479 | - } |
|
| 1480 | - } |
|
| 1481 | - } |
|
| 1482 | - foreach ($boucles as $id => $boucle) { |
|
| 1483 | - $id = strval($id); // attention au type dans index_pile |
|
| 1484 | - $type = $boucle->type_requete; |
|
| 1485 | - if ($type and $type != TYPE_RECURSIF) { |
|
| 1486 | - $res = ''; |
|
| 1487 | - if ($boucle->param) { |
|
| 1488 | - // retourne un tableau en cas d'erreur |
|
| 1489 | - $res = calculer_criteres($id, $boucles); |
|
| 1490 | - } |
|
| 1491 | - $descr['id_mere'] = $id; |
|
| 1492 | - $boucles[$id]->return = |
|
| 1493 | - calculer_liste($boucle->milieu, |
|
| 1494 | - $descr, |
|
| 1495 | - $boucles, |
|
| 1496 | - $id); |
|
| 1497 | - // Si les criteres se sont mal compiles |
|
| 1498 | - // ne pas tenter d'assembler le code final |
|
| 1499 | - // (mais compiler le corps pour detection d'erreurs) |
|
| 1500 | - if (is_array($res)) { |
|
| 1501 | - $boucles[$id]->type_requete = false; |
|
| 1502 | - } |
|
| 1503 | - } |
|
| 1504 | - } |
|
| 1505 | - |
|
| 1506 | - // idem pour la racine |
|
| 1507 | - $descr['id_mere'] = ''; |
|
| 1508 | - $corps = calculer_liste($squelette, $descr, $boucles); |
|
| 1509 | - |
|
| 1510 | - |
|
| 1511 | - // Calcul du corps de toutes les fonctions PHP, |
|
| 1512 | - // en particulier les requetes SQL et TOTAL_BOUCLE |
|
| 1513 | - // de'terminables seulement maintenant |
|
| 1514 | - |
|
| 1515 | - foreach ($boucles as $id => $boucle) { |
|
| 1516 | - $boucle = $boucles[$id] = pipeline('pre_boucle', $boucle); |
|
| 1517 | - if ($boucle->return === false) { |
|
| 1518 | - $corps = false; |
|
| 1519 | - continue; |
|
| 1520 | - } |
|
| 1521 | - // appeler la fonction de definition de la boucle |
|
| 1522 | - |
|
| 1523 | - if ($req = $boucle->type_requete) { |
|
| 1524 | - // boucle personnalisée ? |
|
| 1525 | - $table = strtoupper($boucle->type_requete); |
|
| 1526 | - $serveur = strtolower($boucle->sql_serveur); |
|
| 1527 | - if ( |
|
| 1528 | - // fonction de boucle avec serveur & table |
|
| 1529 | - (!$serveur or |
|
| 1530 | - ((!function_exists($f = "boucle_" . $serveur . "_" . $table)) |
|
| 1531 | - and (!function_exists($f = $f . "_dist")) |
|
| 1532 | - ) |
|
| 1533 | - ) |
|
| 1534 | - // fonction de boucle avec table |
|
| 1535 | - and (!function_exists($f = "boucle_" . $table)) |
|
| 1536 | - and (!function_exists($f = $f . "_dist")) |
|
| 1537 | - ) { |
|
| 1538 | - // fonction de boucle standard |
|
| 1539 | - if (!function_exists($f = 'boucle_DEFAUT')) { |
|
| 1540 | - $f = 'boucle_DEFAUT_dist'; |
|
| 1541 | - } |
|
| 1542 | - } |
|
| 1543 | - |
|
| 1544 | - $req = "\n\n\tstatic \$command = array();\n\t" . |
|
| 1545 | - "static \$connect;\n\t" . |
|
| 1546 | - "\$command['connect'] = \$connect = " . |
|
| 1547 | - _q($boucle->sql_serveur) . |
|
| 1548 | - ";" . |
|
| 1549 | - $f($id, $boucles); |
|
| 1550 | - } else { |
|
| 1551 | - $req = ("\n\treturn '';"); |
|
| 1552 | - } |
|
| 1553 | - |
|
| 1554 | - $boucles[$id]->return = |
|
| 1555 | - "\n\nfunction BOUCLE" . strtr($id, "-", "_") . $nom . |
|
| 1556 | - '(&$Cache, &$Pile, &$doublons, &$Numrows, $SP) {' . |
|
| 1557 | - $req . |
|
| 1558 | - "\n}\n"; |
|
| 1559 | - } |
|
| 1560 | - |
|
| 1561 | - // Au final, si le corps ou un critere au moins s'est mal compile |
|
| 1562 | - // retourner False, sinon inserer leur decompilation |
|
| 1563 | - if (is_bool($corps)) { |
|
| 1564 | - return false; |
|
| 1565 | - } |
|
| 1566 | - |
|
| 1567 | - $principal = "\nfunction " . $nom . '($Cache, $Pile, $doublons = array(), $Numrows = array(), $SP = 0) { |
|
| 1347 | + static $trouver_table; |
|
| 1348 | + spip_timer('calcul_skel'); |
|
| 1349 | + |
|
| 1350 | + if (defined('_VAR_MODE') and _VAR_MODE == 'debug') { |
|
| 1351 | + $GLOBALS['debug_objets']['squelette'][$nom] = $descr['squelette']; |
|
| 1352 | + $GLOBALS['debug_objets']['sourcefile'][$nom] = $sourcefile; |
|
| 1353 | + |
|
| 1354 | + if (!isset($GLOBALS['debug_objets']['principal'])) { |
|
| 1355 | + $GLOBALS['debug_objets']['principal'] = $nom; |
|
| 1356 | + } |
|
| 1357 | + } |
|
| 1358 | + foreach ($boucles as $id => $boucle) { |
|
| 1359 | + $GLOBALS['debug_objets']['boucle'][$nom . $id] = $boucle; |
|
| 1360 | + } |
|
| 1361 | + $descr['documents'] = compile_inclure_doublons($squelette); |
|
| 1362 | + |
|
| 1363 | + // Demander la description des tables une fois pour toutes |
|
| 1364 | + if (!$trouver_table) { |
|
| 1365 | + $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 1366 | + } |
|
| 1367 | + |
|
| 1368 | + // reperer si les doublons sont demandes |
|
| 1369 | + // pour un inclure ou une boucle document |
|
| 1370 | + // c'est utile a la fonction champs_traitements |
|
| 1371 | + foreach ($boucles as $id => $boucle) { |
|
| 1372 | + if (!($type = $boucle->type_requete)) { |
|
| 1373 | + continue; |
|
| 1374 | + } |
|
| 1375 | + if (!$descr['documents'] and ( |
|
| 1376 | + (($type == 'documents') and $boucle->doublons) or |
|
| 1377 | + compile_inclure_doublons($boucle->avant) or |
|
| 1378 | + compile_inclure_doublons($boucle->apres) or |
|
| 1379 | + compile_inclure_doublons($boucle->milieu) or |
|
| 1380 | + compile_inclure_doublons($boucle->altern)) |
|
| 1381 | + ) { |
|
| 1382 | + $descr['documents'] = true; |
|
| 1383 | + } |
|
| 1384 | + if ($type != TYPE_RECURSIF) { |
|
| 1385 | + if (!$boucles[$id]->sql_serveur and $connect) { |
|
| 1386 | + $boucles[$id]->sql_serveur = $connect; |
|
| 1387 | + } |
|
| 1388 | + |
|
| 1389 | + // chercher dans les iterateurs du repertoire iterateur/ |
|
| 1390 | + if ($g = charger_fonction( |
|
| 1391 | + preg_replace('/\W/', '_', $boucle->type_requete), 'iterateur', true) |
|
| 1392 | + ) { |
|
| 1393 | + $boucles[$id] = $g($boucle); |
|
| 1394 | + |
|
| 1395 | + // sinon, en cas de requeteur d'un type predefini, |
|
| 1396 | + // utiliser les informations donnees par le requeteur |
|
| 1397 | + // cas "php:xx" et "data:xx". |
|
| 1398 | + } else { |
|
| 1399 | + if ($boucle->sql_serveur and $requeteur = charger_fonction($boucle->sql_serveur, 'requeteur', true)) { |
|
| 1400 | + $requeteur($boucles, $boucle, $id); |
|
| 1401 | + |
|
| 1402 | + // utiliser la description des champs transmis |
|
| 1403 | + } else { |
|
| 1404 | + $show = $trouver_table($type, $boucles[$id]->sql_serveur); |
|
| 1405 | + // si la table n'existe pas avec le connecteur par defaut, |
|
| 1406 | + // c'est peut etre une table qui necessite son connecteur dedie fourni |
|
| 1407 | + // permet une ecriture allegee (GEO) -> (geo:GEO) |
|
| 1408 | + if (!$show |
|
| 1409 | + and $show = $trouver_table($type, strtolower($type)) |
|
| 1410 | + ) { |
|
| 1411 | + $boucles[$id]->sql_serveur = strtolower($type); |
|
| 1412 | + } |
|
| 1413 | + if ($show) { |
|
| 1414 | + $boucles[$id]->show = $show; |
|
| 1415 | + // recopie les infos les plus importantes |
|
| 1416 | + $boucles[$id]->primary = isset($show['key']["PRIMARY KEY"]) ? $show['key']["PRIMARY KEY"] : ''; |
|
| 1417 | + $boucles[$id]->id_table = $x = preg_replace(",^spip_,", "", $show['id_table']); |
|
| 1418 | + $boucles[$id]->from[$x] = $nom_table = $show['table']; |
|
| 1419 | + $boucles[$id]->iterateur = 'SQL'; |
|
| 1420 | + |
|
| 1421 | + if (empty($boucles[$id]->descr)) { |
|
| 1422 | + $boucles[$id]->descr = &$descr; |
|
| 1423 | + } |
|
| 1424 | + if ((!$boucles[$id]->jointures) |
|
| 1425 | + and is_array($show['tables_jointures']) |
|
| 1426 | + and count($x = $show['tables_jointures']) |
|
| 1427 | + ) { |
|
| 1428 | + $boucles[$id]->jointures = $x; |
|
| 1429 | + } |
|
| 1430 | + if ($boucles[$id]->jointures_explicites) { |
|
| 1431 | + $jointures = preg_split("/\s+/", $boucles[$id]->jointures_explicites); |
|
| 1432 | + while ($j = array_pop($jointures)) { |
|
| 1433 | + array_unshift($boucles[$id]->jointures, $j); |
|
| 1434 | + } |
|
| 1435 | + } |
|
| 1436 | + } else { |
|
| 1437 | + // Pas une erreur si la table est optionnelle |
|
| 1438 | + if ($boucles[$id]->table_optionnelle) { |
|
| 1439 | + $boucles[$id]->type_requete = ''; |
|
| 1440 | + } else { |
|
| 1441 | + $boucles[$id]->type_requete = false; |
|
| 1442 | + $boucle = $boucles[$id]; |
|
| 1443 | + $x = (!$boucle->sql_serveur ? '' : |
|
| 1444 | + ($boucle->sql_serveur . ":")) . |
|
| 1445 | + $type; |
|
| 1446 | + $msg = array( |
|
| 1447 | + 'zbug_table_inconnue', |
|
| 1448 | + array('table' => $x) |
|
| 1449 | + ); |
|
| 1450 | + erreur_squelette($msg, $boucle); |
|
| 1451 | + } |
|
| 1452 | + } |
|
| 1453 | + } |
|
| 1454 | + } |
|
| 1455 | + } |
|
| 1456 | + } |
|
| 1457 | + |
|
| 1458 | + // Commencer par reperer les boucles appelees explicitement |
|
| 1459 | + // car elles indexent les arguments de maniere derogatoire |
|
| 1460 | + foreach ($boucles as $id => $boucle) { |
|
| 1461 | + if ($boucle->type_requete == TYPE_RECURSIF and $boucle->param) { |
|
| 1462 | + $boucles[$id]->descr = &$descr; |
|
| 1463 | + $rec = &$boucles[$boucle->param[0]]; |
|
| 1464 | + if (!$rec) { |
|
| 1465 | + $msg = array( |
|
| 1466 | + 'zbug_boucle_recursive_undef', |
|
| 1467 | + array('nom' => $boucle->param[0]) |
|
| 1468 | + ); |
|
| 1469 | + erreur_squelette($msg, $boucle); |
|
| 1470 | + $boucles[$id]->type_requete = false; |
|
| 1471 | + } else { |
|
| 1472 | + $rec->externe = $id; |
|
| 1473 | + $descr['id_mere'] = $id; |
|
| 1474 | + $boucles[$id]->return = |
|
| 1475 | + calculer_liste(array($rec), |
|
| 1476 | + $descr, |
|
| 1477 | + $boucles, |
|
| 1478 | + $boucle->param); |
|
| 1479 | + } |
|
| 1480 | + } |
|
| 1481 | + } |
|
| 1482 | + foreach ($boucles as $id => $boucle) { |
|
| 1483 | + $id = strval($id); // attention au type dans index_pile |
|
| 1484 | + $type = $boucle->type_requete; |
|
| 1485 | + if ($type and $type != TYPE_RECURSIF) { |
|
| 1486 | + $res = ''; |
|
| 1487 | + if ($boucle->param) { |
|
| 1488 | + // retourne un tableau en cas d'erreur |
|
| 1489 | + $res = calculer_criteres($id, $boucles); |
|
| 1490 | + } |
|
| 1491 | + $descr['id_mere'] = $id; |
|
| 1492 | + $boucles[$id]->return = |
|
| 1493 | + calculer_liste($boucle->milieu, |
|
| 1494 | + $descr, |
|
| 1495 | + $boucles, |
|
| 1496 | + $id); |
|
| 1497 | + // Si les criteres se sont mal compiles |
|
| 1498 | + // ne pas tenter d'assembler le code final |
|
| 1499 | + // (mais compiler le corps pour detection d'erreurs) |
|
| 1500 | + if (is_array($res)) { |
|
| 1501 | + $boucles[$id]->type_requete = false; |
|
| 1502 | + } |
|
| 1503 | + } |
|
| 1504 | + } |
|
| 1505 | + |
|
| 1506 | + // idem pour la racine |
|
| 1507 | + $descr['id_mere'] = ''; |
|
| 1508 | + $corps = calculer_liste($squelette, $descr, $boucles); |
|
| 1509 | + |
|
| 1510 | + |
|
| 1511 | + // Calcul du corps de toutes les fonctions PHP, |
|
| 1512 | + // en particulier les requetes SQL et TOTAL_BOUCLE |
|
| 1513 | + // de'terminables seulement maintenant |
|
| 1514 | + |
|
| 1515 | + foreach ($boucles as $id => $boucle) { |
|
| 1516 | + $boucle = $boucles[$id] = pipeline('pre_boucle', $boucle); |
|
| 1517 | + if ($boucle->return === false) { |
|
| 1518 | + $corps = false; |
|
| 1519 | + continue; |
|
| 1520 | + } |
|
| 1521 | + // appeler la fonction de definition de la boucle |
|
| 1522 | + |
|
| 1523 | + if ($req = $boucle->type_requete) { |
|
| 1524 | + // boucle personnalisée ? |
|
| 1525 | + $table = strtoupper($boucle->type_requete); |
|
| 1526 | + $serveur = strtolower($boucle->sql_serveur); |
|
| 1527 | + if ( |
|
| 1528 | + // fonction de boucle avec serveur & table |
|
| 1529 | + (!$serveur or |
|
| 1530 | + ((!function_exists($f = "boucle_" . $serveur . "_" . $table)) |
|
| 1531 | + and (!function_exists($f = $f . "_dist")) |
|
| 1532 | + ) |
|
| 1533 | + ) |
|
| 1534 | + // fonction de boucle avec table |
|
| 1535 | + and (!function_exists($f = "boucle_" . $table)) |
|
| 1536 | + and (!function_exists($f = $f . "_dist")) |
|
| 1537 | + ) { |
|
| 1538 | + // fonction de boucle standard |
|
| 1539 | + if (!function_exists($f = 'boucle_DEFAUT')) { |
|
| 1540 | + $f = 'boucle_DEFAUT_dist'; |
|
| 1541 | + } |
|
| 1542 | + } |
|
| 1543 | + |
|
| 1544 | + $req = "\n\n\tstatic \$command = array();\n\t" . |
|
| 1545 | + "static \$connect;\n\t" . |
|
| 1546 | + "\$command['connect'] = \$connect = " . |
|
| 1547 | + _q($boucle->sql_serveur) . |
|
| 1548 | + ";" . |
|
| 1549 | + $f($id, $boucles); |
|
| 1550 | + } else { |
|
| 1551 | + $req = ("\n\treturn '';"); |
|
| 1552 | + } |
|
| 1553 | + |
|
| 1554 | + $boucles[$id]->return = |
|
| 1555 | + "\n\nfunction BOUCLE" . strtr($id, "-", "_") . $nom . |
|
| 1556 | + '(&$Cache, &$Pile, &$doublons, &$Numrows, $SP) {' . |
|
| 1557 | + $req . |
|
| 1558 | + "\n}\n"; |
|
| 1559 | + } |
|
| 1560 | + |
|
| 1561 | + // Au final, si le corps ou un critere au moins s'est mal compile |
|
| 1562 | + // retourner False, sinon inserer leur decompilation |
|
| 1563 | + if (is_bool($corps)) { |
|
| 1564 | + return false; |
|
| 1565 | + } |
|
| 1566 | + |
|
| 1567 | + $principal = "\nfunction " . $nom . '($Cache, $Pile, $doublons = array(), $Numrows = array(), $SP = 0) { |
|
| 1568 | 1568 | ' |
| 1569 | - // reporter de maniere securisee les doublons inclus |
|
| 1570 | - . ' |
|
| 1569 | + // reporter de maniere securisee les doublons inclus |
|
| 1570 | + . ' |
|
| 1571 | 1571 | if (isset($Pile[0]["doublons"]) AND is_array($Pile[0]["doublons"])) |
| 1572 | 1572 | $doublons = nettoyer_env_doublons($Pile[0]["doublons"]); |
| 1573 | 1573 | |
| 1574 | 1574 | $connect = ' . |
| 1575 | - _q($connect) . '; |
|
| 1575 | + _q($connect) . '; |
|
| 1576 | 1576 | $page = ' . |
| 1577 | - // ATTENTION, le calcul de l'expression $corps affectera $Cache |
|
| 1578 | - // c'est pourquoi on l'affecte a la variable auxiliaire $page. |
|
| 1579 | - // avant de referencer $Cache |
|
| 1580 | - $corps . "; |
|
| 1577 | + // ATTENTION, le calcul de l'expression $corps affectera $Cache |
|
| 1578 | + // c'est pourquoi on l'affecte a la variable auxiliaire $page. |
|
| 1579 | + // avant de referencer $Cache |
|
| 1580 | + $corps . "; |
|
| 1581 | 1581 | |
| 1582 | 1582 | return analyse_resultat_skel(" . var_export($nom, true) |
| 1583 | - . ", \$Cache, \$page, " . var_export($sourcefile, true) . "); |
|
| 1583 | + . ", \$Cache, \$page, " . var_export($sourcefile, true) . "); |
|
| 1584 | 1584 | }"; |
| 1585 | 1585 | |
| 1586 | - $secondes = spip_timer('calcul_skel'); |
|
| 1587 | - spip_log("COMPIL ($secondes) [$sourcefile] $nom.php"); |
|
| 1588 | - // $connect n'est pas sûr : on nettoie |
|
| 1589 | - $connect = preg_replace(',[^\w],', '', $connect); |
|
| 1586 | + $secondes = spip_timer('calcul_skel'); |
|
| 1587 | + spip_log("COMPIL ($secondes) [$sourcefile] $nom.php"); |
|
| 1588 | + // $connect n'est pas sûr : on nettoie |
|
| 1589 | + $connect = preg_replace(',[^\w],', '', $connect); |
|
| 1590 | 1590 | |
| 1591 | - // Assimiler la fct principale a une boucle anonyme, pour retourner un resultat simple |
|
| 1592 | - $code = new Boucle; |
|
| 1593 | - $code->descr = $descr; |
|
| 1594 | - $code->return = ' |
|
| 1591 | + // Assimiler la fct principale a une boucle anonyme, pour retourner un resultat simple |
|
| 1592 | + $code = new Boucle; |
|
| 1593 | + $code->descr = $descr; |
|
| 1594 | + $code->return = ' |
|
| 1595 | 1595 | // |
| 1596 | 1596 | // Fonction principale du squelette ' . |
| 1597 | - $sourcefile . |
|
| 1598 | - ($connect ? " pour $connect" : '') . |
|
| 1599 | - (!CODE_COMMENTE ? '' : "\n// Temps de compilation total: $secondes") . |
|
| 1600 | - "\n//\n" . |
|
| 1601 | - $principal; |
|
| 1597 | + $sourcefile . |
|
| 1598 | + ($connect ? " pour $connect" : '') . |
|
| 1599 | + (!CODE_COMMENTE ? '' : "\n// Temps de compilation total: $secondes") . |
|
| 1600 | + "\n//\n" . |
|
| 1601 | + $principal; |
|
| 1602 | 1602 | |
| 1603 | - $boucles[''] = $code; |
|
| 1603 | + $boucles[''] = $code; |
|
| 1604 | 1604 | |
| 1605 | - return $boucles; |
|
| 1605 | + return $boucles; |
|
| 1606 | 1606 | } |
| 1607 | 1607 | |
| 1608 | 1608 | |
@@ -1619,18 +1619,18 @@ discard block |
||
| 1619 | 1619 | * |
| 1620 | 1620 | **/ |
| 1621 | 1621 | function requeteur_php_dist(&$boucles, &$boucle, &$id) { |
| 1622 | - if (class_exists($boucle->type_requete)) { |
|
| 1623 | - $g = charger_fonction('php', 'iterateur'); |
|
| 1624 | - $boucles[$id] = $g($boucle, $boucle->type_requete); |
|
| 1625 | - } else { |
|
| 1626 | - $x = $boucle->type_requete; |
|
| 1627 | - $boucle->type_requete = false; |
|
| 1628 | - $msg = array( |
|
| 1629 | - 'zbug_iterateur_inconnu', |
|
| 1630 | - array('iterateur' => $x) |
|
| 1631 | - ); |
|
| 1632 | - erreur_squelette($msg, $boucle); |
|
| 1633 | - } |
|
| 1622 | + if (class_exists($boucle->type_requete)) { |
|
| 1623 | + $g = charger_fonction('php', 'iterateur'); |
|
| 1624 | + $boucles[$id] = $g($boucle, $boucle->type_requete); |
|
| 1625 | + } else { |
|
| 1626 | + $x = $boucle->type_requete; |
|
| 1627 | + $boucle->type_requete = false; |
|
| 1628 | + $msg = array( |
|
| 1629 | + 'zbug_iterateur_inconnu', |
|
| 1630 | + array('iterateur' => $x) |
|
| 1631 | + ); |
|
| 1632 | + erreur_squelette($msg, $boucle); |
|
| 1633 | + } |
|
| 1634 | 1634 | } |
| 1635 | 1635 | |
| 1636 | 1636 | |
@@ -1648,23 +1648,23 @@ discard block |
||
| 1648 | 1648 | * |
| 1649 | 1649 | **/ |
| 1650 | 1650 | function requeteur_data_dist(&$boucles, &$boucle, &$id) { |
| 1651 | - include_spip('iterateur/data'); |
|
| 1652 | - if ($h = charger_fonction($boucle->type_requete . '_to_array', 'inc', true)) { |
|
| 1653 | - $g = charger_fonction('data', 'iterateur'); |
|
| 1654 | - $boucles[$id] = $g($boucle); |
|
| 1655 | - // from[0] stocke le type de data (rss, yql, ...) |
|
| 1656 | - $boucles[$id]->from[] = $boucle->type_requete; |
|
| 1657 | - |
|
| 1658 | - } else { |
|
| 1659 | - $x = $boucle->type_requete; |
|
| 1660 | - $boucle->type_requete = false; |
|
| 1661 | - $msg = array( |
|
| 1662 | - 'zbug_requeteur_inconnu', |
|
| 1663 | - array( |
|
| 1664 | - 'requeteur' => 'data', |
|
| 1665 | - 'type' => $x |
|
| 1666 | - ) |
|
| 1667 | - ); |
|
| 1668 | - erreur_squelette($msg, $boucle); |
|
| 1669 | - } |
|
| 1651 | + include_spip('iterateur/data'); |
|
| 1652 | + if ($h = charger_fonction($boucle->type_requete . '_to_array', 'inc', true)) { |
|
| 1653 | + $g = charger_fonction('data', 'iterateur'); |
|
| 1654 | + $boucles[$id] = $g($boucle); |
|
| 1655 | + // from[0] stocke le type de data (rss, yql, ...) |
|
| 1656 | + $boucles[$id]->from[] = $boucle->type_requete; |
|
| 1657 | + |
|
| 1658 | + } else { |
|
| 1659 | + $x = $boucle->type_requete; |
|
| 1660 | + $boucle->type_requete = false; |
|
| 1661 | + $msg = array( |
|
| 1662 | + 'zbug_requeteur_inconnu', |
|
| 1663 | + array( |
|
| 1664 | + 'requeteur' => 'data', |
|
| 1665 | + 'type' => $x |
|
| 1666 | + ) |
|
| 1667 | + ); |
|
| 1668 | + erreur_squelette($msg, $boucle); |
|
| 1669 | + } |
|
| 1670 | 1670 | } |
@@ -97,7 +97,7 @@ discard block |
||
| 97 | 97 | preg_match(",^([^=]*)(=?)(.*)$,m", $var->texte, $m); |
| 98 | 98 | $m = array_pad($m, 3, null); |
| 99 | 99 | $var = $m[1]; |
| 100 | - $auto = false;; |
|
| 100 | + $auto = false; ; |
|
| 101 | 101 | if ($m[2]) { |
| 102 | 102 | $v = $m[3]; |
| 103 | 103 | if (preg_match(',^[\'"](.*)[\'"]$,', $v, $m)) { |
@@ -121,7 +121,7 @@ discard block |
||
| 121 | 121 | : calculer_liste($val, $p->descr, $boucles, $id_boucle); |
| 122 | 122 | if ($var !== 1) { |
| 123 | 123 | $val = ($echap ? "\'$var\' => ' . argumenter_squelette(" : "'$var' => ") |
| 124 | - . $val . ($echap ? ") . '" : " "); |
|
| 124 | + . $val.($echap ? ") . '" : " "); |
|
| 125 | 125 | } else { |
| 126 | 126 | $val = $echap ? "'.$val.'" : $val; |
| 127 | 127 | } |
@@ -142,7 +142,7 @@ discard block |
||
| 142 | 142 | if (!$lang) { |
| 143 | 143 | $lang = '$GLOBALS["spip_lang"]'; |
| 144 | 144 | } |
| 145 | - $l['lang'] = ($echap ? "\'lang\' => ' . argumenter_squelette(" : "'lang' => ") . $lang . ($echap ? ") . '" : " "); |
|
| 145 | + $l['lang'] = ($echap ? "\'lang\' => ' . argumenter_squelette(" : "'lang' => ").$lang.($echap ? ") . '" : " "); |
|
| 146 | 146 | |
| 147 | 147 | return $l; |
| 148 | 148 | } |
@@ -171,7 +171,7 @@ discard block |
||
| 171 | 171 | $_contexte = argumenter_inclure($p->param, false, $p, $boucles, $id_boucle, true, '', true); |
| 172 | 172 | if (is_string($p->texte)) { |
| 173 | 173 | $fichier = $p->texte; |
| 174 | - $code = "\"".str_replace('"','\"',$fichier)."\""; |
|
| 174 | + $code = "\"".str_replace('"', '\"', $fichier)."\""; |
|
| 175 | 175 | |
| 176 | 176 | } else { |
| 177 | 177 | $code = calculer_liste($p->texte, $p->descr, $boucles, $id_boucle); |
@@ -185,7 +185,7 @@ discard block |
||
| 185 | 185 | $trace = $p->fonctions; |
| 186 | 186 | while (is_array($trace) |
| 187 | 187 | and $trace = array_filter($trace) |
| 188 | - and count($trace)==1) { |
|
| 188 | + and count($trace) == 1) { |
|
| 189 | 189 | $trace = reset($trace); |
| 190 | 190 | } |
| 191 | 191 | $erreur_p_i_i = array( |
@@ -219,7 +219,7 @@ discard block |
||
| 219 | 219 | return false; |
| 220 | 220 | } // j'aurais voulu toucher le fond ... |
| 221 | 221 | |
| 222 | - $contexte = 'array(' . $_contexte . ')'; |
|
| 222 | + $contexte = 'array('.$_contexte.')'; |
|
| 223 | 223 | |
| 224 | 224 | if ($env) { |
| 225 | 225 | $contexte = "array_merge('.var_export(\$Pile[0],1).',$contexte)"; |
@@ -234,11 +234,11 @@ discard block |
||
| 234 | 234 | $_options[] = $ajax; |
| 235 | 235 | } |
| 236 | 236 | $code = " ' . argumenter_squelette($code) . '"; |
| 237 | - $code = "echo " . sprintf(CODE_RECUPERER_FOND, $code, $contexte, implode(',', $_options), |
|
| 238 | - "_request(\"connect\")") . ';'; |
|
| 237 | + $code = "echo ".sprintf(CODE_RECUPERER_FOND, $code, $contexte, implode(',', $_options), |
|
| 238 | + "_request(\"connect\")").';'; |
|
| 239 | 239 | } |
| 240 | 240 | |
| 241 | - return "\n'<'.'" . "?php " . $code . "\n?'." . "'>'"; |
|
| 241 | + return "\n'<'.'"."?php ".$code."\n?'."."'>'"; |
|
| 242 | 242 | } |
| 243 | 243 | |
| 244 | 244 | |
@@ -318,17 +318,17 @@ discard block |
||
| 318 | 318 | $id = $id_table; |
| 319 | 319 | $statut = preg_replace(',\W,', '', $s['champ']); // securite |
| 320 | 320 | } |
| 321 | - $mstatut = $id . '.' . $statut; |
|
| 321 | + $mstatut = $id.'.'.$statut; |
|
| 322 | 322 | |
| 323 | 323 | $arg_ignore_previsu = ($ignore_previsu ? ",true" : ''); |
| 324 | 324 | include_spip('public/quete'); |
| 325 | 325 | if (isset($s['post_date']) and $s['post_date'] |
| 326 | 326 | and $GLOBALS['meta']["post_dates"] == 'non' |
| 327 | 327 | ) { |
| 328 | - $date = $id . '.' . preg_replace(',\W,', '', $s['post_date']); // securite |
|
| 328 | + $date = $id.'.'.preg_replace(',\W,', '', $s['post_date']); // securite |
|
| 329 | 329 | array_unshift($boucle->where, |
| 330 | 330 | $echapper ? |
| 331 | - "\nquete_condition_postdates('$date'," . _q($boucle->sql_serveur) . "$arg_ignore_previsu)" |
|
| 331 | + "\nquete_condition_postdates('$date',"._q($boucle->sql_serveur)."$arg_ignore_previsu)" |
|
| 332 | 332 | : |
| 333 | 333 | quete_condition_postdates($date, $boucle->sql_serveur, $ignore_previsu) |
| 334 | 334 | ); |
@@ -336,9 +336,9 @@ discard block |
||
| 336 | 336 | array_unshift($boucle->where, |
| 337 | 337 | $echapper ? |
| 338 | 338 | "\nquete_condition_statut('$mstatut'," |
| 339 | - . _q($s['previsu']) . "," |
|
| 340 | - . _q($s['publie']) . "," |
|
| 341 | - . _q($boucle->sql_serveur) . "$arg_ignore_previsu)" |
|
| 339 | + . _q($s['previsu'])."," |
|
| 340 | + . _q($s['publie'])."," |
|
| 341 | + . _q($boucle->sql_serveur)."$arg_ignore_previsu)" |
|
| 342 | 342 | : |
| 343 | 343 | quete_condition_statut($mstatut, $s['previsu'], $s['publie'], $boucle->sql_serveur, $ignore_previsu) |
| 344 | 344 | ); |
@@ -372,14 +372,14 @@ discard block |
||
| 372 | 372 | if (_request('var_mode_affiche') != 'resultat') { |
| 373 | 373 | $trace = ''; |
| 374 | 374 | } else { |
| 375 | - $_trace = $boucles[$id_boucle]->descr['nom'] . $id_boucle; |
|
| 375 | + $_trace = $boucles[$id_boucle]->descr['nom'].$id_boucle; |
|
| 376 | 376 | $_trace = "\$GLOBALS['debug_objets']['resultat']['$_trace']"; |
| 377 | 377 | $trace = " |
| 378 | 378 | if (empty($_trace)) { |
| 379 | 379 | $_trace = []; |
| 380 | 380 | } |
| 381 | 381 | if (count($_trace) < 3) { |
| 382 | - $_trace" . "[] = \$t0; |
|
| 382 | + $_trace"."[] = \$t0; |
|
| 383 | 383 | }"; |
| 384 | 384 | } |
| 385 | 385 | |
@@ -413,7 +413,7 @@ discard block |
||
| 413 | 413 | return |
| 414 | 414 | // Numrows[$nom] peut ne pas être encore defini |
| 415 | 415 | "\n\t\$save_numrows = (isset(\$Numrows['$nom']) ? \$Numrows['$nom'] : array());" |
| 416 | - . "\n\t\$t0 = " . $boucles[$id_boucle]->return . ";" |
|
| 416 | + . "\n\t\$t0 = ".$boucles[$id_boucle]->return.";" |
|
| 417 | 417 | . "\n\t\$Numrows['$nom'] = (\$save_numrows);" |
| 418 | 418 | . $trace |
| 419 | 419 | . "\n\treturn \$t0;"; |
@@ -481,7 +481,7 @@ discard block |
||
| 481 | 481 | // faudrait expanser le foreach a la compil, car y en a souvent qu'un |
| 482 | 482 | // et puis faire un [] plutot qu'un "','." |
| 483 | 483 | if ($boucle->doublons) { |
| 484 | - $corps .= "\n\t\t\tforeach(" . $boucle->doublons . ' as $k) $doublons[$k] .= "," . ' . |
|
| 484 | + $corps .= "\n\t\t\tforeach(".$boucle->doublons.' as $k) $doublons[$k] .= "," . '. |
|
| 485 | 485 | index_pile($id_boucle, $primary, $boucles) |
| 486 | 486 | . "; // doublons\n"; |
| 487 | 487 | } |
@@ -508,13 +508,13 @@ discard block |
||
| 508 | 508 | $corps .= |
| 509 | 509 | "\n\t\tlang_select_public(" |
| 510 | 510 | . index_pile($id_boucle, 'lang', $boucles) |
| 511 | - . ", '" . $boucle->lang_select . "'" |
|
| 511 | + . ", '".$boucle->lang_select."'" |
|
| 512 | 512 | . (in_array($type_boucle, array( |
| 513 | 513 | 'articles', |
| 514 | 514 | 'rubriques', |
| 515 | 515 | 'hierarchie', |
| 516 | 516 | 'breves' |
| 517 | - )) ? ', ' . index_pile($id_boucle, 'titre', $boucles) : '') |
|
| 517 | + )) ? ', '.index_pile($id_boucle, 'titre', $boucles) : '') |
|
| 518 | 518 | . ');'; |
| 519 | 519 | } else { |
| 520 | 520 | $init_lang = ''; |
@@ -535,26 +535,22 @@ discard block |
||
| 535 | 535 | |
| 536 | 536 | // gestion optimale des separateurs et des boucles constantes |
| 537 | 537 | if (count($boucle->separateur)) { |
| 538 | - $code_sep = ("'" . str_replace("'", "\'", join('', $boucle->separateur)) . "'"); |
|
| 538 | + $code_sep = ("'".str_replace("'", "\'", join('', $boucle->separateur))."'"); |
|
| 539 | 539 | } |
| 540 | 540 | |
| 541 | 541 | $corps .= |
| 542 | 542 | ((!$boucle->separateur) ? |
| 543 | - (($constant && !$corps && !$flag_cpt) ? $return : |
|
| 544 | - (($return === "''") ? '' : |
|
| 545 | - ("\n\t\t" . '$t0 .= ' . $return . ";"))) : |
|
| 546 | - ("\n\t\t\$t1 " . |
|
| 543 | + (($constant && !$corps && !$flag_cpt) ? $return : (($return === "''") ? '' : ("\n\t\t".'$t0 .= '.$return.";"))) : ("\n\t\t\$t1 ". |
|
| 547 | 544 | ((strpos($return, '$t1.') === 0) ? |
| 548 | - (".=" . substr($return, 4)) : |
|
| 549 | - ('= ' . $return)) . |
|
| 550 | - ";\n\t\t" . |
|
| 551 | - '$t0 .= ((strlen($t1) && strlen($t0)) ? ' . $code_sep . " : '') . \$t1;")); |
|
| 545 | + (".=".substr($return, 4)) : ('= '.$return)). |
|
| 546 | + ";\n\t\t". |
|
| 547 | + '$t0 .= ((strlen($t1) && strlen($t0)) ? '.$code_sep." : '') . \$t1;")); |
|
| 552 | 548 | |
| 553 | 549 | // Calculer les invalideurs si c'est une boucle non constante et si on |
| 554 | 550 | // souhaite invalider ces elements |
| 555 | 551 | if (!$constant and $primary) { |
| 556 | 552 | include_spip('inc/invalideur'); |
| 557 | - $corps = calcul_invalideurs($corps, $primary,$boucles, $id_boucle); |
|
| 553 | + $corps = calcul_invalideurs($corps, $primary, $boucles, $id_boucle); |
|
| 558 | 554 | } |
| 559 | 555 | |
| 560 | 556 | // gerer le compteur de boucle |
@@ -629,7 +625,7 @@ discard block |
||
| 629 | 625 | $corps, |
| 630 | 626 | $fin_lang, |
| 631 | 627 | $trace, |
| 632 | - 'BOUCLE' . $id_boucle . ' @ ' . ($boucle->descr['sourcefile']) |
|
| 628 | + 'BOUCLE'.$id_boucle.' @ '.($boucle->descr['sourcefile']) |
|
| 633 | 629 | ); |
| 634 | 630 | |
| 635 | 631 | # var_dump($a);exit; |
@@ -650,20 +646,20 @@ discard block |
||
| 650 | 646 | **/ |
| 651 | 647 | function calculer_requete_sql($boucle) { |
| 652 | 648 | $init = array(); |
| 653 | - $init[] = calculer_dec('table', "'" . $boucle->id_table . "'"); |
|
| 654 | - $init[] = calculer_dec('id', "'" . $boucle->id_boucle . "'"); |
|
| 649 | + $init[] = calculer_dec('table', "'".$boucle->id_table."'"); |
|
| 650 | + $init[] = calculer_dec('id', "'".$boucle->id_boucle."'"); |
|
| 655 | 651 | # En absence de champ c'est un decompte : |
| 656 | 652 | $init[] = calculer_dec('from', calculer_from($boucle)); |
| 657 | 653 | $init[] = calculer_dec('type', calculer_from_type($boucle)); |
| 658 | 654 | $init[] = calculer_dec('groupby', |
| 659 | - 'array(' . (($g = join("\",\n\t\t\"", $boucle->group)) ? '"' . $g . '"' : '') . ")"); |
|
| 660 | - $init[] = calculer_dec('select', 'array("' . join("\",\n\t\t\"", $boucle->select) . "\")"); |
|
| 661 | - $init[] = calculer_dec('orderby', 'array(' . calculer_order($boucle) . ")"); |
|
| 655 | + 'array('.(($g = join("\",\n\t\t\"", $boucle->group)) ? '"'.$g.'"' : '').")"); |
|
| 656 | + $init[] = calculer_dec('select', 'array("'.join("\",\n\t\t\"", $boucle->select)."\")"); |
|
| 657 | + $init[] = calculer_dec('orderby', 'array('.calculer_order($boucle).")"); |
|
| 662 | 658 | $init[] = calculer_dec('where', calculer_dump_array($boucle->where)); |
| 663 | 659 | $init[] = calculer_dec('join', calculer_dump_join($boucle->join)); |
| 664 | 660 | $init[] = calculer_dec('limit', |
| 665 | 661 | (strpos($boucle->limit, 'intval') === false ? |
| 666 | - "'" . $boucle->limit . "'" |
|
| 662 | + "'".$boucle->limit."'" |
|
| 667 | 663 | : |
| 668 | 664 | $boucle->limit)); |
| 669 | 665 | $init[] = calculer_dec('having', calculer_dump_array($boucle->having)); |
@@ -672,17 +668,17 @@ discard block |
||
| 672 | 668 | // ou recalculée à chaque passage (vide) |
| 673 | 669 | foreach ($init as $i) { |
| 674 | 670 | if (reset($i)) { |
| 675 | - $s .= "\n\t\t" . end($i); |
|
| 671 | + $s .= "\n\t\t".end($i); |
|
| 676 | 672 | } # statique |
| 677 | 673 | else { |
| 678 | - $d .= "\n\t" . end($i); |
|
| 674 | + $d .= "\n\t".end($i); |
|
| 679 | 675 | } # dynamique |
| 680 | 676 | } |
| 681 | 677 | |
| 682 | 678 | return ($boucle->hierarchie ? "\n\t$boucle->hierarchie" : '') |
| 683 | 679 | . $boucle->in |
| 684 | 680 | . $boucle->hash |
| 685 | - . "\n\t" . 'if (!isset($command[\'table\'])) {' |
|
| 681 | + . "\n\t".'if (!isset($command[\'table\'])) {' |
|
| 686 | 682 | . $s |
| 687 | 683 | . "\n\t}" |
| 688 | 684 | . $d; |
@@ -765,7 +761,7 @@ discard block |
||
| 765 | 761 | * - index 1 : Code de l'affectation |
| 766 | 762 | **/ |
| 767 | 763 | function calculer_dec($nom, $val) { |
| 768 | - $static = 'if (!isset($command[\'' . $nom . '\'])) '; |
|
| 764 | + $static = 'if (!isset($command[\''.$nom.'\'])) '; |
|
| 769 | 765 | // si une variable apparait dans le calcul de la clause |
| 770 | 766 | // il faut la re-evaluer a chaque passage |
| 771 | 767 | if ( |
@@ -782,7 +778,7 @@ discard block |
||
| 782 | 778 | $static = ""; |
| 783 | 779 | } |
| 784 | 780 | |
| 785 | - return array($static, '$command[\'' . $nom . '\'] = ' . $val . ';'); |
|
| 781 | + return array($static, '$command[\''.$nom.'\'] = '.$val.';'); |
|
| 786 | 782 | } |
| 787 | 783 | |
| 788 | 784 | /** |
@@ -807,17 +803,17 @@ discard block |
||
| 807 | 803 | } |
| 808 | 804 | $res = ""; |
| 809 | 805 | if ($a and $a[0] == "'?'") { |
| 810 | - return ("(" . calculer_dump_array($a[1]) . |
|
| 811 | - " ? " . calculer_dump_array($a[2]) . |
|
| 812 | - " : " . calculer_dump_array($a[3]) . |
|
| 806 | + return ("(".calculer_dump_array($a[1]). |
|
| 807 | + " ? ".calculer_dump_array($a[2]). |
|
| 808 | + " : ".calculer_dump_array($a[3]). |
|
| 813 | 809 | ")"); |
| 814 | 810 | } else { |
| 815 | 811 | foreach ($a as $k => $v) { |
| 816 | - $showk = (is_numeric($k) ? '' : sql_quote($k) . ' => '); |
|
| 817 | - $res .= ", " . $showk . calculer_dump_array($v); |
|
| 812 | + $showk = (is_numeric($k) ? '' : sql_quote($k).' => '); |
|
| 813 | + $res .= ", ".$showk.calculer_dump_array($v); |
|
| 818 | 814 | } |
| 819 | 815 | |
| 820 | - return "\n\t\t\tarray(" . substr($res, 2) . ')'; |
|
| 816 | + return "\n\t\t\tarray(".substr($res, 2).')'; |
|
| 821 | 817 | } |
| 822 | 818 | } |
| 823 | 819 | |
@@ -825,10 +821,10 @@ discard block |
||
| 825 | 821 | function calculer_dump_join($a) { |
| 826 | 822 | $res = ""; |
| 827 | 823 | foreach ($a as $k => $v) { |
| 828 | - $res .= ", '$k' => array(" . implode(',', $v) . ")"; |
|
| 824 | + $res .= ", '$k' => array(".implode(',', $v).")"; |
|
| 829 | 825 | } |
| 830 | 826 | |
| 831 | - return 'array(' . substr($res, 2) . ')'; |
|
| 827 | + return 'array('.substr($res, 2).')'; |
|
| 832 | 828 | } |
| 833 | 829 | |
| 834 | 830 | /** |
@@ -845,7 +841,7 @@ discard block |
||
| 845 | 841 | $res .= ",'$k' => '$v'"; |
| 846 | 842 | } |
| 847 | 843 | |
| 848 | - return 'array(' . substr($res, 1) . ')'; |
|
| 844 | + return 'array('.substr($res, 1).')'; |
|
| 849 | 845 | } |
| 850 | 846 | |
| 851 | 847 | /** |
@@ -863,7 +859,7 @@ discard block |
||
| 863 | 859 | $res .= ",'$k' => '$v'"; |
| 864 | 860 | } |
| 865 | 861 | |
| 866 | - return 'array(' . substr($res, 1) . ')'; |
|
| 862 | + return 'array('.substr($res, 1).')'; |
|
| 867 | 863 | } |
| 868 | 864 | |
| 869 | 865 | // https://code.spip.net/@calculer_order |
@@ -932,17 +928,17 @@ discard block |
||
| 932 | 928 | ) { |
| 933 | 929 | $res .= " .\n$tab$code"; |
| 934 | 930 | } else { |
| 935 | - $res = substr($res, 0, -1) . substr($code, 1); |
|
| 931 | + $res = substr($res, 0, -1).substr($code, 1); |
|
| 936 | 932 | } |
| 937 | 933 | } |
| 938 | 934 | |
| 939 | - return '(' . substr($res, 2 + $descr['niv']) . ')'; |
|
| 935 | + return '('.substr($res, 2 + $descr['niv']).')'; |
|
| 940 | 936 | } |
| 941 | 937 | } else { |
| 942 | - $nom = $descr['nom'] . $id_boucle . ($descr['niv'] ? $descr['niv'] : ''); |
|
| 938 | + $nom = $descr['nom'].$id_boucle.($descr['niv'] ? $descr['niv'] : ''); |
|
| 943 | 939 | |
| 944 | - return "join('', array_map('array_shift', \$GLOBALS['debug_objets']['sequence']['$nom'] = array(" . join(" ,\n$tab", |
|
| 945 | - $codes) . ")))"; |
|
| 940 | + return "join('', array_map('array_shift', \$GLOBALS['debug_objets']['sequence']['$nom'] = array(".join(" ,\n$tab", |
|
| 941 | + $codes).")))"; |
|
| 946 | 942 | } |
| 947 | 943 | } |
| 948 | 944 | |
@@ -971,7 +967,7 @@ discard block |
||
| 971 | 967 | // texte seul |
| 972 | 968 | case 'texte': |
| 973 | 969 | $code = sandbox_composer_texte($p->texte, $p); |
| 974 | - $commentaire = strlen($p->texte) . " signes"; |
|
| 970 | + $commentaire = strlen($p->texte)." signes"; |
|
| 975 | 971 | $avant = ''; |
| 976 | 972 | $apres = ''; |
| 977 | 973 | $altern = "''"; |
@@ -980,14 +976,14 @@ discard block |
||
| 980 | 976 | case 'polyglotte': |
| 981 | 977 | $code = ""; |
| 982 | 978 | foreach ($p->traductions as $k => $v) { |
| 983 | - $code .= ",'" . |
|
| 984 | - str_replace(array("\\", "'"), array("\\\\", "\\'"), $k) . |
|
| 985 | - "' => '" . |
|
| 986 | - str_replace(array("\\", "'"), array("\\\\", "\\'"), $v) . |
|
| 979 | + $code .= ",'". |
|
| 980 | + str_replace(array("\\", "'"), array("\\\\", "\\'"), $k). |
|
| 981 | + "' => '". |
|
| 982 | + str_replace(array("\\", "'"), array("\\\\", "\\'"), $v). |
|
| 987 | 983 | "'"; |
| 988 | 984 | } |
| 989 | - $code = "choisir_traduction(array(" . |
|
| 990 | - substr($code, 1) . |
|
| 985 | + $code = "choisir_traduction(array(". |
|
| 986 | + substr($code, 1). |
|
| 991 | 987 | "))"; |
| 992 | 988 | $commentaire = '&'; |
| 993 | 989 | $avant = ''; |
@@ -1003,7 +999,7 @@ discard block |
||
| 1003 | 999 | $err_e_c = true; |
| 1004 | 1000 | $code = "''"; |
| 1005 | 1001 | } else { |
| 1006 | - $commentaire = '<INCLURE ' . addslashes(str_replace("\n", ' ', $code)) . '>'; |
|
| 1002 | + $commentaire = '<INCLURE '.addslashes(str_replace("\n", ' ', $code)).'>'; |
|
| 1007 | 1003 | $avant = ''; |
| 1008 | 1004 | $apres = ''; |
| 1009 | 1005 | $altern = "''"; |
@@ -1030,8 +1026,8 @@ discard block |
||
| 1030 | 1026 | $err_e_c = true; |
| 1031 | 1027 | $code = "''"; |
| 1032 | 1028 | } else { |
| 1033 | - $code = 'BOUCLE' . |
|
| 1034 | - str_replace("-", "_", $nom) . $descr['nom'] . |
|
| 1029 | + $code = 'BOUCLE'. |
|
| 1030 | + str_replace("-", "_", $nom).$descr['nom']. |
|
| 1035 | 1031 | '($Cache, $Pile, $doublons, $Numrows, $SP)'; |
| 1036 | 1032 | $commentaire = "?$nom"; |
| 1037 | 1033 | if (!$boucles[$nom]->milieu |
@@ -1072,24 +1068,22 @@ discard block |
||
| 1072 | 1068 | foreach ($p->arg as $k => $v) { |
| 1073 | 1069 | $_v = calculer_liste($v, $descr, $boucles, $id_boucle); |
| 1074 | 1070 | if ($k) { |
| 1075 | - $l[] = _q($k) . ' => ' . $_v; |
|
| 1071 | + $l[] = _q($k).' => '.$_v; |
|
| 1076 | 1072 | } else { |
| 1077 | 1073 | $code = $_v; |
| 1078 | 1074 | } |
| 1079 | 1075 | } |
| 1080 | 1076 | // Si le module n'est pas fourni, l'expliciter sauf si calculé |
| 1081 | 1077 | if ($p->module) { |
| 1082 | - $m = $p->module . ':' . $p->nom_champ; |
|
| 1078 | + $m = $p->module.':'.$p->nom_champ; |
|
| 1083 | 1079 | } elseif ($p->nom_champ) { |
| 1084 | - $m = MODULES_IDIOMES . ':' . $p->nom_champ; |
|
| 1080 | + $m = MODULES_IDIOMES.':'.$p->nom_champ; |
|
| 1085 | 1081 | } else { |
| 1086 | 1082 | $m = ''; |
| 1087 | 1083 | } |
| 1088 | 1084 | |
| 1089 | - $code = (!$code ? "'$m'" : |
|
| 1090 | - ($m ? "'$m' . $code" : |
|
| 1091 | - ("(strpos(\$x=$code, ':') ? \$x : ('" . MODULES_IDIOMES . ":' . \$x))"))) |
|
| 1092 | - . (!$l ? '' : (", array(" . implode(",\n", $l) . ")")); |
|
| 1085 | + $code = (!$code ? "'$m'" : ($m ? "'$m' . $code" : ("(strpos(\$x=$code, ':') ? \$x : ('".MODULES_IDIOMES.":' . \$x))"))) |
|
| 1086 | + . (!$l ? '' : (", array(".implode(",\n", $l).")")); |
|
| 1093 | 1087 | $code = "_T($code)"; |
| 1094 | 1088 | if ($p->param) { |
| 1095 | 1089 | $p->id_boucle = $id_boucle; |
@@ -1112,7 +1106,7 @@ discard block |
||
| 1112 | 1106 | $p->type_requete = $type; |
| 1113 | 1107 | |
| 1114 | 1108 | $code = calculer_champ($p); |
| 1115 | - $commentaire = '#' . $p->nom_champ . $p->etoile; |
|
| 1109 | + $commentaire = '#'.$p->nom_champ.$p->etoile; |
|
| 1116 | 1110 | $avant = calculer_liste($p->avant, |
| 1117 | 1111 | $descr, $boucles, $id_boucle); |
| 1118 | 1112 | $apres = calculer_liste($p->apres, |
@@ -1143,10 +1137,9 @@ discard block |
||
| 1143 | 1137 | if ($code != "''") { |
| 1144 | 1138 | $code = compile_retour($code, $avant, $apres, $altern, $tab, $descr['niv']); |
| 1145 | 1139 | $codes[] = (($mode == 'validation') ? |
| 1146 | - "array($code, '$commentaire', " . $p->ligne . ")" |
|
| 1140 | + "array($code, '$commentaire', ".$p->ligne.")" |
|
| 1147 | 1141 | : (($mode == 'code') ? |
| 1148 | - "\n// $commentaire\n$code" : |
|
| 1149 | - $code)); |
|
| 1142 | + "\n// $commentaire\n$code" : $code)); |
|
| 1150 | 1143 | } |
| 1151 | 1144 | } // foreach |
| 1152 | 1145 | |
@@ -1197,28 +1190,28 @@ discard block |
||
| 1197 | 1190 | if ($apres === "''") { |
| 1198 | 1191 | $apres = ''; |
| 1199 | 1192 | } |
| 1200 | - if ($avant or $apres or ($altern !== "''")){ |
|
| 1201 | - if (preg_match(_REGEXP_CONCAT_NON_VIDE, $code)){ |
|
| 1193 | + if ($avant or $apres or ($altern !== "''")) { |
|
| 1194 | + if (preg_match(_REGEXP_CONCAT_NON_VIDE, $code)) { |
|
| 1202 | 1195 | $t = $code; |
| 1203 | 1196 | $cond = ''; |
| 1204 | 1197 | } elseif (preg_match(_REGEXP_COND_VIDE_NONVIDE, $code, $r)) { |
| 1205 | 1198 | $t = $r[2]; |
| 1206 | - $cond = '!' . $r[1]; |
|
| 1199 | + $cond = '!'.$r[1]; |
|
| 1207 | 1200 | } else { |
| 1208 | - if (preg_match(_REGEXP_COND_NONVIDE_VIDE, $code, $r)){ |
|
| 1201 | + if (preg_match(_REGEXP_COND_NONVIDE_VIDE, $code, $r)) { |
|
| 1209 | 1202 | $t = $r[2]; |
| 1210 | 1203 | $cond = $r[1]; |
| 1211 | 1204 | } else { |
| 1212 | - $t = '$t' . $n; |
|
| 1205 | + $t = '$t'.$n; |
|
| 1213 | 1206 | $cond = "($t = $code)!==''"; |
| 1214 | 1207 | } |
| 1215 | 1208 | } |
| 1216 | 1209 | |
| 1217 | - $res = (!$avant ? "" : "$avant . ") . |
|
| 1218 | - $t . |
|
| 1210 | + $res = (!$avant ? "" : "$avant . "). |
|
| 1211 | + $t. |
|
| 1219 | 1212 | (!$apres ? "" : " . $apres"); |
| 1220 | 1213 | |
| 1221 | - if ($res!==$t){ |
|
| 1214 | + if ($res !== $t) { |
|
| 1222 | 1215 | $res = "($res)"; |
| 1223 | 1216 | } |
| 1224 | 1217 | |
@@ -1268,12 +1261,12 @@ discard block |
||
| 1268 | 1261 | |
| 1269 | 1262 | // rendre inertes les echappements de #[](){}<> |
| 1270 | 1263 | $i = 0; |
| 1271 | - while (false !== strpos($squelette, $inerte = '-INERTE' . $i)) { |
|
| 1264 | + while (false !== strpos($squelette, $inerte = '-INERTE'.$i)) { |
|
| 1272 | 1265 | $i++; |
| 1273 | 1266 | } |
| 1274 | 1267 | $squelette = preg_replace_callback(',\\\\([#[()\]{}<>]),', |
| 1275 | 1268 | function($a) use ($inerte) { |
| 1276 | - return "$inerte-" . ord($a[1]) . '-'; |
|
| 1269 | + return "$inerte-".ord($a[1]).'-'; |
|
| 1277 | 1270 | }, |
| 1278 | 1271 | $squelette, |
| 1279 | 1272 | -1, |
@@ -1290,7 +1283,7 @@ discard block |
||
| 1290 | 1283 | // Phraser le squelette, selon sa grammaire |
| 1291 | 1284 | |
| 1292 | 1285 | $boucles = array(); |
| 1293 | - $f = charger_fonction('phraser_' . $gram, 'public'); |
|
| 1286 | + $f = charger_fonction('phraser_'.$gram, 'public'); |
|
| 1294 | 1287 | |
| 1295 | 1288 | $squelette = $f($squelette, '', $boucles, $descr); |
| 1296 | 1289 | |
@@ -1309,7 +1302,7 @@ discard block |
||
| 1309 | 1302 | $boucles[$i]->descr['squelette'] = preg_replace_callback( |
| 1310 | 1303 | ",$inerte-(\d+)-,", |
| 1311 | 1304 | function($a) { |
| 1312 | - return "\\\\" . chr($a[1]); |
|
| 1305 | + return "\\\\".chr($a[1]); |
|
| 1313 | 1306 | }, |
| 1314 | 1307 | $boucle->descr['squelette'] |
| 1315 | 1308 | ); |
@@ -1321,19 +1314,19 @@ discard block |
||
| 1321 | 1314 | include_spip('public/decompiler'); |
| 1322 | 1315 | foreach ($boucles as $id => $boucle) { |
| 1323 | 1316 | if ($id) { |
| 1324 | - $decomp = "\n/* BOUCLE " . |
|
| 1325 | - $boucle->type_requete . |
|
| 1326 | - " " . |
|
| 1327 | - str_replace('*/', '* /', public_decompiler($boucle, $gram, 0, 'criteres')) . |
|
| 1328 | - ($boucle->debug ? "\n *\n * " . implode("\n * ", $boucle->debug) . "\n" : '') . |
|
| 1317 | + $decomp = "\n/* BOUCLE ". |
|
| 1318 | + $boucle->type_requete. |
|
| 1319 | + " ". |
|
| 1320 | + str_replace('*/', '* /', public_decompiler($boucle, $gram, 0, 'criteres')). |
|
| 1321 | + ($boucle->debug ? "\n *\n * ".implode("\n * ", $boucle->debug)."\n" : ''). |
|
| 1329 | 1322 | " */\n"; |
| 1330 | 1323 | } else { |
| 1331 | - $decomp = ("\n/*\n" . |
|
| 1324 | + $decomp = ("\n/*\n". |
|
| 1332 | 1325 | str_replace('*/', '* /', public_decompiler($squelette, $gram)) |
| 1333 | 1326 | . "\n*/"); |
| 1334 | 1327 | } |
| 1335 | - $boucles[$id]->return = $decomp . $boucle->return; |
|
| 1336 | - $GLOBALS['debug_objets']['code'][$nom . $id] = $boucle->return; |
|
| 1328 | + $boucles[$id]->return = $decomp.$boucle->return; |
|
| 1329 | + $GLOBALS['debug_objets']['code'][$nom.$id] = $boucle->return; |
|
| 1337 | 1330 | } |
| 1338 | 1331 | } |
| 1339 | 1332 | |
@@ -1356,7 +1349,7 @@ discard block |
||
| 1356 | 1349 | } |
| 1357 | 1350 | } |
| 1358 | 1351 | foreach ($boucles as $id => $boucle) { |
| 1359 | - $GLOBALS['debug_objets']['boucle'][$nom . $id] = $boucle; |
|
| 1352 | + $GLOBALS['debug_objets']['boucle'][$nom.$id] = $boucle; |
|
| 1360 | 1353 | } |
| 1361 | 1354 | $descr['documents'] = compile_inclure_doublons($squelette); |
| 1362 | 1355 | |
@@ -1440,8 +1433,7 @@ discard block |
||
| 1440 | 1433 | } else { |
| 1441 | 1434 | $boucles[$id]->type_requete = false; |
| 1442 | 1435 | $boucle = $boucles[$id]; |
| 1443 | - $x = (!$boucle->sql_serveur ? '' : |
|
| 1444 | - ($boucle->sql_serveur . ":")) . |
|
| 1436 | + $x = (!$boucle->sql_serveur ? '' : ($boucle->sql_serveur.":")). |
|
| 1445 | 1437 | $type; |
| 1446 | 1438 | $msg = array( |
| 1447 | 1439 | 'zbug_table_inconnue', |
@@ -1527,13 +1519,13 @@ discard block |
||
| 1527 | 1519 | if ( |
| 1528 | 1520 | // fonction de boucle avec serveur & table |
| 1529 | 1521 | (!$serveur or |
| 1530 | - ((!function_exists($f = "boucle_" . $serveur . "_" . $table)) |
|
| 1531 | - and (!function_exists($f = $f . "_dist")) |
|
| 1522 | + ((!function_exists($f = "boucle_".$serveur."_".$table)) |
|
| 1523 | + and (!function_exists($f = $f."_dist")) |
|
| 1532 | 1524 | ) |
| 1533 | 1525 | ) |
| 1534 | 1526 | // fonction de boucle avec table |
| 1535 | - and (!function_exists($f = "boucle_" . $table)) |
|
| 1536 | - and (!function_exists($f = $f . "_dist")) |
|
| 1527 | + and (!function_exists($f = "boucle_".$table)) |
|
| 1528 | + and (!function_exists($f = $f."_dist")) |
|
| 1537 | 1529 | ) { |
| 1538 | 1530 | // fonction de boucle standard |
| 1539 | 1531 | if (!function_exists($f = 'boucle_DEFAUT')) { |
@@ -1541,20 +1533,20 @@ discard block |
||
| 1541 | 1533 | } |
| 1542 | 1534 | } |
| 1543 | 1535 | |
| 1544 | - $req = "\n\n\tstatic \$command = array();\n\t" . |
|
| 1545 | - "static \$connect;\n\t" . |
|
| 1546 | - "\$command['connect'] = \$connect = " . |
|
| 1547 | - _q($boucle->sql_serveur) . |
|
| 1548 | - ";" . |
|
| 1536 | + $req = "\n\n\tstatic \$command = array();\n\t". |
|
| 1537 | + "static \$connect;\n\t". |
|
| 1538 | + "\$command['connect'] = \$connect = ". |
|
| 1539 | + _q($boucle->sql_serveur). |
|
| 1540 | + ";". |
|
| 1549 | 1541 | $f($id, $boucles); |
| 1550 | 1542 | } else { |
| 1551 | 1543 | $req = ("\n\treturn '';"); |
| 1552 | 1544 | } |
| 1553 | 1545 | |
| 1554 | 1546 | $boucles[$id]->return = |
| 1555 | - "\n\nfunction BOUCLE" . strtr($id, "-", "_") . $nom . |
|
| 1556 | - '(&$Cache, &$Pile, &$doublons, &$Numrows, $SP) {' . |
|
| 1557 | - $req . |
|
| 1547 | + "\n\nfunction BOUCLE".strtr($id, "-", "_").$nom. |
|
| 1548 | + '(&$Cache, &$Pile, &$doublons, &$Numrows, $SP) {'. |
|
| 1549 | + $req. |
|
| 1558 | 1550 | "\n}\n"; |
| 1559 | 1551 | } |
| 1560 | 1552 | |
@@ -1564,7 +1556,7 @@ discard block |
||
| 1564 | 1556 | return false; |
| 1565 | 1557 | } |
| 1566 | 1558 | |
| 1567 | - $principal = "\nfunction " . $nom . '($Cache, $Pile, $doublons = array(), $Numrows = array(), $SP = 0) { |
|
| 1559 | + $principal = "\nfunction ".$nom.'($Cache, $Pile, $doublons = array(), $Numrows = array(), $SP = 0) { |
|
| 1568 | 1560 | ' |
| 1569 | 1561 | // reporter de maniere securisee les doublons inclus |
| 1570 | 1562 | . ' |
@@ -1572,15 +1564,15 @@ discard block |
||
| 1572 | 1564 | $doublons = nettoyer_env_doublons($Pile[0]["doublons"]); |
| 1573 | 1565 | |
| 1574 | 1566 | $connect = ' . |
| 1575 | - _q($connect) . '; |
|
| 1567 | + _q($connect).'; |
|
| 1576 | 1568 | $page = ' . |
| 1577 | 1569 | // ATTENTION, le calcul de l'expression $corps affectera $Cache |
| 1578 | 1570 | // c'est pourquoi on l'affecte a la variable auxiliaire $page. |
| 1579 | 1571 | // avant de referencer $Cache |
| 1580 | - $corps . "; |
|
| 1572 | + $corps."; |
|
| 1581 | 1573 | |
| 1582 | 1574 | return analyse_resultat_skel(" . var_export($nom, true) |
| 1583 | - . ", \$Cache, \$page, " . var_export($sourcefile, true) . "); |
|
| 1575 | + . ", \$Cache, \$page, ".var_export($sourcefile, true)."); |
|
| 1584 | 1576 | }"; |
| 1585 | 1577 | |
| 1586 | 1578 | $secondes = spip_timer('calcul_skel'); |
@@ -1594,10 +1586,10 @@ discard block |
||
| 1594 | 1586 | $code->return = ' |
| 1595 | 1587 | // |
| 1596 | 1588 | // Fonction principale du squelette ' . |
| 1597 | - $sourcefile . |
|
| 1598 | - ($connect ? " pour $connect" : '') . |
|
| 1599 | - (!CODE_COMMENTE ? '' : "\n// Temps de compilation total: $secondes") . |
|
| 1600 | - "\n//\n" . |
|
| 1589 | + $sourcefile. |
|
| 1590 | + ($connect ? " pour $connect" : ''). |
|
| 1591 | + (!CODE_COMMENTE ? '' : "\n// Temps de compilation total: $secondes"). |
|
| 1592 | + "\n//\n". |
|
| 1601 | 1593 | $principal; |
| 1602 | 1594 | |
| 1603 | 1595 | $boucles[''] = $code; |
@@ -1649,7 +1641,7 @@ discard block |
||
| 1649 | 1641 | **/ |
| 1650 | 1642 | function requeteur_data_dist(&$boucles, &$boucle, &$id) { |
| 1651 | 1643 | include_spip('iterateur/data'); |
| 1652 | - if ($h = charger_fonction($boucle->type_requete . '_to_array', 'inc', true)) { |
|
| 1644 | + if ($h = charger_fonction($boucle->type_requete.'_to_array', 'inc', true)) { |
|
| 1653 | 1645 | $g = charger_fonction('data', 'iterateur'); |
| 1654 | 1646 | $boucles[$id] = $g($boucle); |
| 1655 | 1647 | // from[0] stocke le type de data (rss, yql, ...) |
@@ -4,118 +4,118 @@ |
||
| 4 | 4 | // ** ne pas modifier le fichier ** |
| 5 | 5 | |
| 6 | 6 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 7 | - return; |
|
| 7 | + return; |
|
| 8 | 8 | } |
| 9 | 9 | |
| 10 | 10 | $GLOBALS[$GLOBALS['idx_lang']] = array( |
| 11 | 11 | |
| 12 | - // A |
|
| 13 | - 'accueil_site' => 'Acuèlh', |
|
| 14 | - 'article' => 'Article', |
|
| 15 | - 'articles' => 'Articles', |
|
| 16 | - 'articles_auteur' => 'Articles d’aquel autor', |
|
| 17 | - 'articles_populaires' => 'Lu articles mai populars', |
|
| 18 | - 'articles_rubrique' => 'Articles d’aquela rubrica', |
|
| 19 | - 'aucun_article' => 'Li a minga d’article à-n-aquela adreça', |
|
| 20 | - 'aucun_auteur' => 'Li a minga d’autor à-n-aquela adreça', |
|
| 21 | - 'aucun_site' => 'Li a minga de site à-n-aquela adreça', |
|
| 22 | - 'aucune_breve' => 'Li a minga de brèva à-n-aquela adreça', |
|
| 23 | - 'aucune_rubrique' => 'Li a minga de rubrica à-n-aquela adreça', |
|
| 24 | - 'auteur' => 'Autor', |
|
| 25 | - 'autres' => 'Autres', |
|
| 26 | - 'autres_breves' => 'Autri brèvas', |
|
| 27 | - 'autres_groupes_mots_clefs' => 'Autres grops de mòts claus', |
|
| 28 | - 'autres_sites' => 'Autres sites', |
|
| 29 | - |
|
| 30 | - // B |
|
| 31 | - 'bonjour' => 'Boanjorn', |
|
| 32 | - |
|
| 33 | - // C |
|
| 34 | - 'commenter_site' => 'Comentar aqueu site', |
|
| 35 | - 'contact' => 'Contacte', |
|
| 36 | - 'copie_document_impossible' => 'Impossible de copiar lo document', |
|
| 37 | - |
|
| 38 | - // D |
|
| 39 | - 'date' => 'Data', |
|
| 40 | - 'dernier_ajout' => 'Darrier ajust', |
|
| 41 | - 'dernieres_breves' => 'Darrieras brèvas', |
|
| 42 | - 'derniers_articles' => 'Darriers articles', |
|
| 43 | - 'derniers_commentaires' => 'Darriers comentaris', |
|
| 44 | - 'derniers_messages_forum' => 'Darriers messatges publicats dins lu fòros', |
|
| 45 | - |
|
| 46 | - // E |
|
| 47 | - 'edition_mode_texte' => 'Edicion en mòde tèxt de', |
|
| 48 | - 'en_reponse' => 'En respoasta à:', |
|
| 49 | - 'en_resume' => 'En resumit', |
|
| 50 | - 'envoyer_message' => 'Mandar un messatge', |
|
| 51 | - 'espace_prive' => 'Espaci privat', |
|
| 52 | - |
|
| 53 | - // F |
|
| 54 | - 'formats_acceptes' => 'Formats acceptats : @formats@.', |
|
| 55 | - |
|
| 56 | - // H |
|
| 57 | - 'hierarchie_site' => 'Ierarquia dau sit', |
|
| 58 | - |
|
| 59 | - // J |
|
| 60 | - 'jours' => 'jorns', |
|
| 61 | - |
|
| 62 | - // L |
|
| 63 | - 'lien_connecter' => 'Si conectar', |
|
| 64 | - |
|
| 65 | - // M |
|
| 66 | - 'meme_auteur' => 'Dau meme autor', |
|
| 67 | - 'meme_rubrique' => 'Dins la mema rubrica', |
|
| 68 | - 'memes_auteurs' => 'Dei memes autors', |
|
| 69 | - 'message' => 'Messatge', |
|
| 70 | - 'messages_forum' => 'Messatges', |
|
| 71 | - 'messages_recents' => 'Lu messatges de fòros mai recents', |
|
| 72 | - 'mots_clef' => 'Mòt-clau', |
|
| 73 | - 'mots_clefs' => 'Mòts-claus', |
|
| 74 | - 'mots_clefs_meme_groupe' => 'Mòts-claus dins lo meme grop', |
|
| 75 | - |
|
| 76 | - // N |
|
| 77 | - 'navigation' => 'Navigacion', |
|
| 78 | - 'nom' => 'Nom', |
|
| 79 | - 'nouveautes' => 'Li novèutats', |
|
| 80 | - 'nouveautes_web' => 'Novèutats sus lo oèb', |
|
| 81 | - 'nouveaux_articles' => 'Articles nòus', |
|
| 82 | - 'nouvelles_breves' => 'Brèvas novèlas', |
|
| 83 | - |
|
| 84 | - // P |
|
| 85 | - 'page_precedente' => 'pàgina anteriora', |
|
| 86 | - 'page_suivante' => 'pàgina seguenta', |
|
| 87 | - 'par_auteur' => 'da', |
|
| 88 | - 'participer_site' => 'Podètz participar à la vida d’aqueu sit e prepauar lu voastres articles en vos inscrivent çai sota. Receberètz un e-mail que v’indicarà lu voastres còdes per accedir à l’espaci privat dau sit.', |
|
| 89 | - 'plan_site' => 'Plan dau site', |
|
| 90 | - 'popularite' => 'Popularitat', |
|
| 91 | - 'poster_message' => 'Postar un messatge', |
|
| 92 | - 'proposer_site' => 'Podètz prepauar un site à ajustar en aquela rubrica:', |
|
| 93 | - |
|
| 94 | - // R |
|
| 95 | - 'repondre_article' => 'Respoandre à-n-aquel article', |
|
| 96 | - 'repondre_breve' => 'Respoandre à-n-aquela brèva', |
|
| 97 | - 'resultats_recherche' => 'Resultats de la recèrca', |
|
| 98 | - 'retour_debut_forums' => 'Retorn au començament dei fòros', |
|
| 99 | - 'rubrique' => 'Rubrica', |
|
| 100 | - 'rubriques' => 'Rubricas', |
|
| 101 | - |
|
| 102 | - // S |
|
| 103 | - 'signatures_petition' => 'Firmas', |
|
| 104 | - 'site_realise_avec_spip' => 'Sit realisat embé SPIP', |
|
| 105 | - 'sites_web' => 'Sits web', |
|
| 106 | - 'sous_rubriques' => 'Sosrubricas', |
|
| 107 | - 'spam' => 'Espam', |
|
| 108 | - 'suite' => 'seguida', |
|
| 109 | - 'sur_web' => 'Sus lo oèb', |
|
| 110 | - 'syndiquer_rubrique' => 'Sindicar aquela rubrica', |
|
| 111 | - 'syndiquer_site' => 'Sindicar tot lo sit', |
|
| 112 | - |
|
| 113 | - // T |
|
| 114 | - 'texte_lettre_information' => 'Vequí la letra d’informacion dau sit', |
|
| 115 | - 'texte_lettre_information_2' => 'Aquela letra recensa li noveutas publicadi despí', |
|
| 116 | - |
|
| 117 | - // V |
|
| 118 | - 'ver_imprimer' => 'Version d’estampar', |
|
| 119 | - 'voir_en_ligne' => 'Vejatz en linha', |
|
| 120 | - 'voir_squelette' => 'veire l’esqueleta d’aquela pàgina' |
|
| 12 | + // A |
|
| 13 | + 'accueil_site' => 'Acuèlh', |
|
| 14 | + 'article' => 'Article', |
|
| 15 | + 'articles' => 'Articles', |
|
| 16 | + 'articles_auteur' => 'Articles d’aquel autor', |
|
| 17 | + 'articles_populaires' => 'Lu articles mai populars', |
|
| 18 | + 'articles_rubrique' => 'Articles d’aquela rubrica', |
|
| 19 | + 'aucun_article' => 'Li a minga d’article à-n-aquela adreça', |
|
| 20 | + 'aucun_auteur' => 'Li a minga d’autor à-n-aquela adreça', |
|
| 21 | + 'aucun_site' => 'Li a minga de site à-n-aquela adreça', |
|
| 22 | + 'aucune_breve' => 'Li a minga de brèva à-n-aquela adreça', |
|
| 23 | + 'aucune_rubrique' => 'Li a minga de rubrica à-n-aquela adreça', |
|
| 24 | + 'auteur' => 'Autor', |
|
| 25 | + 'autres' => 'Autres', |
|
| 26 | + 'autres_breves' => 'Autri brèvas', |
|
| 27 | + 'autres_groupes_mots_clefs' => 'Autres grops de mòts claus', |
|
| 28 | + 'autres_sites' => 'Autres sites', |
|
| 29 | + |
|
| 30 | + // B |
|
| 31 | + 'bonjour' => 'Boanjorn', |
|
| 32 | + |
|
| 33 | + // C |
|
| 34 | + 'commenter_site' => 'Comentar aqueu site', |
|
| 35 | + 'contact' => 'Contacte', |
|
| 36 | + 'copie_document_impossible' => 'Impossible de copiar lo document', |
|
| 37 | + |
|
| 38 | + // D |
|
| 39 | + 'date' => 'Data', |
|
| 40 | + 'dernier_ajout' => 'Darrier ajust', |
|
| 41 | + 'dernieres_breves' => 'Darrieras brèvas', |
|
| 42 | + 'derniers_articles' => 'Darriers articles', |
|
| 43 | + 'derniers_commentaires' => 'Darriers comentaris', |
|
| 44 | + 'derniers_messages_forum' => 'Darriers messatges publicats dins lu fòros', |
|
| 45 | + |
|
| 46 | + // E |
|
| 47 | + 'edition_mode_texte' => 'Edicion en mòde tèxt de', |
|
| 48 | + 'en_reponse' => 'En respoasta à:', |
|
| 49 | + 'en_resume' => 'En resumit', |
|
| 50 | + 'envoyer_message' => 'Mandar un messatge', |
|
| 51 | + 'espace_prive' => 'Espaci privat', |
|
| 52 | + |
|
| 53 | + // F |
|
| 54 | + 'formats_acceptes' => 'Formats acceptats : @formats@.', |
|
| 55 | + |
|
| 56 | + // H |
|
| 57 | + 'hierarchie_site' => 'Ierarquia dau sit', |
|
| 58 | + |
|
| 59 | + // J |
|
| 60 | + 'jours' => 'jorns', |
|
| 61 | + |
|
| 62 | + // L |
|
| 63 | + 'lien_connecter' => 'Si conectar', |
|
| 64 | + |
|
| 65 | + // M |
|
| 66 | + 'meme_auteur' => 'Dau meme autor', |
|
| 67 | + 'meme_rubrique' => 'Dins la mema rubrica', |
|
| 68 | + 'memes_auteurs' => 'Dei memes autors', |
|
| 69 | + 'message' => 'Messatge', |
|
| 70 | + 'messages_forum' => 'Messatges', |
|
| 71 | + 'messages_recents' => 'Lu messatges de fòros mai recents', |
|
| 72 | + 'mots_clef' => 'Mòt-clau', |
|
| 73 | + 'mots_clefs' => 'Mòts-claus', |
|
| 74 | + 'mots_clefs_meme_groupe' => 'Mòts-claus dins lo meme grop', |
|
| 75 | + |
|
| 76 | + // N |
|
| 77 | + 'navigation' => 'Navigacion', |
|
| 78 | + 'nom' => 'Nom', |
|
| 79 | + 'nouveautes' => 'Li novèutats', |
|
| 80 | + 'nouveautes_web' => 'Novèutats sus lo oèb', |
|
| 81 | + 'nouveaux_articles' => 'Articles nòus', |
|
| 82 | + 'nouvelles_breves' => 'Brèvas novèlas', |
|
| 83 | + |
|
| 84 | + // P |
|
| 85 | + 'page_precedente' => 'pàgina anteriora', |
|
| 86 | + 'page_suivante' => 'pàgina seguenta', |
|
| 87 | + 'par_auteur' => 'da', |
|
| 88 | + 'participer_site' => 'Podètz participar à la vida d’aqueu sit e prepauar lu voastres articles en vos inscrivent çai sota. Receberètz un e-mail que v’indicarà lu voastres còdes per accedir à l’espaci privat dau sit.', |
|
| 89 | + 'plan_site' => 'Plan dau site', |
|
| 90 | + 'popularite' => 'Popularitat', |
|
| 91 | + 'poster_message' => 'Postar un messatge', |
|
| 92 | + 'proposer_site' => 'Podètz prepauar un site à ajustar en aquela rubrica:', |
|
| 93 | + |
|
| 94 | + // R |
|
| 95 | + 'repondre_article' => 'Respoandre à-n-aquel article', |
|
| 96 | + 'repondre_breve' => 'Respoandre à-n-aquela brèva', |
|
| 97 | + 'resultats_recherche' => 'Resultats de la recèrca', |
|
| 98 | + 'retour_debut_forums' => 'Retorn au començament dei fòros', |
|
| 99 | + 'rubrique' => 'Rubrica', |
|
| 100 | + 'rubriques' => 'Rubricas', |
|
| 101 | + |
|
| 102 | + // S |
|
| 103 | + 'signatures_petition' => 'Firmas', |
|
| 104 | + 'site_realise_avec_spip' => 'Sit realisat embé SPIP', |
|
| 105 | + 'sites_web' => 'Sits web', |
|
| 106 | + 'sous_rubriques' => 'Sosrubricas', |
|
| 107 | + 'spam' => 'Espam', |
|
| 108 | + 'suite' => 'seguida', |
|
| 109 | + 'sur_web' => 'Sus lo oèb', |
|
| 110 | + 'syndiquer_rubrique' => 'Sindicar aquela rubrica', |
|
| 111 | + 'syndiquer_site' => 'Sindicar tot lo sit', |
|
| 112 | + |
|
| 113 | + // T |
|
| 114 | + 'texte_lettre_information' => 'Vequí la letra d’informacion dau sit', |
|
| 115 | + 'texte_lettre_information_2' => 'Aquela letra recensa li noveutas publicadi despí', |
|
| 116 | + |
|
| 117 | + // V |
|
| 118 | + 'ver_imprimer' => 'Version d’estampar', |
|
| 119 | + 'voir_en_ligne' => 'Vejatz en linha', |
|
| 120 | + 'voir_squelette' => 'veire l’esqueleta d’aquela pàgina' |
|
| 121 | 121 | ); |
@@ -15,7 +15,7 @@ discard block |
||
| 15 | 15 | * @package SPIP\Core\Formulaires |
| 16 | 16 | **/ |
| 17 | 17 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 18 | - return; |
|
| 18 | + return; |
|
| 19 | 19 | } |
| 20 | 20 | |
| 21 | 21 | |
@@ -35,25 +35,25 @@ discard block |
||
| 35 | 35 | * ($table_source,$objet,$id_objet,$objet_lien) |
| 36 | 36 | */ |
| 37 | 37 | function determine_source_lien_objet($a, $b, $c) { |
| 38 | - $table_source = $objet_lien = $objet = $id_objet = null; |
|
| 39 | - // auteurs, article, 23 : |
|
| 40 | - // associer des auteurs à l'article 23, sur la table pivot spip_auteurs_liens |
|
| 41 | - if (is_numeric($c) and !is_numeric($b)) { |
|
| 42 | - $table_source = table_objet($a); |
|
| 43 | - $objet_lien = objet_type($a); |
|
| 44 | - $objet = objet_type($b); |
|
| 45 | - $id_objet = $c; |
|
| 46 | - } |
|
| 47 | - // article, 23, auteurs |
|
| 48 | - // associer des auteurs à l'article 23, sur la table pivot spip_articles_liens |
|
| 49 | - if (is_numeric($b) and !is_numeric($c)) { |
|
| 50 | - $table_source = table_objet($c); |
|
| 51 | - $objet_lien = objet_type($a); |
|
| 52 | - $objet = objet_type($a); |
|
| 53 | - $id_objet = $b; |
|
| 54 | - } |
|
| 55 | - |
|
| 56 | - return array($table_source, $objet, $id_objet, $objet_lien); |
|
| 38 | + $table_source = $objet_lien = $objet = $id_objet = null; |
|
| 39 | + // auteurs, article, 23 : |
|
| 40 | + // associer des auteurs à l'article 23, sur la table pivot spip_auteurs_liens |
|
| 41 | + if (is_numeric($c) and !is_numeric($b)) { |
|
| 42 | + $table_source = table_objet($a); |
|
| 43 | + $objet_lien = objet_type($a); |
|
| 44 | + $objet = objet_type($b); |
|
| 45 | + $id_objet = $c; |
|
| 46 | + } |
|
| 47 | + // article, 23, auteurs |
|
| 48 | + // associer des auteurs à l'article 23, sur la table pivot spip_articles_liens |
|
| 49 | + if (is_numeric($b) and !is_numeric($c)) { |
|
| 50 | + $table_source = table_objet($c); |
|
| 51 | + $objet_lien = objet_type($a); |
|
| 52 | + $objet = objet_type($a); |
|
| 53 | + $id_objet = $b; |
|
| 54 | + } |
|
| 55 | + |
|
| 56 | + return array($table_source, $objet, $id_objet, $objet_lien); |
|
| 57 | 57 | } |
| 58 | 58 | |
| 59 | 59 | /** |
@@ -79,91 +79,91 @@ discard block |
||
| 79 | 79 | */ |
| 80 | 80 | function formulaires_editer_liens_charger_dist($a, $b, $c, $options = array()) { |
| 81 | 81 | |
| 82 | - // compat avec ancienne signature ou le 4eme argument est $editable |
|
| 83 | - if (!is_array($options)) { |
|
| 84 | - $options = array('editable' => $options); |
|
| 85 | - } elseif (!isset($options['editable'])) { |
|
| 86 | - $options['editable'] = true; |
|
| 87 | - } |
|
| 88 | - |
|
| 89 | - $editable = $options['editable']; |
|
| 90 | - |
|
| 91 | - list($table_source, $objet, $id_objet, $objet_lien) = determine_source_lien_objet($a, $b, $c); |
|
| 92 | - if (!$table_source or !$objet or !$objet_lien or !$id_objet) { |
|
| 93 | - return false; |
|
| 94 | - } |
|
| 95 | - |
|
| 96 | - $objet_source = objet_type($table_source); |
|
| 97 | - $table_sql_source = table_objet_sql($objet_source); |
|
| 98 | - |
|
| 99 | - // verifier existence de la table xxx_liens |
|
| 100 | - include_spip('action/editer_liens'); |
|
| 101 | - if (!objet_associable($objet_lien)) { |
|
| 102 | - return false; |
|
| 103 | - } |
|
| 104 | - |
|
| 105 | - // L'éditabilité :) est définie par un test permanent (par exemple "associermots") ET le 4ème argument |
|
| 106 | - include_spip('inc/autoriser'); |
|
| 107 | - $editable = ($editable and autoriser('associer' . $table_source, $objet, $id_objet) |
|
| 108 | - and autoriser('modifier', $objet, $id_objet)); |
|
| 109 | - |
|
| 110 | - if (!$editable and !count(objet_trouver_liens( |
|
| 111 | - array($objet_lien => '*'), |
|
| 112 | - array(($objet_lien == $objet_source ? $objet : $objet_source) => $id_objet) |
|
| 113 | - ))) { |
|
| 114 | - return false; |
|
| 115 | - } |
|
| 116 | - |
|
| 117 | - // squelettes de vue et de d'association |
|
| 118 | - // ils sont différents si des rôles sont définis. |
|
| 119 | - $skel_vue = $table_source . '_lies'; |
|
| 120 | - $skel_ajout = $table_source . '_associer'; |
|
| 121 | - |
|
| 122 | - // description des roles |
|
| 123 | - include_spip('inc/roles'); |
|
| 124 | - if ($roles = roles_presents($objet_source, $objet)) { |
|
| 125 | - // on demande de nouveaux squelettes en conséquence |
|
| 126 | - $skel_vue = $table_source . '_roles_lies'; |
|
| 127 | - $skel_ajout = $table_source . '_roles_associer'; |
|
| 128 | - } |
|
| 129 | - |
|
| 130 | - $oups = _request('_oups'); |
|
| 131 | - if (unserialize(base64_decode($oups))) { |
|
| 132 | - // on est bon, rien a faire |
|
| 133 | - } |
|
| 134 | - elseif(unserialize($oups)) { |
|
| 135 | - // il faut encoder |
|
| 136 | - $oups = base64_encode($oups); |
|
| 137 | - } |
|
| 138 | - else { |
|
| 139 | - $oups = ''; |
|
| 140 | - } |
|
| 141 | - $valeurs = array( |
|
| 142 | - 'id' => "$table_source-$objet-$id_objet-$objet_lien", // identifiant unique pour les id du form |
|
| 143 | - '_vue_liee' => $skel_vue, |
|
| 144 | - '_vue_ajout' => $skel_ajout, |
|
| 145 | - '_objet_lien' => $objet_lien, |
|
| 146 | - 'id_lien_ajoute' => _request('id_lien_ajoute'), |
|
| 147 | - 'objet' => $objet, |
|
| 148 | - 'id_objet' => $id_objet, |
|
| 149 | - 'objet_source' => $objet_source, |
|
| 150 | - 'table_source' => $table_source, |
|
| 151 | - 'recherche' => '', |
|
| 152 | - 'visible' => 0, |
|
| 153 | - 'ajouter_lien' => '', |
|
| 154 | - 'supprimer_lien' => '', |
|
| 155 | - 'qualifier_lien' => '', |
|
| 156 | - 'ordonner_lien' => '', |
|
| 157 | - 'desordonner_liens' => '', |
|
| 158 | - '_roles' => $roles, # description des roles |
|
| 159 | - '_oups' => $oups, |
|
| 160 | - 'editable' => $editable, |
|
| 161 | - ); |
|
| 162 | - |
|
| 163 | - // les options non definies dans $valeurs sont passees telles quelles au formulaire html |
|
| 164 | - $valeurs = array_merge($options, $valeurs); |
|
| 165 | - |
|
| 166 | - return $valeurs; |
|
| 82 | + // compat avec ancienne signature ou le 4eme argument est $editable |
|
| 83 | + if (!is_array($options)) { |
|
| 84 | + $options = array('editable' => $options); |
|
| 85 | + } elseif (!isset($options['editable'])) { |
|
| 86 | + $options['editable'] = true; |
|
| 87 | + } |
|
| 88 | + |
|
| 89 | + $editable = $options['editable']; |
|
| 90 | + |
|
| 91 | + list($table_source, $objet, $id_objet, $objet_lien) = determine_source_lien_objet($a, $b, $c); |
|
| 92 | + if (!$table_source or !$objet or !$objet_lien or !$id_objet) { |
|
| 93 | + return false; |
|
| 94 | + } |
|
| 95 | + |
|
| 96 | + $objet_source = objet_type($table_source); |
|
| 97 | + $table_sql_source = table_objet_sql($objet_source); |
|
| 98 | + |
|
| 99 | + // verifier existence de la table xxx_liens |
|
| 100 | + include_spip('action/editer_liens'); |
|
| 101 | + if (!objet_associable($objet_lien)) { |
|
| 102 | + return false; |
|
| 103 | + } |
|
| 104 | + |
|
| 105 | + // L'éditabilité :) est définie par un test permanent (par exemple "associermots") ET le 4ème argument |
|
| 106 | + include_spip('inc/autoriser'); |
|
| 107 | + $editable = ($editable and autoriser('associer' . $table_source, $objet, $id_objet) |
|
| 108 | + and autoriser('modifier', $objet, $id_objet)); |
|
| 109 | + |
|
| 110 | + if (!$editable and !count(objet_trouver_liens( |
|
| 111 | + array($objet_lien => '*'), |
|
| 112 | + array(($objet_lien == $objet_source ? $objet : $objet_source) => $id_objet) |
|
| 113 | + ))) { |
|
| 114 | + return false; |
|
| 115 | + } |
|
| 116 | + |
|
| 117 | + // squelettes de vue et de d'association |
|
| 118 | + // ils sont différents si des rôles sont définis. |
|
| 119 | + $skel_vue = $table_source . '_lies'; |
|
| 120 | + $skel_ajout = $table_source . '_associer'; |
|
| 121 | + |
|
| 122 | + // description des roles |
|
| 123 | + include_spip('inc/roles'); |
|
| 124 | + if ($roles = roles_presents($objet_source, $objet)) { |
|
| 125 | + // on demande de nouveaux squelettes en conséquence |
|
| 126 | + $skel_vue = $table_source . '_roles_lies'; |
|
| 127 | + $skel_ajout = $table_source . '_roles_associer'; |
|
| 128 | + } |
|
| 129 | + |
|
| 130 | + $oups = _request('_oups'); |
|
| 131 | + if (unserialize(base64_decode($oups))) { |
|
| 132 | + // on est bon, rien a faire |
|
| 133 | + } |
|
| 134 | + elseif(unserialize($oups)) { |
|
| 135 | + // il faut encoder |
|
| 136 | + $oups = base64_encode($oups); |
|
| 137 | + } |
|
| 138 | + else { |
|
| 139 | + $oups = ''; |
|
| 140 | + } |
|
| 141 | + $valeurs = array( |
|
| 142 | + 'id' => "$table_source-$objet-$id_objet-$objet_lien", // identifiant unique pour les id du form |
|
| 143 | + '_vue_liee' => $skel_vue, |
|
| 144 | + '_vue_ajout' => $skel_ajout, |
|
| 145 | + '_objet_lien' => $objet_lien, |
|
| 146 | + 'id_lien_ajoute' => _request('id_lien_ajoute'), |
|
| 147 | + 'objet' => $objet, |
|
| 148 | + 'id_objet' => $id_objet, |
|
| 149 | + 'objet_source' => $objet_source, |
|
| 150 | + 'table_source' => $table_source, |
|
| 151 | + 'recherche' => '', |
|
| 152 | + 'visible' => 0, |
|
| 153 | + 'ajouter_lien' => '', |
|
| 154 | + 'supprimer_lien' => '', |
|
| 155 | + 'qualifier_lien' => '', |
|
| 156 | + 'ordonner_lien' => '', |
|
| 157 | + 'desordonner_liens' => '', |
|
| 158 | + '_roles' => $roles, # description des roles |
|
| 159 | + '_oups' => $oups, |
|
| 160 | + 'editable' => $editable, |
|
| 161 | + ); |
|
| 162 | + |
|
| 163 | + // les options non definies dans $valeurs sont passees telles quelles au formulaire html |
|
| 164 | + $valeurs = array_merge($options, $valeurs); |
|
| 165 | + |
|
| 166 | + return $valeurs; |
|
| 167 | 167 | } |
| 168 | 168 | |
| 169 | 169 | /** |
@@ -207,161 +207,161 @@ discard block |
||
| 207 | 207 | * @return array |
| 208 | 208 | */ |
| 209 | 209 | function formulaires_editer_liens_traiter_dist($a, $b, $c, $options = array()) { |
| 210 | - // compat avec ancienne signature ou le 4eme argument est $editable |
|
| 211 | - if (!is_array($options)) { |
|
| 212 | - $options = array('editable' => $options); |
|
| 213 | - } elseif (!isset($options['editable'])) { |
|
| 214 | - $options['editable'] = true; |
|
| 215 | - } |
|
| 216 | - |
|
| 217 | - $editable = $options['editable']; |
|
| 218 | - |
|
| 219 | - $res = array('editable' => $editable ? true : false); |
|
| 220 | - list($table_source, $objet, $id_objet, $objet_lien) = determine_source_lien_objet($a, $b, $c); |
|
| 221 | - if (!$table_source or !$objet or !$objet_lien) { |
|
| 222 | - return $res; |
|
| 223 | - } |
|
| 224 | - |
|
| 225 | - |
|
| 226 | - if (_request('tout_voir')) { |
|
| 227 | - set_request('recherche', ''); |
|
| 228 | - } |
|
| 229 | - |
|
| 230 | - include_spip('inc/autoriser'); |
|
| 231 | - if (autoriser('modifier', $objet, $id_objet)) { |
|
| 232 | - // annuler les suppressions du coup d'avant ! |
|
| 233 | - if (_request('annuler_oups') |
|
| 234 | - and $oups = _request('_oups') |
|
| 235 | - and $oups = base64_decode($oups) |
|
| 236 | - and $oups = unserialize($oups) |
|
| 237 | - ) { |
|
| 238 | - if ($oups_objets = charger_fonction("editer_liens_oups_{$table_source}_{$objet}_{$objet_lien}", 'action', true)) { |
|
| 239 | - $oups_objets($oups); |
|
| 240 | - } else { |
|
| 241 | - $objet_source = objet_type($table_source); |
|
| 242 | - include_spip('action/editer_liens'); |
|
| 243 | - foreach ($oups as $oup) { |
|
| 244 | - if ($objet_lien == $objet_source) { |
|
| 245 | - objet_associer(array($objet_source => $oup[$objet_source]), array($objet => $oup[$objet]), $oup); |
|
| 246 | - } else { |
|
| 247 | - objet_associer(array($objet => $oup[$objet]), array($objet_source => $oup[$objet_source]), $oup); |
|
| 248 | - } |
|
| 249 | - } |
|
| 250 | - } |
|
| 251 | - # oups ne persiste que pour la derniere action, si suppression |
|
| 252 | - set_request('_oups'); |
|
| 253 | - } |
|
| 254 | - |
|
| 255 | - $supprimer = _request('supprimer_lien'); |
|
| 256 | - $ajouter = _request('ajouter_lien'); |
|
| 257 | - $ordonner = _request('ordonner_lien'); |
|
| 258 | - |
|
| 259 | - if (_request('desordonner_liens')) { |
|
| 260 | - include_spip('action/editer_liens'); |
|
| 261 | - objet_qualifier_liens(array($objet_lien => '*'), array($objet => $id_objet), array('rang_lien' => 0)); |
|
| 262 | - } |
|
| 263 | - |
|
| 264 | - // il est possible de preciser dans une seule variable un remplacement : |
|
| 265 | - // remplacer_lien[old][new] |
|
| 266 | - if ($remplacer = _request('remplacer_lien')) { |
|
| 267 | - foreach ($remplacer as $k => $v) { |
|
| 268 | - if ($old = lien_verifier_action($k, '')) { |
|
| 269 | - foreach (is_array($v) ? $v : array($v) as $kn => $vn) { |
|
| 270 | - if ($new = lien_verifier_action($kn, $vn)) { |
|
| 271 | - $supprimer[$old] = 'x'; |
|
| 272 | - $ajouter[$new] = '+'; |
|
| 273 | - } |
|
| 274 | - } |
|
| 275 | - } |
|
| 276 | - } |
|
| 277 | - } |
|
| 278 | - |
|
| 279 | - if ($supprimer) { |
|
| 280 | - if ($supprimer_objets = charger_fonction( |
|
| 281 | - "editer_liens_supprimer_{$table_source}_{$objet}_{$objet_lien}", |
|
| 282 | - 'action', |
|
| 283 | - true |
|
| 284 | - )) { |
|
| 285 | - $oups = $supprimer_objets($supprimer); |
|
| 286 | - } else { |
|
| 287 | - include_spip('action/editer_liens'); |
|
| 288 | - $oups = array(); |
|
| 289 | - |
|
| 290 | - foreach ($supprimer as $k => $v) { |
|
| 291 | - if ($lien = lien_verifier_action($k, $v)) { |
|
| 292 | - $lien = explode('-', $lien); |
|
| 293 | - list($objet_source, $ids, $objet_lie, $idl, $role) = array_pad($lien, 5, null); |
|
| 294 | - // appliquer une condition sur le rôle si défini ('*' pour tous les roles) |
|
| 295 | - $cond = (!is_null($role) ? array('role' => $role) : array()); |
|
| 296 | - if ($objet_lien == $objet_source) { |
|
| 297 | - $oups = array_merge( |
|
| 298 | - $oups, |
|
| 299 | - objet_trouver_liens(array($objet_source => $ids), array($objet_lie => $idl), $cond) |
|
| 300 | - ); |
|
| 301 | - objet_dissocier(array($objet_source => $ids), array($objet_lie => $idl), $cond); |
|
| 302 | - } else { |
|
| 303 | - $oups = array_merge( |
|
| 304 | - $oups, |
|
| 305 | - objet_trouver_liens(array($objet_lie => $idl), array($objet_source => $ids), $cond) |
|
| 306 | - ); |
|
| 307 | - objet_dissocier(array($objet_lie => $idl), array($objet_source => $ids), $cond); |
|
| 308 | - } |
|
| 309 | - } |
|
| 310 | - } |
|
| 311 | - } |
|
| 312 | - set_request('_oups', $oups ? base64_encode(serialize($oups)) : null); |
|
| 313 | - } |
|
| 314 | - |
|
| 315 | - if ($ajouter) { |
|
| 316 | - if ($ajouter_objets = charger_fonction("editer_liens_ajouter_{$table_source}_{$objet}_{$objet_lien}", 'action', true) |
|
| 317 | - ) { |
|
| 318 | - $ajout_ok = $ajouter_objets($ajouter); |
|
| 319 | - } else { |
|
| 320 | - $ajout_ok = false; |
|
| 321 | - include_spip('action/editer_liens'); |
|
| 322 | - foreach ($ajouter as $k => $v) { |
|
| 323 | - if ($lien = lien_verifier_action($k, $v)) { |
|
| 324 | - $ajout_ok = true; |
|
| 325 | - list($objet1, $ids, $objet2, $idl) = explode('-', $lien); |
|
| 326 | - $qualifs = lien_retrouver_qualif($objet_lien, $lien); |
|
| 327 | - if ($objet_lien == $objet1) { |
|
| 328 | - lien_ajouter_liaisons($objet1, $ids, $objet2, $idl, $qualifs); |
|
| 329 | - } else { |
|
| 330 | - lien_ajouter_liaisons($objet2, $idl, $objet1, $ids, $qualifs); |
|
| 331 | - } |
|
| 332 | - set_request('id_lien_ajoute', $ids); |
|
| 333 | - } |
|
| 334 | - } |
|
| 335 | - } |
|
| 336 | - # oups ne persiste que pour la derniere action, si suppression |
|
| 337 | - # une suppression suivie d'un ajout dans le meme hit est un remplacement |
|
| 338 | - # non annulable ! |
|
| 339 | - if ($ajout_ok) { |
|
| 340 | - set_request('_oups'); |
|
| 341 | - } |
|
| 342 | - } |
|
| 343 | - |
|
| 344 | - if ($ordonner) { |
|
| 345 | - include_spip('action/editer_liens'); |
|
| 346 | - foreach ($ordonner as $k => $rang_lien) { |
|
| 347 | - if ($lien = lien_verifier_action($k, '')) { |
|
| 348 | - list($objet1, $ids, $objet2, $idl) = explode('-', $lien); |
|
| 349 | - $qualif = array('rang_lien' => $rang_lien); |
|
| 350 | - |
|
| 351 | - if ($objet_lien == $objet1) { |
|
| 352 | - objet_qualifier_liens(array($objet1 => $ids), array($objet2 => $idl), $qualif); |
|
| 353 | - } else { |
|
| 354 | - objet_qualifier_liens(array($objet2 => $idl), array($objet1 => $ids), $qualif); |
|
| 355 | - } |
|
| 356 | - set_request('id_lien_ajoute', $ids); |
|
| 357 | - set_request('_oups'); |
|
| 358 | - } |
|
| 359 | - } |
|
| 360 | - } |
|
| 361 | - } |
|
| 362 | - |
|
| 363 | - |
|
| 364 | - return $res; |
|
| 210 | + // compat avec ancienne signature ou le 4eme argument est $editable |
|
| 211 | + if (!is_array($options)) { |
|
| 212 | + $options = array('editable' => $options); |
|
| 213 | + } elseif (!isset($options['editable'])) { |
|
| 214 | + $options['editable'] = true; |
|
| 215 | + } |
|
| 216 | + |
|
| 217 | + $editable = $options['editable']; |
|
| 218 | + |
|
| 219 | + $res = array('editable' => $editable ? true : false); |
|
| 220 | + list($table_source, $objet, $id_objet, $objet_lien) = determine_source_lien_objet($a, $b, $c); |
|
| 221 | + if (!$table_source or !$objet or !$objet_lien) { |
|
| 222 | + return $res; |
|
| 223 | + } |
|
| 224 | + |
|
| 225 | + |
|
| 226 | + if (_request('tout_voir')) { |
|
| 227 | + set_request('recherche', ''); |
|
| 228 | + } |
|
| 229 | + |
|
| 230 | + include_spip('inc/autoriser'); |
|
| 231 | + if (autoriser('modifier', $objet, $id_objet)) { |
|
| 232 | + // annuler les suppressions du coup d'avant ! |
|
| 233 | + if (_request('annuler_oups') |
|
| 234 | + and $oups = _request('_oups') |
|
| 235 | + and $oups = base64_decode($oups) |
|
| 236 | + and $oups = unserialize($oups) |
|
| 237 | + ) { |
|
| 238 | + if ($oups_objets = charger_fonction("editer_liens_oups_{$table_source}_{$objet}_{$objet_lien}", 'action', true)) { |
|
| 239 | + $oups_objets($oups); |
|
| 240 | + } else { |
|
| 241 | + $objet_source = objet_type($table_source); |
|
| 242 | + include_spip('action/editer_liens'); |
|
| 243 | + foreach ($oups as $oup) { |
|
| 244 | + if ($objet_lien == $objet_source) { |
|
| 245 | + objet_associer(array($objet_source => $oup[$objet_source]), array($objet => $oup[$objet]), $oup); |
|
| 246 | + } else { |
|
| 247 | + objet_associer(array($objet => $oup[$objet]), array($objet_source => $oup[$objet_source]), $oup); |
|
| 248 | + } |
|
| 249 | + } |
|
| 250 | + } |
|
| 251 | + # oups ne persiste que pour la derniere action, si suppression |
|
| 252 | + set_request('_oups'); |
|
| 253 | + } |
|
| 254 | + |
|
| 255 | + $supprimer = _request('supprimer_lien'); |
|
| 256 | + $ajouter = _request('ajouter_lien'); |
|
| 257 | + $ordonner = _request('ordonner_lien'); |
|
| 258 | + |
|
| 259 | + if (_request('desordonner_liens')) { |
|
| 260 | + include_spip('action/editer_liens'); |
|
| 261 | + objet_qualifier_liens(array($objet_lien => '*'), array($objet => $id_objet), array('rang_lien' => 0)); |
|
| 262 | + } |
|
| 263 | + |
|
| 264 | + // il est possible de preciser dans une seule variable un remplacement : |
|
| 265 | + // remplacer_lien[old][new] |
|
| 266 | + if ($remplacer = _request('remplacer_lien')) { |
|
| 267 | + foreach ($remplacer as $k => $v) { |
|
| 268 | + if ($old = lien_verifier_action($k, '')) { |
|
| 269 | + foreach (is_array($v) ? $v : array($v) as $kn => $vn) { |
|
| 270 | + if ($new = lien_verifier_action($kn, $vn)) { |
|
| 271 | + $supprimer[$old] = 'x'; |
|
| 272 | + $ajouter[$new] = '+'; |
|
| 273 | + } |
|
| 274 | + } |
|
| 275 | + } |
|
| 276 | + } |
|
| 277 | + } |
|
| 278 | + |
|
| 279 | + if ($supprimer) { |
|
| 280 | + if ($supprimer_objets = charger_fonction( |
|
| 281 | + "editer_liens_supprimer_{$table_source}_{$objet}_{$objet_lien}", |
|
| 282 | + 'action', |
|
| 283 | + true |
|
| 284 | + )) { |
|
| 285 | + $oups = $supprimer_objets($supprimer); |
|
| 286 | + } else { |
|
| 287 | + include_spip('action/editer_liens'); |
|
| 288 | + $oups = array(); |
|
| 289 | + |
|
| 290 | + foreach ($supprimer as $k => $v) { |
|
| 291 | + if ($lien = lien_verifier_action($k, $v)) { |
|
| 292 | + $lien = explode('-', $lien); |
|
| 293 | + list($objet_source, $ids, $objet_lie, $idl, $role) = array_pad($lien, 5, null); |
|
| 294 | + // appliquer une condition sur le rôle si défini ('*' pour tous les roles) |
|
| 295 | + $cond = (!is_null($role) ? array('role' => $role) : array()); |
|
| 296 | + if ($objet_lien == $objet_source) { |
|
| 297 | + $oups = array_merge( |
|
| 298 | + $oups, |
|
| 299 | + objet_trouver_liens(array($objet_source => $ids), array($objet_lie => $idl), $cond) |
|
| 300 | + ); |
|
| 301 | + objet_dissocier(array($objet_source => $ids), array($objet_lie => $idl), $cond); |
|
| 302 | + } else { |
|
| 303 | + $oups = array_merge( |
|
| 304 | + $oups, |
|
| 305 | + objet_trouver_liens(array($objet_lie => $idl), array($objet_source => $ids), $cond) |
|
| 306 | + ); |
|
| 307 | + objet_dissocier(array($objet_lie => $idl), array($objet_source => $ids), $cond); |
|
| 308 | + } |
|
| 309 | + } |
|
| 310 | + } |
|
| 311 | + } |
|
| 312 | + set_request('_oups', $oups ? base64_encode(serialize($oups)) : null); |
|
| 313 | + } |
|
| 314 | + |
|
| 315 | + if ($ajouter) { |
|
| 316 | + if ($ajouter_objets = charger_fonction("editer_liens_ajouter_{$table_source}_{$objet}_{$objet_lien}", 'action', true) |
|
| 317 | + ) { |
|
| 318 | + $ajout_ok = $ajouter_objets($ajouter); |
|
| 319 | + } else { |
|
| 320 | + $ajout_ok = false; |
|
| 321 | + include_spip('action/editer_liens'); |
|
| 322 | + foreach ($ajouter as $k => $v) { |
|
| 323 | + if ($lien = lien_verifier_action($k, $v)) { |
|
| 324 | + $ajout_ok = true; |
|
| 325 | + list($objet1, $ids, $objet2, $idl) = explode('-', $lien); |
|
| 326 | + $qualifs = lien_retrouver_qualif($objet_lien, $lien); |
|
| 327 | + if ($objet_lien == $objet1) { |
|
| 328 | + lien_ajouter_liaisons($objet1, $ids, $objet2, $idl, $qualifs); |
|
| 329 | + } else { |
|
| 330 | + lien_ajouter_liaisons($objet2, $idl, $objet1, $ids, $qualifs); |
|
| 331 | + } |
|
| 332 | + set_request('id_lien_ajoute', $ids); |
|
| 333 | + } |
|
| 334 | + } |
|
| 335 | + } |
|
| 336 | + # oups ne persiste que pour la derniere action, si suppression |
|
| 337 | + # une suppression suivie d'un ajout dans le meme hit est un remplacement |
|
| 338 | + # non annulable ! |
|
| 339 | + if ($ajout_ok) { |
|
| 340 | + set_request('_oups'); |
|
| 341 | + } |
|
| 342 | + } |
|
| 343 | + |
|
| 344 | + if ($ordonner) { |
|
| 345 | + include_spip('action/editer_liens'); |
|
| 346 | + foreach ($ordonner as $k => $rang_lien) { |
|
| 347 | + if ($lien = lien_verifier_action($k, '')) { |
|
| 348 | + list($objet1, $ids, $objet2, $idl) = explode('-', $lien); |
|
| 349 | + $qualif = array('rang_lien' => $rang_lien); |
|
| 350 | + |
|
| 351 | + if ($objet_lien == $objet1) { |
|
| 352 | + objet_qualifier_liens(array($objet1 => $ids), array($objet2 => $idl), $qualif); |
|
| 353 | + } else { |
|
| 354 | + objet_qualifier_liens(array($objet2 => $idl), array($objet1 => $ids), $qualif); |
|
| 355 | + } |
|
| 356 | + set_request('id_lien_ajoute', $ids); |
|
| 357 | + set_request('_oups'); |
|
| 358 | + } |
|
| 359 | + } |
|
| 360 | + } |
|
| 361 | + } |
|
| 362 | + |
|
| 363 | + |
|
| 364 | + return $res; |
|
| 365 | 365 | } |
| 366 | 366 | |
| 367 | 367 | |
@@ -384,24 +384,24 @@ discard block |
||
| 384 | 384 | * @return string Action demandée si trouvée, sinon '' |
| 385 | 385 | */ |
| 386 | 386 | function lien_verifier_action($k, $v) { |
| 387 | - $action = ''; |
|
| 388 | - if (preg_match(',^\w+-[\w*]+-[\w*]+-[\w*]+(-[\w*])?,', $k)) { |
|
| 389 | - $action = $k; |
|
| 390 | - } |
|
| 391 | - if (preg_match(',^\w+-[\w*]+-[\w*]+-[\w*]+(-[\w*])?,', $v)) { |
|
| 392 | - if (is_numeric($k)) { |
|
| 393 | - $action = $v; |
|
| 394 | - } |
|
| 395 | - if (_request($k)) { |
|
| 396 | - $action = $v; |
|
| 397 | - } |
|
| 398 | - } |
|
| 399 | - // ajout un role null fictif (plus pratique) si pas défini |
|
| 400 | - if ($action and count(explode('-', $action)) == 4) { |
|
| 401 | - $action .= '-'; |
|
| 402 | - } |
|
| 403 | - |
|
| 404 | - return $action; |
|
| 387 | + $action = ''; |
|
| 388 | + if (preg_match(',^\w+-[\w*]+-[\w*]+-[\w*]+(-[\w*])?,', $k)) { |
|
| 389 | + $action = $k; |
|
| 390 | + } |
|
| 391 | + if (preg_match(',^\w+-[\w*]+-[\w*]+-[\w*]+(-[\w*])?,', $v)) { |
|
| 392 | + if (is_numeric($k)) { |
|
| 393 | + $action = $v; |
|
| 394 | + } |
|
| 395 | + if (_request($k)) { |
|
| 396 | + $action = $v; |
|
| 397 | + } |
|
| 398 | + } |
|
| 399 | + // ajout un role null fictif (plus pratique) si pas défini |
|
| 400 | + if ($action and count(explode('-', $action)) == 4) { |
|
| 401 | + $action .= '-'; |
|
| 402 | + } |
|
| 403 | + |
|
| 404 | + return $action; |
|
| 405 | 405 | } |
| 406 | 406 | |
| 407 | 407 | |
@@ -417,65 +417,65 @@ discard block |
||
| 417 | 417 | * Liste des qualifs pour chaque lien. Tableau vide s'il n'y en a pas. |
| 418 | 418 | **/ |
| 419 | 419 | function lien_retrouver_qualif($objet_lien, $lien) { |
| 420 | - // un role est défini dans la liaison |
|
| 421 | - $defs = explode('-', $lien); |
|
| 422 | - list($objet1, , $objet2, , $role) = array_pad($defs, 5, null); |
|
| 423 | - if ($objet_lien == $objet1) { |
|
| 424 | - $colonne_role = roles_colonne($objet1, $objet2); |
|
| 425 | - } else { |
|
| 426 | - $colonne_role = roles_colonne($objet2, $objet1); |
|
| 427 | - } |
|
| 428 | - |
|
| 429 | - // cas ou le role est defini en 5e argument de l'action sur le lien (suppression, ajout rapide sans autre attribut) |
|
| 430 | - if ($role) { |
|
| 431 | - return array( |
|
| 432 | - // un seul lien avec ce role |
|
| 433 | - array($colonne_role => $role) |
|
| 434 | - ); |
|
| 435 | - } |
|
| 436 | - |
|
| 437 | - // retrouver les rôles postés pour cette liaison, s'il y en a. |
|
| 438 | - $qualifier_lien = _request('qualifier_lien'); |
|
| 439 | - if (!$qualifier_lien or !is_array($qualifier_lien)) { |
|
| 440 | - return array(); |
|
| 441 | - } |
|
| 442 | - |
|
| 443 | - // pas avec l'action complete (incluant le role) |
|
| 444 | - $qualif = array(); |
|
| 445 | - if ((!isset($qualifier_lien[$lien]) or !$qualif = $qualifier_lien[$lien]) |
|
| 446 | - and count($defs) == 5 |
|
| 447 | - ) { |
|
| 448 | - // on tente avec l'action sans le role |
|
| 449 | - array_pop($defs); |
|
| 450 | - $lien = implode('-', $defs); |
|
| 451 | - if (!isset($qualifier_lien[$lien]) or !$qualif = $qualifier_lien[$lien]) { |
|
| 452 | - $qualif = array(); |
|
| 453 | - } |
|
| 454 | - } |
|
| 455 | - |
|
| 456 | - // $qualif de la forme array(role=>array(...),valeur=>array(...),....) |
|
| 457 | - // on le reforme en array(array(role=>..,valeur=>..,..),array(role=>..,valeur=>..,..),...) |
|
| 458 | - $qualifs = array(); |
|
| 459 | - while (count($qualif)) { |
|
| 460 | - $q = array(); |
|
| 461 | - foreach ($qualif as $att => $values) { |
|
| 462 | - if (is_array($values)) { |
|
| 463 | - $q[$att] = array_shift($qualif[$att]); |
|
| 464 | - if (!count($qualif[$att])) { |
|
| 465 | - unset($qualif[$att]); |
|
| 466 | - } |
|
| 467 | - } else { |
|
| 468 | - $q[$att] = $values; |
|
| 469 | - unset($qualif[$att]); |
|
| 470 | - } |
|
| 471 | - } |
|
| 472 | - // pas de rôle vide |
|
| 473 | - if (!$colonne_role or !isset($q[$colonne_role]) or $q[$colonne_role]) { |
|
| 474 | - $qualifs[] = $q; |
|
| 475 | - } |
|
| 476 | - } |
|
| 477 | - |
|
| 478 | - return $qualifs; |
|
| 420 | + // un role est défini dans la liaison |
|
| 421 | + $defs = explode('-', $lien); |
|
| 422 | + list($objet1, , $objet2, , $role) = array_pad($defs, 5, null); |
|
| 423 | + if ($objet_lien == $objet1) { |
|
| 424 | + $colonne_role = roles_colonne($objet1, $objet2); |
|
| 425 | + } else { |
|
| 426 | + $colonne_role = roles_colonne($objet2, $objet1); |
|
| 427 | + } |
|
| 428 | + |
|
| 429 | + // cas ou le role est defini en 5e argument de l'action sur le lien (suppression, ajout rapide sans autre attribut) |
|
| 430 | + if ($role) { |
|
| 431 | + return array( |
|
| 432 | + // un seul lien avec ce role |
|
| 433 | + array($colonne_role => $role) |
|
| 434 | + ); |
|
| 435 | + } |
|
| 436 | + |
|
| 437 | + // retrouver les rôles postés pour cette liaison, s'il y en a. |
|
| 438 | + $qualifier_lien = _request('qualifier_lien'); |
|
| 439 | + if (!$qualifier_lien or !is_array($qualifier_lien)) { |
|
| 440 | + return array(); |
|
| 441 | + } |
|
| 442 | + |
|
| 443 | + // pas avec l'action complete (incluant le role) |
|
| 444 | + $qualif = array(); |
|
| 445 | + if ((!isset($qualifier_lien[$lien]) or !$qualif = $qualifier_lien[$lien]) |
|
| 446 | + and count($defs) == 5 |
|
| 447 | + ) { |
|
| 448 | + // on tente avec l'action sans le role |
|
| 449 | + array_pop($defs); |
|
| 450 | + $lien = implode('-', $defs); |
|
| 451 | + if (!isset($qualifier_lien[$lien]) or !$qualif = $qualifier_lien[$lien]) { |
|
| 452 | + $qualif = array(); |
|
| 453 | + } |
|
| 454 | + } |
|
| 455 | + |
|
| 456 | + // $qualif de la forme array(role=>array(...),valeur=>array(...),....) |
|
| 457 | + // on le reforme en array(array(role=>..,valeur=>..,..),array(role=>..,valeur=>..,..),...) |
|
| 458 | + $qualifs = array(); |
|
| 459 | + while (count($qualif)) { |
|
| 460 | + $q = array(); |
|
| 461 | + foreach ($qualif as $att => $values) { |
|
| 462 | + if (is_array($values)) { |
|
| 463 | + $q[$att] = array_shift($qualif[$att]); |
|
| 464 | + if (!count($qualif[$att])) { |
|
| 465 | + unset($qualif[$att]); |
|
| 466 | + } |
|
| 467 | + } else { |
|
| 468 | + $q[$att] = $values; |
|
| 469 | + unset($qualif[$att]); |
|
| 470 | + } |
|
| 471 | + } |
|
| 472 | + // pas de rôle vide |
|
| 473 | + if (!$colonne_role or !isset($q[$colonne_role]) or $q[$colonne_role]) { |
|
| 474 | + $qualifs[] = $q; |
|
| 475 | + } |
|
| 476 | + } |
|
| 477 | + |
|
| 478 | + return $qualifs; |
|
| 479 | 479 | } |
| 480 | 480 | |
| 481 | 481 | /** |
@@ -494,12 +494,12 @@ discard block |
||
| 494 | 494 | **/ |
| 495 | 495 | function lien_ajouter_liaisons($objet_source, $ids, $objet_lien, $idl, $qualifs) { |
| 496 | 496 | |
| 497 | - // retrouver la colonne de roles s'il y en a a lier |
|
| 498 | - if (is_array($qualifs) and count($qualifs)) { |
|
| 499 | - foreach ($qualifs as $qualif) { |
|
| 500 | - objet_associer(array($objet_source => $ids), array($objet_lien => $idl), $qualif); |
|
| 501 | - } |
|
| 502 | - } else { |
|
| 503 | - objet_associer(array($objet_source => $ids), array($objet_lien => $idl)); |
|
| 504 | - } |
|
| 497 | + // retrouver la colonne de roles s'il y en a a lier |
|
| 498 | + if (is_array($qualifs) and count($qualifs)) { |
|
| 499 | + foreach ($qualifs as $qualif) { |
|
| 500 | + objet_associer(array($objet_source => $ids), array($objet_lien => $idl), $qualif); |
|
| 501 | + } |
|
| 502 | + } else { |
|
| 503 | + objet_associer(array($objet_source => $ids), array($objet_lien => $idl)); |
|
| 504 | + } |
|
| 505 | 505 | } |
@@ -104,7 +104,7 @@ discard block |
||
| 104 | 104 | |
| 105 | 105 | // L'éditabilité :) est définie par un test permanent (par exemple "associermots") ET le 4ème argument |
| 106 | 106 | include_spip('inc/autoriser'); |
| 107 | - $editable = ($editable and autoriser('associer' . $table_source, $objet, $id_objet) |
|
| 107 | + $editable = ($editable and autoriser('associer'.$table_source, $objet, $id_objet) |
|
| 108 | 108 | and autoriser('modifier', $objet, $id_objet)); |
| 109 | 109 | |
| 110 | 110 | if (!$editable and !count(objet_trouver_liens( |
@@ -116,22 +116,22 @@ discard block |
||
| 116 | 116 | |
| 117 | 117 | // squelettes de vue et de d'association |
| 118 | 118 | // ils sont différents si des rôles sont définis. |
| 119 | - $skel_vue = $table_source . '_lies'; |
|
| 120 | - $skel_ajout = $table_source . '_associer'; |
|
| 119 | + $skel_vue = $table_source.'_lies'; |
|
| 120 | + $skel_ajout = $table_source.'_associer'; |
|
| 121 | 121 | |
| 122 | 122 | // description des roles |
| 123 | 123 | include_spip('inc/roles'); |
| 124 | 124 | if ($roles = roles_presents($objet_source, $objet)) { |
| 125 | 125 | // on demande de nouveaux squelettes en conséquence |
| 126 | - $skel_vue = $table_source . '_roles_lies'; |
|
| 127 | - $skel_ajout = $table_source . '_roles_associer'; |
|
| 126 | + $skel_vue = $table_source.'_roles_lies'; |
|
| 127 | + $skel_ajout = $table_source.'_roles_associer'; |
|
| 128 | 128 | } |
| 129 | 129 | |
| 130 | 130 | $oups = _request('_oups'); |
| 131 | 131 | if (unserialize(base64_decode($oups))) { |
| 132 | 132 | // on est bon, rien a faire |
| 133 | 133 | } |
| 134 | - elseif(unserialize($oups)) { |
|
| 134 | + elseif (unserialize($oups)) { |
|
| 135 | 135 | // il faut encoder |
| 136 | 136 | $oups = base64_encode($oups); |
| 137 | 137 | } |
@@ -419,7 +419,7 @@ discard block |
||
| 419 | 419 | function lien_retrouver_qualif($objet_lien, $lien) { |
| 420 | 420 | // un role est défini dans la liaison |
| 421 | 421 | $defs = explode('-', $lien); |
| 422 | - list($objet1, , $objet2, , $role) = array_pad($defs, 5, null); |
|
| 422 | + list($objet1,, $objet2,, $role) = array_pad($defs, 5, null); |
|
| 423 | 423 | if ($objet_lien == $objet1) { |
| 424 | 424 | $colonne_role = roles_colonne($objet1, $objet2); |
| 425 | 425 | } else { |
@@ -130,12 +130,10 @@ |
||
| 130 | 130 | $oups = _request('_oups'); |
| 131 | 131 | if (unserialize(base64_decode($oups))) { |
| 132 | 132 | // on est bon, rien a faire |
| 133 | - } |
|
| 134 | - elseif(unserialize($oups)) { |
|
| 133 | + } elseif(unserialize($oups)) { |
|
| 135 | 134 | // il faut encoder |
| 136 | 135 | $oups = base64_encode($oups); |
| 137 | - } |
|
| 138 | - else { |
|
| 136 | + } else { |
|
| 139 | 137 | $oups = ''; |
| 140 | 138 | } |
| 141 | 139 | $valeurs = array( |
@@ -17,7 +17,7 @@ discard block |
||
| 17 | 17 | **/ |
| 18 | 18 | |
| 19 | 19 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 20 | - return; |
|
| 20 | + return; |
|
| 21 | 21 | } |
| 22 | 22 | |
| 23 | 23 | include_spip('inc/actions'); |
@@ -39,64 +39,64 @@ discard block |
||
| 39 | 39 | * Contexte à transmettre au squelette du formulaire sinon |
| 40 | 40 | */ |
| 41 | 41 | function formulaires_traduire_charger_dist($objet, $id_objet, $retour = '', $traduire = true) { |
| 42 | - if (!intval($id_objet)) { |
|
| 43 | - return false; |
|
| 44 | - } |
|
| 45 | - $valeurs = formulaires_editer_objet_charger($objet, $id_objet, null, 0, $retour, ''); |
|
| 46 | - // verifier que l'objet indique possede bien des champs id_trad et lang |
|
| 47 | - // attention, charger renomme lang => langue pour ne pas perturber la langue d'affichage du squelette |
|
| 48 | - if (!isset($valeurs['langue'])) { |
|
| 49 | - return false; |
|
| 50 | - } |
|
| 51 | - |
|
| 52 | - $valeurs['editable'] = autoriser('changerlangue', $objet, $id_objet); |
|
| 53 | - $valeurs['_langue'] = ''; |
|
| 54 | - $langue_parent = ''; |
|
| 55 | - $id_parent = ''; |
|
| 56 | - if (isset($valeurs['id_rubrique'])) { |
|
| 57 | - $id_parent = $valeurs['id_rubrique']; |
|
| 58 | - } |
|
| 59 | - if (isset($valeurs['id_parent'])) { |
|
| 60 | - $id_parent = $valeurs['id_parent']; |
|
| 61 | - } |
|
| 62 | - if ($id_parent) { |
|
| 63 | - $langue_parent = sql_getfetsel('lang', 'spip_rubriques', 'id_rubrique=' . intval($id_parent)); |
|
| 64 | - } |
|
| 65 | - |
|
| 66 | - if (!$langue_parent) { |
|
| 67 | - $langue_parent = $GLOBALS['meta']['langue_site']; |
|
| 68 | - } |
|
| 69 | - if ($valeurs['editable'] |
|
| 70 | - and in_array(table_objet_sql($objet), explode(',', $GLOBALS['meta']['multi_objets'])) |
|
| 71 | - ) { |
|
| 72 | - $valeurs['_langue'] = $valeurs['langue']; |
|
| 73 | - } |
|
| 74 | - $valeurs['langue_parent'] = $langue_parent; |
|
| 75 | - |
|
| 76 | - $valeurs['_objet'] = $objet; |
|
| 77 | - $valeurs['_id_objet'] = $id_objet; |
|
| 78 | - $valeurs['changer_lang'] = ''; |
|
| 79 | - |
|
| 80 | - |
|
| 81 | - $valeurs['_traduisible'] = autoriser('changertraduction', $objet, $id_objet); |
|
| 82 | - $valeurs['_traduire'] = ''; |
|
| 83 | - if (isset($valeurs['id_trad'])) { |
|
| 84 | - $valeurs['_traduire'] = ($traduire ? ' ' : ''); |
|
| 85 | - $valeurs['_vue_traductions'] = 'prive/objets/liste/' . (trouver_fond( |
|
| 86 | - $f = table_objet($objet) . '-trad', |
|
| 87 | - 'prive/objets/liste' |
|
| 88 | - ) ? $f : 'objets-trad'); |
|
| 89 | - // pour afficher la liste des trad sur la base de l'id_trad en base |
|
| 90 | - // independamment d'une saisie en cours sur id_trad |
|
| 91 | - $valeurs['_lister_id_trad'] = $valeurs['id_trad']; |
|
| 92 | - $valeurs['_id_parent'] = $id_parent; |
|
| 93 | - } |
|
| 94 | - |
|
| 95 | - $valeurs['_saisie_en_cours'] = (!_request('annuler') and (_request('changer_lang') !== null |
|
| 96 | - or _request('changer_id_trad') !== null)); |
|
| 97 | - $valeurs['_pipeline'] = array('traduire', array('type' => $objet, 'id' => $id_objet)); |
|
| 98 | - |
|
| 99 | - return $valeurs; |
|
| 42 | + if (!intval($id_objet)) { |
|
| 43 | + return false; |
|
| 44 | + } |
|
| 45 | + $valeurs = formulaires_editer_objet_charger($objet, $id_objet, null, 0, $retour, ''); |
|
| 46 | + // verifier que l'objet indique possede bien des champs id_trad et lang |
|
| 47 | + // attention, charger renomme lang => langue pour ne pas perturber la langue d'affichage du squelette |
|
| 48 | + if (!isset($valeurs['langue'])) { |
|
| 49 | + return false; |
|
| 50 | + } |
|
| 51 | + |
|
| 52 | + $valeurs['editable'] = autoriser('changerlangue', $objet, $id_objet); |
|
| 53 | + $valeurs['_langue'] = ''; |
|
| 54 | + $langue_parent = ''; |
|
| 55 | + $id_parent = ''; |
|
| 56 | + if (isset($valeurs['id_rubrique'])) { |
|
| 57 | + $id_parent = $valeurs['id_rubrique']; |
|
| 58 | + } |
|
| 59 | + if (isset($valeurs['id_parent'])) { |
|
| 60 | + $id_parent = $valeurs['id_parent']; |
|
| 61 | + } |
|
| 62 | + if ($id_parent) { |
|
| 63 | + $langue_parent = sql_getfetsel('lang', 'spip_rubriques', 'id_rubrique=' . intval($id_parent)); |
|
| 64 | + } |
|
| 65 | + |
|
| 66 | + if (!$langue_parent) { |
|
| 67 | + $langue_parent = $GLOBALS['meta']['langue_site']; |
|
| 68 | + } |
|
| 69 | + if ($valeurs['editable'] |
|
| 70 | + and in_array(table_objet_sql($objet), explode(',', $GLOBALS['meta']['multi_objets'])) |
|
| 71 | + ) { |
|
| 72 | + $valeurs['_langue'] = $valeurs['langue']; |
|
| 73 | + } |
|
| 74 | + $valeurs['langue_parent'] = $langue_parent; |
|
| 75 | + |
|
| 76 | + $valeurs['_objet'] = $objet; |
|
| 77 | + $valeurs['_id_objet'] = $id_objet; |
|
| 78 | + $valeurs['changer_lang'] = ''; |
|
| 79 | + |
|
| 80 | + |
|
| 81 | + $valeurs['_traduisible'] = autoriser('changertraduction', $objet, $id_objet); |
|
| 82 | + $valeurs['_traduire'] = ''; |
|
| 83 | + if (isset($valeurs['id_trad'])) { |
|
| 84 | + $valeurs['_traduire'] = ($traduire ? ' ' : ''); |
|
| 85 | + $valeurs['_vue_traductions'] = 'prive/objets/liste/' . (trouver_fond( |
|
| 86 | + $f = table_objet($objet) . '-trad', |
|
| 87 | + 'prive/objets/liste' |
|
| 88 | + ) ? $f : 'objets-trad'); |
|
| 89 | + // pour afficher la liste des trad sur la base de l'id_trad en base |
|
| 90 | + // independamment d'une saisie en cours sur id_trad |
|
| 91 | + $valeurs['_lister_id_trad'] = $valeurs['id_trad']; |
|
| 92 | + $valeurs['_id_parent'] = $id_parent; |
|
| 93 | + } |
|
| 94 | + |
|
| 95 | + $valeurs['_saisie_en_cours'] = (!_request('annuler') and (_request('changer_lang') !== null |
|
| 96 | + or _request('changer_id_trad') !== null)); |
|
| 97 | + $valeurs['_pipeline'] = array('traduire', array('type' => $objet, 'id' => $id_objet)); |
|
| 98 | + |
|
| 99 | + return $valeurs; |
|
| 100 | 100 | } |
| 101 | 101 | |
| 102 | 102 | /** |
@@ -114,30 +114,30 @@ discard block |
||
| 114 | 114 | * Erreurs des saisies |
| 115 | 115 | */ |
| 116 | 116 | function formulaires_traduire_verifier_dist($objet, $id_objet, $retour = '', $traduire = true) { |
| 117 | - $erreurs = array(); |
|
| 118 | - |
|
| 119 | - if (null !== _request('changer_lang')) { |
|
| 120 | - $erreurs = formulaires_editer_objet_verifier($objet, $id_objet, array('changer_lang')); |
|
| 121 | - } |
|
| 122 | - |
|
| 123 | - // si id_trad fourni, verifier que cela ne conflicte pas avec un id_trad existant |
|
| 124 | - // et que ca reference bien un objet existant |
|
| 125 | - if ($id_trad = _request('id_trad')) { |
|
| 126 | - $table_objet_sql = table_objet_sql($objet); |
|
| 127 | - $_id_table_objet = id_table_objet($objet); |
|
| 128 | - if (sql_getfetsel( |
|
| 129 | - 'id_trad', |
|
| 130 | - $table_objet_sql, |
|
| 131 | - "$_id_table_objet=" . intval($id_objet) |
|
| 132 | - )) { |
|
| 133 | - // ne devrait jamais arriver sauf concurence de saisie |
|
| 134 | - $erreurs['id_trad'] = _L('Une traduction est deja referencee'); |
|
| 135 | - } elseif (!sql_getfetsel($_id_table_objet, $table_objet_sql, "$_id_table_objet=" . intval($id_trad))) { |
|
| 136 | - $erreurs['id_trad'] = _L('Indiquez un contenu existant'); |
|
| 137 | - } |
|
| 138 | - } |
|
| 139 | - |
|
| 140 | - return $erreurs; |
|
| 117 | + $erreurs = array(); |
|
| 118 | + |
|
| 119 | + if (null !== _request('changer_lang')) { |
|
| 120 | + $erreurs = formulaires_editer_objet_verifier($objet, $id_objet, array('changer_lang')); |
|
| 121 | + } |
|
| 122 | + |
|
| 123 | + // si id_trad fourni, verifier que cela ne conflicte pas avec un id_trad existant |
|
| 124 | + // et que ca reference bien un objet existant |
|
| 125 | + if ($id_trad = _request('id_trad')) { |
|
| 126 | + $table_objet_sql = table_objet_sql($objet); |
|
| 127 | + $_id_table_objet = id_table_objet($objet); |
|
| 128 | + if (sql_getfetsel( |
|
| 129 | + 'id_trad', |
|
| 130 | + $table_objet_sql, |
|
| 131 | + "$_id_table_objet=" . intval($id_objet) |
|
| 132 | + )) { |
|
| 133 | + // ne devrait jamais arriver sauf concurence de saisie |
|
| 134 | + $erreurs['id_trad'] = _L('Une traduction est deja referencee'); |
|
| 135 | + } elseif (!sql_getfetsel($_id_table_objet, $table_objet_sql, "$_id_table_objet=" . intval($id_trad))) { |
|
| 136 | + $erreurs['id_trad'] = _L('Indiquez un contenu existant'); |
|
| 137 | + } |
|
| 138 | + } |
|
| 139 | + |
|
| 140 | + return $erreurs; |
|
| 141 | 141 | } |
| 142 | 142 | |
| 143 | 143 | |
@@ -156,31 +156,31 @@ discard block |
||
| 156 | 156 | * Retour des traitements |
| 157 | 157 | */ |
| 158 | 158 | function formulaires_traduire_traiter_dist($objet, $id_objet, $retour = '', $traduire = true) { |
| 159 | - $res = array(); |
|
| 160 | - if (!_request('annuler') and autoriser('changerlangue', $objet, $id_objet)) { |
|
| 161 | - // action/editer_xxx doit traiter la modif de changer_lang |
|
| 162 | - $res = formulaires_editer_objet_traiter($objet, $id_objet, 0, 0, $retour); |
|
| 163 | - } |
|
| 164 | - if (!_request('annuler') and autoriser('changertraduction', $objet, $id_objet)) { |
|
| 165 | - if ($id_trad = _request('id_trad') or _request('supprimer_trad')) { |
|
| 166 | - $referencer_traduction = charger_fonction('referencer_traduction', 'action'); |
|
| 167 | - $referencer_traduction($objet, $id_objet, intval($id_trad)); // 0 si supprimer_trad |
|
| 168 | - } elseif ($new_id_trad = _request('changer_reference_trad') |
|
| 169 | - and $new_id_trad = array_keys($new_id_trad) |
|
| 170 | - and $new_id_trad = reset($new_id_trad) |
|
| 171 | - ) { |
|
| 172 | - $table_objet_sql = table_objet_sql($objet); |
|
| 173 | - $_id_table_objet = id_table_objet($objet); |
|
| 174 | - if ($id_trad = sql_getfetsel('id_trad', $table_objet_sql, "$_id_table_objet=" . intval($id_objet))) { |
|
| 175 | - $referencer_traduction = charger_fonction('referencer_traduction', 'action'); |
|
| 176 | - $referencer_traduction($objet, $id_trad, $new_id_trad); |
|
| 177 | - } |
|
| 178 | - } |
|
| 179 | - } |
|
| 180 | - $res['editable'] = true; |
|
| 181 | - if (!isset($res['message_erreur'])) { |
|
| 182 | - set_request('annuler', 'annuler'); |
|
| 183 | - } // provoquer la fermeture du forumlaire |
|
| 184 | - |
|
| 185 | - return $res; |
|
| 159 | + $res = array(); |
|
| 160 | + if (!_request('annuler') and autoriser('changerlangue', $objet, $id_objet)) { |
|
| 161 | + // action/editer_xxx doit traiter la modif de changer_lang |
|
| 162 | + $res = formulaires_editer_objet_traiter($objet, $id_objet, 0, 0, $retour); |
|
| 163 | + } |
|
| 164 | + if (!_request('annuler') and autoriser('changertraduction', $objet, $id_objet)) { |
|
| 165 | + if ($id_trad = _request('id_trad') or _request('supprimer_trad')) { |
|
| 166 | + $referencer_traduction = charger_fonction('referencer_traduction', 'action'); |
|
| 167 | + $referencer_traduction($objet, $id_objet, intval($id_trad)); // 0 si supprimer_trad |
|
| 168 | + } elseif ($new_id_trad = _request('changer_reference_trad') |
|
| 169 | + and $new_id_trad = array_keys($new_id_trad) |
|
| 170 | + and $new_id_trad = reset($new_id_trad) |
|
| 171 | + ) { |
|
| 172 | + $table_objet_sql = table_objet_sql($objet); |
|
| 173 | + $_id_table_objet = id_table_objet($objet); |
|
| 174 | + if ($id_trad = sql_getfetsel('id_trad', $table_objet_sql, "$_id_table_objet=" . intval($id_objet))) { |
|
| 175 | + $referencer_traduction = charger_fonction('referencer_traduction', 'action'); |
|
| 176 | + $referencer_traduction($objet, $id_trad, $new_id_trad); |
|
| 177 | + } |
|
| 178 | + } |
|
| 179 | + } |
|
| 180 | + $res['editable'] = true; |
|
| 181 | + if (!isset($res['message_erreur'])) { |
|
| 182 | + set_request('annuler', 'annuler'); |
|
| 183 | + } // provoquer la fermeture du forumlaire |
|
| 184 | + |
|
| 185 | + return $res; |
|
| 186 | 186 | } |
@@ -60,7 +60,7 @@ discard block |
||
| 60 | 60 | $id_parent = $valeurs['id_parent']; |
| 61 | 61 | } |
| 62 | 62 | if ($id_parent) { |
| 63 | - $langue_parent = sql_getfetsel('lang', 'spip_rubriques', 'id_rubrique=' . intval($id_parent)); |
|
| 63 | + $langue_parent = sql_getfetsel('lang', 'spip_rubriques', 'id_rubrique='.intval($id_parent)); |
|
| 64 | 64 | } |
| 65 | 65 | |
| 66 | 66 | if (!$langue_parent) { |
@@ -82,8 +82,8 @@ discard block |
||
| 82 | 82 | $valeurs['_traduire'] = ''; |
| 83 | 83 | if (isset($valeurs['id_trad'])) { |
| 84 | 84 | $valeurs['_traduire'] = ($traduire ? ' ' : ''); |
| 85 | - $valeurs['_vue_traductions'] = 'prive/objets/liste/' . (trouver_fond( |
|
| 86 | - $f = table_objet($objet) . '-trad', |
|
| 85 | + $valeurs['_vue_traductions'] = 'prive/objets/liste/'.(trouver_fond( |
|
| 86 | + $f = table_objet($objet).'-trad', |
|
| 87 | 87 | 'prive/objets/liste' |
| 88 | 88 | ) ? $f : 'objets-trad'); |
| 89 | 89 | // pour afficher la liste des trad sur la base de l'id_trad en base |
@@ -128,11 +128,11 @@ discard block |
||
| 128 | 128 | if (sql_getfetsel( |
| 129 | 129 | 'id_trad', |
| 130 | 130 | $table_objet_sql, |
| 131 | - "$_id_table_objet=" . intval($id_objet) |
|
| 131 | + "$_id_table_objet=".intval($id_objet) |
|
| 132 | 132 | )) { |
| 133 | 133 | // ne devrait jamais arriver sauf concurence de saisie |
| 134 | 134 | $erreurs['id_trad'] = _L('Une traduction est deja referencee'); |
| 135 | - } elseif (!sql_getfetsel($_id_table_objet, $table_objet_sql, "$_id_table_objet=" . intval($id_trad))) { |
|
| 135 | + } elseif (!sql_getfetsel($_id_table_objet, $table_objet_sql, "$_id_table_objet=".intval($id_trad))) { |
|
| 136 | 136 | $erreurs['id_trad'] = _L('Indiquez un contenu existant'); |
| 137 | 137 | } |
| 138 | 138 | } |
@@ -171,7 +171,7 @@ discard block |
||
| 171 | 171 | ) { |
| 172 | 172 | $table_objet_sql = table_objet_sql($objet); |
| 173 | 173 | $_id_table_objet = id_table_objet($objet); |
| 174 | - if ($id_trad = sql_getfetsel('id_trad', $table_objet_sql, "$_id_table_objet=" . intval($id_objet))) { |
|
| 174 | + if ($id_trad = sql_getfetsel('id_trad', $table_objet_sql, "$_id_table_objet=".intval($id_objet))) { |
|
| 175 | 175 | $referencer_traduction = charger_fonction('referencer_traduction', 'action'); |
| 176 | 176 | $referencer_traduction($objet, $id_trad, $new_id_trad); |
| 177 | 177 | } |
@@ -77,13 +77,13 @@ discard block |
||
| 77 | 77 | |
| 78 | 78 | function chrono_requete($temps) { |
| 79 | 79 | $total = 0; |
| 80 | - $hors = "<i>" . _T('zbug_hors_compilation') . "</i>"; |
|
| 80 | + $hors = "<i>"._T('zbug_hors_compilation')."</i>"; |
|
| 81 | 81 | $t = $q = $n = $d = array(); |
| 82 | 82 | // Totaliser les temps et completer le Explain |
| 83 | 83 | foreach ($temps as $key => $v) { |
| 84 | 84 | list($dt, $nb, $boucle, $query, $explain, $res, $contexte) = $v; |
| 85 | 85 | if (is_array($contexte)) { |
| 86 | - $k = ($contexte[0] . " $boucle"); |
|
| 86 | + $k = ($contexte[0]." $boucle"); |
|
| 87 | 87 | include_spip('public/compiler'); |
| 88 | 88 | $env = reconstruire_contexte_compil($contexte); |
| 89 | 89 | } else { |
@@ -128,7 +128,7 @@ discard block |
||
| 128 | 128 | // Fabriquer les liens de navigations dans le tableau des temps |
| 129 | 129 | foreach ($temps as $k => $v) { |
| 130 | 130 | $titre = strip_tags($v[2]); |
| 131 | - $href = quote_amp($GLOBALS['REQUEST_URI']) . "#req$i"; |
|
| 131 | + $href = quote_amp($GLOBALS['REQUEST_URI'])."#req$i"; |
|
| 132 | 132 | $href = str_replace("\\'", ''', $href); |
| 133 | 133 | |
| 134 | 134 | if (!isset($t[$v[2]])) { |
@@ -149,7 +149,7 @@ discard block |
||
| 149 | 149 | unset($d['']); |
| 150 | 150 | // Fabriquer le tableau des liens de navigation dans le grand tableau |
| 151 | 151 | foreach ($d as $k => $v) { |
| 152 | - $d[$k] = $n[$k] . "</td><td>$k</td><td class='time'>$v</td><td class='liste-reqs'>" |
|
| 152 | + $d[$k] = $n[$k]."</td><td>$k</td><td class='time'>$v</td><td class='liste-reqs'>" |
|
| 153 | 153 | . join('', $t[$k]); |
| 154 | 154 | } |
| 155 | 155 | |
@@ -159,7 +159,7 @@ discard block |
||
| 159 | 159 | . join("</td></tr>\n<tr><td>", $d) |
| 160 | 160 | . "</td></tr>\n" |
| 161 | 161 | . (# _request('var_mode_objet') ? '' : |
| 162 | - ("<tr><td>" . count($temps) . "</td><td>" . _T('info_total') . '</td><td class="time">' . $total . "</td><td></td></tr>")) |
|
| 162 | + ("<tr><td>".count($temps)."</td><td>"._T('info_total').'</td><td class="time">'.$total."</td><td></td></tr>")) |
|
| 163 | 163 | ); |
| 164 | 164 | |
| 165 | 165 | return array($temps, $navigation); |
@@ -11,190 +11,190 @@ |
||
| 11 | 11 | \***************************************************************************/ |
| 12 | 12 | |
| 13 | 13 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 14 | - return; |
|
| 14 | + return; |
|
| 15 | 15 | } |
| 16 | 16 | |
| 17 | 17 | // https://code.spip.net/@trace_query_start |
| 18 | 18 | function trace_query_start() { |
| 19 | - static $trace = '?'; |
|
| 20 | - if ($trace === '?' or defined('_DEBUG_TRACE_QUERIES')) { |
|
| 21 | - if (defined('_DEBUG_TRACE_QUERIES') and _DEBUG_TRACE_QUERIES) { |
|
| 22 | - $trace = true; |
|
| 23 | - } |
|
| 24 | - else { |
|
| 25 | - if (empty($GLOBALS['visiteur_session'])) { |
|
| 26 | - // si un anonyme fait un var_profile on est oblige de remplir le tableau des temps en attendant de savoir |
|
| 27 | - // car ici on ne sait pas si c'est un hit anonyme |
|
| 28 | - // ou une requete SQL faite avant chargement de la session |
|
| 29 | - $trace = (!empty($_GET['var_profile']) ? '?' : false); |
|
| 30 | - } |
|
| 31 | - else { |
|
| 32 | - include_spip('inc/autoriser'); |
|
| 33 | - // gare au bouclage sur calcul de droits au premier appel |
|
| 34 | - // A fortiori quand on demande une trace |
|
| 35 | - $trace = false; // on ne trace pas la requete provoquee par autoriser('debug') |
|
| 36 | - $trace = (!empty($_GET['var_profile']) and autoriser('debug')); |
|
| 37 | - } |
|
| 38 | - } |
|
| 39 | - } |
|
| 40 | - |
|
| 41 | - return $trace ? microtime() : 0; |
|
| 19 | + static $trace = '?'; |
|
| 20 | + if ($trace === '?' or defined('_DEBUG_TRACE_QUERIES')) { |
|
| 21 | + if (defined('_DEBUG_TRACE_QUERIES') and _DEBUG_TRACE_QUERIES) { |
|
| 22 | + $trace = true; |
|
| 23 | + } |
|
| 24 | + else { |
|
| 25 | + if (empty($GLOBALS['visiteur_session'])) { |
|
| 26 | + // si un anonyme fait un var_profile on est oblige de remplir le tableau des temps en attendant de savoir |
|
| 27 | + // car ici on ne sait pas si c'est un hit anonyme |
|
| 28 | + // ou une requete SQL faite avant chargement de la session |
|
| 29 | + $trace = (!empty($_GET['var_profile']) ? '?' : false); |
|
| 30 | + } |
|
| 31 | + else { |
|
| 32 | + include_spip('inc/autoriser'); |
|
| 33 | + // gare au bouclage sur calcul de droits au premier appel |
|
| 34 | + // A fortiori quand on demande une trace |
|
| 35 | + $trace = false; // on ne trace pas la requete provoquee par autoriser('debug') |
|
| 36 | + $trace = (!empty($_GET['var_profile']) and autoriser('debug')); |
|
| 37 | + } |
|
| 38 | + } |
|
| 39 | + } |
|
| 40 | + |
|
| 41 | + return $trace ? microtime() : 0; |
|
| 42 | 42 | } |
| 43 | 43 | |
| 44 | 44 | // https://code.spip.net/@trace_query_end |
| 45 | 45 | function trace_query_end($query, $start, $result, $erreur, $serveur = '') { |
| 46 | - static $trace = '?'; |
|
| 47 | - if ($trace === '?') { |
|
| 48 | - if (empty($GLOBALS['visiteur_session'])) { |
|
| 49 | - // si un anonyme fait un var_profile on est oblige de remplir le tableau des temps en attendant de savoir |
|
| 50 | - // car ici on ne sait pas si c'est un hit anonyme |
|
| 51 | - // ou une requete SQL faite avant chargement de la session |
|
| 52 | - $trace = (!empty($_GET['var_profile']) ? '?' : false); |
|
| 53 | - } |
|
| 54 | - else { |
|
| 55 | - include_spip('inc/autoriser'); |
|
| 56 | - // gare au bouclage sur calcul de droits au premier appel |
|
| 57 | - // A fortiori quand on demande une trace |
|
| 58 | - $trace = false; // on ne trace pas la requete provoquee par autoriser('debug') |
|
| 59 | - $trace = (!empty($_GET['var_profile']) and autoriser('debug')); |
|
| 60 | - } |
|
| 61 | - } |
|
| 62 | - if ($start) { |
|
| 63 | - $end = microtime(); |
|
| 64 | - list($usec, $sec) = explode(" ", $start); |
|
| 65 | - list($usec2, $sec2) = explode(" ", $end); |
|
| 66 | - $dt = $sec2 + $usec2 - $sec - $usec; |
|
| 67 | - pipeline('trig_trace_query', ['query' => $query, 'start' => $start, 'end' => $end, 'time' => $dt, 'result' => $result, 'erreur' => $erreur, 'serveur' => $serveur]); |
|
| 68 | - if ($trace) { |
|
| 69 | - trace_query_chrono($dt, $query, $result, $serveur); |
|
| 70 | - } |
|
| 71 | - } |
|
| 72 | - // tracer les erreurs, sauf pour select, c'est fait dans abstract_sql |
|
| 73 | - if ($trace and $erreur and !preg_match('/^select\b/i', $query)) { |
|
| 74 | - erreur_squelette(array(sql_errno($serveur), $erreur, $query)); |
|
| 75 | - } |
|
| 76 | - |
|
| 77 | - return $result; |
|
| 46 | + static $trace = '?'; |
|
| 47 | + if ($trace === '?') { |
|
| 48 | + if (empty($GLOBALS['visiteur_session'])) { |
|
| 49 | + // si un anonyme fait un var_profile on est oblige de remplir le tableau des temps en attendant de savoir |
|
| 50 | + // car ici on ne sait pas si c'est un hit anonyme |
|
| 51 | + // ou une requete SQL faite avant chargement de la session |
|
| 52 | + $trace = (!empty($_GET['var_profile']) ? '?' : false); |
|
| 53 | + } |
|
| 54 | + else { |
|
| 55 | + include_spip('inc/autoriser'); |
|
| 56 | + // gare au bouclage sur calcul de droits au premier appel |
|
| 57 | + // A fortiori quand on demande une trace |
|
| 58 | + $trace = false; // on ne trace pas la requete provoquee par autoriser('debug') |
|
| 59 | + $trace = (!empty($_GET['var_profile']) and autoriser('debug')); |
|
| 60 | + } |
|
| 61 | + } |
|
| 62 | + if ($start) { |
|
| 63 | + $end = microtime(); |
|
| 64 | + list($usec, $sec) = explode(" ", $start); |
|
| 65 | + list($usec2, $sec2) = explode(" ", $end); |
|
| 66 | + $dt = $sec2 + $usec2 - $sec - $usec; |
|
| 67 | + pipeline('trig_trace_query', ['query' => $query, 'start' => $start, 'end' => $end, 'time' => $dt, 'result' => $result, 'erreur' => $erreur, 'serveur' => $serveur]); |
|
| 68 | + if ($trace) { |
|
| 69 | + trace_query_chrono($dt, $query, $result, $serveur); |
|
| 70 | + } |
|
| 71 | + } |
|
| 72 | + // tracer les erreurs, sauf pour select, c'est fait dans abstract_sql |
|
| 73 | + if ($trace and $erreur and !preg_match('/^select\b/i', $query)) { |
|
| 74 | + erreur_squelette(array(sql_errno($serveur), $erreur, $query)); |
|
| 75 | + } |
|
| 76 | + |
|
| 77 | + return $result; |
|
| 78 | 78 | } |
| 79 | 79 | |
| 80 | 80 | // https://code.spip.net/@trace_query_chrono |
| 81 | 81 | function trace_query_chrono($dt, $query, $result, $serveur = '') { |
| 82 | - include_spip('inc/filtres_mini'); |
|
| 83 | - static $tt = 0, $nb = 0; |
|
| 84 | - |
|
| 85 | - $x = _request('var_mode_objet'); |
|
| 86 | - if (isset($GLOBALS['debug']['aucasou'])) { |
|
| 87 | - list(, $boucle, $serveur, $contexte) = $GLOBALS['debug']['aucasou']; |
|
| 88 | - if ($x and !preg_match("/$boucle\$/", $x)) { |
|
| 89 | - return; |
|
| 90 | - } |
|
| 91 | - if ($serveur) { |
|
| 92 | - $boucle .= " ($serveur)"; |
|
| 93 | - } |
|
| 94 | - $boucle = "<b>$boucle</b>"; |
|
| 95 | - } else { |
|
| 96 | - if ($x) { |
|
| 97 | - return; |
|
| 98 | - } |
|
| 99 | - $boucle = $contexte = ''; |
|
| 100 | - } |
|
| 101 | - |
|
| 102 | - $tt += $dt; |
|
| 103 | - $nb++; |
|
| 104 | - |
|
| 105 | - $q = preg_replace('/([a-z)`])\s+([A-Z])/', "$1\n<br />$2", spip_htmlentities($query)); |
|
| 106 | - $e = sql_explain($query, $serveur); |
|
| 107 | - $r = str_replace('Resource id ', '', (is_object($result) ? get_class($result) : $result)); |
|
| 108 | - $GLOBALS['tableau_des_temps'][] = array($dt, $nb, $boucle, $q, $e, $r, $contexte); |
|
| 82 | + include_spip('inc/filtres_mini'); |
|
| 83 | + static $tt = 0, $nb = 0; |
|
| 84 | + |
|
| 85 | + $x = _request('var_mode_objet'); |
|
| 86 | + if (isset($GLOBALS['debug']['aucasou'])) { |
|
| 87 | + list(, $boucle, $serveur, $contexte) = $GLOBALS['debug']['aucasou']; |
|
| 88 | + if ($x and !preg_match("/$boucle\$/", $x)) { |
|
| 89 | + return; |
|
| 90 | + } |
|
| 91 | + if ($serveur) { |
|
| 92 | + $boucle .= " ($serveur)"; |
|
| 93 | + } |
|
| 94 | + $boucle = "<b>$boucle</b>"; |
|
| 95 | + } else { |
|
| 96 | + if ($x) { |
|
| 97 | + return; |
|
| 98 | + } |
|
| 99 | + $boucle = $contexte = ''; |
|
| 100 | + } |
|
| 101 | + |
|
| 102 | + $tt += $dt; |
|
| 103 | + $nb++; |
|
| 104 | + |
|
| 105 | + $q = preg_replace('/([a-z)`])\s+([A-Z])/', "$1\n<br />$2", spip_htmlentities($query)); |
|
| 106 | + $e = sql_explain($query, $serveur); |
|
| 107 | + $r = str_replace('Resource id ', '', (is_object($result) ? get_class($result) : $result)); |
|
| 108 | + $GLOBALS['tableau_des_temps'][] = array($dt, $nb, $boucle, $q, $e, $r, $contexte); |
|
| 109 | 109 | } |
| 110 | 110 | |
| 111 | 111 | |
| 112 | 112 | function chrono_requete($temps) { |
| 113 | - $total = 0; |
|
| 114 | - $hors = "<i>" . _T('zbug_hors_compilation') . "</i>"; |
|
| 115 | - $t = $q = $n = $d = array(); |
|
| 116 | - // Totaliser les temps et completer le Explain |
|
| 117 | - foreach ($temps as $key => $v) { |
|
| 118 | - list($dt, $nb, $boucle, $query, $explain, $res, $contexte) = $v; |
|
| 119 | - if (is_array($contexte)) { |
|
| 120 | - $k = ($contexte[0] . " $boucle"); |
|
| 121 | - include_spip('public/compiler'); |
|
| 122 | - $env = reconstruire_contexte_compil($contexte); |
|
| 123 | - } else { |
|
| 124 | - $k = $env = $boucle; |
|
| 125 | - } |
|
| 126 | - |
|
| 127 | - $total += $dt; |
|
| 128 | - $t[$key] = $dt; |
|
| 129 | - $q[$key] = $nb; |
|
| 130 | - if (!isset($d[$k])) { |
|
| 131 | - $d[$k] = 0; |
|
| 132 | - $n[$k] = 0; |
|
| 133 | - } |
|
| 134 | - $d[$k] += $dt; |
|
| 135 | - ++$n[$k]; |
|
| 136 | - |
|
| 137 | - if (!is_array($explain)) { |
|
| 138 | - $explain = array(); |
|
| 139 | - } |
|
| 140 | - foreach ($explain as $j => $v) { |
|
| 141 | - $explain[$j] = "<tr><th>$j</th><td>" |
|
| 142 | - . str_replace(';', '<br />', $v) |
|
| 143 | - . "</td></tr>"; |
|
| 144 | - } |
|
| 145 | - $e = "<table class='explain'>" |
|
| 146 | - . "<caption>" |
|
| 147 | - . $query |
|
| 148 | - . "</caption>" |
|
| 149 | - . "<tr><th>Time</th><td>$dt</td></tr>" |
|
| 150 | - . "<tr><th>Order</th><td>$nb</td></tr>" |
|
| 151 | - . "<tr><th>Res</th><td>$res</td></tr>" |
|
| 152 | - . join('', $explain) |
|
| 153 | - . "</table>"; |
|
| 154 | - |
|
| 155 | - $temps[$key] = array($e, $env, $k); |
|
| 156 | - } |
|
| 157 | - // Trier par temps d'execution decroissant |
|
| 158 | - array_multisort($t, SORT_DESC, $q, $temps); |
|
| 159 | - arsort($d); |
|
| 160 | - $i = 1; |
|
| 161 | - $t = array(); |
|
| 162 | - // Fabriquer les liens de navigations dans le tableau des temps |
|
| 163 | - foreach ($temps as $k => $v) { |
|
| 164 | - $titre = strip_tags($v[2]); |
|
| 165 | - $href = quote_amp($GLOBALS['REQUEST_URI']) . "#req$i"; |
|
| 166 | - $href = str_replace("\\'", ''', $href); |
|
| 167 | - |
|
| 168 | - if (!isset($t[$v[2]])) { |
|
| 169 | - $t[$v[2]] = array(); |
|
| 170 | - } |
|
| 171 | - $t[$v[2]][] = "<span class='spip-debug-arg'> " |
|
| 172 | - . "<a title='$titre' href='$href'>$i</a>" |
|
| 173 | - . '</span>' |
|
| 174 | - . ((count($t[$v[2]]) % 10 == 9) ? "<br />" : ''); |
|
| 175 | - $i++; |
|
| 176 | - } |
|
| 177 | - |
|
| 178 | - if ($d['']) { |
|
| 179 | - $d[$hors] = $d['']; |
|
| 180 | - $n[$hors] = $n['']; |
|
| 181 | - $t[$hors] = $t['']; |
|
| 182 | - } |
|
| 183 | - unset($d['']); |
|
| 184 | - // Fabriquer le tableau des liens de navigation dans le grand tableau |
|
| 185 | - foreach ($d as $k => $v) { |
|
| 186 | - $d[$k] = $n[$k] . "</td><td>$k</td><td class='time'>$v</td><td class='liste-reqs'>" |
|
| 187 | - . join('', $t[$k]); |
|
| 188 | - } |
|
| 189 | - |
|
| 190 | - $navigation = array( |
|
| 191 | - _T('zbug_statistiques'), |
|
| 192 | - "<tr><td>" |
|
| 193 | - . join("</td></tr>\n<tr><td>", $d) |
|
| 194 | - . "</td></tr>\n" |
|
| 195 | - . (# _request('var_mode_objet') ? '' : |
|
| 196 | - ("<tr><td>" . count($temps) . "</td><td>" . _T('info_total') . '</td><td class="time">' . $total . "</td><td></td></tr>")) |
|
| 197 | - ); |
|
| 198 | - |
|
| 199 | - return array($temps, $navigation); |
|
| 113 | + $total = 0; |
|
| 114 | + $hors = "<i>" . _T('zbug_hors_compilation') . "</i>"; |
|
| 115 | + $t = $q = $n = $d = array(); |
|
| 116 | + // Totaliser les temps et completer le Explain |
|
| 117 | + foreach ($temps as $key => $v) { |
|
| 118 | + list($dt, $nb, $boucle, $query, $explain, $res, $contexte) = $v; |
|
| 119 | + if (is_array($contexte)) { |
|
| 120 | + $k = ($contexte[0] . " $boucle"); |
|
| 121 | + include_spip('public/compiler'); |
|
| 122 | + $env = reconstruire_contexte_compil($contexte); |
|
| 123 | + } else { |
|
| 124 | + $k = $env = $boucle; |
|
| 125 | + } |
|
| 126 | + |
|
| 127 | + $total += $dt; |
|
| 128 | + $t[$key] = $dt; |
|
| 129 | + $q[$key] = $nb; |
|
| 130 | + if (!isset($d[$k])) { |
|
| 131 | + $d[$k] = 0; |
|
| 132 | + $n[$k] = 0; |
|
| 133 | + } |
|
| 134 | + $d[$k] += $dt; |
|
| 135 | + ++$n[$k]; |
|
| 136 | + |
|
| 137 | + if (!is_array($explain)) { |
|
| 138 | + $explain = array(); |
|
| 139 | + } |
|
| 140 | + foreach ($explain as $j => $v) { |
|
| 141 | + $explain[$j] = "<tr><th>$j</th><td>" |
|
| 142 | + . str_replace(';', '<br />', $v) |
|
| 143 | + . "</td></tr>"; |
|
| 144 | + } |
|
| 145 | + $e = "<table class='explain'>" |
|
| 146 | + . "<caption>" |
|
| 147 | + . $query |
|
| 148 | + . "</caption>" |
|
| 149 | + . "<tr><th>Time</th><td>$dt</td></tr>" |
|
| 150 | + . "<tr><th>Order</th><td>$nb</td></tr>" |
|
| 151 | + . "<tr><th>Res</th><td>$res</td></tr>" |
|
| 152 | + . join('', $explain) |
|
| 153 | + . "</table>"; |
|
| 154 | + |
|
| 155 | + $temps[$key] = array($e, $env, $k); |
|
| 156 | + } |
|
| 157 | + // Trier par temps d'execution decroissant |
|
| 158 | + array_multisort($t, SORT_DESC, $q, $temps); |
|
| 159 | + arsort($d); |
|
| 160 | + $i = 1; |
|
| 161 | + $t = array(); |
|
| 162 | + // Fabriquer les liens de navigations dans le tableau des temps |
|
| 163 | + foreach ($temps as $k => $v) { |
|
| 164 | + $titre = strip_tags($v[2]); |
|
| 165 | + $href = quote_amp($GLOBALS['REQUEST_URI']) . "#req$i"; |
|
| 166 | + $href = str_replace("\\'", ''', $href); |
|
| 167 | + |
|
| 168 | + if (!isset($t[$v[2]])) { |
|
| 169 | + $t[$v[2]] = array(); |
|
| 170 | + } |
|
| 171 | + $t[$v[2]][] = "<span class='spip-debug-arg'> " |
|
| 172 | + . "<a title='$titre' href='$href'>$i</a>" |
|
| 173 | + . '</span>' |
|
| 174 | + . ((count($t[$v[2]]) % 10 == 9) ? "<br />" : ''); |
|
| 175 | + $i++; |
|
| 176 | + } |
|
| 177 | + |
|
| 178 | + if ($d['']) { |
|
| 179 | + $d[$hors] = $d['']; |
|
| 180 | + $n[$hors] = $n['']; |
|
| 181 | + $t[$hors] = $t['']; |
|
| 182 | + } |
|
| 183 | + unset($d['']); |
|
| 184 | + // Fabriquer le tableau des liens de navigation dans le grand tableau |
|
| 185 | + foreach ($d as $k => $v) { |
|
| 186 | + $d[$k] = $n[$k] . "</td><td>$k</td><td class='time'>$v</td><td class='liste-reqs'>" |
|
| 187 | + . join('', $t[$k]); |
|
| 188 | + } |
|
| 189 | + |
|
| 190 | + $navigation = array( |
|
| 191 | + _T('zbug_statistiques'), |
|
| 192 | + "<tr><td>" |
|
| 193 | + . join("</td></tr>\n<tr><td>", $d) |
|
| 194 | + . "</td></tr>\n" |
|
| 195 | + . (# _request('var_mode_objet') ? '' : |
|
| 196 | + ("<tr><td>" . count($temps) . "</td><td>" . _T('info_total') . '</td><td class="time">' . $total . "</td><td></td></tr>")) |
|
| 197 | + ); |
|
| 198 | + |
|
| 199 | + return array($temps, $navigation); |
|
| 200 | 200 | } |
@@ -20,15 +20,13 @@ discard block |
||
| 20 | 20 | if ($trace === '?' or defined('_DEBUG_TRACE_QUERIES')) { |
| 21 | 21 | if (defined('_DEBUG_TRACE_QUERIES') and _DEBUG_TRACE_QUERIES) { |
| 22 | 22 | $trace = true; |
| 23 | - } |
|
| 24 | - else { |
|
| 23 | + } else { |
|
| 25 | 24 | if (empty($GLOBALS['visiteur_session'])) { |
| 26 | 25 | // si un anonyme fait un var_profile on est oblige de remplir le tableau des temps en attendant de savoir |
| 27 | 26 | // car ici on ne sait pas si c'est un hit anonyme |
| 28 | 27 | // ou une requete SQL faite avant chargement de la session |
| 29 | 28 | $trace = (!empty($_GET['var_profile']) ? '?' : false); |
| 30 | - } |
|
| 31 | - else { |
|
| 29 | + } else { |
|
| 32 | 30 | include_spip('inc/autoriser'); |
| 33 | 31 | // gare au bouclage sur calcul de droits au premier appel |
| 34 | 32 | // A fortiori quand on demande une trace |
@@ -50,8 +48,7 @@ discard block |
||
| 50 | 48 | // car ici on ne sait pas si c'est un hit anonyme |
| 51 | 49 | // ou une requete SQL faite avant chargement de la session |
| 52 | 50 | $trace = (!empty($_GET['var_profile']) ? '?' : false); |
| 53 | - } |
|
| 54 | - else { |
|
| 51 | + } else { |
|
| 55 | 52 | include_spip('inc/autoriser'); |
| 56 | 53 | // gare au bouclage sur calcul de droits au premier appel |
| 57 | 54 | // A fortiori quand on demande une trace |
@@ -22,11 +22,11 @@ discard block |
||
| 22 | 22 | return $r3; |
| 23 | 23 | } |
| 24 | 24 | } |
| 25 | - if ((tester_url_absolue($redirect) or preg_match(',^\w+:,',trim($redirect))) |
|
| 25 | + if ((tester_url_absolue($redirect) or preg_match(',^\w+:,', trim($redirect))) |
|
| 26 | 26 | and !defined('_AUTORISER_ACTION_ABS_REDIRECT')) { |
| 27 | 27 | // si l'url est une url du site, on la laisse passer sans rien faire |
| 28 | 28 | // c'est encore le plus simple |
| 29 | - $base = $GLOBALS['meta']['adresse_site'] . "/"; |
|
| 29 | + $base = $GLOBALS['meta']['adresse_site']."/"; |
|
| 30 | 30 | if (strlen($base) and strncmp($redirect, $base, strlen($base)) == 0) { |
| 31 | 31 | return $redirect; |
| 32 | 32 | } |
@@ -145,7 +145,7 @@ discard block |
||
| 145 | 145 | if ($ancre = _request('var_ajax_ancre')) { |
| 146 | 146 | // pas n'importe quoi quand meme dans la variable ! |
| 147 | 147 | $ancre = str_replace(array('<', '"', "'"), array('<', '"', ''), $ancre); |
| 148 | - $texte = "<a href='#$ancre' name='ajax_ancre' style='display:none;'>anchor</a>" . $texte; |
|
| 148 | + $texte = "<a href='#$ancre' name='ajax_ancre' style='display:none;'>anchor</a>".$texte; |
|
| 149 | 149 | } |
| 150 | 150 | } else { |
| 151 | 151 | include_spip('inc/headers'); |
@@ -299,7 +299,7 @@ discard block |
||
| 299 | 299 | // on ajoute un br en display none en tete du retour ajax pour regler un bug dans IE6/7 |
| 300 | 300 | // sans cela le formulaire n'est pas actif apres le hit ajax |
| 301 | 301 | // la classe ajax-form-is-ok sert a s'assurer que le retour ajax s'est bien passe |
| 302 | - $retour = "<br class='bugajaxie ajax-form-is-ok' style='display:none;'/>" . $retour; |
|
| 302 | + $retour = "<br class='bugajaxie ajax-form-is-ok' style='display:none;'/>".$retour; |
|
| 303 | 303 | ajax_retour($retour, false); |
| 304 | 304 | |
| 305 | 305 | return true; // on a fini le hit |
@@ -11,156 +11,156 @@ discard block |
||
| 11 | 11 | \***************************************************************************/ |
| 12 | 12 | |
| 13 | 13 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 14 | - return; |
|
| 14 | + return; |
|
| 15 | 15 | } |
| 16 | 16 | |
| 17 | 17 | function securiser_redirect_action($redirect) { |
| 18 | - // cas d'un double urlencode : si un urldecode de l'url n'est pas secure, on retient ca comme redirect |
|
| 19 | - if (strpos($redirect, '%') !== false) { |
|
| 20 | - $r2 = urldecode($redirect); |
|
| 21 | - if (($r3 = securiser_redirect_action($r2)) !== $r2) { |
|
| 22 | - return $r3; |
|
| 23 | - } |
|
| 24 | - } |
|
| 25 | - if ((tester_url_absolue($redirect) or preg_match(',^\w+:,',trim($redirect))) |
|
| 26 | - and !defined('_AUTORISER_ACTION_ABS_REDIRECT')) { |
|
| 27 | - // si l'url est une url du site, on la laisse passer sans rien faire |
|
| 28 | - // c'est encore le plus simple |
|
| 29 | - $base = $GLOBALS['meta']['adresse_site'] . "/"; |
|
| 30 | - if (strlen($base) and strncmp($redirect, $base, strlen($base)) == 0) { |
|
| 31 | - return $redirect; |
|
| 32 | - } |
|
| 33 | - $base = url_de_base(); |
|
| 34 | - if (strlen($base) and strncmp($redirect, $base, strlen($base)) == 0) { |
|
| 35 | - return $redirect; |
|
| 36 | - } |
|
| 18 | + // cas d'un double urlencode : si un urldecode de l'url n'est pas secure, on retient ca comme redirect |
|
| 19 | + if (strpos($redirect, '%') !== false) { |
|
| 20 | + $r2 = urldecode($redirect); |
|
| 21 | + if (($r3 = securiser_redirect_action($r2)) !== $r2) { |
|
| 22 | + return $r3; |
|
| 23 | + } |
|
| 24 | + } |
|
| 25 | + if ((tester_url_absolue($redirect) or preg_match(',^\w+:,',trim($redirect))) |
|
| 26 | + and !defined('_AUTORISER_ACTION_ABS_REDIRECT')) { |
|
| 27 | + // si l'url est une url du site, on la laisse passer sans rien faire |
|
| 28 | + // c'est encore le plus simple |
|
| 29 | + $base = $GLOBALS['meta']['adresse_site'] . "/"; |
|
| 30 | + if (strlen($base) and strncmp($redirect, $base, strlen($base)) == 0) { |
|
| 31 | + return $redirect; |
|
| 32 | + } |
|
| 33 | + $base = url_de_base(); |
|
| 34 | + if (strlen($base) and strncmp($redirect, $base, strlen($base)) == 0) { |
|
| 35 | + return $redirect; |
|
| 36 | + } |
|
| 37 | 37 | |
| 38 | - return ""; |
|
| 39 | - } |
|
| 38 | + return ""; |
|
| 39 | + } |
|
| 40 | 40 | |
| 41 | - return $redirect; |
|
| 41 | + return $redirect; |
|
| 42 | 42 | } |
| 43 | 43 | |
| 44 | 44 | // https://code.spip.net/@traiter_appels_actions |
| 45 | 45 | function traiter_appels_actions() { |
| 46 | - // cas de l'appel qui renvoie une redirection (302) ou rien (204) |
|
| 47 | - if ($action = _request('action')) { |
|
| 48 | - include_spip('base/abstract_sql'); // chargement systematique pour les actions |
|
| 49 | - include_spip('inc/autoriser'); |
|
| 50 | - include_spip('inc/headers'); |
|
| 51 | - include_spip('inc/actions'); |
|
| 52 | - // des actions peuvent appeler _T |
|
| 53 | - if (!isset($GLOBALS['spip_lang'])) { |
|
| 54 | - include_spip('inc/lang'); |
|
| 55 | - utiliser_langue_visiteur(); |
|
| 56 | - } |
|
| 57 | - // si l'action est provoque par un hit {ajax} |
|
| 58 | - // il faut transmettre l'env ajax au redirect |
|
| 59 | - // on le met avant dans la query string au cas ou l'action fait elle meme sa redirection |
|
| 60 | - if (($v = _request('var_ajax')) |
|
| 61 | - and ($v !== 'form') |
|
| 62 | - and ($args = _request('var_ajax_env')) |
|
| 63 | - and ($url = _request('redirect')) |
|
| 64 | - ) { |
|
| 65 | - $url = parametre_url($url, 'var_ajax', $v, '&'); |
|
| 66 | - $url = parametre_url($url, 'var_ajax_env', $args, '&'); |
|
| 67 | - set_request('redirect', $url); |
|
| 68 | - } else { |
|
| 69 | - if (_request('redirect')) { |
|
| 70 | - set_request('redirect', securiser_redirect_action(_request('redirect'))); |
|
| 71 | - } |
|
| 72 | - } |
|
| 73 | - $var_f = charger_fonction($action, 'action'); |
|
| 74 | - $var_f(); |
|
| 75 | - if (!isset($GLOBALS['redirect'])) { |
|
| 76 | - $GLOBALS['redirect'] = _request('redirect'); |
|
| 77 | - if ($_SERVER['REQUEST_METHOD'] == 'POST') { |
|
| 78 | - $GLOBALS['redirect'] = urldecode($GLOBALS['redirect']); |
|
| 79 | - } |
|
| 80 | - $GLOBALS['redirect'] = securiser_redirect_action($GLOBALS['redirect']); |
|
| 81 | - } |
|
| 82 | - if ($url = $GLOBALS['redirect']) { |
|
| 83 | - // si l'action est provoque par un hit {ajax} |
|
| 84 | - // il faut transmettre l'env ajax au redirect |
|
| 85 | - // qui a pu etre defini par l'action |
|
| 86 | - if (($v = _request('var_ajax')) |
|
| 87 | - and ($v !== 'form') |
|
| 88 | - and ($args = _request('var_ajax_env')) |
|
| 89 | - ) { |
|
| 90 | - $url = parametre_url($url, 'var_ajax', $v, '&'); |
|
| 91 | - $url = parametre_url($url, 'var_ajax_env', $args, '&'); |
|
| 92 | - // passer l'ancre en variable pour pouvoir la gerer cote serveur |
|
| 93 | - $url = preg_replace(',#([^#&?]+)$,', "&var_ajax_ancre=\\1", $url); |
|
| 94 | - } |
|
| 95 | - $url = str_replace('&', '&', $url); // les redirections se font en &, pas en en & |
|
| 96 | - redirige_par_entete($url); |
|
| 97 | - } |
|
| 46 | + // cas de l'appel qui renvoie une redirection (302) ou rien (204) |
|
| 47 | + if ($action = _request('action')) { |
|
| 48 | + include_spip('base/abstract_sql'); // chargement systematique pour les actions |
|
| 49 | + include_spip('inc/autoriser'); |
|
| 50 | + include_spip('inc/headers'); |
|
| 51 | + include_spip('inc/actions'); |
|
| 52 | + // des actions peuvent appeler _T |
|
| 53 | + if (!isset($GLOBALS['spip_lang'])) { |
|
| 54 | + include_spip('inc/lang'); |
|
| 55 | + utiliser_langue_visiteur(); |
|
| 56 | + } |
|
| 57 | + // si l'action est provoque par un hit {ajax} |
|
| 58 | + // il faut transmettre l'env ajax au redirect |
|
| 59 | + // on le met avant dans la query string au cas ou l'action fait elle meme sa redirection |
|
| 60 | + if (($v = _request('var_ajax')) |
|
| 61 | + and ($v !== 'form') |
|
| 62 | + and ($args = _request('var_ajax_env')) |
|
| 63 | + and ($url = _request('redirect')) |
|
| 64 | + ) { |
|
| 65 | + $url = parametre_url($url, 'var_ajax', $v, '&'); |
|
| 66 | + $url = parametre_url($url, 'var_ajax_env', $args, '&'); |
|
| 67 | + set_request('redirect', $url); |
|
| 68 | + } else { |
|
| 69 | + if (_request('redirect')) { |
|
| 70 | + set_request('redirect', securiser_redirect_action(_request('redirect'))); |
|
| 71 | + } |
|
| 72 | + } |
|
| 73 | + $var_f = charger_fonction($action, 'action'); |
|
| 74 | + $var_f(); |
|
| 75 | + if (!isset($GLOBALS['redirect'])) { |
|
| 76 | + $GLOBALS['redirect'] = _request('redirect'); |
|
| 77 | + if ($_SERVER['REQUEST_METHOD'] == 'POST') { |
|
| 78 | + $GLOBALS['redirect'] = urldecode($GLOBALS['redirect']); |
|
| 79 | + } |
|
| 80 | + $GLOBALS['redirect'] = securiser_redirect_action($GLOBALS['redirect']); |
|
| 81 | + } |
|
| 82 | + if ($url = $GLOBALS['redirect']) { |
|
| 83 | + // si l'action est provoque par un hit {ajax} |
|
| 84 | + // il faut transmettre l'env ajax au redirect |
|
| 85 | + // qui a pu etre defini par l'action |
|
| 86 | + if (($v = _request('var_ajax')) |
|
| 87 | + and ($v !== 'form') |
|
| 88 | + and ($args = _request('var_ajax_env')) |
|
| 89 | + ) { |
|
| 90 | + $url = parametre_url($url, 'var_ajax', $v, '&'); |
|
| 91 | + $url = parametre_url($url, 'var_ajax_env', $args, '&'); |
|
| 92 | + // passer l'ancre en variable pour pouvoir la gerer cote serveur |
|
| 93 | + $url = preg_replace(',#([^#&?]+)$,', "&var_ajax_ancre=\\1", $url); |
|
| 94 | + } |
|
| 95 | + $url = str_replace('&', '&', $url); // les redirections se font en &, pas en en & |
|
| 96 | + redirige_par_entete($url); |
|
| 97 | + } |
|
| 98 | 98 | |
| 99 | - // attention : avec zlib.output_compression=1 on a vu des cas de ob_get_length() qui renvoi 0 |
|
| 100 | - // et du coup en renvoi un status 204 a tort (vu sur le menu rubriques notamment) |
|
| 101 | - if (!headers_sent() |
|
| 102 | - and !ob_get_length() |
|
| 103 | - ) { |
|
| 104 | - http_status(204); |
|
| 105 | - } // No Content |
|
| 106 | - return true; |
|
| 107 | - } |
|
| 99 | + // attention : avec zlib.output_compression=1 on a vu des cas de ob_get_length() qui renvoi 0 |
|
| 100 | + // et du coup en renvoi un status 204 a tort (vu sur le menu rubriques notamment) |
|
| 101 | + if (!headers_sent() |
|
| 102 | + and !ob_get_length() |
|
| 103 | + ) { |
|
| 104 | + http_status(204); |
|
| 105 | + } // No Content |
|
| 106 | + return true; |
|
| 107 | + } |
|
| 108 | 108 | |
| 109 | - return false; |
|
| 109 | + return false; |
|
| 110 | 110 | } |
| 111 | 111 | |
| 112 | 112 | |
| 113 | 113 | // https://code.spip.net/@refuser_traiter_formulaire_ajax |
| 114 | 114 | function refuser_traiter_formulaire_ajax() { |
| 115 | - if ($v = _request('var_ajax') |
|
| 116 | - and $v == 'form' |
|
| 117 | - and $form = _request('formulaire_action') |
|
| 118 | - and $args = _request('formulaire_action_args') |
|
| 119 | - and decoder_contexte_ajax($args, $form) !== false |
|
| 120 | - ) { |
|
| 121 | - // on est bien dans le contexte de traitement d'un formulaire en ajax |
|
| 122 | - // mais traiter ne veut pas |
|
| 123 | - // on le dit a la page qui va resumbit |
|
| 124 | - // sans ajax |
|
| 125 | - include_spip('inc/actions'); |
|
| 126 | - ajax_retour('noajax', false); |
|
| 127 | - exit; |
|
| 128 | - } |
|
| 115 | + if ($v = _request('var_ajax') |
|
| 116 | + and $v == 'form' |
|
| 117 | + and $form = _request('formulaire_action') |
|
| 118 | + and $args = _request('formulaire_action_args') |
|
| 119 | + and decoder_contexte_ajax($args, $form) !== false |
|
| 120 | + ) { |
|
| 121 | + // on est bien dans le contexte de traitement d'un formulaire en ajax |
|
| 122 | + // mais traiter ne veut pas |
|
| 123 | + // on le dit a la page qui va resumbit |
|
| 124 | + // sans ajax |
|
| 125 | + include_spip('inc/actions'); |
|
| 126 | + ajax_retour('noajax', false); |
|
| 127 | + exit; |
|
| 128 | + } |
|
| 129 | 129 | } |
| 130 | 130 | |
| 131 | 131 | // https://code.spip.net/@traiter_appels_inclusions_ajax |
| 132 | 132 | function traiter_appels_inclusions_ajax() { |
| 133 | - // traiter les appels de bloc ajax (ex: pagination) |
|
| 134 | - if ($v = _request('var_ajax') |
|
| 135 | - and $v !== 'form' |
|
| 136 | - and $args = _request('var_ajax_env') |
|
| 137 | - ) { |
|
| 138 | - include_spip('inc/filtres'); |
|
| 139 | - include_spip('inc/actions'); |
|
| 140 | - if ($args = decoder_contexte_ajax($args) |
|
| 141 | - and $fond = $args['fond'] |
|
| 142 | - ) { |
|
| 143 | - include_spip('public/assembler'); |
|
| 144 | - $contexte = calculer_contexte(); |
|
| 145 | - $contexte = array_merge($args, $contexte); |
|
| 146 | - $page = recuperer_fond($fond, $contexte, array('trim' => false)); |
|
| 147 | - $texte = $page; |
|
| 148 | - if ($ancre = _request('var_ajax_ancre')) { |
|
| 149 | - // pas n'importe quoi quand meme dans la variable ! |
|
| 150 | - $ancre = str_replace(array('<', '"', "'"), array('<', '"', ''), $ancre); |
|
| 151 | - $texte = "<a href='#$ancre' name='ajax_ancre' style='display:none;'>anchor</a>" . $texte; |
|
| 152 | - } |
|
| 153 | - } else { |
|
| 154 | - include_spip('inc/headers'); |
|
| 155 | - http_status(400); |
|
| 156 | - $texte = _L('signature ajax bloc incorrecte'); |
|
| 157 | - } |
|
| 158 | - ajax_retour($texte, false); |
|
| 133 | + // traiter les appels de bloc ajax (ex: pagination) |
|
| 134 | + if ($v = _request('var_ajax') |
|
| 135 | + and $v !== 'form' |
|
| 136 | + and $args = _request('var_ajax_env') |
|
| 137 | + ) { |
|
| 138 | + include_spip('inc/filtres'); |
|
| 139 | + include_spip('inc/actions'); |
|
| 140 | + if ($args = decoder_contexte_ajax($args) |
|
| 141 | + and $fond = $args['fond'] |
|
| 142 | + ) { |
|
| 143 | + include_spip('public/assembler'); |
|
| 144 | + $contexte = calculer_contexte(); |
|
| 145 | + $contexte = array_merge($args, $contexte); |
|
| 146 | + $page = recuperer_fond($fond, $contexte, array('trim' => false)); |
|
| 147 | + $texte = $page; |
|
| 148 | + if ($ancre = _request('var_ajax_ancre')) { |
|
| 149 | + // pas n'importe quoi quand meme dans la variable ! |
|
| 150 | + $ancre = str_replace(array('<', '"', "'"), array('<', '"', ''), $ancre); |
|
| 151 | + $texte = "<a href='#$ancre' name='ajax_ancre' style='display:none;'>anchor</a>" . $texte; |
|
| 152 | + } |
|
| 153 | + } else { |
|
| 154 | + include_spip('inc/headers'); |
|
| 155 | + http_status(400); |
|
| 156 | + $texte = _L('signature ajax bloc incorrecte'); |
|
| 157 | + } |
|
| 158 | + ajax_retour($texte, false); |
|
| 159 | 159 | |
| 160 | - return true; // on a fini le hit |
|
| 161 | - } |
|
| 160 | + return true; // on a fini le hit |
|
| 161 | + } |
|
| 162 | 162 | |
| 163 | - return false; |
|
| 163 | + return false; |
|
| 164 | 164 | } |
| 165 | 165 | |
| 166 | 166 | // au 1er appel, traite les formulaires dynamiques charger/verifier/traiter |
@@ -169,148 +169,148 @@ discard block |
||
| 169 | 169 | |
| 170 | 170 | // https://code.spip.net/@traiter_formulaires_dynamiques |
| 171 | 171 | function traiter_formulaires_dynamiques($get = false) { |
| 172 | - static $post = array(); |
|
| 173 | - static $done = false; |
|
| 172 | + static $post = array(); |
|
| 173 | + static $done = false; |
|
| 174 | 174 | |
| 175 | - if ($get) { |
|
| 176 | - return $post; |
|
| 177 | - } |
|
| 178 | - if ($done) { |
|
| 179 | - return false; |
|
| 180 | - } |
|
| 181 | - $done = true; |
|
| 175 | + if ($get) { |
|
| 176 | + return $post; |
|
| 177 | + } |
|
| 178 | + if ($done) { |
|
| 179 | + return false; |
|
| 180 | + } |
|
| 181 | + $done = true; |
|
| 182 | 182 | |
| 183 | - if (!($form = _request('formulaire_action') |
|
| 184 | - and $args = _request('formulaire_action_args')) |
|
| 185 | - ) { |
|
| 186 | - return false; |
|
| 187 | - } // le hit peut continuer normalement |
|
| 183 | + if (!($form = _request('formulaire_action') |
|
| 184 | + and $args = _request('formulaire_action_args')) |
|
| 185 | + ) { |
|
| 186 | + return false; |
|
| 187 | + } // le hit peut continuer normalement |
|
| 188 | 188 | |
| 189 | - include_spip('inc/filtres'); |
|
| 190 | - if (($args = decoder_contexte_ajax($args, $form)) === false) { |
|
| 191 | - spip_log("signature ajax form incorrecte : $form"); |
|
| 189 | + include_spip('inc/filtres'); |
|
| 190 | + if (($args = decoder_contexte_ajax($args, $form)) === false) { |
|
| 191 | + spip_log("signature ajax form incorrecte : $form"); |
|
| 192 | 192 | |
| 193 | - return false; // continuons le hit comme si de rien etait |
|
| 194 | - } else { |
|
| 195 | - include_spip('inc/lang'); |
|
| 196 | - // sauvegarder la lang en cours |
|
| 197 | - $old_lang = $GLOBALS['spip_lang']; |
|
| 198 | - // changer la langue avec celle qui a cours dans le formulaire |
|
| 199 | - // on la depile de $args car c'est un argument implicite masque |
|
| 200 | - changer_langue(array_shift($args)); |
|
| 193 | + return false; // continuons le hit comme si de rien etait |
|
| 194 | + } else { |
|
| 195 | + include_spip('inc/lang'); |
|
| 196 | + // sauvegarder la lang en cours |
|
| 197 | + $old_lang = $GLOBALS['spip_lang']; |
|
| 198 | + // changer la langue avec celle qui a cours dans le formulaire |
|
| 199 | + // on la depile de $args car c'est un argument implicite masque |
|
| 200 | + changer_langue(array_shift($args)); |
|
| 201 | 201 | |
| 202 | 202 | |
| 203 | - // inclure mes_fonctions et autres filtres avant verifier/traiter |
|
| 204 | - include_fichiers_fonctions(); |
|
| 205 | - // ainsi que l'API SQL bien utile dans verifier/traiter |
|
| 206 | - include_spip('base/abstract_sql'); |
|
| 203 | + // inclure mes_fonctions et autres filtres avant verifier/traiter |
|
| 204 | + include_fichiers_fonctions(); |
|
| 205 | + // ainsi que l'API SQL bien utile dans verifier/traiter |
|
| 206 | + include_spip('base/abstract_sql'); |
|
| 207 | 207 | |
| 208 | - /** |
|
| 209 | - * Pipeline exécuté lors de la soumission d'un formulaire, |
|
| 210 | - * mais avant l'appel de la fonction de vérification. |
|
| 211 | - */ |
|
| 212 | - pipeline( |
|
| 213 | - 'formulaire_receptionner', |
|
| 214 | - array( |
|
| 215 | - 'args' => array('form' => $form, 'args' => $args), |
|
| 216 | - 'data' => null, |
|
| 217 | - ) |
|
| 218 | - ); |
|
| 208 | + /** |
|
| 209 | + * Pipeline exécuté lors de la soumission d'un formulaire, |
|
| 210 | + * mais avant l'appel de la fonction de vérification. |
|
| 211 | + */ |
|
| 212 | + pipeline( |
|
| 213 | + 'formulaire_receptionner', |
|
| 214 | + array( |
|
| 215 | + 'args' => array('form' => $form, 'args' => $args), |
|
| 216 | + 'data' => null, |
|
| 217 | + ) |
|
| 218 | + ); |
|
| 219 | 219 | |
| 220 | - $verifier = charger_fonction("verifier", "formulaires/$form/", true); |
|
| 221 | - $post["erreurs_$form"] = pipeline( |
|
| 222 | - 'formulaire_verifier', |
|
| 223 | - array( |
|
| 224 | - 'args' => array('form' => $form, 'args' => $args), |
|
| 225 | - 'data' => $verifier ? call_user_func_array($verifier, $args) : array() |
|
| 226 | - ) |
|
| 227 | - ); |
|
| 228 | - // prise en charge CVT multi etape si besoin |
|
| 229 | - if (_request('cvtm_prev_post')) { |
|
| 230 | - include_spip('inc/cvt_multietapes'); |
|
| 231 | - $post["erreurs_$form"] = cvtmulti_formulaire_verifier_etapes( |
|
| 232 | - array('form' => $form, 'args' => $args), |
|
| 233 | - $post["erreurs_$form"] |
|
| 234 | - ); |
|
| 235 | - } |
|
| 220 | + $verifier = charger_fonction("verifier", "formulaires/$form/", true); |
|
| 221 | + $post["erreurs_$form"] = pipeline( |
|
| 222 | + 'formulaire_verifier', |
|
| 223 | + array( |
|
| 224 | + 'args' => array('form' => $form, 'args' => $args), |
|
| 225 | + 'data' => $verifier ? call_user_func_array($verifier, $args) : array() |
|
| 226 | + ) |
|
| 227 | + ); |
|
| 228 | + // prise en charge CVT multi etape si besoin |
|
| 229 | + if (_request('cvtm_prev_post')) { |
|
| 230 | + include_spip('inc/cvt_multietapes'); |
|
| 231 | + $post["erreurs_$form"] = cvtmulti_formulaire_verifier_etapes( |
|
| 232 | + array('form' => $form, 'args' => $args), |
|
| 233 | + $post["erreurs_$form"] |
|
| 234 | + ); |
|
| 235 | + } |
|
| 236 | 236 | |
| 237 | - // accessibilite : si des erreurs mais pas de message general l'ajouter |
|
| 238 | - if ((isset($post["erreurs_$form"]) and count($post["erreurs_$form"])) and !isset($post["erreurs_$form"]['message_erreur'])) { |
|
| 239 | - $post["erreurs_$form"]['message_erreur'] = singulier_ou_pluriel(count($post["erreurs_$form"]), |
|
| 240 | - 'avis_1_erreur_saisie', 'avis_nb_erreurs_saisie'); |
|
| 241 | - } |
|
| 237 | + // accessibilite : si des erreurs mais pas de message general l'ajouter |
|
| 238 | + if ((isset($post["erreurs_$form"]) and count($post["erreurs_$form"])) and !isset($post["erreurs_$form"]['message_erreur'])) { |
|
| 239 | + $post["erreurs_$form"]['message_erreur'] = singulier_ou_pluriel(count($post["erreurs_$form"]), |
|
| 240 | + 'avis_1_erreur_saisie', 'avis_nb_erreurs_saisie'); |
|
| 241 | + } |
|
| 242 | 242 | |
| 243 | - // si on ne demandait qu'une verif json |
|
| 244 | - if (_request('formulaire_action_verifier_json')) { |
|
| 245 | - include_spip('inc/json'); |
|
| 246 | - include_spip('inc/actions'); |
|
| 247 | - ajax_retour(json_encode($post["erreurs_$form"]), 'text/plain'); |
|
| 243 | + // si on ne demandait qu'une verif json |
|
| 244 | + if (_request('formulaire_action_verifier_json')) { |
|
| 245 | + include_spip('inc/json'); |
|
| 246 | + include_spip('inc/actions'); |
|
| 247 | + ajax_retour(json_encode($post["erreurs_$form"]), 'text/plain'); |
|
| 248 | 248 | |
| 249 | - return true; // on a fini le hit |
|
| 250 | - } |
|
| 251 | - $retour = ""; |
|
| 252 | - if (isset($post["erreurs_$form"]) and (count($post["erreurs_$form"]) == 0)) { |
|
| 253 | - $rev = ""; |
|
| 254 | - if ($traiter = charger_fonction("traiter", "formulaires/$form/", true)) { |
|
| 255 | - $rev = call_user_func_array($traiter, $args); |
|
| 256 | - } |
|
| 249 | + return true; // on a fini le hit |
|
| 250 | + } |
|
| 251 | + $retour = ""; |
|
| 252 | + if (isset($post["erreurs_$form"]) and (count($post["erreurs_$form"]) == 0)) { |
|
| 253 | + $rev = ""; |
|
| 254 | + if ($traiter = charger_fonction("traiter", "formulaires/$form/", true)) { |
|
| 255 | + $rev = call_user_func_array($traiter, $args); |
|
| 256 | + } |
|
| 257 | 257 | |
| 258 | - $rev = pipeline( |
|
| 259 | - 'formulaire_traiter', |
|
| 260 | - array( |
|
| 261 | - 'args' => array('form' => $form, 'args' => $args), |
|
| 262 | - 'data' => $rev |
|
| 263 | - ) |
|
| 264 | - ); |
|
| 265 | - // le retour de traiter est |
|
| 266 | - // un tableau explicite ('editable'=>$editable,'message_ok'=>$message,'redirect'=>$redirect,'id_xx'=>$id_xx) |
|
| 267 | - // il permet le pipelinage, en particulier |
|
| 268 | - // en y passant l'id de l'objet cree/modifie |
|
| 269 | - // si message_erreur est present, on considere que le traitement a echoue |
|
| 270 | - $post["message_ok_$form"] = ''; |
|
| 271 | - // on peut avoir message_ok et message_erreur |
|
| 272 | - if (isset($rev['message_ok'])) { |
|
| 273 | - $post["message_ok_$form"] = $rev['message_ok']; |
|
| 274 | - } |
|
| 258 | + $rev = pipeline( |
|
| 259 | + 'formulaire_traiter', |
|
| 260 | + array( |
|
| 261 | + 'args' => array('form' => $form, 'args' => $args), |
|
| 262 | + 'data' => $rev |
|
| 263 | + ) |
|
| 264 | + ); |
|
| 265 | + // le retour de traiter est |
|
| 266 | + // un tableau explicite ('editable'=>$editable,'message_ok'=>$message,'redirect'=>$redirect,'id_xx'=>$id_xx) |
|
| 267 | + // il permet le pipelinage, en particulier |
|
| 268 | + // en y passant l'id de l'objet cree/modifie |
|
| 269 | + // si message_erreur est present, on considere que le traitement a echoue |
|
| 270 | + $post["message_ok_$form"] = ''; |
|
| 271 | + // on peut avoir message_ok et message_erreur |
|
| 272 | + if (isset($rev['message_ok'])) { |
|
| 273 | + $post["message_ok_$form"] = $rev['message_ok']; |
|
| 274 | + } |
|
| 275 | 275 | |
| 276 | - // verifier si traiter n'a pas echoue avec une erreur : |
|
| 277 | - if (isset($rev['message_erreur'])) { |
|
| 278 | - $post["erreurs_$form"]["message_erreur"] = $rev['message_erreur']; |
|
| 279 | - // si il y a une erreur on ne redirige pas |
|
| 280 | - } else { |
|
| 281 | - // sinon faire ce qu'il faut : |
|
| 282 | - if (isset($rev['editable'])) { |
|
| 283 | - $post["editable_$form"] = $rev['editable']; |
|
| 284 | - } |
|
| 285 | - // si une redirection est demandee, appeler redirigae_formulaire qui choisira |
|
| 286 | - // le bon mode de redirection (302 et on ne revient pas ici, ou javascript et on continue) |
|
| 287 | - if (isset($rev['redirect']) and $rev['redirect']) { |
|
| 288 | - include_spip('inc/headers'); |
|
| 289 | - list($masque, $message) = redirige_formulaire($rev['redirect'], '', 'ajaxform'); |
|
| 290 | - $post["message_ok_$form"] .= $message; |
|
| 291 | - $retour .= $masque; |
|
| 292 | - } |
|
| 293 | - } |
|
| 294 | - } |
|
| 295 | - // si le formulaire a ete soumis en ajax, on le renvoie direct ! |
|
| 296 | - if (_request('var_ajax')) { |
|
| 297 | - if (find_in_path('formulaire_.php', 'balise/', true)) { |
|
| 298 | - include_spip('inc/actions'); |
|
| 299 | - include_spip('public/assembler'); |
|
| 300 | - array_unshift($args, $form); |
|
| 301 | - $retour .= inclure_balise_dynamique(call_user_func_array('balise_formulaire__dyn', $args), false); |
|
| 302 | - // on ajoute un br en display none en tete du retour ajax pour regler un bug dans IE6/7 |
|
| 303 | - // sans cela le formulaire n'est pas actif apres le hit ajax |
|
| 304 | - // la classe ajax-form-is-ok sert a s'assurer que le retour ajax s'est bien passe |
|
| 305 | - $retour = "<br class='bugajaxie ajax-form-is-ok' style='display:none;'/>" . $retour; |
|
| 306 | - ajax_retour($retour, false); |
|
| 276 | + // verifier si traiter n'a pas echoue avec une erreur : |
|
| 277 | + if (isset($rev['message_erreur'])) { |
|
| 278 | + $post["erreurs_$form"]["message_erreur"] = $rev['message_erreur']; |
|
| 279 | + // si il y a une erreur on ne redirige pas |
|
| 280 | + } else { |
|
| 281 | + // sinon faire ce qu'il faut : |
|
| 282 | + if (isset($rev['editable'])) { |
|
| 283 | + $post["editable_$form"] = $rev['editable']; |
|
| 284 | + } |
|
| 285 | + // si une redirection est demandee, appeler redirigae_formulaire qui choisira |
|
| 286 | + // le bon mode de redirection (302 et on ne revient pas ici, ou javascript et on continue) |
|
| 287 | + if (isset($rev['redirect']) and $rev['redirect']) { |
|
| 288 | + include_spip('inc/headers'); |
|
| 289 | + list($masque, $message) = redirige_formulaire($rev['redirect'], '', 'ajaxform'); |
|
| 290 | + $post["message_ok_$form"] .= $message; |
|
| 291 | + $retour .= $masque; |
|
| 292 | + } |
|
| 293 | + } |
|
| 294 | + } |
|
| 295 | + // si le formulaire a ete soumis en ajax, on le renvoie direct ! |
|
| 296 | + if (_request('var_ajax')) { |
|
| 297 | + if (find_in_path('formulaire_.php', 'balise/', true)) { |
|
| 298 | + include_spip('inc/actions'); |
|
| 299 | + include_spip('public/assembler'); |
|
| 300 | + array_unshift($args, $form); |
|
| 301 | + $retour .= inclure_balise_dynamique(call_user_func_array('balise_formulaire__dyn', $args), false); |
|
| 302 | + // on ajoute un br en display none en tete du retour ajax pour regler un bug dans IE6/7 |
|
| 303 | + // sans cela le formulaire n'est pas actif apres le hit ajax |
|
| 304 | + // la classe ajax-form-is-ok sert a s'assurer que le retour ajax s'est bien passe |
|
| 305 | + $retour = "<br class='bugajaxie ajax-form-is-ok' style='display:none;'/>" . $retour; |
|
| 306 | + ajax_retour($retour, false); |
|
| 307 | 307 | |
| 308 | - return true; // on a fini le hit |
|
| 309 | - } |
|
| 310 | - } |
|
| 311 | - // restaurer la lang en cours |
|
| 312 | - changer_langue($old_lang); |
|
| 313 | - } |
|
| 308 | + return true; // on a fini le hit |
|
| 309 | + } |
|
| 310 | + } |
|
| 311 | + // restaurer la lang en cours |
|
| 312 | + changer_langue($old_lang); |
|
| 313 | + } |
|
| 314 | 314 | |
| 315 | - return false; // le hit peut continuer normalement |
|
| 315 | + return false; // le hit peut continuer normalement |
|
| 316 | 316 | } |