@@ -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 | /** |
@@ -36,56 +36,56 @@ discard block |
||
| 36 | 36 | * ``` |
| 37 | 37 | **/ |
| 38 | 38 | function action_redirect_dist() { |
| 39 | - $type = _request('type'); |
|
| 40 | - $id = intval(_request('id')); |
|
| 41 | - $page = false; |
|
| 39 | + $type = _request('type'); |
|
| 40 | + $id = intval(_request('id')); |
|
| 41 | + $page = false; |
|
| 42 | 42 | |
| 43 | - // verifier le type ou page transmis |
|
| 44 | - if (!preg_match('/^\w+$/', $type)) { |
|
| 45 | - $page = _request('page'); |
|
| 46 | - if (!preg_match('/^\w+$/', $page)) { |
|
| 47 | - return; |
|
| 48 | - } |
|
| 49 | - } |
|
| 43 | + // verifier le type ou page transmis |
|
| 44 | + if (!preg_match('/^\w+$/', $type)) { |
|
| 45 | + $page = _request('page'); |
|
| 46 | + if (!preg_match('/^\w+$/', $page)) { |
|
| 47 | + return; |
|
| 48 | + } |
|
| 49 | + } |
|
| 50 | 50 | |
| 51 | - if ($var_mode = _request('var_mode')) { |
|
| 52 | - // forcer la mise a jour de l'url de cet objet ! |
|
| 53 | - if (!defined('_VAR_URLS')) { |
|
| 54 | - define('_VAR_URLS', true); |
|
| 55 | - } |
|
| 56 | - } |
|
| 51 | + if ($var_mode = _request('var_mode')) { |
|
| 52 | + // forcer la mise a jour de l'url de cet objet ! |
|
| 53 | + if (!defined('_VAR_URLS')) { |
|
| 54 | + define('_VAR_URLS', true); |
|
| 55 | + } |
|
| 56 | + } |
|
| 57 | 57 | |
| 58 | - if ($page) { |
|
| 59 | - $url = generer_url_public($page, '', true); |
|
| 60 | - } else { |
|
| 61 | - $url = calculer_url_redirect_entite($type, $id, $var_mode); |
|
| 62 | - } |
|
| 58 | + if ($page) { |
|
| 59 | + $url = generer_url_public($page, '', true); |
|
| 60 | + } else { |
|
| 61 | + $url = calculer_url_redirect_entite($type, $id, $var_mode); |
|
| 62 | + } |
|
| 63 | 63 | |
| 64 | - $status = '302'; |
|
| 65 | - if ($url) { |
|
| 66 | - if ($var_mode) { |
|
| 67 | - $url = parametre_url($url, 'var_mode', $var_mode, '&'); |
|
| 68 | - } |
|
| 64 | + $status = '302'; |
|
| 65 | + if ($url) { |
|
| 66 | + if ($var_mode) { |
|
| 67 | + $url = parametre_url($url, 'var_mode', $var_mode, '&'); |
|
| 68 | + } |
|
| 69 | 69 | |
| 70 | - if ( |
|
| 71 | - $var_mode == 'preview' |
|
| 72 | - and defined('_PREVIEW_TOKEN') |
|
| 73 | - and _PREVIEW_TOKEN |
|
| 74 | - and autoriser('previsualiser') |
|
| 75 | - ) { |
|
| 76 | - include_spip('inc/securiser_action'); |
|
| 77 | - $token = calculer_token_previsu($url); |
|
| 78 | - $url = parametre_url($url, 'var_previewtoken', $token); |
|
| 79 | - } |
|
| 70 | + if ( |
|
| 71 | + $var_mode == 'preview' |
|
| 72 | + and defined('_PREVIEW_TOKEN') |
|
| 73 | + and _PREVIEW_TOKEN |
|
| 74 | + and autoriser('previsualiser') |
|
| 75 | + ) { |
|
| 76 | + include_spip('inc/securiser_action'); |
|
| 77 | + $token = calculer_token_previsu($url); |
|
| 78 | + $url = parametre_url($url, 'var_previewtoken', $token); |
|
| 79 | + } |
|
| 80 | 80 | |
| 81 | - if (_request('status') and _request('status') == '301') { |
|
| 82 | - $status = '301'; |
|
| 83 | - } |
|
| 84 | - } else { |
|
| 85 | - $url = generer_url_public('404', '', true); |
|
| 86 | - } |
|
| 81 | + if (_request('status') and _request('status') == '301') { |
|
| 82 | + $status = '301'; |
|
| 83 | + } |
|
| 84 | + } else { |
|
| 85 | + $url = generer_url_public('404', '', true); |
|
| 86 | + } |
|
| 87 | 87 | |
| 88 | - redirige_par_entete(str_replace('&', '&', $url), '', $status); |
|
| 88 | + redirige_par_entete(str_replace('&', '&', $url), '', $status); |
|
| 89 | 89 | } |
| 90 | 90 | |
| 91 | 91 | /** |
@@ -100,35 +100,35 @@ discard block |
||
| 100 | 100 | * @return string|null |
| 101 | 101 | */ |
| 102 | 102 | function calculer_url_redirect_entite($type, $id, $var_mode) { |
| 103 | - $desc = null; |
|
| 104 | - $publie = null; |
|
| 105 | - $url = null; |
|
| 106 | - // invalider le cache à chaque modif en bdd |
|
| 107 | - $date = 0; |
|
| 108 | - if (isset($GLOBALS['meta']['derniere_modif'])) { |
|
| 109 | - $date = $GLOBALS['meta']['derniere_modif']; |
|
| 110 | - } |
|
| 111 | - $key = "url-$date-$type-$id"; |
|
| 103 | + $desc = null; |
|
| 104 | + $publie = null; |
|
| 105 | + $url = null; |
|
| 106 | + // invalider le cache à chaque modif en bdd |
|
| 107 | + $date = 0; |
|
| 108 | + if (isset($GLOBALS['meta']['derniere_modif'])) { |
|
| 109 | + $date = $GLOBALS['meta']['derniere_modif']; |
|
| 110 | + } |
|
| 111 | + $key = "url-$date-$type-$id"; |
|
| 112 | 112 | |
| 113 | - // Obtenir l’url et si elle est publié du cache memoization |
|
| 114 | - if (function_exists('cache_get') and $desc = cache_get($key)) { |
|
| 115 | - [$url, $publie] = $desc; |
|
| 116 | - } |
|
| 117 | - // Si on ne l’a pas trouvé, ou si var mode, on calcule l’url et son état publie |
|
| 118 | - if (empty($desc) or $var_mode) { |
|
| 119 | - $publie = objet_test_si_publie($type, $id); |
|
| 120 | - $url = generer_objet_url_absolue($id, $type, '', '', true); |
|
| 121 | - if (function_exists('cache_set')) { |
|
| 122 | - cache_set($key, [$url, $publie], 3600); |
|
| 123 | - } |
|
| 124 | - } |
|
| 113 | + // Obtenir l’url et si elle est publié du cache memoization |
|
| 114 | + if (function_exists('cache_get') and $desc = cache_get($key)) { |
|
| 115 | + [$url, $publie] = $desc; |
|
| 116 | + } |
|
| 117 | + // Si on ne l’a pas trouvé, ou si var mode, on calcule l’url et son état publie |
|
| 118 | + if (empty($desc) or $var_mode) { |
|
| 119 | + $publie = objet_test_si_publie($type, $id); |
|
| 120 | + $url = generer_objet_url_absolue($id, $type, '', '', true); |
|
| 121 | + if (function_exists('cache_set')) { |
|
| 122 | + cache_set($key, [$url, $publie], 3600); |
|
| 123 | + } |
|
| 124 | + } |
|
| 125 | 125 | |
| 126 | - // On valide l’url si elle est publiee ; sinon si preview on teste l’autorisation |
|
| 127 | - if ($publie) { |
|
| 128 | - return $url; |
|
| 129 | - } elseif (defined('_VAR_PREVIEW') and _VAR_PREVIEW and autoriser('voir', $type, $id)) { |
|
| 130 | - return $url; |
|
| 131 | - } |
|
| 126 | + // On valide l’url si elle est publiee ; sinon si preview on teste l’autorisation |
|
| 127 | + if ($publie) { |
|
| 128 | + return $url; |
|
| 129 | + } elseif (defined('_VAR_PREVIEW') and _VAR_PREVIEW and autoriser('voir', $type, $id)) { |
|
| 130 | + return $url; |
|
| 131 | + } |
|
| 132 | 132 | |
| 133 | - return; |
|
| 133 | + return; |
|
| 134 | 134 | } |
@@ -203,7 +203,7 @@ discard block |
||
| 203 | 203 | ) { |
| 204 | 204 | $r = nettoyer_url_page($url, $contexte); |
| 205 | 205 | if ($r) { |
| 206 | - [$contexte, $type, , , $suite] = $r; |
|
| 206 | + [$contexte, $type,,, $suite] = $r; |
|
| 207 | 207 | $_id = id_table_objet($type); |
| 208 | 208 | $id_objet = $contexte[$_id]; |
| 209 | 209 | $url_propre = generer_objet_url($id_objet, $type); |
@@ -274,9 +274,9 @@ discard block |
||
| 274 | 274 | */ |
| 275 | 275 | function nettoyer_url_page($url, $contexte = []) { |
| 276 | 276 | $url_objets = urls_liste_objets(); |
| 277 | - $raccourci_url_page_html = ',^(?:[^?]*/)?(' . $url_objets . ')([0-9]+)(?:\.html)?([?&].*)?$,'; |
|
| 278 | - $raccourci_url_page_id = ',^(?:[^?]*/)?(' . $url_objets . ')\.php3?[?]id_\1=([0-9]+)([?&].*)?$,'; |
|
| 279 | - $raccourci_url_page_spip = ',^(?:[^?]*/)?(?:spip[.]php)?[?](' . $url_objets . ')([0-9]+)=?(&.*)?$,'; |
|
| 277 | + $raccourci_url_page_html = ',^(?:[^?]*/)?('.$url_objets.')([0-9]+)(?:\.html)?([?&].*)?$,'; |
|
| 278 | + $raccourci_url_page_id = ',^(?:[^?]*/)?('.$url_objets.')\.php3?[?]id_\1=([0-9]+)([?&].*)?$,'; |
|
| 279 | + $raccourci_url_page_spip = ',^(?:[^?]*/)?(?:spip[.]php)?[?]('.$url_objets.')([0-9]+)=?(&.*)?$,'; |
|
| 280 | 280 | |
| 281 | 281 | if ( |
| 282 | 282 | preg_match($raccourci_url_page_html, $url, $regs) |
@@ -314,11 +314,11 @@ discard block |
||
| 314 | 314 | $id = intval($id); |
| 315 | 315 | if (!isset($furls[$objet])) { |
| 316 | 316 | if ( |
| 317 | - function_exists($f = 'generer_' . $objet . '_url_ecrire') |
|
| 317 | + function_exists($f = 'generer_'.$objet.'_url_ecrire') |
|
| 318 | 318 | // ou definie par un plugin |
| 319 | 319 | or $f = charger_fonction($f, 'urls', true) |
| 320 | 320 | // deprecated |
| 321 | - or function_exists($f = 'generer_url_ecrire_' . $objet) or $f = charger_fonction($f, 'urls', true) |
|
| 321 | + or function_exists($f = 'generer_url_ecrire_'.$objet) or $f = charger_fonction($f, 'urls', true) |
|
| 322 | 322 | ) { |
| 323 | 323 | $furls[$objet] = $f; |
| 324 | 324 | } else { |
@@ -336,12 +336,12 @@ discard block |
||
| 336 | 336 | if ($public or $connect) { |
| 337 | 337 | return generer_objet_url_absolue($id, $objet, $args, $ancre, $public, '', $connect); |
| 338 | 338 | } |
| 339 | - $a = id_table_objet($objet) . '=' . intval($id); |
|
| 339 | + $a = id_table_objet($objet).'='.intval($id); |
|
| 340 | 340 | if (!function_exists('objet_info')) { |
| 341 | 341 | include_spip('inc/filtres'); |
| 342 | 342 | } |
| 343 | 343 | |
| 344 | - return generer_url_ecrire(objet_info($objet, 'url_voir'), $a . ($args ? "&$args" : '')) . ($ancre ? "#$ancre" : ''); |
|
| 344 | + return generer_url_ecrire(objet_info($objet, 'url_voir'), $a.($args ? "&$args" : '')).($ancre ? "#$ancre" : ''); |
|
| 345 | 345 | } |
| 346 | 346 | |
| 347 | 347 | /** |
@@ -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 | include_spip('base/objets'); |
| 23 | 23 | |
@@ -57,106 +57,106 @@ discard block |
||
| 57 | 57 | * |
| 58 | 58 | */ |
| 59 | 59 | function urls_decoder_url($url, $fond = '', $contexte = [], $assembler = false) { |
| 60 | - static $current_base = null; |
|
| 60 | + static $current_base = null; |
|
| 61 | 61 | |
| 62 | - // les anciennes fonctions modifient directement les globales |
|
| 63 | - // on les sauve avant l'appel, et on les retablit apres ! |
|
| 64 | - $save = [ |
|
| 65 | - $GLOBALS['fond'] ?? null, |
|
| 66 | - $GLOBALS['contexte'] ?? null, |
|
| 67 | - $_SERVER['REDIRECT_url_propre'] ?? null, |
|
| 68 | - $_ENV['url_propre'] ?? null, |
|
| 69 | - $GLOBALS['profondeur_url'] |
|
| 70 | - ]; |
|
| 62 | + // les anciennes fonctions modifient directement les globales |
|
| 63 | + // on les sauve avant l'appel, et on les retablit apres ! |
|
| 64 | + $save = [ |
|
| 65 | + $GLOBALS['fond'] ?? null, |
|
| 66 | + $GLOBALS['contexte'] ?? null, |
|
| 67 | + $_SERVER['REDIRECT_url_propre'] ?? null, |
|
| 68 | + $_ENV['url_propre'] ?? null, |
|
| 69 | + $GLOBALS['profondeur_url'] |
|
| 70 | + ]; |
|
| 71 | 71 | |
| 72 | - if (is_null($current_base)) { |
|
| 73 | - include_spip('inc/filtres_mini'); |
|
| 74 | - // le decodage des urls se fait toujours par rapport au site public |
|
| 75 | - $current_base = url_absolue(_DIR_RACINE ?: './'); |
|
| 76 | - } |
|
| 77 | - if (strncmp($url, $current_base, strlen($current_base)) == 0) { |
|
| 78 | - $url = substr($url, strlen($current_base)); |
|
| 79 | - } |
|
| 72 | + if (is_null($current_base)) { |
|
| 73 | + include_spip('inc/filtres_mini'); |
|
| 74 | + // le decodage des urls se fait toujours par rapport au site public |
|
| 75 | + $current_base = url_absolue(_DIR_RACINE ?: './'); |
|
| 76 | + } |
|
| 77 | + if (strncmp($url, $current_base, strlen($current_base)) == 0) { |
|
| 78 | + $url = substr($url, strlen($current_base)); |
|
| 79 | + } |
|
| 80 | 80 | |
| 81 | - // si on est en train d'assembler la page principale, |
|
| 82 | - // recuperer l'url depuis les globales url propres si fournies |
|
| 83 | - // sinon extraire la bonne portion d'url |
|
| 84 | - if ($assembler) { |
|
| 85 | - if (isset($_SERVER['REDIRECT_url_propre'])) { |
|
| 86 | - $url = $_SERVER['REDIRECT_url_propre']; |
|
| 87 | - } elseif (isset($_ENV['url_propre'])) { |
|
| 88 | - $url = $_ENV['url_propre']; |
|
| 89 | - } else { |
|
| 90 | - $qs = explode('?', $url); |
|
| 91 | - // ne prendre que le segment d'url qui correspond, en fonction de la profondeur calculee |
|
| 92 | - $url = ltrim($qs[0], '/'); |
|
| 93 | - $url = explode('/', $url); |
|
| 94 | - while (count($url) > $GLOBALS['profondeur_url'] + 1) { |
|
| 95 | - array_shift($url); |
|
| 96 | - } |
|
| 97 | - $qs[0] = implode('/', $url); |
|
| 98 | - $url = implode('?', $qs); |
|
| 99 | - } |
|
| 100 | - } |
|
| 81 | + // si on est en train d'assembler la page principale, |
|
| 82 | + // recuperer l'url depuis les globales url propres si fournies |
|
| 83 | + // sinon extraire la bonne portion d'url |
|
| 84 | + if ($assembler) { |
|
| 85 | + if (isset($_SERVER['REDIRECT_url_propre'])) { |
|
| 86 | + $url = $_SERVER['REDIRECT_url_propre']; |
|
| 87 | + } elseif (isset($_ENV['url_propre'])) { |
|
| 88 | + $url = $_ENV['url_propre']; |
|
| 89 | + } else { |
|
| 90 | + $qs = explode('?', $url); |
|
| 91 | + // ne prendre que le segment d'url qui correspond, en fonction de la profondeur calculee |
|
| 92 | + $url = ltrim($qs[0], '/'); |
|
| 93 | + $url = explode('/', $url); |
|
| 94 | + while (count($url) > $GLOBALS['profondeur_url'] + 1) { |
|
| 95 | + array_shift($url); |
|
| 96 | + } |
|
| 97 | + $qs[0] = implode('/', $url); |
|
| 98 | + $url = implode('?', $qs); |
|
| 99 | + } |
|
| 100 | + } |
|
| 101 | 101 | |
| 102 | - unset($_SERVER['REDIRECT_url_propre']); |
|
| 103 | - unset($_ENV['url_propre']); |
|
| 104 | - include_spip('inc/filtres_mini'); |
|
| 105 | - if (strpos($url, '://') === false) { |
|
| 106 | - $GLOBALS['profondeur_url'] = substr_count(ltrim(resolve_path("/$url"), '/'), '/'); |
|
| 107 | - } else { |
|
| 108 | - $GLOBALS['profondeur_url'] = max(0, substr_count($url, '/') - substr_count($current_base, '/')); |
|
| 109 | - } |
|
| 102 | + unset($_SERVER['REDIRECT_url_propre']); |
|
| 103 | + unset($_ENV['url_propre']); |
|
| 104 | + include_spip('inc/filtres_mini'); |
|
| 105 | + if (strpos($url, '://') === false) { |
|
| 106 | + $GLOBALS['profondeur_url'] = substr_count(ltrim(resolve_path("/$url"), '/'), '/'); |
|
| 107 | + } else { |
|
| 108 | + $GLOBALS['profondeur_url'] = max(0, substr_count($url, '/') - substr_count($current_base, '/')); |
|
| 109 | + } |
|
| 110 | 110 | |
| 111 | - $url_redirect = ''; |
|
| 112 | - $decoder = charger_fonction_url('decoder'); |
|
| 113 | - if ($decoder) { |
|
| 114 | - $a = $decoder($url, $fond, $contexte); |
|
| 115 | - if (is_array($a)) { |
|
| 116 | - [$ncontexte, $type, $url_redirect, $nfond] = array_pad($a, 4, null); |
|
| 117 | - $url_redirect ??= ''; |
|
| 118 | - if ($url_redirect === $url) { |
|
| 119 | - $url_redirect = ''; |
|
| 120 | - } // securite pour eviter une redirection infinie |
|
| 121 | - if ($assembler and strlen($url_redirect)) { |
|
| 122 | - spip_log("Redirige $url vers $url_redirect"); |
|
| 123 | - include_spip('inc/headers'); |
|
| 124 | - redirige_par_entete($url_redirect, '', 301); |
|
| 125 | - } |
|
| 126 | - if (isset($nfond)) { |
|
| 127 | - $fond = $nfond; |
|
| 128 | - } else { |
|
| 129 | - if ( |
|
| 130 | - $fond == '' |
|
| 131 | - or $fond == 'type_urls' /* compat avec htaccess 2.0.0 */ |
|
| 132 | - ) { |
|
| 133 | - $fond = $type; |
|
| 134 | - } |
|
| 135 | - } |
|
| 136 | - if (isset($ncontexte)) { |
|
| 137 | - $contexte = $ncontexte; |
|
| 138 | - } |
|
| 139 | - if (defined('_DEFINIR_CONTEXTE_TYPE') and _DEFINIR_CONTEXTE_TYPE) { |
|
| 140 | - $contexte['type'] = $type; |
|
| 141 | - } |
|
| 142 | - if (!defined('_DEFINIR_CONTEXTE_TYPE_PAGE') or _DEFINIR_CONTEXTE_TYPE_PAGE) { |
|
| 143 | - $contexte['type-page'] = $type; |
|
| 144 | - } |
|
| 145 | - } |
|
| 146 | - } |
|
| 111 | + $url_redirect = ''; |
|
| 112 | + $decoder = charger_fonction_url('decoder'); |
|
| 113 | + if ($decoder) { |
|
| 114 | + $a = $decoder($url, $fond, $contexte); |
|
| 115 | + if (is_array($a)) { |
|
| 116 | + [$ncontexte, $type, $url_redirect, $nfond] = array_pad($a, 4, null); |
|
| 117 | + $url_redirect ??= ''; |
|
| 118 | + if ($url_redirect === $url) { |
|
| 119 | + $url_redirect = ''; |
|
| 120 | + } // securite pour eviter une redirection infinie |
|
| 121 | + if ($assembler and strlen($url_redirect)) { |
|
| 122 | + spip_log("Redirige $url vers $url_redirect"); |
|
| 123 | + include_spip('inc/headers'); |
|
| 124 | + redirige_par_entete($url_redirect, '', 301); |
|
| 125 | + } |
|
| 126 | + if (isset($nfond)) { |
|
| 127 | + $fond = $nfond; |
|
| 128 | + } else { |
|
| 129 | + if ( |
|
| 130 | + $fond == '' |
|
| 131 | + or $fond == 'type_urls' /* compat avec htaccess 2.0.0 */ |
|
| 132 | + ) { |
|
| 133 | + $fond = $type; |
|
| 134 | + } |
|
| 135 | + } |
|
| 136 | + if (isset($ncontexte)) { |
|
| 137 | + $contexte = $ncontexte; |
|
| 138 | + } |
|
| 139 | + if (defined('_DEFINIR_CONTEXTE_TYPE') and _DEFINIR_CONTEXTE_TYPE) { |
|
| 140 | + $contexte['type'] = $type; |
|
| 141 | + } |
|
| 142 | + if (!defined('_DEFINIR_CONTEXTE_TYPE_PAGE') or _DEFINIR_CONTEXTE_TYPE_PAGE) { |
|
| 143 | + $contexte['type-page'] = $type; |
|
| 144 | + } |
|
| 145 | + } |
|
| 146 | + } |
|
| 147 | 147 | |
| 148 | - // retablir les globales |
|
| 149 | - [$GLOBALS['fond'], $GLOBALS['contexte'], $_SERVER['REDIRECT_url_propre'], $_ENV['url_propre'], $GLOBALS['profondeur_url']] = $save; |
|
| 148 | + // retablir les globales |
|
| 149 | + [$GLOBALS['fond'], $GLOBALS['contexte'], $_SERVER['REDIRECT_url_propre'], $_ENV['url_propre'], $GLOBALS['profondeur_url']] = $save; |
|
| 150 | 150 | |
| 151 | - // vider les globales url propres qui ne doivent plus etre utilisees en cas |
|
| 152 | - // d'inversion url => objet |
|
| 153 | - // maintenir pour compat ? |
|
| 154 | - #if ($assembler) { |
|
| 155 | - # unset($_SERVER['REDIRECT_url_propre']); |
|
| 156 | - # unset($_ENV['url_propre']); |
|
| 157 | - #} |
|
| 151 | + // vider les globales url propres qui ne doivent plus etre utilisees en cas |
|
| 152 | + // d'inversion url => objet |
|
| 153 | + // maintenir pour compat ? |
|
| 154 | + #if ($assembler) { |
|
| 155 | + # unset($_SERVER['REDIRECT_url_propre']); |
|
| 156 | + # unset($_ENV['url_propre']); |
|
| 157 | + #} |
|
| 158 | 158 | |
| 159 | - return [$fond, $contexte, $url_redirect]; |
|
| 159 | + return [$fond, $contexte, $url_redirect]; |
|
| 160 | 160 | } |
| 161 | 161 | |
| 162 | 162 | /** |
@@ -169,20 +169,20 @@ discard block |
||
| 169 | 169 | * @return array|false|string |
| 170 | 170 | */ |
| 171 | 171 | function urls_transition_retrouver_anciennes_url_propres(string $url_propre, string $entite, array $contexte = []): array { |
| 172 | - if ($url_propre) { |
|
| 173 | - if ($GLOBALS['profondeur_url'] <= 0) { |
|
| 174 | - $urls_anciennes = charger_fonction_url('decoder', 'propres'); |
|
| 175 | - } else { |
|
| 176 | - $urls_anciennes = charger_fonction_url('decoder', 'arbo'); |
|
| 177 | - } |
|
| 172 | + if ($url_propre) { |
|
| 173 | + if ($GLOBALS['profondeur_url'] <= 0) { |
|
| 174 | + $urls_anciennes = charger_fonction_url('decoder', 'propres'); |
|
| 175 | + } else { |
|
| 176 | + $urls_anciennes = charger_fonction_url('decoder', 'arbo'); |
|
| 177 | + } |
|
| 178 | 178 | |
| 179 | - if ($urls_anciennes) { |
|
| 180 | - $urls_anciennes = $urls_anciennes($url_propre, $entite, $contexte); |
|
| 181 | - } |
|
| 182 | - return $urls_anciennes ?: []; |
|
| 183 | - } |
|
| 179 | + if ($urls_anciennes) { |
|
| 180 | + $urls_anciennes = $urls_anciennes($url_propre, $entite, $contexte); |
|
| 181 | + } |
|
| 182 | + return $urls_anciennes ?: []; |
|
| 183 | + } |
|
| 184 | 184 | |
| 185 | - return []; |
|
| 185 | + return []; |
|
| 186 | 186 | } |
| 187 | 187 | |
| 188 | 188 | /** |
@@ -195,41 +195,41 @@ discard block |
||
| 195 | 195 | * @return array|false|string |
| 196 | 196 | */ |
| 197 | 197 | function urls_transition_retrouver_anciennes_url_html(string $url, string $entite, array $contexte = []): array { |
| 198 | - // Migration depuis anciennes URLs ? |
|
| 199 | - // traiter les injections domain.tld/spip.php/n/importe/quoi/rubrique23 |
|
| 200 | - if ( |
|
| 201 | - $url |
|
| 202 | - and $GLOBALS['profondeur_url'] <= 0 |
|
| 203 | - ) { |
|
| 204 | - $r = nettoyer_url_page($url, $contexte); |
|
| 205 | - if ($r) { |
|
| 206 | - [$contexte, $type, , , $suite] = $r; |
|
| 207 | - $_id = id_table_objet($type); |
|
| 208 | - $id_objet = $contexte[$_id]; |
|
| 209 | - $url_propre = generer_objet_url($id_objet, $type); |
|
| 210 | - if ( |
|
| 211 | - strlen($url_propre) |
|
| 212 | - and !strstr($url, (string) $url_propre) |
|
| 213 | - and ( |
|
| 214 | - objet_test_si_publie($type, $id_objet) |
|
| 215 | - or (defined('_VAR_PREVIEW') and _VAR_PREVIEW and autoriser('voir', $type, $id_objet)) |
|
| 216 | - ) |
|
| 217 | - ) { |
|
| 218 | - [, $hash] = array_pad(explode('#', $url_propre), 2, ''); |
|
| 219 | - $args = []; |
|
| 220 | - foreach (array_filter(explode('&', $suite)) as $fragment) { |
|
| 221 | - if ($fragment != "$_id=$id_objet") { |
|
| 222 | - $args[] = $fragment; |
|
| 223 | - } |
|
| 224 | - } |
|
| 225 | - $url_redirect = generer_objet_url($id_objet, $type, join('&', array_filter($args)), $hash); |
|
| 198 | + // Migration depuis anciennes URLs ? |
|
| 199 | + // traiter les injections domain.tld/spip.php/n/importe/quoi/rubrique23 |
|
| 200 | + if ( |
|
| 201 | + $url |
|
| 202 | + and $GLOBALS['profondeur_url'] <= 0 |
|
| 203 | + ) { |
|
| 204 | + $r = nettoyer_url_page($url, $contexte); |
|
| 205 | + if ($r) { |
|
| 206 | + [$contexte, $type, , , $suite] = $r; |
|
| 207 | + $_id = id_table_objet($type); |
|
| 208 | + $id_objet = $contexte[$_id]; |
|
| 209 | + $url_propre = generer_objet_url($id_objet, $type); |
|
| 210 | + if ( |
|
| 211 | + strlen($url_propre) |
|
| 212 | + and !strstr($url, (string) $url_propre) |
|
| 213 | + and ( |
|
| 214 | + objet_test_si_publie($type, $id_objet) |
|
| 215 | + or (defined('_VAR_PREVIEW') and _VAR_PREVIEW and autoriser('voir', $type, $id_objet)) |
|
| 216 | + ) |
|
| 217 | + ) { |
|
| 218 | + [, $hash] = array_pad(explode('#', $url_propre), 2, ''); |
|
| 219 | + $args = []; |
|
| 220 | + foreach (array_filter(explode('&', $suite)) as $fragment) { |
|
| 221 | + if ($fragment != "$_id=$id_objet") { |
|
| 222 | + $args[] = $fragment; |
|
| 223 | + } |
|
| 224 | + } |
|
| 225 | + $url_redirect = generer_objet_url($id_objet, $type, join('&', array_filter($args)), $hash); |
|
| 226 | 226 | |
| 227 | - return [$contexte, $type, $url_redirect, $type]; |
|
| 228 | - } |
|
| 229 | - } |
|
| 230 | - } |
|
| 231 | - /* Fin compatibilite anciennes urls */ |
|
| 232 | - return []; |
|
| 227 | + return [$contexte, $type, $url_redirect, $type]; |
|
| 228 | + } |
|
| 229 | + } |
|
| 230 | + } |
|
| 231 | + /* Fin compatibilite anciennes urls */ |
|
| 232 | + return []; |
|
| 233 | 233 | } |
| 234 | 234 | |
| 235 | 235 | /** |
@@ -242,24 +242,24 @@ discard block |
||
| 242 | 242 | * @return string|array |
| 243 | 243 | */ |
| 244 | 244 | function urls_liste_objets($preg = true) { |
| 245 | - static $url_objets = null; |
|
| 246 | - if (is_null($url_objets)) { |
|
| 247 | - $url_objets = []; |
|
| 248 | - // recuperer les tables_objets_sql declarees |
|
| 249 | - $tables_objets = lister_tables_objets_sql(); |
|
| 250 | - foreach ($tables_objets as $t => $infos) { |
|
| 251 | - if ($infos['page']) { |
|
| 252 | - $url_objets[] = $infos['type']; |
|
| 253 | - $url_objets = array_merge($url_objets, $infos['type_surnoms']); |
|
| 254 | - } |
|
| 255 | - } |
|
| 256 | - $url_objets = pipeline('declarer_url_objets', $url_objets); |
|
| 257 | - } |
|
| 258 | - if (!$preg) { |
|
| 259 | - return $url_objets; |
|
| 260 | - } |
|
| 245 | + static $url_objets = null; |
|
| 246 | + if (is_null($url_objets)) { |
|
| 247 | + $url_objets = []; |
|
| 248 | + // recuperer les tables_objets_sql declarees |
|
| 249 | + $tables_objets = lister_tables_objets_sql(); |
|
| 250 | + foreach ($tables_objets as $t => $infos) { |
|
| 251 | + if ($infos['page']) { |
|
| 252 | + $url_objets[] = $infos['type']; |
|
| 253 | + $url_objets = array_merge($url_objets, $infos['type_surnoms']); |
|
| 254 | + } |
|
| 255 | + } |
|
| 256 | + $url_objets = pipeline('declarer_url_objets', $url_objets); |
|
| 257 | + } |
|
| 258 | + if (!$preg) { |
|
| 259 | + return $url_objets; |
|
| 260 | + } |
|
| 261 | 261 | |
| 262 | - return implode('|', array_map('preg_quote', $url_objets)); |
|
| 262 | + return implode('|', array_map('preg_quote', $url_objets)); |
|
| 263 | 263 | } |
| 264 | 264 | |
| 265 | 265 | /** |
@@ -273,26 +273,26 @@ discard block |
||
| 273 | 273 | * @return array |
| 274 | 274 | */ |
| 275 | 275 | function nettoyer_url_page($url, $contexte = []) { |
| 276 | - $url_objets = urls_liste_objets(); |
|
| 277 | - $raccourci_url_page_html = ',^(?:[^?]*/)?(' . $url_objets . ')([0-9]+)(?:\.html)?([?&].*)?$,'; |
|
| 278 | - $raccourci_url_page_id = ',^(?:[^?]*/)?(' . $url_objets . ')\.php3?[?]id_\1=([0-9]+)([?&].*)?$,'; |
|
| 279 | - $raccourci_url_page_spip = ',^(?:[^?]*/)?(?:spip[.]php)?[?](' . $url_objets . ')([0-9]+)=?(&.*)?$,'; |
|
| 276 | + $url_objets = urls_liste_objets(); |
|
| 277 | + $raccourci_url_page_html = ',^(?:[^?]*/)?(' . $url_objets . ')([0-9]+)(?:\.html)?([?&].*)?$,'; |
|
| 278 | + $raccourci_url_page_id = ',^(?:[^?]*/)?(' . $url_objets . ')\.php3?[?]id_\1=([0-9]+)([?&].*)?$,'; |
|
| 279 | + $raccourci_url_page_spip = ',^(?:[^?]*/)?(?:spip[.]php)?[?](' . $url_objets . ')([0-9]+)=?(&.*)?$,'; |
|
| 280 | 280 | |
| 281 | - if ( |
|
| 282 | - preg_match($raccourci_url_page_html, $url, $regs) |
|
| 283 | - or preg_match($raccourci_url_page_id, $url, $regs) |
|
| 284 | - or preg_match($raccourci_url_page_spip, $url, $regs) |
|
| 285 | - ) { |
|
| 286 | - $regs = array_pad($regs, 4, null); |
|
| 287 | - $type = objet_type($regs[1]); |
|
| 288 | - $_id = id_table_objet($type); |
|
| 289 | - $contexte[$_id] = $regs[2]; |
|
| 290 | - $suite = $regs[3]; |
|
| 281 | + if ( |
|
| 282 | + preg_match($raccourci_url_page_html, $url, $regs) |
|
| 283 | + or preg_match($raccourci_url_page_id, $url, $regs) |
|
| 284 | + or preg_match($raccourci_url_page_spip, $url, $regs) |
|
| 285 | + ) { |
|
| 286 | + $regs = array_pad($regs, 4, null); |
|
| 287 | + $type = objet_type($regs[1]); |
|
| 288 | + $_id = id_table_objet($type); |
|
| 289 | + $contexte[$_id] = $regs[2]; |
|
| 290 | + $suite = $regs[3]; |
|
| 291 | 291 | |
| 292 | - return [$contexte, $type, null, $type, $suite]; |
|
| 293 | - } |
|
| 292 | + return [$contexte, $type, null, $type, $suite]; |
|
| 293 | + } |
|
| 294 | 294 | |
| 295 | - return []; |
|
| 295 | + return []; |
|
| 296 | 296 | } |
| 297 | 297 | |
| 298 | 298 | /** |
@@ -310,38 +310,38 @@ discard block |
||
| 310 | 310 | * @return string |
| 311 | 311 | */ |
| 312 | 312 | function generer_objet_url_ecrire($id, string $objet, string $args = '', string $ancre = '', ?bool $public = null, string $connect = ''): string { |
| 313 | - static $furls = []; |
|
| 314 | - $id = intval($id); |
|
| 315 | - if (!isset($furls[$objet])) { |
|
| 316 | - if ( |
|
| 317 | - function_exists($f = 'generer_' . $objet . '_url_ecrire') |
|
| 318 | - // ou definie par un plugin |
|
| 319 | - or $f = charger_fonction($f, 'urls', true) |
|
| 320 | - // deprecated |
|
| 321 | - or function_exists($f = 'generer_url_ecrire_' . $objet) or $f = charger_fonction($f, 'urls', true) |
|
| 322 | - ) { |
|
| 323 | - $furls[$objet] = $f; |
|
| 324 | - } else { |
|
| 325 | - $furls[$objet] = ''; |
|
| 326 | - } |
|
| 327 | - } |
|
| 328 | - if ($furls[$objet]) { |
|
| 329 | - return $furls[$objet]($id, $args, $ancre, $public, $connect); |
|
| 330 | - } |
|
| 331 | - // si pas de flag public fourni |
|
| 332 | - // le calculer en fonction de la declaration de statut |
|
| 333 | - if (is_null($public) and !$connect) { |
|
| 334 | - $public = objet_test_si_publie($objet, $id, $connect); |
|
| 335 | - } |
|
| 336 | - if ($public or $connect) { |
|
| 337 | - return generer_objet_url_absolue($id, $objet, $args, $ancre, $public, '', $connect); |
|
| 338 | - } |
|
| 339 | - $a = id_table_objet($objet) . '=' . intval($id); |
|
| 340 | - if (!function_exists('objet_info')) { |
|
| 341 | - include_spip('inc/filtres'); |
|
| 342 | - } |
|
| 313 | + static $furls = []; |
|
| 314 | + $id = intval($id); |
|
| 315 | + if (!isset($furls[$objet])) { |
|
| 316 | + if ( |
|
| 317 | + function_exists($f = 'generer_' . $objet . '_url_ecrire') |
|
| 318 | + // ou definie par un plugin |
|
| 319 | + or $f = charger_fonction($f, 'urls', true) |
|
| 320 | + // deprecated |
|
| 321 | + or function_exists($f = 'generer_url_ecrire_' . $objet) or $f = charger_fonction($f, 'urls', true) |
|
| 322 | + ) { |
|
| 323 | + $furls[$objet] = $f; |
|
| 324 | + } else { |
|
| 325 | + $furls[$objet] = ''; |
|
| 326 | + } |
|
| 327 | + } |
|
| 328 | + if ($furls[$objet]) { |
|
| 329 | + return $furls[$objet]($id, $args, $ancre, $public, $connect); |
|
| 330 | + } |
|
| 331 | + // si pas de flag public fourni |
|
| 332 | + // le calculer en fonction de la declaration de statut |
|
| 333 | + if (is_null($public) and !$connect) { |
|
| 334 | + $public = objet_test_si_publie($objet, $id, $connect); |
|
| 335 | + } |
|
| 336 | + if ($public or $connect) { |
|
| 337 | + return generer_objet_url_absolue($id, $objet, $args, $ancre, $public, '', $connect); |
|
| 338 | + } |
|
| 339 | + $a = id_table_objet($objet) . '=' . intval($id); |
|
| 340 | + if (!function_exists('objet_info')) { |
|
| 341 | + include_spip('inc/filtres'); |
|
| 342 | + } |
|
| 343 | 343 | |
| 344 | - return generer_url_ecrire(objet_info($objet, 'url_voir'), $a . ($args ? "&$args" : '')) . ($ancre ? "#$ancre" : ''); |
|
| 344 | + return generer_url_ecrire(objet_info($objet, 'url_voir'), $a . ($args ? "&$args" : '')) . ($ancre ? "#$ancre" : ''); |
|
| 345 | 345 | } |
| 346 | 346 | |
| 347 | 347 | /** |
@@ -349,5 +349,5 @@ discard block |
||
| 349 | 349 | * @see generer_objet_url_ecrire |
| 350 | 350 | */ |
| 351 | 351 | function generer_url_ecrire_objet($objet, $id, $args = '', $ancre = '', $public = null, string $connect = '') { |
| 352 | - return generer_objet_url_ecrire($id, $objet, $args, $ancre, $public, $connect); |
|
| 352 | + return generer_objet_url_ecrire($id, $objet, $args, $ancre, $public, $connect); |
|
| 353 | 353 | } |
@@ -11,7 +11,7 @@ discard block |
||
| 11 | 11 | \***************************************************************************/ |
| 12 | 12 | |
| 13 | 13 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 14 | - return; |
|
| 14 | + return; |
|
| 15 | 15 | } |
| 16 | 16 | include_spip('inc/charsets'); |
| 17 | 17 | |
@@ -27,90 +27,90 @@ discard block |
||
| 27 | 27 | * @return string |
| 28 | 28 | */ |
| 29 | 29 | function plugins_afficher_liste_dist( |
| 30 | - $url_page, |
|
| 31 | - $liste_plugins, |
|
| 32 | - $liste_plugins_checked, |
|
| 33 | - $liste_plugins_actifs, |
|
| 34 | - $dir_plugins = _DIR_PLUGINS, |
|
| 35 | - $afficher_un = 'afficher_plugin' |
|
| 30 | + $url_page, |
|
| 31 | + $liste_plugins, |
|
| 32 | + $liste_plugins_checked, |
|
| 33 | + $liste_plugins_actifs, |
|
| 34 | + $dir_plugins = _DIR_PLUGINS, |
|
| 35 | + $afficher_un = 'afficher_plugin' |
|
| 36 | 36 | ) { |
| 37 | - $get_infos = charger_fonction('get_infos', 'plugins'); |
|
| 38 | - $ligne_plug = charger_fonction($afficher_un, 'plugins'); |
|
| 37 | + $get_infos = charger_fonction('get_infos', 'plugins'); |
|
| 38 | + $ligne_plug = charger_fonction($afficher_un, 'plugins'); |
|
| 39 | 39 | |
| 40 | - $all_infos = $get_infos($liste_plugins, false, $dir_plugins); |
|
| 40 | + $all_infos = $get_infos($liste_plugins, false, $dir_plugins); |
|
| 41 | 41 | |
| 42 | - $all_infos = pipeline( |
|
| 43 | - 'filtrer_liste_plugins', |
|
| 44 | - [ |
|
| 45 | - 'args' => [ |
|
| 46 | - 'liste_plugins' => $liste_plugins, |
|
| 47 | - 'liste_plugins_checked' => $liste_plugins_checked, |
|
| 48 | - 'liste_plugins_actifs' => $liste_plugins_actifs, |
|
| 49 | - 'dir_plugins' => $dir_plugins |
|
| 50 | - ], |
|
| 51 | - 'data' => $all_infos |
|
| 52 | - ] |
|
| 53 | - ); |
|
| 42 | + $all_infos = pipeline( |
|
| 43 | + 'filtrer_liste_plugins', |
|
| 44 | + [ |
|
| 45 | + 'args' => [ |
|
| 46 | + 'liste_plugins' => $liste_plugins, |
|
| 47 | + 'liste_plugins_checked' => $liste_plugins_checked, |
|
| 48 | + 'liste_plugins_actifs' => $liste_plugins_actifs, |
|
| 49 | + 'dir_plugins' => $dir_plugins |
|
| 50 | + ], |
|
| 51 | + 'data' => $all_infos |
|
| 52 | + ] |
|
| 53 | + ); |
|
| 54 | 54 | |
| 55 | - $liste_plugins = array_flip($liste_plugins); |
|
| 56 | - foreach ($liste_plugins as $chemin => $v) { |
|
| 57 | - // des plugins ont pu etre enleves de la liste par le pipeline. On en tient compte. |
|
| 58 | - if (isset($all_infos[$chemin])) { |
|
| 59 | - $liste_plugins[$chemin] = strtoupper(trim(typo(translitteration(unicode2charset(html2unicode($all_infos[$chemin]['nom'])))))); |
|
| 60 | - } else { |
|
| 61 | - unset($liste_plugins[$chemin]); |
|
| 62 | - } |
|
| 63 | - } |
|
| 64 | - asort($liste_plugins); |
|
| 65 | - $exposed = urldecode(_request('plugin') ?? ''); |
|
| 55 | + $liste_plugins = array_flip($liste_plugins); |
|
| 56 | + foreach ($liste_plugins as $chemin => $v) { |
|
| 57 | + // des plugins ont pu etre enleves de la liste par le pipeline. On en tient compte. |
|
| 58 | + if (isset($all_infos[$chemin])) { |
|
| 59 | + $liste_plugins[$chemin] = strtoupper(trim(typo(translitteration(unicode2charset(html2unicode($all_infos[$chemin]['nom'])))))); |
|
| 60 | + } else { |
|
| 61 | + unset($liste_plugins[$chemin]); |
|
| 62 | + } |
|
| 63 | + } |
|
| 64 | + asort($liste_plugins); |
|
| 65 | + $exposed = urldecode(_request('plugin') ?? ''); |
|
| 66 | 66 | |
| 67 | - $block_par_lettre = false;//count($liste_plugins)>10; |
|
| 68 | - $fast_liste_plugins_actifs = []; |
|
| 69 | - $fast_liste_plugins_checked = []; |
|
| 70 | - if (is_array($liste_plugins_actifs)) { |
|
| 71 | - $fast_liste_plugins_actifs = array_flip($liste_plugins_actifs); |
|
| 72 | - } |
|
| 73 | - if (is_array($liste_plugins_checked)) { |
|
| 74 | - $fast_liste_plugins_checked = array_flip($liste_plugins_checked); |
|
| 75 | - } |
|
| 67 | + $block_par_lettre = false;//count($liste_plugins)>10; |
|
| 68 | + $fast_liste_plugins_actifs = []; |
|
| 69 | + $fast_liste_plugins_checked = []; |
|
| 70 | + if (is_array($liste_plugins_actifs)) { |
|
| 71 | + $fast_liste_plugins_actifs = array_flip($liste_plugins_actifs); |
|
| 72 | + } |
|
| 73 | + if (is_array($liste_plugins_checked)) { |
|
| 74 | + $fast_liste_plugins_checked = array_flip($liste_plugins_checked); |
|
| 75 | + } |
|
| 76 | 76 | |
| 77 | - $res = ''; |
|
| 78 | - $block = ''; |
|
| 79 | - $initiale = ''; |
|
| 80 | - $block_actif = false; |
|
| 81 | - foreach ($liste_plugins as $plug => $nom) { |
|
| 82 | - if (($i = substr($nom, 0, 1)) !== $initiale) { |
|
| 83 | - $res .= $block_par_lettre ? affiche_block_initiale($initiale, $block, $block_actif) : $block; |
|
| 84 | - $initiale = $i; |
|
| 85 | - $block = ''; |
|
| 86 | - $block_actif = false; |
|
| 87 | - } |
|
| 88 | - // le rep suivant |
|
| 89 | - $actif = isset($fast_liste_plugins_actifs[$plug]); |
|
| 90 | - $checked = isset($fast_liste_plugins_checked[$plug]); |
|
| 91 | - $block_actif = $block_actif | $actif; |
|
| 92 | - $expose = ($exposed and ($exposed == $plug or $exposed == $dir_plugins . $plug or $exposed == substr( |
|
| 93 | - $dir_plugins, |
|
| 94 | - strlen(_DIR_RACINE) |
|
| 95 | - ) . $plug)); |
|
| 96 | - $block .= $ligne_plug($url_page, $plug, $checked, $actif, $expose, 'item', $dir_plugins) . "\n"; |
|
| 97 | - } |
|
| 98 | - $res .= $block_par_lettre ? affiche_block_initiale($initiale, $block, $block_actif) : $block; |
|
| 99 | - $class = basename($dir_plugins); |
|
| 77 | + $res = ''; |
|
| 78 | + $block = ''; |
|
| 79 | + $initiale = ''; |
|
| 80 | + $block_actif = false; |
|
| 81 | + foreach ($liste_plugins as $plug => $nom) { |
|
| 82 | + if (($i = substr($nom, 0, 1)) !== $initiale) { |
|
| 83 | + $res .= $block_par_lettre ? affiche_block_initiale($initiale, $block, $block_actif) : $block; |
|
| 84 | + $initiale = $i; |
|
| 85 | + $block = ''; |
|
| 86 | + $block_actif = false; |
|
| 87 | + } |
|
| 88 | + // le rep suivant |
|
| 89 | + $actif = isset($fast_liste_plugins_actifs[$plug]); |
|
| 90 | + $checked = isset($fast_liste_plugins_checked[$plug]); |
|
| 91 | + $block_actif = $block_actif | $actif; |
|
| 92 | + $expose = ($exposed and ($exposed == $plug or $exposed == $dir_plugins . $plug or $exposed == substr( |
|
| 93 | + $dir_plugins, |
|
| 94 | + strlen(_DIR_RACINE) |
|
| 95 | + ) . $plug)); |
|
| 96 | + $block .= $ligne_plug($url_page, $plug, $checked, $actif, $expose, 'item', $dir_plugins) . "\n"; |
|
| 97 | + } |
|
| 98 | + $res .= $block_par_lettre ? affiche_block_initiale($initiale, $block, $block_actif) : $block; |
|
| 99 | + $class = basename($dir_plugins); |
|
| 100 | 100 | |
| 101 | - return $res ? "<ul class='liste-items plugins $class'>$res</ul>" : ''; |
|
| 101 | + return $res ? "<ul class='liste-items plugins $class'>$res</ul>" : ''; |
|
| 102 | 102 | } |
| 103 | 103 | |
| 104 | 104 | |
| 105 | 105 | function affiche_block_initiale($initiale, $block, $block_actif) { |
| 106 | - if (strlen($block)) { |
|
| 107 | - return "<li class='item'>" |
|
| 108 | - . bouton_block_depliable($initiale, $block_actif ? true : false) |
|
| 109 | - . debut_block_depliable($block_actif) |
|
| 110 | - . "<ul>$block</ul>" |
|
| 111 | - . fin_block() |
|
| 112 | - . '</li>'; |
|
| 113 | - } |
|
| 106 | + if (strlen($block)) { |
|
| 107 | + return "<li class='item'>" |
|
| 108 | + . bouton_block_depliable($initiale, $block_actif ? true : false) |
|
| 109 | + . debut_block_depliable($block_actif) |
|
| 110 | + . "<ul>$block</ul>" |
|
| 111 | + . fin_block() |
|
| 112 | + . '</li>'; |
|
| 113 | + } |
|
| 114 | 114 | |
| 115 | - return ''; |
|
| 115 | + return ''; |
|
| 116 | 116 | } |
@@ -64,7 +64,7 @@ discard block |
||
| 64 | 64 | asort($liste_plugins); |
| 65 | 65 | $exposed = urldecode(_request('plugin') ?? ''); |
| 66 | 66 | |
| 67 | - $block_par_lettre = false;//count($liste_plugins)>10; |
|
| 67 | + $block_par_lettre = false; //count($liste_plugins)>10; |
|
| 68 | 68 | $fast_liste_plugins_actifs = []; |
| 69 | 69 | $fast_liste_plugins_checked = []; |
| 70 | 70 | if (is_array($liste_plugins_actifs)) { |
@@ -89,11 +89,11 @@ discard block |
||
| 89 | 89 | $actif = isset($fast_liste_plugins_actifs[$plug]); |
| 90 | 90 | $checked = isset($fast_liste_plugins_checked[$plug]); |
| 91 | 91 | $block_actif = $block_actif | $actif; |
| 92 | - $expose = ($exposed and ($exposed == $plug or $exposed == $dir_plugins . $plug or $exposed == substr( |
|
| 92 | + $expose = ($exposed and ($exposed == $plug or $exposed == $dir_plugins.$plug or $exposed == substr( |
|
| 93 | 93 | $dir_plugins, |
| 94 | 94 | strlen(_DIR_RACINE) |
| 95 | - ) . $plug)); |
|
| 96 | - $block .= $ligne_plug($url_page, $plug, $checked, $actif, $expose, 'item', $dir_plugins) . "\n"; |
|
| 95 | + ).$plug)); |
|
| 96 | + $block .= $ligne_plug($url_page, $plug, $checked, $actif, $expose, 'item', $dir_plugins)."\n"; |
|
| 97 | 97 | } |
| 98 | 98 | $res .= $block_par_lettre ? affiche_block_initiale($initiale, $block, $block_actif) : $block; |
| 99 | 99 | $class = basename($dir_plugins); |
@@ -4,868 +4,868 @@ |
||
| 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 | - 'affichage' => 'Показати', |
|
| 15 | - 'aide_non_disponible' => 'Цей розділ он-лайн допомоги ще не перекладено українською.', |
|
| 16 | - 'annuler_recherche' => 'Відмінити пошук', |
|
| 17 | - 'auteur' => 'Автор:', |
|
| 18 | - 'avis_acces_interdit' => 'Доступ заборонено.', |
|
| 19 | - 'avis_acces_interdit_prive' => 'У вас немає прав для перегляду сторінки <b>@exec@</b>.', |
|
| 20 | - 'avis_article_modifie' => 'Увага: @nom_auteur_modif@ вносив зміни в цю статтю @date_diff@ хвилин тому', |
|
| 21 | - 'avis_aucun_resultat' => 'Нічого не знайдено', |
|
| 22 | - 'avis_base_inaccessible' => 'Неможливо підключитися до бази @base@.', |
|
| 23 | - 'avis_chemin_invalide_1' => 'Шлях, що ви вибрали', |
|
| 24 | - 'avis_chemin_invalide_2' => 'схоже, що не вірно. Будь ласка, поверніться на попередню сторінку і перевірте надану інформацію.', |
|
| 25 | - 'avis_connexion_echec_1' => 'Не вдалося підключится до SQL серверу.', |
|
| 26 | - 'avis_connexion_echec_2' => 'Будь ласка, поверніться на попередню сторінку і перевірте внесену інформацію.', |
|
| 27 | - 'avis_connexion_echec_3' => '<b>N.B.</b> На багатьох серверах ви повинні зробити запит для включення вашого доступу до бази даних SQL перед тим, як використовувати її. Якщо ви не можете встановити з’єднання, упевніться, що цей запит дійсно було зроблено.', |
|
| 28 | - 'avis_connexion_erreur_creer_base' => 'База даних не може бути створена.', |
|
| 29 | - 'avis_connexion_erreur_nom_base' => 'Назва бази може складатися тільки з латинських букв, цифр і знаків нижнього підкреслювання.', |
|
| 30 | - 'avis_connexion_ldap_echec_1' => 'Не вдалося подключитися до LDAP.', |
|
| 31 | - 'avis_connexion_ldap_echec_2' => 'Поверніться на попередню сторінку і перевірте внесену вами інформацію.', |
|
| 32 | - 'avis_connexion_ldap_echec_3' => 'Крім того, не використовуйте підтримку LDAP для імпорту користувачів.', |
|
| 33 | - 'avis_deplacement_rubrique' => 'Увага! В цій рубриці знаходиться @contient_breves@ новин@scb@: якщо ви переміщуєте її, будь ласка, поставьте відмітку для підтвердження операції.', |
|
| 34 | - 'avis_erreur_connexion_mysql' => 'Помилка з’єднання з SQL ', |
|
| 35 | - 'avis_espace_interdit' => '<b>Заборонений простір</b> <div>SPIP вже встановлено.</div> ', |
|
| 36 | - 'avis_lecture_noms_bases_1' => 'Програма установки не змогла прочитати імена встановлених баз даних .', |
|
| 37 | - 'avis_lecture_noms_bases_2' => 'Жодна з баз даних не є доступною або функцію, що дозволяє вносити до списку бази даних, було вимкнено з метою безпеки (забагато послуг хостингу).', |
|
| 38 | - 'avis_lecture_noms_bases_3' => 'В другому випадку можливо, що база даних, названа за вашим логіном, может бути використана:', |
|
| 39 | - 'avis_non_acces_page' => 'У вас нема доступу до цієї сторінки.', |
|
| 40 | - 'avis_operation_echec' => 'Не вдалося виконати операцію.', |
|
| 41 | - 'avis_operation_impossible' => 'Неможливо виконати операцію', |
|
| 42 | - 'avis_suppression_base' => 'Увага: видалення даних неможливо відмінити', |
|
| 12 | + // A |
|
| 13 | + 'activer_plugin' => 'Активувати плагін', |
|
| 14 | + 'affichage' => 'Показати', |
|
| 15 | + 'aide_non_disponible' => 'Цей розділ он-лайн допомоги ще не перекладено українською.', |
|
| 16 | + 'annuler_recherche' => 'Відмінити пошук', |
|
| 17 | + 'auteur' => 'Автор:', |
|
| 18 | + 'avis_acces_interdit' => 'Доступ заборонено.', |
|
| 19 | + 'avis_acces_interdit_prive' => 'У вас немає прав для перегляду сторінки <b>@exec@</b>.', |
|
| 20 | + 'avis_article_modifie' => 'Увага: @nom_auteur_modif@ вносив зміни в цю статтю @date_diff@ хвилин тому', |
|
| 21 | + 'avis_aucun_resultat' => 'Нічого не знайдено', |
|
| 22 | + 'avis_base_inaccessible' => 'Неможливо підключитися до бази @base@.', |
|
| 23 | + 'avis_chemin_invalide_1' => 'Шлях, що ви вибрали', |
|
| 24 | + 'avis_chemin_invalide_2' => 'схоже, що не вірно. Будь ласка, поверніться на попередню сторінку і перевірте надану інформацію.', |
|
| 25 | + 'avis_connexion_echec_1' => 'Не вдалося підключится до SQL серверу.', |
|
| 26 | + 'avis_connexion_echec_2' => 'Будь ласка, поверніться на попередню сторінку і перевірте внесену інформацію.', |
|
| 27 | + 'avis_connexion_echec_3' => '<b>N.B.</b> На багатьох серверах ви повинні зробити запит для включення вашого доступу до бази даних SQL перед тим, як використовувати її. Якщо ви не можете встановити з’єднання, упевніться, що цей запит дійсно було зроблено.', |
|
| 28 | + 'avis_connexion_erreur_creer_base' => 'База даних не може бути створена.', |
|
| 29 | + 'avis_connexion_erreur_nom_base' => 'Назва бази може складатися тільки з латинських букв, цифр і знаків нижнього підкреслювання.', |
|
| 30 | + 'avis_connexion_ldap_echec_1' => 'Не вдалося подключитися до LDAP.', |
|
| 31 | + 'avis_connexion_ldap_echec_2' => 'Поверніться на попередню сторінку і перевірте внесену вами інформацію.', |
|
| 32 | + 'avis_connexion_ldap_echec_3' => 'Крім того, не використовуйте підтримку LDAP для імпорту користувачів.', |
|
| 33 | + 'avis_deplacement_rubrique' => 'Увага! В цій рубриці знаходиться @contient_breves@ новин@scb@: якщо ви переміщуєте її, будь ласка, поставьте відмітку для підтвердження операції.', |
|
| 34 | + 'avis_erreur_connexion_mysql' => 'Помилка з’єднання з SQL ', |
|
| 35 | + 'avis_espace_interdit' => '<b>Заборонений простір</b> <div>SPIP вже встановлено.</div> ', |
|
| 36 | + 'avis_lecture_noms_bases_1' => 'Програма установки не змогла прочитати імена встановлених баз даних .', |
|
| 37 | + 'avis_lecture_noms_bases_2' => 'Жодна з баз даних не є доступною або функцію, що дозволяє вносити до списку бази даних, було вимкнено з метою безпеки (забагато послуг хостингу).', |
|
| 38 | + 'avis_lecture_noms_bases_3' => 'В другому випадку можливо, що база даних, названа за вашим логіном, может бути використана:', |
|
| 39 | + 'avis_non_acces_page' => 'У вас нема доступу до цієї сторінки.', |
|
| 40 | + 'avis_operation_echec' => 'Не вдалося виконати операцію.', |
|
| 41 | + 'avis_operation_impossible' => 'Неможливо виконати операцію', |
|
| 42 | + 'avis_suppression_base' => 'Увага: видалення даних неможливо відмінити', |
|
| 43 | 43 | |
| 44 | - // B |
|
| 45 | - 'bouton_acces_ldap' => 'Додати доступ до LDAP', |
|
| 46 | - 'bouton_ajouter' => 'Додати', |
|
| 47 | - 'bouton_annuler' => 'Відмінити', |
|
| 48 | - 'bouton_cache_activer' => 'Увімкнути кешування', |
|
| 49 | - 'bouton_cache_desactiver' => 'Виключити кешування', |
|
| 50 | - 'bouton_demande_publication' => 'Запитати публікацію цієї статті', |
|
| 51 | - 'bouton_desactive_tout' => 'Усе відключити', |
|
| 52 | - 'bouton_desinstaller' => 'Видалити', |
|
| 53 | - 'bouton_effacer_tout' => 'Видалити УСЕ', |
|
| 54 | - 'bouton_envoyer_message' => 'Заключне повідомлення: Надіслати', |
|
| 55 | - 'bouton_fermer' => 'Закрити', |
|
| 56 | - 'bouton_mettre_a_jour_base' => 'Оновити базу даних', |
|
| 57 | - 'bouton_modifier' => 'Змінити', |
|
| 58 | - 'bouton_radio_afficher' => 'Показати', |
|
| 59 | - 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Показувати у переліку авторів, що знаходяться на сайті', |
|
| 60 | - 'bouton_radio_envoi_annonces_adresse' => 'Відправити оголошення на адресу:', |
|
| 61 | - 'bouton_radio_envoi_liste_nouveautes' => 'Відправити список останніх новин', |
|
| 62 | - 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Не показувати у переліку авторів, що знаходяться на сайті', |
|
| 63 | - 'bouton_radio_non_envoi_annonces_editoriales' => 'Не відправляти ніяких редакційних оголошень', |
|
| 64 | - 'bouton_redirection' => 'ПЕРЕНАПРАВЛЕННЯ', |
|
| 65 | - 'bouton_reinitialiser_aux_valeurs_par_defaut' => 'Відновити початкові значення', |
|
| 66 | - 'bouton_relancer_inscription' => 'Перезапустити реєстрацію', |
|
| 67 | - 'bouton_relancer_inscriptions' => 'Перезапустити реєстрації', |
|
| 68 | - 'bouton_relancer_installation' => 'Перезапустити установку', |
|
| 69 | - 'bouton_reset_password' => 'Створити новий пароль і відправити по e-mail', |
|
| 70 | - 'bouton_suivant' => 'Наступний', |
|
| 71 | - 'bouton_tenter_recuperation' => 'Спробуємо відремонтувати базу', |
|
| 72 | - 'bouton_test_proxy' => 'Перевірити проксі', |
|
| 73 | - 'bouton_vider_cache' => 'Очистити кеш', |
|
| 44 | + // B |
|
| 45 | + 'bouton_acces_ldap' => 'Додати доступ до LDAP', |
|
| 46 | + 'bouton_ajouter' => 'Додати', |
|
| 47 | + 'bouton_annuler' => 'Відмінити', |
|
| 48 | + 'bouton_cache_activer' => 'Увімкнути кешування', |
|
| 49 | + 'bouton_cache_desactiver' => 'Виключити кешування', |
|
| 50 | + 'bouton_demande_publication' => 'Запитати публікацію цієї статті', |
|
| 51 | + 'bouton_desactive_tout' => 'Усе відключити', |
|
| 52 | + 'bouton_desinstaller' => 'Видалити', |
|
| 53 | + 'bouton_effacer_tout' => 'Видалити УСЕ', |
|
| 54 | + 'bouton_envoyer_message' => 'Заключне повідомлення: Надіслати', |
|
| 55 | + 'bouton_fermer' => 'Закрити', |
|
| 56 | + 'bouton_mettre_a_jour_base' => 'Оновити базу даних', |
|
| 57 | + 'bouton_modifier' => 'Змінити', |
|
| 58 | + 'bouton_radio_afficher' => 'Показати', |
|
| 59 | + 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Показувати у переліку авторів, що знаходяться на сайті', |
|
| 60 | + 'bouton_radio_envoi_annonces_adresse' => 'Відправити оголошення на адресу:', |
|
| 61 | + 'bouton_radio_envoi_liste_nouveautes' => 'Відправити список останніх новин', |
|
| 62 | + 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Не показувати у переліку авторів, що знаходяться на сайті', |
|
| 63 | + 'bouton_radio_non_envoi_annonces_editoriales' => 'Не відправляти ніяких редакційних оголошень', |
|
| 64 | + 'bouton_redirection' => 'ПЕРЕНАПРАВЛЕННЯ', |
|
| 65 | + 'bouton_reinitialiser_aux_valeurs_par_defaut' => 'Відновити початкові значення', |
|
| 66 | + 'bouton_relancer_inscription' => 'Перезапустити реєстрацію', |
|
| 67 | + 'bouton_relancer_inscriptions' => 'Перезапустити реєстрації', |
|
| 68 | + 'bouton_relancer_installation' => 'Перезапустити установку', |
|
| 69 | + 'bouton_reset_password' => 'Створити новий пароль і відправити по e-mail', |
|
| 70 | + 'bouton_suivant' => 'Наступний', |
|
| 71 | + 'bouton_tenter_recuperation' => 'Спробуємо відремонтувати базу', |
|
| 72 | + 'bouton_test_proxy' => 'Перевірити проксі', |
|
| 73 | + 'bouton_vider_cache' => 'Очистити кеш', |
|
| 74 | 74 | |
| 75 | - // C |
|
| 76 | - 'cache_modifiable_webmestre' => 'Цей параметр може бути змінений тільки вебмастером.', |
|
| 77 | - 'calendrier_synchro' => 'Якщо ви використовуєте календар, сумісний з <b>iCal</b>, ви можете узгодити його з даними сайту.', |
|
| 78 | - 'config_activer_champs' => 'Увімкнути наступні поля', |
|
| 79 | - 'config_choix_base_sup' => 'Виберіть базу на цьому сервері', |
|
| 80 | - 'config_erreur_base_sup' => 'SPIP не може відобразити список доступних баз даних', |
|
| 81 | - 'config_info_base_sup' => 'Якщо вам потрібний запит інших баз даних, використовуючи SPIP, незалежно від того, чи знаходяться вони на тому ж SQL сервері або де-інде, використовуйте форму, що показана нижче для їх опису. Якщо ви залишите деякі поля пустими, то пов’язані деталі будуть використовуватися з основною базой даних.', |
|
| 82 | - 'config_info_base_sup_disponibles' => 'Додаткові бази даних, до яких можна відправити запити:', |
|
| 83 | - 'config_info_enregistree' => 'Нові налаштування збережено', |
|
| 84 | - 'config_info_logos' => 'Кожному елементу сайту можна встановити свій логотип і також логотип для відображення «при наведенні миші»', |
|
| 85 | - 'config_info_logos_utiliser' => 'Використовувати логотипи', |
|
| 86 | - 'config_info_logos_utiliser_non' => 'Не використовувати логотипи', |
|
| 87 | - 'config_info_logos_utiliser_survol' => 'Дозволити додавати логотип для відображення «при наведенні миші»', |
|
| 88 | - 'config_info_logos_utiliser_survol_non' => 'Заборонити додавати логотип для відображення «при наведенні миші»', |
|
| 89 | - 'config_info_redirection' => 'Віртуальна стаття - це можливість перенаправляти відвідувачів по довільному URL, як на іншу сторінку цього сайта, так і на будь-яке посилання в інтернеті.', |
|
| 90 | - 'config_redirection' => 'Віртуальні статті (редирект)', |
|
| 91 | - 'config_titre_base_sup' => 'Опис додаткової бази даних', |
|
| 92 | - 'config_titre_base_sup_choix' => 'Виберіть додаткову базу даних', |
|
| 93 | - 'connexion_ldap' => 'З’єднання:', |
|
| 94 | - 'creer_et_associer_un_auteur' => 'Створити і додати автора', |
|
| 75 | + // C |
|
| 76 | + 'cache_modifiable_webmestre' => 'Цей параметр може бути змінений тільки вебмастером.', |
|
| 77 | + 'calendrier_synchro' => 'Якщо ви використовуєте календар, сумісний з <b>iCal</b>, ви можете узгодити його з даними сайту.', |
|
| 78 | + 'config_activer_champs' => 'Увімкнути наступні поля', |
|
| 79 | + 'config_choix_base_sup' => 'Виберіть базу на цьому сервері', |
|
| 80 | + 'config_erreur_base_sup' => 'SPIP не може відобразити список доступних баз даних', |
|
| 81 | + 'config_info_base_sup' => 'Якщо вам потрібний запит інших баз даних, використовуючи SPIP, незалежно від того, чи знаходяться вони на тому ж SQL сервері або де-інде, використовуйте форму, що показана нижче для їх опису. Якщо ви залишите деякі поля пустими, то пов’язані деталі будуть використовуватися з основною базой даних.', |
|
| 82 | + 'config_info_base_sup_disponibles' => 'Додаткові бази даних, до яких можна відправити запити:', |
|
| 83 | + 'config_info_enregistree' => 'Нові налаштування збережено', |
|
| 84 | + 'config_info_logos' => 'Кожному елементу сайту можна встановити свій логотип і також логотип для відображення «при наведенні миші»', |
|
| 85 | + 'config_info_logos_utiliser' => 'Використовувати логотипи', |
|
| 86 | + 'config_info_logos_utiliser_non' => 'Не використовувати логотипи', |
|
| 87 | + 'config_info_logos_utiliser_survol' => 'Дозволити додавати логотип для відображення «при наведенні миші»', |
|
| 88 | + 'config_info_logos_utiliser_survol_non' => 'Заборонити додавати логотип для відображення «при наведенні миші»', |
|
| 89 | + 'config_info_redirection' => 'Віртуальна стаття - це можливість перенаправляти відвідувачів по довільному URL, як на іншу сторінку цього сайта, так і на будь-яке посилання в інтернеті.', |
|
| 90 | + 'config_redirection' => 'Віртуальні статті (редирект)', |
|
| 91 | + 'config_titre_base_sup' => 'Опис додаткової бази даних', |
|
| 92 | + 'config_titre_base_sup_choix' => 'Виберіть додаткову базу даних', |
|
| 93 | + 'connexion_ldap' => 'З’єднання:', |
|
| 94 | + 'creer_et_associer_un_auteur' => 'Створити і додати автора', |
|
| 95 | 95 | |
| 96 | - // D |
|
| 97 | - 'date_mot_heures' => ':', |
|
| 96 | + // D |
|
| 97 | + 'date_mot_heures' => ':', |
|
| 98 | 98 | |
| 99 | - // E |
|
| 100 | - 'ecran_connexion_couleur_principale' => 'Головний колір', |
|
| 101 | - 'ecran_connexion_image_fond' => 'Зображення на тло', |
|
| 102 | - 'ecran_connexion_image_fond_explication' => 'Використати зображення (JPEG, 1920x1080 пікселів)', |
|
| 103 | - 'ecran_connexion_image_revenir_couleur_defaut' => 'Повернути кольори за замовчуванням', |
|
| 104 | - 'ecran_connexion_titre' => 'Сторінка входу', |
|
| 105 | - 'ecran_securite' => ' + сервіс безпеки @version@', |
|
| 106 | - 'email' => 'email', |
|
| 107 | - 'email_2' => 'email:', |
|
| 108 | - 'en_savoir_plus' => 'Детальніше', |
|
| 109 | - 'entree_adresse_annuaire' => 'Довідник адрес', |
|
| 110 | - 'entree_adresse_email' => 'Ваша адреса електронної пошти', |
|
| 111 | - 'entree_adresse_email_2' => 'E-mail', |
|
| 112 | - 'entree_base_donnee_1' => 'Адреса серверу бази даних', |
|
| 113 | - 'entree_base_donnee_2' => '(Зазвичай це «localhost», але ви можете уточнити в налаштуваннях хостінгу)', |
|
| 114 | - 'entree_biographie' => 'Коротка біографія на декілька слів.', |
|
| 115 | - 'entree_chemin_acces' => 'Ввести шлях доступу:', |
|
| 116 | - 'entree_cle_pgp' => 'Ваш ключ PGP', |
|
| 117 | - 'entree_cle_pgp_2' => 'Ключ PGP ', |
|
| 118 | - 'entree_contenu_rubrique' => '(Короткий зміст рубрики.)', |
|
| 119 | - 'entree_identifiants_connexion' => 'Логін і пароль', |
|
| 120 | - 'entree_identifiants_connexion_2' => 'Інформація про підключення', |
|
| 121 | - 'entree_informations_connexion_ldap' => 'Будь ласка, вкажіть параметри підключення до LDAP. Ви можете отримати цю інформацію у вашого системного адміністратора.', |
|
| 122 | - 'entree_infos_perso' => 'Хто ви?', |
|
| 123 | - 'entree_infos_perso_2' => 'Хто автор?', |
|
| 124 | - 'entree_interieur_rubrique' => 'В розділі:', |
|
| 125 | - 'entree_liens_sites' => '<b>Гіперпосилання</b> (посилання, сайт для відвідування...)', |
|
| 126 | - 'entree_login' => 'Ваш логін', |
|
| 127 | - 'entree_login_connexion_1' => 'Логін з’єднання', |
|
| 128 | - 'entree_login_connexion_2' => '(Іноді відповідає вашому логіну FTP доступу, а іноді залишається порожнім)', |
|
| 129 | - 'entree_mot_passe' => 'Ваш пароль', |
|
| 130 | - 'entree_mot_passe_1' => 'Пароль', |
|
| 131 | - 'entree_mot_passe_2' => '(Іноді відповідає вашому паролю FTP доступу, а іноді залишається порожнім)', |
|
| 132 | - 'entree_nom_fichier' => 'Будь ласка, виберіть файл з резервною копією @texte_compresse@:', |
|
| 133 | - 'entree_nom_pseudo' => 'Ваше ім’я або псевдонім', |
|
| 134 | - 'entree_nom_pseudo_1' => '(Ваше ім’я або псевдонім)', |
|
| 135 | - 'entree_nom_pseudo_2' => 'Ім’я або псевдонім', |
|
| 136 | - 'entree_nom_site' => 'Назва вашого сайту', |
|
| 137 | - 'entree_nom_site_2' => 'Назва сайту', |
|
| 138 | - 'entree_nouveau_passe' => 'Новий пароль', |
|
| 139 | - 'entree_passe_ldap' => 'Пароль', |
|
| 140 | - 'entree_port_annuaire' => 'Номер порту каталогу', |
|
| 141 | - 'entree_signature' => 'Підпис', |
|
| 142 | - 'entree_titre_obligatoire' => '<b>Заголовок</b> [обов’язково]<br />', |
|
| 143 | - 'entree_url' => 'Адреса (URL) вашого сайту', |
|
| 144 | - 'entree_url_2' => 'URL', |
|
| 145 | - 'erreur_connect_deja_existant' => 'Сервер з такою назвою вже існує', |
|
| 146 | - 'erreur_contenu_suspect' => 'Текст екрановано', |
|
| 147 | - 'erreur_email_deja_existant' => 'Ця адреса електронної пошти вже зареєстрована.', |
|
| 148 | - 'erreur_nom_connect_incorrect' => 'Неприпустиме ім’я серверу', |
|
| 149 | - 'erreur_plugin_attribut_balise_manquant' => 'Атрибут @attribut@ відсутній в тезі @balise@.', |
|
| 150 | - 'erreur_plugin_desinstalation_echouee' => 'Не вдалося видалити плагін, але ви можете відключити його.', |
|
| 151 | - 'erreur_plugin_fichier_absent' => 'Відсутній файл', |
|
| 152 | - 'erreur_plugin_fichier_def_absent' => 'Файл визначення відсутній', |
|
| 153 | - 'erreur_plugin_nom_fonction_interdit' => 'Ім´я функції заборонено', |
|
| 154 | - 'erreur_plugin_nom_manquant' => 'Відсутня назва плагіну ', |
|
| 155 | - 'erreur_plugin_prefix_manquant' => 'Простір імен плагіна невизначений', |
|
| 156 | - 'erreur_plugin_tag_plugin_absent' => '<plugin> відсутнє в файлі опису', |
|
| 157 | - 'erreur_plugin_version_manquant' => 'Відсутня версія плагіну', |
|
| 158 | - 'erreur_type_fichier' => 'Неконкретний тип файлу', |
|
| 99 | + // E |
|
| 100 | + 'ecran_connexion_couleur_principale' => 'Головний колір', |
|
| 101 | + 'ecran_connexion_image_fond' => 'Зображення на тло', |
|
| 102 | + 'ecran_connexion_image_fond_explication' => 'Використати зображення (JPEG, 1920x1080 пікселів)', |
|
| 103 | + 'ecran_connexion_image_revenir_couleur_defaut' => 'Повернути кольори за замовчуванням', |
|
| 104 | + 'ecran_connexion_titre' => 'Сторінка входу', |
|
| 105 | + 'ecran_securite' => ' + сервіс безпеки @version@', |
|
| 106 | + 'email' => 'email', |
|
| 107 | + 'email_2' => 'email:', |
|
| 108 | + 'en_savoir_plus' => 'Детальніше', |
|
| 109 | + 'entree_adresse_annuaire' => 'Довідник адрес', |
|
| 110 | + 'entree_adresse_email' => 'Ваша адреса електронної пошти', |
|
| 111 | + 'entree_adresse_email_2' => 'E-mail', |
|
| 112 | + 'entree_base_donnee_1' => 'Адреса серверу бази даних', |
|
| 113 | + 'entree_base_donnee_2' => '(Зазвичай це «localhost», але ви можете уточнити в налаштуваннях хостінгу)', |
|
| 114 | + 'entree_biographie' => 'Коротка біографія на декілька слів.', |
|
| 115 | + 'entree_chemin_acces' => 'Ввести шлях доступу:', |
|
| 116 | + 'entree_cle_pgp' => 'Ваш ключ PGP', |
|
| 117 | + 'entree_cle_pgp_2' => 'Ключ PGP ', |
|
| 118 | + 'entree_contenu_rubrique' => '(Короткий зміст рубрики.)', |
|
| 119 | + 'entree_identifiants_connexion' => 'Логін і пароль', |
|
| 120 | + 'entree_identifiants_connexion_2' => 'Інформація про підключення', |
|
| 121 | + 'entree_informations_connexion_ldap' => 'Будь ласка, вкажіть параметри підключення до LDAP. Ви можете отримати цю інформацію у вашого системного адміністратора.', |
|
| 122 | + 'entree_infos_perso' => 'Хто ви?', |
|
| 123 | + 'entree_infos_perso_2' => 'Хто автор?', |
|
| 124 | + 'entree_interieur_rubrique' => 'В розділі:', |
|
| 125 | + 'entree_liens_sites' => '<b>Гіперпосилання</b> (посилання, сайт для відвідування...)', |
|
| 126 | + 'entree_login' => 'Ваш логін', |
|
| 127 | + 'entree_login_connexion_1' => 'Логін з’єднання', |
|
| 128 | + 'entree_login_connexion_2' => '(Іноді відповідає вашому логіну FTP доступу, а іноді залишається порожнім)', |
|
| 129 | + 'entree_mot_passe' => 'Ваш пароль', |
|
| 130 | + 'entree_mot_passe_1' => 'Пароль', |
|
| 131 | + 'entree_mot_passe_2' => '(Іноді відповідає вашому паролю FTP доступу, а іноді залишається порожнім)', |
|
| 132 | + 'entree_nom_fichier' => 'Будь ласка, виберіть файл з резервною копією @texte_compresse@:', |
|
| 133 | + 'entree_nom_pseudo' => 'Ваше ім’я або псевдонім', |
|
| 134 | + 'entree_nom_pseudo_1' => '(Ваше ім’я або псевдонім)', |
|
| 135 | + 'entree_nom_pseudo_2' => 'Ім’я або псевдонім', |
|
| 136 | + 'entree_nom_site' => 'Назва вашого сайту', |
|
| 137 | + 'entree_nom_site_2' => 'Назва сайту', |
|
| 138 | + 'entree_nouveau_passe' => 'Новий пароль', |
|
| 139 | + 'entree_passe_ldap' => 'Пароль', |
|
| 140 | + 'entree_port_annuaire' => 'Номер порту каталогу', |
|
| 141 | + 'entree_signature' => 'Підпис', |
|
| 142 | + 'entree_titre_obligatoire' => '<b>Заголовок</b> [обов’язково]<br />', |
|
| 143 | + 'entree_url' => 'Адреса (URL) вашого сайту', |
|
| 144 | + 'entree_url_2' => 'URL', |
|
| 145 | + 'erreur_connect_deja_existant' => 'Сервер з такою назвою вже існує', |
|
| 146 | + 'erreur_contenu_suspect' => 'Текст екрановано', |
|
| 147 | + 'erreur_email_deja_existant' => 'Ця адреса електронної пошти вже зареєстрована.', |
|
| 148 | + 'erreur_nom_connect_incorrect' => 'Неприпустиме ім’я серверу', |
|
| 149 | + 'erreur_plugin_attribut_balise_manquant' => 'Атрибут @attribut@ відсутній в тезі @balise@.', |
|
| 150 | + 'erreur_plugin_desinstalation_echouee' => 'Не вдалося видалити плагін, але ви можете відключити його.', |
|
| 151 | + 'erreur_plugin_fichier_absent' => 'Відсутній файл', |
|
| 152 | + 'erreur_plugin_fichier_def_absent' => 'Файл визначення відсутній', |
|
| 153 | + 'erreur_plugin_nom_fonction_interdit' => 'Ім´я функції заборонено', |
|
| 154 | + 'erreur_plugin_nom_manquant' => 'Відсутня назва плагіну ', |
|
| 155 | + 'erreur_plugin_prefix_manquant' => 'Простір імен плагіна невизначений', |
|
| 156 | + 'erreur_plugin_tag_plugin_absent' => '<plugin> відсутнє в файлі опису', |
|
| 157 | + 'erreur_plugin_version_manquant' => 'Відсутня версія плагіну', |
|
| 158 | + 'erreur_type_fichier' => 'Неконкретний тип файлу', |
|
| 159 | 159 | |
| 160 | - // H |
|
| 161 | - 'htaccess_a_simuler' => 'Увага: в налаштуваннях веб-серверу відключено використання @htaccess@ файлів. Для забезпечення достатнього рівня безпеки внесіть зміни до налаштувань серверу самостійно або зверніться до технічної підтримки хостінгу. Ви також можете задати константи @constantes@ (в файлі mes_options.php) так, щоб ці Файли знаходились поза папкою @document_root@.', |
|
| 162 | - 'htaccess_inoperant' => 'htaccess не робочий', |
|
| 160 | + // H |
|
| 161 | + 'htaccess_a_simuler' => 'Увага: в налаштуваннях веб-серверу відключено використання @htaccess@ файлів. Для забезпечення достатнього рівня безпеки внесіть зміни до налаштувань серверу самостійно або зверніться до технічної підтримки хостінгу. Ви також можете задати константи @constantes@ (в файлі mes_options.php) так, щоб ці Файли знаходились поза папкою @document_root@.', |
|
| 162 | + 'htaccess_inoperant' => 'htaccess не робочий', |
|
| 163 | 163 | |
| 164 | - // I |
|
| 165 | - 'ical_info1' => 'Ця сторінка надає вам декілька методів для підтримки зв’язку з діяльністю цього сайту', |
|
| 166 | - 'ical_info2' => 'Ви можете дізнатися більше в <a href="@spipnet@">документації про SPIP</a>.', |
|
| 167 | - 'ical_info_calendrier' => 'В вашему розпорядженні є два календарі. Перший - це карта сайту, що відображає всі опубліковані статті. Другий містить редакторські оголошення, а також ваші останні особисті повідомлення: його збережено для вас завдяки ключу, який ви можете змінити будь-коли, підтвердивши свій пароль.', |
|
| 168 | - 'ical_methode_http' => 'Завантаження', |
|
| 169 | - 'ical_methode_webcal' => 'Синхронізація (webcal://)', |
|
| 170 | - 'ical_texte_js' => 'Ви можете вставити цей javascript код на будь-який сайт, щоб відображати останні опубліковані статті і матеріали вашого сайту.', |
|
| 171 | - 'ical_texte_prive' => 'Цей календар є строго особистим, він інформує вас про роботу зі статтями на цьому сайті (завдання, персональні налаштування, відправлені статті і новини дня...).', |
|
| 172 | - 'ical_texte_public' => 'Цей календар дозволяє вам слідкувати за основною діяльністю цього сайту (публікація статтей і новин).', |
|
| 173 | - 'ical_texte_rss' => 'Ви можете експортувати останні поновлення на вашому сайті в форматі XML/RSS (Rich Site Summary). Також, завдяки цьому формату даних, ви можете імпортувати інформацію з інших сайтів в ІнтерНемаі.', |
|
| 174 | - 'ical_titre_js' => 'Javascript', |
|
| 175 | - 'ical_titre_mailing' => 'Список адресатів', |
|
| 176 | - 'ical_titre_rss' => 'Отримання статей і новин з інших сайтов по RSS', |
|
| 177 | - 'icone_accueil' => 'Головна', |
|
| 178 | - 'icone_activer_cookie' => 'Помістити cookie', |
|
| 179 | - 'icone_activite' => 'Зворотній зв’язок', |
|
| 180 | - 'icone_admin_plugin' => 'Плагіни', |
|
| 181 | - 'icone_administration' => 'Обслуговування', |
|
| 182 | - 'icone_afficher_auteurs' => 'Показати авторів', |
|
| 183 | - 'icone_afficher_visiteurs' => 'Показати відвідувачів', |
|
| 184 | - 'icone_arret_discussion' => 'Припинити участь в цьому обговоренні', |
|
| 185 | - 'icone_calendrier' => 'Календар', |
|
| 186 | - 'icone_configuration' => 'Конфігурація', |
|
| 187 | - 'icone_creer_auteur' => 'Створити автора і додати до статті', |
|
| 188 | - 'icone_creer_mot_cle' => 'Створити нове ключове слово і пов’язати його із цією статтею.', |
|
| 189 | - 'icone_creer_rubrique_2' => 'Створити нову рубрику', |
|
| 190 | - 'icone_developpement' => 'У розвитку', |
|
| 191 | - 'icone_edition' => 'Редагувати', |
|
| 192 | - 'icone_ma_langue' => 'Моя мова', |
|
| 193 | - 'icone_mes_infos' => 'Моя інформація', |
|
| 194 | - 'icone_mes_preferences' => 'Мої уподобання', |
|
| 195 | - 'icone_modifier_article' => 'Змінити статтю', |
|
| 196 | - 'icone_modifier_rubrique' => 'Змінити розділ', |
|
| 197 | - 'icone_publication' => 'Публікації', |
|
| 198 | - 'icone_relancer_signataire' => 'Відновити підпис', |
|
| 199 | - 'icone_retour' => 'Назад', |
|
| 200 | - 'icone_retour_article' => 'Назад до статті', |
|
| 201 | - 'icone_squelette' => 'Шаблони', |
|
| 202 | - 'icone_suivi_publication' => 'Моніторинг публікації', |
|
| 203 | - 'icone_supprimer_cookie' => 'Видалити cookie', |
|
| 204 | - 'icone_supprimer_rubrique' => 'Видалити розділ', |
|
| 205 | - 'icone_supprimer_signature' => 'Видалити підпис', |
|
| 206 | - 'icone_valider_signature' => 'Затвердити підпис', |
|
| 207 | - 'image_administrer_rubrique' => 'Ви можете керувати цим розділом', |
|
| 208 | - 'impossible_modifier_login_auteur' => 'Неможливо змінити логін.', |
|
| 209 | - 'impossible_modifier_pass_auteur' => 'Неможливо змінити пароль.', |
|
| 210 | - 'info_1_article' => '1 стаття', |
|
| 211 | - 'info_1_auteur' => '1 автор', |
|
| 212 | - 'info_1_message' => '1 повідомлення', |
|
| 213 | - 'info_1_mot_cle' => '1 ключове слово', |
|
| 214 | - 'info_1_rubrique' => '1 розділ', |
|
| 215 | - 'info_1_visiteur' => '1 відвідувач', |
|
| 216 | - 'info_activer_cookie' => 'Ви можете увімкнути <b>адміністративні cookie</b>, що дозволить вам легко перемикатися між основною і адміністративною частиною сайту.', |
|
| 217 | - 'info_activer_menu_developpement' => 'Показати меню розвитку', |
|
| 218 | - 'info_admin_etre_webmestre' => 'Надати мені права вебмастера', |
|
| 219 | - 'info_admin_je_suis_webmestre' => 'Я <b>вебмастер</b>', |
|
| 220 | - 'info_admin_statuer_webmestre' => 'Надати цьому адміністратору права веб-майстра', |
|
| 221 | - 'info_admin_webmestre' => 'Адміністратор є <b>вебмастером</b>', |
|
| 222 | - 'info_administrateur' => 'Адміністратор', |
|
| 223 | - 'info_administrateur_1' => 'Адміністратор', |
|
| 224 | - 'info_administrateur_2' => 'на цьому сайті (<i>використовувати з пересторогою</i>)', |
|
| 225 | - 'info_administrateur_site_01' => 'Якщо ви адміністратор сайта, будь ласка', |
|
| 226 | - 'info_administrateur_site_02' => 'натисніть тут', |
|
| 227 | - 'info_administrateurs' => 'Адміністратори', |
|
| 228 | - 'info_administrer_rubrique' => 'Ви можете управляти цією рубрикою', |
|
| 229 | - 'info_adresse' => 'за адресою:', |
|
| 230 | - 'info_adresse_desinscription' => 'Адреса щоб відписатися:', |
|
| 231 | - 'info_adresse_url' => 'Адреса (URL) загального сайту', |
|
| 232 | - 'info_afficher_par_nb' => 'Показати', |
|
| 233 | - 'info_aide_en_ligne' => 'SPIP Oнлайн Допомога', |
|
| 234 | - 'info_ajout_image' => 'Коли ви додаєте зображення як прикріплені документи до статті, SPIP може автоматично створити зменшену копію цих зображень. Це дозволить, наприклад, автоматично створювати галерею чи портфоліо.', |
|
| 235 | - 'info_ajouter_rubrique' => 'Додати іншу рубрику для управління:', |
|
| 236 | - 'info_annonce_nouveautes' => 'Анонси останніх новин', |
|
| 237 | - 'info_article' => 'стаття', |
|
| 238 | - 'info_article_2' => 'статті', |
|
| 239 | - 'info_article_a_paraitre' => 'статті, які будуть опубліковані в майбутньому', |
|
| 240 | - 'info_articles_02' => 'статті', |
|
| 241 | - 'info_articles_2' => 'Статті', |
|
| 242 | - 'info_articles_auteur' => 'Статті автора', |
|
| 243 | - 'info_articles_miens' => 'Мої статті', |
|
| 244 | - 'info_articles_tous' => 'Усі статті', |
|
| 245 | - 'info_articles_trouves' => 'Знайдені статті', |
|
| 246 | - 'info_attente_validation' => 'Ваші статті на затвердженні', |
|
| 247 | - 'info_aucun_article' => 'Нема статтей', |
|
| 248 | - 'info_aucun_auteur' => 'Нема авторів', |
|
| 249 | - 'info_aucun_message' => 'Нема повідомлень', |
|
| 250 | - 'info_aucun_rubrique' => 'Нема розділів', |
|
| 251 | - 'info_aujourdhui' => 'сьогодні:', |
|
| 252 | - 'info_auteur_gere_rubriques' => 'Автор керує наступними розділами:', |
|
| 253 | - 'info_auteur_gere_toutes_rubriques' => 'Автор керує <b>всіма рубриками</b>', |
|
| 254 | - 'info_auteur_gere_toutes_rubriques_2' => 'Я керую <b>всіма розділами</b>', |
|
| 255 | - 'info_auteurs' => 'Автори', |
|
| 256 | - 'info_auteurs_par_tri' => 'Автори@partri@', |
|
| 257 | - 'info_auteurs_trouves' => 'Знайдені автори', |
|
| 258 | - 'info_authentification_externe' => 'Зовнішня аутентифікація', |
|
| 259 | - 'info_avertissement' => 'Попередження', |
|
| 260 | - 'info_barre_outils' => 'з панеллю інструментів?', |
|
| 261 | - 'info_base_installee' => 'Структуру вашої бази даних встановлено.', |
|
| 262 | - 'info_bio' => 'Біографія', |
|
| 263 | - 'info_cache_desactive' => 'Кешування вимкнено.', |
|
| 264 | - 'info_chapeau' => 'Вступ', |
|
| 265 | - 'info_chapeau_2' => 'Вступ:', |
|
| 266 | - 'info_chemin_acces_1' => 'Опції: <b>Шлях доступу до каталогу</b>', |
|
| 267 | - 'info_chemin_acces_2' => 'Тепер ви повинні налаштувати шлях доступу до інформації в довіднику. Ця інформація необхідна для перегляду профілів користувачів, записаних в довіднику.', |
|
| 268 | - 'info_chemin_acces_annuaire' => 'Опції: <b>Шлях доступу к каталогу</b>', |
|
| 269 | - 'info_choix_base' => 'Третій етап:', |
|
| 270 | - 'info_classement_1' => ' з @liste@', |
|
| 271 | - 'info_classement_2' => ' з @liste@', |
|
| 272 | - 'info_code_acces' => 'Не забудьте ваші власні коди доступу!', |
|
| 273 | - 'info_config_suivi' => 'Якщо ця адреса відповідає списку адресатів, ви можете вказати нижче адресу, за якою учасники сайту можуть зареєструватися. Цією адресою може бути адреса сайту (наприклад сторінка списка реєстрації через мережу) або адреса електронної пошти з певною темою (наприклад: <tt>@adresse_suivi@?subject=subscribe</tt>):', |
|
| 274 | - 'info_config_suivi_explication' => 'Ви можете підписатися на почтову розсилку цього сайту і отримувати на email інформацію про статті та новини, відправлені для публікації.', |
|
| 275 | - 'info_confirmer_passe' => 'Підтвердіть новий пароль:', |
|
| 276 | - 'info_conflit_edition_avis_non_sauvegarde' => 'Увага! Наступні поля були змінені. Ваші внесені зміни в цих полях не були враховані.', |
|
| 277 | - 'info_conflit_edition_differences' => 'Відмінності:', |
|
| 278 | - 'info_conflit_edition_version_enregistree' => 'Зареєстрована версія:', |
|
| 279 | - 'info_conflit_edition_votre_version' => 'Ваша версія:', |
|
| 280 | - 'info_connexion_base' => 'Спроба з’єднання з базою даних', |
|
| 281 | - 'info_connexion_base_donnee' => 'Підключення до бази даних', |
|
| 282 | - 'info_connexion_ldap_ok' => '<b>З’єднання з LDAP встановлено. </b> <p>Ви можете перейти до наступного кроку.</p>', |
|
| 283 | - 'info_connexion_mysql' => 'Ваше з’єднання з SQL', |
|
| 284 | - 'info_connexion_ok' => 'З’єднання встановлено.', |
|
| 285 | - 'info_contact' => 'Контакт', |
|
| 286 | - 'info_contenu_articles' => 'Зміст статтей', |
|
| 287 | - 'info_contributions' => 'Внески', |
|
| 288 | - 'info_creation_paragraphe' => '(Розділяйте абзаци порожніми строками)', |
|
| 289 | - 'info_creation_rubrique' => 'Перед тим, як писати статті, необхідно створити хоча б одну рубрику. ', |
|
| 290 | - 'info_creation_tables' => 'Створення таблиць бази даних', |
|
| 291 | - 'info_creer_base' => '<b>Створити</b> нову базу даних:', |
|
| 292 | - 'info_dans_rubrique' => 'У рубриці :', |
|
| 293 | - 'info_date_publication_anterieure' => 'Дата попередньої редакції :', |
|
| 294 | - 'info_date_referencement' => 'ДАТА ПОСИЛАННЯ НА ЦЕЙ САЙТ:', |
|
| 295 | - 'info_derniere_etape' => 'Готово!', |
|
| 296 | - 'info_descriptif' => 'Опис:', |
|
| 297 | - 'info_desinstaller_plugin' => 'видаляє дані і відключає плагін', |
|
| 298 | - 'info_discussion_cours' => 'Поточні обговорення', |
|
| 299 | - 'info_ecrire_article' => 'Перед тим, як писати статті, необхідно створити хоча б одну рубрику.', |
|
| 300 | - 'info_email_envoi' => ' Адреса електронної пошти (необов’язково)', |
|
| 301 | - 'info_email_envoi_txt' => 'Введіть e-mail адресу відправника, що використовується для відправлення електронних листів (зазвичай адреса користувача використовується як адреса відправника):', |
|
| 302 | - 'info_email_webmestre' => 'E-mail веб-мастера', |
|
| 303 | - 'info_envoi_email_automatique' => 'Автоматична відправка повідомлення електронної пошти ', |
|
| 304 | - 'info_envoyer_maintenant' => 'Відправити зараз', |
|
| 305 | - 'info_etape_suivante' => 'Перейти до наступного етапу', |
|
| 306 | - 'info_etape_suivante_1' => 'Ви можете перейти до наступного етапу.', |
|
| 307 | - 'info_etape_suivante_2' => 'Ви можете перейти до наступного етапу.', |
|
| 308 | - 'info_exceptions_proxy' => 'Винятки для проксі', |
|
| 309 | - 'info_exportation_base' => 'експортувати базу даних в @archive@', |
|
| 310 | - 'info_facilite_suivi_activite' => 'Для полегшення моніторингу діяльності редакційних SPIP сайт може відправити його поштою, наприклад, на список розсилки редакторів, бізнес-додатки публікації та перевірки статей.', |
|
| 311 | - 'info_fichiers_authent' => 'Файл аутентифікації «.htpasswd»', |
|
| 312 | - 'info_forums_abo_invites' => 'Ваш сайт має форуми за підпискою; відвідувачі можуть зареєструватися на них на основному сайті.', |
|
| 313 | - 'info_gauche_admin_tech' => '<b>Сторінка тільки для вебмастера сайта.</b> <p>Ви можете виконувати завдання щодо експлуатації сайту. Частина з них може потребувати FTP-доступу до сайту.</p>', |
|
| 314 | - 'info_gauche_admin_vider' => '<b>Тільки вебмастери мають доступ до цієї сторінки.</b> <p>Тут є можливість виконувати різні завдання по обслуговуванню сайта. Для виконання окремих завдань необхідний доступ до сайту по FTP.</p>', |
|
| 315 | - 'info_gauche_auteurs' => 'Перелік всіх авторів сайту. Статус автора позначений кольором (адміністратор = зелений; автор = жовтий).', |
|
| 316 | - 'info_gauche_auteurs_exterieurs' => 'Користувачі, що зареєструвалися, позначені синім кольором, а видалені користувачі - іконкою кошика.', |
|
| 317 | - 'info_gauche_messagerie' => 'Передача повідомлень дозволяє обмінюватися повідомленнями між редакторами, зберигати нотатки (для вашого особистого використання) або показувати оголошення на основній сторінці адміністративної частини (якщо ви - адміністратор).', |
|
| 318 | - 'info_gauche_statistiques_referers' => 'Ця сторінка показує список <i>посилань</i>, тобто ті сайти, які мають посилання на ваш сайт, тільки для вчора і сьогодні: фактично цей список поновлюється кожні 24 години.', |
|
| 319 | - 'info_gauche_visiteurs_enregistres' => 'Ви знайдете тут зареєстрованних відвідувачів основноі частини сайту (форуми за підпискою).', |
|
| 320 | - 'info_generation_miniatures_images' => 'Створення зменшених зображень', |
|
| 321 | - 'info_gerer_trad_objets' => '@objets@ : управління перекладами', |
|
| 322 | - 'info_hebergeur_desactiver_envoi_email' => 'Деякі хости відключають автоматизовану відправку листів на своих серверах. В цьому випадку наступні можливості SPIP не можуть бути здійснені.', |
|
| 323 | - 'info_hier' => 'вчора:', |
|
| 324 | - 'info_identification_publique' => 'Ваша публична ідентифікація...', |
|
| 325 | - 'info_image_process' => 'Виберіть кращий метод для створення зменшеної копії, натиснувши на відповідну картинку.', |
|
| 326 | - 'info_image_process2' => 'Якщо картинки не відображаються, це значить, що ваш хостінг не підтримує розширения по роботі з зображеннями. Уточніть в технічній підтримці хостінгу про можливості використовувати бібліотеки «GD» або «Imagemagic».', |
|
| 327 | - 'info_images_auto' => 'Кеш файлів зображень', |
|
| 328 | - 'info_informations_personnelles' => 'Налаштування профиля', |
|
| 329 | - 'info_inscription' => 'Реєстрація', |
|
| 330 | - 'info_inscription_automatique' => 'Автоматична реєстрація нових авторів', |
|
| 331 | - 'info_jeu_caractere' => 'Кодування сайту', |
|
| 332 | - 'info_jours' => 'дні', |
|
| 333 | - 'info_laisser_champs_vides' => 'залиште ці поля порожніми)', |
|
| 334 | - 'info_langues' => 'Мови сайту', |
|
| 335 | - 'info_ldap_ok' => 'Встанослення справжності LDAP.', |
|
| 336 | - 'info_lien_hypertexte' => 'Гиперпосилання:', |
|
| 337 | - 'info_liste_nouveautes_envoyee' => 'Інформацію про останні оновлення відправлено', |
|
| 338 | - 'info_liste_redacteurs_connectes' => 'Автори онлайн', |
|
| 339 | - 'info_login_existant' => 'Цей логін вже використовується.', |
|
| 340 | - 'info_login_trop_court' => 'Занадто короткий логін.', |
|
| 341 | - 'info_login_trop_court_car_pluriel' => 'Логін повинен складатися мінімум з @nb@ символів.', |
|
| 342 | - 'info_logos' => 'Логотипи', |
|
| 343 | - 'info_maximum' => 'максимум:', |
|
| 344 | - 'info_meme_rubrique' => 'В розділі:', |
|
| 345 | - 'info_message_en_redaction' => 'Ваше повідомлення в роботі', |
|
| 346 | - 'info_message_technique' => 'Технічене повідомлення:', |
|
| 347 | - 'info_messagerie_interne' => 'Внутрішня передача повідомлень', |
|
| 348 | - 'info_mise_a_niveau_base' => 'оновлення бази даних SQL', |
|
| 349 | - 'info_mise_a_niveau_base_2' => '{{Попередження!}} Ви встановили версію SPIP файлів {старіше} ніж та, яку було попередньо встановлено на цьому сайті: ви ризикуєте втратити базу даних, і тоді ваш сайт не зможе працювати належним чином. <br /> {{Перевстановіть SPIP файли.}}', |
|
| 350 | - 'info_modification_enregistree' => 'Ваши зміни збережено', |
|
| 351 | - 'info_modifier_auteur' => 'Змінити автора:', |
|
| 352 | - 'info_modifier_rubrique' => 'Змінити розділ:', |
|
| 353 | - 'info_modifier_titre' => 'Змінити: @titre@', |
|
| 354 | - 'info_mon_site_spip' => 'Мій сайт ', |
|
| 355 | - 'info_moyenne' => 'в средньому:', |
|
| 356 | - 'info_multi_cet_article' => 'Мова статті:', |
|
| 357 | - 'info_multi_langues_choisies' => 'Виберіть мови для редагування матеріалів на сайті. Мови, які вже використовує ваш сайт (наверху списку) не можуть бути вимкнені.', |
|
| 358 | - 'info_multi_objets' => '@objets@ : увімкнути мовне меню', |
|
| 359 | - 'info_multi_secteurs' => '... тільки для розділів в корені сайту?', |
|
| 360 | - 'info_nb_articles' => '@nb@ статтей', |
|
| 361 | - 'info_nb_auteurs' => '@nb@ авторів', |
|
| 362 | - 'info_nb_messages' => '@nb@ повідомлень', |
|
| 363 | - 'info_nb_mots_cles' => '@nb@ ключових слів', |
|
| 364 | - 'info_nb_rubriques' => '@nb@ розділ(ів)', |
|
| 365 | - 'info_nb_visiteurs' => '@nb@ відвідувачів', |
|
| 366 | - 'info_nom' => 'Ім’я', |
|
| 367 | - 'info_nom_destinataire' => 'Ім’я користувача', |
|
| 368 | - 'info_nom_pas_conforme' => 'HTML теги не допускаються', |
|
| 369 | - 'info_nom_site' => 'Назва вашого сайта', |
|
| 370 | - 'info_nombre_articles' => '@nb_articles@ статті,', |
|
| 371 | - 'info_nombre_rubriques' => '@nb_rubriques@ рубрики,', |
|
| 372 | - 'info_nombre_sites' => '@nb_sites@ сайти,', |
|
| 373 | - 'info_non_deplacer' => 'Не переміщувати...', |
|
| 374 | - 'info_non_envoi_annonce_dernieres_nouveautes' => 'SPIP может регулярно відправляти новини, оголошення сайта |
|
| 164 | + // I |
|
| 165 | + 'ical_info1' => 'Ця сторінка надає вам декілька методів для підтримки зв’язку з діяльністю цього сайту', |
|
| 166 | + 'ical_info2' => 'Ви можете дізнатися більше в <a href="@spipnet@">документації про SPIP</a>.', |
|
| 167 | + 'ical_info_calendrier' => 'В вашему розпорядженні є два календарі. Перший - це карта сайту, що відображає всі опубліковані статті. Другий містить редакторські оголошення, а також ваші останні особисті повідомлення: його збережено для вас завдяки ключу, який ви можете змінити будь-коли, підтвердивши свій пароль.', |
|
| 168 | + 'ical_methode_http' => 'Завантаження', |
|
| 169 | + 'ical_methode_webcal' => 'Синхронізація (webcal://)', |
|
| 170 | + 'ical_texte_js' => 'Ви можете вставити цей javascript код на будь-який сайт, щоб відображати останні опубліковані статті і матеріали вашого сайту.', |
|
| 171 | + 'ical_texte_prive' => 'Цей календар є строго особистим, він інформує вас про роботу зі статтями на цьому сайті (завдання, персональні налаштування, відправлені статті і новини дня...).', |
|
| 172 | + 'ical_texte_public' => 'Цей календар дозволяє вам слідкувати за основною діяльністю цього сайту (публікація статтей і новин).', |
|
| 173 | + 'ical_texte_rss' => 'Ви можете експортувати останні поновлення на вашому сайті в форматі XML/RSS (Rich Site Summary). Також, завдяки цьому формату даних, ви можете імпортувати інформацію з інших сайтів в ІнтерНемаі.', |
|
| 174 | + 'ical_titre_js' => 'Javascript', |
|
| 175 | + 'ical_titre_mailing' => 'Список адресатів', |
|
| 176 | + 'ical_titre_rss' => 'Отримання статей і новин з інших сайтов по RSS', |
|
| 177 | + 'icone_accueil' => 'Головна', |
|
| 178 | + 'icone_activer_cookie' => 'Помістити cookie', |
|
| 179 | + 'icone_activite' => 'Зворотній зв’язок', |
|
| 180 | + 'icone_admin_plugin' => 'Плагіни', |
|
| 181 | + 'icone_administration' => 'Обслуговування', |
|
| 182 | + 'icone_afficher_auteurs' => 'Показати авторів', |
|
| 183 | + 'icone_afficher_visiteurs' => 'Показати відвідувачів', |
|
| 184 | + 'icone_arret_discussion' => 'Припинити участь в цьому обговоренні', |
|
| 185 | + 'icone_calendrier' => 'Календар', |
|
| 186 | + 'icone_configuration' => 'Конфігурація', |
|
| 187 | + 'icone_creer_auteur' => 'Створити автора і додати до статті', |
|
| 188 | + 'icone_creer_mot_cle' => 'Створити нове ключове слово і пов’язати його із цією статтею.', |
|
| 189 | + 'icone_creer_rubrique_2' => 'Створити нову рубрику', |
|
| 190 | + 'icone_developpement' => 'У розвитку', |
|
| 191 | + 'icone_edition' => 'Редагувати', |
|
| 192 | + 'icone_ma_langue' => 'Моя мова', |
|
| 193 | + 'icone_mes_infos' => 'Моя інформація', |
|
| 194 | + 'icone_mes_preferences' => 'Мої уподобання', |
|
| 195 | + 'icone_modifier_article' => 'Змінити статтю', |
|
| 196 | + 'icone_modifier_rubrique' => 'Змінити розділ', |
|
| 197 | + 'icone_publication' => 'Публікації', |
|
| 198 | + 'icone_relancer_signataire' => 'Відновити підпис', |
|
| 199 | + 'icone_retour' => 'Назад', |
|
| 200 | + 'icone_retour_article' => 'Назад до статті', |
|
| 201 | + 'icone_squelette' => 'Шаблони', |
|
| 202 | + 'icone_suivi_publication' => 'Моніторинг публікації', |
|
| 203 | + 'icone_supprimer_cookie' => 'Видалити cookie', |
|
| 204 | + 'icone_supprimer_rubrique' => 'Видалити розділ', |
|
| 205 | + 'icone_supprimer_signature' => 'Видалити підпис', |
|
| 206 | + 'icone_valider_signature' => 'Затвердити підпис', |
|
| 207 | + 'image_administrer_rubrique' => 'Ви можете керувати цим розділом', |
|
| 208 | + 'impossible_modifier_login_auteur' => 'Неможливо змінити логін.', |
|
| 209 | + 'impossible_modifier_pass_auteur' => 'Неможливо змінити пароль.', |
|
| 210 | + 'info_1_article' => '1 стаття', |
|
| 211 | + 'info_1_auteur' => '1 автор', |
|
| 212 | + 'info_1_message' => '1 повідомлення', |
|
| 213 | + 'info_1_mot_cle' => '1 ключове слово', |
|
| 214 | + 'info_1_rubrique' => '1 розділ', |
|
| 215 | + 'info_1_visiteur' => '1 відвідувач', |
|
| 216 | + 'info_activer_cookie' => 'Ви можете увімкнути <b>адміністративні cookie</b>, що дозволить вам легко перемикатися між основною і адміністративною частиною сайту.', |
|
| 217 | + 'info_activer_menu_developpement' => 'Показати меню розвитку', |
|
| 218 | + 'info_admin_etre_webmestre' => 'Надати мені права вебмастера', |
|
| 219 | + 'info_admin_je_suis_webmestre' => 'Я <b>вебмастер</b>', |
|
| 220 | + 'info_admin_statuer_webmestre' => 'Надати цьому адміністратору права веб-майстра', |
|
| 221 | + 'info_admin_webmestre' => 'Адміністратор є <b>вебмастером</b>', |
|
| 222 | + 'info_administrateur' => 'Адміністратор', |
|
| 223 | + 'info_administrateur_1' => 'Адміністратор', |
|
| 224 | + 'info_administrateur_2' => 'на цьому сайті (<i>використовувати з пересторогою</i>)', |
|
| 225 | + 'info_administrateur_site_01' => 'Якщо ви адміністратор сайта, будь ласка', |
|
| 226 | + 'info_administrateur_site_02' => 'натисніть тут', |
|
| 227 | + 'info_administrateurs' => 'Адміністратори', |
|
| 228 | + 'info_administrer_rubrique' => 'Ви можете управляти цією рубрикою', |
|
| 229 | + 'info_adresse' => 'за адресою:', |
|
| 230 | + 'info_adresse_desinscription' => 'Адреса щоб відписатися:', |
|
| 231 | + 'info_adresse_url' => 'Адреса (URL) загального сайту', |
|
| 232 | + 'info_afficher_par_nb' => 'Показати', |
|
| 233 | + 'info_aide_en_ligne' => 'SPIP Oнлайн Допомога', |
|
| 234 | + 'info_ajout_image' => 'Коли ви додаєте зображення як прикріплені документи до статті, SPIP може автоматично створити зменшену копію цих зображень. Це дозволить, наприклад, автоматично створювати галерею чи портфоліо.', |
|
| 235 | + 'info_ajouter_rubrique' => 'Додати іншу рубрику для управління:', |
|
| 236 | + 'info_annonce_nouveautes' => 'Анонси останніх новин', |
|
| 237 | + 'info_article' => 'стаття', |
|
| 238 | + 'info_article_2' => 'статті', |
|
| 239 | + 'info_article_a_paraitre' => 'статті, які будуть опубліковані в майбутньому', |
|
| 240 | + 'info_articles_02' => 'статті', |
|
| 241 | + 'info_articles_2' => 'Статті', |
|
| 242 | + 'info_articles_auteur' => 'Статті автора', |
|
| 243 | + 'info_articles_miens' => 'Мої статті', |
|
| 244 | + 'info_articles_tous' => 'Усі статті', |
|
| 245 | + 'info_articles_trouves' => 'Знайдені статті', |
|
| 246 | + 'info_attente_validation' => 'Ваші статті на затвердженні', |
|
| 247 | + 'info_aucun_article' => 'Нема статтей', |
|
| 248 | + 'info_aucun_auteur' => 'Нема авторів', |
|
| 249 | + 'info_aucun_message' => 'Нема повідомлень', |
|
| 250 | + 'info_aucun_rubrique' => 'Нема розділів', |
|
| 251 | + 'info_aujourdhui' => 'сьогодні:', |
|
| 252 | + 'info_auteur_gere_rubriques' => 'Автор керує наступними розділами:', |
|
| 253 | + 'info_auteur_gere_toutes_rubriques' => 'Автор керує <b>всіма рубриками</b>', |
|
| 254 | + 'info_auteur_gere_toutes_rubriques_2' => 'Я керую <b>всіма розділами</b>', |
|
| 255 | + 'info_auteurs' => 'Автори', |
|
| 256 | + 'info_auteurs_par_tri' => 'Автори@partri@', |
|
| 257 | + 'info_auteurs_trouves' => 'Знайдені автори', |
|
| 258 | + 'info_authentification_externe' => 'Зовнішня аутентифікація', |
|
| 259 | + 'info_avertissement' => 'Попередження', |
|
| 260 | + 'info_barre_outils' => 'з панеллю інструментів?', |
|
| 261 | + 'info_base_installee' => 'Структуру вашої бази даних встановлено.', |
|
| 262 | + 'info_bio' => 'Біографія', |
|
| 263 | + 'info_cache_desactive' => 'Кешування вимкнено.', |
|
| 264 | + 'info_chapeau' => 'Вступ', |
|
| 265 | + 'info_chapeau_2' => 'Вступ:', |
|
| 266 | + 'info_chemin_acces_1' => 'Опції: <b>Шлях доступу до каталогу</b>', |
|
| 267 | + 'info_chemin_acces_2' => 'Тепер ви повинні налаштувати шлях доступу до інформації в довіднику. Ця інформація необхідна для перегляду профілів користувачів, записаних в довіднику.', |
|
| 268 | + 'info_chemin_acces_annuaire' => 'Опції: <b>Шлях доступу к каталогу</b>', |
|
| 269 | + 'info_choix_base' => 'Третій етап:', |
|
| 270 | + 'info_classement_1' => ' з @liste@', |
|
| 271 | + 'info_classement_2' => ' з @liste@', |
|
| 272 | + 'info_code_acces' => 'Не забудьте ваші власні коди доступу!', |
|
| 273 | + 'info_config_suivi' => 'Якщо ця адреса відповідає списку адресатів, ви можете вказати нижче адресу, за якою учасники сайту можуть зареєструватися. Цією адресою може бути адреса сайту (наприклад сторінка списка реєстрації через мережу) або адреса електронної пошти з певною темою (наприклад: <tt>@adresse_suivi@?subject=subscribe</tt>):', |
|
| 274 | + 'info_config_suivi_explication' => 'Ви можете підписатися на почтову розсилку цього сайту і отримувати на email інформацію про статті та новини, відправлені для публікації.', |
|
| 275 | + 'info_confirmer_passe' => 'Підтвердіть новий пароль:', |
|
| 276 | + 'info_conflit_edition_avis_non_sauvegarde' => 'Увага! Наступні поля були змінені. Ваші внесені зміни в цих полях не були враховані.', |
|
| 277 | + 'info_conflit_edition_differences' => 'Відмінності:', |
|
| 278 | + 'info_conflit_edition_version_enregistree' => 'Зареєстрована версія:', |
|
| 279 | + 'info_conflit_edition_votre_version' => 'Ваша версія:', |
|
| 280 | + 'info_connexion_base' => 'Спроба з’єднання з базою даних', |
|
| 281 | + 'info_connexion_base_donnee' => 'Підключення до бази даних', |
|
| 282 | + 'info_connexion_ldap_ok' => '<b>З’єднання з LDAP встановлено. </b> <p>Ви можете перейти до наступного кроку.</p>', |
|
| 283 | + 'info_connexion_mysql' => 'Ваше з’єднання з SQL', |
|
| 284 | + 'info_connexion_ok' => 'З’єднання встановлено.', |
|
| 285 | + 'info_contact' => 'Контакт', |
|
| 286 | + 'info_contenu_articles' => 'Зміст статтей', |
|
| 287 | + 'info_contributions' => 'Внески', |
|
| 288 | + 'info_creation_paragraphe' => '(Розділяйте абзаци порожніми строками)', |
|
| 289 | + 'info_creation_rubrique' => 'Перед тим, як писати статті, необхідно створити хоча б одну рубрику. ', |
|
| 290 | + 'info_creation_tables' => 'Створення таблиць бази даних', |
|
| 291 | + 'info_creer_base' => '<b>Створити</b> нову базу даних:', |
|
| 292 | + 'info_dans_rubrique' => 'У рубриці :', |
|
| 293 | + 'info_date_publication_anterieure' => 'Дата попередньої редакції :', |
|
| 294 | + 'info_date_referencement' => 'ДАТА ПОСИЛАННЯ НА ЦЕЙ САЙТ:', |
|
| 295 | + 'info_derniere_etape' => 'Готово!', |
|
| 296 | + 'info_descriptif' => 'Опис:', |
|
| 297 | + 'info_desinstaller_plugin' => 'видаляє дані і відключає плагін', |
|
| 298 | + 'info_discussion_cours' => 'Поточні обговорення', |
|
| 299 | + 'info_ecrire_article' => 'Перед тим, як писати статті, необхідно створити хоча б одну рубрику.', |
|
| 300 | + 'info_email_envoi' => ' Адреса електронної пошти (необов’язково)', |
|
| 301 | + 'info_email_envoi_txt' => 'Введіть e-mail адресу відправника, що використовується для відправлення електронних листів (зазвичай адреса користувача використовується як адреса відправника):', |
|
| 302 | + 'info_email_webmestre' => 'E-mail веб-мастера', |
|
| 303 | + 'info_envoi_email_automatique' => 'Автоматична відправка повідомлення електронної пошти ', |
|
| 304 | + 'info_envoyer_maintenant' => 'Відправити зараз', |
|
| 305 | + 'info_etape_suivante' => 'Перейти до наступного етапу', |
|
| 306 | + 'info_etape_suivante_1' => 'Ви можете перейти до наступного етапу.', |
|
| 307 | + 'info_etape_suivante_2' => 'Ви можете перейти до наступного етапу.', |
|
| 308 | + 'info_exceptions_proxy' => 'Винятки для проксі', |
|
| 309 | + 'info_exportation_base' => 'експортувати базу даних в @archive@', |
|
| 310 | + 'info_facilite_suivi_activite' => 'Для полегшення моніторингу діяльності редакційних SPIP сайт може відправити його поштою, наприклад, на список розсилки редакторів, бізнес-додатки публікації та перевірки статей.', |
|
| 311 | + 'info_fichiers_authent' => 'Файл аутентифікації «.htpasswd»', |
|
| 312 | + 'info_forums_abo_invites' => 'Ваш сайт має форуми за підпискою; відвідувачі можуть зареєструватися на них на основному сайті.', |
|
| 313 | + 'info_gauche_admin_tech' => '<b>Сторінка тільки для вебмастера сайта.</b> <p>Ви можете виконувати завдання щодо експлуатації сайту. Частина з них може потребувати FTP-доступу до сайту.</p>', |
|
| 314 | + 'info_gauche_admin_vider' => '<b>Тільки вебмастери мають доступ до цієї сторінки.</b> <p>Тут є можливість виконувати різні завдання по обслуговуванню сайта. Для виконання окремих завдань необхідний доступ до сайту по FTP.</p>', |
|
| 315 | + 'info_gauche_auteurs' => 'Перелік всіх авторів сайту. Статус автора позначений кольором (адміністратор = зелений; автор = жовтий).', |
|
| 316 | + 'info_gauche_auteurs_exterieurs' => 'Користувачі, що зареєструвалися, позначені синім кольором, а видалені користувачі - іконкою кошика.', |
|
| 317 | + 'info_gauche_messagerie' => 'Передача повідомлень дозволяє обмінюватися повідомленнями між редакторами, зберигати нотатки (для вашого особистого використання) або показувати оголошення на основній сторінці адміністративної частини (якщо ви - адміністратор).', |
|
| 318 | + 'info_gauche_statistiques_referers' => 'Ця сторінка показує список <i>посилань</i>, тобто ті сайти, які мають посилання на ваш сайт, тільки для вчора і сьогодні: фактично цей список поновлюється кожні 24 години.', |
|
| 319 | + 'info_gauche_visiteurs_enregistres' => 'Ви знайдете тут зареєстрованних відвідувачів основноі частини сайту (форуми за підпискою).', |
|
| 320 | + 'info_generation_miniatures_images' => 'Створення зменшених зображень', |
|
| 321 | + 'info_gerer_trad_objets' => '@objets@ : управління перекладами', |
|
| 322 | + 'info_hebergeur_desactiver_envoi_email' => 'Деякі хости відключають автоматизовану відправку листів на своих серверах. В цьому випадку наступні можливості SPIP не можуть бути здійснені.', |
|
| 323 | + 'info_hier' => 'вчора:', |
|
| 324 | + 'info_identification_publique' => 'Ваша публична ідентифікація...', |
|
| 325 | + 'info_image_process' => 'Виберіть кращий метод для створення зменшеної копії, натиснувши на відповідну картинку.', |
|
| 326 | + 'info_image_process2' => 'Якщо картинки не відображаються, це значить, що ваш хостінг не підтримує розширения по роботі з зображеннями. Уточніть в технічній підтримці хостінгу про можливості використовувати бібліотеки «GD» або «Imagemagic».', |
|
| 327 | + 'info_images_auto' => 'Кеш файлів зображень', |
|
| 328 | + 'info_informations_personnelles' => 'Налаштування профиля', |
|
| 329 | + 'info_inscription' => 'Реєстрація', |
|
| 330 | + 'info_inscription_automatique' => 'Автоматична реєстрація нових авторів', |
|
| 331 | + 'info_jeu_caractere' => 'Кодування сайту', |
|
| 332 | + 'info_jours' => 'дні', |
|
| 333 | + 'info_laisser_champs_vides' => 'залиште ці поля порожніми)', |
|
| 334 | + 'info_langues' => 'Мови сайту', |
|
| 335 | + 'info_ldap_ok' => 'Встанослення справжності LDAP.', |
|
| 336 | + 'info_lien_hypertexte' => 'Гиперпосилання:', |
|
| 337 | + 'info_liste_nouveautes_envoyee' => 'Інформацію про останні оновлення відправлено', |
|
| 338 | + 'info_liste_redacteurs_connectes' => 'Автори онлайн', |
|
| 339 | + 'info_login_existant' => 'Цей логін вже використовується.', |
|
| 340 | + 'info_login_trop_court' => 'Занадто короткий логін.', |
|
| 341 | + 'info_login_trop_court_car_pluriel' => 'Логін повинен складатися мінімум з @nb@ символів.', |
|
| 342 | + 'info_logos' => 'Логотипи', |
|
| 343 | + 'info_maximum' => 'максимум:', |
|
| 344 | + 'info_meme_rubrique' => 'В розділі:', |
|
| 345 | + 'info_message_en_redaction' => 'Ваше повідомлення в роботі', |
|
| 346 | + 'info_message_technique' => 'Технічене повідомлення:', |
|
| 347 | + 'info_messagerie_interne' => 'Внутрішня передача повідомлень', |
|
| 348 | + 'info_mise_a_niveau_base' => 'оновлення бази даних SQL', |
|
| 349 | + 'info_mise_a_niveau_base_2' => '{{Попередження!}} Ви встановили версію SPIP файлів {старіше} ніж та, яку було попередньо встановлено на цьому сайті: ви ризикуєте втратити базу даних, і тоді ваш сайт не зможе працювати належним чином. <br /> {{Перевстановіть SPIP файли.}}', |
|
| 350 | + 'info_modification_enregistree' => 'Ваши зміни збережено', |
|
| 351 | + 'info_modifier_auteur' => 'Змінити автора:', |
|
| 352 | + 'info_modifier_rubrique' => 'Змінити розділ:', |
|
| 353 | + 'info_modifier_titre' => 'Змінити: @titre@', |
|
| 354 | + 'info_mon_site_spip' => 'Мій сайт ', |
|
| 355 | + 'info_moyenne' => 'в средньому:', |
|
| 356 | + 'info_multi_cet_article' => 'Мова статті:', |
|
| 357 | + 'info_multi_langues_choisies' => 'Виберіть мови для редагування матеріалів на сайті. Мови, які вже використовує ваш сайт (наверху списку) не можуть бути вимкнені.', |
|
| 358 | + 'info_multi_objets' => '@objets@ : увімкнути мовне меню', |
|
| 359 | + 'info_multi_secteurs' => '... тільки для розділів в корені сайту?', |
|
| 360 | + 'info_nb_articles' => '@nb@ статтей', |
|
| 361 | + 'info_nb_auteurs' => '@nb@ авторів', |
|
| 362 | + 'info_nb_messages' => '@nb@ повідомлень', |
|
| 363 | + 'info_nb_mots_cles' => '@nb@ ключових слів', |
|
| 364 | + 'info_nb_rubriques' => '@nb@ розділ(ів)', |
|
| 365 | + 'info_nb_visiteurs' => '@nb@ відвідувачів', |
|
| 366 | + 'info_nom' => 'Ім’я', |
|
| 367 | + 'info_nom_destinataire' => 'Ім’я користувача', |
|
| 368 | + 'info_nom_pas_conforme' => 'HTML теги не допускаються', |
|
| 369 | + 'info_nom_site' => 'Назва вашого сайта', |
|
| 370 | + 'info_nombre_articles' => '@nb_articles@ статті,', |
|
| 371 | + 'info_nombre_rubriques' => '@nb_rubriques@ рубрики,', |
|
| 372 | + 'info_nombre_sites' => '@nb_sites@ сайти,', |
|
| 373 | + 'info_non_deplacer' => 'Не переміщувати...', |
|
| 374 | + 'info_non_envoi_annonce_dernieres_nouveautes' => 'SPIP может регулярно відправляти новини, оголошення сайта |
|
| 375 | 375 | (недавно опубліковані статті і новини).', |
| 376 | - 'info_non_envoi_liste_nouveautes' => 'Не відправляти список останніх новин', |
|
| 377 | - 'info_non_modifiable' => 'не может бути змінено', |
|
| 378 | - 'info_non_suppression_mot_cle' => 'Я НЕ хочу видаляти це ключове слово.', |
|
| 379 | - 'info_notes' => 'Примітки', |
|
| 380 | - 'info_nouvel_article' => 'Новая стаття', |
|
| 381 | - 'info_nouvelle_traduction' => 'Новий переклад:', |
|
| 382 | - 'info_numero_article' => 'НОМЕР СТАТТІ:', |
|
| 383 | - 'info_obligatoire_02' => '(обов’язково)', |
|
| 384 | - 'info_option_accepter_visiteurs' => 'Увімкнути реєстрацію відвідувачів на сайті', |
|
| 385 | - 'info_option_ne_pas_accepter_visiteurs' => 'Відключити реєстрацію відвідувачів на сайті', |
|
| 386 | - 'info_options_avancees' => 'ДОДАТКОВІ НАЛАШТУВАННЯ', |
|
| 387 | - 'info_ou' => 'або...', |
|
| 388 | - 'info_page_interdite' => 'Заборонена сторінка', |
|
| 389 | - 'info_par_nom' => 'за назвою', |
|
| 390 | - 'info_par_nombre_article' => 'за номерами статтей', |
|
| 391 | - 'info_par_statut' => 'за статусом', |
|
| 392 | - 'info_par_tri' => '’(за @tri@)’', |
|
| 393 | - 'info_passe_trop_court' => 'Пароль надто короткий.', |
|
| 394 | - 'info_passe_trop_court_car_pluriel' => 'Пароль повинен мати мінімум @nb@ символів.', |
|
| 395 | - 'info_passes_identiques' => 'Два паролі не співпадають.', |
|
| 396 | - 'info_plus_cinq_car' => 'понад 5 символів', |
|
| 397 | - 'info_plus_cinq_car_2' => '(Понад 5 символів)', |
|
| 398 | - 'info_plus_trois_car' => '(Понад 3 символи)', |
|
| 399 | - 'info_popularite' => 'популярність: @popularite@; відвідання: @visites@', |
|
| 400 | - 'info_post_scriptum' => 'Постскриптум', |
|
| 401 | - 'info_post_scriptum_2' => 'Постскриптум: ', |
|
| 402 | - 'info_pour' => 'для', |
|
| 403 | - 'info_preview_texte' => 'Налаштування попереднього перегляду. Ви можете подивитися, як виглядають на сайті матеріали зі статусом «представлено». Увімкнути цю можливість для усіх авторів, тільки для адміністраторов або відключити взагалі?', |
|
| 404 | - 'info_procedez_par_etape' => 'Будь ласка, виконуйте покроково', |
|
| 405 | - 'info_procedure_maj_version' => 'необхідно запустити процедуру оновлення поточної бази даних для новоі версії SPIP.', |
|
| 406 | - 'info_proxy_ok' => 'Проксі сервер працює.', |
|
| 407 | - 'info_ps' => 'P.S.', |
|
| 408 | - 'info_publier' => 'опублікувати', |
|
| 409 | - 'info_publies' => 'Ваші статті, опубліковані на сайті:', |
|
| 410 | - 'info_question_accepter_visiteurs' => 'Якщо шаблони вашого сайту дозволяють відвідувачам реєструватися, не входячи в адміністративну частину, будь ласка, включіть наступну опцію:', |
|
| 411 | - 'info_question_inscription_nouveaux_redacteurs' => 'Ви хочете дозволити реєстрацію нових користувачів на сайті? Якщо так, то відвідувачі зможуть реєструватися самостійно, використовуючи стандартну форму. Також у них буде доступ в адміністративну частину сайту і можливість створювати нові матеріали. <div class="notice">Пароль для доступу буде відправлено користувачу email’ом автоматично. Якщо ваш хостінг не підтримує відправку листів, то ця опція буде марна.</div>', |
|
| 412 | - 'info_qui_edite' => '@nom_auteur_modif@ працював над цим матеріалом @date_diff@ хвилин назад', |
|
| 413 | - 'info_racine_site' => 'Корінь сайту', |
|
| 414 | - 'info_recharger_page' => 'Будь ласка перезавантажте цю сторінку через декілька хвилин.', |
|
| 415 | - 'info_recherche_auteur_zero' => 'Нічого не знайдено на запит «@cherche_auteur@».', |
|
| 416 | - 'info_recommencer' => 'Будь ласка, спопробуйте ще раз.', |
|
| 417 | - 'info_redacteur_1' => 'Автор', |
|
| 418 | - 'info_redacteur_2' => 'маючи доступ до адміністративної частини (<i>рекомендував</i>), ', |
|
| 419 | - 'info_redacteurs' => 'Автори', |
|
| 420 | - 'info_redaction_en_cours' => 'РЕДАГУЄТЬСЯ', |
|
| 421 | - 'info_redirection' => 'Перенаправлення', |
|
| 422 | - 'info_redirection_activee' => 'Перенаправлення включено.', |
|
| 423 | - 'info_redirection_boucle' => 'Ви намагаєтеся перенаправити статтю саму на себе.', |
|
| 424 | - 'info_redirection_desactivee' => 'Перенаправлення видалено.', |
|
| 425 | - 'info_refuses' => 'Ваші відхилені статті', |
|
| 426 | - 'info_reglage_ldap' => 'Опції <b>налаштування імпорту LDAP</b>', |
|
| 427 | - 'info_renvoi_article' => 'Відвідувач будет перенаправлений за наступним посиланням', |
|
| 428 | - 'info_reserve_admin' => 'Тільки адміністратори можуть змінити цю адресу.', |
|
| 429 | - 'info_restreindre_rubrique' => 'Надати права управління розділами:', |
|
| 430 | - 'info_resultat_recherche' => 'Результати пошуку:', |
|
| 431 | - 'info_rubriques' => 'Розділи', |
|
| 432 | - 'info_rubriques_02' => 'розділи', |
|
| 433 | - 'info_rubriques_trouvees' => 'Знайдені розділи', |
|
| 434 | - 'info_sans_titre' => 'Без назви', |
|
| 435 | - 'info_selection_chemin_acces' => '<b>Виберіть</b> шлях доступу до каталогу:', |
|
| 436 | - 'info_signatures' => 'підписи', |
|
| 437 | - 'info_site' => 'Сайт', |
|
| 438 | - 'info_site_2' => 'Сайт:', |
|
| 439 | - 'info_site_min' => 'сайт', |
|
| 440 | - 'info_site_reference_2' => 'Сайт, що реферується (Referenced site)', |
|
| 441 | - 'info_site_web' => 'САЙТ:', |
|
| 442 | - 'info_sites' => 'сайти', |
|
| 443 | - 'info_sites_lies_mot' => 'Сайти з цим ключовим словом', |
|
| 444 | - 'info_sites_proxy' => 'Використовувати проксі', |
|
| 445 | - 'info_sites_trouves' => 'знайдені сайти', |
|
| 446 | - 'info_sous_titre' => 'Підзаголовок:', |
|
| 447 | - 'info_statut_administrateur' => 'Адміністратор', |
|
| 448 | - 'info_statut_auteur' => 'Статус автора:', |
|
| 449 | - 'info_statut_auteur_2' => 'Я', |
|
| 450 | - 'info_statut_auteur_a_confirmer' => 'Реєстрація буде підтверджена', |
|
| 451 | - 'info_statut_auteur_autre' => 'Інший статус:', |
|
| 452 | - 'info_statut_redacteur' => 'Автор', |
|
| 453 | - 'info_statut_utilisateurs_1' => 'Усталений (default) статус для імпортованих користувачів', |
|
| 454 | - 'info_statut_utilisateurs_2' => 'Виберіть статус, що буде використовуватися для людей з каталогу LDAP, коли вони підключаться вперше. Пізніше ви зможете змінити це значення для кожного автора індивідуально.', |
|
| 455 | - 'info_suivi_activite' => 'Відстежування роботи редакторів', |
|
| 456 | - 'info_surtitre' => 'Топ-заголовок:', |
|
| 457 | - 'info_syndication_integrale_1' => 'Ваш сайт пропонує об’єднані файли (див. «<a href="@url@">@titre@</a>»).', |
|
| 458 | - 'info_syndication_integrale_2' => 'Відправити статтю повністю чи тільки перші абзаци?', |
|
| 459 | - 'info_table_prefix' => 'Ви можете задати свій префікс для імен таблиць бази даних (завдяки цьому ви можете встановити декілька сайтів на одну базу даних). Для написання префіксу використовуйте лише маленькі латинські букви і цифри.', |
|
| 460 | - 'info_taille_maximale_images' => 'Максимальний розмір картинок, з якими може працювати SPIP (у мільйонах пікселів).<br />SPIP не зможет стискати картинки більшого розміру.', |
|
| 461 | - 'info_taille_maximale_vignette' => 'Максимальний розмір зображень, створенних системою:', |
|
| 462 | - 'info_terminer_installation' => 'Теперь ви можете закінчити стандартний процес встановлення.', |
|
| 463 | - 'info_texte' => 'Текст', |
|
| 464 | - 'info_texte_explicatif' => 'Пояснювальний текст', |
|
| 465 | - 'info_texte_long' => '(Довгий текст: він з’явиться в декількох частинах, які будуть повторно зібрані після затвердження.)', |
|
| 466 | - 'info_texte_message' => 'Текст повідомлення:', |
|
| 467 | - 'info_texte_message_02' => 'Текст повідомлення', |
|
| 468 | - 'info_titre' => 'Заголовок:', |
|
| 469 | - 'info_total' => 'всього:', |
|
| 470 | - 'info_tous_articles_en_redaction' => 'Усі статті, що редагуються', |
|
| 471 | - 'info_tous_articles_presents' => 'Усі статті в розділі', |
|
| 472 | - 'info_tous_articles_refuses' => 'Усі відхилені статті', |
|
| 473 | - 'info_tous_les' => 'кожен:', |
|
| 474 | - 'info_tout_site' => 'Весь сайт', |
|
| 475 | - 'info_tout_site2' => 'Статтю не було перекладено на цю мову.', |
|
| 476 | - 'info_tout_site3' => 'Статтю було перекладено на цю мову, але з того часу в оригінал внесено зміни. Необхідно поновити переклад.', |
|
| 477 | - 'info_tout_site4' => 'Статтю було перекладено на цю мову, і переклад актуальний.', |
|
| 478 | - 'info_tout_site5' => 'Вихідна стаття.', |
|
| 479 | - 'info_tout_site6' => '<b>Попередження:</b> відображаються лише вихідні статті. Переклади, пов’язані з оригіналом, - в кольорі, що вказує їхній статус:', |
|
| 480 | - 'info_traductions' => 'Переклади', |
|
| 481 | - 'info_travail_colaboratif' => 'Сумісна робота над статтями', |
|
| 482 | - 'info_un_article' => 'стаття,', |
|
| 483 | - 'info_un_site' => 'сайт,', |
|
| 484 | - 'info_une_rubrique' => 'розділ,', |
|
| 485 | - 'info_une_rubrique_02' => '1 розділ', |
|
| 486 | - 'info_url' => 'Адреса:', |
|
| 487 | - 'info_url_proxy' => 'URL проксі', |
|
| 488 | - 'info_url_proxy_pas_conforme' => 'Невірний URL проксі серверу.', |
|
| 489 | - 'info_url_site_pas_conforme' => 'URL сайту не є валідним.', |
|
| 490 | - 'info_url_test_proxy' => 'URL для перевірки', |
|
| 491 | - 'info_urlref' => 'Гиперпосилання:', |
|
| 492 | - 'info_utilisation_spip' => 'SPIP готовий до роботи', |
|
| 493 | - 'info_visites_par_mois' => 'Щомісячний показ:', |
|
| 494 | - 'info_visiteur_1' => 'Відвідувач', |
|
| 495 | - 'info_visiteur_2' => 'з основної частини сайту', |
|
| 496 | - 'info_visiteurs' => 'Відвідувачі', |
|
| 497 | - 'info_visiteurs_02' => 'Відвідувачі основної частини сайту', |
|
| 498 | - 'info_webmestre_forces' => 'Список вебмастерів міститься в <tt>@file_options@</tt>.', |
|
| 499 | - 'install_adresse_base_hebergeur' => 'Адресу серверу бази даних ви можете дізнатися у свого хостера', |
|
| 500 | - 'install_connect_ok' => 'Була оголошена нова база на сервері @connect@.', |
|
| 501 | - 'install_echec_annonce' => 'Ця інсталяция, напевне, не буде працювати або приведе до нестійкої роботи сайту...', |
|
| 502 | - 'install_extension_mbstring' => 'SPIP не пращює з:', |
|
| 503 | - 'install_extension_php_obligatoire' => 'SPIP вимагає php розширень:', |
|
| 504 | - 'install_login_base_hebergeur' => 'Логін визначається постачальником послуг', |
|
| 505 | - 'install_nom_base_hebergeur' => 'Ім’я бази даних визначається постачальником послуг:', |
|
| 506 | - 'install_pas_table' => 'В базе даних ще нема таблиць', |
|
| 507 | - 'install_pass_base_hebergeur' => 'Ви можете встановити пароль через контрольну панель хостінгу або запитати його в службі підтримки вашого хостінгу.', |
|
| 508 | - 'install_php_version' => 'Версія PHP @version@ надто стара (мінімум = @minimum@)', |
|
| 509 | - 'install_select_langue' => 'Виберіть мову, потім натисніть кнопку «далі», щоб начати процедуру встановлення.', |
|
| 510 | - 'install_select_type_db' => 'Вкажіть тип бази даних:', |
|
| 511 | - 'install_select_type_mysql' => 'MySQL', |
|
| 512 | - 'install_select_type_pg' => 'PostgreSQL', |
|
| 513 | - 'install_select_type_sqlite2' => 'SQLite 2', |
|
| 514 | - 'install_select_type_sqlite3' => 'SQLite 3', |
|
| 515 | - 'install_serveur_hebergeur' => 'Сервер бази даних визначається постачальником послуг', |
|
| 516 | - 'install_table_prefix_hebergeur' => 'Префікс таблиці бази даних:', |
|
| 517 | - 'install_tables_base' => 'Таблиці баз даних', |
|
| 518 | - 'install_types_db_connus' => 'SPIP працює з <b>MySQL</b> і <b>SQLite</b>.', |
|
| 519 | - 'install_types_db_connus_avertissement' => 'Підтримка PostgreSQL поки на експеріментальному рівні. ', |
|
| 520 | - 'instituer_erreur_statut_a_change' => 'Статус вже був змінений', |
|
| 521 | - 'instituer_erreur_statut_non_autorise' => 'Ви не можете вибрати цей статус', |
|
| 522 | - 'intem_redacteur' => 'редактор', |
|
| 523 | - 'intitule_licence' => 'Дозвіл', |
|
| 524 | - 'item_accepter_inscriptions' => 'Дозволити реєстрацію', |
|
| 525 | - 'item_activer_messages_avertissement' => 'Попереджати про сумісну роботу', |
|
| 526 | - 'item_administrateur_2' => 'адміністратор', |
|
| 527 | - 'item_afficher_calendrier' => 'показувати в календарі', |
|
| 528 | - 'item_autoriser_syndication_integrale' => 'Включати цілі статті в об’єднані файли ', |
|
| 529 | - 'item_choix_administrateurs' => 'адміністратори', |
|
| 530 | - 'item_choix_generation_miniature' => 'Створювати зменшені копії автоматично.', |
|
| 531 | - 'item_choix_non_generation_miniature' => 'Не створювати зменшені копії.', |
|
| 532 | - 'item_choix_redacteurs' => 'редактори', |
|
| 533 | - 'item_choix_visiteurs' => 'відвідувачі сайту', |
|
| 534 | - 'item_creer_fichiers_authent' => 'Створити .htpasswd файли', |
|
| 535 | - 'item_login' => 'Логін', |
|
| 536 | - 'item_messagerie_agenda' => 'Увімкнути систему обміну повідомленнями і календар', |
|
| 537 | - 'item_mots_cles_association_articles' => 'статті', |
|
| 538 | - 'item_mots_cles_association_rubriques' => 'розділи', |
|
| 539 | - 'item_mots_cles_association_sites' => 'зробити посилання або об’єднати сайти.', |
|
| 540 | - 'item_non' => 'Ні', |
|
| 541 | - 'item_non_accepter_inscriptions' => 'Не дозволяти реєстрацію', |
|
| 542 | - 'item_non_activer_messages_avertissement' => 'НЕ попереджати про сумісну роботу', |
|
| 543 | - 'item_non_afficher_calendrier' => 'Не показувати календар', |
|
| 544 | - 'item_non_autoriser_syndication_integrale' => 'Відправляти лише короткий виклад', |
|
| 545 | - 'item_non_creer_fichiers_authent' => 'Не створювати ці файли', |
|
| 546 | - 'item_non_messagerie_agenda' => 'Відключити систему обміну повідомленнями і календар', |
|
| 547 | - 'item_non_publier_articles' => 'Публікувати статті тільки після вказаної дати публікації.', |
|
| 548 | - 'item_nouvel_auteur' => 'Новий автор', |
|
| 549 | - 'item_nouvelle_rubrique' => 'Новий розділ', |
|
| 550 | - 'item_oui' => 'Так', |
|
| 551 | - 'item_publier_articles' => 'Негайно публіковати статті, не дивлячись на дату публікації', |
|
| 552 | - 'item_reponse_article' => 'Відповісти на статтю', |
|
| 553 | - 'item_visiteur' => 'відвідувач', |
|
| 376 | + 'info_non_envoi_liste_nouveautes' => 'Не відправляти список останніх новин', |
|
| 377 | + 'info_non_modifiable' => 'не может бути змінено', |
|
| 378 | + 'info_non_suppression_mot_cle' => 'Я НЕ хочу видаляти це ключове слово.', |
|
| 379 | + 'info_notes' => 'Примітки', |
|
| 380 | + 'info_nouvel_article' => 'Новая стаття', |
|
| 381 | + 'info_nouvelle_traduction' => 'Новий переклад:', |
|
| 382 | + 'info_numero_article' => 'НОМЕР СТАТТІ:', |
|
| 383 | + 'info_obligatoire_02' => '(обов’язково)', |
|
| 384 | + 'info_option_accepter_visiteurs' => 'Увімкнути реєстрацію відвідувачів на сайті', |
|
| 385 | + 'info_option_ne_pas_accepter_visiteurs' => 'Відключити реєстрацію відвідувачів на сайті', |
|
| 386 | + 'info_options_avancees' => 'ДОДАТКОВІ НАЛАШТУВАННЯ', |
|
| 387 | + 'info_ou' => 'або...', |
|
| 388 | + 'info_page_interdite' => 'Заборонена сторінка', |
|
| 389 | + 'info_par_nom' => 'за назвою', |
|
| 390 | + 'info_par_nombre_article' => 'за номерами статтей', |
|
| 391 | + 'info_par_statut' => 'за статусом', |
|
| 392 | + 'info_par_tri' => '’(за @tri@)’', |
|
| 393 | + 'info_passe_trop_court' => 'Пароль надто короткий.', |
|
| 394 | + 'info_passe_trop_court_car_pluriel' => 'Пароль повинен мати мінімум @nb@ символів.', |
|
| 395 | + 'info_passes_identiques' => 'Два паролі не співпадають.', |
|
| 396 | + 'info_plus_cinq_car' => 'понад 5 символів', |
|
| 397 | + 'info_plus_cinq_car_2' => '(Понад 5 символів)', |
|
| 398 | + 'info_plus_trois_car' => '(Понад 3 символи)', |
|
| 399 | + 'info_popularite' => 'популярність: @popularite@; відвідання: @visites@', |
|
| 400 | + 'info_post_scriptum' => 'Постскриптум', |
|
| 401 | + 'info_post_scriptum_2' => 'Постскриптум: ', |
|
| 402 | + 'info_pour' => 'для', |
|
| 403 | + 'info_preview_texte' => 'Налаштування попереднього перегляду. Ви можете подивитися, як виглядають на сайті матеріали зі статусом «представлено». Увімкнути цю можливість для усіх авторів, тільки для адміністраторов або відключити взагалі?', |
|
| 404 | + 'info_procedez_par_etape' => 'Будь ласка, виконуйте покроково', |
|
| 405 | + 'info_procedure_maj_version' => 'необхідно запустити процедуру оновлення поточної бази даних для новоі версії SPIP.', |
|
| 406 | + 'info_proxy_ok' => 'Проксі сервер працює.', |
|
| 407 | + 'info_ps' => 'P.S.', |
|
| 408 | + 'info_publier' => 'опублікувати', |
|
| 409 | + 'info_publies' => 'Ваші статті, опубліковані на сайті:', |
|
| 410 | + 'info_question_accepter_visiteurs' => 'Якщо шаблони вашого сайту дозволяють відвідувачам реєструватися, не входячи в адміністративну частину, будь ласка, включіть наступну опцію:', |
|
| 411 | + 'info_question_inscription_nouveaux_redacteurs' => 'Ви хочете дозволити реєстрацію нових користувачів на сайті? Якщо так, то відвідувачі зможуть реєструватися самостійно, використовуючи стандартну форму. Також у них буде доступ в адміністративну частину сайту і можливість створювати нові матеріали. <div class="notice">Пароль для доступу буде відправлено користувачу email’ом автоматично. Якщо ваш хостінг не підтримує відправку листів, то ця опція буде марна.</div>', |
|
| 412 | + 'info_qui_edite' => '@nom_auteur_modif@ працював над цим матеріалом @date_diff@ хвилин назад', |
|
| 413 | + 'info_racine_site' => 'Корінь сайту', |
|
| 414 | + 'info_recharger_page' => 'Будь ласка перезавантажте цю сторінку через декілька хвилин.', |
|
| 415 | + 'info_recherche_auteur_zero' => 'Нічого не знайдено на запит «@cherche_auteur@».', |
|
| 416 | + 'info_recommencer' => 'Будь ласка, спопробуйте ще раз.', |
|
| 417 | + 'info_redacteur_1' => 'Автор', |
|
| 418 | + 'info_redacteur_2' => 'маючи доступ до адміністративної частини (<i>рекомендував</i>), ', |
|
| 419 | + 'info_redacteurs' => 'Автори', |
|
| 420 | + 'info_redaction_en_cours' => 'РЕДАГУЄТЬСЯ', |
|
| 421 | + 'info_redirection' => 'Перенаправлення', |
|
| 422 | + 'info_redirection_activee' => 'Перенаправлення включено.', |
|
| 423 | + 'info_redirection_boucle' => 'Ви намагаєтеся перенаправити статтю саму на себе.', |
|
| 424 | + 'info_redirection_desactivee' => 'Перенаправлення видалено.', |
|
| 425 | + 'info_refuses' => 'Ваші відхилені статті', |
|
| 426 | + 'info_reglage_ldap' => 'Опції <b>налаштування імпорту LDAP</b>', |
|
| 427 | + 'info_renvoi_article' => 'Відвідувач будет перенаправлений за наступним посиланням', |
|
| 428 | + 'info_reserve_admin' => 'Тільки адміністратори можуть змінити цю адресу.', |
|
| 429 | + 'info_restreindre_rubrique' => 'Надати права управління розділами:', |
|
| 430 | + 'info_resultat_recherche' => 'Результати пошуку:', |
|
| 431 | + 'info_rubriques' => 'Розділи', |
|
| 432 | + 'info_rubriques_02' => 'розділи', |
|
| 433 | + 'info_rubriques_trouvees' => 'Знайдені розділи', |
|
| 434 | + 'info_sans_titre' => 'Без назви', |
|
| 435 | + 'info_selection_chemin_acces' => '<b>Виберіть</b> шлях доступу до каталогу:', |
|
| 436 | + 'info_signatures' => 'підписи', |
|
| 437 | + 'info_site' => 'Сайт', |
|
| 438 | + 'info_site_2' => 'Сайт:', |
|
| 439 | + 'info_site_min' => 'сайт', |
|
| 440 | + 'info_site_reference_2' => 'Сайт, що реферується (Referenced site)', |
|
| 441 | + 'info_site_web' => 'САЙТ:', |
|
| 442 | + 'info_sites' => 'сайти', |
|
| 443 | + 'info_sites_lies_mot' => 'Сайти з цим ключовим словом', |
|
| 444 | + 'info_sites_proxy' => 'Використовувати проксі', |
|
| 445 | + 'info_sites_trouves' => 'знайдені сайти', |
|
| 446 | + 'info_sous_titre' => 'Підзаголовок:', |
|
| 447 | + 'info_statut_administrateur' => 'Адміністратор', |
|
| 448 | + 'info_statut_auteur' => 'Статус автора:', |
|
| 449 | + 'info_statut_auteur_2' => 'Я', |
|
| 450 | + 'info_statut_auteur_a_confirmer' => 'Реєстрація буде підтверджена', |
|
| 451 | + 'info_statut_auteur_autre' => 'Інший статус:', |
|
| 452 | + 'info_statut_redacteur' => 'Автор', |
|
| 453 | + 'info_statut_utilisateurs_1' => 'Усталений (default) статус для імпортованих користувачів', |
|
| 454 | + 'info_statut_utilisateurs_2' => 'Виберіть статус, що буде використовуватися для людей з каталогу LDAP, коли вони підключаться вперше. Пізніше ви зможете змінити це значення для кожного автора індивідуально.', |
|
| 455 | + 'info_suivi_activite' => 'Відстежування роботи редакторів', |
|
| 456 | + 'info_surtitre' => 'Топ-заголовок:', |
|
| 457 | + 'info_syndication_integrale_1' => 'Ваш сайт пропонує об’єднані файли (див. «<a href="@url@">@titre@</a>»).', |
|
| 458 | + 'info_syndication_integrale_2' => 'Відправити статтю повністю чи тільки перші абзаци?', |
|
| 459 | + 'info_table_prefix' => 'Ви можете задати свій префікс для імен таблиць бази даних (завдяки цьому ви можете встановити декілька сайтів на одну базу даних). Для написання префіксу використовуйте лише маленькі латинські букви і цифри.', |
|
| 460 | + 'info_taille_maximale_images' => 'Максимальний розмір картинок, з якими може працювати SPIP (у мільйонах пікселів).<br />SPIP не зможет стискати картинки більшого розміру.', |
|
| 461 | + 'info_taille_maximale_vignette' => 'Максимальний розмір зображень, створенних системою:', |
|
| 462 | + 'info_terminer_installation' => 'Теперь ви можете закінчити стандартний процес встановлення.', |
|
| 463 | + 'info_texte' => 'Текст', |
|
| 464 | + 'info_texte_explicatif' => 'Пояснювальний текст', |
|
| 465 | + 'info_texte_long' => '(Довгий текст: він з’явиться в декількох частинах, які будуть повторно зібрані після затвердження.)', |
|
| 466 | + 'info_texte_message' => 'Текст повідомлення:', |
|
| 467 | + 'info_texte_message_02' => 'Текст повідомлення', |
|
| 468 | + 'info_titre' => 'Заголовок:', |
|
| 469 | + 'info_total' => 'всього:', |
|
| 470 | + 'info_tous_articles_en_redaction' => 'Усі статті, що редагуються', |
|
| 471 | + 'info_tous_articles_presents' => 'Усі статті в розділі', |
|
| 472 | + 'info_tous_articles_refuses' => 'Усі відхилені статті', |
|
| 473 | + 'info_tous_les' => 'кожен:', |
|
| 474 | + 'info_tout_site' => 'Весь сайт', |
|
| 475 | + 'info_tout_site2' => 'Статтю не було перекладено на цю мову.', |
|
| 476 | + 'info_tout_site3' => 'Статтю було перекладено на цю мову, але з того часу в оригінал внесено зміни. Необхідно поновити переклад.', |
|
| 477 | + 'info_tout_site4' => 'Статтю було перекладено на цю мову, і переклад актуальний.', |
|
| 478 | + 'info_tout_site5' => 'Вихідна стаття.', |
|
| 479 | + 'info_tout_site6' => '<b>Попередження:</b> відображаються лише вихідні статті. Переклади, пов’язані з оригіналом, - в кольорі, що вказує їхній статус:', |
|
| 480 | + 'info_traductions' => 'Переклади', |
|
| 481 | + 'info_travail_colaboratif' => 'Сумісна робота над статтями', |
|
| 482 | + 'info_un_article' => 'стаття,', |
|
| 483 | + 'info_un_site' => 'сайт,', |
|
| 484 | + 'info_une_rubrique' => 'розділ,', |
|
| 485 | + 'info_une_rubrique_02' => '1 розділ', |
|
| 486 | + 'info_url' => 'Адреса:', |
|
| 487 | + 'info_url_proxy' => 'URL проксі', |
|
| 488 | + 'info_url_proxy_pas_conforme' => 'Невірний URL проксі серверу.', |
|
| 489 | + 'info_url_site_pas_conforme' => 'URL сайту не є валідним.', |
|
| 490 | + 'info_url_test_proxy' => 'URL для перевірки', |
|
| 491 | + 'info_urlref' => 'Гиперпосилання:', |
|
| 492 | + 'info_utilisation_spip' => 'SPIP готовий до роботи', |
|
| 493 | + 'info_visites_par_mois' => 'Щомісячний показ:', |
|
| 494 | + 'info_visiteur_1' => 'Відвідувач', |
|
| 495 | + 'info_visiteur_2' => 'з основної частини сайту', |
|
| 496 | + 'info_visiteurs' => 'Відвідувачі', |
|
| 497 | + 'info_visiteurs_02' => 'Відвідувачі основної частини сайту', |
|
| 498 | + 'info_webmestre_forces' => 'Список вебмастерів міститься в <tt>@file_options@</tt>.', |
|
| 499 | + 'install_adresse_base_hebergeur' => 'Адресу серверу бази даних ви можете дізнатися у свого хостера', |
|
| 500 | + 'install_connect_ok' => 'Була оголошена нова база на сервері @connect@.', |
|
| 501 | + 'install_echec_annonce' => 'Ця інсталяция, напевне, не буде працювати або приведе до нестійкої роботи сайту...', |
|
| 502 | + 'install_extension_mbstring' => 'SPIP не пращює з:', |
|
| 503 | + 'install_extension_php_obligatoire' => 'SPIP вимагає php розширень:', |
|
| 504 | + 'install_login_base_hebergeur' => 'Логін визначається постачальником послуг', |
|
| 505 | + 'install_nom_base_hebergeur' => 'Ім’я бази даних визначається постачальником послуг:', |
|
| 506 | + 'install_pas_table' => 'В базе даних ще нема таблиць', |
|
| 507 | + 'install_pass_base_hebergeur' => 'Ви можете встановити пароль через контрольну панель хостінгу або запитати його в службі підтримки вашого хостінгу.', |
|
| 508 | + 'install_php_version' => 'Версія PHP @version@ надто стара (мінімум = @minimum@)', |
|
| 509 | + 'install_select_langue' => 'Виберіть мову, потім натисніть кнопку «далі», щоб начати процедуру встановлення.', |
|
| 510 | + 'install_select_type_db' => 'Вкажіть тип бази даних:', |
|
| 511 | + 'install_select_type_mysql' => 'MySQL', |
|
| 512 | + 'install_select_type_pg' => 'PostgreSQL', |
|
| 513 | + 'install_select_type_sqlite2' => 'SQLite 2', |
|
| 514 | + 'install_select_type_sqlite3' => 'SQLite 3', |
|
| 515 | + 'install_serveur_hebergeur' => 'Сервер бази даних визначається постачальником послуг', |
|
| 516 | + 'install_table_prefix_hebergeur' => 'Префікс таблиці бази даних:', |
|
| 517 | + 'install_tables_base' => 'Таблиці баз даних', |
|
| 518 | + 'install_types_db_connus' => 'SPIP працює з <b>MySQL</b> і <b>SQLite</b>.', |
|
| 519 | + 'install_types_db_connus_avertissement' => 'Підтримка PostgreSQL поки на експеріментальному рівні. ', |
|
| 520 | + 'instituer_erreur_statut_a_change' => 'Статус вже був змінений', |
|
| 521 | + 'instituer_erreur_statut_non_autorise' => 'Ви не можете вибрати цей статус', |
|
| 522 | + 'intem_redacteur' => 'редактор', |
|
| 523 | + 'intitule_licence' => 'Дозвіл', |
|
| 524 | + 'item_accepter_inscriptions' => 'Дозволити реєстрацію', |
|
| 525 | + 'item_activer_messages_avertissement' => 'Попереджати про сумісну роботу', |
|
| 526 | + 'item_administrateur_2' => 'адміністратор', |
|
| 527 | + 'item_afficher_calendrier' => 'показувати в календарі', |
|
| 528 | + 'item_autoriser_syndication_integrale' => 'Включати цілі статті в об’єднані файли ', |
|
| 529 | + 'item_choix_administrateurs' => 'адміністратори', |
|
| 530 | + 'item_choix_generation_miniature' => 'Створювати зменшені копії автоматично.', |
|
| 531 | + 'item_choix_non_generation_miniature' => 'Не створювати зменшені копії.', |
|
| 532 | + 'item_choix_redacteurs' => 'редактори', |
|
| 533 | + 'item_choix_visiteurs' => 'відвідувачі сайту', |
|
| 534 | + 'item_creer_fichiers_authent' => 'Створити .htpasswd файли', |
|
| 535 | + 'item_login' => 'Логін', |
|
| 536 | + 'item_messagerie_agenda' => 'Увімкнути систему обміну повідомленнями і календар', |
|
| 537 | + 'item_mots_cles_association_articles' => 'статті', |
|
| 538 | + 'item_mots_cles_association_rubriques' => 'розділи', |
|
| 539 | + 'item_mots_cles_association_sites' => 'зробити посилання або об’єднати сайти.', |
|
| 540 | + 'item_non' => 'Ні', |
|
| 541 | + 'item_non_accepter_inscriptions' => 'Не дозволяти реєстрацію', |
|
| 542 | + 'item_non_activer_messages_avertissement' => 'НЕ попереджати про сумісну роботу', |
|
| 543 | + 'item_non_afficher_calendrier' => 'Не показувати календар', |
|
| 544 | + 'item_non_autoriser_syndication_integrale' => 'Відправляти лише короткий виклад', |
|
| 545 | + 'item_non_creer_fichiers_authent' => 'Не створювати ці файли', |
|
| 546 | + 'item_non_messagerie_agenda' => 'Відключити систему обміну повідомленнями і календар', |
|
| 547 | + 'item_non_publier_articles' => 'Публікувати статті тільки після вказаної дати публікації.', |
|
| 548 | + 'item_nouvel_auteur' => 'Новий автор', |
|
| 549 | + 'item_nouvelle_rubrique' => 'Новий розділ', |
|
| 550 | + 'item_oui' => 'Так', |
|
| 551 | + 'item_publier_articles' => 'Негайно публіковати статті, не дивлячись на дату публікації', |
|
| 552 | + 'item_reponse_article' => 'Відповісти на статтю', |
|
| 553 | + 'item_visiteur' => 'відвідувач', |
|
| 554 | 554 | |
| 555 | - // J |
|
| 556 | - 'jour_non_connu_nc' => 'невідомий', |
|
| 555 | + // J |
|
| 556 | + 'jour_non_connu_nc' => 'невідомий', |
|
| 557 | 557 | |
| 558 | - // L |
|
| 559 | - 'label_bando_outils' => 'Панель інструментів', |
|
| 560 | - 'label_bando_outils_afficher' => 'Показати інструменти', |
|
| 561 | - 'label_bando_outils_masquer' => 'Сховати інструменти', |
|
| 562 | - 'label_choix_langue' => 'Мова інтерфейсу', |
|
| 563 | - 'label_nom_fichier_connect' => 'Відображати ім’я серверу', |
|
| 564 | - 'label_slogan_site' => 'Слоган сайту', |
|
| 565 | - 'label_taille_ecran' => 'Ширина робочої області', |
|
| 566 | - 'label_texte_et_icones_navigation' => 'Головне меню', |
|
| 567 | - 'label_texte_et_icones_page' => 'Відоображення сторінки', |
|
| 568 | - 'ldap_correspondance' => 'наслідувати поле @champ@', |
|
| 569 | - 'ldap_correspondance_1' => 'Наслідувати поля LDAP', |
|
| 570 | - 'ldap_correspondance_2' => 'Вкажіть відповідне LDAP поле для кожного з даних полей. Залиште їх порожніми, якщо ви не хочете, щоб вони заповнювались. Декілька LDAP полей розділяються пробілом або комою.', |
|
| 571 | - 'lien_ajouter_auteur' => 'Додати автора', |
|
| 572 | - 'lien_ajouter_une_rubrique' => 'Додати розділ', |
|
| 573 | - 'lien_email' => 'Електронна пошта', |
|
| 574 | - 'lien_nom_site' => 'НАЗВА САЙТУ:', |
|
| 575 | - 'lien_rapide_contenu' => 'Перейти до змісту', |
|
| 576 | - 'lien_rapide_navigation' => 'Перейти до навігації', |
|
| 577 | - 'lien_rapide_recherche' => 'Перейти до пошуку', |
|
| 578 | - 'lien_retirer_auteur' => 'Видалити автора', |
|
| 579 | - 'lien_retirer_rubrique' => 'Видалити розділ', |
|
| 580 | - 'lien_retirer_tous_auteurs' => 'Видалити усіх авторів', |
|
| 581 | - 'lien_retirer_toutes_rubriques' => 'Видалити всі розділи', |
|
| 582 | - 'lien_site' => 'сайт', |
|
| 583 | - 'lien_tout_decocher' => 'Зніміть', |
|
| 584 | - 'lien_tout_deplier' => 'Развернуть усі ', |
|
| 585 | - 'lien_tout_replier' => 'Згорнути усе', |
|
| 586 | - 'lien_tout_supprimer' => 'Видалити усе', |
|
| 587 | - 'lien_trier_nom' => 'Сортирувати за ім´ям', |
|
| 588 | - 'lien_trier_nombre_articles' => 'Сортирувати за номерами статтей', |
|
| 589 | - 'lien_trier_statut' => 'Сортирувати за статусом', |
|
| 590 | - 'lien_voir_en_ligne' => 'ПЕРЕГЛЯД ОНЛАЙН:', |
|
| 591 | - 'logo_article' => 'ЛОГОТИП СТАТТІ', |
|
| 592 | - 'logo_auteur' => 'ЛОГОТИП АВТОРА', |
|
| 593 | - 'logo_rubrique' => 'ЛОГОТИП РОЗДІЛУ', |
|
| 594 | - 'logo_site' => 'ЛОГОТИП САЙТУ', |
|
| 595 | - 'logo_standard_rubrique' => 'Стандартний логотип розділу', |
|
| 596 | - 'logo_survol' => 'При наведенні миші', |
|
| 558 | + // L |
|
| 559 | + 'label_bando_outils' => 'Панель інструментів', |
|
| 560 | + 'label_bando_outils_afficher' => 'Показати інструменти', |
|
| 561 | + 'label_bando_outils_masquer' => 'Сховати інструменти', |
|
| 562 | + 'label_choix_langue' => 'Мова інтерфейсу', |
|
| 563 | + 'label_nom_fichier_connect' => 'Відображати ім’я серверу', |
|
| 564 | + 'label_slogan_site' => 'Слоган сайту', |
|
| 565 | + 'label_taille_ecran' => 'Ширина робочої області', |
|
| 566 | + 'label_texte_et_icones_navigation' => 'Головне меню', |
|
| 567 | + 'label_texte_et_icones_page' => 'Відоображення сторінки', |
|
| 568 | + 'ldap_correspondance' => 'наслідувати поле @champ@', |
|
| 569 | + 'ldap_correspondance_1' => 'Наслідувати поля LDAP', |
|
| 570 | + 'ldap_correspondance_2' => 'Вкажіть відповідне LDAP поле для кожного з даних полей. Залиште їх порожніми, якщо ви не хочете, щоб вони заповнювались. Декілька LDAP полей розділяються пробілом або комою.', |
|
| 571 | + 'lien_ajouter_auteur' => 'Додати автора', |
|
| 572 | + 'lien_ajouter_une_rubrique' => 'Додати розділ', |
|
| 573 | + 'lien_email' => 'Електронна пошта', |
|
| 574 | + 'lien_nom_site' => 'НАЗВА САЙТУ:', |
|
| 575 | + 'lien_rapide_contenu' => 'Перейти до змісту', |
|
| 576 | + 'lien_rapide_navigation' => 'Перейти до навігації', |
|
| 577 | + 'lien_rapide_recherche' => 'Перейти до пошуку', |
|
| 578 | + 'lien_retirer_auteur' => 'Видалити автора', |
|
| 579 | + 'lien_retirer_rubrique' => 'Видалити розділ', |
|
| 580 | + 'lien_retirer_tous_auteurs' => 'Видалити усіх авторів', |
|
| 581 | + 'lien_retirer_toutes_rubriques' => 'Видалити всі розділи', |
|
| 582 | + 'lien_site' => 'сайт', |
|
| 583 | + 'lien_tout_decocher' => 'Зніміть', |
|
| 584 | + 'lien_tout_deplier' => 'Развернуть усі ', |
|
| 585 | + 'lien_tout_replier' => 'Згорнути усе', |
|
| 586 | + 'lien_tout_supprimer' => 'Видалити усе', |
|
| 587 | + 'lien_trier_nom' => 'Сортирувати за ім´ям', |
|
| 588 | + 'lien_trier_nombre_articles' => 'Сортирувати за номерами статтей', |
|
| 589 | + 'lien_trier_statut' => 'Сортирувати за статусом', |
|
| 590 | + 'lien_voir_en_ligne' => 'ПЕРЕГЛЯД ОНЛАЙН:', |
|
| 591 | + 'logo_article' => 'ЛОГОТИП СТАТТІ', |
|
| 592 | + 'logo_auteur' => 'ЛОГОТИП АВТОРА', |
|
| 593 | + 'logo_rubrique' => 'ЛОГОТИП РОЗДІЛУ', |
|
| 594 | + 'logo_site' => 'ЛОГОТИП САЙТУ', |
|
| 595 | + 'logo_standard_rubrique' => 'Стандартний логотип розділу', |
|
| 596 | + 'logo_survol' => 'При наведенні миші', |
|
| 597 | 597 | |
| 598 | - // M |
|
| 599 | - 'menu_aide_installation_choix_base' => 'Виберіть вашу базу даних', |
|
| 600 | - 'module_fichier_langue' => 'Мовний файл', |
|
| 601 | - 'module_raccourci' => 'Ярлик', |
|
| 602 | - 'module_texte_affiche' => 'Показаний текст', |
|
| 603 | - 'module_texte_explicatif' => 'Ви можете вставити наступні ярлики в шаблон вашого сайту. Їх будє автоматично перекладено на різні мови, для яких існує мовний файл.', |
|
| 604 | - 'module_texte_traduction' => 'Мовний файл «@module@» є доступним в:', |
|
| 605 | - 'mois_non_connu' => 'невідомий', |
|
| 598 | + // M |
|
| 599 | + 'menu_aide_installation_choix_base' => 'Виберіть вашу базу даних', |
|
| 600 | + 'module_fichier_langue' => 'Мовний файл', |
|
| 601 | + 'module_raccourci' => 'Ярлик', |
|
| 602 | + 'module_texte_affiche' => 'Показаний текст', |
|
| 603 | + 'module_texte_explicatif' => 'Ви можете вставити наступні ярлики в шаблон вашого сайту. Їх будє автоматично перекладено на різні мови, для яких існує мовний файл.', |
|
| 604 | + 'module_texte_traduction' => 'Мовний файл «@module@» є доступним в:', |
|
| 605 | + 'mois_non_connu' => 'невідомий', |
|
| 606 | 606 | |
| 607 | - // N |
|
| 608 | - 'nouvelle_version_spip' => 'Доступне оновлення версії SPIP @version@ ', |
|
| 609 | - 'nouvelle_version_spip_majeure' => 'Доступна нова версія SPIP @version@ ', |
|
| 607 | + // N |
|
| 608 | + 'nouvelle_version_spip' => 'Доступне оновлення версії SPIP @version@ ', |
|
| 609 | + 'nouvelle_version_spip_majeure' => 'Доступна нова версія SPIP @version@ ', |
|
| 610 | 610 | |
| 611 | - // O |
|
| 612 | - 'onglet_contenu' => 'Зміст', |
|
| 613 | - 'onglet_declarer_une_autre_base' => 'Об´явити іншу базу даних', |
|
| 614 | - 'onglet_discuter' => 'Обговорити', |
|
| 615 | - 'onglet_interactivite' => 'Інтерактивність', |
|
| 616 | - 'onglet_proprietes' => 'Властивості', |
|
| 617 | - 'onglet_repartition_actuelle' => 'зараз', |
|
| 618 | - 'onglet_sous_rubriques' => 'Підрубрики', |
|
| 611 | + // O |
|
| 612 | + 'onglet_contenu' => 'Зміст', |
|
| 613 | + 'onglet_declarer_une_autre_base' => 'Об´явити іншу базу даних', |
|
| 614 | + 'onglet_discuter' => 'Обговорити', |
|
| 615 | + 'onglet_interactivite' => 'Інтерактивність', |
|
| 616 | + 'onglet_proprietes' => 'Властивості', |
|
| 617 | + 'onglet_repartition_actuelle' => 'зараз', |
|
| 618 | + 'onglet_sous_rubriques' => 'Підрубрики', |
|
| 619 | 619 | |
| 620 | - // P |
|
| 621 | - 'page_pas_proxy' => 'Ця сторінка не повинна проходити через проксі', |
|
| 622 | - 'pas_de_proxy_pour' => 'Якщо необхідно, вкажіть для яких комп’ютерів або доменів не треба застосовувати проксі (наприклад: @exemple@) ', |
|
| 623 | - 'phpinfo' => 'Конфігурація PHP', |
|
| 624 | - 'plugin_charge_paquet' => 'Завантаження архиву файлу @name@', |
|
| 625 | - 'plugin_charger' => 'Завантажити', |
|
| 626 | - 'plugin_erreur_charger' => 'Помилка: неможливо завантажити @zip@', |
|
| 627 | - 'plugin_erreur_droit1' => 'Нема прав для запису в папку <code>@dest@</code>.', |
|
| 628 | - 'plugin_erreur_droit2' => 'Будь ласка, перевірте права на запис для цієї папки (і за необхідності створіть її). Або перепишіть файли по FTP.', |
|
| 629 | - 'plugin_erreur_zip' => 'pclzip збій: помилка @status@', |
|
| 630 | - 'plugin_etat_developpement' => 'у розробці', |
|
| 631 | - 'plugin_etat_experimental' => 'експериментальний', |
|
| 632 | - 'plugin_etat_stable' => 'стабільний', |
|
| 633 | - 'plugin_etat_test' => 'тестується', |
|
| 634 | - 'plugin_impossible_activer' => 'Неможливо увімкнути плагін @plugin@', |
|
| 635 | - 'plugin_info_automatique1' => 'щоб дозволити автоматичну установку плагінів:', |
|
| 636 | - 'plugin_info_automatique1_lib' => 'Якщо ви хочете дозволити автоматичну установку цієї бібліотеки, то:', |
|
| 637 | - 'plugin_info_automatique2' => 'Створіть папку <code>@rep@</code> ;', |
|
| 638 | - 'plugin_info_automatique3' => 'Встановіть права доступу до каталогу (755 або 777).', |
|
| 639 | - 'plugin_info_automatique_creer' => 'для створення в корені вебсайту.', |
|
| 640 | - 'plugin_info_automatique_exemples' => 'Офіціальні RSS аркуші з плагінами:', |
|
| 641 | - 'plugin_info_automatique_ftp' => 'Ви можете встановити плагіни по FTP в каталог <tt>@rep@</tt> ', |
|
| 642 | - 'plugin_info_automatique_lib' => 'Деякі плагіни повинні мати можливість завантажувати файли в каталог <code>lib/</code>. Можливо, його необхідно створити самостійно.', |
|
| 643 | - 'plugin_info_automatique_liste' => 'Ваші плагіни:', |
|
| 644 | - 'plugin_info_automatique_liste_officielle' => 'офіційні плагіни', |
|
| 645 | - 'plugin_info_automatique_liste_update' => 'Поновити списки', |
|
| 646 | - 'plugin_info_automatique_ou' => 'або...', |
|
| 647 | - 'plugin_info_automatique_select' => 'виберіть плагін, SPIP завантажить і встановить його в каталог <code>@rep@</code>. Якщо плагін вже встановлений, його буде оновлено.', |
|
| 648 | - 'plugin_info_credit' => 'Авторська інформація', |
|
| 649 | - 'plugin_info_erreur_xml' => 'Неправильна декларація плагіна', |
|
| 650 | - 'plugin_info_install_ok' => 'Встановлення пройшло успішно', |
|
| 651 | - 'plugin_info_necessite' => 'Необхідно:', |
|
| 652 | - 'plugin_info_non_compatible_spip' => 'Плагін несумісний з поточною версією SPIP', |
|
| 653 | - 'plugin_info_plugins_dist_1' => 'Ці плагіни завантажені і встановлені в папці @plugins_dist@.', |
|
| 654 | - 'plugin_info_plugins_dist_2' => 'Їх не можна відключити.', |
|
| 655 | - 'plugin_info_telecharger' => 'завантажити с @url@ і встановити в @rep@', |
|
| 656 | - 'plugin_info_upgrade_ok' => 'Обновлення пройшло успішно', |
|
| 657 | - 'plugin_librairies_installees' => 'Встановлені бібліотеки', |
|
| 658 | - 'plugin_necessite_extension_php' => 'Необхідно PHP-розширення @plugin@ версії @version@.', |
|
| 659 | - 'plugin_necessite_extension_php_sans_version' => 'Необхідно PHP-розширення @plugin@', |
|
| 660 | - 'plugin_necessite_lib' => 'Для цього плагіна необхідна бібліотека @lib@', |
|
| 661 | - 'plugin_necessite_php' => 'Необхідно @plugin@ версії @version@.', |
|
| 662 | - 'plugin_necessite_plugin' => 'Для цього плагіна необхідний @plugin@ @version@ або новіший.', |
|
| 663 | - 'plugin_necessite_plugin_sans_version' => 'Потрібний плагін @plugin@', |
|
| 664 | - 'plugin_necessite_spip' => 'Для цього плагіна потрібний SPIP @version@ або новіший.', |
|
| 665 | - 'plugin_source' => 'джерело: ', |
|
| 666 | - 'plugin_titre_automatique' => 'Автоматичне встановлення', |
|
| 667 | - 'plugin_titre_automatique_ajouter' => 'Додати плагін', |
|
| 668 | - 'plugin_titre_installation' => 'Встановити плагін @plugin@ ', |
|
| 669 | - 'plugin_titre_modifier' => 'Мої плагіни', |
|
| 670 | - 'plugin_utilise_extension_php' => 'Використовується PHP-розширення @plugin@ версії @version@.', |
|
| 671 | - 'plugin_utilise_php' => 'Використовується @plugin@ версії @version@.', |
|
| 672 | - 'plugin_utilise_plugin' => 'Використовуйте плагін @plugin@ en версії @version@.', |
|
| 673 | - 'plugin_zip_active' => 'Продовжити для активації', |
|
| 674 | - 'plugin_zip_adresse' => 'Вкажіть посилання на zip файла плагіна для завантаження або адресу RSS листа плагінів.', |
|
| 675 | - 'plugin_zip_adresse_champ' => 'URL плагіна (zip file) або RSS листа', |
|
| 676 | - 'plugin_zip_content' => 'Він містить наступні файли(@taille@),<br />готові до встановлення в каталозі <code>@rep@</code>', |
|
| 677 | - 'plugin_zip_installe_finie' => 'Файл @zip@ распакований і встановлений.', |
|
| 678 | - 'plugin_zip_installe_rep_finie' => 'Файл @zip@ распакований і встановлений в каталозі @rep@ ', |
|
| 679 | - 'plugin_zip_installer' => 'Теперь ви можете встановити.', |
|
| 680 | - 'plugin_zip_telecharge' => 'Файл @zip@ було завантажено', |
|
| 681 | - 'plugins_actif_aucun' => 'Нема вимкенених плагінів.', |
|
| 682 | - 'plugins_actif_un' => 'Включений один плагін', |
|
| 683 | - 'plugins_actifs' => '@count@ плагінів включено.', |
|
| 684 | - 'plugins_actifs_liste' => 'Включені ', |
|
| 685 | - 'plugins_compte' => '@count@ плагіни', |
|
| 686 | - 'plugins_disponible_un' => 'Доступний один плагін', |
|
| 687 | - 'plugins_disponibles' => 'доступно @count@ плагінів.', |
|
| 688 | - 'plugins_erreur' => 'Помилка в плагінах: @plugins@', |
|
| 689 | - 'plugins_liste' => 'Встановлені плагіни', |
|
| 690 | - 'plugins_liste_dist' => 'Захищені плагіни', |
|
| 691 | - 'plugins_recents' => 'останні плагіни', |
|
| 692 | - 'plugins_tous_liste' => 'Усі', |
|
| 693 | - 'plugins_vue_hierarchie' => 'Ієрархія', |
|
| 694 | - 'plugins_vue_liste' => 'Список', |
|
| 695 | - 'protocole_ldap' => 'Версія протоколу:', |
|
| 620 | + // P |
|
| 621 | + 'page_pas_proxy' => 'Ця сторінка не повинна проходити через проксі', |
|
| 622 | + 'pas_de_proxy_pour' => 'Якщо необхідно, вкажіть для яких комп’ютерів або доменів не треба застосовувати проксі (наприклад: @exemple@) ', |
|
| 623 | + 'phpinfo' => 'Конфігурація PHP', |
|
| 624 | + 'plugin_charge_paquet' => 'Завантаження архиву файлу @name@', |
|
| 625 | + 'plugin_charger' => 'Завантажити', |
|
| 626 | + 'plugin_erreur_charger' => 'Помилка: неможливо завантажити @zip@', |
|
| 627 | + 'plugin_erreur_droit1' => 'Нема прав для запису в папку <code>@dest@</code>.', |
|
| 628 | + 'plugin_erreur_droit2' => 'Будь ласка, перевірте права на запис для цієї папки (і за необхідності створіть її). Або перепишіть файли по FTP.', |
|
| 629 | + 'plugin_erreur_zip' => 'pclzip збій: помилка @status@', |
|
| 630 | + 'plugin_etat_developpement' => 'у розробці', |
|
| 631 | + 'plugin_etat_experimental' => 'експериментальний', |
|
| 632 | + 'plugin_etat_stable' => 'стабільний', |
|
| 633 | + 'plugin_etat_test' => 'тестується', |
|
| 634 | + 'plugin_impossible_activer' => 'Неможливо увімкнути плагін @plugin@', |
|
| 635 | + 'plugin_info_automatique1' => 'щоб дозволити автоматичну установку плагінів:', |
|
| 636 | + 'plugin_info_automatique1_lib' => 'Якщо ви хочете дозволити автоматичну установку цієї бібліотеки, то:', |
|
| 637 | + 'plugin_info_automatique2' => 'Створіть папку <code>@rep@</code> ;', |
|
| 638 | + 'plugin_info_automatique3' => 'Встановіть права доступу до каталогу (755 або 777).', |
|
| 639 | + 'plugin_info_automatique_creer' => 'для створення в корені вебсайту.', |
|
| 640 | + 'plugin_info_automatique_exemples' => 'Офіціальні RSS аркуші з плагінами:', |
|
| 641 | + 'plugin_info_automatique_ftp' => 'Ви можете встановити плагіни по FTP в каталог <tt>@rep@</tt> ', |
|
| 642 | + 'plugin_info_automatique_lib' => 'Деякі плагіни повинні мати можливість завантажувати файли в каталог <code>lib/</code>. Можливо, його необхідно створити самостійно.', |
|
| 643 | + 'plugin_info_automatique_liste' => 'Ваші плагіни:', |
|
| 644 | + 'plugin_info_automatique_liste_officielle' => 'офіційні плагіни', |
|
| 645 | + 'plugin_info_automatique_liste_update' => 'Поновити списки', |
|
| 646 | + 'plugin_info_automatique_ou' => 'або...', |
|
| 647 | + 'plugin_info_automatique_select' => 'виберіть плагін, SPIP завантажить і встановить його в каталог <code>@rep@</code>. Якщо плагін вже встановлений, його буде оновлено.', |
|
| 648 | + 'plugin_info_credit' => 'Авторська інформація', |
|
| 649 | + 'plugin_info_erreur_xml' => 'Неправильна декларація плагіна', |
|
| 650 | + 'plugin_info_install_ok' => 'Встановлення пройшло успішно', |
|
| 651 | + 'plugin_info_necessite' => 'Необхідно:', |
|
| 652 | + 'plugin_info_non_compatible_spip' => 'Плагін несумісний з поточною версією SPIP', |
|
| 653 | + 'plugin_info_plugins_dist_1' => 'Ці плагіни завантажені і встановлені в папці @plugins_dist@.', |
|
| 654 | + 'plugin_info_plugins_dist_2' => 'Їх не можна відключити.', |
|
| 655 | + 'plugin_info_telecharger' => 'завантажити с @url@ і встановити в @rep@', |
|
| 656 | + 'plugin_info_upgrade_ok' => 'Обновлення пройшло успішно', |
|
| 657 | + 'plugin_librairies_installees' => 'Встановлені бібліотеки', |
|
| 658 | + 'plugin_necessite_extension_php' => 'Необхідно PHP-розширення @plugin@ версії @version@.', |
|
| 659 | + 'plugin_necessite_extension_php_sans_version' => 'Необхідно PHP-розширення @plugin@', |
|
| 660 | + 'plugin_necessite_lib' => 'Для цього плагіна необхідна бібліотека @lib@', |
|
| 661 | + 'plugin_necessite_php' => 'Необхідно @plugin@ версії @version@.', |
|
| 662 | + 'plugin_necessite_plugin' => 'Для цього плагіна необхідний @plugin@ @version@ або новіший.', |
|
| 663 | + 'plugin_necessite_plugin_sans_version' => 'Потрібний плагін @plugin@', |
|
| 664 | + 'plugin_necessite_spip' => 'Для цього плагіна потрібний SPIP @version@ або новіший.', |
|
| 665 | + 'plugin_source' => 'джерело: ', |
|
| 666 | + 'plugin_titre_automatique' => 'Автоматичне встановлення', |
|
| 667 | + 'plugin_titre_automatique_ajouter' => 'Додати плагін', |
|
| 668 | + 'plugin_titre_installation' => 'Встановити плагін @plugin@ ', |
|
| 669 | + 'plugin_titre_modifier' => 'Мої плагіни', |
|
| 670 | + 'plugin_utilise_extension_php' => 'Використовується PHP-розширення @plugin@ версії @version@.', |
|
| 671 | + 'plugin_utilise_php' => 'Використовується @plugin@ версії @version@.', |
|
| 672 | + 'plugin_utilise_plugin' => 'Використовуйте плагін @plugin@ en версії @version@.', |
|
| 673 | + 'plugin_zip_active' => 'Продовжити для активації', |
|
| 674 | + 'plugin_zip_adresse' => 'Вкажіть посилання на zip файла плагіна для завантаження або адресу RSS листа плагінів.', |
|
| 675 | + 'plugin_zip_adresse_champ' => 'URL плагіна (zip file) або RSS листа', |
|
| 676 | + 'plugin_zip_content' => 'Він містить наступні файли(@taille@),<br />готові до встановлення в каталозі <code>@rep@</code>', |
|
| 677 | + 'plugin_zip_installe_finie' => 'Файл @zip@ распакований і встановлений.', |
|
| 678 | + 'plugin_zip_installe_rep_finie' => 'Файл @zip@ распакований і встановлений в каталозі @rep@ ', |
|
| 679 | + 'plugin_zip_installer' => 'Теперь ви можете встановити.', |
|
| 680 | + 'plugin_zip_telecharge' => 'Файл @zip@ було завантажено', |
|
| 681 | + 'plugins_actif_aucun' => 'Нема вимкенених плагінів.', |
|
| 682 | + 'plugins_actif_un' => 'Включений один плагін', |
|
| 683 | + 'plugins_actifs' => '@count@ плагінів включено.', |
|
| 684 | + 'plugins_actifs_liste' => 'Включені ', |
|
| 685 | + 'plugins_compte' => '@count@ плагіни', |
|
| 686 | + 'plugins_disponible_un' => 'Доступний один плагін', |
|
| 687 | + 'plugins_disponibles' => 'доступно @count@ плагінів.', |
|
| 688 | + 'plugins_erreur' => 'Помилка в плагінах: @plugins@', |
|
| 689 | + 'plugins_liste' => 'Встановлені плагіни', |
|
| 690 | + 'plugins_liste_dist' => 'Захищені плагіни', |
|
| 691 | + 'plugins_recents' => 'останні плагіни', |
|
| 692 | + 'plugins_tous_liste' => 'Усі', |
|
| 693 | + 'plugins_vue_hierarchie' => 'Ієрархія', |
|
| 694 | + 'plugins_vue_liste' => 'Список', |
|
| 695 | + 'protocole_ldap' => 'Версія протоколу:', |
|
| 696 | 696 | |
| 697 | - // Q |
|
| 698 | - 'queue_executer_maintenant' => 'Запустити', |
|
| 699 | - 'queue_info_purger' => 'Ви можете видалити усі поточні завдання і очистити всю чергу завдань', |
|
| 700 | - 'queue_nb_jobs_in_queue' => 'В черзі @nb@ завдань', |
|
| 701 | - 'queue_next_job_in_nb_sec' => 'Наступне завдання через @nb@ s', |
|
| 702 | - 'queue_no_job_in_queue' => 'Список завдань пустий', |
|
| 703 | - 'queue_one_job_in_queue' => '1 завдання в черзі', |
|
| 704 | - 'queue_priorite_tache' => 'пріорітет', |
|
| 705 | - 'queue_purger_queue' => 'Очистити список завдань', |
|
| 706 | - 'queue_titre' => 'Список завдань', |
|
| 697 | + // Q |
|
| 698 | + 'queue_executer_maintenant' => 'Запустити', |
|
| 699 | + 'queue_info_purger' => 'Ви можете видалити усі поточні завдання і очистити всю чергу завдань', |
|
| 700 | + 'queue_nb_jobs_in_queue' => 'В черзі @nb@ завдань', |
|
| 701 | + 'queue_next_job_in_nb_sec' => 'Наступне завдання через @nb@ s', |
|
| 702 | + 'queue_no_job_in_queue' => 'Список завдань пустий', |
|
| 703 | + 'queue_one_job_in_queue' => '1 завдання в черзі', |
|
| 704 | + 'queue_priorite_tache' => 'пріорітет', |
|
| 705 | + 'queue_purger_queue' => 'Очистити список завдань', |
|
| 706 | + 'queue_titre' => 'Список завдань', |
|
| 707 | 707 | |
| 708 | - // R |
|
| 709 | - 'repertoire_plugins' => 'Репозиторій:', |
|
| 710 | - 'required' => '(обов’язково)', |
|
| 708 | + // R |
|
| 709 | + 'repertoire_plugins' => 'Репозиторій:', |
|
| 710 | + 'required' => '(обов’язково)', |
|
| 711 | 711 | |
| 712 | - // S |
|
| 713 | - 'sans_heure' => 'час невизначений', |
|
| 714 | - 'statut_admin_restreint' => '(обмежений адміністратор)', |
|
| 715 | - 'statut_webmestre' => 'веб-майстер', |
|
| 712 | + // S |
|
| 713 | + 'sans_heure' => 'час невизначений', |
|
| 714 | + 'statut_admin_restreint' => '(обмежений адміністратор)', |
|
| 715 | + 'statut_webmestre' => 'веб-майстер', |
|
| 716 | 716 | |
| 717 | - // T |
|
| 718 | - 'tache_cron_asap' => 'Завдання CRON @function@ (ASAP)', |
|
| 719 | - 'tache_cron_secondes' => 'Завдання CRON @function@ (кожні @nb@ с)', |
|
| 720 | - 'taille_cache_image' => 'Кеш файлів зображень (автоматично стиснені картинки, зображення формул в форматі TeX і текст, трасформований в графіку) займає @taille@ в каталозі @dir@.', |
|
| 721 | - 'taille_cache_infinie' => 'На вашому сайті нема обмежень на розмір кеша.', |
|
| 722 | - 'taille_cache_maxi' => 'Заданий максимальний розмір файлів кеша складає приблизно <b> @octets@ </b>.', |
|
| 723 | - 'taille_cache_moins_de' => 'Розмір кеша менше @octets@.', |
|
| 724 | - 'taille_cache_octets' => 'Приблизний розмір кеша @octets@.', |
|
| 725 | - 'taille_cache_vide' => 'Кеш очищено.', |
|
| 726 | - 'taille_repertoire_cache' => 'Поточний розмір кеша', |
|
| 727 | - 'text_article_propose_publication' => 'Статтю представлено до публікації.', |
|
| 728 | - 'texte_acces_ldap_anonyme_1' => 'Деякі сервери LDAP не дозволяють анонімного доступу. В цьому випадку ви повинні вказати вихідний ідентифікатор доступу, щоб згодом мати можливість шукати інформацію в каталозі. Але в більшості випадків наступні поля можна залишити порожніми.', |
|
| 729 | - 'texte_admin_effacer_01' => 'Ця команда видаляє <i>увесь</i> вміст бази даних, включаючи <i>усі</i> параметри доступу для редакторів і адміністраторів. Після її виконання ви повинні перевстановити SPIP, щоб відновити нову базу даних і доступ першого адміністратора.', |
|
| 730 | - 'texte_adresse_annuaire_1' => '(Якщо ваш каталог установлено на тому ж самому комп’ютері, що і ваш вебсайт, це, напевно, - «localhost».)', |
|
| 731 | - 'texte_ajout_auteur' => 'Наступний автор був доданий до статті:', |
|
| 732 | - 'texte_annuaire_ldap_1' => 'Якщо ви маєте доступ до каталогу(LDAP), то можете використовувати його для автоматичного імпорту користувачів SPIP.', |
|
| 733 | - 'texte_article_statut' => 'Статус статті:', |
|
| 734 | - 'texte_article_virtuel' => 'Віртуальна стаття', |
|
| 735 | - 'texte_article_virtuel_reference' => '<b>Віртуальна стаття:</b> стаття, на яку є посилання на вашому SPIP сайті, але яка насправді знаходиться на іншому URL. Щоб видалити перенаправлення, видаліть адресу, яку наведено вище.', |
|
| 736 | - 'texte_aucun_resultat_auteur' => 'Нема результатів для «@cherche_auteur@».', |
|
| 737 | - 'texte_auteur_messagerie' => 'Цей сайт може постійнно контролювати список редакторів, які знаходяться он-лайн, що дозволяє вам обмінюватися повідомленнями в реальному часі. Ви можете вирішити не з’являтися в цьому списку (тоді вас «не побачать» інші користувачі).', |
|
| 738 | - 'texte_auteurs' => 'АВТОРИ', |
|
| 739 | - 'texte_choix_base_1' => 'Вибрати вашу базу даних:', |
|
| 740 | - 'texte_choix_base_2' => 'SQL сервер містить декілька баз даних.', |
|
| 741 | - 'texte_choix_base_3' => '<b>Виберіть</b> нижче ту, яку ваш інтернет провайдер може віднести до вас:', |
|
| 742 | - 'texte_choix_table_prefix' => 'Префікс для таблиць БД:', |
|
| 743 | - 'texte_compte_element' => '@count@ елемент', |
|
| 744 | - 'texte_compte_elements' => '@count@ елементи', |
|
| 745 | - 'texte_conflit_edition_correction' => 'Будь ласка, перевірте нижче різницю між двома версіями. Таким чином ви можете зкопіювати ваші зміни і почати спочатку.', |
|
| 746 | - 'texte_connexion_mysql' => 'Параметри доступу до бази даних задаются в контрольній панелі хостінга. Якщо у вас нема можливості управляти вашими базами даних, ви можете запитати про допомогу в службі підтримки хостінгу.', |
|
| 747 | - 'texte_contenu_article' => '(Короткий зміст статті.)', |
|
| 748 | - 'texte_contenu_articles' => 'Вибрати додаткові інформаційні поля для статтей. В залежності від того, як запрограмовано ваш сайт, вони можуть відображатися або не відображатися в загальному доступі. ', |
|
| 749 | - 'texte_crash_base' => 'Якщо ваша база даних пошкоджена, ви можете спробувати відновити її автоматично.', |
|
| 750 | - 'texte_creer_rubrique' => 'Створіть хоча б одну рубрику, <br />щоб писати статті.', |
|
| 751 | - 'texte_date_creation_article' => 'ДАТА створення статті:', |
|
| 752 | - 'texte_date_creation_objet' => 'Дата створення:', # on ajoute le ":" |
|
| 753 | - 'texte_date_publication_anterieure' => 'Додаткова дата:', |
|
| 754 | - 'texte_date_publication_anterieure_nonaffichee' => 'Приховати дату більш ранньої публікації.', |
|
| 755 | - 'texte_date_publication_article' => 'ДАТА ОНЛАЙН ПУБЛИКАЦІИ:', |
|
| 756 | - 'texte_date_publication_objet' => 'Дата публікації:', |
|
| 757 | - 'texte_definir_comme_traduction_rubrique' => 'Ця рубрика є перекладом рубрики за номером:', |
|
| 758 | - 'texte_descriptif_rapide' => 'Короткий опис', |
|
| 759 | - 'texte_effacer_base' => 'Видалити базу даних SPIP', |
|
| 760 | - 'texte_effacer_statistiques' => 'Видалити статистику', |
|
| 761 | - 'texte_en_cours_validation' => 'Матеріали, що потребують перевірки. ', |
|
| 762 | - 'texte_enrichir_mise_a_jour' => 'Ви можете покращити свій текст, користуючись «типографськими скороченнями»', |
|
| 763 | - 'texte_fichier_authent' => '<b>Чи повинен SPIP створювати <tt>.htpasswd</tt> і <tt>.htpasswd-admin</tt> файли у папці @dossier@?</b> <p>Ці файли використовуються для обмеження доступу авторів і адміністраторов до інших частин сайту (наприклад, до папки з серверною статистикою).</p> <p>Якщо у вас нема необхідності в таких діях, то залиште це значення як усталено (default).</p>', |
|
| 764 | - 'texte_informations_personnelles_1' => 'Теперь система створить ваш обліковий запис на сайті.', |
|
| 765 | - 'texte_informations_personnelles_2' => '(Примітка: Якщо ви перевстановлюєте SPIP і ваш старий логін і пароль як і раніше працюють, ви можете', |
|
| 766 | - 'texte_introductif_article' => '(Вступний текст до статті)', |
|
| 767 | - 'texte_jeu_caractere' => 'Рекомендуємо використовувати кодування (<tt>utf-8</tt>) на вашому сайті. Це дасть можливість відображати текст будь-якою мовою. ', |
|
| 768 | - 'texte_jeu_caractere_3' => 'Поточне кодування:', |
|
| 769 | - 'texte_jeu_caractere_4' => 'Якщо це не відповідає ситуації з вашими даними (наприклад, після відновлення бази даних з резервної копії), або якщо <em>ви створюєте цей сайт</em> і хочете використовувати різні набори символів, будь ласка, вкажіть набор символів тут:', |
|
| 770 | - 'texte_login_ldap_1' => '(Залиште порожнім для анонімного доступу або введіть повний шлях, наприклад «<tt>uid=smith, ou=users, dc=my-domain, dc=com </tt>».)', |
|
| 771 | - 'texte_login_precaution' => 'Увага! Це ваш поточний логін на сайті, міняйте вдумливо.', |
|
| 772 | - 'texte_messagerie_agenda' => 'Система відправлення повідомлень дозволяє авторам сайту спілкуватися безпосередньо в редакційній частині сайту. Вона пов’язана з календарем.', |
|
| 773 | - 'texte_mise_a_niveau_base_1' => 'Ви тільки но поновили файли SPIP. Теперь ви повинні поновити базу даних сайту.', |
|
| 774 | - 'texte_modifier_article' => 'Змінити статтю:', |
|
| 775 | - 'texte_multilinguisme' => 'Якщо на сайті будуть розміщуватися матеріали деякільками мовами, ви можете додати «меню вибору мови» для цих матеріалів.', |
|
| 776 | - 'texte_multilinguisme_trad' => 'Також ви можете дозволити об’єднувати різні переклади одного і того ж матеріалу. ', |
|
| 777 | - 'texte_non_compresse' => '<i>розпакувати</i> (ваш сервер не підтримує цю функцію)', |
|
| 778 | - 'texte_nouvelle_version_spip_1' => 'Ви встановили нову версію SPIP.', |
|
| 779 | - 'texte_nouvelle_version_spip_2' => 'Щоб поновити сайт до нової версії, якщо ви вебмастер цього сайту, будь ласка, видаліть файл @connect@ і повторно почніть установку, щоб поновити налаштування підключення до бази даних. <p>(PS: Якщо ви забули свої параметри з’єднання, то вони зберігаються в файлі @connect@ </p>', |
|
| 780 | - 'texte_operation_echec' => 'Поверніться до попередньої сторінки, виберіть іншу базу даних або створіть нову. Перевірте інформацію, надану вашим хостом.', |
|
| 781 | - 'texte_plus_trois_car' => 'понад 3 символи', |
|
| 782 | - 'texte_plusieurs_articles' => 'Декілька авторів було знайдено для «@cherche_auteur@»:', |
|
| 783 | - 'texte_port_annuaire' => '(Усталене (default) значення є підходящим.)', |
|
| 784 | - 'texte_presente_plugin' => 'На цій сторінці перелік плагінів, доступних на вашому сайті. Включіть плагін, відзначивши відповідний квадратик.', |
|
| 785 | - 'texte_proposer_publication' => 'Коли ви закінчите роботу над статтею, <br />ви можете представити її до публікації.', |
|
| 786 | - 'texte_proxy' => 'В деяких випадках (внутрішні або захищені мережі...) необхідно використовувати <i>proxy HTTP</i>, щоб дістатися віддалених сайтів (SPIP документація, сайти, що реферуються і т.д.). В такому разі введіть його адресу нижче в форму <tt><html> http://proxy:8080 </html></tt> (@proxy_en_cours@). В більшості випадків ви можете залишити це поле порожнім.', |
|
| 787 | - 'texte_publication_articles_post_dates' => 'Коли публікувати статті з датою публікації в майбутньому?', |
|
| 788 | - 'texte_rappel_selection_champs' => '[Не забудьте правильно обрати поле.]', |
|
| 789 | - 'texte_recalcul_page' => 'Якщо ви хочете поновити тільки одну сторінку, то можете зробити це в основній частині, використовуючи кнопку «Поновити сторінку».', |
|
| 790 | - 'texte_recuperer_base' => 'Відновити базу даних', |
|
| 791 | - 'texte_reference_mais_redirige' => 'посилання на статтю вашого SPIP сайту, але переадресоване на іншу адресу.', |
|
| 792 | - 'texte_requetes_echouent' => '<b>Якщо при виконанні SQL запитів часто з’являються повідомлення про помилки, цілком можливо, що пошкоджено саму базу даних.</b> <p>В SQL вбудовано функцію ремонту і відновлення пошкоджених таблиць. Ви можете спробувати виконати процедуру відновлення або ремонту зараз.</p>', |
|
| 793 | - 'texte_selection_langue_principale' => 'Ви можете вибрати «головну мову» сайту. Вона задає: |
|
| 717 | + // T |
|
| 718 | + 'tache_cron_asap' => 'Завдання CRON @function@ (ASAP)', |
|
| 719 | + 'tache_cron_secondes' => 'Завдання CRON @function@ (кожні @nb@ с)', |
|
| 720 | + 'taille_cache_image' => 'Кеш файлів зображень (автоматично стиснені картинки, зображення формул в форматі TeX і текст, трасформований в графіку) займає @taille@ в каталозі @dir@.', |
|
| 721 | + 'taille_cache_infinie' => 'На вашому сайті нема обмежень на розмір кеша.', |
|
| 722 | + 'taille_cache_maxi' => 'Заданий максимальний розмір файлів кеша складає приблизно <b> @octets@ </b>.', |
|
| 723 | + 'taille_cache_moins_de' => 'Розмір кеша менше @octets@.', |
|
| 724 | + 'taille_cache_octets' => 'Приблизний розмір кеша @octets@.', |
|
| 725 | + 'taille_cache_vide' => 'Кеш очищено.', |
|
| 726 | + 'taille_repertoire_cache' => 'Поточний розмір кеша', |
|
| 727 | + 'text_article_propose_publication' => 'Статтю представлено до публікації.', |
|
| 728 | + 'texte_acces_ldap_anonyme_1' => 'Деякі сервери LDAP не дозволяють анонімного доступу. В цьому випадку ви повинні вказати вихідний ідентифікатор доступу, щоб згодом мати можливість шукати інформацію в каталозі. Але в більшості випадків наступні поля можна залишити порожніми.', |
|
| 729 | + 'texte_admin_effacer_01' => 'Ця команда видаляє <i>увесь</i> вміст бази даних, включаючи <i>усі</i> параметри доступу для редакторів і адміністраторів. Після її виконання ви повинні перевстановити SPIP, щоб відновити нову базу даних і доступ першого адміністратора.', |
|
| 730 | + 'texte_adresse_annuaire_1' => '(Якщо ваш каталог установлено на тому ж самому комп’ютері, що і ваш вебсайт, це, напевно, - «localhost».)', |
|
| 731 | + 'texte_ajout_auteur' => 'Наступний автор був доданий до статті:', |
|
| 732 | + 'texte_annuaire_ldap_1' => 'Якщо ви маєте доступ до каталогу(LDAP), то можете використовувати його для автоматичного імпорту користувачів SPIP.', |
|
| 733 | + 'texte_article_statut' => 'Статус статті:', |
|
| 734 | + 'texte_article_virtuel' => 'Віртуальна стаття', |
|
| 735 | + 'texte_article_virtuel_reference' => '<b>Віртуальна стаття:</b> стаття, на яку є посилання на вашому SPIP сайті, але яка насправді знаходиться на іншому URL. Щоб видалити перенаправлення, видаліть адресу, яку наведено вище.', |
|
| 736 | + 'texte_aucun_resultat_auteur' => 'Нема результатів для «@cherche_auteur@».', |
|
| 737 | + 'texte_auteur_messagerie' => 'Цей сайт може постійнно контролювати список редакторів, які знаходяться он-лайн, що дозволяє вам обмінюватися повідомленнями в реальному часі. Ви можете вирішити не з’являтися в цьому списку (тоді вас «не побачать» інші користувачі).', |
|
| 738 | + 'texte_auteurs' => 'АВТОРИ', |
|
| 739 | + 'texte_choix_base_1' => 'Вибрати вашу базу даних:', |
|
| 740 | + 'texte_choix_base_2' => 'SQL сервер містить декілька баз даних.', |
|
| 741 | + 'texte_choix_base_3' => '<b>Виберіть</b> нижче ту, яку ваш інтернет провайдер може віднести до вас:', |
|
| 742 | + 'texte_choix_table_prefix' => 'Префікс для таблиць БД:', |
|
| 743 | + 'texte_compte_element' => '@count@ елемент', |
|
| 744 | + 'texte_compte_elements' => '@count@ елементи', |
|
| 745 | + 'texte_conflit_edition_correction' => 'Будь ласка, перевірте нижче різницю між двома версіями. Таким чином ви можете зкопіювати ваші зміни і почати спочатку.', |
|
| 746 | + 'texte_connexion_mysql' => 'Параметри доступу до бази даних задаются в контрольній панелі хостінга. Якщо у вас нема можливості управляти вашими базами даних, ви можете запитати про допомогу в службі підтримки хостінгу.', |
|
| 747 | + 'texte_contenu_article' => '(Короткий зміст статті.)', |
|
| 748 | + 'texte_contenu_articles' => 'Вибрати додаткові інформаційні поля для статтей. В залежності від того, як запрограмовано ваш сайт, вони можуть відображатися або не відображатися в загальному доступі. ', |
|
| 749 | + 'texte_crash_base' => 'Якщо ваша база даних пошкоджена, ви можете спробувати відновити її автоматично.', |
|
| 750 | + 'texte_creer_rubrique' => 'Створіть хоча б одну рубрику, <br />щоб писати статті.', |
|
| 751 | + 'texte_date_creation_article' => 'ДАТА створення статті:', |
|
| 752 | + 'texte_date_creation_objet' => 'Дата створення:', # on ajoute le ":" |
|
| 753 | + 'texte_date_publication_anterieure' => 'Додаткова дата:', |
|
| 754 | + 'texte_date_publication_anterieure_nonaffichee' => 'Приховати дату більш ранньої публікації.', |
|
| 755 | + 'texte_date_publication_article' => 'ДАТА ОНЛАЙН ПУБЛИКАЦІИ:', |
|
| 756 | + 'texte_date_publication_objet' => 'Дата публікації:', |
|
| 757 | + 'texte_definir_comme_traduction_rubrique' => 'Ця рубрика є перекладом рубрики за номером:', |
|
| 758 | + 'texte_descriptif_rapide' => 'Короткий опис', |
|
| 759 | + 'texte_effacer_base' => 'Видалити базу даних SPIP', |
|
| 760 | + 'texte_effacer_statistiques' => 'Видалити статистику', |
|
| 761 | + 'texte_en_cours_validation' => 'Матеріали, що потребують перевірки. ', |
|
| 762 | + 'texte_enrichir_mise_a_jour' => 'Ви можете покращити свій текст, користуючись «типографськими скороченнями»', |
|
| 763 | + 'texte_fichier_authent' => '<b>Чи повинен SPIP створювати <tt>.htpasswd</tt> і <tt>.htpasswd-admin</tt> файли у папці @dossier@?</b> <p>Ці файли використовуються для обмеження доступу авторів і адміністраторов до інших частин сайту (наприклад, до папки з серверною статистикою).</p> <p>Якщо у вас нема необхідності в таких діях, то залиште це значення як усталено (default).</p>', |
|
| 764 | + 'texte_informations_personnelles_1' => 'Теперь система створить ваш обліковий запис на сайті.', |
|
| 765 | + 'texte_informations_personnelles_2' => '(Примітка: Якщо ви перевстановлюєте SPIP і ваш старий логін і пароль як і раніше працюють, ви можете', |
|
| 766 | + 'texte_introductif_article' => '(Вступний текст до статті)', |
|
| 767 | + 'texte_jeu_caractere' => 'Рекомендуємо використовувати кодування (<tt>utf-8</tt>) на вашому сайті. Це дасть можливість відображати текст будь-якою мовою. ', |
|
| 768 | + 'texte_jeu_caractere_3' => 'Поточне кодування:', |
|
| 769 | + 'texte_jeu_caractere_4' => 'Якщо це не відповідає ситуації з вашими даними (наприклад, після відновлення бази даних з резервної копії), або якщо <em>ви створюєте цей сайт</em> і хочете використовувати різні набори символів, будь ласка, вкажіть набор символів тут:', |
|
| 770 | + 'texte_login_ldap_1' => '(Залиште порожнім для анонімного доступу або введіть повний шлях, наприклад «<tt>uid=smith, ou=users, dc=my-domain, dc=com </tt>».)', |
|
| 771 | + 'texte_login_precaution' => 'Увага! Це ваш поточний логін на сайті, міняйте вдумливо.', |
|
| 772 | + 'texte_messagerie_agenda' => 'Система відправлення повідомлень дозволяє авторам сайту спілкуватися безпосередньо в редакційній частині сайту. Вона пов’язана з календарем.', |
|
| 773 | + 'texte_mise_a_niveau_base_1' => 'Ви тільки но поновили файли SPIP. Теперь ви повинні поновити базу даних сайту.', |
|
| 774 | + 'texte_modifier_article' => 'Змінити статтю:', |
|
| 775 | + 'texte_multilinguisme' => 'Якщо на сайті будуть розміщуватися матеріали деякільками мовами, ви можете додати «меню вибору мови» для цих матеріалів.', |
|
| 776 | + 'texte_multilinguisme_trad' => 'Також ви можете дозволити об’єднувати різні переклади одного і того ж матеріалу. ', |
|
| 777 | + 'texte_non_compresse' => '<i>розпакувати</i> (ваш сервер не підтримує цю функцію)', |
|
| 778 | + 'texte_nouvelle_version_spip_1' => 'Ви встановили нову версію SPIP.', |
|
| 779 | + 'texte_nouvelle_version_spip_2' => 'Щоб поновити сайт до нової версії, якщо ви вебмастер цього сайту, будь ласка, видаліть файл @connect@ і повторно почніть установку, щоб поновити налаштування підключення до бази даних. <p>(PS: Якщо ви забули свої параметри з’єднання, то вони зберігаються в файлі @connect@ </p>', |
|
| 780 | + 'texte_operation_echec' => 'Поверніться до попередньої сторінки, виберіть іншу базу даних або створіть нову. Перевірте інформацію, надану вашим хостом.', |
|
| 781 | + 'texte_plus_trois_car' => 'понад 3 символи', |
|
| 782 | + 'texte_plusieurs_articles' => 'Декілька авторів було знайдено для «@cherche_auteur@»:', |
|
| 783 | + 'texte_port_annuaire' => '(Усталене (default) значення є підходящим.)', |
|
| 784 | + 'texte_presente_plugin' => 'На цій сторінці перелік плагінів, доступних на вашому сайті. Включіть плагін, відзначивши відповідний квадратик.', |
|
| 785 | + 'texte_proposer_publication' => 'Коли ви закінчите роботу над статтею, <br />ви можете представити її до публікації.', |
|
| 786 | + 'texte_proxy' => 'В деяких випадках (внутрішні або захищені мережі...) необхідно використовувати <i>proxy HTTP</i>, щоб дістатися віддалених сайтів (SPIP документація, сайти, що реферуються і т.д.). В такому разі введіть його адресу нижче в форму <tt><html> http://proxy:8080 </html></tt> (@proxy_en_cours@). В більшості випадків ви можете залишити це поле порожнім.', |
|
| 787 | + 'texte_publication_articles_post_dates' => 'Коли публікувати статті з датою публікації в майбутньому?', |
|
| 788 | + 'texte_rappel_selection_champs' => '[Не забудьте правильно обрати поле.]', |
|
| 789 | + 'texte_recalcul_page' => 'Якщо ви хочете поновити тільки одну сторінку, то можете зробити це в основній частині, використовуючи кнопку «Поновити сторінку».', |
|
| 790 | + 'texte_recuperer_base' => 'Відновити базу даних', |
|
| 791 | + 'texte_reference_mais_redirige' => 'посилання на статтю вашого SPIP сайту, але переадресоване на іншу адресу.', |
|
| 792 | + 'texte_requetes_echouent' => '<b>Якщо при виконанні SQL запитів часто з’являються повідомлення про помилки, цілком можливо, що пошкоджено саму базу даних.</b> <p>В SQL вбудовано функцію ремонту і відновлення пошкоджених таблиць. Ви можете спробувати виконати процедуру відновлення або ремонту зараз.</p>', |
|
| 793 | + 'texte_selection_langue_principale' => 'Ви можете вибрати «головну мову» сайту. Вона задає: |
|
| 794 | 794 | <ul> |
| 795 | 795 | <li>усталений формат виведення дати</li> |
| 796 | 796 | <li>усталену мову для використання на сайті</li> |
| 797 | 797 | <li>усталену мову для адміністративной частини.</li> |
| 798 | 798 | </ul>', |
| 799 | - 'texte_sous_titre' => 'Підзаголовок', |
|
| 800 | - 'texte_statistiques_visites' => '(темні штрихи: неділя / темна крива: середній рівень)', |
|
| 801 | - 'texte_statut_attente_validation' => 'очікує затвердження', |
|
| 802 | - 'texte_statut_publies' => 'опубліковані на сайті', |
|
| 803 | - 'texte_statut_refuses' => 'відхилено', |
|
| 804 | - 'texte_suppression_fichiers' => 'використовуйте команду для видалення усіх файлів з кеша SPIP. Це дозволить поновити усі сторінки сайту. Це дуже зручно, якщо ви змінили шаблони або поновили значну кількість інформації на сайті.', |
|
| 805 | - 'texte_sur_titre' => 'Топ-заголовок', |
|
| 806 | - 'texte_table_ok' => ': таблиця ОК.', |
|
| 807 | - 'texte_tentative_recuperation' => 'Спроба відновлення ', |
|
| 808 | - 'texte_tenter_reparation' => 'Спроба відновлення бази даних', |
|
| 809 | - 'texte_test_proxy' => 'Щоб спробувати проксі, введіть тут адрес вебсайта, який ви хочете перевірити.', |
|
| 810 | - 'texte_titre_02' => 'Заголовок:', |
|
| 811 | - 'texte_titre_obligatoire' => '<b>Заголовок</b> [обов’язково]', |
|
| 812 | - 'texte_travail_article' => '@nom_auteur_modif@ роботав над цією статтею @date_diff@ хвилин тому', |
|
| 813 | - 'texte_travail_collaboratif' => 'Якщо декілька авторів редагують одну і ту ж саму статтю, то система позначає її як «в роботі» і обмежує доступ до неї, щоб уникнути втрат інформації внаслідок одночасного редагування матеріалу. Зазвичай цю можливість відключено.', |
|
| 814 | - 'texte_vide' => 'очистити', |
|
| 815 | - 'texte_vider_cache' => 'Очистити кеш', |
|
| 816 | - 'titre_admin_tech' => 'Технічне обслуговування', |
|
| 817 | - 'titre_admin_vider' => 'Технічне обслуговування', |
|
| 818 | - 'titre_ajouter_un_auteur' => 'Додати автора', |
|
| 819 | - 'titre_ajouter_un_mot' => 'Додати ключове слово', |
|
| 820 | - 'titre_cadre_afficher_article' => 'Показати статті:', |
|
| 821 | - 'titre_cadre_afficher_traductions' => 'Показати стан перекладу для наступних мов:', |
|
| 822 | - 'titre_cadre_ajouter_auteur' => 'ДОДАТИ АВТОРА:', |
|
| 823 | - 'titre_cadre_interieur_rubrique' => 'В розділі', |
|
| 824 | - 'titre_cadre_numero_auteur' => 'НОМЕР АВТОРА', |
|
| 825 | - 'titre_cadre_numero_objet' => '@objet@ НОМЕР:', |
|
| 826 | - 'titre_cadre_signature_obligatoire' => '<b>Підпис</b> [обов’язково]<br />', |
|
| 827 | - 'titre_config_contenu_notifications' => 'Повідомлення', |
|
| 828 | - 'titre_config_contenu_prive' => 'У редакційній частині', |
|
| 829 | - 'titre_config_contenu_public' => 'В публічній частині', |
|
| 830 | - 'titre_config_fonctions' => 'Налаштування сайту', |
|
| 831 | - 'titre_config_langage' => 'Вибір мови інтерфейсу', |
|
| 832 | - 'titre_configuration' => 'Налаштування сайту', |
|
| 833 | - 'titre_configurer_preferences' => 'Змінити налаштування', |
|
| 834 | - 'titre_configurer_preferences_menus' => 'Налаштування меню', |
|
| 835 | - 'titre_conflit_edition' => 'Протиріччя в процесі зміни', |
|
| 836 | - 'titre_connexion_ldap' => 'Опції: <b>ваше LDAP з’єднання</b>', |
|
| 837 | - 'titre_groupe_mots' => 'ГРУППА КЛЮЧОВИХ СЛІВ:', |
|
| 838 | - 'titre_identite_site' => 'Інформація про сайт', |
|
| 839 | - 'titre_langue_article' => 'Мова статті', |
|
| 840 | - 'titre_langue_rubrique' => 'МОВА РОЗДІЛУ', |
|
| 841 | - 'titre_langue_trad_article' => 'МОВА та ПЕРЕКЛАДИ СТАТТІ', |
|
| 842 | - 'titre_les_articles' => 'СТАТТІ', |
|
| 843 | - 'titre_messagerie_agenda' => 'Система обміну повідомленнями і календар', |
|
| 844 | - 'titre_naviguer_dans_le_site' => 'Перегляд сайту...', |
|
| 845 | - 'titre_nouvelle_rubrique' => 'Новий розділ', |
|
| 846 | - 'titre_numero_rubrique' => 'НОМЕР РОЗДІЛУ:', |
|
| 847 | - 'titre_page_articles_edit' => 'Змінити: @titre@', |
|
| 848 | - 'titre_page_articles_page' => 'Статті', |
|
| 849 | - 'titre_page_articles_tous' => 'Весь сайт', |
|
| 850 | - 'titre_page_calendrier' => 'Календар @nom_mois@ @annee@', |
|
| 851 | - 'titre_page_config_contenu' => 'Налаштування сайту', |
|
| 852 | - 'titre_page_delete_all' => 'повне і незворотне видалення ', |
|
| 853 | - 'titre_page_recherche' => 'Результати пошуку @recherche@', |
|
| 854 | - 'titre_page_statistiques_referers' => 'Статистика (вхідні посилання)', |
|
| 855 | - 'titre_page_upgrade' => 'SPIP оновлення', |
|
| 856 | - 'titre_preference_menus_favoris' => 'Обране меню', |
|
| 857 | - 'titre_publication_articles_post_dates' => 'Відкладена публікація статтей', |
|
| 858 | - 'titre_reparation' => 'Відновити', |
|
| 859 | - 'titre_suivi_petition' => 'Відстеження звернень (петицій)', |
|
| 860 | - 'tls_ldap' => 'Transport Layer Security :', |
|
| 861 | - 'trad_article_traduction' => 'Усі версії цієї статті:', |
|
| 862 | - 'trad_delier' => 'Видалити зв’язок з цим перекладом', |
|
| 863 | - 'trad_lier' => 'Ця стаття є перекладом статті за номером:', |
|
| 864 | - 'trad_new' => 'Додати новий переклад', |
|
| 799 | + 'texte_sous_titre' => 'Підзаголовок', |
|
| 800 | + 'texte_statistiques_visites' => '(темні штрихи: неділя / темна крива: середній рівень)', |
|
| 801 | + 'texte_statut_attente_validation' => 'очікує затвердження', |
|
| 802 | + 'texte_statut_publies' => 'опубліковані на сайті', |
|
| 803 | + 'texte_statut_refuses' => 'відхилено', |
|
| 804 | + 'texte_suppression_fichiers' => 'використовуйте команду для видалення усіх файлів з кеша SPIP. Це дозволить поновити усі сторінки сайту. Це дуже зручно, якщо ви змінили шаблони або поновили значну кількість інформації на сайті.', |
|
| 805 | + 'texte_sur_titre' => 'Топ-заголовок', |
|
| 806 | + 'texte_table_ok' => ': таблиця ОК.', |
|
| 807 | + 'texte_tentative_recuperation' => 'Спроба відновлення ', |
|
| 808 | + 'texte_tenter_reparation' => 'Спроба відновлення бази даних', |
|
| 809 | + 'texte_test_proxy' => 'Щоб спробувати проксі, введіть тут адрес вебсайта, який ви хочете перевірити.', |
|
| 810 | + 'texte_titre_02' => 'Заголовок:', |
|
| 811 | + 'texte_titre_obligatoire' => '<b>Заголовок</b> [обов’язково]', |
|
| 812 | + 'texte_travail_article' => '@nom_auteur_modif@ роботав над цією статтею @date_diff@ хвилин тому', |
|
| 813 | + 'texte_travail_collaboratif' => 'Якщо декілька авторів редагують одну і ту ж саму статтю, то система позначає її як «в роботі» і обмежує доступ до неї, щоб уникнути втрат інформації внаслідок одночасного редагування матеріалу. Зазвичай цю можливість відключено.', |
|
| 814 | + 'texte_vide' => 'очистити', |
|
| 815 | + 'texte_vider_cache' => 'Очистити кеш', |
|
| 816 | + 'titre_admin_tech' => 'Технічне обслуговування', |
|
| 817 | + 'titre_admin_vider' => 'Технічне обслуговування', |
|
| 818 | + 'titre_ajouter_un_auteur' => 'Додати автора', |
|
| 819 | + 'titre_ajouter_un_mot' => 'Додати ключове слово', |
|
| 820 | + 'titre_cadre_afficher_article' => 'Показати статті:', |
|
| 821 | + 'titre_cadre_afficher_traductions' => 'Показати стан перекладу для наступних мов:', |
|
| 822 | + 'titre_cadre_ajouter_auteur' => 'ДОДАТИ АВТОРА:', |
|
| 823 | + 'titre_cadre_interieur_rubrique' => 'В розділі', |
|
| 824 | + 'titre_cadre_numero_auteur' => 'НОМЕР АВТОРА', |
|
| 825 | + 'titre_cadre_numero_objet' => '@objet@ НОМЕР:', |
|
| 826 | + 'titre_cadre_signature_obligatoire' => '<b>Підпис</b> [обов’язково]<br />', |
|
| 827 | + 'titre_config_contenu_notifications' => 'Повідомлення', |
|
| 828 | + 'titre_config_contenu_prive' => 'У редакційній частині', |
|
| 829 | + 'titre_config_contenu_public' => 'В публічній частині', |
|
| 830 | + 'titre_config_fonctions' => 'Налаштування сайту', |
|
| 831 | + 'titre_config_langage' => 'Вибір мови інтерфейсу', |
|
| 832 | + 'titre_configuration' => 'Налаштування сайту', |
|
| 833 | + 'titre_configurer_preferences' => 'Змінити налаштування', |
|
| 834 | + 'titre_configurer_preferences_menus' => 'Налаштування меню', |
|
| 835 | + 'titre_conflit_edition' => 'Протиріччя в процесі зміни', |
|
| 836 | + 'titre_connexion_ldap' => 'Опції: <b>ваше LDAP з’єднання</b>', |
|
| 837 | + 'titre_groupe_mots' => 'ГРУППА КЛЮЧОВИХ СЛІВ:', |
|
| 838 | + 'titre_identite_site' => 'Інформація про сайт', |
|
| 839 | + 'titre_langue_article' => 'Мова статті', |
|
| 840 | + 'titre_langue_rubrique' => 'МОВА РОЗДІЛУ', |
|
| 841 | + 'titre_langue_trad_article' => 'МОВА та ПЕРЕКЛАДИ СТАТТІ', |
|
| 842 | + 'titre_les_articles' => 'СТАТТІ', |
|
| 843 | + 'titre_messagerie_agenda' => 'Система обміну повідомленнями і календар', |
|
| 844 | + 'titre_naviguer_dans_le_site' => 'Перегляд сайту...', |
|
| 845 | + 'titre_nouvelle_rubrique' => 'Новий розділ', |
|
| 846 | + 'titre_numero_rubrique' => 'НОМЕР РОЗДІЛУ:', |
|
| 847 | + 'titre_page_articles_edit' => 'Змінити: @titre@', |
|
| 848 | + 'titre_page_articles_page' => 'Статті', |
|
| 849 | + 'titre_page_articles_tous' => 'Весь сайт', |
|
| 850 | + 'titre_page_calendrier' => 'Календар @nom_mois@ @annee@', |
|
| 851 | + 'titre_page_config_contenu' => 'Налаштування сайту', |
|
| 852 | + 'titre_page_delete_all' => 'повне і незворотне видалення ', |
|
| 853 | + 'titre_page_recherche' => 'Результати пошуку @recherche@', |
|
| 854 | + 'titre_page_statistiques_referers' => 'Статистика (вхідні посилання)', |
|
| 855 | + 'titre_page_upgrade' => 'SPIP оновлення', |
|
| 856 | + 'titre_preference_menus_favoris' => 'Обране меню', |
|
| 857 | + 'titre_publication_articles_post_dates' => 'Відкладена публікація статтей', |
|
| 858 | + 'titre_reparation' => 'Відновити', |
|
| 859 | + 'titre_suivi_petition' => 'Відстеження звернень (петицій)', |
|
| 860 | + 'tls_ldap' => 'Transport Layer Security :', |
|
| 861 | + 'trad_article_traduction' => 'Усі версії цієї статті:', |
|
| 862 | + 'trad_delier' => 'Видалити зв’язок з цим перекладом', |
|
| 863 | + 'trad_lier' => 'Ця стаття є перекладом статті за номером:', |
|
| 864 | + 'trad_new' => 'Додати новий переклад', |
|
| 865 | 865 | |
| 866 | - // U |
|
| 867 | - 'utf8_convert_erreur_orig' => 'Помилка: набір символів @charset@ не підтримується.', |
|
| 866 | + // U |
|
| 867 | + 'utf8_convert_erreur_orig' => 'Помилка: набір символів @charset@ не підтримується.', |
|
| 868 | 868 | |
| 869 | - // V |
|
| 870 | - 'version' => 'Версія:' |
|
| 869 | + // V |
|
| 870 | + 'version' => 'Версія:' |
|
| 871 | 871 | ); |
@@ -170,7 +170,7 @@ discard block |
||
| 170 | 170 | unset($erreurs['new_login']); |
| 171 | 171 | } |
| 172 | 172 | |
| 173 | - $auth_methode = sql_getfetsel('source', 'spip_auteurs', 'id_auteur=' . intval($id_auteur)); |
|
| 173 | + $auth_methode = sql_getfetsel('source', 'spip_auteurs', 'id_auteur='.intval($id_auteur)); |
|
| 174 | 174 | $auth_methode = ($auth_methode ?: 'spip'); |
| 175 | 175 | include_spip('inc/auth'); |
| 176 | 176 | |
@@ -186,7 +186,7 @@ discard block |
||
| 186 | 186 | !autoriser('modifier', 'auteur', $id_auteur, null, ['email' => '?']) |
| 187 | 187 | and $GLOBALS['visiteur_session']['id_auteur'] == $id_auteur |
| 188 | 188 | and !strlen(trim($email)) |
| 189 | - and $email != ($email_ancien = sql_getfetsel('email', 'spip_auteurs', 'id_auteur=' . intval($id_auteur))) |
|
| 189 | + and $email != ($email_ancien = sql_getfetsel('email', 'spip_auteurs', 'id_auteur='.intval($id_auteur))) |
|
| 190 | 190 | ) { |
| 191 | 191 | $erreurs['email'] = (($id_auteur == $GLOBALS['visiteur_session']['id_auteur']) ? _T('form_email_non_valide') : _T('form_prop_indiquer_email')); |
| 192 | 192 | } else { |
@@ -201,7 +201,7 @@ discard block |
||
| 201 | 201 | #Nouvel auteur |
| 202 | 202 | if (intval($id_auteur) == 0) { |
| 203 | 203 | #Un auteur existe deja avec cette adresse ? |
| 204 | - if (sql_countsel('spip_auteurs', 'email=' . sql_quote($email)) > 0) { |
|
| 204 | + if (sql_countsel('spip_auteurs', 'email='.sql_quote($email)) > 0) { |
|
| 205 | 205 | $erreurs['email'] = _T('erreur_email_deja_existant'); |
| 206 | 206 | } |
| 207 | 207 | } else { |
@@ -209,11 +209,11 @@ discard block |
||
| 209 | 209 | if ( |
| 210 | 210 | (sql_countsel( |
| 211 | 211 | 'spip_auteurs', |
| 212 | - 'email=' . sql_quote($email) |
|
| 212 | + 'email='.sql_quote($email) |
|
| 213 | 213 | ) > 0) and ($id_auteur != ($id_auteur_ancien = sql_getfetsel( |
| 214 | 214 | 'id_auteur', |
| 215 | 215 | 'spip_auteurs', |
| 216 | - 'email=' . sql_quote($email) |
|
| 216 | + 'email='.sql_quote($email) |
|
| 217 | 217 | ))) |
| 218 | 218 | ) { |
| 219 | 219 | $erreurs['email'] = _T('erreur_email_deja_existant'); |
@@ -231,7 +231,7 @@ discard block |
||
| 231 | 231 | // corriger un cas si frequent : www.example.org sans le http:// qui precede |
| 232 | 232 | if ($url = _request('url_site') and !tester_url_absolue($url)) { |
| 233 | 233 | if (strpos($url, ':') === false and strncasecmp($url, 'www.', 4) === 0) { |
| 234 | - $url = 'http://' . $url; |
|
| 234 | + $url = 'http://'.$url; |
|
| 235 | 235 | set_request('url_site', $url); |
| 236 | 236 | } |
| 237 | 237 | } |
@@ -248,11 +248,11 @@ discard block |
||
| 248 | 248 | } |
| 249 | 249 | elseif ( |
| 250 | 250 | ($login = _request('new_login')) and |
| 251 | - $login !== sql_getfetsel('login', 'spip_auteurs', 'id_auteur=' . intval($id_auteur)) |
|
| 251 | + $login !== sql_getfetsel('login', 'spip_auteurs', 'id_auteur='.intval($id_auteur)) |
|
| 252 | 252 | ) { |
| 253 | 253 | // on verifie la meme chose que dans auteurs_edit_config() |
| 254 | 254 | if ( |
| 255 | - ! auth_autoriser_modifier_login($auth_methode) |
|
| 255 | + !auth_autoriser_modifier_login($auth_methode) |
|
| 256 | 256 | or !autoriser('modifier', 'auteur', intval($id_auteur), null, ['login' => true]) |
| 257 | 257 | // legacy : ne pas risquer d'autoriser la modif login si fonction d'autorisation pas mise a jour et ne teste que l'option email |
| 258 | 258 | or !autoriser('modifier', 'auteur', intval($id_auteur), null, ['email' => true]) |
@@ -359,7 +359,7 @@ discard block |
||
| 359 | 359 | if ( |
| 360 | 360 | $GLOBALS['visiteur_session']['id_auteur'] == $id_auteur |
| 361 | 361 | and $email_nouveau != |
| 362 | - ($email_ancien = sql_getfetsel('email', 'spip_auteurs', 'id_auteur=' . intval($id_auteur))) |
|
| 362 | + ($email_ancien = sql_getfetsel('email', 'spip_auteurs', 'id_auteur='.intval($id_auteur))) |
|
| 363 | 363 | ) { |
| 364 | 364 | $envoyer_mail = charger_fonction('envoyer_mail', 'inc'); |
| 365 | 365 | $texte = _T( |
@@ -393,12 +393,12 @@ discard block |
||
| 393 | 393 | if (isset($erreurs['message_ok'])) { |
| 394 | 394 | if (!isset($res['message_ok'])) { $res['message_ok'] = ''; |
| 395 | 395 | } |
| 396 | - $res['message_ok'] = trim($res['message_ok'] . ' ' . $erreurs['message_ok']); |
|
| 396 | + $res['message_ok'] = trim($res['message_ok'].' '.$erreurs['message_ok']); |
|
| 397 | 397 | } |
| 398 | 398 | if (isset($erreurs['message_erreur']) and $erreurs['message_erreur']) { |
| 399 | 399 | if (!isset($res['message_erreur'])) { $res['message_erreur'] = ''; |
| 400 | 400 | } |
| 401 | - $res['message_erreur'] = trim($res['message_erreur'] . ' ' . $erreurs['message_erreur']); |
|
| 401 | + $res['message_erreur'] = trim($res['message_erreur'].' '.$erreurs['message_erreur']); |
|
| 402 | 402 | } |
| 403 | 403 | } |
| 404 | 404 | |
@@ -425,7 +425,7 @@ discard block |
||
| 425 | 425 | |
| 426 | 426 | |
| 427 | 427 | function auteur_reset_password($id_auteur, $erreurs = []) { |
| 428 | - $auteur = sql_fetsel('*', 'spip_auteurs', 'id_auteur=' . intval($id_auteur)); |
|
| 428 | + $auteur = sql_fetsel('*', 'spip_auteurs', 'id_auteur='.intval($id_auteur)); |
|
| 429 | 429 | $config = auteurs_edit_config($auteur); |
| 430 | 430 | |
| 431 | 431 | if ($config['edit_pass']) { |
@@ -460,7 +460,7 @@ discard block |
||
| 460 | 460 | include_spip('action/editer_auteur'); |
| 461 | 461 | auteur_modifier($id_auteur, $set); |
| 462 | 462 | |
| 463 | - $row = sql_fetsel('*', 'spip_auteurs', 'id_auteur=' . intval($id_auteur)); |
|
| 463 | + $row = sql_fetsel('*', 'spip_auteurs', 'id_auteur='.intval($id_auteur)); |
|
| 464 | 464 | include_spip('inc/filtres'); |
| 465 | 465 | if ( |
| 466 | 466 | $notifier |
@@ -245,8 +245,7 @@ discard block |
||
| 245 | 245 | if (_request('login')) { |
| 246 | 246 | // on n'est jamais cense poster le name 'login' |
| 247 | 247 | $erreurs['login'] = _T('info_non_modifiable'); |
| 248 | - } |
|
| 249 | - elseif ( |
|
| 248 | + } elseif ( |
|
| 250 | 249 | ($login = _request('new_login')) and |
| 251 | 250 | $login !== sql_getfetsel('login', 'spip_auteurs', 'id_auteur=' . intval($id_auteur)) |
| 252 | 251 | ) { |
@@ -483,8 +482,7 @@ discard block |
||
| 483 | 482 | if (!isset($contexte['lang']) or !$contexte['lang']) { |
| 484 | 483 | if (isset($row['lang']) and $row['lang']) { |
| 485 | 484 | $contexte['lang'] = $row['lang']; |
| 486 | - } |
|
| 487 | - else { |
|
| 485 | + } else { |
|
| 488 | 486 | $contexte['lang'] = $GLOBALS['meta']['langue_site']; |
| 489 | 487 | } |
| 490 | 488 | } |
@@ -7,7 +7,7 @@ discard block |
||
| 7 | 7 | **/ |
| 8 | 8 | |
| 9 | 9 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 10 | - return; |
|
| 10 | + return; |
|
| 11 | 11 | } |
| 12 | 12 | |
| 13 | 13 | include_spip('inc/actions'); |
@@ -37,21 +37,21 @@ discard block |
||
| 37 | 37 | * Environnement du formulaire |
| 38 | 38 | **/ |
| 39 | 39 | function formulaires_editer_auteur_charger_dist( |
| 40 | - $id_auteur = 'new', |
|
| 41 | - $retour = '', |
|
| 42 | - $associer_objet = '', |
|
| 43 | - $config_fonc = 'auteurs_edit_config', |
|
| 44 | - $row = [], |
|
| 45 | - $hidden = '' |
|
| 40 | + $id_auteur = 'new', |
|
| 41 | + $retour = '', |
|
| 42 | + $associer_objet = '', |
|
| 43 | + $config_fonc = 'auteurs_edit_config', |
|
| 44 | + $row = [], |
|
| 45 | + $hidden = '' |
|
| 46 | 46 | ) { |
| 47 | - $valeurs = formulaires_editer_objet_charger('auteur', $id_auteur, 0, 0, $retour, $config_fonc, $row, $hidden); |
|
| 48 | - $valeurs['new_login'] = $valeurs['login']; |
|
| 47 | + $valeurs = formulaires_editer_objet_charger('auteur', $id_auteur, 0, 0, $retour, $config_fonc, $row, $hidden); |
|
| 48 | + $valeurs['new_login'] = $valeurs['login']; |
|
| 49 | 49 | |
| 50 | - if (!autoriser('modifier', 'auteur', intval($id_auteur))) { |
|
| 51 | - $valeurs['editable'] = ''; |
|
| 52 | - } |
|
| 50 | + if (!autoriser('modifier', 'auteur', intval($id_auteur))) { |
|
| 51 | + $valeurs['editable'] = ''; |
|
| 52 | + } |
|
| 53 | 53 | |
| 54 | - return $valeurs; |
|
| 54 | + return $valeurs; |
|
| 55 | 55 | } |
| 56 | 56 | |
| 57 | 57 | /** |
@@ -75,14 +75,14 @@ discard block |
||
| 75 | 75 | * Hash du formulaire |
| 76 | 76 | */ |
| 77 | 77 | function formulaires_editer_auteur_identifier_dist( |
| 78 | - $id_auteur = 'new', |
|
| 79 | - $retour = '', |
|
| 80 | - $associer_objet = '', |
|
| 81 | - $config_fonc = 'auteurs_edit_config', |
|
| 82 | - $row = [], |
|
| 83 | - $hidden = '' |
|
| 78 | + $id_auteur = 'new', |
|
| 79 | + $retour = '', |
|
| 80 | + $associer_objet = '', |
|
| 81 | + $config_fonc = 'auteurs_edit_config', |
|
| 82 | + $row = [], |
|
| 83 | + $hidden = '' |
|
| 84 | 84 | ) { |
| 85 | - return serialize([intval($id_auteur), $associer_objet]); |
|
| 85 | + return serialize([intval($id_auteur), $associer_objet]); |
|
| 86 | 86 | } |
| 87 | 87 | |
| 88 | 88 | |
@@ -96,27 +96,27 @@ discard block |
||
| 96 | 96 | */ |
| 97 | 97 | function auteurs_edit_config(array $row): array { |
| 98 | 98 | |
| 99 | - $config = []; |
|
| 100 | - $config['lignes'] = 8; |
|
| 101 | - $config['langue'] = $GLOBALS['spip_lang']; |
|
| 102 | - |
|
| 103 | - // pour instituer_auteur |
|
| 104 | - $config['auteur'] = $row; |
|
| 105 | - |
|
| 106 | - //$config['restreint'] = ($row['statut'] == 'publie'); |
|
| 107 | - $auth_methode = $row['source']; |
|
| 108 | - include_spip('inc/auth'); |
|
| 109 | - $config['edit_login'] = |
|
| 110 | - (auth_autoriser_modifier_login($auth_methode) |
|
| 111 | - and autoriser('modifier', 'auteur', $row['id_auteur'], null, ['login' => true]) |
|
| 112 | - // legacy : ne pas risquer d'autoriser la modif login si fonction d'autorisation pas mise a jour et ne teste que l'option email |
|
| 113 | - and autoriser('modifier', 'auteur', $row['id_auteur'], null, ['email' => true]) |
|
| 114 | - ); |
|
| 115 | - $config['edit_pass'] = |
|
| 116 | - (auth_autoriser_modifier_pass($auth_methode) |
|
| 117 | - and autoriser('modifier', 'auteur', $row['id_auteur'])); |
|
| 118 | - |
|
| 119 | - return $config; |
|
| 99 | + $config = []; |
|
| 100 | + $config['lignes'] = 8; |
|
| 101 | + $config['langue'] = $GLOBALS['spip_lang']; |
|
| 102 | + |
|
| 103 | + // pour instituer_auteur |
|
| 104 | + $config['auteur'] = $row; |
|
| 105 | + |
|
| 106 | + //$config['restreint'] = ($row['statut'] == 'publie'); |
|
| 107 | + $auth_methode = $row['source']; |
|
| 108 | + include_spip('inc/auth'); |
|
| 109 | + $config['edit_login'] = |
|
| 110 | + (auth_autoriser_modifier_login($auth_methode) |
|
| 111 | + and autoriser('modifier', 'auteur', $row['id_auteur'], null, ['login' => true]) |
|
| 112 | + // legacy : ne pas risquer d'autoriser la modif login si fonction d'autorisation pas mise a jour et ne teste que l'option email |
|
| 113 | + and autoriser('modifier', 'auteur', $row['id_auteur'], null, ['email' => true]) |
|
| 114 | + ); |
|
| 115 | + $config['edit_pass'] = |
|
| 116 | + (auth_autoriser_modifier_pass($auth_methode) |
|
| 117 | + and autoriser('modifier', 'auteur', $row['id_auteur'])); |
|
| 118 | + |
|
| 119 | + return $config; |
|
| 120 | 120 | } |
| 121 | 121 | |
| 122 | 122 | /** |
@@ -146,143 +146,143 @@ discard block |
||
| 146 | 146 | * Erreurs des saisies |
| 147 | 147 | **/ |
| 148 | 148 | function formulaires_editer_auteur_verifier_dist( |
| 149 | - $id_auteur = 'new', |
|
| 150 | - $retour = '', |
|
| 151 | - $associer_objet = '', |
|
| 152 | - $config_fonc = 'auteurs_edit_config', |
|
| 153 | - $row = [], |
|
| 154 | - $hidden = '' |
|
| 149 | + $id_auteur = 'new', |
|
| 150 | + $retour = '', |
|
| 151 | + $associer_objet = '', |
|
| 152 | + $config_fonc = 'auteurs_edit_config', |
|
| 153 | + $row = [], |
|
| 154 | + $hidden = '' |
|
| 155 | 155 | ) { |
| 156 | - // auto-renseigner le nom si il n'existe pas, sans couper |
|
| 157 | - titre_automatique('nom', ['email', 'login'], 255); |
|
| 158 | - |
|
| 159 | - $oblis = ['nom']; |
|
| 160 | - // si on veut renvoyer des identifiants il faut un email et un login |
|
| 161 | - if (_request('reset_password')) { |
|
| 162 | - $oblis[] = 'email'; |
|
| 163 | - $oblis[] = 'new_login'; |
|
| 164 | - } |
|
| 165 | - // mais il reste obligatoire si on a rien trouve |
|
| 166 | - $erreurs = formulaires_editer_objet_verifier('auteur', $id_auteur, $oblis); |
|
| 167 | - if (isset($erreurs['new_login'])) { |
|
| 168 | - $erreurs['login'] = $erreurs['new_login']; |
|
| 169 | - unset($erreurs['new_login']); |
|
| 170 | - } |
|
| 171 | - |
|
| 172 | - $auth_methode = sql_getfetsel('source', 'spip_auteurs', 'id_auteur=' . intval($id_auteur)); |
|
| 173 | - $auth_methode = ($auth_methode ?: 'spip'); |
|
| 174 | - include_spip('inc/auth'); |
|
| 175 | - |
|
| 176 | - if (!nom_acceptable(_request('nom'))) { |
|
| 177 | - $erreurs['nom'] = _T('info_nom_pas_conforme'); |
|
| 178 | - } |
|
| 179 | - |
|
| 180 | - if ($email = _request('email')) { |
|
| 181 | - include_spip('inc/filtres'); |
|
| 182 | - include_spip('inc/autoriser'); |
|
| 183 | - // un redacteur qui modifie son email n'a pas le droit de le vider si il y en avait un |
|
| 184 | - if ( |
|
| 185 | - !autoriser('modifier', 'auteur', $id_auteur, null, ['email' => '?']) |
|
| 186 | - and $GLOBALS['visiteur_session']['id_auteur'] == $id_auteur |
|
| 187 | - and !strlen(trim($email)) |
|
| 188 | - and $email != ($email_ancien = sql_getfetsel('email', 'spip_auteurs', 'id_auteur=' . intval($id_auteur))) |
|
| 189 | - ) { |
|
| 190 | - $erreurs['email'] = (($id_auteur == $GLOBALS['visiteur_session']['id_auteur']) ? _T('form_email_non_valide') : _T('form_prop_indiquer_email')); |
|
| 191 | - } else { |
|
| 192 | - if (!email_valide($email)) { |
|
| 193 | - $erreurs['email'] = (($id_auteur == $GLOBALS['visiteur_session']['id_auteur']) ? _T('form_email_non_valide') : _T('form_prop_indiquer_email')); |
|
| 194 | - } |
|
| 195 | - } |
|
| 196 | - # Ne pas autoriser d'avoir deux auteurs avec le même email |
|
| 197 | - # cette fonctionalité nécessite que la base soit clean à l'activation : pas de |
|
| 198 | - # doublon sur la requête select email,count(*) from spip_auteurs group by email ; |
|
| 199 | - if (defined('_INTERDIRE_AUTEUR_MEME_EMAIL')) { |
|
| 200 | - #Nouvel auteur |
|
| 201 | - if (intval($id_auteur) == 0) { |
|
| 202 | - #Un auteur existe deja avec cette adresse ? |
|
| 203 | - if (sql_countsel('spip_auteurs', 'email=' . sql_quote($email)) > 0) { |
|
| 204 | - $erreurs['email'] = _T('erreur_email_deja_existant'); |
|
| 205 | - } |
|
| 206 | - } else { |
|
| 207 | - #Un auteur existe deja avec cette adresse ? et n'est pas le user courant. |
|
| 208 | - if ( |
|
| 209 | - (sql_countsel( |
|
| 210 | - 'spip_auteurs', |
|
| 211 | - 'email=' . sql_quote($email) |
|
| 212 | - ) > 0) and ($id_auteur != ($id_auteur_ancien = sql_getfetsel( |
|
| 213 | - 'id_auteur', |
|
| 214 | - 'spip_auteurs', |
|
| 215 | - 'email=' . sql_quote($email) |
|
| 216 | - ))) |
|
| 217 | - ) { |
|
| 218 | - $erreurs['email'] = _T('erreur_email_deja_existant'); |
|
| 219 | - } |
|
| 220 | - } |
|
| 221 | - } |
|
| 222 | - } |
|
| 223 | - |
|
| 224 | - // quand c'est un auteur existant on fait le reset password ici |
|
| 225 | - if (!(is_countable($erreurs) ? count($erreurs) : 0) and _request('reset_password') and intval($id_auteur)) { |
|
| 226 | - $erreurs = auteur_reset_password($id_auteur, $erreurs); |
|
| 227 | - return $erreurs; |
|
| 228 | - } |
|
| 229 | - |
|
| 230 | - // corriger un cas si frequent : www.example.org sans le http:// qui precede |
|
| 231 | - if ($url = _request('url_site') and !tester_url_absolue($url)) { |
|
| 232 | - if (strpos($url, ':') === false and strncasecmp($url, 'www.', 4) === 0) { |
|
| 233 | - $url = 'http://' . $url; |
|
| 234 | - set_request('url_site', $url); |
|
| 235 | - } |
|
| 236 | - } |
|
| 237 | - // traiter les liens implicites avant de tester l'url |
|
| 238 | - include_spip('inc/lien'); |
|
| 239 | - if ($url = calculer_url(_request('url_site')) and !tester_url_absolue($url)) { |
|
| 240 | - $erreurs['url_site'] = _T('info_url_site_pas_conforme'); |
|
| 241 | - } |
|
| 242 | - |
|
| 243 | - $erreurs['message_erreur'] = ''; |
|
| 244 | - if (_request('login')) { |
|
| 245 | - // on n'est jamais cense poster le name 'login' |
|
| 246 | - $erreurs['login'] = _T('info_non_modifiable'); |
|
| 247 | - } |
|
| 248 | - elseif ( |
|
| 249 | - ($login = _request('new_login')) and |
|
| 250 | - $login !== sql_getfetsel('login', 'spip_auteurs', 'id_auteur=' . intval($id_auteur)) |
|
| 251 | - ) { |
|
| 252 | - // on verifie la meme chose que dans auteurs_edit_config() |
|
| 253 | - if ( |
|
| 254 | - ! auth_autoriser_modifier_login($auth_methode) |
|
| 255 | - or !autoriser('modifier', 'auteur', intval($id_auteur), null, ['login' => true]) |
|
| 256 | - // legacy : ne pas risquer d'autoriser la modif login si fonction d'autorisation pas mise a jour et ne teste que l'option email |
|
| 257 | - or !autoriser('modifier', 'auteur', intval($id_auteur), null, ['email' => true]) |
|
| 258 | - ) { |
|
| 259 | - $erreurs['login'] = _T('info_non_modifiable'); |
|
| 260 | - } |
|
| 261 | - } |
|
| 262 | - |
|
| 263 | - if (empty($erreurs['login'])) { |
|
| 264 | - if ($err = auth_verifier_login($auth_methode, _request('new_login'), $id_auteur)) { |
|
| 265 | - $erreurs['login'] = $err; |
|
| 266 | - $erreurs['message_erreur'] .= $err; |
|
| 267 | - } else { |
|
| 268 | - // pass trop court ou confirmation non identique |
|
| 269 | - if ($p = _request('new_pass')) { |
|
| 270 | - if ($p != _request('new_pass2')) { |
|
| 271 | - $erreurs['new_pass'] = _T('info_passes_identiques'); |
|
| 272 | - $erreurs['message_erreur'] .= _T('info_passes_identiques'); |
|
| 273 | - } elseif ($err = auth_verifier_pass($auth_methode, _request('new_login'), $p, $id_auteur)) { |
|
| 274 | - $erreurs['new_pass'] = $err; |
|
| 275 | - $erreurs['message_erreur'] .= $err; |
|
| 276 | - } |
|
| 277 | - } |
|
| 278 | - } |
|
| 279 | - } |
|
| 280 | - |
|
| 281 | - if (!$erreurs['message_erreur']) { |
|
| 282 | - unset($erreurs['message_erreur']); |
|
| 283 | - } |
|
| 284 | - |
|
| 285 | - return $erreurs; |
|
| 156 | + // auto-renseigner le nom si il n'existe pas, sans couper |
|
| 157 | + titre_automatique('nom', ['email', 'login'], 255); |
|
| 158 | + |
|
| 159 | + $oblis = ['nom']; |
|
| 160 | + // si on veut renvoyer des identifiants il faut un email et un login |
|
| 161 | + if (_request('reset_password')) { |
|
| 162 | + $oblis[] = 'email'; |
|
| 163 | + $oblis[] = 'new_login'; |
|
| 164 | + } |
|
| 165 | + // mais il reste obligatoire si on a rien trouve |
|
| 166 | + $erreurs = formulaires_editer_objet_verifier('auteur', $id_auteur, $oblis); |
|
| 167 | + if (isset($erreurs['new_login'])) { |
|
| 168 | + $erreurs['login'] = $erreurs['new_login']; |
|
| 169 | + unset($erreurs['new_login']); |
|
| 170 | + } |
|
| 171 | + |
|
| 172 | + $auth_methode = sql_getfetsel('source', 'spip_auteurs', 'id_auteur=' . intval($id_auteur)); |
|
| 173 | + $auth_methode = ($auth_methode ?: 'spip'); |
|
| 174 | + include_spip('inc/auth'); |
|
| 175 | + |
|
| 176 | + if (!nom_acceptable(_request('nom'))) { |
|
| 177 | + $erreurs['nom'] = _T('info_nom_pas_conforme'); |
|
| 178 | + } |
|
| 179 | + |
|
| 180 | + if ($email = _request('email')) { |
|
| 181 | + include_spip('inc/filtres'); |
|
| 182 | + include_spip('inc/autoriser'); |
|
| 183 | + // un redacteur qui modifie son email n'a pas le droit de le vider si il y en avait un |
|
| 184 | + if ( |
|
| 185 | + !autoriser('modifier', 'auteur', $id_auteur, null, ['email' => '?']) |
|
| 186 | + and $GLOBALS['visiteur_session']['id_auteur'] == $id_auteur |
|
| 187 | + and !strlen(trim($email)) |
|
| 188 | + and $email != ($email_ancien = sql_getfetsel('email', 'spip_auteurs', 'id_auteur=' . intval($id_auteur))) |
|
| 189 | + ) { |
|
| 190 | + $erreurs['email'] = (($id_auteur == $GLOBALS['visiteur_session']['id_auteur']) ? _T('form_email_non_valide') : _T('form_prop_indiquer_email')); |
|
| 191 | + } else { |
|
| 192 | + if (!email_valide($email)) { |
|
| 193 | + $erreurs['email'] = (($id_auteur == $GLOBALS['visiteur_session']['id_auteur']) ? _T('form_email_non_valide') : _T('form_prop_indiquer_email')); |
|
| 194 | + } |
|
| 195 | + } |
|
| 196 | + # Ne pas autoriser d'avoir deux auteurs avec le même email |
|
| 197 | + # cette fonctionalité nécessite que la base soit clean à l'activation : pas de |
|
| 198 | + # doublon sur la requête select email,count(*) from spip_auteurs group by email ; |
|
| 199 | + if (defined('_INTERDIRE_AUTEUR_MEME_EMAIL')) { |
|
| 200 | + #Nouvel auteur |
|
| 201 | + if (intval($id_auteur) == 0) { |
|
| 202 | + #Un auteur existe deja avec cette adresse ? |
|
| 203 | + if (sql_countsel('spip_auteurs', 'email=' . sql_quote($email)) > 0) { |
|
| 204 | + $erreurs['email'] = _T('erreur_email_deja_existant'); |
|
| 205 | + } |
|
| 206 | + } else { |
|
| 207 | + #Un auteur existe deja avec cette adresse ? et n'est pas le user courant. |
|
| 208 | + if ( |
|
| 209 | + (sql_countsel( |
|
| 210 | + 'spip_auteurs', |
|
| 211 | + 'email=' . sql_quote($email) |
|
| 212 | + ) > 0) and ($id_auteur != ($id_auteur_ancien = sql_getfetsel( |
|
| 213 | + 'id_auteur', |
|
| 214 | + 'spip_auteurs', |
|
| 215 | + 'email=' . sql_quote($email) |
|
| 216 | + ))) |
|
| 217 | + ) { |
|
| 218 | + $erreurs['email'] = _T('erreur_email_deja_existant'); |
|
| 219 | + } |
|
| 220 | + } |
|
| 221 | + } |
|
| 222 | + } |
|
| 223 | + |
|
| 224 | + // quand c'est un auteur existant on fait le reset password ici |
|
| 225 | + if (!(is_countable($erreurs) ? count($erreurs) : 0) and _request('reset_password') and intval($id_auteur)) { |
|
| 226 | + $erreurs = auteur_reset_password($id_auteur, $erreurs); |
|
| 227 | + return $erreurs; |
|
| 228 | + } |
|
| 229 | + |
|
| 230 | + // corriger un cas si frequent : www.example.org sans le http:// qui precede |
|
| 231 | + if ($url = _request('url_site') and !tester_url_absolue($url)) { |
|
| 232 | + if (strpos($url, ':') === false and strncasecmp($url, 'www.', 4) === 0) { |
|
| 233 | + $url = 'http://' . $url; |
|
| 234 | + set_request('url_site', $url); |
|
| 235 | + } |
|
| 236 | + } |
|
| 237 | + // traiter les liens implicites avant de tester l'url |
|
| 238 | + include_spip('inc/lien'); |
|
| 239 | + if ($url = calculer_url(_request('url_site')) and !tester_url_absolue($url)) { |
|
| 240 | + $erreurs['url_site'] = _T('info_url_site_pas_conforme'); |
|
| 241 | + } |
|
| 242 | + |
|
| 243 | + $erreurs['message_erreur'] = ''; |
|
| 244 | + if (_request('login')) { |
|
| 245 | + // on n'est jamais cense poster le name 'login' |
|
| 246 | + $erreurs['login'] = _T('info_non_modifiable'); |
|
| 247 | + } |
|
| 248 | + elseif ( |
|
| 249 | + ($login = _request('new_login')) and |
|
| 250 | + $login !== sql_getfetsel('login', 'spip_auteurs', 'id_auteur=' . intval($id_auteur)) |
|
| 251 | + ) { |
|
| 252 | + // on verifie la meme chose que dans auteurs_edit_config() |
|
| 253 | + if ( |
|
| 254 | + ! auth_autoriser_modifier_login($auth_methode) |
|
| 255 | + or !autoriser('modifier', 'auteur', intval($id_auteur), null, ['login' => true]) |
|
| 256 | + // legacy : ne pas risquer d'autoriser la modif login si fonction d'autorisation pas mise a jour et ne teste que l'option email |
|
| 257 | + or !autoriser('modifier', 'auteur', intval($id_auteur), null, ['email' => true]) |
|
| 258 | + ) { |
|
| 259 | + $erreurs['login'] = _T('info_non_modifiable'); |
|
| 260 | + } |
|
| 261 | + } |
|
| 262 | + |
|
| 263 | + if (empty($erreurs['login'])) { |
|
| 264 | + if ($err = auth_verifier_login($auth_methode, _request('new_login'), $id_auteur)) { |
|
| 265 | + $erreurs['login'] = $err; |
|
| 266 | + $erreurs['message_erreur'] .= $err; |
|
| 267 | + } else { |
|
| 268 | + // pass trop court ou confirmation non identique |
|
| 269 | + if ($p = _request('new_pass')) { |
|
| 270 | + if ($p != _request('new_pass2')) { |
|
| 271 | + $erreurs['new_pass'] = _T('info_passes_identiques'); |
|
| 272 | + $erreurs['message_erreur'] .= _T('info_passes_identiques'); |
|
| 273 | + } elseif ($err = auth_verifier_pass($auth_methode, _request('new_login'), $p, $id_auteur)) { |
|
| 274 | + $erreurs['new_pass'] = $err; |
|
| 275 | + $erreurs['message_erreur'] .= $err; |
|
| 276 | + } |
|
| 277 | + } |
|
| 278 | + } |
|
| 279 | + } |
|
| 280 | + |
|
| 281 | + if (!$erreurs['message_erreur']) { |
|
| 282 | + unset($erreurs['message_erreur']); |
|
| 283 | + } |
|
| 284 | + |
|
| 285 | + return $erreurs; |
|
| 286 | 286 | } |
| 287 | 287 | |
| 288 | 288 | |
@@ -319,128 +319,128 @@ discard block |
||
| 319 | 319 | * Retour des traitements |
| 320 | 320 | **/ |
| 321 | 321 | function formulaires_editer_auteur_traiter_dist( |
| 322 | - $id_auteur = 'new', |
|
| 323 | - $retour = '', |
|
| 324 | - $associer_objet = '', |
|
| 325 | - $config_fonc = 'auteurs_edit_config', |
|
| 326 | - $row = [], |
|
| 327 | - $hidden = '' |
|
| 322 | + $id_auteur = 'new', |
|
| 323 | + $retour = '', |
|
| 324 | + $associer_objet = '', |
|
| 325 | + $config_fonc = 'auteurs_edit_config', |
|
| 326 | + $row = [], |
|
| 327 | + $hidden = '' |
|
| 328 | 328 | ) { |
| 329 | - $id_objet = null; |
|
| 330 | - if (_request('saisie_webmestre') or _request('webmestre')) { |
|
| 331 | - set_request('webmestre', _request('webmestre') ?: 'non'); |
|
| 332 | - } |
|
| 333 | - $retour = parametre_url($retour, 'email_confirm', ''); |
|
| 334 | - |
|
| 335 | - if ($restreintes = _request('restreintes')) { |
|
| 336 | - foreach ($restreintes as $k => $v) { |
|
| 337 | - if (strpos($v, 'rubrique|') === 0) { |
|
| 338 | - $restreintes[$k] = substr($v, 9); |
|
| 339 | - } |
|
| 340 | - } |
|
| 341 | - set_request('restreintes', $restreintes); |
|
| 342 | - } |
|
| 343 | - |
|
| 344 | - set_request( |
|
| 345 | - 'email', |
|
| 346 | - email_valide(_request('email')) |
|
| 347 | - ); // eviter d'enregistrer les cas qui sont acceptés par email_valide dans le verifier : |
|
| 348 | - // "[email protected] " ou encore "Marie Toto <[email protected]>" |
|
| 349 | - |
|
| 350 | - include_spip('inc/autoriser'); |
|
| 351 | - if (!autoriser('modifier', 'auteur', $id_auteur, null, ['email' => '?'])) { |
|
| 352 | - $email_nouveau = _request('email'); |
|
| 353 | - set_request('email'); // vider la saisie car l'auteur n'a pas le droit de modifier cet email |
|
| 354 | - // mais si c'est son propre profil on lui envoie un email à l'adresse qu'il a indique |
|
| 355 | - // pour qu'il confirme qu'il possede bien cette adresse |
|
| 356 | - // son clic sur l'url du message permettre de confirmer le changement |
|
| 357 | - // et de revenir sur son profil |
|
| 358 | - if ( |
|
| 359 | - $GLOBALS['visiteur_session']['id_auteur'] == $id_auteur |
|
| 360 | - and $email_nouveau != |
|
| 361 | - ($email_ancien = sql_getfetsel('email', 'spip_auteurs', 'id_auteur=' . intval($id_auteur))) |
|
| 362 | - ) { |
|
| 363 | - $envoyer_mail = charger_fonction('envoyer_mail', 'inc'); |
|
| 364 | - $texte = _T( |
|
| 365 | - 'form_auteur_mail_confirmation', |
|
| 366 | - [ |
|
| 367 | - 'url' => generer_action_auteur( |
|
| 368 | - 'confirmer_email', |
|
| 369 | - $email_nouveau, |
|
| 370 | - parametre_url($retour, 'email_modif', 'ok') |
|
| 371 | - ) |
|
| 372 | - ] |
|
| 373 | - ); |
|
| 374 | - $envoyer_mail($email_nouveau, _T('form_auteur_confirmation'), $texte); |
|
| 375 | - set_request('email_confirm', $email_nouveau); |
|
| 376 | - if ($email_ancien) { |
|
| 377 | - $envoyer_mail( |
|
| 378 | - $email_ancien, |
|
| 379 | - _T('form_auteur_confirmation'), |
|
| 380 | - _T('form_auteur_envoi_mail_confirmation', ['email' => $email_nouveau]) |
|
| 381 | - ); |
|
| 382 | - } |
|
| 383 | - $retour = parametre_url($retour, 'email_confirm', $email_nouveau); |
|
| 384 | - } |
|
| 385 | - } |
|
| 386 | - |
|
| 387 | - $res = formulaires_editer_objet_traiter('auteur', $id_auteur, 0, 0, $retour, $config_fonc, $row, $hidden); |
|
| 388 | - |
|
| 389 | - if (_request('reset_password') and !intval($id_auteur) and intval($res['id_auteur'])) { |
|
| 390 | - $erreurs = []; |
|
| 391 | - $erreurs = auteur_reset_password($res['id_auteur'], $erreurs); |
|
| 392 | - if (isset($erreurs['message_ok'])) { |
|
| 393 | - if (!isset($res['message_ok'])) { $res['message_ok'] = ''; |
|
| 394 | - } |
|
| 395 | - $res['message_ok'] = trim($res['message_ok'] . ' ' . $erreurs['message_ok']); |
|
| 396 | - } |
|
| 397 | - if (isset($erreurs['message_erreur']) and $erreurs['message_erreur']) { |
|
| 398 | - if (!isset($res['message_erreur'])) { $res['message_erreur'] = ''; |
|
| 399 | - } |
|
| 400 | - $res['message_erreur'] = trim($res['message_erreur'] . ' ' . $erreurs['message_erreur']); |
|
| 401 | - } |
|
| 402 | - } |
|
| 403 | - |
|
| 404 | - // Un lien auteur a prendre en compte ? |
|
| 405 | - if ($associer_objet and $id_auteur = $res['id_auteur']) { |
|
| 406 | - $objet = ''; |
|
| 407 | - if (intval($associer_objet)) { |
|
| 408 | - $objet = 'article'; |
|
| 409 | - $id_objet = intval($associer_objet); |
|
| 410 | - } elseif (preg_match(',^\w+\|[0-9]+$,', $associer_objet)) { |
|
| 411 | - [$objet, $id_objet] = explode('|', $associer_objet); |
|
| 412 | - } |
|
| 413 | - if ($objet and $id_objet and autoriser('modifier', $objet, $id_objet)) { |
|
| 414 | - include_spip('action/editer_auteur'); |
|
| 415 | - auteur_associer($id_auteur, [$objet => $id_objet]); |
|
| 416 | - if (isset($res['redirect'])) { |
|
| 417 | - $res['redirect'] = parametre_url($res['redirect'], 'id_lien_ajoute', $id_auteur, '&'); |
|
| 418 | - } |
|
| 419 | - } |
|
| 420 | - } |
|
| 421 | - |
|
| 422 | - return $res; |
|
| 329 | + $id_objet = null; |
|
| 330 | + if (_request('saisie_webmestre') or _request('webmestre')) { |
|
| 331 | + set_request('webmestre', _request('webmestre') ?: 'non'); |
|
| 332 | + } |
|
| 333 | + $retour = parametre_url($retour, 'email_confirm', ''); |
|
| 334 | + |
|
| 335 | + if ($restreintes = _request('restreintes')) { |
|
| 336 | + foreach ($restreintes as $k => $v) { |
|
| 337 | + if (strpos($v, 'rubrique|') === 0) { |
|
| 338 | + $restreintes[$k] = substr($v, 9); |
|
| 339 | + } |
|
| 340 | + } |
|
| 341 | + set_request('restreintes', $restreintes); |
|
| 342 | + } |
|
| 343 | + |
|
| 344 | + set_request( |
|
| 345 | + 'email', |
|
| 346 | + email_valide(_request('email')) |
|
| 347 | + ); // eviter d'enregistrer les cas qui sont acceptés par email_valide dans le verifier : |
|
| 348 | + // "[email protected] " ou encore "Marie Toto <[email protected]>" |
|
| 349 | + |
|
| 350 | + include_spip('inc/autoriser'); |
|
| 351 | + if (!autoriser('modifier', 'auteur', $id_auteur, null, ['email' => '?'])) { |
|
| 352 | + $email_nouveau = _request('email'); |
|
| 353 | + set_request('email'); // vider la saisie car l'auteur n'a pas le droit de modifier cet email |
|
| 354 | + // mais si c'est son propre profil on lui envoie un email à l'adresse qu'il a indique |
|
| 355 | + // pour qu'il confirme qu'il possede bien cette adresse |
|
| 356 | + // son clic sur l'url du message permettre de confirmer le changement |
|
| 357 | + // et de revenir sur son profil |
|
| 358 | + if ( |
|
| 359 | + $GLOBALS['visiteur_session']['id_auteur'] == $id_auteur |
|
| 360 | + and $email_nouveau != |
|
| 361 | + ($email_ancien = sql_getfetsel('email', 'spip_auteurs', 'id_auteur=' . intval($id_auteur))) |
|
| 362 | + ) { |
|
| 363 | + $envoyer_mail = charger_fonction('envoyer_mail', 'inc'); |
|
| 364 | + $texte = _T( |
|
| 365 | + 'form_auteur_mail_confirmation', |
|
| 366 | + [ |
|
| 367 | + 'url' => generer_action_auteur( |
|
| 368 | + 'confirmer_email', |
|
| 369 | + $email_nouveau, |
|
| 370 | + parametre_url($retour, 'email_modif', 'ok') |
|
| 371 | + ) |
|
| 372 | + ] |
|
| 373 | + ); |
|
| 374 | + $envoyer_mail($email_nouveau, _T('form_auteur_confirmation'), $texte); |
|
| 375 | + set_request('email_confirm', $email_nouveau); |
|
| 376 | + if ($email_ancien) { |
|
| 377 | + $envoyer_mail( |
|
| 378 | + $email_ancien, |
|
| 379 | + _T('form_auteur_confirmation'), |
|
| 380 | + _T('form_auteur_envoi_mail_confirmation', ['email' => $email_nouveau]) |
|
| 381 | + ); |
|
| 382 | + } |
|
| 383 | + $retour = parametre_url($retour, 'email_confirm', $email_nouveau); |
|
| 384 | + } |
|
| 385 | + } |
|
| 386 | + |
|
| 387 | + $res = formulaires_editer_objet_traiter('auteur', $id_auteur, 0, 0, $retour, $config_fonc, $row, $hidden); |
|
| 388 | + |
|
| 389 | + if (_request('reset_password') and !intval($id_auteur) and intval($res['id_auteur'])) { |
|
| 390 | + $erreurs = []; |
|
| 391 | + $erreurs = auteur_reset_password($res['id_auteur'], $erreurs); |
|
| 392 | + if (isset($erreurs['message_ok'])) { |
|
| 393 | + if (!isset($res['message_ok'])) { $res['message_ok'] = ''; |
|
| 394 | + } |
|
| 395 | + $res['message_ok'] = trim($res['message_ok'] . ' ' . $erreurs['message_ok']); |
|
| 396 | + } |
|
| 397 | + if (isset($erreurs['message_erreur']) and $erreurs['message_erreur']) { |
|
| 398 | + if (!isset($res['message_erreur'])) { $res['message_erreur'] = ''; |
|
| 399 | + } |
|
| 400 | + $res['message_erreur'] = trim($res['message_erreur'] . ' ' . $erreurs['message_erreur']); |
|
| 401 | + } |
|
| 402 | + } |
|
| 403 | + |
|
| 404 | + // Un lien auteur a prendre en compte ? |
|
| 405 | + if ($associer_objet and $id_auteur = $res['id_auteur']) { |
|
| 406 | + $objet = ''; |
|
| 407 | + if (intval($associer_objet)) { |
|
| 408 | + $objet = 'article'; |
|
| 409 | + $id_objet = intval($associer_objet); |
|
| 410 | + } elseif (preg_match(',^\w+\|[0-9]+$,', $associer_objet)) { |
|
| 411 | + [$objet, $id_objet] = explode('|', $associer_objet); |
|
| 412 | + } |
|
| 413 | + if ($objet and $id_objet and autoriser('modifier', $objet, $id_objet)) { |
|
| 414 | + include_spip('action/editer_auteur'); |
|
| 415 | + auteur_associer($id_auteur, [$objet => $id_objet]); |
|
| 416 | + if (isset($res['redirect'])) { |
|
| 417 | + $res['redirect'] = parametre_url($res['redirect'], 'id_lien_ajoute', $id_auteur, '&'); |
|
| 418 | + } |
|
| 419 | + } |
|
| 420 | + } |
|
| 421 | + |
|
| 422 | + return $res; |
|
| 423 | 423 | } |
| 424 | 424 | |
| 425 | 425 | |
| 426 | 426 | function auteur_reset_password($id_auteur, $erreurs = []) { |
| 427 | - $auteur = sql_fetsel('*', 'spip_auteurs', 'id_auteur=' . intval($id_auteur)); |
|
| 428 | - $config = auteurs_edit_config($auteur); |
|
| 429 | - |
|
| 430 | - if ($config['edit_pass']) { |
|
| 431 | - if ($email = auteur_regenerer_identifiants($id_auteur)) { |
|
| 432 | - $erreurs['message_ok'] = _T('message_nouveaux_identifiants_ok', ['email' => $email]); |
|
| 433 | - $erreurs['message_erreur'] = ''; |
|
| 434 | - } elseif ($email === false) { |
|
| 435 | - $erreurs['message_erreur'] = _T('message_nouveaux_identifiants_echec_envoi'); |
|
| 436 | - } else { |
|
| 437 | - $erreurs['message_erreur'] = _T('message_nouveaux_identifiants_echec'); |
|
| 438 | - } |
|
| 439 | - } else { |
|
| 440 | - $erreurs['message_erreur'] = _T('message_nouveaux_identifiants_echec'); |
|
| 441 | - } |
|
| 442 | - |
|
| 443 | - return $erreurs; |
|
| 427 | + $auteur = sql_fetsel('*', 'spip_auteurs', 'id_auteur=' . intval($id_auteur)); |
|
| 428 | + $config = auteurs_edit_config($auteur); |
|
| 429 | + |
|
| 430 | + if ($config['edit_pass']) { |
|
| 431 | + if ($email = auteur_regenerer_identifiants($id_auteur)) { |
|
| 432 | + $erreurs['message_ok'] = _T('message_nouveaux_identifiants_ok', ['email' => $email]); |
|
| 433 | + $erreurs['message_erreur'] = ''; |
|
| 434 | + } elseif ($email === false) { |
|
| 435 | + $erreurs['message_erreur'] = _T('message_nouveaux_identifiants_echec_envoi'); |
|
| 436 | + } else { |
|
| 437 | + $erreurs['message_erreur'] = _T('message_nouveaux_identifiants_echec'); |
|
| 438 | + } |
|
| 439 | + } else { |
|
| 440 | + $erreurs['message_erreur'] = _T('message_nouveaux_identifiants_echec'); |
|
| 441 | + } |
|
| 442 | + |
|
| 443 | + return $erreurs; |
|
| 444 | 444 | } |
| 445 | 445 | |
| 446 | 446 | /** |
@@ -451,53 +451,53 @@ discard block |
||
| 451 | 451 | * @return string |
| 452 | 452 | */ |
| 453 | 453 | function auteur_regenerer_identifiants($id_auteur, $notifier = true, $contexte = []) { |
| 454 | - if ($id_auteur) { |
|
| 455 | - $set = []; |
|
| 456 | - include_spip('inc/access'); |
|
| 457 | - $set['pass'] = creer_pass_aleatoire(max(_PASS_LONGUEUR_MINI, 16)); |
|
| 458 | - |
|
| 459 | - include_spip('action/editer_auteur'); |
|
| 460 | - auteur_modifier($id_auteur, $set); |
|
| 461 | - |
|
| 462 | - $row = sql_fetsel('*', 'spip_auteurs', 'id_auteur=' . intval($id_auteur)); |
|
| 463 | - include_spip('inc/filtres'); |
|
| 464 | - if ( |
|
| 465 | - $notifier |
|
| 466 | - and $row['email'] |
|
| 467 | - and email_valide($row['email']) |
|
| 468 | - and trouver_fond($fond = 'modeles/mail_nouveaux_identifiants') |
|
| 469 | - ) { |
|
| 470 | - // envoyer l'email avec login/pass |
|
| 471 | - $c = [ |
|
| 472 | - 'id_auteur' => $id_auteur, |
|
| 473 | - 'nom' => $row['nom'], |
|
| 474 | - 'mode' => $row['statut'], |
|
| 475 | - 'email' => $row['email'], |
|
| 476 | - 'pass' => $set['pass'], |
|
| 477 | - ]; |
|
| 478 | - // on merge avec les champs fournit en appel, qui sont passes au modele de notification donc |
|
| 479 | - $contexte = array_merge($contexte, $c); |
|
| 480 | - // si pas de langue explicitement demandee, prendre celle de l'auteur si on la connait, ou a defaut celle du site |
|
| 481 | - // plutot que celle de l'admin qui vient de cliquer sur le bouton |
|
| 482 | - if (!isset($contexte['lang']) or !$contexte['lang']) { |
|
| 483 | - if (isset($row['lang']) and $row['lang']) { |
|
| 484 | - $contexte['lang'] = $row['lang']; |
|
| 485 | - } |
|
| 486 | - else { |
|
| 487 | - $contexte['lang'] = $GLOBALS['meta']['langue_site']; |
|
| 488 | - } |
|
| 489 | - } |
|
| 490 | - lang_select($contexte['lang']); |
|
| 491 | - $message = recuperer_fond($fond, $contexte); |
|
| 492 | - include_spip('inc/notifications'); |
|
| 493 | - notifications_envoyer_mails($row['email'], $message); |
|
| 494 | - lang_select(); |
|
| 495 | - |
|
| 496 | - return $row['email']; |
|
| 497 | - } |
|
| 498 | - |
|
| 499 | - return false; |
|
| 500 | - } |
|
| 501 | - |
|
| 502 | - return ''; |
|
| 454 | + if ($id_auteur) { |
|
| 455 | + $set = []; |
|
| 456 | + include_spip('inc/access'); |
|
| 457 | + $set['pass'] = creer_pass_aleatoire(max(_PASS_LONGUEUR_MINI, 16)); |
|
| 458 | + |
|
| 459 | + include_spip('action/editer_auteur'); |
|
| 460 | + auteur_modifier($id_auteur, $set); |
|
| 461 | + |
|
| 462 | + $row = sql_fetsel('*', 'spip_auteurs', 'id_auteur=' . intval($id_auteur)); |
|
| 463 | + include_spip('inc/filtres'); |
|
| 464 | + if ( |
|
| 465 | + $notifier |
|
| 466 | + and $row['email'] |
|
| 467 | + and email_valide($row['email']) |
|
| 468 | + and trouver_fond($fond = 'modeles/mail_nouveaux_identifiants') |
|
| 469 | + ) { |
|
| 470 | + // envoyer l'email avec login/pass |
|
| 471 | + $c = [ |
|
| 472 | + 'id_auteur' => $id_auteur, |
|
| 473 | + 'nom' => $row['nom'], |
|
| 474 | + 'mode' => $row['statut'], |
|
| 475 | + 'email' => $row['email'], |
|
| 476 | + 'pass' => $set['pass'], |
|
| 477 | + ]; |
|
| 478 | + // on merge avec les champs fournit en appel, qui sont passes au modele de notification donc |
|
| 479 | + $contexte = array_merge($contexte, $c); |
|
| 480 | + // si pas de langue explicitement demandee, prendre celle de l'auteur si on la connait, ou a defaut celle du site |
|
| 481 | + // plutot que celle de l'admin qui vient de cliquer sur le bouton |
|
| 482 | + if (!isset($contexte['lang']) or !$contexte['lang']) { |
|
| 483 | + if (isset($row['lang']) and $row['lang']) { |
|
| 484 | + $contexte['lang'] = $row['lang']; |
|
| 485 | + } |
|
| 486 | + else { |
|
| 487 | + $contexte['lang'] = $GLOBALS['meta']['langue_site']; |
|
| 488 | + } |
|
| 489 | + } |
|
| 490 | + lang_select($contexte['lang']); |
|
| 491 | + $message = recuperer_fond($fond, $contexte); |
|
| 492 | + include_spip('inc/notifications'); |
|
| 493 | + notifications_envoyer_mails($row['email'], $message); |
|
| 494 | + lang_select(); |
|
| 495 | + |
|
| 496 | + return $row['email']; |
|
| 497 | + } |
|
| 498 | + |
|
| 499 | + return false; |
|
| 500 | + } |
|
| 501 | + |
|
| 502 | + return ''; |
|
| 503 | 503 | } |
@@ -114,7 +114,7 @@ discard block |
||
| 114 | 114 | if ($objet == 'rubrique') { |
| 115 | 115 | // si c'est une rubrique-secteur contenant des breves, demander la |
| 116 | 116 | // confirmation du deplacement |
| 117 | - $contient_breves = sql_countsel('spip_breves', 'id_rubrique=' . intval($id_objet)); |
|
| 117 | + $contient_breves = sql_countsel('spip_breves', 'id_rubrique='.intval($id_objet)); |
|
| 118 | 118 | |
| 119 | 119 | if ($contient_breves > 0) { |
| 120 | 120 | $scb = ($contient_breves > 1 ? 's' : ''); |
@@ -127,7 +127,7 @@ discard block |
||
| 127 | 127 | ); |
| 128 | 128 | $confirm .= "\n<div class='confirmer_deplacement verdana2'>" |
| 129 | 129 | . "<div class='choix'><input type='checkbox' name='confirme_deplace' value='oui' id='confirme-deplace' /><label for='confirme-deplace'>" |
| 130 | - . $scb . |
|
| 130 | + . $scb. |
|
| 131 | 131 | "</label></div></div>\n"; |
| 132 | 132 | } else { |
| 133 | 133 | $confirm .= "<input type='hidden' name='confirme_deplace' value='oui' />\n"; |
@@ -136,11 +136,11 @@ discard block |
||
| 136 | 136 | $form .= $confirm; |
| 137 | 137 | if ($actionable) { |
| 138 | 138 | if (strpos($form, '<select') !== false) { |
| 139 | - $form .= "<div style='text-align: " . $GLOBALS['spip_lang_right'] . ";'>" |
|
| 140 | - . '<input class="fondo submit btn" type="submit" value="' . _T('bouton_choisir') . '"/>' |
|
| 139 | + $form .= "<div style='text-align: ".$GLOBALS['spip_lang_right'].";'>" |
|
| 140 | + . '<input class="fondo submit btn" type="submit" value="'._T('bouton_choisir').'"/>' |
|
| 141 | 141 | . '</div>'; |
| 142 | 142 | } |
| 143 | - $form = "<input type='hidden' name='editer_$objet' value='oui' />\n" . $form; |
|
| 143 | + $form = "<input type='hidden' name='editer_$objet' value='oui' />\n".$form; |
|
| 144 | 144 | if ($action = charger_fonction("editer_$objet", 'action', true)) { |
| 145 | 145 | $form = generer_action_auteur( |
| 146 | 146 | "editer_$objet", |
@@ -166,7 +166,7 @@ discard block |
||
| 166 | 166 | |
| 167 | 167 | include_spip('inc/presentation'); |
| 168 | 168 | |
| 169 | - return debut_cadre_couleur($logo, true, '', $titre) . $form . fin_cadre_couleur(); |
|
| 169 | + return debut_cadre_couleur($logo, true, '', $titre).$form.fin_cadre_couleur(); |
|
| 170 | 170 | } |
| 171 | 171 | |
| 172 | 172 | |
@@ -242,7 +242,7 @@ discard block |
||
| 242 | 242 | if ($statut == 'nouveau') { |
| 243 | 243 | if ($attente) { |
| 244 | 244 | $statut = $attente; |
| 245 | - $plus = ' (' . _T('info_statut_auteur_a_confirmer') . ')'; |
|
| 245 | + $plus = ' ('._T('info_statut_auteur_a_confirmer').')'; |
|
| 246 | 246 | } else { |
| 247 | 247 | return _T('info_statut_auteur_a_confirmer'); |
| 248 | 248 | } |
@@ -255,16 +255,16 @@ discard block |
||
| 255 | 255 | '5poubelle' => _T('texte_statut_poubelle'), // bouh |
| 256 | 256 | ]; |
| 257 | 257 | if (isset($recom[$statut])) { |
| 258 | - return $recom[$statut] . $plus; |
|
| 258 | + return $recom[$statut].$plus; |
|
| 259 | 259 | } |
| 260 | 260 | |
| 261 | 261 | // retrouver directement par le statut sinon |
| 262 | 262 | if ($t = array_search($statut, $GLOBALS['liste_des_statuts'])) { |
| 263 | 263 | if (isset($recom[$t])) { |
| 264 | - return $recom[$t] . $plus; |
|
| 264 | + return $recom[$t].$plus; |
|
| 265 | 265 | } |
| 266 | 266 | |
| 267 | - return _T($t) . $plus; |
|
| 267 | + return _T($t).$plus; |
|
| 268 | 268 | } |
| 269 | 269 | |
| 270 | 270 | // si on a pas reussi a le traduire, retournons la chaine telle quelle |
@@ -388,7 +388,7 @@ discard block |
||
| 388 | 388 | if (!$id_rubrique and defined('_CHOIX_RUBRIQUE_PAR_DEFAUT') and _CHOIX_RUBRIQUE_PAR_DEFAUT) { |
| 389 | 389 | $in = !(is_countable($GLOBALS['connect_id_rubrique']) ? count($GLOBALS['connect_id_rubrique']) : 0) |
| 390 | 390 | ? '' |
| 391 | - : (' AND ' . sql_in('id_rubrique', $GLOBALS['connect_id_rubrique'])); |
|
| 391 | + : (' AND '.sql_in('id_rubrique', $GLOBALS['connect_id_rubrique'])); |
|
| 392 | 392 | |
| 393 | 393 | // on tente d'abord l'ecriture a la racine dans le cas des rubriques uniquement |
| 394 | 394 | if ($objet == 'rubrique') { |
@@ -422,7 +422,7 @@ discard block |
||
| 422 | 422 | return ''; |
| 423 | 423 | } |
| 424 | 424 | |
| 425 | - return propre('[->' . $virtuel . ']'); |
|
| 425 | + return propre('[->'.$virtuel.']'); |
|
| 426 | 426 | } |
| 427 | 427 | |
| 428 | 428 | |
@@ -449,7 +449,7 @@ discard block |
||
| 449 | 449 | $clic = http_img_pack('rss-16.png', 'RSS', '', $title); |
| 450 | 450 | |
| 451 | 451 | $url = generer_url_api_low_sec('transmettre', 'rss', $op, '', http_build_query($args), false, true); |
| 452 | - return "<a style='float: " . $GLOBALS['spip_lang_right'] . ";' href='$url'>$clic</a>"; |
|
| 452 | + return "<a style='float: ".$GLOBALS['spip_lang_right'].";' href='$url'>$clic</a>"; |
|
| 453 | 453 | } |
| 454 | 454 | |
| 455 | 455 | |
@@ -525,7 +525,7 @@ discard block |
||
| 525 | 525 | ); |
| 526 | 526 | |
| 527 | 527 | if ($alertes = array_filter($alertes)) { |
| 528 | - return "<div class='wrap-messages-alertes'><div class='messages-alertes'>" . |
|
| 528 | + return "<div class='wrap-messages-alertes'><div class='messages-alertes'>". |
|
| 529 | 529 | join(' | ', $alertes) |
| 530 | 530 | . '</div></div>'; |
| 531 | 531 | } |
@@ -559,13 +559,13 @@ discard block |
||
| 559 | 559 | */ |
| 560 | 560 | function afficher_plus_info($lien, $titre = '+', $titre_lien = '') { |
| 561 | 561 | $titre = attribut_html($titre); |
| 562 | - $icone = "\n<a href='$lien' title='$titre' class='plus_info'>" . |
|
| 563 | - http_img_pack('information-16.png', $titre) . '</a>'; |
|
| 562 | + $icone = "\n<a href='$lien' title='$titre' class='plus_info'>". |
|
| 563 | + http_img_pack('information-16.png', $titre).'</a>'; |
|
| 564 | 564 | |
| 565 | 565 | if (!$titre_lien) { |
| 566 | 566 | return $icone; |
| 567 | 567 | } else { |
| 568 | - return $icone . "\n<a href='$lien'>$titre_lien</a>"; |
|
| 568 | + return $icone."\n<a href='$lien'>$titre_lien</a>"; |
|
| 569 | 569 | } |
| 570 | 570 | } |
| 571 | 571 | |
@@ -16,7 +16,7 @@ discard block |
||
| 16 | 16 | * @package SPIP\Core\Filtres |
| 17 | 17 | */ |
| 18 | 18 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 19 | - return; |
|
| 19 | + return; |
|
| 20 | 20 | } |
| 21 | 21 | |
| 22 | 22 | include_spip('inc/filtres_boites'); |
@@ -41,25 +41,25 @@ discard block |
||
| 41 | 41 | */ |
| 42 | 42 | function parametres_css_prive() { |
| 43 | 43 | |
| 44 | - $args = []; |
|
| 45 | - $args['v'] = $GLOBALS['spip_version_code']; |
|
| 46 | - $args['p'] = substr(md5($GLOBALS['meta']['plugin']), 0, 4); |
|
| 47 | - $args['themes'] = implode(',', lister_themes_prives()); |
|
| 48 | - $args['ltr'] = $GLOBALS['spip_lang_left']; |
|
| 49 | - // un md5 des menus : si un menu change il faut maj la css |
|
| 50 | - $args['md5b'] = (function_exists('md5_boutons_plugins') ? md5_boutons_plugins() : ''); |
|
| 44 | + $args = []; |
|
| 45 | + $args['v'] = $GLOBALS['spip_version_code']; |
|
| 46 | + $args['p'] = substr(md5($GLOBALS['meta']['plugin']), 0, 4); |
|
| 47 | + $args['themes'] = implode(',', lister_themes_prives()); |
|
| 48 | + $args['ltr'] = $GLOBALS['spip_lang_left']; |
|
| 49 | + // un md5 des menus : si un menu change il faut maj la css |
|
| 50 | + $args['md5b'] = (function_exists('md5_boutons_plugins') ? md5_boutons_plugins() : ''); |
|
| 51 | 51 | |
| 52 | - $c = $GLOBALS['visiteur_session']['prefs']['couleur'] ?? 2; |
|
| 52 | + $c = $GLOBALS['visiteur_session']['prefs']['couleur'] ?? 2; |
|
| 53 | 53 | |
| 54 | - $couleurs = charger_fonction('couleurs', 'inc'); |
|
| 55 | - parse_str($couleurs($c), $c); |
|
| 56 | - $args = array_merge($args, $c); |
|
| 54 | + $couleurs = charger_fonction('couleurs', 'inc'); |
|
| 55 | + parse_str($couleurs($c), $c); |
|
| 56 | + $args = array_merge($args, $c); |
|
| 57 | 57 | |
| 58 | - if (_request('var_mode') == 'recalcul' or (defined('_VAR_MODE') and _VAR_MODE == 'recalcul')) { |
|
| 59 | - $args['var_mode'] = 'recalcul'; |
|
| 60 | - } |
|
| 58 | + if (_request('var_mode') == 'recalcul' or (defined('_VAR_MODE') and _VAR_MODE == 'recalcul')) { |
|
| 59 | + $args['var_mode'] = 'recalcul'; |
|
| 60 | + } |
|
| 61 | 61 | |
| 62 | - return http_build_query($args); |
|
| 62 | + return http_build_query($args); |
|
| 63 | 63 | } |
| 64 | 64 | |
| 65 | 65 | |
@@ -82,91 +82,91 @@ discard block |
||
| 82 | 82 | * @return string |
| 83 | 83 | */ |
| 84 | 84 | function chercher_rubrique( |
| 85 | - $titre, |
|
| 86 | - $id_objet, |
|
| 87 | - $id_parent, |
|
| 88 | - $objet, |
|
| 89 | - $id_secteur, |
|
| 90 | - $restreint, |
|
| 91 | - $actionable = false, |
|
| 92 | - $retour_sans_cadre = false |
|
| 85 | + $titre, |
|
| 86 | + $id_objet, |
|
| 87 | + $id_parent, |
|
| 88 | + $objet, |
|
| 89 | + $id_secteur, |
|
| 90 | + $restreint, |
|
| 91 | + $actionable = false, |
|
| 92 | + $retour_sans_cadre = false |
|
| 93 | 93 | ) { |
| 94 | 94 | |
| 95 | - include_spip('inc/autoriser'); |
|
| 96 | - if (intval($id_objet) && !autoriser('modifier', $objet, $id_objet)) { |
|
| 97 | - return ''; |
|
| 98 | - } |
|
| 99 | - if (!sql_countsel('spip_rubriques')) { |
|
| 100 | - return ''; |
|
| 101 | - } |
|
| 102 | - $chercher_rubrique = charger_fonction('chercher_rubrique', 'inc'); |
|
| 103 | - $form = $chercher_rubrique($id_parent, $objet, $restreint, ($objet == 'rubrique') ? $id_objet : 0); |
|
| 104 | - |
|
| 105 | - if ($id_parent == 0) { |
|
| 106 | - $logo = 'racine-24.png'; |
|
| 107 | - } elseif ($id_secteur == $id_parent) { |
|
| 108 | - $logo = 'secteur-24.png'; |
|
| 109 | - } else { |
|
| 110 | - $logo = 'rubrique-24.png'; |
|
| 111 | - } |
|
| 112 | - |
|
| 113 | - $confirm = ''; |
|
| 114 | - if ($objet == 'rubrique') { |
|
| 115 | - // si c'est une rubrique-secteur contenant des breves, demander la |
|
| 116 | - // confirmation du deplacement |
|
| 117 | - $contient_breves = sql_countsel('spip_breves', 'id_rubrique=' . intval($id_objet)); |
|
| 118 | - |
|
| 119 | - if ($contient_breves > 0) { |
|
| 120 | - $scb = ($contient_breves > 1 ? 's' : ''); |
|
| 121 | - $scb = _T( |
|
| 122 | - 'avis_deplacement_rubrique', |
|
| 123 | - [ |
|
| 124 | - 'contient_breves' => $contient_breves, |
|
| 125 | - 'scb' => $scb |
|
| 126 | - ] |
|
| 127 | - ); |
|
| 128 | - $confirm .= "\n<div class='confirmer_deplacement verdana2'>" |
|
| 129 | - . "<div class='choix'><input type='checkbox' name='confirme_deplace' value='oui' id='confirme-deplace' /><label for='confirme-deplace'>" |
|
| 130 | - . $scb . |
|
| 131 | - "</label></div></div>\n"; |
|
| 132 | - } else { |
|
| 133 | - $confirm .= "<input type='hidden' name='confirme_deplace' value='oui' />\n"; |
|
| 134 | - } |
|
| 135 | - } |
|
| 136 | - $form .= $confirm; |
|
| 137 | - if ($actionable) { |
|
| 138 | - if (strpos($form, '<select') !== false) { |
|
| 139 | - $form .= "<div style='text-align: " . $GLOBALS['spip_lang_right'] . ";'>" |
|
| 140 | - . '<input class="fondo submit btn" type="submit" value="' . _T('bouton_choisir') . '"/>' |
|
| 141 | - . '</div>'; |
|
| 142 | - } |
|
| 143 | - $form = "<input type='hidden' name='editer_$objet' value='oui' />\n" . $form; |
|
| 144 | - if ($action = charger_fonction("editer_$objet", 'action', true)) { |
|
| 145 | - $form = generer_action_auteur( |
|
| 146 | - "editer_$objet", |
|
| 147 | - $id_objet, |
|
| 148 | - self(), |
|
| 149 | - $form, |
|
| 150 | - " method='post' class='submit_plongeur'" |
|
| 151 | - ); |
|
| 152 | - } else { |
|
| 153 | - $form = generer_action_auteur( |
|
| 154 | - 'editer_objet', |
|
| 155 | - "$objet/$id_objet", |
|
| 156 | - self(), |
|
| 157 | - $form, |
|
| 158 | - " method='post' class='submit_plongeur'" |
|
| 159 | - ); |
|
| 160 | - } |
|
| 161 | - } |
|
| 162 | - |
|
| 163 | - if ($retour_sans_cadre) { |
|
| 164 | - return $form; |
|
| 165 | - } |
|
| 166 | - |
|
| 167 | - include_spip('inc/presentation'); |
|
| 168 | - |
|
| 169 | - return debut_cadre_couleur($logo, true, '', $titre) . $form . fin_cadre_couleur(); |
|
| 95 | + include_spip('inc/autoriser'); |
|
| 96 | + if (intval($id_objet) && !autoriser('modifier', $objet, $id_objet)) { |
|
| 97 | + return ''; |
|
| 98 | + } |
|
| 99 | + if (!sql_countsel('spip_rubriques')) { |
|
| 100 | + return ''; |
|
| 101 | + } |
|
| 102 | + $chercher_rubrique = charger_fonction('chercher_rubrique', 'inc'); |
|
| 103 | + $form = $chercher_rubrique($id_parent, $objet, $restreint, ($objet == 'rubrique') ? $id_objet : 0); |
|
| 104 | + |
|
| 105 | + if ($id_parent == 0) { |
|
| 106 | + $logo = 'racine-24.png'; |
|
| 107 | + } elseif ($id_secteur == $id_parent) { |
|
| 108 | + $logo = 'secteur-24.png'; |
|
| 109 | + } else { |
|
| 110 | + $logo = 'rubrique-24.png'; |
|
| 111 | + } |
|
| 112 | + |
|
| 113 | + $confirm = ''; |
|
| 114 | + if ($objet == 'rubrique') { |
|
| 115 | + // si c'est une rubrique-secteur contenant des breves, demander la |
|
| 116 | + // confirmation du deplacement |
|
| 117 | + $contient_breves = sql_countsel('spip_breves', 'id_rubrique=' . intval($id_objet)); |
|
| 118 | + |
|
| 119 | + if ($contient_breves > 0) { |
|
| 120 | + $scb = ($contient_breves > 1 ? 's' : ''); |
|
| 121 | + $scb = _T( |
|
| 122 | + 'avis_deplacement_rubrique', |
|
| 123 | + [ |
|
| 124 | + 'contient_breves' => $contient_breves, |
|
| 125 | + 'scb' => $scb |
|
| 126 | + ] |
|
| 127 | + ); |
|
| 128 | + $confirm .= "\n<div class='confirmer_deplacement verdana2'>" |
|
| 129 | + . "<div class='choix'><input type='checkbox' name='confirme_deplace' value='oui' id='confirme-deplace' /><label for='confirme-deplace'>" |
|
| 130 | + . $scb . |
|
| 131 | + "</label></div></div>\n"; |
|
| 132 | + } else { |
|
| 133 | + $confirm .= "<input type='hidden' name='confirme_deplace' value='oui' />\n"; |
|
| 134 | + } |
|
| 135 | + } |
|
| 136 | + $form .= $confirm; |
|
| 137 | + if ($actionable) { |
|
| 138 | + if (strpos($form, '<select') !== false) { |
|
| 139 | + $form .= "<div style='text-align: " . $GLOBALS['spip_lang_right'] . ";'>" |
|
| 140 | + . '<input class="fondo submit btn" type="submit" value="' . _T('bouton_choisir') . '"/>' |
|
| 141 | + . '</div>'; |
|
| 142 | + } |
|
| 143 | + $form = "<input type='hidden' name='editer_$objet' value='oui' />\n" . $form; |
|
| 144 | + if ($action = charger_fonction("editer_$objet", 'action', true)) { |
|
| 145 | + $form = generer_action_auteur( |
|
| 146 | + "editer_$objet", |
|
| 147 | + $id_objet, |
|
| 148 | + self(), |
|
| 149 | + $form, |
|
| 150 | + " method='post' class='submit_plongeur'" |
|
| 151 | + ); |
|
| 152 | + } else { |
|
| 153 | + $form = generer_action_auteur( |
|
| 154 | + 'editer_objet', |
|
| 155 | + "$objet/$id_objet", |
|
| 156 | + self(), |
|
| 157 | + $form, |
|
| 158 | + " method='post' class='submit_plongeur'" |
|
| 159 | + ); |
|
| 160 | + } |
|
| 161 | + } |
|
| 162 | + |
|
| 163 | + if ($retour_sans_cadre) { |
|
| 164 | + return $form; |
|
| 165 | + } |
|
| 166 | + |
|
| 167 | + include_spip('inc/presentation'); |
|
| 168 | + |
|
| 169 | + return debut_cadre_couleur($logo, true, '', $titre) . $form . fin_cadre_couleur(); |
|
| 170 | 170 | } |
| 171 | 171 | |
| 172 | 172 | |
@@ -180,24 +180,24 @@ discard block |
||
| 180 | 180 | * @return bool |
| 181 | 181 | */ |
| 182 | 182 | function avoir_visiteurs($past = false, $accepter = true) { |
| 183 | - if ($GLOBALS['meta']['forums_publics'] == 'abo') { |
|
| 184 | - return true; |
|
| 185 | - } |
|
| 186 | - if ($accepter and $GLOBALS['meta']['accepter_visiteurs'] <> 'non') { |
|
| 187 | - return true; |
|
| 188 | - } |
|
| 189 | - if (sql_countsel('spip_articles', "accepter_forum='abo'")) { |
|
| 190 | - return true; |
|
| 191 | - } |
|
| 192 | - if (!$past) { |
|
| 193 | - return false; |
|
| 194 | - } |
|
| 195 | - |
|
| 196 | - return sql_countsel( |
|
| 197 | - 'spip_auteurs', |
|
| 198 | - "statut NOT IN ('0minirezo','1comite', '5poubelle') |
|
| 183 | + if ($GLOBALS['meta']['forums_publics'] == 'abo') { |
|
| 184 | + return true; |
|
| 185 | + } |
|
| 186 | + if ($accepter and $GLOBALS['meta']['accepter_visiteurs'] <> 'non') { |
|
| 187 | + return true; |
|
| 188 | + } |
|
| 189 | + if (sql_countsel('spip_articles', "accepter_forum='abo'")) { |
|
| 190 | + return true; |
|
| 191 | + } |
|
| 192 | + if (!$past) { |
|
| 193 | + return false; |
|
| 194 | + } |
|
| 195 | + |
|
| 196 | + return sql_countsel( |
|
| 197 | + 'spip_auteurs', |
|
| 198 | + "statut NOT IN ('0minirezo','1comite', '5poubelle') |
|
| 199 | 199 | AND (statut<>'nouveau' OR prefs NOT IN ('0minirezo','1comite', '5poubelle'))" |
| 200 | - ); |
|
| 200 | + ); |
|
| 201 | 201 | } |
| 202 | 202 | |
| 203 | 203 | /** |
@@ -213,18 +213,18 @@ discard block |
||
| 213 | 213 | * @return array |
| 214 | 214 | */ |
| 215 | 215 | function statuts_articles_visibles($statut_auteur) { |
| 216 | - static $auth = []; |
|
| 217 | - if (!isset($auth[$statut_auteur])) { |
|
| 218 | - $auth[$statut_auteur] = []; |
|
| 219 | - $statuts = array_column(sql_allfetsel('distinct statut', 'spip_articles'), 'statut'); |
|
| 220 | - foreach ($statuts as $s) { |
|
| 221 | - if (autoriser('voir', 'article', 0, ['statut' => $statut_auteur], ['statut' => $s])) { |
|
| 222 | - $auth[$statut_auteur][] = $s; |
|
| 223 | - } |
|
| 224 | - } |
|
| 225 | - } |
|
| 226 | - |
|
| 227 | - return $auth[$statut_auteur]; |
|
| 216 | + static $auth = []; |
|
| 217 | + if (!isset($auth[$statut_auteur])) { |
|
| 218 | + $auth[$statut_auteur] = []; |
|
| 219 | + $statuts = array_column(sql_allfetsel('distinct statut', 'spip_articles'), 'statut'); |
|
| 220 | + foreach ($statuts as $s) { |
|
| 221 | + if (autoriser('voir', 'article', 0, ['statut' => $statut_auteur], ['statut' => $s])) { |
|
| 222 | + $auth[$statut_auteur][] = $s; |
|
| 223 | + } |
|
| 224 | + } |
|
| 225 | + } |
|
| 226 | + |
|
| 227 | + return $auth[$statut_auteur]; |
|
| 228 | 228 | } |
| 229 | 229 | |
| 230 | 230 | /** |
@@ -238,38 +238,38 @@ discard block |
||
| 238 | 238 | * @return string |
| 239 | 239 | */ |
| 240 | 240 | function traduire_statut_auteur($statut, $attente = '') { |
| 241 | - $plus = ''; |
|
| 242 | - if ($statut == 'nouveau') { |
|
| 243 | - if ($attente) { |
|
| 244 | - $statut = $attente; |
|
| 245 | - $plus = ' (' . _T('info_statut_auteur_a_confirmer') . ')'; |
|
| 246 | - } else { |
|
| 247 | - return _T('info_statut_auteur_a_confirmer'); |
|
| 248 | - } |
|
| 249 | - } |
|
| 250 | - |
|
| 251 | - $recom = [ |
|
| 252 | - 'info_administrateurs' => _T('item_administrateur_2'), |
|
| 253 | - 'info_redacteurs' => _T('intem_redacteur'), |
|
| 254 | - 'info_visiteurs' => _T('item_visiteur'), |
|
| 255 | - '5poubelle' => _T('texte_statut_poubelle'), // bouh |
|
| 256 | - ]; |
|
| 257 | - if (isset($recom[$statut])) { |
|
| 258 | - return $recom[$statut] . $plus; |
|
| 259 | - } |
|
| 260 | - |
|
| 261 | - // retrouver directement par le statut sinon |
|
| 262 | - if ($t = array_search($statut, $GLOBALS['liste_des_statuts'])) { |
|
| 263 | - if (isset($recom[$t])) { |
|
| 264 | - return $recom[$t] . $plus; |
|
| 265 | - } |
|
| 266 | - |
|
| 267 | - return _T($t) . $plus; |
|
| 268 | - } |
|
| 269 | - |
|
| 270 | - // si on a pas reussi a le traduire, retournons la chaine telle quelle |
|
| 271 | - // c'est toujours plus informatif que rien du tout |
|
| 272 | - return $statut; |
|
| 241 | + $plus = ''; |
|
| 242 | + if ($statut == 'nouveau') { |
|
| 243 | + if ($attente) { |
|
| 244 | + $statut = $attente; |
|
| 245 | + $plus = ' (' . _T('info_statut_auteur_a_confirmer') . ')'; |
|
| 246 | + } else { |
|
| 247 | + return _T('info_statut_auteur_a_confirmer'); |
|
| 248 | + } |
|
| 249 | + } |
|
| 250 | + |
|
| 251 | + $recom = [ |
|
| 252 | + 'info_administrateurs' => _T('item_administrateur_2'), |
|
| 253 | + 'info_redacteurs' => _T('intem_redacteur'), |
|
| 254 | + 'info_visiteurs' => _T('item_visiteur'), |
|
| 255 | + '5poubelle' => _T('texte_statut_poubelle'), // bouh |
|
| 256 | + ]; |
|
| 257 | + if (isset($recom[$statut])) { |
|
| 258 | + return $recom[$statut] . $plus; |
|
| 259 | + } |
|
| 260 | + |
|
| 261 | + // retrouver directement par le statut sinon |
|
| 262 | + if ($t = array_search($statut, $GLOBALS['liste_des_statuts'])) { |
|
| 263 | + if (isset($recom[$t])) { |
|
| 264 | + return $recom[$t] . $plus; |
|
| 265 | + } |
|
| 266 | + |
|
| 267 | + return _T($t) . $plus; |
|
| 268 | + } |
|
| 269 | + |
|
| 270 | + // si on a pas reussi a le traduire, retournons la chaine telle quelle |
|
| 271 | + // c'est toujours plus informatif que rien du tout |
|
| 272 | + return $statut; |
|
| 273 | 273 | } |
| 274 | 274 | |
| 275 | 275 | /** |
@@ -280,29 +280,29 @@ discard block |
||
| 280 | 280 | * @return string |
| 281 | 281 | */ |
| 282 | 282 | function afficher_qui_edite($id_objet, $objet): string { |
| 283 | - static $qui = []; |
|
| 284 | - if (isset($qui[$objet][$id_objet])) { |
|
| 285 | - return $qui[$objet][$id_objet]; |
|
| 286 | - } |
|
| 287 | - |
|
| 288 | - include_spip('inc/config'); |
|
| 289 | - if (lire_config('articles_modif', 'non') === 'non') { |
|
| 290 | - return $qui[$objet][$id_objet] = ''; |
|
| 291 | - } |
|
| 292 | - |
|
| 293 | - include_spip('inc/drapeau_edition'); |
|
| 294 | - $modif = mention_qui_edite($id_objet, $objet); |
|
| 295 | - if (!$modif) { |
|
| 296 | - return $qui[$objet][$id_objet] = ''; |
|
| 297 | - } |
|
| 298 | - |
|
| 299 | - include_spip('base/objets'); |
|
| 300 | - $infos = lister_tables_objets_sql(table_objet_sql($objet)); |
|
| 301 | - if (isset($infos['texte_signale_edition'])) { |
|
| 302 | - return $qui[$objet][$id_objet] = _T($infos['texte_signale_edition'], $modif); |
|
| 303 | - } |
|
| 304 | - |
|
| 305 | - return $qui[$objet][$id_objet] = _T('info_qui_edite', $modif); |
|
| 283 | + static $qui = []; |
|
| 284 | + if (isset($qui[$objet][$id_objet])) { |
|
| 285 | + return $qui[$objet][$id_objet]; |
|
| 286 | + } |
|
| 287 | + |
|
| 288 | + include_spip('inc/config'); |
|
| 289 | + if (lire_config('articles_modif', 'non') === 'non') { |
|
| 290 | + return $qui[$objet][$id_objet] = ''; |
|
| 291 | + } |
|
| 292 | + |
|
| 293 | + include_spip('inc/drapeau_edition'); |
|
| 294 | + $modif = mention_qui_edite($id_objet, $objet); |
|
| 295 | + if (!$modif) { |
|
| 296 | + return $qui[$objet][$id_objet] = ''; |
|
| 297 | + } |
|
| 298 | + |
|
| 299 | + include_spip('base/objets'); |
|
| 300 | + $infos = lister_tables_objets_sql(table_objet_sql($objet)); |
|
| 301 | + if (isset($infos['texte_signale_edition'])) { |
|
| 302 | + return $qui[$objet][$id_objet] = _T($infos['texte_signale_edition'], $modif); |
|
| 303 | + } |
|
| 304 | + |
|
| 305 | + return $qui[$objet][$id_objet] = _T('info_qui_edite', $modif); |
|
| 306 | 306 | } |
| 307 | 307 | |
| 308 | 308 | /** |
@@ -320,53 +320,53 @@ discard block |
||
| 320 | 320 | * @return array |
| 321 | 321 | */ |
| 322 | 322 | function auteurs_lister_statuts($quoi = 'tous', $en_base = true): array { |
| 323 | - if (!defined('AUTEURS_MIN_REDAC')) { |
|
| 324 | - define('AUTEURS_MIN_REDAC', '0minirezo,1comite,5poubelle'); |
|
| 325 | - } |
|
| 326 | - |
|
| 327 | - switch ($quoi) { |
|
| 328 | - case 'redacteurs': |
|
| 329 | - $statut = AUTEURS_MIN_REDAC; |
|
| 330 | - $statut = explode(',', $statut); |
|
| 331 | - if ($en_base) { |
|
| 332 | - $check = array_column(sql_allfetsel('DISTINCT statut', 'spip_auteurs', sql_in('statut', $statut)), 'statut'); |
|
| 333 | - $retire = array_diff($statut, $check); |
|
| 334 | - $statut = array_diff($statut, $retire); |
|
| 335 | - } |
|
| 336 | - |
|
| 337 | - return array_unique($statut); |
|
| 338 | - |
|
| 339 | - case 'visiteurs': |
|
| 340 | - $statut = []; |
|
| 341 | - $exclus = AUTEURS_MIN_REDAC; |
|
| 342 | - $exclus = explode(',', $exclus); |
|
| 343 | - if (!$en_base) { |
|
| 344 | - // prendre aussi les statuts de la table des status qui ne sont pas dans le define |
|
| 345 | - $statut = array_diff(array_values($GLOBALS['liste_des_statuts']), $exclus); |
|
| 346 | - } |
|
| 347 | - $s_complement = array_column( |
|
| 348 | - sql_allfetsel('DISTINCT statut', 'spip_auteurs', sql_in('statut', $exclus, 'NOT')), |
|
| 349 | - 'statut' |
|
| 350 | - ); |
|
| 351 | - |
|
| 352 | - return array_unique(array_merge($statut, $s_complement)); |
|
| 353 | - |
|
| 354 | - default: |
|
| 355 | - case 'tous': |
|
| 356 | - $statut = array_values($GLOBALS['liste_des_statuts']); |
|
| 357 | - $s_complement = array_column( |
|
| 358 | - sql_allfetsel('DISTINCT statut', 'spip_auteurs', sql_in('statut', $statut, 'NOT')), |
|
| 359 | - 'statut' |
|
| 360 | - ); |
|
| 361 | - $statut = array_merge($statut, $s_complement); |
|
| 362 | - if ($en_base) { |
|
| 363 | - $check = array_column(sql_allfetsel('DISTINCT statut', 'spip_auteurs', sql_in('statut', $statut)), 'statut'); |
|
| 364 | - $retire = array_diff($statut, $check); |
|
| 365 | - $statut = array_diff($statut, $retire); |
|
| 366 | - } |
|
| 367 | - |
|
| 368 | - return array_unique($statut); |
|
| 369 | - } |
|
| 323 | + if (!defined('AUTEURS_MIN_REDAC')) { |
|
| 324 | + define('AUTEURS_MIN_REDAC', '0minirezo,1comite,5poubelle'); |
|
| 325 | + } |
|
| 326 | + |
|
| 327 | + switch ($quoi) { |
|
| 328 | + case 'redacteurs': |
|
| 329 | + $statut = AUTEURS_MIN_REDAC; |
|
| 330 | + $statut = explode(',', $statut); |
|
| 331 | + if ($en_base) { |
|
| 332 | + $check = array_column(sql_allfetsel('DISTINCT statut', 'spip_auteurs', sql_in('statut', $statut)), 'statut'); |
|
| 333 | + $retire = array_diff($statut, $check); |
|
| 334 | + $statut = array_diff($statut, $retire); |
|
| 335 | + } |
|
| 336 | + |
|
| 337 | + return array_unique($statut); |
|
| 338 | + |
|
| 339 | + case 'visiteurs': |
|
| 340 | + $statut = []; |
|
| 341 | + $exclus = AUTEURS_MIN_REDAC; |
|
| 342 | + $exclus = explode(',', $exclus); |
|
| 343 | + if (!$en_base) { |
|
| 344 | + // prendre aussi les statuts de la table des status qui ne sont pas dans le define |
|
| 345 | + $statut = array_diff(array_values($GLOBALS['liste_des_statuts']), $exclus); |
|
| 346 | + } |
|
| 347 | + $s_complement = array_column( |
|
| 348 | + sql_allfetsel('DISTINCT statut', 'spip_auteurs', sql_in('statut', $exclus, 'NOT')), |
|
| 349 | + 'statut' |
|
| 350 | + ); |
|
| 351 | + |
|
| 352 | + return array_unique(array_merge($statut, $s_complement)); |
|
| 353 | + |
|
| 354 | + default: |
|
| 355 | + case 'tous': |
|
| 356 | + $statut = array_values($GLOBALS['liste_des_statuts']); |
|
| 357 | + $s_complement = array_column( |
|
| 358 | + sql_allfetsel('DISTINCT statut', 'spip_auteurs', sql_in('statut', $statut, 'NOT')), |
|
| 359 | + 'statut' |
|
| 360 | + ); |
|
| 361 | + $statut = array_merge($statut, $s_complement); |
|
| 362 | + if ($en_base) { |
|
| 363 | + $check = array_column(sql_allfetsel('DISTINCT statut', 'spip_auteurs', sql_in('statut', $statut)), 'statut'); |
|
| 364 | + $retire = array_diff($statut, $check); |
|
| 365 | + $statut = array_diff($statut, $retire); |
|
| 366 | + } |
|
| 367 | + |
|
| 368 | + return array_unique($statut); |
|
| 369 | + } |
|
| 370 | 370 | } |
| 371 | 371 | |
| 372 | 372 | /** |
@@ -382,28 +382,28 @@ discard block |
||
| 382 | 382 | */ |
| 383 | 383 | function trouver_rubrique_creer_objet($id_rubrique, $objet) { |
| 384 | 384 | |
| 385 | - if (!$id_rubrique and defined('_CHOIX_RUBRIQUE_PAR_DEFAUT') and _CHOIX_RUBRIQUE_PAR_DEFAUT) { |
|
| 386 | - $in = !(is_countable($GLOBALS['connect_id_rubrique']) ? count($GLOBALS['connect_id_rubrique']) : 0) |
|
| 387 | - ? '' |
|
| 388 | - : (' AND ' . sql_in('id_rubrique', $GLOBALS['connect_id_rubrique'])); |
|
| 389 | - |
|
| 390 | - // on tente d'abord l'ecriture a la racine dans le cas des rubriques uniquement |
|
| 391 | - if ($objet == 'rubrique') { |
|
| 392 | - $id_rubrique = 0; |
|
| 393 | - } else { |
|
| 394 | - $id_rubrique = sql_getfetsel('id_rubrique', 'spip_rubriques', "id_parent=0$in", '', 'id_rubrique DESC', 1); |
|
| 395 | - } |
|
| 396 | - |
|
| 397 | - if (!autoriser("creer{$objet}dans", 'rubrique', $id_rubrique)) { |
|
| 398 | - // manque de chance, la rubrique n'est pas autorisee, on cherche un des secteurs autorises |
|
| 399 | - $res = sql_select('id_rubrique', 'spip_rubriques', 'id_parent=0'); |
|
| 400 | - while (!autoriser("creer{$objet}dans", 'rubrique', $id_rubrique) && $row_rub = sql_fetch($res)) { |
|
| 401 | - $id_rubrique = $row_rub['id_rubrique']; |
|
| 402 | - } |
|
| 403 | - } |
|
| 404 | - } |
|
| 405 | - |
|
| 406 | - return $id_rubrique; |
|
| 385 | + if (!$id_rubrique and defined('_CHOIX_RUBRIQUE_PAR_DEFAUT') and _CHOIX_RUBRIQUE_PAR_DEFAUT) { |
|
| 386 | + $in = !(is_countable($GLOBALS['connect_id_rubrique']) ? count($GLOBALS['connect_id_rubrique']) : 0) |
|
| 387 | + ? '' |
|
| 388 | + : (' AND ' . sql_in('id_rubrique', $GLOBALS['connect_id_rubrique'])); |
|
| 389 | + |
|
| 390 | + // on tente d'abord l'ecriture a la racine dans le cas des rubriques uniquement |
|
| 391 | + if ($objet == 'rubrique') { |
|
| 392 | + $id_rubrique = 0; |
|
| 393 | + } else { |
|
| 394 | + $id_rubrique = sql_getfetsel('id_rubrique', 'spip_rubriques', "id_parent=0$in", '', 'id_rubrique DESC', 1); |
|
| 395 | + } |
|
| 396 | + |
|
| 397 | + if (!autoriser("creer{$objet}dans", 'rubrique', $id_rubrique)) { |
|
| 398 | + // manque de chance, la rubrique n'est pas autorisee, on cherche un des secteurs autorises |
|
| 399 | + $res = sql_select('id_rubrique', 'spip_rubriques', 'id_parent=0'); |
|
| 400 | + while (!autoriser("creer{$objet}dans", 'rubrique', $id_rubrique) && $row_rub = sql_fetch($res)) { |
|
| 401 | + $id_rubrique = $row_rub['id_rubrique']; |
|
| 402 | + } |
|
| 403 | + } |
|
| 404 | + } |
|
| 405 | + |
|
| 406 | + return $id_rubrique; |
|
| 407 | 407 | } |
| 408 | 408 | |
| 409 | 409 | /** |
@@ -414,12 +414,12 @@ discard block |
||
| 414 | 414 | * @return string |
| 415 | 415 | */ |
| 416 | 416 | function lien_article_virtuel($virtuel) { |
| 417 | - include_spip('inc/lien'); |
|
| 418 | - if (!$virtuel = virtuel_redirige($virtuel)) { |
|
| 419 | - return ''; |
|
| 420 | - } |
|
| 417 | + include_spip('inc/lien'); |
|
| 418 | + if (!$virtuel = virtuel_redirige($virtuel)) { |
|
| 419 | + return ''; |
|
| 420 | + } |
|
| 421 | 421 | |
| 422 | - return propre('[->' . $virtuel . ']'); |
|
| 422 | + return propre('[->' . $virtuel . ']'); |
|
| 423 | 423 | } |
| 424 | 424 | |
| 425 | 425 | |
@@ -442,11 +442,11 @@ discard block |
||
| 442 | 442 | * @filtre |
| 443 | 443 | */ |
| 444 | 444 | function bouton_spip_rss($op, $args = [], $lang = '', $title = 'RSS') { |
| 445 | - include_spip('inc/acces'); |
|
| 446 | - $clic = http_img_pack('rss-16.png', 'RSS', '', $title); |
|
| 445 | + include_spip('inc/acces'); |
|
| 446 | + $clic = http_img_pack('rss-16.png', 'RSS', '', $title); |
|
| 447 | 447 | |
| 448 | - $url = generer_url_api_low_sec('transmettre', 'rss', $op, '', http_build_query($args), false, true); |
|
| 449 | - return "<a style='float: " . $GLOBALS['spip_lang_right'] . ";' href='$url'>$clic</a>"; |
|
| 448 | + $url = generer_url_api_low_sec('transmettre', 'rss', $op, '', http_build_query($args), false, true); |
|
| 449 | + return "<a style='float: " . $GLOBALS['spip_lang_right'] . ";' href='$url'>$clic</a>"; |
|
| 450 | 450 | } |
| 451 | 451 | |
| 452 | 452 | |
@@ -458,76 +458,76 @@ discard block |
||
| 458 | 458 | */ |
| 459 | 459 | function alertes_auteur($id_auteur): string { |
| 460 | 460 | |
| 461 | - $alertes = []; |
|
| 462 | - |
|
| 463 | - if ( |
|
| 464 | - isset($GLOBALS['meta']['message_crash_tables']) |
|
| 465 | - and autoriser('detruire', null, null, $id_auteur) |
|
| 466 | - ) { |
|
| 467 | - include_spip('genie/maintenance'); |
|
| 468 | - if ($msg = message_crash_tables()) { |
|
| 469 | - $alertes[] = $msg; |
|
| 470 | - } |
|
| 471 | - } |
|
| 472 | - |
|
| 473 | - if ( |
|
| 474 | - isset($GLOBALS['meta']['message_crash_plugins']) |
|
| 475 | - and $GLOBALS['meta']['message_crash_plugins'] |
|
| 476 | - and autoriser('configurer', '_plugins', null, $id_auteur) |
|
| 477 | - and is_array($msg = unserialize($GLOBALS['meta']['message_crash_plugins'])) |
|
| 478 | - ) { |
|
| 479 | - $msg = implode(', ', array_map('joli_repertoire', array_keys($msg))); |
|
| 480 | - $alertes[] = _T('plugins_erreur', ['plugins' => $msg]); |
|
| 481 | - } |
|
| 482 | - |
|
| 483 | - $a = $GLOBALS['meta']['message_alertes_auteurs'] ?? ''; |
|
| 484 | - if ( |
|
| 485 | - $a |
|
| 486 | - and is_array($a = unserialize($a)) |
|
| 487 | - and count($a) |
|
| 488 | - ) { |
|
| 489 | - $update = false; |
|
| 490 | - if (isset($a[$GLOBALS['visiteur_session']['statut']])) { |
|
| 491 | - $alertes = array_merge($alertes, $a[$GLOBALS['visiteur_session']['statut']]); |
|
| 492 | - unset($a[$GLOBALS['visiteur_session']['statut']]); |
|
| 493 | - $update = true; |
|
| 494 | - } |
|
| 495 | - if (isset($a[''])) { |
|
| 496 | - $alertes = array_merge($alertes, $a['']); |
|
| 497 | - unset($a['']); |
|
| 498 | - $update = true; |
|
| 499 | - } |
|
| 500 | - if ($update) { |
|
| 501 | - ecrire_meta('message_alertes_auteurs', serialize($a)); |
|
| 502 | - } |
|
| 503 | - } |
|
| 504 | - |
|
| 505 | - if ( |
|
| 506 | - isset($GLOBALS['meta']['plugin_erreur_activation']) |
|
| 507 | - and autoriser('configurer', '_plugins', null, $id_auteur) |
|
| 508 | - ) { |
|
| 509 | - include_spip('inc/plugin'); |
|
| 510 | - $alertes[] = plugin_donne_erreurs(); |
|
| 511 | - } |
|
| 512 | - |
|
| 513 | - $alertes = pipeline( |
|
| 514 | - 'alertes_auteur', |
|
| 515 | - [ |
|
| 516 | - 'args' => [ |
|
| 517 | - 'id_auteur' => $id_auteur, |
|
| 518 | - 'exec' => _request('exec'), |
|
| 519 | - ], |
|
| 520 | - 'data' => $alertes |
|
| 521 | - ] |
|
| 522 | - ); |
|
| 523 | - |
|
| 524 | - if ($alertes = array_filter($alertes)) { |
|
| 525 | - return "<div class='wrap-messages-alertes'><div class='messages-alertes'>" . |
|
| 526 | - join(' | ', $alertes) |
|
| 527 | - . '</div></div>'; |
|
| 528 | - } |
|
| 529 | - |
|
| 530 | - return ''; |
|
| 461 | + $alertes = []; |
|
| 462 | + |
|
| 463 | + if ( |
|
| 464 | + isset($GLOBALS['meta']['message_crash_tables']) |
|
| 465 | + and autoriser('detruire', null, null, $id_auteur) |
|
| 466 | + ) { |
|
| 467 | + include_spip('genie/maintenance'); |
|
| 468 | + if ($msg = message_crash_tables()) { |
|
| 469 | + $alertes[] = $msg; |
|
| 470 | + } |
|
| 471 | + } |
|
| 472 | + |
|
| 473 | + if ( |
|
| 474 | + isset($GLOBALS['meta']['message_crash_plugins']) |
|
| 475 | + and $GLOBALS['meta']['message_crash_plugins'] |
|
| 476 | + and autoriser('configurer', '_plugins', null, $id_auteur) |
|
| 477 | + and is_array($msg = unserialize($GLOBALS['meta']['message_crash_plugins'])) |
|
| 478 | + ) { |
|
| 479 | + $msg = implode(', ', array_map('joli_repertoire', array_keys($msg))); |
|
| 480 | + $alertes[] = _T('plugins_erreur', ['plugins' => $msg]); |
|
| 481 | + } |
|
| 482 | + |
|
| 483 | + $a = $GLOBALS['meta']['message_alertes_auteurs'] ?? ''; |
|
| 484 | + if ( |
|
| 485 | + $a |
|
| 486 | + and is_array($a = unserialize($a)) |
|
| 487 | + and count($a) |
|
| 488 | + ) { |
|
| 489 | + $update = false; |
|
| 490 | + if (isset($a[$GLOBALS['visiteur_session']['statut']])) { |
|
| 491 | + $alertes = array_merge($alertes, $a[$GLOBALS['visiteur_session']['statut']]); |
|
| 492 | + unset($a[$GLOBALS['visiteur_session']['statut']]); |
|
| 493 | + $update = true; |
|
| 494 | + } |
|
| 495 | + if (isset($a[''])) { |
|
| 496 | + $alertes = array_merge($alertes, $a['']); |
|
| 497 | + unset($a['']); |
|
| 498 | + $update = true; |
|
| 499 | + } |
|
| 500 | + if ($update) { |
|
| 501 | + ecrire_meta('message_alertes_auteurs', serialize($a)); |
|
| 502 | + } |
|
| 503 | + } |
|
| 504 | + |
|
| 505 | + if ( |
|
| 506 | + isset($GLOBALS['meta']['plugin_erreur_activation']) |
|
| 507 | + and autoriser('configurer', '_plugins', null, $id_auteur) |
|
| 508 | + ) { |
|
| 509 | + include_spip('inc/plugin'); |
|
| 510 | + $alertes[] = plugin_donne_erreurs(); |
|
| 511 | + } |
|
| 512 | + |
|
| 513 | + $alertes = pipeline( |
|
| 514 | + 'alertes_auteur', |
|
| 515 | + [ |
|
| 516 | + 'args' => [ |
|
| 517 | + 'id_auteur' => $id_auteur, |
|
| 518 | + 'exec' => _request('exec'), |
|
| 519 | + ], |
|
| 520 | + 'data' => $alertes |
|
| 521 | + ] |
|
| 522 | + ); |
|
| 523 | + |
|
| 524 | + if ($alertes = array_filter($alertes)) { |
|
| 525 | + return "<div class='wrap-messages-alertes'><div class='messages-alertes'>" . |
|
| 526 | + join(' | ', $alertes) |
|
| 527 | + . '</div></div>'; |
|
| 528 | + } |
|
| 529 | + |
|
| 530 | + return ''; |
|
| 531 | 531 | } |
| 532 | 532 | |
| 533 | 533 | /** |
@@ -537,9 +537,9 @@ discard block |
||
| 537 | 537 | * @return string |
| 538 | 538 | */ |
| 539 | 539 | function filtre_afficher_enfant_rub_dist($id_rubrique) { |
| 540 | - include_spip('inc/presenter_enfants'); |
|
| 540 | + include_spip('inc/presenter_enfants'); |
|
| 541 | 541 | |
| 542 | - return afficher_enfant_rub(intval($id_rubrique)); |
|
| 542 | + return afficher_enfant_rub(intval($id_rubrique)); |
|
| 543 | 543 | } |
| 544 | 544 | |
| 545 | 545 | /** |
@@ -557,15 +557,15 @@ discard block |
||
| 557 | 557 | * @return string |
| 558 | 558 | */ |
| 559 | 559 | function afficher_plus_info($lien, $titre = '+', $titre_lien = '') { |
| 560 | - $titre = attribut_html($titre); |
|
| 561 | - $icone = "\n<a href='$lien' title='$titre' class='plus_info'>" . |
|
| 562 | - http_img_pack('information-16.png', $titre) . '</a>'; |
|
| 563 | - |
|
| 564 | - if (!$titre_lien) { |
|
| 565 | - return $icone; |
|
| 566 | - } else { |
|
| 567 | - return $icone . "\n<a href='$lien'>$titre_lien</a>"; |
|
| 568 | - } |
|
| 560 | + $titre = attribut_html($titre); |
|
| 561 | + $icone = "\n<a href='$lien' title='$titre' class='plus_info'>" . |
|
| 562 | + http_img_pack('information-16.png', $titre) . '</a>'; |
|
| 563 | + |
|
| 564 | + if (!$titre_lien) { |
|
| 565 | + return $icone; |
|
| 566 | + } else { |
|
| 567 | + return $icone . "\n<a href='$lien'>$titre_lien</a>"; |
|
| 568 | + } |
|
| 569 | 569 | } |
| 570 | 570 | |
| 571 | 571 | |
@@ -584,22 +584,22 @@ discard block |
||
| 584 | 584 | * @return array |
| 585 | 585 | */ |
| 586 | 586 | function lister_objets_lies($objet_source, $objet, $id_objet, $objet_lien) { |
| 587 | - $res = lister_objets_liens($objet_source, $objet, $id_objet, $objet_lien); |
|
| 588 | - if (!(is_countable($res) ? count($res) : 0)) { |
|
| 589 | - return []; |
|
| 590 | - } |
|
| 591 | - $r = reset($res); |
|
| 592 | - if (isset($r['rang_lien'])) { |
|
| 593 | - $l = array_column($res, 'rang_lien', $objet_source); |
|
| 594 | - asort($l); |
|
| 595 | - $l = array_keys($l); |
|
| 596 | - } else { |
|
| 597 | - // Si les liens qu'on cherche sont ceux de la table de lien, l'info est dans la clé de l'objet |
|
| 598 | - // Sinon c'est dans "id_objet" |
|
| 599 | - $l = array_column( |
|
| 600 | - $res, |
|
| 601 | - $objet_source == $objet_lien ? id_table_objet($objet_source) : 'id_objet' |
|
| 602 | - ); |
|
| 603 | - } |
|
| 604 | - return $l; |
|
| 587 | + $res = lister_objets_liens($objet_source, $objet, $id_objet, $objet_lien); |
|
| 588 | + if (!(is_countable($res) ? count($res) : 0)) { |
|
| 589 | + return []; |
|
| 590 | + } |
|
| 591 | + $r = reset($res); |
|
| 592 | + if (isset($r['rang_lien'])) { |
|
| 593 | + $l = array_column($res, 'rang_lien', $objet_source); |
|
| 594 | + asort($l); |
|
| 595 | + $l = array_keys($l); |
|
| 596 | + } else { |
|
| 597 | + // Si les liens qu'on cherche sont ceux de la table de lien, l'info est dans la clé de l'objet |
|
| 598 | + // Sinon c'est dans "id_objet" |
|
| 599 | + $l = array_column( |
|
| 600 | + $res, |
|
| 601 | + $objet_source == $objet_lien ? id_table_objet($objet_source) : 'id_objet' |
|
| 602 | + ); |
|
| 603 | + } |
|
| 604 | + return $l; |
|
| 605 | 605 | } |
@@ -1,22 +1,22 @@ |
||
| 1 | 1 | <?php |
| 2 | 2 | |
| 3 | 3 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 4 | - return; |
|
| 4 | + return; |
|
| 5 | 5 | } |
| 6 | 6 | |
| 7 | 7 | function trier_rss($texte) { |
| 8 | - if (preg_match_all(',<item.*</item>\s*?,Uims', $texte, $matches, PREG_SET_ORDER)) { |
|
| 9 | - $placeholder = '<!--REINSERT-->'; |
|
| 10 | - $items = []; |
|
| 11 | - foreach ($matches as $match) { |
|
| 12 | - if (preg_match(',<dc:date>(.*)</dc:date>,Uims', $match[0], $r)) { |
|
| 13 | - $items[strtotime($r[1])] = trim($match[0]); |
|
| 14 | - $texte = str_replace($match[0], unique($placeholder), $texte); |
|
| 15 | - } |
|
| 16 | - } |
|
| 17 | - krsort($items); |
|
| 18 | - $texte = str_replace($placeholder, implode("\n\t", $items) . "\n", $texte); |
|
| 19 | - } |
|
| 8 | + if (preg_match_all(',<item.*</item>\s*?,Uims', $texte, $matches, PREG_SET_ORDER)) { |
|
| 9 | + $placeholder = '<!--REINSERT-->'; |
|
| 10 | + $items = []; |
|
| 11 | + foreach ($matches as $match) { |
|
| 12 | + if (preg_match(',<dc:date>(.*)</dc:date>,Uims', $match[0], $r)) { |
|
| 13 | + $items[strtotime($r[1])] = trim($match[0]); |
|
| 14 | + $texte = str_replace($match[0], unique($placeholder), $texte); |
|
| 15 | + } |
|
| 16 | + } |
|
| 17 | + krsort($items); |
|
| 18 | + $texte = str_replace($placeholder, implode("\n\t", $items) . "\n", $texte); |
|
| 19 | + } |
|
| 20 | 20 | |
| 21 | - return $texte; |
|
| 21 | + return $texte; |
|
| 22 | 22 | } |
@@ -15,7 +15,7 @@ |
||
| 15 | 15 | } |
| 16 | 16 | } |
| 17 | 17 | krsort($items); |
| 18 | - $texte = str_replace($placeholder, implode("\n\t", $items) . "\n", $texte); |
|
| 18 | + $texte = str_replace($placeholder, implode("\n\t", $items)."\n", $texte); |
|
| 19 | 19 | } |
| 20 | 20 | |
| 21 | 21 | return $texte; |
@@ -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 | /** |
@@ -31,43 +31,43 @@ discard block |
||
| 31 | 31 | * @return string |
| 32 | 32 | */ |
| 33 | 33 | function action_instituer_langue_objet_dist($objet, $id, $id_rubrique, $changer_lang, $serveur = '') { |
| 34 | - if ($changer_lang) { |
|
| 35 | - $table_objet_sql = table_objet_sql($objet); |
|
| 36 | - $id_table_objet = id_table_objet($objet); |
|
| 37 | - $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 38 | - $desc = $trouver_table($table_objet_sql, $serveur); |
|
| 34 | + if ($changer_lang) { |
|
| 35 | + $table_objet_sql = table_objet_sql($objet); |
|
| 36 | + $id_table_objet = id_table_objet($objet); |
|
| 37 | + $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 38 | + $desc = $trouver_table($table_objet_sql, $serveur); |
|
| 39 | 39 | |
| 40 | - $set = []; |
|
| 41 | - if (isset($desc['field']['langue_choisie'])) { |
|
| 42 | - $set['langue_choisie'] = 'oui'; |
|
| 43 | - } |
|
| 40 | + $set = []; |
|
| 41 | + if (isset($desc['field']['langue_choisie'])) { |
|
| 42 | + $set['langue_choisie'] = 'oui'; |
|
| 43 | + } |
|
| 44 | 44 | |
| 45 | - if ($changer_lang != 'herit') { |
|
| 46 | - $set['lang'] = $changer_lang; |
|
| 47 | - sql_updateq($table_objet_sql, $set, "$id_table_objet=" . intval($id), [], $serveur); |
|
| 48 | - include_spip('inc/rubriques'); // pour calculer_langues_rubriques et calculer_langues_utilisees |
|
| 49 | - if ($table_objet_sql == 'spip_rubriques') { |
|
| 50 | - calculer_langues_rubriques(); |
|
| 51 | - } |
|
| 52 | - $langues = calculer_langues_utilisees($serveur); |
|
| 53 | - ecrire_meta('langues_utilisees', $langues); |
|
| 54 | - } else { |
|
| 55 | - $langue_parent = sql_getfetsel('lang', 'spip_rubriques', 'id_rubrique=' . intval($id_rubrique)); |
|
| 56 | - if (!$langue_parent) { |
|
| 57 | - $langue_parent = $GLOBALS['meta']['langue_site']; |
|
| 58 | - } |
|
| 59 | - $changer_lang = $langue_parent; |
|
| 60 | - $set['lang'] = $changer_lang; |
|
| 61 | - if (isset($set['langue_choisie'])) { |
|
| 62 | - $set['langue_choisie'] = 'non'; |
|
| 63 | - } |
|
| 64 | - sql_updateq($table_objet_sql, $set, "$id_table_objet=" . intval($id), [], $serveur); |
|
| 65 | - if ($table_objet_sql == 'spip_rubriques') { |
|
| 66 | - include_spip('inc/rubriques'); |
|
| 67 | - calculer_langues_rubriques(); |
|
| 68 | - } |
|
| 69 | - } |
|
| 70 | - } |
|
| 45 | + if ($changer_lang != 'herit') { |
|
| 46 | + $set['lang'] = $changer_lang; |
|
| 47 | + sql_updateq($table_objet_sql, $set, "$id_table_objet=" . intval($id), [], $serveur); |
|
| 48 | + include_spip('inc/rubriques'); // pour calculer_langues_rubriques et calculer_langues_utilisees |
|
| 49 | + if ($table_objet_sql == 'spip_rubriques') { |
|
| 50 | + calculer_langues_rubriques(); |
|
| 51 | + } |
|
| 52 | + $langues = calculer_langues_utilisees($serveur); |
|
| 53 | + ecrire_meta('langues_utilisees', $langues); |
|
| 54 | + } else { |
|
| 55 | + $langue_parent = sql_getfetsel('lang', 'spip_rubriques', 'id_rubrique=' . intval($id_rubrique)); |
|
| 56 | + if (!$langue_parent) { |
|
| 57 | + $langue_parent = $GLOBALS['meta']['langue_site']; |
|
| 58 | + } |
|
| 59 | + $changer_lang = $langue_parent; |
|
| 60 | + $set['lang'] = $changer_lang; |
|
| 61 | + if (isset($set['langue_choisie'])) { |
|
| 62 | + $set['langue_choisie'] = 'non'; |
|
| 63 | + } |
|
| 64 | + sql_updateq($table_objet_sql, $set, "$id_table_objet=" . intval($id), [], $serveur); |
|
| 65 | + if ($table_objet_sql == 'spip_rubriques') { |
|
| 66 | + include_spip('inc/rubriques'); |
|
| 67 | + calculer_langues_rubriques(); |
|
| 68 | + } |
|
| 69 | + } |
|
| 70 | + } |
|
| 71 | 71 | |
| 72 | - return $changer_lang; |
|
| 72 | + return $changer_lang; |
|
| 73 | 73 | } |
@@ -44,7 +44,7 @@ discard block |
||
| 44 | 44 | |
| 45 | 45 | if ($changer_lang != 'herit') { |
| 46 | 46 | $set['lang'] = $changer_lang; |
| 47 | - sql_updateq($table_objet_sql, $set, "$id_table_objet=" . intval($id), [], $serveur); |
|
| 47 | + sql_updateq($table_objet_sql, $set, "$id_table_objet=".intval($id), [], $serveur); |
|
| 48 | 48 | include_spip('inc/rubriques'); // pour calculer_langues_rubriques et calculer_langues_utilisees |
| 49 | 49 | if ($table_objet_sql == 'spip_rubriques') { |
| 50 | 50 | calculer_langues_rubriques(); |
@@ -52,7 +52,7 @@ discard block |
||
| 52 | 52 | $langues = calculer_langues_utilisees($serveur); |
| 53 | 53 | ecrire_meta('langues_utilisees', $langues); |
| 54 | 54 | } else { |
| 55 | - $langue_parent = sql_getfetsel('lang', 'spip_rubriques', 'id_rubrique=' . intval($id_rubrique)); |
|
| 55 | + $langue_parent = sql_getfetsel('lang', 'spip_rubriques', 'id_rubrique='.intval($id_rubrique)); |
|
| 56 | 56 | if (!$langue_parent) { |
| 57 | 57 | $langue_parent = $GLOBALS['meta']['langue_site']; |
| 58 | 58 | } |
@@ -61,7 +61,7 @@ discard block |
||
| 61 | 61 | if (isset($set['langue_choisie'])) { |
| 62 | 62 | $set['langue_choisie'] = 'non'; |
| 63 | 63 | } |
| 64 | - sql_updateq($table_objet_sql, $set, "$id_table_objet=" . intval($id), [], $serveur); |
|
| 64 | + sql_updateq($table_objet_sql, $set, "$id_table_objet=".intval($id), [], $serveur); |
|
| 65 | 65 | if ($table_objet_sql == 'spip_rubriques') { |
| 66 | 66 | include_spip('inc/rubriques'); |
| 67 | 67 | calculer_langues_rubriques(); |
@@ -56,7 +56,7 @@ discard block |
||
| 56 | 56 | if ($GLOBALS['spip_version_base'] != $GLOBALS['meta']['version_installee']) { |
| 57 | 57 | if (!is_numeric(_request('reinstall'))) { |
| 58 | 58 | include_spip('base/create'); |
| 59 | - spip_log('recree les tables eventuellement disparues', 'maj.' . _LOG_INFO_IMPORTANTE); |
|
| 59 | + spip_log('recree les tables eventuellement disparues', 'maj.'._LOG_INFO_IMPORTANTE); |
|
| 60 | 60 | creer_base(); |
| 61 | 61 | } |
| 62 | 62 | |
@@ -69,7 +69,7 @@ discard block |
||
| 69 | 69 | exit; |
| 70 | 70 | } |
| 71 | 71 | } |
| 72 | - spip_log('Fin de mise a jour SQL. Debut m-a-j acces et config', 'maj.' . _LOG_INFO_IMPORTANTE); |
|
| 72 | + spip_log('Fin de mise a jour SQL. Debut m-a-j acces et config', 'maj.'._LOG_INFO_IMPORTANTE); |
|
| 73 | 73 | |
| 74 | 74 | // supprimer quelques fichiers temporaires qui peuvent se retrouver invalides |
| 75 | 75 | @spip_unlink(_CACHE_RUBRIQUES); |
@@ -78,7 +78,7 @@ discard block |
||
| 78 | 78 | @spip_unlink(_CACHE_PLUGINS_OPT); |
| 79 | 79 | @spip_unlink(_CACHE_PLUGINS_FCT); |
| 80 | 80 | @spip_unlink(_CACHE_CHEMIN); |
| 81 | - @spip_unlink(_DIR_TMP . 'plugin_xml_cache.gz'); |
|
| 81 | + @spip_unlink(_DIR_TMP.'plugin_xml_cache.gz'); |
|
| 82 | 82 | |
| 83 | 83 | include_spip('inc/auth'); |
| 84 | 84 | auth_synchroniser_distant(); |
@@ -117,8 +117,8 @@ discard block |
||
| 117 | 117 | $version_installee = $GLOBALS['meta']['version_installee'] ?? null; |
| 118 | 118 | |
| 119 | 119 | spip_log( |
| 120 | - "Version anterieure: $version_installee. Courante: " . $GLOBALS['spip_version_base'], |
|
| 121 | - 'maj.' . _LOG_INFO_IMPORTANTE |
|
| 120 | + "Version anterieure: $version_installee. Courante: ".$GLOBALS['spip_version_base'], |
|
| 121 | + 'maj.'._LOG_INFO_IMPORTANTE |
|
| 122 | 122 | ); |
| 123 | 123 | if (!$version_installee or ($GLOBALS['spip_version_base'] < $version_installee)) { |
| 124 | 124 | sql_replace( |
@@ -151,9 +151,9 @@ discard block |
||
| 151 | 151 | $res = maj_while($version_installee, $cible, $GLOBALS['maj'], 'version_installee', 'meta', $redirect, $debut_page); |
| 152 | 152 | if ($res) { |
| 153 | 153 | if (!is_array($res)) { |
| 154 | - spip_log("Pb d'acces SQL a la mise a jour", 'maj.' . _LOG_ERREUR); |
|
| 154 | + spip_log("Pb d'acces SQL a la mise a jour", 'maj.'._LOG_ERREUR); |
|
| 155 | 155 | } else { |
| 156 | - echo _T('avis_operation_echec') . ' ' . join(' ', $res); |
|
| 156 | + echo _T('avis_operation_echec').' '.join(' ', $res); |
|
| 157 | 157 | echo install_fin_html(); |
| 158 | 158 | } |
| 159 | 159 | } |
@@ -241,9 +241,9 @@ discard block |
||
| 241 | 241 | $res = maj_while($current_version, $version_cible, $maj, $nom_meta_base_version, $table_meta, $redirect); |
| 242 | 242 | if ($res) { |
| 243 | 243 | if (!is_array($res)) { |
| 244 | - spip_log("Pb d'acces SQL a la mise a jour", 'maj.' . _LOG_ERREUR); |
|
| 244 | + spip_log("Pb d'acces SQL a la mise a jour", 'maj.'._LOG_ERREUR); |
|
| 245 | 245 | } else { |
| 246 | - echo '<p>' . _T('avis_operation_echec') . ' ' . join(' ', $res) . '</p>'; |
|
| 246 | + echo '<p>'._T('avis_operation_echec').' '.join(' ', $res).'</p>'; |
|
| 247 | 247 | } |
| 248 | 248 | } |
| 249 | 249 | } |
@@ -299,7 +299,7 @@ discard block |
||
| 299 | 299 | echo(install_debut_html($titre)); |
| 300 | 300 | // script de rechargement auto sur timeout |
| 301 | 301 | $redirect = generer_url_ecrire('upgrade', "reinstall=$installee&meta=$meta&table=$table", true); |
| 302 | - echo http_script("window.setTimeout('location.href=\"" . $redirect . "\";'," . ($timeout * 1000) . ')'); |
|
| 302 | + echo http_script("window.setTimeout('location.href=\"".$redirect."\";',".($timeout * 1000).')'); |
|
| 303 | 303 | echo "<div style='text-align: left'>\n"; |
| 304 | 304 | if (ob_get_level()) { |
| 305 | 305 | ob_flush(); |
@@ -388,7 +388,7 @@ discard block |
||
| 388 | 388 | return [$v, $etape]; |
| 389 | 389 | } |
| 390 | 390 | $n = time() - $time; |
| 391 | - spip_log("$table $meta: $v en $n secondes", 'maj.' . _LOG_INFO_IMPORTANTE); |
|
| 391 | + spip_log("$table $meta: $v en $n secondes", 'maj.'._LOG_INFO_IMPORTANTE); |
|
| 392 | 392 | if ($meta) { |
| 393 | 393 | ecrire_meta($meta, $installee = $v, 'oui', $table); |
| 394 | 394 | } |
@@ -404,7 +404,7 @@ discard block |
||
| 404 | 404 | if ($meta) { |
| 405 | 405 | ecrire_meta($meta, $cible, 'oui', $table); |
| 406 | 406 | } |
| 407 | - spip_log("MAJ terminee. $meta: $installee", 'maj.' . _LOG_INFO_IMPORTANTE); |
|
| 407 | + spip_log("MAJ terminee. $meta: $installee", 'maj.'._LOG_INFO_IMPORTANTE); |
|
| 408 | 408 | |
| 409 | 409 | return []; |
| 410 | 410 | } |
@@ -429,7 +429,7 @@ discard block |
||
| 429 | 429 | * @return int |
| 430 | 430 | */ |
| 431 | 431 | function serie_alter($serie, $q = [], $meta = '', $table = 'meta', $redirect = '') { |
| 432 | - $meta2 = $meta . '_maj_' . $serie; |
|
| 432 | + $meta2 = $meta.'_maj_'.$serie; |
|
| 433 | 433 | $etape = 0; |
| 434 | 434 | if (isset($GLOBALS[$table][$meta2])) { |
| 435 | 435 | $etape = intval($GLOBALS[$table][$meta2]); |
@@ -442,7 +442,7 @@ discard block |
||
| 442 | 442 | and function_exists($f = array_shift($r)) |
| 443 | 443 | ) { |
| 444 | 444 | // note: $r (arguments de la fonction $f) peut avoir des données tabulaires |
| 445 | - spip_log("$msg: $f " . @join(',', $r), 'maj.' . _LOG_INFO_IMPORTANTE); |
|
| 445 | + spip_log("$msg: $f ".@join(',', $r), 'maj.'._LOG_INFO_IMPORTANTE); |
|
| 446 | 446 | // pour les fonctions atomiques sql_xx |
| 447 | 447 | // on enregistre le meta avant de lancer la fonction, |
| 448 | 448 | // de maniere a eviter de boucler sur timeout |
@@ -460,12 +460,12 @@ discard block |
||
| 460 | 460 | relance_maj($meta, $table, $redirect); |
| 461 | 461 | } |
| 462 | 462 | ecrire_meta($meta2, $i + 1, 'non', $table); |
| 463 | - spip_log("$meta2: ok", 'maj.' . _LOG_INFO_IMPORTANTE); |
|
| 463 | + spip_log("$meta2: ok", 'maj.'._LOG_INFO_IMPORTANTE); |
|
| 464 | 464 | } else { |
| 465 | 465 | if (!is_array($r)) { |
| 466 | - spip_log("maj $i format incorrect", 'maj.' . _LOG_ERREUR); |
|
| 466 | + spip_log("maj $i format incorrect", 'maj.'._LOG_ERREUR); |
|
| 467 | 467 | } else { |
| 468 | - spip_log("maj $i fonction $f non definie", 'maj.' . _LOG_ERREUR); |
|
| 468 | + spip_log("maj $i fonction $f non definie", 'maj.'._LOG_ERREUR); |
|
| 469 | 469 | } |
| 470 | 470 | // en cas d'erreur serieuse, on s'arrete |
| 471 | 471 | // mais on permet de passer par dessus en rechargeant la page. |
@@ -17,17 +17,17 @@ 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('_UPGRADE_TIME_OUT')) { |
| 24 | - /** |
|
| 25 | - * Durée en secondes pour relancer les scripts de mises à jour, x secondes |
|
| 26 | - * avant que la durée d'exécution du script provoque un timeout |
|
| 27 | - * |
|
| 28 | - * @var int |
|
| 29 | - **/ |
|
| 30 | - define('_UPGRADE_TIME_OUT', 20); |
|
| 24 | + /** |
|
| 25 | + * Durée en secondes pour relancer les scripts de mises à jour, x secondes |
|
| 26 | + * avant que la durée d'exécution du script provoque un timeout |
|
| 27 | + * |
|
| 28 | + * @var int |
|
| 29 | + **/ |
|
| 30 | + define('_UPGRADE_TIME_OUT', 20); |
|
| 31 | 31 | } |
| 32 | 32 | |
| 33 | 33 | /** |
@@ -50,40 +50,40 @@ discard block |
||
| 50 | 50 | * @return void |
| 51 | 51 | */ |
| 52 | 52 | function base_upgrade_dist($titre = '', $reprise = '') { |
| 53 | - if (!$titre) { |
|
| 54 | - return; |
|
| 55 | - } // anti-testeur automatique |
|
| 56 | - if ($GLOBALS['spip_version_base'] != $GLOBALS['meta']['version_installee']) { |
|
| 57 | - if (!is_numeric(_request('reinstall'))) { |
|
| 58 | - include_spip('base/create'); |
|
| 59 | - spip_log('recree les tables eventuellement disparues', 'maj.' . _LOG_INFO_IMPORTANTE); |
|
| 60 | - creer_base(); |
|
| 61 | - } |
|
| 62 | - |
|
| 63 | - // quand on rentre par ici, c'est toujours une mise a jour de SPIP |
|
| 64 | - // lancement de l'upgrade SPIP |
|
| 65 | - $res = maj_base(); |
|
| 66 | - |
|
| 67 | - if ($res) { |
|
| 68 | - // on arrete tout ici ! |
|
| 69 | - exit; |
|
| 70 | - } |
|
| 71 | - } |
|
| 72 | - spip_log('Fin de mise a jour SQL. Debut m-a-j acces et config', 'maj.' . _LOG_INFO_IMPORTANTE); |
|
| 73 | - |
|
| 74 | - // supprimer quelques fichiers temporaires qui peuvent se retrouver invalides |
|
| 75 | - @spip_unlink(_CACHE_RUBRIQUES); |
|
| 76 | - @spip_unlink(_CACHE_PIPELINES); |
|
| 77 | - @spip_unlink(_CACHE_PLUGINS_PATH); |
|
| 78 | - @spip_unlink(_CACHE_PLUGINS_OPT); |
|
| 79 | - @spip_unlink(_CACHE_PLUGINS_FCT); |
|
| 80 | - @spip_unlink(_CACHE_CHEMIN); |
|
| 81 | - @spip_unlink(_DIR_TMP . 'plugin_xml_cache.gz'); |
|
| 82 | - |
|
| 83 | - include_spip('inc/auth'); |
|
| 84 | - auth_synchroniser_distant(); |
|
| 85 | - $config = charger_fonction('config', 'inc'); |
|
| 86 | - $config(); |
|
| 53 | + if (!$titre) { |
|
| 54 | + return; |
|
| 55 | + } // anti-testeur automatique |
|
| 56 | + if ($GLOBALS['spip_version_base'] != $GLOBALS['meta']['version_installee']) { |
|
| 57 | + if (!is_numeric(_request('reinstall'))) { |
|
| 58 | + include_spip('base/create'); |
|
| 59 | + spip_log('recree les tables eventuellement disparues', 'maj.' . _LOG_INFO_IMPORTANTE); |
|
| 60 | + creer_base(); |
|
| 61 | + } |
|
| 62 | + |
|
| 63 | + // quand on rentre par ici, c'est toujours une mise a jour de SPIP |
|
| 64 | + // lancement de l'upgrade SPIP |
|
| 65 | + $res = maj_base(); |
|
| 66 | + |
|
| 67 | + if ($res) { |
|
| 68 | + // on arrete tout ici ! |
|
| 69 | + exit; |
|
| 70 | + } |
|
| 71 | + } |
|
| 72 | + spip_log('Fin de mise a jour SQL. Debut m-a-j acces et config', 'maj.' . _LOG_INFO_IMPORTANTE); |
|
| 73 | + |
|
| 74 | + // supprimer quelques fichiers temporaires qui peuvent se retrouver invalides |
|
| 75 | + @spip_unlink(_CACHE_RUBRIQUES); |
|
| 76 | + @spip_unlink(_CACHE_PIPELINES); |
|
| 77 | + @spip_unlink(_CACHE_PLUGINS_PATH); |
|
| 78 | + @spip_unlink(_CACHE_PLUGINS_OPT); |
|
| 79 | + @spip_unlink(_CACHE_PLUGINS_FCT); |
|
| 80 | + @spip_unlink(_CACHE_CHEMIN); |
|
| 81 | + @spip_unlink(_DIR_TMP . 'plugin_xml_cache.gz'); |
|
| 82 | + |
|
| 83 | + include_spip('inc/auth'); |
|
| 84 | + auth_synchroniser_distant(); |
|
| 85 | + $config = charger_fonction('config', 'inc'); |
|
| 86 | + $config(); |
|
| 87 | 87 | } |
| 88 | 88 | |
| 89 | 89 | /** |
@@ -114,51 +114,51 @@ discard block |
||
| 114 | 114 | */ |
| 115 | 115 | function maj_base($version_cible = 0, $redirect = '', $debut_page = true) { |
| 116 | 116 | |
| 117 | - $version_installee = $GLOBALS['meta']['version_installee'] ?? null; |
|
| 118 | - |
|
| 119 | - spip_log( |
|
| 120 | - "Version anterieure: $version_installee. Courante: " . $GLOBALS['spip_version_base'], |
|
| 121 | - 'maj.' . _LOG_INFO_IMPORTANTE |
|
| 122 | - ); |
|
| 123 | - if (!$version_installee or ($GLOBALS['spip_version_base'] < $version_installee)) { |
|
| 124 | - sql_replace( |
|
| 125 | - 'spip_meta', |
|
| 126 | - [ |
|
| 127 | - 'nom' => 'version_installee', |
|
| 128 | - 'valeur' => $GLOBALS['spip_version_base'], |
|
| 129 | - 'impt' => 'non' |
|
| 130 | - ] |
|
| 131 | - ); |
|
| 132 | - return false; |
|
| 133 | - } |
|
| 134 | - if (!upgrade_test()) { |
|
| 135 | - return true; |
|
| 136 | - } |
|
| 137 | - |
|
| 138 | - $cible = ($version_cible ?: $GLOBALS['spip_version_base']); |
|
| 139 | - |
|
| 140 | - if ($version_installee < 2021_01_01_00) { |
|
| 141 | - include_spip('maj/legacy/v21'); |
|
| 142 | - include_spip('maj/legacy/v30'); |
|
| 143 | - include_spip('maj/legacy/v31'); |
|
| 144 | - include_spip('maj/legacy/v32'); |
|
| 145 | - include_spip('maj/legacy/v40'); |
|
| 146 | - } |
|
| 147 | - |
|
| 148 | - include_spip('maj/2021'); |
|
| 149 | - |
|
| 150 | - ksort($GLOBALS['maj']); |
|
| 151 | - $res = maj_while($version_installee, $cible, $GLOBALS['maj'], 'version_installee', 'meta', $redirect, $debut_page); |
|
| 152 | - if ($res) { |
|
| 153 | - if (!is_array($res)) { |
|
| 154 | - spip_log("Pb d'acces SQL a la mise a jour", 'maj.' . _LOG_ERREUR); |
|
| 155 | - } else { |
|
| 156 | - echo _T('avis_operation_echec') . ' ' . join(' ', $res); |
|
| 157 | - echo install_fin_html(); |
|
| 158 | - } |
|
| 159 | - } |
|
| 160 | - |
|
| 161 | - return $res; |
|
| 117 | + $version_installee = $GLOBALS['meta']['version_installee'] ?? null; |
|
| 118 | + |
|
| 119 | + spip_log( |
|
| 120 | + "Version anterieure: $version_installee. Courante: " . $GLOBALS['spip_version_base'], |
|
| 121 | + 'maj.' . _LOG_INFO_IMPORTANTE |
|
| 122 | + ); |
|
| 123 | + if (!$version_installee or ($GLOBALS['spip_version_base'] < $version_installee)) { |
|
| 124 | + sql_replace( |
|
| 125 | + 'spip_meta', |
|
| 126 | + [ |
|
| 127 | + 'nom' => 'version_installee', |
|
| 128 | + 'valeur' => $GLOBALS['spip_version_base'], |
|
| 129 | + 'impt' => 'non' |
|
| 130 | + ] |
|
| 131 | + ); |
|
| 132 | + return false; |
|
| 133 | + } |
|
| 134 | + if (!upgrade_test()) { |
|
| 135 | + return true; |
|
| 136 | + } |
|
| 137 | + |
|
| 138 | + $cible = ($version_cible ?: $GLOBALS['spip_version_base']); |
|
| 139 | + |
|
| 140 | + if ($version_installee < 2021_01_01_00) { |
|
| 141 | + include_spip('maj/legacy/v21'); |
|
| 142 | + include_spip('maj/legacy/v30'); |
|
| 143 | + include_spip('maj/legacy/v31'); |
|
| 144 | + include_spip('maj/legacy/v32'); |
|
| 145 | + include_spip('maj/legacy/v40'); |
|
| 146 | + } |
|
| 147 | + |
|
| 148 | + include_spip('maj/2021'); |
|
| 149 | + |
|
| 150 | + ksort($GLOBALS['maj']); |
|
| 151 | + $res = maj_while($version_installee, $cible, $GLOBALS['maj'], 'version_installee', 'meta', $redirect, $debut_page); |
|
| 152 | + if ($res) { |
|
| 153 | + if (!is_array($res)) { |
|
| 154 | + spip_log("Pb d'acces SQL a la mise a jour", 'maj.' . _LOG_ERREUR); |
|
| 155 | + } else { |
|
| 156 | + echo _T('avis_operation_echec') . ' ' . join(' ', $res); |
|
| 157 | + echo install_fin_html(); |
|
| 158 | + } |
|
| 159 | + } |
|
| 160 | + |
|
| 161 | + return $res; |
|
| 162 | 162 | } |
| 163 | 163 | |
| 164 | 164 | /** |
@@ -200,53 +200,53 @@ discard block |
||
| 200 | 200 | */ |
| 201 | 201 | function maj_plugin($nom_meta_base_version, $version_cible, $maj, $table_meta = 'meta') { |
| 202 | 202 | |
| 203 | - if ($table_meta !== 'meta') { |
|
| 204 | - installer_table_meta($table_meta); |
|
| 205 | - } |
|
| 206 | - |
|
| 207 | - $current_version = null; |
|
| 208 | - |
|
| 209 | - if ( |
|
| 210 | - (!isset($GLOBALS[$table_meta][$nom_meta_base_version])) |
|
| 211 | - || (!spip_version_compare($current_version = $GLOBALS[$table_meta][$nom_meta_base_version], $version_cible, '=')) |
|
| 212 | - ) { |
|
| 213 | - // $maj['create'] contient les directives propres a la premiere creation de base |
|
| 214 | - // c'est une operation derogatoire qui fait aboutir directement dans la version_cible |
|
| 215 | - if (isset($maj['create'])) { |
|
| 216 | - if (!isset($GLOBALS[$table_meta][$nom_meta_base_version])) { |
|
| 217 | - // installation : on ne fait que l'operation create |
|
| 218 | - $maj = ['init' => $maj['create']]; |
|
| 219 | - // et on lui ajoute un appel a inc/config |
|
| 220 | - // pour creer les metas par defaut |
|
| 221 | - $config = charger_fonction('config', 'inc'); |
|
| 222 | - $maj[$version_cible] = [[$config]]; |
|
| 223 | - } |
|
| 224 | - // dans tous les cas enlever cet index du tableau |
|
| 225 | - unset($maj['create']); |
|
| 226 | - } |
|
| 227 | - // si init, deja dans le bon ordre |
|
| 228 | - if (!isset($maj['init'])) { |
|
| 229 | - include_spip('inc/plugin'); // pour spip_version_compare |
|
| 230 | - uksort($maj, 'spip_version_compare'); |
|
| 231 | - } |
|
| 232 | - |
|
| 233 | - // la redirection se fait par defaut sur la page d'administration des plugins |
|
| 234 | - // sauf lorsque nous sommes sur l'installation de SPIP |
|
| 235 | - // ou define _REDIRECT_MAJ_PLUGIN |
|
| 236 | - $redirect = (defined('_REDIRECT_MAJ_PLUGIN') ? _REDIRECT_MAJ_PLUGIN : generer_url_ecrire('admin_plugin')); |
|
| 237 | - if (defined('_ECRIRE_INSTALL')) { |
|
| 238 | - $redirect = parametre_url(generer_url_ecrire('install'), 'etape', _request('etape')); |
|
| 239 | - } |
|
| 240 | - |
|
| 241 | - $res = maj_while($current_version, $version_cible, $maj, $nom_meta_base_version, $table_meta, $redirect); |
|
| 242 | - if ($res) { |
|
| 243 | - if (!is_array($res)) { |
|
| 244 | - spip_log("Pb d'acces SQL a la mise a jour", 'maj.' . _LOG_ERREUR); |
|
| 245 | - } else { |
|
| 246 | - echo '<p>' . _T('avis_operation_echec') . ' ' . join(' ', $res) . '</p>'; |
|
| 247 | - } |
|
| 248 | - } |
|
| 249 | - } |
|
| 203 | + if ($table_meta !== 'meta') { |
|
| 204 | + installer_table_meta($table_meta); |
|
| 205 | + } |
|
| 206 | + |
|
| 207 | + $current_version = null; |
|
| 208 | + |
|
| 209 | + if ( |
|
| 210 | + (!isset($GLOBALS[$table_meta][$nom_meta_base_version])) |
|
| 211 | + || (!spip_version_compare($current_version = $GLOBALS[$table_meta][$nom_meta_base_version], $version_cible, '=')) |
|
| 212 | + ) { |
|
| 213 | + // $maj['create'] contient les directives propres a la premiere creation de base |
|
| 214 | + // c'est une operation derogatoire qui fait aboutir directement dans la version_cible |
|
| 215 | + if (isset($maj['create'])) { |
|
| 216 | + if (!isset($GLOBALS[$table_meta][$nom_meta_base_version])) { |
|
| 217 | + // installation : on ne fait que l'operation create |
|
| 218 | + $maj = ['init' => $maj['create']]; |
|
| 219 | + // et on lui ajoute un appel a inc/config |
|
| 220 | + // pour creer les metas par defaut |
|
| 221 | + $config = charger_fonction('config', 'inc'); |
|
| 222 | + $maj[$version_cible] = [[$config]]; |
|
| 223 | + } |
|
| 224 | + // dans tous les cas enlever cet index du tableau |
|
| 225 | + unset($maj['create']); |
|
| 226 | + } |
|
| 227 | + // si init, deja dans le bon ordre |
|
| 228 | + if (!isset($maj['init'])) { |
|
| 229 | + include_spip('inc/plugin'); // pour spip_version_compare |
|
| 230 | + uksort($maj, 'spip_version_compare'); |
|
| 231 | + } |
|
| 232 | + |
|
| 233 | + // la redirection se fait par defaut sur la page d'administration des plugins |
|
| 234 | + // sauf lorsque nous sommes sur l'installation de SPIP |
|
| 235 | + // ou define _REDIRECT_MAJ_PLUGIN |
|
| 236 | + $redirect = (defined('_REDIRECT_MAJ_PLUGIN') ? _REDIRECT_MAJ_PLUGIN : generer_url_ecrire('admin_plugin')); |
|
| 237 | + if (defined('_ECRIRE_INSTALL')) { |
|
| 238 | + $redirect = parametre_url(generer_url_ecrire('install'), 'etape', _request('etape')); |
|
| 239 | + } |
|
| 240 | + |
|
| 241 | + $res = maj_while($current_version, $version_cible, $maj, $nom_meta_base_version, $table_meta, $redirect); |
|
| 242 | + if ($res) { |
|
| 243 | + if (!is_array($res)) { |
|
| 244 | + spip_log("Pb d'acces SQL a la mise a jour", 'maj.' . _LOG_ERREUR); |
|
| 245 | + } else { |
|
| 246 | + echo '<p>' . _T('avis_operation_echec') . ' ' . join(' ', $res) . '</p>'; |
|
| 247 | + } |
|
| 248 | + } |
|
| 249 | + } |
|
| 250 | 250 | } |
| 251 | 251 | |
| 252 | 252 | /** |
@@ -263,17 +263,17 @@ discard block |
||
| 263 | 263 | * @return void |
| 264 | 264 | */ |
| 265 | 265 | function relance_maj($meta, $table, $redirect = '') { |
| 266 | - include_spip('inc/headers'); |
|
| 267 | - if (!$redirect) { |
|
| 268 | - // recuperer la valeur installee en cours |
|
| 269 | - // on la tronque numeriquement, elle ne sert pas reellement |
|
| 270 | - // sauf pour verifier que ce n'est pas oui ou non |
|
| 271 | - // sinon is_numeric va echouer sur un numero de version 1.2.3 |
|
| 272 | - $installee = intval($GLOBALS[$table][$meta]); |
|
| 273 | - $redirect = generer_url_ecrire('upgrade', "reinstall=$installee&meta=$meta&table=$table", true); |
|
| 274 | - } |
|
| 275 | - echo redirige_formulaire($redirect); |
|
| 276 | - exit(); |
|
| 266 | + include_spip('inc/headers'); |
|
| 267 | + if (!$redirect) { |
|
| 268 | + // recuperer la valeur installee en cours |
|
| 269 | + // on la tronque numeriquement, elle ne sert pas reellement |
|
| 270 | + // sauf pour verifier que ce n'est pas oui ou non |
|
| 271 | + // sinon is_numeric va echouer sur un numero de version 1.2.3 |
|
| 272 | + $installee = intval($GLOBALS[$table][$meta]); |
|
| 273 | + $redirect = generer_url_ecrire('upgrade', "reinstall=$installee&meta=$meta&table=$table", true); |
|
| 274 | + } |
|
| 275 | + echo redirige_formulaire($redirect); |
|
| 276 | + exit(); |
|
| 277 | 277 | } |
| 278 | 278 | |
| 279 | 279 | /** |
@@ -286,28 +286,28 @@ discard block |
||
| 286 | 286 | * @return void |
| 287 | 287 | */ |
| 288 | 288 | function maj_debut_page($installee, $meta, $table) { |
| 289 | - static $done = false; |
|
| 290 | - if ($done) { |
|
| 291 | - return; |
|
| 292 | - } |
|
| 293 | - include_spip('inc/minipres'); |
|
| 294 | - if (function_exists('ini_set')) { |
|
| 295 | - @ini_set('zlib.output_compression', '0'); // pour permettre l'affichage au fur et a mesure |
|
| 296 | - } |
|
| 297 | - $timeout = _UPGRADE_TIME_OUT * 2; |
|
| 298 | - $titre = _T('titre_page_upgrade'); |
|
| 299 | - $balise_img = charger_filtre('balise_img'); |
|
| 300 | - $titre .= $balise_img(chemin_image('loader.svg'), '', 'loader'); |
|
| 301 | - echo(install_debut_html($titre)); |
|
| 302 | - // script de rechargement auto sur timeout |
|
| 303 | - $redirect = generer_url_ecrire('upgrade', "reinstall=$installee&meta=$meta&table=$table", true); |
|
| 304 | - echo http_script("window.setTimeout('location.href=\"" . $redirect . "\";'," . ($timeout * 1000) . ')'); |
|
| 305 | - echo "<div style='text-align: left'>\n"; |
|
| 306 | - if (ob_get_level()) { |
|
| 307 | - ob_flush(); |
|
| 308 | - } |
|
| 309 | - flush(); |
|
| 310 | - $done = true; |
|
| 289 | + static $done = false; |
|
| 290 | + if ($done) { |
|
| 291 | + return; |
|
| 292 | + } |
|
| 293 | + include_spip('inc/minipres'); |
|
| 294 | + if (function_exists('ini_set')) { |
|
| 295 | + @ini_set('zlib.output_compression', '0'); // pour permettre l'affichage au fur et a mesure |
|
| 296 | + } |
|
| 297 | + $timeout = _UPGRADE_TIME_OUT * 2; |
|
| 298 | + $titre = _T('titre_page_upgrade'); |
|
| 299 | + $balise_img = charger_filtre('balise_img'); |
|
| 300 | + $titre .= $balise_img(chemin_image('loader.svg'), '', 'loader'); |
|
| 301 | + echo(install_debut_html($titre)); |
|
| 302 | + // script de rechargement auto sur timeout |
|
| 303 | + $redirect = generer_url_ecrire('upgrade', "reinstall=$installee&meta=$meta&table=$table", true); |
|
| 304 | + echo http_script("window.setTimeout('location.href=\"" . $redirect . "\";'," . ($timeout * 1000) . ')'); |
|
| 305 | + echo "<div style='text-align: left'>\n"; |
|
| 306 | + if (ob_get_level()) { |
|
| 307 | + ob_flush(); |
|
| 308 | + } |
|
| 309 | + flush(); |
|
| 310 | + $done = true; |
|
| 311 | 311 | } |
| 312 | 312 | |
| 313 | 313 | |
@@ -351,64 +351,64 @@ discard block |
||
| 351 | 351 | * - tableau vide sinon. |
| 352 | 352 | */ |
| 353 | 353 | function maj_while($installee, $cible, $maj, $meta = '', $table = 'meta', $redirect = '', $debut_page = false) { |
| 354 | - # inclusions pour que les procedures d'upgrade disposent des fonctions de base |
|
| 355 | - include_spip('base/create'); |
|
| 356 | - include_spip('base/abstract_sql'); |
|
| 357 | - $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 358 | - include_spip('inc/plugin'); // pour spip_version_compare |
|
| 359 | - $n = 0; |
|
| 360 | - $time = time(); |
|
| 361 | - |
|
| 362 | - if (!defined('_TIME_OUT')) { |
|
| 363 | - /** |
|
| 364 | - * Définir le timeout qui peut-être utilisé dans les fonctions |
|
| 365 | - * de mises à jour qui durent trop longtemps |
|
| 366 | - * |
|
| 367 | - * À utiliser tel que : `if (time() >= _TIME_OUT)` |
|
| 368 | - * |
|
| 369 | - * @var int |
|
| 370 | - */ |
|
| 371 | - define('_TIME_OUT', $time + _UPGRADE_TIME_OUT); |
|
| 372 | - } |
|
| 373 | - |
|
| 374 | - foreach ($maj as $v => $operations) { |
|
| 375 | - // si une maj pour cette version |
|
| 376 | - if ( |
|
| 377 | - $v == 'init' or |
|
| 378 | - (spip_version_compare($v, $installee, '>') |
|
| 379 | - and spip_version_compare($v, $cible, '<=')) |
|
| 380 | - ) { |
|
| 381 | - if ($debut_page) { |
|
| 382 | - maj_debut_page($v, $meta, $table); |
|
| 383 | - } |
|
| 384 | - echo "MAJ $v"; |
|
| 385 | - $etape = serie_alter($v, $operations, $meta, $table, $redirect); |
|
| 386 | - $trouver_table(''); // vider le cache des descriptions de table |
|
| 387 | - # echec sur une etape en cours ? |
|
| 388 | - # on sort |
|
| 389 | - if ($etape) { |
|
| 390 | - return [$v, $etape]; |
|
| 391 | - } |
|
| 392 | - $n = time() - $time; |
|
| 393 | - spip_log("$table $meta: $v en $n secondes", 'maj.' . _LOG_INFO_IMPORTANTE); |
|
| 394 | - if ($meta) { |
|
| 395 | - ecrire_meta($meta, $installee = $v, 'oui', $table); |
|
| 396 | - } |
|
| 397 | - echo (_IS_CLI ? "\n" : '<br />'); |
|
| 398 | - } |
|
| 399 | - if (time() >= _TIME_OUT) { |
|
| 400 | - relance_maj($meta, $table, $redirect); |
|
| 401 | - } |
|
| 402 | - } |
|
| 403 | - $trouver_table(''); // vider le cache des descriptions de table |
|
| 404 | - // indispensable pour les chgt de versions qui n'ecrivent pas en base |
|
| 405 | - // tant pis pour la redondance eventuelle avec ci-dessus |
|
| 406 | - if ($meta) { |
|
| 407 | - ecrire_meta($meta, $cible, 'oui', $table); |
|
| 408 | - } |
|
| 409 | - spip_log("MAJ terminee. $meta: $installee", 'maj.' . _LOG_INFO_IMPORTANTE); |
|
| 410 | - |
|
| 411 | - return []; |
|
| 354 | + # inclusions pour que les procedures d'upgrade disposent des fonctions de base |
|
| 355 | + include_spip('base/create'); |
|
| 356 | + include_spip('base/abstract_sql'); |
|
| 357 | + $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 358 | + include_spip('inc/plugin'); // pour spip_version_compare |
|
| 359 | + $n = 0; |
|
| 360 | + $time = time(); |
|
| 361 | + |
|
| 362 | + if (!defined('_TIME_OUT')) { |
|
| 363 | + /** |
|
| 364 | + * Définir le timeout qui peut-être utilisé dans les fonctions |
|
| 365 | + * de mises à jour qui durent trop longtemps |
|
| 366 | + * |
|
| 367 | + * À utiliser tel que : `if (time() >= _TIME_OUT)` |
|
| 368 | + * |
|
| 369 | + * @var int |
|
| 370 | + */ |
|
| 371 | + define('_TIME_OUT', $time + _UPGRADE_TIME_OUT); |
|
| 372 | + } |
|
| 373 | + |
|
| 374 | + foreach ($maj as $v => $operations) { |
|
| 375 | + // si une maj pour cette version |
|
| 376 | + if ( |
|
| 377 | + $v == 'init' or |
|
| 378 | + (spip_version_compare($v, $installee, '>') |
|
| 379 | + and spip_version_compare($v, $cible, '<=')) |
|
| 380 | + ) { |
|
| 381 | + if ($debut_page) { |
|
| 382 | + maj_debut_page($v, $meta, $table); |
|
| 383 | + } |
|
| 384 | + echo "MAJ $v"; |
|
| 385 | + $etape = serie_alter($v, $operations, $meta, $table, $redirect); |
|
| 386 | + $trouver_table(''); // vider le cache des descriptions de table |
|
| 387 | + # echec sur une etape en cours ? |
|
| 388 | + # on sort |
|
| 389 | + if ($etape) { |
|
| 390 | + return [$v, $etape]; |
|
| 391 | + } |
|
| 392 | + $n = time() - $time; |
|
| 393 | + spip_log("$table $meta: $v en $n secondes", 'maj.' . _LOG_INFO_IMPORTANTE); |
|
| 394 | + if ($meta) { |
|
| 395 | + ecrire_meta($meta, $installee = $v, 'oui', $table); |
|
| 396 | + } |
|
| 397 | + echo (_IS_CLI ? "\n" : '<br />'); |
|
| 398 | + } |
|
| 399 | + if (time() >= _TIME_OUT) { |
|
| 400 | + relance_maj($meta, $table, $redirect); |
|
| 401 | + } |
|
| 402 | + } |
|
| 403 | + $trouver_table(''); // vider le cache des descriptions de table |
|
| 404 | + // indispensable pour les chgt de versions qui n'ecrivent pas en base |
|
| 405 | + // tant pis pour la redondance eventuelle avec ci-dessus |
|
| 406 | + if ($meta) { |
|
| 407 | + ecrire_meta($meta, $cible, 'oui', $table); |
|
| 408 | + } |
|
| 409 | + spip_log("MAJ terminee. $meta: $installee", 'maj.' . _LOG_INFO_IMPORTANTE); |
|
| 410 | + |
|
| 411 | + return []; |
|
| 412 | 412 | } |
| 413 | 413 | |
| 414 | 414 | /** |
@@ -431,53 +431,53 @@ discard block |
||
| 431 | 431 | * @return int |
| 432 | 432 | */ |
| 433 | 433 | function serie_alter($serie, $q = [], $meta = '', $table = 'meta', $redirect = '') { |
| 434 | - $meta2 = $meta . '_maj_' . $serie; |
|
| 435 | - $etape = 0; |
|
| 436 | - if (isset($GLOBALS[$table][$meta2])) { |
|
| 437 | - $etape = intval($GLOBALS[$table][$meta2]); |
|
| 438 | - } |
|
| 439 | - foreach ($q as $i => $r) { |
|
| 440 | - if ($i >= $etape) { |
|
| 441 | - $msg = "maj $table $meta2 etape $i"; |
|
| 442 | - if ( |
|
| 443 | - is_array($r) |
|
| 444 | - and function_exists($f = array_shift($r)) |
|
| 445 | - ) { |
|
| 446 | - // note: $r (arguments de la fonction $f) peut avoir des données tabulaires |
|
| 447 | - spip_log("$msg: $f " . @join(',', $r), 'maj.' . _LOG_INFO_IMPORTANTE); |
|
| 448 | - // pour les fonctions atomiques sql_xx |
|
| 449 | - // on enregistre le meta avant de lancer la fonction, |
|
| 450 | - // de maniere a eviter de boucler sur timeout |
|
| 451 | - // mais pour les fonctions complexes, |
|
| 452 | - // il faut les rejouer jusqu'a achevement. |
|
| 453 | - // C'est a elle d'assurer qu'elles progressent a chaque rappel |
|
| 454 | - if (strncmp($f, 'sql_', 4) == 0) { |
|
| 455 | - ecrire_meta($meta2, $i + 1, 'non', $table); |
|
| 456 | - } |
|
| 457 | - echo (_IS_CLI ? '.' : " <span title='$i'>.</span>"); |
|
| 458 | - $f(...$r); |
|
| 459 | - // si temps imparti depasse, on relance sans ecrire en meta |
|
| 460 | - // car on est peut etre sorti sur timeout si c'est une fonction longue |
|
| 461 | - if (time() >= _TIME_OUT) { |
|
| 462 | - relance_maj($meta, $table, $redirect); |
|
| 463 | - } |
|
| 464 | - ecrire_meta($meta2, $i + 1, 'non', $table); |
|
| 465 | - spip_log("$meta2: ok", 'maj.' . _LOG_INFO_IMPORTANTE); |
|
| 466 | - } else { |
|
| 467 | - if (!is_array($r)) { |
|
| 468 | - spip_log("maj $i format incorrect", 'maj.' . _LOG_ERREUR); |
|
| 469 | - } else { |
|
| 470 | - spip_log("maj $i fonction $f non definie", 'maj.' . _LOG_ERREUR); |
|
| 471 | - } |
|
| 472 | - // en cas d'erreur serieuse, on s'arrete |
|
| 473 | - // mais on permet de passer par dessus en rechargeant la page. |
|
| 474 | - return $i + 1; |
|
| 475 | - } |
|
| 476 | - } |
|
| 477 | - } |
|
| 478 | - effacer_meta($meta2, $table); |
|
| 479 | - |
|
| 480 | - return 0; |
|
| 434 | + $meta2 = $meta . '_maj_' . $serie; |
|
| 435 | + $etape = 0; |
|
| 436 | + if (isset($GLOBALS[$table][$meta2])) { |
|
| 437 | + $etape = intval($GLOBALS[$table][$meta2]); |
|
| 438 | + } |
|
| 439 | + foreach ($q as $i => $r) { |
|
| 440 | + if ($i >= $etape) { |
|
| 441 | + $msg = "maj $table $meta2 etape $i"; |
|
| 442 | + if ( |
|
| 443 | + is_array($r) |
|
| 444 | + and function_exists($f = array_shift($r)) |
|
| 445 | + ) { |
|
| 446 | + // note: $r (arguments de la fonction $f) peut avoir des données tabulaires |
|
| 447 | + spip_log("$msg: $f " . @join(',', $r), 'maj.' . _LOG_INFO_IMPORTANTE); |
|
| 448 | + // pour les fonctions atomiques sql_xx |
|
| 449 | + // on enregistre le meta avant de lancer la fonction, |
|
| 450 | + // de maniere a eviter de boucler sur timeout |
|
| 451 | + // mais pour les fonctions complexes, |
|
| 452 | + // il faut les rejouer jusqu'a achevement. |
|
| 453 | + // C'est a elle d'assurer qu'elles progressent a chaque rappel |
|
| 454 | + if (strncmp($f, 'sql_', 4) == 0) { |
|
| 455 | + ecrire_meta($meta2, $i + 1, 'non', $table); |
|
| 456 | + } |
|
| 457 | + echo (_IS_CLI ? '.' : " <span title='$i'>.</span>"); |
|
| 458 | + $f(...$r); |
|
| 459 | + // si temps imparti depasse, on relance sans ecrire en meta |
|
| 460 | + // car on est peut etre sorti sur timeout si c'est une fonction longue |
|
| 461 | + if (time() >= _TIME_OUT) { |
|
| 462 | + relance_maj($meta, $table, $redirect); |
|
| 463 | + } |
|
| 464 | + ecrire_meta($meta2, $i + 1, 'non', $table); |
|
| 465 | + spip_log("$meta2: ok", 'maj.' . _LOG_INFO_IMPORTANTE); |
|
| 466 | + } else { |
|
| 467 | + if (!is_array($r)) { |
|
| 468 | + spip_log("maj $i format incorrect", 'maj.' . _LOG_ERREUR); |
|
| 469 | + } else { |
|
| 470 | + spip_log("maj $i fonction $f non definie", 'maj.' . _LOG_ERREUR); |
|
| 471 | + } |
|
| 472 | + // en cas d'erreur serieuse, on s'arrete |
|
| 473 | + // mais on permet de passer par dessus en rechargeant la page. |
|
| 474 | + return $i + 1; |
|
| 475 | + } |
|
| 476 | + } |
|
| 477 | + } |
|
| 478 | + effacer_meta($meta2, $table); |
|
| 479 | + |
|
| 480 | + return 0; |
|
| 481 | 481 | } |
| 482 | 482 | |
| 483 | 483 | /** |
@@ -486,16 +486,16 @@ discard block |
||
| 486 | 486 | * @return bool True si possible. |
| 487 | 487 | **/ |
| 488 | 488 | function upgrade_test() { |
| 489 | - sql_drop_table('spip_test', true); |
|
| 490 | - sql_create('spip_test', ['a' => 'int']); |
|
| 491 | - sql_alter('TABLE spip_test ADD b INT'); |
|
| 492 | - sql_insertq('spip_test', ['b' => 1], ['field' => ['b' => 'int']]); |
|
| 493 | - $result = sql_select('b', 'spip_test'); |
|
| 494 | - // ne pas garder le resultat de la requete sinon sqlite3 |
|
| 495 | - // ne peut pas supprimer la table spip_test lors du sql_alter qui suit |
|
| 496 | - // car cette table serait alors 'verouillee' |
|
| 497 | - $result = $result ? true : false; |
|
| 498 | - sql_alter('TABLE spip_test DROP b'); |
|
| 499 | - |
|
| 500 | - return $result; |
|
| 489 | + sql_drop_table('spip_test', true); |
|
| 490 | + sql_create('spip_test', ['a' => 'int']); |
|
| 491 | + sql_alter('TABLE spip_test ADD b INT'); |
|
| 492 | + sql_insertq('spip_test', ['b' => 1], ['field' => ['b' => 'int']]); |
|
| 493 | + $result = sql_select('b', 'spip_test'); |
|
| 494 | + // ne pas garder le resultat de la requete sinon sqlite3 |
|
| 495 | + // ne peut pas supprimer la table spip_test lors du sql_alter qui suit |
|
| 496 | + // car cette table serait alors 'verouillee' |
|
| 497 | + $result = $result ? true : false; |
|
| 498 | + sql_alter('TABLE spip_test DROP b'); |
|
| 499 | + |
|
| 500 | + return $result; |
|
| 501 | 501 | } |