@@ -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 | |
| 17 | 17 | /** |
@@ -21,31 +21,31 @@ discard block |
||
| 21 | 21 | * @return array |
| 22 | 22 | */ |
| 23 | 23 | function plugins_extraire_boutons_dist($arbre) { |
| 24 | - $les_boutons = null; |
|
| 25 | - $ret = ['bouton' => [], 'onglet' => []]; |
|
| 26 | - // recuperer les boutons et onglets si necessaire |
|
| 27 | - spip_xml_match_nodes(',^(bouton|onglet)\s,', $arbre, $les_boutons); |
|
| 28 | - if (is_array($les_boutons) && count($les_boutons)) { |
|
| 29 | - $ret['bouton'] = []; |
|
| 30 | - $ret['onglet'] = []; |
|
| 31 | - foreach ($les_boutons as $bouton => $val) { |
|
| 32 | - $bouton = spip_xml_decompose_tag($bouton); |
|
| 33 | - $type = reset($bouton); |
|
| 34 | - $bouton = end($bouton); |
|
| 35 | - if (isset($bouton['id'])) { |
|
| 36 | - $id = $bouton['id']; |
|
| 37 | - $val = reset($val); |
|
| 38 | - if (is_array($val)) { |
|
| 39 | - $ret[$type][$id]['parent'] = $bouton['parent'] ?? ''; |
|
| 40 | - $ret[$type][$id]['position'] = $bouton['position'] ?? ''; |
|
| 41 | - $ret[$type][$id]['titre'] = isset($val['titre']) ? trim(spip_xml_aplatit($val['titre'])) : ''; |
|
| 42 | - $ret[$type][$id]['icone'] = isset($val['icone']) ? trim(end($val['icone'])) : ''; |
|
| 43 | - $ret[$type][$id]['action'] = isset($val['url']) ? trim(end($val['url'])) : ''; |
|
| 44 | - $ret[$type][$id]['parametres'] = isset($val['args']) ? trim(end($val['args'])) : ''; |
|
| 45 | - } |
|
| 46 | - } |
|
| 47 | - } |
|
| 48 | - } |
|
| 24 | + $les_boutons = null; |
|
| 25 | + $ret = ['bouton' => [], 'onglet' => []]; |
|
| 26 | + // recuperer les boutons et onglets si necessaire |
|
| 27 | + spip_xml_match_nodes(',^(bouton|onglet)\s,', $arbre, $les_boutons); |
|
| 28 | + if (is_array($les_boutons) && count($les_boutons)) { |
|
| 29 | + $ret['bouton'] = []; |
|
| 30 | + $ret['onglet'] = []; |
|
| 31 | + foreach ($les_boutons as $bouton => $val) { |
|
| 32 | + $bouton = spip_xml_decompose_tag($bouton); |
|
| 33 | + $type = reset($bouton); |
|
| 34 | + $bouton = end($bouton); |
|
| 35 | + if (isset($bouton['id'])) { |
|
| 36 | + $id = $bouton['id']; |
|
| 37 | + $val = reset($val); |
|
| 38 | + if (is_array($val)) { |
|
| 39 | + $ret[$type][$id]['parent'] = $bouton['parent'] ?? ''; |
|
| 40 | + $ret[$type][$id]['position'] = $bouton['position'] ?? ''; |
|
| 41 | + $ret[$type][$id]['titre'] = isset($val['titre']) ? trim(spip_xml_aplatit($val['titre'])) : ''; |
|
| 42 | + $ret[$type][$id]['icone'] = isset($val['icone']) ? trim(end($val['icone'])) : ''; |
|
| 43 | + $ret[$type][$id]['action'] = isset($val['url']) ? trim(end($val['url'])) : ''; |
|
| 44 | + $ret[$type][$id]['parametres'] = isset($val['args']) ? trim(end($val['args'])) : ''; |
|
| 45 | + } |
|
| 46 | + } |
|
| 47 | + } |
|
| 48 | + } |
|
| 49 | 49 | |
| 50 | - return $ret; |
|
| 50 | + return $ret; |
|
| 51 | 51 | } |
@@ -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 | |
| 17 | 17 | /** |
@@ -29,50 +29,50 @@ discard block |
||
| 29 | 29 | * @return void |
| 30 | 30 | */ |
| 31 | 31 | |
| 32 | - /** @var bool Évaluation réussie ? */ |
|
| 32 | + /** @var bool Évaluation réussie ? */ |
|
| 33 | 33 | $res = true; |
| 34 | 34 | |
| 35 | 35 | // Cas d'une page contenant du PHP : |
| 36 | 36 | if (empty($page['process_ins']) or $page['process_ins'] != 'html') { |
| 37 | - include_spip('inc/lang'); |
|
| 37 | + include_spip('inc/lang'); |
|
| 38 | 38 | |
| 39 | - // restaurer l'etat des notes avant calcul |
|
| 40 | - if ( |
|
| 41 | - isset($page['notes']) |
|
| 42 | - and $page['notes'] |
|
| 43 | - and $notes = charger_fonction('notes', 'inc', true) |
|
| 44 | - ) { |
|
| 45 | - $notes($page['notes'], 'restaurer_etat'); |
|
| 46 | - } |
|
| 47 | - ob_start(); |
|
| 48 | - if (strpos($page['texte'], '?xml') !== false) { |
|
| 49 | - $page['texte'] = str_replace('<' . '?xml', "<\1?xml", $page['texte']); |
|
| 50 | - } |
|
| 39 | + // restaurer l'etat des notes avant calcul |
|
| 40 | + if ( |
|
| 41 | + isset($page['notes']) |
|
| 42 | + and $page['notes'] |
|
| 43 | + and $notes = charger_fonction('notes', 'inc', true) |
|
| 44 | + ) { |
|
| 45 | + $notes($page['notes'], 'restaurer_etat'); |
|
| 46 | + } |
|
| 47 | + ob_start(); |
|
| 48 | + if (strpos($page['texte'], '?xml') !== false) { |
|
| 49 | + $page['texte'] = str_replace('<' . '?xml', "<\1?xml", $page['texte']); |
|
| 50 | + } |
|
| 51 | 51 | |
| 52 | - try { |
|
| 53 | - $res = eval('?' . '>' . $page['texte']); |
|
| 54 | - $page['texte'] = ob_get_contents(); |
|
| 55 | - } catch (\Throwable $e) { |
|
| 56 | - $code = $page['texte']; |
|
| 57 | - $GLOBALS['numero_ligne_php'] = 1; |
|
| 58 | - if (!function_exists('numerote_ligne_php')) { |
|
| 59 | - function numerote_ligne_php($match) { |
|
| 60 | - $GLOBALS['numero_ligne_php']++; |
|
| 61 | - return "\n/*" . str_pad($GLOBALS['numero_ligne_php'], 3, '0', STR_PAD_LEFT) . '*/'; |
|
| 62 | - } |
|
| 63 | - } |
|
| 64 | - $code = '/*001*/' . preg_replace_callback(",\n,", 'numerote_ligne_php', $code); |
|
| 65 | - $code = trim(highlight_string($code, true)); |
|
| 66 | - erreur_squelette('L' . $e->getLine() . ': ' . $e->getMessage() . '<br />' . $code, [$page['source'],'',$e->getFile(),'',$GLOBALS['spip_lang']]); |
|
| 67 | - $page['texte'] = '<!-- Erreur -->'; |
|
| 68 | - } |
|
| 69 | - ob_end_clean(); |
|
| 52 | + try { |
|
| 53 | + $res = eval('?' . '>' . $page['texte']); |
|
| 54 | + $page['texte'] = ob_get_contents(); |
|
| 55 | + } catch (\Throwable $e) { |
|
| 56 | + $code = $page['texte']; |
|
| 57 | + $GLOBALS['numero_ligne_php'] = 1; |
|
| 58 | + if (!function_exists('numerote_ligne_php')) { |
|
| 59 | + function numerote_ligne_php($match) { |
|
| 60 | + $GLOBALS['numero_ligne_php']++; |
|
| 61 | + return "\n/*" . str_pad($GLOBALS['numero_ligne_php'], 3, '0', STR_PAD_LEFT) . '*/'; |
|
| 62 | + } |
|
| 63 | + } |
|
| 64 | + $code = '/*001*/' . preg_replace_callback(",\n,", 'numerote_ligne_php', $code); |
|
| 65 | + $code = trim(highlight_string($code, true)); |
|
| 66 | + erreur_squelette('L' . $e->getLine() . ': ' . $e->getMessage() . '<br />' . $code, [$page['source'],'',$e->getFile(),'',$GLOBALS['spip_lang']]); |
|
| 67 | + $page['texte'] = '<!-- Erreur -->'; |
|
| 68 | + } |
|
| 69 | + ob_end_clean(); |
|
| 70 | 70 | |
| 71 | - $page['process_ins'] = 'html'; |
|
| 71 | + $page['process_ins'] = 'html'; |
|
| 72 | 72 | |
| 73 | - if (strpos($page['texte'], '?xml') !== false) { |
|
| 74 | - $page['texte'] = str_replace("<\1?xml", '<' . '?xml', $page['texte']); |
|
| 75 | - } |
|
| 73 | + if (strpos($page['texte'], '?xml') !== false) { |
|
| 74 | + $page['texte'] = str_replace("<\1?xml", '<' . '?xml', $page['texte']); |
|
| 75 | + } |
|
| 76 | 76 | } |
| 77 | 77 | |
| 78 | 78 | page_base_href($page['texte']); |
@@ -46,11 +46,11 @@ discard block |
||
| 46 | 46 | } |
| 47 | 47 | ob_start(); |
| 48 | 48 | if (strpos($page['texte'], '?xml') !== false) { |
| 49 | - $page['texte'] = str_replace('<' . '?xml', "<\1?xml", $page['texte']); |
|
| 49 | + $page['texte'] = str_replace('<'.'?xml', "<\1?xml", $page['texte']); |
|
| 50 | 50 | } |
| 51 | 51 | |
| 52 | 52 | try { |
| 53 | - $res = eval('?' . '>' . $page['texte']); |
|
| 53 | + $res = eval('?'.'>'.$page['texte']); |
|
| 54 | 54 | $page['texte'] = ob_get_contents(); |
| 55 | 55 | } catch (\Throwable $e) { |
| 56 | 56 | $code = $page['texte']; |
@@ -58,12 +58,12 @@ discard block |
||
| 58 | 58 | if (!function_exists('numerote_ligne_php')) { |
| 59 | 59 | function numerote_ligne_php($match) { |
| 60 | 60 | $GLOBALS['numero_ligne_php']++; |
| 61 | - return "\n/*" . str_pad($GLOBALS['numero_ligne_php'], 3, '0', STR_PAD_LEFT) . '*/'; |
|
| 61 | + return "\n/*".str_pad($GLOBALS['numero_ligne_php'], 3, '0', STR_PAD_LEFT).'*/'; |
|
| 62 | 62 | } |
| 63 | 63 | } |
| 64 | - $code = '/*001*/' . preg_replace_callback(",\n,", 'numerote_ligne_php', $code); |
|
| 64 | + $code = '/*001*/'.preg_replace_callback(",\n,", 'numerote_ligne_php', $code); |
|
| 65 | 65 | $code = trim(highlight_string($code, true)); |
| 66 | - erreur_squelette('L' . $e->getLine() . ': ' . $e->getMessage() . '<br />' . $code, [$page['source'],'',$e->getFile(),'',$GLOBALS['spip_lang']]); |
|
| 66 | + erreur_squelette('L'.$e->getLine().': '.$e->getMessage().'<br />'.$code, [$page['source'], '', $e->getFile(), '', $GLOBALS['spip_lang']]); |
|
| 67 | 67 | $page['texte'] = '<!-- Erreur -->'; |
| 68 | 68 | } |
| 69 | 69 | ob_end_clean(); |
@@ -71,7 +71,7 @@ discard block |
||
| 71 | 71 | $page['process_ins'] = 'html'; |
| 72 | 72 | |
| 73 | 73 | if (strpos($page['texte'], '?xml') !== false) { |
| 74 | - $page['texte'] = str_replace("<\1?xml", '<' . '?xml', $page['texte']); |
|
| 74 | + $page['texte'] = str_replace("<\1?xml", '<'.'?xml', $page['texte']); |
|
| 75 | 75 | } |
| 76 | 76 | } |
| 77 | 77 | |
@@ -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 | |
@@ -54,65 +54,65 @@ discard block |
||
| 54 | 54 | * true si le statut change effectivement |
| 55 | 55 | **/ |
| 56 | 56 | function calculer_rubriques_if($id_rubrique, $modifs, $infos = [], $postdate = false) { |
| 57 | - $statuts_publies = null; |
|
| 58 | - $neuf = false; |
|
| 59 | - |
|
| 60 | - // Compat avec l'ancienne signature |
|
| 61 | - if (is_string($infos)) { |
|
| 62 | - $infos = ['statut_ancien' => $infos]; |
|
| 63 | - } |
|
| 64 | - if (!isset($infos['statut_ancien'])) { |
|
| 65 | - $infos['statut_ancien'] = ''; |
|
| 66 | - } |
|
| 67 | - |
|
| 68 | - // On recherche quels statuts tester |
|
| 69 | - if ( |
|
| 70 | - isset($infos['objet']) |
|
| 71 | - and include_spip('inc/filtres') |
|
| 72 | - and $declaration_statut = objet_info($infos['objet'], 'statut') |
|
| 73 | - and is_array($declaration_statut) |
|
| 74 | - ) { |
|
| 75 | - foreach ($declaration_statut as $champ_statut) { |
|
| 76 | - if ($champ_statut['champ'] == 'statut') { |
|
| 77 | - $statuts_publies = array_map('trim', explode(',', $champ_statut['publie'])); |
|
| 78 | - break; // stop on a trouvé le bon champ |
|
| 79 | - } |
|
| 80 | - } |
|
| 81 | - } else { |
|
| 82 | - $statuts_publies = ['publie']; |
|
| 83 | - } |
|
| 84 | - |
|
| 85 | - if (in_array($infos['statut_ancien'], $statuts_publies)) { |
|
| 86 | - if ( |
|
| 87 | - isset($modifs['statut']) |
|
| 88 | - or isset($modifs['id_rubrique']) |
|
| 89 | - or ($postdate and strtotime($postdate) > time()) |
|
| 90 | - ) { |
|
| 91 | - $neuf |= depublier_branche_rubrique_if($id_rubrique); |
|
| 92 | - } |
|
| 93 | - // ne publier que si c'est pas un postdate, ou si la date n'est pas dans le futur |
|
| 94 | - if ($postdate) { |
|
| 95 | - calculer_prochain_postdate(true); |
|
| 96 | - $neuf |= (strtotime($postdate) <= time()); // par securite |
|
| 97 | - } elseif (isset($modifs['id_rubrique'])) { |
|
| 98 | - $neuf |= publier_branche_rubrique($modifs['id_rubrique']); |
|
| 99 | - } |
|
| 100 | - } elseif (isset($modifs['statut']) and in_array($modifs['statut'], $statuts_publies)) { |
|
| 101 | - if ($postdate) { |
|
| 102 | - calculer_prochain_postdate(true); |
|
| 103 | - $neuf |= (strtotime($postdate) <= time()); // par securite |
|
| 104 | - } else { |
|
| 105 | - $neuf |= publier_branche_rubrique($id_rubrique); |
|
| 106 | - } |
|
| 107 | - } |
|
| 108 | - |
|
| 109 | - if ($neuf) { |
|
| 110 | - // Sauver la date de la derniere mise a jour (pour menu_rubriques) |
|
| 111 | - ecrire_meta('date_calcul_rubriques', date('U')); |
|
| 112 | - } |
|
| 113 | - |
|
| 114 | - $langues = calculer_langues_utilisees(); |
|
| 115 | - ecrire_meta('langues_utilisees', $langues); |
|
| 57 | + $statuts_publies = null; |
|
| 58 | + $neuf = false; |
|
| 59 | + |
|
| 60 | + // Compat avec l'ancienne signature |
|
| 61 | + if (is_string($infos)) { |
|
| 62 | + $infos = ['statut_ancien' => $infos]; |
|
| 63 | + } |
|
| 64 | + if (!isset($infos['statut_ancien'])) { |
|
| 65 | + $infos['statut_ancien'] = ''; |
|
| 66 | + } |
|
| 67 | + |
|
| 68 | + // On recherche quels statuts tester |
|
| 69 | + if ( |
|
| 70 | + isset($infos['objet']) |
|
| 71 | + and include_spip('inc/filtres') |
|
| 72 | + and $declaration_statut = objet_info($infos['objet'], 'statut') |
|
| 73 | + and is_array($declaration_statut) |
|
| 74 | + ) { |
|
| 75 | + foreach ($declaration_statut as $champ_statut) { |
|
| 76 | + if ($champ_statut['champ'] == 'statut') { |
|
| 77 | + $statuts_publies = array_map('trim', explode(',', $champ_statut['publie'])); |
|
| 78 | + break; // stop on a trouvé le bon champ |
|
| 79 | + } |
|
| 80 | + } |
|
| 81 | + } else { |
|
| 82 | + $statuts_publies = ['publie']; |
|
| 83 | + } |
|
| 84 | + |
|
| 85 | + if (in_array($infos['statut_ancien'], $statuts_publies)) { |
|
| 86 | + if ( |
|
| 87 | + isset($modifs['statut']) |
|
| 88 | + or isset($modifs['id_rubrique']) |
|
| 89 | + or ($postdate and strtotime($postdate) > time()) |
|
| 90 | + ) { |
|
| 91 | + $neuf |= depublier_branche_rubrique_if($id_rubrique); |
|
| 92 | + } |
|
| 93 | + // ne publier que si c'est pas un postdate, ou si la date n'est pas dans le futur |
|
| 94 | + if ($postdate) { |
|
| 95 | + calculer_prochain_postdate(true); |
|
| 96 | + $neuf |= (strtotime($postdate) <= time()); // par securite |
|
| 97 | + } elseif (isset($modifs['id_rubrique'])) { |
|
| 98 | + $neuf |= publier_branche_rubrique($modifs['id_rubrique']); |
|
| 99 | + } |
|
| 100 | + } elseif (isset($modifs['statut']) and in_array($modifs['statut'], $statuts_publies)) { |
|
| 101 | + if ($postdate) { |
|
| 102 | + calculer_prochain_postdate(true); |
|
| 103 | + $neuf |= (strtotime($postdate) <= time()); // par securite |
|
| 104 | + } else { |
|
| 105 | + $neuf |= publier_branche_rubrique($id_rubrique); |
|
| 106 | + } |
|
| 107 | + } |
|
| 108 | + |
|
| 109 | + if ($neuf) { |
|
| 110 | + // Sauver la date de la derniere mise a jour (pour menu_rubriques) |
|
| 111 | + ecrire_meta('date_calcul_rubriques', date('U')); |
|
| 112 | + } |
|
| 113 | + |
|
| 114 | + $langues = calculer_langues_utilisees(); |
|
| 115 | + ecrire_meta('langues_utilisees', $langues); |
|
| 116 | 116 | } |
| 117 | 117 | |
| 118 | 118 | |
@@ -130,22 +130,22 @@ discard block |
||
| 130 | 130 | * true si le statut change effectivement |
| 131 | 131 | */ |
| 132 | 132 | function publier_branche_rubrique($id_rubrique) { |
| 133 | - $id_pred = $id_rubrique; |
|
| 134 | - while (true) { |
|
| 135 | - sql_updateq( |
|
| 136 | - 'spip_rubriques', |
|
| 137 | - ['statut' => 'publie', 'date' => date('Y-m-d H:i:s')], |
|
| 138 | - 'id_rubrique=' . intval($id_rubrique) |
|
| 139 | - ); |
|
| 140 | - $id_parent = sql_getfetsel('id_parent', 'spip_rubriques AS R', 'R.id_rubrique=' . intval($id_rubrique)); |
|
| 141 | - if (!$id_parent) { |
|
| 142 | - break; |
|
| 143 | - } |
|
| 144 | - $id_rubrique = $id_parent; |
|
| 145 | - } |
|
| 133 | + $id_pred = $id_rubrique; |
|
| 134 | + while (true) { |
|
| 135 | + sql_updateq( |
|
| 136 | + 'spip_rubriques', |
|
| 137 | + ['statut' => 'publie', 'date' => date('Y-m-d H:i:s')], |
|
| 138 | + 'id_rubrique=' . intval($id_rubrique) |
|
| 139 | + ); |
|
| 140 | + $id_parent = sql_getfetsel('id_parent', 'spip_rubriques AS R', 'R.id_rubrique=' . intval($id_rubrique)); |
|
| 141 | + if (!$id_parent) { |
|
| 142 | + break; |
|
| 143 | + } |
|
| 144 | + $id_rubrique = $id_parent; |
|
| 145 | + } |
|
| 146 | 146 | |
| 147 | 147 | # spip_log(" publier_branche_rubrique($id_rubrique $id_pred"); |
| 148 | - return $id_pred != $id_rubrique; |
|
| 148 | + return $id_pred != $id_rubrique; |
|
| 149 | 149 | } |
| 150 | 150 | |
| 151 | 151 | /** |
@@ -163,20 +163,20 @@ discard block |
||
| 163 | 163 | * true si le statut change effectivement |
| 164 | 164 | */ |
| 165 | 165 | function depublier_branche_rubrique_if($id_rubrique) { |
| 166 | - $date = date('Y-m-d H:i:s'); // figer la date |
|
| 167 | - |
|
| 168 | - # spip_log("depublier_branche_rubrique($id_rubrique ?"); |
|
| 169 | - $id_pred = $id_rubrique; |
|
| 170 | - while ($id_pred) { |
|
| 171 | - if (!depublier_rubrique_if($id_pred, $date)) { |
|
| 172 | - return $id_pred != $id_rubrique; |
|
| 173 | - } |
|
| 174 | - // passer au parent si on a depublie |
|
| 175 | - $r = sql_fetsel('id_parent', 'spip_rubriques', 'id_rubrique=' . intval($id_pred)); |
|
| 176 | - $id_pred = $r['id_parent']; |
|
| 177 | - } |
|
| 178 | - |
|
| 179 | - return $id_pred != $id_rubrique; |
|
| 166 | + $date = date('Y-m-d H:i:s'); // figer la date |
|
| 167 | + |
|
| 168 | + # spip_log("depublier_branche_rubrique($id_rubrique ?"); |
|
| 169 | + $id_pred = $id_rubrique; |
|
| 170 | + while ($id_pred) { |
|
| 171 | + if (!depublier_rubrique_if($id_pred, $date)) { |
|
| 172 | + return $id_pred != $id_rubrique; |
|
| 173 | + } |
|
| 174 | + // passer au parent si on a depublie |
|
| 175 | + $r = sql_fetsel('id_parent', 'spip_rubriques', 'id_rubrique=' . intval($id_pred)); |
|
| 176 | + $id_pred = $r['id_parent']; |
|
| 177 | + } |
|
| 178 | + |
|
| 179 | + return $id_pred != $id_rubrique; |
|
| 180 | 180 | } |
| 181 | 181 | |
| 182 | 182 | /** |
@@ -193,61 +193,61 @@ discard block |
||
| 193 | 193 | * true si la rubrique a été dépubliée |
| 194 | 194 | */ |
| 195 | 195 | function depublier_rubrique_if($id_rubrique, $date = null) { |
| 196 | - if (is_null($date)) { |
|
| 197 | - $date = date('Y-m-d H:i:s'); |
|
| 198 | - } |
|
| 199 | - $postdates = ($GLOBALS['meta']['post_dates'] == 'non') ? |
|
| 200 | - ' AND date <= ' . sql_quote($date) : ''; |
|
| 201 | - |
|
| 202 | - if (!$id_rubrique = intval($id_rubrique)) { |
|
| 203 | - return false; |
|
| 204 | - } |
|
| 205 | - |
|
| 206 | - // verifier qu'elle existe et est bien publiee |
|
| 207 | - $r = sql_fetsel('id_rubrique,statut', 'spip_rubriques', 'id_rubrique=' . intval($id_rubrique)); |
|
| 208 | - if (!$r or $r['statut'] !== 'publie') { |
|
| 209 | - return false; |
|
| 210 | - } |
|
| 211 | - |
|
| 212 | - // On met le nombre de chaque type d'enfants dans un tableau |
|
| 213 | - // Le type de l'objet est au pluriel |
|
| 214 | - $compte = [ |
|
| 215 | - 'articles' => sql_countsel( |
|
| 216 | - 'spip_articles', |
|
| 217 | - 'id_rubrique=' . intval($id_rubrique) . " AND statut='publie'$postdates" |
|
| 218 | - ), |
|
| 219 | - 'rubriques' => sql_countsel('spip_rubriques', 'id_parent=' . intval($id_rubrique) . " AND statut='publie'"), |
|
| 220 | - 'documents' => sql_countsel( |
|
| 221 | - 'spip_documents AS D JOIN spip_documents_liens AS L ON D.id_document=L.id_document', |
|
| 222 | - 'L.id_objet=' . intval($id_rubrique) . " AND L.objet='rubrique' and D.mode NOT IN('logoon', 'logooff') " |
|
| 223 | - ) |
|
| 224 | - ]; |
|
| 225 | - |
|
| 226 | - // On passe le tableau des comptes dans un pipeline pour que les plugins puissent ajouter (ou retirer) des enfants |
|
| 227 | - $compte = pipeline( |
|
| 228 | - 'objet_compte_enfants', |
|
| 229 | - [ |
|
| 230 | - 'args' => [ |
|
| 231 | - 'objet' => 'rubrique', |
|
| 232 | - 'id_objet' => $id_rubrique, |
|
| 233 | - 'statut' => 'publie', |
|
| 234 | - 'date' => $date |
|
| 235 | - ], |
|
| 236 | - 'data' => $compte |
|
| 237 | - ] |
|
| 238 | - ); |
|
| 239 | - |
|
| 240 | - // S'il y a au moins un enfant de n'importe quoi, on ne dépublie pas |
|
| 241 | - foreach ($compte as $objet => $n) { |
|
| 242 | - if ($n) { |
|
| 243 | - return false; |
|
| 244 | - } |
|
| 245 | - } |
|
| 246 | - |
|
| 247 | - sql_updateq('spip_rubriques', ['statut' => 'prepa'], 'id_rubrique=' . intval($id_rubrique)); |
|
| 196 | + if (is_null($date)) { |
|
| 197 | + $date = date('Y-m-d H:i:s'); |
|
| 198 | + } |
|
| 199 | + $postdates = ($GLOBALS['meta']['post_dates'] == 'non') ? |
|
| 200 | + ' AND date <= ' . sql_quote($date) : ''; |
|
| 201 | + |
|
| 202 | + if (!$id_rubrique = intval($id_rubrique)) { |
|
| 203 | + return false; |
|
| 204 | + } |
|
| 205 | + |
|
| 206 | + // verifier qu'elle existe et est bien publiee |
|
| 207 | + $r = sql_fetsel('id_rubrique,statut', 'spip_rubriques', 'id_rubrique=' . intval($id_rubrique)); |
|
| 208 | + if (!$r or $r['statut'] !== 'publie') { |
|
| 209 | + return false; |
|
| 210 | + } |
|
| 211 | + |
|
| 212 | + // On met le nombre de chaque type d'enfants dans un tableau |
|
| 213 | + // Le type de l'objet est au pluriel |
|
| 214 | + $compte = [ |
|
| 215 | + 'articles' => sql_countsel( |
|
| 216 | + 'spip_articles', |
|
| 217 | + 'id_rubrique=' . intval($id_rubrique) . " AND statut='publie'$postdates" |
|
| 218 | + ), |
|
| 219 | + 'rubriques' => sql_countsel('spip_rubriques', 'id_parent=' . intval($id_rubrique) . " AND statut='publie'"), |
|
| 220 | + 'documents' => sql_countsel( |
|
| 221 | + 'spip_documents AS D JOIN spip_documents_liens AS L ON D.id_document=L.id_document', |
|
| 222 | + 'L.id_objet=' . intval($id_rubrique) . " AND L.objet='rubrique' and D.mode NOT IN('logoon', 'logooff') " |
|
| 223 | + ) |
|
| 224 | + ]; |
|
| 225 | + |
|
| 226 | + // On passe le tableau des comptes dans un pipeline pour que les plugins puissent ajouter (ou retirer) des enfants |
|
| 227 | + $compte = pipeline( |
|
| 228 | + 'objet_compte_enfants', |
|
| 229 | + [ |
|
| 230 | + 'args' => [ |
|
| 231 | + 'objet' => 'rubrique', |
|
| 232 | + 'id_objet' => $id_rubrique, |
|
| 233 | + 'statut' => 'publie', |
|
| 234 | + 'date' => $date |
|
| 235 | + ], |
|
| 236 | + 'data' => $compte |
|
| 237 | + ] |
|
| 238 | + ); |
|
| 239 | + |
|
| 240 | + // S'il y a au moins un enfant de n'importe quoi, on ne dépublie pas |
|
| 241 | + foreach ($compte as $objet => $n) { |
|
| 242 | + if ($n) { |
|
| 243 | + return false; |
|
| 244 | + } |
|
| 245 | + } |
|
| 246 | + |
|
| 247 | + sql_updateq('spip_rubriques', ['statut' => 'prepa'], 'id_rubrique=' . intval($id_rubrique)); |
|
| 248 | 248 | |
| 249 | 249 | # spip_log("depublier_rubrique $id_pred"); |
| 250 | - return true; |
|
| 250 | + return true; |
|
| 251 | 251 | } |
| 252 | 252 | |
| 253 | 253 | |
@@ -270,18 +270,18 @@ discard block |
||
| 270 | 270 | **/ |
| 271 | 271 | function calculer_rubriques() { |
| 272 | 272 | |
| 273 | - calculer_rubriques_publiees(); |
|
| 273 | + calculer_rubriques_publiees(); |
|
| 274 | 274 | |
| 275 | - // Apres chaque (de)publication |
|
| 276 | - // recalculer les langues utilisees sur le site |
|
| 277 | - $langues = calculer_langues_utilisees(); |
|
| 278 | - ecrire_meta('langues_utilisees', $langues); |
|
| 275 | + // Apres chaque (de)publication |
|
| 276 | + // recalculer les langues utilisees sur le site |
|
| 277 | + $langues = calculer_langues_utilisees(); |
|
| 278 | + ecrire_meta('langues_utilisees', $langues); |
|
| 279 | 279 | |
| 280 | - // Sauver la date de la derniere mise a jour (pour menu_rubriques) |
|
| 281 | - ecrire_meta('date_calcul_rubriques', date('U')); |
|
| 280 | + // Sauver la date de la derniere mise a jour (pour menu_rubriques) |
|
| 281 | + ecrire_meta('date_calcul_rubriques', date('U')); |
|
| 282 | 282 | |
| 283 | - // on calcule la date du prochain article post-date |
|
| 284 | - calculer_prochain_postdate(); |
|
| 283 | + // on calcule la date du prochain article post-date |
|
| 284 | + calculer_prochain_postdate(); |
|
| 285 | 285 | } |
| 286 | 286 | |
| 287 | 287 | |
@@ -298,61 +298,61 @@ discard block |
||
| 298 | 298 | **/ |
| 299 | 299 | function calculer_rubriques_publiees() { |
| 300 | 300 | |
| 301 | - // Mettre les compteurs a zero |
|
| 302 | - sql_updateq('spip_rubriques', ['date_tmp' => '0000-00-00 00:00:00', 'statut_tmp' => 'prepa']); |
|
| 303 | - |
|
| 304 | - // |
|
| 305 | - // Publier et dater les rubriques qui ont un article publie |
|
| 306 | - // |
|
| 307 | - |
|
| 308 | - // Afficher les articles post-dates ? |
|
| 309 | - $postdates = ($GLOBALS['meta']['post_dates'] == 'non') ? |
|
| 310 | - 'AND A.date <= ' . sql_quote(date('Y-m-d H:i:s')) : ''; |
|
| 311 | - |
|
| 312 | - $r = sql_select( |
|
| 313 | - 'R.id_rubrique AS id, max(A.date) AS date_h', |
|
| 314 | - 'spip_rubriques AS R JOIN spip_articles AS A ON R.id_rubrique = A.id_rubrique', |
|
| 315 | - "A.date>R.date_tmp AND A.statut='publie' $postdates ", |
|
| 316 | - 'R.id_rubrique' |
|
| 317 | - ); |
|
| 318 | - while ($row = sql_fetch($r)) { |
|
| 319 | - sql_updateq( |
|
| 320 | - 'spip_rubriques', |
|
| 321 | - ['statut_tmp' => 'publie', 'date_tmp' => $row['date_h']], |
|
| 322 | - 'id_rubrique=' . intval($row['id']) |
|
| 323 | - ); |
|
| 324 | - } |
|
| 325 | - |
|
| 326 | - // point d'entree pour permettre a des plugins de gerer le statut |
|
| 327 | - // autrement (par ex: toute rubrique est publiee des sa creation) |
|
| 328 | - // Ce pipeline fait ce qu'il veut, mais s'il touche aux statuts/dates |
|
| 329 | - // c'est statut_tmp/date_tmp qu'il doit modifier |
|
| 330 | - // [C'est un trigger... a renommer en trig_calculer_rubriques ?] |
|
| 331 | - pipeline('calculer_rubriques', null); |
|
| 332 | - |
|
| 333 | - |
|
| 334 | - // Les rubriques qui ont une rubrique fille plus recente |
|
| 335 | - // on tourne tant que les donnees remontent vers la racine. |
|
| 336 | - do { |
|
| 337 | - $continuer = false; |
|
| 338 | - $r = sql_select( |
|
| 339 | - 'R.id_rubrique AS id, max(SR.date_tmp) AS date_h', |
|
| 340 | - 'spip_rubriques AS R JOIN spip_rubriques AS SR ON R.id_rubrique = SR.id_parent', |
|
| 341 | - "(SR.date_tmp>R.date_tmp OR R.statut_tmp<>'publie') AND SR.statut_tmp='publie' ", |
|
| 342 | - 'R.id_rubrique' |
|
| 343 | - ); |
|
| 344 | - while ($row = sql_fetch($r)) { |
|
| 345 | - sql_updateq( |
|
| 346 | - 'spip_rubriques', |
|
| 347 | - ['statut_tmp' => 'publie', 'date_tmp' => $row['date_h']], |
|
| 348 | - 'id_rubrique=' . intval($row['id']) |
|
| 349 | - ); |
|
| 350 | - $continuer = true; |
|
| 351 | - } |
|
| 352 | - } while ($continuer); |
|
| 353 | - |
|
| 354 | - // Enregistrement des modifs |
|
| 355 | - sql_update('spip_rubriques', ['date' => 'date_tmp', 'statut' => 'statut_tmp']); |
|
| 301 | + // Mettre les compteurs a zero |
|
| 302 | + sql_updateq('spip_rubriques', ['date_tmp' => '0000-00-00 00:00:00', 'statut_tmp' => 'prepa']); |
|
| 303 | + |
|
| 304 | + // |
|
| 305 | + // Publier et dater les rubriques qui ont un article publie |
|
| 306 | + // |
|
| 307 | + |
|
| 308 | + // Afficher les articles post-dates ? |
|
| 309 | + $postdates = ($GLOBALS['meta']['post_dates'] == 'non') ? |
|
| 310 | + 'AND A.date <= ' . sql_quote(date('Y-m-d H:i:s')) : ''; |
|
| 311 | + |
|
| 312 | + $r = sql_select( |
|
| 313 | + 'R.id_rubrique AS id, max(A.date) AS date_h', |
|
| 314 | + 'spip_rubriques AS R JOIN spip_articles AS A ON R.id_rubrique = A.id_rubrique', |
|
| 315 | + "A.date>R.date_tmp AND A.statut='publie' $postdates ", |
|
| 316 | + 'R.id_rubrique' |
|
| 317 | + ); |
|
| 318 | + while ($row = sql_fetch($r)) { |
|
| 319 | + sql_updateq( |
|
| 320 | + 'spip_rubriques', |
|
| 321 | + ['statut_tmp' => 'publie', 'date_tmp' => $row['date_h']], |
|
| 322 | + 'id_rubrique=' . intval($row['id']) |
|
| 323 | + ); |
|
| 324 | + } |
|
| 325 | + |
|
| 326 | + // point d'entree pour permettre a des plugins de gerer le statut |
|
| 327 | + // autrement (par ex: toute rubrique est publiee des sa creation) |
|
| 328 | + // Ce pipeline fait ce qu'il veut, mais s'il touche aux statuts/dates |
|
| 329 | + // c'est statut_tmp/date_tmp qu'il doit modifier |
|
| 330 | + // [C'est un trigger... a renommer en trig_calculer_rubriques ?] |
|
| 331 | + pipeline('calculer_rubriques', null); |
|
| 332 | + |
|
| 333 | + |
|
| 334 | + // Les rubriques qui ont une rubrique fille plus recente |
|
| 335 | + // on tourne tant que les donnees remontent vers la racine. |
|
| 336 | + do { |
|
| 337 | + $continuer = false; |
|
| 338 | + $r = sql_select( |
|
| 339 | + 'R.id_rubrique AS id, max(SR.date_tmp) AS date_h', |
|
| 340 | + 'spip_rubriques AS R JOIN spip_rubriques AS SR ON R.id_rubrique = SR.id_parent', |
|
| 341 | + "(SR.date_tmp>R.date_tmp OR R.statut_tmp<>'publie') AND SR.statut_tmp='publie' ", |
|
| 342 | + 'R.id_rubrique' |
|
| 343 | + ); |
|
| 344 | + while ($row = sql_fetch($r)) { |
|
| 345 | + sql_updateq( |
|
| 346 | + 'spip_rubriques', |
|
| 347 | + ['statut_tmp' => 'publie', 'date_tmp' => $row['date_h']], |
|
| 348 | + 'id_rubrique=' . intval($row['id']) |
|
| 349 | + ); |
|
| 350 | + $continuer = true; |
|
| 351 | + } |
|
| 352 | + } while ($continuer); |
|
| 353 | + |
|
| 354 | + // Enregistrement des modifs |
|
| 355 | + sql_update('spip_rubriques', ['date' => 'date_tmp', 'statut' => 'statut_tmp']); |
|
| 356 | 356 | } |
| 357 | 357 | |
| 358 | 358 | /** |
@@ -367,123 +367,123 @@ discard block |
||
| 367 | 367 | * @return void |
| 368 | 368 | **/ |
| 369 | 369 | function propager_les_secteurs() { |
| 370 | - // Profondeur 0 |
|
| 371 | - // Toutes les rubriques racines sont de profondeur 0 |
|
| 372 | - // et fixer les id_secteur des rubriques racines |
|
| 373 | - sql_update('spip_rubriques', ['id_secteur' => 'id_rubrique', 'profondeur' => 0], 'id_parent=0'); |
|
| 374 | - // Toute rubrique non racine est de profondeur >0 |
|
| 375 | - sql_updateq('spip_rubriques', ['profondeur' => 1], 'id_parent<>0 AND profondeur=0'); |
|
| 376 | - |
|
| 377 | - // securite : pas plus d'iteration que de rubriques dans la base |
|
| 378 | - $maxiter = sql_countsel('spip_rubriques'); |
|
| 379 | - |
|
| 380 | - // reparer les rubriques qui n'ont pas l'id_secteur de leur parent |
|
| 381 | - // on fait profondeur par profondeur |
|
| 382 | - |
|
| 383 | - $prof = 0; |
|
| 384 | - do { |
|
| 385 | - $continuer = false; |
|
| 386 | - |
|
| 387 | - // Par recursivite : si toutes les rubriques de profondeur $prof sont bonnes |
|
| 388 | - // on fixe le profondeur $prof+1 |
|
| 389 | - |
|
| 390 | - // Toutes les rubriques dont le parent est de profondeur $prof ont une profondeur $prof+1 |
|
| 391 | - // on teste A.profondeur > $prof+1 car : |
|
| 392 | - // - toutes les rubriques de profondeur 0 à $prof sont bonnes |
|
| 393 | - // - si A.profondeur = $prof+1 c'est bon |
|
| 394 | - // - cela nous protege de la boucle infinie en cas de reference circulaire dans les rubriques |
|
| 395 | - $maxiter2 = $maxiter; |
|
| 396 | - while ( |
|
| 397 | - $maxiter2-- |
|
| 398 | - and $rows = sql_allfetsel( |
|
| 399 | - 'A.id_rubrique AS id, R.id_secteur AS id_secteur, R.profondeur+1 as profondeur', |
|
| 400 | - 'spip_rubriques AS A JOIN spip_rubriques AS R ON A.id_parent = R.id_rubrique', |
|
| 401 | - 'R.profondeur=' . intval($prof) . ' AND (A.id_secteur <> R.id_secteur OR A.profondeur > R.profondeur+1)', |
|
| 402 | - '', |
|
| 403 | - 'R.id_secteur', |
|
| 404 | - '0,100' |
|
| 405 | - ) |
|
| 406 | - ) { |
|
| 407 | - $id_secteur = null; |
|
| 408 | - $ids = []; |
|
| 409 | - while ($row = array_shift($rows)) { |
|
| 410 | - if ($row['id_secteur'] !== $id_secteur) { |
|
| 411 | - if (count($ids)) { |
|
| 412 | - sql_updateq( |
|
| 413 | - 'spip_rubriques', |
|
| 414 | - ['id_secteur' => $id_secteur, 'profondeur' => $prof + 1], |
|
| 415 | - sql_in('id_rubrique', $ids) |
|
| 416 | - ); |
|
| 417 | - } |
|
| 418 | - $id_secteur = $row['id_secteur']; |
|
| 419 | - $ids = []; |
|
| 420 | - } |
|
| 421 | - $ids[] = $row['id']; |
|
| 422 | - } |
|
| 423 | - if (count($ids)) { |
|
| 424 | - sql_updateq( |
|
| 425 | - 'spip_rubriques', |
|
| 426 | - ['id_secteur' => $id_secteur, 'profondeur' => $prof + 1], |
|
| 427 | - sql_in('id_rubrique', $ids) |
|
| 428 | - ); |
|
| 429 | - } |
|
| 430 | - } |
|
| 431 | - |
|
| 432 | - |
|
| 433 | - // Toutes les rubriques de profondeur $prof+1 qui n'ont pas un parent de profondeur $prof sont decalees |
|
| 434 | - $maxiter2 = $maxiter; |
|
| 435 | - while ( |
|
| 436 | - $maxiter2-- |
|
| 437 | - and $rows = sql_allfetsel( |
|
| 438 | - 'id_rubrique as id', |
|
| 439 | - 'spip_rubriques', |
|
| 440 | - 'profondeur=' . intval($prof + 1) . ' AND id_parent NOT IN (' . sql_get_select( |
|
| 441 | - 'zzz.id_rubrique', |
|
| 442 | - 'spip_rubriques AS zzz', |
|
| 443 | - 'zzz.profondeur=' . intval($prof) |
|
| 444 | - ) . ')', |
|
| 445 | - '', |
|
| 446 | - '', |
|
| 447 | - '0,100' |
|
| 448 | - ) |
|
| 449 | - ) { |
|
| 450 | - $rows = array_column($rows, 'id'); |
|
| 451 | - sql_updateq('spip_rubriques', ['profondeur' => $prof + 2], sql_in('id_rubrique', $rows)); |
|
| 452 | - } |
|
| 453 | - |
|
| 454 | - // ici on a fini de valider $prof+1, toutes les rubriques de prondeur 0 a $prof+1 sont OK |
|
| 455 | - // si pas de rubrique a profondeur $prof+1 pas la peine de continuer |
|
| 456 | - // si il reste des rubriques non vues, c'est une branche morte ou reference circulaire (base foireuse) |
|
| 457 | - // on arrete les frais |
|
| 458 | - if (sql_countsel('spip_rubriques', 'profondeur=' . intval($prof + 1))) { |
|
| 459 | - $prof++; |
|
| 460 | - $continuer = true; |
|
| 461 | - } |
|
| 462 | - } while ($continuer and $maxiter--); |
|
| 463 | - |
|
| 464 | - // loger si la table des rubriques semble foireuse |
|
| 465 | - // et mettre un id_secteur=0 sur ces rubriques pour eviter toute selection par les boucles |
|
| 466 | - if (sql_countsel('spip_rubriques', 'profondeur>' . intval($prof + 1))) { |
|
| 467 | - spip_log( |
|
| 468 | - 'Les rubriques de profondeur>' . ($prof + 1) . ' semblent suspectes (branches morte ou reference circulaire dans les parents)', |
|
| 469 | - _LOG_CRITIQUE |
|
| 470 | - ); |
|
| 471 | - sql_update('spip_rubriques', ['id_secteur' => 0], 'profondeur>' . intval($prof + 1)); |
|
| 472 | - } |
|
| 473 | - |
|
| 474 | - // reparer les articles |
|
| 475 | - $r = sql_select( |
|
| 476 | - 'A.id_article AS id, R.id_secteur AS secteur', |
|
| 477 | - 'spip_articles AS A, spip_rubriques AS R', |
|
| 478 | - 'A.id_rubrique = R.id_rubrique AND A.id_secteur <> R.id_secteur' |
|
| 479 | - ); |
|
| 480 | - |
|
| 481 | - while ($row = sql_fetch($r)) { |
|
| 482 | - sql_update('spip_articles', ['id_secteur' => $row['secteur']], 'id_article=' . intval($row['id'])); |
|
| 483 | - } |
|
| 484 | - |
|
| 485 | - // avertir les plugins qui peuvent faire leur mises a jour egalement |
|
| 486 | - pipeline('trig_propager_les_secteurs', ''); |
|
| 370 | + // Profondeur 0 |
|
| 371 | + // Toutes les rubriques racines sont de profondeur 0 |
|
| 372 | + // et fixer les id_secteur des rubriques racines |
|
| 373 | + sql_update('spip_rubriques', ['id_secteur' => 'id_rubrique', 'profondeur' => 0], 'id_parent=0'); |
|
| 374 | + // Toute rubrique non racine est de profondeur >0 |
|
| 375 | + sql_updateq('spip_rubriques', ['profondeur' => 1], 'id_parent<>0 AND profondeur=0'); |
|
| 376 | + |
|
| 377 | + // securite : pas plus d'iteration que de rubriques dans la base |
|
| 378 | + $maxiter = sql_countsel('spip_rubriques'); |
|
| 379 | + |
|
| 380 | + // reparer les rubriques qui n'ont pas l'id_secteur de leur parent |
|
| 381 | + // on fait profondeur par profondeur |
|
| 382 | + |
|
| 383 | + $prof = 0; |
|
| 384 | + do { |
|
| 385 | + $continuer = false; |
|
| 386 | + |
|
| 387 | + // Par recursivite : si toutes les rubriques de profondeur $prof sont bonnes |
|
| 388 | + // on fixe le profondeur $prof+1 |
|
| 389 | + |
|
| 390 | + // Toutes les rubriques dont le parent est de profondeur $prof ont une profondeur $prof+1 |
|
| 391 | + // on teste A.profondeur > $prof+1 car : |
|
| 392 | + // - toutes les rubriques de profondeur 0 à $prof sont bonnes |
|
| 393 | + // - si A.profondeur = $prof+1 c'est bon |
|
| 394 | + // - cela nous protege de la boucle infinie en cas de reference circulaire dans les rubriques |
|
| 395 | + $maxiter2 = $maxiter; |
|
| 396 | + while ( |
|
| 397 | + $maxiter2-- |
|
| 398 | + and $rows = sql_allfetsel( |
|
| 399 | + 'A.id_rubrique AS id, R.id_secteur AS id_secteur, R.profondeur+1 as profondeur', |
|
| 400 | + 'spip_rubriques AS A JOIN spip_rubriques AS R ON A.id_parent = R.id_rubrique', |
|
| 401 | + 'R.profondeur=' . intval($prof) . ' AND (A.id_secteur <> R.id_secteur OR A.profondeur > R.profondeur+1)', |
|
| 402 | + '', |
|
| 403 | + 'R.id_secteur', |
|
| 404 | + '0,100' |
|
| 405 | + ) |
|
| 406 | + ) { |
|
| 407 | + $id_secteur = null; |
|
| 408 | + $ids = []; |
|
| 409 | + while ($row = array_shift($rows)) { |
|
| 410 | + if ($row['id_secteur'] !== $id_secteur) { |
|
| 411 | + if (count($ids)) { |
|
| 412 | + sql_updateq( |
|
| 413 | + 'spip_rubriques', |
|
| 414 | + ['id_secteur' => $id_secteur, 'profondeur' => $prof + 1], |
|
| 415 | + sql_in('id_rubrique', $ids) |
|
| 416 | + ); |
|
| 417 | + } |
|
| 418 | + $id_secteur = $row['id_secteur']; |
|
| 419 | + $ids = []; |
|
| 420 | + } |
|
| 421 | + $ids[] = $row['id']; |
|
| 422 | + } |
|
| 423 | + if (count($ids)) { |
|
| 424 | + sql_updateq( |
|
| 425 | + 'spip_rubriques', |
|
| 426 | + ['id_secteur' => $id_secteur, 'profondeur' => $prof + 1], |
|
| 427 | + sql_in('id_rubrique', $ids) |
|
| 428 | + ); |
|
| 429 | + } |
|
| 430 | + } |
|
| 431 | + |
|
| 432 | + |
|
| 433 | + // Toutes les rubriques de profondeur $prof+1 qui n'ont pas un parent de profondeur $prof sont decalees |
|
| 434 | + $maxiter2 = $maxiter; |
|
| 435 | + while ( |
|
| 436 | + $maxiter2-- |
|
| 437 | + and $rows = sql_allfetsel( |
|
| 438 | + 'id_rubrique as id', |
|
| 439 | + 'spip_rubriques', |
|
| 440 | + 'profondeur=' . intval($prof + 1) . ' AND id_parent NOT IN (' . sql_get_select( |
|
| 441 | + 'zzz.id_rubrique', |
|
| 442 | + 'spip_rubriques AS zzz', |
|
| 443 | + 'zzz.profondeur=' . intval($prof) |
|
| 444 | + ) . ')', |
|
| 445 | + '', |
|
| 446 | + '', |
|
| 447 | + '0,100' |
|
| 448 | + ) |
|
| 449 | + ) { |
|
| 450 | + $rows = array_column($rows, 'id'); |
|
| 451 | + sql_updateq('spip_rubriques', ['profondeur' => $prof + 2], sql_in('id_rubrique', $rows)); |
|
| 452 | + } |
|
| 453 | + |
|
| 454 | + // ici on a fini de valider $prof+1, toutes les rubriques de prondeur 0 a $prof+1 sont OK |
|
| 455 | + // si pas de rubrique a profondeur $prof+1 pas la peine de continuer |
|
| 456 | + // si il reste des rubriques non vues, c'est une branche morte ou reference circulaire (base foireuse) |
|
| 457 | + // on arrete les frais |
|
| 458 | + if (sql_countsel('spip_rubriques', 'profondeur=' . intval($prof + 1))) { |
|
| 459 | + $prof++; |
|
| 460 | + $continuer = true; |
|
| 461 | + } |
|
| 462 | + } while ($continuer and $maxiter--); |
|
| 463 | + |
|
| 464 | + // loger si la table des rubriques semble foireuse |
|
| 465 | + // et mettre un id_secteur=0 sur ces rubriques pour eviter toute selection par les boucles |
|
| 466 | + if (sql_countsel('spip_rubriques', 'profondeur>' . intval($prof + 1))) { |
|
| 467 | + spip_log( |
|
| 468 | + 'Les rubriques de profondeur>' . ($prof + 1) . ' semblent suspectes (branches morte ou reference circulaire dans les parents)', |
|
| 469 | + _LOG_CRITIQUE |
|
| 470 | + ); |
|
| 471 | + sql_update('spip_rubriques', ['id_secteur' => 0], 'profondeur>' . intval($prof + 1)); |
|
| 472 | + } |
|
| 473 | + |
|
| 474 | + // reparer les articles |
|
| 475 | + $r = sql_select( |
|
| 476 | + 'A.id_article AS id, R.id_secteur AS secteur', |
|
| 477 | + 'spip_articles AS A, spip_rubriques AS R', |
|
| 478 | + 'A.id_rubrique = R.id_rubrique AND A.id_secteur <> R.id_secteur' |
|
| 479 | + ); |
|
| 480 | + |
|
| 481 | + while ($row = sql_fetch($r)) { |
|
| 482 | + sql_update('spip_articles', ['id_secteur' => $row['secteur']], 'id_article=' . intval($row['id'])); |
|
| 483 | + } |
|
| 484 | + |
|
| 485 | + // avertir les plugins qui peuvent faire leur mises a jour egalement |
|
| 486 | + pipeline('trig_propager_les_secteurs', ''); |
|
| 487 | 487 | } |
| 488 | 488 | |
| 489 | 489 | |
@@ -498,23 +498,23 @@ discard block |
||
| 498 | 498 | * true si un changement a eu lieu |
| 499 | 499 | **/ |
| 500 | 500 | function calculer_langues_rubriques_etape() { |
| 501 | - $s = sql_select( |
|
| 502 | - 'A.id_rubrique AS id_rubrique, R.lang AS lang', |
|
| 503 | - 'spip_rubriques AS A, spip_rubriques AS R', |
|
| 504 | - "A.id_parent = R.id_rubrique AND A.langue_choisie != 'oui' AND R.lang<>'' AND R.lang<>A.lang" |
|
| 505 | - ); |
|
| 506 | - |
|
| 507 | - $t = false; |
|
| 508 | - while ($row = sql_fetch($s)) { |
|
| 509 | - $id_rubrique = $row['id_rubrique']; |
|
| 510 | - $t = sql_updateq( |
|
| 511 | - 'spip_rubriques', |
|
| 512 | - ['lang' => $row['lang'], 'langue_choisie' => 'non'], |
|
| 513 | - 'id_rubrique=' . intval($id_rubrique) |
|
| 514 | - ); |
|
| 515 | - } |
|
| 516 | - |
|
| 517 | - return $t; |
|
| 501 | + $s = sql_select( |
|
| 502 | + 'A.id_rubrique AS id_rubrique, R.lang AS lang', |
|
| 503 | + 'spip_rubriques AS A, spip_rubriques AS R', |
|
| 504 | + "A.id_parent = R.id_rubrique AND A.langue_choisie != 'oui' AND R.lang<>'' AND R.lang<>A.lang" |
|
| 505 | + ); |
|
| 506 | + |
|
| 507 | + $t = false; |
|
| 508 | + while ($row = sql_fetch($s)) { |
|
| 509 | + $id_rubrique = $row['id_rubrique']; |
|
| 510 | + $t = sql_updateq( |
|
| 511 | + 'spip_rubriques', |
|
| 512 | + ['lang' => $row['lang'], 'langue_choisie' => 'non'], |
|
| 513 | + 'id_rubrique=' . intval($id_rubrique) |
|
| 514 | + ); |
|
| 515 | + } |
|
| 516 | + |
|
| 517 | + return $t; |
|
| 518 | 518 | } |
| 519 | 519 | |
| 520 | 520 | /** |
@@ -534,38 +534,38 @@ discard block |
||
| 534 | 534 | **/ |
| 535 | 535 | function calculer_langues_rubriques() { |
| 536 | 536 | |
| 537 | - // rubriques (recursivite) |
|
| 538 | - sql_updateq( |
|
| 539 | - 'spip_rubriques', |
|
| 540 | - ['lang' => $GLOBALS['meta']['langue_site'], 'langue_choisie' => 'non'], |
|
| 541 | - "id_parent=0 AND langue_choisie != 'oui'" |
|
| 542 | - ); |
|
| 543 | - while (calculer_langues_rubriques_etape()) { |
|
| 544 | - ; |
|
| 545 | - } |
|
| 546 | - |
|
| 547 | - // articles |
|
| 548 | - $s = sql_select( |
|
| 549 | - 'A.id_article AS id_article, R.lang AS lang', |
|
| 550 | - 'spip_articles AS A, spip_rubriques AS R', |
|
| 551 | - "A.id_rubrique = R.id_rubrique AND A.langue_choisie != 'oui' AND (length(A.lang)=0 OR length(R.lang)>0) AND R.lang<>A.lang" |
|
| 552 | - ); |
|
| 553 | - while ($row = sql_fetch($s)) { |
|
| 554 | - $id_article = $row['id_article']; |
|
| 555 | - sql_updateq( |
|
| 556 | - 'spip_articles', |
|
| 557 | - ['lang' => $row['lang'], 'langue_choisie' => 'non'], |
|
| 558 | - 'id_article=' . intval($id_article) |
|
| 559 | - ); |
|
| 560 | - } |
|
| 561 | - |
|
| 562 | - if ($GLOBALS['meta']['multi_rubriques'] == 'oui') { |
|
| 563 | - $langues = calculer_langues_utilisees(); |
|
| 564 | - ecrire_meta('langues_utilisees', $langues); |
|
| 565 | - } |
|
| 566 | - |
|
| 567 | - // avertir les plugins qui peuvent faire leur mises a jour egalement |
|
| 568 | - pipeline('trig_calculer_langues_rubriques', ''); |
|
| 537 | + // rubriques (recursivite) |
|
| 538 | + sql_updateq( |
|
| 539 | + 'spip_rubriques', |
|
| 540 | + ['lang' => $GLOBALS['meta']['langue_site'], 'langue_choisie' => 'non'], |
|
| 541 | + "id_parent=0 AND langue_choisie != 'oui'" |
|
| 542 | + ); |
|
| 543 | + while (calculer_langues_rubriques_etape()) { |
|
| 544 | + ; |
|
| 545 | + } |
|
| 546 | + |
|
| 547 | + // articles |
|
| 548 | + $s = sql_select( |
|
| 549 | + 'A.id_article AS id_article, R.lang AS lang', |
|
| 550 | + 'spip_articles AS A, spip_rubriques AS R', |
|
| 551 | + "A.id_rubrique = R.id_rubrique AND A.langue_choisie != 'oui' AND (length(A.lang)=0 OR length(R.lang)>0) AND R.lang<>A.lang" |
|
| 552 | + ); |
|
| 553 | + while ($row = sql_fetch($s)) { |
|
| 554 | + $id_article = $row['id_article']; |
|
| 555 | + sql_updateq( |
|
| 556 | + 'spip_articles', |
|
| 557 | + ['lang' => $row['lang'], 'langue_choisie' => 'non'], |
|
| 558 | + 'id_article=' . intval($id_article) |
|
| 559 | + ); |
|
| 560 | + } |
|
| 561 | + |
|
| 562 | + if ($GLOBALS['meta']['multi_rubriques'] == 'oui') { |
|
| 563 | + $langues = calculer_langues_utilisees(); |
|
| 564 | + ecrire_meta('langues_utilisees', $langues); |
|
| 565 | + } |
|
| 566 | + |
|
| 567 | + // avertir les plugins qui peuvent faire leur mises a jour egalement |
|
| 568 | + pipeline('trig_calculer_langues_rubriques', ''); |
|
| 569 | 569 | } |
| 570 | 570 | |
| 571 | 571 | |
@@ -582,80 +582,80 @@ discard block |
||
| 582 | 582 | * Liste des langues utilisées séparées par des virgules |
| 583 | 583 | **/ |
| 584 | 584 | function calculer_langues_utilisees($serveur = '') { |
| 585 | - include_spip('public/interfaces'); |
|
| 586 | - include_spip('public/compiler'); |
|
| 587 | - include_spip('public/composer'); |
|
| 588 | - include_spip('public/phraser_html'); |
|
| 589 | - $langues = []; |
|
| 590 | - |
|
| 591 | - $langues[$GLOBALS['meta']['langue_site']] = 1; |
|
| 592 | - |
|
| 593 | - include_spip('base/objets'); |
|
| 594 | - $tables = lister_tables_objets_sql(); |
|
| 595 | - $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 596 | - |
|
| 597 | - foreach (array_keys($tables) as $t) { |
|
| 598 | - $desc = $trouver_table($t, $serveur); |
|
| 599 | - // c'est une table avec des langues |
|
| 600 | - if ( |
|
| 601 | - $desc['exist'] |
|
| 602 | - and isset($desc['field']['lang']) |
|
| 603 | - and isset($desc['field']['langue_choisie']) |
|
| 604 | - ) { |
|
| 605 | - $boucle = new Boucle(); |
|
| 606 | - $boucle->show = $desc; |
|
| 607 | - $boucle->nom = 'calculer_langues_utilisees'; |
|
| 608 | - $boucle->id_boucle = $desc['table_objet']; |
|
| 609 | - $boucle->id_table = $desc['table_objet']; |
|
| 610 | - $boucle->primary = $desc['key']['PRIMARY KEY'] ?? ''; |
|
| 611 | - $boucle->sql_serveur = $serveur; |
|
| 612 | - $boucle->select[] = 'DISTINCT lang'; |
|
| 613 | - $boucle->from[$desc['table_objet']] = $t; |
|
| 614 | - $boucle->separateur[] = ','; |
|
| 615 | - $boucle->return = '$Pile[$SP][\'lang\']'; |
|
| 616 | - $boucle->iterateur = 'sql'; |
|
| 617 | - |
|
| 618 | - $boucle->descr['nom'] = 'calculer_langues_utilisees'; // eviter notice php |
|
| 619 | - $boucle->descr['sourcefile'] = 'internal'; |
|
| 620 | - $boucle->descr['gram'] = 'html'; |
|
| 621 | - |
|
| 622 | - $boucle = pipeline('pre_boucle', $boucle); |
|
| 623 | - |
|
| 624 | - if ( |
|
| 625 | - isset($desc['statut']) |
|
| 626 | - and $desc['statut'] |
|
| 627 | - ) { |
|
| 628 | - $boucles = [ |
|
| 629 | - 'calculer_langues_utilisees' => $boucle, |
|
| 630 | - ]; |
|
| 631 | - // generer un nom de fonction "anonyme" unique |
|
| 632 | - do { |
|
| 633 | - $functionname = 'f_calculer_langues_utilisees_' . $boucle->id_table . '_' . time() . '_' . random_int(0, mt_getrandmax()); |
|
| 634 | - } while (function_exists($functionname)); |
|
| 635 | - $code = calculer_boucle('calculer_langues_utilisees', $boucles); |
|
| 636 | - $code = '$SP=0; $command=array();$command["connect"] = $connect = "' . $serveur . '"; $Pile=array(0=>array());' . "\n" . $code; |
|
| 637 | - $code = 'function ' . $functionname . '(){' . $code . '};$res = ' . $functionname . '();'; |
|
| 638 | - $res = ''; |
|
| 639 | - eval($code); |
|
| 640 | - $res = explode(',', $res); |
|
| 641 | - foreach ($res as $lang) { |
|
| 642 | - $langues[$lang] = 1; |
|
| 643 | - } |
|
| 644 | - } else { |
|
| 645 | - $res = sql_select(implode(',', $boucle->select), $boucle->from); |
|
| 646 | - while ($row = sql_fetch($res)) { |
|
| 647 | - $langues[$row['lang']] = 1; |
|
| 648 | - } |
|
| 649 | - } |
|
| 650 | - } |
|
| 651 | - } |
|
| 652 | - |
|
| 653 | - $langues = array_filter(array_keys($langues)); |
|
| 654 | - sort($langues); |
|
| 655 | - $langues = join(',', $langues); |
|
| 656 | - spip_log("langues utilisees: $langues"); |
|
| 657 | - |
|
| 658 | - return $langues; |
|
| 585 | + include_spip('public/interfaces'); |
|
| 586 | + include_spip('public/compiler'); |
|
| 587 | + include_spip('public/composer'); |
|
| 588 | + include_spip('public/phraser_html'); |
|
| 589 | + $langues = []; |
|
| 590 | + |
|
| 591 | + $langues[$GLOBALS['meta']['langue_site']] = 1; |
|
| 592 | + |
|
| 593 | + include_spip('base/objets'); |
|
| 594 | + $tables = lister_tables_objets_sql(); |
|
| 595 | + $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 596 | + |
|
| 597 | + foreach (array_keys($tables) as $t) { |
|
| 598 | + $desc = $trouver_table($t, $serveur); |
|
| 599 | + // c'est une table avec des langues |
|
| 600 | + if ( |
|
| 601 | + $desc['exist'] |
|
| 602 | + and isset($desc['field']['lang']) |
|
| 603 | + and isset($desc['field']['langue_choisie']) |
|
| 604 | + ) { |
|
| 605 | + $boucle = new Boucle(); |
|
| 606 | + $boucle->show = $desc; |
|
| 607 | + $boucle->nom = 'calculer_langues_utilisees'; |
|
| 608 | + $boucle->id_boucle = $desc['table_objet']; |
|
| 609 | + $boucle->id_table = $desc['table_objet']; |
|
| 610 | + $boucle->primary = $desc['key']['PRIMARY KEY'] ?? ''; |
|
| 611 | + $boucle->sql_serveur = $serveur; |
|
| 612 | + $boucle->select[] = 'DISTINCT lang'; |
|
| 613 | + $boucle->from[$desc['table_objet']] = $t; |
|
| 614 | + $boucle->separateur[] = ','; |
|
| 615 | + $boucle->return = '$Pile[$SP][\'lang\']'; |
|
| 616 | + $boucle->iterateur = 'sql'; |
|
| 617 | + |
|
| 618 | + $boucle->descr['nom'] = 'calculer_langues_utilisees'; // eviter notice php |
|
| 619 | + $boucle->descr['sourcefile'] = 'internal'; |
|
| 620 | + $boucle->descr['gram'] = 'html'; |
|
| 621 | + |
|
| 622 | + $boucle = pipeline('pre_boucle', $boucle); |
|
| 623 | + |
|
| 624 | + if ( |
|
| 625 | + isset($desc['statut']) |
|
| 626 | + and $desc['statut'] |
|
| 627 | + ) { |
|
| 628 | + $boucles = [ |
|
| 629 | + 'calculer_langues_utilisees' => $boucle, |
|
| 630 | + ]; |
|
| 631 | + // generer un nom de fonction "anonyme" unique |
|
| 632 | + do { |
|
| 633 | + $functionname = 'f_calculer_langues_utilisees_' . $boucle->id_table . '_' . time() . '_' . random_int(0, mt_getrandmax()); |
|
| 634 | + } while (function_exists($functionname)); |
|
| 635 | + $code = calculer_boucle('calculer_langues_utilisees', $boucles); |
|
| 636 | + $code = '$SP=0; $command=array();$command["connect"] = $connect = "' . $serveur . '"; $Pile=array(0=>array());' . "\n" . $code; |
|
| 637 | + $code = 'function ' . $functionname . '(){' . $code . '};$res = ' . $functionname . '();'; |
|
| 638 | + $res = ''; |
|
| 639 | + eval($code); |
|
| 640 | + $res = explode(',', $res); |
|
| 641 | + foreach ($res as $lang) { |
|
| 642 | + $langues[$lang] = 1; |
|
| 643 | + } |
|
| 644 | + } else { |
|
| 645 | + $res = sql_select(implode(',', $boucle->select), $boucle->from); |
|
| 646 | + while ($row = sql_fetch($res)) { |
|
| 647 | + $langues[$row['lang']] = 1; |
|
| 648 | + } |
|
| 649 | + } |
|
| 650 | + } |
|
| 651 | + } |
|
| 652 | + |
|
| 653 | + $langues = array_filter(array_keys($langues)); |
|
| 654 | + sort($langues); |
|
| 655 | + $langues = join(',', $langues); |
|
| 656 | + spip_log("langues utilisees: $langues"); |
|
| 657 | + |
|
| 658 | + return $langues; |
|
| 659 | 659 | } |
| 660 | 660 | |
| 661 | 661 | /** |
@@ -672,9 +672,9 @@ discard block |
||
| 672 | 672 | * incluant les rubriques noeuds et toutes leurs descendances |
| 673 | 673 | */ |
| 674 | 674 | function calcul_branche_in($id) { |
| 675 | - $calcul_branche_in = charger_fonction('calcul_branche_in', 'inc'); |
|
| 675 | + $calcul_branche_in = charger_fonction('calcul_branche_in', 'inc'); |
|
| 676 | 676 | |
| 677 | - return $calcul_branche_in($id); |
|
| 677 | + return $calcul_branche_in($id); |
|
| 678 | 678 | } |
| 679 | 679 | |
| 680 | 680 | /** |
@@ -692,9 +692,9 @@ discard block |
||
| 692 | 692 | * incluant les rubriques transmises et toutes leurs parentées |
| 693 | 693 | */ |
| 694 | 694 | function calcul_hierarchie_in($id, $tout = true) { |
| 695 | - $calcul_hierarchie_in = charger_fonction('calcul_hierarchie_in', 'inc'); |
|
| 695 | + $calcul_hierarchie_in = charger_fonction('calcul_hierarchie_in', 'inc'); |
|
| 696 | 696 | |
| 697 | - return $calcul_hierarchie_in($id, $tout); |
|
| 697 | + return $calcul_hierarchie_in($id, $tout); |
|
| 698 | 698 | } |
| 699 | 699 | |
| 700 | 700 | |
@@ -715,40 +715,40 @@ discard block |
||
| 715 | 715 | * incluant les rubriques noeuds et toutes leurs descendances |
| 716 | 716 | */ |
| 717 | 717 | function inc_calcul_branche_in_dist($id) { |
| 718 | - static $b = []; |
|
| 719 | - |
|
| 720 | - // normaliser $id qui a pu arriver comme un array, comme un entier, ou comme une chaine NN,NN,NN |
|
| 721 | - if (!is_array($id)) { |
|
| 722 | - $id = explode(',', $id); |
|
| 723 | - } |
|
| 724 | - $id = join(',', array_map('intval', $id)); |
|
| 725 | - if (isset($b[$id])) { |
|
| 726 | - return $b[$id]; |
|
| 727 | - } |
|
| 728 | - |
|
| 729 | - // Notre branche commence par la rubrique de depart |
|
| 730 | - $branche = $r = $id; |
|
| 731 | - |
|
| 732 | - // On ajoute une generation (les filles de la generation precedente) |
|
| 733 | - // jusqu'a epuisement, en se protegeant des references circulaires |
|
| 734 | - $maxiter = 10000; |
|
| 735 | - while ( |
|
| 736 | - $maxiter-- and $filles = sql_allfetsel( |
|
| 737 | - 'id_rubrique', |
|
| 738 | - 'spip_rubriques', |
|
| 739 | - sql_in('id_parent', $r) . ' AND ' . sql_in('id_rubrique', $r, 'NOT') |
|
| 740 | - ) |
|
| 741 | - ) { |
|
| 742 | - $r = join(',', array_column($filles, 'id_rubrique')); |
|
| 743 | - $branche .= ',' . $r; |
|
| 744 | - } |
|
| 745 | - |
|
| 746 | - # securite pour ne pas plomber la conso memoire sur les sites prolifiques |
|
| 747 | - if (strlen($branche) < 10000) { |
|
| 748 | - $b[$id] = $branche; |
|
| 749 | - } |
|
| 750 | - |
|
| 751 | - return $branche; |
|
| 718 | + static $b = []; |
|
| 719 | + |
|
| 720 | + // normaliser $id qui a pu arriver comme un array, comme un entier, ou comme une chaine NN,NN,NN |
|
| 721 | + if (!is_array($id)) { |
|
| 722 | + $id = explode(',', $id); |
|
| 723 | + } |
|
| 724 | + $id = join(',', array_map('intval', $id)); |
|
| 725 | + if (isset($b[$id])) { |
|
| 726 | + return $b[$id]; |
|
| 727 | + } |
|
| 728 | + |
|
| 729 | + // Notre branche commence par la rubrique de depart |
|
| 730 | + $branche = $r = $id; |
|
| 731 | + |
|
| 732 | + // On ajoute une generation (les filles de la generation precedente) |
|
| 733 | + // jusqu'a epuisement, en se protegeant des references circulaires |
|
| 734 | + $maxiter = 10000; |
|
| 735 | + while ( |
|
| 736 | + $maxiter-- and $filles = sql_allfetsel( |
|
| 737 | + 'id_rubrique', |
|
| 738 | + 'spip_rubriques', |
|
| 739 | + sql_in('id_parent', $r) . ' AND ' . sql_in('id_rubrique', $r, 'NOT') |
|
| 740 | + ) |
|
| 741 | + ) { |
|
| 742 | + $r = join(',', array_column($filles, 'id_rubrique')); |
|
| 743 | + $branche .= ',' . $r; |
|
| 744 | + } |
|
| 745 | + |
|
| 746 | + # securite pour ne pas plomber la conso memoire sur les sites prolifiques |
|
| 747 | + if (strlen($branche) < 10000) { |
|
| 748 | + $b[$id] = $branche; |
|
| 749 | + } |
|
| 750 | + |
|
| 751 | + return $branche; |
|
| 752 | 752 | } |
| 753 | 753 | |
| 754 | 754 | |
@@ -770,45 +770,45 @@ discard block |
||
| 770 | 770 | * incluant les rubriques transmises et toutes leurs parentées |
| 771 | 771 | */ |
| 772 | 772 | function inc_calcul_hierarchie_in_dist($id, $tout = true) { |
| 773 | - static $b = []; |
|
| 774 | - |
|
| 775 | - // normaliser $id qui a pu arriver comme un array, comme un entier, ou comme une chaine NN,NN,NN |
|
| 776 | - if (!is_array($id)) { |
|
| 777 | - $id = explode(',', $id); |
|
| 778 | - } |
|
| 779 | - $id = join(',', array_map('intval', $id)); |
|
| 780 | - |
|
| 781 | - if (isset($b[$id])) { |
|
| 782 | - // Notre branche commence par la rubrique de depart si $tout=true |
|
| 783 | - return $tout ? (strlen($b[$id]) ? $b[$id] . ",$id" : $id) : $b[$id]; |
|
| 784 | - } |
|
| 785 | - |
|
| 786 | - $hier = ''; |
|
| 787 | - |
|
| 788 | - // On ajoute une generation (les filles de la generation precedente) |
|
| 789 | - // jusqu'a epuisement, en se protegeant des references circulaires |
|
| 790 | - $ids_nouveaux_parents = $id; |
|
| 791 | - $maxiter = 10000; |
|
| 792 | - while ( |
|
| 793 | - $maxiter-- and $parents = sql_allfetsel( |
|
| 794 | - 'id_parent', |
|
| 795 | - 'spip_rubriques', |
|
| 796 | - sql_in('id_rubrique', $ids_nouveaux_parents) . ' AND ' . sql_in('id_parent', $hier, 'NOT') |
|
| 797 | - ) |
|
| 798 | - ) { |
|
| 799 | - $ids_nouveaux_parents = join(',', array_column($parents, 'id_parent')); |
|
| 800 | - $hier = $ids_nouveaux_parents . (strlen($hier) ? ',' . $hier : ''); |
|
| 801 | - } |
|
| 802 | - |
|
| 803 | - # securite pour ne pas plomber la conso memoire sur les sites prolifiques |
|
| 804 | - if (strlen($hier) < 10000) { |
|
| 805 | - $b[$id] = $hier; |
|
| 806 | - } |
|
| 807 | - |
|
| 808 | - // Notre branche commence par la rubrique de depart si $tout=true |
|
| 809 | - $hier = $tout ? (strlen($hier) ? "$hier,$id" : $id) : $hier; |
|
| 810 | - |
|
| 811 | - return $hier; |
|
| 773 | + static $b = []; |
|
| 774 | + |
|
| 775 | + // normaliser $id qui a pu arriver comme un array, comme un entier, ou comme une chaine NN,NN,NN |
|
| 776 | + if (!is_array($id)) { |
|
| 777 | + $id = explode(',', $id); |
|
| 778 | + } |
|
| 779 | + $id = join(',', array_map('intval', $id)); |
|
| 780 | + |
|
| 781 | + if (isset($b[$id])) { |
|
| 782 | + // Notre branche commence par la rubrique de depart si $tout=true |
|
| 783 | + return $tout ? (strlen($b[$id]) ? $b[$id] . ",$id" : $id) : $b[$id]; |
|
| 784 | + } |
|
| 785 | + |
|
| 786 | + $hier = ''; |
|
| 787 | + |
|
| 788 | + // On ajoute une generation (les filles de la generation precedente) |
|
| 789 | + // jusqu'a epuisement, en se protegeant des references circulaires |
|
| 790 | + $ids_nouveaux_parents = $id; |
|
| 791 | + $maxiter = 10000; |
|
| 792 | + while ( |
|
| 793 | + $maxiter-- and $parents = sql_allfetsel( |
|
| 794 | + 'id_parent', |
|
| 795 | + 'spip_rubriques', |
|
| 796 | + sql_in('id_rubrique', $ids_nouveaux_parents) . ' AND ' . sql_in('id_parent', $hier, 'NOT') |
|
| 797 | + ) |
|
| 798 | + ) { |
|
| 799 | + $ids_nouveaux_parents = join(',', array_column($parents, 'id_parent')); |
|
| 800 | + $hier = $ids_nouveaux_parents . (strlen($hier) ? ',' . $hier : ''); |
|
| 801 | + } |
|
| 802 | + |
|
| 803 | + # securite pour ne pas plomber la conso memoire sur les sites prolifiques |
|
| 804 | + if (strlen($hier) < 10000) { |
|
| 805 | + $b[$id] = $hier; |
|
| 806 | + } |
|
| 807 | + |
|
| 808 | + // Notre branche commence par la rubrique de depart si $tout=true |
|
| 809 | + $hier = $tout ? (strlen($hier) ? "$hier,$id" : $id) : $hier; |
|
| 810 | + |
|
| 811 | + return $hier; |
|
| 812 | 812 | } |
| 813 | 813 | |
| 814 | 814 | |
@@ -826,47 +826,47 @@ discard block |
||
| 826 | 826 | * @return void |
| 827 | 827 | **/ |
| 828 | 828 | function calculer_prochain_postdate($check = false) { |
| 829 | - include_spip('base/abstract_sql'); |
|
| 830 | - if ($check) { |
|
| 831 | - $postdates = ($GLOBALS['meta']['post_dates'] == 'non') ? |
|
| 832 | - 'AND A.date <= ' . sql_quote(date('Y-m-d H:i:s')) : ''; |
|
| 833 | - |
|
| 834 | - $r = sql_select( |
|
| 835 | - 'DISTINCT A.id_rubrique AS id', |
|
| 836 | - 'spip_articles AS A LEFT JOIN spip_rubriques AS R ON A.id_rubrique=R.id_rubrique', |
|
| 837 | - "R.statut != 'publie' AND A.statut='publie'$postdates" |
|
| 838 | - ); |
|
| 839 | - while ($row = sql_fetch($r)) { |
|
| 840 | - publier_branche_rubrique($row['id']); |
|
| 841 | - } |
|
| 842 | - |
|
| 843 | - pipeline('trig_calculer_prochain_postdate', ''); |
|
| 844 | - } |
|
| 845 | - |
|
| 846 | - $t = sql_fetsel( |
|
| 847 | - 'date', |
|
| 848 | - 'spip_articles', |
|
| 849 | - "statut='publie' AND date > " . sql_quote(date('Y-m-d H:i:s')), |
|
| 850 | - '', |
|
| 851 | - 'date', |
|
| 852 | - '1' |
|
| 853 | - ); |
|
| 854 | - |
|
| 855 | - if ($t) { |
|
| 856 | - $t = $t['date']; |
|
| 857 | - if ( |
|
| 858 | - !isset($GLOBALS['meta']['date_prochain_postdate']) |
|
| 859 | - or $t <> $GLOBALS['meta']['date_prochain_postdate'] |
|
| 860 | - ) { |
|
| 861 | - ecrire_meta('date_prochain_postdate', strtotime($t)); |
|
| 862 | - ecrire_meta('derniere_modif', time()); |
|
| 863 | - } |
|
| 864 | - } else { |
|
| 865 | - effacer_meta('date_prochain_postdate'); |
|
| 866 | - ecrire_meta('derniere_modif', time()); |
|
| 867 | - } |
|
| 868 | - |
|
| 869 | - spip_log("prochain postdate: $t"); |
|
| 829 | + include_spip('base/abstract_sql'); |
|
| 830 | + if ($check) { |
|
| 831 | + $postdates = ($GLOBALS['meta']['post_dates'] == 'non') ? |
|
| 832 | + 'AND A.date <= ' . sql_quote(date('Y-m-d H:i:s')) : ''; |
|
| 833 | + |
|
| 834 | + $r = sql_select( |
|
| 835 | + 'DISTINCT A.id_rubrique AS id', |
|
| 836 | + 'spip_articles AS A LEFT JOIN spip_rubriques AS R ON A.id_rubrique=R.id_rubrique', |
|
| 837 | + "R.statut != 'publie' AND A.statut='publie'$postdates" |
|
| 838 | + ); |
|
| 839 | + while ($row = sql_fetch($r)) { |
|
| 840 | + publier_branche_rubrique($row['id']); |
|
| 841 | + } |
|
| 842 | + |
|
| 843 | + pipeline('trig_calculer_prochain_postdate', ''); |
|
| 844 | + } |
|
| 845 | + |
|
| 846 | + $t = sql_fetsel( |
|
| 847 | + 'date', |
|
| 848 | + 'spip_articles', |
|
| 849 | + "statut='publie' AND date > " . sql_quote(date('Y-m-d H:i:s')), |
|
| 850 | + '', |
|
| 851 | + 'date', |
|
| 852 | + '1' |
|
| 853 | + ); |
|
| 854 | + |
|
| 855 | + if ($t) { |
|
| 856 | + $t = $t['date']; |
|
| 857 | + if ( |
|
| 858 | + !isset($GLOBALS['meta']['date_prochain_postdate']) |
|
| 859 | + or $t <> $GLOBALS['meta']['date_prochain_postdate'] |
|
| 860 | + ) { |
|
| 861 | + ecrire_meta('date_prochain_postdate', strtotime($t)); |
|
| 862 | + ecrire_meta('derniere_modif', time()); |
|
| 863 | + } |
|
| 864 | + } else { |
|
| 865 | + effacer_meta('date_prochain_postdate'); |
|
| 866 | + ecrire_meta('derniere_modif', time()); |
|
| 867 | + } |
|
| 868 | + |
|
| 869 | + spip_log("prochain postdate: $t"); |
|
| 870 | 870 | } |
| 871 | 871 | |
| 872 | 872 | /** |
@@ -891,62 +891,62 @@ discard block |
||
| 891 | 891 | */ |
| 892 | 892 | function creer_rubrique_nommee($titre, $id_parent = 0, $serveur = '') { |
| 893 | 893 | |
| 894 | - // eclater l'arborescence demandee |
|
| 895 | - // echapper les </multi> et autres balises fermantes html |
|
| 896 | - $titre = preg_replace(',</([a-z][^>]*)>,ims', "<@\\1>", $titre); |
|
| 897 | - $arbo = explode('/', preg_replace(',^/,', '', $titre)); |
|
| 898 | - include_spip('base/abstract_sql'); |
|
| 899 | - foreach ($arbo as $titre) { |
|
| 900 | - // retablir les </multi> et autres balises fermantes html |
|
| 901 | - $titre = preg_replace(',<@([a-z][^>]*)>,ims', "</\\1>", $titre); |
|
| 902 | - $r = sql_getfetsel( |
|
| 903 | - 'id_rubrique', |
|
| 904 | - 'spip_rubriques', |
|
| 905 | - 'titre = ' . sql_quote($titre) . ' AND id_parent=' . intval($id_parent), |
|
| 906 | - $groupby = [], |
|
| 907 | - $orderby = [], |
|
| 908 | - $limit = '', |
|
| 909 | - $having = [], |
|
| 910 | - $serveur |
|
| 911 | - ); |
|
| 912 | - if ($r !== null) { |
|
| 913 | - $id_parent = $r; |
|
| 914 | - } else { |
|
| 915 | - $id_rubrique = sql_insertq('spip_rubriques', [ |
|
| 916 | - 'titre' => $titre, |
|
| 917 | - 'id_parent' => $id_parent, |
|
| 918 | - 'statut' => 'prepa' |
|
| 919 | - ], $desc = [], $serveur); |
|
| 920 | - if ($id_parent > 0) { |
|
| 921 | - $data = sql_fetsel( |
|
| 922 | - 'id_secteur,lang', |
|
| 923 | - 'spip_rubriques', |
|
| 924 | - "id_rubrique=$id_parent", |
|
| 925 | - $groupby = [], |
|
| 926 | - $orderby = [], |
|
| 927 | - $limit = '', |
|
| 928 | - $having = [], |
|
| 929 | - $serveur |
|
| 930 | - ); |
|
| 931 | - $id_secteur = $data['id_secteur']; |
|
| 932 | - $lang = $data['lang']; |
|
| 933 | - } else { |
|
| 934 | - $id_secteur = $id_rubrique; |
|
| 935 | - $lang = $GLOBALS['meta']['langue_site']; |
|
| 936 | - } |
|
| 937 | - |
|
| 938 | - sql_updateq( |
|
| 939 | - 'spip_rubriques', |
|
| 940 | - ['id_secteur' => $id_secteur, 'lang' => $lang], |
|
| 941 | - 'id_rubrique=' . intval($id_rubrique), |
|
| 942 | - [], |
|
| 943 | - $serveur |
|
| 944 | - ); |
|
| 945 | - |
|
| 946 | - // pour la recursion |
|
| 947 | - $id_parent = $id_rubrique; |
|
| 948 | - } |
|
| 949 | - } |
|
| 950 | - |
|
| 951 | - return intval($id_parent); |
|
| 894 | + // eclater l'arborescence demandee |
|
| 895 | + // echapper les </multi> et autres balises fermantes html |
|
| 896 | + $titre = preg_replace(',</([a-z][^>]*)>,ims', "<@\\1>", $titre); |
|
| 897 | + $arbo = explode('/', preg_replace(',^/,', '', $titre)); |
|
| 898 | + include_spip('base/abstract_sql'); |
|
| 899 | + foreach ($arbo as $titre) { |
|
| 900 | + // retablir les </multi> et autres balises fermantes html |
|
| 901 | + $titre = preg_replace(',<@([a-z][^>]*)>,ims', "</\\1>", $titre); |
|
| 902 | + $r = sql_getfetsel( |
|
| 903 | + 'id_rubrique', |
|
| 904 | + 'spip_rubriques', |
|
| 905 | + 'titre = ' . sql_quote($titre) . ' AND id_parent=' . intval($id_parent), |
|
| 906 | + $groupby = [], |
|
| 907 | + $orderby = [], |
|
| 908 | + $limit = '', |
|
| 909 | + $having = [], |
|
| 910 | + $serveur |
|
| 911 | + ); |
|
| 912 | + if ($r !== null) { |
|
| 913 | + $id_parent = $r; |
|
| 914 | + } else { |
|
| 915 | + $id_rubrique = sql_insertq('spip_rubriques', [ |
|
| 916 | + 'titre' => $titre, |
|
| 917 | + 'id_parent' => $id_parent, |
|
| 918 | + 'statut' => 'prepa' |
|
| 919 | + ], $desc = [], $serveur); |
|
| 920 | + if ($id_parent > 0) { |
|
| 921 | + $data = sql_fetsel( |
|
| 922 | + 'id_secteur,lang', |
|
| 923 | + 'spip_rubriques', |
|
| 924 | + "id_rubrique=$id_parent", |
|
| 925 | + $groupby = [], |
|
| 926 | + $orderby = [], |
|
| 927 | + $limit = '', |
|
| 928 | + $having = [], |
|
| 929 | + $serveur |
|
| 930 | + ); |
|
| 931 | + $id_secteur = $data['id_secteur']; |
|
| 932 | + $lang = $data['lang']; |
|
| 933 | + } else { |
|
| 934 | + $id_secteur = $id_rubrique; |
|
| 935 | + $lang = $GLOBALS['meta']['langue_site']; |
|
| 936 | + } |
|
| 937 | + |
|
| 938 | + sql_updateq( |
|
| 939 | + 'spip_rubriques', |
|
| 940 | + ['id_secteur' => $id_secteur, 'lang' => $lang], |
|
| 941 | + 'id_rubrique=' . intval($id_rubrique), |
|
| 942 | + [], |
|
| 943 | + $serveur |
|
| 944 | + ); |
|
| 945 | + |
|
| 946 | + // pour la recursion |
|
| 947 | + $id_parent = $id_rubrique; |
|
| 948 | + } |
|
| 949 | + } |
|
| 950 | + |
|
| 951 | + return intval($id_parent); |
|
| 952 | 952 | } |
@@ -135,9 +135,9 @@ discard block |
||
| 135 | 135 | sql_updateq( |
| 136 | 136 | 'spip_rubriques', |
| 137 | 137 | ['statut' => 'publie', 'date' => date('Y-m-d H:i:s')], |
| 138 | - 'id_rubrique=' . intval($id_rubrique) |
|
| 138 | + 'id_rubrique='.intval($id_rubrique) |
|
| 139 | 139 | ); |
| 140 | - $id_parent = sql_getfetsel('id_parent', 'spip_rubriques AS R', 'R.id_rubrique=' . intval($id_rubrique)); |
|
| 140 | + $id_parent = sql_getfetsel('id_parent', 'spip_rubriques AS R', 'R.id_rubrique='.intval($id_rubrique)); |
|
| 141 | 141 | if (!$id_parent) { |
| 142 | 142 | break; |
| 143 | 143 | } |
@@ -172,7 +172,7 @@ discard block |
||
| 172 | 172 | return $id_pred != $id_rubrique; |
| 173 | 173 | } |
| 174 | 174 | // passer au parent si on a depublie |
| 175 | - $r = sql_fetsel('id_parent', 'spip_rubriques', 'id_rubrique=' . intval($id_pred)); |
|
| 175 | + $r = sql_fetsel('id_parent', 'spip_rubriques', 'id_rubrique='.intval($id_pred)); |
|
| 176 | 176 | $id_pred = $r['id_parent']; |
| 177 | 177 | } |
| 178 | 178 | |
@@ -197,14 +197,14 @@ discard block |
||
| 197 | 197 | $date = date('Y-m-d H:i:s'); |
| 198 | 198 | } |
| 199 | 199 | $postdates = ($GLOBALS['meta']['post_dates'] == 'non') ? |
| 200 | - ' AND date <= ' . sql_quote($date) : ''; |
|
| 200 | + ' AND date <= '.sql_quote($date) : ''; |
|
| 201 | 201 | |
| 202 | 202 | if (!$id_rubrique = intval($id_rubrique)) { |
| 203 | 203 | return false; |
| 204 | 204 | } |
| 205 | 205 | |
| 206 | 206 | // verifier qu'elle existe et est bien publiee |
| 207 | - $r = sql_fetsel('id_rubrique,statut', 'spip_rubriques', 'id_rubrique=' . intval($id_rubrique)); |
|
| 207 | + $r = sql_fetsel('id_rubrique,statut', 'spip_rubriques', 'id_rubrique='.intval($id_rubrique)); |
|
| 208 | 208 | if (!$r or $r['statut'] !== 'publie') { |
| 209 | 209 | return false; |
| 210 | 210 | } |
@@ -214,12 +214,12 @@ discard block |
||
| 214 | 214 | $compte = [ |
| 215 | 215 | 'articles' => sql_countsel( |
| 216 | 216 | 'spip_articles', |
| 217 | - 'id_rubrique=' . intval($id_rubrique) . " AND statut='publie'$postdates" |
|
| 217 | + 'id_rubrique='.intval($id_rubrique)." AND statut='publie'$postdates" |
|
| 218 | 218 | ), |
| 219 | - 'rubriques' => sql_countsel('spip_rubriques', 'id_parent=' . intval($id_rubrique) . " AND statut='publie'"), |
|
| 219 | + 'rubriques' => sql_countsel('spip_rubriques', 'id_parent='.intval($id_rubrique)." AND statut='publie'"), |
|
| 220 | 220 | 'documents' => sql_countsel( |
| 221 | 221 | 'spip_documents AS D JOIN spip_documents_liens AS L ON D.id_document=L.id_document', |
| 222 | - 'L.id_objet=' . intval($id_rubrique) . " AND L.objet='rubrique' and D.mode NOT IN('logoon', 'logooff') " |
|
| 222 | + 'L.id_objet='.intval($id_rubrique)." AND L.objet='rubrique' and D.mode NOT IN('logoon', 'logooff') " |
|
| 223 | 223 | ) |
| 224 | 224 | ]; |
| 225 | 225 | |
@@ -244,7 +244,7 @@ discard block |
||
| 244 | 244 | } |
| 245 | 245 | } |
| 246 | 246 | |
| 247 | - sql_updateq('spip_rubriques', ['statut' => 'prepa'], 'id_rubrique=' . intval($id_rubrique)); |
|
| 247 | + sql_updateq('spip_rubriques', ['statut' => 'prepa'], 'id_rubrique='.intval($id_rubrique)); |
|
| 248 | 248 | |
| 249 | 249 | # spip_log("depublier_rubrique $id_pred"); |
| 250 | 250 | return true; |
@@ -307,7 +307,7 @@ discard block |
||
| 307 | 307 | |
| 308 | 308 | // Afficher les articles post-dates ? |
| 309 | 309 | $postdates = ($GLOBALS['meta']['post_dates'] == 'non') ? |
| 310 | - 'AND A.date <= ' . sql_quote(date('Y-m-d H:i:s')) : ''; |
|
| 310 | + 'AND A.date <= '.sql_quote(date('Y-m-d H:i:s')) : ''; |
|
| 311 | 311 | |
| 312 | 312 | $r = sql_select( |
| 313 | 313 | 'R.id_rubrique AS id, max(A.date) AS date_h', |
@@ -319,7 +319,7 @@ discard block |
||
| 319 | 319 | sql_updateq( |
| 320 | 320 | 'spip_rubriques', |
| 321 | 321 | ['statut_tmp' => 'publie', 'date_tmp' => $row['date_h']], |
| 322 | - 'id_rubrique=' . intval($row['id']) |
|
| 322 | + 'id_rubrique='.intval($row['id']) |
|
| 323 | 323 | ); |
| 324 | 324 | } |
| 325 | 325 | |
@@ -345,7 +345,7 @@ discard block |
||
| 345 | 345 | sql_updateq( |
| 346 | 346 | 'spip_rubriques', |
| 347 | 347 | ['statut_tmp' => 'publie', 'date_tmp' => $row['date_h']], |
| 348 | - 'id_rubrique=' . intval($row['id']) |
|
| 348 | + 'id_rubrique='.intval($row['id']) |
|
| 349 | 349 | ); |
| 350 | 350 | $continuer = true; |
| 351 | 351 | } |
@@ -398,7 +398,7 @@ discard block |
||
| 398 | 398 | and $rows = sql_allfetsel( |
| 399 | 399 | 'A.id_rubrique AS id, R.id_secteur AS id_secteur, R.profondeur+1 as profondeur', |
| 400 | 400 | 'spip_rubriques AS A JOIN spip_rubriques AS R ON A.id_parent = R.id_rubrique', |
| 401 | - 'R.profondeur=' . intval($prof) . ' AND (A.id_secteur <> R.id_secteur OR A.profondeur > R.profondeur+1)', |
|
| 401 | + 'R.profondeur='.intval($prof).' AND (A.id_secteur <> R.id_secteur OR A.profondeur > R.profondeur+1)', |
|
| 402 | 402 | '', |
| 403 | 403 | 'R.id_secteur', |
| 404 | 404 | '0,100' |
@@ -437,11 +437,11 @@ discard block |
||
| 437 | 437 | and $rows = sql_allfetsel( |
| 438 | 438 | 'id_rubrique as id', |
| 439 | 439 | 'spip_rubriques', |
| 440 | - 'profondeur=' . intval($prof + 1) . ' AND id_parent NOT IN (' . sql_get_select( |
|
| 440 | + 'profondeur='.intval($prof + 1).' AND id_parent NOT IN ('.sql_get_select( |
|
| 441 | 441 | 'zzz.id_rubrique', |
| 442 | 442 | 'spip_rubriques AS zzz', |
| 443 | - 'zzz.profondeur=' . intval($prof) |
|
| 444 | - ) . ')', |
|
| 443 | + 'zzz.profondeur='.intval($prof) |
|
| 444 | + ).')', |
|
| 445 | 445 | '', |
| 446 | 446 | '', |
| 447 | 447 | '0,100' |
@@ -455,7 +455,7 @@ discard block |
||
| 455 | 455 | // si pas de rubrique a profondeur $prof+1 pas la peine de continuer |
| 456 | 456 | // si il reste des rubriques non vues, c'est une branche morte ou reference circulaire (base foireuse) |
| 457 | 457 | // on arrete les frais |
| 458 | - if (sql_countsel('spip_rubriques', 'profondeur=' . intval($prof + 1))) { |
|
| 458 | + if (sql_countsel('spip_rubriques', 'profondeur='.intval($prof + 1))) { |
|
| 459 | 459 | $prof++; |
| 460 | 460 | $continuer = true; |
| 461 | 461 | } |
@@ -463,12 +463,12 @@ discard block |
||
| 463 | 463 | |
| 464 | 464 | // loger si la table des rubriques semble foireuse |
| 465 | 465 | // et mettre un id_secteur=0 sur ces rubriques pour eviter toute selection par les boucles |
| 466 | - if (sql_countsel('spip_rubriques', 'profondeur>' . intval($prof + 1))) { |
|
| 466 | + if (sql_countsel('spip_rubriques', 'profondeur>'.intval($prof + 1))) { |
|
| 467 | 467 | spip_log( |
| 468 | - 'Les rubriques de profondeur>' . ($prof + 1) . ' semblent suspectes (branches morte ou reference circulaire dans les parents)', |
|
| 468 | + 'Les rubriques de profondeur>'.($prof + 1).' semblent suspectes (branches morte ou reference circulaire dans les parents)', |
|
| 469 | 469 | _LOG_CRITIQUE |
| 470 | 470 | ); |
| 471 | - sql_update('spip_rubriques', ['id_secteur' => 0], 'profondeur>' . intval($prof + 1)); |
|
| 471 | + sql_update('spip_rubriques', ['id_secteur' => 0], 'profondeur>'.intval($prof + 1)); |
|
| 472 | 472 | } |
| 473 | 473 | |
| 474 | 474 | // reparer les articles |
@@ -479,7 +479,7 @@ discard block |
||
| 479 | 479 | ); |
| 480 | 480 | |
| 481 | 481 | while ($row = sql_fetch($r)) { |
| 482 | - sql_update('spip_articles', ['id_secteur' => $row['secteur']], 'id_article=' . intval($row['id'])); |
|
| 482 | + sql_update('spip_articles', ['id_secteur' => $row['secteur']], 'id_article='.intval($row['id'])); |
|
| 483 | 483 | } |
| 484 | 484 | |
| 485 | 485 | // avertir les plugins qui peuvent faire leur mises a jour egalement |
@@ -510,7 +510,7 @@ discard block |
||
| 510 | 510 | $t = sql_updateq( |
| 511 | 511 | 'spip_rubriques', |
| 512 | 512 | ['lang' => $row['lang'], 'langue_choisie' => 'non'], |
| 513 | - 'id_rubrique=' . intval($id_rubrique) |
|
| 513 | + 'id_rubrique='.intval($id_rubrique) |
|
| 514 | 514 | ); |
| 515 | 515 | } |
| 516 | 516 | |
@@ -555,7 +555,7 @@ discard block |
||
| 555 | 555 | sql_updateq( |
| 556 | 556 | 'spip_articles', |
| 557 | 557 | ['lang' => $row['lang'], 'langue_choisie' => 'non'], |
| 558 | - 'id_article=' . intval($id_article) |
|
| 558 | + 'id_article='.intval($id_article) |
|
| 559 | 559 | ); |
| 560 | 560 | } |
| 561 | 561 | |
@@ -630,11 +630,11 @@ discard block |
||
| 630 | 630 | ]; |
| 631 | 631 | // generer un nom de fonction "anonyme" unique |
| 632 | 632 | do { |
| 633 | - $functionname = 'f_calculer_langues_utilisees_' . $boucle->id_table . '_' . time() . '_' . random_int(0, mt_getrandmax()); |
|
| 633 | + $functionname = 'f_calculer_langues_utilisees_'.$boucle->id_table.'_'.time().'_'.random_int(0, mt_getrandmax()); |
|
| 634 | 634 | } while (function_exists($functionname)); |
| 635 | 635 | $code = calculer_boucle('calculer_langues_utilisees', $boucles); |
| 636 | - $code = '$SP=0; $command=array();$command["connect"] = $connect = "' . $serveur . '"; $Pile=array(0=>array());' . "\n" . $code; |
|
| 637 | - $code = 'function ' . $functionname . '(){' . $code . '};$res = ' . $functionname . '();'; |
|
| 636 | + $code = '$SP=0; $command=array();$command["connect"] = $connect = "'.$serveur.'"; $Pile=array(0=>array());'."\n".$code; |
|
| 637 | + $code = 'function '.$functionname.'(){'.$code.'};$res = '.$functionname.'();'; |
|
| 638 | 638 | $res = ''; |
| 639 | 639 | eval($code); |
| 640 | 640 | $res = explode(',', $res); |
@@ -736,11 +736,11 @@ discard block |
||
| 736 | 736 | $maxiter-- and $filles = sql_allfetsel( |
| 737 | 737 | 'id_rubrique', |
| 738 | 738 | 'spip_rubriques', |
| 739 | - sql_in('id_parent', $r) . ' AND ' . sql_in('id_rubrique', $r, 'NOT') |
|
| 739 | + sql_in('id_parent', $r).' AND '.sql_in('id_rubrique', $r, 'NOT') |
|
| 740 | 740 | ) |
| 741 | 741 | ) { |
| 742 | 742 | $r = join(',', array_column($filles, 'id_rubrique')); |
| 743 | - $branche .= ',' . $r; |
|
| 743 | + $branche .= ','.$r; |
|
| 744 | 744 | } |
| 745 | 745 | |
| 746 | 746 | # securite pour ne pas plomber la conso memoire sur les sites prolifiques |
@@ -780,7 +780,7 @@ discard block |
||
| 780 | 780 | |
| 781 | 781 | if (isset($b[$id])) { |
| 782 | 782 | // Notre branche commence par la rubrique de depart si $tout=true |
| 783 | - return $tout ? (strlen($b[$id]) ? $b[$id] . ",$id" : $id) : $b[$id]; |
|
| 783 | + return $tout ? (strlen($b[$id]) ? $b[$id].",$id" : $id) : $b[$id]; |
|
| 784 | 784 | } |
| 785 | 785 | |
| 786 | 786 | $hier = ''; |
@@ -793,11 +793,11 @@ discard block |
||
| 793 | 793 | $maxiter-- and $parents = sql_allfetsel( |
| 794 | 794 | 'id_parent', |
| 795 | 795 | 'spip_rubriques', |
| 796 | - sql_in('id_rubrique', $ids_nouveaux_parents) . ' AND ' . sql_in('id_parent', $hier, 'NOT') |
|
| 796 | + sql_in('id_rubrique', $ids_nouveaux_parents).' AND '.sql_in('id_parent', $hier, 'NOT') |
|
| 797 | 797 | ) |
| 798 | 798 | ) { |
| 799 | 799 | $ids_nouveaux_parents = join(',', array_column($parents, 'id_parent')); |
| 800 | - $hier = $ids_nouveaux_parents . (strlen($hier) ? ',' . $hier : ''); |
|
| 800 | + $hier = $ids_nouveaux_parents.(strlen($hier) ? ','.$hier : ''); |
|
| 801 | 801 | } |
| 802 | 802 | |
| 803 | 803 | # securite pour ne pas plomber la conso memoire sur les sites prolifiques |
@@ -829,7 +829,7 @@ discard block |
||
| 829 | 829 | include_spip('base/abstract_sql'); |
| 830 | 830 | if ($check) { |
| 831 | 831 | $postdates = ($GLOBALS['meta']['post_dates'] == 'non') ? |
| 832 | - 'AND A.date <= ' . sql_quote(date('Y-m-d H:i:s')) : ''; |
|
| 832 | + 'AND A.date <= '.sql_quote(date('Y-m-d H:i:s')) : ''; |
|
| 833 | 833 | |
| 834 | 834 | $r = sql_select( |
| 835 | 835 | 'DISTINCT A.id_rubrique AS id', |
@@ -846,7 +846,7 @@ discard block |
||
| 846 | 846 | $t = sql_fetsel( |
| 847 | 847 | 'date', |
| 848 | 848 | 'spip_articles', |
| 849 | - "statut='publie' AND date > " . sql_quote(date('Y-m-d H:i:s')), |
|
| 849 | + "statut='publie' AND date > ".sql_quote(date('Y-m-d H:i:s')), |
|
| 850 | 850 | '', |
| 851 | 851 | 'date', |
| 852 | 852 | '1' |
@@ -902,7 +902,7 @@ discard block |
||
| 902 | 902 | $r = sql_getfetsel( |
| 903 | 903 | 'id_rubrique', |
| 904 | 904 | 'spip_rubriques', |
| 905 | - 'titre = ' . sql_quote($titre) . ' AND id_parent=' . intval($id_parent), |
|
| 905 | + 'titre = '.sql_quote($titre).' AND id_parent='.intval($id_parent), |
|
| 906 | 906 | $groupby = [], |
| 907 | 907 | $orderby = [], |
| 908 | 908 | $limit = '', |
@@ -938,7 +938,7 @@ discard block |
||
| 938 | 938 | sql_updateq( |
| 939 | 939 | 'spip_rubriques', |
| 940 | 940 | ['id_secteur' => $id_secteur, 'lang' => $lang], |
| 941 | - 'id_rubrique=' . intval($id_rubrique), |
|
| 941 | + 'id_rubrique='.intval($id_rubrique), |
|
| 942 | 942 | [], |
| 943 | 943 | $serveur |
| 944 | 944 | ); |
@@ -113,7 +113,7 @@ discard block |
||
| 113 | 113 | |
| 114 | 114 | // Appels incomplets (sans $c) |
| 115 | 115 | if (!is_array($c)) { |
| 116 | - spip_log('erreur appel objet_modifier_champs(' . $objet . '), manque $c'); |
|
| 116 | + spip_log('erreur appel objet_modifier_champs('.$objet.'), manque $c'); |
|
| 117 | 117 | |
| 118 | 118 | return _T('erreur_technique_enregistrement_impossible'); |
| 119 | 119 | } |
@@ -146,7 +146,7 @@ discard block |
||
| 146 | 146 | $champs = array_map('corriger_caracteres', $champs); |
| 147 | 147 | |
| 148 | 148 | // On récupère l'état avant toute modification |
| 149 | - $row = sql_fetsel('*', $spip_table_objet, $id_table_objet . '=' . $id_objet); |
|
| 149 | + $row = sql_fetsel('*', $spip_table_objet, $id_table_objet.'='.$id_objet); |
|
| 150 | 150 | |
| 151 | 151 | // Envoyer aux plugins |
| 152 | 152 | $champs = pipeline( |
@@ -200,7 +200,7 @@ discard block |
||
| 200 | 200 | $id_rubrique = 0; |
| 201 | 201 | if (isset($desc['field']['id_rubrique'])) { |
| 202 | 202 | $parent = ($objet == 'rubrique') ? 'id_parent' : 'id_rubrique'; |
| 203 | - $id_rubrique = sql_getfetsel($parent, $spip_table_objet, "$id_table_objet=" . intval($id_objet)); |
|
| 203 | + $id_rubrique = sql_getfetsel($parent, $spip_table_objet, "$id_table_objet=".intval($id_objet)); |
|
| 204 | 204 | } |
| 205 | 205 | $instituer_langue_objet = charger_fonction('instituer_langue_objet', 'action'); |
| 206 | 206 | $champs['lang'] = $instituer_langue_objet($objet, $id_objet, $id_rubrique, $changer_lang, $serveur); |
@@ -222,13 +222,13 @@ discard block |
||
| 222 | 222 | } |
| 223 | 223 | |
| 224 | 224 | // allez on commit la modif |
| 225 | - sql_updateq($spip_table_objet, $champs, "$id_table_objet=" . intval($id_objet), [], $serveur); |
|
| 225 | + sql_updateq($spip_table_objet, $champs, "$id_table_objet=".intval($id_objet), [], $serveur); |
|
| 226 | 226 | |
| 227 | 227 | // on verifie si elle est bien passee |
| 228 | 228 | $moof = sql_fetsel( |
| 229 | 229 | array_keys($champs), |
| 230 | 230 | $spip_table_objet, |
| 231 | - "$id_table_objet=" . intval($id_objet), |
|
| 231 | + "$id_table_objet=".intval($id_objet), |
|
| 232 | 232 | [], |
| 233 | 233 | [], |
| 234 | 234 | '', |
@@ -264,13 +264,13 @@ discard block |
||
| 264 | 264 | // c'est un cas exceptionnel |
| 265 | 265 | if (count($liste)) { |
| 266 | 266 | spip_log( |
| 267 | - "Erreur enregistrement en base $objet/$id_objet champs :" . var_export($conflits, true), |
|
| 268 | - 'modifier.' . _LOG_CRITIQUE |
|
| 267 | + "Erreur enregistrement en base $objet/$id_objet champs :".var_export($conflits, true), |
|
| 268 | + 'modifier.'._LOG_CRITIQUE |
|
| 269 | 269 | ); |
| 270 | 270 | |
| 271 | 271 | return _T( |
| 272 | 272 | 'erreur_technique_enregistrement_champs', |
| 273 | - ['champs' => "<i>'" . implode("'</i>,<i>'", $liste) . "'</i>"] |
|
| 273 | + ['champs' => "<i>'".implode("'</i>,<i>'", $liste)."'</i>"] |
|
| 274 | 274 | ); |
| 275 | 275 | } |
| 276 | 276 | } |
@@ -312,18 +312,18 @@ discard block |
||
| 312 | 312 | include_spip('inc/filtres_mini'); |
| 313 | 313 | $qui = ''; |
| 314 | 314 | if (!empty($GLOBALS['visiteur_session']['id_auteur'])) { |
| 315 | - $qui .= ' #id_auteur:' . $GLOBALS['visiteur_session']['id_auteur'] . '#'; |
|
| 315 | + $qui .= ' #id_auteur:'.$GLOBALS['visiteur_session']['id_auteur'].'#'; |
|
| 316 | 316 | } |
| 317 | 317 | if (!empty($GLOBALS['visiteur_session']['nom'])) { |
| 318 | - $qui .= ' #nom:' . $GLOBALS['visiteur_session']['nom'] . '#'; |
|
| 318 | + $qui .= ' #nom:'.$GLOBALS['visiteur_session']['nom'].'#'; |
|
| 319 | 319 | } |
| 320 | 320 | if ($qui == '') { |
| 321 | - $qui = '#ip:' . $GLOBALS['ip'] . '#'; |
|
| 321 | + $qui = '#ip:'.$GLOBALS['ip'].'#'; |
|
| 322 | 322 | } |
| 323 | - journal(_L($qui . ' a édité ' . $objet . ' ' . $id_objet . ' (' . join( |
|
| 323 | + journal(_L($qui.' a édité '.$objet.' '.$id_objet.' ('.join( |
|
| 324 | 324 | '+', |
| 325 | 325 | array_diff(array_keys($champs), ['date_modif']) |
| 326 | - ) . ')'), [ |
|
| 326 | + ).')'), [ |
|
| 327 | 327 | 'faire' => 'modifier', |
| 328 | 328 | 'quoi' => $objet, |
| 329 | 329 | 'id' => $id_objet |
@@ -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 | /** |
@@ -39,28 +39,28 @@ discard block |
||
| 39 | 39 | * Tableau des champs et valeurs collectées |
| 40 | 40 | */ |
| 41 | 41 | function collecter_requests($include_list, $exclude_list = [], $set = null, $tous = false) { |
| 42 | - $c = $set; |
|
| 43 | - if (!$c) { |
|
| 44 | - $c = []; |
|
| 45 | - foreach ($include_list as $champ) { |
|
| 46 | - // on ne collecte que les champs reellement envoyes par defaut. |
|
| 47 | - // le cas d'un envoi de valeur NULL peut du coup poser probleme. |
|
| 48 | - $val = _request($champ); |
|
| 49 | - if ($tous or $val !== null) { |
|
| 50 | - $c[$champ] = $val; |
|
| 51 | - } |
|
| 52 | - } |
|
| 53 | - // on ajoute toujours la lang en saisie possible |
|
| 54 | - // meme si pas prevu au depart pour l'objet concerne |
|
| 55 | - if ($l = _request('changer_lang')) { |
|
| 56 | - $c['lang'] = $l; |
|
| 57 | - } |
|
| 58 | - } |
|
| 59 | - foreach ($exclude_list as $champ) { |
|
| 60 | - unset($c[$champ]); |
|
| 61 | - } |
|
| 62 | - |
|
| 63 | - return $c; |
|
| 42 | + $c = $set; |
|
| 43 | + if (!$c) { |
|
| 44 | + $c = []; |
|
| 45 | + foreach ($include_list as $champ) { |
|
| 46 | + // on ne collecte que les champs reellement envoyes par defaut. |
|
| 47 | + // le cas d'un envoi de valeur NULL peut du coup poser probleme. |
|
| 48 | + $val = _request($champ); |
|
| 49 | + if ($tous or $val !== null) { |
|
| 50 | + $c[$champ] = $val; |
|
| 51 | + } |
|
| 52 | + } |
|
| 53 | + // on ajoute toujours la lang en saisie possible |
|
| 54 | + // meme si pas prevu au depart pour l'objet concerne |
|
| 55 | + if ($l = _request('changer_lang')) { |
|
| 56 | + $c['lang'] = $l; |
|
| 57 | + } |
|
| 58 | + } |
|
| 59 | + foreach ($exclude_list as $champ) { |
|
| 60 | + unset($c[$champ]); |
|
| 61 | + } |
|
| 62 | + |
|
| 63 | + return $c; |
|
| 64 | 64 | } |
| 65 | 65 | |
| 66 | 66 | /** |
@@ -97,238 +97,238 @@ discard block |
||
| 97 | 97 | * - chaîne : Texte d'un message d'erreur |
| 98 | 98 | */ |
| 99 | 99 | function objet_modifier_champs($objet, $id_objet, $options, $c = null, $serveur = '') { |
| 100 | - if (!$id_objet = intval($id_objet)) { |
|
| 101 | - spip_log('Erreur $id_objet non defini', 'warn'); |
|
| 102 | - |
|
| 103 | - return _T('erreur_technique_enregistrement_impossible'); |
|
| 104 | - } |
|
| 105 | - |
|
| 106 | - include_spip('inc/filtres'); |
|
| 107 | - |
|
| 108 | - $table_objet = table_objet($objet, $serveur); |
|
| 109 | - $spip_table_objet = table_objet_sql($objet, $serveur); |
|
| 110 | - $id_table_objet = id_table_objet($objet, $serveur); |
|
| 111 | - $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 112 | - $desc = $trouver_table($spip_table_objet, $serveur); |
|
| 113 | - |
|
| 114 | - // Appels incomplets (sans $c) |
|
| 115 | - if (!is_array($c)) { |
|
| 116 | - spip_log('erreur appel objet_modifier_champs(' . $objet . '), manque $c'); |
|
| 117 | - |
|
| 118 | - return _T('erreur_technique_enregistrement_impossible'); |
|
| 119 | - } |
|
| 120 | - |
|
| 121 | - // Securite : certaines variables ne sont jamais acceptees ici |
|
| 122 | - // car elles ne relevent pas de autoriser(xxx, modifier) ; |
|
| 123 | - // il faut passer par instituer_XX() |
|
| 124 | - // TODO: faut-il passer ces variables interdites |
|
| 125 | - // dans un fichier de description separe ? |
|
| 126 | - unset($c['statut']); |
|
| 127 | - unset($c['id_parent']); |
|
| 128 | - unset($c['id_rubrique']); |
|
| 129 | - unset($c['id_secteur']); |
|
| 130 | - |
|
| 131 | - // Gerer les champs non vides |
|
| 132 | - if (isset($options['nonvide']) and is_array($options['nonvide'])) { |
|
| 133 | - foreach ($options['nonvide'] as $champ => $sinon) { |
|
| 134 | - if (isset($c[$champ]) and $c[$champ] === '') { |
|
| 135 | - $c[$champ] = $sinon; |
|
| 136 | - } |
|
| 137 | - } |
|
| 138 | - } |
|
| 139 | - |
|
| 140 | - // N'accepter que les champs qui existent |
|
| 141 | - // TODO: ici aussi on peut valider les contenus |
|
| 142 | - // en fonction du type |
|
| 143 | - $champs = array_intersect_key($c, $desc['field']); |
|
| 144 | - |
|
| 145 | - // Nettoyer les valeurs |
|
| 146 | - $champs = array_map('corriger_caracteres', $champs); |
|
| 147 | - |
|
| 148 | - // On récupère l'état avant toute modification |
|
| 149 | - $row = sql_fetsel('*', $spip_table_objet, $id_table_objet . '=' . $id_objet); |
|
| 150 | - |
|
| 151 | - // Envoyer aux plugins |
|
| 152 | - $champs = pipeline( |
|
| 153 | - 'pre_edition', |
|
| 154 | - [ |
|
| 155 | - 'args' => [ |
|
| 156 | - 'table' => $spip_table_objet, // compatibilite |
|
| 157 | - 'table_objet' => $table_objet, |
|
| 158 | - 'spip_table_objet' => $spip_table_objet, |
|
| 159 | - 'desc' => $desc, |
|
| 160 | - 'type' => $objet, |
|
| 161 | - 'id_objet' => $id_objet, |
|
| 162 | - 'data' => $options['data'] ?? null, |
|
| 163 | - 'champs' => $options['champs'] ?? [], // [doc] c'est quoi ? |
|
| 164 | - 'champs_anciens' => $row, // état du contenu avant modif |
|
| 165 | - 'serveur' => $serveur, |
|
| 166 | - 'action' => $options['action'] ?? 'modifier' |
|
| 167 | - ], |
|
| 168 | - 'data' => $champs |
|
| 169 | - ] |
|
| 170 | - ); |
|
| 171 | - |
|
| 172 | - if (!$champs) { |
|
| 173 | - return false; |
|
| 174 | - } |
|
| 175 | - |
|
| 176 | - |
|
| 177 | - // marquer le fait que l'objet est travaille par toto a telle date |
|
| 178 | - include_spip('inc/config'); |
|
| 179 | - if (lire_config('articles_modif', 'non') !== 'non') { |
|
| 180 | - include_spip('inc/drapeau_edition'); |
|
| 181 | - signale_edition($id_objet, $GLOBALS['visiteur_session'], $objet); |
|
| 182 | - } |
|
| 183 | - |
|
| 184 | - // Verifier si les mises a jour sont pertinentes, datees, en conflit etc |
|
| 185 | - include_spip('inc/editer'); |
|
| 186 | - if (!isset($options['data']) or is_null($options['data'])) { |
|
| 187 | - $options['data'] = &$_POST; |
|
| 188 | - } |
|
| 189 | - $conflits = controler_md5($champs, $options['data'], $objet, $id_objet, $serveur); |
|
| 190 | - // cas hypothetique : normalement inc/editer verifie en amont le conflit edition |
|
| 191 | - // et gere l'interface |
|
| 192 | - // ici on ne renvoie donc qu'un messsage d'erreur, au cas ou on y arrive quand meme |
|
| 193 | - if ($conflits) { |
|
| 194 | - return _T('titre_conflit_edition'); |
|
| 195 | - } |
|
| 196 | - |
|
| 197 | - if ($champs) { |
|
| 198 | - // cas particulier de la langue : passer par instituer_langue_objet |
|
| 199 | - if (isset($champs['lang'])) { |
|
| 200 | - if ($changer_lang = $champs['lang']) { |
|
| 201 | - $id_rubrique = 0; |
|
| 202 | - if (isset($desc['field']['id_rubrique'])) { |
|
| 203 | - $parent = ($objet == 'rubrique') ? 'id_parent' : 'id_rubrique'; |
|
| 204 | - $id_rubrique = sql_getfetsel($parent, $spip_table_objet, "$id_table_objet=" . intval($id_objet)); |
|
| 205 | - } |
|
| 206 | - $instituer_langue_objet = charger_fonction('instituer_langue_objet', 'action'); |
|
| 207 | - $champs['lang'] = $instituer_langue_objet($objet, $id_objet, $id_rubrique, $changer_lang, $serveur); |
|
| 208 | - } |
|
| 209 | - // on laisse 'lang' dans $champs, |
|
| 210 | - // ca permet de passer dans le pipeline post_edition et de journaliser |
|
| 211 | - // et ca ne gene pas qu'on refasse un sql_updateq dessus apres l'avoir |
|
| 212 | - // deja pris en compte |
|
| 213 | - } |
|
| 214 | - |
|
| 215 | - // la modif peut avoir lieu |
|
| 216 | - |
|
| 217 | - // faut-il ajouter date_modif ? |
|
| 218 | - if ( |
|
| 219 | - !empty($options['date_modif']) |
|
| 220 | - and !isset($champs[$options['date_modif']]) |
|
| 221 | - ) { |
|
| 222 | - $champs[$options['date_modif']] = date('Y-m-d H:i:s'); |
|
| 223 | - } |
|
| 224 | - |
|
| 225 | - // allez on commit la modif |
|
| 226 | - sql_updateq($spip_table_objet, $champs, "$id_table_objet=" . intval($id_objet), [], $serveur); |
|
| 227 | - |
|
| 228 | - // on verifie si elle est bien passee |
|
| 229 | - $moof = sql_fetsel( |
|
| 230 | - array_keys($champs), |
|
| 231 | - $spip_table_objet, |
|
| 232 | - "$id_table_objet=" . intval($id_objet), |
|
| 233 | - [], |
|
| 234 | - [], |
|
| 235 | - '', |
|
| 236 | - [], |
|
| 237 | - $serveur |
|
| 238 | - ); |
|
| 239 | - // si difference entre les champs, reperer les champs mal enregistres |
|
| 240 | - if ($moof != $champs) { |
|
| 241 | - $liste = []; |
|
| 242 | - foreach ($moof as $k => $v) { |
|
| 243 | - if ( |
|
| 244 | - $v !== $champs[$k] |
|
| 245 | - // ne pas alerter si le champ est numerique est que les valeurs sont equivalentes |
|
| 246 | - and (!is_numeric($v) or intval($v) !== intval($champs[$k])) |
|
| 247 | - // ne pas alerter si le champ est date, qu'on a envoye une valeur vide et qu'on recupere une date nulle |
|
| 248 | - and (strlen($champs[$k]) or !in_array($v, ['0000-00-00 00:00:00', '0000-00-00'])) |
|
| 249 | - ) { |
|
| 250 | - $liste[] = $k; |
|
| 251 | - $conflits[$k]['post'] = $champs[$k]; |
|
| 252 | - $conflits[$k]['save'] = $v; |
|
| 253 | - |
|
| 254 | - // cas specifique MySQL+emoji : si l'un est la |
|
| 255 | - // conversion utf8_noplanes de l'autre alors c'est OK |
|
| 256 | - if (defined('_MYSQL_NOPLANES') && _MYSQL_NOPLANES) { |
|
| 257 | - include_spip('inc/charsets'); |
|
| 258 | - if ($v == utf8_noplanes($champs[$k])) { |
|
| 259 | - array_pop($liste); |
|
| 260 | - } |
|
| 261 | - } |
|
| 262 | - } |
|
| 263 | - } |
|
| 264 | - // si un champ n'a pas ete correctement enregistre, loger et retourner une erreur |
|
| 265 | - // c'est un cas exceptionnel |
|
| 266 | - if (count($liste)) { |
|
| 267 | - spip_log( |
|
| 268 | - "Erreur enregistrement en base $objet/$id_objet champs :" . var_export($conflits, true), |
|
| 269 | - 'modifier.' . _LOG_CRITIQUE |
|
| 270 | - ); |
|
| 271 | - |
|
| 272 | - return _T( |
|
| 273 | - 'erreur_technique_enregistrement_champs', |
|
| 274 | - ['champs' => "<i>'" . implode("'</i>,<i>'", $liste) . "'</i>"] |
|
| 275 | - ); |
|
| 276 | - } |
|
| 277 | - } |
|
| 278 | - |
|
| 279 | - // Invalider les caches |
|
| 280 | - if (isset($options['invalideur']) and $options['invalideur']) { |
|
| 281 | - include_spip('inc/invalideur'); |
|
| 282 | - if (is_array($options['invalideur'])) { |
|
| 283 | - array_map('suivre_invalideur', $options['invalideur']); |
|
| 284 | - } else { |
|
| 285 | - suivre_invalideur($options['invalideur']); |
|
| 286 | - } |
|
| 287 | - } |
|
| 288 | - |
|
| 289 | - // Notifications, gestion des revisions... |
|
| 290 | - // en standard, appelle |nouvelle_revision ci-dessous |
|
| 291 | - pipeline( |
|
| 292 | - 'post_edition', |
|
| 293 | - [ |
|
| 294 | - 'args' => [ |
|
| 295 | - 'table' => $spip_table_objet, |
|
| 296 | - 'table_objet' => $table_objet, |
|
| 297 | - 'spip_table_objet' => $spip_table_objet, |
|
| 298 | - 'desc' => $desc, |
|
| 299 | - 'type' => $objet, |
|
| 300 | - 'id_objet' => $id_objet, |
|
| 301 | - 'champs' => $options['champs'] ?? [], // [doc] kesako ? |
|
| 302 | - 'champs_anciens' => $row, // état du contenu avant modif |
|
| 303 | - 'serveur' => $serveur, |
|
| 304 | - 'action' => $options['action'] ?? 'modifier' |
|
| 305 | - ], |
|
| 306 | - 'data' => $champs |
|
| 307 | - ] |
|
| 308 | - ); |
|
| 309 | - } |
|
| 310 | - |
|
| 311 | - // journaliser l'affaire |
|
| 312 | - // message a affiner :-) |
|
| 313 | - include_spip('inc/filtres_mini'); |
|
| 314 | - $qui = ''; |
|
| 315 | - if (!empty($GLOBALS['visiteur_session']['id_auteur'])) { |
|
| 316 | - $qui .= ' #id_auteur:' . $GLOBALS['visiteur_session']['id_auteur'] . '#'; |
|
| 317 | - } |
|
| 318 | - if (!empty($GLOBALS['visiteur_session']['nom'])) { |
|
| 319 | - $qui .= ' #nom:' . $GLOBALS['visiteur_session']['nom'] . '#'; |
|
| 320 | - } |
|
| 321 | - if ($qui == '') { |
|
| 322 | - $qui = '#ip:' . $GLOBALS['ip'] . '#'; |
|
| 323 | - } |
|
| 324 | - journal(_L($qui . ' a édité ' . $objet . ' ' . $id_objet . ' (' . join( |
|
| 325 | - '+', |
|
| 326 | - array_diff(array_keys($champs), ['date_modif']) |
|
| 327 | - ) . ')'), [ |
|
| 328 | - 'faire' => 'modifier', |
|
| 329 | - 'quoi' => $objet, |
|
| 330 | - 'id' => $id_objet |
|
| 331 | - ]); |
|
| 332 | - |
|
| 333 | - return ''; |
|
| 100 | + if (!$id_objet = intval($id_objet)) { |
|
| 101 | + spip_log('Erreur $id_objet non defini', 'warn'); |
|
| 102 | + |
|
| 103 | + return _T('erreur_technique_enregistrement_impossible'); |
|
| 104 | + } |
|
| 105 | + |
|
| 106 | + include_spip('inc/filtres'); |
|
| 107 | + |
|
| 108 | + $table_objet = table_objet($objet, $serveur); |
|
| 109 | + $spip_table_objet = table_objet_sql($objet, $serveur); |
|
| 110 | + $id_table_objet = id_table_objet($objet, $serveur); |
|
| 111 | + $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 112 | + $desc = $trouver_table($spip_table_objet, $serveur); |
|
| 113 | + |
|
| 114 | + // Appels incomplets (sans $c) |
|
| 115 | + if (!is_array($c)) { |
|
| 116 | + spip_log('erreur appel objet_modifier_champs(' . $objet . '), manque $c'); |
|
| 117 | + |
|
| 118 | + return _T('erreur_technique_enregistrement_impossible'); |
|
| 119 | + } |
|
| 120 | + |
|
| 121 | + // Securite : certaines variables ne sont jamais acceptees ici |
|
| 122 | + // car elles ne relevent pas de autoriser(xxx, modifier) ; |
|
| 123 | + // il faut passer par instituer_XX() |
|
| 124 | + // TODO: faut-il passer ces variables interdites |
|
| 125 | + // dans un fichier de description separe ? |
|
| 126 | + unset($c['statut']); |
|
| 127 | + unset($c['id_parent']); |
|
| 128 | + unset($c['id_rubrique']); |
|
| 129 | + unset($c['id_secteur']); |
|
| 130 | + |
|
| 131 | + // Gerer les champs non vides |
|
| 132 | + if (isset($options['nonvide']) and is_array($options['nonvide'])) { |
|
| 133 | + foreach ($options['nonvide'] as $champ => $sinon) { |
|
| 134 | + if (isset($c[$champ]) and $c[$champ] === '') { |
|
| 135 | + $c[$champ] = $sinon; |
|
| 136 | + } |
|
| 137 | + } |
|
| 138 | + } |
|
| 139 | + |
|
| 140 | + // N'accepter que les champs qui existent |
|
| 141 | + // TODO: ici aussi on peut valider les contenus |
|
| 142 | + // en fonction du type |
|
| 143 | + $champs = array_intersect_key($c, $desc['field']); |
|
| 144 | + |
|
| 145 | + // Nettoyer les valeurs |
|
| 146 | + $champs = array_map('corriger_caracteres', $champs); |
|
| 147 | + |
|
| 148 | + // On récupère l'état avant toute modification |
|
| 149 | + $row = sql_fetsel('*', $spip_table_objet, $id_table_objet . '=' . $id_objet); |
|
| 150 | + |
|
| 151 | + // Envoyer aux plugins |
|
| 152 | + $champs = pipeline( |
|
| 153 | + 'pre_edition', |
|
| 154 | + [ |
|
| 155 | + 'args' => [ |
|
| 156 | + 'table' => $spip_table_objet, // compatibilite |
|
| 157 | + 'table_objet' => $table_objet, |
|
| 158 | + 'spip_table_objet' => $spip_table_objet, |
|
| 159 | + 'desc' => $desc, |
|
| 160 | + 'type' => $objet, |
|
| 161 | + 'id_objet' => $id_objet, |
|
| 162 | + 'data' => $options['data'] ?? null, |
|
| 163 | + 'champs' => $options['champs'] ?? [], // [doc] c'est quoi ? |
|
| 164 | + 'champs_anciens' => $row, // état du contenu avant modif |
|
| 165 | + 'serveur' => $serveur, |
|
| 166 | + 'action' => $options['action'] ?? 'modifier' |
|
| 167 | + ], |
|
| 168 | + 'data' => $champs |
|
| 169 | + ] |
|
| 170 | + ); |
|
| 171 | + |
|
| 172 | + if (!$champs) { |
|
| 173 | + return false; |
|
| 174 | + } |
|
| 175 | + |
|
| 176 | + |
|
| 177 | + // marquer le fait que l'objet est travaille par toto a telle date |
|
| 178 | + include_spip('inc/config'); |
|
| 179 | + if (lire_config('articles_modif', 'non') !== 'non') { |
|
| 180 | + include_spip('inc/drapeau_edition'); |
|
| 181 | + signale_edition($id_objet, $GLOBALS['visiteur_session'], $objet); |
|
| 182 | + } |
|
| 183 | + |
|
| 184 | + // Verifier si les mises a jour sont pertinentes, datees, en conflit etc |
|
| 185 | + include_spip('inc/editer'); |
|
| 186 | + if (!isset($options['data']) or is_null($options['data'])) { |
|
| 187 | + $options['data'] = &$_POST; |
|
| 188 | + } |
|
| 189 | + $conflits = controler_md5($champs, $options['data'], $objet, $id_objet, $serveur); |
|
| 190 | + // cas hypothetique : normalement inc/editer verifie en amont le conflit edition |
|
| 191 | + // et gere l'interface |
|
| 192 | + // ici on ne renvoie donc qu'un messsage d'erreur, au cas ou on y arrive quand meme |
|
| 193 | + if ($conflits) { |
|
| 194 | + return _T('titre_conflit_edition'); |
|
| 195 | + } |
|
| 196 | + |
|
| 197 | + if ($champs) { |
|
| 198 | + // cas particulier de la langue : passer par instituer_langue_objet |
|
| 199 | + if (isset($champs['lang'])) { |
|
| 200 | + if ($changer_lang = $champs['lang']) { |
|
| 201 | + $id_rubrique = 0; |
|
| 202 | + if (isset($desc['field']['id_rubrique'])) { |
|
| 203 | + $parent = ($objet == 'rubrique') ? 'id_parent' : 'id_rubrique'; |
|
| 204 | + $id_rubrique = sql_getfetsel($parent, $spip_table_objet, "$id_table_objet=" . intval($id_objet)); |
|
| 205 | + } |
|
| 206 | + $instituer_langue_objet = charger_fonction('instituer_langue_objet', 'action'); |
|
| 207 | + $champs['lang'] = $instituer_langue_objet($objet, $id_objet, $id_rubrique, $changer_lang, $serveur); |
|
| 208 | + } |
|
| 209 | + // on laisse 'lang' dans $champs, |
|
| 210 | + // ca permet de passer dans le pipeline post_edition et de journaliser |
|
| 211 | + // et ca ne gene pas qu'on refasse un sql_updateq dessus apres l'avoir |
|
| 212 | + // deja pris en compte |
|
| 213 | + } |
|
| 214 | + |
|
| 215 | + // la modif peut avoir lieu |
|
| 216 | + |
|
| 217 | + // faut-il ajouter date_modif ? |
|
| 218 | + if ( |
|
| 219 | + !empty($options['date_modif']) |
|
| 220 | + and !isset($champs[$options['date_modif']]) |
|
| 221 | + ) { |
|
| 222 | + $champs[$options['date_modif']] = date('Y-m-d H:i:s'); |
|
| 223 | + } |
|
| 224 | + |
|
| 225 | + // allez on commit la modif |
|
| 226 | + sql_updateq($spip_table_objet, $champs, "$id_table_objet=" . intval($id_objet), [], $serveur); |
|
| 227 | + |
|
| 228 | + // on verifie si elle est bien passee |
|
| 229 | + $moof = sql_fetsel( |
|
| 230 | + array_keys($champs), |
|
| 231 | + $spip_table_objet, |
|
| 232 | + "$id_table_objet=" . intval($id_objet), |
|
| 233 | + [], |
|
| 234 | + [], |
|
| 235 | + '', |
|
| 236 | + [], |
|
| 237 | + $serveur |
|
| 238 | + ); |
|
| 239 | + // si difference entre les champs, reperer les champs mal enregistres |
|
| 240 | + if ($moof != $champs) { |
|
| 241 | + $liste = []; |
|
| 242 | + foreach ($moof as $k => $v) { |
|
| 243 | + if ( |
|
| 244 | + $v !== $champs[$k] |
|
| 245 | + // ne pas alerter si le champ est numerique est que les valeurs sont equivalentes |
|
| 246 | + and (!is_numeric($v) or intval($v) !== intval($champs[$k])) |
|
| 247 | + // ne pas alerter si le champ est date, qu'on a envoye une valeur vide et qu'on recupere une date nulle |
|
| 248 | + and (strlen($champs[$k]) or !in_array($v, ['0000-00-00 00:00:00', '0000-00-00'])) |
|
| 249 | + ) { |
|
| 250 | + $liste[] = $k; |
|
| 251 | + $conflits[$k]['post'] = $champs[$k]; |
|
| 252 | + $conflits[$k]['save'] = $v; |
|
| 253 | + |
|
| 254 | + // cas specifique MySQL+emoji : si l'un est la |
|
| 255 | + // conversion utf8_noplanes de l'autre alors c'est OK |
|
| 256 | + if (defined('_MYSQL_NOPLANES') && _MYSQL_NOPLANES) { |
|
| 257 | + include_spip('inc/charsets'); |
|
| 258 | + if ($v == utf8_noplanes($champs[$k])) { |
|
| 259 | + array_pop($liste); |
|
| 260 | + } |
|
| 261 | + } |
|
| 262 | + } |
|
| 263 | + } |
|
| 264 | + // si un champ n'a pas ete correctement enregistre, loger et retourner une erreur |
|
| 265 | + // c'est un cas exceptionnel |
|
| 266 | + if (count($liste)) { |
|
| 267 | + spip_log( |
|
| 268 | + "Erreur enregistrement en base $objet/$id_objet champs :" . var_export($conflits, true), |
|
| 269 | + 'modifier.' . _LOG_CRITIQUE |
|
| 270 | + ); |
|
| 271 | + |
|
| 272 | + return _T( |
|
| 273 | + 'erreur_technique_enregistrement_champs', |
|
| 274 | + ['champs' => "<i>'" . implode("'</i>,<i>'", $liste) . "'</i>"] |
|
| 275 | + ); |
|
| 276 | + } |
|
| 277 | + } |
|
| 278 | + |
|
| 279 | + // Invalider les caches |
|
| 280 | + if (isset($options['invalideur']) and $options['invalideur']) { |
|
| 281 | + include_spip('inc/invalideur'); |
|
| 282 | + if (is_array($options['invalideur'])) { |
|
| 283 | + array_map('suivre_invalideur', $options['invalideur']); |
|
| 284 | + } else { |
|
| 285 | + suivre_invalideur($options['invalideur']); |
|
| 286 | + } |
|
| 287 | + } |
|
| 288 | + |
|
| 289 | + // Notifications, gestion des revisions... |
|
| 290 | + // en standard, appelle |nouvelle_revision ci-dessous |
|
| 291 | + pipeline( |
|
| 292 | + 'post_edition', |
|
| 293 | + [ |
|
| 294 | + 'args' => [ |
|
| 295 | + 'table' => $spip_table_objet, |
|
| 296 | + 'table_objet' => $table_objet, |
|
| 297 | + 'spip_table_objet' => $spip_table_objet, |
|
| 298 | + 'desc' => $desc, |
|
| 299 | + 'type' => $objet, |
|
| 300 | + 'id_objet' => $id_objet, |
|
| 301 | + 'champs' => $options['champs'] ?? [], // [doc] kesako ? |
|
| 302 | + 'champs_anciens' => $row, // état du contenu avant modif |
|
| 303 | + 'serveur' => $serveur, |
|
| 304 | + 'action' => $options['action'] ?? 'modifier' |
|
| 305 | + ], |
|
| 306 | + 'data' => $champs |
|
| 307 | + ] |
|
| 308 | + ); |
|
| 309 | + } |
|
| 310 | + |
|
| 311 | + // journaliser l'affaire |
|
| 312 | + // message a affiner :-) |
|
| 313 | + include_spip('inc/filtres_mini'); |
|
| 314 | + $qui = ''; |
|
| 315 | + if (!empty($GLOBALS['visiteur_session']['id_auteur'])) { |
|
| 316 | + $qui .= ' #id_auteur:' . $GLOBALS['visiteur_session']['id_auteur'] . '#'; |
|
| 317 | + } |
|
| 318 | + if (!empty($GLOBALS['visiteur_session']['nom'])) { |
|
| 319 | + $qui .= ' #nom:' . $GLOBALS['visiteur_session']['nom'] . '#'; |
|
| 320 | + } |
|
| 321 | + if ($qui == '') { |
|
| 322 | + $qui = '#ip:' . $GLOBALS['ip'] . '#'; |
|
| 323 | + } |
|
| 324 | + journal(_L($qui . ' a édité ' . $objet . ' ' . $id_objet . ' (' . join( |
|
| 325 | + '+', |
|
| 326 | + array_diff(array_keys($champs), ['date_modif']) |
|
| 327 | + ) . ')'), [ |
|
| 328 | + 'faire' => 'modifier', |
|
| 329 | + 'quoi' => $objet, |
|
| 330 | + 'id' => $id_objet |
|
| 331 | + ]); |
|
| 332 | + |
|
| 333 | + return ''; |
|
| 334 | 334 | } |
@@ -17,7 +17,7 @@ discard block |
||
| 17 | 17 | **/ |
| 18 | 18 | |
| 19 | 19 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 20 | - return; |
|
| 20 | + return; |
|
| 21 | 21 | } |
| 22 | 22 | |
| 23 | 23 | include_spip('inc/presentation'); |
@@ -31,7 +31,7 @@ discard block |
||
| 31 | 31 | * @uses exec_puce_statut_args() |
| 32 | 32 | **/ |
| 33 | 33 | function exec_puce_statut_dist(): void { |
| 34 | - exec_puce_statut_args(_request('id'), _request('type')); |
|
| 34 | + exec_puce_statut_args(_request('id'), _request('type')); |
|
| 35 | 35 | } |
| 36 | 36 | |
| 37 | 37 | /** |
@@ -50,26 +50,26 @@ discard block |
||
| 50 | 50 | * Type d'objet |
| 51 | 51 | **/ |
| 52 | 52 | function exec_puce_statut_args($id, $type): void { |
| 53 | - $id = intval($id); |
|
| 54 | - if ( |
|
| 55 | - $table_objet_sql = table_objet_sql($type) |
|
| 56 | - and $d = lister_tables_objets_sql($table_objet_sql) |
|
| 57 | - and isset($d['statut_textes_instituer']) |
|
| 58 | - and $d['statut_textes_instituer'] |
|
| 59 | - ) { |
|
| 60 | - $prim = id_table_objet($type); |
|
| 61 | - if (isset($d['field']['id_rubrique'])) { |
|
| 62 | - $select = 'id_rubrique,statut'; |
|
| 63 | - } else { |
|
| 64 | - $select = '0 as id_rubrique,statut'; |
|
| 65 | - } |
|
| 66 | - $r = sql_fetsel($select, $table_objet_sql, "$prim=$id"); |
|
| 67 | - $statut = $r['statut']; |
|
| 68 | - $id_rubrique = $r['id_rubrique']; |
|
| 69 | - } else { |
|
| 70 | - $id_rubrique = $id; |
|
| 71 | - $statut = 'prop'; // arbitraire |
|
| 72 | - } |
|
| 73 | - $puce_statut = charger_fonction('puce_statut', 'inc'); |
|
| 74 | - ajax_retour($puce_statut($id, $statut, $id_rubrique, $type, true)); |
|
| 53 | + $id = intval($id); |
|
| 54 | + if ( |
|
| 55 | + $table_objet_sql = table_objet_sql($type) |
|
| 56 | + and $d = lister_tables_objets_sql($table_objet_sql) |
|
| 57 | + and isset($d['statut_textes_instituer']) |
|
| 58 | + and $d['statut_textes_instituer'] |
|
| 59 | + ) { |
|
| 60 | + $prim = id_table_objet($type); |
|
| 61 | + if (isset($d['field']['id_rubrique'])) { |
|
| 62 | + $select = 'id_rubrique,statut'; |
|
| 63 | + } else { |
|
| 64 | + $select = '0 as id_rubrique,statut'; |
|
| 65 | + } |
|
| 66 | + $r = sql_fetsel($select, $table_objet_sql, "$prim=$id"); |
|
| 67 | + $statut = $r['statut']; |
|
| 68 | + $id_rubrique = $r['id_rubrique']; |
|
| 69 | + } else { |
|
| 70 | + $id_rubrique = $id; |
|
| 71 | + $statut = 'prop'; // arbitraire |
|
| 72 | + } |
|
| 73 | + $puce_statut = charger_fonction('puce_statut', 'inc'); |
|
| 74 | + ajax_retour($puce_statut($id, $statut, $id_rubrique, $type, true)); |
|
| 75 | 75 | } |
@@ -30,7 +30,7 @@ discard block |
||
| 30 | 30 | * @package SPIP\Core\Drapeaux\Edition |
| 31 | 31 | **/ |
| 32 | 32 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 33 | - return; |
|
| 33 | + return; |
|
| 34 | 34 | } |
| 35 | 35 | |
| 36 | 36 | |
@@ -45,46 +45,46 @@ discard block |
||
| 45 | 45 | * `[ type d'objet ][id_objet][id_auteur][nom de l'auteur] = time()` |
| 46 | 46 | **/ |
| 47 | 47 | function lire_tableau_edition() { |
| 48 | - $edition = @unserialize($GLOBALS['meta']['drapeau_edition']); |
|
| 49 | - if (!$edition) { |
|
| 50 | - return []; |
|
| 51 | - } |
|
| 52 | - $changed = false; |
|
| 48 | + $edition = @unserialize($GLOBALS['meta']['drapeau_edition']); |
|
| 49 | + if (!$edition) { |
|
| 50 | + return []; |
|
| 51 | + } |
|
| 52 | + $changed = false; |
|
| 53 | 53 | |
| 54 | - $bon_pour_le_service = time() - 3600; |
|
| 55 | - // parcourir le tableau et virer les vieux |
|
| 56 | - foreach ($edition as $objet => $data) { |
|
| 57 | - if (!is_array($data)) { |
|
| 58 | - unset($edition[$objet]); |
|
| 59 | - } // vieille version |
|
| 60 | - else { |
|
| 61 | - foreach ($data as $id => $tab) { |
|
| 62 | - if (!is_array($tab)) { |
|
| 63 | - unset($edition[$objet][$tab]); |
|
| 64 | - } // vieille version |
|
| 65 | - else { |
|
| 66 | - foreach ($tab as $n => $duo) { |
|
| 67 | - if (current($duo) < $bon_pour_le_service) { |
|
| 68 | - unset($edition[$objet][$id][$n]); |
|
| 69 | - $changed = true; |
|
| 70 | - } |
|
| 71 | - } |
|
| 72 | - } |
|
| 73 | - if (!$edition[$objet][$id]) { |
|
| 74 | - unset($edition[$objet][$id]); |
|
| 75 | - } |
|
| 76 | - } |
|
| 77 | - } |
|
| 78 | - if (!$edition[$objet]) { |
|
| 79 | - unset($edition[$objet]); |
|
| 80 | - } |
|
| 81 | - } |
|
| 54 | + $bon_pour_le_service = time() - 3600; |
|
| 55 | + // parcourir le tableau et virer les vieux |
|
| 56 | + foreach ($edition as $objet => $data) { |
|
| 57 | + if (!is_array($data)) { |
|
| 58 | + unset($edition[$objet]); |
|
| 59 | + } // vieille version |
|
| 60 | + else { |
|
| 61 | + foreach ($data as $id => $tab) { |
|
| 62 | + if (!is_array($tab)) { |
|
| 63 | + unset($edition[$objet][$tab]); |
|
| 64 | + } // vieille version |
|
| 65 | + else { |
|
| 66 | + foreach ($tab as $n => $duo) { |
|
| 67 | + if (current($duo) < $bon_pour_le_service) { |
|
| 68 | + unset($edition[$objet][$id][$n]); |
|
| 69 | + $changed = true; |
|
| 70 | + } |
|
| 71 | + } |
|
| 72 | + } |
|
| 73 | + if (!$edition[$objet][$id]) { |
|
| 74 | + unset($edition[$objet][$id]); |
|
| 75 | + } |
|
| 76 | + } |
|
| 77 | + } |
|
| 78 | + if (!$edition[$objet]) { |
|
| 79 | + unset($edition[$objet]); |
|
| 80 | + } |
|
| 81 | + } |
|
| 82 | 82 | |
| 83 | - if ($changed) { |
|
| 84 | - ecrire_tableau_edition($edition); |
|
| 85 | - } |
|
| 83 | + if ($changed) { |
|
| 84 | + ecrire_tableau_edition($edition); |
|
| 85 | + } |
|
| 86 | 86 | |
| 87 | - return $edition; |
|
| 87 | + return $edition; |
|
| 88 | 88 | } |
| 89 | 89 | |
| 90 | 90 | /** |
@@ -97,7 +97,7 @@ discard block |
||
| 97 | 97 | * `[ type d'objet ][id_objet][id_auteur][nom de l'auteur] = time()` |
| 98 | 98 | **/ |
| 99 | 99 | function ecrire_tableau_edition($edition) { |
| 100 | - ecrire_meta('drapeau_edition', serialize($edition)); |
|
| 100 | + ecrire_meta('drapeau_edition', serialize($edition)); |
|
| 101 | 101 | } |
| 102 | 102 | |
| 103 | 103 | /** |
@@ -117,24 +117,24 @@ discard block |
||
| 117 | 117 | * Type d'objet édité |
| 118 | 118 | */ |
| 119 | 119 | function signale_edition($id, $auteur, $type = 'article') { |
| 120 | - include_spip('base/objets'); |
|
| 121 | - include_spip('inc/filtres'); |
|
| 122 | - if (objet_info($type, 'editable') !== 'oui') { |
|
| 123 | - return; |
|
| 124 | - } |
|
| 120 | + include_spip('base/objets'); |
|
| 121 | + include_spip('inc/filtres'); |
|
| 122 | + if (objet_info($type, 'editable') !== 'oui') { |
|
| 123 | + return; |
|
| 124 | + } |
|
| 125 | 125 | |
| 126 | - $edition = lire_tableau_edition(); |
|
| 127 | - if (isset($auteur['id_auteur']) and $id_a = $auteur['id_auteur']) { |
|
| 128 | - $nom = $auteur['nom']; |
|
| 129 | - } else { |
|
| 130 | - $nom = $id_a = $GLOBALS['ip']; |
|
| 131 | - } |
|
| 126 | + $edition = lire_tableau_edition(); |
|
| 127 | + if (isset($auteur['id_auteur']) and $id_a = $auteur['id_auteur']) { |
|
| 128 | + $nom = $auteur['nom']; |
|
| 129 | + } else { |
|
| 130 | + $nom = $id_a = $GLOBALS['ip']; |
|
| 131 | + } |
|
| 132 | 132 | |
| 133 | - if (!isset($edition[$type][$id]) or !is_array($edition[$type][$id])) { |
|
| 134 | - $edition[$type][$id] = []; |
|
| 135 | - } |
|
| 136 | - $edition[$type][$id][$id_a][$nom] = time(); |
|
| 137 | - ecrire_tableau_edition($edition); |
|
| 133 | + if (!isset($edition[$type][$id]) or !is_array($edition[$type][$id])) { |
|
| 134 | + $edition[$type][$id] = []; |
|
| 135 | + } |
|
| 136 | + $edition[$type][$id][$id_a][$nom] = time(); |
|
| 137 | + ecrire_tableau_edition($edition); |
|
| 138 | 138 | } |
| 139 | 139 | |
| 140 | 140 | /** |
@@ -151,9 +151,9 @@ discard block |
||
| 151 | 151 | */ |
| 152 | 152 | function qui_edite($id, $type = 'article') { |
| 153 | 153 | |
| 154 | - $edition = lire_tableau_edition(); |
|
| 154 | + $edition = lire_tableau_edition(); |
|
| 155 | 155 | |
| 156 | - return empty($edition[$type][$id]) ? [] : $edition[$type][$id]; |
|
| 156 | + return empty($edition[$type][$id]) ? [] : $edition[$type][$id]; |
|
| 157 | 157 | } |
| 158 | 158 | |
| 159 | 159 | /** |
@@ -167,23 +167,23 @@ discard block |
||
| 167 | 167 | * Liste de tableaux `['nom_auteur_modif' => x|y|z, 'date_diff' => n]` |
| 168 | 168 | */ |
| 169 | 169 | function mention_qui_edite($id, $type = 'article'): array { |
| 170 | - $modif = qui_edite($id, $type); |
|
| 171 | - unset($modif[$GLOBALS['visiteur_session']['id_auteur']]); |
|
| 170 | + $modif = qui_edite($id, $type); |
|
| 171 | + unset($modif[$GLOBALS['visiteur_session']['id_auteur']]); |
|
| 172 | 172 | |
| 173 | - if ($modif) { |
|
| 174 | - $quand = 0; |
|
| 175 | - foreach ($modif as $duo) { |
|
| 176 | - $auteurs[] = typo(key($duo)); |
|
| 177 | - $quand = max($quand, current($duo)); |
|
| 178 | - } |
|
| 173 | + if ($modif) { |
|
| 174 | + $quand = 0; |
|
| 175 | + foreach ($modif as $duo) { |
|
| 176 | + $auteurs[] = typo(key($duo)); |
|
| 177 | + $quand = max($quand, current($duo)); |
|
| 178 | + } |
|
| 179 | 179 | |
| 180 | - // format lie a la chaine de langue 'avis_article_modifie' |
|
| 181 | - return [ |
|
| 182 | - 'nom_auteur_modif' => join(' | ', $auteurs), |
|
| 183 | - 'date_diff' => ceil((time() - $quand) / 60) |
|
| 184 | - ]; |
|
| 185 | - } |
|
| 186 | - return []; |
|
| 180 | + // format lie a la chaine de langue 'avis_article_modifie' |
|
| 181 | + return [ |
|
| 182 | + 'nom_auteur_modif' => join(' | ', $auteurs), |
|
| 183 | + 'date_diff' => ceil((time() - $quand) / 60) |
|
| 184 | + ]; |
|
| 185 | + } |
|
| 186 | + return []; |
|
| 187 | 187 | } |
| 188 | 188 | |
| 189 | 189 | /** |
@@ -197,25 +197,25 @@ discard block |
||
| 197 | 197 | * Liste de tableaux `['objet' => x, 'id_objet' => n]` |
| 198 | 198 | */ |
| 199 | 199 | function liste_drapeau_edition($id_auteur) { |
| 200 | - $edition = lire_tableau_edition(); |
|
| 201 | - $objets_ouverts = []; |
|
| 200 | + $edition = lire_tableau_edition(); |
|
| 201 | + $objets_ouverts = []; |
|
| 202 | 202 | |
| 203 | - foreach ($edition as $objet => $data) { |
|
| 204 | - foreach ($data as $id => $auteurs) { |
|
| 205 | - if ( |
|
| 206 | - isset($auteurs[$id_auteur]) |
|
| 207 | - and is_array($auteurs[$id_auteur]) // precaution |
|
| 208 | - and (array_pop($auteurs[$id_auteur]) > time() - 3600) |
|
| 209 | - ) { |
|
| 210 | - $objets_ouverts[] = [ |
|
| 211 | - 'objet' => $objet, |
|
| 212 | - 'id_objet' => $id, |
|
| 213 | - ]; |
|
| 214 | - } |
|
| 215 | - } |
|
| 216 | - } |
|
| 203 | + foreach ($edition as $objet => $data) { |
|
| 204 | + foreach ($data as $id => $auteurs) { |
|
| 205 | + if ( |
|
| 206 | + isset($auteurs[$id_auteur]) |
|
| 207 | + and is_array($auteurs[$id_auteur]) // precaution |
|
| 208 | + and (array_pop($auteurs[$id_auteur]) > time() - 3600) |
|
| 209 | + ) { |
|
| 210 | + $objets_ouverts[] = [ |
|
| 211 | + 'objet' => $objet, |
|
| 212 | + 'id_objet' => $id, |
|
| 213 | + ]; |
|
| 214 | + } |
|
| 215 | + } |
|
| 216 | + } |
|
| 217 | 217 | |
| 218 | - return $objets_ouverts; |
|
| 218 | + return $objets_ouverts; |
|
| 219 | 219 | } |
| 220 | 220 | |
| 221 | 221 | /** |
@@ -228,15 +228,15 @@ discard block |
||
| 228 | 228 | * @return void |
| 229 | 229 | */ |
| 230 | 230 | function debloquer_tous($id_auteur) { |
| 231 | - $edition = lire_tableau_edition(); |
|
| 232 | - foreach ($edition as $objet => $data) { |
|
| 233 | - foreach ($data as $id => $auteurs) { |
|
| 234 | - if (isset($auteurs[$id_auteur])) { |
|
| 235 | - unset($edition[$objet][$id][$id_auteur]); |
|
| 236 | - ecrire_tableau_edition($edition); |
|
| 237 | - } |
|
| 238 | - } |
|
| 239 | - } |
|
| 231 | + $edition = lire_tableau_edition(); |
|
| 232 | + foreach ($edition as $objet => $data) { |
|
| 233 | + foreach ($data as $id => $auteurs) { |
|
| 234 | + if (isset($auteurs[$id_auteur])) { |
|
| 235 | + unset($edition[$objet][$id][$id_auteur]); |
|
| 236 | + ecrire_tableau_edition($edition); |
|
| 237 | + } |
|
| 238 | + } |
|
| 239 | + } |
|
| 240 | 240 | } |
| 241 | 241 | |
| 242 | 242 | /** |
@@ -254,19 +254,19 @@ discard block |
||
| 254 | 254 | * @return void |
| 255 | 255 | */ |
| 256 | 256 | function debloquer_edition($id_auteur, $id_objet, $type = 'article') { |
| 257 | - $edition = lire_tableau_edition(); |
|
| 257 | + $edition = lire_tableau_edition(); |
|
| 258 | 258 | |
| 259 | - foreach ($edition as $objet => $data) { |
|
| 260 | - if ($objet == $type) { |
|
| 261 | - foreach ($data as $id => $auteurs) { |
|
| 262 | - if ( |
|
| 263 | - $id == $id_objet |
|
| 264 | - and isset($auteurs[$id_auteur]) |
|
| 265 | - ) { |
|
| 266 | - unset($edition[$objet][$id][$id_auteur]); |
|
| 267 | - ecrire_tableau_edition($edition); |
|
| 268 | - } |
|
| 269 | - } |
|
| 270 | - } |
|
| 271 | - } |
|
| 259 | + foreach ($edition as $objet => $data) { |
|
| 260 | + if ($objet == $type) { |
|
| 261 | + foreach ($data as $id => $auteurs) { |
|
| 262 | + if ( |
|
| 263 | + $id == $id_objet |
|
| 264 | + and isset($auteurs[$id_auteur]) |
|
| 265 | + ) { |
|
| 266 | + unset($edition[$objet][$id][$id_auteur]); |
|
| 267 | + ecrire_tableau_edition($edition); |
|
| 268 | + } |
|
| 269 | + } |
|
| 270 | + } |
|
| 271 | + } |
|
| 272 | 272 | } |
@@ -9,384 +9,384 @@ |
||
| 9 | 9 | |
| 10 | 10 | $GLOBALS['CHARSET']['translit'] = [ |
| 11 | 11 | // latin [fausse plage] |
| 12 | - 128 => 'EUR', |
|
| 13 | - 131 => 'f', |
|
| 14 | - 140 => 'OE', |
|
| 15 | - 147 => '\'\'', |
|
| 16 | - 148 => '\'\'', |
|
| 17 | - 153 => '(TM)', |
|
| 18 | - 156 => 'oe', |
|
| 19 | - 159 => 'Y', |
|
| 12 | + 128 => 'EUR', |
|
| 13 | + 131 => 'f', |
|
| 14 | + 140 => 'OE', |
|
| 15 | + 147 => '\'\'', |
|
| 16 | + 148 => '\'\'', |
|
| 17 | + 153 => '(TM)', |
|
| 18 | + 156 => 'oe', |
|
| 19 | + 159 => 'Y', |
|
| 20 | 20 | |
| 21 | 21 | // latin [legal] |
| 22 | - 160 => ' ', |
|
| 23 | - 161 => '!', |
|
| 24 | - 162 => 'c', |
|
| 25 | - 163 => 'L', |
|
| 26 | - 164 => 'O', |
|
| 27 | - 165 => 'yen', |
|
| 28 | - 166 => '|', |
|
| 29 | - 167 => 'p', |
|
| 30 | - 169 => '(c)', |
|
| 31 | - 171 => '<<', |
|
| 32 | - 172 => '-', |
|
| 33 | - 173 => '-', |
|
| 34 | - 174 => '(R)', |
|
| 35 | - 176 => 'o', |
|
| 36 | - 177 => '+-', |
|
| 37 | - 181 => 'mu', |
|
| 38 | - 182 => 'p', |
|
| 39 | - 183 => '.', |
|
| 40 | - 186 => 'o ', |
|
| 41 | - 187 => '>>', |
|
| 42 | - 191 => '?', |
|
| 43 | - 192 => 'A', |
|
| 44 | - 193 => 'A', |
|
| 45 | - 194 => 'A', |
|
| 46 | - 195 => 'A', |
|
| 47 | - 196 => 'A', |
|
| 48 | - 197 => 'A', |
|
| 49 | - 198 => 'AE', |
|
| 50 | - 199 => 'C', |
|
| 51 | - 200 => 'E', |
|
| 52 | - 201 => 'E', |
|
| 53 | - 202 => 'E', |
|
| 54 | - 203 => 'E', |
|
| 55 | - 204 => 'I', |
|
| 56 | - 205 => 'I', |
|
| 57 | - 206 => 'I', |
|
| 58 | - 207 => 'I', |
|
| 59 | - 209 => 'N', |
|
| 60 | - 210 => 'O', |
|
| 61 | - 211 => 'O', |
|
| 62 | - 212 => 'O', |
|
| 63 | - 213 => 'O', |
|
| 64 | - 214 => 'O', |
|
| 65 | - 216 => 'O', |
|
| 66 | - 217 => 'U', |
|
| 67 | - 218 => 'U', |
|
| 68 | - 219 => 'U', |
|
| 69 | - 220 => 'U', |
|
| 70 | - 223 => 'ss', |
|
| 71 | - 224 => 'a', |
|
| 72 | - 225 => 'a', |
|
| 73 | - 226 => 'a', |
|
| 74 | - 227 => 'a', |
|
| 75 | - 228 => 'a', |
|
| 76 | - 229 => 'a', |
|
| 77 | - 230 => 'ae', |
|
| 78 | - 231 => 'c', |
|
| 79 | - 232 => 'e', |
|
| 80 | - 233 => 'e', |
|
| 81 | - 234 => 'e', |
|
| 82 | - 235 => 'e', |
|
| 83 | - 236 => 'i', |
|
| 84 | - 237 => 'i', |
|
| 85 | - 238 => 'i', |
|
| 86 | - 239 => 'i', |
|
| 87 | - 241 => 'n', |
|
| 88 | - 242 => 'o', |
|
| 89 | - 243 => 'o', |
|
| 90 | - 244 => 'o', |
|
| 91 | - 245 => 'o', |
|
| 92 | - 246 => 'o', |
|
| 93 | - 248 => 'o', |
|
| 94 | - 249 => 'u', |
|
| 95 | - 250 => 'u', |
|
| 96 | - 251 => 'u', |
|
| 97 | - 252 => 'u', |
|
| 98 | - 255 => 'y', |
|
| 22 | + 160 => ' ', |
|
| 23 | + 161 => '!', |
|
| 24 | + 162 => 'c', |
|
| 25 | + 163 => 'L', |
|
| 26 | + 164 => 'O', |
|
| 27 | + 165 => 'yen', |
|
| 28 | + 166 => '|', |
|
| 29 | + 167 => 'p', |
|
| 30 | + 169 => '(c)', |
|
| 31 | + 171 => '<<', |
|
| 32 | + 172 => '-', |
|
| 33 | + 173 => '-', |
|
| 34 | + 174 => '(R)', |
|
| 35 | + 176 => 'o', |
|
| 36 | + 177 => '+-', |
|
| 37 | + 181 => 'mu', |
|
| 38 | + 182 => 'p', |
|
| 39 | + 183 => '.', |
|
| 40 | + 186 => 'o ', |
|
| 41 | + 187 => '>>', |
|
| 42 | + 191 => '?', |
|
| 43 | + 192 => 'A', |
|
| 44 | + 193 => 'A', |
|
| 45 | + 194 => 'A', |
|
| 46 | + 195 => 'A', |
|
| 47 | + 196 => 'A', |
|
| 48 | + 197 => 'A', |
|
| 49 | + 198 => 'AE', |
|
| 50 | + 199 => 'C', |
|
| 51 | + 200 => 'E', |
|
| 52 | + 201 => 'E', |
|
| 53 | + 202 => 'E', |
|
| 54 | + 203 => 'E', |
|
| 55 | + 204 => 'I', |
|
| 56 | + 205 => 'I', |
|
| 57 | + 206 => 'I', |
|
| 58 | + 207 => 'I', |
|
| 59 | + 209 => 'N', |
|
| 60 | + 210 => 'O', |
|
| 61 | + 211 => 'O', |
|
| 62 | + 212 => 'O', |
|
| 63 | + 213 => 'O', |
|
| 64 | + 214 => 'O', |
|
| 65 | + 216 => 'O', |
|
| 66 | + 217 => 'U', |
|
| 67 | + 218 => 'U', |
|
| 68 | + 219 => 'U', |
|
| 69 | + 220 => 'U', |
|
| 70 | + 223 => 'ss', |
|
| 71 | + 224 => 'a', |
|
| 72 | + 225 => 'a', |
|
| 73 | + 226 => 'a', |
|
| 74 | + 227 => 'a', |
|
| 75 | + 228 => 'a', |
|
| 76 | + 229 => 'a', |
|
| 77 | + 230 => 'ae', |
|
| 78 | + 231 => 'c', |
|
| 79 | + 232 => 'e', |
|
| 80 | + 233 => 'e', |
|
| 81 | + 234 => 'e', |
|
| 82 | + 235 => 'e', |
|
| 83 | + 236 => 'i', |
|
| 84 | + 237 => 'i', |
|
| 85 | + 238 => 'i', |
|
| 86 | + 239 => 'i', |
|
| 87 | + 241 => 'n', |
|
| 88 | + 242 => 'o', |
|
| 89 | + 243 => 'o', |
|
| 90 | + 244 => 'o', |
|
| 91 | + 245 => 'o', |
|
| 92 | + 246 => 'o', |
|
| 93 | + 248 => 'o', |
|
| 94 | + 249 => 'u', |
|
| 95 | + 250 => 'u', |
|
| 96 | + 251 => 'u', |
|
| 97 | + 252 => 'u', |
|
| 98 | + 255 => 'y', |
|
| 99 | 99 | |
| 100 | 100 | // turc |
| 101 | - 286 => 'G', |
|
| 102 | - 287 => 'g', |
|
| 103 | - 304 => 'I', |
|
| 104 | - 305 => 'i', |
|
| 101 | + 286 => 'G', |
|
| 102 | + 287 => 'g', |
|
| 103 | + 304 => 'I', |
|
| 104 | + 305 => 'i', |
|
| 105 | 105 | |
| 106 | 106 | // esperanto |
| 107 | - 264 => 'Cx', |
|
| 108 | - 265 => 'cx', |
|
| 109 | - 284 => 'Gx', |
|
| 110 | - 285 => 'gx', |
|
| 111 | - 292 => 'Hx', |
|
| 112 | - 293 => 'hx', |
|
| 113 | - 308 => 'Jx', |
|
| 114 | - 309 => 'jx', |
|
| 115 | - 348 => 'Sx', |
|
| 116 | - 349 => 'sx', |
|
| 117 | - 364 => 'Ux', |
|
| 118 | - 365 => 'ux', |
|
| 107 | + 264 => 'Cx', |
|
| 108 | + 265 => 'cx', |
|
| 109 | + 284 => 'Gx', |
|
| 110 | + 285 => 'gx', |
|
| 111 | + 292 => 'Hx', |
|
| 112 | + 293 => 'hx', |
|
| 113 | + 308 => 'Jx', |
|
| 114 | + 309 => 'jx', |
|
| 115 | + 348 => 'Sx', |
|
| 116 | + 349 => 'sx', |
|
| 117 | + 364 => 'Ux', |
|
| 118 | + 365 => 'ux', |
|
| 119 | 119 | |
| 120 | 120 | |
| 121 | 121 | // latin2 [Czech] |
| 122 | - 283 => 'e', |
|
| 123 | - 353 => 's', |
|
| 124 | - 269 => 'c', |
|
| 125 | - 345 => 'r', |
|
| 126 | - 382 => 'z', |
|
| 127 | - 367 => 'u', |
|
| 128 | - 328 => 'n', |
|
| 129 | - 357 => 't', |
|
| 130 | - 271 => 'd', |
|
| 131 | - 449 => 'o', |
|
| 132 | - 282 => 'E', |
|
| 133 | - 352 => 'S', |
|
| 134 | - 268 => 'C', |
|
| 135 | - 344 => 'R', |
|
| 136 | - 381 => 'Z', |
|
| 137 | - 366 => 'U', |
|
| 138 | - 327 => 'N', |
|
| 139 | - 356 => 'T', |
|
| 140 | - 270 => 'D', |
|
| 141 | - 467 => 'O', |
|
| 122 | + 283 => 'e', |
|
| 123 | + 353 => 's', |
|
| 124 | + 269 => 'c', |
|
| 125 | + 345 => 'r', |
|
| 126 | + 382 => 'z', |
|
| 127 | + 367 => 'u', |
|
| 128 | + 328 => 'n', |
|
| 129 | + 357 => 't', |
|
| 130 | + 271 => 'd', |
|
| 131 | + 449 => 'o', |
|
| 132 | + 282 => 'E', |
|
| 133 | + 352 => 'S', |
|
| 134 | + 268 => 'C', |
|
| 135 | + 344 => 'R', |
|
| 136 | + 381 => 'Z', |
|
| 137 | + 366 => 'U', |
|
| 138 | + 327 => 'N', |
|
| 139 | + 356 => 'T', |
|
| 140 | + 270 => 'D', |
|
| 141 | + 467 => 'O', |
|
| 142 | 142 | |
| 143 | 143 | // francais |
| 144 | - 338 => 'OE', |
|
| 145 | - 339 => 'oe', |
|
| 146 | - 376 => 'Y', |
|
| 147 | - 402 => 'f', |
|
| 144 | + 338 => 'OE', |
|
| 145 | + 339 => 'oe', |
|
| 146 | + 376 => 'Y', |
|
| 147 | + 402 => 'f', |
|
| 148 | 148 | |
| 149 | 149 | //polskie |
| 150 | - 260 => 'A', |
|
| 151 | - 261 => 'a', |
|
| 152 | - 262 => 'C', |
|
| 153 | - 263 => 'c', |
|
| 154 | - 280 => 'E', |
|
| 155 | - 281 => 'e', |
|
| 156 | - 321 => 'L', |
|
| 157 | - 322 => 'l', |
|
| 158 | - 323 => 'N', |
|
| 159 | - 324 => 'n', |
|
| 160 | - 346 => 'S', |
|
| 161 | - 347 => 's', |
|
| 162 | - 377 => 'Z', |
|
| 163 | - 378 => 'z', |
|
| 164 | - 379 => 'Z', |
|
| 165 | - 380 => 'z', |
|
| 150 | + 260 => 'A', |
|
| 151 | + 261 => 'a', |
|
| 152 | + 262 => 'C', |
|
| 153 | + 263 => 'c', |
|
| 154 | + 280 => 'E', |
|
| 155 | + 281 => 'e', |
|
| 156 | + 321 => 'L', |
|
| 157 | + 322 => 'l', |
|
| 158 | + 323 => 'N', |
|
| 159 | + 324 => 'n', |
|
| 160 | + 346 => 'S', |
|
| 161 | + 347 => 's', |
|
| 162 | + 377 => 'Z', |
|
| 163 | + 378 => 'z', |
|
| 164 | + 379 => 'Z', |
|
| 165 | + 380 => 'z', |
|
| 166 | 166 | |
| 167 | 167 | //roumain |
| 168 | - 258 => 'A', |
|
| 169 | - 259 => 'a', |
|
| 170 | - 354 => 'T', |
|
| 171 | - 355 => 't', |
|
| 168 | + 258 => 'A', |
|
| 169 | + 259 => 'a', |
|
| 170 | + 354 => 'T', |
|
| 171 | + 355 => 't', |
|
| 172 | 172 | |
| 173 | 173 | //turc & roumain |
| 174 | - 350 => 'S', |
|
| 175 | - 351 => 's', |
|
| 174 | + 350 => 'S', |
|
| 175 | + 351 => 's', |
|
| 176 | 176 | |
| 177 | 177 | // cyrillique |
| 178 | - 1026 => 'D%', |
|
| 179 | - 1027 => 'G%', |
|
| 180 | - 8218 => '\'', |
|
| 181 | - 1107 => 'g%', |
|
| 182 | - 8222 => '"', |
|
| 183 | - 8230 => '...', |
|
| 184 | - 8224 => '/-', |
|
| 185 | - 8225 => '/=', |
|
| 186 | - 8364 => 'EUR', |
|
| 187 | - 8240 => '0/00', |
|
| 188 | - 1033 => 'LJ', |
|
| 189 | - 8249 => '<', |
|
| 190 | - 1034 => 'NJ', |
|
| 191 | - 1036 => 'KJ', |
|
| 192 | - 1035 => 'Ts', |
|
| 193 | - 1039 => 'DZ', |
|
| 194 | - 1106 => 'd%', |
|
| 195 | - 8216 => '`', |
|
| 196 | - 8217 => '\'', |
|
| 197 | - 8220 => '"', |
|
| 198 | - 8221 => '"', |
|
| 199 | - 8226 => ' o ', |
|
| 200 | - 8211 => '-', |
|
| 201 | - 8212 => '~', |
|
| 202 | - 8482 => '(TM)', |
|
| 203 | - 1113 => 'lj', |
|
| 204 | - 8250 => '>', |
|
| 205 | - 1114 => 'nj', |
|
| 206 | - 1116 => 'kj', |
|
| 207 | - 1115 => 'ts', |
|
| 208 | - 1119 => 'dz', |
|
| 209 | - 1038 => 'V%', |
|
| 210 | - 1118 => 'v%', |
|
| 211 | - 1032 => 'J%', |
|
| 212 | - 1168 => 'G3', |
|
| 213 | - 1025 => 'IO', |
|
| 214 | - 1028 => 'IE', |
|
| 215 | - 1031 => 'YI', |
|
| 216 | - 1030 => 'II', |
|
| 217 | - 1110 => 'ii', |
|
| 218 | - 1169 => 'g3', |
|
| 219 | - 1105 => 'io', |
|
| 220 | - 8470 => 'No.', |
|
| 221 | - 1108 => 'ie', |
|
| 222 | - 1112 => 'j%', |
|
| 223 | - 1029 => 'DS', |
|
| 224 | - 1109 => 'ds', |
|
| 225 | - 1111 => 'yi', |
|
| 226 | - 1040 => 'A', |
|
| 227 | - 1041 => 'B', |
|
| 228 | - 1042 => 'V', |
|
| 229 | - 1043 => 'G', |
|
| 230 | - 1044 => 'D', |
|
| 231 | - 1045 => 'E', |
|
| 232 | - 1046 => 'ZH', |
|
| 233 | - 1047 => 'Z', |
|
| 234 | - 1048 => 'I', |
|
| 235 | - 1049 => 'J', |
|
| 236 | - 1050 => 'K', |
|
| 237 | - 1051 => 'L', |
|
| 238 | - 1052 => 'M', |
|
| 239 | - 1053 => 'N', |
|
| 240 | - 1054 => 'O', |
|
| 241 | - 1055 => 'P', |
|
| 242 | - 1056 => 'R', |
|
| 243 | - 1057 => 'S', |
|
| 244 | - 1058 => 'T', |
|
| 245 | - 1059 => 'U', |
|
| 246 | - 1060 => 'F', |
|
| 247 | - 1061 => 'H', |
|
| 248 | - 1062 => 'C', |
|
| 249 | - 1063 => 'CH', |
|
| 250 | - 1064 => 'SH', |
|
| 251 | - 1065 => 'SCH', |
|
| 252 | - 1066 => '"', |
|
| 253 | - 1067 => 'Y', |
|
| 254 | - 1068 => '\'', |
|
| 255 | - 1069 => '`E', |
|
| 256 | - 1070 => 'YU', |
|
| 257 | - 1071 => 'YA', |
|
| 258 | - 1072 => 'a', |
|
| 259 | - 1073 => 'b', |
|
| 260 | - 1074 => 'v', |
|
| 261 | - 1075 => 'g', |
|
| 262 | - 1076 => 'd', |
|
| 263 | - 1077 => 'e', |
|
| 264 | - 1078 => 'zh', |
|
| 265 | - 1079 => 'z', |
|
| 266 | - 1080 => 'i', |
|
| 267 | - 1081 => 'j', |
|
| 268 | - 1082 => 'k', |
|
| 269 | - 1083 => 'l', |
|
| 270 | - 1084 => 'm', |
|
| 271 | - 1085 => 'n', |
|
| 272 | - 1086 => 'o', |
|
| 273 | - 1087 => 'p', |
|
| 274 | - 1088 => 'r', |
|
| 275 | - 1089 => 's', |
|
| 276 | - 1090 => 't', |
|
| 277 | - 1091 => 'u', |
|
| 278 | - 1092 => 'f', |
|
| 279 | - 1093 => 'h', |
|
| 280 | - 1094 => 'c', |
|
| 281 | - 1095 => 'ch', |
|
| 282 | - 1096 => 'sh', |
|
| 283 | - 1097 => 'sch', |
|
| 284 | - 1098 => '"', |
|
| 285 | - 1099 => 'y', |
|
| 286 | - 1100 => '\'', |
|
| 287 | - 1101 => '`e', |
|
| 288 | - 1102 => 'yu', |
|
| 289 | - 1103 => 'ya', |
|
| 178 | + 1026 => 'D%', |
|
| 179 | + 1027 => 'G%', |
|
| 180 | + 8218 => '\'', |
|
| 181 | + 1107 => 'g%', |
|
| 182 | + 8222 => '"', |
|
| 183 | + 8230 => '...', |
|
| 184 | + 8224 => '/-', |
|
| 185 | + 8225 => '/=', |
|
| 186 | + 8364 => 'EUR', |
|
| 187 | + 8240 => '0/00', |
|
| 188 | + 1033 => 'LJ', |
|
| 189 | + 8249 => '<', |
|
| 190 | + 1034 => 'NJ', |
|
| 191 | + 1036 => 'KJ', |
|
| 192 | + 1035 => 'Ts', |
|
| 193 | + 1039 => 'DZ', |
|
| 194 | + 1106 => 'd%', |
|
| 195 | + 8216 => '`', |
|
| 196 | + 8217 => '\'', |
|
| 197 | + 8220 => '"', |
|
| 198 | + 8221 => '"', |
|
| 199 | + 8226 => ' o ', |
|
| 200 | + 8211 => '-', |
|
| 201 | + 8212 => '~', |
|
| 202 | + 8482 => '(TM)', |
|
| 203 | + 1113 => 'lj', |
|
| 204 | + 8250 => '>', |
|
| 205 | + 1114 => 'nj', |
|
| 206 | + 1116 => 'kj', |
|
| 207 | + 1115 => 'ts', |
|
| 208 | + 1119 => 'dz', |
|
| 209 | + 1038 => 'V%', |
|
| 210 | + 1118 => 'v%', |
|
| 211 | + 1032 => 'J%', |
|
| 212 | + 1168 => 'G3', |
|
| 213 | + 1025 => 'IO', |
|
| 214 | + 1028 => 'IE', |
|
| 215 | + 1031 => 'YI', |
|
| 216 | + 1030 => 'II', |
|
| 217 | + 1110 => 'ii', |
|
| 218 | + 1169 => 'g3', |
|
| 219 | + 1105 => 'io', |
|
| 220 | + 8470 => 'No.', |
|
| 221 | + 1108 => 'ie', |
|
| 222 | + 1112 => 'j%', |
|
| 223 | + 1029 => 'DS', |
|
| 224 | + 1109 => 'ds', |
|
| 225 | + 1111 => 'yi', |
|
| 226 | + 1040 => 'A', |
|
| 227 | + 1041 => 'B', |
|
| 228 | + 1042 => 'V', |
|
| 229 | + 1043 => 'G', |
|
| 230 | + 1044 => 'D', |
|
| 231 | + 1045 => 'E', |
|
| 232 | + 1046 => 'ZH', |
|
| 233 | + 1047 => 'Z', |
|
| 234 | + 1048 => 'I', |
|
| 235 | + 1049 => 'J', |
|
| 236 | + 1050 => 'K', |
|
| 237 | + 1051 => 'L', |
|
| 238 | + 1052 => 'M', |
|
| 239 | + 1053 => 'N', |
|
| 240 | + 1054 => 'O', |
|
| 241 | + 1055 => 'P', |
|
| 242 | + 1056 => 'R', |
|
| 243 | + 1057 => 'S', |
|
| 244 | + 1058 => 'T', |
|
| 245 | + 1059 => 'U', |
|
| 246 | + 1060 => 'F', |
|
| 247 | + 1061 => 'H', |
|
| 248 | + 1062 => 'C', |
|
| 249 | + 1063 => 'CH', |
|
| 250 | + 1064 => 'SH', |
|
| 251 | + 1065 => 'SCH', |
|
| 252 | + 1066 => '"', |
|
| 253 | + 1067 => 'Y', |
|
| 254 | + 1068 => '\'', |
|
| 255 | + 1069 => '`E', |
|
| 256 | + 1070 => 'YU', |
|
| 257 | + 1071 => 'YA', |
|
| 258 | + 1072 => 'a', |
|
| 259 | + 1073 => 'b', |
|
| 260 | + 1074 => 'v', |
|
| 261 | + 1075 => 'g', |
|
| 262 | + 1076 => 'd', |
|
| 263 | + 1077 => 'e', |
|
| 264 | + 1078 => 'zh', |
|
| 265 | + 1079 => 'z', |
|
| 266 | + 1080 => 'i', |
|
| 267 | + 1081 => 'j', |
|
| 268 | + 1082 => 'k', |
|
| 269 | + 1083 => 'l', |
|
| 270 | + 1084 => 'm', |
|
| 271 | + 1085 => 'n', |
|
| 272 | + 1086 => 'o', |
|
| 273 | + 1087 => 'p', |
|
| 274 | + 1088 => 'r', |
|
| 275 | + 1089 => 's', |
|
| 276 | + 1090 => 't', |
|
| 277 | + 1091 => 'u', |
|
| 278 | + 1092 => 'f', |
|
| 279 | + 1093 => 'h', |
|
| 280 | + 1094 => 'c', |
|
| 281 | + 1095 => 'ch', |
|
| 282 | + 1096 => 'sh', |
|
| 283 | + 1097 => 'sch', |
|
| 284 | + 1098 => '"', |
|
| 285 | + 1099 => 'y', |
|
| 286 | + 1100 => '\'', |
|
| 287 | + 1101 => '`e', |
|
| 288 | + 1102 => 'yu', |
|
| 289 | + 1103 => 'ya', |
|
| 290 | 290 | |
| 291 | 291 | // vietnamien en translitteration de base |
| 292 | - 7843 => 'a', |
|
| 293 | - 7841 => 'a', |
|
| 294 | - 7845 => 'a', |
|
| 295 | - 7847 => 'a', |
|
| 296 | - 7849 => 'a', |
|
| 297 | - 7851 => 'a', |
|
| 298 | - 7853 => 'a', |
|
| 299 | - 7855 => 'a', |
|
| 300 | - 7857 => 'a', |
|
| 301 | - 7859 => 'a', |
|
| 302 | - 7861 => 'a', |
|
| 303 | - 7863 => 'a', |
|
| 304 | - 7842 => 'A', |
|
| 305 | - 7840 => 'A', |
|
| 306 | - 7844 => 'A', |
|
| 307 | - 7846 => 'A', |
|
| 308 | - 7848 => 'A', |
|
| 309 | - 7850 => 'A', |
|
| 310 | - 7852 => 'A', |
|
| 311 | - 7854 => 'A', |
|
| 312 | - 7856 => 'A', |
|
| 313 | - 7858 => 'A', |
|
| 314 | - 7860 => 'A', |
|
| 315 | - 7862 => 'A', |
|
| 316 | - 7867 => 'e', |
|
| 317 | - 7869 => 'e', |
|
| 318 | - 7865 => 'e', |
|
| 319 | - 7871 => 'e', |
|
| 320 | - 7873 => 'e', |
|
| 321 | - 7875 => 'e', |
|
| 322 | - 7877 => 'e', |
|
| 323 | - 7879 => 'e', |
|
| 324 | - 7866 => 'E', |
|
| 325 | - 7868 => 'E', |
|
| 326 | - 7864 => 'E', |
|
| 327 | - 7870 => 'E', |
|
| 328 | - 7872 => 'E', |
|
| 329 | - 7874 => 'E', |
|
| 330 | - 7876 => 'E', |
|
| 331 | - 7878 => 'E', |
|
| 332 | - 7881 => 'i', |
|
| 333 | - 7883 => 'i', |
|
| 334 | - 7880 => 'I', |
|
| 335 | - 7882 => 'I', |
|
| 336 | - 7887 => 'o', |
|
| 337 | - 7885 => 'o', |
|
| 338 | - 7889 => 'o', |
|
| 339 | - 7891 => 'o', |
|
| 340 | - 7893 => 'o', |
|
| 341 | - 7895 => 'o', |
|
| 342 | - 7897 => 'o', |
|
| 343 | - 417 => 'o', |
|
| 344 | - 7899 => 'o', |
|
| 345 | - 7901 => 'o', |
|
| 346 | - 7903 => 'o', |
|
| 347 | - 7905 => 'o', |
|
| 348 | - 7907 => 'o', |
|
| 349 | - 7886 => 'O', |
|
| 350 | - 7884 => 'O', |
|
| 351 | - 7888 => 'O', |
|
| 352 | - 7890 => 'O', |
|
| 353 | - 7892 => 'O', |
|
| 354 | - 7894 => 'O', |
|
| 355 | - 7896 => 'O', |
|
| 356 | - 416 => 'O', |
|
| 357 | - 7898 => 'O', |
|
| 358 | - 7900 => 'O', |
|
| 359 | - 7902 => 'O', |
|
| 360 | - 7904 => 'O', |
|
| 361 | - 7906 => 'O', |
|
| 362 | - 7911 => 'u', |
|
| 363 | - 361 => 'u', |
|
| 364 | - 7909 => 'u', |
|
| 365 | - 432 => 'u', |
|
| 366 | - 7913 => 'u', |
|
| 367 | - 7915 => 'u', |
|
| 368 | - 7917 => 'u', |
|
| 369 | - 7919 => 'u', |
|
| 370 | - 7921 => 'u', |
|
| 371 | - 7910 => 'U', |
|
| 372 | - 360 => 'U', |
|
| 373 | - 7908 => 'U', |
|
| 374 | - 431 => 'U', |
|
| 375 | - 7912 => 'U', |
|
| 376 | - 7914 => 'U', |
|
| 377 | - 7916 => 'U', |
|
| 378 | - 7918 => 'U', |
|
| 379 | - 7920 => 'U', |
|
| 380 | - 253 => 'y', |
|
| 381 | - 7923 => 'y', |
|
| 382 | - 7927 => 'y', |
|
| 383 | - 7929 => 'y', |
|
| 384 | - 7925 => 'y', |
|
| 385 | - 221 => 'Y', |
|
| 386 | - 7922 => 'Y', |
|
| 387 | - 7926 => 'Y', |
|
| 388 | - 7928 => 'Y', |
|
| 389 | - 7924 => 'Y', |
|
| 390 | - 273 => 'd' |
|
| 292 | + 7843 => 'a', |
|
| 293 | + 7841 => 'a', |
|
| 294 | + 7845 => 'a', |
|
| 295 | + 7847 => 'a', |
|
| 296 | + 7849 => 'a', |
|
| 297 | + 7851 => 'a', |
|
| 298 | + 7853 => 'a', |
|
| 299 | + 7855 => 'a', |
|
| 300 | + 7857 => 'a', |
|
| 301 | + 7859 => 'a', |
|
| 302 | + 7861 => 'a', |
|
| 303 | + 7863 => 'a', |
|
| 304 | + 7842 => 'A', |
|
| 305 | + 7840 => 'A', |
|
| 306 | + 7844 => 'A', |
|
| 307 | + 7846 => 'A', |
|
| 308 | + 7848 => 'A', |
|
| 309 | + 7850 => 'A', |
|
| 310 | + 7852 => 'A', |
|
| 311 | + 7854 => 'A', |
|
| 312 | + 7856 => 'A', |
|
| 313 | + 7858 => 'A', |
|
| 314 | + 7860 => 'A', |
|
| 315 | + 7862 => 'A', |
|
| 316 | + 7867 => 'e', |
|
| 317 | + 7869 => 'e', |
|
| 318 | + 7865 => 'e', |
|
| 319 | + 7871 => 'e', |
|
| 320 | + 7873 => 'e', |
|
| 321 | + 7875 => 'e', |
|
| 322 | + 7877 => 'e', |
|
| 323 | + 7879 => 'e', |
|
| 324 | + 7866 => 'E', |
|
| 325 | + 7868 => 'E', |
|
| 326 | + 7864 => 'E', |
|
| 327 | + 7870 => 'E', |
|
| 328 | + 7872 => 'E', |
|
| 329 | + 7874 => 'E', |
|
| 330 | + 7876 => 'E', |
|
| 331 | + 7878 => 'E', |
|
| 332 | + 7881 => 'i', |
|
| 333 | + 7883 => 'i', |
|
| 334 | + 7880 => 'I', |
|
| 335 | + 7882 => 'I', |
|
| 336 | + 7887 => 'o', |
|
| 337 | + 7885 => 'o', |
|
| 338 | + 7889 => 'o', |
|
| 339 | + 7891 => 'o', |
|
| 340 | + 7893 => 'o', |
|
| 341 | + 7895 => 'o', |
|
| 342 | + 7897 => 'o', |
|
| 343 | + 417 => 'o', |
|
| 344 | + 7899 => 'o', |
|
| 345 | + 7901 => 'o', |
|
| 346 | + 7903 => 'o', |
|
| 347 | + 7905 => 'o', |
|
| 348 | + 7907 => 'o', |
|
| 349 | + 7886 => 'O', |
|
| 350 | + 7884 => 'O', |
|
| 351 | + 7888 => 'O', |
|
| 352 | + 7890 => 'O', |
|
| 353 | + 7892 => 'O', |
|
| 354 | + 7894 => 'O', |
|
| 355 | + 7896 => 'O', |
|
| 356 | + 416 => 'O', |
|
| 357 | + 7898 => 'O', |
|
| 358 | + 7900 => 'O', |
|
| 359 | + 7902 => 'O', |
|
| 360 | + 7904 => 'O', |
|
| 361 | + 7906 => 'O', |
|
| 362 | + 7911 => 'u', |
|
| 363 | + 361 => 'u', |
|
| 364 | + 7909 => 'u', |
|
| 365 | + 432 => 'u', |
|
| 366 | + 7913 => 'u', |
|
| 367 | + 7915 => 'u', |
|
| 368 | + 7917 => 'u', |
|
| 369 | + 7919 => 'u', |
|
| 370 | + 7921 => 'u', |
|
| 371 | + 7910 => 'U', |
|
| 372 | + 360 => 'U', |
|
| 373 | + 7908 => 'U', |
|
| 374 | + 431 => 'U', |
|
| 375 | + 7912 => 'U', |
|
| 376 | + 7914 => 'U', |
|
| 377 | + 7916 => 'U', |
|
| 378 | + 7918 => 'U', |
|
| 379 | + 7920 => 'U', |
|
| 380 | + 253 => 'y', |
|
| 381 | + 7923 => 'y', |
|
| 382 | + 7927 => 'y', |
|
| 383 | + 7929 => 'y', |
|
| 384 | + 7925 => 'y', |
|
| 385 | + 221 => 'Y', |
|
| 386 | + 7922 => 'Y', |
|
| 387 | + 7926 => 'Y', |
|
| 388 | + 7928 => 'Y', |
|
| 389 | + 7924 => 'Y', |
|
| 390 | + 273 => 'd' |
|
| 391 | 391 | |
| 392 | 392 | ]; |
@@ -4,582 +4,582 @@ discard block |
||
| 4 | 4 | // ** ne pas modifier le fichier ** |
| 5 | 5 | |
| 6 | 6 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 7 | - return; |
|
| 7 | + return; |
|
| 8 | 8 | } |
| 9 | 9 | |
| 10 | 10 | $GLOBALS[$GLOBALS['idx_lang']] = array( |
| 11 | 11 | |
| 12 | - // A |
|
| 13 | - 'access_interface_graphique' => 'Voltar para a interface gráfica completa', |
|
| 14 | - 'access_mode_texte' => 'Exibir a interface textual simplificada', |
|
| 15 | - 'admin_debug' => 'depurar', |
|
| 16 | - 'admin_modifier_article' => 'Editar esta matéria', |
|
| 17 | - 'admin_modifier_auteur' => 'Editar este autor', |
|
| 18 | - 'admin_modifier_breve' => 'Editar esta nota', |
|
| 19 | - 'admin_modifier_mot' => 'Editar esta palavra-chave', |
|
| 20 | - 'admin_modifier_rubrique' => 'Editar esta seção', |
|
| 21 | - 'admin_recalculer' => 'Atualizar esta página', |
|
| 22 | - 'afficher_calendrier' => 'Exibir o calendário', |
|
| 23 | - 'afficher_trad' => 'exibir as traduções', |
|
| 24 | - 'alerte_maj_impossible' => '<b>Atenção!</b> A atualização da base de dados SQL para a versão @version@ não é possível, provavelmente por problema de direitos de edição na base de dados. Por favor, contate o seu provedor de hospedagem.', |
|
| 25 | - 'alerte_modif_info_concourante' => 'ATENÇÃO: Esta informação foi alterada por outra pessoa. O valor atual é:', |
|
| 26 | - 'analyse_xml' => 'Analisar XML', |
|
| 27 | - 'annuler' => 'Cancelar', |
|
| 28 | - 'antispam_champ_vide' => 'Por favor, deixe este campo vazio:', |
|
| 29 | - 'articles_recents' => 'Matérias mais recentes', |
|
| 30 | - 'attention_champ_mini_nb_caractères' => 'Atenção! Mínimo de @nb@ caracteres', |
|
| 31 | - 'avis_1_erreur_saisie' => 'Há um erro nos dados informados. Por favor, verifique.', |
|
| 32 | - 'avis_archive_incorrect' => 'a cópia de segurança não é um arquivo do SPIP', |
|
| 33 | - 'avis_archive_invalide' => 'a cópia de segurança não é válida', |
|
| 34 | - 'avis_attention' => 'ATENÇÃO!', |
|
| 35 | - 'avis_champ_incorrect_type_objet' => 'Nome de campo @name@ incorreto para objeto do tipo @type@', |
|
| 36 | - 'avis_colonne_inexistante' => 'A coluna @col@ não existe', |
|
| 37 | - 'avis_erreur' => 'Erro: ver abaixo', |
|
| 38 | - 'avis_erreur_connexion' => 'Erro de conexão', |
|
| 39 | - 'avis_erreur_cookie' => 'problema de cookie', |
|
| 40 | - 'avis_erreur_fonction_contexte' => 'Erro de programação. Esta função não deve ser chamada neste contexto.', |
|
| 41 | - 'avis_erreur_mysql' => 'Erro SQL', |
|
| 42 | - 'avis_erreur_sauvegarde' => 'Erro na cópia de segurança (@type@ @id_objet@) !', |
|
| 43 | - 'avis_erreur_visiteur' => 'Problema de acesso ao espaço privado', |
|
| 44 | - 'avis_nb_erreurs_saisie' => 'Há @nb@ erros nos dados informados. Por favor, verifique.', |
|
| 12 | + // A |
|
| 13 | + 'access_interface_graphique' => 'Voltar para a interface gráfica completa', |
|
| 14 | + 'access_mode_texte' => 'Exibir a interface textual simplificada', |
|
| 15 | + 'admin_debug' => 'depurar', |
|
| 16 | + 'admin_modifier_article' => 'Editar esta matéria', |
|
| 17 | + 'admin_modifier_auteur' => 'Editar este autor', |
|
| 18 | + 'admin_modifier_breve' => 'Editar esta nota', |
|
| 19 | + 'admin_modifier_mot' => 'Editar esta palavra-chave', |
|
| 20 | + 'admin_modifier_rubrique' => 'Editar esta seção', |
|
| 21 | + 'admin_recalculer' => 'Atualizar esta página', |
|
| 22 | + 'afficher_calendrier' => 'Exibir o calendário', |
|
| 23 | + 'afficher_trad' => 'exibir as traduções', |
|
| 24 | + 'alerte_maj_impossible' => '<b>Atenção!</b> A atualização da base de dados SQL para a versão @version@ não é possível, provavelmente por problema de direitos de edição na base de dados. Por favor, contate o seu provedor de hospedagem.', |
|
| 25 | + 'alerte_modif_info_concourante' => 'ATENÇÃO: Esta informação foi alterada por outra pessoa. O valor atual é:', |
|
| 26 | + 'analyse_xml' => 'Analisar XML', |
|
| 27 | + 'annuler' => 'Cancelar', |
|
| 28 | + 'antispam_champ_vide' => 'Por favor, deixe este campo vazio:', |
|
| 29 | + 'articles_recents' => 'Matérias mais recentes', |
|
| 30 | + 'attention_champ_mini_nb_caractères' => 'Atenção! Mínimo de @nb@ caracteres', |
|
| 31 | + 'avis_1_erreur_saisie' => 'Há um erro nos dados informados. Por favor, verifique.', |
|
| 32 | + 'avis_archive_incorrect' => 'a cópia de segurança não é um arquivo do SPIP', |
|
| 33 | + 'avis_archive_invalide' => 'a cópia de segurança não é válida', |
|
| 34 | + 'avis_attention' => 'ATENÇÃO!', |
|
| 35 | + 'avis_champ_incorrect_type_objet' => 'Nome de campo @name@ incorreto para objeto do tipo @type@', |
|
| 36 | + 'avis_colonne_inexistante' => 'A coluna @col@ não existe', |
|
| 37 | + 'avis_erreur' => 'Erro: ver abaixo', |
|
| 38 | + 'avis_erreur_connexion' => 'Erro de conexão', |
|
| 39 | + 'avis_erreur_cookie' => 'problema de cookie', |
|
| 40 | + 'avis_erreur_fonction_contexte' => 'Erro de programação. Esta função não deve ser chamada neste contexto.', |
|
| 41 | + 'avis_erreur_mysql' => 'Erro SQL', |
|
| 42 | + 'avis_erreur_sauvegarde' => 'Erro na cópia de segurança (@type@ @id_objet@) !', |
|
| 43 | + 'avis_erreur_visiteur' => 'Problema de acesso ao espaço privado', |
|
| 44 | + 'avis_nb_erreurs_saisie' => 'Há @nb@ erros nos dados informados. Por favor, verifique.', |
|
| 45 | 45 | |
| 46 | - // B |
|
| 47 | - 'barre_a_accent_grave' => 'Inserir um A maiúsculo com acento grave', |
|
| 48 | - 'barre_aide' => 'utilize os atalhos tipográficos para enriquecer o seu layout', |
|
| 49 | - 'barre_e_accent_aigu' => 'Inserir um E maiúsculo com acento agudo', |
|
| 50 | - 'barre_eo' => 'Inserir um OE contraído', |
|
| 51 | - 'barre_eo_maj' => 'Inserir um OE contraído maiúsculo', |
|
| 52 | - 'barre_euro' => 'Inserir o símbolo € (euro)', |
|
| 53 | - 'barre_gras' => 'Escrever em {{negrito}}', |
|
| 54 | - 'barre_guillemets' => 'envolver em "aspas"', |
|
| 55 | - 'barre_guillemets_simples' => 'Envolver em ’plicas’', |
|
| 56 | - 'barre_intertitre' => 'Transformar em {{{entretítulo}}}', |
|
| 57 | - 'barre_italic' => 'Escrever em {itálico}', |
|
| 58 | - 'barre_lien' => 'Transformar em [link hipertexto->http://...]', |
|
| 59 | - 'barre_lien_input' => 'Informe o endereço do seu link (você pode informar um endereço web do tipo http://www.monsite/com ou simplesmente informar o número de uma matéria deste site.', |
|
| 60 | - 'barre_note' => 'Transformar em [[Nota de pé de página]]', |
|
| 61 | - 'barre_paragraphe' => 'Criar um parágrafo', |
|
| 62 | - 'barre_quote' => '<quote>Citar uma mensagem</quote>', |
|
| 63 | - 'bouton_changer' => 'Alterar', |
|
| 64 | - 'bouton_chercher' => 'Procurar', |
|
| 65 | - 'bouton_choisir' => 'Escolher', |
|
| 66 | - 'bouton_deplacer' => 'Deslocar', |
|
| 67 | - 'bouton_download' => 'Baixar', |
|
| 68 | - 'bouton_enregistrer' => 'Gravar', |
|
| 69 | - 'bouton_radio_desactiver_messagerie_interne' => 'Desativar o sistema interno de mensagens', |
|
| 70 | - 'bouton_radio_envoi_annonces' => 'Enviar os avisos editoriais', |
|
| 71 | - 'bouton_radio_non_envoi_annonces' => 'Não enviar os avisos', |
|
| 72 | - 'bouton_radio_non_envoi_liste_nouveautes' => 'Não enviar a lista de novidades', |
|
| 73 | - 'bouton_recharger_page' => 'atualizar esta página', |
|
| 74 | - 'bouton_telecharger' => 'Transferir', |
|
| 75 | - 'bouton_upload' => 'Upload', |
|
| 76 | - 'bouton_valider' => 'Validar', |
|
| 46 | + // B |
|
| 47 | + 'barre_a_accent_grave' => 'Inserir um A maiúsculo com acento grave', |
|
| 48 | + 'barre_aide' => 'utilize os atalhos tipográficos para enriquecer o seu layout', |
|
| 49 | + 'barre_e_accent_aigu' => 'Inserir um E maiúsculo com acento agudo', |
|
| 50 | + 'barre_eo' => 'Inserir um OE contraído', |
|
| 51 | + 'barre_eo_maj' => 'Inserir um OE contraído maiúsculo', |
|
| 52 | + 'barre_euro' => 'Inserir o símbolo € (euro)', |
|
| 53 | + 'barre_gras' => 'Escrever em {{negrito}}', |
|
| 54 | + 'barre_guillemets' => 'envolver em "aspas"', |
|
| 55 | + 'barre_guillemets_simples' => 'Envolver em ’plicas’', |
|
| 56 | + 'barre_intertitre' => 'Transformar em {{{entretítulo}}}', |
|
| 57 | + 'barre_italic' => 'Escrever em {itálico}', |
|
| 58 | + 'barre_lien' => 'Transformar em [link hipertexto->http://...]', |
|
| 59 | + 'barre_lien_input' => 'Informe o endereço do seu link (você pode informar um endereço web do tipo http://www.monsite/com ou simplesmente informar o número de uma matéria deste site.', |
|
| 60 | + 'barre_note' => 'Transformar em [[Nota de pé de página]]', |
|
| 61 | + 'barre_paragraphe' => 'Criar um parágrafo', |
|
| 62 | + 'barre_quote' => '<quote>Citar uma mensagem</quote>', |
|
| 63 | + 'bouton_changer' => 'Alterar', |
|
| 64 | + 'bouton_chercher' => 'Procurar', |
|
| 65 | + 'bouton_choisir' => 'Escolher', |
|
| 66 | + 'bouton_deplacer' => 'Deslocar', |
|
| 67 | + 'bouton_download' => 'Baixar', |
|
| 68 | + 'bouton_enregistrer' => 'Gravar', |
|
| 69 | + 'bouton_radio_desactiver_messagerie_interne' => 'Desativar o sistema interno de mensagens', |
|
| 70 | + 'bouton_radio_envoi_annonces' => 'Enviar os avisos editoriais', |
|
| 71 | + 'bouton_radio_non_envoi_annonces' => 'Não enviar os avisos', |
|
| 72 | + 'bouton_radio_non_envoi_liste_nouveautes' => 'Não enviar a lista de novidades', |
|
| 73 | + 'bouton_recharger_page' => 'atualizar esta página', |
|
| 74 | + 'bouton_telecharger' => 'Transferir', |
|
| 75 | + 'bouton_upload' => 'Upload', |
|
| 76 | + 'bouton_valider' => 'Validar', |
|
| 77 | 77 | |
| 78 | - // C |
|
| 79 | - 'cal_apresmidi' => 'tarde', |
|
| 80 | - 'cal_jour_entier' => 'dia todo', |
|
| 81 | - 'cal_matin' => 'manhã', |
|
| 82 | - 'cal_par_jour' => 'calendário por dia', |
|
| 83 | - 'cal_par_mois' => 'calendário por mês', |
|
| 84 | - 'cal_par_semaine' => 'calendário por semana', |
|
| 85 | - 'choix_couleur_interface' => 'côr', |
|
| 86 | - 'choix_interface' => 'escolha da interface', |
|
| 87 | - 'colonne' => 'Coluna', |
|
| 88 | - 'confirm_changer_statut' => 'Atenção, você solicitou a alteração de status deste elemento. Deseja continuar?', |
|
| 89 | - 'correcte' => 'correta', |
|
| 78 | + // C |
|
| 79 | + 'cal_apresmidi' => 'tarde', |
|
| 80 | + 'cal_jour_entier' => 'dia todo', |
|
| 81 | + 'cal_matin' => 'manhã', |
|
| 82 | + 'cal_par_jour' => 'calendário por dia', |
|
| 83 | + 'cal_par_mois' => 'calendário por mês', |
|
| 84 | + 'cal_par_semaine' => 'calendário por semana', |
|
| 85 | + 'choix_couleur_interface' => 'côr', |
|
| 86 | + 'choix_interface' => 'escolha da interface', |
|
| 87 | + 'colonne' => 'Coluna', |
|
| 88 | + 'confirm_changer_statut' => 'Atenção, você solicitou a alteração de status deste elemento. Deseja continuar?', |
|
| 89 | + 'correcte' => 'correta', |
|
| 90 | 90 | |
| 91 | - // D |
|
| 92 | - 'date_aujourdhui' => 'hoje', |
|
| 93 | - 'date_avant_jc' => 'a.C.', |
|
| 94 | - 'date_dans' => 'entre @delai@', |
|
| 95 | - 'date_de_mois_1' => '@j@ de @nommois@', |
|
| 96 | - 'date_de_mois_10' => '@j@ de @nommois@', |
|
| 97 | - 'date_de_mois_11' => '@j@ de @nommois@', |
|
| 98 | - 'date_de_mois_12' => '@j@ de @nommois@', |
|
| 99 | - 'date_de_mois_2' => '@j@ de @nommois@', |
|
| 100 | - 'date_de_mois_3' => '@j@ de @nommois@', |
|
| 101 | - 'date_de_mois_4' => '@j@ de @nommois@', |
|
| 102 | - 'date_de_mois_5' => '@j@ de @nommois@', |
|
| 103 | - 'date_de_mois_6' => '@j@ de @nommois@', |
|
| 104 | - 'date_de_mois_7' => '@j@ de @nommois@', |
|
| 105 | - 'date_de_mois_8' => '@j@ de @nommois@', |
|
| 106 | - 'date_de_mois_9' => '@j@ de @nommois@', |
|
| 107 | - 'date_demain' => 'amanhã', |
|
| 108 | - 'date_fmt_heures_minutes' => '@h@h@m@min', |
|
| 109 | - 'date_fmt_heures_minutes_court' => '@h@h@m@', |
|
| 110 | - 'date_fmt_jour' => '@nomjour@ @jour@', |
|
| 111 | - 'date_fmt_jour_heure' => '@jour@ - @heure@', |
|
| 112 | - 'date_fmt_jour_heure_debut_fin' => 'dia @jour@ de @heure_debut@ a @heure_fin@', |
|
| 113 | - 'date_fmt_jour_heure_debut_fin_abbr' => 'dia @dtstart@@jour@ de @heure_debut@@dtabbr@ a @dtstart@@heure_fin@@dtend@', |
|
| 114 | - 'date_fmt_jour_mois' => '@jour@ de @nommois@', |
|
| 115 | - 'date_fmt_jour_mois_annee' => '@jour@ de @nommois@ de @annee@', |
|
| 116 | - 'date_fmt_mois_annee' => '@nommois@ de @annee@', |
|
| 117 | - 'date_fmt_nomjour' => '@nomjour@ @date@', |
|
| 118 | - 'date_fmt_nomjour_date' => '@nomjour@ de @date@', |
|
| 119 | - 'date_fmt_periode' => 'De @date_debut@ a @date_fin@', |
|
| 120 | - 'date_fmt_periode_abbr' => 'De @dtart@@date_debut@@dtabbr@ a @dtend@@date_fin@@dtabbr@', |
|
| 121 | - 'date_fmt_periode_from' => 'De', |
|
| 122 | - 'date_fmt_periode_to' => 'para', |
|
| 123 | - 'date_fmt_saison_annee' => '@saison@ @annee@', |
|
| 124 | - 'date_heures' => 'horas', |
|
| 125 | - 'date_hier' => 'ontem', |
|
| 126 | - 'date_il_y_a' => 'há @delai@', |
|
| 127 | - 'date_jnum1' => '1º', |
|
| 128 | - 'date_jnum10' => '10', |
|
| 129 | - 'date_jnum11' => '11', |
|
| 130 | - 'date_jnum12' => '12', |
|
| 131 | - 'date_jnum13' => '13', |
|
| 132 | - 'date_jnum14' => '14', |
|
| 133 | - 'date_jnum15' => '15', |
|
| 134 | - 'date_jnum16' => '16', |
|
| 135 | - 'date_jnum17' => '17', |
|
| 136 | - 'date_jnum18' => '18', |
|
| 137 | - 'date_jnum19' => '19', |
|
| 138 | - 'date_jnum2' => '2', |
|
| 139 | - 'date_jnum20' => '20', |
|
| 140 | - 'date_jnum21' => '21', |
|
| 141 | - 'date_jnum22' => '22', |
|
| 142 | - 'date_jnum23' => '23', |
|
| 143 | - 'date_jnum24' => '24', |
|
| 144 | - 'date_jnum25' => '25', |
|
| 145 | - 'date_jnum26' => '26', |
|
| 146 | - 'date_jnum27' => '27', |
|
| 147 | - 'date_jnum28' => '28', |
|
| 148 | - 'date_jnum29' => '29', |
|
| 149 | - 'date_jnum3' => '3', |
|
| 150 | - 'date_jnum30' => '30', |
|
| 151 | - 'date_jnum31' => '31', |
|
| 152 | - 'date_jnum4' => '4', |
|
| 153 | - 'date_jnum5' => '5', |
|
| 154 | - 'date_jnum6' => '6', |
|
| 155 | - 'date_jnum7' => '7', |
|
| 156 | - 'date_jnum8' => '8', |
|
| 157 | - 'date_jnum9' => '9', |
|
| 158 | - 'date_jour_1' => 'domingo', |
|
| 159 | - 'date_jour_1_abbr' => 'dom.', |
|
| 160 | - 'date_jour_1_initiale' => 'd.', |
|
| 161 | - 'date_jour_2' => 'segunda-feira', |
|
| 162 | - 'date_jour_2_abbr' => 'seg.', |
|
| 163 | - 'date_jour_2_initiale' => 's.', |
|
| 164 | - 'date_jour_3' => 'terça-feira', |
|
| 165 | - 'date_jour_3_abbr' => 'ter.', |
|
| 166 | - 'date_jour_3_initiale' => 't.', |
|
| 167 | - 'date_jour_4' => 'quarta-feira', |
|
| 168 | - 'date_jour_4_abbr' => 'quar.', |
|
| 169 | - 'date_jour_4_initiale' => 'q.', |
|
| 170 | - 'date_jour_5' => 'quinta-feira', |
|
| 171 | - 'date_jour_5_abbr' => 'quin.', |
|
| 172 | - 'date_jour_5_initiale' => 'q.', |
|
| 173 | - 'date_jour_6' => 'sexta-feira', |
|
| 174 | - 'date_jour_6_abbr' => 'sex.', |
|
| 175 | - 'date_jour_6_initiale' => 's.', |
|
| 176 | - 'date_jour_7' => 'sábado', |
|
| 177 | - 'date_jour_7_abbr' => 'sáb.', |
|
| 178 | - 'date_jour_7_initiale' => 's.', |
|
| 179 | - 'date_jours' => 'dias', |
|
| 180 | - 'date_minutes' => 'minutos', |
|
| 181 | - 'date_mois' => 'meses', |
|
| 182 | - 'date_mois_1' => 'janeiro', |
|
| 183 | - 'date_mois_10' => 'outubro', |
|
| 184 | - 'date_mois_10_abbr' => 'out.', |
|
| 185 | - 'date_mois_11' => 'novembro', |
|
| 186 | - 'date_mois_11_abbr' => 'nov.', |
|
| 187 | - 'date_mois_12' => 'dezembro', |
|
| 188 | - 'date_mois_12_abbr' => 'dez.', |
|
| 189 | - 'date_mois_1_abbr' => 'jan.', |
|
| 190 | - 'date_mois_2' => 'fevereiro', |
|
| 191 | - 'date_mois_2_abbr' => 'fev.', |
|
| 192 | - 'date_mois_3' => 'março', |
|
| 193 | - 'date_mois_3_abbr' => 'mar.', |
|
| 194 | - 'date_mois_4' => 'abril', |
|
| 195 | - 'date_mois_4_abbr' => 'abr.', |
|
| 196 | - 'date_mois_5' => 'maio', |
|
| 197 | - 'date_mois_5_abbr' => 'mai.', |
|
| 198 | - 'date_mois_6' => 'junho', |
|
| 199 | - 'date_mois_6_abbr' => 'jun.', |
|
| 200 | - 'date_mois_7' => 'julho', |
|
| 201 | - 'date_mois_7_abbr' => 'jul.', |
|
| 202 | - 'date_mois_8' => 'agosto', |
|
| 203 | - 'date_mois_8_abbr' => 'ago.', |
|
| 204 | - 'date_mois_9' => 'setembro', |
|
| 205 | - 'date_mois_9_abbr' => 'set.', |
|
| 206 | - 'date_saison_1' => 'inverno', |
|
| 207 | - 'date_saison_2' => 'primavera', |
|
| 208 | - 'date_saison_3' => 'verão', |
|
| 209 | - 'date_saison_4' => 'outono', |
|
| 210 | - 'date_secondes' => 'segundos', |
|
| 211 | - 'date_semaines' => 'semanas', |
|
| 212 | - 'date_un_mois' => 'mês', |
|
| 213 | - 'date_une_heure' => 'hora', |
|
| 214 | - 'date_une_minute' => 'minuto', |
|
| 215 | - 'date_une_seconde' => 'segundo', |
|
| 216 | - 'date_une_semaine' => 'semana', |
|
| 217 | - 'dirs_commencer' => 'Para começar realmente a instalação', |
|
| 218 | - 'dirs_preliminaire' => 'Preliminar: <b>Configurar os direitos de acesso</b>', |
|
| 219 | - 'dirs_probleme_droits' => 'Problema com as permissões de acesso', |
|
| 220 | - 'dirs_repertoires_absents' => '<p><b>Os diretórios a seguir não foram encontrados:</b></p><ul>@bad_dirs@.</ul> |
|
| 91 | + // D |
|
| 92 | + 'date_aujourdhui' => 'hoje', |
|
| 93 | + 'date_avant_jc' => 'a.C.', |
|
| 94 | + 'date_dans' => 'entre @delai@', |
|
| 95 | + 'date_de_mois_1' => '@j@ de @nommois@', |
|
| 96 | + 'date_de_mois_10' => '@j@ de @nommois@', |
|
| 97 | + 'date_de_mois_11' => '@j@ de @nommois@', |
|
| 98 | + 'date_de_mois_12' => '@j@ de @nommois@', |
|
| 99 | + 'date_de_mois_2' => '@j@ de @nommois@', |
|
| 100 | + 'date_de_mois_3' => '@j@ de @nommois@', |
|
| 101 | + 'date_de_mois_4' => '@j@ de @nommois@', |
|
| 102 | + 'date_de_mois_5' => '@j@ de @nommois@', |
|
| 103 | + 'date_de_mois_6' => '@j@ de @nommois@', |
|
| 104 | + 'date_de_mois_7' => '@j@ de @nommois@', |
|
| 105 | + 'date_de_mois_8' => '@j@ de @nommois@', |
|
| 106 | + 'date_de_mois_9' => '@j@ de @nommois@', |
|
| 107 | + 'date_demain' => 'amanhã', |
|
| 108 | + 'date_fmt_heures_minutes' => '@h@h@m@min', |
|
| 109 | + 'date_fmt_heures_minutes_court' => '@h@h@m@', |
|
| 110 | + 'date_fmt_jour' => '@nomjour@ @jour@', |
|
| 111 | + 'date_fmt_jour_heure' => '@jour@ - @heure@', |
|
| 112 | + 'date_fmt_jour_heure_debut_fin' => 'dia @jour@ de @heure_debut@ a @heure_fin@', |
|
| 113 | + 'date_fmt_jour_heure_debut_fin_abbr' => 'dia @dtstart@@jour@ de @heure_debut@@dtabbr@ a @dtstart@@heure_fin@@dtend@', |
|
| 114 | + 'date_fmt_jour_mois' => '@jour@ de @nommois@', |
|
| 115 | + 'date_fmt_jour_mois_annee' => '@jour@ de @nommois@ de @annee@', |
|
| 116 | + 'date_fmt_mois_annee' => '@nommois@ de @annee@', |
|
| 117 | + 'date_fmt_nomjour' => '@nomjour@ @date@', |
|
| 118 | + 'date_fmt_nomjour_date' => '@nomjour@ de @date@', |
|
| 119 | + 'date_fmt_periode' => 'De @date_debut@ a @date_fin@', |
|
| 120 | + 'date_fmt_periode_abbr' => 'De @dtart@@date_debut@@dtabbr@ a @dtend@@date_fin@@dtabbr@', |
|
| 121 | + 'date_fmt_periode_from' => 'De', |
|
| 122 | + 'date_fmt_periode_to' => 'para', |
|
| 123 | + 'date_fmt_saison_annee' => '@saison@ @annee@', |
|
| 124 | + 'date_heures' => 'horas', |
|
| 125 | + 'date_hier' => 'ontem', |
|
| 126 | + 'date_il_y_a' => 'há @delai@', |
|
| 127 | + 'date_jnum1' => '1º', |
|
| 128 | + 'date_jnum10' => '10', |
|
| 129 | + 'date_jnum11' => '11', |
|
| 130 | + 'date_jnum12' => '12', |
|
| 131 | + 'date_jnum13' => '13', |
|
| 132 | + 'date_jnum14' => '14', |
|
| 133 | + 'date_jnum15' => '15', |
|
| 134 | + 'date_jnum16' => '16', |
|
| 135 | + 'date_jnum17' => '17', |
|
| 136 | + 'date_jnum18' => '18', |
|
| 137 | + 'date_jnum19' => '19', |
|
| 138 | + 'date_jnum2' => '2', |
|
| 139 | + 'date_jnum20' => '20', |
|
| 140 | + 'date_jnum21' => '21', |
|
| 141 | + 'date_jnum22' => '22', |
|
| 142 | + 'date_jnum23' => '23', |
|
| 143 | + 'date_jnum24' => '24', |
|
| 144 | + 'date_jnum25' => '25', |
|
| 145 | + 'date_jnum26' => '26', |
|
| 146 | + 'date_jnum27' => '27', |
|
| 147 | + 'date_jnum28' => '28', |
|
| 148 | + 'date_jnum29' => '29', |
|
| 149 | + 'date_jnum3' => '3', |
|
| 150 | + 'date_jnum30' => '30', |
|
| 151 | + 'date_jnum31' => '31', |
|
| 152 | + 'date_jnum4' => '4', |
|
| 153 | + 'date_jnum5' => '5', |
|
| 154 | + 'date_jnum6' => '6', |
|
| 155 | + 'date_jnum7' => '7', |
|
| 156 | + 'date_jnum8' => '8', |
|
| 157 | + 'date_jnum9' => '9', |
|
| 158 | + 'date_jour_1' => 'domingo', |
|
| 159 | + 'date_jour_1_abbr' => 'dom.', |
|
| 160 | + 'date_jour_1_initiale' => 'd.', |
|
| 161 | + 'date_jour_2' => 'segunda-feira', |
|
| 162 | + 'date_jour_2_abbr' => 'seg.', |
|
| 163 | + 'date_jour_2_initiale' => 's.', |
|
| 164 | + 'date_jour_3' => 'terça-feira', |
|
| 165 | + 'date_jour_3_abbr' => 'ter.', |
|
| 166 | + 'date_jour_3_initiale' => 't.', |
|
| 167 | + 'date_jour_4' => 'quarta-feira', |
|
| 168 | + 'date_jour_4_abbr' => 'quar.', |
|
| 169 | + 'date_jour_4_initiale' => 'q.', |
|
| 170 | + 'date_jour_5' => 'quinta-feira', |
|
| 171 | + 'date_jour_5_abbr' => 'quin.', |
|
| 172 | + 'date_jour_5_initiale' => 'q.', |
|
| 173 | + 'date_jour_6' => 'sexta-feira', |
|
| 174 | + 'date_jour_6_abbr' => 'sex.', |
|
| 175 | + 'date_jour_6_initiale' => 's.', |
|
| 176 | + 'date_jour_7' => 'sábado', |
|
| 177 | + 'date_jour_7_abbr' => 'sáb.', |
|
| 178 | + 'date_jour_7_initiale' => 's.', |
|
| 179 | + 'date_jours' => 'dias', |
|
| 180 | + 'date_minutes' => 'minutos', |
|
| 181 | + 'date_mois' => 'meses', |
|
| 182 | + 'date_mois_1' => 'janeiro', |
|
| 183 | + 'date_mois_10' => 'outubro', |
|
| 184 | + 'date_mois_10_abbr' => 'out.', |
|
| 185 | + 'date_mois_11' => 'novembro', |
|
| 186 | + 'date_mois_11_abbr' => 'nov.', |
|
| 187 | + 'date_mois_12' => 'dezembro', |
|
| 188 | + 'date_mois_12_abbr' => 'dez.', |
|
| 189 | + 'date_mois_1_abbr' => 'jan.', |
|
| 190 | + 'date_mois_2' => 'fevereiro', |
|
| 191 | + 'date_mois_2_abbr' => 'fev.', |
|
| 192 | + 'date_mois_3' => 'março', |
|
| 193 | + 'date_mois_3_abbr' => 'mar.', |
|
| 194 | + 'date_mois_4' => 'abril', |
|
| 195 | + 'date_mois_4_abbr' => 'abr.', |
|
| 196 | + 'date_mois_5' => 'maio', |
|
| 197 | + 'date_mois_5_abbr' => 'mai.', |
|
| 198 | + 'date_mois_6' => 'junho', |
|
| 199 | + 'date_mois_6_abbr' => 'jun.', |
|
| 200 | + 'date_mois_7' => 'julho', |
|
| 201 | + 'date_mois_7_abbr' => 'jul.', |
|
| 202 | + 'date_mois_8' => 'agosto', |
|
| 203 | + 'date_mois_8_abbr' => 'ago.', |
|
| 204 | + 'date_mois_9' => 'setembro', |
|
| 205 | + 'date_mois_9_abbr' => 'set.', |
|
| 206 | + 'date_saison_1' => 'inverno', |
|
| 207 | + 'date_saison_2' => 'primavera', |
|
| 208 | + 'date_saison_3' => 'verão', |
|
| 209 | + 'date_saison_4' => 'outono', |
|
| 210 | + 'date_secondes' => 'segundos', |
|
| 211 | + 'date_semaines' => 'semanas', |
|
| 212 | + 'date_un_mois' => 'mês', |
|
| 213 | + 'date_une_heure' => 'hora', |
|
| 214 | + 'date_une_minute' => 'minuto', |
|
| 215 | + 'date_une_seconde' => 'segundo', |
|
| 216 | + 'date_une_semaine' => 'semana', |
|
| 217 | + 'dirs_commencer' => 'Para começar realmente a instalação', |
|
| 218 | + 'dirs_preliminaire' => 'Preliminar: <b>Configurar os direitos de acesso</b>', |
|
| 219 | + 'dirs_probleme_droits' => 'Problema com as permissões de acesso', |
|
| 220 | + 'dirs_repertoires_absents' => '<p><b>Os diretórios a seguir não foram encontrados:</b></p><ul>@bad_dirs@.</ul> |
|
| 221 | 221 | <p>É provável que isto se deva a um problema de letras em maiúsculas e minúsculas. |
| 222 | 222 | Verifique se as maiúsculas e minúsuculas destes diretórios coincidem exatamente com o que está sendo exibido abaixo; se este não for o caso, renomeie os diretórios com o seu programa de FTP de modo a corrigir o erro. |
| 223 | 223 | <p>Uma vêz feita esta manipulação, você poderá ', |
| 224 | - 'dirs_repertoires_suivants' => '<p><b>Os diretórios a seguir não estão acessiveis para leitura:</b></p><ul>@bad_dirs@.</ul> |
|
| 224 | + 'dirs_repertoires_suivants' => '<p><b>Os diretórios a seguir não estão acessiveis para leitura:</b></p><ul>@bad_dirs@.</ul> |
|
| 225 | 225 | <p>Para corrigir, utilize o seu programa de FTP para configurar os direitos de acesso de cada um destes diretórios. O procedimento está explicado em detalhes no guia de instalação.</p> |
| 226 | 226 | <p>Uma vêz feita esta alteração, você poderá ', |
| 227 | - 'double_occurrence' => 'Ocorrência dupla de @balise@', |
|
| 227 | + 'double_occurrence' => 'Ocorrência dupla de @balise@', |
|
| 228 | 228 | |
| 229 | - // E |
|
| 230 | - 'en_cours' => 'em curso', |
|
| 231 | - 'envoi_via_le_site' => 'Envio pelo site', |
|
| 232 | - 'erreur' => 'Erro', |
|
| 233 | - 'erreur_balise_non_fermee' => 'Última tag em aberto:', |
|
| 234 | - 'erreur_technique_ajaxform' => 'Ooops. Um erro inesperado impediu o envio do formulário. Você pode tentar novamente.', |
|
| 235 | - 'erreur_technique_enregistrement_champs' => 'Um erro técnico impediu a gravação correta do campo @champs@.', |
|
| 236 | - 'erreur_technique_enregistrement_impossible' => 'Um erro técnico impediu a gravação.', |
|
| 237 | - 'erreur_texte' => 'erro(s)', |
|
| 238 | - 'etape' => 'Etapa', |
|
| 229 | + // E |
|
| 230 | + 'en_cours' => 'em curso', |
|
| 231 | + 'envoi_via_le_site' => 'Envio pelo site', |
|
| 232 | + 'erreur' => 'Erro', |
|
| 233 | + 'erreur_balise_non_fermee' => 'Última tag em aberto:', |
|
| 234 | + 'erreur_technique_ajaxform' => 'Ooops. Um erro inesperado impediu o envio do formulário. Você pode tentar novamente.', |
|
| 235 | + 'erreur_technique_enregistrement_champs' => 'Um erro técnico impediu a gravação correta do campo @champs@.', |
|
| 236 | + 'erreur_technique_enregistrement_impossible' => 'Um erro técnico impediu a gravação.', |
|
| 237 | + 'erreur_texte' => 'erro(s)', |
|
| 238 | + 'etape' => 'Etapa', |
|
| 239 | 239 | |
| 240 | - // F |
|
| 241 | - 'fichier_introuvable' => 'Arquivo @fichier@ não encontrado.', |
|
| 242 | - 'fonction_introuvable' => 'Função @fonction@() não encontrada.', |
|
| 243 | - 'form_auteur_confirmation' => 'Confirme o seu endereço de e-mail', |
|
| 244 | - 'form_auteur_email_modifie' => 'O seu endereço de e-mail foi alterado.', |
|
| 245 | - 'form_auteur_envoi_mail_confirmation' => 'Uma mensagem de confirmação acabou de ser enviada para @email@. Você precisa entrar no endereço web mencionado na mensagem para validar o seu endereço de e-mail.', |
|
| 246 | - 'form_auteur_mail_confirmation' => 'Olá, |
|
| 240 | + // F |
|
| 241 | + 'fichier_introuvable' => 'Arquivo @fichier@ não encontrado.', |
|
| 242 | + 'fonction_introuvable' => 'Função @fonction@() não encontrada.', |
|
| 243 | + 'form_auteur_confirmation' => 'Confirme o seu endereço de e-mail', |
|
| 244 | + 'form_auteur_email_modifie' => 'O seu endereço de e-mail foi alterado.', |
|
| 245 | + 'form_auteur_envoi_mail_confirmation' => 'Uma mensagem de confirmação acabou de ser enviada para @email@. Você precisa entrar no endereço web mencionado na mensagem para validar o seu endereço de e-mail.', |
|
| 246 | + 'form_auteur_mail_confirmation' => 'Olá, |
|
| 247 | 247 | |
| 248 | 248 | Você pediu para alterar o seu endereço de e-mail |
| 249 | 249 | Para confirmar o seu novo endereço, basta acessar o endereço abaixo (cas contrário, a sua solicitação será ignorada): |
| 250 | 250 | |
| 251 | 251 | @url@ |
| 252 | 252 | ', |
| 253 | - 'form_deja_inscrit' => 'Você já está inscrito.', |
|
| 254 | - 'form_email_non_valide' => 'Seu endereço de e-mail não é válido.', |
|
| 255 | - 'form_forum_access_refuse' => 'Você não tem mais acesso a este site.', |
|
| 256 | - 'form_forum_bonjour' => 'Bom dia @nom@,', |
|
| 257 | - 'form_forum_confirmer_email' => 'Para confirmar o seu endereço de e-mail, clique neste link: @url_confirm@', |
|
| 258 | - 'form_forum_email_deja_enregistre' => 'Este endereço de e-mail já está cadastrado, você pode usar a sua senha habitual.', |
|
| 259 | - 'form_forum_identifiant_mail' => 'Seu novo login foi enviado por e-mail.', |
|
| 260 | - 'form_forum_identifiants' => 'Identificadores pessoais', |
|
| 261 | - 'form_forum_indiquer_nom_email' => 'Informe aqui o seu nome endereço de e-mail. O seu identificador pessoal será enviado de imediato por correio eletrônico.', |
|
| 262 | - 'form_forum_login' => 'login:', |
|
| 263 | - 'form_forum_message_auto' => '(esta é uma mensagem automática)', |
|
| 264 | - 'form_forum_pass' => 'senha:', |
|
| 265 | - 'form_forum_probleme_mail' => 'Problema de e-mail: o identificador não pôde ser enviado.', |
|
| 266 | - 'form_forum_voici1' => 'Estes são os seus identificadores para que você possa participar da vida do site "@nom_site_spip@" (@adresse_site@):', |
|
| 267 | - 'form_forum_voici2' => 'Estes são os seus identificadores para que você possa propor matérias ao site "@nom_site_spip@" (@adresse_login@):', |
|
| 268 | - 'form_indiquer_email' => 'Por favor, informe o seu endereço de e-mail.', |
|
| 269 | - 'form_indiquer_nom' => 'Por favor, informe o seu nome.', |
|
| 270 | - 'form_indiquer_nom_site' => 'Por favor, informe o nome do seu site.', |
|
| 271 | - 'form_pet_deja_enregistre' => 'Este site já está cadastrado', |
|
| 272 | - 'form_pet_signature_pasprise' => 'Sua assinatura não foi computada.', |
|
| 273 | - 'form_prop_confirmer_envoi' => 'Confirmar o envio', |
|
| 274 | - 'form_prop_description' => 'Descrição / comentário', |
|
| 275 | - 'form_prop_enregistre' => 'Sua proposta foi cadastrada, ela aparecerá online após ser validada pelos responsáveis deste site.', |
|
| 276 | - 'form_prop_envoyer' => 'Enviar uma mensagem', |
|
| 277 | - 'form_prop_indiquer_email' => 'Por favor, indique um endereço de e-mail válido', |
|
| 278 | - 'form_prop_indiquer_nom_site' => 'Por favor, informe o nome do site.', |
|
| 279 | - 'form_prop_indiquer_sujet' => 'Por favor, informe um assunto', |
|
| 280 | - 'form_prop_message_envoye' => 'Mensagem enviada', |
|
| 281 | - 'form_prop_non_enregistre' => 'Sua proposta não foi cadastrada.', |
|
| 282 | - 'form_prop_sujet' => 'Assunto', |
|
| 283 | - 'form_prop_url_site' => 'Endereço URL do site', |
|
| 284 | - 'format_date_attendu' => 'Inserir uma data no formato dd/mm/aaaa.', |
|
| 285 | - 'format_date_incorrecte' => 'A data e o seu formato está incorreta', |
|
| 286 | - 'format_heure_attendu' => 'Inserir uma hora no formato hh:mm.', |
|
| 287 | - 'format_heure_incorrecte' => 'A hora e o seu formato está incorreta', |
|
| 288 | - 'forum_non_inscrit' => 'Você não está inscrito, ou o endereço ou a senha estão errados.', |
|
| 289 | - 'forum_par_auteur' => 'por @auteur@', |
|
| 290 | - 'forum_titre_erreur' => 'Erro...', |
|
| 253 | + 'form_deja_inscrit' => 'Você já está inscrito.', |
|
| 254 | + 'form_email_non_valide' => 'Seu endereço de e-mail não é válido.', |
|
| 255 | + 'form_forum_access_refuse' => 'Você não tem mais acesso a este site.', |
|
| 256 | + 'form_forum_bonjour' => 'Bom dia @nom@,', |
|
| 257 | + 'form_forum_confirmer_email' => 'Para confirmar o seu endereço de e-mail, clique neste link: @url_confirm@', |
|
| 258 | + 'form_forum_email_deja_enregistre' => 'Este endereço de e-mail já está cadastrado, você pode usar a sua senha habitual.', |
|
| 259 | + 'form_forum_identifiant_mail' => 'Seu novo login foi enviado por e-mail.', |
|
| 260 | + 'form_forum_identifiants' => 'Identificadores pessoais', |
|
| 261 | + 'form_forum_indiquer_nom_email' => 'Informe aqui o seu nome endereço de e-mail. O seu identificador pessoal será enviado de imediato por correio eletrônico.', |
|
| 262 | + 'form_forum_login' => 'login:', |
|
| 263 | + 'form_forum_message_auto' => '(esta é uma mensagem automática)', |
|
| 264 | + 'form_forum_pass' => 'senha:', |
|
| 265 | + 'form_forum_probleme_mail' => 'Problema de e-mail: o identificador não pôde ser enviado.', |
|
| 266 | + 'form_forum_voici1' => 'Estes são os seus identificadores para que você possa participar da vida do site "@nom_site_spip@" (@adresse_site@):', |
|
| 267 | + 'form_forum_voici2' => 'Estes são os seus identificadores para que você possa propor matérias ao site "@nom_site_spip@" (@adresse_login@):', |
|
| 268 | + 'form_indiquer_email' => 'Por favor, informe o seu endereço de e-mail.', |
|
| 269 | + 'form_indiquer_nom' => 'Por favor, informe o seu nome.', |
|
| 270 | + 'form_indiquer_nom_site' => 'Por favor, informe o nome do seu site.', |
|
| 271 | + 'form_pet_deja_enregistre' => 'Este site já está cadastrado', |
|
| 272 | + 'form_pet_signature_pasprise' => 'Sua assinatura não foi computada.', |
|
| 273 | + 'form_prop_confirmer_envoi' => 'Confirmar o envio', |
|
| 274 | + 'form_prop_description' => 'Descrição / comentário', |
|
| 275 | + 'form_prop_enregistre' => 'Sua proposta foi cadastrada, ela aparecerá online após ser validada pelos responsáveis deste site.', |
|
| 276 | + 'form_prop_envoyer' => 'Enviar uma mensagem', |
|
| 277 | + 'form_prop_indiquer_email' => 'Por favor, indique um endereço de e-mail válido', |
|
| 278 | + 'form_prop_indiquer_nom_site' => 'Por favor, informe o nome do site.', |
|
| 279 | + 'form_prop_indiquer_sujet' => 'Por favor, informe um assunto', |
|
| 280 | + 'form_prop_message_envoye' => 'Mensagem enviada', |
|
| 281 | + 'form_prop_non_enregistre' => 'Sua proposta não foi cadastrada.', |
|
| 282 | + 'form_prop_sujet' => 'Assunto', |
|
| 283 | + 'form_prop_url_site' => 'Endereço URL do site', |
|
| 284 | + 'format_date_attendu' => 'Inserir uma data no formato dd/mm/aaaa.', |
|
| 285 | + 'format_date_incorrecte' => 'A data e o seu formato está incorreta', |
|
| 286 | + 'format_heure_attendu' => 'Inserir uma hora no formato hh:mm.', |
|
| 287 | + 'format_heure_incorrecte' => 'A hora e o seu formato está incorreta', |
|
| 288 | + 'forum_non_inscrit' => 'Você não está inscrito, ou o endereço ou a senha estão errados.', |
|
| 289 | + 'forum_par_auteur' => 'por @auteur@', |
|
| 290 | + 'forum_titre_erreur' => 'Erro...', |
|
| 291 | 291 | |
| 292 | - // I |
|
| 293 | - 'ical_texte_rss_articles' => 'O arquivo «backend» das matérias deste site encontra-se no endereço:', |
|
| 294 | - 'ical_texte_rss_articles2' => 'Você pode também obter os arquivos «backend» para as matérias de cada seção do site:', |
|
| 295 | - 'ical_texte_rss_breves' => 'Existe também um arquivo contendo as notas do site. Ao especificar um número de seção, você obterá unicamente as natos dessa seção.', |
|
| 296 | - 'icone_a_suivre' => 'Acompanhar', |
|
| 297 | - 'icone_admin_site' => 'Administração do site', |
|
| 298 | - 'icone_agenda' => 'Agenda', |
|
| 299 | - 'icone_aide_ligne' => 'Ajuda', |
|
| 300 | - 'icone_articles' => 'Matérias', |
|
| 301 | - 'icone_auteurs' => 'Autores', |
|
| 302 | - 'icone_brouteur' => 'Navegação rápida', |
|
| 303 | - 'icone_configuration_site' => 'Configuração', |
|
| 304 | - 'icone_configurer_site' => 'Configurar o seu site', |
|
| 305 | - 'icone_creer_nouvel_auteur' => 'Criar um novo autor', |
|
| 306 | - 'icone_creer_rubrique' => 'Criar uma seção', |
|
| 307 | - 'icone_creer_sous_rubrique' => 'Criar uma subseção', |
|
| 308 | - 'icone_deconnecter' => 'Desconectar-se', |
|
| 309 | - 'icone_discussions' => 'Discussões', |
|
| 310 | - 'icone_doc_rubrique' => 'Documentos das seções', |
|
| 311 | - 'icone_ecrire_article' => 'Escrever uma nova matéria', |
|
| 312 | - 'icone_edition_site' => 'Edição', |
|
| 313 | - 'icone_gestion_langues' => 'Gerenciamento de idiomas', |
|
| 314 | - 'icone_informations_personnelles' => 'Informações pessoais', |
|
| 315 | - 'icone_interface_complet' => 'interface completa', |
|
| 316 | - 'icone_interface_simple' => 'Interface simplificada', |
|
| 317 | - 'icone_maintenance_site' => 'Manutenção do site', |
|
| 318 | - 'icone_messagerie_personnelle' => 'Mensagens pessoais', |
|
| 319 | - 'icone_repartition_debut' => 'Exibir a repartição após o início', |
|
| 320 | - 'icone_rubriques' => 'Seções', |
|
| 321 | - 'icone_sauver_site' => 'Backup do site', |
|
| 322 | - 'icone_site_entier' => 'Todo o site', |
|
| 323 | - 'icone_sites_references' => 'Sites referenciados', |
|
| 324 | - 'icone_statistiques' => 'Estatísticas do site', |
|
| 325 | - 'icone_suivi_activite' => 'Acompanhar a vida do site', |
|
| 326 | - 'icone_suivi_actualite' => 'Evolução do site', |
|
| 327 | - 'icone_suivi_pettions' => 'Acompanhar / gerenciar as petições', |
|
| 328 | - 'icone_suivi_revisions' => 'Modificações das matérias', |
|
| 329 | - 'icone_supprimer_document' => 'Suprimir este documento', |
|
| 330 | - 'icone_supprimer_image' => 'Suprimir esta imagem', |
|
| 331 | - 'icone_tous_articles' => 'Todas as suas matérias', |
|
| 332 | - 'icone_tous_auteur' => 'Todos os autores', |
|
| 333 | - 'icone_tous_visiteur' => 'Todos os visitantes', |
|
| 334 | - 'icone_visiter_site' => 'Ver o site público', |
|
| 335 | - 'icone_voir_en_ligne' => 'Ver online', |
|
| 336 | - 'img_indisponible' => 'imagem indisponível', |
|
| 337 | - 'impossible' => 'impossível', |
|
| 338 | - 'info_a_suivre' => 'ACOMPANHAR»', |
|
| 339 | - 'info_acces_interdit' => 'Acesso interdito', |
|
| 340 | - 'info_acces_refuse' => 'Acesso recusado', |
|
| 341 | - 'info_action' => 'Ação: @action@', |
|
| 342 | - 'info_administrer_rubriques' => 'Você pode administrar esta seção e suas subseções', |
|
| 343 | - 'info_adresse_non_indiquee' => 'Você não informou o endereço a testar!', |
|
| 344 | - 'info_aide' => 'AJUDA:', |
|
| 345 | - 'info_ajouter_mot' => 'Incluir esta palavra', |
|
| 346 | - 'info_annonce' => 'AVISO', |
|
| 347 | - 'info_annonces_generales' => 'Avisos gerais:', |
|
| 348 | - 'info_article_propose' => 'Matéria proposta', |
|
| 349 | - 'info_article_publie' => 'Matéria publicada', |
|
| 350 | - 'info_article_redaction' => 'Matéria em fase de redação', |
|
| 351 | - 'info_article_refuse' => 'Matéria recusada', |
|
| 352 | - 'info_article_supprime' => 'Matéria suprimida', |
|
| 353 | - 'info_articles' => 'Matérias', |
|
| 354 | - 'info_articles_a_valider' => 'As matérias para validar', |
|
| 355 | - 'info_articles_nb' => '@nb@ matérias', |
|
| 356 | - 'info_articles_proposes' => 'Matérias propostas', |
|
| 357 | - 'info_articles_un' => '1 matéria', |
|
| 358 | - 'info_auteurs_nombre' => 'autor(es):', |
|
| 359 | - 'info_authentification_ftp' => 'Autenticação (por FTP).', |
|
| 360 | - 'info_breves_2' => 'notas', |
|
| 361 | - 'info_breves_nb' => '@nb@ notas', |
|
| 362 | - 'info_breves_un' => '1 nota', |
|
| 363 | - 'info_connexion_refusee' => 'Conexão recusada', |
|
| 364 | - 'info_contact_developpeur' => 'Por favor, contate um desenvolvedor.', |
|
| 365 | - 'info_contenance' => 'Este site contém:', |
|
| 366 | - 'info_contribution' => 'contribuições', |
|
| 367 | - 'info_copyright' => '@spip@ é um software livre distribuído @lien_gpl@.', |
|
| 368 | - 'info_copyright_doc' => 'Para mais informações, veja o site <a href="@spipnet@">@spipnet_affiche@</a>.', |
|
| 369 | - 'info_copyright_gpl' => 'sob licença GPL', |
|
| 370 | - 'info_cours_edition' => 'Em edição', |
|
| 371 | - 'info_creer_repertoire' => 'Por favor, crie um arquivo ou diretório com o nome:', |
|
| 372 | - 'info_creer_repertoire_2' => 'dentro do subdiretório <b>@repertoire@</b>, e depois:', |
|
| 373 | - 'info_creer_vignette' => 'criação automática do ícone', |
|
| 374 | - 'info_creerdansrubrique_non_autorise' => 'Você não tem permissão para criar um conteúdo nesta seção', |
|
| 375 | - 'info_deplier' => 'Expandir', |
|
| 376 | - 'info_descriptif_nombre' => 'descrição(ões):', |
|
| 377 | - 'info_description' => 'Resumo:', |
|
| 378 | - 'info_description_2' => 'Resumo:', |
|
| 379 | - 'info_dimension' => 'Dimensões:', |
|
| 380 | - 'info_documents_nb' => '@nb@ documentos', |
|
| 381 | - 'info_documents_un' => '1 documento', |
|
| 382 | - 'info_ecire_message_prive' => 'Escrever uma mensagem privada', |
|
| 383 | - 'info_email_invalide' => 'Endereço de e-mail inválido.', |
|
| 384 | - 'info_en_cours_validation' => 'Suas matérias em fase de redação', |
|
| 385 | - 'info_en_ligne' => 'Atualmente online:', |
|
| 386 | - 'info_envoyer_message_prive' => 'Enviar uma mensagem privada a este autor', |
|
| 387 | - 'info_erreur_requete' => 'Erro na requisição:', |
|
| 388 | - 'info_erreur_squelette2' => 'Nenhum template <b>@fichier@</b> está disponível...', |
|
| 389 | - 'info_erreur_systeme' => 'Erro do sistema (errno @errsys@)', |
|
| 390 | - 'info_erreur_systeme2' => 'É possível que não haja espaço livre em disco, ou que a base de dados esteja corrompida.<br /> |
|
| 292 | + // I |
|
| 293 | + 'ical_texte_rss_articles' => 'O arquivo «backend» das matérias deste site encontra-se no endereço:', |
|
| 294 | + 'ical_texte_rss_articles2' => 'Você pode também obter os arquivos «backend» para as matérias de cada seção do site:', |
|
| 295 | + 'ical_texte_rss_breves' => 'Existe também um arquivo contendo as notas do site. Ao especificar um número de seção, você obterá unicamente as natos dessa seção.', |
|
| 296 | + 'icone_a_suivre' => 'Acompanhar', |
|
| 297 | + 'icone_admin_site' => 'Administração do site', |
|
| 298 | + 'icone_agenda' => 'Agenda', |
|
| 299 | + 'icone_aide_ligne' => 'Ajuda', |
|
| 300 | + 'icone_articles' => 'Matérias', |
|
| 301 | + 'icone_auteurs' => 'Autores', |
|
| 302 | + 'icone_brouteur' => 'Navegação rápida', |
|
| 303 | + 'icone_configuration_site' => 'Configuração', |
|
| 304 | + 'icone_configurer_site' => 'Configurar o seu site', |
|
| 305 | + 'icone_creer_nouvel_auteur' => 'Criar um novo autor', |
|
| 306 | + 'icone_creer_rubrique' => 'Criar uma seção', |
|
| 307 | + 'icone_creer_sous_rubrique' => 'Criar uma subseção', |
|
| 308 | + 'icone_deconnecter' => 'Desconectar-se', |
|
| 309 | + 'icone_discussions' => 'Discussões', |
|
| 310 | + 'icone_doc_rubrique' => 'Documentos das seções', |
|
| 311 | + 'icone_ecrire_article' => 'Escrever uma nova matéria', |
|
| 312 | + 'icone_edition_site' => 'Edição', |
|
| 313 | + 'icone_gestion_langues' => 'Gerenciamento de idiomas', |
|
| 314 | + 'icone_informations_personnelles' => 'Informações pessoais', |
|
| 315 | + 'icone_interface_complet' => 'interface completa', |
|
| 316 | + 'icone_interface_simple' => 'Interface simplificada', |
|
| 317 | + 'icone_maintenance_site' => 'Manutenção do site', |
|
| 318 | + 'icone_messagerie_personnelle' => 'Mensagens pessoais', |
|
| 319 | + 'icone_repartition_debut' => 'Exibir a repartição após o início', |
|
| 320 | + 'icone_rubriques' => 'Seções', |
|
| 321 | + 'icone_sauver_site' => 'Backup do site', |
|
| 322 | + 'icone_site_entier' => 'Todo o site', |
|
| 323 | + 'icone_sites_references' => 'Sites referenciados', |
|
| 324 | + 'icone_statistiques' => 'Estatísticas do site', |
|
| 325 | + 'icone_suivi_activite' => 'Acompanhar a vida do site', |
|
| 326 | + 'icone_suivi_actualite' => 'Evolução do site', |
|
| 327 | + 'icone_suivi_pettions' => 'Acompanhar / gerenciar as petições', |
|
| 328 | + 'icone_suivi_revisions' => 'Modificações das matérias', |
|
| 329 | + 'icone_supprimer_document' => 'Suprimir este documento', |
|
| 330 | + 'icone_supprimer_image' => 'Suprimir esta imagem', |
|
| 331 | + 'icone_tous_articles' => 'Todas as suas matérias', |
|
| 332 | + 'icone_tous_auteur' => 'Todos os autores', |
|
| 333 | + 'icone_tous_visiteur' => 'Todos os visitantes', |
|
| 334 | + 'icone_visiter_site' => 'Ver o site público', |
|
| 335 | + 'icone_voir_en_ligne' => 'Ver online', |
|
| 336 | + 'img_indisponible' => 'imagem indisponível', |
|
| 337 | + 'impossible' => 'impossível', |
|
| 338 | + 'info_a_suivre' => 'ACOMPANHAR»', |
|
| 339 | + 'info_acces_interdit' => 'Acesso interdito', |
|
| 340 | + 'info_acces_refuse' => 'Acesso recusado', |
|
| 341 | + 'info_action' => 'Ação: @action@', |
|
| 342 | + 'info_administrer_rubriques' => 'Você pode administrar esta seção e suas subseções', |
|
| 343 | + 'info_adresse_non_indiquee' => 'Você não informou o endereço a testar!', |
|
| 344 | + 'info_aide' => 'AJUDA:', |
|
| 345 | + 'info_ajouter_mot' => 'Incluir esta palavra', |
|
| 346 | + 'info_annonce' => 'AVISO', |
|
| 347 | + 'info_annonces_generales' => 'Avisos gerais:', |
|
| 348 | + 'info_article_propose' => 'Matéria proposta', |
|
| 349 | + 'info_article_publie' => 'Matéria publicada', |
|
| 350 | + 'info_article_redaction' => 'Matéria em fase de redação', |
|
| 351 | + 'info_article_refuse' => 'Matéria recusada', |
|
| 352 | + 'info_article_supprime' => 'Matéria suprimida', |
|
| 353 | + 'info_articles' => 'Matérias', |
|
| 354 | + 'info_articles_a_valider' => 'As matérias para validar', |
|
| 355 | + 'info_articles_nb' => '@nb@ matérias', |
|
| 356 | + 'info_articles_proposes' => 'Matérias propostas', |
|
| 357 | + 'info_articles_un' => '1 matéria', |
|
| 358 | + 'info_auteurs_nombre' => 'autor(es):', |
|
| 359 | + 'info_authentification_ftp' => 'Autenticação (por FTP).', |
|
| 360 | + 'info_breves_2' => 'notas', |
|
| 361 | + 'info_breves_nb' => '@nb@ notas', |
|
| 362 | + 'info_breves_un' => '1 nota', |
|
| 363 | + 'info_connexion_refusee' => 'Conexão recusada', |
|
| 364 | + 'info_contact_developpeur' => 'Por favor, contate um desenvolvedor.', |
|
| 365 | + 'info_contenance' => 'Este site contém:', |
|
| 366 | + 'info_contribution' => 'contribuições', |
|
| 367 | + 'info_copyright' => '@spip@ é um software livre distribuído @lien_gpl@.', |
|
| 368 | + 'info_copyright_doc' => 'Para mais informações, veja o site <a href="@spipnet@">@spipnet_affiche@</a>.', |
|
| 369 | + 'info_copyright_gpl' => 'sob licença GPL', |
|
| 370 | + 'info_cours_edition' => 'Em edição', |
|
| 371 | + 'info_creer_repertoire' => 'Por favor, crie um arquivo ou diretório com o nome:', |
|
| 372 | + 'info_creer_repertoire_2' => 'dentro do subdiretório <b>@repertoire@</b>, e depois:', |
|
| 373 | + 'info_creer_vignette' => 'criação automática do ícone', |
|
| 374 | + 'info_creerdansrubrique_non_autorise' => 'Você não tem permissão para criar um conteúdo nesta seção', |
|
| 375 | + 'info_deplier' => 'Expandir', |
|
| 376 | + 'info_descriptif_nombre' => 'descrição(ões):', |
|
| 377 | + 'info_description' => 'Resumo:', |
|
| 378 | + 'info_description_2' => 'Resumo:', |
|
| 379 | + 'info_dimension' => 'Dimensões:', |
|
| 380 | + 'info_documents_nb' => '@nb@ documentos', |
|
| 381 | + 'info_documents_un' => '1 documento', |
|
| 382 | + 'info_ecire_message_prive' => 'Escrever uma mensagem privada', |
|
| 383 | + 'info_email_invalide' => 'Endereço de e-mail inválido.', |
|
| 384 | + 'info_en_cours_validation' => 'Suas matérias em fase de redação', |
|
| 385 | + 'info_en_ligne' => 'Atualmente online:', |
|
| 386 | + 'info_envoyer_message_prive' => 'Enviar uma mensagem privada a este autor', |
|
| 387 | + 'info_erreur_requete' => 'Erro na requisição:', |
|
| 388 | + 'info_erreur_squelette2' => 'Nenhum template <b>@fichier@</b> está disponível...', |
|
| 389 | + 'info_erreur_systeme' => 'Erro do sistema (errno @errsys@)', |
|
| 390 | + 'info_erreur_systeme2' => 'É possível que não haja espaço livre em disco, ou que a base de dados esteja corrompida.<br /> |
|
| 391 | 391 | <span style="color:red;">Tente <a href=\'@script@\'>reparar a base</a>, ou contate o seu serviço de hospedagem.</span>', |
| 392 | - 'info_fini' => 'Terminou!', |
|
| 393 | - 'info_format_image' => 'Formatos das imagens que podem ser utilizados para criar os ícones @gd_formats@.', |
|
| 394 | - 'info_format_non_defini' => 'formato não definido', |
|
| 395 | - 'info_grand_ecran' => 'Alta resolução', |
|
| 396 | - 'info_image_aide' => 'AJUDA', |
|
| 397 | - 'info_image_process_titre' => 'Método de criação dos ícones', |
|
| 398 | - 'info_impossible_lire_page' => '<b>Erro!</b> Impossível ler a página <tt><html>@test_proxy@</html></tt> via proxy', |
|
| 399 | - 'info_installation_systeme_publication' => 'Instalação do sistema de publicação...', |
|
| 400 | - 'info_installer_documents' => 'Você pode instalar automaticamente todos os documentos contídos no diretório @upload@.', |
|
| 401 | - 'info_installer_ftp' => 'Como administrador, você pode transferir (por FTP) arquivos para o diretório @upload@ para, em seguida, selecioná-los aqui diretamente.', |
|
| 402 | - 'info_installer_images' => 'Você pode transferir imagens nos formatos JPEG, GIF e PNG.', |
|
| 403 | - 'info_installer_images_dossier' => 'Transferir as imagens para o diretório @upload@ para poder selecioná-las aqui.', |
|
| 404 | - 'info_interface_complete' => 'interface completa', |
|
| 405 | - 'info_interface_simple' => 'Interface simplificada', |
|
| 406 | - 'info_joindre_document_article' => 'Você pode anexar a esta matéria documentos dos tipos a seguir', |
|
| 407 | - 'info_joindre_document_rubrique' => 'Você pode anexar a esta seção documentos dos tipos a seguir', |
|
| 408 | - 'info_joindre_documents_article' => 'Você pode anexar à sua matéria documentos dos tipos a seguir:', |
|
| 409 | - 'info_l_article' => 'a matéria', |
|
| 410 | - 'info_la_breve' => 'a nota', |
|
| 411 | - 'info_la_rubrique' => 'a seção', |
|
| 412 | - 'info_langue_principale' => 'Idioma principal do site', |
|
| 413 | - 'info_largeur_vignette' => '@largeur_vignette@ × @hauteur_vignette@ pixels', |
|
| 414 | - 'info_les_auteurs_1' => 'por @les_auteurs@', |
|
| 415 | - 'info_logo_format_interdit' => 'Apenas os ícones nos formatos @formats@ estão autorizados.', |
|
| 416 | - 'info_logo_max_poids' => 'Os ícones devem obrigatoriamente ter menos de @maxi@ (este arquivo tem @actuel@).', |
|
| 417 | - 'info_mail_fournisseur' => '[email protected]', |
|
| 418 | - 'info_message_2' => 'MENSAGEM', |
|
| 419 | - 'info_message_supprime' => 'MENSAGEM EXCLUÍDA', |
|
| 420 | - 'info_messages_nb' => '@nb@ mensagens', |
|
| 421 | - 'info_messages_un' => '1 mensagem', |
|
| 422 | - 'info_mise_en_ligne' => 'Data de publicação online:', |
|
| 423 | - 'info_modification_parametres_securite' => 'modificações dos parâmetros de segurança', |
|
| 424 | - 'info_mois_courant' => 'No mês corrente:', |
|
| 425 | - 'info_mot_cle_ajoute' => 'A palavra-chave a seguir foi associada a', |
|
| 426 | - 'info_multi_herit' => 'Idioma padrão', |
|
| 427 | - 'info_multi_langues_soulignees' => 'Os <u>idiomas sublinhados</u> dispõem de tradução total ou parcial dos textos da interface. Se você escolher esses idiomas, diversos elementos do site público (datas, formulários) são traduzidos automaticamente. Para os idiomas não sublinhados, estes elementos aparecerão no idioma principal do site.', |
|
| 428 | - 'info_multilinguisme' => 'Multilinguismo', |
|
| 429 | - 'info_nom_non_utilisateurs_connectes' => 'Seu nome não aparece na relação de usuários conectados.', |
|
| 430 | - 'info_nom_utilisateurs_connectes' => 'Seu nome aparecerá na relação de usuários conectados.', |
|
| 431 | - 'info_nombre_en_ligne' => 'Online neste momento:', |
|
| 432 | - 'info_non_resultat' => 'Nenhum resultados para "@cherche_mot@"', |
|
| 433 | - 'info_non_utilisation_messagerie' => 'Você não utiliza o sistema de mensagens deste site.', |
|
| 434 | - 'info_nouveau_message' => 'VOCÊ TEM UMA NOVA MENSAGEM', |
|
| 435 | - 'info_nouveaux_messages' => 'VOCÊ TEM @total_messages@ MENSAGENS NOVAS', |
|
| 436 | - 'info_numero_abbreviation' => 'N° ', |
|
| 437 | - 'info_obligatoire' => 'Esta informação é obrigatória', |
|
| 438 | - 'info_page_actuelle' => 'Página atual', |
|
| 439 | - 'info_pense_bete' => 'LEMBRETE', |
|
| 440 | - 'info_petit_ecran' => 'Baixa resolução', |
|
| 441 | - 'info_petition_close' => 'Petição fechada', |
|
| 442 | - 'info_pixels' => 'pixels', |
|
| 443 | - 'info_plusieurs_mots_trouves' => 'Várias palavras-chave encontradas para "@cherche_mot@":', |
|
| 444 | - 'info_portfolio_automatique' => 'Portfólio automático:', |
|
| 445 | - 'info_premier_resultat' => '[@debut_limit@ primeiros resultados de @total@]', |
|
| 446 | - 'info_premier_resultat_sur' => '[@debut_limit@ primeiros resultados de @total@]', |
|
| 447 | - 'info_propose_1' => '[@nom_site_spip@] Propõe: @titre@', |
|
| 448 | - 'info_propose_2' => 'Matéria proposta |
|
| 392 | + 'info_fini' => 'Terminou!', |
|
| 393 | + 'info_format_image' => 'Formatos das imagens que podem ser utilizados para criar os ícones @gd_formats@.', |
|
| 394 | + 'info_format_non_defini' => 'formato não definido', |
|
| 395 | + 'info_grand_ecran' => 'Alta resolução', |
|
| 396 | + 'info_image_aide' => 'AJUDA', |
|
| 397 | + 'info_image_process_titre' => 'Método de criação dos ícones', |
|
| 398 | + 'info_impossible_lire_page' => '<b>Erro!</b> Impossível ler a página <tt><html>@test_proxy@</html></tt> via proxy', |
|
| 399 | + 'info_installation_systeme_publication' => 'Instalação do sistema de publicação...', |
|
| 400 | + 'info_installer_documents' => 'Você pode instalar automaticamente todos os documentos contídos no diretório @upload@.', |
|
| 401 | + 'info_installer_ftp' => 'Como administrador, você pode transferir (por FTP) arquivos para o diretório @upload@ para, em seguida, selecioná-los aqui diretamente.', |
|
| 402 | + 'info_installer_images' => 'Você pode transferir imagens nos formatos JPEG, GIF e PNG.', |
|
| 403 | + 'info_installer_images_dossier' => 'Transferir as imagens para o diretório @upload@ para poder selecioná-las aqui.', |
|
| 404 | + 'info_interface_complete' => 'interface completa', |
|
| 405 | + 'info_interface_simple' => 'Interface simplificada', |
|
| 406 | + 'info_joindre_document_article' => 'Você pode anexar a esta matéria documentos dos tipos a seguir', |
|
| 407 | + 'info_joindre_document_rubrique' => 'Você pode anexar a esta seção documentos dos tipos a seguir', |
|
| 408 | + 'info_joindre_documents_article' => 'Você pode anexar à sua matéria documentos dos tipos a seguir:', |
|
| 409 | + 'info_l_article' => 'a matéria', |
|
| 410 | + 'info_la_breve' => 'a nota', |
|
| 411 | + 'info_la_rubrique' => 'a seção', |
|
| 412 | + 'info_langue_principale' => 'Idioma principal do site', |
|
| 413 | + 'info_largeur_vignette' => '@largeur_vignette@ × @hauteur_vignette@ pixels', |
|
| 414 | + 'info_les_auteurs_1' => 'por @les_auteurs@', |
|
| 415 | + 'info_logo_format_interdit' => 'Apenas os ícones nos formatos @formats@ estão autorizados.', |
|
| 416 | + 'info_logo_max_poids' => 'Os ícones devem obrigatoriamente ter menos de @maxi@ (este arquivo tem @actuel@).', |
|
| 417 | + 'info_mail_fournisseur' => '[email protected]', |
|
| 418 | + 'info_message_2' => 'MENSAGEM', |
|
| 419 | + 'info_message_supprime' => 'MENSAGEM EXCLUÍDA', |
|
| 420 | + 'info_messages_nb' => '@nb@ mensagens', |
|
| 421 | + 'info_messages_un' => '1 mensagem', |
|
| 422 | + 'info_mise_en_ligne' => 'Data de publicação online:', |
|
| 423 | + 'info_modification_parametres_securite' => 'modificações dos parâmetros de segurança', |
|
| 424 | + 'info_mois_courant' => 'No mês corrente:', |
|
| 425 | + 'info_mot_cle_ajoute' => 'A palavra-chave a seguir foi associada a', |
|
| 426 | + 'info_multi_herit' => 'Idioma padrão', |
|
| 427 | + 'info_multi_langues_soulignees' => 'Os <u>idiomas sublinhados</u> dispõem de tradução total ou parcial dos textos da interface. Se você escolher esses idiomas, diversos elementos do site público (datas, formulários) são traduzidos automaticamente. Para os idiomas não sublinhados, estes elementos aparecerão no idioma principal do site.', |
|
| 428 | + 'info_multilinguisme' => 'Multilinguismo', |
|
| 429 | + 'info_nom_non_utilisateurs_connectes' => 'Seu nome não aparece na relação de usuários conectados.', |
|
| 430 | + 'info_nom_utilisateurs_connectes' => 'Seu nome aparecerá na relação de usuários conectados.', |
|
| 431 | + 'info_nombre_en_ligne' => 'Online neste momento:', |
|
| 432 | + 'info_non_resultat' => 'Nenhum resultados para "@cherche_mot@"', |
|
| 433 | + 'info_non_utilisation_messagerie' => 'Você não utiliza o sistema de mensagens deste site.', |
|
| 434 | + 'info_nouveau_message' => 'VOCÊ TEM UMA NOVA MENSAGEM', |
|
| 435 | + 'info_nouveaux_messages' => 'VOCÊ TEM @total_messages@ MENSAGENS NOVAS', |
|
| 436 | + 'info_numero_abbreviation' => 'N° ', |
|
| 437 | + 'info_obligatoire' => 'Esta informação é obrigatória', |
|
| 438 | + 'info_page_actuelle' => 'Página atual', |
|
| 439 | + 'info_pense_bete' => 'LEMBRETE', |
|
| 440 | + 'info_petit_ecran' => 'Baixa resolução', |
|
| 441 | + 'info_petition_close' => 'Petição fechada', |
|
| 442 | + 'info_pixels' => 'pixels', |
|
| 443 | + 'info_plusieurs_mots_trouves' => 'Várias palavras-chave encontradas para "@cherche_mot@":', |
|
| 444 | + 'info_portfolio_automatique' => 'Portfólio automático:', |
|
| 445 | + 'info_premier_resultat' => '[@debut_limit@ primeiros resultados de @total@]', |
|
| 446 | + 'info_premier_resultat_sur' => '[@debut_limit@ primeiros resultados de @total@]', |
|
| 447 | + 'info_propose_1' => '[@nom_site_spip@] Propõe: @titre@', |
|
| 448 | + 'info_propose_2' => 'Matéria proposta |
|
| 449 | 449 | ----------------', |
| 450 | - 'info_propose_3' => 'A matéria "@titre@" foi proposta para publicação.', |
|
| 451 | - 'info_propose_4' => 'Você está convidado a consultá-la e dar sua opinião', |
|
| 452 | - 'info_propose_5' => 'no fórum a ela anexado. Ela está disponível no endereço:', |
|
| 453 | - 'info_publie_01' => 'A matéria "@titre@" foi validada por @connect_nom@.', |
|
| 454 | - 'info_publie_1' => '[@nom_site_spip@] PUBLICADO: @titre@', |
|
| 455 | - 'info_publie_2' => 'Matéria publicada |
|
| 450 | + 'info_propose_3' => 'A matéria "@titre@" foi proposta para publicação.', |
|
| 451 | + 'info_propose_4' => 'Você está convidado a consultá-la e dar sua opinião', |
|
| 452 | + 'info_propose_5' => 'no fórum a ela anexado. Ela está disponível no endereço:', |
|
| 453 | + 'info_publie_01' => 'A matéria "@titre@" foi validada por @connect_nom@.', |
|
| 454 | + 'info_publie_1' => '[@nom_site_spip@] PUBLICADO: @titre@', |
|
| 455 | + 'info_publie_2' => 'Matéria publicada |
|
| 456 | 456 | -----------------', |
| 457 | - 'info_rechercher' => 'Procurar', |
|
| 458 | - 'info_rechercher_02' => 'Procurar:', |
|
| 459 | - 'info_remplacer_vignette' => 'Substituir o ícone padrão por um logo personalizado:', |
|
| 460 | - 'info_rubriques_nb' => '@nb@ seções', |
|
| 461 | - 'info_rubriques_un' => '1 seção', |
|
| 462 | - 'info_sans_titre_2' => 'sem título', |
|
| 463 | - 'info_selectionner_fichier' => 'Você pode escolher um arquivo do diretório @upload@', |
|
| 464 | - 'info_selectionner_fichier_2' => 'Selecionar um arquivo:', |
|
| 465 | - 'info_sites_nb' => '@nb@ sites', |
|
| 466 | - 'info_sites_un' => '1 site', |
|
| 467 | - 'info_supprimer_vignette' => 'excluir o ícone', |
|
| 468 | - 'info_symbole_bleu' => 'O ícone <b>azul</b> indica um <b>lembrete</b>: ou seja, uma mensagem para seu uso pessoal.', |
|
| 469 | - 'info_symbole_jaune' => 'O ícone <b>amarelo</b> indica um <b>anúncio para todos os redatores</b>: modificável por todos os administradores, e visível por todos os redatores.', |
|
| 470 | - 'info_symbole_vert' => 'O ícone <b>verde</b> indica as <b>mensagens trocadas com outros usuários</b> do site.', |
|
| 471 | - 'info_telecharger_nouveau_logo' => 'Transferir um novo logo:', |
|
| 472 | - 'info_telecharger_ordinateur' => 'Tranferir do seu computador:', |
|
| 473 | - 'info_tous_resultats_enregistres' => '[todos os resultados são gravados]', |
|
| 474 | - 'info_tout_afficher' => 'Mostrar todas', |
|
| 475 | - 'info_travaux_texte' => 'Este site ainda não está configurado. Volte mais tarde...', |
|
| 476 | - 'info_travaux_titre' => 'Site em manutenção', |
|
| 477 | - 'info_trop_resultat' => 'Resultados de mais para "@cherche_mot@"; por favor, refine a busca.', |
|
| 478 | - 'info_utilisation_messagerie_interne' => 'Você usa o sistema interno de mensagens deste site.', |
|
| 479 | - 'info_valider_lien' => 'validar este link', |
|
| 480 | - 'info_verifier_image' => ', verifique se as suas imagens foram transferidas corretamente.', |
|
| 481 | - 'info_vignette_defaut' => 'Ícone padrão', |
|
| 482 | - 'info_vignette_personnalisee' => 'Ícone personalizado', |
|
| 483 | - 'info_visite' => 'visita:', |
|
| 484 | - 'info_vos_rendez_vous' => 'Seus encontros futuros', |
|
| 485 | - 'infos_vos_pense_bete' => 'Seus lembretes', |
|
| 457 | + 'info_rechercher' => 'Procurar', |
|
| 458 | + 'info_rechercher_02' => 'Procurar:', |
|
| 459 | + 'info_remplacer_vignette' => 'Substituir o ícone padrão por um logo personalizado:', |
|
| 460 | + 'info_rubriques_nb' => '@nb@ seções', |
|
| 461 | + 'info_rubriques_un' => '1 seção', |
|
| 462 | + 'info_sans_titre_2' => 'sem título', |
|
| 463 | + 'info_selectionner_fichier' => 'Você pode escolher um arquivo do diretório @upload@', |
|
| 464 | + 'info_selectionner_fichier_2' => 'Selecionar um arquivo:', |
|
| 465 | + 'info_sites_nb' => '@nb@ sites', |
|
| 466 | + 'info_sites_un' => '1 site', |
|
| 467 | + 'info_supprimer_vignette' => 'excluir o ícone', |
|
| 468 | + 'info_symbole_bleu' => 'O ícone <b>azul</b> indica um <b>lembrete</b>: ou seja, uma mensagem para seu uso pessoal.', |
|
| 469 | + 'info_symbole_jaune' => 'O ícone <b>amarelo</b> indica um <b>anúncio para todos os redatores</b>: modificável por todos os administradores, e visível por todos os redatores.', |
|
| 470 | + 'info_symbole_vert' => 'O ícone <b>verde</b> indica as <b>mensagens trocadas com outros usuários</b> do site.', |
|
| 471 | + 'info_telecharger_nouveau_logo' => 'Transferir um novo logo:', |
|
| 472 | + 'info_telecharger_ordinateur' => 'Tranferir do seu computador:', |
|
| 473 | + 'info_tous_resultats_enregistres' => '[todos os resultados são gravados]', |
|
| 474 | + 'info_tout_afficher' => 'Mostrar todas', |
|
| 475 | + 'info_travaux_texte' => 'Este site ainda não está configurado. Volte mais tarde...', |
|
| 476 | + 'info_travaux_titre' => 'Site em manutenção', |
|
| 477 | + 'info_trop_resultat' => 'Resultados de mais para "@cherche_mot@"; por favor, refine a busca.', |
|
| 478 | + 'info_utilisation_messagerie_interne' => 'Você usa o sistema interno de mensagens deste site.', |
|
| 479 | + 'info_valider_lien' => 'validar este link', |
|
| 480 | + 'info_verifier_image' => ', verifique se as suas imagens foram transferidas corretamente.', |
|
| 481 | + 'info_vignette_defaut' => 'Ícone padrão', |
|
| 482 | + 'info_vignette_personnalisee' => 'Ícone personalizado', |
|
| 483 | + 'info_visite' => 'visita:', |
|
| 484 | + 'info_vos_rendez_vous' => 'Seus encontros futuros', |
|
| 485 | + 'infos_vos_pense_bete' => 'Seus lembretes', |
|
| 486 | 486 | |
| 487 | - // L |
|
| 488 | - 'label_ajout_id_rapide' => 'Ajuda rápida', |
|
| 489 | - 'label_poids_fichier' => 'Tamanho', |
|
| 490 | - 'label_ponctuer' => '@label@:', |
|
| 491 | - 'lien_afficher_icones_seuls' => 'Exibir apenas os ícones', |
|
| 492 | - 'lien_afficher_texte_icones' => 'Exibir ícones e texto', |
|
| 493 | - 'lien_afficher_texte_seul' => 'Exibir apenas o texto', |
|
| 494 | - 'lien_aller_a_la_derniere_page' => 'Ir para a última página', |
|
| 495 | - 'lien_aller_a_la_page_nb' => 'Ir para a página @nb@', |
|
| 496 | - 'lien_aller_a_la_page_precedente' => 'Ir para a página anterior', |
|
| 497 | - 'lien_aller_a_la_page_suivante' => 'Ir para a página seguinte', |
|
| 498 | - 'lien_aller_a_la_premiere_page' => 'Ir para a primeira página', |
|
| 499 | - 'lien_liberer' => 'liberar', |
|
| 500 | - 'lien_liberer_tous' => 'liberar todas', |
|
| 501 | - 'lien_nouvea_pense_bete' => 'NOVO LEMBRETE', |
|
| 502 | - 'lien_nouveau_message' => 'NOVA MENSAGEM', |
|
| 503 | - 'lien_nouvelle_annonce' => 'NOVO ANÚNCIO', |
|
| 504 | - 'lien_petitions' => 'PETIÇÃO', |
|
| 505 | - 'lien_popularite' => 'popularidade: @popularite@%', |
|
| 506 | - 'lien_racine_site' => 'RAIZ DO SITE', |
|
| 507 | - 'lien_reessayer' => 'tente novamente', |
|
| 508 | - 'lien_repondre_message' => 'Responder a esta mensagem', |
|
| 509 | - 'lien_supprimer' => 'excluir', |
|
| 510 | - 'lien_tout_afficher' => 'Mostrar tudo', |
|
| 511 | - 'lien_visite_site' => 'visitar este site', |
|
| 512 | - 'lien_visites' => '@visites@ visitas', |
|
| 513 | - 'lien_voir_auteur' => 'Ver este autor', |
|
| 514 | - 'ligne' => 'Linha', |
|
| 515 | - 'login' => 'Conexão', |
|
| 516 | - 'login_acces_prive' => 'acesso ao espaço privado', |
|
| 517 | - 'login_autre_identifiant' => 'conectar-se com outra identificação', |
|
| 518 | - 'login_cookie_accepte' => 'Por favor, configure o seu navegador para aceitá-los (pelo menos para este site).', |
|
| 519 | - 'login_cookie_oblige' => 'Para você se identificar de modo seguro neste site, você precisa aceitar cookies.', |
|
| 520 | - 'login_deconnexion_ok' => 'Desconexão efetuada.', |
|
| 521 | - 'login_erreur_pass' => 'Erro de senha.', |
|
| 522 | - 'login_espace_prive' => 'espaço privado', |
|
| 523 | - 'login_identifiant_inconnu' => 'O identificador «@login@» não está cadastrado.', |
|
| 524 | - 'login_login' => 'Login:', |
|
| 525 | - 'login_login2' => 'Login', |
|
| 526 | - 'login_login_pass_incorrect' => '(Login ou senha incorreta.)', |
|
| 527 | - 'login_motpasseoublie' => 'esqueceu sua senha?', |
|
| 528 | - 'login_non_securise' => 'Atenção, este formulário não é seguro. |
|
| 487 | + // L |
|
| 488 | + 'label_ajout_id_rapide' => 'Ajuda rápida', |
|
| 489 | + 'label_poids_fichier' => 'Tamanho', |
|
| 490 | + 'label_ponctuer' => '@label@:', |
|
| 491 | + 'lien_afficher_icones_seuls' => 'Exibir apenas os ícones', |
|
| 492 | + 'lien_afficher_texte_icones' => 'Exibir ícones e texto', |
|
| 493 | + 'lien_afficher_texte_seul' => 'Exibir apenas o texto', |
|
| 494 | + 'lien_aller_a_la_derniere_page' => 'Ir para a última página', |
|
| 495 | + 'lien_aller_a_la_page_nb' => 'Ir para a página @nb@', |
|
| 496 | + 'lien_aller_a_la_page_precedente' => 'Ir para a página anterior', |
|
| 497 | + 'lien_aller_a_la_page_suivante' => 'Ir para a página seguinte', |
|
| 498 | + 'lien_aller_a_la_premiere_page' => 'Ir para a primeira página', |
|
| 499 | + 'lien_liberer' => 'liberar', |
|
| 500 | + 'lien_liberer_tous' => 'liberar todas', |
|
| 501 | + 'lien_nouvea_pense_bete' => 'NOVO LEMBRETE', |
|
| 502 | + 'lien_nouveau_message' => 'NOVA MENSAGEM', |
|
| 503 | + 'lien_nouvelle_annonce' => 'NOVO ANÚNCIO', |
|
| 504 | + 'lien_petitions' => 'PETIÇÃO', |
|
| 505 | + 'lien_popularite' => 'popularidade: @popularite@%', |
|
| 506 | + 'lien_racine_site' => 'RAIZ DO SITE', |
|
| 507 | + 'lien_reessayer' => 'tente novamente', |
|
| 508 | + 'lien_repondre_message' => 'Responder a esta mensagem', |
|
| 509 | + 'lien_supprimer' => 'excluir', |
|
| 510 | + 'lien_tout_afficher' => 'Mostrar tudo', |
|
| 511 | + 'lien_visite_site' => 'visitar este site', |
|
| 512 | + 'lien_visites' => '@visites@ visitas', |
|
| 513 | + 'lien_voir_auteur' => 'Ver este autor', |
|
| 514 | + 'ligne' => 'Linha', |
|
| 515 | + 'login' => 'Conexão', |
|
| 516 | + 'login_acces_prive' => 'acesso ao espaço privado', |
|
| 517 | + 'login_autre_identifiant' => 'conectar-se com outra identificação', |
|
| 518 | + 'login_cookie_accepte' => 'Por favor, configure o seu navegador para aceitá-los (pelo menos para este site).', |
|
| 519 | + 'login_cookie_oblige' => 'Para você se identificar de modo seguro neste site, você precisa aceitar cookies.', |
|
| 520 | + 'login_deconnexion_ok' => 'Desconexão efetuada.', |
|
| 521 | + 'login_erreur_pass' => 'Erro de senha.', |
|
| 522 | + 'login_espace_prive' => 'espaço privado', |
|
| 523 | + 'login_identifiant_inconnu' => 'O identificador «@login@» não está cadastrado.', |
|
| 524 | + 'login_login' => 'Login:', |
|
| 525 | + 'login_login2' => 'Login', |
|
| 526 | + 'login_login_pass_incorrect' => '(Login ou senha incorreta.)', |
|
| 527 | + 'login_motpasseoublie' => 'esqueceu sua senha?', |
|
| 528 | + 'login_non_securise' => 'Atenção, este formulário não é seguro. |
|
| 529 | 529 | Se você não quiser que a sua senha possa ser interceptada na rede, por favor ative o Javascript no seu navegador e', |
| 530 | - 'login_nouvelle_tentative' => 'Tentar novamente', |
|
| 531 | - 'login_par_ici' => 'VocÊ está registrado... por aqui...', |
|
| 532 | - 'login_pass2' => 'Senha:', |
|
| 533 | - 'login_preferez_refuser' => '<b>Se você prefere recusar os cookies</b>, um outro método de conexão (menos seguro) está disponível:', |
|
| 534 | - 'login_recharger' => 'atualizar esta página', |
|
| 535 | - 'login_rester_identifie' => 'Manter-se identificado', |
|
| 536 | - 'login_retour_public' => 'Voltar ao site público', |
|
| 537 | - 'login_retour_site' => 'Voltar ao site público', |
|
| 538 | - 'login_retoursitepublic' => 'voltar ao site público', |
|
| 539 | - 'login_sans_cookie' => 'Identificação sem cookie', |
|
| 540 | - 'login_securise' => 'Login seguro', |
|
| 541 | - 'login_sinscrire' => 'cadastrar-se', |
|
| 542 | - 'login_test_navigateur' => 'testar navegador/reconexão', |
|
| 543 | - 'login_verifiez_navigateur' => '(Verifique sempre se o seu navegador não está memorizando a sua senha...)', |
|
| 530 | + 'login_nouvelle_tentative' => 'Tentar novamente', |
|
| 531 | + 'login_par_ici' => 'VocÊ está registrado... por aqui...', |
|
| 532 | + 'login_pass2' => 'Senha:', |
|
| 533 | + 'login_preferez_refuser' => '<b>Se você prefere recusar os cookies</b>, um outro método de conexão (menos seguro) está disponível:', |
|
| 534 | + 'login_recharger' => 'atualizar esta página', |
|
| 535 | + 'login_rester_identifie' => 'Manter-se identificado', |
|
| 536 | + 'login_retour_public' => 'Voltar ao site público', |
|
| 537 | + 'login_retour_site' => 'Voltar ao site público', |
|
| 538 | + 'login_retoursitepublic' => 'voltar ao site público', |
|
| 539 | + 'login_sans_cookie' => 'Identificação sem cookie', |
|
| 540 | + 'login_securise' => 'Login seguro', |
|
| 541 | + 'login_sinscrire' => 'cadastrar-se', |
|
| 542 | + 'login_test_navigateur' => 'testar navegador/reconexão', |
|
| 543 | + 'login_verifiez_navigateur' => '(Verifique sempre se o seu navegador não está memorizando a sua senha...)', |
|
| 544 | 544 | |
| 545 | - // M |
|
| 546 | - 'masquer_colonne' => 'Ocultar esta coluna', |
|
| 547 | - 'masquer_trad' => 'esconder as traduções', |
|
| 548 | - 'message_nouveaux_identifiants_echec' => 'Impossível criar novos logins.', |
|
| 549 | - 'message_nouveaux_identifiants_echec_envoi' => 'Os novos logins de conexão não puderam ser enviados.', |
|
| 550 | - 'message_nouveaux_identifiants_ok' => 'Os novos logins de conexão foram enviados para @email@.', |
|
| 551 | - 'module_fichiers_langues' => 'Arquivos de idioma', |
|
| 545 | + // M |
|
| 546 | + 'masquer_colonne' => 'Ocultar esta coluna', |
|
| 547 | + 'masquer_trad' => 'esconder as traduções', |
|
| 548 | + 'message_nouveaux_identifiants_echec' => 'Impossível criar novos logins.', |
|
| 549 | + 'message_nouveaux_identifiants_echec_envoi' => 'Os novos logins de conexão não puderam ser enviados.', |
|
| 550 | + 'message_nouveaux_identifiants_ok' => 'Os novos logins de conexão foram enviados para @email@.', |
|
| 551 | + 'module_fichiers_langues' => 'Arquivos de idioma', |
|
| 552 | 552 | |
| 553 | - // N |
|
| 554 | - 'navigateur_pas_redirige' => 'Se o seu navegador não o redirecionar, clique aqui para continuar.', |
|
| 555 | - 'numero' => 'Número', |
|
| 553 | + // N |
|
| 554 | + 'navigateur_pas_redirige' => 'Se o seu navegador não o redirecionar, clique aqui para continuar.', |
|
| 555 | + 'numero' => 'Número', |
|
| 556 | 556 | |
| 557 | - // O |
|
| 558 | - 'occurence' => 'Ocorrência', |
|
| 559 | - 'onglet_affacer_base' => 'Apagar a base', |
|
| 560 | - 'onglet_auteur' => 'O autor', |
|
| 561 | - 'onglet_contenu_site' => 'Conteúdo do site', |
|
| 562 | - 'onglet_evolution_visite_mod' => 'Evolução', |
|
| 563 | - 'onglet_fonctions_avances' => 'Funções avançadas', |
|
| 564 | - 'onglet_informations_personnelles' => 'Informações pessoais', |
|
| 565 | - 'onglet_interactivite' => 'Interatividade', |
|
| 566 | - 'onglet_messagerie' => 'Sistema de mensagens', |
|
| 567 | - 'onglet_repartition_rubrique' => 'Repartição por seções', |
|
| 568 | - 'onglet_save_restaur_base' => 'Fazer cópia de segurança/restaurar a base', |
|
| 569 | - 'onglet_vider_cache' => 'Esvaziar o cache', |
|
| 557 | + // O |
|
| 558 | + 'occurence' => 'Ocorrência', |
|
| 559 | + 'onglet_affacer_base' => 'Apagar a base', |
|
| 560 | + 'onglet_auteur' => 'O autor', |
|
| 561 | + 'onglet_contenu_site' => 'Conteúdo do site', |
|
| 562 | + 'onglet_evolution_visite_mod' => 'Evolução', |
|
| 563 | + 'onglet_fonctions_avances' => 'Funções avançadas', |
|
| 564 | + 'onglet_informations_personnelles' => 'Informações pessoais', |
|
| 565 | + 'onglet_interactivite' => 'Interatividade', |
|
| 566 | + 'onglet_messagerie' => 'Sistema de mensagens', |
|
| 567 | + 'onglet_repartition_rubrique' => 'Repartição por seções', |
|
| 568 | + 'onglet_save_restaur_base' => 'Fazer cópia de segurança/restaurar a base', |
|
| 569 | + 'onglet_vider_cache' => 'Esvaziar o cache', |
|
| 570 | 570 | |
| 571 | - // P |
|
| 572 | - 'pass_choix_pass' => 'Por favor, escolha a sua nova senha:', |
|
| 573 | - 'pass_erreur' => 'Erro', |
|
| 574 | - 'pass_erreur_acces_refuse' => '<b>Erro:</b> você não tem mais acesso a este site.', |
|
| 575 | - 'pass_erreur_code_inconnu' => '<b>Erro:</b> este login não corresponde a nenhum visitante com permissão de acesso a este site.', |
|
| 576 | - 'pass_erreur_non_enregistre' => '<b>Erro:</b> o e-mail <tt>@email_oubli@</tt> não está cadastrado neste site.', |
|
| 577 | - 'pass_erreur_non_valide' => '<b>Erro:</b> o e-mail <tt>@email_oubli@</tt> não é válido!', |
|
| 578 | - 'pass_erreur_probleme_technique' => '<b>Erro:</b> este e-mail não pôde ser enviado devido a um problema técnico.', |
|
| 579 | - 'pass_espace_prive_bla' => 'O espaço privado deste site é aberto aos visitantes, após inscrição. Uma vez cadastrado, você poderá consultar as matérias em fase de redação, propor a publicação de novas matérias e participar de todos os fóruns.', |
|
| 580 | - 'pass_forum_bla' => 'Você soliciou a participação num fórum reservado a visitantes registrados.', |
|
| 581 | - 'pass_indiquez_cidessous' => 'Informe abaixo o endereço de e-mail com o qual você se cadastrou anteriormente. Você receberá um e-mail lhe indicando os procedimentos a seguir para recuperar o seu acesso.', |
|
| 582 | - 'pass_mail_passcookie' => '(esta é uma mensagem automática) |
|
| 571 | + // P |
|
| 572 | + 'pass_choix_pass' => 'Por favor, escolha a sua nova senha:', |
|
| 573 | + 'pass_erreur' => 'Erro', |
|
| 574 | + 'pass_erreur_acces_refuse' => '<b>Erro:</b> você não tem mais acesso a este site.', |
|
| 575 | + 'pass_erreur_code_inconnu' => '<b>Erro:</b> este login não corresponde a nenhum visitante com permissão de acesso a este site.', |
|
| 576 | + 'pass_erreur_non_enregistre' => '<b>Erro:</b> o e-mail <tt>@email_oubli@</tt> não está cadastrado neste site.', |
|
| 577 | + 'pass_erreur_non_valide' => '<b>Erro:</b> o e-mail <tt>@email_oubli@</tt> não é válido!', |
|
| 578 | + 'pass_erreur_probleme_technique' => '<b>Erro:</b> este e-mail não pôde ser enviado devido a um problema técnico.', |
|
| 579 | + 'pass_espace_prive_bla' => 'O espaço privado deste site é aberto aos visitantes, após inscrição. Uma vez cadastrado, você poderá consultar as matérias em fase de redação, propor a publicação de novas matérias e participar de todos os fóruns.', |
|
| 580 | + 'pass_forum_bla' => 'Você soliciou a participação num fórum reservado a visitantes registrados.', |
|
| 581 | + 'pass_indiquez_cidessous' => 'Informe abaixo o endereço de e-mail com o qual você se cadastrou anteriormente. Você receberá um e-mail lhe indicando os procedimentos a seguir para recuperar o seu acesso.', |
|
| 582 | + 'pass_mail_passcookie' => '(esta é uma mensagem automática) |
|
| 583 | 583 | Para recuperar o seu acesso ao site |
| 584 | 584 | @nom_site_spip@ (@adresse_site@) |
| 585 | 585 | |
@@ -591,136 +591,136 @@ discard block |
||
| 591 | 591 | e reconectar-se com o site. |
| 592 | 592 | |
| 593 | 593 | ', |
| 594 | - 'pass_mot_oublie' => 'Senha esquecida', |
|
| 595 | - 'pass_nouveau_enregistre' => 'Sua nova senha foi cadastrada.', |
|
| 596 | - 'pass_nouveau_pass' => 'Nova senha', |
|
| 597 | - 'pass_ok' => 'OK', |
|
| 598 | - 'pass_oubli_mot' => 'Esquecimento de senha', |
|
| 599 | - 'pass_procedure_changer' => 'Para alterar a sua senha, por favor informe o endereço de e-mail associado à sua conta.', |
|
| 600 | - 'pass_quitter_fenetre' => 'Fechar esta janela', |
|
| 601 | - 'pass_rappel_login' => 'Lembrete: seu login é «@login@».', |
|
| 602 | - 'pass_recevoir_mail' => 'Um link para redefinição da sua senha foi enviado para o seu endereço de e-mail (se ele for válido).', |
|
| 603 | - 'pass_retour_public' => 'Voltar para o site público', |
|
| 604 | - 'pass_rien_a_faire_ici' => 'Nada a fazer aqui.', |
|
| 605 | - 'pass_vousinscrire' => 'Cadastrar-se neste site', |
|
| 606 | - 'precedent' => 'precedente', |
|
| 607 | - 'previsualisation' => 'Visualização', |
|
| 608 | - 'previsualiser' => 'Visualizar', |
|
| 594 | + 'pass_mot_oublie' => 'Senha esquecida', |
|
| 595 | + 'pass_nouveau_enregistre' => 'Sua nova senha foi cadastrada.', |
|
| 596 | + 'pass_nouveau_pass' => 'Nova senha', |
|
| 597 | + 'pass_ok' => 'OK', |
|
| 598 | + 'pass_oubli_mot' => 'Esquecimento de senha', |
|
| 599 | + 'pass_procedure_changer' => 'Para alterar a sua senha, por favor informe o endereço de e-mail associado à sua conta.', |
|
| 600 | + 'pass_quitter_fenetre' => 'Fechar esta janela', |
|
| 601 | + 'pass_rappel_login' => 'Lembrete: seu login é «@login@».', |
|
| 602 | + 'pass_recevoir_mail' => 'Um link para redefinição da sua senha foi enviado para o seu endereço de e-mail (se ele for válido).', |
|
| 603 | + 'pass_retour_public' => 'Voltar para o site público', |
|
| 604 | + 'pass_rien_a_faire_ici' => 'Nada a fazer aqui.', |
|
| 605 | + 'pass_vousinscrire' => 'Cadastrar-se neste site', |
|
| 606 | + 'precedent' => 'precedente', |
|
| 607 | + 'previsualisation' => 'Visualização', |
|
| 608 | + 'previsualiser' => 'Visualizar', |
|
| 609 | 609 | |
| 610 | - // R |
|
| 611 | - 'retour' => 'Voltar', |
|
| 610 | + // R |
|
| 611 | + 'retour' => 'Voltar', |
|
| 612 | 612 | |
| 613 | - // S |
|
| 614 | - 'spip_conforme_dtd' => 'O SPIP considera este documento de acordo com o seu DOCTYPE:', |
|
| 615 | - 'squelette' => 'template', |
|
| 616 | - 'squelette_inclus_ligne' => 'template incluído, linha', |
|
| 617 | - 'squelette_ligne' => 'template, linha', |
|
| 618 | - 'stats_visites_et_popularite' => '@visites@ visitas; popularidade: @popularite@', |
|
| 619 | - 'suivant' => 'seguinte', |
|
| 613 | + // S |
|
| 614 | + 'spip_conforme_dtd' => 'O SPIP considera este documento de acordo com o seu DOCTYPE:', |
|
| 615 | + 'squelette' => 'template', |
|
| 616 | + 'squelette_inclus_ligne' => 'template incluído, linha', |
|
| 617 | + 'squelette_ligne' => 'template, linha', |
|
| 618 | + 'stats_visites_et_popularite' => '@visites@ visitas; popularidade: @popularite@', |
|
| 619 | + 'suivant' => 'seguinte', |
|
| 620 | 620 | |
| 621 | - // T |
|
| 622 | - 'taille_go' => '@taille@ GB', |
|
| 623 | - 'taille_ko' => '@taille@ KB', |
|
| 624 | - 'taille_mo' => '@taille@ MB', |
|
| 625 | - 'taille_octets' => ' @taille@ bytes', |
|
| 626 | - 'texte_actualite_site_1' => 'Quando você estiver mais familiarizado com a interface, clique em «', |
|
| 627 | - 'texte_actualite_site_2' => 'interface completa', |
|
| 628 | - 'texte_actualite_site_3' => '» para abrir mais possibilidades.', |
|
| 629 | - 'texte_creation_automatique_vignette' => 'A criação automática de ícones de visualização está ativada neste site. Se você transferir por este formulário imagens no(s) formato(s) @gd_formats@, elas serão acompanhadas de um ícone com o tamanho máximo de @taille_preview@ pixels.', |
|
| 630 | - 'texte_documents_associes' => 'Os documentos a seguir estão associados à matéria, |
|
| 621 | + // T |
|
| 622 | + 'taille_go' => '@taille@ GB', |
|
| 623 | + 'taille_ko' => '@taille@ KB', |
|
| 624 | + 'taille_mo' => '@taille@ MB', |
|
| 625 | + 'taille_octets' => ' @taille@ bytes', |
|
| 626 | + 'texte_actualite_site_1' => 'Quando você estiver mais familiarizado com a interface, clique em «', |
|
| 627 | + 'texte_actualite_site_2' => 'interface completa', |
|
| 628 | + 'texte_actualite_site_3' => '» para abrir mais possibilidades.', |
|
| 629 | + 'texte_creation_automatique_vignette' => 'A criação automática de ícones de visualização está ativada neste site. Se você transferir por este formulário imagens no(s) formato(s) @gd_formats@, elas serão acompanhadas de um ícone com o tamanho máximo de @taille_preview@ pixels.', |
|
| 630 | + 'texte_documents_associes' => 'Os documentos a seguir estão associados à matéria, |
|
| 631 | 631 | mas eles não foram inseridos diretamente. Dependendo da elaboração dos templates do site público, eles podem aparecer como documentos anexados.', |
| 632 | - 'texte_erreur_mise_niveau_base' => 'Erro da base de dados durante a atualização. |
|
| 632 | + 'texte_erreur_mise_niveau_base' => 'Erro da base de dados durante a atualização. |
|
| 633 | 633 | A imagem <b>@fichier@</b> não passou (matéria @id_article@). |
| 634 | 634 | Anote esta referência, tente novamente a atualização e, finalmente, verifique se as imagens aparecem nas matérias.', |
| 635 | - 'texte_erreur_visiteur' => 'Você tentou acessar o espaço restrito com um login que não tem a permissão necessária.', |
|
| 636 | - 'texte_inc_auth_1' => 'Você se identificou com o login <b>@auth_login@</b>, mas ele não consta (mais) na base. |
|
| 635 | + 'texte_erreur_visiteur' => 'Você tentou acessar o espaço restrito com um login que não tem a permissão necessária.', |
|
| 636 | + 'texte_inc_auth_1' => 'Você se identificou com o login <b>@auth_login@</b>, mas ele não consta (mais) na base. |
|
| 637 | 637 | Tente se', |
| 638 | - 'texte_inc_auth_2' => 'reconectar', |
|
| 639 | - 'texte_inc_auth_3' => ', após ter eventualmente saído e reiniciado o seu navegador.', |
|
| 640 | - 'texte_inc_config' => 'As modificações efetuadas nestas páginas influem consideravelmente no funcionamento do seu site. É recomendável não intervir enquanto você não estiver familiarizado com o funcionamento do sistema SPIP.<br /><br /><b>Geralmente, é fortemente aconselhável deixar a carga destas páginas para o webmaster principal do seu site.</b>', |
|
| 641 | - 'texte_inc_meta_1' => 'O sistema encontrou um erro durante a escrita do arquivo <code>@fichier@</code>. Como administrador do site, queira por favor,', |
|
| 642 | - 'texte_inc_meta_2' => 'Verificar os direitos de escrita', |
|
| 643 | - 'texte_inc_meta_3' => 'no diretório <code>@repertoire@</code>.', |
|
| 644 | - 'texte_statut_en_cours_redaction' => 'em fase de redação', |
|
| 645 | - 'texte_statut_poubelle' => 'na lixeira', |
|
| 646 | - 'texte_statut_propose_evaluation' => 'proposto para avaliação', |
|
| 647 | - 'texte_statut_publie' => 'publicado online', |
|
| 648 | - 'texte_statut_refuse' => 'recusado', |
|
| 649 | - 'titre_ajouter_mot_cle' => 'INCLUIR UMA PALAVRA-CHAVE:', |
|
| 650 | - 'titre_cadre_raccourcis' => 'ATALHOS:', |
|
| 651 | - 'titre_changer_couleur_interface' => 'Alterar a côr da interface', |
|
| 652 | - 'titre_image_admin_article' => 'Você pode administrar esta matéria', |
|
| 653 | - 'titre_image_administrateur' => 'Administrador', |
|
| 654 | - 'titre_image_aide' => 'Ajuda sobre este elemento', |
|
| 655 | - 'titre_image_auteur_supprime' => 'Autor excluído', |
|
| 656 | - 'titre_image_redacteur' => 'Redator sem acesso', |
|
| 657 | - 'titre_image_redacteur_02' => 'Redator', |
|
| 658 | - 'titre_image_selecteur' => 'Ver a lista', |
|
| 659 | - 'titre_image_visiteur' => 'Visitante', |
|
| 660 | - 'titre_joindre_document' => 'INCLUIR UM DOCUMENTO', |
|
| 661 | - 'titre_mots_cles' => 'PALAVRAS-CHAVE', |
|
| 662 | - 'titre_probleme_technique' => 'Atenção: um problema técnico (servidor SQL) impede o acesso a esta parte do site. Agradecemos sua compreensão.', |
|
| 663 | - 'titre_publier_document' => 'PUBLICAR UM DOCUMENTO NESTA SEÇÃO', |
|
| 664 | - 'titre_signatures_attente' => 'Assinaturas aguardando validação', |
|
| 665 | - 'titre_signatures_confirmees' => 'Assinaturas confirmadas', |
|
| 666 | - 'titre_statistiques' => 'Estatísticas do site', |
|
| 667 | - 'titre_titre_document' => 'Título do documento:', |
|
| 668 | - 'todo' => 'breve', |
|
| 669 | - 'trad_definir_reference' => 'Escolher "@titre@" como referência das traduções', |
|
| 670 | - 'trad_reference' => '(matéria das traduções)', |
|
| 638 | + 'texte_inc_auth_2' => 'reconectar', |
|
| 639 | + 'texte_inc_auth_3' => ', após ter eventualmente saído e reiniciado o seu navegador.', |
|
| 640 | + 'texte_inc_config' => 'As modificações efetuadas nestas páginas influem consideravelmente no funcionamento do seu site. É recomendável não intervir enquanto você não estiver familiarizado com o funcionamento do sistema SPIP.<br /><br /><b>Geralmente, é fortemente aconselhável deixar a carga destas páginas para o webmaster principal do seu site.</b>', |
|
| 641 | + 'texte_inc_meta_1' => 'O sistema encontrou um erro durante a escrita do arquivo <code>@fichier@</code>. Como administrador do site, queira por favor,', |
|
| 642 | + 'texte_inc_meta_2' => 'Verificar os direitos de escrita', |
|
| 643 | + 'texte_inc_meta_3' => 'no diretório <code>@repertoire@</code>.', |
|
| 644 | + 'texte_statut_en_cours_redaction' => 'em fase de redação', |
|
| 645 | + 'texte_statut_poubelle' => 'na lixeira', |
|
| 646 | + 'texte_statut_propose_evaluation' => 'proposto para avaliação', |
|
| 647 | + 'texte_statut_publie' => 'publicado online', |
|
| 648 | + 'texte_statut_refuse' => 'recusado', |
|
| 649 | + 'titre_ajouter_mot_cle' => 'INCLUIR UMA PALAVRA-CHAVE:', |
|
| 650 | + 'titre_cadre_raccourcis' => 'ATALHOS:', |
|
| 651 | + 'titre_changer_couleur_interface' => 'Alterar a côr da interface', |
|
| 652 | + 'titre_image_admin_article' => 'Você pode administrar esta matéria', |
|
| 653 | + 'titre_image_administrateur' => 'Administrador', |
|
| 654 | + 'titre_image_aide' => 'Ajuda sobre este elemento', |
|
| 655 | + 'titre_image_auteur_supprime' => 'Autor excluído', |
|
| 656 | + 'titre_image_redacteur' => 'Redator sem acesso', |
|
| 657 | + 'titre_image_redacteur_02' => 'Redator', |
|
| 658 | + 'titre_image_selecteur' => 'Ver a lista', |
|
| 659 | + 'titre_image_visiteur' => 'Visitante', |
|
| 660 | + 'titre_joindre_document' => 'INCLUIR UM DOCUMENTO', |
|
| 661 | + 'titre_mots_cles' => 'PALAVRAS-CHAVE', |
|
| 662 | + 'titre_probleme_technique' => 'Atenção: um problema técnico (servidor SQL) impede o acesso a esta parte do site. Agradecemos sua compreensão.', |
|
| 663 | + 'titre_publier_document' => 'PUBLICAR UM DOCUMENTO NESTA SEÇÃO', |
|
| 664 | + 'titre_signatures_attente' => 'Assinaturas aguardando validação', |
|
| 665 | + 'titre_signatures_confirmees' => 'Assinaturas confirmadas', |
|
| 666 | + 'titre_statistiques' => 'Estatísticas do site', |
|
| 667 | + 'titre_titre_document' => 'Título do documento:', |
|
| 668 | + 'todo' => 'breve', |
|
| 669 | + 'trad_definir_reference' => 'Escolher "@titre@" como referência das traduções', |
|
| 670 | + 'trad_reference' => '(matéria das traduções)', |
|
| 671 | 671 | |
| 672 | - // U |
|
| 673 | - 'upload_limit' => 'Este arquivo é grande demais para o servidor; o tamanho máximo autorizado para <i>upload</i> é de @max@.', |
|
| 672 | + // U |
|
| 673 | + 'upload_limit' => 'Este arquivo é grande demais para o servidor; o tamanho máximo autorizado para <i>upload</i> é de @max@.', |
|
| 674 | 674 | |
| 675 | - // Z |
|
| 676 | - 'zbug_balise_b_aval' => ': tag B colocada após BOUCLE', |
|
| 677 | - 'zbug_balise_inexistante' => 'Tag @balise@ mal declarada para @from@', |
|
| 678 | - 'zbug_balise_sans_argument' => 'Falta um arqumento na tag @balise@', |
|
| 679 | - 'zbug_boucle' => 'laço', |
|
| 680 | - 'zbug_boucle_recursive_undef' => 'Laço recursivo não definido: @nom@', |
|
| 681 | - 'zbug_calcul' => 'cálculo', |
|
| 682 | - 'zbug_champ_hors_boucle' => 'Campo @champ@ fora do laço', |
|
| 683 | - 'zbug_champ_hors_critere' => 'Campo @champ@ fora do critério @critere@', |
|
| 684 | - 'zbug_champ_hors_motif' => 'Campo @champ@ fora de um contexto @motif@', |
|
| 685 | - 'zbug_code' => 'código', |
|
| 686 | - 'zbug_critere_inconnu' => 'Critério @critere@ desconhecido', |
|
| 687 | - 'zbug_critere_sur_table_sans_cle_primaire' => '{@critere@} em uma tabela sem chave primária atômica', |
|
| 688 | - 'zbug_distant_interdit' => 'Externa interdita', |
|
| 689 | - 'zbug_doublon_table_sans_cle_primaire' => 'Duplicação em tabela sem chave primária atômica', |
|
| 690 | - 'zbug_doublon_table_sans_index' => 'Doublons em uma tabela sem index', |
|
| 691 | - 'zbug_erreur_boucle_double' => 'Dupla definição do laço @id@', |
|
| 692 | - 'zbug_erreur_boucle_fermant' => 'Laço @id@ não fechado', |
|
| 693 | - 'zbug_erreur_boucle_syntaxe' => 'Sintaxe do laço @id@ está incorreta', |
|
| 694 | - 'zbug_erreur_compilation' => 'Erro de compilação', |
|
| 695 | - 'zbug_erreur_execution_page' => 'Erro de execução', |
|
| 696 | - 'zbug_erreur_filtre' => 'Filtro @filtre@ não definido', |
|
| 697 | - 'zbug_erreur_filtre_nbarg_min' => 'Filtro @filtre@: falta(m) @nb@ argumento(s)', |
|
| 698 | - 'zbug_erreur_meme_parent' => 'O critério {meme_parent} aplica-se exclusivamente aos laços (FORUMS) ou (RUBRIQUES)', |
|
| 699 | - 'zbug_erreur_squelette' => 'Erro(s) no template', |
|
| 700 | - 'zbug_hors_compilation' => 'Fora de Compilação', |
|
| 701 | - 'zbug_info_erreur_squelette' => 'Erro no site', |
|
| 702 | - 'zbug_inversion_ordre_inexistant' => 'Inversão de uma ordem inexistente', |
|
| 703 | - 'zbug_pagination_sans_critere' => 'Tag #PAGINATION sem critério {pagination} ou usada dentro de uma boucle recursiva', |
|
| 704 | - 'zbug_parametres_inclus_incorrects' => 'Parâmetro de inclusão incorreto: @param@', |
|
| 705 | - 'zbug_profile' => 'Tempo de processamento: @time@', |
|
| 706 | - 'zbug_resultat' => 'resultado', |
|
| 707 | - 'zbug_serveur_indefini' => 'Sevidor SQL não definido', |
|
| 708 | - 'zbug_statistiques' => 'Estatísticas das requisições SQL classificadas por duração', |
|
| 709 | - 'zbug_table_inconnue' => 'Tabela SQL «@table@» desconhecida', |
|
| 710 | - 'zxml_connus_attributs' => 'atributos conhecidos', |
|
| 711 | - 'zxml_de' => 'de', |
|
| 712 | - 'zxml_inconnu_attribut' => 'atributo desconhecido', |
|
| 713 | - 'zxml_inconnu_balise' => 'tag desconhecida', |
|
| 714 | - 'zxml_inconnu_entite' => 'entidade desconhecida', |
|
| 715 | - 'zxml_inconnu_id' => 'ID desconhecida', |
|
| 716 | - 'zxml_mais_de' => 'mas de', |
|
| 717 | - 'zxml_non_conforme' => 'não está de acordo com o motivo', |
|
| 718 | - 'zxml_non_fils' => 'não é filho de', |
|
| 719 | - 'zxml_nonvide_balise' => 'tag não vazia', |
|
| 720 | - 'zxml_obligatoire_attribut' => 'atributo obrigatório mas ausente em', |
|
| 721 | - 'zxml_succession_fils_incorrecte' => 'sucessão de filhos incorreta', |
|
| 722 | - 'zxml_survoler' => 'sobrepor para ver os corretos', |
|
| 723 | - 'zxml_valeur_attribut' => 'valor do atributo', |
|
| 724 | - 'zxml_vide_balise' => 'tag vazia', |
|
| 725 | - 'zxml_vu' => 'previsualização' |
|
| 675 | + // Z |
|
| 676 | + 'zbug_balise_b_aval' => ': tag B colocada após BOUCLE', |
|
| 677 | + 'zbug_balise_inexistante' => 'Tag @balise@ mal declarada para @from@', |
|
| 678 | + 'zbug_balise_sans_argument' => 'Falta um arqumento na tag @balise@', |
|
| 679 | + 'zbug_boucle' => 'laço', |
|
| 680 | + 'zbug_boucle_recursive_undef' => 'Laço recursivo não definido: @nom@', |
|
| 681 | + 'zbug_calcul' => 'cálculo', |
|
| 682 | + 'zbug_champ_hors_boucle' => 'Campo @champ@ fora do laço', |
|
| 683 | + 'zbug_champ_hors_critere' => 'Campo @champ@ fora do critério @critere@', |
|
| 684 | + 'zbug_champ_hors_motif' => 'Campo @champ@ fora de um contexto @motif@', |
|
| 685 | + 'zbug_code' => 'código', |
|
| 686 | + 'zbug_critere_inconnu' => 'Critério @critere@ desconhecido', |
|
| 687 | + 'zbug_critere_sur_table_sans_cle_primaire' => '{@critere@} em uma tabela sem chave primária atômica', |
|
| 688 | + 'zbug_distant_interdit' => 'Externa interdita', |
|
| 689 | + 'zbug_doublon_table_sans_cle_primaire' => 'Duplicação em tabela sem chave primária atômica', |
|
| 690 | + 'zbug_doublon_table_sans_index' => 'Doublons em uma tabela sem index', |
|
| 691 | + 'zbug_erreur_boucle_double' => 'Dupla definição do laço @id@', |
|
| 692 | + 'zbug_erreur_boucle_fermant' => 'Laço @id@ não fechado', |
|
| 693 | + 'zbug_erreur_boucle_syntaxe' => 'Sintaxe do laço @id@ está incorreta', |
|
| 694 | + 'zbug_erreur_compilation' => 'Erro de compilação', |
|
| 695 | + 'zbug_erreur_execution_page' => 'Erro de execução', |
|
| 696 | + 'zbug_erreur_filtre' => 'Filtro @filtre@ não definido', |
|
| 697 | + 'zbug_erreur_filtre_nbarg_min' => 'Filtro @filtre@: falta(m) @nb@ argumento(s)', |
|
| 698 | + 'zbug_erreur_meme_parent' => 'O critério {meme_parent} aplica-se exclusivamente aos laços (FORUMS) ou (RUBRIQUES)', |
|
| 699 | + 'zbug_erreur_squelette' => 'Erro(s) no template', |
|
| 700 | + 'zbug_hors_compilation' => 'Fora de Compilação', |
|
| 701 | + 'zbug_info_erreur_squelette' => 'Erro no site', |
|
| 702 | + 'zbug_inversion_ordre_inexistant' => 'Inversão de uma ordem inexistente', |
|
| 703 | + 'zbug_pagination_sans_critere' => 'Tag #PAGINATION sem critério {pagination} ou usada dentro de uma boucle recursiva', |
|
| 704 | + 'zbug_parametres_inclus_incorrects' => 'Parâmetro de inclusão incorreto: @param@', |
|
| 705 | + 'zbug_profile' => 'Tempo de processamento: @time@', |
|
| 706 | + 'zbug_resultat' => 'resultado', |
|
| 707 | + 'zbug_serveur_indefini' => 'Sevidor SQL não definido', |
|
| 708 | + 'zbug_statistiques' => 'Estatísticas das requisições SQL classificadas por duração', |
|
| 709 | + 'zbug_table_inconnue' => 'Tabela SQL «@table@» desconhecida', |
|
| 710 | + 'zxml_connus_attributs' => 'atributos conhecidos', |
|
| 711 | + 'zxml_de' => 'de', |
|
| 712 | + 'zxml_inconnu_attribut' => 'atributo desconhecido', |
|
| 713 | + 'zxml_inconnu_balise' => 'tag desconhecida', |
|
| 714 | + 'zxml_inconnu_entite' => 'entidade desconhecida', |
|
| 715 | + 'zxml_inconnu_id' => 'ID desconhecida', |
|
| 716 | + 'zxml_mais_de' => 'mas de', |
|
| 717 | + 'zxml_non_conforme' => 'não está de acordo com o motivo', |
|
| 718 | + 'zxml_non_fils' => 'não é filho de', |
|
| 719 | + 'zxml_nonvide_balise' => 'tag não vazia', |
|
| 720 | + 'zxml_obligatoire_attribut' => 'atributo obrigatório mas ausente em', |
|
| 721 | + 'zxml_succession_fils_incorrecte' => 'sucessão de filhos incorreta', |
|
| 722 | + 'zxml_survoler' => 'sobrepor para ver os corretos', |
|
| 723 | + 'zxml_valeur_attribut' => 'valor do atributo', |
|
| 724 | + 'zxml_vide_balise' => 'tag vazia', |
|
| 725 | + 'zxml_vu' => 'previsualização' |
|
| 726 | 726 | ); |
@@ -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 | include_spip('inc/texte'); |
@@ -42,234 +42,234 @@ discard block |
||
| 42 | 42 | |
| 43 | 43 | function public_composer_dist($squelette, $mime_type, $gram, $source, string $connect = '') { |
| 44 | 44 | |
| 45 | - $skel = null; |
|
| 46 | - $boucle = null; |
|
| 47 | - $nom = calculer_nom_fonction_squel($squelette, $mime_type, $connect); |
|
| 48 | - |
|
| 49 | - // si deja en memoire (INCLURE a repetition) c'est bon. |
|
| 50 | - if (function_exists($nom)) { |
|
| 51 | - return $nom; |
|
| 52 | - } |
|
| 53 | - |
|
| 54 | - if (defined('_VAR_MODE') and _VAR_MODE == 'debug') { |
|
| 55 | - $GLOBALS['debug_objets']['courant'] = $nom; |
|
| 56 | - } |
|
| 57 | - |
|
| 58 | - $phpfile = sous_repertoire(_DIR_SKELS, '', false, true) . $nom . '.php'; |
|
| 59 | - |
|
| 60 | - // si squelette est deja compile et perenne, le charger |
|
| 61 | - if (!squelette_obsolete($phpfile, $source)) { |
|
| 62 | - include_once $phpfile; |
|
| 63 | - #if (!squelette_obsolete($phpfile, $source) |
|
| 64 | - # AND lire_fichier ($phpfile, $skel_code, |
|
| 65 | - # array('critique' => 'oui', 'phpcheck' => 'oui'))){ |
|
| 66 | - ## eval('?'.'>'.$skel_code); |
|
| 67 | - # spip_log($skel_code, 'comp') |
|
| 68 | - #} |
|
| 69 | - } |
|
| 70 | - |
|
| 71 | - if (file_exists($lib = $squelette . '_fonctions' . '.php')) { |
|
| 72 | - include_once $lib; |
|
| 73 | - } |
|
| 74 | - |
|
| 75 | - // tester si le eval ci-dessus a mis le squelette en memoire |
|
| 76 | - |
|
| 77 | - if (function_exists($nom)) { |
|
| 78 | - return $nom; |
|
| 79 | - } |
|
| 80 | - |
|
| 81 | - // charger le source, si possible, et compiler |
|
| 82 | - $skel_code = ''; |
|
| 83 | - if (lire_fichier($source, $skel)) { |
|
| 84 | - $compiler = charger_fonction('compiler', 'public'); |
|
| 85 | - $skel_code = $compiler($skel, $nom, $gram, $source, $connect); |
|
| 86 | - } |
|
| 87 | - |
|
| 88 | - // Ne plus rien faire si le compilateur n'a pas pu operer. |
|
| 89 | - if (!$skel_code) { |
|
| 90 | - return false; |
|
| 91 | - } |
|
| 92 | - |
|
| 93 | - foreach ($skel_code as $id => $boucle) { |
|
| 94 | - $f = $boucle->return; |
|
| 95 | - try { |
|
| 96 | - eval("return true; $f ;"); |
|
| 97 | - } catch (\ParseError $e) { |
|
| 98 | - // Code syntaxiquement faux (critere etc mal programme') |
|
| 99 | - $msg = _T('zbug_erreur_compilation') . ' | Line ' . $e->getLine() . ' : ' . $e->getMessage(); |
|
| 100 | - erreur_squelette($msg, $boucle); |
|
| 101 | - // continuer pour trouver d'autres fautes eventuelles |
|
| 102 | - // mais prevenir que c'est mort |
|
| 103 | - $nom = ''; |
|
| 104 | - } |
|
| 105 | - |
|
| 106 | - // Contexte de compil inutile a present |
|
| 107 | - // (mais la derniere valeur de $boucle est utilisee ci-dessous) |
|
| 108 | - $skel_code[$id] = $f; |
|
| 109 | - } |
|
| 110 | - |
|
| 111 | - $code = ''; |
|
| 112 | - if ($nom) { |
|
| 113 | - // Si le code est bon, concatener et mettre en cache |
|
| 114 | - if (function_exists($nom)) { |
|
| 115 | - $code = squelette_traduit($skel, $source, $phpfile, $skel_code); |
|
| 116 | - } else { |
|
| 117 | - // code semantiquement faux: bug du compilateur |
|
| 118 | - // $boucle est en fait ici la fct principale du squelette |
|
| 119 | - $msg = _T('zbug_erreur_compilation'); |
|
| 120 | - erreur_squelette($msg, $boucle); |
|
| 121 | - $nom = ''; |
|
| 122 | - } |
|
| 123 | - } |
|
| 124 | - |
|
| 125 | - if (defined('_VAR_MODE') and _VAR_MODE == 'debug') { |
|
| 126 | - // Tracer ce qui vient d'etre compile |
|
| 127 | - $GLOBALS['debug_objets']['code'][$nom . 'tout'] = $code; |
|
| 128 | - |
|
| 129 | - // si c'est ce que demande le debusqueur, lui passer la main |
|
| 130 | - if ( |
|
| 131 | - $GLOBALS['debug_objets']['sourcefile'] |
|
| 132 | - and (_request('var_mode_objet') == $nom) |
|
| 133 | - and (_request('var_mode_affiche') == 'code') |
|
| 134 | - ) { |
|
| 135 | - erreur_squelette(); |
|
| 136 | - } |
|
| 137 | - } |
|
| 138 | - |
|
| 139 | - return $nom ?: false; |
|
| 45 | + $skel = null; |
|
| 46 | + $boucle = null; |
|
| 47 | + $nom = calculer_nom_fonction_squel($squelette, $mime_type, $connect); |
|
| 48 | + |
|
| 49 | + // si deja en memoire (INCLURE a repetition) c'est bon. |
|
| 50 | + if (function_exists($nom)) { |
|
| 51 | + return $nom; |
|
| 52 | + } |
|
| 53 | + |
|
| 54 | + if (defined('_VAR_MODE') and _VAR_MODE == 'debug') { |
|
| 55 | + $GLOBALS['debug_objets']['courant'] = $nom; |
|
| 56 | + } |
|
| 57 | + |
|
| 58 | + $phpfile = sous_repertoire(_DIR_SKELS, '', false, true) . $nom . '.php'; |
|
| 59 | + |
|
| 60 | + // si squelette est deja compile et perenne, le charger |
|
| 61 | + if (!squelette_obsolete($phpfile, $source)) { |
|
| 62 | + include_once $phpfile; |
|
| 63 | + #if (!squelette_obsolete($phpfile, $source) |
|
| 64 | + # AND lire_fichier ($phpfile, $skel_code, |
|
| 65 | + # array('critique' => 'oui', 'phpcheck' => 'oui'))){ |
|
| 66 | + ## eval('?'.'>'.$skel_code); |
|
| 67 | + # spip_log($skel_code, 'comp') |
|
| 68 | + #} |
|
| 69 | + } |
|
| 70 | + |
|
| 71 | + if (file_exists($lib = $squelette . '_fonctions' . '.php')) { |
|
| 72 | + include_once $lib; |
|
| 73 | + } |
|
| 74 | + |
|
| 75 | + // tester si le eval ci-dessus a mis le squelette en memoire |
|
| 76 | + |
|
| 77 | + if (function_exists($nom)) { |
|
| 78 | + return $nom; |
|
| 79 | + } |
|
| 80 | + |
|
| 81 | + // charger le source, si possible, et compiler |
|
| 82 | + $skel_code = ''; |
|
| 83 | + if (lire_fichier($source, $skel)) { |
|
| 84 | + $compiler = charger_fonction('compiler', 'public'); |
|
| 85 | + $skel_code = $compiler($skel, $nom, $gram, $source, $connect); |
|
| 86 | + } |
|
| 87 | + |
|
| 88 | + // Ne plus rien faire si le compilateur n'a pas pu operer. |
|
| 89 | + if (!$skel_code) { |
|
| 90 | + return false; |
|
| 91 | + } |
|
| 92 | + |
|
| 93 | + foreach ($skel_code as $id => $boucle) { |
|
| 94 | + $f = $boucle->return; |
|
| 95 | + try { |
|
| 96 | + eval("return true; $f ;"); |
|
| 97 | + } catch (\ParseError $e) { |
|
| 98 | + // Code syntaxiquement faux (critere etc mal programme') |
|
| 99 | + $msg = _T('zbug_erreur_compilation') . ' | Line ' . $e->getLine() . ' : ' . $e->getMessage(); |
|
| 100 | + erreur_squelette($msg, $boucle); |
|
| 101 | + // continuer pour trouver d'autres fautes eventuelles |
|
| 102 | + // mais prevenir que c'est mort |
|
| 103 | + $nom = ''; |
|
| 104 | + } |
|
| 105 | + |
|
| 106 | + // Contexte de compil inutile a present |
|
| 107 | + // (mais la derniere valeur de $boucle est utilisee ci-dessous) |
|
| 108 | + $skel_code[$id] = $f; |
|
| 109 | + } |
|
| 110 | + |
|
| 111 | + $code = ''; |
|
| 112 | + if ($nom) { |
|
| 113 | + // Si le code est bon, concatener et mettre en cache |
|
| 114 | + if (function_exists($nom)) { |
|
| 115 | + $code = squelette_traduit($skel, $source, $phpfile, $skel_code); |
|
| 116 | + } else { |
|
| 117 | + // code semantiquement faux: bug du compilateur |
|
| 118 | + // $boucle est en fait ici la fct principale du squelette |
|
| 119 | + $msg = _T('zbug_erreur_compilation'); |
|
| 120 | + erreur_squelette($msg, $boucle); |
|
| 121 | + $nom = ''; |
|
| 122 | + } |
|
| 123 | + } |
|
| 124 | + |
|
| 125 | + if (defined('_VAR_MODE') and _VAR_MODE == 'debug') { |
|
| 126 | + // Tracer ce qui vient d'etre compile |
|
| 127 | + $GLOBALS['debug_objets']['code'][$nom . 'tout'] = $code; |
|
| 128 | + |
|
| 129 | + // si c'est ce que demande le debusqueur, lui passer la main |
|
| 130 | + if ( |
|
| 131 | + $GLOBALS['debug_objets']['sourcefile'] |
|
| 132 | + and (_request('var_mode_objet') == $nom) |
|
| 133 | + and (_request('var_mode_affiche') == 'code') |
|
| 134 | + ) { |
|
| 135 | + erreur_squelette(); |
|
| 136 | + } |
|
| 137 | + } |
|
| 138 | + |
|
| 139 | + return $nom ?: false; |
|
| 140 | 140 | } |
| 141 | 141 | |
| 142 | 142 | function squelette_traduit($squelette, $sourcefile, $phpfile, $boucles) { |
| 143 | 143 | |
| 144 | - $code = null; |
|
| 145 | - // Le dernier index est '' (fonction principale) |
|
| 146 | - $noms = substr(join(', ', array_keys($boucles)), 0, -2); |
|
| 147 | - if (CODE_COMMENTE) { |
|
| 148 | - $code = " |
|
| 144 | + $code = null; |
|
| 145 | + // Le dernier index est '' (fonction principale) |
|
| 146 | + $noms = substr(join(', ', array_keys($boucles)), 0, -2); |
|
| 147 | + if (CODE_COMMENTE) { |
|
| 148 | + $code = " |
|
| 149 | 149 | /* |
| 150 | 150 | * Squelette : $sourcefile |
| 151 | 151 | * Date : " . gmdate('D, d M Y H:i:s', @filemtime($sourcefile)) . ' GMT |
| 152 | 152 | * Compile : ' . gmdate('D, d M Y H:i:s', time()) . ' GMT |
| 153 | 153 | * ' . (!$boucles ? 'Pas de boucle' : ('Boucles : ' . $noms)) . ' |
| 154 | 154 | */ '; |
| 155 | - } |
|
| 155 | + } |
|
| 156 | 156 | |
| 157 | - $code = '<' . "?php\n" . $code . join('', $boucles) . "\n"; |
|
| 158 | - if (!defined('_VAR_NOCACHE') or !_VAR_NOCACHE) { |
|
| 159 | - ecrire_fichier($phpfile, $code); |
|
| 160 | - } |
|
| 157 | + $code = '<' . "?php\n" . $code . join('', $boucles) . "\n"; |
|
| 158 | + if (!defined('_VAR_NOCACHE') or !_VAR_NOCACHE) { |
|
| 159 | + ecrire_fichier($phpfile, $code); |
|
| 160 | + } |
|
| 161 | 161 | |
| 162 | - return $code; |
|
| 162 | + return $code; |
|
| 163 | 163 | } |
| 164 | 164 | |
| 165 | 165 | // Le squelette compile est-il trop vieux ? |
| 166 | 166 | function squelette_obsolete($skel, $squelette) { |
| 167 | - static $date_change = null; |
|
| 168 | - // ne verifier la date de mes_fonctions et mes_options qu'une seule fois |
|
| 169 | - // par hit |
|
| 170 | - if (is_null($date_change)) { |
|
| 171 | - if (@file_exists($fonc = 'mes_fonctions.php')) { |
|
| 172 | - $date_change = @filemtime($fonc); |
|
| 173 | - } # compatibilite |
|
| 174 | - if (defined('_FILE_OPTIONS')) { |
|
| 175 | - $date_change = max($date_change, @filemtime(_FILE_OPTIONS)); |
|
| 176 | - } |
|
| 177 | - } |
|
| 178 | - |
|
| 179 | - return ( |
|
| 180 | - (defined('_VAR_MODE') and in_array(_VAR_MODE, ['recalcul', 'preview', 'debug'])) |
|
| 181 | - or !@file_exists($skel) |
|
| 182 | - or ((@file_exists($squelette) ? @filemtime($squelette) : 0) |
|
| 183 | - > ($date = @filemtime($skel))) |
|
| 184 | - or ($date_change > $date) |
|
| 185 | - ); |
|
| 167 | + static $date_change = null; |
|
| 168 | + // ne verifier la date de mes_fonctions et mes_options qu'une seule fois |
|
| 169 | + // par hit |
|
| 170 | + if (is_null($date_change)) { |
|
| 171 | + if (@file_exists($fonc = 'mes_fonctions.php')) { |
|
| 172 | + $date_change = @filemtime($fonc); |
|
| 173 | + } # compatibilite |
|
| 174 | + if (defined('_FILE_OPTIONS')) { |
|
| 175 | + $date_change = max($date_change, @filemtime(_FILE_OPTIONS)); |
|
| 176 | + } |
|
| 177 | + } |
|
| 178 | + |
|
| 179 | + return ( |
|
| 180 | + (defined('_VAR_MODE') and in_array(_VAR_MODE, ['recalcul', 'preview', 'debug'])) |
|
| 181 | + or !@file_exists($skel) |
|
| 182 | + or ((@file_exists($squelette) ? @filemtime($squelette) : 0) |
|
| 183 | + > ($date = @filemtime($skel))) |
|
| 184 | + or ($date_change > $date) |
|
| 185 | + ); |
|
| 186 | 186 | } |
| 187 | 187 | |
| 188 | 188 | // Activer l'invalideur de session |
| 189 | 189 | function invalideur_session(&$Cache, $code = null) { |
| 190 | - $Cache['session'] = spip_session(); |
|
| 190 | + $Cache['session'] = spip_session(); |
|
| 191 | 191 | |
| 192 | - return $code; |
|
| 192 | + return $code; |
|
| 193 | 193 | } |
| 194 | 194 | |
| 195 | 195 | |
| 196 | 196 | function analyse_resultat_skel($nom, $cache, $corps, $source = '') { |
| 197 | - static $filtres = []; |
|
| 198 | - $headers = []; |
|
| 199 | - $corps ??= ''; |
|
| 200 | - |
|
| 201 | - // Recupere les < ?php header('Xx: y'); ? > pour $page['headers'] |
|
| 202 | - // note: on essaie d'attrapper aussi certains de ces entetes codes |
|
| 203 | - // "a la main" dans les squelettes, mais evidemment sans exhaustivite |
|
| 204 | - if ( |
|
| 205 | - stripos($corps, 'header') !== false |
|
| 206 | - and preg_match_all( |
|
| 207 | - '/(<[?]php\s+)@?header\s*\(\s*.([^:\'"]*):?\s*([^)]*)[^)]\s*\)\s*[;]?\s*[?]>/ims', |
|
| 208 | - $corps, |
|
| 209 | - $regs, |
|
| 210 | - PREG_SET_ORDER |
|
| 211 | - ) |
|
| 212 | - ) { |
|
| 213 | - foreach ($regs as $r) { |
|
| 214 | - $corps = str_replace($r[0], '', $corps); |
|
| 215 | - # $j = Content-Type, et pas content-TYPE. |
|
| 216 | - $j = join('-', array_map('ucwords', explode('-', strtolower($r[2])))); |
|
| 217 | - |
|
| 218 | - if ($j == 'X-Spip-Filtre' and isset($headers[$j])) { |
|
| 219 | - $headers[$j] .= '|' . $r[3]; |
|
| 220 | - } else { |
|
| 221 | - $headers[$j] = $r[3]; |
|
| 222 | - } |
|
| 223 | - } |
|
| 224 | - } |
|
| 225 | - // S'agit-il d'un resultat constant ou contenant du code php |
|
| 226 | - $process_ins = ( |
|
| 227 | - strpos($corps, '<' . '?') === false |
|
| 228 | - or |
|
| 229 | - (strpos($corps, '<' . '?xml') !== false and |
|
| 230 | - strpos(str_replace('<' . '?xml', '', $corps), '<' . '?') === false) |
|
| 231 | - ) |
|
| 232 | - ? 'html' |
|
| 233 | - : 'php'; |
|
| 234 | - |
|
| 235 | - $skel = [ |
|
| 236 | - 'squelette' => $nom, |
|
| 237 | - 'source' => $source, |
|
| 238 | - 'process_ins' => $process_ins, |
|
| 239 | - 'invalideurs' => $cache, |
|
| 240 | - 'entetes' => $headers, |
|
| 241 | - 'duree' => isset($headers['X-Spip-Cache']) ? intval($headers['X-Spip-Cache']) : 0 |
|
| 242 | - ]; |
|
| 243 | - |
|
| 244 | - // traiter #FILTRE{} et filtres |
|
| 245 | - if (!isset($filtres[$nom])) { |
|
| 246 | - $filtres[$nom] = pipeline('declarer_filtres_squelettes', ['args' => $skel, 'data' => []]); |
|
| 247 | - } |
|
| 248 | - $filtres_headers = []; |
|
| 249 | - if (isset($headers['X-Spip-Filtre']) and strlen($headers['X-Spip-Filtre'])) { |
|
| 250 | - $filtres_headers = array_filter(explode('|', $headers['X-Spip-Filtre'])); |
|
| 251 | - unset($headers['X-Spip-Filtre']); |
|
| 252 | - } |
|
| 253 | - if (is_array($filtres[$nom]) || $filtres[$nom] instanceof \Countable ? count($filtres[$nom]) : 0 or count($filtres_headers)) { |
|
| 254 | - include_spip('public/sandbox'); |
|
| 255 | - $corps = sandbox_filtrer_squelette($skel, $corps, $filtres_headers, $filtres[$nom]); |
|
| 256 | - |
|
| 257 | - if ($process_ins == 'html') { |
|
| 258 | - $skel['process_ins'] = ( |
|
| 259 | - strpos($corps, '<' . '?') === false |
|
| 260 | - or |
|
| 261 | - (strpos($corps, '<' . '?xml') !== false and |
|
| 262 | - strpos(str_replace('<' . '?xml', '', $corps), '<' . '?') === false) |
|
| 263 | - ) |
|
| 264 | - ? 'html' |
|
| 265 | - : 'php'; |
|
| 266 | - } |
|
| 267 | - } |
|
| 268 | - |
|
| 269 | - $skel['entetes'] = $headers; |
|
| 270 | - $skel['texte'] = $corps; |
|
| 271 | - |
|
| 272 | - return $skel; |
|
| 197 | + static $filtres = []; |
|
| 198 | + $headers = []; |
|
| 199 | + $corps ??= ''; |
|
| 200 | + |
|
| 201 | + // Recupere les < ?php header('Xx: y'); ? > pour $page['headers'] |
|
| 202 | + // note: on essaie d'attrapper aussi certains de ces entetes codes |
|
| 203 | + // "a la main" dans les squelettes, mais evidemment sans exhaustivite |
|
| 204 | + if ( |
|
| 205 | + stripos($corps, 'header') !== false |
|
| 206 | + and preg_match_all( |
|
| 207 | + '/(<[?]php\s+)@?header\s*\(\s*.([^:\'"]*):?\s*([^)]*)[^)]\s*\)\s*[;]?\s*[?]>/ims', |
|
| 208 | + $corps, |
|
| 209 | + $regs, |
|
| 210 | + PREG_SET_ORDER |
|
| 211 | + ) |
|
| 212 | + ) { |
|
| 213 | + foreach ($regs as $r) { |
|
| 214 | + $corps = str_replace($r[0], '', $corps); |
|
| 215 | + # $j = Content-Type, et pas content-TYPE. |
|
| 216 | + $j = join('-', array_map('ucwords', explode('-', strtolower($r[2])))); |
|
| 217 | + |
|
| 218 | + if ($j == 'X-Spip-Filtre' and isset($headers[$j])) { |
|
| 219 | + $headers[$j] .= '|' . $r[3]; |
|
| 220 | + } else { |
|
| 221 | + $headers[$j] = $r[3]; |
|
| 222 | + } |
|
| 223 | + } |
|
| 224 | + } |
|
| 225 | + // S'agit-il d'un resultat constant ou contenant du code php |
|
| 226 | + $process_ins = ( |
|
| 227 | + strpos($corps, '<' . '?') === false |
|
| 228 | + or |
|
| 229 | + (strpos($corps, '<' . '?xml') !== false and |
|
| 230 | + strpos(str_replace('<' . '?xml', '', $corps), '<' . '?') === false) |
|
| 231 | + ) |
|
| 232 | + ? 'html' |
|
| 233 | + : 'php'; |
|
| 234 | + |
|
| 235 | + $skel = [ |
|
| 236 | + 'squelette' => $nom, |
|
| 237 | + 'source' => $source, |
|
| 238 | + 'process_ins' => $process_ins, |
|
| 239 | + 'invalideurs' => $cache, |
|
| 240 | + 'entetes' => $headers, |
|
| 241 | + 'duree' => isset($headers['X-Spip-Cache']) ? intval($headers['X-Spip-Cache']) : 0 |
|
| 242 | + ]; |
|
| 243 | + |
|
| 244 | + // traiter #FILTRE{} et filtres |
|
| 245 | + if (!isset($filtres[$nom])) { |
|
| 246 | + $filtres[$nom] = pipeline('declarer_filtres_squelettes', ['args' => $skel, 'data' => []]); |
|
| 247 | + } |
|
| 248 | + $filtres_headers = []; |
|
| 249 | + if (isset($headers['X-Spip-Filtre']) and strlen($headers['X-Spip-Filtre'])) { |
|
| 250 | + $filtres_headers = array_filter(explode('|', $headers['X-Spip-Filtre'])); |
|
| 251 | + unset($headers['X-Spip-Filtre']); |
|
| 252 | + } |
|
| 253 | + if (is_array($filtres[$nom]) || $filtres[$nom] instanceof \Countable ? count($filtres[$nom]) : 0 or count($filtres_headers)) { |
|
| 254 | + include_spip('public/sandbox'); |
|
| 255 | + $corps = sandbox_filtrer_squelette($skel, $corps, $filtres_headers, $filtres[$nom]); |
|
| 256 | + |
|
| 257 | + if ($process_ins == 'html') { |
|
| 258 | + $skel['process_ins'] = ( |
|
| 259 | + strpos($corps, '<' . '?') === false |
|
| 260 | + or |
|
| 261 | + (strpos($corps, '<' . '?xml') !== false and |
|
| 262 | + strpos(str_replace('<' . '?xml', '', $corps), '<' . '?') === false) |
|
| 263 | + ) |
|
| 264 | + ? 'html' |
|
| 265 | + : 'php'; |
|
| 266 | + } |
|
| 267 | + } |
|
| 268 | + |
|
| 269 | + $skel['entetes'] = $headers; |
|
| 270 | + $skel['texte'] = $corps; |
|
| 271 | + |
|
| 272 | + return $skel; |
|
| 273 | 273 | } |
| 274 | 274 | |
| 275 | 275 | // |
@@ -283,7 +283,7 @@ discard block |
||
| 283 | 283 | inserer_balise_dynamique(balise_%s_dyn(%s), array(%s)); |
| 284 | 284 | if ($lang_select) lang_select(); |
| 285 | 285 | ?' |
| 286 | - . '>'); |
|
| 286 | + . '>'); |
|
| 287 | 287 | |
| 288 | 288 | /** |
| 289 | 289 | * Synthétise une balise dynamique : crée l'appel à l'inclusion |
@@ -303,35 +303,35 @@ discard block |
||
| 303 | 303 | * Code PHP pour inclure le squelette de la balise dynamique |
| 304 | 304 | **/ |
| 305 | 305 | function synthetiser_balise_dynamique($nom, $args, $file, $context_compil) { |
| 306 | - if ( |
|
| 307 | - strncmp($file, '/', 1) !== 0 |
|
| 308 | - // pas de lien symbolique sous Windows |
|
| 309 | - and !(stristr(PHP_OS, 'WIN') and strpos($file, ':') !== false) |
|
| 310 | - ) { |
|
| 311 | - $file = './" . _DIR_RACINE . "' . $file; |
|
| 312 | - } |
|
| 313 | - |
|
| 314 | - $lang = $context_compil[4]; |
|
| 315 | - if (preg_match(',\W,', $lang)) { |
|
| 316 | - $lang = ''; |
|
| 317 | - } |
|
| 318 | - |
|
| 319 | - $args = array_map('argumenter_squelette', $args); |
|
| 320 | - if (!empty($context_compil['appel_php_depuis_modele'])) { |
|
| 321 | - $args[0] = 'arguments_balise_dyn_depuis_modele(' . $args[0] . ')'; |
|
| 322 | - } |
|
| 323 | - $args = join(', ', $args); |
|
| 324 | - |
|
| 325 | - $r = sprintf( |
|
| 326 | - CODE_INCLURE_BALISE, |
|
| 327 | - $file, |
|
| 328 | - $lang, |
|
| 329 | - $nom, |
|
| 330 | - $args, |
|
| 331 | - join(', ', array_map('_q', $context_compil)) |
|
| 332 | - ); |
|
| 333 | - |
|
| 334 | - return $r; |
|
| 306 | + if ( |
|
| 307 | + strncmp($file, '/', 1) !== 0 |
|
| 308 | + // pas de lien symbolique sous Windows |
|
| 309 | + and !(stristr(PHP_OS, 'WIN') and strpos($file, ':') !== false) |
|
| 310 | + ) { |
|
| 311 | + $file = './" . _DIR_RACINE . "' . $file; |
|
| 312 | + } |
|
| 313 | + |
|
| 314 | + $lang = $context_compil[4]; |
|
| 315 | + if (preg_match(',\W,', $lang)) { |
|
| 316 | + $lang = ''; |
|
| 317 | + } |
|
| 318 | + |
|
| 319 | + $args = array_map('argumenter_squelette', $args); |
|
| 320 | + if (!empty($context_compil['appel_php_depuis_modele'])) { |
|
| 321 | + $args[0] = 'arguments_balise_dyn_depuis_modele(' . $args[0] . ')'; |
|
| 322 | + } |
|
| 323 | + $args = join(', ', $args); |
|
| 324 | + |
|
| 325 | + $r = sprintf( |
|
| 326 | + CODE_INCLURE_BALISE, |
|
| 327 | + $file, |
|
| 328 | + $lang, |
|
| 329 | + $nom, |
|
| 330 | + $args, |
|
| 331 | + join(', ', array_map('_q', $context_compil)) |
|
| 332 | + ); |
|
| 333 | + |
|
| 334 | + return $r; |
|
| 335 | 335 | } |
| 336 | 336 | |
| 337 | 337 | /** |
@@ -349,18 +349,18 @@ discard block |
||
| 349 | 349 | **/ |
| 350 | 350 | function argumenter_squelette($v) { |
| 351 | 351 | |
| 352 | - if (is_object($v)) { |
|
| 353 | - return var_export($v, true); |
|
| 354 | - } elseif (!is_array($v)) { |
|
| 355 | - return "'" . texte_script((string) $v) . "'"; |
|
| 356 | - } else { |
|
| 357 | - $out = []; |
|
| 358 | - foreach ($v as $k => $val) { |
|
| 359 | - $out [] = argumenter_squelette($k) . '=>' . argumenter_squelette($val); |
|
| 360 | - } |
|
| 361 | - |
|
| 362 | - return 'array(' . join(', ', $out) . ')'; |
|
| 363 | - } |
|
| 352 | + if (is_object($v)) { |
|
| 353 | + return var_export($v, true); |
|
| 354 | + } elseif (!is_array($v)) { |
|
| 355 | + return "'" . texte_script((string) $v) . "'"; |
|
| 356 | + } else { |
|
| 357 | + $out = []; |
|
| 358 | + foreach ($v as $k => $val) { |
|
| 359 | + $out [] = argumenter_squelette($k) . '=>' . argumenter_squelette($val); |
|
| 360 | + } |
|
| 361 | + |
|
| 362 | + return 'array(' . join(', ', $out) . ')'; |
|
| 363 | + } |
|
| 364 | 364 | } |
| 365 | 365 | |
| 366 | 366 | |
@@ -391,87 +391,87 @@ discard block |
||
| 391 | 391 | * Code PHP d'exécutant l'inclusion du squelette (ou texte) de la balise dynamique |
| 392 | 392 | **/ |
| 393 | 393 | function executer_balise_dynamique($nom, $args, $context_compil) { |
| 394 | - /** @var string Nom de la balise à charger (balise demandée ou balise générique) */ |
|
| 395 | - $nom_balise = $nom; |
|
| 396 | - /** @var string Nom de la balise générique (si utilisée) */ |
|
| 397 | - $nom_balise_generique = ''; |
|
| 398 | - |
|
| 399 | - $appel_php_depuis_modele = false; |
|
| 400 | - if ( |
|
| 401 | - is_array($context_compil) |
|
| 402 | - and !is_numeric($context_compil[3]) |
|
| 403 | - and empty($context_compil[0]) |
|
| 404 | - and empty($context_compil[1]) |
|
| 405 | - and empty($context_compil[2]) |
|
| 406 | - and empty($context_compil[3]) |
|
| 407 | - ) { |
|
| 408 | - $appel_php_depuis_modele = true; |
|
| 409 | - } |
|
| 410 | - |
|
| 411 | - if (!$fonction_balise = charger_fonction($nom_balise, 'balise', true)) { |
|
| 412 | - // Calculer un nom générique (ie. 'formulaire_' dans 'formulaire_editer_article') |
|
| 413 | - if ($balise_generique = chercher_balise_generique($nom)) { |
|
| 414 | - // injecter en premier arg le nom de la balise |
|
| 415 | - array_unshift($args, $nom); |
|
| 416 | - $nom_balise_generique = $balise_generique['nom_generique']; |
|
| 417 | - $fonction_balise = $balise_generique['fonction_generique']; |
|
| 418 | - $nom_balise = $nom_balise_generique; |
|
| 419 | - } |
|
| 420 | - unset($balise_generique); |
|
| 421 | - } |
|
| 422 | - |
|
| 423 | - if (!$fonction_balise) { |
|
| 424 | - $msg = ['zbug_balise_inexistante', ['from' => 'CVT', 'balise' => $nom]]; |
|
| 425 | - erreur_squelette($msg, $context_compil); |
|
| 426 | - |
|
| 427 | - return ''; |
|
| 428 | - } |
|
| 429 | - |
|
| 430 | - // retrouver le fichier qui a déclaré la fonction |
|
| 431 | - // même si la fonction dynamique est déclarée dans un fichier de fonctions. |
|
| 432 | - // Attention sous windows, getFileName() retourne un antislash. |
|
| 433 | - $reflector = new ReflectionFunction($fonction_balise); |
|
| 434 | - $file = str_replace('\\', '/', $reflector->getFileName()); |
|
| 435 | - if (strncmp($file, str_replace('\\', '/', _ROOT_RACINE), strlen(_ROOT_RACINE)) === 0) { |
|
| 436 | - $file = substr($file, strlen(_ROOT_RACINE)); |
|
| 437 | - } |
|
| 438 | - |
|
| 439 | - // Y a-t-il une fonction de traitement des arguments ? |
|
| 440 | - $f = 'balise_' . $nom_balise . '_stat'; |
|
| 441 | - |
|
| 442 | - $r = !function_exists($f) ? $args : $f($args, $context_compil); |
|
| 443 | - |
|
| 444 | - if (!is_array($r)) { |
|
| 445 | - return $r; |
|
| 446 | - } |
|
| 447 | - |
|
| 448 | - // verifier que la fonction dyn est la, |
|
| 449 | - // sinon se replier sur la generique si elle existe |
|
| 450 | - if (!function_exists('balise_' . $nom_balise . '_dyn')) { |
|
| 451 | - if ( |
|
| 452 | - $balise_generique = chercher_balise_generique($nom) |
|
| 453 | - and $nom_balise_generique = $balise_generique['nom_generique'] |
|
| 454 | - and $file = include_spip('balise/' . strtolower($nom_balise_generique)) |
|
| 455 | - and function_exists('balise_' . $nom_balise_generique . '_dyn') |
|
| 456 | - ) { |
|
| 457 | - // et lui injecter en premier arg le nom de la balise |
|
| 458 | - array_unshift($r, $nom); |
|
| 459 | - $nom_balise = $nom_balise_generique; |
|
| 460 | - if (!_DIR_RESTREINT) { |
|
| 461 | - $file = _DIR_RESTREINT_ABS . $file; |
|
| 462 | - } |
|
| 463 | - } else { |
|
| 464 | - $msg = ['zbug_balise_inexistante', ['from' => 'CVT', 'balise' => $nom]]; |
|
| 465 | - erreur_squelette($msg, $context_compil); |
|
| 466 | - |
|
| 467 | - return ''; |
|
| 468 | - } |
|
| 469 | - } |
|
| 470 | - |
|
| 471 | - if ($appel_php_depuis_modele) { |
|
| 472 | - $context_compil['appel_php_depuis_modele'] = true; |
|
| 473 | - } |
|
| 474 | - return synthetiser_balise_dynamique($nom_balise, $r, $file, $context_compil); |
|
| 394 | + /** @var string Nom de la balise à charger (balise demandée ou balise générique) */ |
|
| 395 | + $nom_balise = $nom; |
|
| 396 | + /** @var string Nom de la balise générique (si utilisée) */ |
|
| 397 | + $nom_balise_generique = ''; |
|
| 398 | + |
|
| 399 | + $appel_php_depuis_modele = false; |
|
| 400 | + if ( |
|
| 401 | + is_array($context_compil) |
|
| 402 | + and !is_numeric($context_compil[3]) |
|
| 403 | + and empty($context_compil[0]) |
|
| 404 | + and empty($context_compil[1]) |
|
| 405 | + and empty($context_compil[2]) |
|
| 406 | + and empty($context_compil[3]) |
|
| 407 | + ) { |
|
| 408 | + $appel_php_depuis_modele = true; |
|
| 409 | + } |
|
| 410 | + |
|
| 411 | + if (!$fonction_balise = charger_fonction($nom_balise, 'balise', true)) { |
|
| 412 | + // Calculer un nom générique (ie. 'formulaire_' dans 'formulaire_editer_article') |
|
| 413 | + if ($balise_generique = chercher_balise_generique($nom)) { |
|
| 414 | + // injecter en premier arg le nom de la balise |
|
| 415 | + array_unshift($args, $nom); |
|
| 416 | + $nom_balise_generique = $balise_generique['nom_generique']; |
|
| 417 | + $fonction_balise = $balise_generique['fonction_generique']; |
|
| 418 | + $nom_balise = $nom_balise_generique; |
|
| 419 | + } |
|
| 420 | + unset($balise_generique); |
|
| 421 | + } |
|
| 422 | + |
|
| 423 | + if (!$fonction_balise) { |
|
| 424 | + $msg = ['zbug_balise_inexistante', ['from' => 'CVT', 'balise' => $nom]]; |
|
| 425 | + erreur_squelette($msg, $context_compil); |
|
| 426 | + |
|
| 427 | + return ''; |
|
| 428 | + } |
|
| 429 | + |
|
| 430 | + // retrouver le fichier qui a déclaré la fonction |
|
| 431 | + // même si la fonction dynamique est déclarée dans un fichier de fonctions. |
|
| 432 | + // Attention sous windows, getFileName() retourne un antislash. |
|
| 433 | + $reflector = new ReflectionFunction($fonction_balise); |
|
| 434 | + $file = str_replace('\\', '/', $reflector->getFileName()); |
|
| 435 | + if (strncmp($file, str_replace('\\', '/', _ROOT_RACINE), strlen(_ROOT_RACINE)) === 0) { |
|
| 436 | + $file = substr($file, strlen(_ROOT_RACINE)); |
|
| 437 | + } |
|
| 438 | + |
|
| 439 | + // Y a-t-il une fonction de traitement des arguments ? |
|
| 440 | + $f = 'balise_' . $nom_balise . '_stat'; |
|
| 441 | + |
|
| 442 | + $r = !function_exists($f) ? $args : $f($args, $context_compil); |
|
| 443 | + |
|
| 444 | + if (!is_array($r)) { |
|
| 445 | + return $r; |
|
| 446 | + } |
|
| 447 | + |
|
| 448 | + // verifier que la fonction dyn est la, |
|
| 449 | + // sinon se replier sur la generique si elle existe |
|
| 450 | + if (!function_exists('balise_' . $nom_balise . '_dyn')) { |
|
| 451 | + if ( |
|
| 452 | + $balise_generique = chercher_balise_generique($nom) |
|
| 453 | + and $nom_balise_generique = $balise_generique['nom_generique'] |
|
| 454 | + and $file = include_spip('balise/' . strtolower($nom_balise_generique)) |
|
| 455 | + and function_exists('balise_' . $nom_balise_generique . '_dyn') |
|
| 456 | + ) { |
|
| 457 | + // et lui injecter en premier arg le nom de la balise |
|
| 458 | + array_unshift($r, $nom); |
|
| 459 | + $nom_balise = $nom_balise_generique; |
|
| 460 | + if (!_DIR_RESTREINT) { |
|
| 461 | + $file = _DIR_RESTREINT_ABS . $file; |
|
| 462 | + } |
|
| 463 | + } else { |
|
| 464 | + $msg = ['zbug_balise_inexistante', ['from' => 'CVT', 'balise' => $nom]]; |
|
| 465 | + erreur_squelette($msg, $context_compil); |
|
| 466 | + |
|
| 467 | + return ''; |
|
| 468 | + } |
|
| 469 | + } |
|
| 470 | + |
|
| 471 | + if ($appel_php_depuis_modele) { |
|
| 472 | + $context_compil['appel_php_depuis_modele'] = true; |
|
| 473 | + } |
|
| 474 | + return synthetiser_balise_dynamique($nom_balise, $r, $file, $context_compil); |
|
| 475 | 475 | } |
| 476 | 476 | |
| 477 | 477 | /** |
@@ -486,23 +486,23 @@ discard block |
||
| 486 | 486 | * @return array|null |
| 487 | 487 | */ |
| 488 | 488 | function chercher_balise_generique($nom) { |
| 489 | - if (false === strpos($nom, '_')) { |
|
| 490 | - return null; |
|
| 491 | - } |
|
| 492 | - $nom_generique = $nom; |
|
| 493 | - while (false !== ($p = strrpos($nom_generique, '_'))) { |
|
| 494 | - $nom_generique = substr($nom_generique, 0, $p + 1); |
|
| 495 | - $fonction_generique = charger_fonction($nom_generique, 'balise', true); |
|
| 496 | - if ($fonction_generique) { |
|
| 497 | - return [ |
|
| 498 | - 'nom' => $nom, |
|
| 499 | - 'nom_generique' => $nom_generique, |
|
| 500 | - 'fonction_generique' => $fonction_generique, |
|
| 501 | - ]; |
|
| 502 | - } |
|
| 503 | - $nom_generique = substr($nom_generique, 0, -1); |
|
| 504 | - } |
|
| 505 | - return null; |
|
| 489 | + if (false === strpos($nom, '_')) { |
|
| 490 | + return null; |
|
| 491 | + } |
|
| 492 | + $nom_generique = $nom; |
|
| 493 | + while (false !== ($p = strrpos($nom_generique, '_'))) { |
|
| 494 | + $nom_generique = substr($nom_generique, 0, $p + 1); |
|
| 495 | + $fonction_generique = charger_fonction($nom_generique, 'balise', true); |
|
| 496 | + if ($fonction_generique) { |
|
| 497 | + return [ |
|
| 498 | + 'nom' => $nom, |
|
| 499 | + 'nom_generique' => $nom_generique, |
|
| 500 | + 'fonction_generique' => $fonction_generique, |
|
| 501 | + ]; |
|
| 502 | + } |
|
| 503 | + $nom_generique = substr($nom_generique, 0, -1); |
|
| 504 | + } |
|
| 505 | + return null; |
|
| 506 | 506 | } |
| 507 | 507 | |
| 508 | 508 | |
@@ -526,50 +526,50 @@ discard block |
||
| 526 | 526 | * @return null; |
| 527 | 527 | **/ |
| 528 | 528 | function lang_select_public($lang, $lang_select, $titre = null) { |
| 529 | - // Cas 1. forcer_lang = true et pas de critere {lang_select} |
|
| 530 | - if ( |
|
| 531 | - isset($GLOBALS['forcer_lang']) and $GLOBALS['forcer_lang'] |
|
| 532 | - and $lang_select !== 'oui' |
|
| 533 | - ) { |
|
| 534 | - $lang = $GLOBALS['spip_lang']; |
|
| 535 | - } // Cas 2. l'objet n'a pas de langue definie (ou definie a '') |
|
| 536 | - elseif (!strlen($lang)) { |
|
| 537 | - $lang = $GLOBALS['spip_lang']; |
|
| 538 | - } // Cas 3. l'objet est multilingue ! |
|
| 539 | - elseif ( |
|
| 540 | - $lang_select !== 'oui' |
|
| 541 | - and strlen($titre) > 10 |
|
| 542 | - and strpos($titre, '<multi>') !== false |
|
| 543 | - and strpos(echappe_html($titre), '<multi>') !== false |
|
| 544 | - ) { |
|
| 545 | - $lang = $GLOBALS['spip_lang']; |
|
| 546 | - } |
|
| 547 | - |
|
| 548 | - // faire un lang_select() eventuellement sur la langue inchangee |
|
| 549 | - lang_select($lang); |
|
| 550 | - |
|
| 551 | - return; |
|
| 529 | + // Cas 1. forcer_lang = true et pas de critere {lang_select} |
|
| 530 | + if ( |
|
| 531 | + isset($GLOBALS['forcer_lang']) and $GLOBALS['forcer_lang'] |
|
| 532 | + and $lang_select !== 'oui' |
|
| 533 | + ) { |
|
| 534 | + $lang = $GLOBALS['spip_lang']; |
|
| 535 | + } // Cas 2. l'objet n'a pas de langue definie (ou definie a '') |
|
| 536 | + elseif (!strlen($lang)) { |
|
| 537 | + $lang = $GLOBALS['spip_lang']; |
|
| 538 | + } // Cas 3. l'objet est multilingue ! |
|
| 539 | + elseif ( |
|
| 540 | + $lang_select !== 'oui' |
|
| 541 | + and strlen($titre) > 10 |
|
| 542 | + and strpos($titre, '<multi>') !== false |
|
| 543 | + and strpos(echappe_html($titre), '<multi>') !== false |
|
| 544 | + ) { |
|
| 545 | + $lang = $GLOBALS['spip_lang']; |
|
| 546 | + } |
|
| 547 | + |
|
| 548 | + // faire un lang_select() eventuellement sur la langue inchangee |
|
| 549 | + lang_select($lang); |
|
| 550 | + |
|
| 551 | + return; |
|
| 552 | 552 | } |
| 553 | 553 | |
| 554 | 554 | |
| 555 | 555 | // Si un tableau &doublons[articles] est passe en parametre, |
| 556 | 556 | // il faut le nettoyer car il pourrait etre injecte en SQL |
| 557 | 557 | function nettoyer_env_doublons($envd) { |
| 558 | - foreach ($envd as $table => $liste) { |
|
| 559 | - $n = ''; |
|
| 560 | - foreach (explode(',', $liste) as $val) { |
|
| 561 | - if ($a = intval($val) and $val === strval($a)) { |
|
| 562 | - $n .= ',' . $val; |
|
| 563 | - } |
|
| 564 | - } |
|
| 565 | - if (strlen($n)) { |
|
| 566 | - $envd[$table] = $n; |
|
| 567 | - } else { |
|
| 568 | - unset($envd[$table]); |
|
| 569 | - } |
|
| 570 | - } |
|
| 571 | - |
|
| 572 | - return $envd; |
|
| 558 | + foreach ($envd as $table => $liste) { |
|
| 559 | + $n = ''; |
|
| 560 | + foreach (explode(',', $liste) as $val) { |
|
| 561 | + if ($a = intval($val) and $val === strval($a)) { |
|
| 562 | + $n .= ',' . $val; |
|
| 563 | + } |
|
| 564 | + } |
|
| 565 | + if (strlen($n)) { |
|
| 566 | + $envd[$table] = $n; |
|
| 567 | + } else { |
|
| 568 | + unset($envd[$table]); |
|
| 569 | + } |
|
| 570 | + } |
|
| 571 | + |
|
| 572 | + return $envd; |
|
| 573 | 573 | } |
| 574 | 574 | |
| 575 | 575 | /** |
@@ -588,21 +588,21 @@ discard block |
||
| 588 | 588 | * Opérateur trouvé (SELF ou SUBSELECT) sinon false. |
| 589 | 589 | **/ |
| 590 | 590 | function match_self($w) { |
| 591 | - if (is_string($w)) { |
|
| 592 | - return false; |
|
| 593 | - } |
|
| 594 | - if (is_array($w)) { |
|
| 595 | - if (in_array(reset($w), ['SELF', 'SUBSELECT'])) { |
|
| 596 | - return $w; |
|
| 597 | - } |
|
| 598 | - foreach (array_filter($w, 'is_array') as $sw) { |
|
| 599 | - if ($m = match_self($sw)) { |
|
| 600 | - return $m; |
|
| 601 | - } |
|
| 602 | - } |
|
| 603 | - } |
|
| 604 | - |
|
| 605 | - return false; |
|
| 591 | + if (is_string($w)) { |
|
| 592 | + return false; |
|
| 593 | + } |
|
| 594 | + if (is_array($w)) { |
|
| 595 | + if (in_array(reset($w), ['SELF', 'SUBSELECT'])) { |
|
| 596 | + return $w; |
|
| 597 | + } |
|
| 598 | + foreach (array_filter($w, 'is_array') as $sw) { |
|
| 599 | + if ($m = match_self($sw)) { |
|
| 600 | + return $m; |
|
| 601 | + } |
|
| 602 | + } |
|
| 603 | + } |
|
| 604 | + |
|
| 605 | + return false; |
|
| 606 | 606 | } |
| 607 | 607 | |
| 608 | 608 | /** |
@@ -618,16 +618,16 @@ discard block |
||
| 618 | 618 | * est remplacée par son code. |
| 619 | 619 | **/ |
| 620 | 620 | function remplace_sous_requete($w, $sousrequete) { |
| 621 | - if (is_array($w)) { |
|
| 622 | - if (in_array(reset($w), ['SELF', 'SUBSELECT'])) { |
|
| 623 | - return $sousrequete; |
|
| 624 | - } |
|
| 625 | - foreach ($w as $k => $sw) { |
|
| 626 | - $w[$k] = remplace_sous_requete($sw, $sousrequete); |
|
| 627 | - } |
|
| 628 | - } |
|
| 629 | - |
|
| 630 | - return $w; |
|
| 621 | + if (is_array($w)) { |
|
| 622 | + if (in_array(reset($w), ['SELF', 'SUBSELECT'])) { |
|
| 623 | + return $sousrequete; |
|
| 624 | + } |
|
| 625 | + foreach ($w as $k => $sw) { |
|
| 626 | + $w[$k] = remplace_sous_requete($sw, $sousrequete); |
|
| 627 | + } |
|
| 628 | + } |
|
| 629 | + |
|
| 630 | + return $w; |
|
| 631 | 631 | } |
| 632 | 632 | |
| 633 | 633 | /** |
@@ -641,17 +641,17 @@ discard block |
||
| 641 | 641 | * - Conditions avec des sous requêtes |
| 642 | 642 | **/ |
| 643 | 643 | function trouver_sous_requetes($where) { |
| 644 | - $where_simples = []; |
|
| 645 | - $where_sous = []; |
|
| 646 | - foreach ($where as $k => $w) { |
|
| 647 | - if (match_self($w)) { |
|
| 648 | - $where_sous[$k] = $w; |
|
| 649 | - } else { |
|
| 650 | - $where_simples[$k] = $w; |
|
| 651 | - } |
|
| 652 | - } |
|
| 653 | - |
|
| 654 | - return [$where_simples, $where_sous]; |
|
| 644 | + $where_simples = []; |
|
| 645 | + $where_sous = []; |
|
| 646 | + foreach ($where as $k => $w) { |
|
| 647 | + if (match_self($w)) { |
|
| 648 | + $where_sous[$k] = $w; |
|
| 649 | + } else { |
|
| 650 | + $where_simples[$k] = $w; |
|
| 651 | + } |
|
| 652 | + } |
|
| 653 | + |
|
| 654 | + return [$where_simples, $where_sous]; |
|
| 655 | 655 | } |
| 656 | 656 | |
| 657 | 657 | |
@@ -677,292 +677,292 @@ discard block |
||
| 677 | 677 | * @return resource |
| 678 | 678 | */ |
| 679 | 679 | function calculer_select( |
| 680 | - $select = [], |
|
| 681 | - $from = [], |
|
| 682 | - $from_type = [], |
|
| 683 | - $where = [], |
|
| 684 | - $join = [], |
|
| 685 | - $groupby = [], |
|
| 686 | - $orderby = [], |
|
| 687 | - $limit = '', |
|
| 688 | - $having = [], |
|
| 689 | - $table = '', |
|
| 690 | - $id = '', |
|
| 691 | - $serveur = '', |
|
| 692 | - $requeter = true |
|
| 680 | + $select = [], |
|
| 681 | + $from = [], |
|
| 682 | + $from_type = [], |
|
| 683 | + $where = [], |
|
| 684 | + $join = [], |
|
| 685 | + $groupby = [], |
|
| 686 | + $orderby = [], |
|
| 687 | + $limit = '', |
|
| 688 | + $having = [], |
|
| 689 | + $table = '', |
|
| 690 | + $id = '', |
|
| 691 | + $serveur = '', |
|
| 692 | + $requeter = true |
|
| 693 | 693 | ) { |
| 694 | 694 | |
| 695 | - // retirer les criteres vides: |
|
| 696 | - // {X ?} avec X absent de l'URL |
|
| 697 | - // {par #ENV{X}} avec X absent de l'URL |
|
| 698 | - // IN sur collection vide (ce dernier devrait pouvoir etre fait a la compil) |
|
| 699 | - $menage = false; |
|
| 700 | - foreach ($where as $k => $v) { |
|
| 701 | - if (is_array($v) and count($v)) { |
|
| 702 | - if ((count($v) >= 2) && ($v[0] == 'REGEXP') && ($v[2] == "'.*'")) { |
|
| 703 | - $op = false; |
|
| 704 | - } elseif ((count($v) >= 2) && ($v[0] == 'LIKE') && ($v[2] == "'%'")) { |
|
| 705 | - $op = false; |
|
| 706 | - } else { |
|
| 707 | - $op = $v[0] ?: $v; |
|
| 708 | - } |
|
| 709 | - } else { |
|
| 710 | - $op = $v; |
|
| 711 | - } |
|
| 712 | - if ((!$op) or ($op == 1) or ($op == '0=0')) { |
|
| 713 | - unset($where[$k]); |
|
| 714 | - $menage = true; |
|
| 715 | - } |
|
| 716 | - } |
|
| 717 | - |
|
| 718 | - // evacuer les eventuels groupby vide issus d'un calcul dynamique |
|
| 719 | - $groupby = array_diff($groupby, ['']); |
|
| 720 | - |
|
| 721 | - // remplacer les sous requetes recursives au calcul |
|
| 722 | - [$where_simples, $where_sous] = trouver_sous_requetes($where); |
|
| 723 | - foreach ($where_sous as $k => $w) { |
|
| 724 | - $menage = true; |
|
| 725 | - // on recupere la sous requete |
|
| 726 | - $sous = match_self($w); |
|
| 727 | - if ($sous[0] == 'SELF') { |
|
| 728 | - // c'est une sous requete identique a elle meme sous la forme (SELF,$select,$where) |
|
| 729 | - array_push($where_simples, $sous[2]); |
|
| 730 | - $wheresub = [ |
|
| 731 | - $sous[2], |
|
| 732 | - '0=0' |
|
| 733 | - ]; // pour accepter une string et forcer a faire le menage car on a surement simplifie select et where |
|
| 734 | - $jsub = $join; |
|
| 735 | - // trouver les jointures utiles a |
|
| 736 | - // reinjecter dans le where de la sous requete les conditions supplementaires des jointures qui y sont mentionnees |
|
| 737 | - // ie L1.objet='article' |
|
| 738 | - // on construit le where une fois, puis on ajoute les where complentaires si besoin, et on reconstruit le where en fonction |
|
| 739 | - $i = 0; |
|
| 740 | - do { |
|
| 741 | - $where[$k] = remplace_sous_requete($w, '(' . calculer_select( |
|
| 742 | - [$sous[1] . ' AS id'], |
|
| 743 | - $from, |
|
| 744 | - $from_type, |
|
| 745 | - $wheresub, |
|
| 746 | - $jsub, |
|
| 747 | - [], |
|
| 748 | - [], |
|
| 749 | - '', |
|
| 750 | - $having, |
|
| 751 | - $table, |
|
| 752 | - $id, |
|
| 753 | - $serveur, |
|
| 754 | - false |
|
| 755 | - ) . ')'); |
|
| 756 | - if (!$i) { |
|
| 757 | - $i = 1; |
|
| 758 | - $wherestring = calculer_where_to_string($where[$k]); |
|
| 759 | - foreach ($join as $cle => $wj) { |
|
| 760 | - if ( |
|
| 761 | - (is_countable($wj) ? count($wj) : 0) == 4 |
|
| 762 | - and strpos($wherestring, (string) "{$cle}.") !== false |
|
| 763 | - ) { |
|
| 764 | - $i = 0; |
|
| 765 | - $wheresub[] = $wj[3]; |
|
| 766 | - unset($jsub[$cle][3]); |
|
| 767 | - } |
|
| 768 | - } |
|
| 769 | - } |
|
| 770 | - } while ($i++ < 1); |
|
| 771 | - } |
|
| 772 | - if ($sous[0] == 'SUBSELECT') { |
|
| 773 | - // c'est une sous requete explicite sous la forme identique a sql_select : (SUBSELECT,$select,$from,$where,$groupby,$orderby,$limit,$having) |
|
| 774 | - array_push($where_simples, $sous[3]); // est-ce utile dans ce cas ? |
|
| 775 | - $where[$k] = remplace_sous_requete($w, '(' . calculer_select( |
|
| 776 | - $sous[1], # select |
|
| 777 | - $sous[2], #from |
|
| 778 | - [], #from_type |
|
| 779 | - $sous[3] ? (is_array($sous[3]) ? $sous[3] : [$sous[3]]) : [], |
|
| 780 | - #where, qui peut etre de la forme string comme dans sql_select |
|
| 781 | - [], #join |
|
| 782 | - $sous[4] ?: [], #groupby |
|
| 783 | - $sous[5] ?: [], #orderby |
|
| 784 | - $sous[6], #limit |
|
| 785 | - $sous[7] ?: [], #having |
|
| 786 | - $table, |
|
| 787 | - $id, |
|
| 788 | - $serveur, |
|
| 789 | - false |
|
| 790 | - ) . ')'); |
|
| 791 | - } |
|
| 792 | - array_pop($where_simples); |
|
| 793 | - } |
|
| 794 | - |
|
| 795 | - foreach ($having as $k => $v) { |
|
| 796 | - if ((!$v) or ($v == 1) or ($v == '0=0')) { |
|
| 797 | - unset($having[$k]); |
|
| 798 | - } |
|
| 799 | - } |
|
| 800 | - |
|
| 801 | - // Installer les jointures. |
|
| 802 | - // Retirer celles seulement utiles aux criteres finalement absents mais |
|
| 803 | - // parcourir de la plus recente a la moins recente pour pouvoir eliminer Ln |
|
| 804 | - // si elle est seulement utile a Ln+1 elle meme inutile |
|
| 805 | - |
|
| 806 | - $afrom = []; |
|
| 807 | - $equiv = []; |
|
| 808 | - $k = count($join); |
|
| 809 | - foreach (array_reverse($join, true) as $cledef => $j) { |
|
| 810 | - $cle = $cledef; |
|
| 811 | - // le format de join est : |
|
| 812 | - // array(table depart, cle depart [,cle arrivee[,condition optionnelle and ...]]) |
|
| 813 | - $join[$cle] = array_values($join[$cle]); // recalculer les cles car des unset ont pu perturber |
|
| 814 | - if (count($join[$cle]) == 2) { |
|
| 815 | - $join[$cle][] = $join[$cle][1]; |
|
| 816 | - } |
|
| 817 | - if ((is_array($join[$cle]) || $join[$cle] instanceof \Countable ? count($join[$cle]) : 0) == 3) { |
|
| 818 | - $join[$cle][] = ''; |
|
| 819 | - } |
|
| 820 | - [$t, $c, $carr, $and] = $join[$cle]; |
|
| 821 | - // si le nom de la jointure n'a pas ete specifiee, on prend Lx avec x sont rang dans la liste |
|
| 822 | - // pour compat avec ancienne convention |
|
| 823 | - if (is_numeric($cle)) { |
|
| 824 | - $cle = "L$k"; |
|
| 825 | - } |
|
| 826 | - $cle_where_lie = "JOIN-$cle"; |
|
| 827 | - if ( |
|
| 828 | - !$menage |
|
| 829 | - or isset($afrom[$cle]) |
|
| 830 | - or calculer_jointnul($cle, $select) |
|
| 831 | - or calculer_jointnul($cle, array_diff_key($join, [$cle => $join[$cle]])) |
|
| 832 | - or calculer_jointnul($cle, $having) |
|
| 833 | - or calculer_jointnul($cle, array_diff_key($where_simples, [$cle_where_lie => ''])) |
|
| 834 | - ) { |
|
| 835 | - // corriger les references non explicites dans select |
|
| 836 | - // ou groupby |
|
| 837 | - foreach ($select as $i => $s) { |
|
| 838 | - if ($s == $c) { |
|
| 839 | - $select[$i] = "$cle.$c AS $c"; |
|
| 840 | - break; |
|
| 841 | - } |
|
| 842 | - } |
|
| 843 | - foreach ($groupby as $i => $g) { |
|
| 844 | - if ($g == $c) { |
|
| 845 | - $groupby[$i] = "$cle.$c"; |
|
| 846 | - break; |
|
| 847 | - } |
|
| 848 | - } |
|
| 849 | - // on garde une ecriture decomposee pour permettre une simplification ulterieure si besoin |
|
| 850 | - // sans recours a preg_match |
|
| 851 | - // un implode(' ',..) est fait dans reinjecte_joint un peu plus bas |
|
| 852 | - $afrom[$t][$cle] = [ |
|
| 853 | - "\n" . |
|
| 854 | - ($from_type[$cle] ?? 'INNER') . ' JOIN', |
|
| 855 | - $from[$cle], |
|
| 856 | - "AS $cle", |
|
| 857 | - 'ON (', |
|
| 858 | - "$cle.$c", |
|
| 859 | - '=', |
|
| 860 | - "$t.$carr", |
|
| 861 | - ($and ? 'AND ' . $and : '') . |
|
| 862 | - ')' |
|
| 863 | - ]; |
|
| 864 | - if (isset($afrom[$cle])) { |
|
| 865 | - $afrom[$t] = $afrom[$t] + $afrom[$cle]; |
|
| 866 | - unset($afrom[$cle]); |
|
| 867 | - } |
|
| 868 | - $equiv[] = $carr; |
|
| 869 | - } else { |
|
| 870 | - unset($join[$cledef]); |
|
| 871 | - if (isset($where_simples[$cle_where_lie])) { |
|
| 872 | - unset($where_simples[$cle_where_lie]); |
|
| 873 | - unset($where[$cle_where_lie]); |
|
| 874 | - } |
|
| 875 | - } |
|
| 876 | - unset($from[$cle]); |
|
| 877 | - $k--; |
|
| 878 | - } |
|
| 879 | - |
|
| 880 | - if (count($afrom)) { |
|
| 881 | - // Regarder si la table principale ne sert finalement a rien comme dans |
|
| 882 | - //<BOUCLE3(MOTS){id_article}{id_mot}> class='on'</BOUCLE3> |
|
| 883 | - //<BOUCLE2(MOTS){id_article} />#TOTAL_BOUCLE<//B2> |
|
| 884 | - //<BOUCLE5(RUBRIQUES){id_mot}{tout} />#TOTAL_BOUCLE<//B5> |
|
| 885 | - // ou dans |
|
| 886 | - //<BOUCLE8(HIERARCHIE){id_rubrique}{tout}{type='Squelette'}{inverse}{0,1}{lang_select=non} />#TOTAL_BOUCLE<//B8> |
|
| 887 | - // qui comporte plusieurs jointures |
|
| 888 | - // ou dans |
|
| 889 | - // <BOUCLE6(ARTICLES){id_mot=2}{statut==.*} />#TOTAL_BOUCLE<//B6> |
|
| 890 | - // <BOUCLE7(ARTICLES){id_mot>0}{statut?} />#TOTAL_BOUCLE<//B7> |
|
| 891 | - // penser a regarder aussi la clause orderby pour ne pas simplifier abusivement |
|
| 892 | - // <BOUCLE9(ARTICLES){recherche truc}{par titre}>#ID_ARTICLE</BOUCLE9> |
|
| 893 | - // penser a regarder aussi la clause groubpy pour ne pas simplifier abusivement |
|
| 894 | - // <BOUCLE10(EVENEMENTS){id_rubrique} />#TOTAL_BOUCLE<//B10> |
|
| 895 | - |
|
| 896 | - $t = key($from); |
|
| 897 | - $c = current($from); |
|
| 898 | - reset($from); |
|
| 899 | - $e = '/\b(' . "$t\\." . join('|' . $t . '\.', $equiv) . ')\b/'; |
|
| 900 | - if ( |
|
| 901 | - !(strpos($t, ' ') or // jointure des le depart cf boucle_doc |
|
| 902 | - calculer_jointnul($t, $select, $e) or |
|
| 903 | - calculer_jointnul($t, $join, $e) or |
|
| 904 | - calculer_jointnul($t, $where, $e) or |
|
| 905 | - calculer_jointnul($t, $orderby, $e) or |
|
| 906 | - calculer_jointnul($t, $groupby, $e) or |
|
| 907 | - calculer_jointnul($t, $having, $e)) |
|
| 908 | - && count($afrom[$t]) |
|
| 909 | - ) { |
|
| 910 | - $nfrom = reset($afrom[$t]); |
|
| 911 | - $nt = array_key_first($afrom[$t]); |
|
| 912 | - unset($from[$t]); |
|
| 913 | - $from[$nt] = $nfrom[1]; |
|
| 914 | - unset($afrom[$t][$nt]); |
|
| 915 | - $afrom[$nt] = $afrom[$t]; |
|
| 916 | - unset($afrom[$t]); |
|
| 917 | - $e = '/\b' . preg_quote($nfrom[6]) . '\b/'; |
|
| 918 | - $t = $nfrom[4]; |
|
| 919 | - $alias = ''; |
|
| 920 | - // verifier que les deux cles sont homonymes, sinon installer un alias dans le select |
|
| 921 | - $oldcle = explode('.', $nfrom[6]); |
|
| 922 | - $oldcle = end($oldcle); |
|
| 923 | - $newcle = explode('.', $nfrom[4]); |
|
| 924 | - $newcle = end($newcle); |
|
| 925 | - if ($newcle != $oldcle) { |
|
| 926 | - // si l'ancienne cle etait deja dans le select avec un AS |
|
| 927 | - // reprendre simplement ce AS |
|
| 928 | - $as = '/\b' . preg_quote($nfrom[6]) . '\s+(AS\s+\w+)\b/'; |
|
| 929 | - if (preg_match($as, implode(',', $select), $m)) { |
|
| 930 | - $alias = ''; |
|
| 931 | - } else { |
|
| 932 | - $alias = ', ' . $nfrom[4] . " AS $oldcle"; |
|
| 933 | - } |
|
| 934 | - } |
|
| 935 | - $select = remplacer_jointnul($t . $alias, $select, $e); |
|
| 936 | - $join = remplacer_jointnul($t, $join, $e); |
|
| 937 | - $where = remplacer_jointnul($t, $where, $e); |
|
| 938 | - $having = remplacer_jointnul($t, $having, $e); |
|
| 939 | - $groupby = remplacer_jointnul($t, $groupby, $e); |
|
| 940 | - $orderby = remplacer_jointnul($t, $orderby, $e); |
|
| 941 | - } |
|
| 942 | - $from = reinjecte_joint($afrom, $from); |
|
| 943 | - } |
|
| 944 | - if (empty($GLOBALS['debug']) or !is_array($GLOBALS['debug'])) { |
|
| 945 | - $wasdebug = empty($GLOBALS['debug']) ? false : $GLOBALS['debug']; |
|
| 946 | - $GLOBALS['debug'] = []; |
|
| 947 | - if ($wasdebug) { |
|
| 948 | - $GLOBALS['debug']['debug'] = true; |
|
| 949 | - } |
|
| 950 | - } |
|
| 951 | - $GLOBALS['debug']['aucasou'] = [$table, $id, $serveur, $requeter]; |
|
| 952 | - $r = sql_select( |
|
| 953 | - $select, |
|
| 954 | - $from, |
|
| 955 | - $where, |
|
| 956 | - $groupby, |
|
| 957 | - array_filter($orderby), |
|
| 958 | - $limit, |
|
| 959 | - $having, |
|
| 960 | - $serveur, |
|
| 961 | - $requeter |
|
| 962 | - ); |
|
| 963 | - unset($GLOBALS['debug']['aucasou']); |
|
| 964 | - |
|
| 965 | - return $r; |
|
| 695 | + // retirer les criteres vides: |
|
| 696 | + // {X ?} avec X absent de l'URL |
|
| 697 | + // {par #ENV{X}} avec X absent de l'URL |
|
| 698 | + // IN sur collection vide (ce dernier devrait pouvoir etre fait a la compil) |
|
| 699 | + $menage = false; |
|
| 700 | + foreach ($where as $k => $v) { |
|
| 701 | + if (is_array($v) and count($v)) { |
|
| 702 | + if ((count($v) >= 2) && ($v[0] == 'REGEXP') && ($v[2] == "'.*'")) { |
|
| 703 | + $op = false; |
|
| 704 | + } elseif ((count($v) >= 2) && ($v[0] == 'LIKE') && ($v[2] == "'%'")) { |
|
| 705 | + $op = false; |
|
| 706 | + } else { |
|
| 707 | + $op = $v[0] ?: $v; |
|
| 708 | + } |
|
| 709 | + } else { |
|
| 710 | + $op = $v; |
|
| 711 | + } |
|
| 712 | + if ((!$op) or ($op == 1) or ($op == '0=0')) { |
|
| 713 | + unset($where[$k]); |
|
| 714 | + $menage = true; |
|
| 715 | + } |
|
| 716 | + } |
|
| 717 | + |
|
| 718 | + // evacuer les eventuels groupby vide issus d'un calcul dynamique |
|
| 719 | + $groupby = array_diff($groupby, ['']); |
|
| 720 | + |
|
| 721 | + // remplacer les sous requetes recursives au calcul |
|
| 722 | + [$where_simples, $where_sous] = trouver_sous_requetes($where); |
|
| 723 | + foreach ($where_sous as $k => $w) { |
|
| 724 | + $menage = true; |
|
| 725 | + // on recupere la sous requete |
|
| 726 | + $sous = match_self($w); |
|
| 727 | + if ($sous[0] == 'SELF') { |
|
| 728 | + // c'est une sous requete identique a elle meme sous la forme (SELF,$select,$where) |
|
| 729 | + array_push($where_simples, $sous[2]); |
|
| 730 | + $wheresub = [ |
|
| 731 | + $sous[2], |
|
| 732 | + '0=0' |
|
| 733 | + ]; // pour accepter une string et forcer a faire le menage car on a surement simplifie select et where |
|
| 734 | + $jsub = $join; |
|
| 735 | + // trouver les jointures utiles a |
|
| 736 | + // reinjecter dans le where de la sous requete les conditions supplementaires des jointures qui y sont mentionnees |
|
| 737 | + // ie L1.objet='article' |
|
| 738 | + // on construit le where une fois, puis on ajoute les where complentaires si besoin, et on reconstruit le where en fonction |
|
| 739 | + $i = 0; |
|
| 740 | + do { |
|
| 741 | + $where[$k] = remplace_sous_requete($w, '(' . calculer_select( |
|
| 742 | + [$sous[1] . ' AS id'], |
|
| 743 | + $from, |
|
| 744 | + $from_type, |
|
| 745 | + $wheresub, |
|
| 746 | + $jsub, |
|
| 747 | + [], |
|
| 748 | + [], |
|
| 749 | + '', |
|
| 750 | + $having, |
|
| 751 | + $table, |
|
| 752 | + $id, |
|
| 753 | + $serveur, |
|
| 754 | + false |
|
| 755 | + ) . ')'); |
|
| 756 | + if (!$i) { |
|
| 757 | + $i = 1; |
|
| 758 | + $wherestring = calculer_where_to_string($where[$k]); |
|
| 759 | + foreach ($join as $cle => $wj) { |
|
| 760 | + if ( |
|
| 761 | + (is_countable($wj) ? count($wj) : 0) == 4 |
|
| 762 | + and strpos($wherestring, (string) "{$cle}.") !== false |
|
| 763 | + ) { |
|
| 764 | + $i = 0; |
|
| 765 | + $wheresub[] = $wj[3]; |
|
| 766 | + unset($jsub[$cle][3]); |
|
| 767 | + } |
|
| 768 | + } |
|
| 769 | + } |
|
| 770 | + } while ($i++ < 1); |
|
| 771 | + } |
|
| 772 | + if ($sous[0] == 'SUBSELECT') { |
|
| 773 | + // c'est une sous requete explicite sous la forme identique a sql_select : (SUBSELECT,$select,$from,$where,$groupby,$orderby,$limit,$having) |
|
| 774 | + array_push($where_simples, $sous[3]); // est-ce utile dans ce cas ? |
|
| 775 | + $where[$k] = remplace_sous_requete($w, '(' . calculer_select( |
|
| 776 | + $sous[1], # select |
|
| 777 | + $sous[2], #from |
|
| 778 | + [], #from_type |
|
| 779 | + $sous[3] ? (is_array($sous[3]) ? $sous[3] : [$sous[3]]) : [], |
|
| 780 | + #where, qui peut etre de la forme string comme dans sql_select |
|
| 781 | + [], #join |
|
| 782 | + $sous[4] ?: [], #groupby |
|
| 783 | + $sous[5] ?: [], #orderby |
|
| 784 | + $sous[6], #limit |
|
| 785 | + $sous[7] ?: [], #having |
|
| 786 | + $table, |
|
| 787 | + $id, |
|
| 788 | + $serveur, |
|
| 789 | + false |
|
| 790 | + ) . ')'); |
|
| 791 | + } |
|
| 792 | + array_pop($where_simples); |
|
| 793 | + } |
|
| 794 | + |
|
| 795 | + foreach ($having as $k => $v) { |
|
| 796 | + if ((!$v) or ($v == 1) or ($v == '0=0')) { |
|
| 797 | + unset($having[$k]); |
|
| 798 | + } |
|
| 799 | + } |
|
| 800 | + |
|
| 801 | + // Installer les jointures. |
|
| 802 | + // Retirer celles seulement utiles aux criteres finalement absents mais |
|
| 803 | + // parcourir de la plus recente a la moins recente pour pouvoir eliminer Ln |
|
| 804 | + // si elle est seulement utile a Ln+1 elle meme inutile |
|
| 805 | + |
|
| 806 | + $afrom = []; |
|
| 807 | + $equiv = []; |
|
| 808 | + $k = count($join); |
|
| 809 | + foreach (array_reverse($join, true) as $cledef => $j) { |
|
| 810 | + $cle = $cledef; |
|
| 811 | + // le format de join est : |
|
| 812 | + // array(table depart, cle depart [,cle arrivee[,condition optionnelle and ...]]) |
|
| 813 | + $join[$cle] = array_values($join[$cle]); // recalculer les cles car des unset ont pu perturber |
|
| 814 | + if (count($join[$cle]) == 2) { |
|
| 815 | + $join[$cle][] = $join[$cle][1]; |
|
| 816 | + } |
|
| 817 | + if ((is_array($join[$cle]) || $join[$cle] instanceof \Countable ? count($join[$cle]) : 0) == 3) { |
|
| 818 | + $join[$cle][] = ''; |
|
| 819 | + } |
|
| 820 | + [$t, $c, $carr, $and] = $join[$cle]; |
|
| 821 | + // si le nom de la jointure n'a pas ete specifiee, on prend Lx avec x sont rang dans la liste |
|
| 822 | + // pour compat avec ancienne convention |
|
| 823 | + if (is_numeric($cle)) { |
|
| 824 | + $cle = "L$k"; |
|
| 825 | + } |
|
| 826 | + $cle_where_lie = "JOIN-$cle"; |
|
| 827 | + if ( |
|
| 828 | + !$menage |
|
| 829 | + or isset($afrom[$cle]) |
|
| 830 | + or calculer_jointnul($cle, $select) |
|
| 831 | + or calculer_jointnul($cle, array_diff_key($join, [$cle => $join[$cle]])) |
|
| 832 | + or calculer_jointnul($cle, $having) |
|
| 833 | + or calculer_jointnul($cle, array_diff_key($where_simples, [$cle_where_lie => ''])) |
|
| 834 | + ) { |
|
| 835 | + // corriger les references non explicites dans select |
|
| 836 | + // ou groupby |
|
| 837 | + foreach ($select as $i => $s) { |
|
| 838 | + if ($s == $c) { |
|
| 839 | + $select[$i] = "$cle.$c AS $c"; |
|
| 840 | + break; |
|
| 841 | + } |
|
| 842 | + } |
|
| 843 | + foreach ($groupby as $i => $g) { |
|
| 844 | + if ($g == $c) { |
|
| 845 | + $groupby[$i] = "$cle.$c"; |
|
| 846 | + break; |
|
| 847 | + } |
|
| 848 | + } |
|
| 849 | + // on garde une ecriture decomposee pour permettre une simplification ulterieure si besoin |
|
| 850 | + // sans recours a preg_match |
|
| 851 | + // un implode(' ',..) est fait dans reinjecte_joint un peu plus bas |
|
| 852 | + $afrom[$t][$cle] = [ |
|
| 853 | + "\n" . |
|
| 854 | + ($from_type[$cle] ?? 'INNER') . ' JOIN', |
|
| 855 | + $from[$cle], |
|
| 856 | + "AS $cle", |
|
| 857 | + 'ON (', |
|
| 858 | + "$cle.$c", |
|
| 859 | + '=', |
|
| 860 | + "$t.$carr", |
|
| 861 | + ($and ? 'AND ' . $and : '') . |
|
| 862 | + ')' |
|
| 863 | + ]; |
|
| 864 | + if (isset($afrom[$cle])) { |
|
| 865 | + $afrom[$t] = $afrom[$t] + $afrom[$cle]; |
|
| 866 | + unset($afrom[$cle]); |
|
| 867 | + } |
|
| 868 | + $equiv[] = $carr; |
|
| 869 | + } else { |
|
| 870 | + unset($join[$cledef]); |
|
| 871 | + if (isset($where_simples[$cle_where_lie])) { |
|
| 872 | + unset($where_simples[$cle_where_lie]); |
|
| 873 | + unset($where[$cle_where_lie]); |
|
| 874 | + } |
|
| 875 | + } |
|
| 876 | + unset($from[$cle]); |
|
| 877 | + $k--; |
|
| 878 | + } |
|
| 879 | + |
|
| 880 | + if (count($afrom)) { |
|
| 881 | + // Regarder si la table principale ne sert finalement a rien comme dans |
|
| 882 | + //<BOUCLE3(MOTS){id_article}{id_mot}> class='on'</BOUCLE3> |
|
| 883 | + //<BOUCLE2(MOTS){id_article} />#TOTAL_BOUCLE<//B2> |
|
| 884 | + //<BOUCLE5(RUBRIQUES){id_mot}{tout} />#TOTAL_BOUCLE<//B5> |
|
| 885 | + // ou dans |
|
| 886 | + //<BOUCLE8(HIERARCHIE){id_rubrique}{tout}{type='Squelette'}{inverse}{0,1}{lang_select=non} />#TOTAL_BOUCLE<//B8> |
|
| 887 | + // qui comporte plusieurs jointures |
|
| 888 | + // ou dans |
|
| 889 | + // <BOUCLE6(ARTICLES){id_mot=2}{statut==.*} />#TOTAL_BOUCLE<//B6> |
|
| 890 | + // <BOUCLE7(ARTICLES){id_mot>0}{statut?} />#TOTAL_BOUCLE<//B7> |
|
| 891 | + // penser a regarder aussi la clause orderby pour ne pas simplifier abusivement |
|
| 892 | + // <BOUCLE9(ARTICLES){recherche truc}{par titre}>#ID_ARTICLE</BOUCLE9> |
|
| 893 | + // penser a regarder aussi la clause groubpy pour ne pas simplifier abusivement |
|
| 894 | + // <BOUCLE10(EVENEMENTS){id_rubrique} />#TOTAL_BOUCLE<//B10> |
|
| 895 | + |
|
| 896 | + $t = key($from); |
|
| 897 | + $c = current($from); |
|
| 898 | + reset($from); |
|
| 899 | + $e = '/\b(' . "$t\\." . join('|' . $t . '\.', $equiv) . ')\b/'; |
|
| 900 | + if ( |
|
| 901 | + !(strpos($t, ' ') or // jointure des le depart cf boucle_doc |
|
| 902 | + calculer_jointnul($t, $select, $e) or |
|
| 903 | + calculer_jointnul($t, $join, $e) or |
|
| 904 | + calculer_jointnul($t, $where, $e) or |
|
| 905 | + calculer_jointnul($t, $orderby, $e) or |
|
| 906 | + calculer_jointnul($t, $groupby, $e) or |
|
| 907 | + calculer_jointnul($t, $having, $e)) |
|
| 908 | + && count($afrom[$t]) |
|
| 909 | + ) { |
|
| 910 | + $nfrom = reset($afrom[$t]); |
|
| 911 | + $nt = array_key_first($afrom[$t]); |
|
| 912 | + unset($from[$t]); |
|
| 913 | + $from[$nt] = $nfrom[1]; |
|
| 914 | + unset($afrom[$t][$nt]); |
|
| 915 | + $afrom[$nt] = $afrom[$t]; |
|
| 916 | + unset($afrom[$t]); |
|
| 917 | + $e = '/\b' . preg_quote($nfrom[6]) . '\b/'; |
|
| 918 | + $t = $nfrom[4]; |
|
| 919 | + $alias = ''; |
|
| 920 | + // verifier que les deux cles sont homonymes, sinon installer un alias dans le select |
|
| 921 | + $oldcle = explode('.', $nfrom[6]); |
|
| 922 | + $oldcle = end($oldcle); |
|
| 923 | + $newcle = explode('.', $nfrom[4]); |
|
| 924 | + $newcle = end($newcle); |
|
| 925 | + if ($newcle != $oldcle) { |
|
| 926 | + // si l'ancienne cle etait deja dans le select avec un AS |
|
| 927 | + // reprendre simplement ce AS |
|
| 928 | + $as = '/\b' . preg_quote($nfrom[6]) . '\s+(AS\s+\w+)\b/'; |
|
| 929 | + if (preg_match($as, implode(',', $select), $m)) { |
|
| 930 | + $alias = ''; |
|
| 931 | + } else { |
|
| 932 | + $alias = ', ' . $nfrom[4] . " AS $oldcle"; |
|
| 933 | + } |
|
| 934 | + } |
|
| 935 | + $select = remplacer_jointnul($t . $alias, $select, $e); |
|
| 936 | + $join = remplacer_jointnul($t, $join, $e); |
|
| 937 | + $where = remplacer_jointnul($t, $where, $e); |
|
| 938 | + $having = remplacer_jointnul($t, $having, $e); |
|
| 939 | + $groupby = remplacer_jointnul($t, $groupby, $e); |
|
| 940 | + $orderby = remplacer_jointnul($t, $orderby, $e); |
|
| 941 | + } |
|
| 942 | + $from = reinjecte_joint($afrom, $from); |
|
| 943 | + } |
|
| 944 | + if (empty($GLOBALS['debug']) or !is_array($GLOBALS['debug'])) { |
|
| 945 | + $wasdebug = empty($GLOBALS['debug']) ? false : $GLOBALS['debug']; |
|
| 946 | + $GLOBALS['debug'] = []; |
|
| 947 | + if ($wasdebug) { |
|
| 948 | + $GLOBALS['debug']['debug'] = true; |
|
| 949 | + } |
|
| 950 | + } |
|
| 951 | + $GLOBALS['debug']['aucasou'] = [$table, $id, $serveur, $requeter]; |
|
| 952 | + $r = sql_select( |
|
| 953 | + $select, |
|
| 954 | + $from, |
|
| 955 | + $where, |
|
| 956 | + $groupby, |
|
| 957 | + array_filter($orderby), |
|
| 958 | + $limit, |
|
| 959 | + $having, |
|
| 960 | + $serveur, |
|
| 961 | + $requeter |
|
| 962 | + ); |
|
| 963 | + unset($GLOBALS['debug']['aucasou']); |
|
| 964 | + |
|
| 965 | + return $r; |
|
| 966 | 966 | } |
| 967 | 967 | |
| 968 | 968 | /** |
@@ -973,79 +973,79 @@ discard block |
||
| 973 | 973 | * @return string |
| 974 | 974 | */ |
| 975 | 975 | function calculer_where_to_string($v, $join = 'AND') { |
| 976 | - if (empty($v)) { |
|
| 977 | - return ''; |
|
| 978 | - } |
|
| 979 | - |
|
| 980 | - if (!is_array($v)) { |
|
| 981 | - return $v; |
|
| 982 | - } else { |
|
| 983 | - $exp = ''; |
|
| 984 | - if (strtoupper($join) === 'AND') { |
|
| 985 | - return $exp . join(" $join ", array_map('calculer_where_to_string', $v)); |
|
| 986 | - } else { |
|
| 987 | - return $exp . join($join, $v); |
|
| 988 | - } |
|
| 989 | - } |
|
| 976 | + if (empty($v)) { |
|
| 977 | + return ''; |
|
| 978 | + } |
|
| 979 | + |
|
| 980 | + if (!is_array($v)) { |
|
| 981 | + return $v; |
|
| 982 | + } else { |
|
| 983 | + $exp = ''; |
|
| 984 | + if (strtoupper($join) === 'AND') { |
|
| 985 | + return $exp . join(" $join ", array_map('calculer_where_to_string', $v)); |
|
| 986 | + } else { |
|
| 987 | + return $exp . join($join, $v); |
|
| 988 | + } |
|
| 989 | + } |
|
| 990 | 990 | } |
| 991 | 991 | |
| 992 | 992 | |
| 993 | 993 | //condition suffisante (mais non necessaire) pour qu'une table soit utile |
| 994 | 994 | |
| 995 | 995 | function calculer_jointnul($cle, $exp, $equiv = '') { |
| 996 | - if (!is_array($exp)) { |
|
| 997 | - if ($equiv) { |
|
| 998 | - $exp = preg_replace($equiv, '', $exp); |
|
| 999 | - } |
|
| 1000 | - |
|
| 1001 | - return preg_match("/\\b$cle\\./", $exp); |
|
| 1002 | - } else { |
|
| 1003 | - foreach ($exp as $v) { |
|
| 1004 | - if (calculer_jointnul($cle, $v, $equiv)) { |
|
| 1005 | - return true; |
|
| 1006 | - } |
|
| 1007 | - } |
|
| 1008 | - |
|
| 1009 | - return false; |
|
| 1010 | - } |
|
| 996 | + if (!is_array($exp)) { |
|
| 997 | + if ($equiv) { |
|
| 998 | + $exp = preg_replace($equiv, '', $exp); |
|
| 999 | + } |
|
| 1000 | + |
|
| 1001 | + return preg_match("/\\b$cle\\./", $exp); |
|
| 1002 | + } else { |
|
| 1003 | + foreach ($exp as $v) { |
|
| 1004 | + if (calculer_jointnul($cle, $v, $equiv)) { |
|
| 1005 | + return true; |
|
| 1006 | + } |
|
| 1007 | + } |
|
| 1008 | + |
|
| 1009 | + return false; |
|
| 1010 | + } |
|
| 1011 | 1011 | } |
| 1012 | 1012 | |
| 1013 | 1013 | function reinjecte_joint($afrom, $from) { |
| 1014 | - $from_synth = []; |
|
| 1015 | - foreach ($from as $k => $v) { |
|
| 1016 | - $from_synth[$k] = $from[$k]; |
|
| 1017 | - if (isset($afrom[$k])) { |
|
| 1018 | - foreach ($afrom[$k] as $kk => $vv) { |
|
| 1019 | - $afrom[$k][$kk] = implode(' ', $afrom[$k][$kk]); |
|
| 1020 | - } |
|
| 1021 | - $from_synth["$k@"] = implode(' ', $afrom[$k]); |
|
| 1022 | - unset($afrom[$k]); |
|
| 1023 | - } |
|
| 1024 | - } |
|
| 1025 | - |
|
| 1026 | - return $from_synth; |
|
| 1014 | + $from_synth = []; |
|
| 1015 | + foreach ($from as $k => $v) { |
|
| 1016 | + $from_synth[$k] = $from[$k]; |
|
| 1017 | + if (isset($afrom[$k])) { |
|
| 1018 | + foreach ($afrom[$k] as $kk => $vv) { |
|
| 1019 | + $afrom[$k][$kk] = implode(' ', $afrom[$k][$kk]); |
|
| 1020 | + } |
|
| 1021 | + $from_synth["$k@"] = implode(' ', $afrom[$k]); |
|
| 1022 | + unset($afrom[$k]); |
|
| 1023 | + } |
|
| 1024 | + } |
|
| 1025 | + |
|
| 1026 | + return $from_synth; |
|
| 1027 | 1027 | } |
| 1028 | 1028 | |
| 1029 | 1029 | function remplacer_jointnul($cle, $exp, $equiv = '') { |
| 1030 | - if (!is_array($exp)) { |
|
| 1031 | - return preg_replace($equiv, $cle, $exp); |
|
| 1032 | - } else { |
|
| 1033 | - foreach ($exp as $k => $v) { |
|
| 1034 | - $exp[$k] = remplacer_jointnul($cle, $v, $equiv); |
|
| 1035 | - } |
|
| 1036 | - |
|
| 1037 | - return $exp; |
|
| 1038 | - } |
|
| 1030 | + if (!is_array($exp)) { |
|
| 1031 | + return preg_replace($equiv, $cle, $exp); |
|
| 1032 | + } else { |
|
| 1033 | + foreach ($exp as $k => $v) { |
|
| 1034 | + $exp[$k] = remplacer_jointnul($cle, $v, $equiv); |
|
| 1035 | + } |
|
| 1036 | + |
|
| 1037 | + return $exp; |
|
| 1038 | + } |
|
| 1039 | 1039 | } |
| 1040 | 1040 | |
| 1041 | 1041 | // calcul du nom du squelette |
| 1042 | 1042 | function calculer_nom_fonction_squel($skel, $mime_type = 'html', string $connect = '') { |
| 1043 | - // ne pas doublonner les squelette selon qu'ils sont calcules depuis ecrire/ ou depuis la racine |
|
| 1044 | - if ($l = strlen(_DIR_RACINE) and strncmp($skel, _DIR_RACINE, $l) == 0) { |
|
| 1045 | - $skel = substr($skel, strlen(_DIR_RACINE)); |
|
| 1046 | - } |
|
| 1047 | - |
|
| 1048 | - return $mime_type |
|
| 1049 | - . (!$connect ? '' : preg_replace('/\W/', '_', $connect)) . '_' |
|
| 1050 | - . md5($GLOBALS['spip_version_code'] . ' * ' . $skel . (isset($GLOBALS['marqueur_skel']) ? '*' . $GLOBALS['marqueur_skel'] : '')); |
|
| 1043 | + // ne pas doublonner les squelette selon qu'ils sont calcules depuis ecrire/ ou depuis la racine |
|
| 1044 | + if ($l = strlen(_DIR_RACINE) and strncmp($skel, _DIR_RACINE, $l) == 0) { |
|
| 1045 | + $skel = substr($skel, strlen(_DIR_RACINE)); |
|
| 1046 | + } |
|
| 1047 | + |
|
| 1048 | + return $mime_type |
|
| 1049 | + . (!$connect ? '' : preg_replace('/\W/', '_', $connect)) . '_' |
|
| 1050 | + . md5($GLOBALS['spip_version_code'] . ' * ' . $skel . (isset($GLOBALS['marqueur_skel']) ? '*' . $GLOBALS['marqueur_skel'] : '')); |
|
| 1051 | 1051 | } |
@@ -55,7 +55,7 @@ discard block |
||
| 55 | 55 | $GLOBALS['debug_objets']['courant'] = $nom; |
| 56 | 56 | } |
| 57 | 57 | |
| 58 | - $phpfile = sous_repertoire(_DIR_SKELS, '', false, true) . $nom . '.php'; |
|
| 58 | + $phpfile = sous_repertoire(_DIR_SKELS, '', false, true).$nom.'.php'; |
|
| 59 | 59 | |
| 60 | 60 | // si squelette est deja compile et perenne, le charger |
| 61 | 61 | if (!squelette_obsolete($phpfile, $source)) { |
@@ -68,7 +68,7 @@ discard block |
||
| 68 | 68 | #} |
| 69 | 69 | } |
| 70 | 70 | |
| 71 | - if (file_exists($lib = $squelette . '_fonctions' . '.php')) { |
|
| 71 | + if (file_exists($lib = $squelette.'_fonctions'.'.php')) { |
|
| 72 | 72 | include_once $lib; |
| 73 | 73 | } |
| 74 | 74 | |
@@ -96,7 +96,7 @@ discard block |
||
| 96 | 96 | eval("return true; $f ;"); |
| 97 | 97 | } catch (\ParseError $e) { |
| 98 | 98 | // Code syntaxiquement faux (critere etc mal programme') |
| 99 | - $msg = _T('zbug_erreur_compilation') . ' | Line ' . $e->getLine() . ' : ' . $e->getMessage(); |
|
| 99 | + $msg = _T('zbug_erreur_compilation').' | Line '.$e->getLine().' : '.$e->getMessage(); |
|
| 100 | 100 | erreur_squelette($msg, $boucle); |
| 101 | 101 | // continuer pour trouver d'autres fautes eventuelles |
| 102 | 102 | // mais prevenir que c'est mort |
@@ -124,7 +124,7 @@ discard block |
||
| 124 | 124 | |
| 125 | 125 | if (defined('_VAR_MODE') and _VAR_MODE == 'debug') { |
| 126 | 126 | // Tracer ce qui vient d'etre compile |
| 127 | - $GLOBALS['debug_objets']['code'][$nom . 'tout'] = $code; |
|
| 127 | + $GLOBALS['debug_objets']['code'][$nom.'tout'] = $code; |
|
| 128 | 128 | |
| 129 | 129 | // si c'est ce que demande le debusqueur, lui passer la main |
| 130 | 130 | if ( |
@@ -148,13 +148,13 @@ discard block |
||
| 148 | 148 | $code = " |
| 149 | 149 | /* |
| 150 | 150 | * Squelette : $sourcefile |
| 151 | - * Date : " . gmdate('D, d M Y H:i:s', @filemtime($sourcefile)) . ' GMT |
|
| 152 | - * Compile : ' . gmdate('D, d M Y H:i:s', time()) . ' GMT |
|
| 153 | - * ' . (!$boucles ? 'Pas de boucle' : ('Boucles : ' . $noms)) . ' |
|
| 151 | + * Date : ".gmdate('D, d M Y H:i:s', @filemtime($sourcefile)).' GMT |
|
| 152 | + * Compile : ' . gmdate('D, d M Y H:i:s', time()).' GMT |
|
| 153 | + * ' . (!$boucles ? 'Pas de boucle' : ('Boucles : '.$noms)).' |
|
| 154 | 154 | */ '; |
| 155 | 155 | } |
| 156 | 156 | |
| 157 | - $code = '<' . "?php\n" . $code . join('', $boucles) . "\n"; |
|
| 157 | + $code = '<'."?php\n".$code.join('', $boucles)."\n"; |
|
| 158 | 158 | if (!defined('_VAR_NOCACHE') or !_VAR_NOCACHE) { |
| 159 | 159 | ecrire_fichier($phpfile, $code); |
| 160 | 160 | } |
@@ -216,7 +216,7 @@ discard block |
||
| 216 | 216 | $j = join('-', array_map('ucwords', explode('-', strtolower($r[2])))); |
| 217 | 217 | |
| 218 | 218 | if ($j == 'X-Spip-Filtre' and isset($headers[$j])) { |
| 219 | - $headers[$j] .= '|' . $r[3]; |
|
| 219 | + $headers[$j] .= '|'.$r[3]; |
|
| 220 | 220 | } else { |
| 221 | 221 | $headers[$j] = $r[3]; |
| 222 | 222 | } |
@@ -224,10 +224,10 @@ discard block |
||
| 224 | 224 | } |
| 225 | 225 | // S'agit-il d'un resultat constant ou contenant du code php |
| 226 | 226 | $process_ins = ( |
| 227 | - strpos($corps, '<' . '?') === false |
|
| 227 | + strpos($corps, '<'.'?') === false |
|
| 228 | 228 | or |
| 229 | - (strpos($corps, '<' . '?xml') !== false and |
|
| 230 | - strpos(str_replace('<' . '?xml', '', $corps), '<' . '?') === false) |
|
| 229 | + (strpos($corps, '<'.'?xml') !== false and |
|
| 230 | + strpos(str_replace('<'.'?xml', '', $corps), '<'.'?') === false) |
|
| 231 | 231 | ) |
| 232 | 232 | ? 'html' |
| 233 | 233 | : 'php'; |
@@ -256,10 +256,10 @@ discard block |
||
| 256 | 256 | |
| 257 | 257 | if ($process_ins == 'html') { |
| 258 | 258 | $skel['process_ins'] = ( |
| 259 | - strpos($corps, '<' . '?') === false |
|
| 259 | + strpos($corps, '<'.'?') === false |
|
| 260 | 260 | or |
| 261 | - (strpos($corps, '<' . '?xml') !== false and |
|
| 262 | - strpos(str_replace('<' . '?xml', '', $corps), '<' . '?') === false) |
|
| 261 | + (strpos($corps, '<'.'?xml') !== false and |
|
| 262 | + strpos(str_replace('<'.'?xml', '', $corps), '<'.'?') === false) |
|
| 263 | 263 | ) |
| 264 | 264 | ? 'html' |
| 265 | 265 | : 'php'; |
@@ -277,7 +277,7 @@ discard block |
||
| 277 | 277 | // |
| 278 | 278 | |
| 279 | 279 | /** Code PHP pour inclure une balise dynamique à l'exécution d'une page */ |
| 280 | -define('CODE_INCLURE_BALISE', '<' . '?php |
|
| 280 | +define('CODE_INCLURE_BALISE', '<'.'?php |
|
| 281 | 281 | include_once("%s"); |
| 282 | 282 | if ($lang_select = "%s") $lang_select = lang_select($lang_select); |
| 283 | 283 | inserer_balise_dynamique(balise_%s_dyn(%s), array(%s)); |
@@ -308,7 +308,7 @@ discard block |
||
| 308 | 308 | // pas de lien symbolique sous Windows |
| 309 | 309 | and !(stristr(PHP_OS, 'WIN') and strpos($file, ':') !== false) |
| 310 | 310 | ) { |
| 311 | - $file = './" . _DIR_RACINE . "' . $file; |
|
| 311 | + $file = './" . _DIR_RACINE . "'.$file; |
|
| 312 | 312 | } |
| 313 | 313 | |
| 314 | 314 | $lang = $context_compil[4]; |
@@ -318,7 +318,7 @@ discard block |
||
| 318 | 318 | |
| 319 | 319 | $args = array_map('argumenter_squelette', $args); |
| 320 | 320 | if (!empty($context_compil['appel_php_depuis_modele'])) { |
| 321 | - $args[0] = 'arguments_balise_dyn_depuis_modele(' . $args[0] . ')'; |
|
| 321 | + $args[0] = 'arguments_balise_dyn_depuis_modele('.$args[0].')'; |
|
| 322 | 322 | } |
| 323 | 323 | $args = join(', ', $args); |
| 324 | 324 | |
@@ -352,14 +352,14 @@ discard block |
||
| 352 | 352 | if (is_object($v)) { |
| 353 | 353 | return var_export($v, true); |
| 354 | 354 | } elseif (!is_array($v)) { |
| 355 | - return "'" . texte_script((string) $v) . "'"; |
|
| 355 | + return "'".texte_script((string) $v)."'"; |
|
| 356 | 356 | } else { |
| 357 | 357 | $out = []; |
| 358 | 358 | foreach ($v as $k => $val) { |
| 359 | - $out [] = argumenter_squelette($k) . '=>' . argumenter_squelette($val); |
|
| 359 | + $out [] = argumenter_squelette($k).'=>'.argumenter_squelette($val); |
|
| 360 | 360 | } |
| 361 | 361 | |
| 362 | - return 'array(' . join(', ', $out) . ')'; |
|
| 362 | + return 'array('.join(', ', $out).')'; |
|
| 363 | 363 | } |
| 364 | 364 | } |
| 365 | 365 | |
@@ -437,7 +437,7 @@ discard block |
||
| 437 | 437 | } |
| 438 | 438 | |
| 439 | 439 | // Y a-t-il une fonction de traitement des arguments ? |
| 440 | - $f = 'balise_' . $nom_balise . '_stat'; |
|
| 440 | + $f = 'balise_'.$nom_balise.'_stat'; |
|
| 441 | 441 | |
| 442 | 442 | $r = !function_exists($f) ? $args : $f($args, $context_compil); |
| 443 | 443 | |
@@ -447,18 +447,18 @@ discard block |
||
| 447 | 447 | |
| 448 | 448 | // verifier que la fonction dyn est la, |
| 449 | 449 | // sinon se replier sur la generique si elle existe |
| 450 | - if (!function_exists('balise_' . $nom_balise . '_dyn')) { |
|
| 450 | + if (!function_exists('balise_'.$nom_balise.'_dyn')) { |
|
| 451 | 451 | if ( |
| 452 | 452 | $balise_generique = chercher_balise_generique($nom) |
| 453 | 453 | and $nom_balise_generique = $balise_generique['nom_generique'] |
| 454 | - and $file = include_spip('balise/' . strtolower($nom_balise_generique)) |
|
| 455 | - and function_exists('balise_' . $nom_balise_generique . '_dyn') |
|
| 454 | + and $file = include_spip('balise/'.strtolower($nom_balise_generique)) |
|
| 455 | + and function_exists('balise_'.$nom_balise_generique.'_dyn') |
|
| 456 | 456 | ) { |
| 457 | 457 | // et lui injecter en premier arg le nom de la balise |
| 458 | 458 | array_unshift($r, $nom); |
| 459 | 459 | $nom_balise = $nom_balise_generique; |
| 460 | 460 | if (!_DIR_RESTREINT) { |
| 461 | - $file = _DIR_RESTREINT_ABS . $file; |
|
| 461 | + $file = _DIR_RESTREINT_ABS.$file; |
|
| 462 | 462 | } |
| 463 | 463 | } else { |
| 464 | 464 | $msg = ['zbug_balise_inexistante', ['from' => 'CVT', 'balise' => $nom]]; |
@@ -559,7 +559,7 @@ discard block |
||
| 559 | 559 | $n = ''; |
| 560 | 560 | foreach (explode(',', $liste) as $val) { |
| 561 | 561 | if ($a = intval($val) and $val === strval($a)) { |
| 562 | - $n .= ',' . $val; |
|
| 562 | + $n .= ','.$val; |
|
| 563 | 563 | } |
| 564 | 564 | } |
| 565 | 565 | if (strlen($n)) { |
@@ -738,8 +738,8 @@ discard block |
||
| 738 | 738 | // on construit le where une fois, puis on ajoute les where complentaires si besoin, et on reconstruit le where en fonction |
| 739 | 739 | $i = 0; |
| 740 | 740 | do { |
| 741 | - $where[$k] = remplace_sous_requete($w, '(' . calculer_select( |
|
| 742 | - [$sous[1] . ' AS id'], |
|
| 741 | + $where[$k] = remplace_sous_requete($w, '('.calculer_select( |
|
| 742 | + [$sous[1].' AS id'], |
|
| 743 | 743 | $from, |
| 744 | 744 | $from_type, |
| 745 | 745 | $wheresub, |
@@ -752,7 +752,7 @@ discard block |
||
| 752 | 752 | $id, |
| 753 | 753 | $serveur, |
| 754 | 754 | false |
| 755 | - ) . ')'); |
|
| 755 | + ).')'); |
|
| 756 | 756 | if (!$i) { |
| 757 | 757 | $i = 1; |
| 758 | 758 | $wherestring = calculer_where_to_string($where[$k]); |
@@ -772,7 +772,7 @@ discard block |
||
| 772 | 772 | if ($sous[0] == 'SUBSELECT') { |
| 773 | 773 | // c'est une sous requete explicite sous la forme identique a sql_select : (SUBSELECT,$select,$from,$where,$groupby,$orderby,$limit,$having) |
| 774 | 774 | array_push($where_simples, $sous[3]); // est-ce utile dans ce cas ? |
| 775 | - $where[$k] = remplace_sous_requete($w, '(' . calculer_select( |
|
| 775 | + $where[$k] = remplace_sous_requete($w, '('.calculer_select( |
|
| 776 | 776 | $sous[1], # select |
| 777 | 777 | $sous[2], #from |
| 778 | 778 | [], #from_type |
@@ -787,7 +787,7 @@ discard block |
||
| 787 | 787 | $id, |
| 788 | 788 | $serveur, |
| 789 | 789 | false |
| 790 | - ) . ')'); |
|
| 790 | + ).')'); |
|
| 791 | 791 | } |
| 792 | 792 | array_pop($where_simples); |
| 793 | 793 | } |
@@ -850,15 +850,15 @@ discard block |
||
| 850 | 850 | // sans recours a preg_match |
| 851 | 851 | // un implode(' ',..) est fait dans reinjecte_joint un peu plus bas |
| 852 | 852 | $afrom[$t][$cle] = [ |
| 853 | - "\n" . |
|
| 854 | - ($from_type[$cle] ?? 'INNER') . ' JOIN', |
|
| 853 | + "\n". |
|
| 854 | + ($from_type[$cle] ?? 'INNER').' JOIN', |
|
| 855 | 855 | $from[$cle], |
| 856 | 856 | "AS $cle", |
| 857 | 857 | 'ON (', |
| 858 | 858 | "$cle.$c", |
| 859 | 859 | '=', |
| 860 | 860 | "$t.$carr", |
| 861 | - ($and ? 'AND ' . $and : '') . |
|
| 861 | + ($and ? 'AND '.$and : ''). |
|
| 862 | 862 | ')' |
| 863 | 863 | ]; |
| 864 | 864 | if (isset($afrom[$cle])) { |
@@ -896,7 +896,7 @@ discard block |
||
| 896 | 896 | $t = key($from); |
| 897 | 897 | $c = current($from); |
| 898 | 898 | reset($from); |
| 899 | - $e = '/\b(' . "$t\\." . join('|' . $t . '\.', $equiv) . ')\b/'; |
|
| 899 | + $e = '/\b('."$t\\.".join('|'.$t.'\.', $equiv).')\b/'; |
|
| 900 | 900 | if ( |
| 901 | 901 | !(strpos($t, ' ') or // jointure des le depart cf boucle_doc |
| 902 | 902 | calculer_jointnul($t, $select, $e) or |
@@ -914,7 +914,7 @@ discard block |
||
| 914 | 914 | unset($afrom[$t][$nt]); |
| 915 | 915 | $afrom[$nt] = $afrom[$t]; |
| 916 | 916 | unset($afrom[$t]); |
| 917 | - $e = '/\b' . preg_quote($nfrom[6]) . '\b/'; |
|
| 917 | + $e = '/\b'.preg_quote($nfrom[6]).'\b/'; |
|
| 918 | 918 | $t = $nfrom[4]; |
| 919 | 919 | $alias = ''; |
| 920 | 920 | // verifier que les deux cles sont homonymes, sinon installer un alias dans le select |
@@ -925,14 +925,14 @@ discard block |
||
| 925 | 925 | if ($newcle != $oldcle) { |
| 926 | 926 | // si l'ancienne cle etait deja dans le select avec un AS |
| 927 | 927 | // reprendre simplement ce AS |
| 928 | - $as = '/\b' . preg_quote($nfrom[6]) . '\s+(AS\s+\w+)\b/'; |
|
| 928 | + $as = '/\b'.preg_quote($nfrom[6]).'\s+(AS\s+\w+)\b/'; |
|
| 929 | 929 | if (preg_match($as, implode(',', $select), $m)) { |
| 930 | 930 | $alias = ''; |
| 931 | 931 | } else { |
| 932 | - $alias = ', ' . $nfrom[4] . " AS $oldcle"; |
|
| 932 | + $alias = ', '.$nfrom[4]." AS $oldcle"; |
|
| 933 | 933 | } |
| 934 | 934 | } |
| 935 | - $select = remplacer_jointnul($t . $alias, $select, $e); |
|
| 935 | + $select = remplacer_jointnul($t.$alias, $select, $e); |
|
| 936 | 936 | $join = remplacer_jointnul($t, $join, $e); |
| 937 | 937 | $where = remplacer_jointnul($t, $where, $e); |
| 938 | 938 | $having = remplacer_jointnul($t, $having, $e); |
@@ -982,9 +982,9 @@ discard block |
||
| 982 | 982 | } else { |
| 983 | 983 | $exp = ''; |
| 984 | 984 | if (strtoupper($join) === 'AND') { |
| 985 | - return $exp . join(" $join ", array_map('calculer_where_to_string', $v)); |
|
| 985 | + return $exp.join(" $join ", array_map('calculer_where_to_string', $v)); |
|
| 986 | 986 | } else { |
| 987 | - return $exp . join($join, $v); |
|
| 987 | + return $exp.join($join, $v); |
|
| 988 | 988 | } |
| 989 | 989 | } |
| 990 | 990 | } |
@@ -1046,6 +1046,6 @@ discard block |
||
| 1046 | 1046 | } |
| 1047 | 1047 | |
| 1048 | 1048 | return $mime_type |
| 1049 | - . (!$connect ? '' : preg_replace('/\W/', '_', $connect)) . '_' |
|
| 1050 | - . md5($GLOBALS['spip_version_code'] . ' * ' . $skel . (isset($GLOBALS['marqueur_skel']) ? '*' . $GLOBALS['marqueur_skel'] : '')); |
|
| 1049 | + . (!$connect ? '' : preg_replace('/\W/', '_', $connect)).'_' |
|
| 1050 | + . md5($GLOBALS['spip_version_code'].' * '.$skel.(isset($GLOBALS['marqueur_skel']) ? '*'.$GLOBALS['marqueur_skel'] : '')); |
|
| 1051 | 1051 | } |