@@ -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/config'); |
@@ -37,26 +37,26 @@ discard block |
||
| 37 | 37 | */ |
| 38 | 38 | function exec_admin_plugin_dist($retour = '') { |
| 39 | 39 | |
| 40 | - if (!autoriser('configurer', '_plugins')) { |
|
| 41 | - include_spip('inc/minipres'); |
|
| 42 | - echo minipres(); |
|
| 43 | - } else { |
|
| 44 | - // on fait la verif du path avant tout, |
|
| 45 | - // et l'installation des qu'on est dans la colonne principale |
|
| 46 | - // si jamais la liste des plugins actifs change, il faut faire un refresh du hit |
|
| 47 | - // pour etre sur que les bons fichiers seront charges lors de l'install |
|
| 48 | - $new = actualise_plugins_actifs(); |
|
| 49 | - if ($new and _request('actualise') < 2) { |
|
| 50 | - include_spip('inc/headers'); |
|
| 51 | - if (isset($GLOBALS['fichier_php_compile_recent'])) { |
|
| 52 | - // attendre eventuellement l'invalidation du cache opcode |
|
| 53 | - spip_attend_invalidation_opcode_cache($GLOBALS['fichier_php_compile_recent']); |
|
| 54 | - } |
|
| 55 | - redirige_par_entete(parametre_url(self(), 'actualise', _request('actualise') + 1, '&')); |
|
| 56 | - } else { |
|
| 57 | - admin_plug_args(_request('voir'), _request('erreur'), _request('format')); |
|
| 58 | - } |
|
| 59 | - } |
|
| 40 | + if (!autoriser('configurer', '_plugins')) { |
|
| 41 | + include_spip('inc/minipres'); |
|
| 42 | + echo minipres(); |
|
| 43 | + } else { |
|
| 44 | + // on fait la verif du path avant tout, |
|
| 45 | + // et l'installation des qu'on est dans la colonne principale |
|
| 46 | + // si jamais la liste des plugins actifs change, il faut faire un refresh du hit |
|
| 47 | + // pour etre sur que les bons fichiers seront charges lors de l'install |
|
| 48 | + $new = actualise_plugins_actifs(); |
|
| 49 | + if ($new and _request('actualise') < 2) { |
|
| 50 | + include_spip('inc/headers'); |
|
| 51 | + if (isset($GLOBALS['fichier_php_compile_recent'])) { |
|
| 52 | + // attendre eventuellement l'invalidation du cache opcode |
|
| 53 | + spip_attend_invalidation_opcode_cache($GLOBALS['fichier_php_compile_recent']); |
|
| 54 | + } |
|
| 55 | + redirige_par_entete(parametre_url(self(), 'actualise', _request('actualise') + 1, '&')); |
|
| 56 | + } else { |
|
| 57 | + admin_plug_args(_request('voir'), _request('erreur'), _request('format')); |
|
| 58 | + } |
|
| 59 | + } |
|
| 60 | 60 | } |
| 61 | 61 | |
| 62 | 62 | /** |
@@ -81,132 +81,132 @@ discard block |
||
| 81 | 81 | * Format d'affichage (liste ou arborescence) |
| 82 | 82 | **/ |
| 83 | 83 | function admin_plug_args($quoi, $erreur, $format) { |
| 84 | - $lpf = null; |
|
| 85 | - $lcpas = null; |
|
| 86 | - $lcpaffichesup = null; |
|
| 87 | - if (!$quoi) { |
|
| 88 | - $quoi = 'actifs'; |
|
| 89 | - } |
|
| 90 | - // empecher l'affichage des erreurs dans le bandeau, on le donne ensuite |
|
| 91 | - // format brut par plugin |
|
| 92 | - $GLOBALS['erreurs_activation_raw'] = plugin_donne_erreurs(true, false); |
|
| 93 | - // format resume mis en forme |
|
| 94 | - $erreur_activation = plugin_donne_erreurs(); |
|
| 95 | - $commencer_page = charger_fonction('commencer_page', 'inc'); |
|
| 96 | - echo $commencer_page(_T('icone_admin_plugin'), 'configuration', 'plugin'); |
|
| 97 | - |
|
| 98 | - echo debut_gauche(); |
|
| 99 | - echo recuperer_fond('prive/squelettes/navigation/configurer', ['exec' => 'admin_plugin']); |
|
| 100 | - |
|
| 101 | - echo pipeline( |
|
| 102 | - 'affiche_gauche', |
|
| 103 | - [ |
|
| 104 | - 'args' => ['exec' => 'admin_plugin'], |
|
| 105 | - 'data' => afficher_librairies() |
|
| 106 | - ] |
|
| 107 | - ); |
|
| 108 | - |
|
| 109 | - echo debut_droite(); |
|
| 110 | - echo gros_titre(_T('icone_admin_plugin'), ''); |
|
| 111 | - |
|
| 112 | - // Barre d'onglets de premier niveau |
|
| 113 | - echo barre_onglets('plugins', 'plugins_actifs'); |
|
| 114 | - // Barre d'onglets de second niveau |
|
| 115 | - $onglet2 = $quoi == 'actifs' ? 'plugins_actifs' : 'admin_plugin'; |
|
| 116 | - echo debut_onglet('onglets_simple second'); |
|
| 117 | - echo onglet(_T('plugins_tous_liste'), generer_url_ecrire('admin_plugin', 'voir=tous'), 'admin_plugin', $onglet2); |
|
| 118 | - echo onglet(_T('plugins_actifs_liste'), generer_url_ecrire('admin_plugin'), 'plugins_actifs', $onglet2); |
|
| 119 | - echo fin_onglet(); |
|
| 120 | - |
|
| 121 | - // message d'erreur au retour d'une operation |
|
| 122 | - if ($erreur) { |
|
| 123 | - echo "<div class='error'>" . spip_htmlspecialchars($erreur) . '</div>'; |
|
| 124 | - } |
|
| 125 | - if ($erreur_activation) { |
|
| 126 | - echo "<div class='error'>$erreur_activation</div>"; |
|
| 127 | - } |
|
| 128 | - |
|
| 129 | - // la mise a jour de cette meta a ete faite par ecrire_plugin_actifs |
|
| 130 | - $actifs = (array) unserialize($GLOBALS['meta']['plugin']); |
|
| 131 | - $lcpa = $actifs + (array) unserialize($GLOBALS['meta']['plugin_attente']); |
|
| 132 | - |
|
| 133 | - // Les affichages se basent sur le repertoire, pas sur le nom |
|
| 134 | - $actifs = liste_chemin_plugin($actifs, ''); |
|
| 135 | - if (defined('_DIR_PLUGINS_SUPPL')) { |
|
| 136 | - $lcpas = liste_chemin_plugin($lcpa, _DIR_PLUGINS_SUPPL); |
|
| 137 | - } |
|
| 138 | - $lcpa = liste_chemin_plugin($lcpa); |
|
| 139 | - |
|
| 140 | - // on installe les plugins maintenant, |
|
| 141 | - // cela permet aux scripts d'install de faire des affichages (moches...) |
|
| 142 | - plugin_installes_meta(); |
|
| 143 | - |
|
| 144 | - echo "<div class='liste-plugins formulaire_spip'>"; |
|
| 145 | - echo debut_cadre_trait_couleur('plugin-24.png', true, '', _T('plugins_liste'), 'plugins'); |
|
| 146 | - |
|
| 147 | - if ($quoi !== 'actifs') { |
|
| 148 | - $lpf = liste_plugin_files(); |
|
| 149 | - if ($lpf) { |
|
| 150 | - echo '<p>' . _T('texte_presente_plugin') . '</p>'; |
|
| 151 | - } else { |
|
| 152 | - if (!@is_dir(_DIR_PLUGINS)) { |
|
| 153 | - echo '<p>' . _T('plugin_info_automatique_ftp', ['rep' => joli_repertoire(_DIR_PLUGINS)]) |
|
| 154 | - . ' — ' . _T('plugin_info_automatique_creer') . '</p>'; |
|
| 155 | - } |
|
| 156 | - } |
|
| 157 | - $lcpaffiche = $lpf; |
|
| 158 | - if (defined('_DIR_PLUGINS_SUPPL')) { |
|
| 159 | - $lcpaffichesup = liste_plugin_files(_DIR_PLUGINS_SUPPL); |
|
| 160 | - } |
|
| 161 | - } else { |
|
| 162 | - // la liste |
|
| 163 | - // $quoi=='actifs' |
|
| 164 | - $lcpaffiche = $lcpa; |
|
| 165 | - if (defined('_DIR_PLUGINS_SUPPL')) { |
|
| 166 | - $lcpaffichesup = $lcpas; |
|
| 167 | - } |
|
| 168 | - } |
|
| 169 | - |
|
| 170 | - if ($quoi == 'actifs' or $lpf) { |
|
| 171 | - $nb = is_countable($lcpa) ? count($lcpa) : 0; |
|
| 172 | - if (defined('_DIR_PLUGINS_SUPPL')) { |
|
| 173 | - $nb += is_countable($lcpas) ? count($lcpas) : 0; |
|
| 174 | - } |
|
| 175 | - echo '<h3>' . sinon( |
|
| 176 | - singulier_ou_pluriel($nb, 'plugins_actif_un', 'plugins_actifs', 'count'), |
|
| 177 | - _T('plugins_actif_aucun') |
|
| 178 | - ) . '</h3>'; |
|
| 179 | - } |
|
| 180 | - |
|
| 181 | - if (empty($format)) { |
|
| 182 | - $format = 'liste'; |
|
| 183 | - } elseif (!in_array($format, ['liste', 'repertoires'])) { |
|
| 184 | - $format = 'repertoires'; |
|
| 185 | - } |
|
| 186 | - |
|
| 187 | - $afficher = charger_fonction("afficher_$format", 'plugins'); |
|
| 188 | - $corps = $afficher(self(), $lcpaffiche, $lcpa, $actifs); |
|
| 189 | - if (defined('_DIR_PLUGINS_SUPPL')) { |
|
| 190 | - $corps .= $afficher(self(), $lcpaffichesup, $lcpas, $actifs, _DIR_PLUGINS_SUPPL); |
|
| 191 | - } |
|
| 192 | - |
|
| 193 | - if ($corps) { |
|
| 194 | - $corps .= "\n<div class='boutons' style='display:none;'>" |
|
| 195 | - . "<input type='submit' class='submit save' value='" . _T('bouton_enregistrer') |
|
| 196 | - . "' />" |
|
| 197 | - . '</div>'; |
|
| 198 | - } |
|
| 199 | - |
|
| 200 | - echo redirige_action_post('activer_plugins', 'activer', 'admin_plugin', '', $corps); |
|
| 201 | - |
|
| 202 | - echo fin_cadre_trait_couleur(); |
|
| 203 | - |
|
| 204 | - if ($quoi == 'actifs') { |
|
| 205 | - echo affiche_les_plugins_verrouilles($actifs); |
|
| 206 | - } |
|
| 207 | - echo '</div>'; |
|
| 208 | - |
|
| 209 | - echo http_script(" |
|
| 84 | + $lpf = null; |
|
| 85 | + $lcpas = null; |
|
| 86 | + $lcpaffichesup = null; |
|
| 87 | + if (!$quoi) { |
|
| 88 | + $quoi = 'actifs'; |
|
| 89 | + } |
|
| 90 | + // empecher l'affichage des erreurs dans le bandeau, on le donne ensuite |
|
| 91 | + // format brut par plugin |
|
| 92 | + $GLOBALS['erreurs_activation_raw'] = plugin_donne_erreurs(true, false); |
|
| 93 | + // format resume mis en forme |
|
| 94 | + $erreur_activation = plugin_donne_erreurs(); |
|
| 95 | + $commencer_page = charger_fonction('commencer_page', 'inc'); |
|
| 96 | + echo $commencer_page(_T('icone_admin_plugin'), 'configuration', 'plugin'); |
|
| 97 | + |
|
| 98 | + echo debut_gauche(); |
|
| 99 | + echo recuperer_fond('prive/squelettes/navigation/configurer', ['exec' => 'admin_plugin']); |
|
| 100 | + |
|
| 101 | + echo pipeline( |
|
| 102 | + 'affiche_gauche', |
|
| 103 | + [ |
|
| 104 | + 'args' => ['exec' => 'admin_plugin'], |
|
| 105 | + 'data' => afficher_librairies() |
|
| 106 | + ] |
|
| 107 | + ); |
|
| 108 | + |
|
| 109 | + echo debut_droite(); |
|
| 110 | + echo gros_titre(_T('icone_admin_plugin'), ''); |
|
| 111 | + |
|
| 112 | + // Barre d'onglets de premier niveau |
|
| 113 | + echo barre_onglets('plugins', 'plugins_actifs'); |
|
| 114 | + // Barre d'onglets de second niveau |
|
| 115 | + $onglet2 = $quoi == 'actifs' ? 'plugins_actifs' : 'admin_plugin'; |
|
| 116 | + echo debut_onglet('onglets_simple second'); |
|
| 117 | + echo onglet(_T('plugins_tous_liste'), generer_url_ecrire('admin_plugin', 'voir=tous'), 'admin_plugin', $onglet2); |
|
| 118 | + echo onglet(_T('plugins_actifs_liste'), generer_url_ecrire('admin_plugin'), 'plugins_actifs', $onglet2); |
|
| 119 | + echo fin_onglet(); |
|
| 120 | + |
|
| 121 | + // message d'erreur au retour d'une operation |
|
| 122 | + if ($erreur) { |
|
| 123 | + echo "<div class='error'>" . spip_htmlspecialchars($erreur) . '</div>'; |
|
| 124 | + } |
|
| 125 | + if ($erreur_activation) { |
|
| 126 | + echo "<div class='error'>$erreur_activation</div>"; |
|
| 127 | + } |
|
| 128 | + |
|
| 129 | + // la mise a jour de cette meta a ete faite par ecrire_plugin_actifs |
|
| 130 | + $actifs = (array) unserialize($GLOBALS['meta']['plugin']); |
|
| 131 | + $lcpa = $actifs + (array) unserialize($GLOBALS['meta']['plugin_attente']); |
|
| 132 | + |
|
| 133 | + // Les affichages se basent sur le repertoire, pas sur le nom |
|
| 134 | + $actifs = liste_chemin_plugin($actifs, ''); |
|
| 135 | + if (defined('_DIR_PLUGINS_SUPPL')) { |
|
| 136 | + $lcpas = liste_chemin_plugin($lcpa, _DIR_PLUGINS_SUPPL); |
|
| 137 | + } |
|
| 138 | + $lcpa = liste_chemin_plugin($lcpa); |
|
| 139 | + |
|
| 140 | + // on installe les plugins maintenant, |
|
| 141 | + // cela permet aux scripts d'install de faire des affichages (moches...) |
|
| 142 | + plugin_installes_meta(); |
|
| 143 | + |
|
| 144 | + echo "<div class='liste-plugins formulaire_spip'>"; |
|
| 145 | + echo debut_cadre_trait_couleur('plugin-24.png', true, '', _T('plugins_liste'), 'plugins'); |
|
| 146 | + |
|
| 147 | + if ($quoi !== 'actifs') { |
|
| 148 | + $lpf = liste_plugin_files(); |
|
| 149 | + if ($lpf) { |
|
| 150 | + echo '<p>' . _T('texte_presente_plugin') . '</p>'; |
|
| 151 | + } else { |
|
| 152 | + if (!@is_dir(_DIR_PLUGINS)) { |
|
| 153 | + echo '<p>' . _T('plugin_info_automatique_ftp', ['rep' => joli_repertoire(_DIR_PLUGINS)]) |
|
| 154 | + . ' — ' . _T('plugin_info_automatique_creer') . '</p>'; |
|
| 155 | + } |
|
| 156 | + } |
|
| 157 | + $lcpaffiche = $lpf; |
|
| 158 | + if (defined('_DIR_PLUGINS_SUPPL')) { |
|
| 159 | + $lcpaffichesup = liste_plugin_files(_DIR_PLUGINS_SUPPL); |
|
| 160 | + } |
|
| 161 | + } else { |
|
| 162 | + // la liste |
|
| 163 | + // $quoi=='actifs' |
|
| 164 | + $lcpaffiche = $lcpa; |
|
| 165 | + if (defined('_DIR_PLUGINS_SUPPL')) { |
|
| 166 | + $lcpaffichesup = $lcpas; |
|
| 167 | + } |
|
| 168 | + } |
|
| 169 | + |
|
| 170 | + if ($quoi == 'actifs' or $lpf) { |
|
| 171 | + $nb = is_countable($lcpa) ? count($lcpa) : 0; |
|
| 172 | + if (defined('_DIR_PLUGINS_SUPPL')) { |
|
| 173 | + $nb += is_countable($lcpas) ? count($lcpas) : 0; |
|
| 174 | + } |
|
| 175 | + echo '<h3>' . sinon( |
|
| 176 | + singulier_ou_pluriel($nb, 'plugins_actif_un', 'plugins_actifs', 'count'), |
|
| 177 | + _T('plugins_actif_aucun') |
|
| 178 | + ) . '</h3>'; |
|
| 179 | + } |
|
| 180 | + |
|
| 181 | + if (empty($format)) { |
|
| 182 | + $format = 'liste'; |
|
| 183 | + } elseif (!in_array($format, ['liste', 'repertoires'])) { |
|
| 184 | + $format = 'repertoires'; |
|
| 185 | + } |
|
| 186 | + |
|
| 187 | + $afficher = charger_fonction("afficher_$format", 'plugins'); |
|
| 188 | + $corps = $afficher(self(), $lcpaffiche, $lcpa, $actifs); |
|
| 189 | + if (defined('_DIR_PLUGINS_SUPPL')) { |
|
| 190 | + $corps .= $afficher(self(), $lcpaffichesup, $lcpas, $actifs, _DIR_PLUGINS_SUPPL); |
|
| 191 | + } |
|
| 192 | + |
|
| 193 | + if ($corps) { |
|
| 194 | + $corps .= "\n<div class='boutons' style='display:none;'>" |
|
| 195 | + . "<input type='submit' class='submit save' value='" . _T('bouton_enregistrer') |
|
| 196 | + . "' />" |
|
| 197 | + . '</div>'; |
|
| 198 | + } |
|
| 199 | + |
|
| 200 | + echo redirige_action_post('activer_plugins', 'activer', 'admin_plugin', '', $corps); |
|
| 201 | + |
|
| 202 | + echo fin_cadre_trait_couleur(); |
|
| 203 | + |
|
| 204 | + if ($quoi == 'actifs') { |
|
| 205 | + echo affiche_les_plugins_verrouilles($actifs); |
|
| 206 | + } |
|
| 207 | + echo '</div>'; |
|
| 208 | + |
|
| 209 | + echo http_script(" |
|
| 210 | 210 | jQuery(function(){ |
| 211 | 211 | jQuery('.plugins li.item a[rel=info]').click(function(){ |
| 212 | 212 | var li = jQuery(this).parents('li').eq(0); |
@@ -232,15 +232,15 @@ discard block |
||
| 232 | 232 | }); |
| 233 | 233 | "); |
| 234 | 234 | |
| 235 | - echo pipeline( |
|
| 236 | - 'affiche_milieu', |
|
| 237 | - [ |
|
| 238 | - 'args' => ['exec' => 'admin_plugin'], |
|
| 239 | - 'data' => '' |
|
| 240 | - ] |
|
| 241 | - ); |
|
| 235 | + echo pipeline( |
|
| 236 | + 'affiche_milieu', |
|
| 237 | + [ |
|
| 238 | + 'args' => ['exec' => 'admin_plugin'], |
|
| 239 | + 'data' => '' |
|
| 240 | + ] |
|
| 241 | + ); |
|
| 242 | 242 | |
| 243 | - echo fin_gauche(), fin_page(); |
|
| 243 | + echo fin_gauche(), fin_page(); |
|
| 244 | 244 | } |
| 245 | 245 | |
| 246 | 246 | /** |
@@ -254,23 +254,23 @@ discard block |
||
| 254 | 254 | * Code HTML |
| 255 | 255 | **/ |
| 256 | 256 | function affiche_les_plugins_verrouilles($actifs) { |
| 257 | - if ((!$liste = liste_plugin_files(_DIR_PLUGINS_DIST))) { |
|
| 258 | - return ''; |
|
| 259 | - } |
|
| 260 | - |
|
| 261 | - $afficher = charger_fonction('afficher_liste', 'plugins'); |
|
| 262 | - $liste = $afficher(self(), $liste, [], $actifs, _DIR_PLUGINS_DIST); |
|
| 263 | - |
|
| 264 | - return |
|
| 265 | - "<div id='plugins_dist'>" |
|
| 266 | - . debut_cadre_trait_couleur('', true, '', _T('plugins_liste_dist'), 'liste_plugins_dist') |
|
| 267 | - . '<p>' |
|
| 268 | - . _T('plugin_info_plugins_dist_1', ['plugins_dist' => joli_repertoire(_DIR_PLUGINS_DIST)]) |
|
| 269 | - . '<br />' . _T('plugin_info_plugins_dist_2') |
|
| 270 | - . '</p>' |
|
| 271 | - . $liste |
|
| 272 | - . fin_cadre_trait_couleur() |
|
| 273 | - . "</div>\n"; |
|
| 257 | + if ((!$liste = liste_plugin_files(_DIR_PLUGINS_DIST))) { |
|
| 258 | + return ''; |
|
| 259 | + } |
|
| 260 | + |
|
| 261 | + $afficher = charger_fonction('afficher_liste', 'plugins'); |
|
| 262 | + $liste = $afficher(self(), $liste, [], $actifs, _DIR_PLUGINS_DIST); |
|
| 263 | + |
|
| 264 | + return |
|
| 265 | + "<div id='plugins_dist'>" |
|
| 266 | + . debut_cadre_trait_couleur('', true, '', _T('plugins_liste_dist'), 'liste_plugins_dist') |
|
| 267 | + . '<p>' |
|
| 268 | + . _T('plugin_info_plugins_dist_1', ['plugins_dist' => joli_repertoire(_DIR_PLUGINS_DIST)]) |
|
| 269 | + . '<br />' . _T('plugin_info_plugins_dist_2') |
|
| 270 | + . '</p>' |
|
| 271 | + . $liste |
|
| 272 | + . fin_cadre_trait_couleur() |
|
| 273 | + . "</div>\n"; |
|
| 274 | 274 | } |
| 275 | 275 | |
| 276 | 276 | /** |
@@ -282,19 +282,19 @@ discard block |
||
| 282 | 282 | */ |
| 283 | 283 | function afficher_librairies() { |
| 284 | 284 | |
| 285 | - if (!$libs = liste_librairies()) { |
|
| 286 | - return ''; |
|
| 287 | - } |
|
| 288 | - ksort($libs); |
|
| 289 | - $res = debut_cadre_enfonce('', true, '', _T('plugin_librairies_installees')); |
|
| 290 | - $res .= '<dl>'; |
|
| 291 | - foreach ($libs as $lib => $rep) { |
|
| 292 | - $res .= "<dt>$lib</dt><dd>" . joli_repertoire($rep) . "</dd>\n"; |
|
| 293 | - } |
|
| 294 | - $res .= '</dl>'; |
|
| 295 | - $res .= fin_cadre_enfonce(); |
|
| 296 | - |
|
| 297 | - return $res; |
|
| 285 | + if (!$libs = liste_librairies()) { |
|
| 286 | + return ''; |
|
| 287 | + } |
|
| 288 | + ksort($libs); |
|
| 289 | + $res = debut_cadre_enfonce('', true, '', _T('plugin_librairies_installees')); |
|
| 290 | + $res .= '<dl>'; |
|
| 291 | + foreach ($libs as $lib => $rep) { |
|
| 292 | + $res .= "<dt>$lib</dt><dd>" . joli_repertoire($rep) . "</dd>\n"; |
|
| 293 | + } |
|
| 294 | + $res .= '</dl>'; |
|
| 295 | + $res .= fin_cadre_enfonce(); |
|
| 296 | + |
|
| 297 | + return $res; |
|
| 298 | 298 | } |
| 299 | 299 | |
| 300 | 300 | |
@@ -305,22 +305,22 @@ discard block |
||
| 305 | 305 | * Tableau (nom de la lib => repertoire , ...) |
| 306 | 306 | */ |
| 307 | 307 | function liste_librairies() { |
| 308 | - $libs = []; |
|
| 309 | - foreach (array_reverse(creer_chemin()) as $d) { |
|
| 310 | - if ( |
|
| 311 | - is_dir($dir = $d . 'lib/') |
|
| 312 | - and $t = opendir($dir) |
|
| 313 | - ) { |
|
| 314 | - while (($f = readdir($t)) !== false) { |
|
| 315 | - if ( |
|
| 316 | - $f[0] != '.' |
|
| 317 | - and is_dir("$dir/$f") |
|
| 318 | - ) { |
|
| 319 | - $libs[$f] = $dir; |
|
| 320 | - } |
|
| 321 | - } |
|
| 322 | - } |
|
| 323 | - } |
|
| 324 | - |
|
| 325 | - return $libs; |
|
| 308 | + $libs = []; |
|
| 309 | + foreach (array_reverse(creer_chemin()) as $d) { |
|
| 310 | + if ( |
|
| 311 | + is_dir($dir = $d . 'lib/') |
|
| 312 | + and $t = opendir($dir) |
|
| 313 | + ) { |
|
| 314 | + while (($f = readdir($t)) !== false) { |
|
| 315 | + if ( |
|
| 316 | + $f[0] != '.' |
|
| 317 | + and is_dir("$dir/$f") |
|
| 318 | + ) { |
|
| 319 | + $libs[$f] = $dir; |
|
| 320 | + } |
|
| 321 | + } |
|
| 322 | + } |
|
| 323 | + } |
|
| 324 | + |
|
| 325 | + return $libs; |
|
| 326 | 326 | } |
@@ -120,7 +120,7 @@ discard block |
||
| 120 | 120 | |
| 121 | 121 | // message d'erreur au retour d'une operation |
| 122 | 122 | if ($erreur) { |
| 123 | - echo "<div class='error'>" . spip_htmlspecialchars($erreur) . '</div>'; |
|
| 123 | + echo "<div class='error'>".spip_htmlspecialchars($erreur).'</div>'; |
|
| 124 | 124 | } |
| 125 | 125 | if ($erreur_activation) { |
| 126 | 126 | echo "<div class='error'>$erreur_activation</div>"; |
@@ -147,11 +147,11 @@ discard block |
||
| 147 | 147 | if ($quoi !== 'actifs') { |
| 148 | 148 | $lpf = liste_plugin_files(); |
| 149 | 149 | if ($lpf) { |
| 150 | - echo '<p>' . _T('texte_presente_plugin') . '</p>'; |
|
| 150 | + echo '<p>'._T('texte_presente_plugin').'</p>'; |
|
| 151 | 151 | } else { |
| 152 | 152 | if (!@is_dir(_DIR_PLUGINS)) { |
| 153 | - echo '<p>' . _T('plugin_info_automatique_ftp', ['rep' => joli_repertoire(_DIR_PLUGINS)]) |
|
| 154 | - . ' — ' . _T('plugin_info_automatique_creer') . '</p>'; |
|
| 153 | + echo '<p>'._T('plugin_info_automatique_ftp', ['rep' => joli_repertoire(_DIR_PLUGINS)]) |
|
| 154 | + . ' — '._T('plugin_info_automatique_creer').'</p>'; |
|
| 155 | 155 | } |
| 156 | 156 | } |
| 157 | 157 | $lcpaffiche = $lpf; |
@@ -172,10 +172,10 @@ discard block |
||
| 172 | 172 | if (defined('_DIR_PLUGINS_SUPPL')) { |
| 173 | 173 | $nb += is_countable($lcpas) ? count($lcpas) : 0; |
| 174 | 174 | } |
| 175 | - echo '<h3>' . sinon( |
|
| 175 | + echo '<h3>'.sinon( |
|
| 176 | 176 | singulier_ou_pluriel($nb, 'plugins_actif_un', 'plugins_actifs', 'count'), |
| 177 | 177 | _T('plugins_actif_aucun') |
| 178 | - ) . '</h3>'; |
|
| 178 | + ).'</h3>'; |
|
| 179 | 179 | } |
| 180 | 180 | |
| 181 | 181 | if (empty($format)) { |
@@ -192,7 +192,7 @@ discard block |
||
| 192 | 192 | |
| 193 | 193 | if ($corps) { |
| 194 | 194 | $corps .= "\n<div class='boutons' style='display:none;'>" |
| 195 | - . "<input type='submit' class='submit save' value='" . _T('bouton_enregistrer') |
|
| 195 | + . "<input type='submit' class='submit save' value='"._T('bouton_enregistrer') |
|
| 196 | 196 | . "' />" |
| 197 | 197 | . '</div>'; |
| 198 | 198 | } |
@@ -266,7 +266,7 @@ discard block |
||
| 266 | 266 | . debut_cadre_trait_couleur('', true, '', _T('plugins_liste_dist'), 'liste_plugins_dist') |
| 267 | 267 | . '<p>' |
| 268 | 268 | . _T('plugin_info_plugins_dist_1', ['plugins_dist' => joli_repertoire(_DIR_PLUGINS_DIST)]) |
| 269 | - . '<br />' . _T('plugin_info_plugins_dist_2') |
|
| 269 | + . '<br />'._T('plugin_info_plugins_dist_2') |
|
| 270 | 270 | . '</p>' |
| 271 | 271 | . $liste |
| 272 | 272 | . fin_cadre_trait_couleur() |
@@ -289,7 +289,7 @@ discard block |
||
| 289 | 289 | $res = debut_cadre_enfonce('', true, '', _T('plugin_librairies_installees')); |
| 290 | 290 | $res .= '<dl>'; |
| 291 | 291 | foreach ($libs as $lib => $rep) { |
| 292 | - $res .= "<dt>$lib</dt><dd>" . joli_repertoire($rep) . "</dd>\n"; |
|
| 292 | + $res .= "<dt>$lib</dt><dd>".joli_repertoire($rep)."</dd>\n"; |
|
| 293 | 293 | } |
| 294 | 294 | $res .= '</dl>'; |
| 295 | 295 | $res .= fin_cadre_enfonce(); |
@@ -308,7 +308,7 @@ discard block |
||
| 308 | 308 | $libs = []; |
| 309 | 309 | foreach (array_reverse(creer_chemin()) as $d) { |
| 310 | 310 | if ( |
| 311 | - is_dir($dir = $d . 'lib/') |
|
| 311 | + is_dir($dir = $d.'lib/') |
|
| 312 | 312 | and $t = opendir($dir) |
| 313 | 313 | ) { |
| 314 | 314 | while (($f = readdir($t)) !== false) { |
@@ -42,8 +42,7 @@ |
||
| 42 | 42 | if ((is_countable($logo) ? count($logo) : 0) < 6) { |
| 43 | 43 | spip_log('Supprimer ancien logo ' . json_encode($logo, JSON_THROW_ON_ERROR), 'logo'); |
| 44 | 44 | spip_unlink($logo[0]); |
| 45 | - } |
|
| 46 | - elseif ( |
|
| 45 | + } elseif ( |
|
| 47 | 46 | $doc = $logo[5] |
| 48 | 47 | and isset($doc['id_document']) |
| 49 | 48 | and $id_document = $doc['id_document'] |
@@ -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 | |
@@ -30,36 +30,36 @@ discard block |
||
| 30 | 30 | * `on` ou `off` |
| 31 | 31 | */ |
| 32 | 32 | function logo_supprimer($objet, $id_objet, $etat) { |
| 33 | - $chercher_logo = charger_fonction('chercher_logo', 'inc'); |
|
| 34 | - $objet = objet_type($objet); |
|
| 35 | - $primary = id_table_objet($objet); |
|
| 36 | - include_spip('inc/chercher_logo'); |
|
| 37 | - |
|
| 38 | - // existe-t-il deja un logo ? |
|
| 39 | - $logo = $chercher_logo($id_objet, $primary, $etat); |
|
| 40 | - if ($logo) { |
|
| 41 | - # TODO : deprecated, a supprimer -> anciens logos IMG/artonxx.png pas en base |
|
| 42 | - if ((is_countable($logo) ? count($logo) : 0) < 6) { |
|
| 43 | - spip_log('Supprimer ancien logo ' . json_encode($logo, JSON_THROW_ON_ERROR), 'logo'); |
|
| 44 | - spip_unlink($logo[0]); |
|
| 45 | - } |
|
| 46 | - elseif ( |
|
| 47 | - $doc = $logo[5] |
|
| 48 | - and isset($doc['id_document']) |
|
| 49 | - and $id_document = $doc['id_document'] |
|
| 50 | - ) { |
|
| 51 | - include_spip('action/editer_liens'); |
|
| 52 | - // supprimer le lien dans la base |
|
| 53 | - objet_dissocier(['document' => $id_document], [$objet => $id_objet], ['role' => '*']); |
|
| 54 | - |
|
| 55 | - // verifier si il reste des liens avec d'autres objets et sinon supprimer |
|
| 56 | - $liens = objet_trouver_liens(['document' => $id_document], '*'); |
|
| 57 | - if (!count($liens)) { |
|
| 58 | - $supprimer_document = charger_fonction('supprimer_document', 'action'); |
|
| 59 | - $supprimer_document($doc['id_document']); |
|
| 60 | - } |
|
| 61 | - } |
|
| 62 | - } |
|
| 33 | + $chercher_logo = charger_fonction('chercher_logo', 'inc'); |
|
| 34 | + $objet = objet_type($objet); |
|
| 35 | + $primary = id_table_objet($objet); |
|
| 36 | + include_spip('inc/chercher_logo'); |
|
| 37 | + |
|
| 38 | + // existe-t-il deja un logo ? |
|
| 39 | + $logo = $chercher_logo($id_objet, $primary, $etat); |
|
| 40 | + if ($logo) { |
|
| 41 | + # TODO : deprecated, a supprimer -> anciens logos IMG/artonxx.png pas en base |
|
| 42 | + if ((is_countable($logo) ? count($logo) : 0) < 6) { |
|
| 43 | + spip_log('Supprimer ancien logo ' . json_encode($logo, JSON_THROW_ON_ERROR), 'logo'); |
|
| 44 | + spip_unlink($logo[0]); |
|
| 45 | + } |
|
| 46 | + elseif ( |
|
| 47 | + $doc = $logo[5] |
|
| 48 | + and isset($doc['id_document']) |
|
| 49 | + and $id_document = $doc['id_document'] |
|
| 50 | + ) { |
|
| 51 | + include_spip('action/editer_liens'); |
|
| 52 | + // supprimer le lien dans la base |
|
| 53 | + objet_dissocier(['document' => $id_document], [$objet => $id_objet], ['role' => '*']); |
|
| 54 | + |
|
| 55 | + // verifier si il reste des liens avec d'autres objets et sinon supprimer |
|
| 56 | + $liens = objet_trouver_liens(['document' => $id_document], '*'); |
|
| 57 | + if (!count($liens)) { |
|
| 58 | + $supprimer_document = charger_fonction('supprimer_document', 'action'); |
|
| 59 | + $supprimer_document($doc['id_document']); |
|
| 60 | + } |
|
| 61 | + } |
|
| 62 | + } |
|
| 63 | 63 | } |
| 64 | 64 | |
| 65 | 65 | /** |
@@ -76,200 +76,200 @@ discard block |
||
| 76 | 76 | * Erreur, sinon '' |
| 77 | 77 | */ |
| 78 | 78 | function logo_modifier($objet, $id_objet, $etat, $source) { |
| 79 | - $chercher_logo = charger_fonction('chercher_logo', 'inc'); |
|
| 80 | - $objet = objet_type($objet); |
|
| 81 | - $primary = id_table_objet($objet); |
|
| 82 | - include_spip('inc/chercher_logo'); |
|
| 83 | - |
|
| 84 | - $mode = preg_replace(',\W,', '', $etat); |
|
| 85 | - if (!$mode) { |
|
| 86 | - spip_log("logo_modifier : etat $etat invalide", 'logo'); |
|
| 87 | - $erreur = 'etat invalide'; |
|
| 88 | - |
|
| 89 | - return $erreur; |
|
| 90 | - } |
|
| 91 | - // chercher dans la base |
|
| 92 | - $mode_document = 'logo' . $mode; |
|
| 93 | - |
|
| 94 | - include_spip('inc/documents'); |
|
| 95 | - $erreur = ''; |
|
| 96 | - |
|
| 97 | - if (!$source) { |
|
| 98 | - spip_log('spip_image_ajouter : source inconnue', 'logo'); |
|
| 99 | - $erreur = 'source inconnue'; |
|
| 100 | - |
|
| 101 | - return $erreur; |
|
| 102 | - } |
|
| 103 | - |
|
| 104 | - // fichier dans upload/ |
|
| 105 | - if (is_string($source)) { |
|
| 106 | - $tmp_name = false; |
|
| 107 | - if (file_exists($source)) { |
|
| 108 | - $tmp_name = $source; |
|
| 109 | - } elseif (file_exists($f = determine_upload() . $source)) { |
|
| 110 | - $tmp_name = $f; |
|
| 111 | - } |
|
| 112 | - if (!$tmp_name) { |
|
| 113 | - spip_log('spip_image_ajouter : source inconnue', 'logo'); |
|
| 114 | - $erreur = 'source inconnue'; |
|
| 115 | - |
|
| 116 | - return $erreur; |
|
| 117 | - } |
|
| 118 | - $source = [ |
|
| 119 | - 'tmp_name' => $tmp_name, |
|
| 120 | - 'name' => basename($tmp_name), |
|
| 121 | - ]; |
|
| 122 | - } elseif ($erreur = check_upload_error($source['error'], '', true)) { |
|
| 123 | - return $erreur; |
|
| 124 | - } |
|
| 125 | - |
|
| 126 | - // supprimer le logo eventueel existant |
|
| 127 | - // TODO : si un logo existe, le modifier plutot que supprimer + reinserer (mais il faut gerer le cas ou il est utilise par plusieurs objets, donc pas si simple) |
|
| 128 | - // mais de toute facon l'interface actuelle oblige a supprimer + reinserer |
|
| 129 | - if (empty($GLOBALS['logo_migrer_en_base'])) { |
|
| 130 | - logo_supprimer($objet, $id_objet, $etat); |
|
| 131 | - } |
|
| 132 | - |
|
| 133 | - |
|
| 134 | - include_spip('inc/autoriser'); |
|
| 135 | - $source['mode'] = $mode_document; |
|
| 136 | - $ajouter_documents = charger_fonction('ajouter_documents', 'action'); |
|
| 137 | - autoriser_exception('associerdocuments', $objet, $id_objet); |
|
| 138 | - $ajoutes = $ajouter_documents('new', [$source], $objet, $id_objet, $mode_document); |
|
| 139 | - autoriser_exception('associerdocuments', $objet, $id_objet, false); |
|
| 140 | - |
|
| 141 | - $id_document = reset($ajoutes); |
|
| 142 | - |
|
| 143 | - if (!is_numeric($id_document)) { |
|
| 144 | - $erreur = ($id_document ?: 'Erreur inconnue'); |
|
| 145 | - spip_log("Erreur ajout logo : $erreur pour source=" . json_encode($source, JSON_THROW_ON_ERROR), 'logo'); |
|
| 146 | - return $erreur; |
|
| 147 | - } |
|
| 148 | - |
|
| 149 | - return ''; // tout est bon, pas d'erreur |
|
| 79 | + $chercher_logo = charger_fonction('chercher_logo', 'inc'); |
|
| 80 | + $objet = objet_type($objet); |
|
| 81 | + $primary = id_table_objet($objet); |
|
| 82 | + include_spip('inc/chercher_logo'); |
|
| 83 | + |
|
| 84 | + $mode = preg_replace(',\W,', '', $etat); |
|
| 85 | + if (!$mode) { |
|
| 86 | + spip_log("logo_modifier : etat $etat invalide", 'logo'); |
|
| 87 | + $erreur = 'etat invalide'; |
|
| 88 | + |
|
| 89 | + return $erreur; |
|
| 90 | + } |
|
| 91 | + // chercher dans la base |
|
| 92 | + $mode_document = 'logo' . $mode; |
|
| 93 | + |
|
| 94 | + include_spip('inc/documents'); |
|
| 95 | + $erreur = ''; |
|
| 96 | + |
|
| 97 | + if (!$source) { |
|
| 98 | + spip_log('spip_image_ajouter : source inconnue', 'logo'); |
|
| 99 | + $erreur = 'source inconnue'; |
|
| 100 | + |
|
| 101 | + return $erreur; |
|
| 102 | + } |
|
| 103 | + |
|
| 104 | + // fichier dans upload/ |
|
| 105 | + if (is_string($source)) { |
|
| 106 | + $tmp_name = false; |
|
| 107 | + if (file_exists($source)) { |
|
| 108 | + $tmp_name = $source; |
|
| 109 | + } elseif (file_exists($f = determine_upload() . $source)) { |
|
| 110 | + $tmp_name = $f; |
|
| 111 | + } |
|
| 112 | + if (!$tmp_name) { |
|
| 113 | + spip_log('spip_image_ajouter : source inconnue', 'logo'); |
|
| 114 | + $erreur = 'source inconnue'; |
|
| 115 | + |
|
| 116 | + return $erreur; |
|
| 117 | + } |
|
| 118 | + $source = [ |
|
| 119 | + 'tmp_name' => $tmp_name, |
|
| 120 | + 'name' => basename($tmp_name), |
|
| 121 | + ]; |
|
| 122 | + } elseif ($erreur = check_upload_error($source['error'], '', true)) { |
|
| 123 | + return $erreur; |
|
| 124 | + } |
|
| 125 | + |
|
| 126 | + // supprimer le logo eventueel existant |
|
| 127 | + // TODO : si un logo existe, le modifier plutot que supprimer + reinserer (mais il faut gerer le cas ou il est utilise par plusieurs objets, donc pas si simple) |
|
| 128 | + // mais de toute facon l'interface actuelle oblige a supprimer + reinserer |
|
| 129 | + if (empty($GLOBALS['logo_migrer_en_base'])) { |
|
| 130 | + logo_supprimer($objet, $id_objet, $etat); |
|
| 131 | + } |
|
| 132 | + |
|
| 133 | + |
|
| 134 | + include_spip('inc/autoriser'); |
|
| 135 | + $source['mode'] = $mode_document; |
|
| 136 | + $ajouter_documents = charger_fonction('ajouter_documents', 'action'); |
|
| 137 | + autoriser_exception('associerdocuments', $objet, $id_objet); |
|
| 138 | + $ajoutes = $ajouter_documents('new', [$source], $objet, $id_objet, $mode_document); |
|
| 139 | + autoriser_exception('associerdocuments', $objet, $id_objet, false); |
|
| 140 | + |
|
| 141 | + $id_document = reset($ajoutes); |
|
| 142 | + |
|
| 143 | + if (!is_numeric($id_document)) { |
|
| 144 | + $erreur = ($id_document ?: 'Erreur inconnue'); |
|
| 145 | + spip_log("Erreur ajout logo : $erreur pour source=" . json_encode($source, JSON_THROW_ON_ERROR), 'logo'); |
|
| 146 | + return $erreur; |
|
| 147 | + } |
|
| 148 | + |
|
| 149 | + return ''; // tout est bon, pas d'erreur |
|
| 150 | 150 | } |
| 151 | 151 | |
| 152 | 152 | function logo_migrer_en_base($objet, $time_limit) { |
| 153 | 153 | |
| 154 | - $dir_logos_erreurs = sous_repertoire(_DIR_IMG, 'logo_erreurs'); |
|
| 155 | - $dir_logos = sous_repertoire(_DIR_IMG, 'logo'); |
|
| 156 | - $formats_logos = ['jpg', 'png', 'svg', 'gif']; |
|
| 157 | - if (isset($GLOBALS['formats_logos'])) { |
|
| 158 | - $formats_logos = $GLOBALS['formats_logos']; |
|
| 159 | - } |
|
| 160 | - |
|
| 161 | - |
|
| 162 | - $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 163 | - $chercher_logo = charger_fonction('chercher_logo', 'inc'); |
|
| 164 | - include_spip('inc/chercher_logo'); |
|
| 165 | - $_id_objet = id_table_objet($objet); |
|
| 166 | - $table = table_objet_sql($objet); |
|
| 167 | - $type = type_du_logo($_id_objet); |
|
| 168 | - $desc = $trouver_table($table); |
|
| 169 | - |
|
| 170 | - // on desactive les revisions |
|
| 171 | - $liste_objets_versionnes = $GLOBALS['meta']['objets_versions'] ?? ''; |
|
| 172 | - unset($GLOBALS['meta']['objets_versions']); |
|
| 173 | - // et le signalement des editions |
|
| 174 | - $articles_modif = $GLOBALS['meta']['articles_modif'] ?? ''; |
|
| 175 | - $GLOBALS['meta']['articles_modif'] = 'non'; |
|
| 176 | - |
|
| 177 | - foreach (['on', 'off'] as $mode) { |
|
| 178 | - $nom_base = $type . $mode; |
|
| 179 | - $dir = (defined('_DIR_LOGOS') ? _DIR_LOGOS : _DIR_IMG); |
|
| 180 | - |
|
| 181 | - $files = glob($dir . $nom_base . '*'); |
|
| 182 | - // est-ce que c'est une nouvelle tentative de migration ? |
|
| 183 | - // dans ce cas les logos sont deja dans IMG/logo/ |
|
| 184 | - if (!(is_countable($files) ? count($files) : 0)) { |
|
| 185 | - $files = glob($dir_logos . $nom_base . '*'); |
|
| 186 | - if (is_countable($files) ? count($files) : 0) { |
|
| 187 | - // mais il faut verifier si ils ont pas deja ete migres pour tout ou partie |
|
| 188 | - $filescheck = []; |
|
| 189 | - foreach ($files as $file) { |
|
| 190 | - $short = basename(dirname($file)) . DIRECTORY_SEPARATOR . basename($file); |
|
| 191 | - $filescheck[$short] = $file; |
|
| 192 | - } |
|
| 193 | - // trouver ceux deja migres |
|
| 194 | - $deja = sql_allfetsel('fichier', 'spip_documents', sql_in('fichier', array_keys($filescheck)) . " AND mode LIKE 'logo%'"); |
|
| 195 | - if (is_countable($deja) ? count($deja) : 0) { |
|
| 196 | - $deja = array_column($deja, 'fichier'); |
|
| 197 | - $restant = array_diff(array_keys($filescheck), $deja); |
|
| 198 | - $files = []; |
|
| 199 | - if (count($restant)) { |
|
| 200 | - foreach ($restant as $r) { |
|
| 201 | - $files[] = $filescheck[$r]; |
|
| 202 | - } |
|
| 203 | - } |
|
| 204 | - } |
|
| 205 | - // et si il en reste on peut y aller... |
|
| 206 | - // mais il faut modifier $dir qui sert de base dans la suite |
|
| 207 | - if (is_countable($files) ? count($files) : 0) { |
|
| 208 | - $dir = $dir_logos; |
|
| 209 | - } |
|
| 210 | - } |
|
| 211 | - } |
|
| 212 | - |
|
| 213 | - $count = (is_countable($files) ? count($files) : 0); |
|
| 214 | - spip_log("logo_migrer_en_base $objet $mode : " . $count . ' logos restant', 'maj' . _LOG_INFO_IMPORTANTE); |
|
| 215 | - |
|
| 216 | - $deja = []; |
|
| 217 | - foreach ($files as $file) { |
|
| 218 | - $logo = substr($file, strlen($dir . $nom_base)); |
|
| 219 | - $logo = explode('.', $logo); |
|
| 220 | - if ( |
|
| 221 | - is_numeric($logo[0]) |
|
| 222 | - and ($id_objet = intval($logo[0]) or in_array($objet, ['site', 'rubrique'])) |
|
| 223 | - ) { |
|
| 224 | - if (!isset($deja[$id_objet])) { |
|
| 225 | - $logo = $chercher_logo($id_objet, $_id_objet, $mode); |
|
| 226 | - // if no logo in base |
|
| 227 | - if (!$logo or (is_countable($logo) ? count($logo) : 0) < 6) { |
|
| 228 | - foreach ($formats_logos as $format) { |
|
| 229 | - if (@file_exists($d = ($dir . ($nom = $nom_base . intval($id_objet) . '.' . $format)))) { |
|
| 230 | - if (isset($desc['field']['date_modif'])) { |
|
| 231 | - $date_modif = sql_getfetsel('date_modif', $table, "$_id_objet=$id_objet"); |
|
| 232 | - } else { |
|
| 233 | - $date_modif = null; |
|
| 234 | - } |
|
| 235 | - // s'assurer que le logo a les bon droits au passage (evite un echec en cas de sanitization d'un svg) |
|
| 236 | - @chmod($d, _SPIP_CHMOD & 0666); |
|
| 237 | - // logo_modifier commence par supprimer le logo existant, donc on le deplace pour pas le perdre |
|
| 238 | - @rename($d, $dir_logos . $nom); |
|
| 239 | - // et on le declare comme nouveau logo |
|
| 240 | - logo_modifier($objet, $id_objet, $mode, $dir_logos . $nom); |
|
| 241 | - if ($date_modif) { |
|
| 242 | - sql_updateq($table, ['date_modif' => $date_modif], "$_id_objet=$id_objet"); |
|
| 243 | - } |
|
| 244 | - break; |
|
| 245 | - } |
|
| 246 | - } |
|
| 247 | - } |
|
| 248 | - $deja[$id_objet] = true; |
|
| 249 | - } |
|
| 250 | - } |
|
| 251 | - // si le fichier est encore la on le move : rien a faire ici |
|
| 252 | - // (sauf si c'est une re-migration : il est deja dans logo/ donc il bouge pas) |
|
| 253 | - if ($dir !== $dir_logos and file_exists($file)) { |
|
| 254 | - @rename($file, $dir_logos_erreurs . basename($file)); |
|
| 255 | - } |
|
| 256 | - |
|
| 257 | - $count--; |
|
| 258 | - if ($count % 250 === 0) { |
|
| 259 | - spip_log("logo_migrer_en_base $objet $mode : " . $count . ' logos restant', 'maj' . _LOG_INFO_IMPORTANTE); |
|
| 260 | - } |
|
| 261 | - |
|
| 262 | - if ($time_limit and time() > $time_limit) { |
|
| 263 | - effacer_meta('drapeau_edition'); |
|
| 264 | - return; |
|
| 265 | - } |
|
| 266 | - } |
|
| 267 | - } |
|
| 268 | - |
|
| 269 | - if ($liste_objets_versionnes) { |
|
| 270 | - $GLOBALS['meta']['objets_versions'] = $liste_objets_versionnes; |
|
| 271 | - } |
|
| 272 | - $GLOBALS['meta']['articles_modif'] = $articles_modif; |
|
| 273 | - |
|
| 274 | - effacer_meta('drapeau_edition'); |
|
| 154 | + $dir_logos_erreurs = sous_repertoire(_DIR_IMG, 'logo_erreurs'); |
|
| 155 | + $dir_logos = sous_repertoire(_DIR_IMG, 'logo'); |
|
| 156 | + $formats_logos = ['jpg', 'png', 'svg', 'gif']; |
|
| 157 | + if (isset($GLOBALS['formats_logos'])) { |
|
| 158 | + $formats_logos = $GLOBALS['formats_logos']; |
|
| 159 | + } |
|
| 160 | + |
|
| 161 | + |
|
| 162 | + $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 163 | + $chercher_logo = charger_fonction('chercher_logo', 'inc'); |
|
| 164 | + include_spip('inc/chercher_logo'); |
|
| 165 | + $_id_objet = id_table_objet($objet); |
|
| 166 | + $table = table_objet_sql($objet); |
|
| 167 | + $type = type_du_logo($_id_objet); |
|
| 168 | + $desc = $trouver_table($table); |
|
| 169 | + |
|
| 170 | + // on desactive les revisions |
|
| 171 | + $liste_objets_versionnes = $GLOBALS['meta']['objets_versions'] ?? ''; |
|
| 172 | + unset($GLOBALS['meta']['objets_versions']); |
|
| 173 | + // et le signalement des editions |
|
| 174 | + $articles_modif = $GLOBALS['meta']['articles_modif'] ?? ''; |
|
| 175 | + $GLOBALS['meta']['articles_modif'] = 'non'; |
|
| 176 | + |
|
| 177 | + foreach (['on', 'off'] as $mode) { |
|
| 178 | + $nom_base = $type . $mode; |
|
| 179 | + $dir = (defined('_DIR_LOGOS') ? _DIR_LOGOS : _DIR_IMG); |
|
| 180 | + |
|
| 181 | + $files = glob($dir . $nom_base . '*'); |
|
| 182 | + // est-ce que c'est une nouvelle tentative de migration ? |
|
| 183 | + // dans ce cas les logos sont deja dans IMG/logo/ |
|
| 184 | + if (!(is_countable($files) ? count($files) : 0)) { |
|
| 185 | + $files = glob($dir_logos . $nom_base . '*'); |
|
| 186 | + if (is_countable($files) ? count($files) : 0) { |
|
| 187 | + // mais il faut verifier si ils ont pas deja ete migres pour tout ou partie |
|
| 188 | + $filescheck = []; |
|
| 189 | + foreach ($files as $file) { |
|
| 190 | + $short = basename(dirname($file)) . DIRECTORY_SEPARATOR . basename($file); |
|
| 191 | + $filescheck[$short] = $file; |
|
| 192 | + } |
|
| 193 | + // trouver ceux deja migres |
|
| 194 | + $deja = sql_allfetsel('fichier', 'spip_documents', sql_in('fichier', array_keys($filescheck)) . " AND mode LIKE 'logo%'"); |
|
| 195 | + if (is_countable($deja) ? count($deja) : 0) { |
|
| 196 | + $deja = array_column($deja, 'fichier'); |
|
| 197 | + $restant = array_diff(array_keys($filescheck), $deja); |
|
| 198 | + $files = []; |
|
| 199 | + if (count($restant)) { |
|
| 200 | + foreach ($restant as $r) { |
|
| 201 | + $files[] = $filescheck[$r]; |
|
| 202 | + } |
|
| 203 | + } |
|
| 204 | + } |
|
| 205 | + // et si il en reste on peut y aller... |
|
| 206 | + // mais il faut modifier $dir qui sert de base dans la suite |
|
| 207 | + if (is_countable($files) ? count($files) : 0) { |
|
| 208 | + $dir = $dir_logos; |
|
| 209 | + } |
|
| 210 | + } |
|
| 211 | + } |
|
| 212 | + |
|
| 213 | + $count = (is_countable($files) ? count($files) : 0); |
|
| 214 | + spip_log("logo_migrer_en_base $objet $mode : " . $count . ' logos restant', 'maj' . _LOG_INFO_IMPORTANTE); |
|
| 215 | + |
|
| 216 | + $deja = []; |
|
| 217 | + foreach ($files as $file) { |
|
| 218 | + $logo = substr($file, strlen($dir . $nom_base)); |
|
| 219 | + $logo = explode('.', $logo); |
|
| 220 | + if ( |
|
| 221 | + is_numeric($logo[0]) |
|
| 222 | + and ($id_objet = intval($logo[0]) or in_array($objet, ['site', 'rubrique'])) |
|
| 223 | + ) { |
|
| 224 | + if (!isset($deja[$id_objet])) { |
|
| 225 | + $logo = $chercher_logo($id_objet, $_id_objet, $mode); |
|
| 226 | + // if no logo in base |
|
| 227 | + if (!$logo or (is_countable($logo) ? count($logo) : 0) < 6) { |
|
| 228 | + foreach ($formats_logos as $format) { |
|
| 229 | + if (@file_exists($d = ($dir . ($nom = $nom_base . intval($id_objet) . '.' . $format)))) { |
|
| 230 | + if (isset($desc['field']['date_modif'])) { |
|
| 231 | + $date_modif = sql_getfetsel('date_modif', $table, "$_id_objet=$id_objet"); |
|
| 232 | + } else { |
|
| 233 | + $date_modif = null; |
|
| 234 | + } |
|
| 235 | + // s'assurer que le logo a les bon droits au passage (evite un echec en cas de sanitization d'un svg) |
|
| 236 | + @chmod($d, _SPIP_CHMOD & 0666); |
|
| 237 | + // logo_modifier commence par supprimer le logo existant, donc on le deplace pour pas le perdre |
|
| 238 | + @rename($d, $dir_logos . $nom); |
|
| 239 | + // et on le declare comme nouveau logo |
|
| 240 | + logo_modifier($objet, $id_objet, $mode, $dir_logos . $nom); |
|
| 241 | + if ($date_modif) { |
|
| 242 | + sql_updateq($table, ['date_modif' => $date_modif], "$_id_objet=$id_objet"); |
|
| 243 | + } |
|
| 244 | + break; |
|
| 245 | + } |
|
| 246 | + } |
|
| 247 | + } |
|
| 248 | + $deja[$id_objet] = true; |
|
| 249 | + } |
|
| 250 | + } |
|
| 251 | + // si le fichier est encore la on le move : rien a faire ici |
|
| 252 | + // (sauf si c'est une re-migration : il est deja dans logo/ donc il bouge pas) |
|
| 253 | + if ($dir !== $dir_logos and file_exists($file)) { |
|
| 254 | + @rename($file, $dir_logos_erreurs . basename($file)); |
|
| 255 | + } |
|
| 256 | + |
|
| 257 | + $count--; |
|
| 258 | + if ($count % 250 === 0) { |
|
| 259 | + spip_log("logo_migrer_en_base $objet $mode : " . $count . ' logos restant', 'maj' . _LOG_INFO_IMPORTANTE); |
|
| 260 | + } |
|
| 261 | + |
|
| 262 | + if ($time_limit and time() > $time_limit) { |
|
| 263 | + effacer_meta('drapeau_edition'); |
|
| 264 | + return; |
|
| 265 | + } |
|
| 266 | + } |
|
| 267 | + } |
|
| 268 | + |
|
| 269 | + if ($liste_objets_versionnes) { |
|
| 270 | + $GLOBALS['meta']['objets_versions'] = $liste_objets_versionnes; |
|
| 271 | + } |
|
| 272 | + $GLOBALS['meta']['articles_modif'] = $articles_modif; |
|
| 273 | + |
|
| 274 | + effacer_meta('drapeau_edition'); |
|
| 275 | 275 | } |
@@ -40,7 +40,7 @@ discard block |
||
| 40 | 40 | if ($logo) { |
| 41 | 41 | # TODO : deprecated, a supprimer -> anciens logos IMG/artonxx.png pas en base |
| 42 | 42 | if ((is_countable($logo) ? count($logo) : 0) < 6) { |
| 43 | - spip_log('Supprimer ancien logo ' . json_encode($logo, JSON_THROW_ON_ERROR), 'logo'); |
|
| 43 | + spip_log('Supprimer ancien logo '.json_encode($logo, JSON_THROW_ON_ERROR), 'logo'); |
|
| 44 | 44 | spip_unlink($logo[0]); |
| 45 | 45 | } |
| 46 | 46 | elseif ( |
@@ -89,7 +89,7 @@ discard block |
||
| 89 | 89 | return $erreur; |
| 90 | 90 | } |
| 91 | 91 | // chercher dans la base |
| 92 | - $mode_document = 'logo' . $mode; |
|
| 92 | + $mode_document = 'logo'.$mode; |
|
| 93 | 93 | |
| 94 | 94 | include_spip('inc/documents'); |
| 95 | 95 | $erreur = ''; |
@@ -106,7 +106,7 @@ discard block |
||
| 106 | 106 | $tmp_name = false; |
| 107 | 107 | if (file_exists($source)) { |
| 108 | 108 | $tmp_name = $source; |
| 109 | - } elseif (file_exists($f = determine_upload() . $source)) { |
|
| 109 | + } elseif (file_exists($f = determine_upload().$source)) { |
|
| 110 | 110 | $tmp_name = $f; |
| 111 | 111 | } |
| 112 | 112 | if (!$tmp_name) { |
@@ -142,7 +142,7 @@ discard block |
||
| 142 | 142 | |
| 143 | 143 | if (!is_numeric($id_document)) { |
| 144 | 144 | $erreur = ($id_document ?: 'Erreur inconnue'); |
| 145 | - spip_log("Erreur ajout logo : $erreur pour source=" . json_encode($source, JSON_THROW_ON_ERROR), 'logo'); |
|
| 145 | + spip_log("Erreur ajout logo : $erreur pour source=".json_encode($source, JSON_THROW_ON_ERROR), 'logo'); |
|
| 146 | 146 | return $erreur; |
| 147 | 147 | } |
| 148 | 148 | |
@@ -175,23 +175,23 @@ discard block |
||
| 175 | 175 | $GLOBALS['meta']['articles_modif'] = 'non'; |
| 176 | 176 | |
| 177 | 177 | foreach (['on', 'off'] as $mode) { |
| 178 | - $nom_base = $type . $mode; |
|
| 178 | + $nom_base = $type.$mode; |
|
| 179 | 179 | $dir = (defined('_DIR_LOGOS') ? _DIR_LOGOS : _DIR_IMG); |
| 180 | 180 | |
| 181 | - $files = glob($dir . $nom_base . '*'); |
|
| 181 | + $files = glob($dir.$nom_base.'*'); |
|
| 182 | 182 | // est-ce que c'est une nouvelle tentative de migration ? |
| 183 | 183 | // dans ce cas les logos sont deja dans IMG/logo/ |
| 184 | 184 | if (!(is_countable($files) ? count($files) : 0)) { |
| 185 | - $files = glob($dir_logos . $nom_base . '*'); |
|
| 185 | + $files = glob($dir_logos.$nom_base.'*'); |
|
| 186 | 186 | if (is_countable($files) ? count($files) : 0) { |
| 187 | 187 | // mais il faut verifier si ils ont pas deja ete migres pour tout ou partie |
| 188 | 188 | $filescheck = []; |
| 189 | 189 | foreach ($files as $file) { |
| 190 | - $short = basename(dirname($file)) . DIRECTORY_SEPARATOR . basename($file); |
|
| 190 | + $short = basename(dirname($file)).DIRECTORY_SEPARATOR.basename($file); |
|
| 191 | 191 | $filescheck[$short] = $file; |
| 192 | 192 | } |
| 193 | 193 | // trouver ceux deja migres |
| 194 | - $deja = sql_allfetsel('fichier', 'spip_documents', sql_in('fichier', array_keys($filescheck)) . " AND mode LIKE 'logo%'"); |
|
| 194 | + $deja = sql_allfetsel('fichier', 'spip_documents', sql_in('fichier', array_keys($filescheck))." AND mode LIKE 'logo%'"); |
|
| 195 | 195 | if (is_countable($deja) ? count($deja) : 0) { |
| 196 | 196 | $deja = array_column($deja, 'fichier'); |
| 197 | 197 | $restant = array_diff(array_keys($filescheck), $deja); |
@@ -211,11 +211,11 @@ discard block |
||
| 211 | 211 | } |
| 212 | 212 | |
| 213 | 213 | $count = (is_countable($files) ? count($files) : 0); |
| 214 | - spip_log("logo_migrer_en_base $objet $mode : " . $count . ' logos restant', 'maj' . _LOG_INFO_IMPORTANTE); |
|
| 214 | + spip_log("logo_migrer_en_base $objet $mode : ".$count.' logos restant', 'maj'._LOG_INFO_IMPORTANTE); |
|
| 215 | 215 | |
| 216 | 216 | $deja = []; |
| 217 | 217 | foreach ($files as $file) { |
| 218 | - $logo = substr($file, strlen($dir . $nom_base)); |
|
| 218 | + $logo = substr($file, strlen($dir.$nom_base)); |
|
| 219 | 219 | $logo = explode('.', $logo); |
| 220 | 220 | if ( |
| 221 | 221 | is_numeric($logo[0]) |
@@ -226,7 +226,7 @@ discard block |
||
| 226 | 226 | // if no logo in base |
| 227 | 227 | if (!$logo or (is_countable($logo) ? count($logo) : 0) < 6) { |
| 228 | 228 | foreach ($formats_logos as $format) { |
| 229 | - if (@file_exists($d = ($dir . ($nom = $nom_base . intval($id_objet) . '.' . $format)))) { |
|
| 229 | + if (@file_exists($d = ($dir.($nom = $nom_base.intval($id_objet).'.'.$format)))) { |
|
| 230 | 230 | if (isset($desc['field']['date_modif'])) { |
| 231 | 231 | $date_modif = sql_getfetsel('date_modif', $table, "$_id_objet=$id_objet"); |
| 232 | 232 | } else { |
@@ -235,9 +235,9 @@ discard block |
||
| 235 | 235 | // s'assurer que le logo a les bon droits au passage (evite un echec en cas de sanitization d'un svg) |
| 236 | 236 | @chmod($d, _SPIP_CHMOD & 0666); |
| 237 | 237 | // logo_modifier commence par supprimer le logo existant, donc on le deplace pour pas le perdre |
| 238 | - @rename($d, $dir_logos . $nom); |
|
| 238 | + @rename($d, $dir_logos.$nom); |
|
| 239 | 239 | // et on le declare comme nouveau logo |
| 240 | - logo_modifier($objet, $id_objet, $mode, $dir_logos . $nom); |
|
| 240 | + logo_modifier($objet, $id_objet, $mode, $dir_logos.$nom); |
|
| 241 | 241 | if ($date_modif) { |
| 242 | 242 | sql_updateq($table, ['date_modif' => $date_modif], "$_id_objet=$id_objet"); |
| 243 | 243 | } |
@@ -251,12 +251,12 @@ discard block |
||
| 251 | 251 | // si le fichier est encore la on le move : rien a faire ici |
| 252 | 252 | // (sauf si c'est une re-migration : il est deja dans logo/ donc il bouge pas) |
| 253 | 253 | if ($dir !== $dir_logos and file_exists($file)) { |
| 254 | - @rename($file, $dir_logos_erreurs . basename($file)); |
|
| 254 | + @rename($file, $dir_logos_erreurs.basename($file)); |
|
| 255 | 255 | } |
| 256 | 256 | |
| 257 | 257 | $count--; |
| 258 | 258 | if ($count % 250 === 0) { |
| 259 | - spip_log("logo_migrer_en_base $objet $mode : " . $count . ' logos restant', 'maj' . _LOG_INFO_IMPORTANTE); |
|
| 259 | + spip_log("logo_migrer_en_base $objet $mode : ".$count.' logos restant', 'maj'._LOG_INFO_IMPORTANTE); |
|
| 260 | 260 | } |
| 261 | 261 | |
| 262 | 262 | if ($time_limit and time() > $time_limit) { |
@@ -11,109 +11,109 @@ |
||
| 11 | 11 | \***************************************************************************/ |
| 12 | 12 | |
| 13 | 13 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 14 | - return; |
|
| 14 | + return; |
|
| 15 | 15 | } |
| 16 | 16 | |
| 17 | 17 | function inc_log_dist($message, $logname = null, $logdir = null, $logsuf = null) { |
| 18 | - static $test_repertoire = []; |
|
| 19 | - static $compteur = []; |
|
| 20 | - static $debugverb = ''; // pour ne pas le recalculer au reappel |
|
| 21 | - |
|
| 22 | - if (is_null($logname) or !is_string($logname)) { |
|
| 23 | - $logname = defined('_FILE_LOG') ? _FILE_LOG : 'spip'; |
|
| 24 | - } |
|
| 25 | - if (!isset($compteur[$logname])) { |
|
| 26 | - $compteur[$logname] = 0; |
|
| 27 | - } |
|
| 28 | - if ( |
|
| 29 | - $logname != 'maj' |
|
| 30 | - and defined('_MAX_LOG') |
|
| 31 | - and ( |
|
| 32 | - $compteur[$logname]++ > _MAX_LOG |
|
| 33 | - or !$GLOBALS['nombre_de_logs'] |
|
| 34 | - or !$GLOBALS['taille_des_logs'] |
|
| 35 | - ) |
|
| 36 | - ) { |
|
| 37 | - return; |
|
| 38 | - } |
|
| 39 | - |
|
| 40 | - // si spip_log() est appelé dans mes_options, toutes les constantes n'ont pas été définies |
|
| 41 | - $logfile = |
|
| 42 | - ($logdir ?? (defined('_DIR_LOG') ? _DIR_LOG : _DIR_RACINE . _NOM_TEMPORAIRES_INACCESSIBLES)) |
|
| 43 | - . $logname |
|
| 44 | - . ($logsuf ?? (defined('_FILE_LOG_SUFFIX') ? _FILE_LOG_SUFFIX : '.log')); |
|
| 45 | - |
|
| 46 | - if (!isset($test_repertoire[$d = dirname($logfile)])) { |
|
| 47 | - $test_repertoire[$d] = false; // eviter une recursivite en cas d'erreur de sous_repertoire |
|
| 48 | - $test_repertoire[$d] = (@is_dir($d) ? true : (function_exists('sous_repertoire') ? sous_repertoire( |
|
| 49 | - $d, |
|
| 50 | - '', |
|
| 51 | - false, |
|
| 52 | - true |
|
| 53 | - ) : false)); |
|
| 54 | - } |
|
| 55 | - |
|
| 56 | - // Si le repertoire défini n'existe pas, poser dans tmp/ |
|
| 57 | - if (!$test_repertoire[$d]) { |
|
| 58 | - $logfile = _DIR_RACINE . _NOM_TEMPORAIRES_INACCESSIBLES . $logname . '.log'; |
|
| 59 | - } |
|
| 60 | - |
|
| 61 | - $rotate = 0; |
|
| 62 | - $pid = '(pid ' . @getmypid() . ')'; |
|
| 63 | - |
|
| 64 | - // accepter spip_log( Array ) |
|
| 65 | - if (!is_string($message)) { |
|
| 66 | - $message = var_export($message, true); |
|
| 67 | - } |
|
| 68 | - |
|
| 69 | - if (!$debugverb and defined('_LOG_FILELINE') and _LOG_FILELINE) { |
|
| 70 | - $debug = debug_backtrace(); |
|
| 71 | - $l = $debug[1]['line']; |
|
| 72 | - $fi = $debug[1]['file']; |
|
| 73 | - if (strncmp($fi, _ROOT_RACINE, strlen(_ROOT_RACINE)) == 0) { |
|
| 74 | - $fi = substr($fi, strlen(_ROOT_RACINE)); |
|
| 75 | - } |
|
| 76 | - $fu = $debug[2]['function'] ?? ''; |
|
| 77 | - $debugverb = "$fi:L$l:$fu" . '():'; |
|
| 78 | - } |
|
| 79 | - |
|
| 80 | - $m = date('Y-m-d H:i:s') . ' ' . ($GLOBALS['ip'] ?? '') . ' ' . $pid . ' ' |
|
| 81 | - //distinguer les logs prives et publics dans les grep |
|
| 82 | - . $debugverb |
|
| 83 | - . (test_espace_prive() ? ':Pri:' : ':Pub:') |
|
| 84 | - . preg_replace("/\n*$/", "\n", $message); |
|
| 85 | - |
|
| 86 | - |
|
| 87 | - if ( |
|
| 88 | - @is_readable($logfile) |
|
| 89 | - and (!$s = @filesize($logfile) or $s > $GLOBALS['taille_des_logs'] * 1024) |
|
| 90 | - ) { |
|
| 91 | - $rotate = $GLOBALS['nombre_de_logs']; |
|
| 92 | - $m .= "[-- rotate --]\n"; |
|
| 93 | - } |
|
| 94 | - |
|
| 95 | - $f = @fopen($logfile, 'ab'); |
|
| 96 | - if ($f) { |
|
| 97 | - fputs($f, (defined('_LOG_BRUT') and _LOG_BRUT) ? $m : str_replace('<', '<', $m)); |
|
| 98 | - fclose($f); |
|
| 99 | - } |
|
| 100 | - |
|
| 101 | - if ( |
|
| 102 | - $rotate-- > 0 |
|
| 103 | - and function_exists('spip_unlink') |
|
| 104 | - ) { |
|
| 105 | - spip_unlink($logfile . '.' . $rotate); |
|
| 106 | - while ($rotate--) { |
|
| 107 | - @rename($logfile . ($rotate ? '.' . $rotate : ''), $logfile . '.' . ($rotate + 1)); |
|
| 108 | - } |
|
| 109 | - } |
|
| 110 | - |
|
| 111 | - // Dupliquer les erreurs specifiques dans le log general |
|
| 112 | - if ( |
|
| 113 | - defined('_FILE_LOG') |
|
| 114 | - and ($logname !== _FILE_LOG) |
|
| 115 | - ) { |
|
| 116 | - inc_log_dist($logname == 'maj' ? 'cf maj.log' : $message); |
|
| 117 | - } |
|
| 118 | - $debugverb = ''; |
|
| 18 | + static $test_repertoire = []; |
|
| 19 | + static $compteur = []; |
|
| 20 | + static $debugverb = ''; // pour ne pas le recalculer au reappel |
|
| 21 | + |
|
| 22 | + if (is_null($logname) or !is_string($logname)) { |
|
| 23 | + $logname = defined('_FILE_LOG') ? _FILE_LOG : 'spip'; |
|
| 24 | + } |
|
| 25 | + if (!isset($compteur[$logname])) { |
|
| 26 | + $compteur[$logname] = 0; |
|
| 27 | + } |
|
| 28 | + if ( |
|
| 29 | + $logname != 'maj' |
|
| 30 | + and defined('_MAX_LOG') |
|
| 31 | + and ( |
|
| 32 | + $compteur[$logname]++ > _MAX_LOG |
|
| 33 | + or !$GLOBALS['nombre_de_logs'] |
|
| 34 | + or !$GLOBALS['taille_des_logs'] |
|
| 35 | + ) |
|
| 36 | + ) { |
|
| 37 | + return; |
|
| 38 | + } |
|
| 39 | + |
|
| 40 | + // si spip_log() est appelé dans mes_options, toutes les constantes n'ont pas été définies |
|
| 41 | + $logfile = |
|
| 42 | + ($logdir ?? (defined('_DIR_LOG') ? _DIR_LOG : _DIR_RACINE . _NOM_TEMPORAIRES_INACCESSIBLES)) |
|
| 43 | + . $logname |
|
| 44 | + . ($logsuf ?? (defined('_FILE_LOG_SUFFIX') ? _FILE_LOG_SUFFIX : '.log')); |
|
| 45 | + |
|
| 46 | + if (!isset($test_repertoire[$d = dirname($logfile)])) { |
|
| 47 | + $test_repertoire[$d] = false; // eviter une recursivite en cas d'erreur de sous_repertoire |
|
| 48 | + $test_repertoire[$d] = (@is_dir($d) ? true : (function_exists('sous_repertoire') ? sous_repertoire( |
|
| 49 | + $d, |
|
| 50 | + '', |
|
| 51 | + false, |
|
| 52 | + true |
|
| 53 | + ) : false)); |
|
| 54 | + } |
|
| 55 | + |
|
| 56 | + // Si le repertoire défini n'existe pas, poser dans tmp/ |
|
| 57 | + if (!$test_repertoire[$d]) { |
|
| 58 | + $logfile = _DIR_RACINE . _NOM_TEMPORAIRES_INACCESSIBLES . $logname . '.log'; |
|
| 59 | + } |
|
| 60 | + |
|
| 61 | + $rotate = 0; |
|
| 62 | + $pid = '(pid ' . @getmypid() . ')'; |
|
| 63 | + |
|
| 64 | + // accepter spip_log( Array ) |
|
| 65 | + if (!is_string($message)) { |
|
| 66 | + $message = var_export($message, true); |
|
| 67 | + } |
|
| 68 | + |
|
| 69 | + if (!$debugverb and defined('_LOG_FILELINE') and _LOG_FILELINE) { |
|
| 70 | + $debug = debug_backtrace(); |
|
| 71 | + $l = $debug[1]['line']; |
|
| 72 | + $fi = $debug[1]['file']; |
|
| 73 | + if (strncmp($fi, _ROOT_RACINE, strlen(_ROOT_RACINE)) == 0) { |
|
| 74 | + $fi = substr($fi, strlen(_ROOT_RACINE)); |
|
| 75 | + } |
|
| 76 | + $fu = $debug[2]['function'] ?? ''; |
|
| 77 | + $debugverb = "$fi:L$l:$fu" . '():'; |
|
| 78 | + } |
|
| 79 | + |
|
| 80 | + $m = date('Y-m-d H:i:s') . ' ' . ($GLOBALS['ip'] ?? '') . ' ' . $pid . ' ' |
|
| 81 | + //distinguer les logs prives et publics dans les grep |
|
| 82 | + . $debugverb |
|
| 83 | + . (test_espace_prive() ? ':Pri:' : ':Pub:') |
|
| 84 | + . preg_replace("/\n*$/", "\n", $message); |
|
| 85 | + |
|
| 86 | + |
|
| 87 | + if ( |
|
| 88 | + @is_readable($logfile) |
|
| 89 | + and (!$s = @filesize($logfile) or $s > $GLOBALS['taille_des_logs'] * 1024) |
|
| 90 | + ) { |
|
| 91 | + $rotate = $GLOBALS['nombre_de_logs']; |
|
| 92 | + $m .= "[-- rotate --]\n"; |
|
| 93 | + } |
|
| 94 | + |
|
| 95 | + $f = @fopen($logfile, 'ab'); |
|
| 96 | + if ($f) { |
|
| 97 | + fputs($f, (defined('_LOG_BRUT') and _LOG_BRUT) ? $m : str_replace('<', '<', $m)); |
|
| 98 | + fclose($f); |
|
| 99 | + } |
|
| 100 | + |
|
| 101 | + if ( |
|
| 102 | + $rotate-- > 0 |
|
| 103 | + and function_exists('spip_unlink') |
|
| 104 | + ) { |
|
| 105 | + spip_unlink($logfile . '.' . $rotate); |
|
| 106 | + while ($rotate--) { |
|
| 107 | + @rename($logfile . ($rotate ? '.' . $rotate : ''), $logfile . '.' . ($rotate + 1)); |
|
| 108 | + } |
|
| 109 | + } |
|
| 110 | + |
|
| 111 | + // Dupliquer les erreurs specifiques dans le log general |
|
| 112 | + if ( |
|
| 113 | + defined('_FILE_LOG') |
|
| 114 | + and ($logname !== _FILE_LOG) |
|
| 115 | + ) { |
|
| 116 | + inc_log_dist($logname == 'maj' ? 'cf maj.log' : $message); |
|
| 117 | + } |
|
| 118 | + $debugverb = ''; |
|
| 119 | 119 | } |
@@ -39,7 +39,7 @@ discard block |
||
| 39 | 39 | |
| 40 | 40 | // si spip_log() est appelé dans mes_options, toutes les constantes n'ont pas été définies |
| 41 | 41 | $logfile = |
| 42 | - ($logdir ?? (defined('_DIR_LOG') ? _DIR_LOG : _DIR_RACINE . _NOM_TEMPORAIRES_INACCESSIBLES)) |
|
| 42 | + ($logdir ?? (defined('_DIR_LOG') ? _DIR_LOG : _DIR_RACINE._NOM_TEMPORAIRES_INACCESSIBLES)) |
|
| 43 | 43 | . $logname |
| 44 | 44 | . ($logsuf ?? (defined('_FILE_LOG_SUFFIX') ? _FILE_LOG_SUFFIX : '.log')); |
| 45 | 45 | |
@@ -55,11 +55,11 @@ discard block |
||
| 55 | 55 | |
| 56 | 56 | // Si le repertoire défini n'existe pas, poser dans tmp/ |
| 57 | 57 | if (!$test_repertoire[$d]) { |
| 58 | - $logfile = _DIR_RACINE . _NOM_TEMPORAIRES_INACCESSIBLES . $logname . '.log'; |
|
| 58 | + $logfile = _DIR_RACINE._NOM_TEMPORAIRES_INACCESSIBLES.$logname.'.log'; |
|
| 59 | 59 | } |
| 60 | 60 | |
| 61 | 61 | $rotate = 0; |
| 62 | - $pid = '(pid ' . @getmypid() . ')'; |
|
| 62 | + $pid = '(pid '.@getmypid().')'; |
|
| 63 | 63 | |
| 64 | 64 | // accepter spip_log( Array ) |
| 65 | 65 | if (!is_string($message)) { |
@@ -74,10 +74,10 @@ discard block |
||
| 74 | 74 | $fi = substr($fi, strlen(_ROOT_RACINE)); |
| 75 | 75 | } |
| 76 | 76 | $fu = $debug[2]['function'] ?? ''; |
| 77 | - $debugverb = "$fi:L$l:$fu" . '():'; |
|
| 77 | + $debugverb = "$fi:L$l:$fu".'():'; |
|
| 78 | 78 | } |
| 79 | 79 | |
| 80 | - $m = date('Y-m-d H:i:s') . ' ' . ($GLOBALS['ip'] ?? '') . ' ' . $pid . ' ' |
|
| 80 | + $m = date('Y-m-d H:i:s').' '.($GLOBALS['ip'] ?? '').' '.$pid.' ' |
|
| 81 | 81 | //distinguer les logs prives et publics dans les grep |
| 82 | 82 | . $debugverb |
| 83 | 83 | . (test_espace_prive() ? ':Pri:' : ':Pub:') |
@@ -102,9 +102,9 @@ discard block |
||
| 102 | 102 | $rotate-- > 0 |
| 103 | 103 | and function_exists('spip_unlink') |
| 104 | 104 | ) { |
| 105 | - spip_unlink($logfile . '.' . $rotate); |
|
| 105 | + spip_unlink($logfile.'.'.$rotate); |
|
| 106 | 106 | while ($rotate--) { |
| 107 | - @rename($logfile . ($rotate ? '.' . $rotate : ''), $logfile . '.' . ($rotate + 1)); |
|
| 107 | + @rename($logfile.($rotate ? '.'.$rotate : ''), $logfile.'.'.($rotate + 1)); |
|
| 108 | 108 | } |
| 109 | 109 | } |
| 110 | 110 | |
@@ -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 | include_spip('inc/headers'); |
@@ -19,199 +19,199 @@ discard block |
||
| 19 | 19 | |
| 20 | 20 | function install_bases($adresse_db, $login_db, $pass_db, $server_db, $choix_db, $sel_db, $chmod_db) { |
| 21 | 21 | |
| 22 | - // Prefix des tables : |
|
| 23 | - // S'il n'est pas defini par mes_options/inc/mutualiser, on va le creer |
|
| 24 | - // a partir de ce qui est envoye a l'installation |
|
| 25 | - if (!defined('_INSTALL_TABLE_PREFIX')) { |
|
| 26 | - $table_prefix = ($GLOBALS['table_prefix'] != 'spip') |
|
| 27 | - ? $GLOBALS['table_prefix'] |
|
| 28 | - : preparer_prefixe_tables(_request('tprefix')); |
|
| 29 | - // S'il est vide on remet spip |
|
| 30 | - if (!$table_prefix) { |
|
| 31 | - $table_prefix = 'spip'; |
|
| 32 | - } |
|
| 33 | - } else { |
|
| 34 | - $table_prefix = _INSTALL_TABLE_PREFIX; |
|
| 35 | - } |
|
| 36 | - |
|
| 37 | - if (preg_match(',(.*):(.*),', $adresse_db, $r)) { |
|
| 38 | - [, $adresse_db, $port] = $r; |
|
| 39 | - } else { |
|
| 40 | - $port = ''; |
|
| 41 | - } |
|
| 42 | - |
|
| 43 | - $GLOBALS['connexions'][$server_db] |
|
| 44 | - = spip_connect_db($adresse_db, $port, $login_db, $pass_db, '', $server_db); |
|
| 45 | - |
|
| 46 | - $GLOBALS['connexions'][$server_db][$GLOBALS['spip_sql_version']] |
|
| 47 | - = $GLOBALS['spip_' . $server_db . '_functions_' . $GLOBALS['spip_sql_version']]; |
|
| 48 | - |
|
| 49 | - $fquery = sql_serveur('query', $server_db); |
|
| 50 | - if ($choix_db == 'new_spip') { |
|
| 51 | - $re = ',^[a-z_][a-z_0-9-]*$,i'; |
|
| 52 | - if (preg_match($re, $sel_db)) { |
|
| 53 | - $ok = sql_create_base($sel_db, $server_db); |
|
| 54 | - if (!$ok) { |
|
| 55 | - $re = "Impossible de creer la base $re"; |
|
| 56 | - spip_log($re); |
|
| 57 | - return '<p>' . _T('avis_connexion_erreur_creer_base') . "</p><!--\n$re\n-->"; |
|
| 58 | - } |
|
| 59 | - } else { |
|
| 60 | - $re = "Le nom de la base doit correspondre a $re"; |
|
| 61 | - spip_log($re); |
|
| 62 | - |
|
| 63 | - return '<p>' . _T('avis_connexion_erreur_nom_base') . "</p><!--\n$re\n-->"; |
|
| 64 | - } |
|
| 65 | - } |
|
| 66 | - |
|
| 67 | - // on rejoue la connexion apres avoir teste si il faut lui indiquer |
|
| 68 | - // un sql_mode |
|
| 69 | - install_mode_appel($server_db, false); |
|
| 70 | - $GLOBALS['connexions'][$server_db] |
|
| 71 | - = spip_connect_db($adresse_db, $port, $login_db, $pass_db, $sel_db, $server_db); |
|
| 72 | - |
|
| 73 | - $GLOBALS['connexions'][$server_db][$GLOBALS['spip_sql_version']] |
|
| 74 | - = $GLOBALS['spip_' . $server_db . '_functions_' . $GLOBALS['spip_sql_version']]; |
|
| 75 | - |
|
| 76 | - // Completer le tableau decrivant la connexion |
|
| 77 | - |
|
| 78 | - $GLOBALS['connexions'][$server_db]['prefixe'] = $table_prefix; |
|
| 79 | - $GLOBALS['connexions'][$server_db]['db'] = $sel_db; |
|
| 80 | - |
|
| 81 | - $old = sql_showbase($table_prefix . '_meta', $server_db); |
|
| 82 | - if ($old) { |
|
| 83 | - $old = sql_fetch($old, $server_db); |
|
| 84 | - } |
|
| 85 | - if (!$old) { |
|
| 86 | - // Si possible, demander au serveur d'envoyer les textes |
|
| 87 | - // dans le codage std de SPIP, |
|
| 88 | - $charset = sql_get_charset(_DEFAULT_CHARSET, $server_db); |
|
| 89 | - |
|
| 90 | - if ($charset) { |
|
| 91 | - sql_set_charset($charset['charset'], $server_db); |
|
| 92 | - $GLOBALS['meta']['charset_sql_base'] = |
|
| 93 | - $charset['charset']; |
|
| 94 | - $GLOBALS['meta']['charset_collation_sql_base'] = |
|
| 95 | - $charset['collation']; |
|
| 96 | - $GLOBALS['meta']['charset_sql_connexion'] = |
|
| 97 | - $charset['charset']; |
|
| 98 | - $charsetbase = $charset['charset']; |
|
| 99 | - } else { |
|
| 100 | - spip_log(_DEFAULT_CHARSET . ' inconnu du serveur SQL'); |
|
| 101 | - $charsetbase = 'standard'; |
|
| 102 | - } |
|
| 103 | - spip_log("Creation des tables. Codage $charsetbase"); |
|
| 104 | - creer_base($server_db); // AT LAST |
|
| 105 | - // memoriser avec quel charset on l'a creee |
|
| 106 | - |
|
| 107 | - if ($charset) { |
|
| 108 | - $t = [ |
|
| 109 | - 'nom' => 'charset_sql_base', |
|
| 110 | - 'valeur' => $charset['charset'], |
|
| 111 | - 'impt' => 'non' |
|
| 112 | - ]; |
|
| 113 | - @sql_insertq('spip_meta', $t, [], $server_db); |
|
| 114 | - $t['nom'] = 'charset_collation_sql_base'; |
|
| 115 | - $t['valeur'] = $charset['collation']; |
|
| 116 | - @sql_insertq('spip_meta', $t, [], $server_db); |
|
| 117 | - $t['nom'] = 'charset_sql_connexion'; |
|
| 118 | - $t['valeur'] = $charset['charset']; |
|
| 119 | - @sql_insertq('spip_meta', $t, [], $server_db); |
|
| 120 | - } |
|
| 121 | - $t = [ |
|
| 122 | - 'nom' => 'version_installee', |
|
| 123 | - 'valeur' => $GLOBALS['spip_version_base'], |
|
| 124 | - 'impt' => 'non' |
|
| 125 | - ]; |
|
| 126 | - @sql_insertq('spip_meta', $t, [], $server_db); |
|
| 127 | - $t['nom'] = 'nouvelle_install'; |
|
| 128 | - $t['valeur'] = 1; |
|
| 129 | - @sql_insertq('spip_meta', $t, [], $server_db); |
|
| 130 | - // positionner la langue par defaut du site si un cookie de lang a ete mis |
|
| 131 | - if (isset($_COOKIE['spip_lang_ecrire'])) { |
|
| 132 | - @sql_insertq( |
|
| 133 | - 'spip_meta', |
|
| 134 | - ['nom' => 'langue_site', 'valeur' => $_COOKIE['spip_lang_ecrire']], |
|
| 135 | - [], |
|
| 136 | - $server_db |
|
| 137 | - ); |
|
| 138 | - } |
|
| 139 | - } else { |
|
| 140 | - // pour recreer les tables disparues au besoin |
|
| 141 | - spip_log('Table des Meta deja la. Verification des autres.'); |
|
| 142 | - creer_base($server_db); |
|
| 143 | - $fupdateq = sql_serveur('updateq', $server_db); |
|
| 144 | - |
|
| 145 | - $r = $fquery("SELECT valeur FROM spip_meta WHERE nom='version_installee'", $server_db); |
|
| 146 | - |
|
| 147 | - if ($r) { |
|
| 148 | - $r = sql_fetch($r, $server_db); |
|
| 149 | - } |
|
| 150 | - $version_installee = !$r ? 0 : (double)$r['valeur']; |
|
| 151 | - if (!$version_installee or ($GLOBALS['spip_version_base'] < $version_installee)) { |
|
| 152 | - $fupdateq( |
|
| 153 | - 'spip_meta', |
|
| 154 | - ['valeur' => $GLOBALS['spip_version_base'], 'impt' => 'non'], |
|
| 155 | - "nom='version_installee'", |
|
| 156 | - '', |
|
| 157 | - $server_db |
|
| 158 | - ); |
|
| 159 | - spip_log('nouvelle version installee: ' . $GLOBALS['spip_version_base']); |
|
| 160 | - } |
|
| 161 | - // eliminer la derniere operation d'admin mal terminee |
|
| 162 | - // notamment la mise a jour |
|
| 163 | - @$fquery("DELETE FROM spip_meta WHERE nom='import_all' OR nom='admin'", $server_db); |
|
| 164 | - } |
|
| 165 | - |
|
| 166 | - // recuperer le charset de la connexion dans les meta |
|
| 167 | - $charset = ''; |
|
| 168 | - $r = $fquery("SELECT valeur FROM spip_meta WHERE nom='charset_sql_connexion'", $server_db); |
|
| 169 | - if ($r) { |
|
| 170 | - $r = sql_fetch($r, $server_db); |
|
| 171 | - } |
|
| 172 | - if ($r) { |
|
| 173 | - $charset = $r['valeur']; |
|
| 174 | - } |
|
| 175 | - |
|
| 176 | - $ligne_rappel = install_mode_appel($server_db); |
|
| 177 | - |
|
| 178 | - $result_ok = @$fquery('SELECT COUNT(*) FROM spip_meta', $server_db); |
|
| 179 | - if (!$result_ok) { |
|
| 180 | - return "<!--\nvielle = $old rappel= $ligne_rappel\n-->"; |
|
| 181 | - } |
|
| 182 | - |
|
| 183 | - if ($chmod_db) { |
|
| 184 | - install_fichier_connexion( |
|
| 185 | - _FILE_CHMOD_TMP, |
|
| 186 | - "if (!defined('_SPIP_CHMOD')) define('_SPIP_CHMOD', " . sprintf('0%3o', $chmod_db) . ");\n" |
|
| 187 | - ); |
|
| 188 | - } |
|
| 189 | - |
|
| 190 | - // si ce fichier existe a cette etape c'est qu'il provient |
|
| 191 | - // d'une installation qui ne l'a pas cree correctement. |
|
| 192 | - // Le supprimer pour que _FILE_CONNECT_TMP prime. |
|
| 193 | - |
|
| 194 | - if (_FILE_CONNECT and file_exists(_FILE_CONNECT)) { |
|
| 195 | - spip_unlink(_FILE_CONNECT); |
|
| 196 | - } |
|
| 197 | - |
|
| 198 | - install_fichier_connexion( |
|
| 199 | - _FILE_CONNECT_TMP, |
|
| 200 | - $ligne_rappel |
|
| 201 | - . install_connexion( |
|
| 202 | - $adresse_db, |
|
| 203 | - $port, |
|
| 204 | - $login_db, |
|
| 205 | - $pass_db, |
|
| 206 | - $sel_db, |
|
| 207 | - $server_db, |
|
| 208 | - $table_prefix, |
|
| 209 | - '', |
|
| 210 | - $charset |
|
| 211 | - ) |
|
| 212 | - ); |
|
| 213 | - |
|
| 214 | - return ''; |
|
| 22 | + // Prefix des tables : |
|
| 23 | + // S'il n'est pas defini par mes_options/inc/mutualiser, on va le creer |
|
| 24 | + // a partir de ce qui est envoye a l'installation |
|
| 25 | + if (!defined('_INSTALL_TABLE_PREFIX')) { |
|
| 26 | + $table_prefix = ($GLOBALS['table_prefix'] != 'spip') |
|
| 27 | + ? $GLOBALS['table_prefix'] |
|
| 28 | + : preparer_prefixe_tables(_request('tprefix')); |
|
| 29 | + // S'il est vide on remet spip |
|
| 30 | + if (!$table_prefix) { |
|
| 31 | + $table_prefix = 'spip'; |
|
| 32 | + } |
|
| 33 | + } else { |
|
| 34 | + $table_prefix = _INSTALL_TABLE_PREFIX; |
|
| 35 | + } |
|
| 36 | + |
|
| 37 | + if (preg_match(',(.*):(.*),', $adresse_db, $r)) { |
|
| 38 | + [, $adresse_db, $port] = $r; |
|
| 39 | + } else { |
|
| 40 | + $port = ''; |
|
| 41 | + } |
|
| 42 | + |
|
| 43 | + $GLOBALS['connexions'][$server_db] |
|
| 44 | + = spip_connect_db($adresse_db, $port, $login_db, $pass_db, '', $server_db); |
|
| 45 | + |
|
| 46 | + $GLOBALS['connexions'][$server_db][$GLOBALS['spip_sql_version']] |
|
| 47 | + = $GLOBALS['spip_' . $server_db . '_functions_' . $GLOBALS['spip_sql_version']]; |
|
| 48 | + |
|
| 49 | + $fquery = sql_serveur('query', $server_db); |
|
| 50 | + if ($choix_db == 'new_spip') { |
|
| 51 | + $re = ',^[a-z_][a-z_0-9-]*$,i'; |
|
| 52 | + if (preg_match($re, $sel_db)) { |
|
| 53 | + $ok = sql_create_base($sel_db, $server_db); |
|
| 54 | + if (!$ok) { |
|
| 55 | + $re = "Impossible de creer la base $re"; |
|
| 56 | + spip_log($re); |
|
| 57 | + return '<p>' . _T('avis_connexion_erreur_creer_base') . "</p><!--\n$re\n-->"; |
|
| 58 | + } |
|
| 59 | + } else { |
|
| 60 | + $re = "Le nom de la base doit correspondre a $re"; |
|
| 61 | + spip_log($re); |
|
| 62 | + |
|
| 63 | + return '<p>' . _T('avis_connexion_erreur_nom_base') . "</p><!--\n$re\n-->"; |
|
| 64 | + } |
|
| 65 | + } |
|
| 66 | + |
|
| 67 | + // on rejoue la connexion apres avoir teste si il faut lui indiquer |
|
| 68 | + // un sql_mode |
|
| 69 | + install_mode_appel($server_db, false); |
|
| 70 | + $GLOBALS['connexions'][$server_db] |
|
| 71 | + = spip_connect_db($adresse_db, $port, $login_db, $pass_db, $sel_db, $server_db); |
|
| 72 | + |
|
| 73 | + $GLOBALS['connexions'][$server_db][$GLOBALS['spip_sql_version']] |
|
| 74 | + = $GLOBALS['spip_' . $server_db . '_functions_' . $GLOBALS['spip_sql_version']]; |
|
| 75 | + |
|
| 76 | + // Completer le tableau decrivant la connexion |
|
| 77 | + |
|
| 78 | + $GLOBALS['connexions'][$server_db]['prefixe'] = $table_prefix; |
|
| 79 | + $GLOBALS['connexions'][$server_db]['db'] = $sel_db; |
|
| 80 | + |
|
| 81 | + $old = sql_showbase($table_prefix . '_meta', $server_db); |
|
| 82 | + if ($old) { |
|
| 83 | + $old = sql_fetch($old, $server_db); |
|
| 84 | + } |
|
| 85 | + if (!$old) { |
|
| 86 | + // Si possible, demander au serveur d'envoyer les textes |
|
| 87 | + // dans le codage std de SPIP, |
|
| 88 | + $charset = sql_get_charset(_DEFAULT_CHARSET, $server_db); |
|
| 89 | + |
|
| 90 | + if ($charset) { |
|
| 91 | + sql_set_charset($charset['charset'], $server_db); |
|
| 92 | + $GLOBALS['meta']['charset_sql_base'] = |
|
| 93 | + $charset['charset']; |
|
| 94 | + $GLOBALS['meta']['charset_collation_sql_base'] = |
|
| 95 | + $charset['collation']; |
|
| 96 | + $GLOBALS['meta']['charset_sql_connexion'] = |
|
| 97 | + $charset['charset']; |
|
| 98 | + $charsetbase = $charset['charset']; |
|
| 99 | + } else { |
|
| 100 | + spip_log(_DEFAULT_CHARSET . ' inconnu du serveur SQL'); |
|
| 101 | + $charsetbase = 'standard'; |
|
| 102 | + } |
|
| 103 | + spip_log("Creation des tables. Codage $charsetbase"); |
|
| 104 | + creer_base($server_db); // AT LAST |
|
| 105 | + // memoriser avec quel charset on l'a creee |
|
| 106 | + |
|
| 107 | + if ($charset) { |
|
| 108 | + $t = [ |
|
| 109 | + 'nom' => 'charset_sql_base', |
|
| 110 | + 'valeur' => $charset['charset'], |
|
| 111 | + 'impt' => 'non' |
|
| 112 | + ]; |
|
| 113 | + @sql_insertq('spip_meta', $t, [], $server_db); |
|
| 114 | + $t['nom'] = 'charset_collation_sql_base'; |
|
| 115 | + $t['valeur'] = $charset['collation']; |
|
| 116 | + @sql_insertq('spip_meta', $t, [], $server_db); |
|
| 117 | + $t['nom'] = 'charset_sql_connexion'; |
|
| 118 | + $t['valeur'] = $charset['charset']; |
|
| 119 | + @sql_insertq('spip_meta', $t, [], $server_db); |
|
| 120 | + } |
|
| 121 | + $t = [ |
|
| 122 | + 'nom' => 'version_installee', |
|
| 123 | + 'valeur' => $GLOBALS['spip_version_base'], |
|
| 124 | + 'impt' => 'non' |
|
| 125 | + ]; |
|
| 126 | + @sql_insertq('spip_meta', $t, [], $server_db); |
|
| 127 | + $t['nom'] = 'nouvelle_install'; |
|
| 128 | + $t['valeur'] = 1; |
|
| 129 | + @sql_insertq('spip_meta', $t, [], $server_db); |
|
| 130 | + // positionner la langue par defaut du site si un cookie de lang a ete mis |
|
| 131 | + if (isset($_COOKIE['spip_lang_ecrire'])) { |
|
| 132 | + @sql_insertq( |
|
| 133 | + 'spip_meta', |
|
| 134 | + ['nom' => 'langue_site', 'valeur' => $_COOKIE['spip_lang_ecrire']], |
|
| 135 | + [], |
|
| 136 | + $server_db |
|
| 137 | + ); |
|
| 138 | + } |
|
| 139 | + } else { |
|
| 140 | + // pour recreer les tables disparues au besoin |
|
| 141 | + spip_log('Table des Meta deja la. Verification des autres.'); |
|
| 142 | + creer_base($server_db); |
|
| 143 | + $fupdateq = sql_serveur('updateq', $server_db); |
|
| 144 | + |
|
| 145 | + $r = $fquery("SELECT valeur FROM spip_meta WHERE nom='version_installee'", $server_db); |
|
| 146 | + |
|
| 147 | + if ($r) { |
|
| 148 | + $r = sql_fetch($r, $server_db); |
|
| 149 | + } |
|
| 150 | + $version_installee = !$r ? 0 : (double)$r['valeur']; |
|
| 151 | + if (!$version_installee or ($GLOBALS['spip_version_base'] < $version_installee)) { |
|
| 152 | + $fupdateq( |
|
| 153 | + 'spip_meta', |
|
| 154 | + ['valeur' => $GLOBALS['spip_version_base'], 'impt' => 'non'], |
|
| 155 | + "nom='version_installee'", |
|
| 156 | + '', |
|
| 157 | + $server_db |
|
| 158 | + ); |
|
| 159 | + spip_log('nouvelle version installee: ' . $GLOBALS['spip_version_base']); |
|
| 160 | + } |
|
| 161 | + // eliminer la derniere operation d'admin mal terminee |
|
| 162 | + // notamment la mise a jour |
|
| 163 | + @$fquery("DELETE FROM spip_meta WHERE nom='import_all' OR nom='admin'", $server_db); |
|
| 164 | + } |
|
| 165 | + |
|
| 166 | + // recuperer le charset de la connexion dans les meta |
|
| 167 | + $charset = ''; |
|
| 168 | + $r = $fquery("SELECT valeur FROM spip_meta WHERE nom='charset_sql_connexion'", $server_db); |
|
| 169 | + if ($r) { |
|
| 170 | + $r = sql_fetch($r, $server_db); |
|
| 171 | + } |
|
| 172 | + if ($r) { |
|
| 173 | + $charset = $r['valeur']; |
|
| 174 | + } |
|
| 175 | + |
|
| 176 | + $ligne_rappel = install_mode_appel($server_db); |
|
| 177 | + |
|
| 178 | + $result_ok = @$fquery('SELECT COUNT(*) FROM spip_meta', $server_db); |
|
| 179 | + if (!$result_ok) { |
|
| 180 | + return "<!--\nvielle = $old rappel= $ligne_rappel\n-->"; |
|
| 181 | + } |
|
| 182 | + |
|
| 183 | + if ($chmod_db) { |
|
| 184 | + install_fichier_connexion( |
|
| 185 | + _FILE_CHMOD_TMP, |
|
| 186 | + "if (!defined('_SPIP_CHMOD')) define('_SPIP_CHMOD', " . sprintf('0%3o', $chmod_db) . ");\n" |
|
| 187 | + ); |
|
| 188 | + } |
|
| 189 | + |
|
| 190 | + // si ce fichier existe a cette etape c'est qu'il provient |
|
| 191 | + // d'une installation qui ne l'a pas cree correctement. |
|
| 192 | + // Le supprimer pour que _FILE_CONNECT_TMP prime. |
|
| 193 | + |
|
| 194 | + if (_FILE_CONNECT and file_exists(_FILE_CONNECT)) { |
|
| 195 | + spip_unlink(_FILE_CONNECT); |
|
| 196 | + } |
|
| 197 | + |
|
| 198 | + install_fichier_connexion( |
|
| 199 | + _FILE_CONNECT_TMP, |
|
| 200 | + $ligne_rappel |
|
| 201 | + . install_connexion( |
|
| 202 | + $adresse_db, |
|
| 203 | + $port, |
|
| 204 | + $login_db, |
|
| 205 | + $pass_db, |
|
| 206 | + $sel_db, |
|
| 207 | + $server_db, |
|
| 208 | + $table_prefix, |
|
| 209 | + '', |
|
| 210 | + $charset |
|
| 211 | + ) |
|
| 212 | + ); |
|
| 213 | + |
|
| 214 | + return ''; |
|
| 215 | 215 | } |
| 216 | 216 | |
| 217 | 217 | /** |
@@ -226,166 +226,166 @@ discard block |
||
| 226 | 226 | * @return string Le préfixe corrigé |
| 227 | 227 | */ |
| 228 | 228 | function preparer_prefixe_tables($prefixe) { |
| 229 | - return trim(preg_replace(',^[0-9]+,', '', preg_replace(',[^a-z0-9],', '', strtolower($prefixe)))); |
|
| 229 | + return trim(preg_replace(',^[0-9]+,', '', preg_replace(',[^a-z0-9],', '', strtolower($prefixe)))); |
|
| 230 | 230 | } |
| 231 | 231 | |
| 232 | 232 | function install_propose_ldap() { |
| 233 | - return generer_form_ecrire('install', ( |
|
| 234 | - fieldset( |
|
| 235 | - _T('info_authentification_externe'), |
|
| 236 | - [ |
|
| 237 | - 'etape' => [ |
|
| 238 | - 'label' => _T('texte_annuaire_ldap_1'), |
|
| 239 | - 'valeur' => 'ldap1', |
|
| 240 | - 'hidden' => true |
|
| 241 | - ] |
|
| 242 | - ], |
|
| 243 | - bouton_suivant(_T('bouton_acces_ldap')) |
|
| 244 | - ))); |
|
| 233 | + return generer_form_ecrire('install', ( |
|
| 234 | + fieldset( |
|
| 235 | + _T('info_authentification_externe'), |
|
| 236 | + [ |
|
| 237 | + 'etape' => [ |
|
| 238 | + 'label' => _T('texte_annuaire_ldap_1'), |
|
| 239 | + 'valeur' => 'ldap1', |
|
| 240 | + 'hidden' => true |
|
| 241 | + ] |
|
| 242 | + ], |
|
| 243 | + bouton_suivant(_T('bouton_acces_ldap')) |
|
| 244 | + ))); |
|
| 245 | 245 | } |
| 246 | 246 | |
| 247 | 247 | |
| 248 | 248 | function install_premier_auteur($email, $login, $nom, $pass, $hidden, $auteur_obligatoire) { |
| 249 | - return info_progression_etape(3, 'etape_', 'install/') . |
|
| 250 | - info_etape( |
|
| 251 | - _T('info_informations_personnelles'), |
|
| 252 | - '<b>' . _T('texte_informations_personnelles_1') . '</b>' . |
|
| 253 | - aider('install5', true) . |
|
| 254 | - '<p>' . |
|
| 255 | - ($auteur_obligatoire ? |
|
| 256 | - '' |
|
| 257 | - : |
|
| 258 | - _T('texte_informations_personnelles_2') . ' ' . _T('info_laisser_champs_vides') |
|
| 259 | - ) |
|
| 260 | - ) |
|
| 261 | - . generer_form_ecrire('install', ( |
|
| 262 | - "\n<input type='hidden' name='etape' value='3b' />" |
|
| 263 | - . $hidden |
|
| 264 | - . fieldset( |
|
| 265 | - _T('info_identification_publique'), |
|
| 266 | - [ |
|
| 267 | - 'nom' => [ |
|
| 268 | - 'label' => '<b>' . _T('entree_signature') . "</b><br />\n" . _T('entree_nom_pseudo_1') . "\n", |
|
| 269 | - 'valeur' => $nom, |
|
| 270 | - 'required' => $auteur_obligatoire, |
|
| 271 | - ], |
|
| 272 | - 'email' => [ |
|
| 273 | - 'label' => '<b>' . _T('entree_adresse_email') . "</b>\n", |
|
| 274 | - 'valeur' => $email, |
|
| 275 | - ] |
|
| 276 | - ] |
|
| 277 | - ) |
|
| 278 | - |
|
| 279 | - . fieldset( |
|
| 280 | - _T('entree_identifiants_connexion'), |
|
| 281 | - [ |
|
| 282 | - 'login' => [ |
|
| 283 | - 'label' => '<b>' . _T('entree_login') . "</b><br />\n" . _T( |
|
| 284 | - 'info_login_trop_court_car_pluriel', |
|
| 285 | - ['nb' => _LOGIN_TROP_COURT] |
|
| 286 | - ) . "\n", |
|
| 287 | - 'valeur' => $login, |
|
| 288 | - 'required' => $auteur_obligatoire, |
|
| 289 | - ], |
|
| 290 | - 'pass' => [ |
|
| 291 | - 'label' => '<b>' . _T('entree_mot_passe') . "</b><br />\n" . _T( |
|
| 292 | - 'info_passe_trop_court_car_pluriel', |
|
| 293 | - ['nb' => _PASS_LONGUEUR_MINI] |
|
| 294 | - ) . "\n", |
|
| 295 | - 'valeur' => $pass, |
|
| 296 | - 'required' => $auteur_obligatoire, |
|
| 297 | - ], |
|
| 298 | - 'pass_verif' => [ |
|
| 299 | - 'label' => '<b>' . _T('info_confirmer_passe') . "</b><br />\n", |
|
| 300 | - 'valeur' => $pass, |
|
| 301 | - 'required' => $auteur_obligatoire, |
|
| 302 | - ] |
|
| 303 | - ] |
|
| 304 | - ) |
|
| 305 | - . bouton_suivant())); |
|
| 249 | + return info_progression_etape(3, 'etape_', 'install/') . |
|
| 250 | + info_etape( |
|
| 251 | + _T('info_informations_personnelles'), |
|
| 252 | + '<b>' . _T('texte_informations_personnelles_1') . '</b>' . |
|
| 253 | + aider('install5', true) . |
|
| 254 | + '<p>' . |
|
| 255 | + ($auteur_obligatoire ? |
|
| 256 | + '' |
|
| 257 | + : |
|
| 258 | + _T('texte_informations_personnelles_2') . ' ' . _T('info_laisser_champs_vides') |
|
| 259 | + ) |
|
| 260 | + ) |
|
| 261 | + . generer_form_ecrire('install', ( |
|
| 262 | + "\n<input type='hidden' name='etape' value='3b' />" |
|
| 263 | + . $hidden |
|
| 264 | + . fieldset( |
|
| 265 | + _T('info_identification_publique'), |
|
| 266 | + [ |
|
| 267 | + 'nom' => [ |
|
| 268 | + 'label' => '<b>' . _T('entree_signature') . "</b><br />\n" . _T('entree_nom_pseudo_1') . "\n", |
|
| 269 | + 'valeur' => $nom, |
|
| 270 | + 'required' => $auteur_obligatoire, |
|
| 271 | + ], |
|
| 272 | + 'email' => [ |
|
| 273 | + 'label' => '<b>' . _T('entree_adresse_email') . "</b>\n", |
|
| 274 | + 'valeur' => $email, |
|
| 275 | + ] |
|
| 276 | + ] |
|
| 277 | + ) |
|
| 278 | + |
|
| 279 | + . fieldset( |
|
| 280 | + _T('entree_identifiants_connexion'), |
|
| 281 | + [ |
|
| 282 | + 'login' => [ |
|
| 283 | + 'label' => '<b>' . _T('entree_login') . "</b><br />\n" . _T( |
|
| 284 | + 'info_login_trop_court_car_pluriel', |
|
| 285 | + ['nb' => _LOGIN_TROP_COURT] |
|
| 286 | + ) . "\n", |
|
| 287 | + 'valeur' => $login, |
|
| 288 | + 'required' => $auteur_obligatoire, |
|
| 289 | + ], |
|
| 290 | + 'pass' => [ |
|
| 291 | + 'label' => '<b>' . _T('entree_mot_passe') . "</b><br />\n" . _T( |
|
| 292 | + 'info_passe_trop_court_car_pluriel', |
|
| 293 | + ['nb' => _PASS_LONGUEUR_MINI] |
|
| 294 | + ) . "\n", |
|
| 295 | + 'valeur' => $pass, |
|
| 296 | + 'required' => $auteur_obligatoire, |
|
| 297 | + ], |
|
| 298 | + 'pass_verif' => [ |
|
| 299 | + 'label' => '<b>' . _T('info_confirmer_passe') . "</b><br />\n", |
|
| 300 | + 'valeur' => $pass, |
|
| 301 | + 'required' => $auteur_obligatoire, |
|
| 302 | + ] |
|
| 303 | + ] |
|
| 304 | + ) |
|
| 305 | + . bouton_suivant())); |
|
| 306 | 306 | } |
| 307 | 307 | |
| 308 | 308 | function install_etape_3_dist() { |
| 309 | - $ldap_present = _request('ldap_present'); |
|
| 310 | - |
|
| 311 | - if (!$ldap_present) { |
|
| 312 | - $adresse_db = defined('_INSTALL_HOST_DB') |
|
| 313 | - ? _INSTALL_HOST_DB |
|
| 314 | - : _request('adresse_db'); |
|
| 315 | - |
|
| 316 | - $login_db = defined('_INSTALL_USER_DB') |
|
| 317 | - ? _INSTALL_USER_DB |
|
| 318 | - : _request('login_db'); |
|
| 319 | - |
|
| 320 | - $pass_db = defined('_INSTALL_PASS_DB') |
|
| 321 | - ? _INSTALL_PASS_DB |
|
| 322 | - : _request('pass_db'); |
|
| 323 | - |
|
| 324 | - $server_db = defined('_INSTALL_SERVER_DB') |
|
| 325 | - ? _INSTALL_SERVER_DB |
|
| 326 | - : _request('server_db'); |
|
| 327 | - |
|
| 328 | - $chmod_db = defined('_SPIP_CHMOD') |
|
| 329 | - ? _SPIP_CHMOD |
|
| 330 | - : _request('chmod'); |
|
| 331 | - |
|
| 332 | - $choix_db = defined('_INSTALL_NAME_DB') |
|
| 333 | - ? _INSTALL_NAME_DB |
|
| 334 | - : _request('choix_db'); |
|
| 335 | - |
|
| 336 | - $sel_db = ($choix_db == 'new_spip') |
|
| 337 | - ? _request('table_new') : $choix_db; |
|
| 338 | - |
|
| 339 | - $res = install_bases($adresse_db, $login_db, $pass_db, $server_db, $choix_db, $sel_db, $chmod_db); |
|
| 340 | - |
|
| 341 | - if ($res) { |
|
| 342 | - $res = info_progression_etape(2, 'etape_', 'install/', true) |
|
| 343 | - . "<div class='error'><h3>" . _T('avis_operation_echec') . '</h3>' |
|
| 344 | - . $res |
|
| 345 | - . '<p>' . _T('texte_operation_echec') . '</p>' |
|
| 346 | - . '</div>'; |
|
| 347 | - } |
|
| 348 | - } else { |
|
| 349 | - $res = ''; |
|
| 350 | - [$adresse_db, $login_db, $pass_db, $sel_db, $server_db] = analyse_fichier_connection(_FILE_CONNECT_TMP); |
|
| 351 | - $GLOBALS['connexions'][$server_db] = spip_connect_db($adresse_db, $sel_db, $login_db, $pass_db, $sel_db, $server_db); |
|
| 352 | - } |
|
| 353 | - |
|
| 354 | - if (!$res) { |
|
| 355 | - if (file_exists(_FILE_CONNECT_TMP)) { |
|
| 356 | - include(_FILE_CONNECT_TMP); |
|
| 357 | - } else { |
|
| 358 | - redirige_url_ecrire('install'); |
|
| 359 | - } |
|
| 360 | - |
|
| 361 | - if (file_exists(_FILE_CHMOD_TMP)) { |
|
| 362 | - include(_FILE_CHMOD_TMP); |
|
| 363 | - } else { |
|
| 364 | - redirige_url_ecrire('install'); |
|
| 365 | - } |
|
| 366 | - |
|
| 367 | - $hidden = predef_ou_cache($adresse_db, $login_db, $pass_db, $server_db) |
|
| 368 | - . (defined('_INSTALL_NAME_DB') ? '' |
|
| 369 | - : "\n<input type='hidden' name='sel_db' value=\"" . spip_htmlspecialchars($sel_db) . '" />'); |
|
| 370 | - |
|
| 371 | - $auteur_obligatoire = ($ldap_present ? 0 : !sql_countsel('spip_auteurs', '', '', '', $server_db)); |
|
| 372 | - |
|
| 373 | - $res = "<div class='success'><b>" |
|
| 374 | - . _T('info_base_installee') |
|
| 375 | - . '</b></div>' |
|
| 376 | - . install_premier_auteur( |
|
| 377 | - _request('email'), |
|
| 378 | - _request('login'), |
|
| 379 | - _request('nom'), |
|
| 380 | - _request('pass'), |
|
| 381 | - $hidden, |
|
| 382 | - $auteur_obligatoire |
|
| 383 | - ) |
|
| 384 | - . (($ldap_present or !function_exists('ldap_connect')) |
|
| 385 | - ? '' : install_propose_ldap()); |
|
| 386 | - } |
|
| 387 | - |
|
| 388 | - echo install_debut_html(); |
|
| 389 | - echo $res; |
|
| 390 | - echo install_fin_html(); |
|
| 309 | + $ldap_present = _request('ldap_present'); |
|
| 310 | + |
|
| 311 | + if (!$ldap_present) { |
|
| 312 | + $adresse_db = defined('_INSTALL_HOST_DB') |
|
| 313 | + ? _INSTALL_HOST_DB |
|
| 314 | + : _request('adresse_db'); |
|
| 315 | + |
|
| 316 | + $login_db = defined('_INSTALL_USER_DB') |
|
| 317 | + ? _INSTALL_USER_DB |
|
| 318 | + : _request('login_db'); |
|
| 319 | + |
|
| 320 | + $pass_db = defined('_INSTALL_PASS_DB') |
|
| 321 | + ? _INSTALL_PASS_DB |
|
| 322 | + : _request('pass_db'); |
|
| 323 | + |
|
| 324 | + $server_db = defined('_INSTALL_SERVER_DB') |
|
| 325 | + ? _INSTALL_SERVER_DB |
|
| 326 | + : _request('server_db'); |
|
| 327 | + |
|
| 328 | + $chmod_db = defined('_SPIP_CHMOD') |
|
| 329 | + ? _SPIP_CHMOD |
|
| 330 | + : _request('chmod'); |
|
| 331 | + |
|
| 332 | + $choix_db = defined('_INSTALL_NAME_DB') |
|
| 333 | + ? _INSTALL_NAME_DB |
|
| 334 | + : _request('choix_db'); |
|
| 335 | + |
|
| 336 | + $sel_db = ($choix_db == 'new_spip') |
|
| 337 | + ? _request('table_new') : $choix_db; |
|
| 338 | + |
|
| 339 | + $res = install_bases($adresse_db, $login_db, $pass_db, $server_db, $choix_db, $sel_db, $chmod_db); |
|
| 340 | + |
|
| 341 | + if ($res) { |
|
| 342 | + $res = info_progression_etape(2, 'etape_', 'install/', true) |
|
| 343 | + . "<div class='error'><h3>" . _T('avis_operation_echec') . '</h3>' |
|
| 344 | + . $res |
|
| 345 | + . '<p>' . _T('texte_operation_echec') . '</p>' |
|
| 346 | + . '</div>'; |
|
| 347 | + } |
|
| 348 | + } else { |
|
| 349 | + $res = ''; |
|
| 350 | + [$adresse_db, $login_db, $pass_db, $sel_db, $server_db] = analyse_fichier_connection(_FILE_CONNECT_TMP); |
|
| 351 | + $GLOBALS['connexions'][$server_db] = spip_connect_db($adresse_db, $sel_db, $login_db, $pass_db, $sel_db, $server_db); |
|
| 352 | + } |
|
| 353 | + |
|
| 354 | + if (!$res) { |
|
| 355 | + if (file_exists(_FILE_CONNECT_TMP)) { |
|
| 356 | + include(_FILE_CONNECT_TMP); |
|
| 357 | + } else { |
|
| 358 | + redirige_url_ecrire('install'); |
|
| 359 | + } |
|
| 360 | + |
|
| 361 | + if (file_exists(_FILE_CHMOD_TMP)) { |
|
| 362 | + include(_FILE_CHMOD_TMP); |
|
| 363 | + } else { |
|
| 364 | + redirige_url_ecrire('install'); |
|
| 365 | + } |
|
| 366 | + |
|
| 367 | + $hidden = predef_ou_cache($adresse_db, $login_db, $pass_db, $server_db) |
|
| 368 | + . (defined('_INSTALL_NAME_DB') ? '' |
|
| 369 | + : "\n<input type='hidden' name='sel_db' value=\"" . spip_htmlspecialchars($sel_db) . '" />'); |
|
| 370 | + |
|
| 371 | + $auteur_obligatoire = ($ldap_present ? 0 : !sql_countsel('spip_auteurs', '', '', '', $server_db)); |
|
| 372 | + |
|
| 373 | + $res = "<div class='success'><b>" |
|
| 374 | + . _T('info_base_installee') |
|
| 375 | + . '</b></div>' |
|
| 376 | + . install_premier_auteur( |
|
| 377 | + _request('email'), |
|
| 378 | + _request('login'), |
|
| 379 | + _request('nom'), |
|
| 380 | + _request('pass'), |
|
| 381 | + $hidden, |
|
| 382 | + $auteur_obligatoire |
|
| 383 | + ) |
|
| 384 | + . (($ldap_present or !function_exists('ldap_connect')) |
|
| 385 | + ? '' : install_propose_ldap()); |
|
| 386 | + } |
|
| 387 | + |
|
| 388 | + echo install_debut_html(); |
|
| 389 | + echo $res; |
|
| 390 | + echo install_fin_html(); |
|
| 391 | 391 | } |
@@ -44,7 +44,7 @@ discard block |
||
| 44 | 44 | = spip_connect_db($adresse_db, $port, $login_db, $pass_db, '', $server_db); |
| 45 | 45 | |
| 46 | 46 | $GLOBALS['connexions'][$server_db][$GLOBALS['spip_sql_version']] |
| 47 | - = $GLOBALS['spip_' . $server_db . '_functions_' . $GLOBALS['spip_sql_version']]; |
|
| 47 | + = $GLOBALS['spip_'.$server_db.'_functions_'.$GLOBALS['spip_sql_version']]; |
|
| 48 | 48 | |
| 49 | 49 | $fquery = sql_serveur('query', $server_db); |
| 50 | 50 | if ($choix_db == 'new_spip') { |
@@ -54,13 +54,13 @@ discard block |
||
| 54 | 54 | if (!$ok) { |
| 55 | 55 | $re = "Impossible de creer la base $re"; |
| 56 | 56 | spip_log($re); |
| 57 | - return '<p>' . _T('avis_connexion_erreur_creer_base') . "</p><!--\n$re\n-->"; |
|
| 57 | + return '<p>'._T('avis_connexion_erreur_creer_base')."</p><!--\n$re\n-->"; |
|
| 58 | 58 | } |
| 59 | 59 | } else { |
| 60 | 60 | $re = "Le nom de la base doit correspondre a $re"; |
| 61 | 61 | spip_log($re); |
| 62 | 62 | |
| 63 | - return '<p>' . _T('avis_connexion_erreur_nom_base') . "</p><!--\n$re\n-->"; |
|
| 63 | + return '<p>'._T('avis_connexion_erreur_nom_base')."</p><!--\n$re\n-->"; |
|
| 64 | 64 | } |
| 65 | 65 | } |
| 66 | 66 | |
@@ -71,14 +71,14 @@ discard block |
||
| 71 | 71 | = spip_connect_db($adresse_db, $port, $login_db, $pass_db, $sel_db, $server_db); |
| 72 | 72 | |
| 73 | 73 | $GLOBALS['connexions'][$server_db][$GLOBALS['spip_sql_version']] |
| 74 | - = $GLOBALS['spip_' . $server_db . '_functions_' . $GLOBALS['spip_sql_version']]; |
|
| 74 | + = $GLOBALS['spip_'.$server_db.'_functions_'.$GLOBALS['spip_sql_version']]; |
|
| 75 | 75 | |
| 76 | 76 | // Completer le tableau decrivant la connexion |
| 77 | 77 | |
| 78 | 78 | $GLOBALS['connexions'][$server_db]['prefixe'] = $table_prefix; |
| 79 | 79 | $GLOBALS['connexions'][$server_db]['db'] = $sel_db; |
| 80 | 80 | |
| 81 | - $old = sql_showbase($table_prefix . '_meta', $server_db); |
|
| 81 | + $old = sql_showbase($table_prefix.'_meta', $server_db); |
|
| 82 | 82 | if ($old) { |
| 83 | 83 | $old = sql_fetch($old, $server_db); |
| 84 | 84 | } |
@@ -97,7 +97,7 @@ discard block |
||
| 97 | 97 | $charset['charset']; |
| 98 | 98 | $charsetbase = $charset['charset']; |
| 99 | 99 | } else { |
| 100 | - spip_log(_DEFAULT_CHARSET . ' inconnu du serveur SQL'); |
|
| 100 | + spip_log(_DEFAULT_CHARSET.' inconnu du serveur SQL'); |
|
| 101 | 101 | $charsetbase = 'standard'; |
| 102 | 102 | } |
| 103 | 103 | spip_log("Creation des tables. Codage $charsetbase"); |
@@ -147,7 +147,7 @@ discard block |
||
| 147 | 147 | if ($r) { |
| 148 | 148 | $r = sql_fetch($r, $server_db); |
| 149 | 149 | } |
| 150 | - $version_installee = !$r ? 0 : (double)$r['valeur']; |
|
| 150 | + $version_installee = !$r ? 0 : (double) $r['valeur']; |
|
| 151 | 151 | if (!$version_installee or ($GLOBALS['spip_version_base'] < $version_installee)) { |
| 152 | 152 | $fupdateq( |
| 153 | 153 | 'spip_meta', |
@@ -156,7 +156,7 @@ discard block |
||
| 156 | 156 | '', |
| 157 | 157 | $server_db |
| 158 | 158 | ); |
| 159 | - spip_log('nouvelle version installee: ' . $GLOBALS['spip_version_base']); |
|
| 159 | + spip_log('nouvelle version installee: '.$GLOBALS['spip_version_base']); |
|
| 160 | 160 | } |
| 161 | 161 | // eliminer la derniere operation d'admin mal terminee |
| 162 | 162 | // notamment la mise a jour |
@@ -183,7 +183,7 @@ discard block |
||
| 183 | 183 | if ($chmod_db) { |
| 184 | 184 | install_fichier_connexion( |
| 185 | 185 | _FILE_CHMOD_TMP, |
| 186 | - "if (!defined('_SPIP_CHMOD')) define('_SPIP_CHMOD', " . sprintf('0%3o', $chmod_db) . ");\n" |
|
| 186 | + "if (!defined('_SPIP_CHMOD')) define('_SPIP_CHMOD', ".sprintf('0%3o', $chmod_db).");\n" |
|
| 187 | 187 | ); |
| 188 | 188 | } |
| 189 | 189 | |
@@ -246,16 +246,16 @@ discard block |
||
| 246 | 246 | |
| 247 | 247 | |
| 248 | 248 | function install_premier_auteur($email, $login, $nom, $pass, $hidden, $auteur_obligatoire) { |
| 249 | - return info_progression_etape(3, 'etape_', 'install/') . |
|
| 249 | + return info_progression_etape(3, 'etape_', 'install/'). |
|
| 250 | 250 | info_etape( |
| 251 | 251 | _T('info_informations_personnelles'), |
| 252 | - '<b>' . _T('texte_informations_personnelles_1') . '</b>' . |
|
| 253 | - aider('install5', true) . |
|
| 254 | - '<p>' . |
|
| 252 | + '<b>'._T('texte_informations_personnelles_1').'</b>'. |
|
| 253 | + aider('install5', true). |
|
| 254 | + '<p>'. |
|
| 255 | 255 | ($auteur_obligatoire ? |
| 256 | 256 | '' |
| 257 | 257 | : |
| 258 | - _T('texte_informations_personnelles_2') . ' ' . _T('info_laisser_champs_vides') |
|
| 258 | + _T('texte_informations_personnelles_2').' '._T('info_laisser_champs_vides') |
|
| 259 | 259 | ) |
| 260 | 260 | ) |
| 261 | 261 | . generer_form_ecrire('install', ( |
@@ -265,12 +265,12 @@ discard block |
||
| 265 | 265 | _T('info_identification_publique'), |
| 266 | 266 | [ |
| 267 | 267 | 'nom' => [ |
| 268 | - 'label' => '<b>' . _T('entree_signature') . "</b><br />\n" . _T('entree_nom_pseudo_1') . "\n", |
|
| 268 | + 'label' => '<b>'._T('entree_signature')."</b><br />\n"._T('entree_nom_pseudo_1')."\n", |
|
| 269 | 269 | 'valeur' => $nom, |
| 270 | 270 | 'required' => $auteur_obligatoire, |
| 271 | 271 | ], |
| 272 | 272 | 'email' => [ |
| 273 | - 'label' => '<b>' . _T('entree_adresse_email') . "</b>\n", |
|
| 273 | + 'label' => '<b>'._T('entree_adresse_email')."</b>\n", |
|
| 274 | 274 | 'valeur' => $email, |
| 275 | 275 | ] |
| 276 | 276 | ] |
@@ -280,23 +280,23 @@ discard block |
||
| 280 | 280 | _T('entree_identifiants_connexion'), |
| 281 | 281 | [ |
| 282 | 282 | 'login' => [ |
| 283 | - 'label' => '<b>' . _T('entree_login') . "</b><br />\n" . _T( |
|
| 283 | + 'label' => '<b>'._T('entree_login')."</b><br />\n"._T( |
|
| 284 | 284 | 'info_login_trop_court_car_pluriel', |
| 285 | 285 | ['nb' => _LOGIN_TROP_COURT] |
| 286 | - ) . "\n", |
|
| 286 | + )."\n", |
|
| 287 | 287 | 'valeur' => $login, |
| 288 | 288 | 'required' => $auteur_obligatoire, |
| 289 | 289 | ], |
| 290 | 290 | 'pass' => [ |
| 291 | - 'label' => '<b>' . _T('entree_mot_passe') . "</b><br />\n" . _T( |
|
| 291 | + 'label' => '<b>'._T('entree_mot_passe')."</b><br />\n"._T( |
|
| 292 | 292 | 'info_passe_trop_court_car_pluriel', |
| 293 | 293 | ['nb' => _PASS_LONGUEUR_MINI] |
| 294 | - ) . "\n", |
|
| 294 | + )."\n", |
|
| 295 | 295 | 'valeur' => $pass, |
| 296 | 296 | 'required' => $auteur_obligatoire, |
| 297 | 297 | ], |
| 298 | 298 | 'pass_verif' => [ |
| 299 | - 'label' => '<b>' . _T('info_confirmer_passe') . "</b><br />\n", |
|
| 299 | + 'label' => '<b>'._T('info_confirmer_passe')."</b><br />\n", |
|
| 300 | 300 | 'valeur' => $pass, |
| 301 | 301 | 'required' => $auteur_obligatoire, |
| 302 | 302 | ] |
@@ -340,9 +340,9 @@ discard block |
||
| 340 | 340 | |
| 341 | 341 | if ($res) { |
| 342 | 342 | $res = info_progression_etape(2, 'etape_', 'install/', true) |
| 343 | - . "<div class='error'><h3>" . _T('avis_operation_echec') . '</h3>' |
|
| 343 | + . "<div class='error'><h3>"._T('avis_operation_echec').'</h3>' |
|
| 344 | 344 | . $res |
| 345 | - . '<p>' . _T('texte_operation_echec') . '</p>' |
|
| 345 | + . '<p>'._T('texte_operation_echec').'</p>' |
|
| 346 | 346 | . '</div>'; |
| 347 | 347 | } |
| 348 | 348 | } else { |
@@ -366,7 +366,7 @@ discard block |
||
| 366 | 366 | |
| 367 | 367 | $hidden = predef_ou_cache($adresse_db, $login_db, $pass_db, $server_db) |
| 368 | 368 | . (defined('_INSTALL_NAME_DB') ? '' |
| 369 | - : "\n<input type='hidden' name='sel_db' value=\"" . spip_htmlspecialchars($sel_db) . '" />'); |
|
| 369 | + : "\n<input type='hidden' name='sel_db' value=\"".spip_htmlspecialchars($sel_db).'" />'); |
|
| 370 | 370 | |
| 371 | 371 | $auteur_obligatoire = ($ldap_present ? 0 : !sql_countsel('spip_auteurs', '', '', '', $server_db)); |
| 372 | 372 | |
@@ -45,10 +45,10 @@ discard block |
||
| 45 | 45 | } |
| 46 | 46 | |
| 47 | 47 | if ($query) { |
| 48 | - $url .= '?' . $query; |
|
| 48 | + $url .= '?'.$query; |
|
| 49 | 49 | } |
| 50 | 50 | |
| 51 | - return '/' . preg_replace(',^/,S', '', $url); |
|
| 51 | + return '/'.preg_replace(',^/,S', '', $url); |
|
| 52 | 52 | } |
| 53 | 53 | |
| 54 | 54 | |
@@ -78,7 +78,7 @@ discard block |
||
| 78 | 78 | if (preg_match(';^((?:[a-z]{3,33}:)?//.*?)(/.*)?$;iS', $lien, $r)) { |
| 79 | 79 | $r = array_pad($r, 3, ''); |
| 80 | 80 | |
| 81 | - return $r[1] . resolve_path($r[2]); |
|
| 81 | + return $r[1].resolve_path($r[2]); |
|
| 82 | 82 | } |
| 83 | 83 | |
| 84 | 84 | # L'url site spip est un lien absolu aussi |
@@ -99,13 +99,13 @@ discard block |
||
| 99 | 99 | } |
| 100 | 100 | switch (substr($lien, 0, 1)) { |
| 101 | 101 | case '/': |
| 102 | - return $debut . resolve_path($lien); |
|
| 102 | + return $debut.resolve_path($lien); |
|
| 103 | 103 | case '#': |
| 104 | - return $debut . resolve_path($dir . $mot . $get . $lien); |
|
| 104 | + return $debut.resolve_path($dir.$mot.$get.$lien); |
|
| 105 | 105 | case '': |
| 106 | - return $debut . resolve_path($dir . $mot . $get . $hash); |
|
| 106 | + return $debut.resolve_path($dir.$mot.$get.$hash); |
|
| 107 | 107 | default: |
| 108 | - return $debut . resolve_path($dir . $lien); |
|
| 108 | + return $debut.resolve_path($dir.$lien); |
|
| 109 | 109 | } |
| 110 | 110 | } |
| 111 | 111 | |
@@ -133,7 +133,7 @@ discard block |
||
| 133 | 133 | return ''; |
| 134 | 134 | } |
| 135 | 135 | if (!$base) { |
| 136 | - $base = url_de_base() . (_DIR_RACINE ? _DIR_RESTREINT_ABS : ''); |
|
| 136 | + $base = url_de_base().(_DIR_RACINE ? _DIR_RESTREINT_ABS : ''); |
|
| 137 | 137 | } |
| 138 | 138 | |
| 139 | 139 | return suivre_lien($base, $url); |
@@ -156,7 +156,7 @@ discard block |
||
| 156 | 156 | * @param array $protocoles_autorises |
| 157 | 157 | * @return bool |
| 158 | 158 | */ |
| 159 | -function protocole_verifier($url_absolue, $protocoles_autorises = ['http','https']) { |
|
| 159 | +function protocole_verifier($url_absolue, $protocoles_autorises = ['http', 'https']) { |
|
| 160 | 160 | |
| 161 | 161 | if (preg_match(';^([a-z]{3,7})://;i', $url_absolue, $m)) { |
| 162 | 162 | $protocole = $m[1]; |
@@ -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 | |
@@ -35,20 +35,20 @@ discard block |
||
| 35 | 35 | * @return string URL nettoyée |
| 36 | 36 | **/ |
| 37 | 37 | function resolve_path($url) { |
| 38 | - [$url, $query] = array_pad(explode('?', $url, 2), 2, null); |
|
| 39 | - while ( |
|
| 40 | - preg_match(',/\.?/,', $url, $regs) # supprime // et /./ |
|
| 41 | - or preg_match(',/[^/]*/\.\./,S', $url, $regs) # supprime /toto/../ |
|
| 42 | - or preg_match(',^/\.\./,S', $url, $regs) # supprime les /../ du haut |
|
| 43 | - ) { |
|
| 44 | - $url = str_replace($regs[0], '/', $url); |
|
| 45 | - } |
|
| 38 | + [$url, $query] = array_pad(explode('?', $url, 2), 2, null); |
|
| 39 | + while ( |
|
| 40 | + preg_match(',/\.?/,', $url, $regs) # supprime // et /./ |
|
| 41 | + or preg_match(',/[^/]*/\.\./,S', $url, $regs) # supprime /toto/../ |
|
| 42 | + or preg_match(',^/\.\./,S', $url, $regs) # supprime les /../ du haut |
|
| 43 | + ) { |
|
| 44 | + $url = str_replace($regs[0], '/', $url); |
|
| 45 | + } |
|
| 46 | 46 | |
| 47 | - if ($query) { |
|
| 48 | - $url .= '?' . $query; |
|
| 49 | - } |
|
| 47 | + if ($query) { |
|
| 48 | + $url .= '?' . $query; |
|
| 49 | + } |
|
| 50 | 50 | |
| 51 | - return '/' . preg_replace(',^/,S', '', $url); |
|
| 51 | + return '/' . preg_replace(',^/,S', '', $url); |
|
| 52 | 52 | } |
| 53 | 53 | |
| 54 | 54 | |
@@ -69,44 +69,44 @@ discard block |
||
| 69 | 69 | **/ |
| 70 | 70 | function suivre_lien($url, $lien) { |
| 71 | 71 | |
| 72 | - $mot = null; |
|
| 73 | - $get = null; |
|
| 74 | - $hash = null; |
|
| 75 | - if (preg_match(',^(mailto|javascript|data|tel|callto|file|ftp):,iS', $lien)) { |
|
| 76 | - return $lien; |
|
| 77 | - } |
|
| 78 | - if (preg_match(';^((?:[a-z]{3,33}:)?//.*?)(/.*)?$;iS', $lien, $r)) { |
|
| 79 | - $r = array_pad($r, 3, ''); |
|
| 72 | + $mot = null; |
|
| 73 | + $get = null; |
|
| 74 | + $hash = null; |
|
| 75 | + if (preg_match(',^(mailto|javascript|data|tel|callto|file|ftp):,iS', $lien)) { |
|
| 76 | + return $lien; |
|
| 77 | + } |
|
| 78 | + if (preg_match(';^((?:[a-z]{3,33}:)?//.*?)(/.*)?$;iS', $lien, $r)) { |
|
| 79 | + $r = array_pad($r, 3, ''); |
|
| 80 | 80 | |
| 81 | - return $r[1] . resolve_path($r[2]); |
|
| 82 | - } |
|
| 81 | + return $r[1] . resolve_path($r[2]); |
|
| 82 | + } |
|
| 83 | 83 | |
| 84 | - # L'url site spip est un lien absolu aussi |
|
| 85 | - if (isset($GLOBALS['meta']['adresse_site']) and $lien == $GLOBALS['meta']['adresse_site']) { |
|
| 86 | - return $lien; |
|
| 87 | - } |
|
| 84 | + # L'url site spip est un lien absolu aussi |
|
| 85 | + if (isset($GLOBALS['meta']['adresse_site']) and $lien == $GLOBALS['meta']['adresse_site']) { |
|
| 86 | + return $lien; |
|
| 87 | + } |
|
| 88 | 88 | |
| 89 | - # lien relatif, il faut verifier l'url de base |
|
| 90 | - # commencer par virer la chaine de get de l'url de base |
|
| 91 | - $dir = '/'; |
|
| 92 | - $debut = ''; |
|
| 93 | - if (preg_match(';^((?:[a-z]{3,7}:)?//[^/]+)(/.*?/?)?([^/#?]*)([?][^#]*)?(#.*)?$;S', $url, $regs)) { |
|
| 94 | - $debut = $regs[1]; |
|
| 95 | - $dir = !strlen($regs[2]) ? '/' : $regs[2]; |
|
| 96 | - $mot = $regs[3]; |
|
| 97 | - $get = $regs[4] ?? ''; |
|
| 98 | - $hash = $regs[5] ?? ''; |
|
| 99 | - } |
|
| 100 | - switch (substr($lien, 0, 1)) { |
|
| 101 | - case '/': |
|
| 102 | - return $debut . resolve_path($lien); |
|
| 103 | - case '#': |
|
| 104 | - return $debut . resolve_path($dir . $mot . $get . $lien); |
|
| 105 | - case '': |
|
| 106 | - return $debut . resolve_path($dir . $mot . $get . $hash); |
|
| 107 | - default: |
|
| 108 | - return $debut . resolve_path($dir . $lien); |
|
| 109 | - } |
|
| 89 | + # lien relatif, il faut verifier l'url de base |
|
| 90 | + # commencer par virer la chaine de get de l'url de base |
|
| 91 | + $dir = '/'; |
|
| 92 | + $debut = ''; |
|
| 93 | + if (preg_match(';^((?:[a-z]{3,7}:)?//[^/]+)(/.*?/?)?([^/#?]*)([?][^#]*)?(#.*)?$;S', $url, $regs)) { |
|
| 94 | + $debut = $regs[1]; |
|
| 95 | + $dir = !strlen($regs[2]) ? '/' : $regs[2]; |
|
| 96 | + $mot = $regs[3]; |
|
| 97 | + $get = $regs[4] ?? ''; |
|
| 98 | + $hash = $regs[5] ?? ''; |
|
| 99 | + } |
|
| 100 | + switch (substr($lien, 0, 1)) { |
|
| 101 | + case '/': |
|
| 102 | + return $debut . resolve_path($lien); |
|
| 103 | + case '#': |
|
| 104 | + return $debut . resolve_path($dir . $mot . $get . $lien); |
|
| 105 | + case '': |
|
| 106 | + return $debut . resolve_path($dir . $mot . $get . $hash); |
|
| 107 | + default: |
|
| 108 | + return $debut . resolve_path($dir . $lien); |
|
| 109 | + } |
|
| 110 | 110 | } |
| 111 | 111 | |
| 112 | 112 | |
@@ -129,15 +129,15 @@ discard block |
||
| 129 | 129 | * @return string Texte ou URL (en absolus) |
| 130 | 130 | **/ |
| 131 | 131 | function url_absolue($url, $base = '') { |
| 132 | - $url = trim((string) $url); |
|
| 133 | - if (strlen($url = trim($url)) == 0) { |
|
| 134 | - return ''; |
|
| 135 | - } |
|
| 136 | - if (!$base) { |
|
| 137 | - $base = url_de_base() . (_DIR_RACINE ? _DIR_RESTREINT_ABS : ''); |
|
| 138 | - } |
|
| 132 | + $url = trim((string) $url); |
|
| 133 | + if (strlen($url = trim($url)) == 0) { |
|
| 134 | + return ''; |
|
| 135 | + } |
|
| 136 | + if (!$base) { |
|
| 137 | + $base = url_de_base() . (_DIR_RACINE ? _DIR_RESTREINT_ABS : ''); |
|
| 138 | + } |
|
| 139 | 139 | |
| 140 | - return suivre_lien($base, $url); |
|
| 140 | + return suivre_lien($base, $url); |
|
| 141 | 141 | } |
| 142 | 142 | |
| 143 | 143 | /** |
@@ -148,7 +148,7 @@ discard block |
||
| 148 | 148 | * @return string |
| 149 | 149 | */ |
| 150 | 150 | function protocole_implicite($url_absolue) { |
| 151 | - return preg_replace(';^[a-z]{3,7}://;i', '//', $url_absolue); |
|
| 151 | + return preg_replace(';^[a-z]{3,7}://;i', '//', $url_absolue); |
|
| 152 | 152 | } |
| 153 | 153 | |
| 154 | 154 | /** |
@@ -159,16 +159,16 @@ discard block |
||
| 159 | 159 | */ |
| 160 | 160 | function protocole_verifier($url_absolue, $protocoles_autorises = ['http','https']) { |
| 161 | 161 | |
| 162 | - if (preg_match(';^([a-z]{3,7})://;i', $url_absolue, $m)) { |
|
| 163 | - $protocole = $m[1]; |
|
| 164 | - if ( |
|
| 165 | - in_array($protocole, $protocoles_autorises) |
|
| 166 | - or in_array(strtolower($protocole), array_map('strtolower', $protocoles_autorises)) |
|
| 167 | - ) { |
|
| 168 | - return true; |
|
| 169 | - } |
|
| 170 | - } |
|
| 171 | - return false; |
|
| 162 | + if (preg_match(';^([a-z]{3,7})://;i', $url_absolue, $m)) { |
|
| 163 | + $protocole = $m[1]; |
|
| 164 | + if ( |
|
| 165 | + in_array($protocole, $protocoles_autorises) |
|
| 166 | + or in_array(strtolower($protocole), array_map('strtolower', $protocoles_autorises)) |
|
| 167 | + ) { |
|
| 168 | + return true; |
|
| 169 | + } |
|
| 170 | + } |
|
| 171 | + return false; |
|
| 172 | 172 | } |
| 173 | 173 | |
| 174 | 174 | /** |
@@ -185,27 +185,27 @@ discard block |
||
| 185 | 185 | * @return string Texte avec des URLs absolues |
| 186 | 186 | **/ |
| 187 | 187 | function liens_absolus($texte, $base = '') { |
| 188 | - if (preg_match_all(',(<(a|link|image|img|script)\s[^<>]*(href|src)=[^<>]*>),imsS', $texte, $liens, PREG_SET_ORDER)) { |
|
| 189 | - if (!function_exists('extraire_attribut')) { |
|
| 190 | - include_spip('inc/filtres'); |
|
| 191 | - } |
|
| 192 | - foreach ($liens as $lien) { |
|
| 193 | - foreach (['href', 'src'] as $attr) { |
|
| 194 | - $href = extraire_attribut($lien[0], $attr) ?? ''; |
|
| 195 | - if (strlen($href) > 0) { |
|
| 196 | - if (!preg_match(';^((?:[a-z]{3,7}:)?//);iS', $href)) { |
|
| 197 | - $abs = url_absolue($href, $base); |
|
| 198 | - if (rtrim($href, '/') !== rtrim($abs, '/') and !preg_match('/^#/', $href)) { |
|
| 199 | - $texte_lien = inserer_attribut($lien[0], $attr, $abs); |
|
| 200 | - $texte = str_replace($lien[0], $texte_lien, $texte); |
|
| 201 | - } |
|
| 202 | - } |
|
| 203 | - } |
|
| 204 | - } |
|
| 205 | - } |
|
| 206 | - } |
|
| 188 | + if (preg_match_all(',(<(a|link|image|img|script)\s[^<>]*(href|src)=[^<>]*>),imsS', $texte, $liens, PREG_SET_ORDER)) { |
|
| 189 | + if (!function_exists('extraire_attribut')) { |
|
| 190 | + include_spip('inc/filtres'); |
|
| 191 | + } |
|
| 192 | + foreach ($liens as $lien) { |
|
| 193 | + foreach (['href', 'src'] as $attr) { |
|
| 194 | + $href = extraire_attribut($lien[0], $attr) ?? ''; |
|
| 195 | + if (strlen($href) > 0) { |
|
| 196 | + if (!preg_match(';^((?:[a-z]{3,7}:)?//);iS', $href)) { |
|
| 197 | + $abs = url_absolue($href, $base); |
|
| 198 | + if (rtrim($href, '/') !== rtrim($abs, '/') and !preg_match('/^#/', $href)) { |
|
| 199 | + $texte_lien = inserer_attribut($lien[0], $attr, $abs); |
|
| 200 | + $texte = str_replace($lien[0], $texte_lien, $texte); |
|
| 201 | + } |
|
| 202 | + } |
|
| 203 | + } |
|
| 204 | + } |
|
| 205 | + } |
|
| 206 | + } |
|
| 207 | 207 | |
| 208 | - return $texte; |
|
| 208 | + return $texte; |
|
| 209 | 209 | } |
| 210 | 210 | |
| 211 | 211 | |
@@ -221,11 +221,11 @@ discard block |
||
| 221 | 221 | * @return string Texte ou URL (en absolus) |
| 222 | 222 | **/ |
| 223 | 223 | function abs_url($texte, $base = '') { |
| 224 | - if ($GLOBALS['mode_abs_url'] == 'url') { |
|
| 225 | - return url_absolue($texte, $base); |
|
| 226 | - } else { |
|
| 227 | - return liens_absolus($texte, $base); |
|
| 228 | - } |
|
| 224 | + if ($GLOBALS['mode_abs_url'] == 'url') { |
|
| 225 | + return url_absolue($texte, $base); |
|
| 226 | + } else { |
|
| 227 | + return liens_absolus($texte, $base); |
|
| 228 | + } |
|
| 229 | 229 | } |
| 230 | 230 | |
| 231 | 231 | /** |
@@ -238,11 +238,11 @@ discard block |
||
| 238 | 238 | * @return string |
| 239 | 239 | */ |
| 240 | 240 | function spip_htmlspecialchars($string, $flags = null, $encoding = 'UTF-8', $double_encode = true) { |
| 241 | - if (is_null($flags)) { |
|
| 242 | - $flags = ENT_COMPAT | ENT_HTML401; |
|
| 243 | - } |
|
| 241 | + if (is_null($flags)) { |
|
| 242 | + $flags = ENT_COMPAT | ENT_HTML401; |
|
| 243 | + } |
|
| 244 | 244 | |
| 245 | - return htmlspecialchars($string, $flags, $encoding, $double_encode); |
|
| 245 | + return htmlspecialchars($string, $flags, $encoding, $double_encode); |
|
| 246 | 246 | } |
| 247 | 247 | |
| 248 | 248 | /** |
@@ -255,9 +255,9 @@ discard block |
||
| 255 | 255 | * @return string |
| 256 | 256 | */ |
| 257 | 257 | function spip_htmlentities($string, $flags = null, $encoding = 'UTF-8', $double_encode = true) { |
| 258 | - if (is_null($flags)) { |
|
| 259 | - $flags = ENT_COMPAT | ENT_HTML401; |
|
| 260 | - } |
|
| 258 | + if (is_null($flags)) { |
|
| 259 | + $flags = ENT_COMPAT | ENT_HTML401; |
|
| 260 | + } |
|
| 261 | 261 | |
| 262 | - return htmlentities($string, $flags, $encoding, $double_encode); |
|
| 262 | + return htmlentities($string, $flags, $encoding, $double_encode); |
|
| 263 | 263 | } |
@@ -124,7 +124,7 @@ discard block |
||
| 124 | 124 | $select = true |
| 125 | 125 | ) { |
| 126 | 126 | if (!is_string($defaut)) { |
| 127 | - $defaut = '($Pile[0][\'' . strtolower($nom_champ) . '\'] ?? null)'; |
|
| 127 | + $defaut = '($Pile[0][\''.strtolower($nom_champ).'\'] ?? null)'; |
|
| 128 | 128 | } |
| 129 | 129 | |
| 130 | 130 | $idb_origine = $idb; |
@@ -157,7 +157,7 @@ discard block |
||
| 157 | 157 | } |
| 158 | 158 | // renseigner la boucle source de ce champ pour les traitements |
| 159 | 159 | $boucles[$idb_origine]->index_champ[$nom_champ_origine] = $idb; |
| 160 | - $champ = '$Pile[$SP' . ($i ? "-$i" : '') . '][\'' . $c . '\']'; |
|
| 160 | + $champ = '$Pile[$SP'.($i ? "-$i" : '').'][\''.$c.'\']'; |
|
| 161 | 161 | if (!$joker) { |
| 162 | 162 | return index_compose($conditionnel, $champ); |
| 163 | 163 | } |
@@ -198,7 +198,7 @@ discard block |
||
| 198 | 198 | function index_compose($conditionnel, $defaut) { |
| 199 | 199 | while ($c = array_pop($conditionnel)) { |
| 200 | 200 | // si on passe defaut = '', ne pas générer d'erreur de compilation. |
| 201 | - $defaut = "($c:(" . ($defaut ?: "''") . '))'; |
|
| 201 | + $defaut = "($c:(".($defaut ?: "''").'))'; |
|
| 202 | 202 | } |
| 203 | 203 | |
| 204 | 204 | return $defaut; |
@@ -245,7 +245,7 @@ discard block |
||
| 245 | 245 | if (!$r) { |
| 246 | 246 | $joker = false; // indiquer a l'appelant |
| 247 | 247 | # continuer pour chercher l'erreur suivante |
| 248 | - return ["'#" . $r . ':' . $nom_champ . "'", '']; |
|
| 248 | + return ["'#".$r.':'.$nom_champ."'", '']; |
|
| 249 | 249 | } |
| 250 | 250 | |
| 251 | 251 | $desc = $boucles[$idb]->show; |
@@ -287,7 +287,7 @@ discard block |
||
| 287 | 287 | if (preg_match('/^(.*)\.(.*)$/', $nom_champ, $r)) { |
| 288 | 288 | [, $_table, $_nom_champ] = $r; |
| 289 | 289 | if ($cle = trouver_jointure_champ($_nom_champ, $boucles[$idb], [$_table])) { |
| 290 | - $_alias = $cle . '_' . $_nom_champ; |
|
| 290 | + $_alias = $cle.'_'.$_nom_champ; |
|
| 291 | 291 | return index_exception( |
| 292 | 292 | $boucles[$idb], |
| 293 | 293 | $desc, |
@@ -367,8 +367,8 @@ discard block |
||
| 367 | 367 | $t = $index_exception_derogatoire($boucle, $desc, $nom_champ, $excep); |
| 368 | 368 | } |
| 369 | 369 | if ($t == null) { |
| 370 | - [$e, $x] = $excep; #PHP4 affecte de gauche a droite |
|
| 371 | - $excep = $x; #PHP5 de droite a gauche ! |
|
| 370 | + [$e, $x] = $excep; #PHP4 affecte de gauche a droite |
|
| 371 | + $excep = $x; #PHP5 de droite a gauche ! |
|
| 372 | 372 | $j = $trouver_table($e, $boucle->sql_serveur); |
| 373 | 373 | if (!$j) { |
| 374 | 374 | return ['', '']; |
@@ -380,7 +380,7 @@ discard block |
||
| 380 | 380 | $l = (preg_split('/\s*,\s*/', $k)); |
| 381 | 381 | $k = $desc['key']['PRIMARY KEY']; |
| 382 | 382 | if (!in_array($k, $l)) { |
| 383 | - spip_log("jointure impossible $e " . join(',', $l)); |
|
| 383 | + spip_log("jointure impossible $e ".join(',', $l)); |
|
| 384 | 384 | |
| 385 | 385 | return ['', '']; |
| 386 | 386 | } |
@@ -396,7 +396,7 @@ discard block |
||
| 396 | 396 | // demander a SQL de gerer le synonyme |
| 397 | 397 | // ca permet que excep soit dynamique (Cedric, 2/3/06) |
| 398 | 398 | if ($excep != $nom_champ) { |
| 399 | - $excep .= ' AS ' . $nom_champ; |
|
| 399 | + $excep .= ' AS '.$nom_champ; |
|
| 400 | 400 | } |
| 401 | 401 | |
| 402 | 402 | return ["$t.$excep", $nom_champ]; |
@@ -630,7 +630,7 @@ discard block |
||
| 630 | 630 | join(',', $collecte), |
| 631 | 631 | ($collecte ? $param : substr($param, 1)), # virer la virgule |
| 632 | 632 | memoriser_contexte_compil($p), |
| 633 | - (!$supp ? '' : (', ' . join(',', $supp))) |
|
| 633 | + (!$supp ? '' : (', '.join(',', $supp))) |
|
| 634 | 634 | ); |
| 635 | 635 | |
| 636 | 636 | $p->interdire_scripts = false; |
@@ -732,7 +732,7 @@ discard block |
||
| 732 | 732 | $nom = $p->id_boucle; |
| 733 | 733 | |
| 734 | 734 | if ($nom and trouver_nom_serveur_distant($p)) { |
| 735 | - spip_log($nom . ':' . $p->nom_champ . ' ' . _T('zbug_distant_interdit')); |
|
| 735 | + spip_log($nom.':'.$p->nom_champ.' '._T('zbug_distant_interdit')); |
|
| 736 | 736 | |
| 737 | 737 | return false; |
| 738 | 738 | } |
@@ -817,7 +817,7 @@ discard block |
||
| 817 | 817 | (strpos($ps, 'typo') !== false) |
| 818 | 818 | ) |
| 819 | 819 | ) { |
| 820 | - $ps = 'traiter_doublons_documents($doublons, ' . $ps . ')'; |
|
| 820 | + $ps = 'traiter_doublons_documents($doublons, '.$ps.')'; |
|
| 821 | 821 | } |
| 822 | 822 | |
| 823 | 823 | // La protection des champs par |safehtml est assuree par les extensions |
@@ -935,7 +935,7 @@ discard block |
||
| 935 | 935 | function compose_filtres_args($p, $args, $sep) { |
| 936 | 936 | $arglist = ''; |
| 937 | 937 | foreach ($args as $arg) { |
| 938 | - $arglist .= $sep . |
|
| 938 | + $arglist .= $sep. |
|
| 939 | 939 | calculer_liste($arg, $p->descr, $p->boucles, $p->id_boucle); |
| 940 | 940 | } |
| 941 | 941 | |
@@ -985,7 +985,7 @@ discard block |
||
| 985 | 985 | while ($b != '') { |
| 986 | 986 | foreach ($p->boucles[$b]->criteres as $critere) { |
| 987 | 987 | if ($critere->op == $motif) { |
| 988 | - $p->code = '$Pile[$SP' . (($n == 0) ? '' : "-$n") . |
|
| 988 | + $p->code = '$Pile[$SP'.(($n == 0) ? '' : "-$n"). |
|
| 989 | 989 | "]['$champ']"; |
| 990 | 990 | $b = ''; |
| 991 | 991 | break 2; |
@@ -1013,6 +1013,6 @@ discard block |
||
| 1013 | 1013 | */ |
| 1014 | 1014 | function zbug_presenter_champ($p, $champ = '') { |
| 1015 | 1015 | $balise = $champ ?: $p->nom_champ; |
| 1016 | - $explicite = $p->nom_boucle ? $p->nom_boucle . ':' : ''; |
|
| 1016 | + $explicite = $p->nom_boucle ? $p->nom_boucle.':' : ''; |
|
| 1017 | 1017 | return "#{$explicite}{$balise}"; |
| 1018 | 1018 | } |
@@ -16,7 +16,7 @@ discard block |
||
| 16 | 16 | * @package SPIP\Core\Compilateur\References |
| 17 | 17 | **/ |
| 18 | 18 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 19 | - return; |
|
| 19 | + return; |
|
| 20 | 20 | } |
| 21 | 21 | |
| 22 | 22 | /** |
@@ -41,14 +41,14 @@ discard block |
||
| 41 | 41 | * - '' si une référence explicite incorrecte est envoyée |
| 42 | 42 | */ |
| 43 | 43 | function index_boucle($p) { |
| 44 | - if (strlen($p->nom_boucle)) { |
|
| 45 | - // retourne l’index explicite demandé s’il existe |
|
| 46 | - if (!empty($p->boucles[$p->nom_boucle])) { |
|
| 47 | - return $p->nom_boucle; |
|
| 48 | - } |
|
| 49 | - return ''; |
|
| 50 | - } |
|
| 51 | - return $p->id_boucle; |
|
| 44 | + if (strlen($p->nom_boucle)) { |
|
| 45 | + // retourne l’index explicite demandé s’il existe |
|
| 46 | + if (!empty($p->boucles[$p->nom_boucle])) { |
|
| 47 | + return $p->nom_boucle; |
|
| 48 | + } |
|
| 49 | + return ''; |
|
| 50 | + } |
|
| 51 | + return $p->id_boucle; |
|
| 52 | 52 | } |
| 53 | 53 | |
| 54 | 54 | |
@@ -71,17 +71,17 @@ discard block |
||
| 71 | 71 | * - '' si une référence explicite incorrecte est envoyée |
| 72 | 72 | */ |
| 73 | 73 | function index_boucle_mere($p) { |
| 74 | - if (strlen($p->nom_boucle)) { |
|
| 75 | - // retourne l’index explicite demandé s’il existe |
|
| 76 | - if (!empty($p->boucles[$p->nom_boucle])) { |
|
| 77 | - return $p->nom_boucle; |
|
| 78 | - } |
|
| 79 | - return ''; |
|
| 80 | - } |
|
| 81 | - if (!empty($p->descr['id_mere'])) { |
|
| 82 | - return $p->descr['id_mere']; |
|
| 83 | - } |
|
| 84 | - return ''; |
|
| 74 | + if (strlen($p->nom_boucle)) { |
|
| 75 | + // retourne l’index explicite demandé s’il existe |
|
| 76 | + if (!empty($p->boucles[$p->nom_boucle])) { |
|
| 77 | + return $p->nom_boucle; |
|
| 78 | + } |
|
| 79 | + return ''; |
|
| 80 | + } |
|
| 81 | + if (!empty($p->descr['id_mere'])) { |
|
| 82 | + return $p->descr['id_mere']; |
|
| 83 | + } |
|
| 84 | + return ''; |
|
| 85 | 85 | } |
| 86 | 86 | |
| 87 | 87 | /** |
@@ -115,74 +115,74 @@ discard block |
||
| 115 | 115 | * Code PHP pour obtenir le champ SQL |
| 116 | 116 | */ |
| 117 | 117 | function index_pile( |
| 118 | - $idb, |
|
| 119 | - $nom_champ, |
|
| 120 | - &$boucles, |
|
| 121 | - $explicite = '', |
|
| 122 | - $defaut = null, |
|
| 123 | - $remonte_pile = true, |
|
| 124 | - $select = true |
|
| 118 | + $idb, |
|
| 119 | + $nom_champ, |
|
| 120 | + &$boucles, |
|
| 121 | + $explicite = '', |
|
| 122 | + $defaut = null, |
|
| 123 | + $remonte_pile = true, |
|
| 124 | + $select = true |
|
| 125 | 125 | ) { |
| 126 | - if (!is_string($defaut)) { |
|
| 127 | - $defaut = '($Pile[0][\'' . strtolower($nom_champ) . '\'] ?? null)'; |
|
| 128 | - } |
|
| 129 | - |
|
| 130 | - $idb_origine = $idb; |
|
| 131 | - $nom_champ_origine = $nom_champ; |
|
| 132 | - |
|
| 133 | - $i = 0; |
|
| 134 | - if (strlen($explicite)) { |
|
| 135 | - // Recherche d'un champ dans un etage superieur |
|
| 136 | - while (($idb !== $explicite) && ($idb !== '')) { |
|
| 137 | - # spip_log("Cherchexpl: $nom_champ '$explicite' '$idb' '$i'"); |
|
| 138 | - $i++; |
|
| 139 | - $idb = $boucles[$idb]->id_parent; |
|
| 140 | - } |
|
| 141 | - } |
|
| 142 | - |
|
| 143 | - # spip_log("Cherche: $nom_champ a partir de '$idb'"); |
|
| 144 | - $nom_champ = strtolower($nom_champ); |
|
| 145 | - $conditionnel = []; |
|
| 146 | - // attention: entre la boucle nommee 0, "" et le tableau vide, |
|
| 147 | - // il y a incoherences qu'il vaut mieux eviter |
|
| 148 | - while (isset($boucles[$idb])) { |
|
| 149 | - $joker = true; |
|
| 150 | - // modifie $joker si tous les champs sont autorisés. |
|
| 151 | - // $t = le select pour le champ, si on l'a trouvé (ou si joker) |
|
| 152 | - // $c = le nom du champ demandé |
|
| 153 | - [$t, $c] = index_tables_en_pile($idb, $nom_champ, $boucles, $joker); |
|
| 154 | - if ($t) { |
|
| 155 | - if ($select and !in_array($t, $boucles[$idb]->select)) { |
|
| 156 | - $boucles[$idb]->select[] = $t; |
|
| 157 | - } |
|
| 158 | - // renseigner la boucle source de ce champ pour les traitements |
|
| 159 | - $boucles[$idb_origine]->index_champ[$nom_champ_origine] = $idb; |
|
| 160 | - $champ = '$Pile[$SP' . ($i ? "-$i" : '') . '][\'' . $c . '\']'; |
|
| 161 | - if (!$joker) { |
|
| 162 | - return index_compose($conditionnel, $champ); |
|
| 163 | - } |
|
| 164 | - |
|
| 165 | - // tant que l'on trouve des tables avec joker, on continue |
|
| 166 | - // avec la boucle parente et on conditionne à l'exécution |
|
| 167 | - // la présence du champ. Si le champ existe à l'exécution |
|
| 168 | - // dans une boucle, il est pris, sinon on le cherche dans le parent... |
|
| 169 | - $conditionnel[] = "isset($champ)?$champ"; |
|
| 170 | - } |
|
| 171 | - |
|
| 172 | - if ($remonte_pile) { |
|
| 173 | - # spip_log("On remonte vers $i"); |
|
| 174 | - // Sinon on remonte d'un cran |
|
| 175 | - $idb = $boucles[$idb]->id_parent; |
|
| 176 | - $i++; |
|
| 177 | - } else { |
|
| 178 | - $idb = null; |
|
| 179 | - } |
|
| 180 | - } |
|
| 181 | - |
|
| 182 | - # spip_log("Pas vu $nom_champ"); |
|
| 183 | - // esperons qu'il y sera |
|
| 184 | - // ou qu'on a fourni une valeur par "defaut" plus pertinent |
|
| 185 | - return index_compose($conditionnel, $defaut); |
|
| 126 | + if (!is_string($defaut)) { |
|
| 127 | + $defaut = '($Pile[0][\'' . strtolower($nom_champ) . '\'] ?? null)'; |
|
| 128 | + } |
|
| 129 | + |
|
| 130 | + $idb_origine = $idb; |
|
| 131 | + $nom_champ_origine = $nom_champ; |
|
| 132 | + |
|
| 133 | + $i = 0; |
|
| 134 | + if (strlen($explicite)) { |
|
| 135 | + // Recherche d'un champ dans un etage superieur |
|
| 136 | + while (($idb !== $explicite) && ($idb !== '')) { |
|
| 137 | + # spip_log("Cherchexpl: $nom_champ '$explicite' '$idb' '$i'"); |
|
| 138 | + $i++; |
|
| 139 | + $idb = $boucles[$idb]->id_parent; |
|
| 140 | + } |
|
| 141 | + } |
|
| 142 | + |
|
| 143 | + # spip_log("Cherche: $nom_champ a partir de '$idb'"); |
|
| 144 | + $nom_champ = strtolower($nom_champ); |
|
| 145 | + $conditionnel = []; |
|
| 146 | + // attention: entre la boucle nommee 0, "" et le tableau vide, |
|
| 147 | + // il y a incoherences qu'il vaut mieux eviter |
|
| 148 | + while (isset($boucles[$idb])) { |
|
| 149 | + $joker = true; |
|
| 150 | + // modifie $joker si tous les champs sont autorisés. |
|
| 151 | + // $t = le select pour le champ, si on l'a trouvé (ou si joker) |
|
| 152 | + // $c = le nom du champ demandé |
|
| 153 | + [$t, $c] = index_tables_en_pile($idb, $nom_champ, $boucles, $joker); |
|
| 154 | + if ($t) { |
|
| 155 | + if ($select and !in_array($t, $boucles[$idb]->select)) { |
|
| 156 | + $boucles[$idb]->select[] = $t; |
|
| 157 | + } |
|
| 158 | + // renseigner la boucle source de ce champ pour les traitements |
|
| 159 | + $boucles[$idb_origine]->index_champ[$nom_champ_origine] = $idb; |
|
| 160 | + $champ = '$Pile[$SP' . ($i ? "-$i" : '') . '][\'' . $c . '\']'; |
|
| 161 | + if (!$joker) { |
|
| 162 | + return index_compose($conditionnel, $champ); |
|
| 163 | + } |
|
| 164 | + |
|
| 165 | + // tant que l'on trouve des tables avec joker, on continue |
|
| 166 | + // avec la boucle parente et on conditionne à l'exécution |
|
| 167 | + // la présence du champ. Si le champ existe à l'exécution |
|
| 168 | + // dans une boucle, il est pris, sinon on le cherche dans le parent... |
|
| 169 | + $conditionnel[] = "isset($champ)?$champ"; |
|
| 170 | + } |
|
| 171 | + |
|
| 172 | + if ($remonte_pile) { |
|
| 173 | + # spip_log("On remonte vers $i"); |
|
| 174 | + // Sinon on remonte d'un cran |
|
| 175 | + $idb = $boucles[$idb]->id_parent; |
|
| 176 | + $i++; |
|
| 177 | + } else { |
|
| 178 | + $idb = null; |
|
| 179 | + } |
|
| 180 | + } |
|
| 181 | + |
|
| 182 | + # spip_log("Pas vu $nom_champ"); |
|
| 183 | + // esperons qu'il y sera |
|
| 184 | + // ou qu'on a fourni une valeur par "defaut" plus pertinent |
|
| 185 | + return index_compose($conditionnel, $defaut); |
|
| 186 | 186 | } |
| 187 | 187 | |
| 188 | 188 | /** |
@@ -196,12 +196,12 @@ discard block |
||
| 196 | 196 | * @return string Code PHP complet de recherche d'un champ |
| 197 | 197 | */ |
| 198 | 198 | function index_compose($conditionnel, $defaut) { |
| 199 | - while ($c = array_pop($conditionnel)) { |
|
| 200 | - // si on passe defaut = '', ne pas générer d'erreur de compilation. |
|
| 201 | - $defaut = "($c:(" . ($defaut ?: "''") . '))'; |
|
| 202 | - } |
|
| 199 | + while ($c = array_pop($conditionnel)) { |
|
| 200 | + // si on passe defaut = '', ne pas générer d'erreur de compilation. |
|
| 201 | + $defaut = "($c:(" . ($defaut ?: "''") . '))'; |
|
| 202 | + } |
|
| 203 | 203 | |
| 204 | - return $defaut; |
|
| 204 | + return $defaut; |
|
| 205 | 205 | } |
| 206 | 206 | |
| 207 | 207 | /** |
@@ -237,97 +237,97 @@ discard block |
||
| 237 | 237 | **/ |
| 238 | 238 | function index_tables_en_pile($idb, $nom_champ, &$boucles, &$joker) { |
| 239 | 239 | |
| 240 | - $r = $boucles[$idb]->type_requete; |
|
| 241 | - // boucle recursive, c'est foutu... |
|
| 242 | - if ($r == TYPE_RECURSIF) { |
|
| 243 | - return []; |
|
| 244 | - } |
|
| 245 | - if (!$r) { |
|
| 246 | - $joker = false; // indiquer a l'appelant |
|
| 247 | - # continuer pour chercher l'erreur suivante |
|
| 248 | - return ["'#" . $r . ':' . $nom_champ . "'", '']; |
|
| 249 | - } |
|
| 250 | - |
|
| 251 | - $desc = $boucles[$idb]->show; |
|
| 252 | - // le nom du champ est il une exception de la table ? un alias ? |
|
| 253 | - $excep = $GLOBALS['exceptions_des_tables'][$r] ?? ''; |
|
| 254 | - if ($excep) { |
|
| 255 | - $excep = $excep[$nom_champ] ?? ''; |
|
| 256 | - } |
|
| 257 | - |
|
| 258 | - // il y a un alias connu pour ce champ |
|
| 259 | - if ($excep) { |
|
| 260 | - $joker = false; // indiquer a l'appelant |
|
| 261 | - return index_exception($boucles[$idb], $desc, $nom_champ, $excep); |
|
| 262 | - } |
|
| 263 | - |
|
| 264 | - // le champ existe dans la table, on le prend. |
|
| 265 | - if (isset($desc['field'][$nom_champ])) { |
|
| 266 | - $t = $boucles[$idb]->id_table ?? ''; |
|
| 267 | - $joker = false; // indiquer a l'appelant |
|
| 268 | - // note: dans certains cas ('valeur' d’une boucle DATA, sans id_table), retourne ['.valeur', 'valeur'] … |
|
| 269 | - return ["$t.$nom_champ", $nom_champ]; |
|
| 270 | - } |
|
| 271 | - |
|
| 272 | - // Tous les champs sont-ils acceptés ? |
|
| 273 | - // Si oui, on retourne le champ, et on lève le flag joker |
|
| 274 | - // C'est le cas des itérateurs DATA qui acceptent tout |
|
| 275 | - // et testent la présence du champ à l'exécution et non à la compilation |
|
| 276 | - // car ils ne connaissent pas ici leurs contenus. |
|
| 277 | - if ( |
|
| 278 | - /*$joker AND */ |
|
| 279 | - isset($desc['field']['*']) |
|
| 280 | - ) { |
|
| 281 | - $joker = true; // indiquer a l'appelant |
|
| 282 | - return [$nom_champ, $nom_champ]; |
|
| 283 | - } |
|
| 284 | - |
|
| 285 | - $joker = false; // indiquer a l'appelant |
|
| 286 | - |
|
| 287 | - // la table de jointure est explicitement indiquée (rubrique.titre) |
|
| 288 | - if (preg_match('/^(.*)\.(.*)$/', $nom_champ, $r)) { |
|
| 289 | - [, $_table, $_nom_champ] = $r; |
|
| 290 | - if ($cle = trouver_jointure_champ($_nom_champ, $boucles[$idb], [$_table])) { |
|
| 291 | - $_alias = $cle . '_' . $_nom_champ; |
|
| 292 | - return index_exception( |
|
| 293 | - $boucles[$idb], |
|
| 294 | - $desc, |
|
| 295 | - $_alias, |
|
| 296 | - [$_table, $_nom_champ] |
|
| 297 | - ); |
|
| 298 | - } |
|
| 299 | - return ['', '']; |
|
| 300 | - } |
|
| 301 | - |
|
| 302 | - // pas d'alias, pas de champ, pas de joker... |
|
| 303 | - // tenter via une jointure... |
|
| 304 | - |
|
| 305 | - // regarder si le champ est deja dans une jointure existante |
|
| 306 | - // sinon, si il y a des joitures explicites, la construire |
|
| 307 | - if (!$t = trouver_champ_exterieur($nom_champ, $boucles[$idb]->from, $boucles[$idb])) { |
|
| 308 | - if ($boucles[$idb]->jointures_explicites) { |
|
| 309 | - // [todo] Ne pas lancer que lorsque il y a des jointures explicites !!!! |
|
| 310 | - // fonctionnel, il suffit d'utiliser $boucles[$idb]->jointures au lieu de jointures_explicites |
|
| 311 | - // mais est-ce ce qu'on veut ? |
|
| 312 | - $jointures = preg_split('/\s+/', $boucles[$idb]->jointures_explicites); |
|
| 313 | - if ($cle = trouver_jointure_champ($nom_champ, $boucles[$idb], $jointures)) { |
|
| 314 | - $t = trouver_champ_exterieur($nom_champ, $boucles[$idb]->from, $boucles[$idb]); |
|
| 315 | - } |
|
| 316 | - } |
|
| 317 | - } |
|
| 318 | - |
|
| 319 | - if ($t) { |
|
| 320 | - // si on a trouvé une jointure possible, on fait comme |
|
| 321 | - // si c'était une exception pour le champ demandé |
|
| 322 | - return index_exception( |
|
| 323 | - $boucles[$idb], |
|
| 324 | - $desc, |
|
| 325 | - $nom_champ, |
|
| 326 | - [$t[1]['id_table'], reset($t[2])] |
|
| 327 | - ); |
|
| 328 | - } |
|
| 329 | - |
|
| 330 | - return ['', '']; |
|
| 240 | + $r = $boucles[$idb]->type_requete; |
|
| 241 | + // boucle recursive, c'est foutu... |
|
| 242 | + if ($r == TYPE_RECURSIF) { |
|
| 243 | + return []; |
|
| 244 | + } |
|
| 245 | + if (!$r) { |
|
| 246 | + $joker = false; // indiquer a l'appelant |
|
| 247 | + # continuer pour chercher l'erreur suivante |
|
| 248 | + return ["'#" . $r . ':' . $nom_champ . "'", '']; |
|
| 249 | + } |
|
| 250 | + |
|
| 251 | + $desc = $boucles[$idb]->show; |
|
| 252 | + // le nom du champ est il une exception de la table ? un alias ? |
|
| 253 | + $excep = $GLOBALS['exceptions_des_tables'][$r] ?? ''; |
|
| 254 | + if ($excep) { |
|
| 255 | + $excep = $excep[$nom_champ] ?? ''; |
|
| 256 | + } |
|
| 257 | + |
|
| 258 | + // il y a un alias connu pour ce champ |
|
| 259 | + if ($excep) { |
|
| 260 | + $joker = false; // indiquer a l'appelant |
|
| 261 | + return index_exception($boucles[$idb], $desc, $nom_champ, $excep); |
|
| 262 | + } |
|
| 263 | + |
|
| 264 | + // le champ existe dans la table, on le prend. |
|
| 265 | + if (isset($desc['field'][$nom_champ])) { |
|
| 266 | + $t = $boucles[$idb]->id_table ?? ''; |
|
| 267 | + $joker = false; // indiquer a l'appelant |
|
| 268 | + // note: dans certains cas ('valeur' d’une boucle DATA, sans id_table), retourne ['.valeur', 'valeur'] … |
|
| 269 | + return ["$t.$nom_champ", $nom_champ]; |
|
| 270 | + } |
|
| 271 | + |
|
| 272 | + // Tous les champs sont-ils acceptés ? |
|
| 273 | + // Si oui, on retourne le champ, et on lève le flag joker |
|
| 274 | + // C'est le cas des itérateurs DATA qui acceptent tout |
|
| 275 | + // et testent la présence du champ à l'exécution et non à la compilation |
|
| 276 | + // car ils ne connaissent pas ici leurs contenus. |
|
| 277 | + if ( |
|
| 278 | + /*$joker AND */ |
|
| 279 | + isset($desc['field']['*']) |
|
| 280 | + ) { |
|
| 281 | + $joker = true; // indiquer a l'appelant |
|
| 282 | + return [$nom_champ, $nom_champ]; |
|
| 283 | + } |
|
| 284 | + |
|
| 285 | + $joker = false; // indiquer a l'appelant |
|
| 286 | + |
|
| 287 | + // la table de jointure est explicitement indiquée (rubrique.titre) |
|
| 288 | + if (preg_match('/^(.*)\.(.*)$/', $nom_champ, $r)) { |
|
| 289 | + [, $_table, $_nom_champ] = $r; |
|
| 290 | + if ($cle = trouver_jointure_champ($_nom_champ, $boucles[$idb], [$_table])) { |
|
| 291 | + $_alias = $cle . '_' . $_nom_champ; |
|
| 292 | + return index_exception( |
|
| 293 | + $boucles[$idb], |
|
| 294 | + $desc, |
|
| 295 | + $_alias, |
|
| 296 | + [$_table, $_nom_champ] |
|
| 297 | + ); |
|
| 298 | + } |
|
| 299 | + return ['', '']; |
|
| 300 | + } |
|
| 301 | + |
|
| 302 | + // pas d'alias, pas de champ, pas de joker... |
|
| 303 | + // tenter via une jointure... |
|
| 304 | + |
|
| 305 | + // regarder si le champ est deja dans une jointure existante |
|
| 306 | + // sinon, si il y a des joitures explicites, la construire |
|
| 307 | + if (!$t = trouver_champ_exterieur($nom_champ, $boucles[$idb]->from, $boucles[$idb])) { |
|
| 308 | + if ($boucles[$idb]->jointures_explicites) { |
|
| 309 | + // [todo] Ne pas lancer que lorsque il y a des jointures explicites !!!! |
|
| 310 | + // fonctionnel, il suffit d'utiliser $boucles[$idb]->jointures au lieu de jointures_explicites |
|
| 311 | + // mais est-ce ce qu'on veut ? |
|
| 312 | + $jointures = preg_split('/\s+/', $boucles[$idb]->jointures_explicites); |
|
| 313 | + if ($cle = trouver_jointure_champ($nom_champ, $boucles[$idb], $jointures)) { |
|
| 314 | + $t = trouver_champ_exterieur($nom_champ, $boucles[$idb]->from, $boucles[$idb]); |
|
| 315 | + } |
|
| 316 | + } |
|
| 317 | + } |
|
| 318 | + |
|
| 319 | + if ($t) { |
|
| 320 | + // si on a trouvé une jointure possible, on fait comme |
|
| 321 | + // si c'était une exception pour le champ demandé |
|
| 322 | + return index_exception( |
|
| 323 | + $boucles[$idb], |
|
| 324 | + $desc, |
|
| 325 | + $nom_champ, |
|
| 326 | + [$t[1]['id_table'], reset($t[2])] |
|
| 327 | + ); |
|
| 328 | + } |
|
| 329 | + |
|
| 330 | + return ['', '']; |
|
| 331 | 331 | } |
| 332 | 332 | |
| 333 | 333 | |
@@ -355,52 +355,52 @@ discard block |
||
| 355 | 355 | * est une expression pour le SELECT de la boucle du style "mots.titre AS titre_mot" |
| 356 | 356 | **/ |
| 357 | 357 | function index_exception(&$boucle, $desc, $nom_champ, $excep) { |
| 358 | - static $trouver_table; |
|
| 359 | - if (!$trouver_table) { |
|
| 360 | - $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 361 | - } |
|
| 362 | - |
|
| 363 | - if (is_array($excep)) { |
|
| 364 | - // permettre aux plugins de gerer eux meme des jointures derogatoire ingerables |
|
| 365 | - $t = null; |
|
| 366 | - if (count($excep) == 3) { |
|
| 367 | - $index_exception_derogatoire = array_pop($excep); |
|
| 368 | - $t = $index_exception_derogatoire($boucle, $desc, $nom_champ, $excep); |
|
| 369 | - } |
|
| 370 | - if ($t == null) { |
|
| 371 | - [$e, $x] = $excep; #PHP4 affecte de gauche a droite |
|
| 372 | - $excep = $x; #PHP5 de droite a gauche ! |
|
| 373 | - $j = $trouver_table($e, $boucle->sql_serveur); |
|
| 374 | - if (!$j) { |
|
| 375 | - return ['', '']; |
|
| 376 | - } |
|
| 377 | - $e = $j['table']; |
|
| 378 | - if (!$t = array_search($e, $boucle->from)) { |
|
| 379 | - $k = $j['key']['PRIMARY KEY']; |
|
| 380 | - if (strpos($k, ',')) { |
|
| 381 | - $l = (preg_split('/\s*,\s*/', $k)); |
|
| 382 | - $k = $desc['key']['PRIMARY KEY']; |
|
| 383 | - if (!in_array($k, $l)) { |
|
| 384 | - spip_log("jointure impossible $e " . join(',', $l)); |
|
| 385 | - |
|
| 386 | - return ['', '']; |
|
| 387 | - } |
|
| 388 | - } |
|
| 389 | - $k = [$boucle->id_table, [$e], $k]; |
|
| 390 | - fabrique_jointures($boucle, [$k]); |
|
| 391 | - $t = array_search($e, $boucle->from); |
|
| 392 | - } |
|
| 393 | - } |
|
| 394 | - } else { |
|
| 395 | - $t = $boucle->id_table; |
|
| 396 | - } |
|
| 397 | - // demander a SQL de gerer le synonyme |
|
| 398 | - // ca permet que excep soit dynamique (Cedric, 2/3/06) |
|
| 399 | - if ($excep != $nom_champ) { |
|
| 400 | - $excep .= ' AS ' . $nom_champ; |
|
| 401 | - } |
|
| 402 | - |
|
| 403 | - return ["$t.$excep", $nom_champ]; |
|
| 358 | + static $trouver_table; |
|
| 359 | + if (!$trouver_table) { |
|
| 360 | + $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 361 | + } |
|
| 362 | + |
|
| 363 | + if (is_array($excep)) { |
|
| 364 | + // permettre aux plugins de gerer eux meme des jointures derogatoire ingerables |
|
| 365 | + $t = null; |
|
| 366 | + if (count($excep) == 3) { |
|
| 367 | + $index_exception_derogatoire = array_pop($excep); |
|
| 368 | + $t = $index_exception_derogatoire($boucle, $desc, $nom_champ, $excep); |
|
| 369 | + } |
|
| 370 | + if ($t == null) { |
|
| 371 | + [$e, $x] = $excep; #PHP4 affecte de gauche a droite |
|
| 372 | + $excep = $x; #PHP5 de droite a gauche ! |
|
| 373 | + $j = $trouver_table($e, $boucle->sql_serveur); |
|
| 374 | + if (!$j) { |
|
| 375 | + return ['', '']; |
|
| 376 | + } |
|
| 377 | + $e = $j['table']; |
|
| 378 | + if (!$t = array_search($e, $boucle->from)) { |
|
| 379 | + $k = $j['key']['PRIMARY KEY']; |
|
| 380 | + if (strpos($k, ',')) { |
|
| 381 | + $l = (preg_split('/\s*,\s*/', $k)); |
|
| 382 | + $k = $desc['key']['PRIMARY KEY']; |
|
| 383 | + if (!in_array($k, $l)) { |
|
| 384 | + spip_log("jointure impossible $e " . join(',', $l)); |
|
| 385 | + |
|
| 386 | + return ['', '']; |
|
| 387 | + } |
|
| 388 | + } |
|
| 389 | + $k = [$boucle->id_table, [$e], $k]; |
|
| 390 | + fabrique_jointures($boucle, [$k]); |
|
| 391 | + $t = array_search($e, $boucle->from); |
|
| 392 | + } |
|
| 393 | + } |
|
| 394 | + } else { |
|
| 395 | + $t = $boucle->id_table; |
|
| 396 | + } |
|
| 397 | + // demander a SQL de gerer le synonyme |
|
| 398 | + // ca permet que excep soit dynamique (Cedric, 2/3/06) |
|
| 399 | + if ($excep != $nom_champ) { |
|
| 400 | + $excep .= ' AS ' . $nom_champ; |
|
| 401 | + } |
|
| 402 | + |
|
| 403 | + return ["$t.$excep", $nom_champ]; |
|
| 404 | 404 | } |
| 405 | 405 | |
| 406 | 406 | /** |
@@ -425,7 +425,7 @@ discard block |
||
| 425 | 425 | * Code PHP pour retrouver le champ |
| 426 | 426 | */ |
| 427 | 427 | function champ_sql($champ, $p, $defaut = null, $remonte_pile = true) { |
| 428 | - return index_pile($p->id_boucle, $champ, $p->boucles, $p->nom_boucle, $defaut, $remonte_pile); |
|
| 428 | + return index_pile($p->id_boucle, $champ, $p->boucles, $p->nom_boucle, $defaut, $remonte_pile); |
|
| 429 | 429 | } |
| 430 | 430 | |
| 431 | 431 | |
@@ -445,9 +445,9 @@ discard block |
||
| 445 | 445 | * Code PHP pour d'exécution de la balise et de ses filtres |
| 446 | 446 | **/ |
| 447 | 447 | function calculer_champ($p) { |
| 448 | - $p = calculer_balise($p->nom_champ, $p); |
|
| 448 | + $p = calculer_balise($p->nom_champ, $p); |
|
| 449 | 449 | |
| 450 | - return applique_filtres($p); |
|
| 450 | + return applique_filtres($p); |
|
| 451 | 451 | } |
| 452 | 452 | |
| 453 | 453 | |
@@ -484,26 +484,26 @@ discard block |
||
| 484 | 484 | **/ |
| 485 | 485 | function calculer_balise(string $nom, \Champ $p): \Champ { |
| 486 | 486 | |
| 487 | - // S'agit-t-il d'une balise_XXXX[_dist]() ? |
|
| 488 | - if ($f = charger_fonction($nom, 'balise', true)) { |
|
| 489 | - $p->balise_calculee = true; |
|
| 490 | - $res = $f($p); |
|
| 491 | - if ($res !== null and is_object($res)) { |
|
| 492 | - return $res; |
|
| 493 | - } |
|
| 494 | - } |
|
| 495 | - |
|
| 496 | - // Certaines des balises comportant un _ sont generiques |
|
| 497 | - if ($balise_generique = chercher_balise_generique($nom)) { |
|
| 498 | - $res = $balise_generique['fonction_generique']($p); |
|
| 499 | - if ($res !== null and is_object($res)) { |
|
| 500 | - return $res; |
|
| 501 | - } |
|
| 502 | - } |
|
| 503 | - |
|
| 504 | - $f = charger_fonction('DEFAUT', 'calculer_balise'); |
|
| 505 | - |
|
| 506 | - return $f($nom, $p); |
|
| 487 | + // S'agit-t-il d'une balise_XXXX[_dist]() ? |
|
| 488 | + if ($f = charger_fonction($nom, 'balise', true)) { |
|
| 489 | + $p->balise_calculee = true; |
|
| 490 | + $res = $f($p); |
|
| 491 | + if ($res !== null and is_object($res)) { |
|
| 492 | + return $res; |
|
| 493 | + } |
|
| 494 | + } |
|
| 495 | + |
|
| 496 | + // Certaines des balises comportant un _ sont generiques |
|
| 497 | + if ($balise_generique = chercher_balise_generique($nom)) { |
|
| 498 | + $res = $balise_generique['fonction_generique']($p); |
|
| 499 | + if ($res !== null and is_object($res)) { |
|
| 500 | + return $res; |
|
| 501 | + } |
|
| 502 | + } |
|
| 503 | + |
|
| 504 | + $f = charger_fonction('DEFAUT', 'calculer_balise'); |
|
| 505 | + |
|
| 506 | + return $f($nom, $p); |
|
| 507 | 507 | } |
| 508 | 508 | |
| 509 | 509 | |
@@ -531,37 +531,37 @@ discard block |
||
| 531 | 531 | **/ |
| 532 | 532 | function calculer_balise_DEFAUT_dist($nom, $p) { |
| 533 | 533 | |
| 534 | - // ca pourrait etre un champ SQL homonyme, |
|
| 535 | - $p->code = index_pile($p->id_boucle, $nom, $p->boucles, $p->nom_boucle); |
|
| 536 | - |
|
| 537 | - // compatibilite: depuis qu'on accepte #BALISE{ses_args} sans [(...)] autour |
|
| 538 | - // il faut recracher {...} quand ce n'est finalement pas des args |
|
| 539 | - if ($p->fonctions and (!$p->fonctions[0][0]) and $p->fonctions[0][1]) { |
|
| 540 | - $code = addslashes($p->fonctions[0][1]); |
|
| 541 | - $p->code .= " . '$code'"; |
|
| 542 | - } |
|
| 543 | - |
|
| 544 | - // ne pas passer le filtre securite sur les id_xxx |
|
| 545 | - if (strpos($nom, 'ID_') === 0) { |
|
| 546 | - $p->interdire_scripts = false; |
|
| 547 | - } |
|
| 548 | - |
|
| 549 | - // Compatibilite ascendante avec les couleurs html (#FEFEFE) : |
|
| 550 | - // SI le champ SQL n'est pas trouve |
|
| 551 | - // ET si la balise a une forme de couleur |
|
| 552 | - // ET s'il n'y a ni filtre ni etoile |
|
| 553 | - // ALORS retourner la couleur. |
|
| 554 | - // Ca permet si l'on veut vraiment de recuperer [(#ACCEDE*)] |
|
| 555 | - if ( |
|
| 556 | - preg_match('/^[A-F]{1,6}$/i', $nom) |
|
| 557 | - and !$p->etoile |
|
| 558 | - and !$p->fonctions |
|
| 559 | - ) { |
|
| 560 | - $p->code = "'#$nom'"; |
|
| 561 | - $p->interdire_scripts = false; |
|
| 562 | - } |
|
| 563 | - |
|
| 564 | - return $p; |
|
| 534 | + // ca pourrait etre un champ SQL homonyme, |
|
| 535 | + $p->code = index_pile($p->id_boucle, $nom, $p->boucles, $p->nom_boucle); |
|
| 536 | + |
|
| 537 | + // compatibilite: depuis qu'on accepte #BALISE{ses_args} sans [(...)] autour |
|
| 538 | + // il faut recracher {...} quand ce n'est finalement pas des args |
|
| 539 | + if ($p->fonctions and (!$p->fonctions[0][0]) and $p->fonctions[0][1]) { |
|
| 540 | + $code = addslashes($p->fonctions[0][1]); |
|
| 541 | + $p->code .= " . '$code'"; |
|
| 542 | + } |
|
| 543 | + |
|
| 544 | + // ne pas passer le filtre securite sur les id_xxx |
|
| 545 | + if (strpos($nom, 'ID_') === 0) { |
|
| 546 | + $p->interdire_scripts = false; |
|
| 547 | + } |
|
| 548 | + |
|
| 549 | + // Compatibilite ascendante avec les couleurs html (#FEFEFE) : |
|
| 550 | + // SI le champ SQL n'est pas trouve |
|
| 551 | + // ET si la balise a une forme de couleur |
|
| 552 | + // ET s'il n'y a ni filtre ni etoile |
|
| 553 | + // ALORS retourner la couleur. |
|
| 554 | + // Ca permet si l'on veut vraiment de recuperer [(#ACCEDE*)] |
|
| 555 | + if ( |
|
| 556 | + preg_match('/^[A-F]{1,6}$/i', $nom) |
|
| 557 | + and !$p->etoile |
|
| 558 | + and !$p->fonctions |
|
| 559 | + ) { |
|
| 560 | + $p->code = "'#$nom'"; |
|
| 561 | + $p->interdire_scripts = false; |
|
| 562 | + } |
|
| 563 | + |
|
| 564 | + return $p; |
|
| 565 | 565 | } |
| 566 | 566 | |
| 567 | 567 | |
@@ -609,53 +609,53 @@ discard block |
||
| 609 | 609 | **/ |
| 610 | 610 | function calculer_balise_dynamique($p, $nom, $l, $supp = []) { |
| 611 | 611 | |
| 612 | - if (!balise_distante_interdite($p)) { |
|
| 613 | - $p->code = "''"; |
|
| 614 | - |
|
| 615 | - return $p; |
|
| 616 | - } |
|
| 617 | - // compatibilite: depuis qu'on accepte #BALISE{ses_args} sans [(...)] autour |
|
| 618 | - // il faut recracher {...} quand ce n'est finalement pas des args |
|
| 619 | - if ($p->fonctions and (!$p->fonctions[0][0]) and $p->fonctions[0][1]) { |
|
| 620 | - $p->fonctions = []; |
|
| 621 | - } |
|
| 622 | - |
|
| 623 | - if ($p->param and ($c = $p->param[0])) { |
|
| 624 | - // liste d'arguments commence toujours par la chaine vide |
|
| 625 | - array_shift($c); |
|
| 626 | - // construire la liste d'arguments comme pour un filtre |
|
| 627 | - $param = compose_filtres_args($p, $c, ','); |
|
| 628 | - } else { |
|
| 629 | - $param = ''; |
|
| 630 | - } |
|
| 631 | - $collecte = collecter_balise_dynamique($l, $p, $nom); |
|
| 632 | - |
|
| 633 | - $dans_un_modele = false; |
|
| 634 | - if (!empty($p->descr['sourcefile']) |
|
| 635 | - and $f = $p->descr['sourcefile'] |
|
| 636 | - and basename(dirname($f)) === 'modeles' |
|
| 637 | - ) { |
|
| 638 | - $dans_un_modele = true; |
|
| 639 | - } |
|
| 640 | - |
|
| 641 | - // un modele est toujours inséré en texte dans son contenant |
|
| 642 | - // donc si on est dans le public avec un cache on va perdre le dynamisme |
|
| 643 | - // et on risque de mettre en cache les valeurs pre-remplies du formulaire |
|
| 644 | - // on passe donc par une fonction proxy qui si besoin va collecter les arguments |
|
| 645 | - // et injecter le PHP qui va appeler la fonction pour generer le formulaire au lieu de directement la fonction |
|
| 646 | - // (dans l'espace prive on a pas de cache, donc pas de soucis (et un leak serait moins grave)) |
|
| 647 | - $p->code = sprintf( |
|
| 648 | - $dans_un_modele ? CODE_EXECUTER_BALISE_MODELE : CODE_EXECUTER_BALISE, |
|
| 649 | - $nom, |
|
| 650 | - join(',', $collecte), |
|
| 651 | - ($collecte ? $param : substr($param, 1)), # virer la virgule |
|
| 652 | - memoriser_contexte_compil($p), |
|
| 653 | - (!$supp ? '' : (', ' . join(',', $supp))) |
|
| 654 | - ); |
|
| 655 | - |
|
| 656 | - $p->interdire_scripts = false; |
|
| 657 | - |
|
| 658 | - return $p; |
|
| 612 | + if (!balise_distante_interdite($p)) { |
|
| 613 | + $p->code = "''"; |
|
| 614 | + |
|
| 615 | + return $p; |
|
| 616 | + } |
|
| 617 | + // compatibilite: depuis qu'on accepte #BALISE{ses_args} sans [(...)] autour |
|
| 618 | + // il faut recracher {...} quand ce n'est finalement pas des args |
|
| 619 | + if ($p->fonctions and (!$p->fonctions[0][0]) and $p->fonctions[0][1]) { |
|
| 620 | + $p->fonctions = []; |
|
| 621 | + } |
|
| 622 | + |
|
| 623 | + if ($p->param and ($c = $p->param[0])) { |
|
| 624 | + // liste d'arguments commence toujours par la chaine vide |
|
| 625 | + array_shift($c); |
|
| 626 | + // construire la liste d'arguments comme pour un filtre |
|
| 627 | + $param = compose_filtres_args($p, $c, ','); |
|
| 628 | + } else { |
|
| 629 | + $param = ''; |
|
| 630 | + } |
|
| 631 | + $collecte = collecter_balise_dynamique($l, $p, $nom); |
|
| 632 | + |
|
| 633 | + $dans_un_modele = false; |
|
| 634 | + if (!empty($p->descr['sourcefile']) |
|
| 635 | + and $f = $p->descr['sourcefile'] |
|
| 636 | + and basename(dirname($f)) === 'modeles' |
|
| 637 | + ) { |
|
| 638 | + $dans_un_modele = true; |
|
| 639 | + } |
|
| 640 | + |
|
| 641 | + // un modele est toujours inséré en texte dans son contenant |
|
| 642 | + // donc si on est dans le public avec un cache on va perdre le dynamisme |
|
| 643 | + // et on risque de mettre en cache les valeurs pre-remplies du formulaire |
|
| 644 | + // on passe donc par une fonction proxy qui si besoin va collecter les arguments |
|
| 645 | + // et injecter le PHP qui va appeler la fonction pour generer le formulaire au lieu de directement la fonction |
|
| 646 | + // (dans l'espace prive on a pas de cache, donc pas de soucis (et un leak serait moins grave)) |
|
| 647 | + $p->code = sprintf( |
|
| 648 | + $dans_un_modele ? CODE_EXECUTER_BALISE_MODELE : CODE_EXECUTER_BALISE, |
|
| 649 | + $nom, |
|
| 650 | + join(',', $collecte), |
|
| 651 | + ($collecte ? $param : substr($param, 1)), # virer la virgule |
|
| 652 | + memoriser_contexte_compil($p), |
|
| 653 | + (!$supp ? '' : (', ' . join(',', $supp))) |
|
| 654 | + ); |
|
| 655 | + |
|
| 656 | + $p->interdire_scripts = false; |
|
| 657 | + |
|
| 658 | + return $p; |
|
| 659 | 659 | } |
| 660 | 660 | |
| 661 | 661 | |
@@ -685,17 +685,17 @@ discard block |
||
| 685 | 685 | * Liste des codes PHP d'éxecution des balises collectées |
| 686 | 686 | **/ |
| 687 | 687 | function collecter_balise_dynamique(array $l, \Champ &$p, string $nom): array { |
| 688 | - $args = []; |
|
| 689 | - foreach ($l as $c) { |
|
| 690 | - if ($c === null) { |
|
| 691 | - $args[] = 'null'; |
|
| 692 | - } else { |
|
| 693 | - $x = calculer_balise($c, $p); |
|
| 694 | - $args[] = $x->code; |
|
| 695 | - } |
|
| 696 | - } |
|
| 697 | - |
|
| 698 | - return $args; |
|
| 688 | + $args = []; |
|
| 689 | + foreach ($l as $c) { |
|
| 690 | + if ($c === null) { |
|
| 691 | + $args[] = 'null'; |
|
| 692 | + } else { |
|
| 693 | + $x = calculer_balise($c, $p); |
|
| 694 | + $args[] = $x->code; |
|
| 695 | + } |
|
| 696 | + } |
|
| 697 | + |
|
| 698 | + return $args; |
|
| 699 | 699 | } |
| 700 | 700 | |
| 701 | 701 | |
@@ -710,22 +710,22 @@ discard block |
||
| 710 | 710 | * Nom de la connexion |
| 711 | 711 | **/ |
| 712 | 712 | function trouver_nom_serveur_distant($p) { |
| 713 | - $nom = $p->id_boucle; |
|
| 714 | - if ( |
|
| 715 | - $nom |
|
| 716 | - and isset($p->boucles[$nom]) |
|
| 717 | - ) { |
|
| 718 | - $s = $p->boucles[$nom]->sql_serveur; |
|
| 719 | - if ( |
|
| 720 | - strlen($s) |
|
| 721 | - and strlen($serveur = strtolower($s)) |
|
| 722 | - and !in_array($serveur, $GLOBALS['exception_des_connect']) |
|
| 723 | - ) { |
|
| 724 | - return $serveur; |
|
| 725 | - } |
|
| 726 | - } |
|
| 727 | - |
|
| 728 | - return ''; |
|
| 713 | + $nom = $p->id_boucle; |
|
| 714 | + if ( |
|
| 715 | + $nom |
|
| 716 | + and isset($p->boucles[$nom]) |
|
| 717 | + ) { |
|
| 718 | + $s = $p->boucles[$nom]->sql_serveur; |
|
| 719 | + if ( |
|
| 720 | + strlen($s) |
|
| 721 | + and strlen($serveur = strtolower($s)) |
|
| 722 | + and !in_array($serveur, $GLOBALS['exception_des_connect']) |
|
| 723 | + ) { |
|
| 724 | + return $serveur; |
|
| 725 | + } |
|
| 726 | + } |
|
| 727 | + |
|
| 728 | + return ''; |
|
| 729 | 729 | } |
| 730 | 730 | |
| 731 | 731 | |
@@ -749,15 +749,15 @@ discard block |
||
| 749 | 749 | * - false : La balise est interdite car le serveur est distant |
| 750 | 750 | **/ |
| 751 | 751 | function balise_distante_interdite($p) { |
| 752 | - $nom = $p->id_boucle; |
|
| 752 | + $nom = $p->id_boucle; |
|
| 753 | 753 | |
| 754 | - if ($nom and trouver_nom_serveur_distant($p)) { |
|
| 755 | - spip_log($nom . ':' . $p->nom_champ . ' ' . _T('zbug_distant_interdit')); |
|
| 754 | + if ($nom and trouver_nom_serveur_distant($p)) { |
|
| 755 | + spip_log($nom . ':' . $p->nom_champ . ' ' . _T('zbug_distant_interdit')); |
|
| 756 | 756 | |
| 757 | - return false; |
|
| 758 | - } |
|
| 757 | + return false; |
|
| 758 | + } |
|
| 759 | 759 | |
| 760 | - return true; |
|
| 760 | + return true; |
|
| 761 | 761 | } |
| 762 | 762 | |
| 763 | 763 | |
@@ -767,84 +767,84 @@ discard block |
||
| 767 | 767 | // |
| 768 | 768 | function champs_traitements($p) { |
| 769 | 769 | |
| 770 | - if (isset($GLOBALS['table_des_traitements'][$p->nom_champ])) { |
|
| 771 | - $ps = $GLOBALS['table_des_traitements'][$p->nom_champ]; |
|
| 772 | - } else { |
|
| 773 | - // quand on utilise un traitement catch-all * |
|
| 774 | - // celui-ci ne s'applique pas sur les balises calculees qui peuvent gerer |
|
| 775 | - // leur propre securite |
|
| 776 | - if (!$p->balise_calculee) { |
|
| 777 | - $ps = $GLOBALS['table_des_traitements']['*']; |
|
| 778 | - } else { |
|
| 779 | - $ps = false; |
|
| 780 | - } |
|
| 781 | - } |
|
| 782 | - |
|
| 783 | - if (is_array($ps)) { |
|
| 784 | - // Recuperer le type de boucle (articles, DATA) et la table SQL sur laquelle elle porte |
|
| 785 | - $idb = index_boucle($p); |
|
| 786 | - // si le champ a ete trouve dans une boucle parente sa source est renseignee ici |
|
| 787 | - if (!empty($p->boucles[$idb]->index_champ[$p->nom_champ])) { |
|
| 788 | - $idb = $p->boucles[$idb]->index_champ[$p->nom_champ]; |
|
| 789 | - } |
|
| 790 | - |
|
| 791 | - // mais on peut aussi etre hors boucle. Se mefier. |
|
| 792 | - $type_requete = $p->boucles[$idb]->type_requete ?? false; |
|
| 793 | - $table_sql = $p->boucles[$idb]->show['table_sql'] ?? false; |
|
| 794 | - |
|
| 795 | - // bien prendre en compte les alias de boucles (hierarchie => rubrique, syndication => syncdic, etc.) |
|
| 796 | - if ($type_requete and isset($GLOBALS['table_des_tables'][$type_requete])) { |
|
| 797 | - $type_alias = $type_requete; |
|
| 798 | - $type_requete = $GLOBALS['table_des_tables'][$type_requete]; |
|
| 799 | - } else { |
|
| 800 | - $type_alias = false; |
|
| 801 | - } |
|
| 802 | - |
|
| 803 | - // le traitement peut n'etre defini que pour une table en particulier "spip_articles" |
|
| 804 | - if ($table_sql and isset($ps[$table_sql])) { |
|
| 805 | - $ps = $ps[$table_sql]; |
|
| 806 | - } // ou pour une boucle en particulier "DATA","articles" |
|
| 807 | - elseif ($type_requete and isset($ps[$type_requete])) { |
|
| 808 | - $ps = $ps[$type_requete]; |
|
| 809 | - } // ou pour une boucle utilisant un alias ("hierarchie") |
|
| 810 | - elseif ($type_alias and isset($ps[$type_alias])) { |
|
| 811 | - $ps = $ps[$type_alias]; |
|
| 812 | - } // ou pour indifféremment quelle que soit la boucle |
|
| 813 | - elseif (isset($ps[0])) { |
|
| 814 | - $ps = $ps[0]; |
|
| 815 | - } else { |
|
| 816 | - $ps = false; |
|
| 817 | - } |
|
| 818 | - } |
|
| 819 | - |
|
| 820 | - if (!$ps) { |
|
| 821 | - return $p->code; |
|
| 822 | - } |
|
| 823 | - |
|
| 824 | - // Si une boucle DOCUMENTS{doublons} est presente dans le squelette, |
|
| 825 | - // ou si in INCLURE contient {doublons} |
|
| 826 | - // on insere une fonction de remplissage du tableau des doublons |
|
| 827 | - // dans les filtres propre() ou typo() |
|
| 828 | - // (qui traitent les raccourcis <docXX> referencant les docs) |
|
| 829 | - |
|
| 830 | - if ( |
|
| 831 | - isset($p->descr['documents']) |
|
| 832 | - and |
|
| 833 | - $p->descr['documents'] |
|
| 834 | - and ( |
|
| 835 | - (strpos($ps, 'propre') !== false) |
|
| 836 | - or |
|
| 837 | - (strpos($ps, 'typo') !== false) |
|
| 838 | - ) |
|
| 839 | - ) { |
|
| 840 | - $ps = 'traiter_doublons_documents($doublons, ' . $ps . ')'; |
|
| 841 | - } |
|
| 842 | - |
|
| 843 | - // La protection des champs par |safehtml est assuree par les extensions |
|
| 844 | - // dans la declaration des traitements des champs sensibles |
|
| 845 | - |
|
| 846 | - // Remplacer enfin le placeholder %s par le vrai code de la balise |
|
| 847 | - return str_replace('%s', $p->code, $ps); |
|
| 770 | + if (isset($GLOBALS['table_des_traitements'][$p->nom_champ])) { |
|
| 771 | + $ps = $GLOBALS['table_des_traitements'][$p->nom_champ]; |
|
| 772 | + } else { |
|
| 773 | + // quand on utilise un traitement catch-all * |
|
| 774 | + // celui-ci ne s'applique pas sur les balises calculees qui peuvent gerer |
|
| 775 | + // leur propre securite |
|
| 776 | + if (!$p->balise_calculee) { |
|
| 777 | + $ps = $GLOBALS['table_des_traitements']['*']; |
|
| 778 | + } else { |
|
| 779 | + $ps = false; |
|
| 780 | + } |
|
| 781 | + } |
|
| 782 | + |
|
| 783 | + if (is_array($ps)) { |
|
| 784 | + // Recuperer le type de boucle (articles, DATA) et la table SQL sur laquelle elle porte |
|
| 785 | + $idb = index_boucle($p); |
|
| 786 | + // si le champ a ete trouve dans une boucle parente sa source est renseignee ici |
|
| 787 | + if (!empty($p->boucles[$idb]->index_champ[$p->nom_champ])) { |
|
| 788 | + $idb = $p->boucles[$idb]->index_champ[$p->nom_champ]; |
|
| 789 | + } |
|
| 790 | + |
|
| 791 | + // mais on peut aussi etre hors boucle. Se mefier. |
|
| 792 | + $type_requete = $p->boucles[$idb]->type_requete ?? false; |
|
| 793 | + $table_sql = $p->boucles[$idb]->show['table_sql'] ?? false; |
|
| 794 | + |
|
| 795 | + // bien prendre en compte les alias de boucles (hierarchie => rubrique, syndication => syncdic, etc.) |
|
| 796 | + if ($type_requete and isset($GLOBALS['table_des_tables'][$type_requete])) { |
|
| 797 | + $type_alias = $type_requete; |
|
| 798 | + $type_requete = $GLOBALS['table_des_tables'][$type_requete]; |
|
| 799 | + } else { |
|
| 800 | + $type_alias = false; |
|
| 801 | + } |
|
| 802 | + |
|
| 803 | + // le traitement peut n'etre defini que pour une table en particulier "spip_articles" |
|
| 804 | + if ($table_sql and isset($ps[$table_sql])) { |
|
| 805 | + $ps = $ps[$table_sql]; |
|
| 806 | + } // ou pour une boucle en particulier "DATA","articles" |
|
| 807 | + elseif ($type_requete and isset($ps[$type_requete])) { |
|
| 808 | + $ps = $ps[$type_requete]; |
|
| 809 | + } // ou pour une boucle utilisant un alias ("hierarchie") |
|
| 810 | + elseif ($type_alias and isset($ps[$type_alias])) { |
|
| 811 | + $ps = $ps[$type_alias]; |
|
| 812 | + } // ou pour indifféremment quelle que soit la boucle |
|
| 813 | + elseif (isset($ps[0])) { |
|
| 814 | + $ps = $ps[0]; |
|
| 815 | + } else { |
|
| 816 | + $ps = false; |
|
| 817 | + } |
|
| 818 | + } |
|
| 819 | + |
|
| 820 | + if (!$ps) { |
|
| 821 | + return $p->code; |
|
| 822 | + } |
|
| 823 | + |
|
| 824 | + // Si une boucle DOCUMENTS{doublons} est presente dans le squelette, |
|
| 825 | + // ou si in INCLURE contient {doublons} |
|
| 826 | + // on insere une fonction de remplissage du tableau des doublons |
|
| 827 | + // dans les filtres propre() ou typo() |
|
| 828 | + // (qui traitent les raccourcis <docXX> referencant les docs) |
|
| 829 | + |
|
| 830 | + if ( |
|
| 831 | + isset($p->descr['documents']) |
|
| 832 | + and |
|
| 833 | + $p->descr['documents'] |
|
| 834 | + and ( |
|
| 835 | + (strpos($ps, 'propre') !== false) |
|
| 836 | + or |
|
| 837 | + (strpos($ps, 'typo') !== false) |
|
| 838 | + ) |
|
| 839 | + ) { |
|
| 840 | + $ps = 'traiter_doublons_documents($doublons, ' . $ps . ')'; |
|
| 841 | + } |
|
| 842 | + |
|
| 843 | + // La protection des champs par |safehtml est assuree par les extensions |
|
| 844 | + // dans la declaration des traitements des champs sensibles |
|
| 845 | + |
|
| 846 | + // Remplacer enfin le placeholder %s par le vrai code de la balise |
|
| 847 | + return str_replace('%s', $p->code, $ps); |
|
| 848 | 848 | } |
| 849 | 849 | |
| 850 | 850 | |
@@ -856,110 +856,110 @@ discard block |
||
| 856 | 856 | // |
| 857 | 857 | function applique_filtres($p) { |
| 858 | 858 | |
| 859 | - // Traitements standards (cf. supra) |
|
| 860 | - if ($p->etoile == '') { |
|
| 861 | - $code = champs_traitements($p); |
|
| 862 | - } else { |
|
| 863 | - $code = $p->code; |
|
| 864 | - } |
|
| 859 | + // Traitements standards (cf. supra) |
|
| 860 | + if ($p->etoile == '') { |
|
| 861 | + $code = champs_traitements($p); |
|
| 862 | + } else { |
|
| 863 | + $code = $p->code; |
|
| 864 | + } |
|
| 865 | 865 | |
| 866 | - // Appliquer les filtres perso |
|
| 867 | - if ($p->param) { |
|
| 868 | - $code = compose_filtres($p, $code); |
|
| 869 | - } |
|
| 866 | + // Appliquer les filtres perso |
|
| 867 | + if ($p->param) { |
|
| 868 | + $code = compose_filtres($p, $code); |
|
| 869 | + } |
|
| 870 | 870 | |
| 871 | - // S'il y a un lien avec la session, ajouter un code qui levera |
|
| 872 | - // un drapeau dans la structure d'invalidation $Cache |
|
| 873 | - if (isset($p->descr['session'])) { |
|
| 874 | - $code = "invalideur_session(\$Cache, $code)"; |
|
| 875 | - } |
|
| 871 | + // S'il y a un lien avec la session, ajouter un code qui levera |
|
| 872 | + // un drapeau dans la structure d'invalidation $Cache |
|
| 873 | + if (isset($p->descr['session'])) { |
|
| 874 | + $code = "invalideur_session(\$Cache, $code)"; |
|
| 875 | + } |
|
| 876 | 876 | |
| 877 | - $code = sandbox_composer_interdire_scripts($code, $p); |
|
| 877 | + $code = sandbox_composer_interdire_scripts($code, $p); |
|
| 878 | 878 | |
| 879 | - return $code; |
|
| 879 | + return $code; |
|
| 880 | 880 | } |
| 881 | 881 | |
| 882 | 882 | // Cf. function pipeline dans ecrire/inc_utils.php |
| 883 | 883 | function compose_filtres(&$p, $code) { |
| 884 | 884 | |
| 885 | - $image_miette = false; |
|
| 886 | - foreach ($p->param as $filtre) { |
|
| 887 | - $fonc = array_shift($filtre); |
|
| 888 | - if (!$fonc) { |
|
| 889 | - continue; |
|
| 890 | - } // normalement qu'au premier tour. |
|
| 891 | - $is_filtre_image = ((substr($fonc, 0, 6) == 'image_') and $fonc != 'image_graver'); |
|
| 892 | - if ($image_miette and !$is_filtre_image) { |
|
| 893 | - // il faut graver maintenant car apres le filtre en cours |
|
| 894 | - // on est pas sur d'avoir encore le nom du fichier dans le pipe |
|
| 895 | - $code = "filtrer('image_graver', $code)"; |
|
| 896 | - $image_miette = false; |
|
| 897 | - } |
|
| 898 | - |
|
| 899 | - // recuperer les arguments du filtre, |
|
| 900 | - // a separer par "," ou ":" dans le cas du filtre "?{a,b}" |
|
| 901 | - $countfiltre = is_countable($filtre) ? count($filtre) : 0; |
|
| 902 | - if ($fonc !== '?') { |
|
| 903 | - $sep = ','; |
|
| 904 | - } else { |
|
| 905 | - $sep = ':'; |
|
| 906 | - // |?{a,b} *doit* avoir exactement 2 arguments ; on les force |
|
| 907 | - if ($countfiltre != 2) { |
|
| 908 | - $filtre = [$filtre[0] ?? '', $filtre[1] ?? '']; |
|
| 909 | - $countfiltre = 2; |
|
| 910 | - } |
|
| 911 | - } |
|
| 912 | - $arglist = compose_filtres_args($p, $filtre, $sep); |
|
| 913 | - $logique = filtre_logique($fonc, $code, substr($arglist, 1)); |
|
| 914 | - if ($logique) { |
|
| 915 | - $code = $logique; |
|
| 916 | - } else { |
|
| 917 | - $code = sandbox_composer_filtre($fonc, $code, $arglist, $p, $countfiltre); |
|
| 918 | - if ($is_filtre_image) { |
|
| 919 | - $image_miette = true; |
|
| 920 | - } |
|
| 921 | - } |
|
| 922 | - } |
|
| 923 | - // ramasser les images intermediaires inutiles et graver l'image finale |
|
| 924 | - if ($image_miette) { |
|
| 925 | - $code = "filtrer('image_graver',$code)"; |
|
| 926 | - } |
|
| 927 | - |
|
| 928 | - return $code; |
|
| 885 | + $image_miette = false; |
|
| 886 | + foreach ($p->param as $filtre) { |
|
| 887 | + $fonc = array_shift($filtre); |
|
| 888 | + if (!$fonc) { |
|
| 889 | + continue; |
|
| 890 | + } // normalement qu'au premier tour. |
|
| 891 | + $is_filtre_image = ((substr($fonc, 0, 6) == 'image_') and $fonc != 'image_graver'); |
|
| 892 | + if ($image_miette and !$is_filtre_image) { |
|
| 893 | + // il faut graver maintenant car apres le filtre en cours |
|
| 894 | + // on est pas sur d'avoir encore le nom du fichier dans le pipe |
|
| 895 | + $code = "filtrer('image_graver', $code)"; |
|
| 896 | + $image_miette = false; |
|
| 897 | + } |
|
| 898 | + |
|
| 899 | + // recuperer les arguments du filtre, |
|
| 900 | + // a separer par "," ou ":" dans le cas du filtre "?{a,b}" |
|
| 901 | + $countfiltre = is_countable($filtre) ? count($filtre) : 0; |
|
| 902 | + if ($fonc !== '?') { |
|
| 903 | + $sep = ','; |
|
| 904 | + } else { |
|
| 905 | + $sep = ':'; |
|
| 906 | + // |?{a,b} *doit* avoir exactement 2 arguments ; on les force |
|
| 907 | + if ($countfiltre != 2) { |
|
| 908 | + $filtre = [$filtre[0] ?? '', $filtre[1] ?? '']; |
|
| 909 | + $countfiltre = 2; |
|
| 910 | + } |
|
| 911 | + } |
|
| 912 | + $arglist = compose_filtres_args($p, $filtre, $sep); |
|
| 913 | + $logique = filtre_logique($fonc, $code, substr($arglist, 1)); |
|
| 914 | + if ($logique) { |
|
| 915 | + $code = $logique; |
|
| 916 | + } else { |
|
| 917 | + $code = sandbox_composer_filtre($fonc, $code, $arglist, $p, $countfiltre); |
|
| 918 | + if ($is_filtre_image) { |
|
| 919 | + $image_miette = true; |
|
| 920 | + } |
|
| 921 | + } |
|
| 922 | + } |
|
| 923 | + // ramasser les images intermediaires inutiles et graver l'image finale |
|
| 924 | + if ($image_miette) { |
|
| 925 | + $code = "filtrer('image_graver',$code)"; |
|
| 926 | + } |
|
| 927 | + |
|
| 928 | + return $code; |
|
| 929 | 929 | } |
| 930 | 930 | |
| 931 | 931 | // Filtres et,ou,oui,non,sinon,xou,xor,and,or,not,yes |
| 932 | 932 | // et comparateurs |
| 933 | 933 | function filtre_logique($fonc, $code, $arg) { |
| 934 | 934 | |
| 935 | - switch (true) { |
|
| 936 | - case in_array($fonc, $GLOBALS['table_criteres_infixes']): |
|
| 937 | - return "($code $fonc $arg)"; |
|
| 938 | - case ($fonc == 'and') or ($fonc == 'et'): |
|
| 939 | - return "((($code) AND ($arg)) ?' ' :'')"; |
|
| 940 | - case ($fonc == 'or') or ($fonc == 'ou'): |
|
| 941 | - return "((($code) OR ($arg)) ?' ' :'')"; |
|
| 942 | - case ($fonc == 'xor') or ($fonc == 'xou'): |
|
| 943 | - return "((($code) XOR ($arg)) ?' ' :'')"; |
|
| 944 | - case ($fonc == 'sinon'): |
|
| 945 | - return "(((\$a = $code) OR (is_string(\$a) AND strlen(\$a))) ? \$a : $arg)"; |
|
| 946 | - case ($fonc == 'not') or ($fonc == 'non'): |
|
| 947 | - return "(($code) ?'' :' ')"; |
|
| 948 | - case ($fonc == 'yes') or ($fonc == 'oui'): |
|
| 949 | - return "(($code) ?' ' :'')"; |
|
| 950 | - } |
|
| 951 | - |
|
| 952 | - return ''; |
|
| 935 | + switch (true) { |
|
| 936 | + case in_array($fonc, $GLOBALS['table_criteres_infixes']): |
|
| 937 | + return "($code $fonc $arg)"; |
|
| 938 | + case ($fonc == 'and') or ($fonc == 'et'): |
|
| 939 | + return "((($code) AND ($arg)) ?' ' :'')"; |
|
| 940 | + case ($fonc == 'or') or ($fonc == 'ou'): |
|
| 941 | + return "((($code) OR ($arg)) ?' ' :'')"; |
|
| 942 | + case ($fonc == 'xor') or ($fonc == 'xou'): |
|
| 943 | + return "((($code) XOR ($arg)) ?' ' :'')"; |
|
| 944 | + case ($fonc == 'sinon'): |
|
| 945 | + return "(((\$a = $code) OR (is_string(\$a) AND strlen(\$a))) ? \$a : $arg)"; |
|
| 946 | + case ($fonc == 'not') or ($fonc == 'non'): |
|
| 947 | + return "(($code) ?'' :' ')"; |
|
| 948 | + case ($fonc == 'yes') or ($fonc == 'oui'): |
|
| 949 | + return "(($code) ?' ' :'')"; |
|
| 950 | + } |
|
| 951 | + |
|
| 952 | + return ''; |
|
| 953 | 953 | } |
| 954 | 954 | |
| 955 | 955 | function compose_filtres_args($p, $args, $sep) { |
| 956 | - $arglist = ''; |
|
| 957 | - foreach ($args as $arg) { |
|
| 958 | - $arglist .= $sep . |
|
| 959 | - calculer_liste($arg, $p->descr, $p->boucles, $p->id_boucle); |
|
| 960 | - } |
|
| 956 | + $arglist = ''; |
|
| 957 | + foreach ($args as $arg) { |
|
| 958 | + $arglist .= $sep . |
|
| 959 | + calculer_liste($arg, $p->descr, $p->boucles, $p->id_boucle); |
|
| 960 | + } |
|
| 961 | 961 | |
| 962 | - return $arglist; |
|
| 962 | + return $arglist; |
|
| 963 | 963 | } |
| 964 | 964 | |
| 965 | 965 | |
@@ -977,15 +977,15 @@ discard block |
||
| 977 | 977 | **/ |
| 978 | 978 | function calculer_argument_precedent($idb, $nom_champ, &$boucles, $defaut = null) { |
| 979 | 979 | |
| 980 | - // si recursif, forcer l'extraction du champ SQL mais ignorer le code |
|
| 981 | - if ($boucles[$idb]->externe) { |
|
| 982 | - index_pile($idb, $nom_champ, $boucles, '', $defaut); |
|
| 983 | - // retourner $Pile[$SP] et pas $Pile[0] si recursion en 1ere boucle |
|
| 984 | - // on ignore le defaut fourni dans ce cas |
|
| 985 | - $defaut = "(\$Pile[\$SP]['$nom_champ'] ?? null)"; |
|
| 986 | - } |
|
| 980 | + // si recursif, forcer l'extraction du champ SQL mais ignorer le code |
|
| 981 | + if ($boucles[$idb]->externe) { |
|
| 982 | + index_pile($idb, $nom_champ, $boucles, '', $defaut); |
|
| 983 | + // retourner $Pile[$SP] et pas $Pile[0] si recursion en 1ere boucle |
|
| 984 | + // on ignore le defaut fourni dans ce cas |
|
| 985 | + $defaut = "(\$Pile[\$SP]['$nom_champ'] ?? null)"; |
|
| 986 | + } |
|
| 987 | 987 | |
| 988 | - return index_pile($boucles[$idb]->id_parent, $nom_champ, $boucles, '', $defaut); |
|
| 988 | + return index_pile($boucles[$idb]->id_parent, $nom_champ, $boucles, '', $defaut); |
|
| 989 | 989 | } |
| 990 | 990 | |
| 991 | 991 | // |
@@ -999,30 +999,30 @@ discard block |
||
| 999 | 999 | // |
| 1000 | 1000 | |
| 1001 | 1001 | function rindex_pile($p, $champ, $motif) { |
| 1002 | - $n = 0; |
|
| 1003 | - $b = $p->id_boucle; |
|
| 1004 | - $p->code = ''; |
|
| 1005 | - while ($b != '') { |
|
| 1006 | - foreach ($p->boucles[$b]->criteres as $critere) { |
|
| 1007 | - if ($critere->op == $motif) { |
|
| 1008 | - $p->code = '$Pile[$SP' . (($n == 0) ? '' : "-$n") . |
|
| 1009 | - "]['$champ']"; |
|
| 1010 | - $b = ''; |
|
| 1011 | - break 2; |
|
| 1012 | - } |
|
| 1013 | - } |
|
| 1014 | - $n++; |
|
| 1015 | - $b = $p->boucles[$b]->id_parent; |
|
| 1016 | - } |
|
| 1017 | - |
|
| 1018 | - // si on est hors d'une boucle de {recherche}, cette balise est vide |
|
| 1019 | - if (!$p->code) { |
|
| 1020 | - $p->code = "''"; |
|
| 1021 | - } |
|
| 1022 | - |
|
| 1023 | - $p->interdire_scripts = false; |
|
| 1024 | - |
|
| 1025 | - return $p; |
|
| 1002 | + $n = 0; |
|
| 1003 | + $b = $p->id_boucle; |
|
| 1004 | + $p->code = ''; |
|
| 1005 | + while ($b != '') { |
|
| 1006 | + foreach ($p->boucles[$b]->criteres as $critere) { |
|
| 1007 | + if ($critere->op == $motif) { |
|
| 1008 | + $p->code = '$Pile[$SP' . (($n == 0) ? '' : "-$n") . |
|
| 1009 | + "]['$champ']"; |
|
| 1010 | + $b = ''; |
|
| 1011 | + break 2; |
|
| 1012 | + } |
|
| 1013 | + } |
|
| 1014 | + $n++; |
|
| 1015 | + $b = $p->boucles[$b]->id_parent; |
|
| 1016 | + } |
|
| 1017 | + |
|
| 1018 | + // si on est hors d'une boucle de {recherche}, cette balise est vide |
|
| 1019 | + if (!$p->code) { |
|
| 1020 | + $p->code = "''"; |
|
| 1021 | + } |
|
| 1022 | + |
|
| 1023 | + $p->interdire_scripts = false; |
|
| 1024 | + |
|
| 1025 | + return $p; |
|
| 1026 | 1026 | } |
| 1027 | 1027 | |
| 1028 | 1028 | /** |
@@ -1032,7 +1032,7 @@ discard block |
||
| 1032 | 1032 | * @return string Nom de la balise, avec indication de boucle explicite si présent. |
| 1033 | 1033 | */ |
| 1034 | 1034 | function zbug_presenter_champ($p, $champ = '') { |
| 1035 | - $balise = $champ ?: $p->nom_champ; |
|
| 1036 | - $explicite = $p->nom_boucle ? $p->nom_boucle . ':' : ''; |
|
| 1037 | - return "#{$explicite}{$balise}"; |
|
| 1035 | + $balise = $champ ?: $p->nom_champ; |
|
| 1036 | + $explicite = $p->nom_boucle ? $p->nom_boucle . ':' : ''; |
|
| 1037 | + return "#{$explicite}{$balise}"; |
|
| 1038 | 1038 | } |
@@ -19,78 +19,78 @@ |
||
| 19 | 19 | * @link https://www.php.net/manual/fr/book.sodium.php |
| 20 | 20 | */ |
| 21 | 21 | class Chiffrement { |
| 22 | - /** Chiffre un message en utilisant une clé ou un mot de passe */ |
|
| 23 | - public static function chiffrer( |
|
| 24 | - string $message, |
|
| 25 | - #[\SensitiveParameter] |
|
| 26 | - string $key |
|
| 27 | - ): ?string { |
|
| 28 | - // create a random salt for key derivation |
|
| 29 | - $salt = random_bytes(SODIUM_CRYPTO_PWHASH_SALTBYTES); |
|
| 30 | - $key = self::deriveKeyFromPassword($key, $salt); |
|
| 31 | - $nonce = random_bytes(\SODIUM_CRYPTO_SECRETBOX_NONCEBYTES); |
|
| 32 | - $padded_message = sodium_pad($message, 16); |
|
| 33 | - $encrypted = sodium_crypto_secretbox($padded_message, $nonce, $key); |
|
| 34 | - $encoded = base64_encode($salt . $nonce . $encrypted); |
|
| 35 | - sodium_memzero($key); |
|
| 36 | - sodium_memzero($nonce); |
|
| 37 | - sodium_memzero($salt); |
|
| 38 | - #spip_log("chiffrer($message)=$encoded", 'chiffrer' . _LOG_DEBUG); |
|
| 39 | - return $encoded; |
|
| 40 | - } |
|
| 22 | + /** Chiffre un message en utilisant une clé ou un mot de passe */ |
|
| 23 | + public static function chiffrer( |
|
| 24 | + string $message, |
|
| 25 | + #[\SensitiveParameter] |
|
| 26 | + string $key |
|
| 27 | + ): ?string { |
|
| 28 | + // create a random salt for key derivation |
|
| 29 | + $salt = random_bytes(SODIUM_CRYPTO_PWHASH_SALTBYTES); |
|
| 30 | + $key = self::deriveKeyFromPassword($key, $salt); |
|
| 31 | + $nonce = random_bytes(\SODIUM_CRYPTO_SECRETBOX_NONCEBYTES); |
|
| 32 | + $padded_message = sodium_pad($message, 16); |
|
| 33 | + $encrypted = sodium_crypto_secretbox($padded_message, $nonce, $key); |
|
| 34 | + $encoded = base64_encode($salt . $nonce . $encrypted); |
|
| 35 | + sodium_memzero($key); |
|
| 36 | + sodium_memzero($nonce); |
|
| 37 | + sodium_memzero($salt); |
|
| 38 | + #spip_log("chiffrer($message)=$encoded", 'chiffrer' . _LOG_DEBUG); |
|
| 39 | + return $encoded; |
|
| 40 | + } |
|
| 41 | 41 | |
| 42 | - /** Déchiffre un message en utilisant une clé ou un mot de passe */ |
|
| 43 | - public static function dechiffrer( |
|
| 44 | - string $encoded, |
|
| 45 | - #[\SensitiveParameter] |
|
| 46 | - string $key |
|
| 47 | - ): ?string { |
|
| 48 | - $decoded = base64_decode($encoded); |
|
| 49 | - $salt = substr($decoded, 0, \SODIUM_CRYPTO_PWHASH_SALTBYTES); |
|
| 50 | - $nonce = substr($decoded, \SODIUM_CRYPTO_PWHASH_SALTBYTES, \SODIUM_CRYPTO_SECRETBOX_NONCEBYTES); |
|
| 51 | - $encrypted = substr($decoded, \SODIUM_CRYPTO_PWHASH_SALTBYTES + \SODIUM_CRYPTO_SECRETBOX_NONCEBYTES); |
|
| 52 | - $key = self::deriveKeyFromPassword($key, $salt); |
|
| 53 | - $padded_message = sodium_crypto_secretbox_open($encrypted, $nonce, $key); |
|
| 54 | - sodium_memzero($key); |
|
| 55 | - sodium_memzero($nonce); |
|
| 56 | - sodium_memzero($salt); |
|
| 57 | - if ($padded_message === false) { |
|
| 58 | - spip_log("dechiffrer() chiffre corrompu `$encoded`", 'chiffrer' . _LOG_DEBUG); |
|
| 59 | - return null; |
|
| 60 | - } |
|
| 61 | - $message = sodium_unpad($padded_message, 16); |
|
| 62 | - #spip_log("dechiffrer($encoded)=$message", 'chiffrer' . _LOG_DEBUG); |
|
| 63 | - return $message; |
|
| 64 | - } |
|
| 42 | + /** Déchiffre un message en utilisant une clé ou un mot de passe */ |
|
| 43 | + public static function dechiffrer( |
|
| 44 | + string $encoded, |
|
| 45 | + #[\SensitiveParameter] |
|
| 46 | + string $key |
|
| 47 | + ): ?string { |
|
| 48 | + $decoded = base64_decode($encoded); |
|
| 49 | + $salt = substr($decoded, 0, \SODIUM_CRYPTO_PWHASH_SALTBYTES); |
|
| 50 | + $nonce = substr($decoded, \SODIUM_CRYPTO_PWHASH_SALTBYTES, \SODIUM_CRYPTO_SECRETBOX_NONCEBYTES); |
|
| 51 | + $encrypted = substr($decoded, \SODIUM_CRYPTO_PWHASH_SALTBYTES + \SODIUM_CRYPTO_SECRETBOX_NONCEBYTES); |
|
| 52 | + $key = self::deriveKeyFromPassword($key, $salt); |
|
| 53 | + $padded_message = sodium_crypto_secretbox_open($encrypted, $nonce, $key); |
|
| 54 | + sodium_memzero($key); |
|
| 55 | + sodium_memzero($nonce); |
|
| 56 | + sodium_memzero($salt); |
|
| 57 | + if ($padded_message === false) { |
|
| 58 | + spip_log("dechiffrer() chiffre corrompu `$encoded`", 'chiffrer' . _LOG_DEBUG); |
|
| 59 | + return null; |
|
| 60 | + } |
|
| 61 | + $message = sodium_unpad($padded_message, 16); |
|
| 62 | + #spip_log("dechiffrer($encoded)=$message", 'chiffrer' . _LOG_DEBUG); |
|
| 63 | + return $message; |
|
| 64 | + } |
|
| 65 | 65 | |
| 66 | - /** Génère une clé de la taille attendue pour le chiffrement */ |
|
| 67 | - public static function keygen(): string { |
|
| 68 | - return sodium_crypto_secretbox_keygen(); |
|
| 69 | - } |
|
| 66 | + /** Génère une clé de la taille attendue pour le chiffrement */ |
|
| 67 | + public static function keygen(): string { |
|
| 68 | + return sodium_crypto_secretbox_keygen(); |
|
| 69 | + } |
|
| 70 | 70 | |
| 71 | - /** |
|
| 72 | - * Retourne une clé de la taille attendue pour le chiffrement |
|
| 73 | - * |
|
| 74 | - * Notamment si on utilise un mot de passe comme clé, il faut le hacher |
|
| 75 | - * pour servir de clé à la taille correspondante. |
|
| 76 | - */ |
|
| 77 | - private static function deriveKeyFromPassword( |
|
| 78 | - #[\SensitiveParameter] |
|
| 79 | - string $password, |
|
| 80 | - string $salt |
|
| 81 | - ): string { |
|
| 82 | - if (strlen($password) === \SODIUM_CRYPTO_SECRETBOX_KEYBYTES) { |
|
| 83 | - return $password; |
|
| 84 | - } |
|
| 85 | - $key = sodium_crypto_pwhash( |
|
| 86 | - \SODIUM_CRYPTO_SECRETBOX_KEYBYTES, |
|
| 87 | - $password, |
|
| 88 | - $salt, |
|
| 89 | - \SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE, |
|
| 90 | - \SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE |
|
| 91 | - ); |
|
| 92 | - sodium_memzero($password); |
|
| 71 | + /** |
|
| 72 | + * Retourne une clé de la taille attendue pour le chiffrement |
|
| 73 | + * |
|
| 74 | + * Notamment si on utilise un mot de passe comme clé, il faut le hacher |
|
| 75 | + * pour servir de clé à la taille correspondante. |
|
| 76 | + */ |
|
| 77 | + private static function deriveKeyFromPassword( |
|
| 78 | + #[\SensitiveParameter] |
|
| 79 | + string $password, |
|
| 80 | + string $salt |
|
| 81 | + ): string { |
|
| 82 | + if (strlen($password) === \SODIUM_CRYPTO_SECRETBOX_KEYBYTES) { |
|
| 83 | + return $password; |
|
| 84 | + } |
|
| 85 | + $key = sodium_crypto_pwhash( |
|
| 86 | + \SODIUM_CRYPTO_SECRETBOX_KEYBYTES, |
|
| 87 | + $password, |
|
| 88 | + $salt, |
|
| 89 | + \SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE, |
|
| 90 | + \SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE |
|
| 91 | + ); |
|
| 92 | + sodium_memzero($password); |
|
| 93 | 93 | |
| 94 | - return $key; |
|
| 95 | - } |
|
| 94 | + return $key; |
|
| 95 | + } |
|
| 96 | 96 | } |
@@ -31,7 +31,7 @@ discard block |
||
| 31 | 31 | $nonce = random_bytes(\SODIUM_CRYPTO_SECRETBOX_NONCEBYTES); |
| 32 | 32 | $padded_message = sodium_pad($message, 16); |
| 33 | 33 | $encrypted = sodium_crypto_secretbox($padded_message, $nonce, $key); |
| 34 | - $encoded = base64_encode($salt . $nonce . $encrypted); |
|
| 34 | + $encoded = base64_encode($salt.$nonce.$encrypted); |
|
| 35 | 35 | sodium_memzero($key); |
| 36 | 36 | sodium_memzero($nonce); |
| 37 | 37 | sodium_memzero($salt); |
@@ -48,14 +48,14 @@ discard block |
||
| 48 | 48 | $decoded = base64_decode($encoded); |
| 49 | 49 | $salt = substr($decoded, 0, \SODIUM_CRYPTO_PWHASH_SALTBYTES); |
| 50 | 50 | $nonce = substr($decoded, \SODIUM_CRYPTO_PWHASH_SALTBYTES, \SODIUM_CRYPTO_SECRETBOX_NONCEBYTES); |
| 51 | - $encrypted = substr($decoded, \SODIUM_CRYPTO_PWHASH_SALTBYTES + \SODIUM_CRYPTO_SECRETBOX_NONCEBYTES); |
|
| 51 | + $encrypted = substr($decoded, \SODIUM_CRYPTO_PWHASH_SALTBYTES +\SODIUM_CRYPTO_SECRETBOX_NONCEBYTES); |
|
| 52 | 52 | $key = self::deriveKeyFromPassword($key, $salt); |
| 53 | 53 | $padded_message = sodium_crypto_secretbox_open($encrypted, $nonce, $key); |
| 54 | 54 | sodium_memzero($key); |
| 55 | 55 | sodium_memzero($nonce); |
| 56 | 56 | sodium_memzero($salt); |
| 57 | 57 | if ($padded_message === false) { |
| 58 | - spip_log("dechiffrer() chiffre corrompu `$encoded`", 'chiffrer' . _LOG_DEBUG); |
|
| 58 | + spip_log("dechiffrer() chiffre corrompu `$encoded`", 'chiffrer'._LOG_DEBUG); |
|
| 59 | 59 | return null; |
| 60 | 60 | } |
| 61 | 61 | $message = sodium_unpad($padded_message, 16); |
@@ -4,248 +4,248 @@ 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' => 'Ritorna all’interfaccia grafica completa', |
|
| 14 | - 'access_mode_texte' => 'Visualizza l’interfaccia testuale semplificata', |
|
| 15 | - 'admin_debug' => 'debug', |
|
| 16 | - 'admin_modifier_article' => 'Modifica l’articolo', |
|
| 17 | - 'admin_modifier_auteur' => 'Modifica l’autore', |
|
| 18 | - 'admin_modifier_breve' => 'Modifica la breve', |
|
| 19 | - 'admin_modifier_mot' => 'Modifica la parola chiave', |
|
| 20 | - 'admin_modifier_rubrique' => 'Modifica la rubrica', |
|
| 21 | - 'admin_recalculer' => 'Rigenera la pagina', |
|
| 22 | - 'afficher_calendrier' => 'Mostra il calendario', |
|
| 23 | - 'afficher_trad' => 'visualizzare le traduzioni', |
|
| 24 | - 'alerte_maj_impossible' => '<b>Attenzione!</b> L’aggiornamento del database SQL alla versione @version@ è impossibile, forse a causa di un problema con i diritti di modifica nel database. Contattare il proprio fornitore di hosting.', |
|
| 25 | - 'alerte_modif_info_concourante' => 'ATTENZIONE: Questa informazione è stata modificata altrove. Il valore attuale è:', |
|
| 26 | - 'analyse_xml' => 'Analisi XML', |
|
| 27 | - 'annuler' => 'Annulla', |
|
| 28 | - 'antispam_champ_vide' => 'Si prega di lasciare vuoto questo campo:', |
|
| 29 | - 'articles_recents' => 'Articoli più recenti', |
|
| 30 | - 'attention_champ_mini_nb_caractères' => 'Attenzione! Minimo @nb@ caratteri', |
|
| 31 | - 'avis_1_erreur_saisie' => 'C’è un errore nell’input, verificare le informazioni.', |
|
| 32 | - 'avis_archive_incorrect' => 'il file archivio non è un file SPIP', |
|
| 33 | - 'avis_archive_invalide' => 'il file archivio non è valido', |
|
| 34 | - 'avis_attention' => 'ATTENZIONE!', |
|
| 35 | - 'avis_champ_incorrect_type_objet' => 'Nome di campo errato @name@ per oggetto di tipo @type@', |
|
| 36 | - 'avis_colonne_inexistante' => 'La colonna @col@ non esiste', |
|
| 37 | - 'avis_erreur' => 'Errore: vedi sopra', |
|
| 38 | - 'avis_erreur_connexion' => 'Errore di connessione', |
|
| 39 | - 'avis_erreur_cookie' => 'problema di cookie', |
|
| 40 | - 'avis_erreur_fonction_contexte' => 'Errore di programmazione. Questa funzione non deve essere chiamata in questo contesto.', |
|
| 41 | - 'avis_erreur_mysql' => 'Errore SQL ', |
|
| 42 | - 'avis_erreur_sauvegarde' => 'Errore nel salvataggio (@type@ @id_objet@)! ', |
|
| 43 | - 'avis_erreur_visiteur' => 'Problema di accesso all’area riservata', |
|
| 44 | - 'avis_nb_erreurs_saisie' => 'Ci sono @nb@ errori nell’input, verificare le informazioni.', |
|
| 12 | + // A |
|
| 13 | + 'access_interface_graphique' => 'Ritorna all’interfaccia grafica completa', |
|
| 14 | + 'access_mode_texte' => 'Visualizza l’interfaccia testuale semplificata', |
|
| 15 | + 'admin_debug' => 'debug', |
|
| 16 | + 'admin_modifier_article' => 'Modifica l’articolo', |
|
| 17 | + 'admin_modifier_auteur' => 'Modifica l’autore', |
|
| 18 | + 'admin_modifier_breve' => 'Modifica la breve', |
|
| 19 | + 'admin_modifier_mot' => 'Modifica la parola chiave', |
|
| 20 | + 'admin_modifier_rubrique' => 'Modifica la rubrica', |
|
| 21 | + 'admin_recalculer' => 'Rigenera la pagina', |
|
| 22 | + 'afficher_calendrier' => 'Mostra il calendario', |
|
| 23 | + 'afficher_trad' => 'visualizzare le traduzioni', |
|
| 24 | + 'alerte_maj_impossible' => '<b>Attenzione!</b> L’aggiornamento del database SQL alla versione @version@ è impossibile, forse a causa di un problema con i diritti di modifica nel database. Contattare il proprio fornitore di hosting.', |
|
| 25 | + 'alerte_modif_info_concourante' => 'ATTENZIONE: Questa informazione è stata modificata altrove. Il valore attuale è:', |
|
| 26 | + 'analyse_xml' => 'Analisi XML', |
|
| 27 | + 'annuler' => 'Annulla', |
|
| 28 | + 'antispam_champ_vide' => 'Si prega di lasciare vuoto questo campo:', |
|
| 29 | + 'articles_recents' => 'Articoli più recenti', |
|
| 30 | + 'attention_champ_mini_nb_caractères' => 'Attenzione! Minimo @nb@ caratteri', |
|
| 31 | + 'avis_1_erreur_saisie' => 'C’è un errore nell’input, verificare le informazioni.', |
|
| 32 | + 'avis_archive_incorrect' => 'il file archivio non è un file SPIP', |
|
| 33 | + 'avis_archive_invalide' => 'il file archivio non è valido', |
|
| 34 | + 'avis_attention' => 'ATTENZIONE!', |
|
| 35 | + 'avis_champ_incorrect_type_objet' => 'Nome di campo errato @name@ per oggetto di tipo @type@', |
|
| 36 | + 'avis_colonne_inexistante' => 'La colonna @col@ non esiste', |
|
| 37 | + 'avis_erreur' => 'Errore: vedi sopra', |
|
| 38 | + 'avis_erreur_connexion' => 'Errore di connessione', |
|
| 39 | + 'avis_erreur_cookie' => 'problema di cookie', |
|
| 40 | + 'avis_erreur_fonction_contexte' => 'Errore di programmazione. Questa funzione non deve essere chiamata in questo contesto.', |
|
| 41 | + 'avis_erreur_mysql' => 'Errore SQL ', |
|
| 42 | + 'avis_erreur_sauvegarde' => 'Errore nel salvataggio (@type@ @id_objet@)! ', |
|
| 43 | + 'avis_erreur_visiteur' => 'Problema di accesso all’area riservata', |
|
| 44 | + 'avis_nb_erreurs_saisie' => 'Ci sono @nb@ errori nell’input, verificare le informazioni.', |
|
| 45 | 45 | |
| 46 | - // B |
|
| 47 | - 'barre_a_accent_grave' => 'Inserire una A maiscola con accento grave', |
|
| 48 | - 'barre_aide' => 'Utilizzare le scorciatoie tipografiche di SPIP per migliorare l\\’impaginazione del testo', |
|
| 49 | - 'barre_e_accent_aigu' => 'Inserire una E maiscola con accento acuto', |
|
| 50 | - 'barre_eo' => 'Inserire una E nell’O', |
|
| 51 | - 'barre_eo_maj' => 'Inserire una E nell’O maiuscola', |
|
| 52 | - 'barre_euro' => 'Inserire il simbolo €', |
|
| 53 | - 'barre_gras' => 'Formattare in {{grassetto}}', |
|
| 54 | - 'barre_guillemets' => 'Porre il testo fra « virgolette basse francesi »', |
|
| 55 | - 'barre_guillemets_simples' => 'Porre il testo fra „virgolette“', |
|
| 56 | - 'barre_intertitre' => 'Trasformare in {{{titolo di paragrafo}}}', |
|
| 57 | - 'barre_italic' => 'Formattare in {corsivo}', |
|
| 58 | - 'barre_lien' => 'Trasformare in un [link ipertestuale->http://...]', |
|
| 59 | - 'barre_lien_input' => 'Indicare l’indirizzo del link (è possibile indicare l’indirizzo Web come http://www.ilmiosito.com o semplicemente indicare il numero di un singolo articolo).', |
|
| 60 | - 'barre_note' => 'Trasformare in [[Nota a fondo pagina]]', |
|
| 61 | - 'barre_paragraphe' => 'Crea un paragrafo', |
|
| 62 | - 'barre_quote' => '<quote>Citare un messaggio</quote>', |
|
| 63 | - 'bouton_changer' => 'Cambia', |
|
| 64 | - 'bouton_chercher' => 'Cerca', |
|
| 65 | - 'bouton_choisir' => 'Scegli', |
|
| 66 | - 'bouton_deplacer' => 'Sposta', |
|
| 67 | - 'bouton_download' => 'Download', |
|
| 68 | - 'bouton_enregistrer' => 'Salva', |
|
| 69 | - 'bouton_radio_desactiver_messagerie_interne' => 'Disattiva la messaggistica interna', |
|
| 70 | - 'bouton_radio_envoi_annonces' => 'Invia gli annunci editoriali', |
|
| 71 | - 'bouton_radio_non_envoi_annonces' => 'Non inviare annunci', |
|
| 72 | - 'bouton_radio_non_envoi_liste_nouveautes' => 'Non inviare l’elenco delle novità', |
|
| 73 | - 'bouton_recharger_page' => 'ricaricare questa pagina', |
|
| 74 | - 'bouton_telecharger' => 'Upload', |
|
| 75 | - 'bouton_upload' => 'Upload', |
|
| 76 | - 'bouton_valider' => 'Invia', |
|
| 46 | + // B |
|
| 47 | + 'barre_a_accent_grave' => 'Inserire una A maiscola con accento grave', |
|
| 48 | + 'barre_aide' => 'Utilizzare le scorciatoie tipografiche di SPIP per migliorare l\\’impaginazione del testo', |
|
| 49 | + 'barre_e_accent_aigu' => 'Inserire una E maiscola con accento acuto', |
|
| 50 | + 'barre_eo' => 'Inserire una E nell’O', |
|
| 51 | + 'barre_eo_maj' => 'Inserire una E nell’O maiuscola', |
|
| 52 | + 'barre_euro' => 'Inserire il simbolo €', |
|
| 53 | + 'barre_gras' => 'Formattare in {{grassetto}}', |
|
| 54 | + 'barre_guillemets' => 'Porre il testo fra « virgolette basse francesi »', |
|
| 55 | + 'barre_guillemets_simples' => 'Porre il testo fra „virgolette“', |
|
| 56 | + 'barre_intertitre' => 'Trasformare in {{{titolo di paragrafo}}}', |
|
| 57 | + 'barre_italic' => 'Formattare in {corsivo}', |
|
| 58 | + 'barre_lien' => 'Trasformare in un [link ipertestuale->http://...]', |
|
| 59 | + 'barre_lien_input' => 'Indicare l’indirizzo del link (è possibile indicare l’indirizzo Web come http://www.ilmiosito.com o semplicemente indicare il numero di un singolo articolo).', |
|
| 60 | + 'barre_note' => 'Trasformare in [[Nota a fondo pagina]]', |
|
| 61 | + 'barre_paragraphe' => 'Crea un paragrafo', |
|
| 62 | + 'barre_quote' => '<quote>Citare un messaggio</quote>', |
|
| 63 | + 'bouton_changer' => 'Cambia', |
|
| 64 | + 'bouton_chercher' => 'Cerca', |
|
| 65 | + 'bouton_choisir' => 'Scegli', |
|
| 66 | + 'bouton_deplacer' => 'Sposta', |
|
| 67 | + 'bouton_download' => 'Download', |
|
| 68 | + 'bouton_enregistrer' => 'Salva', |
|
| 69 | + 'bouton_radio_desactiver_messagerie_interne' => 'Disattiva la messaggistica interna', |
|
| 70 | + 'bouton_radio_envoi_annonces' => 'Invia gli annunci editoriali', |
|
| 71 | + 'bouton_radio_non_envoi_annonces' => 'Non inviare annunci', |
|
| 72 | + 'bouton_radio_non_envoi_liste_nouveautes' => 'Non inviare l’elenco delle novità', |
|
| 73 | + 'bouton_recharger_page' => 'ricaricare questa pagina', |
|
| 74 | + 'bouton_telecharger' => 'Upload', |
|
| 75 | + 'bouton_upload' => 'Upload', |
|
| 76 | + 'bouton_valider' => 'Invia', |
|
| 77 | 77 | |
| 78 | - // C |
|
| 79 | - 'cal_apresmidi' => 'pomeriggio', |
|
| 80 | - 'cal_jour_entier' => 'giorno intero', |
|
| 81 | - 'cal_matin' => 'mattina', |
|
| 82 | - 'cal_par_jour' => 'calendario giornaliero', |
|
| 83 | - 'cal_par_mois' => 'calendario mensile', |
|
| 84 | - 'cal_par_semaine' => 'calendario settimanale', |
|
| 85 | - 'choix_couleur_interface' => 'colore', |
|
| 86 | - 'choix_interface' => 'scelta dell’interfaccia', |
|
| 87 | - 'colonne' => 'Colonna', |
|
| 88 | - 'confirm_changer_statut' => 'Attenzione, è stato chiesto di modificare lo status di questo elemento. Continuare?', |
|
| 89 | - 'correcte' => 'corretto', |
|
| 78 | + // C |
|
| 79 | + 'cal_apresmidi' => 'pomeriggio', |
|
| 80 | + 'cal_jour_entier' => 'giorno intero', |
|
| 81 | + 'cal_matin' => 'mattina', |
|
| 82 | + 'cal_par_jour' => 'calendario giornaliero', |
|
| 83 | + 'cal_par_mois' => 'calendario mensile', |
|
| 84 | + 'cal_par_semaine' => 'calendario settimanale', |
|
| 85 | + 'choix_couleur_interface' => 'colore', |
|
| 86 | + 'choix_interface' => 'scelta dell’interfaccia', |
|
| 87 | + 'colonne' => 'Colonna', |
|
| 88 | + 'confirm_changer_statut' => 'Attenzione, è stato chiesto di modificare lo status di questo elemento. Continuare?', |
|
| 89 | + 'correcte' => 'corretto', |
|
| 90 | 90 | |
| 91 | - // D |
|
| 92 | - 'date_aujourdhui' => 'oggi', |
|
| 93 | - 'date_avant_jc' => 'a.C.', |
|
| 94 | - 'date_dans' => 'tra @delai@', |
|
| 95 | - 'date_de_mois_1' => '@j@ gennaio', |
|
| 96 | - 'date_de_mois_10' => '@j@ ottobre', |
|
| 97 | - 'date_de_mois_11' => '@j@ novembre', |
|
| 98 | - 'date_de_mois_12' => '@j@ dicembre', |
|
| 99 | - 'date_de_mois_2' => '@j@ febbraio', |
|
| 100 | - 'date_de_mois_3' => '@j@ marzo', |
|
| 101 | - 'date_de_mois_4' => '@j@ aprile', |
|
| 102 | - 'date_de_mois_5' => '@j@ maggio', |
|
| 103 | - 'date_de_mois_6' => '@j@ giugno', |
|
| 104 | - 'date_de_mois_7' => '@j@ luglio', |
|
| 105 | - 'date_de_mois_8' => '@j@ agosto', |
|
| 106 | - 'date_de_mois_9' => '@j@ settembre', |
|
| 107 | - 'date_demain' => 'domani', |
|
| 108 | - 'date_fmt_heures_minutes' => '@h@:@m@', |
|
| 109 | - 'date_fmt_heures_minutes_court' => '@h@h@m@', |
|
| 110 | - 'date_fmt_jour' => '@nomjour@ @jour@', |
|
| 111 | - 'date_fmt_jour_heure' => '@jour@ ore @heure@', |
|
| 112 | - 'date_fmt_jour_heure_debut_fin' => 'Il @jour@ dalle @heure_debut@ alle @heure_fin@', |
|
| 113 | - 'date_fmt_jour_heure_debut_fin_abbr' => 'Il @dtstart@@jour@ dalle @heure_debut@@dtabbr@ alle @dtstart@@heure_fin@@dtend@', |
|
| 114 | - 'date_fmt_jour_mois' => '@jourmois@', |
|
| 115 | - 'date_fmt_jour_mois_annee' => '@jourmois@ @annee@', |
|
| 116 | - 'date_fmt_mois_annee' => '@nommois@ @annee@', |
|
| 117 | - 'date_fmt_nomjour' => '@nomjour@ @date@', |
|
| 118 | - 'date_fmt_nomjour_date' => 'il @nomjour@ @date@', |
|
| 119 | - 'date_fmt_periode' => 'Dal @date_debut@ al @date_fin@', |
|
| 120 | - 'date_fmt_periode_abbr' => 'Dal @dtart@@date_debut@@dtabbr@ al @dtend@@date_fin@@dtabbr@', |
|
| 121 | - 'date_fmt_periode_from' => 'Dal', |
|
| 122 | - 'date_fmt_periode_to' => 'a', |
|
| 123 | - 'date_fmt_saison_annee' => '@saison@ @annee@', |
|
| 124 | - 'date_heures' => 'ore', |
|
| 125 | - 'date_hier' => 'ieri', |
|
| 126 | - 'date_il_y_a' => '@delai@ fa', |
|
| 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' => 'domenica', |
|
| 159 | - 'date_jour_1_abbr' => 'dom', |
|
| 160 | - 'date_jour_1_initiale' => 'd', |
|
| 161 | - 'date_jour_2' => 'lunedì', |
|
| 162 | - 'date_jour_2_abbr' => 'lun', |
|
| 163 | - 'date_jour_2_initiale' => 'l', |
|
| 164 | - 'date_jour_3' => 'martedì', |
|
| 165 | - 'date_jour_3_abbr' => 'mar', |
|
| 166 | - 'date_jour_3_initiale' => 'm', |
|
| 167 | - 'date_jour_4' => 'mercoledì', |
|
| 168 | - 'date_jour_4_abbr' => 'mer', |
|
| 169 | - 'date_jour_4_initiale' => 'm', |
|
| 170 | - 'date_jour_5' => 'giovedì', |
|
| 171 | - 'date_jour_5_abbr' => 'giov', |
|
| 172 | - 'date_jour_5_initiale' => 'g', |
|
| 173 | - 'date_jour_6' => 'venerdì', |
|
| 174 | - 'date_jour_6_abbr' => 'ven', |
|
| 175 | - 'date_jour_6_initiale' => 'v', |
|
| 176 | - 'date_jour_7' => 'sabato', |
|
| 177 | - 'date_jour_7_abbr' => 'sab', |
|
| 178 | - 'date_jour_7_initiale' => 's', |
|
| 179 | - 'date_jours' => 'giorni', |
|
| 180 | - 'date_minutes' => 'minuti', |
|
| 181 | - 'date_mois' => 'mesi', |
|
| 182 | - 'date_mois_1' => 'Gennaio', |
|
| 183 | - 'date_mois_10' => 'Ottobre', |
|
| 184 | - 'date_mois_10_abbr' => 'ott', |
|
| 185 | - 'date_mois_11' => 'Novembre', |
|
| 186 | - 'date_mois_11_abbr' => 'nov', |
|
| 187 | - 'date_mois_12' => 'Dicembre', |
|
| 188 | - 'date_mois_12_abbr' => 'dic', |
|
| 189 | - 'date_mois_1_abbr' => 'gen', |
|
| 190 | - 'date_mois_2' => 'Febbraio', |
|
| 191 | - 'date_mois_2_abbr' => 'feb', |
|
| 192 | - 'date_mois_3' => 'Marzo', |
|
| 193 | - 'date_mois_3_abbr' => 'mar', |
|
| 194 | - 'date_mois_4' => 'Aprile', |
|
| 195 | - 'date_mois_4_abbr' => 'apr', |
|
| 196 | - 'date_mois_5' => 'Maggio', |
|
| 197 | - 'date_mois_5_abbr' => 'mag', |
|
| 198 | - 'date_mois_6' => 'Giugno', |
|
| 199 | - 'date_mois_6_abbr' => 'giu', |
|
| 200 | - 'date_mois_7' => 'Luglio', |
|
| 201 | - 'date_mois_7_abbr' => 'lug', |
|
| 202 | - 'date_mois_8' => 'Agosto', |
|
| 203 | - 'date_mois_8_abbr' => 'ago', |
|
| 204 | - 'date_mois_9' => 'Settembre', |
|
| 205 | - 'date_mois_9_abbr' => 'set', |
|
| 206 | - 'date_saison_1' => 'inverno', |
|
| 207 | - 'date_saison_2' => 'primavera', |
|
| 208 | - 'date_saison_3' => 'estate', |
|
| 209 | - 'date_saison_4' => 'autunno', |
|
| 210 | - 'date_secondes' => 'secondi', |
|
| 211 | - 'date_semaines' => 'settimane', |
|
| 212 | - 'date_un_mois' => 'mese', |
|
| 213 | - 'date_une_heure' => 'ora', |
|
| 214 | - 'date_une_minute' => 'minuto', |
|
| 215 | - 'date_une_seconde' => 'secondo', |
|
| 216 | - 'date_une_semaine' => 'settimana', |
|
| 217 | - 'dirs_commencer' => ' per iniziare realmente l’installazione', |
|
| 218 | - 'dirs_preliminaire' => 'Prima di iniziare: <b>impostare i diritti di accesso</b>', |
|
| 219 | - 'dirs_probleme_droits' => 'Problema nei diritti di accesso', |
|
| 220 | - 'dirs_repertoires_absents' => '<p><b>Le seguenti cartelle non sono state trovate: </b></p><ul>@bad_dirs@.</ul> |
|
| 91 | + // D |
|
| 92 | + 'date_aujourdhui' => 'oggi', |
|
| 93 | + 'date_avant_jc' => 'a.C.', |
|
| 94 | + 'date_dans' => 'tra @delai@', |
|
| 95 | + 'date_de_mois_1' => '@j@ gennaio', |
|
| 96 | + 'date_de_mois_10' => '@j@ ottobre', |
|
| 97 | + 'date_de_mois_11' => '@j@ novembre', |
|
| 98 | + 'date_de_mois_12' => '@j@ dicembre', |
|
| 99 | + 'date_de_mois_2' => '@j@ febbraio', |
|
| 100 | + 'date_de_mois_3' => '@j@ marzo', |
|
| 101 | + 'date_de_mois_4' => '@j@ aprile', |
|
| 102 | + 'date_de_mois_5' => '@j@ maggio', |
|
| 103 | + 'date_de_mois_6' => '@j@ giugno', |
|
| 104 | + 'date_de_mois_7' => '@j@ luglio', |
|
| 105 | + 'date_de_mois_8' => '@j@ agosto', |
|
| 106 | + 'date_de_mois_9' => '@j@ settembre', |
|
| 107 | + 'date_demain' => 'domani', |
|
| 108 | + 'date_fmt_heures_minutes' => '@h@:@m@', |
|
| 109 | + 'date_fmt_heures_minutes_court' => '@h@h@m@', |
|
| 110 | + 'date_fmt_jour' => '@nomjour@ @jour@', |
|
| 111 | + 'date_fmt_jour_heure' => '@jour@ ore @heure@', |
|
| 112 | + 'date_fmt_jour_heure_debut_fin' => 'Il @jour@ dalle @heure_debut@ alle @heure_fin@', |
|
| 113 | + 'date_fmt_jour_heure_debut_fin_abbr' => 'Il @dtstart@@jour@ dalle @heure_debut@@dtabbr@ alle @dtstart@@heure_fin@@dtend@', |
|
| 114 | + 'date_fmt_jour_mois' => '@jourmois@', |
|
| 115 | + 'date_fmt_jour_mois_annee' => '@jourmois@ @annee@', |
|
| 116 | + 'date_fmt_mois_annee' => '@nommois@ @annee@', |
|
| 117 | + 'date_fmt_nomjour' => '@nomjour@ @date@', |
|
| 118 | + 'date_fmt_nomjour_date' => 'il @nomjour@ @date@', |
|
| 119 | + 'date_fmt_periode' => 'Dal @date_debut@ al @date_fin@', |
|
| 120 | + 'date_fmt_periode_abbr' => 'Dal @dtart@@date_debut@@dtabbr@ al @dtend@@date_fin@@dtabbr@', |
|
| 121 | + 'date_fmt_periode_from' => 'Dal', |
|
| 122 | + 'date_fmt_periode_to' => 'a', |
|
| 123 | + 'date_fmt_saison_annee' => '@saison@ @annee@', |
|
| 124 | + 'date_heures' => 'ore', |
|
| 125 | + 'date_hier' => 'ieri', |
|
| 126 | + 'date_il_y_a' => '@delai@ fa', |
|
| 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' => 'domenica', |
|
| 159 | + 'date_jour_1_abbr' => 'dom', |
|
| 160 | + 'date_jour_1_initiale' => 'd', |
|
| 161 | + 'date_jour_2' => 'lunedì', |
|
| 162 | + 'date_jour_2_abbr' => 'lun', |
|
| 163 | + 'date_jour_2_initiale' => 'l', |
|
| 164 | + 'date_jour_3' => 'martedì', |
|
| 165 | + 'date_jour_3_abbr' => 'mar', |
|
| 166 | + 'date_jour_3_initiale' => 'm', |
|
| 167 | + 'date_jour_4' => 'mercoledì', |
|
| 168 | + 'date_jour_4_abbr' => 'mer', |
|
| 169 | + 'date_jour_4_initiale' => 'm', |
|
| 170 | + 'date_jour_5' => 'giovedì', |
|
| 171 | + 'date_jour_5_abbr' => 'giov', |
|
| 172 | + 'date_jour_5_initiale' => 'g', |
|
| 173 | + 'date_jour_6' => 'venerdì', |
|
| 174 | + 'date_jour_6_abbr' => 'ven', |
|
| 175 | + 'date_jour_6_initiale' => 'v', |
|
| 176 | + 'date_jour_7' => 'sabato', |
|
| 177 | + 'date_jour_7_abbr' => 'sab', |
|
| 178 | + 'date_jour_7_initiale' => 's', |
|
| 179 | + 'date_jours' => 'giorni', |
|
| 180 | + 'date_minutes' => 'minuti', |
|
| 181 | + 'date_mois' => 'mesi', |
|
| 182 | + 'date_mois_1' => 'Gennaio', |
|
| 183 | + 'date_mois_10' => 'Ottobre', |
|
| 184 | + 'date_mois_10_abbr' => 'ott', |
|
| 185 | + 'date_mois_11' => 'Novembre', |
|
| 186 | + 'date_mois_11_abbr' => 'nov', |
|
| 187 | + 'date_mois_12' => 'Dicembre', |
|
| 188 | + 'date_mois_12_abbr' => 'dic', |
|
| 189 | + 'date_mois_1_abbr' => 'gen', |
|
| 190 | + 'date_mois_2' => 'Febbraio', |
|
| 191 | + 'date_mois_2_abbr' => 'feb', |
|
| 192 | + 'date_mois_3' => 'Marzo', |
|
| 193 | + 'date_mois_3_abbr' => 'mar', |
|
| 194 | + 'date_mois_4' => 'Aprile', |
|
| 195 | + 'date_mois_4_abbr' => 'apr', |
|
| 196 | + 'date_mois_5' => 'Maggio', |
|
| 197 | + 'date_mois_5_abbr' => 'mag', |
|
| 198 | + 'date_mois_6' => 'Giugno', |
|
| 199 | + 'date_mois_6_abbr' => 'giu', |
|
| 200 | + 'date_mois_7' => 'Luglio', |
|
| 201 | + 'date_mois_7_abbr' => 'lug', |
|
| 202 | + 'date_mois_8' => 'Agosto', |
|
| 203 | + 'date_mois_8_abbr' => 'ago', |
|
| 204 | + 'date_mois_9' => 'Settembre', |
|
| 205 | + 'date_mois_9_abbr' => 'set', |
|
| 206 | + 'date_saison_1' => 'inverno', |
|
| 207 | + 'date_saison_2' => 'primavera', |
|
| 208 | + 'date_saison_3' => 'estate', |
|
| 209 | + 'date_saison_4' => 'autunno', |
|
| 210 | + 'date_secondes' => 'secondi', |
|
| 211 | + 'date_semaines' => 'settimane', |
|
| 212 | + 'date_un_mois' => 'mese', |
|
| 213 | + 'date_une_heure' => 'ora', |
|
| 214 | + 'date_une_minute' => 'minuto', |
|
| 215 | + 'date_une_seconde' => 'secondo', |
|
| 216 | + 'date_une_semaine' => 'settimana', |
|
| 217 | + 'dirs_commencer' => ' per iniziare realmente l’installazione', |
|
| 218 | + 'dirs_preliminaire' => 'Prima di iniziare: <b>impostare i diritti di accesso</b>', |
|
| 219 | + 'dirs_probleme_droits' => 'Problema nei diritti di accesso', |
|
| 220 | + 'dirs_repertoires_absents' => '<p><b>Le seguenti cartelle non sono state trovate: </b></p><ul>@bad_dirs@.</ul> |
|
| 221 | 221 | <p>Probabilmente ciò è dovuto a un’errata formattazione delle lettere maiuscole o minuscole. |
| 222 | 222 | Verificare che le maiuscole e le minuscole delle cartelle coincidano con quelle visualizzate |
| 223 | 223 | qui sopra; se non è così, rinominare le cartelle utilizzando il software FTP.</p> |
| 224 | 224 | <p>Una volta effettuata questa correzione, si potrà', |
| 225 | - 'dirs_repertoires_suivants' => '<p><b>Le seguenti cartelle non sono accessibili in scrittura:</b></p> <ul>@bad_dirs@</ul> |
|
| 225 | + 'dirs_repertoires_suivants' => '<p><b>Le seguenti cartelle non sono accessibili in scrittura:</b></p> <ul>@bad_dirs@</ul> |
|
| 226 | 226 | <p>Per risolvere il problema, utilizzare un client FTP per impostare i diritti di accesso |
| 227 | 227 | di ciascuna di queste cartelle. La procedura è spiegata in dettaglio nella guida d’installazione.</p> |
| 228 | 228 | <p>Una volta attribuiti i permessi, si potrà ', |
| 229 | - 'double_occurrence' => 'Doppia occorrenza', |
|
| 229 | + 'double_occurrence' => 'Doppia occorrenza', |
|
| 230 | 230 | |
| 231 | - // E |
|
| 232 | - 'en_cours' => 'in corso', |
|
| 233 | - 'envoi_via_le_site' => 'Invio tramite il sito', |
|
| 234 | - 'erreur' => 'Errore', |
|
| 235 | - 'erreur_balise_non_fermee' => 'ultimo tag non chiuso:', |
|
| 236 | - 'erreur_technique_ajaxform' => 'Ops. Un’errore inaspettato non ti consente di inviare il form. Puoi provare di nuovo.', |
|
| 237 | - 'erreur_technique_enregistrement_champs' => 'Un errore tecnico ha impedito la corretta registrazione del campo @champs@.', |
|
| 238 | - 'erreur_technique_enregistrement_impossible' => 'Un errore tecnico ha impedito la registrazione.', |
|
| 239 | - 'erreur_texte' => 'errore/i', |
|
| 240 | - 'etape' => 'Fase', |
|
| 231 | + // E |
|
| 232 | + 'en_cours' => 'in corso', |
|
| 233 | + 'envoi_via_le_site' => 'Invio tramite il sito', |
|
| 234 | + 'erreur' => 'Errore', |
|
| 235 | + 'erreur_balise_non_fermee' => 'ultimo tag non chiuso:', |
|
| 236 | + 'erreur_technique_ajaxform' => 'Ops. Un’errore inaspettato non ti consente di inviare il form. Puoi provare di nuovo.', |
|
| 237 | + 'erreur_technique_enregistrement_champs' => 'Un errore tecnico ha impedito la corretta registrazione del campo @champs@.', |
|
| 238 | + 'erreur_technique_enregistrement_impossible' => 'Un errore tecnico ha impedito la registrazione.', |
|
| 239 | + 'erreur_texte' => 'errore/i', |
|
| 240 | + 'etape' => 'Fase', |
|
| 241 | 241 | |
| 242 | - // F |
|
| 243 | - 'fichier_introuvable' => 'File @fichier@ non trovato', |
|
| 244 | - 'fonction_introuvable' => 'Funzione @fonction@() non trovata', |
|
| 245 | - 'form_auteur_confirmation' => 'Per cortesia conferma il tuo indirizzo email', |
|
| 246 | - 'form_auteur_email_modifie' => 'Il tuo indirizzo email è stato modificato', |
|
| 247 | - 'form_auteur_envoi_mail_confirmation' => 'Una email di conferma è stata inviata a @email@. È necessario visitare l’URL indicata nel messaggio per convalidare il tuo indirizzo email.', |
|
| 248 | - 'form_auteur_mail_confirmation' => 'Ciao, |
|
| 242 | + // F |
|
| 243 | + 'fichier_introuvable' => 'File @fichier@ non trovato', |
|
| 244 | + 'fonction_introuvable' => 'Funzione @fonction@() non trovata', |
|
| 245 | + 'form_auteur_confirmation' => 'Per cortesia conferma il tuo indirizzo email', |
|
| 246 | + 'form_auteur_email_modifie' => 'Il tuo indirizzo email è stato modificato', |
|
| 247 | + 'form_auteur_envoi_mail_confirmation' => 'Una email di conferma è stata inviata a @email@. È necessario visitare l’URL indicata nel messaggio per convalidare il tuo indirizzo email.', |
|
| 248 | + 'form_auteur_mail_confirmation' => 'Ciao, |
|
| 249 | 249 | |
| 250 | 250 | Hai chiesto di modificare l’indirizzo email. |
| 251 | 251 | Per confermare la tua nuova email, devi connetterti all’ |
@@ -253,346 +253,346 @@ discard block |
||
| 253 | 253 | |
| 254 | 254 | @url@ |
| 255 | 255 | ', |
| 256 | - 'form_deja_inscrit' => 'Sei già iscritto.', |
|
| 257 | - 'form_email_non_valide' => 'L’indirizzo email non è valido.', |
|
| 258 | - 'form_forum_access_refuse' => 'Non hai più accesso a questo sito.', |
|
| 259 | - 'form_forum_bonjour' => 'Buongiorno @nom@,', |
|
| 260 | - 'form_forum_confirmer_email' => 'Puoi confermare il tuo indirizzo email,vai a questo indirizzo: @url_confirm@', |
|
| 261 | - 'form_forum_email_deja_enregistre' => 'Questo indirizzo email è già registrato, puoi dunque utilizzare la tua password abituale.', |
|
| 262 | - 'form_forum_identifiant_mail' => 'Il nuovo codice identificativo (ID) ti è stato appena inviato tramite email.', |
|
| 263 | - 'form_forum_identifiants' => 'Dati personali', |
|
| 264 | - 'form_forum_indiquer_nom_email' => 'Indica qui nome e indirizzo email. L’ID personale ti verrà recapitato tramite email a breve.', |
|
| 265 | - 'form_forum_login' => 'login:', |
|
| 266 | - 'form_forum_message_auto' => '(questo è un messaggio generato automaticamente)', |
|
| 267 | - 'form_forum_pass' => 'password:', |
|
| 268 | - 'form_forum_probleme_mail' => 'Problema di posta: l’ID non può essere inviato.', |
|
| 269 | - 'form_forum_voici1' => 'Ecco i dati per poter partecipare ai forum |
|
| 256 | + 'form_deja_inscrit' => 'Sei già iscritto.', |
|
| 257 | + 'form_email_non_valide' => 'L’indirizzo email non è valido.', |
|
| 258 | + 'form_forum_access_refuse' => 'Non hai più accesso a questo sito.', |
|
| 259 | + 'form_forum_bonjour' => 'Buongiorno @nom@,', |
|
| 260 | + 'form_forum_confirmer_email' => 'Puoi confermare il tuo indirizzo email,vai a questo indirizzo: @url_confirm@', |
|
| 261 | + 'form_forum_email_deja_enregistre' => 'Questo indirizzo email è già registrato, puoi dunque utilizzare la tua password abituale.', |
|
| 262 | + 'form_forum_identifiant_mail' => 'Il nuovo codice identificativo (ID) ti è stato appena inviato tramite email.', |
|
| 263 | + 'form_forum_identifiants' => 'Dati personali', |
|
| 264 | + 'form_forum_indiquer_nom_email' => 'Indica qui nome e indirizzo email. L’ID personale ti verrà recapitato tramite email a breve.', |
|
| 265 | + 'form_forum_login' => 'login:', |
|
| 266 | + 'form_forum_message_auto' => '(questo è un messaggio generato automaticamente)', |
|
| 267 | + 'form_forum_pass' => 'password:', |
|
| 268 | + 'form_forum_probleme_mail' => 'Problema di posta: l’ID non può essere inviato.', |
|
| 269 | + 'form_forum_voici1' => 'Ecco i dati per poter partecipare ai forum |
|
| 270 | 270 | del sito"@nom_site_spip@" (@adresse_site@):', |
| 271 | - 'form_forum_voici2' => 'Ecco i dati per poter proporre degli articoli sul sito |
|
| 271 | + 'form_forum_voici2' => 'Ecco i dati per poter proporre degli articoli sul sito |
|
| 272 | 272 | "@nom_site_spip@" (@adresse_login@):', |
| 273 | - 'form_indiquer_email' => 'Indica il tuo indirizzo email.', |
|
| 274 | - 'form_indiquer_nom' => 'Indica il tuo nome.', |
|
| 275 | - 'form_indiquer_nom_site' => 'Indica il nome del tuo sito.', |
|
| 276 | - 'form_pet_deja_enregistre' => 'Questo sito è già registrato', |
|
| 277 | - 'form_pet_signature_pasprise' => 'La tua adesione non è stata presa in considerazione.', |
|
| 278 | - 'form_prop_confirmer_envoi' => 'Conferma l’invio', |
|
| 279 | - 'form_prop_description' => 'Descrizione/commento', |
|
| 280 | - 'form_prop_enregistre' => 'La tua proposta è stata registrata ed apparirà on line dopo l’approvazione del responsabile del sito.', |
|
| 281 | - 'form_prop_envoyer' => 'Invia un messaggio', |
|
| 282 | - 'form_prop_indiquer_email' => 'Indica un indirizzo email valido', |
|
| 283 | - 'form_prop_indiquer_nom_site' => 'Indica il nome del sito.', |
|
| 284 | - 'form_prop_indiquer_sujet' => 'Indica un argomento', |
|
| 285 | - 'form_prop_message_envoye' => 'Messaggio inviato', |
|
| 286 | - 'form_prop_non_enregistre' => 'La tua proposta non è stata registrata.', |
|
| 287 | - 'form_prop_sujet' => 'Argomento', |
|
| 288 | - 'form_prop_url_site' => 'Indirizzo (URL) del sito', |
|
| 289 | - 'format_date_attendu' => 'Inserire una data nel formato gg/mm/aaaa.', |
|
| 290 | - 'format_date_incorrecte' => 'La data (o il suo formato) non è corretta', |
|
| 291 | - 'format_heure_attendu' => 'Inserire un’ora nel formato hh:mm.', |
|
| 292 | - 'format_heure_incorrecte' => 'L’ora (o il suo formato) non è corretta', |
|
| 293 | - 'forum_non_inscrit' => 'Non sei iscritto, oppure l’indirizzo o la password inseriti non sono corretti.', |
|
| 294 | - 'forum_par_auteur' => 'di @auteur@', |
|
| 295 | - 'forum_titre_erreur' => 'Errore...', |
|
| 273 | + 'form_indiquer_email' => 'Indica il tuo indirizzo email.', |
|
| 274 | + 'form_indiquer_nom' => 'Indica il tuo nome.', |
|
| 275 | + 'form_indiquer_nom_site' => 'Indica il nome del tuo sito.', |
|
| 276 | + 'form_pet_deja_enregistre' => 'Questo sito è già registrato', |
|
| 277 | + 'form_pet_signature_pasprise' => 'La tua adesione non è stata presa in considerazione.', |
|
| 278 | + 'form_prop_confirmer_envoi' => 'Conferma l’invio', |
|
| 279 | + 'form_prop_description' => 'Descrizione/commento', |
|
| 280 | + 'form_prop_enregistre' => 'La tua proposta è stata registrata ed apparirà on line dopo l’approvazione del responsabile del sito.', |
|
| 281 | + 'form_prop_envoyer' => 'Invia un messaggio', |
|
| 282 | + 'form_prop_indiquer_email' => 'Indica un indirizzo email valido', |
|
| 283 | + 'form_prop_indiquer_nom_site' => 'Indica il nome del sito.', |
|
| 284 | + 'form_prop_indiquer_sujet' => 'Indica un argomento', |
|
| 285 | + 'form_prop_message_envoye' => 'Messaggio inviato', |
|
| 286 | + 'form_prop_non_enregistre' => 'La tua proposta non è stata registrata.', |
|
| 287 | + 'form_prop_sujet' => 'Argomento', |
|
| 288 | + 'form_prop_url_site' => 'Indirizzo (URL) del sito', |
|
| 289 | + 'format_date_attendu' => 'Inserire una data nel formato gg/mm/aaaa.', |
|
| 290 | + 'format_date_incorrecte' => 'La data (o il suo formato) non è corretta', |
|
| 291 | + 'format_heure_attendu' => 'Inserire un’ora nel formato hh:mm.', |
|
| 292 | + 'format_heure_incorrecte' => 'L’ora (o il suo formato) non è corretta', |
|
| 293 | + 'forum_non_inscrit' => 'Non sei iscritto, oppure l’indirizzo o la password inseriti non sono corretti.', |
|
| 294 | + 'forum_par_auteur' => 'di @auteur@', |
|
| 295 | + 'forum_titre_erreur' => 'Errore...', |
|
| 296 | 296 | |
| 297 | - // I |
|
| 298 | - 'ical_texte_rss_articles' => 'Il file di "backend" degli articoli di questo sito si trova al seguente indirizzo:', |
|
| 299 | - 'ical_texte_rss_articles2' => 'È anche possibile ottenere un file di "backend" per gli articoli di una singola rubrica:', |
|
| 300 | - 'ical_texte_rss_breves' => 'Inoltre esiste un file per l’insieme delle brevi del sito. Precisando un numero di rubrica ci si può limitare alle brevi in essa contenute.', |
|
| 301 | - 'icone_a_suivre' => 'Pannello di controllo', |
|
| 302 | - 'icone_admin_site' => 'Amministrazione del sito', |
|
| 303 | - 'icone_agenda' => 'Agenda', |
|
| 304 | - 'icone_aide_ligne' => 'Guida in linea', |
|
| 305 | - 'icone_articles' => 'Articoli', |
|
| 306 | - 'icone_auteurs' => 'Autori', |
|
| 307 | - 'icone_brouteur' => 'Navigazione rapida', |
|
| 308 | - 'icone_configuration_site' => 'Configurazione del sito', |
|
| 309 | - 'icone_configurer_site' => 'Configura il sito', |
|
| 310 | - 'icone_creer_nouvel_auteur' => 'Crea un nuovo autore', |
|
| 311 | - 'icone_creer_rubrique' => 'Crea una rubrica', |
|
| 312 | - 'icone_creer_sous_rubrique' => 'Crea una sottorubrica', |
|
| 313 | - 'icone_deconnecter' => 'Esci', |
|
| 314 | - 'icone_discussions' => 'Discussioni', |
|
| 315 | - 'icone_doc_rubrique' => 'Documenti delle rubriche', |
|
| 316 | - 'icone_ecrire_article' => 'Scrivi un articolo', |
|
| 317 | - 'icone_edition_site' => 'Redazione del sito', |
|
| 318 | - 'icone_gestion_langues' => 'Gestione delle lingue', |
|
| 319 | - 'icone_informations_personnelles' => 'Dati personali', |
|
| 320 | - 'icone_interface_complet' => 'Interfaccia completa', |
|
| 321 | - 'icone_interface_simple' => 'Interfaccia semplificata', |
|
| 322 | - 'icone_maintenance_site' => 'Manutenzione tecnica', |
|
| 323 | - 'icone_messagerie_personnelle' => 'Messaggi personali', |
|
| 324 | - 'icone_repartition_debut' => 'Mostra la ripartizione dall’inizio', |
|
| 325 | - 'icone_rubriques' => 'Rubriche', |
|
| 326 | - 'icone_sauver_site' => 'Backup del sito', |
|
| 327 | - 'icone_site_entier' => 'Tutto il sito', |
|
| 328 | - 'icone_sites_references' => 'Siti repertoriati', |
|
| 329 | - 'icone_statistiques' => 'Statistiche del sito', |
|
| 330 | - 'icone_suivi_activite' => 'Monitorare l’attività del sito', |
|
| 331 | - 'icone_suivi_actualite' => 'Evoluzione del sito', |
|
| 332 | - 'icone_suivi_pettions' => 'Gestione delle petizioni', |
|
| 333 | - 'icone_suivi_revisions' => 'Modifiche agli articoli', |
|
| 334 | - 'icone_supprimer_document' => 'Elimina il documento', |
|
| 335 | - 'icone_supprimer_image' => 'Elimina l’immagine', |
|
| 336 | - 'icone_tous_articles' => 'Tutti i tuoi articoli', |
|
| 337 | - 'icone_tous_auteur' => 'Tutti gli autori', |
|
| 338 | - 'icone_tous_visiteur' => 'Tutti i visitatori', |
|
| 339 | - 'icone_visiter_site' => 'Visita il sito', |
|
| 340 | - 'icone_voir_en_ligne' => 'Vedi on line', |
|
| 341 | - 'img_indisponible' => 'immagine non disponibile', |
|
| 342 | - 'impossible' => 'impossibile', |
|
| 343 | - 'info_a_suivre' => 'PANNELLO DI CONTROLLO »', |
|
| 344 | - 'info_acces_interdit' => 'Accesso vietato', |
|
| 345 | - 'info_acces_refuse' => 'Accesso rifiutato', |
|
| 346 | - 'info_action' => 'Azione: @action@', |
|
| 347 | - 'info_administrer_rubriques' => 'Puoi amministrare questa rubrica e le relative sottorubriche', |
|
| 348 | - 'info_adresse_non_indiquee' => 'Non hai indicato l’indirizzo da testare!', |
|
| 349 | - 'info_aide' => 'AIUTO:', |
|
| 350 | - 'info_ajouter_mot' => 'Aggiungi questa parola', |
|
| 351 | - 'info_annonce' => 'ANNUNCIO', |
|
| 352 | - 'info_annonces_generales' => 'Annunci generali:', |
|
| 353 | - 'info_article_propose' => 'Articolo proposto', |
|
| 354 | - 'info_article_publie' => 'Articolo pubblicato', |
|
| 355 | - 'info_article_redaction' => 'Articolo in corso di redazione', |
|
| 356 | - 'info_article_refuse' => 'Articolo rifiutato', |
|
| 357 | - 'info_article_supprime' => 'Articolo eliminato', |
|
| 358 | - 'info_articles' => 'Articoli', |
|
| 359 | - 'info_articles_a_valider' => 'Articoli da convalidare', |
|
| 360 | - 'info_articles_nb' => '@nb@ articoli', |
|
| 361 | - 'info_articles_proposes' => 'Articoli proposti', |
|
| 362 | - 'info_articles_un' => '1 articolo', |
|
| 363 | - 'info_auteurs_nombre' => 'autore(i):', |
|
| 364 | - 'info_authentification_ftp' => 'Autenticazione (via FTP).', |
|
| 365 | - 'info_breves_2' => 'brevi', |
|
| 366 | - 'info_breves_nb' => '@nb@ notizie', |
|
| 367 | - 'info_breves_un' => '1 notizia', |
|
| 368 | - 'info_connexion_refusee' => 'Connessione rifiutata', |
|
| 369 | - 'info_contact_developpeur' => 'Contatta un programmatore.', |
|
| 370 | - 'info_contenance' => 'Questo sito contiene:', |
|
| 371 | - 'info_contribution' => 'contributi dei forum', |
|
| 372 | - 'info_copyright' => '@spip@ è un software libero distribuito @lien_gpl@.', |
|
| 373 | - 'info_copyright_doc' => 'Per maggiori informazioni, vedi il sito <a href="@spipnet@">@spipnet_affiche@</a>.', |
|
| 374 | - 'info_copyright_gpl' => 'sotto licenza GPL', |
|
| 375 | - 'info_cours_edition' => 'Articoli in fase di redazione', |
|
| 376 | - 'info_creer_repertoire' => 'Creare un file o una cartella chiamata:', |
|
| 377 | - 'info_creer_repertoire_2' => 'all’interno della sottocartella <b>@repertoire@</b>, poi:', |
|
| 378 | - 'info_creer_vignette' => 'creazione automatica dell’anteprima', |
|
| 379 | - 'info_creerdansrubrique_non_autorise' => 'Non si dispone di diritti sufficienti per creare contenuti in questa rubrica', |
|
| 380 | - 'info_deplier' => 'Espandi', |
|
| 381 | - 'info_descriptif_nombre' => 'descrizione(i):', |
|
| 382 | - 'info_description' => 'Descrizione:', |
|
| 383 | - 'info_description_2' => 'Descrizione:', |
|
| 384 | - 'info_dimension' => 'Dimensioni:', |
|
| 385 | - 'info_documents_nb' => '@nb@ documenti', |
|
| 386 | - 'info_documents_un' => '1 documento', |
|
| 387 | - 'info_ecire_message_prive' => 'Scrivi un messaggio privato', |
|
| 388 | - 'info_email_invalide' => 'Indirizzo email non valido.', |
|
| 389 | - 'info_en_cours_validation' => 'I tuoi articoli in corso di redazione', |
|
| 390 | - 'info_en_ligne' => 'Attualmente on line:', |
|
| 391 | - 'info_envoyer_message_prive' => 'Invia un messaggio privato a questo autore', |
|
| 392 | - 'info_erreur_requete' => 'Errore nella richiesta: ', |
|
| 393 | - 'info_erreur_squelette2' => 'Nessun modello di layout <b>@fichier@</b> trovato...', |
|
| 394 | - 'info_erreur_systeme' => 'Errore di sistema (errno @errsys@)', |
|
| 395 | - 'info_erreur_systeme2' => 'Il disco rigido potrebbe essere pieno o la base dati danneggiata.<br /> |
|
| 297 | + // I |
|
| 298 | + 'ical_texte_rss_articles' => 'Il file di "backend" degli articoli di questo sito si trova al seguente indirizzo:', |
|
| 299 | + 'ical_texte_rss_articles2' => 'È anche possibile ottenere un file di "backend" per gli articoli di una singola rubrica:', |
|
| 300 | + 'ical_texte_rss_breves' => 'Inoltre esiste un file per l’insieme delle brevi del sito. Precisando un numero di rubrica ci si può limitare alle brevi in essa contenute.', |
|
| 301 | + 'icone_a_suivre' => 'Pannello di controllo', |
|
| 302 | + 'icone_admin_site' => 'Amministrazione del sito', |
|
| 303 | + 'icone_agenda' => 'Agenda', |
|
| 304 | + 'icone_aide_ligne' => 'Guida in linea', |
|
| 305 | + 'icone_articles' => 'Articoli', |
|
| 306 | + 'icone_auteurs' => 'Autori', |
|
| 307 | + 'icone_brouteur' => 'Navigazione rapida', |
|
| 308 | + 'icone_configuration_site' => 'Configurazione del sito', |
|
| 309 | + 'icone_configurer_site' => 'Configura il sito', |
|
| 310 | + 'icone_creer_nouvel_auteur' => 'Crea un nuovo autore', |
|
| 311 | + 'icone_creer_rubrique' => 'Crea una rubrica', |
|
| 312 | + 'icone_creer_sous_rubrique' => 'Crea una sottorubrica', |
|
| 313 | + 'icone_deconnecter' => 'Esci', |
|
| 314 | + 'icone_discussions' => 'Discussioni', |
|
| 315 | + 'icone_doc_rubrique' => 'Documenti delle rubriche', |
|
| 316 | + 'icone_ecrire_article' => 'Scrivi un articolo', |
|
| 317 | + 'icone_edition_site' => 'Redazione del sito', |
|
| 318 | + 'icone_gestion_langues' => 'Gestione delle lingue', |
|
| 319 | + 'icone_informations_personnelles' => 'Dati personali', |
|
| 320 | + 'icone_interface_complet' => 'Interfaccia completa', |
|
| 321 | + 'icone_interface_simple' => 'Interfaccia semplificata', |
|
| 322 | + 'icone_maintenance_site' => 'Manutenzione tecnica', |
|
| 323 | + 'icone_messagerie_personnelle' => 'Messaggi personali', |
|
| 324 | + 'icone_repartition_debut' => 'Mostra la ripartizione dall’inizio', |
|
| 325 | + 'icone_rubriques' => 'Rubriche', |
|
| 326 | + 'icone_sauver_site' => 'Backup del sito', |
|
| 327 | + 'icone_site_entier' => 'Tutto il sito', |
|
| 328 | + 'icone_sites_references' => 'Siti repertoriati', |
|
| 329 | + 'icone_statistiques' => 'Statistiche del sito', |
|
| 330 | + 'icone_suivi_activite' => 'Monitorare l’attività del sito', |
|
| 331 | + 'icone_suivi_actualite' => 'Evoluzione del sito', |
|
| 332 | + 'icone_suivi_pettions' => 'Gestione delle petizioni', |
|
| 333 | + 'icone_suivi_revisions' => 'Modifiche agli articoli', |
|
| 334 | + 'icone_supprimer_document' => 'Elimina il documento', |
|
| 335 | + 'icone_supprimer_image' => 'Elimina l’immagine', |
|
| 336 | + 'icone_tous_articles' => 'Tutti i tuoi articoli', |
|
| 337 | + 'icone_tous_auteur' => 'Tutti gli autori', |
|
| 338 | + 'icone_tous_visiteur' => 'Tutti i visitatori', |
|
| 339 | + 'icone_visiter_site' => 'Visita il sito', |
|
| 340 | + 'icone_voir_en_ligne' => 'Vedi on line', |
|
| 341 | + 'img_indisponible' => 'immagine non disponibile', |
|
| 342 | + 'impossible' => 'impossibile', |
|
| 343 | + 'info_a_suivre' => 'PANNELLO DI CONTROLLO »', |
|
| 344 | + 'info_acces_interdit' => 'Accesso vietato', |
|
| 345 | + 'info_acces_refuse' => 'Accesso rifiutato', |
|
| 346 | + 'info_action' => 'Azione: @action@', |
|
| 347 | + 'info_administrer_rubriques' => 'Puoi amministrare questa rubrica e le relative sottorubriche', |
|
| 348 | + 'info_adresse_non_indiquee' => 'Non hai indicato l’indirizzo da testare!', |
|
| 349 | + 'info_aide' => 'AIUTO:', |
|
| 350 | + 'info_ajouter_mot' => 'Aggiungi questa parola', |
|
| 351 | + 'info_annonce' => 'ANNUNCIO', |
|
| 352 | + 'info_annonces_generales' => 'Annunci generali:', |
|
| 353 | + 'info_article_propose' => 'Articolo proposto', |
|
| 354 | + 'info_article_publie' => 'Articolo pubblicato', |
|
| 355 | + 'info_article_redaction' => 'Articolo in corso di redazione', |
|
| 356 | + 'info_article_refuse' => 'Articolo rifiutato', |
|
| 357 | + 'info_article_supprime' => 'Articolo eliminato', |
|
| 358 | + 'info_articles' => 'Articoli', |
|
| 359 | + 'info_articles_a_valider' => 'Articoli da convalidare', |
|
| 360 | + 'info_articles_nb' => '@nb@ articoli', |
|
| 361 | + 'info_articles_proposes' => 'Articoli proposti', |
|
| 362 | + 'info_articles_un' => '1 articolo', |
|
| 363 | + 'info_auteurs_nombre' => 'autore(i):', |
|
| 364 | + 'info_authentification_ftp' => 'Autenticazione (via FTP).', |
|
| 365 | + 'info_breves_2' => 'brevi', |
|
| 366 | + 'info_breves_nb' => '@nb@ notizie', |
|
| 367 | + 'info_breves_un' => '1 notizia', |
|
| 368 | + 'info_connexion_refusee' => 'Connessione rifiutata', |
|
| 369 | + 'info_contact_developpeur' => 'Contatta un programmatore.', |
|
| 370 | + 'info_contenance' => 'Questo sito contiene:', |
|
| 371 | + 'info_contribution' => 'contributi dei forum', |
|
| 372 | + 'info_copyright' => '@spip@ è un software libero distribuito @lien_gpl@.', |
|
| 373 | + 'info_copyright_doc' => 'Per maggiori informazioni, vedi il sito <a href="@spipnet@">@spipnet_affiche@</a>.', |
|
| 374 | + 'info_copyright_gpl' => 'sotto licenza GPL', |
|
| 375 | + 'info_cours_edition' => 'Articoli in fase di redazione', |
|
| 376 | + 'info_creer_repertoire' => 'Creare un file o una cartella chiamata:', |
|
| 377 | + 'info_creer_repertoire_2' => 'all’interno della sottocartella <b>@repertoire@</b>, poi:', |
|
| 378 | + 'info_creer_vignette' => 'creazione automatica dell’anteprima', |
|
| 379 | + 'info_creerdansrubrique_non_autorise' => 'Non si dispone di diritti sufficienti per creare contenuti in questa rubrica', |
|
| 380 | + 'info_deplier' => 'Espandi', |
|
| 381 | + 'info_descriptif_nombre' => 'descrizione(i):', |
|
| 382 | + 'info_description' => 'Descrizione:', |
|
| 383 | + 'info_description_2' => 'Descrizione:', |
|
| 384 | + 'info_dimension' => 'Dimensioni:', |
|
| 385 | + 'info_documents_nb' => '@nb@ documenti', |
|
| 386 | + 'info_documents_un' => '1 documento', |
|
| 387 | + 'info_ecire_message_prive' => 'Scrivi un messaggio privato', |
|
| 388 | + 'info_email_invalide' => 'Indirizzo email non valido.', |
|
| 389 | + 'info_en_cours_validation' => 'I tuoi articoli in corso di redazione', |
|
| 390 | + 'info_en_ligne' => 'Attualmente on line:', |
|
| 391 | + 'info_envoyer_message_prive' => 'Invia un messaggio privato a questo autore', |
|
| 392 | + 'info_erreur_requete' => 'Errore nella richiesta: ', |
|
| 393 | + 'info_erreur_squelette2' => 'Nessun modello di layout <b>@fichier@</b> trovato...', |
|
| 394 | + 'info_erreur_systeme' => 'Errore di sistema (errno @errsys@)', |
|
| 395 | + 'info_erreur_systeme2' => 'Il disco rigido potrebbe essere pieno o la base dati danneggiata.<br /> |
|
| 396 | 396 | <span style="color:red;">Tenta di <a href=\'@script@\'>ripristinare la base dati</a>, o contatta il tuo hoster.</span>', |
| 397 | - 'info_fini' => 'Finito!', |
|
| 398 | - 'info_format_image' => 'Formati di file immagine utilizzabili per la creazione delle etichette: @gd_formats@.', |
|
| 399 | - 'info_format_non_defini' => 'formato non definito', |
|
| 400 | - 'info_grand_ecran' => 'Layout per monitor grandi', |
|
| 401 | - 'info_image_aide' => 'AIUTO', |
|
| 402 | - 'info_image_process_titre' => 'Metodo per generare thumbnail', |
|
| 403 | - 'info_impossible_lire_page' => '<b>Errore!</b> Impossibile leggere la pagina <tt><html>@test_proxy@</html></tt> attraverso il proxy ', |
|
| 404 | - 'info_installation_systeme_publication' => 'Installazione del sistema di pubblicazione...', |
|
| 405 | - 'info_installer_documents' => 'È possibile installare automaticamente tutti i documenti contenuti nella cartella @upload@.', |
|
| 406 | - 'info_installer_ftp' => 'In qualità di amministratore, puoi installare file (via FTP) nella cartella @upload@ per poi selezionarli direttamente.', |
|
| 407 | - 'info_installer_images' => 'È possibile installare delle immagini in formato JPEG, GIF e PNG.', |
|
| 408 | - 'info_installer_images_dossier' => 'Installare delle immagini nella cartella @upload@ per poterle selezionare direttamente.', |
|
| 409 | - 'info_interface_complete' => 'Interfaccia completa', |
|
| 410 | - 'info_interface_simple' => 'Interfaccia semplificata', |
|
| 411 | - 'info_joindre_document_article' => 'Puoi allegare a questo articolo dei documenti del tipo', |
|
| 412 | - 'info_joindre_document_rubrique' => 'Puoi aggiungere a questa rubrica documenti del tipo', |
|
| 413 | - 'info_joindre_documents_article' => 'Puoi allegare all’articolo documenti del tipo: ', |
|
| 414 | - 'info_l_article' => 'l’articolo', |
|
| 415 | - 'info_la_breve' => 'la breve', |
|
| 416 | - 'info_la_rubrique' => 'la sezione', |
|
| 417 | - 'info_langue_principale' => 'Lingua predefinita del sito', |
|
| 418 | - 'info_largeur_vignette' => '@largeur_vignette@ x @hauteur_vignette@ pixel', |
|
| 419 | - 'info_les_auteurs_1' => 'di @les_auteurs@ ', |
|
| 420 | - 'info_logo_format_interdit' => 'Solo i logo in formato @formats@ sono permessi.', |
|
| 421 | - 'info_logo_max_poids' => 'I logo devono obbligatoriamente avere una dimensione inferiore a @maxi@ (questo file è di @actuel@).', |
|
| 422 | - 'info_mail_fournisseur' => '[email protected]', |
|
| 423 | - 'info_message_2' => 'MESSAGGIO', |
|
| 424 | - 'info_message_supprime' => 'MESSAGGIO ELIMINATO', |
|
| 425 | - 'info_messages_nb' => '@nb@ messaggi', |
|
| 426 | - 'info_messages_un' => '1 messaggio', |
|
| 427 | - 'info_mise_en_ligne' => 'Data di pubblicazione on line:', |
|
| 428 | - 'info_modification_parametres_securite' => 'modifiche dei parametri di sicurezza', |
|
| 429 | - 'info_mois_courant' => 'Durante il mese:', |
|
| 430 | - 'info_mot_cle_ajoute' => 'La seguente parola chiave è stata aggiunta a', |
|
| 431 | - 'info_multi_herit' => 'Lingua predefinita', |
|
| 432 | - 'info_multi_langues_soulignees' => 'Le <u>lingue sottolineate</u> hanno la traduzione parziale o totale per tutti i testi dell’interfaccia. Se si seleziona una di queste lingue, molti elementi del sito pubblico (date, form) verranno tradotti automaticamente. Per le lingue che non sono sottolineate, invece, tali elementi rimarranno nella lingua principale del sito.', |
|
| 433 | - 'info_multilinguisme' => 'Multilinguismo', |
|
| 434 | - 'info_nom_non_utilisateurs_connectes' => 'Il tuo nome non appare nella lista degli utenti collegati.', |
|
| 435 | - 'info_nom_utilisateurs_connectes' => 'Il tuo nome è visibile nella lista degli utenti collegati.', |
|
| 436 | - 'info_nombre_en_ligne' => 'Attualmente on line:', |
|
| 437 | - 'info_non_resultat' => 'Nessun risultato per "@cherche_mot@"', |
|
| 438 | - 'info_non_utilisation_messagerie' => 'Il sistema di messaggistica interna di questo sito non viene utilizzato.', |
|
| 439 | - 'info_nouveau_message' => 'HAI UN NUOVO MESSAGGIO', |
|
| 440 | - 'info_nouveaux_messages' => 'HAI @total_messages@ NUOVI MESSAGGI', |
|
| 441 | - 'info_numero_abbreviation' => 'N. ', |
|
| 442 | - 'info_obligatoire' => 'Questa informazione è obbligatoria', |
|
| 443 | - 'info_page_actuelle' => 'Pagina corrente', |
|
| 444 | - 'info_pense_bete' => 'MEMO', |
|
| 445 | - 'info_petit_ecran' => 'Layout per monitor piccoli', |
|
| 446 | - 'info_petition_close' => 'Petizione chiusa', |
|
| 447 | - 'info_pixels' => 'pixels', |
|
| 448 | - 'info_plusieurs_mots_trouves' => 'Numerose parole chiave trovate per "@cherche_mot@":', |
|
| 449 | - 'info_portfolio_automatique' => 'Portfolio automatico:', |
|
| 450 | - 'info_premier_resultat' => '[@debut_limit@ primi risultati su @total@]', |
|
| 451 | - 'info_premier_resultat_sur' => '[@debut_limit@ primi risultati su @total@]', |
|
| 452 | - 'info_propose_1' => '[@nom_site_spip@] Propone: @titre@', |
|
| 453 | - 'info_propose_2' => 'Articolo proposto |
|
| 397 | + 'info_fini' => 'Finito!', |
|
| 398 | + 'info_format_image' => 'Formati di file immagine utilizzabili per la creazione delle etichette: @gd_formats@.', |
|
| 399 | + 'info_format_non_defini' => 'formato non definito', |
|
| 400 | + 'info_grand_ecran' => 'Layout per monitor grandi', |
|
| 401 | + 'info_image_aide' => 'AIUTO', |
|
| 402 | + 'info_image_process_titre' => 'Metodo per generare thumbnail', |
|
| 403 | + 'info_impossible_lire_page' => '<b>Errore!</b> Impossibile leggere la pagina <tt><html>@test_proxy@</html></tt> attraverso il proxy ', |
|
| 404 | + 'info_installation_systeme_publication' => 'Installazione del sistema di pubblicazione...', |
|
| 405 | + 'info_installer_documents' => 'È possibile installare automaticamente tutti i documenti contenuti nella cartella @upload@.', |
|
| 406 | + 'info_installer_ftp' => 'In qualità di amministratore, puoi installare file (via FTP) nella cartella @upload@ per poi selezionarli direttamente.', |
|
| 407 | + 'info_installer_images' => 'È possibile installare delle immagini in formato JPEG, GIF e PNG.', |
|
| 408 | + 'info_installer_images_dossier' => 'Installare delle immagini nella cartella @upload@ per poterle selezionare direttamente.', |
|
| 409 | + 'info_interface_complete' => 'Interfaccia completa', |
|
| 410 | + 'info_interface_simple' => 'Interfaccia semplificata', |
|
| 411 | + 'info_joindre_document_article' => 'Puoi allegare a questo articolo dei documenti del tipo', |
|
| 412 | + 'info_joindre_document_rubrique' => 'Puoi aggiungere a questa rubrica documenti del tipo', |
|
| 413 | + 'info_joindre_documents_article' => 'Puoi allegare all’articolo documenti del tipo: ', |
|
| 414 | + 'info_l_article' => 'l’articolo', |
|
| 415 | + 'info_la_breve' => 'la breve', |
|
| 416 | + 'info_la_rubrique' => 'la sezione', |
|
| 417 | + 'info_langue_principale' => 'Lingua predefinita del sito', |
|
| 418 | + 'info_largeur_vignette' => '@largeur_vignette@ x @hauteur_vignette@ pixel', |
|
| 419 | + 'info_les_auteurs_1' => 'di @les_auteurs@ ', |
|
| 420 | + 'info_logo_format_interdit' => 'Solo i logo in formato @formats@ sono permessi.', |
|
| 421 | + 'info_logo_max_poids' => 'I logo devono obbligatoriamente avere una dimensione inferiore a @maxi@ (questo file è di @actuel@).', |
|
| 422 | + 'info_mail_fournisseur' => '[email protected]', |
|
| 423 | + 'info_message_2' => 'MESSAGGIO', |
|
| 424 | + 'info_message_supprime' => 'MESSAGGIO ELIMINATO', |
|
| 425 | + 'info_messages_nb' => '@nb@ messaggi', |
|
| 426 | + 'info_messages_un' => '1 messaggio', |
|
| 427 | + 'info_mise_en_ligne' => 'Data di pubblicazione on line:', |
|
| 428 | + 'info_modification_parametres_securite' => 'modifiche dei parametri di sicurezza', |
|
| 429 | + 'info_mois_courant' => 'Durante il mese:', |
|
| 430 | + 'info_mot_cle_ajoute' => 'La seguente parola chiave è stata aggiunta a', |
|
| 431 | + 'info_multi_herit' => 'Lingua predefinita', |
|
| 432 | + 'info_multi_langues_soulignees' => 'Le <u>lingue sottolineate</u> hanno la traduzione parziale o totale per tutti i testi dell’interfaccia. Se si seleziona una di queste lingue, molti elementi del sito pubblico (date, form) verranno tradotti automaticamente. Per le lingue che non sono sottolineate, invece, tali elementi rimarranno nella lingua principale del sito.', |
|
| 433 | + 'info_multilinguisme' => 'Multilinguismo', |
|
| 434 | + 'info_nom_non_utilisateurs_connectes' => 'Il tuo nome non appare nella lista degli utenti collegati.', |
|
| 435 | + 'info_nom_utilisateurs_connectes' => 'Il tuo nome è visibile nella lista degli utenti collegati.', |
|
| 436 | + 'info_nombre_en_ligne' => 'Attualmente on line:', |
|
| 437 | + 'info_non_resultat' => 'Nessun risultato per "@cherche_mot@"', |
|
| 438 | + 'info_non_utilisation_messagerie' => 'Il sistema di messaggistica interna di questo sito non viene utilizzato.', |
|
| 439 | + 'info_nouveau_message' => 'HAI UN NUOVO MESSAGGIO', |
|
| 440 | + 'info_nouveaux_messages' => 'HAI @total_messages@ NUOVI MESSAGGI', |
|
| 441 | + 'info_numero_abbreviation' => 'N. ', |
|
| 442 | + 'info_obligatoire' => 'Questa informazione è obbligatoria', |
|
| 443 | + 'info_page_actuelle' => 'Pagina corrente', |
|
| 444 | + 'info_pense_bete' => 'MEMO', |
|
| 445 | + 'info_petit_ecran' => 'Layout per monitor piccoli', |
|
| 446 | + 'info_petition_close' => 'Petizione chiusa', |
|
| 447 | + 'info_pixels' => 'pixels', |
|
| 448 | + 'info_plusieurs_mots_trouves' => 'Numerose parole chiave trovate per "@cherche_mot@":', |
|
| 449 | + 'info_portfolio_automatique' => 'Portfolio automatico:', |
|
| 450 | + 'info_premier_resultat' => '[@debut_limit@ primi risultati su @total@]', |
|
| 451 | + 'info_premier_resultat_sur' => '[@debut_limit@ primi risultati su @total@]', |
|
| 452 | + 'info_propose_1' => '[@nom_site_spip@] Propone: @titre@', |
|
| 453 | + 'info_propose_2' => 'Articolo proposto |
|
| 454 | 454 | ---------------', |
| 455 | - 'info_propose_3' => 'L’articolo "@titre@" è proposto per la pubblicazione', |
|
| 456 | - 'info_propose_4' => 'Sei invitato a consultare e a dare la tua opinione ', |
|
| 457 | - 'info_propose_5' => 'nel forum annesso. |
|
| 455 | + 'info_propose_3' => 'L’articolo "@titre@" è proposto per la pubblicazione', |
|
| 456 | + 'info_propose_4' => 'Sei invitato a consultare e a dare la tua opinione ', |
|
| 457 | + 'info_propose_5' => 'nel forum annesso. |
|
| 458 | 458 | |
| 459 | 459 | È disponibile all’indirizzo:', |
| 460 | - 'info_publie_01' => 'L’articolo "@titre@" è stato convalidato da @connect_nom@.', |
|
| 461 | - 'info_publie_1' => '[@nom_site_spip@] PUBBLICA: @titre@', |
|
| 462 | - 'info_publie_2' => 'Articolo pubblicato |
|
| 460 | + 'info_publie_01' => 'L’articolo "@titre@" è stato convalidato da @connect_nom@.', |
|
| 461 | + 'info_publie_1' => '[@nom_site_spip@] PUBBLICA: @titre@', |
|
| 462 | + 'info_publie_2' => 'Articolo pubblicato |
|
| 463 | 463 | --------------', |
| 464 | - 'info_rechercher' => 'Ricerca', |
|
| 465 | - 'info_rechercher_02' => 'Cerca:', |
|
| 466 | - 'info_remplacer_vignette' => 'Sostituire l’icona predefinita con una personalizzata:', |
|
| 467 | - 'info_rubriques_nb' => '@nb@ sezioni', |
|
| 468 | - 'info_rubriques_un' => '1 sezione', |
|
| 469 | - 'info_sans_titre_2' => 'senza titolo', |
|
| 470 | - 'info_selectionner_fichier' => 'Puoi selezionare un file della cartella @upload@', |
|
| 471 | - 'info_selectionner_fichier_2' => 'Seleziona un file:', |
|
| 472 | - 'info_sites_nb' => '@nb@ siti', |
|
| 473 | - 'info_sites_un' => '1 sito', |
|
| 474 | - 'info_supprimer_vignette' => 'Cancella l’immagine', |
|
| 475 | - 'info_symbole_bleu' => 'Il simbolo <b>blu</b> indica un <b>memo</b>: cioè un messaggio ad uso personale.', |
|
| 476 | - 'info_symbole_jaune' => 'Il simbolo <b>giallo</b> indica un <b>annuncio a tutti i redattori</b>: modificabile da tutti gli amministratori e visibile da tutti i redattori.', |
|
| 477 | - 'info_symbole_vert' => 'Il simbolo <b>verde</b> indica i <b>messaggi scambiati con altri utenti </b> del sito.', |
|
| 478 | - 'info_telecharger_nouveau_logo' => 'Upload di un nuovo logo:', |
|
| 479 | - 'info_telecharger_ordinateur' => 'Upload dal tuo computer:', |
|
| 480 | - 'info_tous_resultats_enregistres' => '[tutti i risultati sono salvati]', |
|
| 481 | - 'info_tout_afficher' => 'Visualizza tutto', |
|
| 482 | - 'info_travaux_texte' => 'Questo sito non è stato ancora configurato. Torna più tardi...', |
|
| 483 | - 'info_travaux_titre' => 'Lavori in corso', |
|
| 484 | - 'info_trop_resultat' => 'Troppi risultati per "@cherche_mot@" ; restringi la ricerca.', |
|
| 485 | - 'info_utilisation_messagerie_interne' => 'Stai utilizzando il sistema di messaggistica interna al sito.', |
|
| 486 | - 'info_valider_lien' => 'convalidare questo link', |
|
| 487 | - 'info_verifier_image' => ', verifica che le immagini siano state trasferite correttamente.', |
|
| 488 | - 'info_vignette_defaut' => 'Loghi predefiniti', |
|
| 489 | - 'info_vignette_personnalisee' => 'Loghi personalizzati', |
|
| 490 | - 'info_visite' => 'visita:', |
|
| 491 | - 'info_vos_rendez_vous' => 'I tuoi prossimi appuntamenti', |
|
| 492 | - 'infos_vos_pense_bete' => 'I tuoi memo', |
|
| 464 | + 'info_rechercher' => 'Ricerca', |
|
| 465 | + 'info_rechercher_02' => 'Cerca:', |
|
| 466 | + 'info_remplacer_vignette' => 'Sostituire l’icona predefinita con una personalizzata:', |
|
| 467 | + 'info_rubriques_nb' => '@nb@ sezioni', |
|
| 468 | + 'info_rubriques_un' => '1 sezione', |
|
| 469 | + 'info_sans_titre_2' => 'senza titolo', |
|
| 470 | + 'info_selectionner_fichier' => 'Puoi selezionare un file della cartella @upload@', |
|
| 471 | + 'info_selectionner_fichier_2' => 'Seleziona un file:', |
|
| 472 | + 'info_sites_nb' => '@nb@ siti', |
|
| 473 | + 'info_sites_un' => '1 sito', |
|
| 474 | + 'info_supprimer_vignette' => 'Cancella l’immagine', |
|
| 475 | + 'info_symbole_bleu' => 'Il simbolo <b>blu</b> indica un <b>memo</b>: cioè un messaggio ad uso personale.', |
|
| 476 | + 'info_symbole_jaune' => 'Il simbolo <b>giallo</b> indica un <b>annuncio a tutti i redattori</b>: modificabile da tutti gli amministratori e visibile da tutti i redattori.', |
|
| 477 | + 'info_symbole_vert' => 'Il simbolo <b>verde</b> indica i <b>messaggi scambiati con altri utenti </b> del sito.', |
|
| 478 | + 'info_telecharger_nouveau_logo' => 'Upload di un nuovo logo:', |
|
| 479 | + 'info_telecharger_ordinateur' => 'Upload dal tuo computer:', |
|
| 480 | + 'info_tous_resultats_enregistres' => '[tutti i risultati sono salvati]', |
|
| 481 | + 'info_tout_afficher' => 'Visualizza tutto', |
|
| 482 | + 'info_travaux_texte' => 'Questo sito non è stato ancora configurato. Torna più tardi...', |
|
| 483 | + 'info_travaux_titre' => 'Lavori in corso', |
|
| 484 | + 'info_trop_resultat' => 'Troppi risultati per "@cherche_mot@" ; restringi la ricerca.', |
|
| 485 | + 'info_utilisation_messagerie_interne' => 'Stai utilizzando il sistema di messaggistica interna al sito.', |
|
| 486 | + 'info_valider_lien' => 'convalidare questo link', |
|
| 487 | + 'info_verifier_image' => ', verifica che le immagini siano state trasferite correttamente.', |
|
| 488 | + 'info_vignette_defaut' => 'Loghi predefiniti', |
|
| 489 | + 'info_vignette_personnalisee' => 'Loghi personalizzati', |
|
| 490 | + 'info_visite' => 'visita:', |
|
| 491 | + 'info_vos_rendez_vous' => 'I tuoi prossimi appuntamenti', |
|
| 492 | + 'infos_vos_pense_bete' => 'I tuoi memo', |
|
| 493 | 493 | |
| 494 | - // L |
|
| 495 | - 'label_ajout_id_rapide' => 'Inserimento rapido', |
|
| 496 | - 'label_poids_fichier' => 'Dimensione', |
|
| 497 | - 'label_ponctuer' => '@label@:', |
|
| 498 | - 'lien_afficher_icones_seuls' => 'Mostra solo le icone', |
|
| 499 | - 'lien_afficher_texte_icones' => 'Mostra le icone e il testo', |
|
| 500 | - 'lien_afficher_texte_seul' => 'Mostra solo il testo', |
|
| 501 | - 'lien_aller_a_la_derniere_page' => 'Vai all’ultima pagina', |
|
| 502 | - 'lien_aller_a_la_page_nb' => 'Vai alla pagina @nb@', |
|
| 503 | - 'lien_aller_a_la_page_precedente' => 'Vai alla pagina precedente', |
|
| 504 | - 'lien_aller_a_la_page_suivante' => 'Vai alla pagina successiva', |
|
| 505 | - 'lien_aller_a_la_premiere_page' => 'Vai alla prima pagina', |
|
| 506 | - 'lien_liberer' => 'libera', |
|
| 507 | - 'lien_liberer_tous' => 'liberare questi articoli', |
|
| 508 | - 'lien_nouvea_pense_bete' => 'NUOVO MEMO', |
|
| 509 | - 'lien_nouveau_message' => 'NUOVO MESSAGGIO', |
|
| 510 | - 'lien_nouvelle_annonce' => 'NUOVO ANNUNCIO', |
|
| 511 | - 'lien_petitions' => 'PETIZIONE', |
|
| 512 | - 'lien_popularite' => 'popolarità: @popularite@%', |
|
| 513 | - 'lien_racine_site' => 'ROOT DEL SITO', |
|
| 514 | - 'lien_reessayer' => 'Prova di nuovo', |
|
| 515 | - 'lien_repondre_message' => 'Rispondi', |
|
| 516 | - 'lien_supprimer' => 'cancella', |
|
| 517 | - 'lien_tout_afficher' => 'Visualizza tutto ', |
|
| 518 | - 'lien_visite_site' => 'visita il sito', |
|
| 519 | - 'lien_visites' => '@visites@ visite', |
|
| 520 | - 'lien_voir_auteur' => 'Vedi questo autore', |
|
| 521 | - 'ligne' => 'Linea', |
|
| 522 | - 'login' => 'Collegamento', |
|
| 523 | - 'login_acces_prive' => 'accesso all’area riservata', |
|
| 524 | - 'login_autre_identifiant' => 'connettiti con un altro ID', |
|
| 525 | - 'login_cookie_accepte' => 'Imposta il tuo browser affinché li accetti (almeno per questo sito).', |
|
| 526 | - 'login_cookie_oblige' => 'Per identificarsi in modo sicuro su questo sito è necessario accettare i cookie.', |
|
| 527 | - 'login_deconnexion_ok' => 'Disconnessione effettuata.', |
|
| 528 | - 'login_erreur_pass' => 'Errore nella password.', |
|
| 529 | - 'login_espace_prive' => 'area riservata', |
|
| 530 | - 'login_identifiant_inconnu' => 'L’ID « @login@ » risulta inesistente.', |
|
| 531 | - 'login_login' => 'Login:', |
|
| 532 | - 'login_login2' => 'Login o indirizzo email:', |
|
| 533 | - 'login_login_pass_incorrect' => '(Login o password errati.)', |
|
| 534 | - 'login_motpasseoublie' => 'password dimenticata?', |
|
| 535 | - 'login_non_securise' => 'Attenzione, questo modulo non è sicuro. |
|
| 494 | + // L |
|
| 495 | + 'label_ajout_id_rapide' => 'Inserimento rapido', |
|
| 496 | + 'label_poids_fichier' => 'Dimensione', |
|
| 497 | + 'label_ponctuer' => '@label@:', |
|
| 498 | + 'lien_afficher_icones_seuls' => 'Mostra solo le icone', |
|
| 499 | + 'lien_afficher_texte_icones' => 'Mostra le icone e il testo', |
|
| 500 | + 'lien_afficher_texte_seul' => 'Mostra solo il testo', |
|
| 501 | + 'lien_aller_a_la_derniere_page' => 'Vai all’ultima pagina', |
|
| 502 | + 'lien_aller_a_la_page_nb' => 'Vai alla pagina @nb@', |
|
| 503 | + 'lien_aller_a_la_page_precedente' => 'Vai alla pagina precedente', |
|
| 504 | + 'lien_aller_a_la_page_suivante' => 'Vai alla pagina successiva', |
|
| 505 | + 'lien_aller_a_la_premiere_page' => 'Vai alla prima pagina', |
|
| 506 | + 'lien_liberer' => 'libera', |
|
| 507 | + 'lien_liberer_tous' => 'liberare questi articoli', |
|
| 508 | + 'lien_nouvea_pense_bete' => 'NUOVO MEMO', |
|
| 509 | + 'lien_nouveau_message' => 'NUOVO MESSAGGIO', |
|
| 510 | + 'lien_nouvelle_annonce' => 'NUOVO ANNUNCIO', |
|
| 511 | + 'lien_petitions' => 'PETIZIONE', |
|
| 512 | + 'lien_popularite' => 'popolarità: @popularite@%', |
|
| 513 | + 'lien_racine_site' => 'ROOT DEL SITO', |
|
| 514 | + 'lien_reessayer' => 'Prova di nuovo', |
|
| 515 | + 'lien_repondre_message' => 'Rispondi', |
|
| 516 | + 'lien_supprimer' => 'cancella', |
|
| 517 | + 'lien_tout_afficher' => 'Visualizza tutto ', |
|
| 518 | + 'lien_visite_site' => 'visita il sito', |
|
| 519 | + 'lien_visites' => '@visites@ visite', |
|
| 520 | + 'lien_voir_auteur' => 'Vedi questo autore', |
|
| 521 | + 'ligne' => 'Linea', |
|
| 522 | + 'login' => 'Collegamento', |
|
| 523 | + 'login_acces_prive' => 'accesso all’area riservata', |
|
| 524 | + 'login_autre_identifiant' => 'connettiti con un altro ID', |
|
| 525 | + 'login_cookie_accepte' => 'Imposta il tuo browser affinché li accetti (almeno per questo sito).', |
|
| 526 | + 'login_cookie_oblige' => 'Per identificarsi in modo sicuro su questo sito è necessario accettare i cookie.', |
|
| 527 | + 'login_deconnexion_ok' => 'Disconnessione effettuata.', |
|
| 528 | + 'login_erreur_pass' => 'Errore nella password.', |
|
| 529 | + 'login_espace_prive' => 'area riservata', |
|
| 530 | + 'login_identifiant_inconnu' => 'L’ID « @login@ » risulta inesistente.', |
|
| 531 | + 'login_login' => 'Login:', |
|
| 532 | + 'login_login2' => 'Login o indirizzo email:', |
|
| 533 | + 'login_login_pass_incorrect' => '(Login o password errati.)', |
|
| 534 | + 'login_motpasseoublie' => 'password dimenticata?', |
|
| 535 | + 'login_non_securise' => 'Attenzione, questo modulo non è sicuro. |
|
| 536 | 536 | Se non vuoi che la tua password possa essere intercettata sulla rete, |
| 537 | 537 | devi attivare Javascript nel tuo browser e', |
| 538 | - 'login_nouvelle_tentative' => 'Nuovo tentativo', |
|
| 539 | - 'login_par_ici' => 'Sei registrato... per di qua...', |
|
| 540 | - 'login_pass2' => 'Password:', |
|
| 541 | - 'login_preferez_refuser' => '<b>Se preferisci non accettare i cookie</b> c’è un altro metodo (meno sicuro) per connettersi:', |
|
| 542 | - 'login_recharger' => 'aggiorna questa pagina', |
|
| 543 | - 'login_rester_identifie' => 'Conservare l’identificazione per alcuni giorni', |
|
| 544 | - 'login_retour_public' => 'Ritorna al sito pubblico', |
|
| 545 | - 'login_retour_site' => 'Ritorna al sito pubblico', |
|
| 546 | - 'login_retoursitepublic' => 'ritorna al sito pubblico', |
|
| 547 | - 'login_sans_cookie' => 'Identificazione senza cookie', |
|
| 548 | - 'login_securise' => 'Accesso protetto', |
|
| 549 | - 'login_sinscrire' => 'registrati', |
|
| 550 | - 'login_test_navigateur' => 'test browser/riconnessione', |
|
| 551 | - 'login_verifiez_navigateur' => '(Verifica comunque se il tuo browser ha memorizzato la password...)', |
|
| 538 | + 'login_nouvelle_tentative' => 'Nuovo tentativo', |
|
| 539 | + 'login_par_ici' => 'Sei registrato... per di qua...', |
|
| 540 | + 'login_pass2' => 'Password:', |
|
| 541 | + 'login_preferez_refuser' => '<b>Se preferisci non accettare i cookie</b> c’è un altro metodo (meno sicuro) per connettersi:', |
|
| 542 | + 'login_recharger' => 'aggiorna questa pagina', |
|
| 543 | + 'login_rester_identifie' => 'Conservare l’identificazione per alcuni giorni', |
|
| 544 | + 'login_retour_public' => 'Ritorna al sito pubblico', |
|
| 545 | + 'login_retour_site' => 'Ritorna al sito pubblico', |
|
| 546 | + 'login_retoursitepublic' => 'ritorna al sito pubblico', |
|
| 547 | + 'login_sans_cookie' => 'Identificazione senza cookie', |
|
| 548 | + 'login_securise' => 'Accesso protetto', |
|
| 549 | + 'login_sinscrire' => 'registrati', |
|
| 550 | + 'login_test_navigateur' => 'test browser/riconnessione', |
|
| 551 | + 'login_verifiez_navigateur' => '(Verifica comunque se il tuo browser ha memorizzato la password...)', |
|
| 552 | 552 | |
| 553 | - // M |
|
| 554 | - 'masquer_colonne' => 'Nascondi questa colonna', |
|
| 555 | - 'masquer_trad' => 'nascondere le traduzioni', |
|
| 556 | - 'message_nouveaux_identifiants_echec' => 'Impossibile generare nuovi identificativi', |
|
| 557 | - 'message_nouveaux_identifiants_echec_envoi' => 'Le nuove credenziali di accesso non possono essere inviate.', |
|
| 558 | - 'message_nouveaux_identifiants_ok' => 'Le nuove credenziali di accsso sono state inviate a @email@.', |
|
| 559 | - 'module_fichiers_langues' => 'File lingua', |
|
| 553 | + // M |
|
| 554 | + 'masquer_colonne' => 'Nascondi questa colonna', |
|
| 555 | + 'masquer_trad' => 'nascondere le traduzioni', |
|
| 556 | + 'message_nouveaux_identifiants_echec' => 'Impossibile generare nuovi identificativi', |
|
| 557 | + 'message_nouveaux_identifiants_echec_envoi' => 'Le nuove credenziali di accesso non possono essere inviate.', |
|
| 558 | + 'message_nouveaux_identifiants_ok' => 'Le nuove credenziali di accsso sono state inviate a @email@.', |
|
| 559 | + 'module_fichiers_langues' => 'File lingua', |
|
| 560 | 560 | |
| 561 | - // N |
|
| 562 | - 'navigateur_pas_redirige' => 'Se la pagina non cambia automaticamente, cliccare qui per continuare.', |
|
| 563 | - 'numero' => 'Numero', |
|
| 561 | + // N |
|
| 562 | + 'navigateur_pas_redirige' => 'Se la pagina non cambia automaticamente, cliccare qui per continuare.', |
|
| 563 | + 'numero' => 'Numero', |
|
| 564 | 564 | |
| 565 | - // O |
|
| 566 | - 'occurence' => 'Occorrenza', |
|
| 567 | - 'onglet_affacer_base' => 'Svuota il database', |
|
| 568 | - 'onglet_auteur' => 'L’autore', |
|
| 569 | - 'onglet_contenu_site' => 'Contenuto del sito', |
|
| 570 | - 'onglet_evolution_visite_mod' => 'Evoluzione', |
|
| 571 | - 'onglet_fonctions_avances' => 'Funzioni avanzate', |
|
| 572 | - 'onglet_informations_personnelles' => 'Dati personali', |
|
| 573 | - 'onglet_interactivite' => 'Interattività', |
|
| 574 | - 'onglet_messagerie' => 'Messaggi', |
|
| 575 | - 'onglet_repartition_rubrique' => 'Ripartizione per rubriche', |
|
| 576 | - 'onglet_save_restaur_base' => 'Salva/ripristina il database', |
|
| 577 | - 'onglet_vider_cache' => 'Svuota la cache', |
|
| 565 | + // O |
|
| 566 | + 'occurence' => 'Occorrenza', |
|
| 567 | + 'onglet_affacer_base' => 'Svuota il database', |
|
| 568 | + 'onglet_auteur' => 'L’autore', |
|
| 569 | + 'onglet_contenu_site' => 'Contenuto del sito', |
|
| 570 | + 'onglet_evolution_visite_mod' => 'Evoluzione', |
|
| 571 | + 'onglet_fonctions_avances' => 'Funzioni avanzate', |
|
| 572 | + 'onglet_informations_personnelles' => 'Dati personali', |
|
| 573 | + 'onglet_interactivite' => 'Interattività', |
|
| 574 | + 'onglet_messagerie' => 'Messaggi', |
|
| 575 | + 'onglet_repartition_rubrique' => 'Ripartizione per rubriche', |
|
| 576 | + 'onglet_save_restaur_base' => 'Salva/ripristina il database', |
|
| 577 | + 'onglet_vider_cache' => 'Svuota la cache', |
|
| 578 | 578 | |
| 579 | - // P |
|
| 580 | - 'pass_choix_pass' => 'Inserisci una nuova password:', |
|
| 581 | - 'pass_erreur' => 'Errore', |
|
| 582 | - 'pass_erreur_acces_refuse' => '<b>Errore:</b> non hai più accesso a questo sito.', |
|
| 583 | - 'pass_erreur_code_inconnu' => '<b>Errore:</b> il codice inserito non corriponde a nessuno degli utenti che hanno accesso a questo sito.', |
|
| 584 | - 'pass_erreur_non_enregistre' => '<b>Errore:</b> l’indirizzo <tt>@email_oubli@</tt> non è registrato su questo sito.', |
|
| 585 | - 'pass_erreur_non_valide' => '<b>Errore:</b> questo indirizzo <tt>@email_oubli@</tt> non è valido!', |
|
| 586 | - 'pass_erreur_probleme_technique' => '<b>Errore:</b> l’email non può essere inviato a causa di un problema tecnico.', |
|
| 587 | - 'pass_espace_prive_bla' => 'L’area riservata di questo sito è accessibile |
|
| 579 | + // P |
|
| 580 | + 'pass_choix_pass' => 'Inserisci una nuova password:', |
|
| 581 | + 'pass_erreur' => 'Errore', |
|
| 582 | + 'pass_erreur_acces_refuse' => '<b>Errore:</b> non hai più accesso a questo sito.', |
|
| 583 | + 'pass_erreur_code_inconnu' => '<b>Errore:</b> il codice inserito non corriponde a nessuno degli utenti che hanno accesso a questo sito.', |
|
| 584 | + 'pass_erreur_non_enregistre' => '<b>Errore:</b> l’indirizzo <tt>@email_oubli@</tt> non è registrato su questo sito.', |
|
| 585 | + 'pass_erreur_non_valide' => '<b>Errore:</b> questo indirizzo <tt>@email_oubli@</tt> non è valido!', |
|
| 586 | + 'pass_erreur_probleme_technique' => '<b>Errore:</b> l’email non può essere inviato a causa di un problema tecnico.', |
|
| 587 | + 'pass_espace_prive_bla' => 'L’area riservata di questo sito è accessibile |
|
| 588 | 588 | unicamente agli utenti registrati. |
| 589 | 589 | Una volta iscritto, potrai consultare gli articoli in corso di redazione, |
| 590 | 590 | proporre nuovi articoli e partecipare a tutti i forum.', |
| 591 | - 'pass_forum_bla' => 'Hai chiesto di intervenire su un forum |
|
| 591 | + 'pass_forum_bla' => 'Hai chiesto di intervenire su un forum |
|
| 592 | 592 | riservato agli utenti registrati.', |
| 593 | - 'pass_indiquez_cidessous' => 'Indica qui sotto l’indirizzo email con il quale ti sei registrato precedentemente. |
|
| 593 | + 'pass_indiquez_cidessous' => 'Indica qui sotto l’indirizzo email con il quale ti sei registrato precedentemente. |
|
| 594 | 594 | Riceverai un email con le istruzioni per recuperare i dati di accesso al sito.', |
| 595 | - 'pass_mail_passcookie' => '(questo è un messaggio generato automaticamente) |
|
| 595 | + 'pass_mail_passcookie' => '(questo è un messaggio generato automaticamente) |
|
| 596 | 596 | Per recuperare i dati di accesso al sito |
| 597 | 597 | @nom_site_spip@ (@adresse_site@) |
| 598 | 598 | |
@@ -603,143 +603,143 @@ discard block |
||
| 603 | 603 | e riconnetterti all’area riservata. |
| 604 | 604 | |
| 605 | 605 | ', |
| 606 | - 'pass_mot_oublie' => 'Password dimenticata', |
|
| 607 | - 'pass_nouveau_enregistre' => 'La nuova password è stata salvata.', |
|
| 608 | - 'pass_nouveau_pass' => 'Nuova password', |
|
| 609 | - 'pass_ok' => 'OK', |
|
| 610 | - 'pass_oubli_mot' => 'Password dimenticata', |
|
| 611 | - 'pass_procedure_changer' => 'Per modificare la tua password, dobbiamo prima verificare la tua identità. Inserisci l’indirizzo email associato al tuo account.', |
|
| 612 | - 'pass_quitter_fenetre' => 'Chiudi la finestra', |
|
| 613 | - 'pass_rappel_login' => 'Ricorda: il tuo ID (login) è « @login@ ».', |
|
| 614 | - 'pass_recevoir_mail' => 'Riceverai un email contenente le istruzioni per recuperare i dati di accesso al sito.', |
|
| 615 | - 'pass_retour_public' => 'Torna al sito pubblico', |
|
| 616 | - 'pass_rien_a_faire_ici' => 'Vicolo cieco...', |
|
| 617 | - 'pass_vousinscrire' => 'Registrati al sito', |
|
| 618 | - 'precedent' => 'precedente', |
|
| 619 | - 'previsualisation' => 'Anteprima', |
|
| 620 | - 'previsualiser' => 'Visualizzare l’anteprima', |
|
| 606 | + 'pass_mot_oublie' => 'Password dimenticata', |
|
| 607 | + 'pass_nouveau_enregistre' => 'La nuova password è stata salvata.', |
|
| 608 | + 'pass_nouveau_pass' => 'Nuova password', |
|
| 609 | + 'pass_ok' => 'OK', |
|
| 610 | + 'pass_oubli_mot' => 'Password dimenticata', |
|
| 611 | + 'pass_procedure_changer' => 'Per modificare la tua password, dobbiamo prima verificare la tua identità. Inserisci l’indirizzo email associato al tuo account.', |
|
| 612 | + 'pass_quitter_fenetre' => 'Chiudi la finestra', |
|
| 613 | + 'pass_rappel_login' => 'Ricorda: il tuo ID (login) è « @login@ ».', |
|
| 614 | + 'pass_recevoir_mail' => 'Riceverai un email contenente le istruzioni per recuperare i dati di accesso al sito.', |
|
| 615 | + 'pass_retour_public' => 'Torna al sito pubblico', |
|
| 616 | + 'pass_rien_a_faire_ici' => 'Vicolo cieco...', |
|
| 617 | + 'pass_vousinscrire' => 'Registrati al sito', |
|
| 618 | + 'precedent' => 'precedente', |
|
| 619 | + 'previsualisation' => 'Anteprima', |
|
| 620 | + 'previsualiser' => 'Visualizzare l’anteprima', |
|
| 621 | 621 | |
| 622 | - // R |
|
| 623 | - 'retour' => 'Indietro', |
|
| 622 | + // R |
|
| 623 | + 'retour' => 'Indietro', |
|
| 624 | 624 | |
| 625 | - // S |
|
| 626 | - 'spip_conforme_dtd' => 'SPIP ritiene che questo documento è conforme al proprio DOCTYPE:', |
|
| 627 | - 'squelette' => 'modello di layout', |
|
| 628 | - 'squelette_inclus_ligne' => 'modello incluso, linea', |
|
| 629 | - 'squelette_ligne' => 'modello, linea', |
|
| 630 | - 'stats_visites_et_popularite' => '@visites@ visite; popolarità: @popularite@', |
|
| 631 | - 'suivant' => 'successivo', |
|
| 625 | + // S |
|
| 626 | + 'spip_conforme_dtd' => 'SPIP ritiene che questo documento è conforme al proprio DOCTYPE:', |
|
| 627 | + 'squelette' => 'modello di layout', |
|
| 628 | + 'squelette_inclus_ligne' => 'modello incluso, linea', |
|
| 629 | + 'squelette_ligne' => 'modello, linea', |
|
| 630 | + 'stats_visites_et_popularite' => '@visites@ visite; popolarità: @popularite@', |
|
| 631 | + 'suivant' => 'successivo', |
|
| 632 | 632 | |
| 633 | - // T |
|
| 634 | - 'taille_go' => '@taille@ Gb', |
|
| 635 | - 'taille_ko' => '@taille@ Kb', |
|
| 636 | - 'taille_mo' => '@taille@ Mb', |
|
| 637 | - 'taille_octets' => '@taille@ byte', |
|
| 638 | - 'texte_actualite_site_1' => 'Quando avrai maggiore familiarità con l’interfaccia, clicca su «', |
|
| 639 | - 'texte_actualite_site_2' => 'interfaccia completa', |
|
| 640 | - 'texte_actualite_site_3' => '» per avere accesso a nuove opzioni.', |
|
| 641 | - 'texte_creation_automatique_vignette' => 'La creazione automatica di thumbnail di anteprima è attivata. Se inserisci in questo campo delle immagini in formato @gd_formats@, esse saranno accompagnate da thumbnail con una dimensione massima di @taille_preview@ pixels. ', |
|
| 642 | - 'texte_documents_associes' => 'I seguenti documenti sono associati all’articolo, |
|
| 633 | + // T |
|
| 634 | + 'taille_go' => '@taille@ Gb', |
|
| 635 | + 'taille_ko' => '@taille@ Kb', |
|
| 636 | + 'taille_mo' => '@taille@ Mb', |
|
| 637 | + 'taille_octets' => '@taille@ byte', |
|
| 638 | + 'texte_actualite_site_1' => 'Quando avrai maggiore familiarità con l’interfaccia, clicca su «', |
|
| 639 | + 'texte_actualite_site_2' => 'interfaccia completa', |
|
| 640 | + 'texte_actualite_site_3' => '» per avere accesso a nuove opzioni.', |
|
| 641 | + 'texte_creation_automatique_vignette' => 'La creazione automatica di thumbnail di anteprima è attivata. Se inserisci in questo campo delle immagini in formato @gd_formats@, esse saranno accompagnate da thumbnail con una dimensione massima di @taille_preview@ pixels. ', |
|
| 642 | + 'texte_documents_associes' => 'I seguenti documenti sono associati all’articolo, |
|
| 643 | 643 | ma non vi sono stati inseriti direttamente. |
| 644 | 644 | A seconda delle impostazioni di pubblicazione del sito, |
| 645 | 645 | potranno essere disponibili sotto forma di documenti allegati.', |
| 646 | - 'texte_erreur_mise_niveau_base' => 'Errore nel database durante l’aggiornamento. |
|
| 646 | + 'texte_erreur_mise_niveau_base' => 'Errore nel database durante l’aggiornamento. |
|
| 647 | 647 | L’immagine <b>@fichier@</b> non è passata (articolo @id_article@). |
| 648 | 648 | Prendi nota di questo riferimento, ritenta l’aggiornamento, |
| 649 | 649 | e verifica che le immagini si vedano ancora |
| 650 | 650 | negli articoli.', |
| 651 | - 'texte_erreur_visiteur' => 'Si è tentato di entrare nell’area riservata con un login non valido.', |
|
| 652 | - 'texte_inc_auth_1' => 'Sei identificato con il |
|
| 651 | + 'texte_erreur_visiteur' => 'Si è tentato di entrare nell’area riservata con un login non valido.', |
|
| 652 | + 'texte_inc_auth_1' => 'Sei identificato con il |
|
| 653 | 653 | login <b>@auth_login@</b>, ma nel database non esiste. |
| 654 | 654 | Prova a ', |
| 655 | - 'texte_inc_auth_2' => 'collegarti nuovamente', |
|
| 656 | - 'texte_inc_auth_3' => ', dopo aver eventualmente effettuato un logout e |
|
| 655 | + 'texte_inc_auth_2' => 'collegarti nuovamente', |
|
| 656 | + 'texte_inc_auth_3' => ', dopo aver eventualmente effettuato un logout e |
|
| 657 | 657 | riavviato il tuo browser.', |
| 658 | - 'texte_inc_config' => 'Le modifiche effettuate in queste pagine influenzano notevolmente il |
|
| 658 | + 'texte_inc_config' => 'Le modifiche effettuate in queste pagine influenzano notevolmente il |
|
| 659 | 659 | funzionamento del sito. Non intervenire finché non conosci bene i meccanismi del sistema SPIP. <br /><br /><b>In generale, si consiglia di lasciare sempre al webmaster la configurazione delle opzioni qui presenti.</b>', |
| 660 | - 'texte_inc_meta_1' => 'La scrittura del file <code>@fichier@</code> ha causato un errore di sistema. L’amministratore del sito, ', |
|
| 661 | - 'texte_inc_meta_2' => 'verifichi i diritti di scrittura', |
|
| 662 | - 'texte_inc_meta_3' => 'nella cartella <code>@repertoire@</code>.', |
|
| 663 | - 'texte_statut_en_cours_redaction' => 'in corso di redazione', |
|
| 664 | - 'texte_statut_poubelle' => 'nel cestino', |
|
| 665 | - 'texte_statut_propose_evaluation' => 'proposto per una valutazione', |
|
| 666 | - 'texte_statut_publie' => 'pubblicato on line', |
|
| 667 | - 'texte_statut_refuse' => 'rifiutato', |
|
| 668 | - 'titre_ajouter_mot_cle' => 'AGGIUNGI UNA PAROLA CHIAVE:', |
|
| 669 | - 'titre_cadre_raccourcis' => 'SCELTA RAPIDA:', |
|
| 670 | - 'titre_changer_couleur_interface' => 'Cambia il colore dell’interfaccia', |
|
| 671 | - 'titre_image_admin_article' => 'Puoi amministrare questo articolo', |
|
| 672 | - 'titre_image_administrateur' => 'Amministratore', |
|
| 673 | - 'titre_image_aide' => 'Aiuto su questo elemento', |
|
| 674 | - 'titre_image_auteur_supprime' => 'Autore eliminato', |
|
| 675 | - 'titre_image_redacteur' => 'Redattore senza accesso', |
|
| 676 | - 'titre_image_redacteur_02' => 'Redattore', |
|
| 677 | - 'titre_image_selecteur' => 'Mostra la lista', |
|
| 678 | - 'titre_image_visiteur' => 'Visitatore', |
|
| 679 | - 'titre_joindre_document' => 'ALLEGA UN DOCUMENTO', |
|
| 680 | - 'titre_mots_cles' => 'PAROLE CHIAVE', |
|
| 681 | - 'titre_probleme_technique' => 'Attenzione: un problema tecnico (server SQL) impedisce l’accesso a questa parte del sito. Grazie per la comprensione.', |
|
| 682 | - 'titre_publier_document' => 'ALLEGA UN DOCUMENTO A QUESTA RUBRICA', |
|
| 683 | - 'titre_signatures_attente' => 'Firme in corso di convalida', |
|
| 684 | - 'titre_signatures_confirmees' => 'Firme confermate', |
|
| 685 | - 'titre_statistiques' => 'Statistiche del sito', |
|
| 686 | - 'titre_titre_document' => 'Titolo del documento:', |
|
| 687 | - 'todo' => 'prossimo', |
|
| 688 | - 'trad_definir_reference' => 'Scegliere "@titre@" come riferimento per le traduzioni', |
|
| 689 | - 'trad_reference' => '(articolo di riferimento)', |
|
| 660 | + 'texte_inc_meta_1' => 'La scrittura del file <code>@fichier@</code> ha causato un errore di sistema. L’amministratore del sito, ', |
|
| 661 | + 'texte_inc_meta_2' => 'verifichi i diritti di scrittura', |
|
| 662 | + 'texte_inc_meta_3' => 'nella cartella <code>@repertoire@</code>.', |
|
| 663 | + 'texte_statut_en_cours_redaction' => 'in corso di redazione', |
|
| 664 | + 'texte_statut_poubelle' => 'nel cestino', |
|
| 665 | + 'texte_statut_propose_evaluation' => 'proposto per una valutazione', |
|
| 666 | + 'texte_statut_publie' => 'pubblicato on line', |
|
| 667 | + 'texte_statut_refuse' => 'rifiutato', |
|
| 668 | + 'titre_ajouter_mot_cle' => 'AGGIUNGI UNA PAROLA CHIAVE:', |
|
| 669 | + 'titre_cadre_raccourcis' => 'SCELTA RAPIDA:', |
|
| 670 | + 'titre_changer_couleur_interface' => 'Cambia il colore dell’interfaccia', |
|
| 671 | + 'titre_image_admin_article' => 'Puoi amministrare questo articolo', |
|
| 672 | + 'titre_image_administrateur' => 'Amministratore', |
|
| 673 | + 'titre_image_aide' => 'Aiuto su questo elemento', |
|
| 674 | + 'titre_image_auteur_supprime' => 'Autore eliminato', |
|
| 675 | + 'titre_image_redacteur' => 'Redattore senza accesso', |
|
| 676 | + 'titre_image_redacteur_02' => 'Redattore', |
|
| 677 | + 'titre_image_selecteur' => 'Mostra la lista', |
|
| 678 | + 'titre_image_visiteur' => 'Visitatore', |
|
| 679 | + 'titre_joindre_document' => 'ALLEGA UN DOCUMENTO', |
|
| 680 | + 'titre_mots_cles' => 'PAROLE CHIAVE', |
|
| 681 | + 'titre_probleme_technique' => 'Attenzione: un problema tecnico (server SQL) impedisce l’accesso a questa parte del sito. Grazie per la comprensione.', |
|
| 682 | + 'titre_publier_document' => 'ALLEGA UN DOCUMENTO A QUESTA RUBRICA', |
|
| 683 | + 'titre_signatures_attente' => 'Firme in corso di convalida', |
|
| 684 | + 'titre_signatures_confirmees' => 'Firme confermate', |
|
| 685 | + 'titre_statistiques' => 'Statistiche del sito', |
|
| 686 | + 'titre_titre_document' => 'Titolo del documento:', |
|
| 687 | + 'todo' => 'prossimo', |
|
| 688 | + 'trad_definir_reference' => 'Scegliere "@titre@" come riferimento per le traduzioni', |
|
| 689 | + 'trad_reference' => '(articolo di riferimento)', |
|
| 690 | 690 | |
| 691 | - // U |
|
| 692 | - 'upload_limit' => 'Questo file è trppo grande per il server; la dimensione massima consentita in <i>upload</i> è di @max@.', |
|
| 691 | + // U |
|
| 692 | + 'upload_limit' => 'Questo file è trppo grande per il server; la dimensione massima consentita in <i>upload</i> è di @max@.', |
|
| 693 | 693 | |
| 694 | - // Z |
|
| 695 | - 'zbug_balise_b_aval' => ': ciclo B deve precedere ciclo BOUCLE', |
|
| 696 | - 'zbug_balise_inexistante' => 'errore @from@: il tag #@balise@ non esiste ', |
|
| 697 | - 'zbug_balise_sans_argument' => 'Argomento mancante nel tag @balise@', |
|
| 698 | - 'zbug_boucle' => 'ciclo', |
|
| 699 | - 'zbug_boucle_recursive_undef' => 'ciclo ricorsivo non definito', |
|
| 700 | - 'zbug_calcul' => 'calcolo', |
|
| 701 | - 'zbug_champ_hors_boucle' => 'Campo @champ@ fuori dal ciclo', |
|
| 702 | - 'zbug_champ_hors_critere' => 'Il campo @champ@ non rispetta il criterio @critere@', |
|
| 703 | - 'zbug_champ_hors_motif' => 'Campo @champ@ fuori da un contesto @motif@', |
|
| 704 | - 'zbug_code' => 'codice', |
|
| 705 | - 'zbug_critere_inconnu' => 'criterio sconosciuto @critere@', |
|
| 706 | - 'zbug_critere_sur_table_sans_cle_primaire' => '{@critere@} su una tabella senza una chiave primaria atomica', |
|
| 707 | - 'zbug_distant_interdit' => 'esterno non accessibile', |
|
| 708 | - 'zbug_doublon_table_sans_cle_primaire' => 'doppioni su una tabella senza chiave primaria atomica', |
|
| 709 | - 'zbug_doublon_table_sans_index' => 'doppioni su una tabella senza indice', |
|
| 710 | - 'zbug_erreur_boucle_double' => 'BOUCLE@id@: doppia definizione', |
|
| 711 | - 'zbug_erreur_boucle_fermant' => 'BOUCLE@id@: chiusura tag mancante', |
|
| 712 | - 'zbug_erreur_boucle_syntaxe' => 'Sintassi del ciclo errata', |
|
| 713 | - 'zbug_erreur_compilation' => 'Errore di compilazione', |
|
| 714 | - 'zbug_erreur_execution_page' => 'errore di esecuzione della pagina', |
|
| 715 | - 'zbug_erreur_filtre' => 'Errore : filtro <b>« @filtre@ »</b> non esistente', |
|
| 716 | - 'zbug_erreur_filtre_nbarg_min' => 'Filtro@filtre@: argomento(i) @nb@ mancante(i)', |
|
| 717 | - 'zbug_erreur_meme_parent' => 'il criterio {meme_parent} si applica unicamente ai cicli (FORUMS) o (RUBRIQUES)', |
|
| 718 | - 'zbug_erreur_squelette' => 'Errore/i nel modello di layout', |
|
| 719 | - 'zbug_hors_compilation' => 'Fuori Compilazione', |
|
| 720 | - 'zbug_info_erreur_squelette' => 'Errore sul sito', |
|
| 721 | - 'zbug_inversion_ordre_inexistant' => 'inversione di un ordine non esistente', |
|
| 722 | - 'zbug_pagination_sans_critere' => '#PAGINATION senza criterio {pagination} oppure usato in un ciclo ricorsivo', |
|
| 723 | - 'zbug_parametres_inclus_incorrects' => 'Parametri di inclusione non corretti', |
|
| 724 | - 'zbug_profile' => 'Tempo di elaborazione: @time@', |
|
| 725 | - 'zbug_resultat' => 'risultato', |
|
| 726 | - 'zbug_serveur_indefini' => 'server SQL non definito', |
|
| 727 | - 'zbug_statistiques' => 'Statistiche delle query SQL in ordine di durata', |
|
| 728 | - 'zbug_table_inconnue' => 'Tabella SQL « @table@ » sconosciuta', |
|
| 729 | - 'zxml_connus_attributs' => 'attributi conosciuti', |
|
| 730 | - 'zxml_de' => 'di', |
|
| 731 | - 'zxml_inconnu_attribut' => 'attributo sconosciuto', |
|
| 732 | - 'zxml_inconnu_balise' => 'segnaposto sconosciuto', |
|
| 733 | - 'zxml_inconnu_entite' => 'entità sconosciuta', |
|
| 734 | - 'zxml_inconnu_id' => 'ID sconosciuto', |
|
| 735 | - 'zxml_mais_de' => 'ma di', |
|
| 736 | - 'zxml_non_conforme' => 'non è conforme al motivo', |
|
| 737 | - 'zxml_non_fils' => 'non è un figlio di', |
|
| 738 | - 'zxml_nonvide_balise' => 'segnaposto non vuoto', |
|
| 739 | - 'zxml_obligatoire_attribut' => 'attributo obbligatorio ma assente in', |
|
| 740 | - 'zxml_succession_fils_incorrecte' => 'successione dei figli non corretta', |
|
| 741 | - 'zxml_survoler' => 'passarci sopra col mouse per vedere i corretti', |
|
| 742 | - 'zxml_valeur_attribut' => 'valore dell’attributo', |
|
| 743 | - 'zxml_vide_balise' => 'tag vuoto', |
|
| 744 | - 'zxml_vu' => 'visto in precedenza' |
|
| 694 | + // Z |
|
| 695 | + 'zbug_balise_b_aval' => ': ciclo B deve precedere ciclo BOUCLE', |
|
| 696 | + 'zbug_balise_inexistante' => 'errore @from@: il tag #@balise@ non esiste ', |
|
| 697 | + 'zbug_balise_sans_argument' => 'Argomento mancante nel tag @balise@', |
|
| 698 | + 'zbug_boucle' => 'ciclo', |
|
| 699 | + 'zbug_boucle_recursive_undef' => 'ciclo ricorsivo non definito', |
|
| 700 | + 'zbug_calcul' => 'calcolo', |
|
| 701 | + 'zbug_champ_hors_boucle' => 'Campo @champ@ fuori dal ciclo', |
|
| 702 | + 'zbug_champ_hors_critere' => 'Il campo @champ@ non rispetta il criterio @critere@', |
|
| 703 | + 'zbug_champ_hors_motif' => 'Campo @champ@ fuori da un contesto @motif@', |
|
| 704 | + 'zbug_code' => 'codice', |
|
| 705 | + 'zbug_critere_inconnu' => 'criterio sconosciuto @critere@', |
|
| 706 | + 'zbug_critere_sur_table_sans_cle_primaire' => '{@critere@} su una tabella senza una chiave primaria atomica', |
|
| 707 | + 'zbug_distant_interdit' => 'esterno non accessibile', |
|
| 708 | + 'zbug_doublon_table_sans_cle_primaire' => 'doppioni su una tabella senza chiave primaria atomica', |
|
| 709 | + 'zbug_doublon_table_sans_index' => 'doppioni su una tabella senza indice', |
|
| 710 | + 'zbug_erreur_boucle_double' => 'BOUCLE@id@: doppia definizione', |
|
| 711 | + 'zbug_erreur_boucle_fermant' => 'BOUCLE@id@: chiusura tag mancante', |
|
| 712 | + 'zbug_erreur_boucle_syntaxe' => 'Sintassi del ciclo errata', |
|
| 713 | + 'zbug_erreur_compilation' => 'Errore di compilazione', |
|
| 714 | + 'zbug_erreur_execution_page' => 'errore di esecuzione della pagina', |
|
| 715 | + 'zbug_erreur_filtre' => 'Errore : filtro <b>« @filtre@ »</b> non esistente', |
|
| 716 | + 'zbug_erreur_filtre_nbarg_min' => 'Filtro@filtre@: argomento(i) @nb@ mancante(i)', |
|
| 717 | + 'zbug_erreur_meme_parent' => 'il criterio {meme_parent} si applica unicamente ai cicli (FORUMS) o (RUBRIQUES)', |
|
| 718 | + 'zbug_erreur_squelette' => 'Errore/i nel modello di layout', |
|
| 719 | + 'zbug_hors_compilation' => 'Fuori Compilazione', |
|
| 720 | + 'zbug_info_erreur_squelette' => 'Errore sul sito', |
|
| 721 | + 'zbug_inversion_ordre_inexistant' => 'inversione di un ordine non esistente', |
|
| 722 | + 'zbug_pagination_sans_critere' => '#PAGINATION senza criterio {pagination} oppure usato in un ciclo ricorsivo', |
|
| 723 | + 'zbug_parametres_inclus_incorrects' => 'Parametri di inclusione non corretti', |
|
| 724 | + 'zbug_profile' => 'Tempo di elaborazione: @time@', |
|
| 725 | + 'zbug_resultat' => 'risultato', |
|
| 726 | + 'zbug_serveur_indefini' => 'server SQL non definito', |
|
| 727 | + 'zbug_statistiques' => 'Statistiche delle query SQL in ordine di durata', |
|
| 728 | + 'zbug_table_inconnue' => 'Tabella SQL « @table@ » sconosciuta', |
|
| 729 | + 'zxml_connus_attributs' => 'attributi conosciuti', |
|
| 730 | + 'zxml_de' => 'di', |
|
| 731 | + 'zxml_inconnu_attribut' => 'attributo sconosciuto', |
|
| 732 | + 'zxml_inconnu_balise' => 'segnaposto sconosciuto', |
|
| 733 | + 'zxml_inconnu_entite' => 'entità sconosciuta', |
|
| 734 | + 'zxml_inconnu_id' => 'ID sconosciuto', |
|
| 735 | + 'zxml_mais_de' => 'ma di', |
|
| 736 | + 'zxml_non_conforme' => 'non è conforme al motivo', |
|
| 737 | + 'zxml_non_fils' => 'non è un figlio di', |
|
| 738 | + 'zxml_nonvide_balise' => 'segnaposto non vuoto', |
|
| 739 | + 'zxml_obligatoire_attribut' => 'attributo obbligatorio ma assente in', |
|
| 740 | + 'zxml_succession_fils_incorrecte' => 'successione dei figli non corretta', |
|
| 741 | + 'zxml_survoler' => 'passarci sopra col mouse per vedere i corretti', |
|
| 742 | + 'zxml_valeur_attribut' => 'valore dell’attributo', |
|
| 743 | + 'zxml_vide_balise' => 'tag vuoto', |
|
| 744 | + 'zxml_vu' => 'visto in precedenza' |
|
| 745 | 745 | ); |
@@ -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,22 +117,22 @@ 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(); |
|
| 126 | + $edition = lire_tableau_edition(); |
|
| 127 | 127 | |
| 128 | - $nom = $auteur['nom'] ?? $GLOBALS['ip']; |
|
| 129 | - $id_a = $auteur['id_auteur'] ?? $GLOBALS['ip']; |
|
| 128 | + $nom = $auteur['nom'] ?? $GLOBALS['ip']; |
|
| 129 | + $id_a = $auteur['id_auteur'] ?? $GLOBALS['ip']; |
|
| 130 | 130 | |
| 131 | - if (!isset($edition[$type][$id]) or !is_array($edition[$type][$id])) { |
|
| 132 | - $edition[$type][$id] = []; |
|
| 133 | - } |
|
| 134 | - $edition[$type][$id][$id_a][$nom] = time(); |
|
| 135 | - ecrire_tableau_edition($edition); |
|
| 131 | + if (!isset($edition[$type][$id]) or !is_array($edition[$type][$id])) { |
|
| 132 | + $edition[$type][$id] = []; |
|
| 133 | + } |
|
| 134 | + $edition[$type][$id][$id_a][$nom] = time(); |
|
| 135 | + ecrire_tableau_edition($edition); |
|
| 136 | 136 | } |
| 137 | 137 | |
| 138 | 138 | /** |
@@ -149,9 +149,9 @@ discard block |
||
| 149 | 149 | */ |
| 150 | 150 | function qui_edite($id, $type = 'article') { |
| 151 | 151 | |
| 152 | - $edition = lire_tableau_edition(); |
|
| 152 | + $edition = lire_tableau_edition(); |
|
| 153 | 153 | |
| 154 | - return empty($edition[$type][$id]) ? [] : $edition[$type][$id]; |
|
| 154 | + return empty($edition[$type][$id]) ? [] : $edition[$type][$id]; |
|
| 155 | 155 | } |
| 156 | 156 | |
| 157 | 157 | /** |
@@ -165,23 +165,23 @@ discard block |
||
| 165 | 165 | * Liste de tableaux `['nom_auteur_modif' => x|y|z, 'date_diff' => n]` |
| 166 | 166 | */ |
| 167 | 167 | function mention_qui_edite($id, $type = 'article'): array { |
| 168 | - $modif = qui_edite($id, $type); |
|
| 169 | - unset($modif[$GLOBALS['visiteur_session']['id_auteur']]); |
|
| 168 | + $modif = qui_edite($id, $type); |
|
| 169 | + unset($modif[$GLOBALS['visiteur_session']['id_auteur']]); |
|
| 170 | 170 | |
| 171 | - if ($modif) { |
|
| 172 | - $quand = 0; |
|
| 173 | - foreach ($modif as $duo) { |
|
| 174 | - $auteurs[] = typo(key($duo)); |
|
| 175 | - $quand = max($quand, current($duo)); |
|
| 176 | - } |
|
| 171 | + if ($modif) { |
|
| 172 | + $quand = 0; |
|
| 173 | + foreach ($modif as $duo) { |
|
| 174 | + $auteurs[] = typo(key($duo)); |
|
| 175 | + $quand = max($quand, current($duo)); |
|
| 176 | + } |
|
| 177 | 177 | |
| 178 | - // format lie a la chaine de langue 'avis_article_modifie' |
|
| 179 | - return [ |
|
| 180 | - 'nom_auteur_modif' => join(' | ', $auteurs), |
|
| 181 | - 'date_diff' => ceil((time() - $quand) / 60) |
|
| 182 | - ]; |
|
| 183 | - } |
|
| 184 | - return []; |
|
| 178 | + // format lie a la chaine de langue 'avis_article_modifie' |
|
| 179 | + return [ |
|
| 180 | + 'nom_auteur_modif' => join(' | ', $auteurs), |
|
| 181 | + 'date_diff' => ceil((time() - $quand) / 60) |
|
| 182 | + ]; |
|
| 183 | + } |
|
| 184 | + return []; |
|
| 185 | 185 | } |
| 186 | 186 | |
| 187 | 187 | /** |
@@ -195,25 +195,25 @@ discard block |
||
| 195 | 195 | * Liste de tableaux `['objet' => x, 'id_objet' => n]` |
| 196 | 196 | */ |
| 197 | 197 | function liste_drapeau_edition($id_auteur) { |
| 198 | - $edition = lire_tableau_edition(); |
|
| 199 | - $objets_ouverts = []; |
|
| 198 | + $edition = lire_tableau_edition(); |
|
| 199 | + $objets_ouverts = []; |
|
| 200 | 200 | |
| 201 | - foreach ($edition as $objet => $data) { |
|
| 202 | - foreach ($data as $id => $auteurs) { |
|
| 203 | - if ( |
|
| 204 | - isset($auteurs[$id_auteur]) |
|
| 205 | - and is_array($auteurs[$id_auteur]) // precaution |
|
| 206 | - and (array_pop($auteurs[$id_auteur]) > time() - 3600) |
|
| 207 | - ) { |
|
| 208 | - $objets_ouverts[] = [ |
|
| 209 | - 'objet' => $objet, |
|
| 210 | - 'id_objet' => $id, |
|
| 211 | - ]; |
|
| 212 | - } |
|
| 213 | - } |
|
| 214 | - } |
|
| 201 | + foreach ($edition as $objet => $data) { |
|
| 202 | + foreach ($data as $id => $auteurs) { |
|
| 203 | + if ( |
|
| 204 | + isset($auteurs[$id_auteur]) |
|
| 205 | + and is_array($auteurs[$id_auteur]) // precaution |
|
| 206 | + and (array_pop($auteurs[$id_auteur]) > time() - 3600) |
|
| 207 | + ) { |
|
| 208 | + $objets_ouverts[] = [ |
|
| 209 | + 'objet' => $objet, |
|
| 210 | + 'id_objet' => $id, |
|
| 211 | + ]; |
|
| 212 | + } |
|
| 213 | + } |
|
| 214 | + } |
|
| 215 | 215 | |
| 216 | - return $objets_ouverts; |
|
| 216 | + return $objets_ouverts; |
|
| 217 | 217 | } |
| 218 | 218 | |
| 219 | 219 | /** |
@@ -226,15 +226,15 @@ discard block |
||
| 226 | 226 | * @return void |
| 227 | 227 | */ |
| 228 | 228 | function debloquer_tous($id_auteur) { |
| 229 | - $edition = lire_tableau_edition(); |
|
| 230 | - foreach ($edition as $objet => $data) { |
|
| 231 | - foreach ($data as $id => $auteurs) { |
|
| 232 | - if (isset($auteurs[$id_auteur])) { |
|
| 233 | - unset($edition[$objet][$id][$id_auteur]); |
|
| 234 | - ecrire_tableau_edition($edition); |
|
| 235 | - } |
|
| 236 | - } |
|
| 237 | - } |
|
| 229 | + $edition = lire_tableau_edition(); |
|
| 230 | + foreach ($edition as $objet => $data) { |
|
| 231 | + foreach ($data as $id => $auteurs) { |
|
| 232 | + if (isset($auteurs[$id_auteur])) { |
|
| 233 | + unset($edition[$objet][$id][$id_auteur]); |
|
| 234 | + ecrire_tableau_edition($edition); |
|
| 235 | + } |
|
| 236 | + } |
|
| 237 | + } |
|
| 238 | 238 | } |
| 239 | 239 | |
| 240 | 240 | /** |
@@ -252,19 +252,19 @@ discard block |
||
| 252 | 252 | * @return void |
| 253 | 253 | */ |
| 254 | 254 | function debloquer_edition($id_auteur, $id_objet, $type = 'article') { |
| 255 | - $edition = lire_tableau_edition(); |
|
| 255 | + $edition = lire_tableau_edition(); |
|
| 256 | 256 | |
| 257 | - foreach ($edition as $objet => $data) { |
|
| 258 | - if ($objet == $type) { |
|
| 259 | - foreach ($data as $id => $auteurs) { |
|
| 260 | - if ( |
|
| 261 | - $id == $id_objet |
|
| 262 | - and isset($auteurs[$id_auteur]) |
|
| 263 | - ) { |
|
| 264 | - unset($edition[$objet][$id][$id_auteur]); |
|
| 265 | - ecrire_tableau_edition($edition); |
|
| 266 | - } |
|
| 267 | - } |
|
| 268 | - } |
|
| 269 | - } |
|
| 257 | + foreach ($edition as $objet => $data) { |
|
| 258 | + if ($objet == $type) { |
|
| 259 | + foreach ($data as $id => $auteurs) { |
|
| 260 | + if ( |
|
| 261 | + $id == $id_objet |
|
| 262 | + and isset($auteurs[$id_auteur]) |
|
| 263 | + ) { |
|
| 264 | + unset($edition[$objet][$id][$id_auteur]); |
|
| 265 | + ecrire_tableau_edition($edition); |
|
| 266 | + } |
|
| 267 | + } |
|
| 268 | + } |
|
| 269 | + } |
|
| 270 | 270 | } |