Completed
Push — master ( 89cac1...7b34bc )
by cam
01:10
created
ecrire/lang/ecrire_it_fem.php 1 patch
Indentation   +683 added lines, -683 removed lines patch added patch discarded remove patch
@@ -4,364 +4,364 @@  discard block
 block discarded – undo
4 4
 // ** ne pas modifier le fichier **
5 5
 
6 6
 if (!defined('_ECRIRE_INC_VERSION')) {
7
-	return;
7
+    return;
8 8
 }
9 9
 
10 10
 $GLOBALS[$GLOBALS['idx_lang']] = array(
11 11
 
12
-	// A
13
-	'activer_plugin' => 'Attiva il plugin',
14
-	'affichage' => 'Visualizzazione',
15
-	'aide_non_disponible' => 'Questa parte della guida in linea non è ancora disponibile in italiano.',
16
-	'annuler_recherche' => 'Annullare la ricerca',
17
-	'auteur' => 'Autrice:',
18
-	'avis_acces_interdit' => 'Accesso vietato.',
19
-	'avis_article_modifie' => 'Attenzione, @nom_auteur_modif@ ha lavorato su quest’articolo @date_diff@ minuti fa',
20
-	'avis_aucun_resultat' => 'Nessun risultato.',
21
-	'avis_base_inaccessible' => 'Impossibile connettersi al database @base@.',
22
-	'avis_chemin_invalide_1' => 'il percorso che hai scelto',
23
-	'avis_chemin_invalide_2' => 'non sembra valido. Torna alla pagina precedente e verifica le informazioni fornite.',
24
-	'avis_connexion_echec_1' => 'il collegamento alla base di dati è fallito.',
25
-	'avis_connexion_echec_2' => 'torna alla pagina precedente e verifica le informazioni fornite.',
26
-	'avis_connexion_echec_3' => '<b>N.B.</b> Spesso sul server si deve <b>chiedere</b> l’attivazione dell’accesso alla base di dati prima di poterlo utilizzare. Se è impossibile collegarsi, verificare la configurazione per la connessione con l’amministratrice del sistema.',
27
-	'avis_connexion_erreur_nom_base' => 'Il nome del database può contenere solo lettere, cifre e tratti',
28
-	'avis_connexion_ldap_echec_1' => 'La connessione al server LDAP è fallita.',
29
-	'avis_connexion_ldap_echec_2' => 'Torna alla pagina precedente e verifica le informazioni fornite. ',
30
-	'avis_connexion_ldap_echec_3' => 'In alternativa, non utilizzare il supporto LDAP per importare utenti.',
31
-	'avis_deplacement_rubrique' => 'Attenzione! Questa rubrica contiene @contient_breves@ breve/i: se vuoi spostarla, spunta questa casella per confermare.',
32
-	'avis_erreur_connexion_mysql' => 'Errore di connessione SQL',
33
-	'avis_espace_interdit' => '<b>Area vietata</b> <div>SPIP è già installato.</div>',
34
-	'avis_lecture_noms_bases_1' => 'Il programma di installazione non ha potuto leggere i nomi dei database installati nel server.',
35
-	'avis_lecture_noms_bases_2' => 'Nessun database è disponibile, o la funzione che permette di accedere alla lista database è
12
+    // A
13
+    'activer_plugin' => 'Attiva il plugin',
14
+    'affichage' => 'Visualizzazione',
15
+    'aide_non_disponible' => 'Questa parte della guida in linea non è ancora disponibile in italiano.',
16
+    'annuler_recherche' => 'Annullare la ricerca',
17
+    'auteur' => 'Autrice:',
18
+    'avis_acces_interdit' => 'Accesso vietato.',
19
+    'avis_article_modifie' => 'Attenzione, @nom_auteur_modif@ ha lavorato su quest’articolo @date_diff@ minuti fa',
20
+    'avis_aucun_resultat' => 'Nessun risultato.',
21
+    'avis_base_inaccessible' => 'Impossibile connettersi al database @base@.',
22
+    'avis_chemin_invalide_1' => 'il percorso che hai scelto',
23
+    'avis_chemin_invalide_2' => 'non sembra valido. Torna alla pagina precedente e verifica le informazioni fornite.',
24
+    'avis_connexion_echec_1' => 'il collegamento alla base di dati è fallito.',
25
+    'avis_connexion_echec_2' => 'torna alla pagina precedente e verifica le informazioni fornite.',
26
+    'avis_connexion_echec_3' => '<b>N.B.</b> Spesso sul server si deve <b>chiedere</b> l’attivazione dell’accesso alla base di dati prima di poterlo utilizzare. Se è impossibile collegarsi, verificare la configurazione per la connessione con l’amministratrice del sistema.',
27
+    'avis_connexion_erreur_nom_base' => 'Il nome del database può contenere solo lettere, cifre e tratti',
28
+    'avis_connexion_ldap_echec_1' => 'La connessione al server LDAP è fallita.',
29
+    'avis_connexion_ldap_echec_2' => 'Torna alla pagina precedente e verifica le informazioni fornite. ',
30
+    'avis_connexion_ldap_echec_3' => 'In alternativa, non utilizzare il supporto LDAP per importare utenti.',
31
+    'avis_deplacement_rubrique' => 'Attenzione! Questa rubrica contiene @contient_breves@ breve/i: se vuoi spostarla, spunta questa casella per confermare.',
32
+    'avis_erreur_connexion_mysql' => 'Errore di connessione SQL',
33
+    'avis_espace_interdit' => '<b>Area vietata</b> <div>SPIP è già installato.</div>',
34
+    'avis_lecture_noms_bases_1' => 'Il programma di installazione non ha potuto leggere i nomi dei database installati nel server.',
35
+    'avis_lecture_noms_bases_2' => 'Nessun database è disponibile, o la funzione che permette di accedere alla lista database è
36 36
 disattivata per motivi sicurezza (verifica con l’amministratrice di sistema).',
37
-	'avis_lecture_noms_bases_3' => 'Nel secondo caso, è probabile che un database con il tuo nome di login sia utilizzabile:',
38
-	'avis_non_acces_page' => 'Non hai accesso a questa pagina.',
39
-	'avis_operation_echec' => 'L’operazione è fallita.',
40
-	'avis_operation_impossible' => 'Operazione impossibile',
41
-	'avis_suppression_base' => 'ATTENZIONE, la cancellazione dei dati è irreversibile',
37
+    'avis_lecture_noms_bases_3' => 'Nel secondo caso, è probabile che un database con il tuo nome di login sia utilizzabile:',
38
+    'avis_non_acces_page' => 'Non hai accesso a questa pagina.',
39
+    'avis_operation_echec' => 'L’operazione è fallita.',
40
+    'avis_operation_impossible' => 'Operazione impossibile',
41
+    'avis_suppression_base' => 'ATTENZIONE, la cancellazione dei dati è irreversibile',
42 42
 
43
-	// B
44
-	'bouton_acces_ldap' => 'Aggiungi l’accesso a LDAP',
45
-	'bouton_ajouter' => 'Aggiungi',
46
-	'bouton_annuler' => 'Annulla',
47
-	'bouton_cache_activer' => 'Riattivare la cache',
48
-	'bouton_cache_desactiver' => 'Disattivare temporaneamente la cache',
49
-	'bouton_demande_publication' => 'Chiedi la pubblicazione di questo articolo',
50
-	'bouton_desactive_tout' => 'Disattiva tutto',
51
-	'bouton_desinstaller' => 'Disinstalla',
52
-	'bouton_effacer_tout' => 'Cancella TUTTO',
53
-	'bouton_envoyer_message' => 'Messaggio definitivo: Invia',
54
-	'bouton_fermer' => 'Chiudere',
55
-	'bouton_mettre_a_jour_base' => 'Aggiornare il database',
56
-	'bouton_modifier' => 'Modifica',
57
-	'bouton_radio_afficher' => 'Visualizza',
58
-	'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Comparire nell’elenco delle redattrici collegate',
59
-	'bouton_radio_envoi_annonces_adresse' => 'Invia gli annunci all’indirizzo:',
60
-	'bouton_radio_envoi_liste_nouveautes' => 'Invia l’elenco delle novità',
61
-	'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Non comparire nell’elenco delle redattrici collegate ',
62
-	'bouton_radio_non_envoi_annonces_editoriales' => 'Non inviare annunci editoriali ',
63
-	'bouton_redirection' => 'REINDIRIZZAMENTO',
64
-	'bouton_relancer_installation' => 'Rilanciare l’installazione',
65
-	'bouton_suivant' => 'Avanti',
66
-	'bouton_tenter_recuperation' => 'Tentare un ripristino',
67
-	'bouton_test_proxy' => 'Testare il proxy',
68
-	'bouton_vider_cache' => 'Svuota la cache',
43
+    // B
44
+    'bouton_acces_ldap' => 'Aggiungi l’accesso a LDAP',
45
+    'bouton_ajouter' => 'Aggiungi',
46
+    'bouton_annuler' => 'Annulla',
47
+    'bouton_cache_activer' => 'Riattivare la cache',
48
+    'bouton_cache_desactiver' => 'Disattivare temporaneamente la cache',
49
+    'bouton_demande_publication' => 'Chiedi la pubblicazione di questo articolo',
50
+    'bouton_desactive_tout' => 'Disattiva tutto',
51
+    'bouton_desinstaller' => 'Disinstalla',
52
+    'bouton_effacer_tout' => 'Cancella TUTTO',
53
+    'bouton_envoyer_message' => 'Messaggio definitivo: Invia',
54
+    'bouton_fermer' => 'Chiudere',
55
+    'bouton_mettre_a_jour_base' => 'Aggiornare il database',
56
+    'bouton_modifier' => 'Modifica',
57
+    'bouton_radio_afficher' => 'Visualizza',
58
+    'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Comparire nell’elenco delle redattrici collegate',
59
+    'bouton_radio_envoi_annonces_adresse' => 'Invia gli annunci all’indirizzo:',
60
+    'bouton_radio_envoi_liste_nouveautes' => 'Invia l’elenco delle novità',
61
+    'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Non comparire nell’elenco delle redattrici collegate ',
62
+    'bouton_radio_non_envoi_annonces_editoriales' => 'Non inviare annunci editoriali ',
63
+    'bouton_redirection' => 'REINDIRIZZAMENTO',
64
+    'bouton_relancer_installation' => 'Rilanciare l’installazione',
65
+    'bouton_suivant' => 'Avanti',
66
+    'bouton_tenter_recuperation' => 'Tentare un ripristino',
67
+    'bouton_test_proxy' => 'Testare il proxy',
68
+    'bouton_vider_cache' => 'Svuota la cache',
69 69
 
70
-	// C
71
-	'cache_modifiable_webmestre' => 'Questo parametro può essere modificato dalla webmistress del sito.',
72
-	'calendrier_synchro' => 'Se si utilizza un programma di agenda compatibile con <b>iCal</b>, è possibile sincronizzare i dati con le informazioni di questo sito',
73
-	'config_activer_champs' => 'Attiva i campi seguenti',
74
-	'config_choix_base_sup' => 'indicare un database su questo server',
75
-	'config_erreur_base_sup' => 'SPIP non ha accesso all’elenco dei database accessibili ',
76
-	'config_info_base_sup' => 'Se si hanno altri database da interrogare attraverso SPIP, con il proprio server SQL o altro, il form sottostante permette di dichiararli. Se si lasciano alcuni campi vuoti verranno utilizzati i dati della connessione al database principale.',
77
-	'config_info_base_sup_disponibles' => 'Database supplementari già dichiarati:',
78
-	'config_info_enregistree' => 'La nuova configurazione è stata registrata',
79
-	'config_info_logos' => 'Ogni elemento del sito può avere un logo, come pure un « logo per il roll-over »',
80
-	'config_info_logos_utiliser' => 'Utilizza i logo',
81
-	'config_info_logos_utiliser_non' => 'Non utilizzare i logo',
82
-	'config_info_logos_utiliser_survol' => 'Utilizzare i logo di roll-over',
83
-	'config_info_logos_utiliser_survol_non' => 'Non utilizzare i logo di roll-over',
84
-	'config_info_redirection' => 'Attivando questa opzione è possibile creare degli articoli virtuali, semplici riferimenti di articoli pubblicati su altri siti o al di fuori di SPIP.',
85
-	'config_redirection' => 'Articoli virtuali',
86
-	'config_titre_base_sup' => 'Dichiarazione di un database supplementare',
87
-	'config_titre_base_sup_choix' => 'Scegliere un database supplementare',
88
-	'connexion_ldap' => 'Connessione:',
89
-	'creer_et_associer_un_auteur' => 'Creare ed associare un’autrice',
70
+    // C
71
+    'cache_modifiable_webmestre' => 'Questo parametro può essere modificato dalla webmistress del sito.',
72
+    'calendrier_synchro' => 'Se si utilizza un programma di agenda compatibile con <b>iCal</b>, è possibile sincronizzare i dati con le informazioni di questo sito',
73
+    'config_activer_champs' => 'Attiva i campi seguenti',
74
+    'config_choix_base_sup' => 'indicare un database su questo server',
75
+    'config_erreur_base_sup' => 'SPIP non ha accesso all’elenco dei database accessibili ',
76
+    'config_info_base_sup' => 'Se si hanno altri database da interrogare attraverso SPIP, con il proprio server SQL o altro, il form sottostante permette di dichiararli. Se si lasciano alcuni campi vuoti verranno utilizzati i dati della connessione al database principale.',
77
+    'config_info_base_sup_disponibles' => 'Database supplementari già dichiarati:',
78
+    'config_info_enregistree' => 'La nuova configurazione è stata registrata',
79
+    'config_info_logos' => 'Ogni elemento del sito può avere un logo, come pure un « logo per il roll-over »',
80
+    'config_info_logos_utiliser' => 'Utilizza i logo',
81
+    'config_info_logos_utiliser_non' => 'Non utilizzare i logo',
82
+    'config_info_logos_utiliser_survol' => 'Utilizzare i logo di roll-over',
83
+    'config_info_logos_utiliser_survol_non' => 'Non utilizzare i logo di roll-over',
84
+    'config_info_redirection' => 'Attivando questa opzione è possibile creare degli articoli virtuali, semplici riferimenti di articoli pubblicati su altri siti o al di fuori di SPIP.',
85
+    'config_redirection' => 'Articoli virtuali',
86
+    'config_titre_base_sup' => 'Dichiarazione di un database supplementare',
87
+    'config_titre_base_sup_choix' => 'Scegliere un database supplementare',
88
+    'connexion_ldap' => 'Connessione:',
89
+    'creer_et_associer_un_auteur' => 'Creare ed associare un’autrice',
90 90
 
91
-	// D
92
-	'date_mot_heures' => 'ore',
91
+    // D
92
+    'date_mot_heures' => 'ore',
93 93
 
94
-	// E
95
-	'ecran_securite' => ' + schermo di sicurezza @version@', # RELIRE
96
-	'email' => 'email',
97
-	'email_2' => 'email:',
98
-	'en_savoir_plus' => 'Ulteriori informazioni', # RELIRE
99
-	'entree_adresse_annuaire' => 'Indirizzo della rubrica',
100
-	'entree_adresse_email' => 'Il tuo indirizzo email',
101
-	'entree_adresse_email_2' => 'Indirizzo email',
102
-	'entree_base_donnee_1' => 'Indirizzo del database',
103
-	'entree_base_donnee_2' => '(Spesso questo indirizzo coincide con quello dell’intero sito, qualche volta corrisponde a "localhost", altre volte invece non è necessario specificarlo.)',
104
-	'entree_biographie' => 'La tua biografia in breve.',
105
-	'entree_chemin_acces' => '<b>Inserire</b> il percorso d’accesso:',
106
-	'entree_cle_pgp' => 'Chiave PGP',
107
-	'entree_cle_pgp_2' => 'Autenticazione', # RELIRE
108
-	'entree_contenu_rubrique' => '(Contenuto della rubrica in qualche parola)',
109
-	'entree_identifiants_connexion' => 'Identificativo di connessione...',
110
-	'entree_identifiants_connexion_2' => 'Identificativo', # RELIRE
111
-	'entree_informations_connexion_ldap' => 'Inserisci in questo form gli estremi per la connessione alla tua rubrica LDAP.
94
+    // E
95
+    'ecran_securite' => ' + schermo di sicurezza @version@', # RELIRE
96
+    'email' => 'email',
97
+    'email_2' => 'email:',
98
+    'en_savoir_plus' => 'Ulteriori informazioni', # RELIRE
99
+    'entree_adresse_annuaire' => 'Indirizzo della rubrica',
100
+    'entree_adresse_email' => 'Il tuo indirizzo email',
101
+    'entree_adresse_email_2' => 'Indirizzo email',
102
+    'entree_base_donnee_1' => 'Indirizzo del database',
103
+    'entree_base_donnee_2' => '(Spesso questo indirizzo coincide con quello dell’intero sito, qualche volta corrisponde a "localhost", altre volte invece non è necessario specificarlo.)',
104
+    'entree_biographie' => 'La tua biografia in breve.',
105
+    'entree_chemin_acces' => '<b>Inserire</b> il percorso d’accesso:',
106
+    'entree_cle_pgp' => 'Chiave PGP',
107
+    'entree_cle_pgp_2' => 'Autenticazione', # RELIRE
108
+    'entree_contenu_rubrique' => '(Contenuto della rubrica in qualche parola)',
109
+    'entree_identifiants_connexion' => 'Identificativo di connessione...',
110
+    'entree_identifiants_connexion_2' => 'Identificativo', # RELIRE
111
+    'entree_informations_connexion_ldap' => 'Inserisci in questo form gli estremi per la connessione alla tua rubrica LDAP.
112 112
 Se non conosci queste informazioni, richiedile all’amministratrice del sistema o della rete.',
113
-	'entree_infos_perso' => 'Chi sei?',
114
-	'entree_infos_perso_2' => 'Chi è l’autrice ?',
115
-	'entree_interieur_rubrique' => 'All’interno della rubrica:',
116
-	'entree_liens_sites' => '<b>Link ipertestuale</b> (riferimento, sito da visitare...)',
117
-	'entree_login' => 'Login',
118
-	'entree_login_connexion_1' => 'Il login di connessione',
119
-	'entree_login_connexion_2' => '(Corrisponde a volte al login d’accesso via FTP; in alcuni casi non occorre specificare nulla)',
120
-	'entree_mot_passe' => 'Password',
121
-	'entree_mot_passe_1' => 'La password di connessione',
122
-	'entree_mot_passe_2' => '(Corrisponde a volte alla password d’accesso via FTP; in alcuni casi non occorre specificare nulla)',
123
-	'entree_nom_fichier' => 'Inserire il nome del file @texte_compresse@:',
124
-	'entree_nom_pseudo' => 'Nome o pseudonimo',
125
-	'entree_nom_pseudo_1' => '(Nome o pseudonimo)',
126
-	'entree_nom_pseudo_2' => 'Nome o pseudonimo',
127
-	'entree_nom_site' => 'Nome del tuo sito',
128
-	'entree_nom_site_2' => 'Nome del sito dell’autrice', # RELIRE
129
-	'entree_nouveau_passe' => 'Nuova password',
130
-	'entree_passe_ldap' => 'Password',
131
-	'entree_port_annuaire' => 'Il numero di porta della rubrica',
132
-	'entree_signature' => 'Firma',
133
-	'entree_titre_obligatoire' => '<b>Titolo</b> [Obbligatorio]<br />',
134
-	'entree_url' => 'Indirizzo (URL) del sito',
135
-	'entree_url_2' => 'Indirizzo (URL) del sito',
136
-	'erreur_connect_deja_existant' => 'Esiste già un server con questo nome', # RELIRE
137
-	'erreur_email_deja_existant' => 'Questo indirizzo email è già registrato',
138
-	'erreur_nom_connect_incorrect' => 'Questo nome non è autorizzato', # RELIRE
139
-	'erreur_plugin_desinstalation_echouee' => 'La disinstallazione del plug in è fallita. E’ comunque possibile disattivarlo.', # RELIRE
140
-	'erreur_plugin_fichier_absent' => 'File non presente',
141
-	'erreur_plugin_fichier_def_absent' => 'File di definizioni non presente',
142
-	'erreur_plugin_nom_fonction_interdit' => 'Nome di funzione non possibile',
143
-	'erreur_plugin_nom_manquant' => 'Nome del plugin mancante',
144
-	'erreur_plugin_prefix_manquant' => 'Spazio per il nome del plugin non definito',
145
-	'erreur_plugin_tag_plugin_absent' => '&lt;plugin&gt; mancante nel file di definizione',
146
-	'erreur_plugin_version_manquant' => 'Versione del plugin mancante',
113
+    'entree_infos_perso' => 'Chi sei?',
114
+    'entree_infos_perso_2' => 'Chi è l’autrice ?',
115
+    'entree_interieur_rubrique' => 'All’interno della rubrica:',
116
+    'entree_liens_sites' => '<b>Link ipertestuale</b> (riferimento, sito da visitare...)',
117
+    'entree_login' => 'Login',
118
+    'entree_login_connexion_1' => 'Il login di connessione',
119
+    'entree_login_connexion_2' => '(Corrisponde a volte al login d’accesso via FTP; in alcuni casi non occorre specificare nulla)',
120
+    'entree_mot_passe' => 'Password',
121
+    'entree_mot_passe_1' => 'La password di connessione',
122
+    'entree_mot_passe_2' => '(Corrisponde a volte alla password d’accesso via FTP; in alcuni casi non occorre specificare nulla)',
123
+    'entree_nom_fichier' => 'Inserire il nome del file @texte_compresse@:',
124
+    'entree_nom_pseudo' => 'Nome o pseudonimo',
125
+    'entree_nom_pseudo_1' => '(Nome o pseudonimo)',
126
+    'entree_nom_pseudo_2' => 'Nome o pseudonimo',
127
+    'entree_nom_site' => 'Nome del tuo sito',
128
+    'entree_nom_site_2' => 'Nome del sito dell’autrice', # RELIRE
129
+    'entree_nouveau_passe' => 'Nuova password',
130
+    'entree_passe_ldap' => 'Password',
131
+    'entree_port_annuaire' => 'Il numero di porta della rubrica',
132
+    'entree_signature' => 'Firma',
133
+    'entree_titre_obligatoire' => '<b>Titolo</b> [Obbligatorio]<br />',
134
+    'entree_url' => 'Indirizzo (URL) del sito',
135
+    'entree_url_2' => 'Indirizzo (URL) del sito',
136
+    'erreur_connect_deja_existant' => 'Esiste già un server con questo nome', # RELIRE
137
+    'erreur_email_deja_existant' => 'Questo indirizzo email è già registrato',
138
+    'erreur_nom_connect_incorrect' => 'Questo nome non è autorizzato', # RELIRE
139
+    'erreur_plugin_desinstalation_echouee' => 'La disinstallazione del plug in è fallita. E’ comunque possibile disattivarlo.', # RELIRE
140
+    'erreur_plugin_fichier_absent' => 'File non presente',
141
+    'erreur_plugin_fichier_def_absent' => 'File di definizioni non presente',
142
+    'erreur_plugin_nom_fonction_interdit' => 'Nome di funzione non possibile',
143
+    'erreur_plugin_nom_manquant' => 'Nome del plugin mancante',
144
+    'erreur_plugin_prefix_manquant' => 'Spazio per il nome del plugin non definito',
145
+    'erreur_plugin_tag_plugin_absent' => '&lt;plugin&gt; mancante nel file di definizione',
146
+    'erreur_plugin_version_manquant' => 'Versione del plugin mancante',
147 147
 
148
-	// H
149
-	'htaccess_a_simuler' => 'Attenzione: la configurazione del vostro server HTTP non tiene conto dei file @htaccess@. Per poter mettere in sicurezza bisognerà modificare la configurazione di questo punto, oppure sarà necessario che i parametri fissi @constantes@ (definiti nel file le_mie_opzioni.php) abbiano i valore dei registri diversi da @document_root@.', # RELIRE
148
+    // H
149
+    'htaccess_a_simuler' => 'Attenzione: la configurazione del vostro server HTTP non tiene conto dei file @htaccess@. Per poter mettere in sicurezza bisognerà modificare la configurazione di questo punto, oppure sarà necessario che i parametri fissi @constantes@ (definiti nel file le_mie_opzioni.php) abbiano i valore dei registri diversi da @document_root@.', # RELIRE
150 150
 
151
-	// I
152
-	'ical_info1' => 'Questa pagina elenca diversi metodi per rimanere in contatto con le varie attività del sito.',
153
-	'ical_info2' => 'Per ulteriori informazioni su tutte queste tecniche, non esitate a consultare <a href="@spipnet@">la documentazione di SPIP</a>.',
154
-	'ical_info_calendrier' => 'Sono disponibili due calendari. Il primo è una mappa del sito che annuncia tutti gli articoli pubblicati. Il secondo contiene gli annunci editoriali e gli ultimi messaggi privati: è un’area riservata, mediante identificativo personale, che è possibile modificare in qualsiasi momento rinnovando la password personale.',
155
-	'ical_methode_http' => 'Download',
156
-	'ical_methode_webcal' => 'Sincronizzazione (webcal://)',
157
-	'ical_texte_js' => 'Una linea in javascript permette di visualizzare, con molta semplicità e su qualsiasi tipo di sito, gli articoli recenti pubblicati su questo sito.',
158
-	'ical_texte_prive' => 'Questo calendario, ad uso strettamente privato, dà informazioni sull’attività redazionale privata di questo sito (impegni e appuntamenti personali, articoli e brevi proposti...).',
159
-	'ical_texte_public' => 'Questo calendario permette di monitorare l’attività pubblica del sito (articoli e brevi pubblicati).',
160
-	'ical_texte_rss' => 'È possibile mettere in syndication le novità di questo sito con qualsiasi lettore di file in formato XML/RSS (Rich Site Summary). Questo è il medesimo formato che permette a SPIP di leggere le novità pubblicate su altri siti che utilizzano un formato di scambio compatibile.',
161
-	'ical_titre_js' => 'Javascript',
162
-	'ical_titre_mailing' => 'Mailing-list',
163
-	'ical_titre_rss' => 'File di syndication',
164
-	'icone_activer_cookie' => 'Attiva il cookie di corrispondenza',
165
-	'icone_activite' => 'Attività',
166
-	'icone_admin_plugin' => 'Gestione dei plugin',
167
-	'icone_afficher_auteurs' => 'Pubblica le autrici',
168
-	'icone_afficher_visiteurs' => 'Pubblica i visitatori',
169
-	'icone_arret_discussion' => 'Non partecipare più a questa discussione',
170
-	'icone_calendrier' => 'Calendario',
171
-	'icone_creer_auteur' => 'Crea una nuova autrice ed associala a questo articolo',
172
-	'icone_creer_mot_cle' => 'Crea una nuova parola chiave e collegala a questo articolo',
173
-	'icone_creer_rubrique_2' => 'Crea una nuova rubrica',
174
-	'icone_ma_langue' => 'La mia lingua',
175
-	'icone_mes_infos' => 'Le mie informazioni',
176
-	'icone_modifier_article' => 'Modifica l’articolo',
177
-	'icone_modifier_rubrique' => 'Modifica la rubrica',
178
-	'icone_relancer_signataire' => 'Rilanciare il firmatario',
179
-	'icone_retour' => 'Indietro',
180
-	'icone_retour_article' => 'Torna all’articolo',
181
-	'icone_supprimer_cookie' => 'Elimina il cookie di corrispondenza',
182
-	'icone_supprimer_rubrique' => 'Elimina la rubrica',
183
-	'icone_supprimer_signature' => 'Cancella l’adesione',
184
-	'icone_valider_signature' => 'Conferma l’adesione',
185
-	'image_administrer_rubrique' => 'Puoi amministrare questa rubrica',
186
-	'impossible_modifier_login_auteur' => 'Impossible de modifier le login.', # MODIF
187
-	'impossible_modifier_pass_auteur' => 'Impossible de modifier le mot de passe.', # MODIF
188
-	'info_1_article' => '1 articolo',
189
-	'info_activer_cookie' => 'Se vuoi puoi attivare un <b>cookie di corrispondenza</b>, che ti permetterà
151
+    // I
152
+    'ical_info1' => 'Questa pagina elenca diversi metodi per rimanere in contatto con le varie attività del sito.',
153
+    'ical_info2' => 'Per ulteriori informazioni su tutte queste tecniche, non esitate a consultare <a href="@spipnet@">la documentazione di SPIP</a>.',
154
+    'ical_info_calendrier' => 'Sono disponibili due calendari. Il primo è una mappa del sito che annuncia tutti gli articoli pubblicati. Il secondo contiene gli annunci editoriali e gli ultimi messaggi privati: è un’area riservata, mediante identificativo personale, che è possibile modificare in qualsiasi momento rinnovando la password personale.',
155
+    'ical_methode_http' => 'Download',
156
+    'ical_methode_webcal' => 'Sincronizzazione (webcal://)',
157
+    'ical_texte_js' => 'Una linea in javascript permette di visualizzare, con molta semplicità e su qualsiasi tipo di sito, gli articoli recenti pubblicati su questo sito.',
158
+    'ical_texte_prive' => 'Questo calendario, ad uso strettamente privato, dà informazioni sull’attività redazionale privata di questo sito (impegni e appuntamenti personali, articoli e brevi proposti...).',
159
+    'ical_texte_public' => 'Questo calendario permette di monitorare l’attività pubblica del sito (articoli e brevi pubblicati).',
160
+    'ical_texte_rss' => 'È possibile mettere in syndication le novità di questo sito con qualsiasi lettore di file in formato XML/RSS (Rich Site Summary). Questo è il medesimo formato che permette a SPIP di leggere le novità pubblicate su altri siti che utilizzano un formato di scambio compatibile.',
161
+    'ical_titre_js' => 'Javascript',
162
+    'ical_titre_mailing' => 'Mailing-list',
163
+    'ical_titre_rss' => 'File di syndication',
164
+    'icone_activer_cookie' => 'Attiva il cookie di corrispondenza',
165
+    'icone_activite' => 'Attività',
166
+    'icone_admin_plugin' => 'Gestione dei plugin',
167
+    'icone_afficher_auteurs' => 'Pubblica le autrici',
168
+    'icone_afficher_visiteurs' => 'Pubblica i visitatori',
169
+    'icone_arret_discussion' => 'Non partecipare più a questa discussione',
170
+    'icone_calendrier' => 'Calendario',
171
+    'icone_creer_auteur' => 'Crea una nuova autrice ed associala a questo articolo',
172
+    'icone_creer_mot_cle' => 'Crea una nuova parola chiave e collegala a questo articolo',
173
+    'icone_creer_rubrique_2' => 'Crea una nuova rubrica',
174
+    'icone_ma_langue' => 'La mia lingua',
175
+    'icone_mes_infos' => 'Le mie informazioni',
176
+    'icone_modifier_article' => 'Modifica l’articolo',
177
+    'icone_modifier_rubrique' => 'Modifica la rubrica',
178
+    'icone_relancer_signataire' => 'Rilanciare il firmatario',
179
+    'icone_retour' => 'Indietro',
180
+    'icone_retour_article' => 'Torna all’articolo',
181
+    'icone_supprimer_cookie' => 'Elimina il cookie di corrispondenza',
182
+    'icone_supprimer_rubrique' => 'Elimina la rubrica',
183
+    'icone_supprimer_signature' => 'Cancella l’adesione',
184
+    'icone_valider_signature' => 'Conferma l’adesione',
185
+    'image_administrer_rubrique' => 'Puoi amministrare questa rubrica',
186
+    'impossible_modifier_login_auteur' => 'Impossible de modifier le login.', # MODIF
187
+    'impossible_modifier_pass_auteur' => 'Impossible de modifier le mot de passe.', # MODIF
188
+    'info_1_article' => '1 articolo',
189
+    'info_activer_cookie' => 'Se vuoi puoi attivare un <b>cookie di corrispondenza</b>, che ti permetterà
190 190
 di passare facilmente dal sito pubblico all’interfaccia privata.',
191
-	'info_administrateur' => 'Amministratrice',
192
-	'info_administrateur_1' => 'Amministratrice',
193
-	'info_administrateur_2' => 'del sito (<i>da utilizzare con prudenza</i>)',
194
-	'info_administrateur_site_01' => 'Se sei amministratrice del sito,',
195
-	'info_administrateur_site_02' => 'clicca qui',
196
-	'info_administrateurs' => 'Amministratrici',
197
-	'info_administrer_rubrique' => 'Puoi amministrare questa rubrica',
198
-	'info_adresse' => 'all’indirizzo:',
199
-	'info_adresse_url' => 'Indirizzo (URL) del sito pubblico',
200
-	'info_aide_en_ligne' => 'Guida in linea SPIP',
201
-	'info_ajout_image' => 'Quando aggiungi delle immagini come documenti allegati ad un articolo,
191
+    'info_administrateur' => 'Amministratrice',
192
+    'info_administrateur_1' => 'Amministratrice',
193
+    'info_administrateur_2' => 'del sito (<i>da utilizzare con prudenza</i>)',
194
+    'info_administrateur_site_01' => 'Se sei amministratrice del sito,',
195
+    'info_administrateur_site_02' => 'clicca qui',
196
+    'info_administrateurs' => 'Amministratrici',
197
+    'info_administrer_rubrique' => 'Puoi amministrare questa rubrica',
198
+    'info_adresse' => 'all’indirizzo:',
199
+    'info_adresse_url' => 'Indirizzo (URL) del sito pubblico',
200
+    'info_aide_en_ligne' => 'Guida in linea SPIP',
201
+    'info_ajout_image' => 'Quando aggiungi delle immagini come documenti allegati ad un articolo,
202 202
 SPIP può creare  delle thumbnail (miniature) delle
203 203
 immagini inserite. Ciò permette ad esempio di creare in automatico una galleria di immagini o un portfolio.',
204
-	'info_ajouter_rubrique' => 'Aggiungi un’altra rubrica da amministrare:',
205
-	'info_annonce_nouveautes' => 'Annuncio delle novità',
206
-	'info_article' => 'articolo',
207
-	'info_article_2' => 'articoli',
208
-	'info_article_a_paraitre' => 'Gli articoli postdatati da pubblicare',
209
-	'info_articles_02' => 'articoli',
210
-	'info_articles_2' => 'Articoli',
211
-	'info_articles_auteur' => 'Articoli di questo autore',
212
-	'info_articles_trouves' => 'Articoli trovati',
213
-	'info_attente_validation' => 'I tuoi articoli in attesa di convalida',
214
-	'info_aujourdhui' => 'oggi: ',
215
-	'info_auteurs' => 'Le autrici',
216
-	'info_auteurs_par_tri' => 'Autrici@partri@',
217
-	'info_auteurs_trouves' => 'Autrici trovate',
218
-	'info_authentification_externe' => 'Autenticazione esterna',
219
-	'info_avertissement' => 'Avvertimento',
220
-	'info_barre_outils' => 'con la barra degli strumenti?',
221
-	'info_base_installee' => 'La struttura del vostro database è installata.',
222
-	'info_chapeau' => 'Introduzione',
223
-	'info_chapeau_2' => 'Introduzione:',
224
-	'info_chemin_acces_1' => 'Opzioni: <b>Percorso d’accesso ai dati nell’elenco</b>',
225
-	'info_chemin_acces_2' => 'È necessario specificare il percorso per accedere ai dati nell’elenco. Questa informazione è indispensabile al fine di leggere i profili utente in esso contenuti.',
226
-	'info_chemin_acces_annuaire' => 'Opzioni: <b>Percorso d’accesso ai dati nell’elenco',
227
-	'info_choix_base' => 'Terza fase: ',
228
-	'info_classement_1' => '<sup>o</sup> su @liste@',
229
-	'info_classement_2' => '<sup>o</sup> su @liste@',
230
-	'info_code_acces' => 'Non dimenticare i tuoi codici d’accesso!',
231
-	'info_config_suivi' => 'Se questo indirizzo corrisponde a una mailing-list, è possibile indicare qui sotto l’indirizzo al quale i partecipanti del sito possono iscriversi. Questo indirizzo può essere una URL (per esempio la pagina di iscrizione via Web alla lista), oppure un indirizzo email che contiene un Oggetto specifico (per esempio: <tt>@adresse_suivi@?subject=subscribe</tt>):',
232
-	'info_config_suivi_explication' => 'È possibile abbonarsi alla mailing-list di questo sito. Verranno spedite per email le notifiche degli articoli e delle brevi proposte per la pubblicazione.',
233
-	'info_confirmer_passe' => 'Conferma la nuova password:',
234
-	'info_conflit_edition_avis_non_sauvegarde' => 'Attenzione, i campi seguenti sono già stati modificati. Quindi le vostre modifiche su questi campi non sono state registrate.',
235
-	'info_conflit_edition_differences' => 'Differenze:',
236
-	'info_conflit_edition_version_enregistree' => 'La versione registrata:',
237
-	'info_conflit_edition_votre_version' => 'La tua versione:',
238
-	'info_connexion_base' => 'Prova di connessione al database',
239
-	'info_connexion_base_donnee' => 'Connessione al proprio database',
240
-	'info_connexion_ldap_ok' => 'La connessione LDAP è riuscita.</b><p> È possibile passare alla fase successiva.</p>',
241
-	'info_connexion_mysql' => 'La connessione a SQL',
242
-	'info_connexion_ok' => 'La connessione è riuscita.',
243
-	'info_contact' => 'Contatti',
244
-	'info_contenu_articles' => 'Contentuto degli articoli',
245
-	'info_creation_paragraphe' => 'Per creare dei paragrafi indipendenti, lasciare delle righe vuote.', # RELIRE
246
-	'info_creation_rubrique' => 'Prima di poter scrivere degli articoli, <br />devi creare almeno una rubrica.<br />',
247
-	'info_creation_tables' => 'Creazione delle tabelle nel database',
248
-	'info_creer_base' => '<b>Creare</b> un nuovo database:',
249
-	'info_dans_rubrique' => 'Nella rubrica:',
250
-	'info_date_publication_anterieure' => 'Data di redazione anteriore:',
251
-	'info_date_referencement' => 'DATA DI INSERIMENTO IN REPERTORIO DI QUESTO SITO:',
252
-	'info_derniere_etape' => 'Finito!',
253
-	'info_descriptif' => 'Descrizione:',
254
-	'info_desinstaller_plugin' => 'elimina i dati e disattiva il plug-in',
255
-	'info_discussion_cours' => 'Discussioni in corso',
256
-	'info_ecrire_article' => 'Prima di poter scrivere degli articoli, devi creare almeno una rubrica.',
257
-	'info_email_envoi' => 'Indirizzo email del mittente (opzionale)',
258
-	'info_email_envoi_txt' => 'Indicare qui l’indirizzo da utilizzare per l’invio degli email (come impostazione predefinita l’indirizzo del destinatario sarà utilizzato come indirizzo del mittente):',
259
-	'info_email_webmestre' => 'Indirizzo email della webmistress', # RELIRE
260
-	'info_envoi_email_automatique' => 'Invio di email automatico',
261
-	'info_envoyer_maintenant' => 'Invia adesso',
262
-	'info_etape_suivante' => 'Passare alla fase successiva',
263
-	'info_etape_suivante_1' => 'Puoi passare alla fase successiva.',
264
-	'info_etape_suivante_2' => 'Puoi passare alla fase successiva.',
265
-	'info_exportation_base' => 'esportazione del database verso @archive@',
266
-	'info_facilite_suivi_activite' => 'Al fine di facilitare il monitoraggio
204
+    'info_ajouter_rubrique' => 'Aggiungi un’altra rubrica da amministrare:',
205
+    'info_annonce_nouveautes' => 'Annuncio delle novità',
206
+    'info_article' => 'articolo',
207
+    'info_article_2' => 'articoli',
208
+    'info_article_a_paraitre' => 'Gli articoli postdatati da pubblicare',
209
+    'info_articles_02' => 'articoli',
210
+    'info_articles_2' => 'Articoli',
211
+    'info_articles_auteur' => 'Articoli di questo autore',
212
+    'info_articles_trouves' => 'Articoli trovati',
213
+    'info_attente_validation' => 'I tuoi articoli in attesa di convalida',
214
+    'info_aujourdhui' => 'oggi: ',
215
+    'info_auteurs' => 'Le autrici',
216
+    'info_auteurs_par_tri' => 'Autrici@partri@',
217
+    'info_auteurs_trouves' => 'Autrici trovate',
218
+    'info_authentification_externe' => 'Autenticazione esterna',
219
+    'info_avertissement' => 'Avvertimento',
220
+    'info_barre_outils' => 'con la barra degli strumenti?',
221
+    'info_base_installee' => 'La struttura del vostro database è installata.',
222
+    'info_chapeau' => 'Introduzione',
223
+    'info_chapeau_2' => 'Introduzione:',
224
+    'info_chemin_acces_1' => 'Opzioni: <b>Percorso d’accesso ai dati nell’elenco</b>',
225
+    'info_chemin_acces_2' => 'È necessario specificare il percorso per accedere ai dati nell’elenco. Questa informazione è indispensabile al fine di leggere i profili utente in esso contenuti.',
226
+    'info_chemin_acces_annuaire' => 'Opzioni: <b>Percorso d’accesso ai dati nell’elenco',
227
+    'info_choix_base' => 'Terza fase: ',
228
+    'info_classement_1' => '<sup>o</sup> su @liste@',
229
+    'info_classement_2' => '<sup>o</sup> su @liste@',
230
+    'info_code_acces' => 'Non dimenticare i tuoi codici d’accesso!',
231
+    'info_config_suivi' => 'Se questo indirizzo corrisponde a una mailing-list, è possibile indicare qui sotto l’indirizzo al quale i partecipanti del sito possono iscriversi. Questo indirizzo può essere una URL (per esempio la pagina di iscrizione via Web alla lista), oppure un indirizzo email che contiene un Oggetto specifico (per esempio: <tt>@adresse_suivi@?subject=subscribe</tt>):',
232
+    'info_config_suivi_explication' => 'È possibile abbonarsi alla mailing-list di questo sito. Verranno spedite per email le notifiche degli articoli e delle brevi proposte per la pubblicazione.',
233
+    'info_confirmer_passe' => 'Conferma la nuova password:',
234
+    'info_conflit_edition_avis_non_sauvegarde' => 'Attenzione, i campi seguenti sono già stati modificati. Quindi le vostre modifiche su questi campi non sono state registrate.',
235
+    'info_conflit_edition_differences' => 'Differenze:',
236
+    'info_conflit_edition_version_enregistree' => 'La versione registrata:',
237
+    'info_conflit_edition_votre_version' => 'La tua versione:',
238
+    'info_connexion_base' => 'Prova di connessione al database',
239
+    'info_connexion_base_donnee' => 'Connessione al proprio database',
240
+    'info_connexion_ldap_ok' => 'La connessione LDAP è riuscita.</b><p> È possibile passare alla fase successiva.</p>',
241
+    'info_connexion_mysql' => 'La connessione a SQL',
242
+    'info_connexion_ok' => 'La connessione è riuscita.',
243
+    'info_contact' => 'Contatti',
244
+    'info_contenu_articles' => 'Contentuto degli articoli',
245
+    'info_creation_paragraphe' => 'Per creare dei paragrafi indipendenti, lasciare delle righe vuote.', # RELIRE
246
+    'info_creation_rubrique' => 'Prima di poter scrivere degli articoli, <br />devi creare almeno una rubrica.<br />',
247
+    'info_creation_tables' => 'Creazione delle tabelle nel database',
248
+    'info_creer_base' => '<b>Creare</b> un nuovo database:',
249
+    'info_dans_rubrique' => 'Nella rubrica:',
250
+    'info_date_publication_anterieure' => 'Data di redazione anteriore:',
251
+    'info_date_referencement' => 'DATA DI INSERIMENTO IN REPERTORIO DI QUESTO SITO:',
252
+    'info_derniere_etape' => 'Finito!',
253
+    'info_descriptif' => 'Descrizione:',
254
+    'info_desinstaller_plugin' => 'elimina i dati e disattiva il plug-in',
255
+    'info_discussion_cours' => 'Discussioni in corso',
256
+    'info_ecrire_article' => 'Prima di poter scrivere degli articoli, devi creare almeno una rubrica.',
257
+    'info_email_envoi' => 'Indirizzo email del mittente (opzionale)',
258
+    'info_email_envoi_txt' => 'Indicare qui l’indirizzo da utilizzare per l’invio degli email (come impostazione predefinita l’indirizzo del destinatario sarà utilizzato come indirizzo del mittente):',
259
+    'info_email_webmestre' => 'Indirizzo email della webmistress', # RELIRE
260
+    'info_envoi_email_automatique' => 'Invio di email automatico',
261
+    'info_envoyer_maintenant' => 'Invia adesso',
262
+    'info_etape_suivante' => 'Passare alla fase successiva',
263
+    'info_etape_suivante_1' => 'Puoi passare alla fase successiva.',
264
+    'info_etape_suivante_2' => 'Puoi passare alla fase successiva.',
265
+    'info_exportation_base' => 'esportazione del database verso @archive@',
266
+    'info_facilite_suivi_activite' => 'Al fine di facilitare il monitoraggio
267 267
 dell’attività editoriale del sito, SPIP può far pervenire via email,
268 268
 per esempio ad una mailing-list delle redattrici, l’annuncio delle domande di
269 269
 pubblicazione e di convalida degli articoli.',
270
-	'info_fichiers_authent' => 'File d’autenticazione ".htpasswd"',
271
-	'info_forums_abo_invites' => 'Il sito comprende dei forum accessibili solo a utenti registrate. Nel sito pubblico è quindi presente una pagina d’iscrizione.',
272
-	'info_gauche_admin_tech' => '<b>Questa pagina è accessibile solo alle responsabili del sito.</b><p> Permette l’accesso alle diverse funzioni di manutenzione tecnica. Alcune di esse richiedono una procedura di identificazione specifica, tramite accesso FTP.</p>', # RELIRE
273
-	'info_gauche_admin_vider' => '<b>Questa pagina è accessibile solo alle responsabili del sito.</b><p> Permette l’accesso alle diverse funzioni di manutenzione tecnica. Alcune di esse richiedono una procedura di identificazione specifica, tramite accesso FTP.</p>', # RELIRE
274
-	'info_gauche_auteurs' => 'Elenco di tutte le autrici del sito.
270
+    'info_fichiers_authent' => 'File d’autenticazione ".htpasswd"',
271
+    'info_forums_abo_invites' => 'Il sito comprende dei forum accessibili solo a utenti registrate. Nel sito pubblico è quindi presente una pagina d’iscrizione.',
272
+    'info_gauche_admin_tech' => '<b>Questa pagina è accessibile solo alle responsabili del sito.</b><p> Permette l’accesso alle diverse funzioni di manutenzione tecnica. Alcune di esse richiedono una procedura di identificazione specifica, tramite accesso FTP.</p>', # RELIRE
273
+    'info_gauche_admin_vider' => '<b>Questa pagina è accessibile solo alle responsabili del sito.</b><p> Permette l’accesso alle diverse funzioni di manutenzione tecnica. Alcune di esse richiedono una procedura di identificazione specifica, tramite accesso FTP.</p>', # RELIRE
274
+    'info_gauche_auteurs' => 'Elenco di tutte le autrici del sito.
275 275
 Il loro status è indicato dal colore dell’icona (redattrice = giallo; amministratrice = verde).',
276
-	'info_gauche_auteurs_exterieurs' => 'Le autrici esterne, senza accesso al sito, sono indicate da un’icona blu;
276
+    'info_gauche_auteurs_exterieurs' => 'Le autrici esterne, senza accesso al sito, sono indicate da un’icona blu;
277 277
                 le autrici eliminate sono indicate da un’icona grigia.', # RELIRE
278
-	'info_gauche_messagerie' => 'Il sistema di messaggistica permette di scambiare dei messaggi tra redattrici, di conservare dei memo (promemoria ad uso personale) o di pubblicare degli annunci nel pannello di controllo dell’area riservata (se sei amministratrice).',
279
-	'info_gauche_statistiques_referers' => 'Questa pagina presenta un elenco dei siti che contengono link verso il tuo (<i>referrer</i>). Questo elenco è valido però solo per oggi essendo azzerato ogni 24 ore.',
280
-	'info_gauche_visiteurs_enregistres' => 'Trovi qui i visitatori registrati allo spazio
278
+    'info_gauche_messagerie' => 'Il sistema di messaggistica permette di scambiare dei messaggi tra redattrici, di conservare dei memo (promemoria ad uso personale) o di pubblicare degli annunci nel pannello di controllo dell’area riservata (se sei amministratrice).',
279
+    'info_gauche_statistiques_referers' => 'Questa pagina presenta un elenco dei siti che contengono link verso il tuo (<i>referrer</i>). Questo elenco è valido però solo per oggi essendo azzerato ogni 24 ore.',
280
+    'info_gauche_visiteurs_enregistres' => 'Trovi qui i visitatori registrati allo spazio
281 281
 pubblico del sito (forum su abbonamento).',
282
-	'info_generation_miniatures_images' => 'Generazione di thumbnail di immagini',
283
-	'info_hebergeur_desactiver_envoi_email' => 'Alcuni hoster disattivano l’invio automatico di email
282
+    'info_generation_miniatures_images' => 'Generazione di thumbnail di immagini',
283
+    'info_hebergeur_desactiver_envoi_email' => 'Alcuni hoster disattivano l’invio automatico di email
284 284
 dai loro server. In questo caso, le funzionalità di SPIP di seguito riportate non funzioneranno.',
285
-	'info_hier' => 'ieri:',
286
-	'info_identification_publique' => 'La tua identità pubblica...',
287
-	'info_image_process' => 'Seleziona il metodo migliore per la creazione delle anteprime cliccando sull’immagine corrispondente.',
288
-	'info_image_process2' => 'Se non appare alcuna immagine, ciò significa che la configurazione del server non permette l’uso di tali funzioni. Se si desidera utilizzarle, contattate la responsabile tecnica chiedendo delle estensioni "GD" o "Imagick".', # RELIRE
289
-	'info_images_auto' => 'Immagini elaborate automaticamente',
290
-	'info_informations_personnelles' => 'Informazioni personali',
291
-	'info_inscription_automatique' => 'Iscrizione automatica di nuove redattrici',
292
-	'info_jeu_caractere' => 'Set di caratteri del sito',
293
-	'info_jours' => 'giorni',
294
-	'info_laisser_champs_vides' => 'lasciare questi campi vuoti)',
295
-	'info_langues' => 'Lingua del sito',
296
-	'info_ldap_ok' => 'L’autenticazione LDAP è installata.',
297
-	'info_lien_hypertexte' => 'Link ipertestuale:',
298
-	'info_liste_redacteurs_connectes' => 'Elenco delle redattrici collegate',
299
-	'info_login_existant' => 'Questo login esiste già.',
300
-	'info_login_trop_court' => 'Login troppo corto.',
301
-	'info_logos' => 'I logo',
302
-	'info_maximum' => 'massimo:',
303
-	'info_meme_rubrique' => 'Nella stessa rubrica',
304
-	'info_message_en_redaction' => 'I tuoi messaggi in corso di redazione',
305
-	'info_message_technique' => 'Messaggio tecnico:',
306
-	'info_messagerie_interne' => 'Sistema di messaggistica interna',
307
-	'info_mise_a_niveau_base' => 'aggiornamento del database SQL',
308
-	'info_mise_a_niveau_base_2' => '{{Attenzione!}} È stata installata una versione
285
+    'info_hier' => 'ieri:',
286
+    'info_identification_publique' => 'La tua identità pubblica...',
287
+    'info_image_process' => 'Seleziona il metodo migliore per la creazione delle anteprime cliccando sull’immagine corrispondente.',
288
+    'info_image_process2' => 'Se non appare alcuna immagine, ciò significa che la configurazione del server non permette l’uso di tali funzioni. Se si desidera utilizzarle, contattate la responsabile tecnica chiedendo delle estensioni "GD" o "Imagick".', # RELIRE
289
+    'info_images_auto' => 'Immagini elaborate automaticamente',
290
+    'info_informations_personnelles' => 'Informazioni personali',
291
+    'info_inscription_automatique' => 'Iscrizione automatica di nuove redattrici',
292
+    'info_jeu_caractere' => 'Set di caratteri del sito',
293
+    'info_jours' => 'giorni',
294
+    'info_laisser_champs_vides' => 'lasciare questi campi vuoti)',
295
+    'info_langues' => 'Lingua del sito',
296
+    'info_ldap_ok' => 'L’autenticazione LDAP è installata.',
297
+    'info_lien_hypertexte' => 'Link ipertestuale:',
298
+    'info_liste_redacteurs_connectes' => 'Elenco delle redattrici collegate',
299
+    'info_login_existant' => 'Questo login esiste già.',
300
+    'info_login_trop_court' => 'Login troppo corto.',
301
+    'info_logos' => 'I logo',
302
+    'info_maximum' => 'massimo:',
303
+    'info_meme_rubrique' => 'Nella stessa rubrica',
304
+    'info_message_en_redaction' => 'I tuoi messaggi in corso di redazione',
305
+    'info_message_technique' => 'Messaggio tecnico:',
306
+    'info_messagerie_interne' => 'Sistema di messaggistica interna',
307
+    'info_mise_a_niveau_base' => 'aggiornamento del database SQL',
308
+    'info_mise_a_niveau_base_2' => '{{Attenzione!}} È stata installata una versione
309 309
 dei file di SPIP {precedente} rispetto a quella che era in uso per questo sito:
310 310
 le informazioni contenute nel database sono probabilmente andate perse.<br />{{Reinstallare i file di SPIP.}}',
311
-	'info_modifier_auteur' => 'Modifica l’autrice:',
312
-	'info_modifier_rubrique' => 'Modifica la rubrica:',
313
-	'info_modifier_titre' => 'Modifica: @titre@',
314
-	'info_mon_site_spip' => 'Il mio sito SPIP',
315
-	'info_moyenne' => 'media: ',
316
-	'info_multi_cet_article' => 'Lingua di questo articolo:',
317
-	'info_multi_langues_choisies' => 'Selezionare di seguito le lingue disponibili per le redattrici del sito.
311
+    'info_modifier_auteur' => 'Modifica l’autrice:',
312
+    'info_modifier_rubrique' => 'Modifica la rubrica:',
313
+    'info_modifier_titre' => 'Modifica: @titre@',
314
+    'info_mon_site_spip' => 'Il mio sito SPIP',
315
+    'info_moyenne' => 'media: ',
316
+    'info_multi_cet_article' => 'Lingua di questo articolo:',
317
+    'info_multi_langues_choisies' => 'Selezionare di seguito le lingue disponibili per le redattrici del sito.
318 318
   Le lingue già utilizzate nel sito (visualizzate per prime) non possono essere disattivate.',
319
-	'info_multi_secteurs' => '... solo per le rubriche collocate nella {root} del sito?',
320
-	'info_nom' => 'Nome',
321
-	'info_nom_destinataire' => 'Nome del destinatario',
322
-	'info_nom_site' => 'Nome del tuo sito',
323
-	'info_nombre_articles' => '@nb_articles@ articoli,',
324
-	'info_nombre_rubriques' => '@nb_rubriques@ rubriche,',
325
-	'info_nombre_sites' => '@nb_sites@ siti, ',
326
-	'info_non_deplacer' => 'Non spostare...',
327
-	'info_non_envoi_annonce_dernieres_nouveautes' => 'SPIP può inviare regolarmente annunci sulle ultime novità del sito
319
+    'info_multi_secteurs' => '... solo per le rubriche collocate nella {root} del sito?',
320
+    'info_nom' => 'Nome',
321
+    'info_nom_destinataire' => 'Nome del destinatario',
322
+    'info_nom_site' => 'Nome del tuo sito',
323
+    'info_nombre_articles' => '@nb_articles@ articoli,',
324
+    'info_nombre_rubriques' => '@nb_rubriques@ rubriche,',
325
+    'info_nombre_sites' => '@nb_sites@ siti, ',
326
+    'info_non_deplacer' => 'Non spostare...',
327
+    'info_non_envoi_annonce_dernieres_nouveautes' => 'SPIP può inviare regolarmente annunci sulle ultime novità del sito
328 328
 (articoli e brevi recentemente pubblicati).',
329
-	'info_non_envoi_liste_nouveautes' => 'Non inviare l’elenco delle novità',
330
-	'info_non_modifiable' => 'non può essere modificato',
331
-	'info_non_suppression_mot_cle' => 'non voglio cancellare questa parola chiave.',
332
-	'info_notes' => 'Note',
333
-	'info_nouvel_article' => 'Nuovo articolo',
334
-	'info_nouvelle_traduction' => 'Nuova traduzione:',
335
-	'info_numero_article' => 'ARTICOLO NUMERO:',
336
-	'info_obligatoire_02' => '(obbligatorio)', # MODIF
337
-	'info_option_accepter_visiteurs' => 'Accetta l’iscrizione di utenti del sito pubblico',
338
-	'info_option_ne_pas_accepter_visiteurs' => 'Rifiuta l’iscrizione di utenti',
339
-	'info_options_avancees' => 'OPZIONE AVANZATA',
340
-	'info_ou' => 'o... ',
341
-	'info_page_interdite' => 'Pagina riservata',
342
-	'info_par_nom' => 'per nome',
343
-	'info_par_nombre_article' => 'per numero di articoli',
344
-	'info_par_statut' => 'per status',
345
-	'info_par_tri' => '’(per @tri@)’',
346
-	'info_passe_trop_court' => 'Password troppo corta.',
347
-	'info_passes_identiques' => 'Le due password non sono uguali.',
348
-	'info_plus_cinq_car' => 'più di 5 caratteri',
349
-	'info_plus_cinq_car_2' => '(Più di 5 caratteri)',
350
-	'info_plus_trois_car' => '(Più di 3 caratteri)',
351
-	'info_popularite' => 'popolarità: @popularite@; visite: @visites@',
352
-	'info_post_scriptum' => 'Post Scriptum',
353
-	'info_post_scriptum_2' => 'Post Scriptum:',
354
-	'info_pour' => 'per',
355
-	'info_preview_texte' => 'È possibile visualizzare un’anteprima del sito comprendente anche gli articoli e le brevi "proposti" per la pubblicazione. Questa funzionalità può essere disattivata, consentita solo alle amministratrici o a tutte le redattrici.', # MODIF
356
-	'info_procedez_par_etape' => 'procedere passo dopo passo',
357
-	'info_procedure_maj_version' => 'è necessario avviare la procedura di aggiornamento per adattare
329
+    'info_non_envoi_liste_nouveautes' => 'Non inviare l’elenco delle novità',
330
+    'info_non_modifiable' => 'non può essere modificato',
331
+    'info_non_suppression_mot_cle' => 'non voglio cancellare questa parola chiave.',
332
+    'info_notes' => 'Note',
333
+    'info_nouvel_article' => 'Nuovo articolo',
334
+    'info_nouvelle_traduction' => 'Nuova traduzione:',
335
+    'info_numero_article' => 'ARTICOLO NUMERO:',
336
+    'info_obligatoire_02' => '(obbligatorio)', # MODIF
337
+    'info_option_accepter_visiteurs' => 'Accetta l’iscrizione di utenti del sito pubblico',
338
+    'info_option_ne_pas_accepter_visiteurs' => 'Rifiuta l’iscrizione di utenti',
339
+    'info_options_avancees' => 'OPZIONE AVANZATA',
340
+    'info_ou' => 'o... ',
341
+    'info_page_interdite' => 'Pagina riservata',
342
+    'info_par_nom' => 'per nome',
343
+    'info_par_nombre_article' => 'per numero di articoli',
344
+    'info_par_statut' => 'per status',
345
+    'info_par_tri' => '’(per @tri@)’',
346
+    'info_passe_trop_court' => 'Password troppo corta.',
347
+    'info_passes_identiques' => 'Le due password non sono uguali.',
348
+    'info_plus_cinq_car' => 'più di 5 caratteri',
349
+    'info_plus_cinq_car_2' => '(Più di 5 caratteri)',
350
+    'info_plus_trois_car' => '(Più di 3 caratteri)',
351
+    'info_popularite' => 'popolarità: @popularite@; visite: @visites@',
352
+    'info_post_scriptum' => 'Post Scriptum',
353
+    'info_post_scriptum_2' => 'Post Scriptum:',
354
+    'info_pour' => 'per',
355
+    'info_preview_texte' => 'È possibile visualizzare un’anteprima del sito comprendente anche gli articoli e le brevi "proposti" per la pubblicazione. Questa funzionalità può essere disattivata, consentita solo alle amministratrici o a tutte le redattrici.', # MODIF
356
+    'info_procedez_par_etape' => 'procedere passo dopo passo',
357
+    'info_procedure_maj_version' => 'è necessario avviare la procedura di aggiornamento per adattare
358 358
 il database alla nuova versione di SPIP.',
359
-	'info_proxy_ok' => 'Test del proxy riuscito.',
360
-	'info_ps' => 'P.S.',
361
-	'info_publier' => 'pubblicare',
362
-	'info_publies' => 'I tuoi articoli pubblicati',
363
-	'info_question_accepter_visiteurs' => 'I modelli di pagina del sito prevedono la registrazione di utenti senza accesso all’area riservata. Attivare la seguente funzionalità:',
364
-	'info_question_inscription_nouveaux_redacteurs' => 'Accettate le iscrizioni di nuove redattrici
359
+    'info_proxy_ok' => 'Test del proxy riuscito.',
360
+    'info_ps' => 'P.S.',
361
+    'info_publier' => 'pubblicare',
362
+    'info_publies' => 'I tuoi articoli pubblicati',
363
+    'info_question_accepter_visiteurs' => 'I modelli di pagina del sito prevedono la registrazione di utenti senza accesso all’area riservata. Attivare la seguente funzionalità:',
364
+    'info_question_inscription_nouveaux_redacteurs' => 'Accettate le iscrizioni di nuove redattrici
365 365
 direttamente dal sito pubblico? In questo caso, chi visita il sito potrà iscriversi
366 366
 grazie ad un modulo automatizzato e potrà accedere all’area riservata per proporre i propri articoli.
367 367
 <div class="notice">Durante la fase d’iscrizione,
@@ -370,317 +370,317 @@  discard block
 block discarded – undo
370 370
 host disattivano l’invio di email dai
371 371
 propri server: in questo caso, l’iscrizione automatica è
372 372
 impossibile.', # RELIRE
373
-	'info_qui_edite' => '@nom_auteur_modif@ ha lavorato su questo contenuto @date_diff@ minuti fa',
374
-	'info_racine_site' => 'Root del sito',
375
-	'info_recharger_page' => 'Aggiorna questa pagina fra qualche istante.',
376
-	'info_recherche_auteur_zero' => 'Nessun risultato per "@cherche_auteur@".',
377
-	'info_recommencer' => 'Ricomincia.',
378
-	'info_redacteur_1' => 'Redattori',
379
-	'info_redacteur_2' => 'avendo accesso allo spazio privato (<i>raccommandato</i>)',
380
-	'info_redacteurs' => 'Redattrici',
381
-	'info_redaction_en_cours' => 'IN CORSO DI REDAZIONE',
382
-	'info_redirection' => 'Reindirizzamento',
383
-	'info_refuses' => 'I tuoi articoli rifiutati',
384
-	'info_reglage_ldap' => 'Opzioni: <b>Parametri per l’importazione LDAP</b>',
385
-	'info_renvoi_article' => '<b>Reindirizzamento.</b> Quest’articolo rimanda alla pagina:',
386
-	'info_reserve_admin' => 'Solo le amministratrici possono modificare quest’indirizzo.',
387
-	'info_restreindre_rubrique' => 'Limita la facoltà di gestione alla rubrica:',
388
-	'info_resultat_recherche' => 'Risultati della ricerca:',
389
-	'info_rubriques' => 'Rubriche',
390
-	'info_rubriques_02' => 'rubriche',
391
-	'info_rubriques_trouvees' => 'Rubriche trovate',
392
-	'info_sans_titre' => 'Senza titolo',
393
-	'info_selection_chemin_acces' => '<b>Seleziona</b> qui sotto il percorso d’accesso nell’elenco:',
394
-	'info_signatures' => 'firme',
395
-	'info_site' => 'Sito',
396
-	'info_site_2' => 'sito: ',
397
-	'info_site_min' => 'sito',
398
-	'info_site_reference_2' => 'Sito repertoriato',
399
-	'info_site_web' => 'Sito Web :',
400
-	'info_sites' => 'siti',
401
-	'info_sites_lies_mot' => 'I siti in repertorio legati a questa parola chiave',
402
-	'info_sites_proxy' => 'Utilizza un proxy',
403
-	'info_sites_trouves' => 'Siti trovati',
404
-	'info_sous_titre' => 'Sottotitolo:',
405
-	'info_statut_administrateur' => 'Amministratrice',
406
-	'info_statut_auteur' => 'Status di questa autrice:',
407
-	'info_statut_auteur_a_confirmer' => 'Iscrizione da confermare',
408
-	'info_statut_auteur_autre' => 'Altro stato:',
409
-	'info_statut_redacteur' => 'Redattrice',
410
-	'info_statut_utilisateurs_1' => 'Status predefinito delle utenti importate',
411
-	'info_statut_utilisateurs_2' => 'Scegli lo status da attribuire alle personne presenti nell’elenco LDAP quando si collegano per la prima volta. Potrai poi modificare questa impostazione per ogni singola autrice.',
412
-	'info_suivi_activite' => 'Monitoraggio dell’attività editoriale',
413
-	'info_surtitre' => 'Occhiello:',
414
-	'info_syndication_integrale_1' => 'Il tuo sito propone dei file di  syndication (vedi « <a href="@url@">@titre@</a> »).',
415
-	'info_syndication_integrale_2' => 'Si desidera trasmettere gli articoli in versione integrale oppure in versione riassunta di un centinaio di caratteri?',
416
-	'info_table_prefix' => 'È possibile modificare il prefisso del nome delle tabelle del database (cosa indispensabile se si desidera installare più siti usando il medesimo database). Questo prefisso si deve scrivere usando esclusivamente lettere minuscole, prive di accenti e senza alcuno spazio.',
417
-	'info_taille_maximale_images' => 'SPIP testerà la dimensione massima delle immagini che può manipolare (in milioni di pixel).<br /> Le immagini di dimensione maggiore non saranno ridotte.',
418
-	'info_taille_maximale_vignette' => 'Dimensione massima delle immagini create dal sistema:',
419
-	'info_terminer_installation' => 'Puoi ora terminare la procedura d’installazione standard.',
420
-	'info_texte' => 'Testo',
421
-	'info_texte_explicatif' => 'Testo esplicativo',
422
-	'info_texte_long' => '(il testo è lungo: è quindi visualizzato in più sezioni che verranno riunificate dopo la convalida)',
423
-	'info_texte_message' => 'Testo del messaggio',
424
-	'info_texte_message_02' => 'Testo del messaggio',
425
-	'info_titre' => 'Titolo:',
426
-	'info_total' => 'totale: ',
427
-	'info_tous_articles_en_redaction' => 'Tutti gli articoli in corso di redazione',
428
-	'info_tous_articles_presents' => 'Tutti gli articoli pubblicati in questa rubrica',
429
-	'info_tous_les' => 'tutti i:',
430
-	'info_tout_site' => 'Tutto il sito',
431
-	'info_tout_site2' => 'L’articolo non è stato tradotto in questa lingua.',
432
-	'info_tout_site3' => 'L’articolo è stato tradotto in questa lingua, ma sono state effettuate alcune modifiche all’articolo di riferimento. La traduzione deve quindi essere aggiornata.',
433
-	'info_tout_site4' => 'L’articolo è stato tradotto in questa lingua e la traduzione è aggiornata.',
434
-	'info_tout_site5' => 'Articolo originale.',
435
-	'info_tout_site6' => '<b>Attenzione:</b> solo gli articoli originali vengono visualizzati.
373
+    'info_qui_edite' => '@nom_auteur_modif@ ha lavorato su questo contenuto @date_diff@ minuti fa',
374
+    'info_racine_site' => 'Root del sito',
375
+    'info_recharger_page' => 'Aggiorna questa pagina fra qualche istante.',
376
+    'info_recherche_auteur_zero' => 'Nessun risultato per "@cherche_auteur@".',
377
+    'info_recommencer' => 'Ricomincia.',
378
+    'info_redacteur_1' => 'Redattori',
379
+    'info_redacteur_2' => 'avendo accesso allo spazio privato (<i>raccommandato</i>)',
380
+    'info_redacteurs' => 'Redattrici',
381
+    'info_redaction_en_cours' => 'IN CORSO DI REDAZIONE',
382
+    'info_redirection' => 'Reindirizzamento',
383
+    'info_refuses' => 'I tuoi articoli rifiutati',
384
+    'info_reglage_ldap' => 'Opzioni: <b>Parametri per l’importazione LDAP</b>',
385
+    'info_renvoi_article' => '<b>Reindirizzamento.</b> Quest’articolo rimanda alla pagina:',
386
+    'info_reserve_admin' => 'Solo le amministratrici possono modificare quest’indirizzo.',
387
+    'info_restreindre_rubrique' => 'Limita la facoltà di gestione alla rubrica:',
388
+    'info_resultat_recherche' => 'Risultati della ricerca:',
389
+    'info_rubriques' => 'Rubriche',
390
+    'info_rubriques_02' => 'rubriche',
391
+    'info_rubriques_trouvees' => 'Rubriche trovate',
392
+    'info_sans_titre' => 'Senza titolo',
393
+    'info_selection_chemin_acces' => '<b>Seleziona</b> qui sotto il percorso d’accesso nell’elenco:',
394
+    'info_signatures' => 'firme',
395
+    'info_site' => 'Sito',
396
+    'info_site_2' => 'sito: ',
397
+    'info_site_min' => 'sito',
398
+    'info_site_reference_2' => 'Sito repertoriato',
399
+    'info_site_web' => 'Sito Web :',
400
+    'info_sites' => 'siti',
401
+    'info_sites_lies_mot' => 'I siti in repertorio legati a questa parola chiave',
402
+    'info_sites_proxy' => 'Utilizza un proxy',
403
+    'info_sites_trouves' => 'Siti trovati',
404
+    'info_sous_titre' => 'Sottotitolo:',
405
+    'info_statut_administrateur' => 'Amministratrice',
406
+    'info_statut_auteur' => 'Status di questa autrice:',
407
+    'info_statut_auteur_a_confirmer' => 'Iscrizione da confermare',
408
+    'info_statut_auteur_autre' => 'Altro stato:',
409
+    'info_statut_redacteur' => 'Redattrice',
410
+    'info_statut_utilisateurs_1' => 'Status predefinito delle utenti importate',
411
+    'info_statut_utilisateurs_2' => 'Scegli lo status da attribuire alle personne presenti nell’elenco LDAP quando si collegano per la prima volta. Potrai poi modificare questa impostazione per ogni singola autrice.',
412
+    'info_suivi_activite' => 'Monitoraggio dell’attività editoriale',
413
+    'info_surtitre' => 'Occhiello:',
414
+    'info_syndication_integrale_1' => 'Il tuo sito propone dei file di  syndication (vedi « <a href="@url@">@titre@</a> »).',
415
+    'info_syndication_integrale_2' => 'Si desidera trasmettere gli articoli in versione integrale oppure in versione riassunta di un centinaio di caratteri?',
416
+    'info_table_prefix' => 'È possibile modificare il prefisso del nome delle tabelle del database (cosa indispensabile se si desidera installare più siti usando il medesimo database). Questo prefisso si deve scrivere usando esclusivamente lettere minuscole, prive di accenti e senza alcuno spazio.',
417
+    'info_taille_maximale_images' => 'SPIP testerà la dimensione massima delle immagini che può manipolare (in milioni di pixel).<br /> Le immagini di dimensione maggiore non saranno ridotte.',
418
+    'info_taille_maximale_vignette' => 'Dimensione massima delle immagini create dal sistema:',
419
+    'info_terminer_installation' => 'Puoi ora terminare la procedura d’installazione standard.',
420
+    'info_texte' => 'Testo',
421
+    'info_texte_explicatif' => 'Testo esplicativo',
422
+    'info_texte_long' => '(il testo è lungo: è quindi visualizzato in più sezioni che verranno riunificate dopo la convalida)',
423
+    'info_texte_message' => 'Testo del messaggio',
424
+    'info_texte_message_02' => 'Testo del messaggio',
425
+    'info_titre' => 'Titolo:',
426
+    'info_total' => 'totale: ',
427
+    'info_tous_articles_en_redaction' => 'Tutti gli articoli in corso di redazione',
428
+    'info_tous_articles_presents' => 'Tutti gli articoli pubblicati in questa rubrica',
429
+    'info_tous_les' => 'tutti i:',
430
+    'info_tout_site' => 'Tutto il sito',
431
+    'info_tout_site2' => 'L’articolo non è stato tradotto in questa lingua.',
432
+    'info_tout_site3' => 'L’articolo è stato tradotto in questa lingua, ma sono state effettuate alcune modifiche all’articolo di riferimento. La traduzione deve quindi essere aggiornata.',
433
+    'info_tout_site4' => 'L’articolo è stato tradotto in questa lingua e la traduzione è aggiornata.',
434
+    'info_tout_site5' => 'Articolo originale.',
435
+    'info_tout_site6' => '<b>Attenzione:</b> solo gli articoli originali vengono visualizzati.
436 436
 Le traduzioni sono associate all’originale,
437 437
  in un colore che indica il loro stato:',
438
-	'info_travail_colaboratif' => 'Lavoro di collaborazione sugli articoli',
439
-	'info_un_article' => 'un articolo, ',
440
-	'info_un_site' => 'un sito, ',
441
-	'info_une_rubrique' => 'una rubrica, ',
442
-	'info_une_rubrique_02' => '1 rubrica',
443
-	'info_url' => 'URL:',
444
-	'info_urlref' => 'Link ipertestuale:',
445
-	'info_utilisation_spip' => 'Puoi ora cominciare ad utilizzare il sistema di pubblicazione assistita...',
446
-	'info_visites_par_mois' => 'Visualizzazione per mese:',
447
-	'info_visiteur_1' => 'Visitatori',
448
-	'info_visiteur_2' => 'del sito pubblico',
449
-	'info_visiteurs' => 'Visitatori',
450
-	'info_visiteurs_02' => 'Visitatori del sito pubblico',
451
-	'install_adresse_base_hebergeur' => 'Indirizzo del database attribuito dal provider',
452
-	'install_echec_annonce' => 'L’installazione potrebbe fallire oppure causare problemi di funzionalità al sito...',
453
-	'install_extension_mbstring' => 'SPIP non funziona con:',
454
-	'install_extension_php_obligatoire' => 'SPIP esige l’estensione php:',
455
-	'install_login_base_hebergeur' => 'Login di connessione attribuito dal provider',
456
-	'install_nom_base_hebergeur' => 'Nome del database attribuito dal provider:',
457
-	'install_pas_table' => 'Database attualmente senza tabelle',
458
-	'install_pass_base_hebergeur' => 'Password di connessione attribuito dal provider',
459
-	'install_php_version' => 'PHP versione @version@ insufficiente (minimo = @minimum@)',
460
-	'install_select_langue' => 'Seleziona una lingua e poi clicca sul bottone « Avanti » per lanciare la procedura di installazione.',
461
-	'install_select_type_db' => 'Indicare il tipo di database:',
462
-	'install_select_type_mysql' => 'MySQL',
463
-	'install_select_type_sqlite2' => 'SQLite 2',
464
-	'install_select_type_sqlite3' => 'SQLite 3',
465
-	'install_serveur_hebergeur' => 'Server del database attribuito dall’hoster',
466
-	'install_table_prefix_hebergeur' => 'Prefisso della tabella attribuito dal provider:',
467
-	'install_tables_base' => 'Tabelle del database',
468
-	'install_types_db_connus' => 'SPIP può utilizzare <b>MySQL</b> (il più diffuso) e <b>SQLite</b>.',
469
-	'install_types_db_connus_avertissement' => 'Il supporto <b>PostgreSQL</b> viene proposto a titolo sperimentale', # RELIRE
470
-	'intem_redacteur' => 'redattrice',
471
-	'intitule_licence' => 'Licenza',
472
-	'item_accepter_inscriptions' => 'Accetta le iscrizioni',
473
-	'item_activer_messages_avertissement' => 'Attiva i messaggi d’avvertimento',
474
-	'item_administrateur_2' => 'amministratrice',
475
-	'item_afficher_calendrier' => 'Pubblica nel calendario',
476
-	'item_autoriser_syndication_integrale' => 'Diffondere la versione integrale degli articoli nei file di syndication',
477
-	'item_choix_administrateurs' => 'le amministratrici',
478
-	'item_choix_generation_miniature' => 'Genera automaticamente le thumbnail delle immagini.',
479
-	'item_choix_non_generation_miniature' => 'Non creare le thumbnail delle immagini.',
480
-	'item_choix_redacteurs' => 'le redattrici',
481
-	'item_choix_visiteurs' => 'i visitatori del sito pubblico',
482
-	'item_creer_fichiers_authent' => 'Crea i file .htpasswd',
483
-	'item_login' => 'Login',
484
-	'item_messagerie_agenda' => 'Attiva la messaggistica e l’agenda',
485
-	'item_mots_cles_association_articles' => 'agli articoli',
486
-	'item_mots_cles_association_rubriques' => 'alle rubriche',
487
-	'item_mots_cles_association_sites' => 'ai siti repertoriati o in syndication.',
488
-	'item_non' => 'No',
489
-	'item_non_accepter_inscriptions' => 'Non accettare le iscrizioni',
490
-	'item_non_activer_messages_avertissement' => 'Nessun messaggio d’avvertimento',
491
-	'item_non_afficher_calendrier' => 'Non pubblicare nel calendario',
492
-	'item_non_autoriser_syndication_integrale' => 'Diffondere solo un riassunto',
493
-	'item_non_creer_fichiers_authent' => 'Non creare questi file',
494
-	'item_non_messagerie_agenda' => 'Disattiva la messaggistica e l’agenda',
495
-	'item_non_publier_articles' => 'Non pubblicare gli articoli prima della data impostata.',
496
-	'item_nouvel_auteur' => 'Nuova autrice',
497
-	'item_nouvelle_rubrique' => 'Nuova rubrica',
498
-	'item_oui' => 'Sì',
499
-	'item_publier_articles' => 'Pubblica gli articoli indipendentemente dalla data impostata.',
500
-	'item_reponse_article' => 'Risposta all’articolo ',
501
-	'item_visiteur' => 'visitatore',
438
+    'info_travail_colaboratif' => 'Lavoro di collaborazione sugli articoli',
439
+    'info_un_article' => 'un articolo, ',
440
+    'info_un_site' => 'un sito, ',
441
+    'info_une_rubrique' => 'una rubrica, ',
442
+    'info_une_rubrique_02' => '1 rubrica',
443
+    'info_url' => 'URL:',
444
+    'info_urlref' => 'Link ipertestuale:',
445
+    'info_utilisation_spip' => 'Puoi ora cominciare ad utilizzare il sistema di pubblicazione assistita...',
446
+    'info_visites_par_mois' => 'Visualizzazione per mese:',
447
+    'info_visiteur_1' => 'Visitatori',
448
+    'info_visiteur_2' => 'del sito pubblico',
449
+    'info_visiteurs' => 'Visitatori',
450
+    'info_visiteurs_02' => 'Visitatori del sito pubblico',
451
+    'install_adresse_base_hebergeur' => 'Indirizzo del database attribuito dal provider',
452
+    'install_echec_annonce' => 'L’installazione potrebbe fallire oppure causare problemi di funzionalità al sito...',
453
+    'install_extension_mbstring' => 'SPIP non funziona con:',
454
+    'install_extension_php_obligatoire' => 'SPIP esige l’estensione php:',
455
+    'install_login_base_hebergeur' => 'Login di connessione attribuito dal provider',
456
+    'install_nom_base_hebergeur' => 'Nome del database attribuito dal provider:',
457
+    'install_pas_table' => 'Database attualmente senza tabelle',
458
+    'install_pass_base_hebergeur' => 'Password di connessione attribuito dal provider',
459
+    'install_php_version' => 'PHP versione @version@ insufficiente (minimo = @minimum@)',
460
+    'install_select_langue' => 'Seleziona una lingua e poi clicca sul bottone « Avanti » per lanciare la procedura di installazione.',
461
+    'install_select_type_db' => 'Indicare il tipo di database:',
462
+    'install_select_type_mysql' => 'MySQL',
463
+    'install_select_type_sqlite2' => 'SQLite 2',
464
+    'install_select_type_sqlite3' => 'SQLite 3',
465
+    'install_serveur_hebergeur' => 'Server del database attribuito dall’hoster',
466
+    'install_table_prefix_hebergeur' => 'Prefisso della tabella attribuito dal provider:',
467
+    'install_tables_base' => 'Tabelle del database',
468
+    'install_types_db_connus' => 'SPIP può utilizzare <b>MySQL</b> (il più diffuso) e <b>SQLite</b>.',
469
+    'install_types_db_connus_avertissement' => 'Il supporto <b>PostgreSQL</b> viene proposto a titolo sperimentale', # RELIRE
470
+    'intem_redacteur' => 'redattrice',
471
+    'intitule_licence' => 'Licenza',
472
+    'item_accepter_inscriptions' => 'Accetta le iscrizioni',
473
+    'item_activer_messages_avertissement' => 'Attiva i messaggi d’avvertimento',
474
+    'item_administrateur_2' => 'amministratrice',
475
+    'item_afficher_calendrier' => 'Pubblica nel calendario',
476
+    'item_autoriser_syndication_integrale' => 'Diffondere la versione integrale degli articoli nei file di syndication',
477
+    'item_choix_administrateurs' => 'le amministratrici',
478
+    'item_choix_generation_miniature' => 'Genera automaticamente le thumbnail delle immagini.',
479
+    'item_choix_non_generation_miniature' => 'Non creare le thumbnail delle immagini.',
480
+    'item_choix_redacteurs' => 'le redattrici',
481
+    'item_choix_visiteurs' => 'i visitatori del sito pubblico',
482
+    'item_creer_fichiers_authent' => 'Crea i file .htpasswd',
483
+    'item_login' => 'Login',
484
+    'item_messagerie_agenda' => 'Attiva la messaggistica e l’agenda',
485
+    'item_mots_cles_association_articles' => 'agli articoli',
486
+    'item_mots_cles_association_rubriques' => 'alle rubriche',
487
+    'item_mots_cles_association_sites' => 'ai siti repertoriati o in syndication.',
488
+    'item_non' => 'No',
489
+    'item_non_accepter_inscriptions' => 'Non accettare le iscrizioni',
490
+    'item_non_activer_messages_avertissement' => 'Nessun messaggio d’avvertimento',
491
+    'item_non_afficher_calendrier' => 'Non pubblicare nel calendario',
492
+    'item_non_autoriser_syndication_integrale' => 'Diffondere solo un riassunto',
493
+    'item_non_creer_fichiers_authent' => 'Non creare questi file',
494
+    'item_non_messagerie_agenda' => 'Disattiva la messaggistica e l’agenda',
495
+    'item_non_publier_articles' => 'Non pubblicare gli articoli prima della data impostata.',
496
+    'item_nouvel_auteur' => 'Nuova autrice',
497
+    'item_nouvelle_rubrique' => 'Nuova rubrica',
498
+    'item_oui' => 'Sì',
499
+    'item_publier_articles' => 'Pubblica gli articoli indipendentemente dalla data impostata.',
500
+    'item_reponse_article' => 'Risposta all’articolo ',
501
+    'item_visiteur' => 'visitatore',
502 502
 
503
-	// J
504
-	'jour_non_connu_nc' => 'n.c.',
503
+    // J
504
+    'jour_non_connu_nc' => 'n.c.',
505 505
 
506
-	// L
507
-	'lien_ajouter_auteur' => 'Aggiungi questa autrice',
508
-	'lien_email' => 'email',
509
-	'lien_nom_site' => 'NOME DEL SITO:',
510
-	'lien_retirer_auteur' => 'Rimuovere l’autrice',
511
-	'lien_site' => 'sito',
512
-	'lien_tout_deplier' => 'Espandi',
513
-	'lien_tout_replier' => 'Richiudi',
514
-	'lien_tout_supprimer' => 'Eliminare tutto',
515
-	'lien_trier_nom' => 'Ordina per nome',
516
-	'lien_trier_nombre_articles' => 'Ordina per numero di articoli',
517
-	'lien_trier_statut' => 'Ordina per status',
518
-	'lien_voir_en_ligne' => 'VEDI ON LINE:',
519
-	'logo_article' => 'Logo dell’articolo',
520
-	'logo_auteur' => 'Logo dell’autrice',
521
-	'logo_rubrique' => 'Logo della rubrica',
522
-	'logo_site' => 'Logo di questo sito',
523
-	'logo_standard_rubrique' => 'Logo standard delle rubriche',
524
-	'logo_survol' => 'Logo rollover', # RELIRE
506
+    // L
507
+    'lien_ajouter_auteur' => 'Aggiungi questa autrice',
508
+    'lien_email' => 'email',
509
+    'lien_nom_site' => 'NOME DEL SITO:',
510
+    'lien_retirer_auteur' => 'Rimuovere l’autrice',
511
+    'lien_site' => 'sito',
512
+    'lien_tout_deplier' => 'Espandi',
513
+    'lien_tout_replier' => 'Richiudi',
514
+    'lien_tout_supprimer' => 'Eliminare tutto',
515
+    'lien_trier_nom' => 'Ordina per nome',
516
+    'lien_trier_nombre_articles' => 'Ordina per numero di articoli',
517
+    'lien_trier_statut' => 'Ordina per status',
518
+    'lien_voir_en_ligne' => 'VEDI ON LINE:',
519
+    'logo_article' => 'Logo dell’articolo',
520
+    'logo_auteur' => 'Logo dell’autrice',
521
+    'logo_rubrique' => 'Logo della rubrica',
522
+    'logo_site' => 'Logo di questo sito',
523
+    'logo_standard_rubrique' => 'Logo standard delle rubriche',
524
+    'logo_survol' => 'Logo rollover', # RELIRE
525 525
 
526
-	// M
527
-	'menu_aide_installation_choix_base' => 'Scegliere il database',
528
-	'module_fichier_langue' => 'File lingua',
529
-	'module_raccourci' => 'Scorciatoia',
530
-	'module_texte_affiche' => 'Testo visualizzato',
531
-	'module_texte_explicatif' => 'È possibile inserire le scorciatoie nel modello di layout del proprio sito pubblico. Queste verranno tradotte automaticamente nelle diverse lingue (se esiste già un file lingua).',
532
-	'module_texte_traduction' => 'Il file lingua «@module@» è disponibile in:',
533
-	'mois_non_connu' => 'sconosciuto',
526
+    // M
527
+    'menu_aide_installation_choix_base' => 'Scegliere il database',
528
+    'module_fichier_langue' => 'File lingua',
529
+    'module_raccourci' => 'Scorciatoia',
530
+    'module_texte_affiche' => 'Testo visualizzato',
531
+    'module_texte_explicatif' => 'È possibile inserire le scorciatoie nel modello di layout del proprio sito pubblico. Queste verranno tradotte automaticamente nelle diverse lingue (se esiste già un file lingua).',
532
+    'module_texte_traduction' => 'Il file lingua «@module@» è disponibile in:',
533
+    'mois_non_connu' => 'sconosciuto',
534 534
 
535
-	// O
536
-	'onglet_contenu' => 'Contenuto',
537
-	'onglet_declarer_une_autre_base' => 'Dichiarare un altro database',
538
-	'onglet_discuter' => 'Discuti',
539
-	'onglet_interactivite' => 'Interattività',
540
-	'onglet_proprietes' => 'Proprietà',
541
-	'onglet_repartition_actuelle' => 'attualmente',
542
-	'onglet_sous_rubriques' => 'Sotto-rubriche',
535
+    // O
536
+    'onglet_contenu' => 'Contenuto',
537
+    'onglet_declarer_une_autre_base' => 'Dichiarare un altro database',
538
+    'onglet_discuter' => 'Discuti',
539
+    'onglet_interactivite' => 'Interattività',
540
+    'onglet_proprietes' => 'Proprietà',
541
+    'onglet_repartition_actuelle' => 'attualmente',
542
+    'onglet_sous_rubriques' => 'Sotto-rubriche',
543 543
 
544
-	// P
545
-	'page_pas_proxy' => 'Questa pagina non deve passare attraverso il proxy',
546
-	'pas_de_proxy_pour' => 'Se necessario, indicare i server o i domini per i quali non si deve applicare questo proxy (per esempio: @exemple@)',
547
-	'plugin_charge_paquet' => 'Caricamento del pacchetto @name@',
548
-	'plugin_erreur_charger' => 'errore: impossibile caricare @zip@',
549
-	'plugin_erreur_droit1' => 'La cartella <code>@dest@</code> non ha i permessi di scrittura.',
550
-	'plugin_erreur_droit2' => 'Verificare i diritti su questa cartella (e, se necessario, crearla), o installare i file tramite FTP.',
551
-	'plugin_erreur_zip' => 'fallimento pclzip: errore @status@',
552
-	'plugin_etat_developpement' => 'in corso di sviluppo',
553
-	'plugin_etat_experimental' => 'sperimentale',
554
-	'plugin_etat_stable' => 'stabile',
555
-	'plugin_etat_test' => 'in prova',
556
-	'plugin_impossible_activer' => 'Impossibile attivare il plug-in @plugin@',
557
-	'plugin_info_automatique1' => 'Se si desidera autorizzare l’installazione automatica dei plug-in è necessario: ',
558
-	'plugin_info_automatique2' => 'creare una cartella <code>@rep@</code>;',
559
-	'plugin_info_automatique3' => 'verificare che il server sia autorizzato a scrivere in questa cartella.',
560
-	'plugin_info_automatique_creer' => 'da creare alla radice del sito.',
561
-	'plugin_info_automatique_exemples' => 'esempi:',
562
-	'plugin_info_automatique_ftp' => 'È possibile installare plug-in tramite FTP, nella cartella <tt>@rep@</tt>',
563
-	'plugin_info_automatique_lib' => 'Alcuni plug-in richiedono anche di poter trasferire dei file nella cartella <code>lib/</code>, da creare (se necessario) alla radice del sito.',
564
-	'plugin_info_automatique_liste' => 'Gli elenchi dei plug-in:',
565
-	'plugin_info_automatique_liste_officielle' => 'i plug-in ufficiali',
566
-	'plugin_info_automatique_liste_update' => 'Aggiornare gli elenchi',
567
-	'plugin_info_automatique_ou' => 'oppure...',
568
-	'plugin_info_automatique_select' => 'Selezionata un plug-in qui sotto: SPIP lo scaricherà e lo installerà nella cartella <code>@rep@</code>; se questo plug-in è già presente verrà aggiornato.',
569
-	'plugin_info_telecharger' => 'da scaricare da @url@ e da installare in @rep@',
570
-	'plugin_librairies_installees' => 'Librerie installate',
571
-	'plugin_necessite_lib' => 'Questo plug-in richiede la libreria @lib@',
572
-	'plugin_necessite_plugin' => 'Necessita il plug-in @plugin@ con almeno la versione @version@.', # MODIF
573
-	'plugin_necessite_spip' => 'Necessita SPIP con almeno la versione @version@.',
574
-	'plugin_source' => 'origine: ',
575
-	'plugin_titre_automatique' => 'Installazione automatica',
576
-	'plugin_titre_automatique_ajouter' => 'Aggiungere dei plug-in',
577
-	'plugin_zip_active' => 'Continuare per attivarlo',
578
-	'plugin_zip_adresse' => 'indicate qui sotto l’indirizzo di un file zip del plug-in da scaricare, oppure l’indirizzo di un elenco di plug-in.',
579
-	'plugin_zip_adresse_champ' => 'Indirizzo del plug-in o dell’elenco ',
580
-	'plugin_zip_content' => 'Esso contiene i file seguenti (@taille@),<br />pronti per essere installati nella cartella <code>@rep@</code>',
581
-	'plugin_zip_installe_finie' => 'Il file @zip@ è stato decompresso e installato.',
582
-	'plugin_zip_installe_rep_finie' => 'Il file @zip@ è stato decompresso e installato nella cartella @rep@',
583
-	'plugin_zip_installer' => 'Ora è possibile installarlo.',
584
-	'plugin_zip_telecharge' => 'Il file @zip@ è stato scaricato',
585
-	'plugins_actifs' => '@count@ plug-in attivati.',
586
-	'plugins_compte' => '@count@ plug-in',
587
-	'plugins_disponibles' => '@count@ plug-in disponibili.',
588
-	'plugins_erreur' => 'Errore nei plug-in: @plugins@',
589
-	'plugins_liste' => 'Elenco dei plugin',
590
-	'plugins_vue_hierarchie' => 'Struttura gerarchica',
591
-	'plugins_vue_liste' => 'Elenco',
592
-	'protocole_ldap' => 'Versione del protocollo:',
544
+    // P
545
+    'page_pas_proxy' => 'Questa pagina non deve passare attraverso il proxy',
546
+    'pas_de_proxy_pour' => 'Se necessario, indicare i server o i domini per i quali non si deve applicare questo proxy (per esempio: @exemple@)',
547
+    'plugin_charge_paquet' => 'Caricamento del pacchetto @name@',
548
+    'plugin_erreur_charger' => 'errore: impossibile caricare @zip@',
549
+    'plugin_erreur_droit1' => 'La cartella <code>@dest@</code> non ha i permessi di scrittura.',
550
+    'plugin_erreur_droit2' => 'Verificare i diritti su questa cartella (e, se necessario, crearla), o installare i file tramite FTP.',
551
+    'plugin_erreur_zip' => 'fallimento pclzip: errore @status@',
552
+    'plugin_etat_developpement' => 'in corso di sviluppo',
553
+    'plugin_etat_experimental' => 'sperimentale',
554
+    'plugin_etat_stable' => 'stabile',
555
+    'plugin_etat_test' => 'in prova',
556
+    'plugin_impossible_activer' => 'Impossibile attivare il plug-in @plugin@',
557
+    'plugin_info_automatique1' => 'Se si desidera autorizzare l’installazione automatica dei plug-in è necessario: ',
558
+    'plugin_info_automatique2' => 'creare una cartella <code>@rep@</code>;',
559
+    'plugin_info_automatique3' => 'verificare che il server sia autorizzato a scrivere in questa cartella.',
560
+    'plugin_info_automatique_creer' => 'da creare alla radice del sito.',
561
+    'plugin_info_automatique_exemples' => 'esempi:',
562
+    'plugin_info_automatique_ftp' => 'È possibile installare plug-in tramite FTP, nella cartella <tt>@rep@</tt>',
563
+    'plugin_info_automatique_lib' => 'Alcuni plug-in richiedono anche di poter trasferire dei file nella cartella <code>lib/</code>, da creare (se necessario) alla radice del sito.',
564
+    'plugin_info_automatique_liste' => 'Gli elenchi dei plug-in:',
565
+    'plugin_info_automatique_liste_officielle' => 'i plug-in ufficiali',
566
+    'plugin_info_automatique_liste_update' => 'Aggiornare gli elenchi',
567
+    'plugin_info_automatique_ou' => 'oppure...',
568
+    'plugin_info_automatique_select' => 'Selezionata un plug-in qui sotto: SPIP lo scaricherà e lo installerà nella cartella <code>@rep@</code>; se questo plug-in è già presente verrà aggiornato.',
569
+    'plugin_info_telecharger' => 'da scaricare da @url@ e da installare in @rep@',
570
+    'plugin_librairies_installees' => 'Librerie installate',
571
+    'plugin_necessite_lib' => 'Questo plug-in richiede la libreria @lib@',
572
+    'plugin_necessite_plugin' => 'Necessita il plug-in @plugin@ con almeno la versione @version@.', # MODIF
573
+    'plugin_necessite_spip' => 'Necessita SPIP con almeno la versione @version@.',
574
+    'plugin_source' => 'origine: ',
575
+    'plugin_titre_automatique' => 'Installazione automatica',
576
+    'plugin_titre_automatique_ajouter' => 'Aggiungere dei plug-in',
577
+    'plugin_zip_active' => 'Continuare per attivarlo',
578
+    'plugin_zip_adresse' => 'indicate qui sotto l’indirizzo di un file zip del plug-in da scaricare, oppure l’indirizzo di un elenco di plug-in.',
579
+    'plugin_zip_adresse_champ' => 'Indirizzo del plug-in o dell’elenco ',
580
+    'plugin_zip_content' => 'Esso contiene i file seguenti (@taille@),<br />pronti per essere installati nella cartella <code>@rep@</code>',
581
+    'plugin_zip_installe_finie' => 'Il file @zip@ è stato decompresso e installato.',
582
+    'plugin_zip_installe_rep_finie' => 'Il file @zip@ è stato decompresso e installato nella cartella @rep@',
583
+    'plugin_zip_installer' => 'Ora è possibile installarlo.',
584
+    'plugin_zip_telecharge' => 'Il file @zip@ è stato scaricato',
585
+    'plugins_actifs' => '@count@ plug-in attivati.',
586
+    'plugins_compte' => '@count@ plug-in',
587
+    'plugins_disponibles' => '@count@ plug-in disponibili.',
588
+    'plugins_erreur' => 'Errore nei plug-in: @plugins@',
589
+    'plugins_liste' => 'Elenco dei plugin',
590
+    'plugins_vue_hierarchie' => 'Struttura gerarchica',
591
+    'plugins_vue_liste' => 'Elenco',
592
+    'protocole_ldap' => 'Versione del protocollo:',
593 593
 
594
-	// R
595
-	'repertoire_plugins' => 'Cartella:',
596
-	'required' => '(obbligatorio)', # MODIF
594
+    // R
595
+    'repertoire_plugins' => 'Cartella:',
596
+    'required' => '(obbligatorio)', # MODIF
597 597
 
598
-	// S
599
-	'sans_heure' => 'ora mancante',
600
-	'statut_admin_restreint' => 'admin limitato', # RELIRE
598
+    // S
599
+    'sans_heure' => 'ora mancante',
600
+    'statut_admin_restreint' => 'admin limitato', # RELIRE
601 601
 
602
-	// T
603
-	'taille_cache_image' => 'Le immagini elaborate automaticamente da SPIP (icone dei documenti, titoli in formato grafico, funzioni matematiche in formato TeX...) occupano nella cartella @dir@ in tutto @taille@.',
604
-	'taille_cache_infinie' => 'Questo sito non prevede limiti alle dimensioni della cartella della cache.',
605
-	'taille_cache_maxi' => 'SPIP tenta di limitare le dimensioni della cartella della cache di questo sito a circa <b>@octets@</b> di dati.',
606
-	'taille_cache_octets' => 'Attualmente la cache è di circa @octets@.', # RELIRE
607
-	'taille_cache_vide' => 'La cache è vuota.',
608
-	'taille_repertoire_cache' => 'Dimensioni della cartella di cache',
609
-	'text_article_propose_publication' => 'Articolo proposto per la pubblicazione. ',
610
-	'texte_acces_ldap_anonyme_1' => 'Alcuni server LDAP non consentono accessi anonimi. In questo caso si deve specificare un identificatore d’accesso iniziale al fine di poter poi ricercare delle informazioni nell’elenco. Nella maggior parte dei casi tuttavia, i campi seguenti potranno essere lasciati vuoti.',
611
-	'texte_admin_effacer_01' => 'Questo commando cancella <i>tutto</i> il contenuto del database,
602
+    // T
603
+    'taille_cache_image' => 'Le immagini elaborate automaticamente da SPIP (icone dei documenti, titoli in formato grafico, funzioni matematiche in formato TeX...) occupano nella cartella @dir@ in tutto @taille@.',
604
+    'taille_cache_infinie' => 'Questo sito non prevede limiti alle dimensioni della cartella della cache.',
605
+    'taille_cache_maxi' => 'SPIP tenta di limitare le dimensioni della cartella della cache di questo sito a circa <b>@octets@</b> di dati.',
606
+    'taille_cache_octets' => 'Attualmente la cache è di circa @octets@.', # RELIRE
607
+    'taille_cache_vide' => 'La cache è vuota.',
608
+    'taille_repertoire_cache' => 'Dimensioni della cartella di cache',
609
+    'text_article_propose_publication' => 'Articolo proposto per la pubblicazione. ',
610
+    'texte_acces_ldap_anonyme_1' => 'Alcuni server LDAP non consentono accessi anonimi. In questo caso si deve specificare un identificatore d’accesso iniziale al fine di poter poi ricercare delle informazioni nell’elenco. Nella maggior parte dei casi tuttavia, i campi seguenti potranno essere lasciati vuoti.',
611
+    'texte_admin_effacer_01' => 'Questo commando cancella <i>tutto</i> il contenuto del database,
612 612
  compresi <i>tutti</i> i login delle redattrici e delle amministratrici. Dopo averlo eseguito, dovrai riavviare la procedura di installazione per ricreare un nuovo database e un primo ID amministrativo.',
613
-	'texte_adresse_annuaire_1' => '(Se la rubrica è installata nella stessa macchina di questo sito, dovrai probabilmente inserire "localhost".)',
614
-	'texte_ajout_auteur' => 'La seguente autrice è stata aggiunta all’articolo:',
615
-	'texte_annuaire_ldap_1' => 'Se hai accesso ad una rubrica (LDAP), puoi utilizzarla per importare automaticamente delle utenti sotto SPIP.',
616
-	'texte_article_statut' => 'Questo articolo è:',
617
-	'texte_article_virtuel' => 'Articolo virtuale',
618
-	'texte_article_virtuel_reference' => '<b>Articolo virtuale:</b> articolo citato nel tuo sito SPIP, ma reindrizzato verso un’altro URL. Per eliminare il reindirizzamento, cancella l’URL qui sopra.',
619
-	'texte_aucun_resultat_auteur' => 'Nessun risultato per "@cherche_auteur@"',
620
-	'texte_auteur_messagerie' => 'Questo sito può costantemente visualizzare la lista delle redattrici collegate, permettendo lo scambio di messaggi in tempo reale. Si può però decidere di non comparire in questo elenco (rendendosi quindi «invisibili» alle altre utenti).',
621
-	'texte_auteurs' => 'LE AUTRICI',
622
-	'texte_choix_base_1' => 'Scegli il database:',
623
-	'texte_choix_base_2' => 'Il server SQL contiene diversi database.',
624
-	'texte_choix_base_3' => '<b>Seleziona</b> quello che è stato attribuito al tuo dominio:',
625
-	'texte_choix_table_prefix' => 'Prefisso delle tabelle:',
626
-	'texte_compte_element' => '@count@ elemento',
627
-	'texte_compte_elements' => '@count@ elementi',
628
-	'texte_conflit_edition_correction' => 'Controllare qui sotto le differenze tra le due versioni del testo; è possibile anche copiare le modifiche e poi ricominciare.',
629
-	'texte_connexion_mysql' => 'Consulta le informazioni fornite dal tuo hoster: devi poterci trovare, i codici di collegamento alla base di dati.',
630
-	'texte_contenu_article' => 'Contenuto dell’articolo in poche parole (<em>abstract</em>)',
631
-	'texte_contenu_articles' => 'A seconda del modello di presentazione adottato per il sito, puoi decidere
613
+    'texte_adresse_annuaire_1' => '(Se la rubrica è installata nella stessa macchina di questo sito, dovrai probabilmente inserire "localhost".)',
614
+    'texte_ajout_auteur' => 'La seguente autrice è stata aggiunta all’articolo:',
615
+    'texte_annuaire_ldap_1' => 'Se hai accesso ad una rubrica (LDAP), puoi utilizzarla per importare automaticamente delle utenti sotto SPIP.',
616
+    'texte_article_statut' => 'Questo articolo è:',
617
+    'texte_article_virtuel' => 'Articolo virtuale',
618
+    'texte_article_virtuel_reference' => '<b>Articolo virtuale:</b> articolo citato nel tuo sito SPIP, ma reindrizzato verso un’altro URL. Per eliminare il reindirizzamento, cancella l’URL qui sopra.',
619
+    'texte_aucun_resultat_auteur' => 'Nessun risultato per "@cherche_auteur@"',
620
+    'texte_auteur_messagerie' => 'Questo sito può costantemente visualizzare la lista delle redattrici collegate, permettendo lo scambio di messaggi in tempo reale. Si può però decidere di non comparire in questo elenco (rendendosi quindi «invisibili» alle altre utenti).',
621
+    'texte_auteurs' => 'LE AUTRICI',
622
+    'texte_choix_base_1' => 'Scegli il database:',
623
+    'texte_choix_base_2' => 'Il server SQL contiene diversi database.',
624
+    'texte_choix_base_3' => '<b>Seleziona</b> quello che è stato attribuito al tuo dominio:',
625
+    'texte_choix_table_prefix' => 'Prefisso delle tabelle:',
626
+    'texte_compte_element' => '@count@ elemento',
627
+    'texte_compte_elements' => '@count@ elementi',
628
+    'texte_conflit_edition_correction' => 'Controllare qui sotto le differenze tra le due versioni del testo; è possibile anche copiare le modifiche e poi ricominciare.',
629
+    'texte_connexion_mysql' => 'Consulta le informazioni fornite dal tuo hoster: devi poterci trovare, i codici di collegamento alla base di dati.',
630
+    'texte_contenu_article' => 'Contenuto dell’articolo in poche parole (<em>abstract</em>)',
631
+    'texte_contenu_articles' => 'A seconda del modello di presentazione adottato per il sito, puoi decidere
632 632
 che alcuni elementi degli articoli siano utilizzati oppure no.
633 633
 Serviti dell’elenco qui sotto per indicare quali elementi rendere disponibili.',
634
-	'texte_crash_base' => 'Se il database è stato danneggiato, puoi tentare un ripristino automatico.',
635
-	'texte_creer_rubrique' => 'Prima di poter scrivere degli articoli,<br /> devi creare una rubrica.',
636
-	'texte_date_creation_article' => 'DATA DI CREAZIONE DELL’ARTICOLO:',
637
-	'texte_date_publication_anterieure' => 'DATA DI REDAZIONE ANTERIORE',
638
-	'texte_date_publication_anterieure_nonaffichee' => 'Non visualizzare la data di redazione anteriore.',
639
-	'texte_date_publication_article' => 'DATA DI PUBBLICAZIONE:',
640
-	'texte_descriptif_rapide' => 'Descrizione rapida',
641
-	'texte_effacer_base' => 'Cancella il database SPIP',
642
-	'texte_effacer_statistiques' => 'Cancellare le statistiche',
643
-	'texte_en_cours_validation' => 'I contenuti qui di seguito sono in attesa di validazione. ', # RELIRE
644
-	'texte_enrichir_mise_a_jour' => 'Puoi arricchire la formattazione del testo utilizzando le «scorciatoie tipografiche»',
645
-	'texte_fichier_authent' => '<b>SPIP deve creare i file speciali
634
+    'texte_crash_base' => 'Se il database è stato danneggiato, puoi tentare un ripristino automatico.',
635
+    'texte_creer_rubrique' => 'Prima di poter scrivere degli articoli,<br /> devi creare una rubrica.',
636
+    'texte_date_creation_article' => 'DATA DI CREAZIONE DELL’ARTICOLO:',
637
+    'texte_date_publication_anterieure' => 'DATA DI REDAZIONE ANTERIORE',
638
+    'texte_date_publication_anterieure_nonaffichee' => 'Non visualizzare la data di redazione anteriore.',
639
+    'texte_date_publication_article' => 'DATA DI PUBBLICAZIONE:',
640
+    'texte_descriptif_rapide' => 'Descrizione rapida',
641
+    'texte_effacer_base' => 'Cancella il database SPIP',
642
+    'texte_effacer_statistiques' => 'Cancellare le statistiche',
643
+    'texte_en_cours_validation' => 'I contenuti qui di seguito sono in attesa di validazione. ', # RELIRE
644
+    'texte_enrichir_mise_a_jour' => 'Puoi arricchire la formattazione del testo utilizzando le «scorciatoie tipografiche»',
645
+    'texte_fichier_authent' => '<b>SPIP deve creare i file speciali
646 646
 <tt>.htpasswd</tt> e <tt>.htpasswd-admin</tt> nella cartella @dossier@ ?</b>
647 647
 <p>Questi file possono servire a limitare l’accesso alle autrici
648 648
 e alle amministratrici in particolari aree del vostro sito (per esempio, per un programma esterno di statistiche).</p>
649 649
 <p>Se ciò non è necessario, lasciare quest’opzione al suo valore predefinito (nessuna creazione 
650 650
 di file).</p>', # RELIRE
651
-	'texte_informations_personnelles_1' => 'Il sistema creerà un tuo accesso personalizzato al sito.',
652
-	'texte_informations_personnelles_2' => '(Nota : trattandosi di una reinstallazione, se il tuo accesso funziona ancora potete ', # RELIRE
653
-	'texte_introductif_article' => 'Testo introduttivo dell’articolo',
654
-	'texte_jeu_caractere' => 'Si consiglia di utilizzare sul proprio sito l’alfabeto universale (<tt>utf-8</tt>): esso permette di visualizzare i testi in tutte le lingue e non pone problemi di compatibilità con i browser moderni.',
655
-	'texte_jeu_caractere_3' => 'Il tuo sito usa attualmente il set di caratteri:',
656
-	'texte_jeu_caractere_4' => 'Se ciò non corrisponde alla realtà dei propri dati (a causa, per esempio, di un ripristino del database), o se  <em>si avvia il sito</em> e si desidera partire con un altro set di caratteri è necessario indicare quest’ultimo qui:',
657
-	'texte_login_ldap_1' => '(Lascia vuoto per un accesso anonimo, o inserisci il percorso completo, per esempio «<tt>uid=rossi, ou=users, dc=mio-dominio, dc=com</tt> ».)',
658
-	'texte_login_precaution' => 'Attenzione! Questo è l’ID con il quale sei attualmente collegato.
651
+    'texte_informations_personnelles_1' => 'Il sistema creerà un tuo accesso personalizzato al sito.',
652
+    'texte_informations_personnelles_2' => '(Nota : trattandosi di una reinstallazione, se il tuo accesso funziona ancora potete ', # RELIRE
653
+    'texte_introductif_article' => 'Testo introduttivo dell’articolo',
654
+    'texte_jeu_caractere' => 'Si consiglia di utilizzare sul proprio sito l’alfabeto universale (<tt>utf-8</tt>): esso permette di visualizzare i testi in tutte le lingue e non pone problemi di compatibilità con i browser moderni.',
655
+    'texte_jeu_caractere_3' => 'Il tuo sito usa attualmente il set di caratteri:',
656
+    'texte_jeu_caractere_4' => 'Se ciò non corrisponde alla realtà dei propri dati (a causa, per esempio, di un ripristino del database), o se  <em>si avvia il sito</em> e si desidera partire con un altro set di caratteri è necessario indicare quest’ultimo qui:',
657
+    'texte_login_ldap_1' => '(Lascia vuoto per un accesso anonimo, o inserisci il percorso completo, per esempio «<tt>uid=rossi, ou=users, dc=mio-dominio, dc=com</tt> ».)',
658
+    'texte_login_precaution' => 'Attenzione! Questo è l’ID con il quale sei attualmente collegato.
659 659
 Utilizza questo modulo con cognizione di causa...',
660
-	'texte_messagerie_agenda' => 'La messageria permette alle redattrici del sito di comunicare tra loro in maniera diretta nell’area riservata. Essa è associata a una agenda.',
661
-	'texte_mise_a_niveau_base_1' => 'Hai aggiornato i file SPIP.
660
+    'texte_messagerie_agenda' => 'La messageria permette alle redattrici del sito di comunicare tra loro in maniera diretta nell’area riservata. Essa è associata a una agenda.',
661
+    'texte_mise_a_niveau_base_1' => 'Hai aggiornato i file SPIP.
662 662
 Adesso è necessario aggiornare il database.',
663
-	'texte_modifier_article' => 'Modifica l’articolo:',
664
-	'texte_multilinguisme' => 'Se desideri gestire gli articoli in diverse lingue, con un sistema di navigazione complesso, è possibile aggiungere un menu di selezione della lingua negli articoli e/o nelle rubriche, in funzione della struttura del sito.', # RELIRE
665
-	'texte_multilinguisme_trad' => 'È anche possibile attivare un sistema di gestione di link fra le diverse traduzioni relative ad alcuni elementi.', # RELIRE
666
-	'texte_non_compresse' => '<i>non compresso</i> (il tuo server non supporta questa funzionalità)',
667
-	'texte_nouvelle_version_spip_1' => 'Hai installato una nuova versione di SPIP.',
668
-	'texte_nouvelle_version_spip_2' => 'Questa nuova versione necessita un aggiornamento più radicale del solito. Se sei la webmistress del sito, cancella il file @connect@ e riprendi l’installazione al fine di aggiornare i parametri di connessione al database.<p> (NB: se hai dimenticato i parametri di connessione, rileggi il file @connect@ prima di cancellarlo...)</p>', # RELIRE
669
-	'texte_operation_echec' => 'Torna alla pagina precedente, seleziona un altro database o creane uno nuovo. Verifica le informazioni fornite dal tuo hoster.',
670
-	'texte_plus_trois_car' => 'più di tre caratteri',
671
-	'texte_plusieurs_articles' => 'Diversi autori trovati per "@cherche_auteur@":',
672
-	'texte_port_annuaire' => '(Il valore predefinito è in genere quello adatto.)',
673
-	'texte_presente_plugin' => 'Questa pagina elenca i plugin disponibili sul sito. È possibile attivare i plugin necessari selezionando la casella corrispondente.',
674
-	'texte_proposer_publication' => 'Quando l’articolo è completo,<br /> puoi proporne la pubblicazione.',
675
-	'texte_proxy' => 'In alcuni casi (intranet, reti protette...), i siti distanti (documetazione di SPIP, siti in syndication, ecc.) sono accessibili unicamente attraverso un <i>proxy HTTP</i>. In questo caso, va indicato l’indirizzo del server nella forma @proxy_en_cours@. In genere questa casella va lasciata vuota.',
676
-	'texte_publication_articles_post_dates' => 'Come si deve comportare SPIP quando gli articoli hanno
663
+    'texte_modifier_article' => 'Modifica l’articolo:',
664
+    'texte_multilinguisme' => 'Se desideri gestire gli articoli in diverse lingue, con un sistema di navigazione complesso, è possibile aggiungere un menu di selezione della lingua negli articoli e/o nelle rubriche, in funzione della struttura del sito.', # RELIRE
665
+    'texte_multilinguisme_trad' => 'È anche possibile attivare un sistema di gestione di link fra le diverse traduzioni relative ad alcuni elementi.', # RELIRE
666
+    'texte_non_compresse' => '<i>non compresso</i> (il tuo server non supporta questa funzionalità)',
667
+    'texte_nouvelle_version_spip_1' => 'Hai installato una nuova versione di SPIP.',
668
+    'texte_nouvelle_version_spip_2' => 'Questa nuova versione necessita un aggiornamento più radicale del solito. Se sei la webmistress del sito, cancella il file @connect@ e riprendi l’installazione al fine di aggiornare i parametri di connessione al database.<p> (NB: se hai dimenticato i parametri di connessione, rileggi il file @connect@ prima di cancellarlo...)</p>', # RELIRE
669
+    'texte_operation_echec' => 'Torna alla pagina precedente, seleziona un altro database o creane uno nuovo. Verifica le informazioni fornite dal tuo hoster.',
670
+    'texte_plus_trois_car' => 'più di tre caratteri',
671
+    'texte_plusieurs_articles' => 'Diversi autori trovati per "@cherche_auteur@":',
672
+    'texte_port_annuaire' => '(Il valore predefinito è in genere quello adatto.)',
673
+    'texte_presente_plugin' => 'Questa pagina elenca i plugin disponibili sul sito. È possibile attivare i plugin necessari selezionando la casella corrispondente.',
674
+    'texte_proposer_publication' => 'Quando l’articolo è completo,<br /> puoi proporne la pubblicazione.',
675
+    'texte_proxy' => 'In alcuni casi (intranet, reti protette...), i siti distanti (documetazione di SPIP, siti in syndication, ecc.) sono accessibili unicamente attraverso un <i>proxy HTTP</i>. In questo caso, va indicato l’indirizzo del server nella forma @proxy_en_cours@. In genere questa casella va lasciata vuota.',
676
+    'texte_publication_articles_post_dates' => 'Come si deve comportare SPIP quando gli articoli hanno
677 677
 una data di pubblicazione impostata nel futuro?',
678
-	'texte_rappel_selection_champs' => '[Non dimenticare di impostare correttamente questo campo]',
679
-	'texte_recalcul_page' => 'Se vuoi rigenerare
678
+    'texte_rappel_selection_champs' => '[Non dimenticare di impostare correttamente questo campo]',
679
+    'texte_recalcul_page' => 'Se vuoi rigenerare
680 680
 una sola pagina, utilizza piuttosto lo spazio pubblico e clicca sul pulsante «rigenera».',
681
-	'texte_recuperer_base' => 'Ripara il database',
682
-	'texte_reference_mais_redirige' => 'articolo catalogato nel tuo sito SPIP, ma con reindirizzamento verso un altro URL.',
683
-	'texte_requetes_echouent' => '<b>Quando alcune query SQL falliscono
681
+    'texte_recuperer_base' => 'Ripara il database',
682
+    'texte_reference_mais_redirige' => 'articolo catalogato nel tuo sito SPIP, ma con reindirizzamento verso un altro URL.',
683
+    'texte_requetes_echouent' => '<b>Quando alcune query SQL falliscono
684 684
 ripetutamente e senza un chiaro motivo, è possibile
685 685
 che sia per colpa del database
686 686
 stesso.</b><p>
@@ -691,79 +691,79 @@  discard block
 block discarded – undo
691 691
 forse, delle informazioni preziose...</p><p>
692 692
 Se il problema persiste, contattate la vostra
693 693
 webmistress.</p>', # RELIRE
694
-	'texte_selection_langue_principale' => 'Puoi selezionare qui sotto la «lingua predefinita» del sito. Questa scelta non obbliga - fortunatamente! - a scrivere gli articoli nella stessa lingua, ma permette di determinare:
694
+    'texte_selection_langue_principale' => 'Puoi selezionare qui sotto la «lingua predefinita» del sito. Questa scelta non obbliga - fortunatamente! - a scrivere gli articoli nella stessa lingua, ma permette di determinare:
695 695
 <ul><li> il formato di default delle date sul sito pubblico;</li>
696 696
 <li> la tipologia di motore tipografico che SPIP deve utilizzare per la resa del testo;</li>
697 697
 <li> la lingua utilizzata nelle finestre di dialogo del sito pubblico;</li>
698 698
 <li> la lingua di default nell’area riservata all’amministrazione.</li></ul>',
699
-	'texte_sous_titre' => 'Sottotitolo',
700
-	'texte_statistiques_visites' => '(barre scure:  domenica / curve scure: evoluzione della media)',
701
-	'texte_statut_attente_validation' => 'in attesa di convalida',
702
-	'texte_statut_publies' => 'pubblicato on line',
703
-	'texte_statut_refuses' => 'rifiutati',
704
-	'texte_suppression_fichiers' => 'Utilizza questo commando per cancellare tutti i file presenti nella
699
+    'texte_sous_titre' => 'Sottotitolo',
700
+    'texte_statistiques_visites' => '(barre scure:  domenica / curve scure: evoluzione della media)',
701
+    'texte_statut_attente_validation' => 'in attesa di convalida',
702
+    'texte_statut_publies' => 'pubblicato on line',
703
+    'texte_statut_refuses' => 'rifiutati',
704
+    'texte_suppression_fichiers' => 'Utilizza questo commando per cancellare tutti i file presenti nella
705 705
 cache di SPIP. Ciò permette ad esempio di forzare la rigenerazione di tutte le pagine se hai fatto delle importanti modifiche di grafica o di struttura del sito.',
706
-	'texte_sur_titre' => 'Occhiello',
707
-	'texte_table_ok' => ': questa tabella è OK.',
708
-	'texte_tentative_recuperation' => 'Tentativo di ripristino',
709
-	'texte_tenter_reparation' => 'Tenta un ripristino del database',
710
-	'texte_test_proxy' => 'Per fare una prova di questo proxy, indicare qui l’indirizzo
706
+    'texte_sur_titre' => 'Occhiello',
707
+    'texte_table_ok' => ': questa tabella è OK.',
708
+    'texte_tentative_recuperation' => 'Tentativo di ripristino',
709
+    'texte_tenter_reparation' => 'Tenta un ripristino del database',
710
+    'texte_test_proxy' => 'Per fare una prova di questo proxy, indicare qui l’indirizzo
711 711
 di un sito Web da testare.',
712
-	'texte_titre_02' => 'Titolo:',
713
-	'texte_titre_obligatoire' => '<b>Titolo</b> [Obbligatorio]',
714
-	'texte_travail_article' => '@nom_auteur_modif@ ha lavorato su questo articolo @date_diff@ minuti fa',
715
-	'texte_travail_collaboratif' => 'Se diverse autrici lavorano spesso sullo stesso articolo,
712
+    'texte_titre_02' => 'Titolo:',
713
+    'texte_titre_obligatoire' => '<b>Titolo</b> [Obbligatorio]',
714
+    'texte_travail_article' => '@nom_auteur_modif@ ha lavorato su questo articolo @date_diff@ minuti fa',
715
+    'texte_travail_collaboratif' => 'Se diverse autrici lavorano spesso sullo stesso articolo,
716 716
 il sistema può segnalare gli articoli «aperti»
717 717
 di recente al fine di evitare modifiche simultanee.
718 718
 Questa opzione è disattivata di default
719 719
 per evitare di generare messaggi d’avvertimento intempestivi.',
720
-	'texte_vide' => 'vuoto',
721
-	'texte_vider_cache' => 'Svuota la cache',
722
-	'titre_admin_tech' => 'Manutenzione tecnica',
723
-	'titre_admin_vider' => 'Manutenzione tecnica',
724
-	'titre_cadre_afficher_article' => 'Visualizza gli articoli',
725
-	'titre_cadre_afficher_traductions' => 'Visualizzare lo stato delle traduzioni per le seguenti lingue:',
726
-	'titre_cadre_ajouter_auteur' => 'AGGIUNGI UN’AUTRICE: ',
727
-	'titre_cadre_interieur_rubrique' => 'All’interno della rubrica',
728
-	'titre_cadre_numero_auteur' => 'AUTRICE NUMERO',
729
-	'titre_cadre_signature_obligatoire' => '<b>Firma</b> [Obbligatoria]<br />',
730
-	'titre_config_contenu_notifications' => 'Notifiche',
731
-	'titre_config_contenu_prive' => 'Nell’area riservata',
732
-	'titre_config_contenu_public' => 'Sul sito pubblico',
733
-	'titre_config_fonctions' => 'Configurazione del sito',
734
-	'titre_configuration' => 'Configurazione del sito',
735
-	'titre_conflit_edition' => 'Conflitto all’atto dell’edizione',
736
-	'titre_connexion_ldap' => 'Opzioni: <b>La connessione LDAP</b>',
737
-	'titre_groupe_mots' => 'GRUPPO DI PAROLE CHIAVE:',
738
-	'titre_langue_article' => 'Lingua dell’articolo',
739
-	'titre_langue_rubrique' => 'Lingua della rubrica',
740
-	'titre_langue_trad_article' => 'LINGUA E TRADUZIONI DELL’ARTICOLO',
741
-	'titre_les_articles' => 'GLI ARTICOLI',
742
-	'titre_messagerie_agenda' => 'Messagistica e agenda',
743
-	'titre_naviguer_dans_le_site' => 'Navigare nel sito...',
744
-	'titre_nouvelle_rubrique' => 'Nuova rubrica',
745
-	'titre_numero_rubrique' => 'RUBRICA NUMERO:',
746
-	'titre_page_articles_edit' => 'Modifica: @titre@',
747
-	'titre_page_articles_page' => 'Gli articoli',
748
-	'titre_page_articles_tous' => 'Tutto il sito',
749
-	'titre_page_calendrier' => 'Calendario @nom_mois@ @annee@',
750
-	'titre_page_config_contenu' => 'Configurazione del sito',
751
-	'titre_page_delete_all' => 'eliminazione totale e irreversible',
752
-	'titre_page_recherche' => 'Risultati della ricerca @recherche@',
753
-	'titre_page_statistiques_referers' => 'Statistiche (link al tuo sito)',
754
-	'titre_page_upgrade' => 'Aggiornamento di SPIP',
755
-	'titre_publication_articles_post_dates' => 'Pubblicazione di articoli postdatati',
756
-	'titre_reparation' => 'Riparazione',
757
-	'titre_suivi_petition' => 'Monitoraggio delle petizioni',
758
-	'tls_ldap' => 'Transport Layer Security:',
759
-	'trad_article_traduction' => 'Tutte le versioni di questo articolo:',
760
-	'trad_delier' => 'Non collegare più a queste traduzioni', # RELIRE
761
-	'trad_lier' => 'Questo articolo è una traduzione dell’articolo numero:',
762
-	'trad_new' => 'Scrivere una nuova traduzione',
720
+    'texte_vide' => 'vuoto',
721
+    'texte_vider_cache' => 'Svuota la cache',
722
+    'titre_admin_tech' => 'Manutenzione tecnica',
723
+    'titre_admin_vider' => 'Manutenzione tecnica',
724
+    'titre_cadre_afficher_article' => 'Visualizza gli articoli',
725
+    'titre_cadre_afficher_traductions' => 'Visualizzare lo stato delle traduzioni per le seguenti lingue:',
726
+    'titre_cadre_ajouter_auteur' => 'AGGIUNGI UN’AUTRICE: ',
727
+    'titre_cadre_interieur_rubrique' => 'All’interno della rubrica',
728
+    'titre_cadre_numero_auteur' => 'AUTRICE NUMERO',
729
+    'titre_cadre_signature_obligatoire' => '<b>Firma</b> [Obbligatoria]<br />',
730
+    'titre_config_contenu_notifications' => 'Notifiche',
731
+    'titre_config_contenu_prive' => 'Nell’area riservata',
732
+    'titre_config_contenu_public' => 'Sul sito pubblico',
733
+    'titre_config_fonctions' => 'Configurazione del sito',
734
+    'titre_configuration' => 'Configurazione del sito',
735
+    'titre_conflit_edition' => 'Conflitto all’atto dell’edizione',
736
+    'titre_connexion_ldap' => 'Opzioni: <b>La connessione LDAP</b>',
737
+    'titre_groupe_mots' => 'GRUPPO DI PAROLE CHIAVE:',
738
+    'titre_langue_article' => 'Lingua dell’articolo',
739
+    'titre_langue_rubrique' => 'Lingua della rubrica',
740
+    'titre_langue_trad_article' => 'LINGUA E TRADUZIONI DELL’ARTICOLO',
741
+    'titre_les_articles' => 'GLI ARTICOLI',
742
+    'titre_messagerie_agenda' => 'Messagistica e agenda',
743
+    'titre_naviguer_dans_le_site' => 'Navigare nel sito...',
744
+    'titre_nouvelle_rubrique' => 'Nuova rubrica',
745
+    'titre_numero_rubrique' => 'RUBRICA NUMERO:',
746
+    'titre_page_articles_edit' => 'Modifica: @titre@',
747
+    'titre_page_articles_page' => 'Gli articoli',
748
+    'titre_page_articles_tous' => 'Tutto il sito',
749
+    'titre_page_calendrier' => 'Calendario @nom_mois@ @annee@',
750
+    'titre_page_config_contenu' => 'Configurazione del sito',
751
+    'titre_page_delete_all' => 'eliminazione totale e irreversible',
752
+    'titre_page_recherche' => 'Risultati della ricerca @recherche@',
753
+    'titre_page_statistiques_referers' => 'Statistiche (link al tuo sito)',
754
+    'titre_page_upgrade' => 'Aggiornamento di SPIP',
755
+    'titre_publication_articles_post_dates' => 'Pubblicazione di articoli postdatati',
756
+    'titre_reparation' => 'Riparazione',
757
+    'titre_suivi_petition' => 'Monitoraggio delle petizioni',
758
+    'tls_ldap' => 'Transport Layer Security:',
759
+    'trad_article_traduction' => 'Tutte le versioni di questo articolo:',
760
+    'trad_delier' => 'Non collegare più a queste traduzioni', # RELIRE
761
+    'trad_lier' => 'Questo articolo è una traduzione dell’articolo numero:',
762
+    'trad_new' => 'Scrivere una nuova traduzione',
763 763
 
764
-	// U
765
-	'utf8_convert_erreur_orig' => 'Errore: il set di caratteri @charset@ non è supportato.',
764
+    // U
765
+    'utf8_convert_erreur_orig' => 'Errore: il set di caratteri @charset@ non è supportato.',
766 766
 
767
-	// V
768
-	'version' => 'Versione:'
767
+    // V
768
+    'version' => 'Versione:'
769 769
 );
Please login to merge, or discard this patch.
ecrire/public/quete.php 1 patch
Indentation   +402 added lines, -402 removed lines patch added patch discarded remove patch
@@ -19,7 +19,7 @@  discard block
 block discarded – undo
19 19
  **/
20 20
 
21 21
 if (!defined('_ECRIRE_INC_VERSION')) {
22
-	return;
22
+    return;
23 23
 }
24 24
 
25 25
 
@@ -33,16 +33,16 @@  discard block
 block discarded – undo
33 33
  * @return array|bool|null
34 34
  */
35 35
 function quete_virtuel($id_article, $connect) {
36
-	return sql_getfetsel(
37
-		'virtuel',
38
-		'spip_articles',
39
-		array('id_article=' . intval($id_article), "statut='publie'"),
40
-		'',
41
-		'',
42
-		'',
43
-		'',
44
-		$connect
45
-	);
36
+    return sql_getfetsel(
37
+        'virtuel',
38
+        'spip_articles',
39
+        array('id_article=' . intval($id_article), "statut='publie'"),
40
+        '',
41
+        '',
42
+        '',
43
+        '',
44
+        $connect
45
+    );
46 46
 }
47 47
 
48 48
 /**
@@ -57,38 +57,38 @@  discard block
 block discarded – undo
57 57
  * @return array
58 58
  */
59 59
 function quete_parent_lang($table, $id, $connect = '') {
60
-	static $cache_quete = array();
61
-
62
-	if (!isset($cache_quete[$connect][$table][$id])) {
63
-		if (!isset($cache_quete[$connect][$table]['_select'])) {
64
-			$trouver_table = charger_fonction('trouver_table', 'base');
65
-			if (!$desc = $trouver_table($table,
66
-					$connect) or !isset($desc['field']['id_rubrique'])
67
-			) {
68
-				// pas de parent rubrique, on passe
69
-				$cache_quete[$connect][$table]['_select'] = false;
70
-			} else {
71
-				$select = ($table == 'spip_rubriques' ? 'id_parent' : 'id_rubrique');
72
-				$select .= isset($desc['field']['lang']) ? ', lang' : '';
73
-				$cache_quete[$connect][$table]['_select'] = $select;
74
-				$cache_quete[$connect][$table]['_id'] = id_table_objet(objet_type($table));
75
-			}
76
-		}
77
-		if ($cache_quete[$connect][$table]['_select']) {
78
-			$cache_quete[$connect][$table][$id] = sql_fetsel(
79
-				$cache_quete[$connect][$table]['_select'],
80
-				$table,
81
-				$cache_quete[$connect][$table]['_id'] . '=' . intval($id),
82
-				'',
83
-				'',
84
-				'',
85
-				'',
86
-				$connect
87
-			);
88
-		}
89
-	}
90
-
91
-	return isset($cache_quete[$connect][$table][$id]) ? $cache_quete[$connect][$table][$id] : null;
60
+    static $cache_quete = array();
61
+
62
+    if (!isset($cache_quete[$connect][$table][$id])) {
63
+        if (!isset($cache_quete[$connect][$table]['_select'])) {
64
+            $trouver_table = charger_fonction('trouver_table', 'base');
65
+            if (!$desc = $trouver_table($table,
66
+                    $connect) or !isset($desc['field']['id_rubrique'])
67
+            ) {
68
+                // pas de parent rubrique, on passe
69
+                $cache_quete[$connect][$table]['_select'] = false;
70
+            } else {
71
+                $select = ($table == 'spip_rubriques' ? 'id_parent' : 'id_rubrique');
72
+                $select .= isset($desc['field']['lang']) ? ', lang' : '';
73
+                $cache_quete[$connect][$table]['_select'] = $select;
74
+                $cache_quete[$connect][$table]['_id'] = id_table_objet(objet_type($table));
75
+            }
76
+        }
77
+        if ($cache_quete[$connect][$table]['_select']) {
78
+            $cache_quete[$connect][$table][$id] = sql_fetsel(
79
+                $cache_quete[$connect][$table]['_select'],
80
+                $table,
81
+                $cache_quete[$connect][$table]['_id'] . '=' . intval($id),
82
+                '',
83
+                '',
84
+                '',
85
+                '',
86
+                $connect
87
+            );
88
+        }
89
+    }
90
+
91
+    return isset($cache_quete[$connect][$table][$id]) ? $cache_quete[$connect][$table][$id] : null;
92 92
 }
93 93
 
94 94
 
@@ -105,11 +105,11 @@  discard block
 block discarded – undo
105 105
  * @return int
106 106
  */
107 107
 function quete_parent($id_rubrique, $connect = '') {
108
-	if (!$id_rubrique = intval($id_rubrique)) {
109
-		return 0;
110
-	}
111
-	$id_parent = quete_parent_lang('spip_rubriques', $id_rubrique, $connect);
112
-	return $id_parent ? $id_parent['id_parent'] : 0;
108
+    if (!$id_rubrique = intval($id_rubrique)) {
109
+        return 0;
110
+    }
111
+    $id_parent = quete_parent_lang('spip_rubriques', $id_rubrique, $connect);
112
+    return $id_parent ? $id_parent['id_parent'] : 0;
113 113
 }
114 114
 
115 115
 /**
@@ -125,9 +125,9 @@  discard block
 block discarded – undo
125 125
  * @return int
126 126
  */
127 127
 function quete_rubrique($id_article, $serveur) {
128
-	$id_parent = quete_parent_lang('spip_articles', $id_article, $serveur);
128
+    $id_parent = quete_parent_lang('spip_articles', $id_article, $serveur);
129 129
 
130
-	return $id_parent['id_rubrique'];
130
+    return $id_parent['id_rubrique'];
131 131
 }
132 132
 
133 133
 
@@ -141,13 +141,13 @@  discard block
 block discarded – undo
141 141
  * @return int
142 142
  */
143 143
 function quete_profondeur($id, $connect = '') {
144
-	$n = 0;
145
-	while ($id) {
146
-		$n++;
147
-		$id = quete_parent($id, $connect);
148
-	}
144
+    $n = 0;
145
+    while ($id) {
146
+        $n++;
147
+        $id = quete_parent($id, $connect);
148
+    }
149 149
 
150
-	return $n;
150
+    return $n;
151 151
 }
152 152
 
153 153
 
@@ -163,15 +163,15 @@  discard block
 block discarded – undo
163 163
  *     Morceau de la requête SQL testant la date
164 164
  */
165 165
 function quete_condition_postdates($champ_date, $serveur = '', $ignore_previsu = false) {
166
-	if (defined('_VAR_PREVIEW') and _VAR_PREVIEW and !$ignore_previsu) {
167
-		return '1=1';
168
-	}
169
-
170
-	return
171
-		(isset($GLOBALS['meta']['date_prochain_postdate'])
172
-			and $GLOBALS['meta']['date_prochain_postdate'] > time())
173
-			? "$champ_date<" . sql_quote(date('Y-m-d H:i:s', $GLOBALS['meta']['date_prochain_postdate']), $serveur)
174
-			: '1=1';
166
+    if (defined('_VAR_PREVIEW') and _VAR_PREVIEW and !$ignore_previsu) {
167
+        return '1=1';
168
+    }
169
+
170
+    return
171
+        (isset($GLOBALS['meta']['date_prochain_postdate'])
172
+            and $GLOBALS['meta']['date_prochain_postdate'] > time())
173
+            ? "$champ_date<" . sql_quote(date('Y-m-d H:i:s', $GLOBALS['meta']['date_prochain_postdate']), $serveur)
174
+            : '1=1';
175 175
 }
176 176
 
177 177
 
@@ -191,100 +191,100 @@  discard block
 block discarded – undo
191 191
  * @return array|string
192 192
  */
193 193
 function quete_condition_statut($mstatut, $previsu, $publie, $serveur = '', $ignore_previsu = false) {
194
-	static $cond = array();
195
-	$key = func_get_args();
196
-	$key = implode('-', $key);
197
-	if (isset($cond[$key])) {
198
-		return $cond[$key];
199
-	}
200
-
201
-	$liste_statuts = $publie;
202
-	if (defined('_VAR_PREVIEW') and _VAR_PREVIEW and !$ignore_previsu) {
203
-		$liste_statuts = $previsu;
204
-	}
205
-	$not = false;
206
-	if (strncmp($liste_statuts, '!', 1) == 0) {
207
-		$not = true;
208
-		$liste_statuts = substr($liste_statuts, 1);
209
-	}
210
-	// '' => ne rien afficher, '!'=> ne rien filtrer
211
-	if (!strlen($liste_statuts)) {
212
-		return $cond[$key] = ($not ? '1=1' : '0=1');
213
-	}
214
-
215
-	$liste_statuts = explode(',', $liste_statuts);
216
-	$where = array();
217
-	foreach ($liste_statuts as $k => $v) {
218
-		// filtrage /auteur pour limiter les objets d'un statut (prepa en general)
219
-		// a ceux de l'auteur identifie
220
-		if (strpos($v, '/') !== false) {
221
-			$v = explode('/', $v);
222
-			$filtre = end($v);
223
-			$v = reset($v);
224
-			$v = preg_replace(',\W,', '', $v);
225
-			if ($filtre == 'auteur'
226
-				and (strpos($mstatut, '.') !== false)
227
-				and $objet = explode('.', $mstatut)
228
-				and $id_table = reset($objet)
229
-				and $objet = objet_type($id_table)
230
-			) {
231
-				$w = "$mstatut<>" . sql_quote($v);
232
-
233
-				// retrouver l’id_auteur qui a filé un lien de prévisu éventuellement,
234
-				// sinon l’auteur en session
235
-				include_spip('inc/securiser_action');
236
-				if ($desc = decrire_token_previsu()) {
237
-					$id_auteur = $desc['id_auteur'];
238
-				} elseif (isset($GLOBALS['visiteur_session']['id_auteur'])) {
239
-					$id_auteur = intval($GLOBALS['visiteur_session']['id_auteur']);
240
-				} else {
241
-					$id_auteur = null;
242
-				}
243
-
244
-				// dans ce cas (admin en general), pas de filtrage sur ce statut
245
-				if (!autoriser('previsualiser' . $v, $objet, '', $id_auteur)) {
246
-					// si pas d'auteur identifie pas de sous-requete car pas d'article qui matche
247
-					if (!$id_auteur) {
248
-						$where[] = $w;
249
-					} else {
250
-						$primary = id_table_objet($objet);
251
-						$where[] = "($w OR $id_table.$primary IN (" . sql_get_select(
252
-								'ssss.id_objet',
253
-								'spip_auteurs_liens AS ssss',
254
-								'ssss.objet=' . sql_quote($objet) . ' AND ssss.id_auteur=' . intval($id_auteur),
255
-								'',
256
-								'',
257
-								'',
258
-								'',
259
-								$serveur
260
-							) . '))';
261
-					}
262
-				}
263
-			} // ignorer ce statut si on ne sait pas comment le filtrer
264
-			else {
265
-				$v = '';
266
-			}
267
-		}
268
-		// securite
269
-		$liste_statuts[$k] = preg_replace(',\W,', '', $v);
270
-	}
271
-	$liste_statuts = array_filter($liste_statuts);
272
-	if (count($liste_statuts) == 1) {
273
-		$where[] = array('=', $mstatut, sql_quote(reset($liste_statuts), $serveur));
274
-	} else {
275
-		$where[] = sql_in($mstatut, $liste_statuts, $not, $serveur);
276
-	}
277
-
278
-	while (count($where) > 1) {
279
-		$and = array('AND', array_pop($where), array_pop($where));
280
-		$where[] = $and;
281
-	}
282
-	$cond[$key] = reset($where);
283
-	if ($not) {
284
-		$cond[$key] = array('NOT', $cond[$key]);
285
-	}
286
-
287
-	return $cond[$key];
194
+    static $cond = array();
195
+    $key = func_get_args();
196
+    $key = implode('-', $key);
197
+    if (isset($cond[$key])) {
198
+        return $cond[$key];
199
+    }
200
+
201
+    $liste_statuts = $publie;
202
+    if (defined('_VAR_PREVIEW') and _VAR_PREVIEW and !$ignore_previsu) {
203
+        $liste_statuts = $previsu;
204
+    }
205
+    $not = false;
206
+    if (strncmp($liste_statuts, '!', 1) == 0) {
207
+        $not = true;
208
+        $liste_statuts = substr($liste_statuts, 1);
209
+    }
210
+    // '' => ne rien afficher, '!'=> ne rien filtrer
211
+    if (!strlen($liste_statuts)) {
212
+        return $cond[$key] = ($not ? '1=1' : '0=1');
213
+    }
214
+
215
+    $liste_statuts = explode(',', $liste_statuts);
216
+    $where = array();
217
+    foreach ($liste_statuts as $k => $v) {
218
+        // filtrage /auteur pour limiter les objets d'un statut (prepa en general)
219
+        // a ceux de l'auteur identifie
220
+        if (strpos($v, '/') !== false) {
221
+            $v = explode('/', $v);
222
+            $filtre = end($v);
223
+            $v = reset($v);
224
+            $v = preg_replace(',\W,', '', $v);
225
+            if ($filtre == 'auteur'
226
+                and (strpos($mstatut, '.') !== false)
227
+                and $objet = explode('.', $mstatut)
228
+                and $id_table = reset($objet)
229
+                and $objet = objet_type($id_table)
230
+            ) {
231
+                $w = "$mstatut<>" . sql_quote($v);
232
+
233
+                // retrouver l’id_auteur qui a filé un lien de prévisu éventuellement,
234
+                // sinon l’auteur en session
235
+                include_spip('inc/securiser_action');
236
+                if ($desc = decrire_token_previsu()) {
237
+                    $id_auteur = $desc['id_auteur'];
238
+                } elseif (isset($GLOBALS['visiteur_session']['id_auteur'])) {
239
+                    $id_auteur = intval($GLOBALS['visiteur_session']['id_auteur']);
240
+                } else {
241
+                    $id_auteur = null;
242
+                }
243
+
244
+                // dans ce cas (admin en general), pas de filtrage sur ce statut
245
+                if (!autoriser('previsualiser' . $v, $objet, '', $id_auteur)) {
246
+                    // si pas d'auteur identifie pas de sous-requete car pas d'article qui matche
247
+                    if (!$id_auteur) {
248
+                        $where[] = $w;
249
+                    } else {
250
+                        $primary = id_table_objet($objet);
251
+                        $where[] = "($w OR $id_table.$primary IN (" . sql_get_select(
252
+                                'ssss.id_objet',
253
+                                'spip_auteurs_liens AS ssss',
254
+                                'ssss.objet=' . sql_quote($objet) . ' AND ssss.id_auteur=' . intval($id_auteur),
255
+                                '',
256
+                                '',
257
+                                '',
258
+                                '',
259
+                                $serveur
260
+                            ) . '))';
261
+                    }
262
+                }
263
+            } // ignorer ce statut si on ne sait pas comment le filtrer
264
+            else {
265
+                $v = '';
266
+            }
267
+        }
268
+        // securite
269
+        $liste_statuts[$k] = preg_replace(',\W,', '', $v);
270
+    }
271
+    $liste_statuts = array_filter($liste_statuts);
272
+    if (count($liste_statuts) == 1) {
273
+        $where[] = array('=', $mstatut, sql_quote(reset($liste_statuts), $serveur));
274
+    } else {
275
+        $where[] = sql_in($mstatut, $liste_statuts, $not, $serveur);
276
+    }
277
+
278
+    while (count($where) > 1) {
279
+        $and = array('AND', array_pop($where), array_pop($where));
280
+        $where[] = $and;
281
+    }
282
+    $cond[$key] = reset($where);
283
+    if ($not) {
284
+        $cond[$key] = array('NOT', $cond[$key]);
285
+    }
286
+
287
+    return $cond[$key];
288 288
 }
289 289
 
290 290
 /**
@@ -295,7 +295,7 @@  discard block
 block discarded – undo
295 295
  * @return array|bool|null
296 296
  */
297 297
 function quete_fichier($id_document, $serveur = '') {
298
-	return sql_getfetsel('fichier', 'spip_documents', ('id_document=' . intval($id_document)), '', array(), '', '', $serveur);
298
+    return sql_getfetsel('fichier', 'spip_documents', ('id_document=' . intval($id_document)), '', array(), '', '', $serveur);
299 299
 }
300 300
 
301 301
 /**
@@ -306,7 +306,7 @@  discard block
 block discarded – undo
306 306
  * @return array|bool
307 307
  */
308 308
 function quete_document($id_document, $serveur = '') {
309
-	return sql_fetsel('*', 'spip_documents', ('id_document=' . intval($id_document)), '', array(), '', '', $serveur);
309
+    return sql_fetsel('*', 'spip_documents', ('id_document=' . intval($id_document)), '', array(), '', '', $serveur);
310 310
 }
311 311
 
312 312
 /**
@@ -317,7 +317,7 @@  discard block
 block discarded – undo
317 317
  * @return array|bool|null
318 318
  */
319 319
 function quete_meta($nom, $serveur) {
320
-	return sql_getfetsel('valeur', 'spip_meta', 'nom=' . sql_quote($nom), '', '', '', '', $serveur);
320
+    return sql_getfetsel('valeur', 'spip_meta', 'nom=' . sql_quote($nom), '', '', '', '', $serveur);
321 321
 }
322 322
 
323 323
 /**
@@ -343,66 +343,66 @@  discard block
 block discarded – undo
343 343
  *     Retourne soit un tableau, soit le chemin du fichier.
344 344
  */
345 345
 function quete_logo($cle_objet, $onoff, $id, $id_rubrique, $flag) {
346
-	include_spip('base/objets');
347
-	$nom = strtolower($onoff);
348
-
349
-	$cle_objet = id_table_objet($cle_objet);
350
-
351
-	while (1) {
352
-		$objet = objet_type($cle_objet);
353
-
354
-		$on = quete_logo_objet($id, $objet, $nom);
355
-
356
-		if ($on) {
357
-			if ($flag) {
358
-				return basename($on['chemin']);
359
-			} else {
360
-				$taille = @spip_getimagesize($on['chemin']);
361
-
362
-				// Si on a déjà demandé un survol directement ($onoff = off)
363
-				// ou qu'on a demandé uniquement le normal ($onoff = on)
364
-				// alors on ne cherche pas du tout le survol ici
365
-				if ($onoff != 'ON') {
366
-					$off = '';
367
-				} else {
368
-					// Sinon, c'est qu'on demande normal ET survol à la fois, donc on cherche maintenant le survol
369
-					$off = quete_logo_objet($id, $objet, 'off');
370
-				}
371
-
372
-				// on retourne une url du type IMG/artonXX?timestamp
373
-				// qui permet de distinguer le changement de logo
374
-				// et placer un expire sur le dossier IMG/
375
-				$res = array(
376
-					$on['chemin'] . ($on['timestamp'] ? "?{$on['timestamp']}" : ''),
377
-					($off ? $off['chemin'] . ($off['timestamp'] ? "?{$off['timestamp']}" : '') : ''),
378
-					(!$taille ? '' : (' ' . $taille[3]))
379
-				);
380
-				$res['src'] = $res[0];
381
-				$res['logo_on'] = $res[0];
382
-				$res['logo_off'] = $res[1];
383
-				$res['width'] = ($taille ? $taille[0] : '');
384
-				$res['height'] = ($taille ? $taille[1] : '');
385
-
386
-				return $res;
387
-			}
388
-		} else {
389
-			if (defined('_LOGO_RUBRIQUE_DESACTIVER_HERITAGE')) {
390
-				return '';
391
-			} else {
392
-				if ($id_rubrique) {
393
-					$cle_objet = 'id_rubrique';
394
-					$id = $id_rubrique;
395
-					$id_rubrique = 0;
396
-				} else {
397
-					if ($id and $cle_objet == 'id_rubrique') {
398
-						$id = quete_parent($id);
399
-					} else {
400
-						return '';
401
-					}
402
-				}
403
-			}
404
-		}
405
-	}
346
+    include_spip('base/objets');
347
+    $nom = strtolower($onoff);
348
+
349
+    $cle_objet = id_table_objet($cle_objet);
350
+
351
+    while (1) {
352
+        $objet = objet_type($cle_objet);
353
+
354
+        $on = quete_logo_objet($id, $objet, $nom);
355
+
356
+        if ($on) {
357
+            if ($flag) {
358
+                return basename($on['chemin']);
359
+            } else {
360
+                $taille = @spip_getimagesize($on['chemin']);
361
+
362
+                // Si on a déjà demandé un survol directement ($onoff = off)
363
+                // ou qu'on a demandé uniquement le normal ($onoff = on)
364
+                // alors on ne cherche pas du tout le survol ici
365
+                if ($onoff != 'ON') {
366
+                    $off = '';
367
+                } else {
368
+                    // Sinon, c'est qu'on demande normal ET survol à la fois, donc on cherche maintenant le survol
369
+                    $off = quete_logo_objet($id, $objet, 'off');
370
+                }
371
+
372
+                // on retourne une url du type IMG/artonXX?timestamp
373
+                // qui permet de distinguer le changement de logo
374
+                // et placer un expire sur le dossier IMG/
375
+                $res = array(
376
+                    $on['chemin'] . ($on['timestamp'] ? "?{$on['timestamp']}" : ''),
377
+                    ($off ? $off['chemin'] . ($off['timestamp'] ? "?{$off['timestamp']}" : '') : ''),
378
+                    (!$taille ? '' : (' ' . $taille[3]))
379
+                );
380
+                $res['src'] = $res[0];
381
+                $res['logo_on'] = $res[0];
382
+                $res['logo_off'] = $res[1];
383
+                $res['width'] = ($taille ? $taille[0] : '');
384
+                $res['height'] = ($taille ? $taille[1] : '');
385
+
386
+                return $res;
387
+            }
388
+        } else {
389
+            if (defined('_LOGO_RUBRIQUE_DESACTIVER_HERITAGE')) {
390
+                return '';
391
+            } else {
392
+                if ($id_rubrique) {
393
+                    $cle_objet = 'id_rubrique';
394
+                    $id = $id_rubrique;
395
+                    $id_rubrique = 0;
396
+                } else {
397
+                    if ($id and $cle_objet == 'id_rubrique') {
398
+                        $id = quete_parent($id);
399
+                    } else {
400
+                        return '';
401
+                    }
402
+                }
403
+            }
404
+        }
405
+    }
406 406
 }
407 407
 
408 408
 /**
@@ -416,37 +416,37 @@  discard block
 block discarded – undo
416 416
  * 		"on" ou "off" suivant le logo normal ou survol
417 417
  **/
418 418
 function quete_logo_objet($id_objet, $objet, $mode) {
419
-	static $chercher_logo;
420
-	if (is_null($chercher_logo)) {
421
-		$chercher_logo = charger_fonction('chercher_logo', 'inc');
422
-	}
423
-	$cle_objet = id_table_objet($objet);
424
-
425
-	// On cherche pas la méthode classique
426
-	$infos_logo = $chercher_logo($id_objet, $cle_objet, $mode);
427
-	// Si la méthode classique a trouvé quelque chose, on utilise le nouveau format
428
-	if (!empty($infos_logo)) {
429
-		$infos_logo = array(
430
-			'chemin' => $infos_logo[0],
431
-			'timestamp' => $infos_logo[4],
432
-		);
433
-	}
434
-
435
-	// On passe cette recherche de logo dans un pipeline
436
-	$infos_logo = pipeline(
437
-		'quete_logo_objet',
438
-		array(
439
-			'args' => array(
440
-				'id_objet' => $id_objet,
441
-				'objet' => $objet,
442
-				'cle_objet' => $cle_objet,
443
-				'mode' => $mode,
444
-			),
445
-			'data' => $infos_logo,
446
-		)
447
-	);
448
-
449
-	return $infos_logo;
419
+    static $chercher_logo;
420
+    if (is_null($chercher_logo)) {
421
+        $chercher_logo = charger_fonction('chercher_logo', 'inc');
422
+    }
423
+    $cle_objet = id_table_objet($objet);
424
+
425
+    // On cherche pas la méthode classique
426
+    $infos_logo = $chercher_logo($id_objet, $cle_objet, $mode);
427
+    // Si la méthode classique a trouvé quelque chose, on utilise le nouveau format
428
+    if (!empty($infos_logo)) {
429
+        $infos_logo = array(
430
+            'chemin' => $infos_logo[0],
431
+            'timestamp' => $infos_logo[4],
432
+        );
433
+    }
434
+
435
+    // On passe cette recherche de logo dans un pipeline
436
+    $infos_logo = pipeline(
437
+        'quete_logo_objet',
438
+        array(
439
+            'args' => array(
440
+                'id_objet' => $id_objet,
441
+                'objet' => $objet,
442
+                'cle_objet' => $cle_objet,
443
+                'mode' => $mode,
444
+            ),
445
+            'data' => $infos_logo,
446
+        )
447
+    );
448
+
449
+    return $infos_logo;
450 450
 }
451 451
 
452 452
 /**
@@ -459,24 +459,24 @@  discard block
 block discarded – undo
459 459
  * @return bool|string
460 460
  */
461 461
 function quete_logo_file($row, $connect = null) {
462
-	include_spip('inc/documents');
463
-	$logo = vignette_logo_document($row, $connect);
464
-	if (!$logo) {
465
-		$logo = image_du_document($row, $connect);
466
-	}
467
-	if (!$logo) {
468
-		$f = charger_fonction('vignette', 'inc');
469
-		$logo = $f($row['extension'], false);
470
-	}
471
-	// si c'est une vignette type doc, la renvoyer direct
472
-	if (strcmp($logo, _DIR_PLUGINS) == 0
473
-		or strcmp($logo, _DIR_PLUGINS_DIST) == 0
474
-		or strcmp($logo, _DIR_RACINE . 'prive/') == 0
475
-	) {
476
-		return $logo;
477
-	}
478
-
479
-	return get_spip_doc($logo);
462
+    include_spip('inc/documents');
463
+    $logo = vignette_logo_document($row, $connect);
464
+    if (!$logo) {
465
+        $logo = image_du_document($row, $connect);
466
+    }
467
+    if (!$logo) {
468
+        $f = charger_fonction('vignette', 'inc');
469
+        $logo = $f($row['extension'], false);
470
+    }
471
+    // si c'est une vignette type doc, la renvoyer direct
472
+    if (strcmp($logo, _DIR_PLUGINS) == 0
473
+        or strcmp($logo, _DIR_PLUGINS_DIST) == 0
474
+        or strcmp($logo, _DIR_RACINE . 'prive/') == 0
475
+    ) {
476
+        return $logo;
477
+    }
478
+
479
+    return get_spip_doc($logo);
480 480
 }
481 481
 
482 482
 /**
@@ -504,20 +504,20 @@  discard block
 block discarded – undo
504 504
  */
505 505
 function quete_logo_document($row, $lien, $align, $mode_logo, $x, $y, $connect = null) {
506 506
 
507
-	include_spip('inc/documents');
508
-	$logo = '';
509
-	if (!in_array($mode_logo, array('icone', 'apercu'))) {
510
-		$logo = vignette_logo_document($row, $connect);
511
-	}
512
-	// si on veut explicitement la vignette, ne rien renvoyer si il n'y en a pas
513
-	if ($mode_logo == 'vignette' and !$logo) {
514
-		return '';
515
-	}
516
-	if ($mode_logo == 'icone') {
517
-		$row['fichier'] = '';
518
-	}
519
-
520
-	return vignette_automatique($logo, $row, $lien, $x, $y, $align, null, $connect);
507
+    include_spip('inc/documents');
508
+    $logo = '';
509
+    if (!in_array($mode_logo, array('icone', 'apercu'))) {
510
+        $logo = vignette_logo_document($row, $connect);
511
+    }
512
+    // si on veut explicitement la vignette, ne rien renvoyer si il n'y en a pas
513
+    if ($mode_logo == 'vignette' and !$logo) {
514
+        return '';
515
+    }
516
+    if ($mode_logo == 'icone') {
517
+        $row['fichier'] = '';
518
+    }
519
+
520
+    return vignette_automatique($logo, $row, $lien, $x, $y, $align, null, $connect);
521 521
 }
522 522
 
523 523
 /**
@@ -529,19 +529,19 @@  discard block
 block discarded – undo
529 529
  */
530 530
 function quete_html_logo($logo, $align, $lien) {
531 531
 
532
-	if (!is_array($logo)) {
533
-		return '';
534
-	}
535
-
536
-	$contexte = [];
537
-	foreach ($logo as $k=>$v) {
538
-		if (!is_numeric($k)) {
539
-			$contexte[$k] = $v;
540
-		}
541
-	}
542
-	$contexte['align'] = $align;
543
-	$contexte['lien'] = $lien;
544
-	return recuperer_fond('modeles/logo', $contexte);
532
+    if (!is_array($logo)) {
533
+        return '';
534
+    }
535
+
536
+    $contexte = [];
537
+    foreach ($logo as $k=>$v) {
538
+        if (!is_numeric($k)) {
539
+            $contexte[$k] = $v;
540
+        }
541
+    }
542
+    $contexte['align'] = $align;
543
+    $contexte['lien'] = $lien;
544
+    return recuperer_fond('modeles/logo', $contexte);
545 545
 }
546 546
 
547 547
 /**
@@ -555,14 +555,14 @@  discard block
 block discarded – undo
555 555
  * @return string|false
556 556
  */
557 557
 function document_spip_externe($fichier, $connect) {
558
-	if ($connect) {
559
-		$site = quete_meta('adresse_site', $connect);
560
-		if ($site) {
561
-			$dir = quete_meta('dir_img', $connect);
562
-			return "$site/$dir$fichier";
563
-		}
564
-	}
565
-	return false;
558
+    if ($connect) {
559
+        $site = quete_meta('adresse_site', $connect);
560
+        if ($site) {
561
+            $dir = quete_meta('dir_img', $connect);
562
+            return "$site/$dir$fichier";
563
+        }
564
+    }
565
+    return false;
566 566
 }
567 567
 
568 568
 /**
@@ -575,23 +575,23 @@  discard block
 block discarded – undo
575 575
  * @return string
576 576
  */
577 577
 function vignette_logo_document($row, $connect = '') {
578
-	if (!$row['id_vignette']) {
579
-		return '';
580
-	}
581
-	$fichier = quete_fichier($row['id_vignette'], $connect);
582
-	if ($url = document_spip_externe($fichier, $connect)) {
583
-		return $url;
584
-	}
585
-
586
-	$f = get_spip_doc($fichier);
587
-	if ($f and @file_exists($f)) {
588
-		return $f;
589
-	}
590
-	if ($row['mode'] !== 'vignette') {
591
-		return '';
592
-	}
593
-
594
-	return generer_url_entite($row['id_document'], 'document', '', '', $connect);
578
+    if (!$row['id_vignette']) {
579
+        return '';
580
+    }
581
+    $fichier = quete_fichier($row['id_vignette'], $connect);
582
+    if ($url = document_spip_externe($fichier, $connect)) {
583
+        return $url;
584
+    }
585
+
586
+    $f = get_spip_doc($fichier);
587
+    if ($f and @file_exists($f)) {
588
+        return $f;
589
+    }
590
+    if ($row['mode'] !== 'vignette') {
591
+        return '';
592
+    }
593
+
594
+    return generer_url_entite($row['id_document'], 'document', '', '', $connect);
595 595
 }
596 596
 
597 597
 /**
@@ -607,68 +607,68 @@  discard block
 block discarded – undo
607 607
  * @return bool|string
608 608
  */
609 609
 function calcul_exposer($id, $prim, $reference, $parent, $type, $connect = '') {
610
-	static $exposer = array();
611
-
612
-	// Que faut-il exposer ? Tous les elements de $reference
613
-	// ainsi que leur hierarchie ; on ne fait donc ce calcul
614
-	// qu'une fois (par squelette) et on conserve le resultat
615
-	// en static.
616
-	if (!isset($exposer[$m = md5(serialize($reference))][$prim])) {
617
-		$principal = isset($reference[$type]) ? $reference[$type] :
618
-			// cas de la pagination indecte @xx qui positionne la page avec l'id xx
619
-			// et donne la reference dynamique @type=xx dans le contexte
620
-			(isset($reference["@$type"]) ? $reference["@$type"] : '');
621
-		// le parent fournit en argument est le parent de $id, pas celui de $principal
622
-		// il n'est donc pas utile
623
-		$parent = 0;
624
-		if (!$principal) { // regarder si un enfant est dans le contexte, auquel cas il expose peut etre le parent courant
625
-			$enfants = array('id_rubrique' => array('id_article'), 'id_groupe' => array('id_mot'));
626
-			if (isset($enfants[$type])) {
627
-				foreach ($enfants[$type] as $t) {
628
-					if (isset($reference[$t])
629
-						// cas de la reference donnee dynamiquement par la pagination
630
-						or isset($reference["@$t"])
631
-					) {
632
-						$type = $t;
633
-						$principal = isset($reference[$type]) ? $reference[$type] : $reference["@$type"];
634
-						continue;
635
-					}
636
-				}
637
-			}
638
-		}
639
-		$exposer[$m][$type] = array();
640
-		if ($principal) {
641
-			$principaux = is_array($principal) ? $principal : array($principal);
642
-			foreach ($principaux as $principal) {
643
-				$exposer[$m][$type][$principal] = true;
644
-				if ($type == 'id_mot') {
645
-					if (!$parent) {
646
-						$parent = sql_getfetsel('id_groupe', 'spip_mots', 'id_mot=' . intval($principal), '', '', '', '', $connect);
647
-					}
648
-					if ($parent) {
649
-						$exposer[$m]['id_groupe'][$parent] = true;
650
-					}
651
-				} else {
652
-					if ($type != 'id_groupe') {
653
-						if (!$parent) {
654
-							if ($type == 'id_rubrique') {
655
-								$parent = $principal;
656
-							}
657
-							if ($type == 'id_article') {
658
-								$parent = quete_rubrique($principal, $connect);
659
-							}
660
-						}
661
-						do {
662
-							$exposer[$m]['id_rubrique'][$parent] = true;
663
-						} while ($parent = quete_parent($parent, $connect));
664
-					}
665
-				}
666
-			}
667
-		}
668
-	}
669
-
670
-	// And the winner is...
671
-	return isset($exposer[$m][$prim]) ? isset($exposer[$m][$prim][$id]) : '';
610
+    static $exposer = array();
611
+
612
+    // Que faut-il exposer ? Tous les elements de $reference
613
+    // ainsi que leur hierarchie ; on ne fait donc ce calcul
614
+    // qu'une fois (par squelette) et on conserve le resultat
615
+    // en static.
616
+    if (!isset($exposer[$m = md5(serialize($reference))][$prim])) {
617
+        $principal = isset($reference[$type]) ? $reference[$type] :
618
+            // cas de la pagination indecte @xx qui positionne la page avec l'id xx
619
+            // et donne la reference dynamique @type=xx dans le contexte
620
+            (isset($reference["@$type"]) ? $reference["@$type"] : '');
621
+        // le parent fournit en argument est le parent de $id, pas celui de $principal
622
+        // il n'est donc pas utile
623
+        $parent = 0;
624
+        if (!$principal) { // regarder si un enfant est dans le contexte, auquel cas il expose peut etre le parent courant
625
+            $enfants = array('id_rubrique' => array('id_article'), 'id_groupe' => array('id_mot'));
626
+            if (isset($enfants[$type])) {
627
+                foreach ($enfants[$type] as $t) {
628
+                    if (isset($reference[$t])
629
+                        // cas de la reference donnee dynamiquement par la pagination
630
+                        or isset($reference["@$t"])
631
+                    ) {
632
+                        $type = $t;
633
+                        $principal = isset($reference[$type]) ? $reference[$type] : $reference["@$type"];
634
+                        continue;
635
+                    }
636
+                }
637
+            }
638
+        }
639
+        $exposer[$m][$type] = array();
640
+        if ($principal) {
641
+            $principaux = is_array($principal) ? $principal : array($principal);
642
+            foreach ($principaux as $principal) {
643
+                $exposer[$m][$type][$principal] = true;
644
+                if ($type == 'id_mot') {
645
+                    if (!$parent) {
646
+                        $parent = sql_getfetsel('id_groupe', 'spip_mots', 'id_mot=' . intval($principal), '', '', '', '', $connect);
647
+                    }
648
+                    if ($parent) {
649
+                        $exposer[$m]['id_groupe'][$parent] = true;
650
+                    }
651
+                } else {
652
+                    if ($type != 'id_groupe') {
653
+                        if (!$parent) {
654
+                            if ($type == 'id_rubrique') {
655
+                                $parent = $principal;
656
+                            }
657
+                            if ($type == 'id_article') {
658
+                                $parent = quete_rubrique($principal, $connect);
659
+                            }
660
+                        }
661
+                        do {
662
+                            $exposer[$m]['id_rubrique'][$parent] = true;
663
+                        } while ($parent = quete_parent($parent, $connect));
664
+                    }
665
+                }
666
+            }
667
+        }
668
+    }
669
+
670
+    // And the winner is...
671
+    return isset($exposer[$m][$prim]) ? isset($exposer[$m][$prim][$id]) : '';
672 672
 }
673 673
 
674 674
 /**
@@ -683,21 +683,21 @@  discard block
 block discarded – undo
683 683
  * @return int
684 684
  */
685 685
 function quete_debut_pagination($primary, $valeur, $pas, $iter) {
686
-	// on ne devrait pas arriver ici si la cle primaire est inexistante
687
-	// ou composee, mais verifions
688
-	if (!$primary or preg_match('/[,\s]/', $primary)) {
689
-		return 0;
690
-	}
691
-
692
-	$pos = 0;
693
-	while ($row = $iter->fetch() and $row[$primary] != $valeur) {
694
-		$pos++;
695
-	}
696
-	// si on a pas trouve
697
-	if (!$row or $row[$primary] != $valeur) {
698
-		return 0;
699
-	}
700
-
701
-	// sinon, calculer le bon numero de page
702
-	return floor($pos / $pas) * $pas;
686
+    // on ne devrait pas arriver ici si la cle primaire est inexistante
687
+    // ou composee, mais verifions
688
+    if (!$primary or preg_match('/[,\s]/', $primary)) {
689
+        return 0;
690
+    }
691
+
692
+    $pos = 0;
693
+    while ($row = $iter->fetch() and $row[$primary] != $valeur) {
694
+        $pos++;
695
+    }
696
+    // si on a pas trouve
697
+    if (!$row or $row[$primary] != $valeur) {
698
+        return 0;
699
+    }
700
+
701
+    // sinon, calculer le bon numero de page
702
+    return floor($pos / $pas) * $pas;
703 703
 }
Please login to merge, or discard this patch.
ecrire/inc/config.php 1 patch
Indentation   +400 added lines, -400 removed lines patch added patch discarded remove patch
@@ -17,7 +17,7 @@  discard block
 block discarded – undo
17 17
  **/
18 18
 
19 19
 if (!defined('_ECRIRE_INC_VERSION')) {
20
-	return;
20
+    return;
21 21
 }
22 22
 
23 23
 
@@ -28,7 +28,7 @@  discard block
 block discarded – undo
28 28
  * @return void
29 29
  */
30 30
 function inc_config_dist() {
31
-	actualise_metas(liste_metas());
31
+    actualise_metas(liste_metas());
32 32
 }
33 33
 
34 34
 /**
@@ -45,34 +45,34 @@  discard block
 block discarded – undo
45 45
  *     Liste (table, casier, sous_casier)
46 46
  */
47 47
 function expliquer_config($cfg) {
48
-	// par defaut, sur la table des meta
49
-	$table = 'meta';
50
-	$casier = null;
51
-	$sous_casier = array();
52
-	$cfg = explode('/', $cfg);
53
-
54
-	// si le premier argument est vide, c'est une syntaxe /table/ ou un appel vide ''
55
-	if (!reset($cfg) and count($cfg) > 1) {
56
-		array_shift($cfg);
57
-		$table = array_shift($cfg);
58
-		if (!isset($GLOBALS[$table])) {
59
-			lire_metas($table);
60
-		}
61
-	}
62
-
63
-	// si on a demande #CONFIG{/meta,'',0}
64
-	if (count($cfg)) {
65
-		// pas sur un appel vide ''
66
-		if ('' !== ($c = array_shift($cfg))) {
67
-			$casier = $c;
68
-		}
69
-	}
70
-
71
-	if (count($cfg)) {
72
-		$sous_casier = $cfg;
73
-	}
74
-
75
-	return array($table, $casier, $sous_casier);
48
+    // par defaut, sur la table des meta
49
+    $table = 'meta';
50
+    $casier = null;
51
+    $sous_casier = array();
52
+    $cfg = explode('/', $cfg);
53
+
54
+    // si le premier argument est vide, c'est une syntaxe /table/ ou un appel vide ''
55
+    if (!reset($cfg) and count($cfg) > 1) {
56
+        array_shift($cfg);
57
+        $table = array_shift($cfg);
58
+        if (!isset($GLOBALS[$table])) {
59
+            lire_metas($table);
60
+        }
61
+    }
62
+
63
+    // si on a demande #CONFIG{/meta,'',0}
64
+    if (count($cfg)) {
65
+        // pas sur un appel vide ''
66
+        if ('' !== ($c = array_shift($cfg))) {
67
+            $casier = $c;
68
+        }
69
+    }
70
+
71
+    if (count($cfg)) {
72
+        $sous_casier = $cfg;
73
+    }
74
+
75
+    return array($table, $casier, $sous_casier);
76 76
 }
77 77
 
78 78
 /**
@@ -100,65 +100,65 @@  discard block
 block discarded – undo
100 100
  *    Contenu de la configuration obtenue
101 101
  */
102 102
 function lire_config($cfg = '', $def = null, $unserialize = true) {
103
-	// lire le stockage sous la forme /table/valeur
104
-	// ou valeur qui est en fait implicitement /meta/valeur
105
-	// ou casier/valeur qui est en fait implicitement /meta/casier/valeur
106
-
107
-	// traiter en priorite le cas simple et frequent
108
-	// de lecture direct $GLOBALS['meta']['truc'], si $cfg ne contient ni / ni :
109
-	if ($cfg and strpbrk($cfg, '/:') === false) {
110
-		$r = isset($GLOBALS['meta'][$cfg]) ?
111
-			((!$unserialize
112
-				// ne pas essayer de deserialiser autre chose qu'une chaine
113
-				or !is_string($GLOBALS['meta'][$cfg])
114
-				// ne pas essayer de deserialiser si ce n'est visiblement pas une chaine serializee
115
-				or strpos($GLOBALS['meta'][$cfg], ':') === false
116
-				or ($t = @unserialize($GLOBALS['meta'][$cfg])) === false) ? $GLOBALS['meta'][$cfg] : $t)
117
-			: $def;
118
-
119
-		return $r;
120
-	}
121
-
122
-	// Brancher sur methodes externes si besoin
123
-	if ($cfg and $p = strpos($cfg, '::')) {
124
-		$methode = substr($cfg, 0, $p);
125
-		$lire_config = charger_fonction($methode, 'lire_config');
126
-
127
-		return $lire_config(substr($cfg, $p + 2), $def, $unserialize);
128
-	}
129
-
130
-	list($table, $casier, $sous_casier) = expliquer_config($cfg);
131
-
132
-	if (!isset($GLOBALS[$table])) {
133
-		return $def;
134
-	}
135
-
136
-	$r = $GLOBALS[$table];
137
-
138
-	// si on a demande #CONFIG{/meta,'',0}
139
-	if (!$casier) {
140
-		return $unserialize ? $r : serialize($r);
141
-	}
142
-
143
-	// casier principal :
144
-	// le deserializer si demande
145
-	// ou si on a besoin
146
-	// d'un sous casier
147
-	$r = isset($r[$casier]) ? $r[$casier] : null;
148
-	if (($unserialize or count($sous_casier)) and $r and is_string($r)) {
149
-		$r = (($t = @unserialize($r)) === false ? $r : $t);
150
-	}
151
-
152
-	// aller chercher le sous_casier
153
-	while (!is_null($r) and $casier = array_shift($sous_casier)) {
154
-		$r = isset($r[$casier]) ? $r[$casier] : null;
155
-	}
156
-
157
-	if (is_null($r)) {
158
-		return $def;
159
-	}
160
-
161
-	return $r;
103
+    // lire le stockage sous la forme /table/valeur
104
+    // ou valeur qui est en fait implicitement /meta/valeur
105
+    // ou casier/valeur qui est en fait implicitement /meta/casier/valeur
106
+
107
+    // traiter en priorite le cas simple et frequent
108
+    // de lecture direct $GLOBALS['meta']['truc'], si $cfg ne contient ni / ni :
109
+    if ($cfg and strpbrk($cfg, '/:') === false) {
110
+        $r = isset($GLOBALS['meta'][$cfg]) ?
111
+            ((!$unserialize
112
+                // ne pas essayer de deserialiser autre chose qu'une chaine
113
+                or !is_string($GLOBALS['meta'][$cfg])
114
+                // ne pas essayer de deserialiser si ce n'est visiblement pas une chaine serializee
115
+                or strpos($GLOBALS['meta'][$cfg], ':') === false
116
+                or ($t = @unserialize($GLOBALS['meta'][$cfg])) === false) ? $GLOBALS['meta'][$cfg] : $t)
117
+            : $def;
118
+
119
+        return $r;
120
+    }
121
+
122
+    // Brancher sur methodes externes si besoin
123
+    if ($cfg and $p = strpos($cfg, '::')) {
124
+        $methode = substr($cfg, 0, $p);
125
+        $lire_config = charger_fonction($methode, 'lire_config');
126
+
127
+        return $lire_config(substr($cfg, $p + 2), $def, $unserialize);
128
+    }
129
+
130
+    list($table, $casier, $sous_casier) = expliquer_config($cfg);
131
+
132
+    if (!isset($GLOBALS[$table])) {
133
+        return $def;
134
+    }
135
+
136
+    $r = $GLOBALS[$table];
137
+
138
+    // si on a demande #CONFIG{/meta,'',0}
139
+    if (!$casier) {
140
+        return $unserialize ? $r : serialize($r);
141
+    }
142
+
143
+    // casier principal :
144
+    // le deserializer si demande
145
+    // ou si on a besoin
146
+    // d'un sous casier
147
+    $r = isset($r[$casier]) ? $r[$casier] : null;
148
+    if (($unserialize or count($sous_casier)) and $r and is_string($r)) {
149
+        $r = (($t = @unserialize($r)) === false ? $r : $t);
150
+    }
151
+
152
+    // aller chercher le sous_casier
153
+    while (!is_null($r) and $casier = array_shift($sous_casier)) {
154
+        $r = isset($r[$casier]) ? $r[$casier] : null;
155
+    }
156
+
157
+    if (is_null($r)) {
158
+        return $def;
159
+    }
160
+
161
+    return $r;
162 162
 }
163 163
 
164 164
 /**
@@ -172,7 +172,7 @@  discard block
 block discarded – undo
172 172
  * @return mixed
173 173
  */
174 174
 function lire_config_metapack_dist($cfg = '', $def = null, $unserialize = true) {
175
-	return lire_config($cfg, $def, $unserialize);
175
+    return lire_config($cfg, $def, $unserialize);
176 176
 }
177 177
 
178 178
 
@@ -184,98 +184,98 @@  discard block
 block discarded – undo
184 184
  * @return bool
185 185
  */
186 186
 function ecrire_config($cfg, $store) {
187
-	// Brancher sur methodes externes si besoin
188
-	if ($cfg and $p = strpos($cfg, '::')) {
189
-		$methode = substr($cfg, 0, $p);
190
-		$ecrire_config = charger_fonction($methode, 'ecrire_config');
191
-
192
-		return $ecrire_config(substr($cfg, $p + 2), $store);
193
-	}
194
-
195
-	list($table, $casier, $sous_casier) = expliquer_config($cfg);
196
-	// il faut au moins un casier pour ecrire
197
-	if (!$casier) {
198
-		return false;
199
-	}
200
-
201
-	// trouvons ou creons le pointeur sur le casier
202
-	$st = isset($GLOBALS[$table][$casier]) ? $GLOBALS[$table][$casier] : null;
203
-	if (!is_array($st) and ($sous_casier or is_array($store))) {
204
-		$st = unserialize($st);
205
-		if ($st === false) {
206
-			// ne rien creer si c'est une demande d'effacement
207
-			if (is_null($store)) {
208
-				return false;
209
-			}
210
-			$st = array();
211
-		}
212
-	}
213
-
214
-	// si on a affaire a un sous caiser
215
-	// il faut ecrire au bon endroit sans perdre les autres sous casier freres
216
-	if ($c = $sous_casier) {
217
-		$sc = &$st;
218
-		$pointeurs = array();
219
-		while (count($c) and $cc = array_shift($c)) {
220
-			// creer l'entree si elle n'existe pas
221
-			if (!isset($sc[$cc])) {
222
-				// si on essaye d'effacer une config qui n'existe pas
223
-				// ne rien creer mais sortir
224
-				if (is_null($store)) {
225
-					return false;
226
-				}
227
-				$sc[$cc] = array();
228
-			}
229
-			$pointeurs[$cc] = &$sc;
230
-			$sc = &$sc[$cc];
231
-		}
232
-
233
-		// si c'est une demande d'effacement
234
-		if (is_null($store)) {
235
-			$c = $sous_casier;
236
-			$sous = array_pop($c);
237
-			// effacer, et remonter pour effacer les parents vides
238
-			do {
239
-				unset($pointeurs[$sous][$sous]);
240
-			} while ($sous = array_pop($c) and !count($pointeurs[$sous][$sous]));
241
-
242
-			// si on a vide tous les sous casiers,
243
-			// et que le casier est vide
244
-			// vider aussi la meta
245
-			if (!$sous and !count($st)) {
246
-				$st = null;
247
-			}
248
-		} // dans tous les autres cas, on ecrase
249
-		else {
250
-			$sc = $store;
251
-		}
252
-
253
-		// Maintenant que $st est modifiee
254
-		// reprenons la comme valeur a stocker dans le casier principal
255
-		$store = $st;
256
-	}
257
-
258
-	if (is_null($store)) {
259
-		if (is_null($st) and !$sous_casier) {
260
-			return false;
261
-		} // la config n'existait deja pas !
262
-		effacer_meta($casier, $table);
263
-		supprimer_table_meta($table); // supprimons la table (si elle est bien vide)
264
-	} // les meta ne peuvent etre que des chaines : il faut serializer le reste
265
-	else {
266
-		if (!isset($GLOBALS[$table])) {
267
-			installer_table_meta($table);
268
-		}
269
-		// si ce n'est pas une chaine
270
-		// il faut serializer
271
-		if (!is_string($store)) {
272
-			$store = serialize($store);
273
-		}
274
-		ecrire_meta($casier, $store, null, $table);
275
-	}
276
-
277
-	// verifier que lire_config($cfg)==$store ?
278
-	return true;
187
+    // Brancher sur methodes externes si besoin
188
+    if ($cfg and $p = strpos($cfg, '::')) {
189
+        $methode = substr($cfg, 0, $p);
190
+        $ecrire_config = charger_fonction($methode, 'ecrire_config');
191
+
192
+        return $ecrire_config(substr($cfg, $p + 2), $store);
193
+    }
194
+
195
+    list($table, $casier, $sous_casier) = expliquer_config($cfg);
196
+    // il faut au moins un casier pour ecrire
197
+    if (!$casier) {
198
+        return false;
199
+    }
200
+
201
+    // trouvons ou creons le pointeur sur le casier
202
+    $st = isset($GLOBALS[$table][$casier]) ? $GLOBALS[$table][$casier] : null;
203
+    if (!is_array($st) and ($sous_casier or is_array($store))) {
204
+        $st = unserialize($st);
205
+        if ($st === false) {
206
+            // ne rien creer si c'est une demande d'effacement
207
+            if (is_null($store)) {
208
+                return false;
209
+            }
210
+            $st = array();
211
+        }
212
+    }
213
+
214
+    // si on a affaire a un sous caiser
215
+    // il faut ecrire au bon endroit sans perdre les autres sous casier freres
216
+    if ($c = $sous_casier) {
217
+        $sc = &$st;
218
+        $pointeurs = array();
219
+        while (count($c) and $cc = array_shift($c)) {
220
+            // creer l'entree si elle n'existe pas
221
+            if (!isset($sc[$cc])) {
222
+                // si on essaye d'effacer une config qui n'existe pas
223
+                // ne rien creer mais sortir
224
+                if (is_null($store)) {
225
+                    return false;
226
+                }
227
+                $sc[$cc] = array();
228
+            }
229
+            $pointeurs[$cc] = &$sc;
230
+            $sc = &$sc[$cc];
231
+        }
232
+
233
+        // si c'est une demande d'effacement
234
+        if (is_null($store)) {
235
+            $c = $sous_casier;
236
+            $sous = array_pop($c);
237
+            // effacer, et remonter pour effacer les parents vides
238
+            do {
239
+                unset($pointeurs[$sous][$sous]);
240
+            } while ($sous = array_pop($c) and !count($pointeurs[$sous][$sous]));
241
+
242
+            // si on a vide tous les sous casiers,
243
+            // et que le casier est vide
244
+            // vider aussi la meta
245
+            if (!$sous and !count($st)) {
246
+                $st = null;
247
+            }
248
+        } // dans tous les autres cas, on ecrase
249
+        else {
250
+            $sc = $store;
251
+        }
252
+
253
+        // Maintenant que $st est modifiee
254
+        // reprenons la comme valeur a stocker dans le casier principal
255
+        $store = $st;
256
+    }
257
+
258
+    if (is_null($store)) {
259
+        if (is_null($st) and !$sous_casier) {
260
+            return false;
261
+        } // la config n'existait deja pas !
262
+        effacer_meta($casier, $table);
263
+        supprimer_table_meta($table); // supprimons la table (si elle est bien vide)
264
+    } // les meta ne peuvent etre que des chaines : il faut serializer le reste
265
+    else {
266
+        if (!isset($GLOBALS[$table])) {
267
+            installer_table_meta($table);
268
+        }
269
+        // si ce n'est pas une chaine
270
+        // il faut serializer
271
+        if (!is_string($store)) {
272
+            $store = serialize($store);
273
+        }
274
+        ecrire_meta($casier, $store, null, $table);
275
+    }
276
+
277
+    // verifier que lire_config($cfg)==$store ?
278
+    return true;
279 279
 }
280 280
 
281 281
 
@@ -289,14 +289,14 @@  discard block
 block discarded – undo
289 289
  * @return bool
290 290
  */
291 291
 function ecrire_config_metapack_dist($cfg, $store) {
292
-	// cas particulier en metapack::
293
-	// si on ecrit une chaine deja serializee, il faut la reserializer pour la rendre
294
-	// intacte en sortie ...
295
-	if (is_string($store) and strpos($store, ':') and unserialize($store)) {
296
-		$store = serialize($store);
297
-	}
298
-
299
-	return ecrire_config($cfg, $store);
292
+    // cas particulier en metapack::
293
+    // si on ecrit une chaine deja serializee, il faut la reserializer pour la rendre
294
+    // intacte en sortie ...
295
+    if (is_string($store) and strpos($store, ':') and unserialize($store)) {
296
+        $store = serialize($store);
297
+    }
298
+
299
+    return ecrire_config($cfg, $store);
300 300
 }
301 301
 
302 302
 /**
@@ -306,9 +306,9 @@  discard block
 block discarded – undo
306 306
  * @return bool
307 307
  */
308 308
 function effacer_config($cfg) {
309
-	ecrire_config($cfg, null);
309
+    ecrire_config($cfg, null);
310 310
 
311
-	return true;
311
+    return true;
312 312
 }
313 313
 
314 314
 /**
@@ -325,71 +325,71 @@  discard block
 block discarded – undo
325 325
  * @return array
326 326
  */
327 327
 function lister_configurer($exclure = array()) {
328
-	return array();
329
-
330
-	// lister les pages de config deja dans les menus
331
-	$deja = array();
332
-	foreach ($exclure as $id => $b) {
333
-		$url = ($b['url'] ? $b['url'] : $id);
334
-		if (!$b['url'] or !isset($exclure[$url])) {
335
-			if (strncmp($url, 'configurer_', 11) == 0) {
336
-				$deja[$url] = $b;
337
-			} elseif ($b['url'] == 'configurer' and preg_match(',cfg=([a-z0-9_]+),i', $b['args'], $match)) {
338
-				$deja["configurer_" . $match[1]] = $b;
339
-			}
340
-		}
341
-
342
-	}
343
-	$exclure = $exclure + $deja;
344
-
345
-	$icone_defaut = "images/configuration-16.png";
346
-	$liste = array();
347
-	$skels = array();
348
-	$forms = array();
349
-
350
-	// trouver toutes les pages configurer_xxx de l'espace prive
351
-	// et construire un tableau des entrees qui ne sont pas dans $deja
352
-	$pages = find_all_in_path("prive/squelettes/contenu/", "configurer_.*[.]" . _EXTENSION_SQUELETTES . '$');
353
-
354
-	foreach ($pages as $page) {
355
-		$configurer = basename($page, "." . _EXTENSION_SQUELETTES);
356
-		if (!isset($exclure[$configurer])) {
357
-			$liste[$configurer] = array(
358
-				'parent' => 'bando_configuration',
359
-				'url' => $configurer,
360
-				'titre' => _T("configurer:{$configurer}_titre"),
361
-				'icone' => find_in_theme($i = "images/{$configurer}-16.png") ? $i : $icone_defaut,
362
-			);
363
-		}
364
-		$skels[$configurer] = $page;
365
-	}
366
-
367
-	// analyser la liste des $skels pour voir les #FORMULAIRE_CONFIGURER_ inclus
368
-	foreach ($skels as $file) {
369
-		$forms = array_merge($forms, lister_formulaires_configurer($file));
370
-	}
371
-	$forms = array_flip($forms);
372
-
373
-	// trouver tous les formulaires/configurer_
374
-	// et construire un tableau des entrees
375
-	$pages = find_all_in_path("formulaires/", "configurer_.*[.]" . _EXTENSION_SQUELETTES . '$');
376
-	foreach ($pages as $page) {
377
-		$configurer = basename($page, "." . _EXTENSION_SQUELETTES);
378
-		if (!isset($forms[$configurer])
379
-			and !isset($liste[$configurer])
380
-			and !isset($exclure[$configurer])
381
-		) {
382
-			$liste[$configurer] = array(
383
-				'parent' => 'bando_configuration',
384
-				'url' => 'configurer',
385
-				'args' => 'cfg=' . substr($configurer, 11),
386
-				'titre' => _T("configurer:{$configurer}_titre"),
387
-				'icone' => find_in_theme($i = "images/{$configurer}-16.png") ? $i : $icone_defaut,
388
-			);
389
-		}
390
-	}
391
-
392
-	return $liste;
328
+    return array();
329
+
330
+    // lister les pages de config deja dans les menus
331
+    $deja = array();
332
+    foreach ($exclure as $id => $b) {
333
+        $url = ($b['url'] ? $b['url'] : $id);
334
+        if (!$b['url'] or !isset($exclure[$url])) {
335
+            if (strncmp($url, 'configurer_', 11) == 0) {
336
+                $deja[$url] = $b;
337
+            } elseif ($b['url'] == 'configurer' and preg_match(',cfg=([a-z0-9_]+),i', $b['args'], $match)) {
338
+                $deja["configurer_" . $match[1]] = $b;
339
+            }
340
+        }
341
+
342
+    }
343
+    $exclure = $exclure + $deja;
344
+
345
+    $icone_defaut = "images/configuration-16.png";
346
+    $liste = array();
347
+    $skels = array();
348
+    $forms = array();
349
+
350
+    // trouver toutes les pages configurer_xxx de l'espace prive
351
+    // et construire un tableau des entrees qui ne sont pas dans $deja
352
+    $pages = find_all_in_path("prive/squelettes/contenu/", "configurer_.*[.]" . _EXTENSION_SQUELETTES . '$');
353
+
354
+    foreach ($pages as $page) {
355
+        $configurer = basename($page, "." . _EXTENSION_SQUELETTES);
356
+        if (!isset($exclure[$configurer])) {
357
+            $liste[$configurer] = array(
358
+                'parent' => 'bando_configuration',
359
+                'url' => $configurer,
360
+                'titre' => _T("configurer:{$configurer}_titre"),
361
+                'icone' => find_in_theme($i = "images/{$configurer}-16.png") ? $i : $icone_defaut,
362
+            );
363
+        }
364
+        $skels[$configurer] = $page;
365
+    }
366
+
367
+    // analyser la liste des $skels pour voir les #FORMULAIRE_CONFIGURER_ inclus
368
+    foreach ($skels as $file) {
369
+        $forms = array_merge($forms, lister_formulaires_configurer($file));
370
+    }
371
+    $forms = array_flip($forms);
372
+
373
+    // trouver tous les formulaires/configurer_
374
+    // et construire un tableau des entrees
375
+    $pages = find_all_in_path("formulaires/", "configurer_.*[.]" . _EXTENSION_SQUELETTES . '$');
376
+    foreach ($pages as $page) {
377
+        $configurer = basename($page, "." . _EXTENSION_SQUELETTES);
378
+        if (!isset($forms[$configurer])
379
+            and !isset($liste[$configurer])
380
+            and !isset($exclure[$configurer])
381
+        ) {
382
+            $liste[$configurer] = array(
383
+                'parent' => 'bando_configuration',
384
+                'url' => 'configurer',
385
+                'args' => 'cfg=' . substr($configurer, 11),
386
+                'titre' => _T("configurer:{$configurer}_titre"),
387
+                'icone' => find_in_theme($i = "images/{$configurer}-16.png") ? $i : $icone_defaut,
388
+            );
389
+        }
390
+    }
391
+
392
+    return $liste;
393 393
 }
394 394
 
395 395
 
@@ -403,35 +403,35 @@  discard block
 block discarded – undo
403 403
  *    Liste des formulaires trouvés
404 404
  **/
405 405
 function lister_formulaires_configurer($file) {
406
-	$forms = array();
407
-
408
-	lire_fichier($file, $skel);
409
-	if (preg_match_all(",#FORMULAIRE_(CONFIGURER_[A-Z0-9_]*),", $skel, $matches, PREG_SET_ORDER)) {
410
-		$matches = array_map('end', $matches);
411
-		$matches = array_map('strtolower', $matches);
412
-		$forms = array_merge($forms, $matches);
413
-	}
414
-
415
-	// evaluer le fond en lui passant un exec coherent pour que les pipelines le reconnaissent
416
-	// et reperer les formulaires CVT configurer_xx insereres par les plugins via pipeline
417
-	$config = basename(substr($file, 0, -strlen("." . _EXTENSION_SQUELETTES)));
418
-	spip_log('Calcul de ' . "prive/squelettes/contenu/$config");
419
-	$fond = recuperer_fond("prive/squelettes/contenu/$config", array("exec" => $config));
420
-
421
-	// passer dans le pipeline affiche_milieu pour que les plugins puissent ajouter leur formulaires...
422
-	// et donc que l'on puisse les referencer aussi !
423
-	$fond = pipeline('affiche_milieu', array('args' => array("exec" => $config), 'data' => $fond));
424
-
425
-	// recuperer les noms des formulaires presents.
426
-	if (is_array($inputs = extraire_balises($fond, "input"))) {
427
-		foreach ($inputs as $i) {
428
-			if (extraire_attribut($i, 'name') == 'formulaire_action') {
429
-				$forms[] = ($c = extraire_attribut($i, 'value'));
430
-			}
431
-		}
432
-	}
433
-
434
-	return $forms;
406
+    $forms = array();
407
+
408
+    lire_fichier($file, $skel);
409
+    if (preg_match_all(",#FORMULAIRE_(CONFIGURER_[A-Z0-9_]*),", $skel, $matches, PREG_SET_ORDER)) {
410
+        $matches = array_map('end', $matches);
411
+        $matches = array_map('strtolower', $matches);
412
+        $forms = array_merge($forms, $matches);
413
+    }
414
+
415
+    // evaluer le fond en lui passant un exec coherent pour que les pipelines le reconnaissent
416
+    // et reperer les formulaires CVT configurer_xx insereres par les plugins via pipeline
417
+    $config = basename(substr($file, 0, -strlen("." . _EXTENSION_SQUELETTES)));
418
+    spip_log('Calcul de ' . "prive/squelettes/contenu/$config");
419
+    $fond = recuperer_fond("prive/squelettes/contenu/$config", array("exec" => $config));
420
+
421
+    // passer dans le pipeline affiche_milieu pour que les plugins puissent ajouter leur formulaires...
422
+    // et donc que l'on puisse les referencer aussi !
423
+    $fond = pipeline('affiche_milieu', array('args' => array("exec" => $config), 'data' => $fond));
424
+
425
+    // recuperer les noms des formulaires presents.
426
+    if (is_array($inputs = extraire_balises($fond, "input"))) {
427
+        foreach ($inputs as $i) {
428
+            if (extraire_attribut($i, 'name') == 'formulaire_action') {
429
+                $forms[] = ($c = extraire_attribut($i, 'value'));
430
+            }
431
+        }
432
+    }
433
+
434
+    return $forms;
435 435
 }
436 436
 
437 437
 
@@ -449,58 +449,58 @@  discard block
 block discarded – undo
449 449
  *    Couples nom de la `meta` => valeur par défaut
450 450
  */
451 451
 function liste_metas() {
452
-	return pipeline('configurer_liste_metas', array(
453
-		'nom_site' => _T('info_mon_site_spip'),
454
-		'slogan_site' => '',
455
-		'adresse_site' => preg_replace(",/$,", "", url_de_base()),
456
-		'descriptif_site' => '',
457
-		'activer_logos' => 'oui',
458
-		'activer_logos_survol' => 'non',
459
-		'articles_surtitre' => 'non',
460
-		'articles_soustitre' => 'non',
461
-		'articles_descriptif' => 'non',
462
-		'articles_chapeau' => 'non',
463
-		'articles_texte' => 'oui',
464
-		'articles_ps' => 'non',
465
-		'articles_redac' => 'non',
466
-		'post_dates' => 'non',
467
-		'articles_urlref' => 'non',
468
-		'articles_redirection' => 'non',
469
-		'creer_preview' => 'non',
470
-		'taille_preview' => 150,
471
-		'articles_modif' => 'non',
472
-
473
-		'rubriques_descriptif' => 'non',
474
-		'rubriques_texte' => 'oui',
475
-
476
-		'accepter_inscriptions' => 'non',
477
-		'accepter_visiteurs' => 'non',
478
-		'prevenir_auteurs' => 'non',
479
-		'suivi_edito' => 'non',
480
-		'adresse_suivi' => '',
481
-		'adresse_suivi_inscription' => '',
482
-		'adresse_neuf' => '',
483
-		'jours_neuf' => '',
484
-		'quoi_de_neuf' => 'non',
485
-		'preview' => ',0minirezo,1comite,',
486
-
487
-		'syndication_integrale' => 'oui',
488
-		'charset' => _DEFAULT_CHARSET,
489
-		'dir_img' => substr(_DIR_IMG, strlen(_DIR_RACINE)),
490
-
491
-		'multi_rubriques' => 'non',
492
-		'multi_secteurs' => 'non',
493
-		'gerer_trad' => 'non',
494
-		'langues_multilingue' => '',
495
-
496
-		'version_html_max' => 'html4',
497
-
498
-		'type_urls' => 'page',
499
-
500
-		'email_envoi' => '',
501
-		'email_webmaster' => '',
502
-		'auto_compress_http' => 'non',
503
-	));
452
+    return pipeline('configurer_liste_metas', array(
453
+        'nom_site' => _T('info_mon_site_spip'),
454
+        'slogan_site' => '',
455
+        'adresse_site' => preg_replace(",/$,", "", url_de_base()),
456
+        'descriptif_site' => '',
457
+        'activer_logos' => 'oui',
458
+        'activer_logos_survol' => 'non',
459
+        'articles_surtitre' => 'non',
460
+        'articles_soustitre' => 'non',
461
+        'articles_descriptif' => 'non',
462
+        'articles_chapeau' => 'non',
463
+        'articles_texte' => 'oui',
464
+        'articles_ps' => 'non',
465
+        'articles_redac' => 'non',
466
+        'post_dates' => 'non',
467
+        'articles_urlref' => 'non',
468
+        'articles_redirection' => 'non',
469
+        'creer_preview' => 'non',
470
+        'taille_preview' => 150,
471
+        'articles_modif' => 'non',
472
+
473
+        'rubriques_descriptif' => 'non',
474
+        'rubriques_texte' => 'oui',
475
+
476
+        'accepter_inscriptions' => 'non',
477
+        'accepter_visiteurs' => 'non',
478
+        'prevenir_auteurs' => 'non',
479
+        'suivi_edito' => 'non',
480
+        'adresse_suivi' => '',
481
+        'adresse_suivi_inscription' => '',
482
+        'adresse_neuf' => '',
483
+        'jours_neuf' => '',
484
+        'quoi_de_neuf' => 'non',
485
+        'preview' => ',0minirezo,1comite,',
486
+
487
+        'syndication_integrale' => 'oui',
488
+        'charset' => _DEFAULT_CHARSET,
489
+        'dir_img' => substr(_DIR_IMG, strlen(_DIR_RACINE)),
490
+
491
+        'multi_rubriques' => 'non',
492
+        'multi_secteurs' => 'non',
493
+        'gerer_trad' => 'non',
494
+        'langues_multilingue' => '',
495
+
496
+        'version_html_max' => 'html4',
497
+
498
+        'type_urls' => 'page',
499
+
500
+        'email_envoi' => '',
501
+        'email_webmaster' => '',
502
+        'auto_compress_http' => 'non',
503
+    ));
504 504
 }
505 505
 
506 506
 /**
@@ -511,43 +511,43 @@  discard block
 block discarded – undo
511 511
  * @return void
512 512
  */
513 513
 function actualise_metas($liste_meta) {
514
-	$meta_serveur =
515
-		array(
516
-			'version_installee',
517
-			'adresse_site',
518
-			'alea_ephemere_ancien',
519
-			'alea_ephemere',
520
-			'alea_ephemere_date',
521
-			'langue_site',
522
-			'langues_proposees',
523
-			'date_calcul_rubriques',
524
-			'derniere_modif',
525
-			'optimiser_table',
526
-			'drapeau_edition',
527
-			'creer_preview',
528
-			'taille_preview',
529
-			'creer_htpasswd',
530
-			'creer_htaccess',
531
-			'gd_formats_read',
532
-			'gd_formats',
533
-			'netpbm_formats',
534
-			'formats_graphiques',
535
-			'image_process',
536
-			'plugin_header',
537
-			'plugin'
538
-		);
539
-	// verifier le impt=non
540
-	sql_updateq('spip_meta', array('impt' => 'non'), sql_in('nom', $meta_serveur));
541
-
542
-	foreach ($liste_meta as $nom => $valeur) {
543
-		if (empty($GLOBALS['meta'][$nom])) {
544
-			ecrire_meta($nom, $valeur);
545
-		}
546
-	}
547
-
548
-	include_spip('inc/rubriques');
549
-	$langues = calculer_langues_utilisees();
550
-	ecrire_meta('langues_utilisees', $langues);
514
+    $meta_serveur =
515
+        array(
516
+            'version_installee',
517
+            'adresse_site',
518
+            'alea_ephemere_ancien',
519
+            'alea_ephemere',
520
+            'alea_ephemere_date',
521
+            'langue_site',
522
+            'langues_proposees',
523
+            'date_calcul_rubriques',
524
+            'derniere_modif',
525
+            'optimiser_table',
526
+            'drapeau_edition',
527
+            'creer_preview',
528
+            'taille_preview',
529
+            'creer_htpasswd',
530
+            'creer_htaccess',
531
+            'gd_formats_read',
532
+            'gd_formats',
533
+            'netpbm_formats',
534
+            'formats_graphiques',
535
+            'image_process',
536
+            'plugin_header',
537
+            'plugin'
538
+        );
539
+    // verifier le impt=non
540
+    sql_updateq('spip_meta', array('impt' => 'non'), sql_in('nom', $meta_serveur));
541
+
542
+    foreach ($liste_meta as $nom => $valeur) {
543
+        if (empty($GLOBALS['meta'][$nom])) {
544
+            ecrire_meta($nom, $valeur);
545
+        }
546
+    }
547
+
548
+    include_spip('inc/rubriques');
549
+    $langues = calculer_langues_utilisees();
550
+    ecrire_meta('langues_utilisees', $langues);
551 551
 }
552 552
 
553 553
 
@@ -569,18 +569,18 @@  discard block
 block discarded – undo
569 569
  */
570 570
 function appliquer_modifs_config($purger_skel = false) {
571 571
 
572
-	foreach (liste_metas() as $i => $v) {
573
-		if (($x = _request($i)) !== null) {
574
-			ecrire_meta($i, $x);
575
-		} elseif (!isset($GLOBALS['meta'][$i])) {
576
-			ecrire_meta($i, $v);
577
-		}
578
-	}
579
-
580
-	if ($purger_skel) {
581
-		include_spip('inc/invalideur');
582
-		purger_repertoire(_DIR_SKELS);
583
-	}
572
+    foreach (liste_metas() as $i => $v) {
573
+        if (($x = _request($i)) !== null) {
574
+            ecrire_meta($i, $x);
575
+        } elseif (!isset($GLOBALS['meta'][$i])) {
576
+            ecrire_meta($i, $v);
577
+        }
578
+    }
579
+
580
+    if ($purger_skel) {
581
+        include_spip('inc/invalideur');
582
+        purger_repertoire(_DIR_SKELS);
583
+    }
584 584
 }
585 585
 
586 586
 /**
@@ -591,21 +591,21 @@  discard block
 block discarded – undo
591 591
  * @return string
592 592
  */
593 593
 function appliquer_adresse_site($adresse_site) {
594
-	if ($adresse_site !== null) {
595
-		if (!strlen($adresse_site)) {
596
-			$GLOBALS['profondeur_url'] = _DIR_RESTREINT ? 0 : 1;
597
-			$adresse_site = url_de_base();
598
-		}
599
-		$adresse_site = preg_replace(",/?\s*$,", "", $adresse_site);
594
+    if ($adresse_site !== null) {
595
+        if (!strlen($adresse_site)) {
596
+            $GLOBALS['profondeur_url'] = _DIR_RESTREINT ? 0 : 1;
597
+            $adresse_site = url_de_base();
598
+        }
599
+        $adresse_site = preg_replace(",/?\s*$,", "", $adresse_site);
600 600
 
601
-		if (!tester_url_absolue($adresse_site)) {
602
-			$adresse_site = "http://$adresse_site";
603
-		}
601
+        if (!tester_url_absolue($adresse_site)) {
602
+            $adresse_site = "http://$adresse_site";
603
+        }
604 604
 
605
-		$adresse_site = entites_html($adresse_site);
605
+        $adresse_site = entites_html($adresse_site);
606 606
 
607
-		ecrire_meta('adresse_site', $adresse_site);
608
-	}
607
+        ecrire_meta('adresse_site', $adresse_site);
608
+    }
609 609
 
610
-	return $adresse_site;
610
+    return $adresse_site;
611 611
 }
Please login to merge, or discard this patch.
ecrire/public/iterateur.php 1 patch
Indentation   +564 added lines, -564 removed lines patch added patch discarded remove patch
@@ -12,7 +12,7 @@  discard block
 block discarded – undo
12 12
 \***************************************************************************/
13 13
 
14 14
 if (!defined('_ECRIRE_INC_VERSION')) {
15
-	return;
15
+    return;
16 16
 }
17 17
 
18 18
 /**
@@ -22,578 +22,578 @@  discard block
 block discarded – undo
22 22
  *
23 23
  */
24 24
 class IterFactory {
25
-	public static function create($iterateur, $command, $info = null) {
26
-
27
-		// cas des SI {si expression} analises tres tot
28
-		// pour eviter le chargement de tout iterateur
29
-		if (isset($command['si'])) {
30
-			foreach ($command['si'] as $si) {
31
-				if (!$si) {
32
-					// $command pour boucle SQL peut generer des erreurs de compilation
33
-					// s'il est transmis alors qu'on est dans un iterateur vide
34
-					return new IterDecorator(new EmptyIterator(), array(), $info);
35
-				}
36
-			}
37
-		}
38
-
39
-		// chercher un iterateur PHP existant (par exemple dans SPL)
40
-		// (il faudrait passer l'argument ->sql_serveur
41
-		// pour etre certain qu'on est sur un "php:")
42
-		if (class_exists($iterateur)) {
43
-			$a = isset($command['args']) ? $command['args'] : array();
44
-
45
-			// permettre de passer un Iterateur directement {args #ITERATEUR} :
46
-			// si on recoit deja un iterateur en argument, on l'utilise
47
-			if (count($a) == 1 and is_object($a[0]) and is_subclass_of($a[0], 'Iterator')) {
48
-				$iter = $a[0];
49
-
50
-				// sinon, on cree un iterateur du type donne
51
-			} else {
52
-				// arguments de creation de l'iterateur...
53
-				// (pas glop)
54
-				try {
55
-					switch (count($a)) {
56
-						case 0:
57
-							$iter = new $iterateur();
58
-							break;
59
-						case 1:
60
-							$iter = new $iterateur($a[0]);
61
-							break;
62
-						case 2:
63
-							$iter = new $iterateur($a[0], $a[1]);
64
-							break;
65
-						case 3:
66
-							$iter = new $iterateur($a[0], $a[1], $a[2]);
67
-							break;
68
-						case 4:
69
-							$iter = new $iterateur($a[0], $a[1], $a[2], $a[3]);
70
-							break;
71
-					}
72
-				} catch (Exception $e) {
73
-					spip_log("Erreur de chargement de l'iterateur $iterateur");
74
-					spip_log($e->getMessage());
75
-					$iter = new EmptyIterator();
76
-				}
77
-			}
78
-		} else {
79
-			// chercher la classe d'iterateur
80
-			// IterateurXXX
81
-			// definie dans le fichier iterateurs/xxx.php
82
-			$class = "Iterateur" . $iterateur;
83
-			if (!class_exists($class)) {
84
-				if (!include_spip("iterateur/" . strtolower($iterateur))
85
-					or !class_exists($class)
86
-				) {
87
-					die("Iterateur $iterateur non trouv&#233;");
88
-					// si l'iterateur n'existe pas, on se rabat sur le generique
89
-					# $iter = new EmptyIterator();
90
-				}
91
-			}
92
-			$iter = new $class($command, $info);
93
-		}
94
-
95
-		return new IterDecorator($iter, $command, $info);
96
-	}
25
+    public static function create($iterateur, $command, $info = null) {
26
+
27
+        // cas des SI {si expression} analises tres tot
28
+        // pour eviter le chargement de tout iterateur
29
+        if (isset($command['si'])) {
30
+            foreach ($command['si'] as $si) {
31
+                if (!$si) {
32
+                    // $command pour boucle SQL peut generer des erreurs de compilation
33
+                    // s'il est transmis alors qu'on est dans un iterateur vide
34
+                    return new IterDecorator(new EmptyIterator(), array(), $info);
35
+                }
36
+            }
37
+        }
38
+
39
+        // chercher un iterateur PHP existant (par exemple dans SPL)
40
+        // (il faudrait passer l'argument ->sql_serveur
41
+        // pour etre certain qu'on est sur un "php:")
42
+        if (class_exists($iterateur)) {
43
+            $a = isset($command['args']) ? $command['args'] : array();
44
+
45
+            // permettre de passer un Iterateur directement {args #ITERATEUR} :
46
+            // si on recoit deja un iterateur en argument, on l'utilise
47
+            if (count($a) == 1 and is_object($a[0]) and is_subclass_of($a[0], 'Iterator')) {
48
+                $iter = $a[0];
49
+
50
+                // sinon, on cree un iterateur du type donne
51
+            } else {
52
+                // arguments de creation de l'iterateur...
53
+                // (pas glop)
54
+                try {
55
+                    switch (count($a)) {
56
+                        case 0:
57
+                            $iter = new $iterateur();
58
+                            break;
59
+                        case 1:
60
+                            $iter = new $iterateur($a[0]);
61
+                            break;
62
+                        case 2:
63
+                            $iter = new $iterateur($a[0], $a[1]);
64
+                            break;
65
+                        case 3:
66
+                            $iter = new $iterateur($a[0], $a[1], $a[2]);
67
+                            break;
68
+                        case 4:
69
+                            $iter = new $iterateur($a[0], $a[1], $a[2], $a[3]);
70
+                            break;
71
+                    }
72
+                } catch (Exception $e) {
73
+                    spip_log("Erreur de chargement de l'iterateur $iterateur");
74
+                    spip_log($e->getMessage());
75
+                    $iter = new EmptyIterator();
76
+                }
77
+            }
78
+        } else {
79
+            // chercher la classe d'iterateur
80
+            // IterateurXXX
81
+            // definie dans le fichier iterateurs/xxx.php
82
+            $class = "Iterateur" . $iterateur;
83
+            if (!class_exists($class)) {
84
+                if (!include_spip("iterateur/" . strtolower($iterateur))
85
+                    or !class_exists($class)
86
+                ) {
87
+                    die("Iterateur $iterateur non trouv&#233;");
88
+                    // si l'iterateur n'existe pas, on se rabat sur le generique
89
+                    # $iter = new EmptyIterator();
90
+                }
91
+            }
92
+            $iter = new $class($command, $info);
93
+        }
94
+
95
+        return new IterDecorator($iter, $command, $info);
96
+    }
97 97
 }
98 98
 
99 99
 
100 100
 class IterDecorator extends FilterIterator {
101
-	private $iter;
102
-
103
-	/**
104
-	 * Conditions de filtrage
105
-	 * ie criteres de selection
106
-	 *
107
-	 * @var array
108
-	 */
109
-	protected $filtre = array();
110
-
111
-	/**
112
-	 * Fonction de filtrage compilee a partir des criteres de filtre
113
-	 *
114
-	 * @var string
115
-	 */
116
-	protected $func_filtre = null;
117
-
118
-	/**
119
-	 * Critere {offset, limit}
120
-	 *
121
-	 * @var int
122
-	 * @var int
123
-	 */
124
-	protected $offset = null;
125
-	protected $limit = null;
126
-
127
-	/**
128
-	 * nombre d'elements recuperes depuis la position 0,
129
-	 * en tenant compte des filtres
130
-	 *
131
-	 * @var int
132
-	 */
133
-	protected $fetched = 0;
134
-
135
-	/**
136
-	 * Y a t'il une erreur ?
137
-	 *
138
-	 * @var bool
139
-	 **/
140
-	protected $err = false;
141
-
142
-	/**
143
-	 * Drapeau a activer en cas d'echec
144
-	 * (select SQL errone, non chargement des DATA, etc)
145
-	 */
146
-	public function err() {
147
-		if (method_exists($this->iter, 'err')) {
148
-			return $this->iter->err();
149
-		}
150
-		if (property_exists($this->iter, 'err')) {
151
-			return $this->iter->err;
152
-		}
153
-
154
-		return false;
155
-	}
156
-
157
-	public function __construct(Iterator $iter, $command, $info) {
158
-		parent::__construct($iter);
159
-		parent::rewind(); // remettre a la premiere position (bug? connu de FilterIterator)
160
-
161
-		// recuperer l'iterateur transmis
162
-		$this->iter = $this->getInnerIterator();
163
-		$this->command = $command;
164
-		$this->info = $info;
165
-		$this->pos = 0;
166
-		$this->fetched = 0;
167
-
168
-		// chercher la liste des champs a retourner par
169
-		// fetch si l'objet ne les calcule pas tout seul
170
-		if (!method_exists($this->iter, 'fetch')) {
171
-			$this->calculer_select();
172
-			$this->calculer_filtres();
173
-		}
174
-
175
-		// emptyIterator critere {si} faux n'a pas d'erreur !
176
-		if (isset($this->iter->err)) {
177
-			$this->err = $this->iter->err;
178
-		}
179
-
180
-		// pas d'init a priori, le calcul ne sera fait qu'en cas de besoin (provoque une double requete souvent inutile en sqlite)
181
-		//$this->total = $this->count();
182
-	}
183
-
184
-
185
-	// calcule les elements a retournes par fetch()
186
-	// enleve les elements inutiles du select()
187
-	// 
188
-	private function calculer_select() {
189
-		if ($select = &$this->command['select']) {
190
-			foreach ($select as $s) {
191
-				// /!\ $s = '.nom'
192
-				if ($s[0] == '.') {
193
-					$s = substr($s, 1);
194
-				}
195
-				$this->select[] = $s;
196
-			}
197
-		}
198
-	}
199
-
200
-	// recuperer la valeur d'une balise #X
201
-	// en fonction des methodes 
202
-	// et proprietes disponibles
203
-	public function get_select($nom) {
204
-		if (is_object($this->iter)
205
-			and method_exists($this->iter, $nom)
206
-		) {
207
-			try {
208
-				return $this->iter->$nom();
209
-			} catch (Exception $e) {
210
-				// #GETCHILDREN sur un fichier de DirectoryIterator ...
211
-				spip_log("Methode $nom en echec sur " . get_class($this->iter));
212
-				spip_log("Cela peut être normal : retour d'une ligne de resultat ne pouvant pas calculer cette methode");
213
-
214
-				return '';
215
-			}
216
-		}
217
-		/*
101
+    private $iter;
102
+
103
+    /**
104
+     * Conditions de filtrage
105
+     * ie criteres de selection
106
+     *
107
+     * @var array
108
+     */
109
+    protected $filtre = array();
110
+
111
+    /**
112
+     * Fonction de filtrage compilee a partir des criteres de filtre
113
+     *
114
+     * @var string
115
+     */
116
+    protected $func_filtre = null;
117
+
118
+    /**
119
+     * Critere {offset, limit}
120
+     *
121
+     * @var int
122
+     * @var int
123
+     */
124
+    protected $offset = null;
125
+    protected $limit = null;
126
+
127
+    /**
128
+     * nombre d'elements recuperes depuis la position 0,
129
+     * en tenant compte des filtres
130
+     *
131
+     * @var int
132
+     */
133
+    protected $fetched = 0;
134
+
135
+    /**
136
+     * Y a t'il une erreur ?
137
+     *
138
+     * @var bool
139
+     **/
140
+    protected $err = false;
141
+
142
+    /**
143
+     * Drapeau a activer en cas d'echec
144
+     * (select SQL errone, non chargement des DATA, etc)
145
+     */
146
+    public function err() {
147
+        if (method_exists($this->iter, 'err')) {
148
+            return $this->iter->err();
149
+        }
150
+        if (property_exists($this->iter, 'err')) {
151
+            return $this->iter->err;
152
+        }
153
+
154
+        return false;
155
+    }
156
+
157
+    public function __construct(Iterator $iter, $command, $info) {
158
+        parent::__construct($iter);
159
+        parent::rewind(); // remettre a la premiere position (bug? connu de FilterIterator)
160
+
161
+        // recuperer l'iterateur transmis
162
+        $this->iter = $this->getInnerIterator();
163
+        $this->command = $command;
164
+        $this->info = $info;
165
+        $this->pos = 0;
166
+        $this->fetched = 0;
167
+
168
+        // chercher la liste des champs a retourner par
169
+        // fetch si l'objet ne les calcule pas tout seul
170
+        if (!method_exists($this->iter, 'fetch')) {
171
+            $this->calculer_select();
172
+            $this->calculer_filtres();
173
+        }
174
+
175
+        // emptyIterator critere {si} faux n'a pas d'erreur !
176
+        if (isset($this->iter->err)) {
177
+            $this->err = $this->iter->err;
178
+        }
179
+
180
+        // pas d'init a priori, le calcul ne sera fait qu'en cas de besoin (provoque une double requete souvent inutile en sqlite)
181
+        //$this->total = $this->count();
182
+    }
183
+
184
+
185
+    // calcule les elements a retournes par fetch()
186
+    // enleve les elements inutiles du select()
187
+    // 
188
+    private function calculer_select() {
189
+        if ($select = &$this->command['select']) {
190
+            foreach ($select as $s) {
191
+                // /!\ $s = '.nom'
192
+                if ($s[0] == '.') {
193
+                    $s = substr($s, 1);
194
+                }
195
+                $this->select[] = $s;
196
+            }
197
+        }
198
+    }
199
+
200
+    // recuperer la valeur d'une balise #X
201
+    // en fonction des methodes 
202
+    // et proprietes disponibles
203
+    public function get_select($nom) {
204
+        if (is_object($this->iter)
205
+            and method_exists($this->iter, $nom)
206
+        ) {
207
+            try {
208
+                return $this->iter->$nom();
209
+            } catch (Exception $e) {
210
+                // #GETCHILDREN sur un fichier de DirectoryIterator ...
211
+                spip_log("Methode $nom en echec sur " . get_class($this->iter));
212
+                spip_log("Cela peut être normal : retour d'une ligne de resultat ne pouvant pas calculer cette methode");
213
+
214
+                return '';
215
+            }
216
+        }
217
+        /*
218 218
 		if (property_exists($this->iter, $nom)) {
219 219
 			return $this->iter->$nom;
220 220
 		}*/
221
-		// cle et valeur par defaut
222
-		// ICI PLANTAGE SI ON NE CONTROLE PAS $nom
223
-		if (in_array($nom, array('cle', 'valeur'))
224
-			and method_exists($this, $nom)
225
-		) {
226
-			return $this->$nom();
227
-		}
228
-
229
-		// Par defaut chercher en xpath dans la valeur()
230
-		return table_valeur($this->valeur(), $nom, null);
231
-	}
232
-
233
-
234
-	private function calculer_filtres() {
235
-
236
-		// Issu de calculer_select() de public/composer L.519
237
-		// TODO: externaliser...
238
-		//
239
-		// retirer les criteres vides:
240
-		// {X ?} avec X absent de l'URL
241
-		// {par #ENV{X}} avec X absent de l'URL
242
-		// IN sur collection vide (ce dernier devrait pouvoir etre fait a la compil)
243
-		if ($where = &$this->command['where']) {
244
-			foreach ($where as $k => $v) {
245
-				if (is_array($v)) {
246
-					if ((count($v) >= 2) && ($v[0] == 'REGEXP') && ($v[2] == "'.*'")) {
247
-						$op = false;
248
-					} elseif ((count($v) >= 2) && ($v[0] == 'LIKE') && ($v[2] == "'%'")) {
249
-						$op = false;
250
-					} else {
251
-						$op = $v[0] ? $v[0] : $v;
252
-					}
253
-				} else {
254
-					$op = $v;
255
-				}
256
-				if ((!$op) or ($op == 1) or ($op == '0=0')) {
257
-					unset($where[$k]);
258
-				}
259
-				// traiter {cle IN a,b} ou {valeur !IN a,b}
260
-				if (preg_match(',^\(([\w/]+)(\s+NOT)?\s+IN\s+(\(.*\))\)$,', $op, $regs)) {
261
-					$this->ajouter_filtre($regs[1], 'IN', $regs[3], $regs[2]);
262
-					unset($op, $where[$k]);
263
-				}
264
-			}
265
-			foreach ($where as $k => $v) {
266
-				// 3 possibilites : count($v) =
267
-				// * 1 : {x y} ; on recoit $v[0] = y
268
-				// * 2 : {x !op y} ; on recoit $v[0] = 'NOT', $v[1] = array() // array du type {x op y}
269
-				// * 3 : {x op y} ; on recoit $v[0] = 'op', $v[1] = x, $v[2] = y
270
-
271
-				// 1 : forcement traite par un critere, on passe
272
-				if (!$v or count($v) == 1) {
273
-					continue;
274
-				}
275
-				if (count($v) == 2 and is_array($v[1])) {
276
-					$this->ajouter_filtre($v[1][1], $v[1][0], $v[1][2], 'NOT');
277
-				}
278
-				if (count($v) == 3) {
279
-					$this->ajouter_filtre($v[1], $v[0], $v[2]);
280
-				}
281
-			}
282
-		}
283
-
284
-		// critere {2,7}
285
-		if (isset($this->command['limit']) and $this->command['limit']) {
286
-			$limit = explode(',', $this->command['limit']);
287
-			$this->offset = $limit[0];
288
-			$this->limit = $limit[1];
289
-		}
290
-
291
-		// Creer la fonction de filtrage sur $this
292
-		if ($this->filtre) {
293
-			$filtres = 'return (' . join(') AND (', $this->filtre) . ');';
294
-			$this->func_filtre = function () use ($filtres) {
295
-				return eval($filtres);
296
-			};
297
-		}
298
-	}
299
-
300
-
301
-	protected function ajouter_filtre($cle, $op, $valeur, $not = false) {
302
-		if (method_exists($this->iter, 'exception_des_criteres')) {
303
-			if (in_array($cle, $this->iter->exception_des_criteres())) {
304
-				return;
305
-			}
306
-		}
307
-		// TODO: analyser le filtre pour refuser ce qu'on ne sait pas traiter ?
308
-		# mais c'est normalement deja opere par calculer_critere_infixe()
309
-		# qui regarde la description 'desc' (en casse reelle d'ailleurs : {isDir=1}
310
-		# ne sera pas vu si l'on a defini desc['field']['isdir'] pour que #ISDIR soit present.
311
-		# il faudrait peut etre definir les 2 champs isDir et isdir... a reflechir...
312
-
313
-		# if (!in_array($cle, array('cle', 'valeur')))
314
-		#	return;
315
-
316
-		$a = '$this->get_select(\'' . $cle . '\')';
317
-
318
-		$filtre = '';
319
-
320
-		if ($op == 'REGEXP') {
321
-			$filtre = 'filtrer("match", ' . $a . ', ' . str_replace('\"', '"', $valeur) . ')';
322
-			$op = '';
323
-		} else {
324
-			if ($op == 'LIKE') {
325
-				$valeur = str_replace(array('\"', '_', '%'), array('"', '.', '.*'), preg_quote($valeur));
326
-				$filtre = 'filtrer("match", ' . $a . ', ' . $valeur . ')';
327
-				$op = '';
328
-			} else {
329
-				if ($op == '=') {
330
-					$op = '==';
331
-				} else {
332
-					if ($op == 'IN') {
333
-						$filtre = 'in_array(' . $a . ', array' . $valeur . ')';
334
-						$op = '';
335
-					} else {
336
-						if (!in_array($op, array('<', '<=', '>', '>='))) {
337
-							spip_log('operateur non reconnu ' . $op); // [todo] mettre une erreur de squelette
338
-							$op = '';
339
-						}
340
-					}
341
-				}
342
-			}
343
-		}
344
-
345
-		if ($op) {
346
-			$filtre = $a . $op . str_replace('\"', '"', $valeur);
347
-		}
348
-
349
-		if ($not) {
350
-			$filtre = "!($filtre)";
351
-		}
352
-
353
-		if ($filtre) {
354
-			$this->filtre[] = $filtre;
355
-		}
356
-	}
357
-
358
-
359
-	public function next() {
360
-		$this->pos++;
361
-		parent::next();
362
-	}
363
-
364
-	/**
365
-	 * revient au depart
366
-	 *
367
-	 * @return void
368
-	 */
369
-	public function rewind() {
370
-		$this->pos = 0;
371
-		$this->fetched = 0;
372
-		parent::rewind();
373
-	}
374
-
375
-
376
-	# Extension SPIP des iterateurs PHP
377
-	/**
378
-	 * type de l'iterateur
379
-	 *
380
-	 * @var string
381
-	 */
382
-	protected $type;
383
-
384
-	/**
385
-	 * parametres de l'iterateur
386
-	 *
387
-	 * @var array
388
-	 */
389
-	protected $command;
390
-
391
-	/**
392
-	 * infos de compilateur
393
-	 *
394
-	 * @var array
395
-	 */
396
-	protected $info;
397
-
398
-	/**
399
-	 * position courante de l'iterateur
400
-	 *
401
-	 * @var int
402
-	 */
403
-	protected $pos = null;
404
-
405
-	/**
406
-	 * nombre total resultats dans l'iterateur
407
-	 *
408
-	 * @var int
409
-	 */
410
-	protected $total = null;
411
-
412
-	/**
413
-	 * nombre maximal de recherche pour $total
414
-	 * si l'iterateur n'implemente pas de fonction specifique
415
-	 */
416
-	protected $max = 100000;
417
-
418
-
419
-	/**
420
-	 * Liste des champs a inserer dans les $row
421
-	 * retournes par ->fetch()
422
-	 */
423
-	protected $select = array();
424
-
425
-
426
-	/**
427
-	 * aller a la position absolue n,
428
-	 * comptee depuis le debut
429
-	 *
430
-	 * @param int $n
431
-	 *   absolute pos
432
-	 * @param string $continue
433
-	 *   param for sql_ api
434
-	 * @return bool
435
-	 *   success or fail if not implemented
436
-	 */
437
-	public function seek($n = 0, $continue = null) {
438
-		if ($this->func_filtre or !method_exists($this->iter, 'seek') or !$this->iter->seek($n)) {
439
-			$this->seek_loop($n);
440
-		}
441
-		$this->pos = $n;
442
-		$this->fetched = $n;
443
-
444
-		return true;
445
-	}
446
-
447
-	/*
221
+        // cle et valeur par defaut
222
+        // ICI PLANTAGE SI ON NE CONTROLE PAS $nom
223
+        if (in_array($nom, array('cle', 'valeur'))
224
+            and method_exists($this, $nom)
225
+        ) {
226
+            return $this->$nom();
227
+        }
228
+
229
+        // Par defaut chercher en xpath dans la valeur()
230
+        return table_valeur($this->valeur(), $nom, null);
231
+    }
232
+
233
+
234
+    private function calculer_filtres() {
235
+
236
+        // Issu de calculer_select() de public/composer L.519
237
+        // TODO: externaliser...
238
+        //
239
+        // retirer les criteres vides:
240
+        // {X ?} avec X absent de l'URL
241
+        // {par #ENV{X}} avec X absent de l'URL
242
+        // IN sur collection vide (ce dernier devrait pouvoir etre fait a la compil)
243
+        if ($where = &$this->command['where']) {
244
+            foreach ($where as $k => $v) {
245
+                if (is_array($v)) {
246
+                    if ((count($v) >= 2) && ($v[0] == 'REGEXP') && ($v[2] == "'.*'")) {
247
+                        $op = false;
248
+                    } elseif ((count($v) >= 2) && ($v[0] == 'LIKE') && ($v[2] == "'%'")) {
249
+                        $op = false;
250
+                    } else {
251
+                        $op = $v[0] ? $v[0] : $v;
252
+                    }
253
+                } else {
254
+                    $op = $v;
255
+                }
256
+                if ((!$op) or ($op == 1) or ($op == '0=0')) {
257
+                    unset($where[$k]);
258
+                }
259
+                // traiter {cle IN a,b} ou {valeur !IN a,b}
260
+                if (preg_match(',^\(([\w/]+)(\s+NOT)?\s+IN\s+(\(.*\))\)$,', $op, $regs)) {
261
+                    $this->ajouter_filtre($regs[1], 'IN', $regs[3], $regs[2]);
262
+                    unset($op, $where[$k]);
263
+                }
264
+            }
265
+            foreach ($where as $k => $v) {
266
+                // 3 possibilites : count($v) =
267
+                // * 1 : {x y} ; on recoit $v[0] = y
268
+                // * 2 : {x !op y} ; on recoit $v[0] = 'NOT', $v[1] = array() // array du type {x op y}
269
+                // * 3 : {x op y} ; on recoit $v[0] = 'op', $v[1] = x, $v[2] = y
270
+
271
+                // 1 : forcement traite par un critere, on passe
272
+                if (!$v or count($v) == 1) {
273
+                    continue;
274
+                }
275
+                if (count($v) == 2 and is_array($v[1])) {
276
+                    $this->ajouter_filtre($v[1][1], $v[1][0], $v[1][2], 'NOT');
277
+                }
278
+                if (count($v) == 3) {
279
+                    $this->ajouter_filtre($v[1], $v[0], $v[2]);
280
+                }
281
+            }
282
+        }
283
+
284
+        // critere {2,7}
285
+        if (isset($this->command['limit']) and $this->command['limit']) {
286
+            $limit = explode(',', $this->command['limit']);
287
+            $this->offset = $limit[0];
288
+            $this->limit = $limit[1];
289
+        }
290
+
291
+        // Creer la fonction de filtrage sur $this
292
+        if ($this->filtre) {
293
+            $filtres = 'return (' . join(') AND (', $this->filtre) . ');';
294
+            $this->func_filtre = function () use ($filtres) {
295
+                return eval($filtres);
296
+            };
297
+        }
298
+    }
299
+
300
+
301
+    protected function ajouter_filtre($cle, $op, $valeur, $not = false) {
302
+        if (method_exists($this->iter, 'exception_des_criteres')) {
303
+            if (in_array($cle, $this->iter->exception_des_criteres())) {
304
+                return;
305
+            }
306
+        }
307
+        // TODO: analyser le filtre pour refuser ce qu'on ne sait pas traiter ?
308
+        # mais c'est normalement deja opere par calculer_critere_infixe()
309
+        # qui regarde la description 'desc' (en casse reelle d'ailleurs : {isDir=1}
310
+        # ne sera pas vu si l'on a defini desc['field']['isdir'] pour que #ISDIR soit present.
311
+        # il faudrait peut etre definir les 2 champs isDir et isdir... a reflechir...
312
+
313
+        # if (!in_array($cle, array('cle', 'valeur')))
314
+        #	return;
315
+
316
+        $a = '$this->get_select(\'' . $cle . '\')';
317
+
318
+        $filtre = '';
319
+
320
+        if ($op == 'REGEXP') {
321
+            $filtre = 'filtrer("match", ' . $a . ', ' . str_replace('\"', '"', $valeur) . ')';
322
+            $op = '';
323
+        } else {
324
+            if ($op == 'LIKE') {
325
+                $valeur = str_replace(array('\"', '_', '%'), array('"', '.', '.*'), preg_quote($valeur));
326
+                $filtre = 'filtrer("match", ' . $a . ', ' . $valeur . ')';
327
+                $op = '';
328
+            } else {
329
+                if ($op == '=') {
330
+                    $op = '==';
331
+                } else {
332
+                    if ($op == 'IN') {
333
+                        $filtre = 'in_array(' . $a . ', array' . $valeur . ')';
334
+                        $op = '';
335
+                    } else {
336
+                        if (!in_array($op, array('<', '<=', '>', '>='))) {
337
+                            spip_log('operateur non reconnu ' . $op); // [todo] mettre une erreur de squelette
338
+                            $op = '';
339
+                        }
340
+                    }
341
+                }
342
+            }
343
+        }
344
+
345
+        if ($op) {
346
+            $filtre = $a . $op . str_replace('\"', '"', $valeur);
347
+        }
348
+
349
+        if ($not) {
350
+            $filtre = "!($filtre)";
351
+        }
352
+
353
+        if ($filtre) {
354
+            $this->filtre[] = $filtre;
355
+        }
356
+    }
357
+
358
+
359
+    public function next() {
360
+        $this->pos++;
361
+        parent::next();
362
+    }
363
+
364
+    /**
365
+     * revient au depart
366
+     *
367
+     * @return void
368
+     */
369
+    public function rewind() {
370
+        $this->pos = 0;
371
+        $this->fetched = 0;
372
+        parent::rewind();
373
+    }
374
+
375
+
376
+    # Extension SPIP des iterateurs PHP
377
+    /**
378
+     * type de l'iterateur
379
+     *
380
+     * @var string
381
+     */
382
+    protected $type;
383
+
384
+    /**
385
+     * parametres de l'iterateur
386
+     *
387
+     * @var array
388
+     */
389
+    protected $command;
390
+
391
+    /**
392
+     * infos de compilateur
393
+     *
394
+     * @var array
395
+     */
396
+    protected $info;
397
+
398
+    /**
399
+     * position courante de l'iterateur
400
+     *
401
+     * @var int
402
+     */
403
+    protected $pos = null;
404
+
405
+    /**
406
+     * nombre total resultats dans l'iterateur
407
+     *
408
+     * @var int
409
+     */
410
+    protected $total = null;
411
+
412
+    /**
413
+     * nombre maximal de recherche pour $total
414
+     * si l'iterateur n'implemente pas de fonction specifique
415
+     */
416
+    protected $max = 100000;
417
+
418
+
419
+    /**
420
+     * Liste des champs a inserer dans les $row
421
+     * retournes par ->fetch()
422
+     */
423
+    protected $select = array();
424
+
425
+
426
+    /**
427
+     * aller a la position absolue n,
428
+     * comptee depuis le debut
429
+     *
430
+     * @param int $n
431
+     *   absolute pos
432
+     * @param string $continue
433
+     *   param for sql_ api
434
+     * @return bool
435
+     *   success or fail if not implemented
436
+     */
437
+    public function seek($n = 0, $continue = null) {
438
+        if ($this->func_filtre or !method_exists($this->iter, 'seek') or !$this->iter->seek($n)) {
439
+            $this->seek_loop($n);
440
+        }
441
+        $this->pos = $n;
442
+        $this->fetched = $n;
443
+
444
+        return true;
445
+    }
446
+
447
+    /*
448 448
 	 * aller a la position $n en parcourant
449 449
 	 * un par un tous les elements
450 450
 	 */
451
-	private function seek_loop($n) {
452
-		if ($this->pos > $n) {
453
-			$this->rewind();
454
-		}
455
-
456
-		while ($this->pos < $n and $this->valid()) {
457
-			$this->next();
458
-		}
459
-
460
-		return true;
461
-	}
462
-
463
-	/**
464
-	 * Avancer de $saut pas
465
-	 *
466
-	 * @param  $saut
467
-	 * @param  $max
468
-	 * @return int
469
-	 */
470
-	public function skip($saut, $max = null) {
471
-		// pas de saut en arriere autorise pour cette fonction
472
-		if (($saut = intval($saut)) <= 0) {
473
-			return $this->pos;
474
-		}
475
-		$seek = $this->pos + $saut;
476
-		// si le saut fait depasser le maxi, on libere la resource
477
-		// et on sort
478
-		if (is_null($max)) {
479
-			$max = $this->count();
480
-		}
481
-
482
-		if ($seek >= $max or $seek >= $this->count()) {
483
-			// sortie plus rapide que de faire next() jusqu'a la fin !
484
-			$this->free();
485
-
486
-			return $max;
487
-		}
488
-
489
-		$this->seek($seek);
490
-
491
-		return $this->pos;
492
-	}
493
-
494
-	/**
495
-	 * Renvoyer un tableau des donnees correspondantes
496
-	 * a la position courante de l'iterateur
497
-	 * en controlant si on respecte le filtre
498
-	 * Appliquer aussi le critere {offset,limit}
499
-	 *
500
-	 * @return array|bool
501
-	 */
502
-	public function fetch() {
503
-		if (method_exists($this->iter, 'fetch')) {
504
-			return $this->iter->fetch();
505
-		} else {
506
-
507
-			while ($this->valid()
508
-				and (
509
-					!$this->accept()
510
-					or (isset($this->offset) and $this->fetched++ < $this->offset)
511
-				)) {
512
-				$this->next();
513
-			}
514
-
515
-			if (!$this->valid()) {
516
-				return false;
517
-			}
518
-
519
-			if (isset($this->limit)
520
-				and $this->fetched > $this->offset + $this->limit
521
-			) {
522
-				return false;
523
-			}
524
-
525
-			$r = array();
526
-			foreach ($this->select as $nom) {
527
-				$r[$nom] = $this->get_select($nom);
528
-			}
529
-			$this->next();
530
-
531
-			return $r;
532
-		}
533
-	}
534
-
535
-	// retourner la cle pour #CLE
536
-	public function cle() {
537
-		return $this->key();
538
-	}
539
-
540
-	// retourner la valeur pour #VALEUR
541
-	public function valeur() {
542
-		return $this->current();
543
-	}
544
-
545
-	/**
546
-	 * Accepte-t-on l'entree courante lue ?
547
-	 * On execute les filtres pour le savoir.
548
-	 **/
549
-	public function accept() {
550
-		if ($f = $this->func_filtre) {
551
-			return $f();
552
-		}
553
-
554
-		return true;
555
-	}
556
-
557
-	/**
558
-	 * liberer la ressource
559
-	 *
560
-	 * @return bool
561
-	 */
562
-	public function free() {
563
-		if (method_exists($this->iter, 'free')) {
564
-			$this->iter->free();
565
-		}
566
-		$this->pos = $this->total = 0;
567
-
568
-		return true;
569
-	}
570
-
571
-	/**
572
-	 * Compter le nombre total de resultats
573
-	 * pour #TOTAL_BOUCLE
574
-	 *
575
-	 * @return int
576
-	 */
577
-	public function count() {
578
-		if (is_null($this->total)) {
579
-			if (method_exists($this->iter, 'count')
580
-				and !$this->func_filtre
581
-			) {
582
-				return $this->total = $this->iter->count();
583
-			} else {
584
-				// compter les lignes et rembobiner
585
-				$total = 0;
586
-				$pos = $this->pos; // sauver la position
587
-				$this->rewind();
588
-				while ($this->fetch() and $total < $this->max) {
589
-					$total++;
590
-				}
591
-				$this->seek($pos);
592
-				$this->total = $total;
593
-			}
594
-		}
595
-
596
-		return $this->total;
597
-	}
451
+    private function seek_loop($n) {
452
+        if ($this->pos > $n) {
453
+            $this->rewind();
454
+        }
455
+
456
+        while ($this->pos < $n and $this->valid()) {
457
+            $this->next();
458
+        }
459
+
460
+        return true;
461
+    }
462
+
463
+    /**
464
+     * Avancer de $saut pas
465
+     *
466
+     * @param  $saut
467
+     * @param  $max
468
+     * @return int
469
+     */
470
+    public function skip($saut, $max = null) {
471
+        // pas de saut en arriere autorise pour cette fonction
472
+        if (($saut = intval($saut)) <= 0) {
473
+            return $this->pos;
474
+        }
475
+        $seek = $this->pos + $saut;
476
+        // si le saut fait depasser le maxi, on libere la resource
477
+        // et on sort
478
+        if (is_null($max)) {
479
+            $max = $this->count();
480
+        }
481
+
482
+        if ($seek >= $max or $seek >= $this->count()) {
483
+            // sortie plus rapide que de faire next() jusqu'a la fin !
484
+            $this->free();
485
+
486
+            return $max;
487
+        }
488
+
489
+        $this->seek($seek);
490
+
491
+        return $this->pos;
492
+    }
493
+
494
+    /**
495
+     * Renvoyer un tableau des donnees correspondantes
496
+     * a la position courante de l'iterateur
497
+     * en controlant si on respecte le filtre
498
+     * Appliquer aussi le critere {offset,limit}
499
+     *
500
+     * @return array|bool
501
+     */
502
+    public function fetch() {
503
+        if (method_exists($this->iter, 'fetch')) {
504
+            return $this->iter->fetch();
505
+        } else {
506
+
507
+            while ($this->valid()
508
+                and (
509
+                    !$this->accept()
510
+                    or (isset($this->offset) and $this->fetched++ < $this->offset)
511
+                )) {
512
+                $this->next();
513
+            }
514
+
515
+            if (!$this->valid()) {
516
+                return false;
517
+            }
518
+
519
+            if (isset($this->limit)
520
+                and $this->fetched > $this->offset + $this->limit
521
+            ) {
522
+                return false;
523
+            }
524
+
525
+            $r = array();
526
+            foreach ($this->select as $nom) {
527
+                $r[$nom] = $this->get_select($nom);
528
+            }
529
+            $this->next();
530
+
531
+            return $r;
532
+        }
533
+    }
534
+
535
+    // retourner la cle pour #CLE
536
+    public function cle() {
537
+        return $this->key();
538
+    }
539
+
540
+    // retourner la valeur pour #VALEUR
541
+    public function valeur() {
542
+        return $this->current();
543
+    }
544
+
545
+    /**
546
+     * Accepte-t-on l'entree courante lue ?
547
+     * On execute les filtres pour le savoir.
548
+     **/
549
+    public function accept() {
550
+        if ($f = $this->func_filtre) {
551
+            return $f();
552
+        }
553
+
554
+        return true;
555
+    }
556
+
557
+    /**
558
+     * liberer la ressource
559
+     *
560
+     * @return bool
561
+     */
562
+    public function free() {
563
+        if (method_exists($this->iter, 'free')) {
564
+            $this->iter->free();
565
+        }
566
+        $this->pos = $this->total = 0;
567
+
568
+        return true;
569
+    }
570
+
571
+    /**
572
+     * Compter le nombre total de resultats
573
+     * pour #TOTAL_BOUCLE
574
+     *
575
+     * @return int
576
+     */
577
+    public function count() {
578
+        if (is_null($this->total)) {
579
+            if (method_exists($this->iter, 'count')
580
+                and !$this->func_filtre
581
+            ) {
582
+                return $this->total = $this->iter->count();
583
+            } else {
584
+                // compter les lignes et rembobiner
585
+                $total = 0;
586
+                $pos = $this->pos; // sauver la position
587
+                $this->rewind();
588
+                while ($this->fetch() and $total < $this->max) {
589
+                    $total++;
590
+                }
591
+                $this->seek($pos);
592
+                $this->total = $total;
593
+            }
594
+        }
595
+
596
+        return $this->total;
597
+    }
598 598
 
599 599
 }
Please login to merge, or discard this patch.
prive/ajax_item_pick_fonctions.php 1 patch
Indentation   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -1,7 +1,7 @@
 block discarded – undo
1 1
 <?php
2 2
 
3 3
 if (!defined('_ECRIRE_INC_VERSION')) {
4
-	return;
4
+    return;
5 5
 }
6 6
 
7 7
 include_spip('inc/filtres_selecteur_generique');
Please login to merge, or discard this patch.
ecrire/inc/filtres_selecteur_generique.php 1 patch
Indentation   +144 added lines, -144 removed lines patch added patch discarded remove patch
@@ -7,7 +7,7 @@  discard block
 block discarded – undo
7 7
  **/
8 8
 
9 9
 if (!defined('_ECRIRE_INC_VERSION')) {
10
-	return;
10
+    return;
11 11
 }
12 12
 
13 13
 /**
@@ -28,51 +28,51 @@  discard block
 block discarded – undo
28 28
  *     - afficher : tableau des objets à afficher (mais pas forcément sélectionnables)
29 29
  */
30 30
 function selecteur_lister_objets($whitelist = array(), $blacklist = array()) {
31
-	static $liste_selecteurs, $liste_parents;
32
-
33
-	if (!$liste_selecteurs) {
34
-		$liste_selecteurs = find_all_in_path('formulaires/selecteur/', 'hierarchie-[\w]+[.]html$');
35
-	}
36
-	$objets_selectionner = array();
37
-	foreach ($liste_selecteurs as $fichier => $chemin) {
38
-		$objets_selectionner[] = preg_replace('/^hierarchie-([\w]+)[.]html$/', '$1', $fichier);
39
-	}
40
-
41
-	// S'il y a une whitelist on ne garde que ce qui est dedans
42
-	if (!empty($whitelist)) {
43
-		$whitelist = array_map('table_objet', $whitelist);
44
-		$objets_selectionner = array_intersect($objets_selectionner, $whitelist);
45
-	}
46
-	// On supprime ce qui est dans la blacklist
47
-	$blacklist = array_map('table_objet', $blacklist);
48
-	// On enlève toujours la racine
49
-	$blacklist[] = 'racine';
50
-	$objets_selectionner = array_diff($objets_selectionner, $blacklist);
51
-
52
-	// Ensuite on cherche ce qu'on doit afficher : au moins ceux qu'on peut sélectionner
53
-	$objets_afficher = $objets_selectionner;
54
-
55
-	// Il faut alors chercher d'éventuels parents obligatoires en plus :
56
-	// lister-trucs-bidules.html => on doit afficher des "trucs" pour trouver des "bidules"
57
-	if (!$liste_parents) {
58
-		$liste_parents = find_all_in_path('formulaires/selecteur/', 'lister-[\w]+-[\w]+[.]html$');
59
-	}
60
-	foreach ($liste_parents as $fichier => $chemin) {
61
-		preg_match('/^lister-([\w]+)-([\w]+)[.]html$/', $fichier, $captures);
62
-		$parent = $captures[1];
63
-		$type = $captures[2];
64
-		// Si le type fait partie de ce qu'on doit afficher alors on ajoute aussi le parent à l'affichage
65
-		if (in_array($type, $objets_afficher)) {
66
-			$objets_afficher[] = $parent;
67
-		}
68
-	}
69
-
70
-	$objets = array(
71
-		'selectionner' => array_unique($objets_selectionner),
72
-		'afficher' => array_unique($objets_afficher),
73
-	);
74
-
75
-	return $objets;
31
+    static $liste_selecteurs, $liste_parents;
32
+
33
+    if (!$liste_selecteurs) {
34
+        $liste_selecteurs = find_all_in_path('formulaires/selecteur/', 'hierarchie-[\w]+[.]html$');
35
+    }
36
+    $objets_selectionner = array();
37
+    foreach ($liste_selecteurs as $fichier => $chemin) {
38
+        $objets_selectionner[] = preg_replace('/^hierarchie-([\w]+)[.]html$/', '$1', $fichier);
39
+    }
40
+
41
+    // S'il y a une whitelist on ne garde que ce qui est dedans
42
+    if (!empty($whitelist)) {
43
+        $whitelist = array_map('table_objet', $whitelist);
44
+        $objets_selectionner = array_intersect($objets_selectionner, $whitelist);
45
+    }
46
+    // On supprime ce qui est dans la blacklist
47
+    $blacklist = array_map('table_objet', $blacklist);
48
+    // On enlève toujours la racine
49
+    $blacklist[] = 'racine';
50
+    $objets_selectionner = array_diff($objets_selectionner, $blacklist);
51
+
52
+    // Ensuite on cherche ce qu'on doit afficher : au moins ceux qu'on peut sélectionner
53
+    $objets_afficher = $objets_selectionner;
54
+
55
+    // Il faut alors chercher d'éventuels parents obligatoires en plus :
56
+    // lister-trucs-bidules.html => on doit afficher des "trucs" pour trouver des "bidules"
57
+    if (!$liste_parents) {
58
+        $liste_parents = find_all_in_path('formulaires/selecteur/', 'lister-[\w]+-[\w]+[.]html$');
59
+    }
60
+    foreach ($liste_parents as $fichier => $chemin) {
61
+        preg_match('/^lister-([\w]+)-([\w]+)[.]html$/', $fichier, $captures);
62
+        $parent = $captures[1];
63
+        $type = $captures[2];
64
+        // Si le type fait partie de ce qu'on doit afficher alors on ajoute aussi le parent à l'affichage
65
+        if (in_array($type, $objets_afficher)) {
66
+            $objets_afficher[] = $parent;
67
+        }
68
+    }
69
+
70
+    $objets = array(
71
+        'selectionner' => array_unique($objets_selectionner),
72
+        'afficher' => array_unique($objets_afficher),
73
+    );
74
+
75
+    return $objets;
76 76
 }
77 77
 
78 78
 /**
@@ -99,31 +99,31 @@  discard block
 block discarded – undo
99 99
  *     liste des couples (objets => id_objet) ou liste des identifiants d'un type d'objet.
100 100
  **/
101 101
 function picker_selected($selected, $type = '') {
102
-	$select = array();
103
-	$type = preg_replace(',\W,', '', $type);
104
-
105
-	if ($selected and !is_array($selected)) {
106
-		$selected = explode(',', $selected);
107
-	}
108
-
109
-	if (is_array($selected)) {
110
-		foreach ($selected as $value) {
111
-			// Si c'est le bon format déjà
112
-			if (preg_match('/^([\w]+)[|]([0-9]+)$/', $value, $captures)) {
113
-				$objet = $captures[1];
114
-				$id_objet = intval($captures[2]);
115
-
116
-				// Si on cherche un type et que c'est le bon, on renvoit un tableau que d'identifiants
117
-				if (is_string($type) and $type == $objet and ($id_objet or in_array($objet, array('racine', 'rubrique')))) {
118
-					$select[] = $id_objet;
119
-				} elseif (!$type and ($id_objet or in_array($objet, array('racine', 'rubrique')))) {
120
-					$select[] = array('objet' => $objet, 'id_objet' => $id_objet);
121
-				}
122
-			}
123
-		}
124
-	}
125
-
126
-	return $select;
102
+    $select = array();
103
+    $type = preg_replace(',\W,', '', $type);
104
+
105
+    if ($selected and !is_array($selected)) {
106
+        $selected = explode(',', $selected);
107
+    }
108
+
109
+    if (is_array($selected)) {
110
+        foreach ($selected as $value) {
111
+            // Si c'est le bon format déjà
112
+            if (preg_match('/^([\w]+)[|]([0-9]+)$/', $value, $captures)) {
113
+                $objet = $captures[1];
114
+                $id_objet = intval($captures[2]);
115
+
116
+                // Si on cherche un type et que c'est le bon, on renvoit un tableau que d'identifiants
117
+                if (is_string($type) and $type == $objet and ($id_objet or in_array($objet, array('racine', 'rubrique')))) {
118
+                    $select[] = $id_objet;
119
+                } elseif (!$type and ($id_objet or in_array($objet, array('racine', 'rubrique')))) {
120
+                    $select[] = array('objet' => $objet, 'id_objet' => $id_objet);
121
+                }
122
+            }
123
+        }
124
+    }
125
+
126
+    return $select;
127 127
 }
128 128
 
129 129
 /**
@@ -140,49 +140,49 @@  discard block
 block discarded – undo
140 140
  *     Booléen indiquant si les articles sont sélectionnables
141 141
  */
142 142
 function picker_identifie_id_rapide($ref, $rubriques_ou_objets = false, $articles = false) {
143
-	include_spip('inc/json');
144
-	include_spip('inc/lien');
145
-
146
-	// On construit un tableau des objets sélectionnables suivant les paramètres
147
-	$objets = array();
148
-	if ($rubriques_ou_objets and is_array($rubriques_ou_objets)) {
149
-		$objets = $rubriques_ou_objets;
150
-	} else {
151
-		if ($rubriques_ou_objets) {
152
-			$objets[] = 'rubriques';
153
-		}
154
-		if ($articles) {
155
-			$objets[] = 'articles';
156
-		}
157
-	}
158
-
159
-	// si id numerique et un seul objet possible, pas d'ambiguite
160
-	if (is_numeric($ref) and count($objets) === 1) {
161
-		$ref = reset($objets) . $ref;
162
-	}
163
-
164
-	// Si la référence ne correspond à rien, c'est fini
165
-	if (!($match = typer_raccourci($ref))) {
166
-		return json_export(false);
167
-	}
168
-	// Sinon on récupère les infos utiles
169
-	@list($type, , $id, , , , ) = $match;
170
-
171
-	// On regarde si le type trouvé fait partie des objets sélectionnables
172
-	if (!in_array(table_objet($type), $objets)) {
173
-		return json_export(false);
174
-	}
175
-
176
-	// Maintenant que tout est bon, on cherche les informations sur cet objet
177
-	include_spip('inc/filtres');
178
-	if (!$titre = generer_info_entite($id, $type, 'titre')) {
179
-		return json_export(false);
180
-	}
181
-
182
-	// On simplifie le texte
183
-	$titre = attribut_html($titre);
184
-
185
-	return json_export(array('type' => $type, 'id' => "$type|$id", 'titre' => $titre));
143
+    include_spip('inc/json');
144
+    include_spip('inc/lien');
145
+
146
+    // On construit un tableau des objets sélectionnables suivant les paramètres
147
+    $objets = array();
148
+    if ($rubriques_ou_objets and is_array($rubriques_ou_objets)) {
149
+        $objets = $rubriques_ou_objets;
150
+    } else {
151
+        if ($rubriques_ou_objets) {
152
+            $objets[] = 'rubriques';
153
+        }
154
+        if ($articles) {
155
+            $objets[] = 'articles';
156
+        }
157
+    }
158
+
159
+    // si id numerique et un seul objet possible, pas d'ambiguite
160
+    if (is_numeric($ref) and count($objets) === 1) {
161
+        $ref = reset($objets) . $ref;
162
+    }
163
+
164
+    // Si la référence ne correspond à rien, c'est fini
165
+    if (!($match = typer_raccourci($ref))) {
166
+        return json_export(false);
167
+    }
168
+    // Sinon on récupère les infos utiles
169
+    @list($type, , $id, , , , ) = $match;
170
+
171
+    // On regarde si le type trouvé fait partie des objets sélectionnables
172
+    if (!in_array(table_objet($type), $objets)) {
173
+        return json_export(false);
174
+    }
175
+
176
+    // Maintenant que tout est bon, on cherche les informations sur cet objet
177
+    include_spip('inc/filtres');
178
+    if (!$titre = generer_info_entite($id, $type, 'titre')) {
179
+        return json_export(false);
180
+    }
181
+
182
+    // On simplifie le texte
183
+    $titre = attribut_html($titre);
184
+
185
+    return json_export(array('type' => $type, 'id' => "$type|$id", 'titre' => $titre));
186 186
 }
187 187
 
188 188
 /**
@@ -205,34 +205,34 @@  discard block
 block discarded – undo
205 205
  *     Comme le filtre `oui` : espace (` `) si rubrique à afficher, chaîne vide sinon.
206 206
  */
207 207
 function test_enfants_rubrique($id_rubrique, $types = array()) {
208
-	static $has_child = array();
209
-
210
-	if (!isset($has_child[$id_rubrique])) {
211
-		$types = (is_array($types) ? array_filter($types) : array());
212
-
213
-		// recuperer tous les freres et soeurs de la rubrique visee
214
-		$id_parent = sql_getfetsel('id_parent', 'spip_rubriques', 'id_rubrique=' . intval($id_rubrique));
215
-		$fratrie = sql_allfetsel('id_rubrique', 'spip_rubriques', 'id_parent=' . intval($id_parent));
216
-		$fratrie = array_column($fratrie, 'id_rubrique');
217
-		$has = sql_allfetsel('DISTINCT id_parent', 'spip_rubriques', sql_in('id_parent', $fratrie));
218
-		$has = array_column($has, 'id_parent');
219
-		$fratrie = array_diff($fratrie, $has);
220
-
221
-		while (count($fratrie) and is_array($types) and count($types)) {
222
-			$type = array_shift($types);
223
-			$h = sql_allfetsel('DISTINCT id_rubrique', table_objet_sql($type), sql_in('id_rubrique', $fratrie));
224
-			$h = array_column($h, 'id_rubrique');
225
-			$has = array_merge($has, $h);
226
-			$fratrie = array_diff($fratrie, $h);
227
-		}
228
-
229
-		if (count($has)) {
230
-			$has_child = $has_child + array_combine($has, array_pad(array(), count($has), true));
231
-		}
232
-		if (count($fratrie)) {
233
-			$has_child = $has_child + array_combine($fratrie, array_pad(array(), count($fratrie), false));
234
-		}
235
-	}
236
-
237
-	return $has_child[$id_rubrique] ? ' ' : '';
208
+    static $has_child = array();
209
+
210
+    if (!isset($has_child[$id_rubrique])) {
211
+        $types = (is_array($types) ? array_filter($types) : array());
212
+
213
+        // recuperer tous les freres et soeurs de la rubrique visee
214
+        $id_parent = sql_getfetsel('id_parent', 'spip_rubriques', 'id_rubrique=' . intval($id_rubrique));
215
+        $fratrie = sql_allfetsel('id_rubrique', 'spip_rubriques', 'id_parent=' . intval($id_parent));
216
+        $fratrie = array_column($fratrie, 'id_rubrique');
217
+        $has = sql_allfetsel('DISTINCT id_parent', 'spip_rubriques', sql_in('id_parent', $fratrie));
218
+        $has = array_column($has, 'id_parent');
219
+        $fratrie = array_diff($fratrie, $has);
220
+
221
+        while (count($fratrie) and is_array($types) and count($types)) {
222
+            $type = array_shift($types);
223
+            $h = sql_allfetsel('DISTINCT id_rubrique', table_objet_sql($type), sql_in('id_rubrique', $fratrie));
224
+            $h = array_column($h, 'id_rubrique');
225
+            $has = array_merge($has, $h);
226
+            $fratrie = array_diff($fratrie, $h);
227
+        }
228
+
229
+        if (count($has)) {
230
+            $has_child = $has_child + array_combine($has, array_pad(array(), count($has), true));
231
+        }
232
+        if (count($fratrie)) {
233
+            $has_child = $has_child + array_combine($fratrie, array_pad(array(), count($fratrie), false));
234
+        }
235
+    }
236
+
237
+    return $has_child[$id_rubrique] ? ' ' : '';
238 238
 }
Please login to merge, or discard this patch.
ecrire/inc/lang.php 1 patch
Indentation   +247 added lines, -247 removed lines patch added patch discarded remove patch
@@ -16,7 +16,7 @@  discard block
 block discarded – undo
16 16
  * @package SPIP\Core\Langue
17 17
  **/
18 18
 if (!defined('_ECRIRE_INC_VERSION')) {
19
-	return;
19
+    return;
20 20
 }
21 21
 
22 22
 
@@ -39,36 +39,36 @@  discard block
 block discarded – undo
39 39
  **/
40 40
 function changer_langue($lang, $liste_langues=null) {
41 41
 
42
-	if (is_null($liste_langues)) {
43
-		$liste_langues = @$GLOBALS['meta']['langues_proposees'] . ',' . @$GLOBALS['meta']['langues_multilingue'];
44
-	}
45
-	else {
46
-		if (is_array($liste_langues)) {
47
-			$liste_langues = implode(',', $liste_langues);
48
-		}
49
-	}
50
-	$liste_langues = ',' . $liste_langues . ',';
51
-
52
-	// Si la langue demandee n'existe pas, on essaie d'autres variantes
53
-	// Exemple : 'pt-br' => 'pt_br' => 'pt'
54
-	$lang = str_replace('-', '_', trim($lang));
55
-	if (!$lang) {
56
-		return false;
57
-	}
58
-
59
-	if (strpos($liste_langues, ",$lang,") !== false
60
-		or ($lang = preg_replace(',_.*,', '', $lang)
61
-			and strpos($liste_langues, ",$lang,") !== false)
62
-	) {
63
-
64
-		$GLOBALS['spip_lang_rtl'] = lang_dir($lang, '', '_rtl');
65
-		$GLOBALS['spip_lang_right'] = $GLOBALS['spip_lang_rtl'] ? 'left' : 'right';
66
-		$GLOBALS['spip_lang_left'] = $GLOBALS['spip_lang_rtl'] ? 'right' : 'left';
67
-
68
-		return $GLOBALS['spip_lang'] = $lang;
69
-	} else {
70
-		return false;
71
-	}
42
+    if (is_null($liste_langues)) {
43
+        $liste_langues = @$GLOBALS['meta']['langues_proposees'] . ',' . @$GLOBALS['meta']['langues_multilingue'];
44
+    }
45
+    else {
46
+        if (is_array($liste_langues)) {
47
+            $liste_langues = implode(',', $liste_langues);
48
+        }
49
+    }
50
+    $liste_langues = ',' . $liste_langues . ',';
51
+
52
+    // Si la langue demandee n'existe pas, on essaie d'autres variantes
53
+    // Exemple : 'pt-br' => 'pt_br' => 'pt'
54
+    $lang = str_replace('-', '_', trim($lang));
55
+    if (!$lang) {
56
+        return false;
57
+    }
58
+
59
+    if (strpos($liste_langues, ",$lang,") !== false
60
+        or ($lang = preg_replace(',_.*,', '', $lang)
61
+            and strpos($liste_langues, ",$lang,") !== false)
62
+    ) {
63
+
64
+        $GLOBALS['spip_lang_rtl'] = lang_dir($lang, '', '_rtl');
65
+        $GLOBALS['spip_lang_right'] = $GLOBALS['spip_lang_rtl'] ? 'left' : 'right';
66
+        $GLOBALS['spip_lang_left'] = $GLOBALS['spip_lang_rtl'] ? 'right' : 'left';
67
+
68
+        return $GLOBALS['spip_lang'] = $lang;
69
+    } else {
70
+        return false;
71
+    }
72 72
 }
73 73
 
74 74
 //
@@ -81,9 +81,9 @@  discard block
 block discarded – undo
81 81
 // par exemple le francais pour l'espagnol, l'anglais pour l'allemand, etc.
82 82
 
83 83
 function choisir_traduction($trads, $lang = '') {
84
-	$k = approcher_langue($trads, $lang);
84
+    $k = approcher_langue($trads, $lang);
85 85
 
86
-	return $k ? $trads[$k] : array_shift($trads);
86
+    return $k ? $trads[$k] : array_shift($trads);
87 87
 }
88 88
 
89 89
 // retourne son 2e argument si c'est un index du premier
@@ -91,21 +91,21 @@  discard block
 block discarded – undo
91 91
 // la langue X etant consideree comme une approche de X_Y
92 92
 function approcher_langue($trads, $lang = '') {
93 93
 
94
-	if (!$lang) {
95
-		$lang = $GLOBALS['spip_lang'];
96
-	}
97
-
98
-	if (isset($trads[$lang])) {
99
-		return $lang;
100
-	} // cas des langues xx_yy
101
-	else {
102
-		$r = explode('_', $lang);
103
-		if (isset($trads[$r[0]])) {
104
-			return $r[0];
105
-		}
106
-	}
107
-
108
-	return '';
94
+    if (!$lang) {
95
+        $lang = $GLOBALS['spip_lang'];
96
+    }
97
+
98
+    if (isset($trads[$lang])) {
99
+        return $lang;
100
+    } // cas des langues xx_yy
101
+    else {
102
+        $r = explode('_', $lang);
103
+        if (isset($trads[$r[0]])) {
104
+            return $r[0];
105
+        }
106
+    }
107
+
108
+    return '';
109 109
 }
110 110
 
111 111
 /**
@@ -120,10 +120,10 @@  discard block
 block discarded – undo
120 120
  *     Nom de la langue, sinon son code.
121 121
  **/
122 122
 function traduire_nom_langue($lang) {
123
-	include_spip('inc/lang_liste');
124
-	include_spip('inc/charsets');
123
+    include_spip('inc/lang_liste');
124
+    include_spip('inc/charsets');
125 125
 
126
-	return html2unicode(isset($GLOBALS['codes_langues'][$lang]) ? $GLOBALS['codes_langues'][$lang] : $lang);
126
+    return html2unicode(isset($GLOBALS['codes_langues'][$lang]) ? $GLOBALS['codes_langues'][$lang] : $lang);
127 127
 }
128 128
 
129 129
 //
@@ -137,10 +137,10 @@  discard block
 block discarded – undo
137 137
 // C'est utilise par #LANG_DIR, #LANG_LEFT, #LANG_RIGHT.
138 138
 // https://code.spip.net/@lang_dir
139 139
 function lang_dir($lang = '', $droitier = 'ltr', $gaucher = 'rtl') {
140
-	static $lang_rtl = array('ar', 'fa', 'ku', 'prs', 'ps', 'ur', 'he', 'heb', 'hbo', 'yi');
140
+    static $lang_rtl = array('ar', 'fa', 'ku', 'prs', 'ps', 'ur', 'he', 'heb', 'hbo', 'yi');
141 141
 
142
-	return in_array(($lang ? $lang : $GLOBALS['spip_lang']), $lang_rtl) ?
143
-		$gaucher : $droitier;
142
+    return in_array(($lang ? $lang : $GLOBALS['spip_lang']), $lang_rtl) ?
143
+        $gaucher : $droitier;
144 144
 }
145 145
 
146 146
 // typo francaise ou anglaise ?
@@ -150,31 +150,31 @@  discard block
 block discarded – undo
150 150
 
151 151
 // https://code.spip.net/@lang_typo
152 152
 function lang_typo($lang = '') {
153
-	if (!$lang) {
154
-		$lang = isset($GLOBALS['lang_objet'])
155
-			? $GLOBALS['lang_objet']
156
-			: $GLOBALS['spip_lang'];
157
-	}
158
-	if ($lang == 'eo'
159
-		or $lang == 'fr'
160
-		or strncmp($lang, 'fr_', 3) == 0
161
-		or $lang == 'cpf'
162
-	) {
163
-		return 'fr';
164
-	} else {
165
-		return 'en';
166
-	}
153
+    if (!$lang) {
154
+        $lang = isset($GLOBALS['lang_objet'])
155
+            ? $GLOBALS['lang_objet']
156
+            : $GLOBALS['spip_lang'];
157
+    }
158
+    if ($lang == 'eo'
159
+        or $lang == 'fr'
160
+        or strncmp($lang, 'fr_', 3) == 0
161
+        or $lang == 'cpf'
162
+    ) {
163
+        return 'fr';
164
+    } else {
165
+        return 'en';
166
+    }
167 167
 }
168 168
 
169 169
 // gestion de la globale $lang_objet pour que les textes soient affiches
170 170
 // avec les memes typo et direction dans l'espace prive que dans le public
171 171
 // https://code.spip.net/@changer_typo
172 172
 function changer_typo($lang = '') {
173
-	if ($lang) {
174
-		$GLOBALS['lang_objet'] = $lang;
175
-	} else {
176
-		unset($GLOBALS['lang_objet']);
177
-	}
173
+    if ($lang) {
174
+        $GLOBALS['lang_objet'] = $lang;
175
+    } else {
176
+        unset($GLOBALS['lang_objet']);
177
+    }
178 178
 }
179 179
 
180 180
 //
@@ -185,55 +185,55 @@  discard block
 block discarded – undo
185 185
 // 
186 186
 // https://code.spip.net/@menu_langues
187 187
 function menu_langues($nom_select, $default = '') {
188
-	include_spip('inc/actions');
189
-
190
-	$langues = liste_options_langues($nom_select);
191
-	$ret = "";
192
-	if (!count($langues)) {
193
-		return '';
194
-	}
195
-
196
-	if (!$default) {
197
-		$default = $GLOBALS['spip_lang'];
198
-	}
199
-	foreach ($langues as $l) {
200
-		$selected = ($l == $default) ? ' selected=\'selected\'' : '';
201
-		$ret .= "<option value='$l'$selected>[" . $l . "] " . traduire_nom_langue($l) . "</option>\n";
202
-	}
203
-
204
-	if (!test_espace_prive()) {
205
-		$cible = self();
206
-		$base = '';
207
-	} else {
208
-		$cible = self();
209
-		$base = spip_connect() ? 'base' : '';
210
-	}
211
-
212
-	$change = ' onchange="this.parentNode.parentNode.submit()"';
213
-
214
-	return generer_action_auteur('converser', $base, $cible,
215
-		(select_langues($nom_select, $change, $ret)
216
-			. "<noscript><div style='display:inline'><input type='submit' class='fondo' value='" . _T('bouton_changer') . "' /></div></noscript>"),
217
-		" method='post'");
188
+    include_spip('inc/actions');
189
+
190
+    $langues = liste_options_langues($nom_select);
191
+    $ret = "";
192
+    if (!count($langues)) {
193
+        return '';
194
+    }
195
+
196
+    if (!$default) {
197
+        $default = $GLOBALS['spip_lang'];
198
+    }
199
+    foreach ($langues as $l) {
200
+        $selected = ($l == $default) ? ' selected=\'selected\'' : '';
201
+        $ret .= "<option value='$l'$selected>[" . $l . "] " . traduire_nom_langue($l) . "</option>\n";
202
+    }
203
+
204
+    if (!test_espace_prive()) {
205
+        $cible = self();
206
+        $base = '';
207
+    } else {
208
+        $cible = self();
209
+        $base = spip_connect() ? 'base' : '';
210
+    }
211
+
212
+    $change = ' onchange="this.parentNode.parentNode.submit()"';
213
+
214
+    return generer_action_auteur('converser', $base, $cible,
215
+        (select_langues($nom_select, $change, $ret)
216
+            . "<noscript><div style='display:inline'><input type='submit' class='fondo' value='" . _T('bouton_changer') . "' /></div></noscript>"),
217
+        " method='post'");
218 218
 }
219 219
 
220 220
 // https://code.spip.net/@select_langues
221 221
 function select_langues($nom_select, $change, $options, $label = "") {
222
-	static $cpt = 0;
223
-	$id = "menu_langues" . $cpt++;
224
-
225
-	return
226
-		"<label for='$id'>" . ($label ? $label : _T('info_langues')) . "</label> " .
227
-		"<select name='$nom_select' id='$id' "
228
-		. ((!test_espace_prive()) ?
229
-			("class='forml menu_langues'") :
230
-			(($nom_select == 'var_lang_ecrire') ?
231
-				("class='lang_ecrire'") :
232
-				"class='fondl'"))
233
-		. $change
234
-		. ">\n"
235
-		. $options
236
-		. "</select>";
222
+    static $cpt = 0;
223
+    $id = "menu_langues" . $cpt++;
224
+
225
+    return
226
+        "<label for='$id'>" . ($label ? $label : _T('info_langues')) . "</label> " .
227
+        "<select name='$nom_select' id='$id' "
228
+        . ((!test_espace_prive()) ?
229
+            ("class='forml menu_langues'") :
230
+            (($nom_select == 'var_lang_ecrire') ?
231
+                ("class='lang_ecrire'") :
232
+                "class='fondl'"))
233
+        . $change
234
+        . ">\n"
235
+        . $options
236
+        . "</select>";
237 237
 }
238 238
 
239 239
 /**
@@ -255,34 +255,34 @@  discard block
 block discarded – undo
255 255
  */
256 256
 function liste_options_langues($nom_select) {
257 257
 
258
-	switch ($nom_select) {
259
-		# #MENU_LANG
260
-		case 'var_lang':
261
-			# menu de changement de la langue d'un article
262
-			# les langues selectionnees dans la configuration "multilinguisme"
263
-		case 'changer_lang':
264
-			$langues = explode(',', $GLOBALS['meta']['langues_multilingue']);
265
-			break;
266
-		# menu de l'interface (privee, installation et panneau de login)
267
-		# les langues presentes sous forme de fichiers de langue
268
-		# on force la relecture du repertoire des langues pour etre synchrone.
269
-		case 'var_lang_ecrire':
270
-		default:
271
-			$GLOBALS['meta']['langues_proposees'] = '';
272
-			init_langues();
273
-			$langues = explode(',', $GLOBALS['meta']['langues_proposees']);
274
-			break;
258
+    switch ($nom_select) {
259
+        # #MENU_LANG
260
+        case 'var_lang':
261
+            # menu de changement de la langue d'un article
262
+            # les langues selectionnees dans la configuration "multilinguisme"
263
+        case 'changer_lang':
264
+            $langues = explode(',', $GLOBALS['meta']['langues_multilingue']);
265
+            break;
266
+        # menu de l'interface (privee, installation et panneau de login)
267
+        # les langues presentes sous forme de fichiers de langue
268
+        # on force la relecture du repertoire des langues pour etre synchrone.
269
+        case 'var_lang_ecrire':
270
+        default:
271
+            $GLOBALS['meta']['langues_proposees'] = '';
272
+            init_langues();
273
+            $langues = explode(',', $GLOBALS['meta']['langues_proposees']);
274
+            break;
275 275
 
276 276
 # dernier choix possible : toutes les langues = langues_proposees 
277 277
 # + langues_multilingues ; mais, ne sert pas
278 278
 #			$langues = explode(',', $GLOBALS['all_langs']);
279
-	}
280
-	if (count($langues) <= 1) {
281
-		return array();
282
-	}
283
-	sort($langues);
279
+    }
280
+    if (count($langues) <= 1) {
281
+        return array();
282
+    }
283
+    sort($langues);
284 284
 
285
-	return $langues;
285
+    return $langues;
286 286
 }
287 287
 
288 288
 
@@ -297,38 +297,38 @@  discard block
 block discarded – undo
297 297
  **/
298 298
 function verifier_lang_url() {
299 299
 
300
-	// quelle langue est demandee ?
301
-	$lang_demandee = (test_espace_prive() ? $GLOBALS['spip_lang'] : $GLOBALS['meta']['langue_site']);
302
-	if (isset($_COOKIE['spip_lang_ecrire'])) {
303
-		$lang_demandee = $_COOKIE['spip_lang_ecrire'];
304
-	}
305
-	if (!test_espace_prive() and isset($_COOKIE['spip_lang'])) {
306
-		$lang_demandee = $_COOKIE['spip_lang'];
307
-	}
308
-	if (isset($_GET['lang'])) {
309
-		$lang_demandee = $_GET['lang'];
310
-	}
311
-
312
-	// Renvoyer si besoin (et si la langue demandee existe)
313
-	if ($GLOBALS['spip_lang'] != $lang_demandee
314
-		and changer_langue($lang_demandee)
315
-		and $lang_demandee != @$_GET['lang']
316
-	) {
317
-		$destination = parametre_url(self(), 'lang', $lang_demandee, '&');
318
-		// ici on a besoin des var_truc
319
-		foreach ($_GET as $var => $val) {
320
-			if (!strncmp('var_', $var, 4)) {
321
-				$destination = parametre_url($destination, $var, $val, '&');
322
-			}
323
-		}
324
-		include_spip('inc/headers');
325
-		redirige_par_entete($destination);
326
-	}
327
-
328
-	// Subtilite : si la langue demandee par cookie est la bonne
329
-	// alors on fait comme si $lang etait passee dans l'URL
330
-	// (pour criteres {lang}).
331
-	$GLOBALS['lang'] = $_GET['lang'] = $GLOBALS['spip_lang'];
300
+    // quelle langue est demandee ?
301
+    $lang_demandee = (test_espace_prive() ? $GLOBALS['spip_lang'] : $GLOBALS['meta']['langue_site']);
302
+    if (isset($_COOKIE['spip_lang_ecrire'])) {
303
+        $lang_demandee = $_COOKIE['spip_lang_ecrire'];
304
+    }
305
+    if (!test_espace_prive() and isset($_COOKIE['spip_lang'])) {
306
+        $lang_demandee = $_COOKIE['spip_lang'];
307
+    }
308
+    if (isset($_GET['lang'])) {
309
+        $lang_demandee = $_GET['lang'];
310
+    }
311
+
312
+    // Renvoyer si besoin (et si la langue demandee existe)
313
+    if ($GLOBALS['spip_lang'] != $lang_demandee
314
+        and changer_langue($lang_demandee)
315
+        and $lang_demandee != @$_GET['lang']
316
+    ) {
317
+        $destination = parametre_url(self(), 'lang', $lang_demandee, '&');
318
+        // ici on a besoin des var_truc
319
+        foreach ($_GET as $var => $val) {
320
+            if (!strncmp('var_', $var, 4)) {
321
+                $destination = parametre_url($destination, $var, $val, '&');
322
+            }
323
+        }
324
+        include_spip('inc/headers');
325
+        redirige_par_entete($destination);
326
+    }
327
+
328
+    // Subtilite : si la langue demandee par cookie est la bonne
329
+    // alors on fait comme si $lang etait passee dans l'URL
330
+    // (pour criteres {lang}).
331
+    $GLOBALS['lang'] = $_GET['lang'] = $GLOBALS['spip_lang'];
332 332
 }
333 333
 
334 334
 
@@ -346,21 +346,21 @@  discard block
 block discarded – undo
346 346
  *     La langue sélectionnée
347 347
  **/
348 348
 function utiliser_langue_site($liste_langues = null) {
349
-	// s'il existe une langue du site (en gros tout le temps en théorie)
350
-	if (isset($GLOBALS['meta']['langue_site'])
351
-		// et si spip_langue est pas encore définie (ce que va faire changer_langue())
352
-		// ou qu'elle n'est pas identique à la langue du site
353
-		and (!isset($GLOBALS['spip_lang'])
354
-			or $GLOBALS['spip_lang'] != $GLOBALS['meta']['langue_site'])
355
-	) {
356
-		return changer_langue($GLOBALS['meta']['langue_site'], $liste_langues);//@:install
357
-	}
358
-	// en theorie là, la globale est définie, sinon c'est un problème.
359
-	if (!isset($GLOBALS['spip_lang'])) {
360
-		spip_log("La globale spip_lang est indéfinie dans utiliser_langue_site() !", _LOG_ERREUR);
361
-	}
362
-
363
-	return $GLOBALS['spip_lang'];
349
+    // s'il existe une langue du site (en gros tout le temps en théorie)
350
+    if (isset($GLOBALS['meta']['langue_site'])
351
+        // et si spip_langue est pas encore définie (ce que va faire changer_langue())
352
+        // ou qu'elle n'est pas identique à la langue du site
353
+        and (!isset($GLOBALS['spip_lang'])
354
+            or $GLOBALS['spip_lang'] != $GLOBALS['meta']['langue_site'])
355
+    ) {
356
+        return changer_langue($GLOBALS['meta']['langue_site'], $liste_langues);//@:install
357
+    }
358
+    // en theorie là, la globale est définie, sinon c'est un problème.
359
+    if (!isset($GLOBALS['spip_lang'])) {
360
+        spip_log("La globale spip_lang est indéfinie dans utiliser_langue_site() !", _LOG_ERREUR);
361
+    }
362
+
363
+    return $GLOBALS['spip_lang'];
364 364
 }
365 365
 
366 366
 /**
@@ -379,30 +379,30 @@  discard block
 block discarded – undo
379 379
  **/
380 380
 function utiliser_langue_visiteur($liste_langues = null) {
381 381
 
382
-	$l = (!test_espace_prive() ? 'spip_lang' : 'spip_lang_ecrire');
383
-	if (isset($_COOKIE[$l])) {
384
-		if (changer_langue($l = $_COOKIE[$l], $liste_langues)) {
385
-			return $l;
386
-		}
387
-	}
388
-
389
-	if (isset($GLOBALS['visiteur_session']['lang'])) {
390
-		if (changer_langue($l = $GLOBALS['visiteur_session']['lang'], $liste_langues)) {
391
-			return $l;
392
-		}
393
-	}
394
-
395
-	if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
396
-		foreach (explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']) as $s) {
397
-			if (preg_match('#^([a-z]{2,3})(-[a-z]{2,3})?(;q=[0-9.]+)?$#i', trim($s), $r)) {
398
-				if (changer_langue($l = strtolower($r[1]), $liste_langues)) {
399
-					return $l;
400
-				}
401
-			}
402
-		}
403
-	}
404
-
405
-	return utiliser_langue_site($liste_langues);
382
+    $l = (!test_espace_prive() ? 'spip_lang' : 'spip_lang_ecrire');
383
+    if (isset($_COOKIE[$l])) {
384
+        if (changer_langue($l = $_COOKIE[$l], $liste_langues)) {
385
+            return $l;
386
+        }
387
+    }
388
+
389
+    if (isset($GLOBALS['visiteur_session']['lang'])) {
390
+        if (changer_langue($l = $GLOBALS['visiteur_session']['lang'], $liste_langues)) {
391
+            return $l;
392
+        }
393
+    }
394
+
395
+    if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
396
+        foreach (explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']) as $s) {
397
+            if (preg_match('#^([a-z]{2,3})(-[a-z]{2,3})?(;q=[0-9.]+)?$#i', trim($s), $r)) {
398
+                if (changer_langue($l = strtolower($r[1]), $liste_langues)) {
399
+                    return $l;
400
+                }
401
+            }
402
+        }
403
+    }
404
+
405
+    return utiliser_langue_site($liste_langues);
406 406
 }
407 407
 
408 408
 
@@ -412,7 +412,7 @@  discard block
 block discarded – undo
412 412
  * @return int
413 413
  */
414 414
 function match_langue($chaine) {
415
-	return preg_match('/^[a-z]{2,3}(_[a-z]{2,3}){0,2}$/', $chaine);
415
+    return preg_match('/^[a-z]{2,3}(_[a-z]{2,3}){0,2}$/', $chaine);
416 416
 }
417 417
 
418 418
 /**
@@ -430,36 +430,36 @@  discard block
 block discarded – undo
430 430
  **/
431 431
 function init_langues() {
432 432
 
433
-	// liste des langues dans les meta, sauf a l'install
434
-	$all_langs = @$GLOBALS['meta']['langues_proposees'];
435
-
436
-	$tout = array();
437
-	if (!$all_langs) {
438
-		// trouver tous les modules lang/spip_xx.php
439
-		$modules = find_all_in_path("lang/", "/spip_([a-z_]+)\.php$");
440
-		foreach ($modules as $name => $path) {
441
-			if (preg_match(',^spip_([a-z_]+)\.php$,', $name, $regs)) {
442
-				if (match_langue($regs[1])) {
443
-					$tout[] = $regs[1];
444
-				}
445
-			}
446
-		}
447
-		sort($tout);
448
-		$tout = join(',', $tout);
449
-		// Si les langues n'ont pas change, ne rien faire
450
-		if ($tout != $all_langs) {
451
-			$GLOBALS['meta']['langues_proposees'] = $tout;
452
-			include_spip('inc/meta');
453
-			ecrire_meta('langues_proposees', $tout);
454
-		}
455
-	}
456
-	if (!isset($GLOBALS['meta']['langue_site'])) {
457
-		// Initialisation : le francais si dispo, sinon la premiere langue trouvee
458
-		$GLOBALS['meta']['langue_site'] = $tout =
459
-			(!$all_langs or (strpos(',' . _LANGUE_PAR_DEFAUT . ',', ",$all_langs,") !== false))
460
-				? _LANGUE_PAR_DEFAUT : substr($all_langs, 0, strpos($all_langs, ','));
461
-		ecrire_meta('langue_site', $tout);
462
-	}
433
+    // liste des langues dans les meta, sauf a l'install
434
+    $all_langs = @$GLOBALS['meta']['langues_proposees'];
435
+
436
+    $tout = array();
437
+    if (!$all_langs) {
438
+        // trouver tous les modules lang/spip_xx.php
439
+        $modules = find_all_in_path("lang/", "/spip_([a-z_]+)\.php$");
440
+        foreach ($modules as $name => $path) {
441
+            if (preg_match(',^spip_([a-z_]+)\.php$,', $name, $regs)) {
442
+                if (match_langue($regs[1])) {
443
+                    $tout[] = $regs[1];
444
+                }
445
+            }
446
+        }
447
+        sort($tout);
448
+        $tout = join(',', $tout);
449
+        // Si les langues n'ont pas change, ne rien faire
450
+        if ($tout != $all_langs) {
451
+            $GLOBALS['meta']['langues_proposees'] = $tout;
452
+            include_spip('inc/meta');
453
+            ecrire_meta('langues_proposees', $tout);
454
+        }
455
+    }
456
+    if (!isset($GLOBALS['meta']['langue_site'])) {
457
+        // Initialisation : le francais si dispo, sinon la premiere langue trouvee
458
+        $GLOBALS['meta']['langue_site'] = $tout =
459
+            (!$all_langs or (strpos(',' . _LANGUE_PAR_DEFAUT . ',', ",$all_langs,") !== false))
460
+                ? _LANGUE_PAR_DEFAUT : substr($all_langs, 0, strpos($all_langs, ','));
461
+        ecrire_meta('langue_site', $tout);
462
+    }
463 463
 }
464 464
 
465 465
 /**
@@ -473,10 +473,10 @@  discard block
 block discarded – undo
473 473
  *     Code html de la balise <html>
474 474
  **/
475 475
 function html_lang_attributes() {
476
-	$lang = $GLOBALS['spip_lang'];
477
-	$dir = ($GLOBALS['spip_lang_rtl'] ? 'rtl' : 'ltr');
476
+    $lang = $GLOBALS['spip_lang'];
477
+    $dir = ($GLOBALS['spip_lang_rtl'] ? 'rtl' : 'ltr');
478 478
 
479
-	return "<html class='$dir $lang no-js' xmlns='http://www.w3.org/1999/xhtml' lang='$lang' dir='$dir'>\n";
479
+    return "<html class='$dir $lang no-js' xmlns='http://www.w3.org/1999/xhtml' lang='$lang' dir='$dir'>\n";
480 480
 }
481 481
 
482 482
 
@@ -490,7 +490,7 @@  discard block
 block discarded – undo
490 490
  * @return string
491 491
  */
492 492
 function aide_lang_dir($spip_lang, $spip_lang_rtl) {
493
-	return ($spip_lang <> 'he') ? $spip_lang_rtl : '';
493
+    return ($spip_lang <> 'he') ? $spip_lang_rtl : '';
494 494
 }
495 495
 
496 496
 
Please login to merge, or discard this patch.
ecrire/inc/completer_traduction.php 1 patch
Indentation   +38 added lines, -38 removed lines patch added patch discarded remove patch
@@ -17,7 +17,7 @@  discard block
 block discarded – undo
17 17
  **/
18 18
 
19 19
 if (!defined('_ECRIRE_INC_VERSION')) {
20
-	return;
20
+    return;
21 21
 }
22 22
 
23 23
 /**
@@ -29,51 +29,51 @@  discard block
 block discarded – undo
29 29
  * @return string Erreur éventuelle
30 30
  */
31 31
 function inc_completer_traduction_dist($objet, $id_objet, $id_trad) {
32
-	// dupliquer tous les liens sauf les auteurs : le nouvel auteur est celui qui traduit
33
-	// cf API editer_liens
34
-	include_spip('action/editer_liens');
35
-	objet_dupliquer_liens($objet, $id_trad, $id_objet, null, array('auteur'));
36
-	$_id_table = id_table_objet($objet);
32
+    // dupliquer tous les liens sauf les auteurs : le nouvel auteur est celui qui traduit
33
+    // cf API editer_liens
34
+    include_spip('action/editer_liens');
35
+    objet_dupliquer_liens($objet, $id_trad, $id_objet, null, array('auteur'));
36
+    $_id_table = id_table_objet($objet);
37 37
 
38
-	// recuperer le logo
39
-	$chercher_logo = charger_fonction('chercher_logo','inc');
40
-	include_spip('action/editer_logo');
41
-	foreach (array('on', 'off') as $etat) {
42
-		$logo = $chercher_logo($id_trad, $_id_table, $etat);
43
-		if ($logo AND $file = reset($logo)) {
44
-			logo_modifier($objet, $id_objet, $etat, $file);
45
-		}
46
-	}
38
+    // recuperer le logo
39
+    $chercher_logo = charger_fonction('chercher_logo','inc');
40
+    include_spip('action/editer_logo');
41
+    foreach (array('on', 'off') as $etat) {
42
+        $logo = $chercher_logo($id_trad, $_id_table, $etat);
43
+        if ($logo AND $file = reset($logo)) {
44
+            logo_modifier($objet, $id_objet, $etat, $file);
45
+        }
46
+    }
47 47
 
48
-	// dupliquer certains champs
49
-	$trouver_table = charger_fonction('trouver_table','base');
50
-	$desc = $trouver_table(table_objet_sql($objet));
51
-	$champs = $set = array();
48
+    // dupliquer certains champs
49
+    $trouver_table = charger_fonction('trouver_table','base');
50
+    $desc = $trouver_table(table_objet_sql($objet));
51
+    $champs = $set = array();
52 52
 
53
-	// un éventuel champ 'virtuel' (redirections)
54
-	if (!empty($desc['field']['virtuel'])) {
55
-		$champs[] = 'virtuel';
56
-	}
53
+    // un éventuel champ 'virtuel' (redirections)
54
+    if (!empty($desc['field']['virtuel'])) {
55
+        $champs[] = 'virtuel';
56
+    }
57 57
 
58
-	$data = sql_fetsel('*', $desc['table'], $_id_table . '=' . intval($id_trad));
58
+    $data = sql_fetsel('*', $desc['table'], $_id_table . '=' . intval($id_trad));
59 59
 
60
-	foreach ($champs as $c) {
61
-		$set[$c] = $data[$c];
62
-	}
60
+    foreach ($champs as $c) {
61
+        $set[$c] = $data[$c];
62
+    }
63 63
 
64
-	/*
64
+    /*
65 65
 	 * Le pipeline 'pre_edition' sera appelé avec l'action 'completer_traduction'.
66 66
 	 * Des plugins pourront ainsi compléter les champs d'un objet traduit lors d'une nouvelle traduction.
67 67
 	 */
68
-	$err = objet_modifier_champs(
69
-		$objet,
70
-		$id_objet,
71
-		array(
72
-			'data' => $data,
73
-			'action' => 'completer_traduction',
74
-		),
75
-		$set
76
-	);
68
+    $err = objet_modifier_champs(
69
+        $objet,
70
+        $id_objet,
71
+        array(
72
+            'data' => $data,
73
+            'action' => 'completer_traduction',
74
+        ),
75
+        $set
76
+    );
77 77
 
78
-	return $err;
78
+    return $err;
79 79
 }
80 80
\ No newline at end of file
Please login to merge, or discard this patch.
ecrire/balise/formulaire_admin.php 1 patch
Indentation   +146 added lines, -146 removed lines patch added patch discarded remove patch
@@ -17,7 +17,7 @@  discard block
 block discarded – undo
17 17
  **/
18 18
 
19 19
 if (!defined('_ECRIRE_INC_VERSION')) {
20
-	return;
20
+    return;
21 21
 }
22 22
 
23 23
 /**
@@ -42,7 +42,7 @@  discard block
 block discarded – undo
42 42
  *     Pile complétée du code compilé
43 43
  **/
44 44
 function balise_FORMULAIRE_ADMIN($p) {
45
-	return calculer_balise_dynamique($p, 'FORMULAIRE_ADMIN', array());
45
+    return calculer_balise_dynamique($p, 'FORMULAIRE_ADMIN', array());
46 46
 }
47 47
 
48 48
 /**
@@ -59,7 +59,7 @@  discard block
 block discarded – undo
59 59
  *   - chaîne vide sinon.
60 60
  */
61 61
 function balise_FORMULAIRE_ADMIN_stat($args, $context_compil) {
62
-	return $args;
62
+    return $args;
63 63
 }
64 64
 
65 65
 
@@ -84,66 +84,66 @@  discard block
 block discarded – undo
84 84
  **/
85 85
 function balise_FORMULAIRE_ADMIN_dyn($float = '', $debug = '') {
86 86
 
87
-	static $dejafait = false;
87
+    static $dejafait = false;
88 88
 
89
-	if (empty($_COOKIE['spip_admin'])) {
90
-		return '';
91
-	}
89
+    if (empty($_COOKIE['spip_admin'])) {
90
+        return '';
91
+    }
92 92
 
93
-	if (!is_array($debug)) {
94
-		if ($dejafait) {
95
-			return '';
96
-		}
97
-	} else {
98
-		if ($dejafait) {
99
-			if (empty($debug['sourcefile'])) {
100
-				return '';
101
-			}
102
-			foreach ($debug['sourcefile'] as $k => $v) {
103
-				if (strpos($v, 'administration.') !== false) {
104
-					if (isset($debug['resultat'][$k . 'tout'])) {
105
-						return $debug['resultat'][$k . 'tout'];
106
-					}
107
-				}
108
-			}
93
+    if (!is_array($debug)) {
94
+        if ($dejafait) {
95
+            return '';
96
+        }
97
+    } else {
98
+        if ($dejafait) {
99
+            if (empty($debug['sourcefile'])) {
100
+                return '';
101
+            }
102
+            foreach ($debug['sourcefile'] as $k => $v) {
103
+                if (strpos($v, 'administration.') !== false) {
104
+                    if (isset($debug['resultat'][$k . 'tout'])) {
105
+                        return $debug['resultat'][$k . 'tout'];
106
+                    }
107
+                }
108
+            }
109 109
 
110
-			return '';
111
-		}
112
-	}
110
+            return '';
111
+        }
112
+    }
113 113
 
114
-	include_spip('inc/autoriser');
115
-	include_spip('base/abstract_sql');
114
+    include_spip('inc/autoriser');
115
+    include_spip('base/abstract_sql');
116 116
 
117 117
 
118
-	$dejafait = true;
118
+    $dejafait = true;
119 119
 
120
-	// Preparer le #ENV des boutons
120
+    // Preparer le #ENV des boutons
121 121
 
122
-	$env = admin_objet();
122
+    $env = admin_objet();
123 123
 
124
-	// Pas de "modifier ce..." ? -> donner "acces a l'espace prive"
125
-	if (!$env) {
126
-		$env['ecrire'] = _DIR_RESTREINT_ABS;
127
-	}
124
+    // Pas de "modifier ce..." ? -> donner "acces a l'espace prive"
125
+    if (!$env) {
126
+        $env['ecrire'] = _DIR_RESTREINT_ABS;
127
+    }
128 128
 
129
-	$env['divclass'] = $float;
130
-	$env['lang'] = admin_lang();
131
-	$env['calcul'] = (_request('var_mode') ? 'recalcul' : 'calcul');
132
-	$env['debug'] = ((defined('_VAR_PREVIEW') and _VAR_PREVIEW) ? "" : admin_debug());
133
-	$env['analyser'] = (!$env['debug'] and !$GLOBALS['xhtml']) ? '' : admin_valider();
134
-	$env['inclure'] = ((defined('_VAR_INCLURE') and _VAR_INCLURE) ? 'inclure' : '');
129
+    $env['divclass'] = $float;
130
+    $env['lang'] = admin_lang();
131
+    $env['calcul'] = (_request('var_mode') ? 'recalcul' : 'calcul');
132
+    $env['debug'] = ((defined('_VAR_PREVIEW') and _VAR_PREVIEW) ? "" : admin_debug());
133
+    $env['analyser'] = (!$env['debug'] and !$GLOBALS['xhtml']) ? '' : admin_valider();
134
+    $env['inclure'] = ((defined('_VAR_INCLURE') and _VAR_INCLURE) ? 'inclure' : '');
135 135
 
136
-	if (empty($GLOBALS['use_cache'])) {
137
-		$env['use_cache'] = ' *';
138
-	}
136
+    if (empty($GLOBALS['use_cache'])) {
137
+        $env['use_cache'] = ' *';
138
+    }
139 139
 
140
-	if (isset($debug['validation'])) {
141
-		$env['xhtml_error'] = $debug['validation'];
142
-	}
140
+    if (isset($debug['validation'])) {
141
+        $env['xhtml_error'] = $debug['validation'];
142
+    }
143 143
 
144
-	$env['_pipelines']['formulaire_admin'] = array();
144
+    $env['_pipelines']['formulaire_admin'] = array();
145 145
 
146
-	return array('formulaires/administration', 0, $env);
146
+    return array('formulaires/administration', 0, $env);
147 147
 }
148 148
 
149 149
 
@@ -161,45 +161,45 @@  discard block
 block discarded – undo
161 161
  *     Tableau de l'environnement calculé
162 162
  **/
163 163
 function admin_objet() {
164
-	include_spip('inc/urls');
165
-	$env = array();
166
-
167
-	$trouver_table = charger_fonction('trouver_table', 'base');
168
-	$objets = urls_liste_objets(false);
169
-	$objets = array_diff($objets, array('rubrique'));
170
-	$objets = array_reverse($objets);
171
-	array_unshift($objets, 'rubrique');
172
-	foreach ($objets as $obj) {
173
-		$type = $obj;
174
-		if ($type == objet_type($type, false)
175
-			and $_id_type = id_table_objet($type)
176
-			and isset($GLOBALS['contexte'][$_id_type])
177
-			and $id = $GLOBALS['contexte'][$_id_type]
178
-			and !is_array($id)
179
-			and $id = intval($id)
180
-			and $desc = $trouver_table(table_objet_sql($type))
181
-		) {
182
-			$id = sql_getfetsel($_id_type, table_objet_sql($type), "$_id_type=" . intval($id));
183
-			if ($id) {
184
-				$env[$_id_type] = $id;
185
-				$env['objet'] = $type;
186
-				$env['id_objet'] = $id;
187
-				$env['voir_' . $obj] =
188
-					str_replace('&amp;', '&', generer_url_entite($id, $obj, '', '', false));
189
-				if (isset($desc['field']['id_rubrique'])
190
-					and $type != 'rubrique'
191
-				) {
192
-					unset($env['id_rubrique']);
193
-					unset($env['voir_rubrique']);
194
-					if (admin_preview($type, $id, $desc)) {
195
-						$env['preview'] = parametre_url(self(), 'var_mode', 'preview', '&');
196
-					}
197
-				}
198
-			}
199
-		}
200
-	}
201
-
202
-	return $env;
164
+    include_spip('inc/urls');
165
+    $env = array();
166
+
167
+    $trouver_table = charger_fonction('trouver_table', 'base');
168
+    $objets = urls_liste_objets(false);
169
+    $objets = array_diff($objets, array('rubrique'));
170
+    $objets = array_reverse($objets);
171
+    array_unshift($objets, 'rubrique');
172
+    foreach ($objets as $obj) {
173
+        $type = $obj;
174
+        if ($type == objet_type($type, false)
175
+            and $_id_type = id_table_objet($type)
176
+            and isset($GLOBALS['contexte'][$_id_type])
177
+            and $id = $GLOBALS['contexte'][$_id_type]
178
+            and !is_array($id)
179
+            and $id = intval($id)
180
+            and $desc = $trouver_table(table_objet_sql($type))
181
+        ) {
182
+            $id = sql_getfetsel($_id_type, table_objet_sql($type), "$_id_type=" . intval($id));
183
+            if ($id) {
184
+                $env[$_id_type] = $id;
185
+                $env['objet'] = $type;
186
+                $env['id_objet'] = $id;
187
+                $env['voir_' . $obj] =
188
+                    str_replace('&amp;', '&', generer_url_entite($id, $obj, '', '', false));
189
+                if (isset($desc['field']['id_rubrique'])
190
+                    and $type != 'rubrique'
191
+                ) {
192
+                    unset($env['id_rubrique']);
193
+                    unset($env['voir_rubrique']);
194
+                    if (admin_preview($type, $id, $desc)) {
195
+                        $env['preview'] = parametre_url(self(), 'var_mode', 'preview', '&');
196
+                    }
197
+                }
198
+            }
199
+        }
200
+    }
201
+
202
+    return $env;
203 203
 }
204 204
 
205 205
 
@@ -217,30 +217,30 @@  discard block
 block discarded – undo
217 217
  *     - Tableau d'un élément sinon.
218 218
  **/
219 219
 function admin_preview($type, $id, $desc = null) {
220
-	if (defined('_VAR_PREVIEW') and _VAR_PREVIEW) {
221
-		return '';
222
-	}
223
-
224
-	if (!$desc) {
225
-		$trouver_table = charger_fonction('trouver_table', 'base');
226
-		$desc = $trouver_table(table_objet_sql($type));
227
-	}
228
-	if (!$desc or !isset($desc['field']['statut'])) {
229
-		return '';
230
-	}
231
-
232
-	include_spip('inc/autoriser');
233
-	if (!autoriser('previsualiser')) {
234
-		return '';
235
-	}
236
-
237
-	$notpub = sql_in("statut", array('prop', 'prive'));
238
-
239
-	if ($type == 'article' and $GLOBALS['meta']['post_dates'] != 'oui') {
240
-		$notpub .= " OR (statut='publie' AND date>" . sql_quote(date('Y-m-d H:i:s')) . ")";
241
-	}
242
-
243
-	return sql_fetsel('1', table_objet_sql($type), id_table_objet($type) . "=" . $id . " AND ($notpub)");
220
+    if (defined('_VAR_PREVIEW') and _VAR_PREVIEW) {
221
+        return '';
222
+    }
223
+
224
+    if (!$desc) {
225
+        $trouver_table = charger_fonction('trouver_table', 'base');
226
+        $desc = $trouver_table(table_objet_sql($type));
227
+    }
228
+    if (!$desc or !isset($desc['field']['statut'])) {
229
+        return '';
230
+    }
231
+
232
+    include_spip('inc/autoriser');
233
+    if (!autoriser('previsualiser')) {
234
+        return '';
235
+    }
236
+
237
+    $notpub = sql_in("statut", array('prop', 'prive'));
238
+
239
+    if ($type == 'article' and $GLOBALS['meta']['post_dates'] != 'oui') {
240
+        $notpub .= " OR (statut='publie' AND date>" . sql_quote(date('Y-m-d H:i:s')) . ")";
241
+    }
242
+
243
+    return sql_fetsel('1', table_objet_sql($type), id_table_objet($type) . "=" . $id . " AND ($notpub)");
244 244
 }
245 245
 
246 246
 
@@ -251,25 +251,25 @@  discard block
 block discarded – undo
251 251
  *     Code de langue
252 252
  **/
253 253
 function admin_lang() {
254
-	$alang = '';
255
-	if (!empty($_COOKIE['spip_admin'])) {
256
-		$email_or_login = preg_replace(',^@,', '', $_COOKIE['spip_admin']);
257
-		$alang = sql_getfetsel('lang', 'spip_auteurs', "email=" . sql_quote($email_or_login));
258
-		if (!$alang) {
259
-			$alang = sql_getfetsel('lang', 'spip_auteurs', "login=" . sql_quote($email_or_login));
260
-		}
261
-	}
262
-	if (!$alang) {
263
-		return '';
264
-	}
265
-
266
-	$l = lang_select($alang);
267
-	$alang = $GLOBALS['spip_lang'];
268
-	if ($l) {
269
-		lang_select();
270
-	}
271
-
272
-	return $alang;
254
+    $alang = '';
255
+    if (!empty($_COOKIE['spip_admin'])) {
256
+        $email_or_login = preg_replace(',^@,', '', $_COOKIE['spip_admin']);
257
+        $alang = sql_getfetsel('lang', 'spip_auteurs', "email=" . sql_quote($email_or_login));
258
+        if (!$alang) {
259
+            $alang = sql_getfetsel('lang', 'spip_auteurs', "login=" . sql_quote($email_or_login));
260
+        }
261
+    }
262
+    if (!$alang) {
263
+        return '';
264
+    }
265
+
266
+    $l = lang_select($alang);
267
+    $alang = $GLOBALS['spip_lang'];
268
+    if ($l) {
269
+        lang_select();
270
+    }
271
+
272
+    return $alang;
273 273
 }
274 274
 
275 275
 /**
@@ -279,11 +279,11 @@  discard block
 block discarded – undo
279 279
  **/
280 280
 function admin_valider() {
281 281
 
282
-	return ((!isset($GLOBALS['xhtml']) or $GLOBALS['xhtml'] !== 'true') ?
283
-		(parametre_url(self(), 'var_mode', 'debug', '&')
284
-			. '&var_mode_affiche=validation') :
285
-		('http://validator.w3.org/check?uri='
286
-			. rawurlencode("http://" . $_SERVER['HTTP_HOST'] . nettoyer_uri())));
282
+    return ((!isset($GLOBALS['xhtml']) or $GLOBALS['xhtml'] !== 'true') ?
283
+        (parametre_url(self(), 'var_mode', 'debug', '&')
284
+            . '&var_mode_affiche=validation') :
285
+        ('http://validator.w3.org/check?uri='
286
+            . rawurlencode("http://" . $_SERVER['HTTP_HOST'] . nettoyer_uri())));
287 287
 }
288 288
 
289 289
 /**
@@ -292,14 +292,14 @@  discard block
 block discarded – undo
292 292
  * @return string
293 293
  **/
294 294
 function admin_debug() {
295
-	return ((
296
-			(isset($GLOBALS['forcer_debug']) and $GLOBALS['forcer_debug'])
297
-			or (isset($GLOBALS['bouton_admin_debug']) and $GLOBALS['bouton_admin_debug'])
298
-			or (
299
-				defined('_VAR_MODE') and _VAR_MODE == 'debug'
300
-				and isset($_COOKIE['spip_debug']) and $_COOKIE['spip_debug']
301
-			)
302
-		) and autoriser('debug')
303
-	)
304
-		? parametre_url(self(), 'var_mode', 'debug', '&') : '';
295
+    return ((
296
+            (isset($GLOBALS['forcer_debug']) and $GLOBALS['forcer_debug'])
297
+            or (isset($GLOBALS['bouton_admin_debug']) and $GLOBALS['bouton_admin_debug'])
298
+            or (
299
+                defined('_VAR_MODE') and _VAR_MODE == 'debug'
300
+                and isset($_COOKIE['spip_debug']) and $_COOKIE['spip_debug']
301
+            )
302
+        ) and autoriser('debug')
303
+    )
304
+        ? parametre_url(self(), 'var_mode', 'debug', '&') : '';
305 305
 }
Please login to merge, or discard this patch.