@@ -19,78 +19,78 @@ |
||
| 19 | 19 | * @link https://www.php.net/manual/fr/book.sodium.php |
| 20 | 20 | */ |
| 21 | 21 | class Chiffrement { |
| 22 | - /** Chiffre un message en utilisant une clé ou un mot de passe */ |
|
| 23 | - public static function chiffrer( |
|
| 24 | - string $message, |
|
| 25 | - #[\SensitiveParameter] |
|
| 26 | - string $key |
|
| 27 | - ): ?string { |
|
| 28 | - // create a random salt for key derivation |
|
| 29 | - $salt = random_bytes(SODIUM_CRYPTO_PWHASH_SALTBYTES); |
|
| 30 | - $key = self::deriveKeyFromPassword($key, $salt); |
|
| 31 | - $nonce = random_bytes(\SODIUM_CRYPTO_SECRETBOX_NONCEBYTES); |
|
| 32 | - $padded_message = sodium_pad($message, 16); |
|
| 33 | - $encrypted = sodium_crypto_secretbox($padded_message, $nonce, $key); |
|
| 34 | - $encoded = base64_encode($salt . $nonce . $encrypted); |
|
| 35 | - sodium_memzero($key); |
|
| 36 | - sodium_memzero($nonce); |
|
| 37 | - sodium_memzero($salt); |
|
| 38 | - #spip_log("chiffrer($message)=$encoded", 'chiffrer' . _LOG_DEBUG); |
|
| 39 | - return $encoded; |
|
| 40 | - } |
|
| 22 | + /** Chiffre un message en utilisant une clé ou un mot de passe */ |
|
| 23 | + public static function chiffrer( |
|
| 24 | + string $message, |
|
| 25 | + #[\SensitiveParameter] |
|
| 26 | + string $key |
|
| 27 | + ): ?string { |
|
| 28 | + // create a random salt for key derivation |
|
| 29 | + $salt = random_bytes(SODIUM_CRYPTO_PWHASH_SALTBYTES); |
|
| 30 | + $key = self::deriveKeyFromPassword($key, $salt); |
|
| 31 | + $nonce = random_bytes(\SODIUM_CRYPTO_SECRETBOX_NONCEBYTES); |
|
| 32 | + $padded_message = sodium_pad($message, 16); |
|
| 33 | + $encrypted = sodium_crypto_secretbox($padded_message, $nonce, $key); |
|
| 34 | + $encoded = base64_encode($salt . $nonce . $encrypted); |
|
| 35 | + sodium_memzero($key); |
|
| 36 | + sodium_memzero($nonce); |
|
| 37 | + sodium_memzero($salt); |
|
| 38 | + #spip_log("chiffrer($message)=$encoded", 'chiffrer' . _LOG_DEBUG); |
|
| 39 | + return $encoded; |
|
| 40 | + } |
|
| 41 | 41 | |
| 42 | - /** Déchiffre un message en utilisant une clé ou un mot de passe */ |
|
| 43 | - public static function dechiffrer( |
|
| 44 | - string $encoded, |
|
| 45 | - #[\SensitiveParameter] |
|
| 46 | - string $key |
|
| 47 | - ): ?string { |
|
| 48 | - $decoded = base64_decode($encoded); |
|
| 49 | - $salt = substr($decoded, 0, \SODIUM_CRYPTO_PWHASH_SALTBYTES); |
|
| 50 | - $nonce = substr($decoded, \SODIUM_CRYPTO_PWHASH_SALTBYTES, \SODIUM_CRYPTO_SECRETBOX_NONCEBYTES); |
|
| 51 | - $encrypted = substr($decoded, \SODIUM_CRYPTO_PWHASH_SALTBYTES + \SODIUM_CRYPTO_SECRETBOX_NONCEBYTES); |
|
| 52 | - $key = self::deriveKeyFromPassword($key, $salt); |
|
| 53 | - $padded_message = sodium_crypto_secretbox_open($encrypted, $nonce, $key); |
|
| 54 | - sodium_memzero($key); |
|
| 55 | - sodium_memzero($nonce); |
|
| 56 | - sodium_memzero($salt); |
|
| 57 | - if ($padded_message === false) { |
|
| 58 | - spip_log("dechiffrer() chiffre corrompu `$encoded`", 'chiffrer' . _LOG_DEBUG); |
|
| 59 | - return null; |
|
| 60 | - } |
|
| 61 | - $message = sodium_unpad($padded_message, 16); |
|
| 62 | - #spip_log("dechiffrer($encoded)=$message", 'chiffrer' . _LOG_DEBUG); |
|
| 63 | - return $message; |
|
| 64 | - } |
|
| 42 | + /** Déchiffre un message en utilisant une clé ou un mot de passe */ |
|
| 43 | + public static function dechiffrer( |
|
| 44 | + string $encoded, |
|
| 45 | + #[\SensitiveParameter] |
|
| 46 | + string $key |
|
| 47 | + ): ?string { |
|
| 48 | + $decoded = base64_decode($encoded); |
|
| 49 | + $salt = substr($decoded, 0, \SODIUM_CRYPTO_PWHASH_SALTBYTES); |
|
| 50 | + $nonce = substr($decoded, \SODIUM_CRYPTO_PWHASH_SALTBYTES, \SODIUM_CRYPTO_SECRETBOX_NONCEBYTES); |
|
| 51 | + $encrypted = substr($decoded, \SODIUM_CRYPTO_PWHASH_SALTBYTES + \SODIUM_CRYPTO_SECRETBOX_NONCEBYTES); |
|
| 52 | + $key = self::deriveKeyFromPassword($key, $salt); |
|
| 53 | + $padded_message = sodium_crypto_secretbox_open($encrypted, $nonce, $key); |
|
| 54 | + sodium_memzero($key); |
|
| 55 | + sodium_memzero($nonce); |
|
| 56 | + sodium_memzero($salt); |
|
| 57 | + if ($padded_message === false) { |
|
| 58 | + spip_log("dechiffrer() chiffre corrompu `$encoded`", 'chiffrer' . _LOG_DEBUG); |
|
| 59 | + return null; |
|
| 60 | + } |
|
| 61 | + $message = sodium_unpad($padded_message, 16); |
|
| 62 | + #spip_log("dechiffrer($encoded)=$message", 'chiffrer' . _LOG_DEBUG); |
|
| 63 | + return $message; |
|
| 64 | + } |
|
| 65 | 65 | |
| 66 | - /** Génère une clé de la taille attendue pour le chiffrement */ |
|
| 67 | - public static function keygen(): string { |
|
| 68 | - return sodium_crypto_secretbox_keygen(); |
|
| 69 | - } |
|
| 66 | + /** Génère une clé de la taille attendue pour le chiffrement */ |
|
| 67 | + public static function keygen(): string { |
|
| 68 | + return sodium_crypto_secretbox_keygen(); |
|
| 69 | + } |
|
| 70 | 70 | |
| 71 | - /** |
|
| 72 | - * Retourne une clé de la taille attendue pour le chiffrement |
|
| 73 | - * |
|
| 74 | - * Notamment si on utilise un mot de passe comme clé, il faut le hacher |
|
| 75 | - * pour servir de clé à la taille correspondante. |
|
| 76 | - */ |
|
| 77 | - private static function deriveKeyFromPassword( |
|
| 78 | - #[\SensitiveParameter] |
|
| 79 | - string $password, |
|
| 80 | - string $salt |
|
| 81 | - ): string { |
|
| 82 | - if (strlen($password) === \SODIUM_CRYPTO_SECRETBOX_KEYBYTES) { |
|
| 83 | - return $password; |
|
| 84 | - } |
|
| 85 | - $key = sodium_crypto_pwhash( |
|
| 86 | - \SODIUM_CRYPTO_SECRETBOX_KEYBYTES, |
|
| 87 | - $password, |
|
| 88 | - $salt, |
|
| 89 | - \SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE, |
|
| 90 | - \SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE |
|
| 91 | - ); |
|
| 92 | - sodium_memzero($password); |
|
| 71 | + /** |
|
| 72 | + * Retourne une clé de la taille attendue pour le chiffrement |
|
| 73 | + * |
|
| 74 | + * Notamment si on utilise un mot de passe comme clé, il faut le hacher |
|
| 75 | + * pour servir de clé à la taille correspondante. |
|
| 76 | + */ |
|
| 77 | + private static function deriveKeyFromPassword( |
|
| 78 | + #[\SensitiveParameter] |
|
| 79 | + string $password, |
|
| 80 | + string $salt |
|
| 81 | + ): string { |
|
| 82 | + if (strlen($password) === \SODIUM_CRYPTO_SECRETBOX_KEYBYTES) { |
|
| 83 | + return $password; |
|
| 84 | + } |
|
| 85 | + $key = sodium_crypto_pwhash( |
|
| 86 | + \SODIUM_CRYPTO_SECRETBOX_KEYBYTES, |
|
| 87 | + $password, |
|
| 88 | + $salt, |
|
| 89 | + \SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE, |
|
| 90 | + \SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE |
|
| 91 | + ); |
|
| 92 | + sodium_memzero($password); |
|
| 93 | 93 | |
| 94 | - return $key; |
|
| 95 | - } |
|
| 94 | + return $key; |
|
| 95 | + } |
|
| 96 | 96 | } |
@@ -14,48 +14,48 @@ |
||
| 14 | 14 | |
| 15 | 15 | /** Conteneur de clés (chiffrement, authentification) */ |
| 16 | 16 | class Cles implements \Countable /* , ContainerInterface */ { |
| 17 | - private array $keys; |
|
| 18 | - public function __construct(array $keys) { |
|
| 19 | - $this->keys = $keys; |
|
| 20 | - } |
|
| 21 | - |
|
| 22 | - public function has(string $name): bool { |
|
| 23 | - return array_key_exists($name, $this->keys); |
|
| 24 | - } |
|
| 25 | - |
|
| 26 | - public function get(string $name): ?string { |
|
| 27 | - return $this->keys[$name] ?? null; |
|
| 28 | - } |
|
| 29 | - |
|
| 30 | - public function generate(string $name): string { |
|
| 31 | - $key = Chiffrement::keygen(); |
|
| 32 | - $this->keys[$name] = $key; |
|
| 33 | - spip_log("Création de la cle $name", 'chiffrer' . _LOG_INFO_IMPORTANTE); |
|
| 34 | - return $key; |
|
| 35 | - } |
|
| 36 | - |
|
| 37 | - public function set( |
|
| 38 | - string $name, |
|
| 39 | - #[\SensitiveParameter] |
|
| 40 | - string $key |
|
| 41 | - ): void { |
|
| 42 | - $this->keys[$name] = $key; |
|
| 43 | - } |
|
| 44 | - |
|
| 45 | - public function delete(string $name): bool { |
|
| 46 | - if (isset($this->keys[$name])) { |
|
| 47 | - unset($this->keys[$name]); |
|
| 48 | - return true; |
|
| 49 | - }; |
|
| 50 | - return false; |
|
| 51 | - } |
|
| 52 | - |
|
| 53 | - public function count(): int { |
|
| 54 | - return count($this->keys); |
|
| 55 | - } |
|
| 56 | - |
|
| 57 | - public function toJson(): string { |
|
| 58 | - $json = array_map('base64_encode', $this->keys); |
|
| 59 | - return \json_encode($json); |
|
| 60 | - } |
|
| 17 | + private array $keys; |
|
| 18 | + public function __construct(array $keys) { |
|
| 19 | + $this->keys = $keys; |
|
| 20 | + } |
|
| 21 | + |
|
| 22 | + public function has(string $name): bool { |
|
| 23 | + return array_key_exists($name, $this->keys); |
|
| 24 | + } |
|
| 25 | + |
|
| 26 | + public function get(string $name): ?string { |
|
| 27 | + return $this->keys[$name] ?? null; |
|
| 28 | + } |
|
| 29 | + |
|
| 30 | + public function generate(string $name): string { |
|
| 31 | + $key = Chiffrement::keygen(); |
|
| 32 | + $this->keys[$name] = $key; |
|
| 33 | + spip_log("Création de la cle $name", 'chiffrer' . _LOG_INFO_IMPORTANTE); |
|
| 34 | + return $key; |
|
| 35 | + } |
|
| 36 | + |
|
| 37 | + public function set( |
|
| 38 | + string $name, |
|
| 39 | + #[\SensitiveParameter] |
|
| 40 | + string $key |
|
| 41 | + ): void { |
|
| 42 | + $this->keys[$name] = $key; |
|
| 43 | + } |
|
| 44 | + |
|
| 45 | + public function delete(string $name): bool { |
|
| 46 | + if (isset($this->keys[$name])) { |
|
| 47 | + unset($this->keys[$name]); |
|
| 48 | + return true; |
|
| 49 | + }; |
|
| 50 | + return false; |
|
| 51 | + } |
|
| 52 | + |
|
| 53 | + public function count(): int { |
|
| 54 | + return count($this->keys); |
|
| 55 | + } |
|
| 56 | + |
|
| 57 | + public function toJson(): string { |
|
| 58 | + $json = array_map('base64_encode', $this->keys); |
|
| 59 | + return \json_encode($json); |
|
| 60 | + } |
|
| 61 | 61 | } |
@@ -4,248 +4,248 @@ discard block |
||
| 4 | 4 | // ** ne pas modifier le fichier ** |
| 5 | 5 | |
| 6 | 6 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 7 | - return; |
|
| 7 | + return; |
|
| 8 | 8 | } |
| 9 | 9 | |
| 10 | 10 | $GLOBALS[$GLOBALS['idx_lang']] = array( |
| 11 | 11 | |
| 12 | - // A |
|
| 13 | - 'access_interface_graphique' => 'Ritorna all’interfaccia grafica completa', |
|
| 14 | - 'access_mode_texte' => 'Visualizza l’interfaccia testuale semplificata', |
|
| 15 | - 'admin_debug' => 'debug', |
|
| 16 | - 'admin_modifier_article' => 'Modifica l’articolo', |
|
| 17 | - 'admin_modifier_auteur' => 'Modifica l’autore', |
|
| 18 | - 'admin_modifier_breve' => 'Modifica la breve', |
|
| 19 | - 'admin_modifier_mot' => 'Modifica la parola chiave', |
|
| 20 | - 'admin_modifier_rubrique' => 'Modifica la rubrica', |
|
| 21 | - 'admin_recalculer' => 'Rigenera la pagina', |
|
| 22 | - 'afficher_calendrier' => 'Mostra il calendario', |
|
| 23 | - 'afficher_trad' => 'visualizzare le traduzioni', |
|
| 24 | - 'alerte_maj_impossible' => '<b>Attenzione!</b> L’aggiornamento del database SQL alla versione @version@ è impossibile, forse a causa di un problema con i diritti di modifica nel database. Contattare il proprio fornitore di hosting.', |
|
| 25 | - 'alerte_modif_info_concourante' => 'ATTENZIONE: Questa informazione è stata modificata altrove. Il valore attuale è:', |
|
| 26 | - 'analyse_xml' => 'Analisi XML', |
|
| 27 | - 'annuler' => 'Annulla', |
|
| 28 | - 'antispam_champ_vide' => 'Si prega di lasciare vuoto questo campo:', |
|
| 29 | - 'articles_recents' => 'Articoli più recenti', |
|
| 30 | - 'attention_champ_mini_nb_caractères' => 'Attenzione! Minimo @nb@ caratteri', |
|
| 31 | - 'avis_1_erreur_saisie' => 'C’è un errore nell’input, verificare le informazioni.', |
|
| 32 | - 'avis_archive_incorrect' => 'il file archivio non è un file SPIP', |
|
| 33 | - 'avis_archive_invalide' => 'il file archivio non è valido', |
|
| 34 | - 'avis_attention' => 'ATTENZIONE!', |
|
| 35 | - 'avis_champ_incorrect_type_objet' => 'Nome di campo errato @name@ per oggetto di tipo @type@', |
|
| 36 | - 'avis_colonne_inexistante' => 'La colonna @col@ non esiste', |
|
| 37 | - 'avis_erreur' => 'Errore: vedi sopra', |
|
| 38 | - 'avis_erreur_connexion' => 'Errore di connessione', |
|
| 39 | - 'avis_erreur_cookie' => 'problema di cookie', |
|
| 40 | - 'avis_erreur_fonction_contexte' => 'Errore di programmazione. Questa funzione non deve essere chiamata in questo contesto.', |
|
| 41 | - 'avis_erreur_mysql' => 'Errore SQL ', |
|
| 42 | - 'avis_erreur_sauvegarde' => 'Errore nel salvataggio (@type@ @id_objet@)! ', |
|
| 43 | - 'avis_erreur_visiteur' => 'Problema di accesso all’area riservata', |
|
| 44 | - 'avis_nb_erreurs_saisie' => 'Ci sono @nb@ errori nell’input, verificare le informazioni.', |
|
| 12 | + // A |
|
| 13 | + 'access_interface_graphique' => 'Ritorna all’interfaccia grafica completa', |
|
| 14 | + 'access_mode_texte' => 'Visualizza l’interfaccia testuale semplificata', |
|
| 15 | + 'admin_debug' => 'debug', |
|
| 16 | + 'admin_modifier_article' => 'Modifica l’articolo', |
|
| 17 | + 'admin_modifier_auteur' => 'Modifica l’autore', |
|
| 18 | + 'admin_modifier_breve' => 'Modifica la breve', |
|
| 19 | + 'admin_modifier_mot' => 'Modifica la parola chiave', |
|
| 20 | + 'admin_modifier_rubrique' => 'Modifica la rubrica', |
|
| 21 | + 'admin_recalculer' => 'Rigenera la pagina', |
|
| 22 | + 'afficher_calendrier' => 'Mostra il calendario', |
|
| 23 | + 'afficher_trad' => 'visualizzare le traduzioni', |
|
| 24 | + 'alerte_maj_impossible' => '<b>Attenzione!</b> L’aggiornamento del database SQL alla versione @version@ è impossibile, forse a causa di un problema con i diritti di modifica nel database. Contattare il proprio fornitore di hosting.', |
|
| 25 | + 'alerte_modif_info_concourante' => 'ATTENZIONE: Questa informazione è stata modificata altrove. Il valore attuale è:', |
|
| 26 | + 'analyse_xml' => 'Analisi XML', |
|
| 27 | + 'annuler' => 'Annulla', |
|
| 28 | + 'antispam_champ_vide' => 'Si prega di lasciare vuoto questo campo:', |
|
| 29 | + 'articles_recents' => 'Articoli più recenti', |
|
| 30 | + 'attention_champ_mini_nb_caractères' => 'Attenzione! Minimo @nb@ caratteri', |
|
| 31 | + 'avis_1_erreur_saisie' => 'C’è un errore nell’input, verificare le informazioni.', |
|
| 32 | + 'avis_archive_incorrect' => 'il file archivio non è un file SPIP', |
|
| 33 | + 'avis_archive_invalide' => 'il file archivio non è valido', |
|
| 34 | + 'avis_attention' => 'ATTENZIONE!', |
|
| 35 | + 'avis_champ_incorrect_type_objet' => 'Nome di campo errato @name@ per oggetto di tipo @type@', |
|
| 36 | + 'avis_colonne_inexistante' => 'La colonna @col@ non esiste', |
|
| 37 | + 'avis_erreur' => 'Errore: vedi sopra', |
|
| 38 | + 'avis_erreur_connexion' => 'Errore di connessione', |
|
| 39 | + 'avis_erreur_cookie' => 'problema di cookie', |
|
| 40 | + 'avis_erreur_fonction_contexte' => 'Errore di programmazione. Questa funzione non deve essere chiamata in questo contesto.', |
|
| 41 | + 'avis_erreur_mysql' => 'Errore SQL ', |
|
| 42 | + 'avis_erreur_sauvegarde' => 'Errore nel salvataggio (@type@ @id_objet@)! ', |
|
| 43 | + 'avis_erreur_visiteur' => 'Problema di accesso all’area riservata', |
|
| 44 | + 'avis_nb_erreurs_saisie' => 'Ci sono @nb@ errori nell’input, verificare le informazioni.', |
|
| 45 | 45 | |
| 46 | - // B |
|
| 47 | - 'barre_a_accent_grave' => 'Inserire una A maiscola con accento grave', |
|
| 48 | - 'barre_aide' => 'Utilizzare le scorciatoie tipografiche di SPIP per migliorare l\\’impaginazione del testo', |
|
| 49 | - 'barre_e_accent_aigu' => 'Inserire una E maiscola con accento acuto', |
|
| 50 | - 'barre_eo' => 'Inserire una E nell’O', |
|
| 51 | - 'barre_eo_maj' => 'Inserire una E nell’O maiuscola', |
|
| 52 | - 'barre_euro' => 'Inserire il simbolo €', |
|
| 53 | - 'barre_gras' => 'Formattare in {{grassetto}}', |
|
| 54 | - 'barre_guillemets' => 'Porre il testo fra « virgolette basse francesi »', |
|
| 55 | - 'barre_guillemets_simples' => 'Porre il testo fra „virgolette“', |
|
| 56 | - 'barre_intertitre' => 'Trasformare in {{{titolo di paragrafo}}}', |
|
| 57 | - 'barre_italic' => 'Formattare in {corsivo}', |
|
| 58 | - 'barre_lien' => 'Trasformare in un [link ipertestuale->http://...]', |
|
| 59 | - 'barre_lien_input' => 'Indicare l’indirizzo del link (è possibile indicare l’indirizzo Web come http://www.ilmiosito.com o semplicemente indicare il numero di un singolo articolo).', |
|
| 60 | - 'barre_note' => 'Trasformare in [[Nota a fondo pagina]]', |
|
| 61 | - 'barre_paragraphe' => 'Crea un paragrafo', |
|
| 62 | - 'barre_quote' => '<quote>Citare un messaggio</quote>', |
|
| 63 | - 'bouton_changer' => 'Cambia', |
|
| 64 | - 'bouton_chercher' => 'Cerca', |
|
| 65 | - 'bouton_choisir' => 'Scegli', |
|
| 66 | - 'bouton_deplacer' => 'Sposta', |
|
| 67 | - 'bouton_download' => 'Download', |
|
| 68 | - 'bouton_enregistrer' => 'Salva', |
|
| 69 | - 'bouton_radio_desactiver_messagerie_interne' => 'Disattiva la messaggistica interna', |
|
| 70 | - 'bouton_radio_envoi_annonces' => 'Invia gli annunci editoriali', |
|
| 71 | - 'bouton_radio_non_envoi_annonces' => 'Non inviare annunci', |
|
| 72 | - 'bouton_radio_non_envoi_liste_nouveautes' => 'Non inviare l’elenco delle novità', |
|
| 73 | - 'bouton_recharger_page' => 'ricaricare questa pagina', |
|
| 74 | - 'bouton_telecharger' => 'Upload', |
|
| 75 | - 'bouton_upload' => 'Upload', |
|
| 76 | - 'bouton_valider' => 'Invia', |
|
| 46 | + // B |
|
| 47 | + 'barre_a_accent_grave' => 'Inserire una A maiscola con accento grave', |
|
| 48 | + 'barre_aide' => 'Utilizzare le scorciatoie tipografiche di SPIP per migliorare l\\’impaginazione del testo', |
|
| 49 | + 'barre_e_accent_aigu' => 'Inserire una E maiscola con accento acuto', |
|
| 50 | + 'barre_eo' => 'Inserire una E nell’O', |
|
| 51 | + 'barre_eo_maj' => 'Inserire una E nell’O maiuscola', |
|
| 52 | + 'barre_euro' => 'Inserire il simbolo €', |
|
| 53 | + 'barre_gras' => 'Formattare in {{grassetto}}', |
|
| 54 | + 'barre_guillemets' => 'Porre il testo fra « virgolette basse francesi »', |
|
| 55 | + 'barre_guillemets_simples' => 'Porre il testo fra „virgolette“', |
|
| 56 | + 'barre_intertitre' => 'Trasformare in {{{titolo di paragrafo}}}', |
|
| 57 | + 'barre_italic' => 'Formattare in {corsivo}', |
|
| 58 | + 'barre_lien' => 'Trasformare in un [link ipertestuale->http://...]', |
|
| 59 | + 'barre_lien_input' => 'Indicare l’indirizzo del link (è possibile indicare l’indirizzo Web come http://www.ilmiosito.com o semplicemente indicare il numero di un singolo articolo).', |
|
| 60 | + 'barre_note' => 'Trasformare in [[Nota a fondo pagina]]', |
|
| 61 | + 'barre_paragraphe' => 'Crea un paragrafo', |
|
| 62 | + 'barre_quote' => '<quote>Citare un messaggio</quote>', |
|
| 63 | + 'bouton_changer' => 'Cambia', |
|
| 64 | + 'bouton_chercher' => 'Cerca', |
|
| 65 | + 'bouton_choisir' => 'Scegli', |
|
| 66 | + 'bouton_deplacer' => 'Sposta', |
|
| 67 | + 'bouton_download' => 'Download', |
|
| 68 | + 'bouton_enregistrer' => 'Salva', |
|
| 69 | + 'bouton_radio_desactiver_messagerie_interne' => 'Disattiva la messaggistica interna', |
|
| 70 | + 'bouton_radio_envoi_annonces' => 'Invia gli annunci editoriali', |
|
| 71 | + 'bouton_radio_non_envoi_annonces' => 'Non inviare annunci', |
|
| 72 | + 'bouton_radio_non_envoi_liste_nouveautes' => 'Non inviare l’elenco delle novità', |
|
| 73 | + 'bouton_recharger_page' => 'ricaricare questa pagina', |
|
| 74 | + 'bouton_telecharger' => 'Upload', |
|
| 75 | + 'bouton_upload' => 'Upload', |
|
| 76 | + 'bouton_valider' => 'Invia', |
|
| 77 | 77 | |
| 78 | - // C |
|
| 79 | - 'cal_apresmidi' => 'pomeriggio', |
|
| 80 | - 'cal_jour_entier' => 'giorno intero', |
|
| 81 | - 'cal_matin' => 'mattina', |
|
| 82 | - 'cal_par_jour' => 'calendario giornaliero', |
|
| 83 | - 'cal_par_mois' => 'calendario mensile', |
|
| 84 | - 'cal_par_semaine' => 'calendario settimanale', |
|
| 85 | - 'choix_couleur_interface' => 'colore', |
|
| 86 | - 'choix_interface' => 'scelta dell’interfaccia', |
|
| 87 | - 'colonne' => 'Colonna', |
|
| 88 | - 'confirm_changer_statut' => 'Attenzione, è stato chiesto di modificare lo status di questo elemento. Continuare?', |
|
| 89 | - 'correcte' => 'corretto', |
|
| 78 | + // C |
|
| 79 | + 'cal_apresmidi' => 'pomeriggio', |
|
| 80 | + 'cal_jour_entier' => 'giorno intero', |
|
| 81 | + 'cal_matin' => 'mattina', |
|
| 82 | + 'cal_par_jour' => 'calendario giornaliero', |
|
| 83 | + 'cal_par_mois' => 'calendario mensile', |
|
| 84 | + 'cal_par_semaine' => 'calendario settimanale', |
|
| 85 | + 'choix_couleur_interface' => 'colore', |
|
| 86 | + 'choix_interface' => 'scelta dell’interfaccia', |
|
| 87 | + 'colonne' => 'Colonna', |
|
| 88 | + 'confirm_changer_statut' => 'Attenzione, è stato chiesto di modificare lo status di questo elemento. Continuare?', |
|
| 89 | + 'correcte' => 'corretto', |
|
| 90 | 90 | |
| 91 | - // D |
|
| 92 | - 'date_aujourdhui' => 'oggi', |
|
| 93 | - 'date_avant_jc' => 'a.C.', |
|
| 94 | - 'date_dans' => 'tra @delai@', |
|
| 95 | - 'date_de_mois_1' => '@j@ gennaio', |
|
| 96 | - 'date_de_mois_10' => '@j@ ottobre', |
|
| 97 | - 'date_de_mois_11' => '@j@ novembre', |
|
| 98 | - 'date_de_mois_12' => '@j@ dicembre', |
|
| 99 | - 'date_de_mois_2' => '@j@ febbraio', |
|
| 100 | - 'date_de_mois_3' => '@j@ marzo', |
|
| 101 | - 'date_de_mois_4' => '@j@ aprile', |
|
| 102 | - 'date_de_mois_5' => '@j@ maggio', |
|
| 103 | - 'date_de_mois_6' => '@j@ giugno', |
|
| 104 | - 'date_de_mois_7' => '@j@ luglio', |
|
| 105 | - 'date_de_mois_8' => '@j@ agosto', |
|
| 106 | - 'date_de_mois_9' => '@j@ settembre', |
|
| 107 | - 'date_demain' => 'domani', |
|
| 108 | - 'date_fmt_heures_minutes' => '@h@:@m@', |
|
| 109 | - 'date_fmt_heures_minutes_court' => '@h@h@m@', |
|
| 110 | - 'date_fmt_jour' => '@nomjour@ @jour@', |
|
| 111 | - 'date_fmt_jour_heure' => '@jour@ ore @heure@', |
|
| 112 | - 'date_fmt_jour_heure_debut_fin' => 'Il @jour@ dalle @heure_debut@ alle @heure_fin@', |
|
| 113 | - 'date_fmt_jour_heure_debut_fin_abbr' => 'Il @dtstart@@jour@ dalle @heure_debut@@dtabbr@ alle @dtstart@@heure_fin@@dtend@', |
|
| 114 | - 'date_fmt_jour_mois' => '@jourmois@', |
|
| 115 | - 'date_fmt_jour_mois_annee' => '@jourmois@ @annee@', |
|
| 116 | - 'date_fmt_mois_annee' => '@nommois@ @annee@', |
|
| 117 | - 'date_fmt_nomjour' => '@nomjour@ @date@', |
|
| 118 | - 'date_fmt_nomjour_date' => 'il @nomjour@ @date@', |
|
| 119 | - 'date_fmt_periode' => 'Dal @date_debut@ al @date_fin@', |
|
| 120 | - 'date_fmt_periode_abbr' => 'Dal @dtart@@date_debut@@dtabbr@ al @dtend@@date_fin@@dtabbr@', |
|
| 121 | - 'date_fmt_periode_from' => 'Dal', |
|
| 122 | - 'date_fmt_periode_to' => 'a', |
|
| 123 | - 'date_fmt_saison_annee' => '@saison@ @annee@', |
|
| 124 | - 'date_heures' => 'ore', |
|
| 125 | - 'date_hier' => 'ieri', |
|
| 126 | - 'date_il_y_a' => '@delai@ fa', |
|
| 127 | - 'date_jnum1' => '1', |
|
| 128 | - 'date_jnum10' => '10', |
|
| 129 | - 'date_jnum11' => '11', |
|
| 130 | - 'date_jnum12' => '12', |
|
| 131 | - 'date_jnum13' => '13', |
|
| 132 | - 'date_jnum14' => '14', |
|
| 133 | - 'date_jnum15' => '15', |
|
| 134 | - 'date_jnum16' => '16', |
|
| 135 | - 'date_jnum17' => '17', |
|
| 136 | - 'date_jnum18' => '18', |
|
| 137 | - 'date_jnum19' => '19', |
|
| 138 | - 'date_jnum2' => '2', |
|
| 139 | - 'date_jnum20' => '20', |
|
| 140 | - 'date_jnum21' => '21', |
|
| 141 | - 'date_jnum22' => '22', |
|
| 142 | - 'date_jnum23' => '23', |
|
| 143 | - 'date_jnum24' => '24', |
|
| 144 | - 'date_jnum25' => '25', |
|
| 145 | - 'date_jnum26' => '26', |
|
| 146 | - 'date_jnum27' => '27', |
|
| 147 | - 'date_jnum28' => '28', |
|
| 148 | - 'date_jnum29' => '29', |
|
| 149 | - 'date_jnum3' => '3', |
|
| 150 | - 'date_jnum30' => '30', |
|
| 151 | - 'date_jnum31' => '31', |
|
| 152 | - 'date_jnum4' => '4', |
|
| 153 | - 'date_jnum5' => '5', |
|
| 154 | - 'date_jnum6' => '6', |
|
| 155 | - 'date_jnum7' => '7', |
|
| 156 | - 'date_jnum8' => '8', |
|
| 157 | - 'date_jnum9' => '9', |
|
| 158 | - 'date_jour_1' => 'domenica', |
|
| 159 | - 'date_jour_1_abbr' => 'dom', |
|
| 160 | - 'date_jour_1_initiale' => 'd', |
|
| 161 | - 'date_jour_2' => 'lunedì', |
|
| 162 | - 'date_jour_2_abbr' => 'lun', |
|
| 163 | - 'date_jour_2_initiale' => 'l', |
|
| 164 | - 'date_jour_3' => 'martedì', |
|
| 165 | - 'date_jour_3_abbr' => 'mar', |
|
| 166 | - 'date_jour_3_initiale' => 'm', |
|
| 167 | - 'date_jour_4' => 'mercoledì', |
|
| 168 | - 'date_jour_4_abbr' => 'mer', |
|
| 169 | - 'date_jour_4_initiale' => 'm', |
|
| 170 | - 'date_jour_5' => 'giovedì', |
|
| 171 | - 'date_jour_5_abbr' => 'giov', |
|
| 172 | - 'date_jour_5_initiale' => 'g', |
|
| 173 | - 'date_jour_6' => 'venerdì', |
|
| 174 | - 'date_jour_6_abbr' => 'ven', |
|
| 175 | - 'date_jour_6_initiale' => 'v', |
|
| 176 | - 'date_jour_7' => 'sabato', |
|
| 177 | - 'date_jour_7_abbr' => 'sab', |
|
| 178 | - 'date_jour_7_initiale' => 's', |
|
| 179 | - 'date_jours' => 'giorni', |
|
| 180 | - 'date_minutes' => 'minuti', |
|
| 181 | - 'date_mois' => 'mesi', |
|
| 182 | - 'date_mois_1' => 'Gennaio', |
|
| 183 | - 'date_mois_10' => 'Ottobre', |
|
| 184 | - 'date_mois_10_abbr' => 'ott', |
|
| 185 | - 'date_mois_11' => 'Novembre', |
|
| 186 | - 'date_mois_11_abbr' => 'nov', |
|
| 187 | - 'date_mois_12' => 'Dicembre', |
|
| 188 | - 'date_mois_12_abbr' => 'dic', |
|
| 189 | - 'date_mois_1_abbr' => 'gen', |
|
| 190 | - 'date_mois_2' => 'Febbraio', |
|
| 191 | - 'date_mois_2_abbr' => 'feb', |
|
| 192 | - 'date_mois_3' => 'Marzo', |
|
| 193 | - 'date_mois_3_abbr' => 'mar', |
|
| 194 | - 'date_mois_4' => 'Aprile', |
|
| 195 | - 'date_mois_4_abbr' => 'apr', |
|
| 196 | - 'date_mois_5' => 'Maggio', |
|
| 197 | - 'date_mois_5_abbr' => 'mag', |
|
| 198 | - 'date_mois_6' => 'Giugno', |
|
| 199 | - 'date_mois_6_abbr' => 'giu', |
|
| 200 | - 'date_mois_7' => 'Luglio', |
|
| 201 | - 'date_mois_7_abbr' => 'lug', |
|
| 202 | - 'date_mois_8' => 'Agosto', |
|
| 203 | - 'date_mois_8_abbr' => 'ago', |
|
| 204 | - 'date_mois_9' => 'Settembre', |
|
| 205 | - 'date_mois_9_abbr' => 'set', |
|
| 206 | - 'date_saison_1' => 'inverno', |
|
| 207 | - 'date_saison_2' => 'primavera', |
|
| 208 | - 'date_saison_3' => 'estate', |
|
| 209 | - 'date_saison_4' => 'autunno', |
|
| 210 | - 'date_secondes' => 'secondi', |
|
| 211 | - 'date_semaines' => 'settimane', |
|
| 212 | - 'date_un_mois' => 'mese', |
|
| 213 | - 'date_une_heure' => 'ora', |
|
| 214 | - 'date_une_minute' => 'minuto', |
|
| 215 | - 'date_une_seconde' => 'secondo', |
|
| 216 | - 'date_une_semaine' => 'settimana', |
|
| 217 | - 'dirs_commencer' => ' per iniziare realmente l’installazione', |
|
| 218 | - 'dirs_preliminaire' => 'Prima di iniziare: <b>impostare i diritti di accesso</b>', |
|
| 219 | - 'dirs_probleme_droits' => 'Problema nei diritti di accesso', |
|
| 220 | - 'dirs_repertoires_absents' => '<p><b>Le seguenti cartelle non sono state trovate: </b></p><ul>@bad_dirs@.</ul> |
|
| 91 | + // D |
|
| 92 | + 'date_aujourdhui' => 'oggi', |
|
| 93 | + 'date_avant_jc' => 'a.C.', |
|
| 94 | + 'date_dans' => 'tra @delai@', |
|
| 95 | + 'date_de_mois_1' => '@j@ gennaio', |
|
| 96 | + 'date_de_mois_10' => '@j@ ottobre', |
|
| 97 | + 'date_de_mois_11' => '@j@ novembre', |
|
| 98 | + 'date_de_mois_12' => '@j@ dicembre', |
|
| 99 | + 'date_de_mois_2' => '@j@ febbraio', |
|
| 100 | + 'date_de_mois_3' => '@j@ marzo', |
|
| 101 | + 'date_de_mois_4' => '@j@ aprile', |
|
| 102 | + 'date_de_mois_5' => '@j@ maggio', |
|
| 103 | + 'date_de_mois_6' => '@j@ giugno', |
|
| 104 | + 'date_de_mois_7' => '@j@ luglio', |
|
| 105 | + 'date_de_mois_8' => '@j@ agosto', |
|
| 106 | + 'date_de_mois_9' => '@j@ settembre', |
|
| 107 | + 'date_demain' => 'domani', |
|
| 108 | + 'date_fmt_heures_minutes' => '@h@:@m@', |
|
| 109 | + 'date_fmt_heures_minutes_court' => '@h@h@m@', |
|
| 110 | + 'date_fmt_jour' => '@nomjour@ @jour@', |
|
| 111 | + 'date_fmt_jour_heure' => '@jour@ ore @heure@', |
|
| 112 | + 'date_fmt_jour_heure_debut_fin' => 'Il @jour@ dalle @heure_debut@ alle @heure_fin@', |
|
| 113 | + 'date_fmt_jour_heure_debut_fin_abbr' => 'Il @dtstart@@jour@ dalle @heure_debut@@dtabbr@ alle @dtstart@@heure_fin@@dtend@', |
|
| 114 | + 'date_fmt_jour_mois' => '@jourmois@', |
|
| 115 | + 'date_fmt_jour_mois_annee' => '@jourmois@ @annee@', |
|
| 116 | + 'date_fmt_mois_annee' => '@nommois@ @annee@', |
|
| 117 | + 'date_fmt_nomjour' => '@nomjour@ @date@', |
|
| 118 | + 'date_fmt_nomjour_date' => 'il @nomjour@ @date@', |
|
| 119 | + 'date_fmt_periode' => 'Dal @date_debut@ al @date_fin@', |
|
| 120 | + 'date_fmt_periode_abbr' => 'Dal @dtart@@date_debut@@dtabbr@ al @dtend@@date_fin@@dtabbr@', |
|
| 121 | + 'date_fmt_periode_from' => 'Dal', |
|
| 122 | + 'date_fmt_periode_to' => 'a', |
|
| 123 | + 'date_fmt_saison_annee' => '@saison@ @annee@', |
|
| 124 | + 'date_heures' => 'ore', |
|
| 125 | + 'date_hier' => 'ieri', |
|
| 126 | + 'date_il_y_a' => '@delai@ fa', |
|
| 127 | + 'date_jnum1' => '1', |
|
| 128 | + 'date_jnum10' => '10', |
|
| 129 | + 'date_jnum11' => '11', |
|
| 130 | + 'date_jnum12' => '12', |
|
| 131 | + 'date_jnum13' => '13', |
|
| 132 | + 'date_jnum14' => '14', |
|
| 133 | + 'date_jnum15' => '15', |
|
| 134 | + 'date_jnum16' => '16', |
|
| 135 | + 'date_jnum17' => '17', |
|
| 136 | + 'date_jnum18' => '18', |
|
| 137 | + 'date_jnum19' => '19', |
|
| 138 | + 'date_jnum2' => '2', |
|
| 139 | + 'date_jnum20' => '20', |
|
| 140 | + 'date_jnum21' => '21', |
|
| 141 | + 'date_jnum22' => '22', |
|
| 142 | + 'date_jnum23' => '23', |
|
| 143 | + 'date_jnum24' => '24', |
|
| 144 | + 'date_jnum25' => '25', |
|
| 145 | + 'date_jnum26' => '26', |
|
| 146 | + 'date_jnum27' => '27', |
|
| 147 | + 'date_jnum28' => '28', |
|
| 148 | + 'date_jnum29' => '29', |
|
| 149 | + 'date_jnum3' => '3', |
|
| 150 | + 'date_jnum30' => '30', |
|
| 151 | + 'date_jnum31' => '31', |
|
| 152 | + 'date_jnum4' => '4', |
|
| 153 | + 'date_jnum5' => '5', |
|
| 154 | + 'date_jnum6' => '6', |
|
| 155 | + 'date_jnum7' => '7', |
|
| 156 | + 'date_jnum8' => '8', |
|
| 157 | + 'date_jnum9' => '9', |
|
| 158 | + 'date_jour_1' => 'domenica', |
|
| 159 | + 'date_jour_1_abbr' => 'dom', |
|
| 160 | + 'date_jour_1_initiale' => 'd', |
|
| 161 | + 'date_jour_2' => 'lunedì', |
|
| 162 | + 'date_jour_2_abbr' => 'lun', |
|
| 163 | + 'date_jour_2_initiale' => 'l', |
|
| 164 | + 'date_jour_3' => 'martedì', |
|
| 165 | + 'date_jour_3_abbr' => 'mar', |
|
| 166 | + 'date_jour_3_initiale' => 'm', |
|
| 167 | + 'date_jour_4' => 'mercoledì', |
|
| 168 | + 'date_jour_4_abbr' => 'mer', |
|
| 169 | + 'date_jour_4_initiale' => 'm', |
|
| 170 | + 'date_jour_5' => 'giovedì', |
|
| 171 | + 'date_jour_5_abbr' => 'giov', |
|
| 172 | + 'date_jour_5_initiale' => 'g', |
|
| 173 | + 'date_jour_6' => 'venerdì', |
|
| 174 | + 'date_jour_6_abbr' => 'ven', |
|
| 175 | + 'date_jour_6_initiale' => 'v', |
|
| 176 | + 'date_jour_7' => 'sabato', |
|
| 177 | + 'date_jour_7_abbr' => 'sab', |
|
| 178 | + 'date_jour_7_initiale' => 's', |
|
| 179 | + 'date_jours' => 'giorni', |
|
| 180 | + 'date_minutes' => 'minuti', |
|
| 181 | + 'date_mois' => 'mesi', |
|
| 182 | + 'date_mois_1' => 'Gennaio', |
|
| 183 | + 'date_mois_10' => 'Ottobre', |
|
| 184 | + 'date_mois_10_abbr' => 'ott', |
|
| 185 | + 'date_mois_11' => 'Novembre', |
|
| 186 | + 'date_mois_11_abbr' => 'nov', |
|
| 187 | + 'date_mois_12' => 'Dicembre', |
|
| 188 | + 'date_mois_12_abbr' => 'dic', |
|
| 189 | + 'date_mois_1_abbr' => 'gen', |
|
| 190 | + 'date_mois_2' => 'Febbraio', |
|
| 191 | + 'date_mois_2_abbr' => 'feb', |
|
| 192 | + 'date_mois_3' => 'Marzo', |
|
| 193 | + 'date_mois_3_abbr' => 'mar', |
|
| 194 | + 'date_mois_4' => 'Aprile', |
|
| 195 | + 'date_mois_4_abbr' => 'apr', |
|
| 196 | + 'date_mois_5' => 'Maggio', |
|
| 197 | + 'date_mois_5_abbr' => 'mag', |
|
| 198 | + 'date_mois_6' => 'Giugno', |
|
| 199 | + 'date_mois_6_abbr' => 'giu', |
|
| 200 | + 'date_mois_7' => 'Luglio', |
|
| 201 | + 'date_mois_7_abbr' => 'lug', |
|
| 202 | + 'date_mois_8' => 'Agosto', |
|
| 203 | + 'date_mois_8_abbr' => 'ago', |
|
| 204 | + 'date_mois_9' => 'Settembre', |
|
| 205 | + 'date_mois_9_abbr' => 'set', |
|
| 206 | + 'date_saison_1' => 'inverno', |
|
| 207 | + 'date_saison_2' => 'primavera', |
|
| 208 | + 'date_saison_3' => 'estate', |
|
| 209 | + 'date_saison_4' => 'autunno', |
|
| 210 | + 'date_secondes' => 'secondi', |
|
| 211 | + 'date_semaines' => 'settimane', |
|
| 212 | + 'date_un_mois' => 'mese', |
|
| 213 | + 'date_une_heure' => 'ora', |
|
| 214 | + 'date_une_minute' => 'minuto', |
|
| 215 | + 'date_une_seconde' => 'secondo', |
|
| 216 | + 'date_une_semaine' => 'settimana', |
|
| 217 | + 'dirs_commencer' => ' per iniziare realmente l’installazione', |
|
| 218 | + 'dirs_preliminaire' => 'Prima di iniziare: <b>impostare i diritti di accesso</b>', |
|
| 219 | + 'dirs_probleme_droits' => 'Problema nei diritti di accesso', |
|
| 220 | + 'dirs_repertoires_absents' => '<p><b>Le seguenti cartelle non sono state trovate: </b></p><ul>@bad_dirs@.</ul> |
|
| 221 | 221 | <p>Probabilmente ciò è dovuto a un’errata formattazione delle lettere maiuscole o minuscole. |
| 222 | 222 | Verificare che le maiuscole e le minuscole delle cartelle coincidano con quelle visualizzate |
| 223 | 223 | qui sopra; se non è così, rinominare le cartelle utilizzando il software FTP.</p> |
| 224 | 224 | <p>Una volta effettuata questa correzione, si potrà', |
| 225 | - 'dirs_repertoires_suivants' => '<p><b>Le seguenti cartelle non sono accessibili in scrittura:</b></p> <ul>@bad_dirs@</ul> |
|
| 225 | + 'dirs_repertoires_suivants' => '<p><b>Le seguenti cartelle non sono accessibili in scrittura:</b></p> <ul>@bad_dirs@</ul> |
|
| 226 | 226 | <p>Per risolvere il problema, utilizzare un client FTP per impostare i diritti di accesso |
| 227 | 227 | di ciascuna di queste cartelle. La procedura è spiegata in dettaglio nella guida d’installazione.</p> |
| 228 | 228 | <p>Una volta attribuiti i permessi, si potrà ', |
| 229 | - 'double_occurrence' => 'Doppia occorrenza', |
|
| 229 | + 'double_occurrence' => 'Doppia occorrenza', |
|
| 230 | 230 | |
| 231 | - // E |
|
| 232 | - 'en_cours' => 'in corso', |
|
| 233 | - 'envoi_via_le_site' => 'Invio tramite il sito', |
|
| 234 | - 'erreur' => 'Errore', |
|
| 235 | - 'erreur_balise_non_fermee' => 'ultimo tag non chiuso:', |
|
| 236 | - 'erreur_technique_ajaxform' => 'Ops. Un’errore inaspettato non ti consente di inviare il form. Puoi provare di nuovo.', |
|
| 237 | - 'erreur_technique_enregistrement_champs' => 'Un errore tecnico ha impedito la corretta registrazione del campo @champs@.', |
|
| 238 | - 'erreur_technique_enregistrement_impossible' => 'Un errore tecnico ha impedito la registrazione.', |
|
| 239 | - 'erreur_texte' => 'errore/i', |
|
| 240 | - 'etape' => 'Fase', |
|
| 231 | + // E |
|
| 232 | + 'en_cours' => 'in corso', |
|
| 233 | + 'envoi_via_le_site' => 'Invio tramite il sito', |
|
| 234 | + 'erreur' => 'Errore', |
|
| 235 | + 'erreur_balise_non_fermee' => 'ultimo tag non chiuso:', |
|
| 236 | + 'erreur_technique_ajaxform' => 'Ops. Un’errore inaspettato non ti consente di inviare il form. Puoi provare di nuovo.', |
|
| 237 | + 'erreur_technique_enregistrement_champs' => 'Un errore tecnico ha impedito la corretta registrazione del campo @champs@.', |
|
| 238 | + 'erreur_technique_enregistrement_impossible' => 'Un errore tecnico ha impedito la registrazione.', |
|
| 239 | + 'erreur_texte' => 'errore/i', |
|
| 240 | + 'etape' => 'Fase', |
|
| 241 | 241 | |
| 242 | - // F |
|
| 243 | - 'fichier_introuvable' => 'File @fichier@ non trovato', |
|
| 244 | - 'fonction_introuvable' => 'Funzione @fonction@() non trovata', |
|
| 245 | - 'form_auteur_confirmation' => 'Per cortesia conferma il tuo indirizzo email', |
|
| 246 | - 'form_auteur_email_modifie' => 'Il tuo indirizzo email è stato modificato', |
|
| 247 | - 'form_auteur_envoi_mail_confirmation' => 'Una email di conferma è stata inviata a @email@. È necessario visitare l’URL indicata nel messaggio per convalidare il tuo indirizzo email.', |
|
| 248 | - 'form_auteur_mail_confirmation' => 'Ciao, |
|
| 242 | + // F |
|
| 243 | + 'fichier_introuvable' => 'File @fichier@ non trovato', |
|
| 244 | + 'fonction_introuvable' => 'Funzione @fonction@() non trovata', |
|
| 245 | + 'form_auteur_confirmation' => 'Per cortesia conferma il tuo indirizzo email', |
|
| 246 | + 'form_auteur_email_modifie' => 'Il tuo indirizzo email è stato modificato', |
|
| 247 | + 'form_auteur_envoi_mail_confirmation' => 'Una email di conferma è stata inviata a @email@. È necessario visitare l’URL indicata nel messaggio per convalidare il tuo indirizzo email.', |
|
| 248 | + 'form_auteur_mail_confirmation' => 'Ciao, |
|
| 249 | 249 | |
| 250 | 250 | Hai chiesto di modificare l’indirizzo email. |
| 251 | 251 | Per confermare la tua nuova email, devi connetterti all’ |
@@ -253,346 +253,346 @@ discard block |
||
| 253 | 253 | |
| 254 | 254 | @url@ |
| 255 | 255 | ', |
| 256 | - 'form_deja_inscrit' => 'Sei già iscritto.', |
|
| 257 | - 'form_email_non_valide' => 'L’indirizzo email non è valido.', |
|
| 258 | - 'form_forum_access_refuse' => 'Non hai più accesso a questo sito.', |
|
| 259 | - 'form_forum_bonjour' => 'Buongiorno @nom@,', |
|
| 260 | - 'form_forum_confirmer_email' => 'Puoi confermare il tuo indirizzo email,vai a questo indirizzo: @url_confirm@', |
|
| 261 | - 'form_forum_email_deja_enregistre' => 'Questo indirizzo email è già registrato, puoi dunque utilizzare la tua password abituale.', |
|
| 262 | - 'form_forum_identifiant_mail' => 'Il nuovo codice identificativo (ID) ti è stato appena inviato tramite email.', |
|
| 263 | - 'form_forum_identifiants' => 'Dati personali', |
|
| 264 | - 'form_forum_indiquer_nom_email' => 'Indica qui nome e indirizzo email. L’ID personale ti verrà recapitato tramite email a breve.', |
|
| 265 | - 'form_forum_login' => 'login:', |
|
| 266 | - 'form_forum_message_auto' => '(questo è un messaggio generato automaticamente)', |
|
| 267 | - 'form_forum_pass' => 'password:', |
|
| 268 | - 'form_forum_probleme_mail' => 'Problema di posta: l’ID non può essere inviato.', |
|
| 269 | - 'form_forum_voici1' => 'Ecco i dati per poter partecipare ai forum |
|
| 256 | + 'form_deja_inscrit' => 'Sei già iscritto.', |
|
| 257 | + 'form_email_non_valide' => 'L’indirizzo email non è valido.', |
|
| 258 | + 'form_forum_access_refuse' => 'Non hai più accesso a questo sito.', |
|
| 259 | + 'form_forum_bonjour' => 'Buongiorno @nom@,', |
|
| 260 | + 'form_forum_confirmer_email' => 'Puoi confermare il tuo indirizzo email,vai a questo indirizzo: @url_confirm@', |
|
| 261 | + 'form_forum_email_deja_enregistre' => 'Questo indirizzo email è già registrato, puoi dunque utilizzare la tua password abituale.', |
|
| 262 | + 'form_forum_identifiant_mail' => 'Il nuovo codice identificativo (ID) ti è stato appena inviato tramite email.', |
|
| 263 | + 'form_forum_identifiants' => 'Dati personali', |
|
| 264 | + 'form_forum_indiquer_nom_email' => 'Indica qui nome e indirizzo email. L’ID personale ti verrà recapitato tramite email a breve.', |
|
| 265 | + 'form_forum_login' => 'login:', |
|
| 266 | + 'form_forum_message_auto' => '(questo è un messaggio generato automaticamente)', |
|
| 267 | + 'form_forum_pass' => 'password:', |
|
| 268 | + 'form_forum_probleme_mail' => 'Problema di posta: l’ID non può essere inviato.', |
|
| 269 | + 'form_forum_voici1' => 'Ecco i dati per poter partecipare ai forum |
|
| 270 | 270 | del sito"@nom_site_spip@" (@adresse_site@):', |
| 271 | - 'form_forum_voici2' => 'Ecco i dati per poter proporre degli articoli sul sito |
|
| 271 | + 'form_forum_voici2' => 'Ecco i dati per poter proporre degli articoli sul sito |
|
| 272 | 272 | "@nom_site_spip@" (@adresse_login@):', |
| 273 | - 'form_indiquer_email' => 'Indica il tuo indirizzo email.', |
|
| 274 | - 'form_indiquer_nom' => 'Indica il tuo nome.', |
|
| 275 | - 'form_indiquer_nom_site' => 'Indica il nome del tuo sito.', |
|
| 276 | - 'form_pet_deja_enregistre' => 'Questo sito è già registrato', |
|
| 277 | - 'form_pet_signature_pasprise' => 'La tua adesione non è stata presa in considerazione.', |
|
| 278 | - 'form_prop_confirmer_envoi' => 'Conferma l’invio', |
|
| 279 | - 'form_prop_description' => 'Descrizione/commento', |
|
| 280 | - 'form_prop_enregistre' => 'La tua proposta è stata registrata ed apparirà on line dopo l’approvazione del responsabile del sito.', |
|
| 281 | - 'form_prop_envoyer' => 'Invia un messaggio', |
|
| 282 | - 'form_prop_indiquer_email' => 'Indica un indirizzo email valido', |
|
| 283 | - 'form_prop_indiquer_nom_site' => 'Indica il nome del sito.', |
|
| 284 | - 'form_prop_indiquer_sujet' => 'Indica un argomento', |
|
| 285 | - 'form_prop_message_envoye' => 'Messaggio inviato', |
|
| 286 | - 'form_prop_non_enregistre' => 'La tua proposta non è stata registrata.', |
|
| 287 | - 'form_prop_sujet' => 'Argomento', |
|
| 288 | - 'form_prop_url_site' => 'Indirizzo (URL) del sito', |
|
| 289 | - 'format_date_attendu' => 'Inserire una data nel formato gg/mm/aaaa.', |
|
| 290 | - 'format_date_incorrecte' => 'La data (o il suo formato) non è corretta', |
|
| 291 | - 'format_heure_attendu' => 'Inserire un’ora nel formato hh:mm.', |
|
| 292 | - 'format_heure_incorrecte' => 'L’ora (o il suo formato) non è corretta', |
|
| 293 | - 'forum_non_inscrit' => 'Non sei iscritto, oppure l’indirizzo o la password inseriti non sono corretti.', |
|
| 294 | - 'forum_par_auteur' => 'di @auteur@', |
|
| 295 | - 'forum_titre_erreur' => 'Errore...', |
|
| 273 | + 'form_indiquer_email' => 'Indica il tuo indirizzo email.', |
|
| 274 | + 'form_indiquer_nom' => 'Indica il tuo nome.', |
|
| 275 | + 'form_indiquer_nom_site' => 'Indica il nome del tuo sito.', |
|
| 276 | + 'form_pet_deja_enregistre' => 'Questo sito è già registrato', |
|
| 277 | + 'form_pet_signature_pasprise' => 'La tua adesione non è stata presa in considerazione.', |
|
| 278 | + 'form_prop_confirmer_envoi' => 'Conferma l’invio', |
|
| 279 | + 'form_prop_description' => 'Descrizione/commento', |
|
| 280 | + 'form_prop_enregistre' => 'La tua proposta è stata registrata ed apparirà on line dopo l’approvazione del responsabile del sito.', |
|
| 281 | + 'form_prop_envoyer' => 'Invia un messaggio', |
|
| 282 | + 'form_prop_indiquer_email' => 'Indica un indirizzo email valido', |
|
| 283 | + 'form_prop_indiquer_nom_site' => 'Indica il nome del sito.', |
|
| 284 | + 'form_prop_indiquer_sujet' => 'Indica un argomento', |
|
| 285 | + 'form_prop_message_envoye' => 'Messaggio inviato', |
|
| 286 | + 'form_prop_non_enregistre' => 'La tua proposta non è stata registrata.', |
|
| 287 | + 'form_prop_sujet' => 'Argomento', |
|
| 288 | + 'form_prop_url_site' => 'Indirizzo (URL) del sito', |
|
| 289 | + 'format_date_attendu' => 'Inserire una data nel formato gg/mm/aaaa.', |
|
| 290 | + 'format_date_incorrecte' => 'La data (o il suo formato) non è corretta', |
|
| 291 | + 'format_heure_attendu' => 'Inserire un’ora nel formato hh:mm.', |
|
| 292 | + 'format_heure_incorrecte' => 'L’ora (o il suo formato) non è corretta', |
|
| 293 | + 'forum_non_inscrit' => 'Non sei iscritto, oppure l’indirizzo o la password inseriti non sono corretti.', |
|
| 294 | + 'forum_par_auteur' => 'di @auteur@', |
|
| 295 | + 'forum_titre_erreur' => 'Errore...', |
|
| 296 | 296 | |
| 297 | - // I |
|
| 298 | - 'ical_texte_rss_articles' => 'Il file di "backend" degli articoli di questo sito si trova al seguente indirizzo:', |
|
| 299 | - 'ical_texte_rss_articles2' => 'È anche possibile ottenere un file di "backend" per gli articoli di una singola rubrica:', |
|
| 300 | - 'ical_texte_rss_breves' => 'Inoltre esiste un file per l’insieme delle brevi del sito. Precisando un numero di rubrica ci si può limitare alle brevi in essa contenute.', |
|
| 301 | - 'icone_a_suivre' => 'Pannello di controllo', |
|
| 302 | - 'icone_admin_site' => 'Amministrazione del sito', |
|
| 303 | - 'icone_agenda' => 'Agenda', |
|
| 304 | - 'icone_aide_ligne' => 'Guida in linea', |
|
| 305 | - 'icone_articles' => 'Articoli', |
|
| 306 | - 'icone_auteurs' => 'Autori', |
|
| 307 | - 'icone_brouteur' => 'Navigazione rapida', |
|
| 308 | - 'icone_configuration_site' => 'Configurazione del sito', |
|
| 309 | - 'icone_configurer_site' => 'Configura il sito', |
|
| 310 | - 'icone_creer_nouvel_auteur' => 'Crea un nuovo autore', |
|
| 311 | - 'icone_creer_rubrique' => 'Crea una rubrica', |
|
| 312 | - 'icone_creer_sous_rubrique' => 'Crea una sottorubrica', |
|
| 313 | - 'icone_deconnecter' => 'Esci', |
|
| 314 | - 'icone_discussions' => 'Discussioni', |
|
| 315 | - 'icone_doc_rubrique' => 'Documenti delle rubriche', |
|
| 316 | - 'icone_ecrire_article' => 'Scrivi un articolo', |
|
| 317 | - 'icone_edition_site' => 'Redazione del sito', |
|
| 318 | - 'icone_gestion_langues' => 'Gestione delle lingue', |
|
| 319 | - 'icone_informations_personnelles' => 'Dati personali', |
|
| 320 | - 'icone_interface_complet' => 'Interfaccia completa', |
|
| 321 | - 'icone_interface_simple' => 'Interfaccia semplificata', |
|
| 322 | - 'icone_maintenance_site' => 'Manutenzione tecnica', |
|
| 323 | - 'icone_messagerie_personnelle' => 'Messaggi personali', |
|
| 324 | - 'icone_repartition_debut' => 'Mostra la ripartizione dall’inizio', |
|
| 325 | - 'icone_rubriques' => 'Rubriche', |
|
| 326 | - 'icone_sauver_site' => 'Backup del sito', |
|
| 327 | - 'icone_site_entier' => 'Tutto il sito', |
|
| 328 | - 'icone_sites_references' => 'Siti repertoriati', |
|
| 329 | - 'icone_statistiques' => 'Statistiche del sito', |
|
| 330 | - 'icone_suivi_activite' => 'Monitorare l’attività del sito', |
|
| 331 | - 'icone_suivi_actualite' => 'Evoluzione del sito', |
|
| 332 | - 'icone_suivi_pettions' => 'Gestione delle petizioni', |
|
| 333 | - 'icone_suivi_revisions' => 'Modifiche agli articoli', |
|
| 334 | - 'icone_supprimer_document' => 'Elimina il documento', |
|
| 335 | - 'icone_supprimer_image' => 'Elimina l’immagine', |
|
| 336 | - 'icone_tous_articles' => 'Tutti i tuoi articoli', |
|
| 337 | - 'icone_tous_auteur' => 'Tutti gli autori', |
|
| 338 | - 'icone_tous_visiteur' => 'Tutti i visitatori', |
|
| 339 | - 'icone_visiter_site' => 'Visita il sito', |
|
| 340 | - 'icone_voir_en_ligne' => 'Vedi on line', |
|
| 341 | - 'img_indisponible' => 'immagine non disponibile', |
|
| 342 | - 'impossible' => 'impossibile', |
|
| 343 | - 'info_a_suivre' => 'PANNELLO DI CONTROLLO »', |
|
| 344 | - 'info_acces_interdit' => 'Accesso vietato', |
|
| 345 | - 'info_acces_refuse' => 'Accesso rifiutato', |
|
| 346 | - 'info_action' => 'Azione: @action@', |
|
| 347 | - 'info_administrer_rubriques' => 'Puoi amministrare questa rubrica e le relative sottorubriche', |
|
| 348 | - 'info_adresse_non_indiquee' => 'Non hai indicato l’indirizzo da testare!', |
|
| 349 | - 'info_aide' => 'AIUTO:', |
|
| 350 | - 'info_ajouter_mot' => 'Aggiungi questa parola', |
|
| 351 | - 'info_annonce' => 'ANNUNCIO', |
|
| 352 | - 'info_annonces_generales' => 'Annunci generali:', |
|
| 353 | - 'info_article_propose' => 'Articolo proposto', |
|
| 354 | - 'info_article_publie' => 'Articolo pubblicato', |
|
| 355 | - 'info_article_redaction' => 'Articolo in corso di redazione', |
|
| 356 | - 'info_article_refuse' => 'Articolo rifiutato', |
|
| 357 | - 'info_article_supprime' => 'Articolo eliminato', |
|
| 358 | - 'info_articles' => 'Articoli', |
|
| 359 | - 'info_articles_a_valider' => 'Articoli da convalidare', |
|
| 360 | - 'info_articles_nb' => '@nb@ articoli', |
|
| 361 | - 'info_articles_proposes' => 'Articoli proposti', |
|
| 362 | - 'info_articles_un' => '1 articolo', |
|
| 363 | - 'info_auteurs_nombre' => 'autore(i):', |
|
| 364 | - 'info_authentification_ftp' => 'Autenticazione (via FTP).', |
|
| 365 | - 'info_breves_2' => 'brevi', |
|
| 366 | - 'info_breves_nb' => '@nb@ notizie', |
|
| 367 | - 'info_breves_un' => '1 notizia', |
|
| 368 | - 'info_connexion_refusee' => 'Connessione rifiutata', |
|
| 369 | - 'info_contact_developpeur' => 'Contatta un programmatore.', |
|
| 370 | - 'info_contenance' => 'Questo sito contiene:', |
|
| 371 | - 'info_contribution' => 'contributi dei forum', |
|
| 372 | - 'info_copyright' => '@spip@ è un software libero distribuito @lien_gpl@.', |
|
| 373 | - 'info_copyright_doc' => 'Per maggiori informazioni, vedi il sito <a href="@spipnet@">@spipnet_affiche@</a>.', |
|
| 374 | - 'info_copyright_gpl' => 'sotto licenza GPL', |
|
| 375 | - 'info_cours_edition' => 'Articoli in fase di redazione', |
|
| 376 | - 'info_creer_repertoire' => 'Creare un file o una cartella chiamata:', |
|
| 377 | - 'info_creer_repertoire_2' => 'all’interno della sottocartella <b>@repertoire@</b>, poi:', |
|
| 378 | - 'info_creer_vignette' => 'creazione automatica dell’anteprima', |
|
| 379 | - 'info_creerdansrubrique_non_autorise' => 'Non si dispone di diritti sufficienti per creare contenuti in questa rubrica', |
|
| 380 | - 'info_deplier' => 'Espandi', |
|
| 381 | - 'info_descriptif_nombre' => 'descrizione(i):', |
|
| 382 | - 'info_description' => 'Descrizione:', |
|
| 383 | - 'info_description_2' => 'Descrizione:', |
|
| 384 | - 'info_dimension' => 'Dimensioni:', |
|
| 385 | - 'info_documents_nb' => '@nb@ documenti', |
|
| 386 | - 'info_documents_un' => '1 documento', |
|
| 387 | - 'info_ecire_message_prive' => 'Scrivi un messaggio privato', |
|
| 388 | - 'info_email_invalide' => 'Indirizzo email non valido.', |
|
| 389 | - 'info_en_cours_validation' => 'I tuoi articoli in corso di redazione', |
|
| 390 | - 'info_en_ligne' => 'Attualmente on line:', |
|
| 391 | - 'info_envoyer_message_prive' => 'Invia un messaggio privato a questo autore', |
|
| 392 | - 'info_erreur_requete' => 'Errore nella richiesta: ', |
|
| 393 | - 'info_erreur_squelette2' => 'Nessun modello di layout <b>@fichier@</b> trovato...', |
|
| 394 | - 'info_erreur_systeme' => 'Errore di sistema (errno @errsys@)', |
|
| 395 | - 'info_erreur_systeme2' => 'Il disco rigido potrebbe essere pieno o la base dati danneggiata.<br /> |
|
| 297 | + // I |
|
| 298 | + 'ical_texte_rss_articles' => 'Il file di "backend" degli articoli di questo sito si trova al seguente indirizzo:', |
|
| 299 | + 'ical_texte_rss_articles2' => 'È anche possibile ottenere un file di "backend" per gli articoli di una singola rubrica:', |
|
| 300 | + 'ical_texte_rss_breves' => 'Inoltre esiste un file per l’insieme delle brevi del sito. Precisando un numero di rubrica ci si può limitare alle brevi in essa contenute.', |
|
| 301 | + 'icone_a_suivre' => 'Pannello di controllo', |
|
| 302 | + 'icone_admin_site' => 'Amministrazione del sito', |
|
| 303 | + 'icone_agenda' => 'Agenda', |
|
| 304 | + 'icone_aide_ligne' => 'Guida in linea', |
|
| 305 | + 'icone_articles' => 'Articoli', |
|
| 306 | + 'icone_auteurs' => 'Autori', |
|
| 307 | + 'icone_brouteur' => 'Navigazione rapida', |
|
| 308 | + 'icone_configuration_site' => 'Configurazione del sito', |
|
| 309 | + 'icone_configurer_site' => 'Configura il sito', |
|
| 310 | + 'icone_creer_nouvel_auteur' => 'Crea un nuovo autore', |
|
| 311 | + 'icone_creer_rubrique' => 'Crea una rubrica', |
|
| 312 | + 'icone_creer_sous_rubrique' => 'Crea una sottorubrica', |
|
| 313 | + 'icone_deconnecter' => 'Esci', |
|
| 314 | + 'icone_discussions' => 'Discussioni', |
|
| 315 | + 'icone_doc_rubrique' => 'Documenti delle rubriche', |
|
| 316 | + 'icone_ecrire_article' => 'Scrivi un articolo', |
|
| 317 | + 'icone_edition_site' => 'Redazione del sito', |
|
| 318 | + 'icone_gestion_langues' => 'Gestione delle lingue', |
|
| 319 | + 'icone_informations_personnelles' => 'Dati personali', |
|
| 320 | + 'icone_interface_complet' => 'Interfaccia completa', |
|
| 321 | + 'icone_interface_simple' => 'Interfaccia semplificata', |
|
| 322 | + 'icone_maintenance_site' => 'Manutenzione tecnica', |
|
| 323 | + 'icone_messagerie_personnelle' => 'Messaggi personali', |
|
| 324 | + 'icone_repartition_debut' => 'Mostra la ripartizione dall’inizio', |
|
| 325 | + 'icone_rubriques' => 'Rubriche', |
|
| 326 | + 'icone_sauver_site' => 'Backup del sito', |
|
| 327 | + 'icone_site_entier' => 'Tutto il sito', |
|
| 328 | + 'icone_sites_references' => 'Siti repertoriati', |
|
| 329 | + 'icone_statistiques' => 'Statistiche del sito', |
|
| 330 | + 'icone_suivi_activite' => 'Monitorare l’attività del sito', |
|
| 331 | + 'icone_suivi_actualite' => 'Evoluzione del sito', |
|
| 332 | + 'icone_suivi_pettions' => 'Gestione delle petizioni', |
|
| 333 | + 'icone_suivi_revisions' => 'Modifiche agli articoli', |
|
| 334 | + 'icone_supprimer_document' => 'Elimina il documento', |
|
| 335 | + 'icone_supprimer_image' => 'Elimina l’immagine', |
|
| 336 | + 'icone_tous_articles' => 'Tutti i tuoi articoli', |
|
| 337 | + 'icone_tous_auteur' => 'Tutti gli autori', |
|
| 338 | + 'icone_tous_visiteur' => 'Tutti i visitatori', |
|
| 339 | + 'icone_visiter_site' => 'Visita il sito', |
|
| 340 | + 'icone_voir_en_ligne' => 'Vedi on line', |
|
| 341 | + 'img_indisponible' => 'immagine non disponibile', |
|
| 342 | + 'impossible' => 'impossibile', |
|
| 343 | + 'info_a_suivre' => 'PANNELLO DI CONTROLLO »', |
|
| 344 | + 'info_acces_interdit' => 'Accesso vietato', |
|
| 345 | + 'info_acces_refuse' => 'Accesso rifiutato', |
|
| 346 | + 'info_action' => 'Azione: @action@', |
|
| 347 | + 'info_administrer_rubriques' => 'Puoi amministrare questa rubrica e le relative sottorubriche', |
|
| 348 | + 'info_adresse_non_indiquee' => 'Non hai indicato l’indirizzo da testare!', |
|
| 349 | + 'info_aide' => 'AIUTO:', |
|
| 350 | + 'info_ajouter_mot' => 'Aggiungi questa parola', |
|
| 351 | + 'info_annonce' => 'ANNUNCIO', |
|
| 352 | + 'info_annonces_generales' => 'Annunci generali:', |
|
| 353 | + 'info_article_propose' => 'Articolo proposto', |
|
| 354 | + 'info_article_publie' => 'Articolo pubblicato', |
|
| 355 | + 'info_article_redaction' => 'Articolo in corso di redazione', |
|
| 356 | + 'info_article_refuse' => 'Articolo rifiutato', |
|
| 357 | + 'info_article_supprime' => 'Articolo eliminato', |
|
| 358 | + 'info_articles' => 'Articoli', |
|
| 359 | + 'info_articles_a_valider' => 'Articoli da convalidare', |
|
| 360 | + 'info_articles_nb' => '@nb@ articoli', |
|
| 361 | + 'info_articles_proposes' => 'Articoli proposti', |
|
| 362 | + 'info_articles_un' => '1 articolo', |
|
| 363 | + 'info_auteurs_nombre' => 'autore(i):', |
|
| 364 | + 'info_authentification_ftp' => 'Autenticazione (via FTP).', |
|
| 365 | + 'info_breves_2' => 'brevi', |
|
| 366 | + 'info_breves_nb' => '@nb@ notizie', |
|
| 367 | + 'info_breves_un' => '1 notizia', |
|
| 368 | + 'info_connexion_refusee' => 'Connessione rifiutata', |
|
| 369 | + 'info_contact_developpeur' => 'Contatta un programmatore.', |
|
| 370 | + 'info_contenance' => 'Questo sito contiene:', |
|
| 371 | + 'info_contribution' => 'contributi dei forum', |
|
| 372 | + 'info_copyright' => '@spip@ è un software libero distribuito @lien_gpl@.', |
|
| 373 | + 'info_copyright_doc' => 'Per maggiori informazioni, vedi il sito <a href="@spipnet@">@spipnet_affiche@</a>.', |
|
| 374 | + 'info_copyright_gpl' => 'sotto licenza GPL', |
|
| 375 | + 'info_cours_edition' => 'Articoli in fase di redazione', |
|
| 376 | + 'info_creer_repertoire' => 'Creare un file o una cartella chiamata:', |
|
| 377 | + 'info_creer_repertoire_2' => 'all’interno della sottocartella <b>@repertoire@</b>, poi:', |
|
| 378 | + 'info_creer_vignette' => 'creazione automatica dell’anteprima', |
|
| 379 | + 'info_creerdansrubrique_non_autorise' => 'Non si dispone di diritti sufficienti per creare contenuti in questa rubrica', |
|
| 380 | + 'info_deplier' => 'Espandi', |
|
| 381 | + 'info_descriptif_nombre' => 'descrizione(i):', |
|
| 382 | + 'info_description' => 'Descrizione:', |
|
| 383 | + 'info_description_2' => 'Descrizione:', |
|
| 384 | + 'info_dimension' => 'Dimensioni:', |
|
| 385 | + 'info_documents_nb' => '@nb@ documenti', |
|
| 386 | + 'info_documents_un' => '1 documento', |
|
| 387 | + 'info_ecire_message_prive' => 'Scrivi un messaggio privato', |
|
| 388 | + 'info_email_invalide' => 'Indirizzo email non valido.', |
|
| 389 | + 'info_en_cours_validation' => 'I tuoi articoli in corso di redazione', |
|
| 390 | + 'info_en_ligne' => 'Attualmente on line:', |
|
| 391 | + 'info_envoyer_message_prive' => 'Invia un messaggio privato a questo autore', |
|
| 392 | + 'info_erreur_requete' => 'Errore nella richiesta: ', |
|
| 393 | + 'info_erreur_squelette2' => 'Nessun modello di layout <b>@fichier@</b> trovato...', |
|
| 394 | + 'info_erreur_systeme' => 'Errore di sistema (errno @errsys@)', |
|
| 395 | + 'info_erreur_systeme2' => 'Il disco rigido potrebbe essere pieno o la base dati danneggiata.<br /> |
|
| 396 | 396 | <span style="color:red;">Tenta di <a href=\'@script@\'>ripristinare la base dati</a>, o contatta il tuo hoster.</span>', |
| 397 | - 'info_fini' => 'Finito!', |
|
| 398 | - 'info_format_image' => 'Formati di file immagine utilizzabili per la creazione delle etichette: @gd_formats@.', |
|
| 399 | - 'info_format_non_defini' => 'formato non definito', |
|
| 400 | - 'info_grand_ecran' => 'Layout per monitor grandi', |
|
| 401 | - 'info_image_aide' => 'AIUTO', |
|
| 402 | - 'info_image_process_titre' => 'Metodo per generare thumbnail', |
|
| 403 | - 'info_impossible_lire_page' => '<b>Errore!</b> Impossibile leggere la pagina <tt><html>@test_proxy@</html></tt> attraverso il proxy ', |
|
| 404 | - 'info_installation_systeme_publication' => 'Installazione del sistema di pubblicazione...', |
|
| 405 | - 'info_installer_documents' => 'È possibile installare automaticamente tutti i documenti contenuti nella cartella @upload@.', |
|
| 406 | - 'info_installer_ftp' => 'In qualità di amministratore, puoi installare file (via FTP) nella cartella @upload@ per poi selezionarli direttamente.', |
|
| 407 | - 'info_installer_images' => 'È possibile installare delle immagini in formato JPEG, GIF e PNG.', |
|
| 408 | - 'info_installer_images_dossier' => 'Installare delle immagini nella cartella @upload@ per poterle selezionare direttamente.', |
|
| 409 | - 'info_interface_complete' => 'Interfaccia completa', |
|
| 410 | - 'info_interface_simple' => 'Interfaccia semplificata', |
|
| 411 | - 'info_joindre_document_article' => 'Puoi allegare a questo articolo dei documenti del tipo', |
|
| 412 | - 'info_joindre_document_rubrique' => 'Puoi aggiungere a questa rubrica documenti del tipo', |
|
| 413 | - 'info_joindre_documents_article' => 'Puoi allegare all’articolo documenti del tipo: ', |
|
| 414 | - 'info_l_article' => 'l’articolo', |
|
| 415 | - 'info_la_breve' => 'la breve', |
|
| 416 | - 'info_la_rubrique' => 'la sezione', |
|
| 417 | - 'info_langue_principale' => 'Lingua predefinita del sito', |
|
| 418 | - 'info_largeur_vignette' => '@largeur_vignette@ x @hauteur_vignette@ pixel', |
|
| 419 | - 'info_les_auteurs_1' => 'di @les_auteurs@ ', |
|
| 420 | - 'info_logo_format_interdit' => 'Solo i logo in formato @formats@ sono permessi.', |
|
| 421 | - 'info_logo_max_poids' => 'I logo devono obbligatoriamente avere una dimensione inferiore a @maxi@ (questo file è di @actuel@).', |
|
| 422 | - 'info_mail_fournisseur' => '[email protected]', |
|
| 423 | - 'info_message_2' => 'MESSAGGIO', |
|
| 424 | - 'info_message_supprime' => 'MESSAGGIO ELIMINATO', |
|
| 425 | - 'info_messages_nb' => '@nb@ messaggi', |
|
| 426 | - 'info_messages_un' => '1 messaggio', |
|
| 427 | - 'info_mise_en_ligne' => 'Data di pubblicazione on line:', |
|
| 428 | - 'info_modification_parametres_securite' => 'modifiche dei parametri di sicurezza', |
|
| 429 | - 'info_mois_courant' => 'Durante il mese:', |
|
| 430 | - 'info_mot_cle_ajoute' => 'La seguente parola chiave è stata aggiunta a', |
|
| 431 | - 'info_multi_herit' => 'Lingua predefinita', |
|
| 432 | - 'info_multi_langues_soulignees' => 'Le <u>lingue sottolineate</u> hanno la traduzione parziale o totale per tutti i testi dell’interfaccia. Se si seleziona una di queste lingue, molti elementi del sito pubblico (date, form) verranno tradotti automaticamente. Per le lingue che non sono sottolineate, invece, tali elementi rimarranno nella lingua principale del sito.', |
|
| 433 | - 'info_multilinguisme' => 'Multilinguismo', |
|
| 434 | - 'info_nom_non_utilisateurs_connectes' => 'Il tuo nome non appare nella lista degli utenti collegati.', |
|
| 435 | - 'info_nom_utilisateurs_connectes' => 'Il tuo nome è visibile nella lista degli utenti collegati.', |
|
| 436 | - 'info_nombre_en_ligne' => 'Attualmente on line:', |
|
| 437 | - 'info_non_resultat' => 'Nessun risultato per "@cherche_mot@"', |
|
| 438 | - 'info_non_utilisation_messagerie' => 'Il sistema di messaggistica interna di questo sito non viene utilizzato.', |
|
| 439 | - 'info_nouveau_message' => 'HAI UN NUOVO MESSAGGIO', |
|
| 440 | - 'info_nouveaux_messages' => 'HAI @total_messages@ NUOVI MESSAGGI', |
|
| 441 | - 'info_numero_abbreviation' => 'N. ', |
|
| 442 | - 'info_obligatoire' => 'Questa informazione è obbligatoria', |
|
| 443 | - 'info_page_actuelle' => 'Pagina corrente', |
|
| 444 | - 'info_pense_bete' => 'MEMO', |
|
| 445 | - 'info_petit_ecran' => 'Layout per monitor piccoli', |
|
| 446 | - 'info_petition_close' => 'Petizione chiusa', |
|
| 447 | - 'info_pixels' => 'pixels', |
|
| 448 | - 'info_plusieurs_mots_trouves' => 'Numerose parole chiave trovate per "@cherche_mot@":', |
|
| 449 | - 'info_portfolio_automatique' => 'Portfolio automatico:', |
|
| 450 | - 'info_premier_resultat' => '[@debut_limit@ primi risultati su @total@]', |
|
| 451 | - 'info_premier_resultat_sur' => '[@debut_limit@ primi risultati su @total@]', |
|
| 452 | - 'info_propose_1' => '[@nom_site_spip@] Propone: @titre@', |
|
| 453 | - 'info_propose_2' => 'Articolo proposto |
|
| 397 | + 'info_fini' => 'Finito!', |
|
| 398 | + 'info_format_image' => 'Formati di file immagine utilizzabili per la creazione delle etichette: @gd_formats@.', |
|
| 399 | + 'info_format_non_defini' => 'formato non definito', |
|
| 400 | + 'info_grand_ecran' => 'Layout per monitor grandi', |
|
| 401 | + 'info_image_aide' => 'AIUTO', |
|
| 402 | + 'info_image_process_titre' => 'Metodo per generare thumbnail', |
|
| 403 | + 'info_impossible_lire_page' => '<b>Errore!</b> Impossibile leggere la pagina <tt><html>@test_proxy@</html></tt> attraverso il proxy ', |
|
| 404 | + 'info_installation_systeme_publication' => 'Installazione del sistema di pubblicazione...', |
|
| 405 | + 'info_installer_documents' => 'È possibile installare automaticamente tutti i documenti contenuti nella cartella @upload@.', |
|
| 406 | + 'info_installer_ftp' => 'In qualità di amministratore, puoi installare file (via FTP) nella cartella @upload@ per poi selezionarli direttamente.', |
|
| 407 | + 'info_installer_images' => 'È possibile installare delle immagini in formato JPEG, GIF e PNG.', |
|
| 408 | + 'info_installer_images_dossier' => 'Installare delle immagini nella cartella @upload@ per poterle selezionare direttamente.', |
|
| 409 | + 'info_interface_complete' => 'Interfaccia completa', |
|
| 410 | + 'info_interface_simple' => 'Interfaccia semplificata', |
|
| 411 | + 'info_joindre_document_article' => 'Puoi allegare a questo articolo dei documenti del tipo', |
|
| 412 | + 'info_joindre_document_rubrique' => 'Puoi aggiungere a questa rubrica documenti del tipo', |
|
| 413 | + 'info_joindre_documents_article' => 'Puoi allegare all’articolo documenti del tipo: ', |
|
| 414 | + 'info_l_article' => 'l’articolo', |
|
| 415 | + 'info_la_breve' => 'la breve', |
|
| 416 | + 'info_la_rubrique' => 'la sezione', |
|
| 417 | + 'info_langue_principale' => 'Lingua predefinita del sito', |
|
| 418 | + 'info_largeur_vignette' => '@largeur_vignette@ x @hauteur_vignette@ pixel', |
|
| 419 | + 'info_les_auteurs_1' => 'di @les_auteurs@ ', |
|
| 420 | + 'info_logo_format_interdit' => 'Solo i logo in formato @formats@ sono permessi.', |
|
| 421 | + 'info_logo_max_poids' => 'I logo devono obbligatoriamente avere una dimensione inferiore a @maxi@ (questo file è di @actuel@).', |
|
| 422 | + 'info_mail_fournisseur' => '[email protected]', |
|
| 423 | + 'info_message_2' => 'MESSAGGIO', |
|
| 424 | + 'info_message_supprime' => 'MESSAGGIO ELIMINATO', |
|
| 425 | + 'info_messages_nb' => '@nb@ messaggi', |
|
| 426 | + 'info_messages_un' => '1 messaggio', |
|
| 427 | + 'info_mise_en_ligne' => 'Data di pubblicazione on line:', |
|
| 428 | + 'info_modification_parametres_securite' => 'modifiche dei parametri di sicurezza', |
|
| 429 | + 'info_mois_courant' => 'Durante il mese:', |
|
| 430 | + 'info_mot_cle_ajoute' => 'La seguente parola chiave è stata aggiunta a', |
|
| 431 | + 'info_multi_herit' => 'Lingua predefinita', |
|
| 432 | + 'info_multi_langues_soulignees' => 'Le <u>lingue sottolineate</u> hanno la traduzione parziale o totale per tutti i testi dell’interfaccia. Se si seleziona una di queste lingue, molti elementi del sito pubblico (date, form) verranno tradotti automaticamente. Per le lingue che non sono sottolineate, invece, tali elementi rimarranno nella lingua principale del sito.', |
|
| 433 | + 'info_multilinguisme' => 'Multilinguismo', |
|
| 434 | + 'info_nom_non_utilisateurs_connectes' => 'Il tuo nome non appare nella lista degli utenti collegati.', |
|
| 435 | + 'info_nom_utilisateurs_connectes' => 'Il tuo nome è visibile nella lista degli utenti collegati.', |
|
| 436 | + 'info_nombre_en_ligne' => 'Attualmente on line:', |
|
| 437 | + 'info_non_resultat' => 'Nessun risultato per "@cherche_mot@"', |
|
| 438 | + 'info_non_utilisation_messagerie' => 'Il sistema di messaggistica interna di questo sito non viene utilizzato.', |
|
| 439 | + 'info_nouveau_message' => 'HAI UN NUOVO MESSAGGIO', |
|
| 440 | + 'info_nouveaux_messages' => 'HAI @total_messages@ NUOVI MESSAGGI', |
|
| 441 | + 'info_numero_abbreviation' => 'N. ', |
|
| 442 | + 'info_obligatoire' => 'Questa informazione è obbligatoria', |
|
| 443 | + 'info_page_actuelle' => 'Pagina corrente', |
|
| 444 | + 'info_pense_bete' => 'MEMO', |
|
| 445 | + 'info_petit_ecran' => 'Layout per monitor piccoli', |
|
| 446 | + 'info_petition_close' => 'Petizione chiusa', |
|
| 447 | + 'info_pixels' => 'pixels', |
|
| 448 | + 'info_plusieurs_mots_trouves' => 'Numerose parole chiave trovate per "@cherche_mot@":', |
|
| 449 | + 'info_portfolio_automatique' => 'Portfolio automatico:', |
|
| 450 | + 'info_premier_resultat' => '[@debut_limit@ primi risultati su @total@]', |
|
| 451 | + 'info_premier_resultat_sur' => '[@debut_limit@ primi risultati su @total@]', |
|
| 452 | + 'info_propose_1' => '[@nom_site_spip@] Propone: @titre@', |
|
| 453 | + 'info_propose_2' => 'Articolo proposto |
|
| 454 | 454 | ---------------', |
| 455 | - 'info_propose_3' => 'L’articolo "@titre@" è proposto per la pubblicazione', |
|
| 456 | - 'info_propose_4' => 'Sei invitato a consultare e a dare la tua opinione ', |
|
| 457 | - 'info_propose_5' => 'nel forum annesso. |
|
| 455 | + 'info_propose_3' => 'L’articolo "@titre@" è proposto per la pubblicazione', |
|
| 456 | + 'info_propose_4' => 'Sei invitato a consultare e a dare la tua opinione ', |
|
| 457 | + 'info_propose_5' => 'nel forum annesso. |
|
| 458 | 458 | |
| 459 | 459 | È disponibile all’indirizzo:', |
| 460 | - 'info_publie_01' => 'L’articolo "@titre@" è stato convalidato da @connect_nom@.', |
|
| 461 | - 'info_publie_1' => '[@nom_site_spip@] PUBBLICA: @titre@', |
|
| 462 | - 'info_publie_2' => 'Articolo pubblicato |
|
| 460 | + 'info_publie_01' => 'L’articolo "@titre@" è stato convalidato da @connect_nom@.', |
|
| 461 | + 'info_publie_1' => '[@nom_site_spip@] PUBBLICA: @titre@', |
|
| 462 | + 'info_publie_2' => 'Articolo pubblicato |
|
| 463 | 463 | --------------', |
| 464 | - 'info_rechercher' => 'Ricerca', |
|
| 465 | - 'info_rechercher_02' => 'Cerca:', |
|
| 466 | - 'info_remplacer_vignette' => 'Sostituire l’icona predefinita con una personalizzata:', |
|
| 467 | - 'info_rubriques_nb' => '@nb@ sezioni', |
|
| 468 | - 'info_rubriques_un' => '1 sezione', |
|
| 469 | - 'info_sans_titre_2' => 'senza titolo', |
|
| 470 | - 'info_selectionner_fichier' => 'Puoi selezionare un file della cartella @upload@', |
|
| 471 | - 'info_selectionner_fichier_2' => 'Seleziona un file:', |
|
| 472 | - 'info_sites_nb' => '@nb@ siti', |
|
| 473 | - 'info_sites_un' => '1 sito', |
|
| 474 | - 'info_supprimer_vignette' => 'Cancella l’immagine', |
|
| 475 | - 'info_symbole_bleu' => 'Il simbolo <b>blu</b> indica un <b>memo</b>: cioè un messaggio ad uso personale.', |
|
| 476 | - 'info_symbole_jaune' => 'Il simbolo <b>giallo</b> indica un <b>annuncio a tutti i redattori</b>: modificabile da tutti gli amministratori e visibile da tutti i redattori.', |
|
| 477 | - 'info_symbole_vert' => 'Il simbolo <b>verde</b> indica i <b>messaggi scambiati con altri utenti </b> del sito.', |
|
| 478 | - 'info_telecharger_nouveau_logo' => 'Upload di un nuovo logo:', |
|
| 479 | - 'info_telecharger_ordinateur' => 'Upload dal tuo computer:', |
|
| 480 | - 'info_tous_resultats_enregistres' => '[tutti i risultati sono salvati]', |
|
| 481 | - 'info_tout_afficher' => 'Visualizza tutto', |
|
| 482 | - 'info_travaux_texte' => 'Questo sito non è stato ancora configurato. Torna più tardi...', |
|
| 483 | - 'info_travaux_titre' => 'Lavori in corso', |
|
| 484 | - 'info_trop_resultat' => 'Troppi risultati per "@cherche_mot@" ; restringi la ricerca.', |
|
| 485 | - 'info_utilisation_messagerie_interne' => 'Stai utilizzando il sistema di messaggistica interna al sito.', |
|
| 486 | - 'info_valider_lien' => 'convalidare questo link', |
|
| 487 | - 'info_verifier_image' => ', verifica che le immagini siano state trasferite correttamente.', |
|
| 488 | - 'info_vignette_defaut' => 'Loghi predefiniti', |
|
| 489 | - 'info_vignette_personnalisee' => 'Loghi personalizzati', |
|
| 490 | - 'info_visite' => 'visita:', |
|
| 491 | - 'info_vos_rendez_vous' => 'I tuoi prossimi appuntamenti', |
|
| 492 | - 'infos_vos_pense_bete' => 'I tuoi memo', |
|
| 464 | + 'info_rechercher' => 'Ricerca', |
|
| 465 | + 'info_rechercher_02' => 'Cerca:', |
|
| 466 | + 'info_remplacer_vignette' => 'Sostituire l’icona predefinita con una personalizzata:', |
|
| 467 | + 'info_rubriques_nb' => '@nb@ sezioni', |
|
| 468 | + 'info_rubriques_un' => '1 sezione', |
|
| 469 | + 'info_sans_titre_2' => 'senza titolo', |
|
| 470 | + 'info_selectionner_fichier' => 'Puoi selezionare un file della cartella @upload@', |
|
| 471 | + 'info_selectionner_fichier_2' => 'Seleziona un file:', |
|
| 472 | + 'info_sites_nb' => '@nb@ siti', |
|
| 473 | + 'info_sites_un' => '1 sito', |
|
| 474 | + 'info_supprimer_vignette' => 'Cancella l’immagine', |
|
| 475 | + 'info_symbole_bleu' => 'Il simbolo <b>blu</b> indica un <b>memo</b>: cioè un messaggio ad uso personale.', |
|
| 476 | + 'info_symbole_jaune' => 'Il simbolo <b>giallo</b> indica un <b>annuncio a tutti i redattori</b>: modificabile da tutti gli amministratori e visibile da tutti i redattori.', |
|
| 477 | + 'info_symbole_vert' => 'Il simbolo <b>verde</b> indica i <b>messaggi scambiati con altri utenti </b> del sito.', |
|
| 478 | + 'info_telecharger_nouveau_logo' => 'Upload di un nuovo logo:', |
|
| 479 | + 'info_telecharger_ordinateur' => 'Upload dal tuo computer:', |
|
| 480 | + 'info_tous_resultats_enregistres' => '[tutti i risultati sono salvati]', |
|
| 481 | + 'info_tout_afficher' => 'Visualizza tutto', |
|
| 482 | + 'info_travaux_texte' => 'Questo sito non è stato ancora configurato. Torna più tardi...', |
|
| 483 | + 'info_travaux_titre' => 'Lavori in corso', |
|
| 484 | + 'info_trop_resultat' => 'Troppi risultati per "@cherche_mot@" ; restringi la ricerca.', |
|
| 485 | + 'info_utilisation_messagerie_interne' => 'Stai utilizzando il sistema di messaggistica interna al sito.', |
|
| 486 | + 'info_valider_lien' => 'convalidare questo link', |
|
| 487 | + 'info_verifier_image' => ', verifica che le immagini siano state trasferite correttamente.', |
|
| 488 | + 'info_vignette_defaut' => 'Loghi predefiniti', |
|
| 489 | + 'info_vignette_personnalisee' => 'Loghi personalizzati', |
|
| 490 | + 'info_visite' => 'visita:', |
|
| 491 | + 'info_vos_rendez_vous' => 'I tuoi prossimi appuntamenti', |
|
| 492 | + 'infos_vos_pense_bete' => 'I tuoi memo', |
|
| 493 | 493 | |
| 494 | - // L |
|
| 495 | - 'label_ajout_id_rapide' => 'Inserimento rapido', |
|
| 496 | - 'label_poids_fichier' => 'Dimensione', |
|
| 497 | - 'label_ponctuer' => '@label@:', |
|
| 498 | - 'lien_afficher_icones_seuls' => 'Mostra solo le icone', |
|
| 499 | - 'lien_afficher_texte_icones' => 'Mostra le icone e il testo', |
|
| 500 | - 'lien_afficher_texte_seul' => 'Mostra solo il testo', |
|
| 501 | - 'lien_aller_a_la_derniere_page' => 'Vai all’ultima pagina', |
|
| 502 | - 'lien_aller_a_la_page_nb' => 'Vai alla pagina @nb@', |
|
| 503 | - 'lien_aller_a_la_page_precedente' => 'Vai alla pagina precedente', |
|
| 504 | - 'lien_aller_a_la_page_suivante' => 'Vai alla pagina successiva', |
|
| 505 | - 'lien_aller_a_la_premiere_page' => 'Vai alla prima pagina', |
|
| 506 | - 'lien_liberer' => 'libera', |
|
| 507 | - 'lien_liberer_tous' => 'liberare questi articoli', |
|
| 508 | - 'lien_nouvea_pense_bete' => 'NUOVO MEMO', |
|
| 509 | - 'lien_nouveau_message' => 'NUOVO MESSAGGIO', |
|
| 510 | - 'lien_nouvelle_annonce' => 'NUOVO ANNUNCIO', |
|
| 511 | - 'lien_petitions' => 'PETIZIONE', |
|
| 512 | - 'lien_popularite' => 'popolarità: @popularite@%', |
|
| 513 | - 'lien_racine_site' => 'ROOT DEL SITO', |
|
| 514 | - 'lien_reessayer' => 'Prova di nuovo', |
|
| 515 | - 'lien_repondre_message' => 'Rispondi', |
|
| 516 | - 'lien_supprimer' => 'cancella', |
|
| 517 | - 'lien_tout_afficher' => 'Visualizza tutto ', |
|
| 518 | - 'lien_visite_site' => 'visita il sito', |
|
| 519 | - 'lien_visites' => '@visites@ visite', |
|
| 520 | - 'lien_voir_auteur' => 'Vedi questo autore', |
|
| 521 | - 'ligne' => 'Linea', |
|
| 522 | - 'login' => 'Collegamento', |
|
| 523 | - 'login_acces_prive' => 'accesso all’area riservata', |
|
| 524 | - 'login_autre_identifiant' => 'connettiti con un altro ID', |
|
| 525 | - 'login_cookie_accepte' => 'Imposta il tuo browser affinché li accetti (almeno per questo sito).', |
|
| 526 | - 'login_cookie_oblige' => 'Per identificarsi in modo sicuro su questo sito è necessario accettare i cookie.', |
|
| 527 | - 'login_deconnexion_ok' => 'Disconnessione effettuata.', |
|
| 528 | - 'login_erreur_pass' => 'Errore nella password.', |
|
| 529 | - 'login_espace_prive' => 'area riservata', |
|
| 530 | - 'login_identifiant_inconnu' => 'L’ID « @login@ » risulta inesistente.', |
|
| 531 | - 'login_login' => 'Login:', |
|
| 532 | - 'login_login2' => 'Login o indirizzo email:', |
|
| 533 | - 'login_login_pass_incorrect' => '(Login o password errati.)', |
|
| 534 | - 'login_motpasseoublie' => 'password dimenticata?', |
|
| 535 | - 'login_non_securise' => 'Attenzione, questo modulo non è sicuro. |
|
| 494 | + // L |
|
| 495 | + 'label_ajout_id_rapide' => 'Inserimento rapido', |
|
| 496 | + 'label_poids_fichier' => 'Dimensione', |
|
| 497 | + 'label_ponctuer' => '@label@:', |
|
| 498 | + 'lien_afficher_icones_seuls' => 'Mostra solo le icone', |
|
| 499 | + 'lien_afficher_texte_icones' => 'Mostra le icone e il testo', |
|
| 500 | + 'lien_afficher_texte_seul' => 'Mostra solo il testo', |
|
| 501 | + 'lien_aller_a_la_derniere_page' => 'Vai all’ultima pagina', |
|
| 502 | + 'lien_aller_a_la_page_nb' => 'Vai alla pagina @nb@', |
|
| 503 | + 'lien_aller_a_la_page_precedente' => 'Vai alla pagina precedente', |
|
| 504 | + 'lien_aller_a_la_page_suivante' => 'Vai alla pagina successiva', |
|
| 505 | + 'lien_aller_a_la_premiere_page' => 'Vai alla prima pagina', |
|
| 506 | + 'lien_liberer' => 'libera', |
|
| 507 | + 'lien_liberer_tous' => 'liberare questi articoli', |
|
| 508 | + 'lien_nouvea_pense_bete' => 'NUOVO MEMO', |
|
| 509 | + 'lien_nouveau_message' => 'NUOVO MESSAGGIO', |
|
| 510 | + 'lien_nouvelle_annonce' => 'NUOVO ANNUNCIO', |
|
| 511 | + 'lien_petitions' => 'PETIZIONE', |
|
| 512 | + 'lien_popularite' => 'popolarità: @popularite@%', |
|
| 513 | + 'lien_racine_site' => 'ROOT DEL SITO', |
|
| 514 | + 'lien_reessayer' => 'Prova di nuovo', |
|
| 515 | + 'lien_repondre_message' => 'Rispondi', |
|
| 516 | + 'lien_supprimer' => 'cancella', |
|
| 517 | + 'lien_tout_afficher' => 'Visualizza tutto ', |
|
| 518 | + 'lien_visite_site' => 'visita il sito', |
|
| 519 | + 'lien_visites' => '@visites@ visite', |
|
| 520 | + 'lien_voir_auteur' => 'Vedi questo autore', |
|
| 521 | + 'ligne' => 'Linea', |
|
| 522 | + 'login' => 'Collegamento', |
|
| 523 | + 'login_acces_prive' => 'accesso all’area riservata', |
|
| 524 | + 'login_autre_identifiant' => 'connettiti con un altro ID', |
|
| 525 | + 'login_cookie_accepte' => 'Imposta il tuo browser affinché li accetti (almeno per questo sito).', |
|
| 526 | + 'login_cookie_oblige' => 'Per identificarsi in modo sicuro su questo sito è necessario accettare i cookie.', |
|
| 527 | + 'login_deconnexion_ok' => 'Disconnessione effettuata.', |
|
| 528 | + 'login_erreur_pass' => 'Errore nella password.', |
|
| 529 | + 'login_espace_prive' => 'area riservata', |
|
| 530 | + 'login_identifiant_inconnu' => 'L’ID « @login@ » risulta inesistente.', |
|
| 531 | + 'login_login' => 'Login:', |
|
| 532 | + 'login_login2' => 'Login o indirizzo email:', |
|
| 533 | + 'login_login_pass_incorrect' => '(Login o password errati.)', |
|
| 534 | + 'login_motpasseoublie' => 'password dimenticata?', |
|
| 535 | + 'login_non_securise' => 'Attenzione, questo modulo non è sicuro. |
|
| 536 | 536 | Se non vuoi che la tua password possa essere intercettata sulla rete, |
| 537 | 537 | devi attivare Javascript nel tuo browser e', |
| 538 | - 'login_nouvelle_tentative' => 'Nuovo tentativo', |
|
| 539 | - 'login_par_ici' => 'Sei registrato... per di qua...', |
|
| 540 | - 'login_pass2' => 'Password:', |
|
| 541 | - 'login_preferez_refuser' => '<b>Se preferisci non accettare i cookie</b> c’è un altro metodo (meno sicuro) per connettersi:', |
|
| 542 | - 'login_recharger' => 'aggiorna questa pagina', |
|
| 543 | - 'login_rester_identifie' => 'Conservare l’identificazione per alcuni giorni', |
|
| 544 | - 'login_retour_public' => 'Ritorna al sito pubblico', |
|
| 545 | - 'login_retour_site' => 'Ritorna al sito pubblico', |
|
| 546 | - 'login_retoursitepublic' => 'ritorna al sito pubblico', |
|
| 547 | - 'login_sans_cookie' => 'Identificazione senza cookie', |
|
| 548 | - 'login_securise' => 'Accesso protetto', |
|
| 549 | - 'login_sinscrire' => 'registrati', |
|
| 550 | - 'login_test_navigateur' => 'test browser/riconnessione', |
|
| 551 | - 'login_verifiez_navigateur' => '(Verifica comunque se il tuo browser ha memorizzato la password...)', |
|
| 538 | + 'login_nouvelle_tentative' => 'Nuovo tentativo', |
|
| 539 | + 'login_par_ici' => 'Sei registrato... per di qua...', |
|
| 540 | + 'login_pass2' => 'Password:', |
|
| 541 | + 'login_preferez_refuser' => '<b>Se preferisci non accettare i cookie</b> c’è un altro metodo (meno sicuro) per connettersi:', |
|
| 542 | + 'login_recharger' => 'aggiorna questa pagina', |
|
| 543 | + 'login_rester_identifie' => 'Conservare l’identificazione per alcuni giorni', |
|
| 544 | + 'login_retour_public' => 'Ritorna al sito pubblico', |
|
| 545 | + 'login_retour_site' => 'Ritorna al sito pubblico', |
|
| 546 | + 'login_retoursitepublic' => 'ritorna al sito pubblico', |
|
| 547 | + 'login_sans_cookie' => 'Identificazione senza cookie', |
|
| 548 | + 'login_securise' => 'Accesso protetto', |
|
| 549 | + 'login_sinscrire' => 'registrati', |
|
| 550 | + 'login_test_navigateur' => 'test browser/riconnessione', |
|
| 551 | + 'login_verifiez_navigateur' => '(Verifica comunque se il tuo browser ha memorizzato la password...)', |
|
| 552 | 552 | |
| 553 | - // M |
|
| 554 | - 'masquer_colonne' => 'Nascondi questa colonna', |
|
| 555 | - 'masquer_trad' => 'nascondere le traduzioni', |
|
| 556 | - 'message_nouveaux_identifiants_echec' => 'Impossibile generare nuovi identificativi', |
|
| 557 | - 'message_nouveaux_identifiants_echec_envoi' => 'Le nuove credenziali di accesso non possono essere inviate.', |
|
| 558 | - 'message_nouveaux_identifiants_ok' => 'Le nuove credenziali di accsso sono state inviate a @email@.', |
|
| 559 | - 'module_fichiers_langues' => 'File lingua', |
|
| 553 | + // M |
|
| 554 | + 'masquer_colonne' => 'Nascondi questa colonna', |
|
| 555 | + 'masquer_trad' => 'nascondere le traduzioni', |
|
| 556 | + 'message_nouveaux_identifiants_echec' => 'Impossibile generare nuovi identificativi', |
|
| 557 | + 'message_nouveaux_identifiants_echec_envoi' => 'Le nuove credenziali di accesso non possono essere inviate.', |
|
| 558 | + 'message_nouveaux_identifiants_ok' => 'Le nuove credenziali di accsso sono state inviate a @email@.', |
|
| 559 | + 'module_fichiers_langues' => 'File lingua', |
|
| 560 | 560 | |
| 561 | - // N |
|
| 562 | - 'navigateur_pas_redirige' => 'Se la pagina non cambia automaticamente, cliccare qui per continuare.', |
|
| 563 | - 'numero' => 'Numero', |
|
| 561 | + // N |
|
| 562 | + 'navigateur_pas_redirige' => 'Se la pagina non cambia automaticamente, cliccare qui per continuare.', |
|
| 563 | + 'numero' => 'Numero', |
|
| 564 | 564 | |
| 565 | - // O |
|
| 566 | - 'occurence' => 'Occorrenza', |
|
| 567 | - 'onglet_affacer_base' => 'Svuota il database', |
|
| 568 | - 'onglet_auteur' => 'L’autore', |
|
| 569 | - 'onglet_contenu_site' => 'Contenuto del sito', |
|
| 570 | - 'onglet_evolution_visite_mod' => 'Evoluzione', |
|
| 571 | - 'onglet_fonctions_avances' => 'Funzioni avanzate', |
|
| 572 | - 'onglet_informations_personnelles' => 'Dati personali', |
|
| 573 | - 'onglet_interactivite' => 'Interattività', |
|
| 574 | - 'onglet_messagerie' => 'Messaggi', |
|
| 575 | - 'onglet_repartition_rubrique' => 'Ripartizione per rubriche', |
|
| 576 | - 'onglet_save_restaur_base' => 'Salva/ripristina il database', |
|
| 577 | - 'onglet_vider_cache' => 'Svuota la cache', |
|
| 565 | + // O |
|
| 566 | + 'occurence' => 'Occorrenza', |
|
| 567 | + 'onglet_affacer_base' => 'Svuota il database', |
|
| 568 | + 'onglet_auteur' => 'L’autore', |
|
| 569 | + 'onglet_contenu_site' => 'Contenuto del sito', |
|
| 570 | + 'onglet_evolution_visite_mod' => 'Evoluzione', |
|
| 571 | + 'onglet_fonctions_avances' => 'Funzioni avanzate', |
|
| 572 | + 'onglet_informations_personnelles' => 'Dati personali', |
|
| 573 | + 'onglet_interactivite' => 'Interattività', |
|
| 574 | + 'onglet_messagerie' => 'Messaggi', |
|
| 575 | + 'onglet_repartition_rubrique' => 'Ripartizione per rubriche', |
|
| 576 | + 'onglet_save_restaur_base' => 'Salva/ripristina il database', |
|
| 577 | + 'onglet_vider_cache' => 'Svuota la cache', |
|
| 578 | 578 | |
| 579 | - // P |
|
| 580 | - 'pass_choix_pass' => 'Inserisci una nuova password:', |
|
| 581 | - 'pass_erreur' => 'Errore', |
|
| 582 | - 'pass_erreur_acces_refuse' => '<b>Errore:</b> non hai più accesso a questo sito.', |
|
| 583 | - 'pass_erreur_code_inconnu' => '<b>Errore:</b> il codice inserito non corriponde a nessuno degli utenti che hanno accesso a questo sito.', |
|
| 584 | - 'pass_erreur_non_enregistre' => '<b>Errore:</b> l’indirizzo <tt>@email_oubli@</tt> non è registrato su questo sito.', |
|
| 585 | - 'pass_erreur_non_valide' => '<b>Errore:</b> questo indirizzo <tt>@email_oubli@</tt> non è valido!', |
|
| 586 | - 'pass_erreur_probleme_technique' => '<b>Errore:</b> l’email non può essere inviato a causa di un problema tecnico.', |
|
| 587 | - 'pass_espace_prive_bla' => 'L’area riservata di questo sito è accessibile |
|
| 579 | + // P |
|
| 580 | + 'pass_choix_pass' => 'Inserisci una nuova password:', |
|
| 581 | + 'pass_erreur' => 'Errore', |
|
| 582 | + 'pass_erreur_acces_refuse' => '<b>Errore:</b> non hai più accesso a questo sito.', |
|
| 583 | + 'pass_erreur_code_inconnu' => '<b>Errore:</b> il codice inserito non corriponde a nessuno degli utenti che hanno accesso a questo sito.', |
|
| 584 | + 'pass_erreur_non_enregistre' => '<b>Errore:</b> l’indirizzo <tt>@email_oubli@</tt> non è registrato su questo sito.', |
|
| 585 | + 'pass_erreur_non_valide' => '<b>Errore:</b> questo indirizzo <tt>@email_oubli@</tt> non è valido!', |
|
| 586 | + 'pass_erreur_probleme_technique' => '<b>Errore:</b> l’email non può essere inviato a causa di un problema tecnico.', |
|
| 587 | + 'pass_espace_prive_bla' => 'L’area riservata di questo sito è accessibile |
|
| 588 | 588 | unicamente agli utenti registrati. |
| 589 | 589 | Una volta iscritto, potrai consultare gli articoli in corso di redazione, |
| 590 | 590 | proporre nuovi articoli e partecipare a tutti i forum.', |
| 591 | - 'pass_forum_bla' => 'Hai chiesto di intervenire su un forum |
|
| 591 | + 'pass_forum_bla' => 'Hai chiesto di intervenire su un forum |
|
| 592 | 592 | riservato agli utenti registrati.', |
| 593 | - 'pass_indiquez_cidessous' => 'Indica qui sotto l’indirizzo email con il quale ti sei registrato precedentemente. |
|
| 593 | + 'pass_indiquez_cidessous' => 'Indica qui sotto l’indirizzo email con il quale ti sei registrato precedentemente. |
|
| 594 | 594 | Riceverai un email con le istruzioni per recuperare i dati di accesso al sito.', |
| 595 | - 'pass_mail_passcookie' => '(questo è un messaggio generato automaticamente) |
|
| 595 | + 'pass_mail_passcookie' => '(questo è un messaggio generato automaticamente) |
|
| 596 | 596 | Per recuperare i dati di accesso al sito |
| 597 | 597 | @nom_site_spip@ (@adresse_site@) |
| 598 | 598 | |
@@ -603,143 +603,143 @@ discard block |
||
| 603 | 603 | e riconnetterti all’area riservata. |
| 604 | 604 | |
| 605 | 605 | ', |
| 606 | - 'pass_mot_oublie' => 'Password dimenticata', |
|
| 607 | - 'pass_nouveau_enregistre' => 'La nuova password è stata salvata.', |
|
| 608 | - 'pass_nouveau_pass' => 'Nuova password', |
|
| 609 | - 'pass_ok' => 'OK', |
|
| 610 | - 'pass_oubli_mot' => 'Password dimenticata', |
|
| 611 | - 'pass_procedure_changer' => 'Per modificare la tua password, dobbiamo prima verificare la tua identità. Inserisci l’indirizzo email associato al tuo account.', |
|
| 612 | - 'pass_quitter_fenetre' => 'Chiudi la finestra', |
|
| 613 | - 'pass_rappel_login' => 'Ricorda: il tuo ID (login) è « @login@ ».', |
|
| 614 | - 'pass_recevoir_mail' => 'Riceverai un email contenente le istruzioni per recuperare i dati di accesso al sito.', |
|
| 615 | - 'pass_retour_public' => 'Torna al sito pubblico', |
|
| 616 | - 'pass_rien_a_faire_ici' => 'Vicolo cieco...', |
|
| 617 | - 'pass_vousinscrire' => 'Registrati al sito', |
|
| 618 | - 'precedent' => 'precedente', |
|
| 619 | - 'previsualisation' => 'Anteprima', |
|
| 620 | - 'previsualiser' => 'Visualizzare l’anteprima', |
|
| 606 | + 'pass_mot_oublie' => 'Password dimenticata', |
|
| 607 | + 'pass_nouveau_enregistre' => 'La nuova password è stata salvata.', |
|
| 608 | + 'pass_nouveau_pass' => 'Nuova password', |
|
| 609 | + 'pass_ok' => 'OK', |
|
| 610 | + 'pass_oubli_mot' => 'Password dimenticata', |
|
| 611 | + 'pass_procedure_changer' => 'Per modificare la tua password, dobbiamo prima verificare la tua identità. Inserisci l’indirizzo email associato al tuo account.', |
|
| 612 | + 'pass_quitter_fenetre' => 'Chiudi la finestra', |
|
| 613 | + 'pass_rappel_login' => 'Ricorda: il tuo ID (login) è « @login@ ».', |
|
| 614 | + 'pass_recevoir_mail' => 'Riceverai un email contenente le istruzioni per recuperare i dati di accesso al sito.', |
|
| 615 | + 'pass_retour_public' => 'Torna al sito pubblico', |
|
| 616 | + 'pass_rien_a_faire_ici' => 'Vicolo cieco...', |
|
| 617 | + 'pass_vousinscrire' => 'Registrati al sito', |
|
| 618 | + 'precedent' => 'precedente', |
|
| 619 | + 'previsualisation' => 'Anteprima', |
|
| 620 | + 'previsualiser' => 'Visualizzare l’anteprima', |
|
| 621 | 621 | |
| 622 | - // R |
|
| 623 | - 'retour' => 'Indietro', |
|
| 622 | + // R |
|
| 623 | + 'retour' => 'Indietro', |
|
| 624 | 624 | |
| 625 | - // S |
|
| 626 | - 'spip_conforme_dtd' => 'SPIP ritiene che questo documento è conforme al proprio DOCTYPE:', |
|
| 627 | - 'squelette' => 'modello di layout', |
|
| 628 | - 'squelette_inclus_ligne' => 'modello incluso, linea', |
|
| 629 | - 'squelette_ligne' => 'modello, linea', |
|
| 630 | - 'stats_visites_et_popularite' => '@visites@ visite; popolarità: @popularite@', |
|
| 631 | - 'suivant' => 'successivo', |
|
| 625 | + // S |
|
| 626 | + 'spip_conforme_dtd' => 'SPIP ritiene che questo documento è conforme al proprio DOCTYPE:', |
|
| 627 | + 'squelette' => 'modello di layout', |
|
| 628 | + 'squelette_inclus_ligne' => 'modello incluso, linea', |
|
| 629 | + 'squelette_ligne' => 'modello, linea', |
|
| 630 | + 'stats_visites_et_popularite' => '@visites@ visite; popolarità: @popularite@', |
|
| 631 | + 'suivant' => 'successivo', |
|
| 632 | 632 | |
| 633 | - // T |
|
| 634 | - 'taille_go' => '@taille@ Gb', |
|
| 635 | - 'taille_ko' => '@taille@ Kb', |
|
| 636 | - 'taille_mo' => '@taille@ Mb', |
|
| 637 | - 'taille_octets' => '@taille@ byte', |
|
| 638 | - 'texte_actualite_site_1' => 'Quando avrai maggiore familiarità con l’interfaccia, clicca su «', |
|
| 639 | - 'texte_actualite_site_2' => 'interfaccia completa', |
|
| 640 | - 'texte_actualite_site_3' => '» per avere accesso a nuove opzioni.', |
|
| 641 | - 'texte_creation_automatique_vignette' => 'La creazione automatica di thumbnail di anteprima è attivata. Se inserisci in questo campo delle immagini in formato @gd_formats@, esse saranno accompagnate da thumbnail con una dimensione massima di @taille_preview@ pixels. ', |
|
| 642 | - 'texte_documents_associes' => 'I seguenti documenti sono associati all’articolo, |
|
| 633 | + // T |
|
| 634 | + 'taille_go' => '@taille@ Gb', |
|
| 635 | + 'taille_ko' => '@taille@ Kb', |
|
| 636 | + 'taille_mo' => '@taille@ Mb', |
|
| 637 | + 'taille_octets' => '@taille@ byte', |
|
| 638 | + 'texte_actualite_site_1' => 'Quando avrai maggiore familiarità con l’interfaccia, clicca su «', |
|
| 639 | + 'texte_actualite_site_2' => 'interfaccia completa', |
|
| 640 | + 'texte_actualite_site_3' => '» per avere accesso a nuove opzioni.', |
|
| 641 | + 'texte_creation_automatique_vignette' => 'La creazione automatica di thumbnail di anteprima è attivata. Se inserisci in questo campo delle immagini in formato @gd_formats@, esse saranno accompagnate da thumbnail con una dimensione massima di @taille_preview@ pixels. ', |
|
| 642 | + 'texte_documents_associes' => 'I seguenti documenti sono associati all’articolo, |
|
| 643 | 643 | ma non vi sono stati inseriti direttamente. |
| 644 | 644 | A seconda delle impostazioni di pubblicazione del sito, |
| 645 | 645 | potranno essere disponibili sotto forma di documenti allegati.', |
| 646 | - 'texte_erreur_mise_niveau_base' => 'Errore nel database durante l’aggiornamento. |
|
| 646 | + 'texte_erreur_mise_niveau_base' => 'Errore nel database durante l’aggiornamento. |
|
| 647 | 647 | L’immagine <b>@fichier@</b> non è passata (articolo @id_article@). |
| 648 | 648 | Prendi nota di questo riferimento, ritenta l’aggiornamento, |
| 649 | 649 | e verifica che le immagini si vedano ancora |
| 650 | 650 | negli articoli.', |
| 651 | - 'texte_erreur_visiteur' => 'Si è tentato di entrare nell’area riservata con un login non valido.', |
|
| 652 | - 'texte_inc_auth_1' => 'Sei identificato con il |
|
| 651 | + 'texte_erreur_visiteur' => 'Si è tentato di entrare nell’area riservata con un login non valido.', |
|
| 652 | + 'texte_inc_auth_1' => 'Sei identificato con il |
|
| 653 | 653 | login <b>@auth_login@</b>, ma nel database non esiste. |
| 654 | 654 | Prova a ', |
| 655 | - 'texte_inc_auth_2' => 'collegarti nuovamente', |
|
| 656 | - 'texte_inc_auth_3' => ', dopo aver eventualmente effettuato un logout e |
|
| 655 | + 'texte_inc_auth_2' => 'collegarti nuovamente', |
|
| 656 | + 'texte_inc_auth_3' => ', dopo aver eventualmente effettuato un logout e |
|
| 657 | 657 | riavviato il tuo browser.', |
| 658 | - 'texte_inc_config' => 'Le modifiche effettuate in queste pagine influenzano notevolmente il |
|
| 658 | + 'texte_inc_config' => 'Le modifiche effettuate in queste pagine influenzano notevolmente il |
|
| 659 | 659 | funzionamento del sito. Non intervenire finché non conosci bene i meccanismi del sistema SPIP. <br /><br /><b>In generale, si consiglia di lasciare sempre al webmaster la configurazione delle opzioni qui presenti.</b>', |
| 660 | - 'texte_inc_meta_1' => 'La scrittura del file <code>@fichier@</code> ha causato un errore di sistema. L’amministratore del sito, ', |
|
| 661 | - 'texte_inc_meta_2' => 'verifichi i diritti di scrittura', |
|
| 662 | - 'texte_inc_meta_3' => 'nella cartella <code>@repertoire@</code>.', |
|
| 663 | - 'texte_statut_en_cours_redaction' => 'in corso di redazione', |
|
| 664 | - 'texte_statut_poubelle' => 'nel cestino', |
|
| 665 | - 'texte_statut_propose_evaluation' => 'proposto per una valutazione', |
|
| 666 | - 'texte_statut_publie' => 'pubblicato on line', |
|
| 667 | - 'texte_statut_refuse' => 'rifiutato', |
|
| 668 | - 'titre_ajouter_mot_cle' => 'AGGIUNGI UNA PAROLA CHIAVE:', |
|
| 669 | - 'titre_cadre_raccourcis' => 'SCELTA RAPIDA:', |
|
| 670 | - 'titre_changer_couleur_interface' => 'Cambia il colore dell’interfaccia', |
|
| 671 | - 'titre_image_admin_article' => 'Puoi amministrare questo articolo', |
|
| 672 | - 'titre_image_administrateur' => 'Amministratore', |
|
| 673 | - 'titre_image_aide' => 'Aiuto su questo elemento', |
|
| 674 | - 'titre_image_auteur_supprime' => 'Autore eliminato', |
|
| 675 | - 'titre_image_redacteur' => 'Redattore senza accesso', |
|
| 676 | - 'titre_image_redacteur_02' => 'Redattore', |
|
| 677 | - 'titre_image_selecteur' => 'Mostra la lista', |
|
| 678 | - 'titre_image_visiteur' => 'Visitatore', |
|
| 679 | - 'titre_joindre_document' => 'ALLEGA UN DOCUMENTO', |
|
| 680 | - 'titre_mots_cles' => 'PAROLE CHIAVE', |
|
| 681 | - 'titre_probleme_technique' => 'Attenzione: un problema tecnico (server SQL) impedisce l’accesso a questa parte del sito. Grazie per la comprensione.', |
|
| 682 | - 'titre_publier_document' => 'ALLEGA UN DOCUMENTO A QUESTA RUBRICA', |
|
| 683 | - 'titre_signatures_attente' => 'Firme in corso di convalida', |
|
| 684 | - 'titre_signatures_confirmees' => 'Firme confermate', |
|
| 685 | - 'titre_statistiques' => 'Statistiche del sito', |
|
| 686 | - 'titre_titre_document' => 'Titolo del documento:', |
|
| 687 | - 'todo' => 'prossimo', |
|
| 688 | - 'trad_definir_reference' => 'Scegliere "@titre@" come riferimento per le traduzioni', |
|
| 689 | - 'trad_reference' => '(articolo di riferimento)', |
|
| 660 | + 'texte_inc_meta_1' => 'La scrittura del file <code>@fichier@</code> ha causato un errore di sistema. L’amministratore del sito, ', |
|
| 661 | + 'texte_inc_meta_2' => 'verifichi i diritti di scrittura', |
|
| 662 | + 'texte_inc_meta_3' => 'nella cartella <code>@repertoire@</code>.', |
|
| 663 | + 'texte_statut_en_cours_redaction' => 'in corso di redazione', |
|
| 664 | + 'texte_statut_poubelle' => 'nel cestino', |
|
| 665 | + 'texte_statut_propose_evaluation' => 'proposto per una valutazione', |
|
| 666 | + 'texte_statut_publie' => 'pubblicato on line', |
|
| 667 | + 'texte_statut_refuse' => 'rifiutato', |
|
| 668 | + 'titre_ajouter_mot_cle' => 'AGGIUNGI UNA PAROLA CHIAVE:', |
|
| 669 | + 'titre_cadre_raccourcis' => 'SCELTA RAPIDA:', |
|
| 670 | + 'titre_changer_couleur_interface' => 'Cambia il colore dell’interfaccia', |
|
| 671 | + 'titre_image_admin_article' => 'Puoi amministrare questo articolo', |
|
| 672 | + 'titre_image_administrateur' => 'Amministratore', |
|
| 673 | + 'titre_image_aide' => 'Aiuto su questo elemento', |
|
| 674 | + 'titre_image_auteur_supprime' => 'Autore eliminato', |
|
| 675 | + 'titre_image_redacteur' => 'Redattore senza accesso', |
|
| 676 | + 'titre_image_redacteur_02' => 'Redattore', |
|
| 677 | + 'titre_image_selecteur' => 'Mostra la lista', |
|
| 678 | + 'titre_image_visiteur' => 'Visitatore', |
|
| 679 | + 'titre_joindre_document' => 'ALLEGA UN DOCUMENTO', |
|
| 680 | + 'titre_mots_cles' => 'PAROLE CHIAVE', |
|
| 681 | + 'titre_probleme_technique' => 'Attenzione: un problema tecnico (server SQL) impedisce l’accesso a questa parte del sito. Grazie per la comprensione.', |
|
| 682 | + 'titre_publier_document' => 'ALLEGA UN DOCUMENTO A QUESTA RUBRICA', |
|
| 683 | + 'titre_signatures_attente' => 'Firme in corso di convalida', |
|
| 684 | + 'titre_signatures_confirmees' => 'Firme confermate', |
|
| 685 | + 'titre_statistiques' => 'Statistiche del sito', |
|
| 686 | + 'titre_titre_document' => 'Titolo del documento:', |
|
| 687 | + 'todo' => 'prossimo', |
|
| 688 | + 'trad_definir_reference' => 'Scegliere "@titre@" come riferimento per le traduzioni', |
|
| 689 | + 'trad_reference' => '(articolo di riferimento)', |
|
| 690 | 690 | |
| 691 | - // U |
|
| 692 | - 'upload_limit' => 'Questo file è trppo grande per il server; la dimensione massima consentita in <i>upload</i> è di @max@.', |
|
| 691 | + // U |
|
| 692 | + 'upload_limit' => 'Questo file è trppo grande per il server; la dimensione massima consentita in <i>upload</i> è di @max@.', |
|
| 693 | 693 | |
| 694 | - // Z |
|
| 695 | - 'zbug_balise_b_aval' => ': ciclo B deve precedere ciclo BOUCLE', |
|
| 696 | - 'zbug_balise_inexistante' => 'errore @from@: il tag #@balise@ non esiste ', |
|
| 697 | - 'zbug_balise_sans_argument' => 'Argomento mancante nel tag @balise@', |
|
| 698 | - 'zbug_boucle' => 'ciclo', |
|
| 699 | - 'zbug_boucle_recursive_undef' => 'ciclo ricorsivo non definito', |
|
| 700 | - 'zbug_calcul' => 'calcolo', |
|
| 701 | - 'zbug_champ_hors_boucle' => 'Campo @champ@ fuori dal ciclo', |
|
| 702 | - 'zbug_champ_hors_critere' => 'Il campo @champ@ non rispetta il criterio @critere@', |
|
| 703 | - 'zbug_champ_hors_motif' => 'Campo @champ@ fuori da un contesto @motif@', |
|
| 704 | - 'zbug_code' => 'codice', |
|
| 705 | - 'zbug_critere_inconnu' => 'criterio sconosciuto @critere@', |
|
| 706 | - 'zbug_critere_sur_table_sans_cle_primaire' => '{@critere@} su una tabella senza una chiave primaria atomica', |
|
| 707 | - 'zbug_distant_interdit' => 'esterno non accessibile', |
|
| 708 | - 'zbug_doublon_table_sans_cle_primaire' => 'doppioni su una tabella senza chiave primaria atomica', |
|
| 709 | - 'zbug_doublon_table_sans_index' => 'doppioni su una tabella senza indice', |
|
| 710 | - 'zbug_erreur_boucle_double' => 'BOUCLE@id@: doppia definizione', |
|
| 711 | - 'zbug_erreur_boucle_fermant' => 'BOUCLE@id@: chiusura tag mancante', |
|
| 712 | - 'zbug_erreur_boucle_syntaxe' => 'Sintassi del ciclo errata', |
|
| 713 | - 'zbug_erreur_compilation' => 'Errore di compilazione', |
|
| 714 | - 'zbug_erreur_execution_page' => 'errore di esecuzione della pagina', |
|
| 715 | - 'zbug_erreur_filtre' => 'Errore : filtro <b>« @filtre@ »</b> non esistente', |
|
| 716 | - 'zbug_erreur_filtre_nbarg_min' => 'Filtro@filtre@: argomento(i) @nb@ mancante(i)', |
|
| 717 | - 'zbug_erreur_meme_parent' => 'il criterio {meme_parent} si applica unicamente ai cicli (FORUMS) o (RUBRIQUES)', |
|
| 718 | - 'zbug_erreur_squelette' => 'Errore/i nel modello di layout', |
|
| 719 | - 'zbug_hors_compilation' => 'Fuori Compilazione', |
|
| 720 | - 'zbug_info_erreur_squelette' => 'Errore sul sito', |
|
| 721 | - 'zbug_inversion_ordre_inexistant' => 'inversione di un ordine non esistente', |
|
| 722 | - 'zbug_pagination_sans_critere' => '#PAGINATION senza criterio {pagination} oppure usato in un ciclo ricorsivo', |
|
| 723 | - 'zbug_parametres_inclus_incorrects' => 'Parametri di inclusione non corretti', |
|
| 724 | - 'zbug_profile' => 'Tempo di elaborazione: @time@', |
|
| 725 | - 'zbug_resultat' => 'risultato', |
|
| 726 | - 'zbug_serveur_indefini' => 'server SQL non definito', |
|
| 727 | - 'zbug_statistiques' => 'Statistiche delle query SQL in ordine di durata', |
|
| 728 | - 'zbug_table_inconnue' => 'Tabella SQL « @table@ » sconosciuta', |
|
| 729 | - 'zxml_connus_attributs' => 'attributi conosciuti', |
|
| 730 | - 'zxml_de' => 'di', |
|
| 731 | - 'zxml_inconnu_attribut' => 'attributo sconosciuto', |
|
| 732 | - 'zxml_inconnu_balise' => 'segnaposto sconosciuto', |
|
| 733 | - 'zxml_inconnu_entite' => 'entità sconosciuta', |
|
| 734 | - 'zxml_inconnu_id' => 'ID sconosciuto', |
|
| 735 | - 'zxml_mais_de' => 'ma di', |
|
| 736 | - 'zxml_non_conforme' => 'non è conforme al motivo', |
|
| 737 | - 'zxml_non_fils' => 'non è un figlio di', |
|
| 738 | - 'zxml_nonvide_balise' => 'segnaposto non vuoto', |
|
| 739 | - 'zxml_obligatoire_attribut' => 'attributo obbligatorio ma assente in', |
|
| 740 | - 'zxml_succession_fils_incorrecte' => 'successione dei figli non corretta', |
|
| 741 | - 'zxml_survoler' => 'passarci sopra col mouse per vedere i corretti', |
|
| 742 | - 'zxml_valeur_attribut' => 'valore dell’attributo', |
|
| 743 | - 'zxml_vide_balise' => 'tag vuoto', |
|
| 744 | - 'zxml_vu' => 'visto in precedenza' |
|
| 694 | + // Z |
|
| 695 | + 'zbug_balise_b_aval' => ': ciclo B deve precedere ciclo BOUCLE', |
|
| 696 | + 'zbug_balise_inexistante' => 'errore @from@: il tag #@balise@ non esiste ', |
|
| 697 | + 'zbug_balise_sans_argument' => 'Argomento mancante nel tag @balise@', |
|
| 698 | + 'zbug_boucle' => 'ciclo', |
|
| 699 | + 'zbug_boucle_recursive_undef' => 'ciclo ricorsivo non definito', |
|
| 700 | + 'zbug_calcul' => 'calcolo', |
|
| 701 | + 'zbug_champ_hors_boucle' => 'Campo @champ@ fuori dal ciclo', |
|
| 702 | + 'zbug_champ_hors_critere' => 'Il campo @champ@ non rispetta il criterio @critere@', |
|
| 703 | + 'zbug_champ_hors_motif' => 'Campo @champ@ fuori da un contesto @motif@', |
|
| 704 | + 'zbug_code' => 'codice', |
|
| 705 | + 'zbug_critere_inconnu' => 'criterio sconosciuto @critere@', |
|
| 706 | + 'zbug_critere_sur_table_sans_cle_primaire' => '{@critere@} su una tabella senza una chiave primaria atomica', |
|
| 707 | + 'zbug_distant_interdit' => 'esterno non accessibile', |
|
| 708 | + 'zbug_doublon_table_sans_cle_primaire' => 'doppioni su una tabella senza chiave primaria atomica', |
|
| 709 | + 'zbug_doublon_table_sans_index' => 'doppioni su una tabella senza indice', |
|
| 710 | + 'zbug_erreur_boucle_double' => 'BOUCLE@id@: doppia definizione', |
|
| 711 | + 'zbug_erreur_boucle_fermant' => 'BOUCLE@id@: chiusura tag mancante', |
|
| 712 | + 'zbug_erreur_boucle_syntaxe' => 'Sintassi del ciclo errata', |
|
| 713 | + 'zbug_erreur_compilation' => 'Errore di compilazione', |
|
| 714 | + 'zbug_erreur_execution_page' => 'errore di esecuzione della pagina', |
|
| 715 | + 'zbug_erreur_filtre' => 'Errore : filtro <b>« @filtre@ »</b> non esistente', |
|
| 716 | + 'zbug_erreur_filtre_nbarg_min' => 'Filtro@filtre@: argomento(i) @nb@ mancante(i)', |
|
| 717 | + 'zbug_erreur_meme_parent' => 'il criterio {meme_parent} si applica unicamente ai cicli (FORUMS) o (RUBRIQUES)', |
|
| 718 | + 'zbug_erreur_squelette' => 'Errore/i nel modello di layout', |
|
| 719 | + 'zbug_hors_compilation' => 'Fuori Compilazione', |
|
| 720 | + 'zbug_info_erreur_squelette' => 'Errore sul sito', |
|
| 721 | + 'zbug_inversion_ordre_inexistant' => 'inversione di un ordine non esistente', |
|
| 722 | + 'zbug_pagination_sans_critere' => '#PAGINATION senza criterio {pagination} oppure usato in un ciclo ricorsivo', |
|
| 723 | + 'zbug_parametres_inclus_incorrects' => 'Parametri di inclusione non corretti', |
|
| 724 | + 'zbug_profile' => 'Tempo di elaborazione: @time@', |
|
| 725 | + 'zbug_resultat' => 'risultato', |
|
| 726 | + 'zbug_serveur_indefini' => 'server SQL non definito', |
|
| 727 | + 'zbug_statistiques' => 'Statistiche delle query SQL in ordine di durata', |
|
| 728 | + 'zbug_table_inconnue' => 'Tabella SQL « @table@ » sconosciuta', |
|
| 729 | + 'zxml_connus_attributs' => 'attributi conosciuti', |
|
| 730 | + 'zxml_de' => 'di', |
|
| 731 | + 'zxml_inconnu_attribut' => 'attributo sconosciuto', |
|
| 732 | + 'zxml_inconnu_balise' => 'segnaposto sconosciuto', |
|
| 733 | + 'zxml_inconnu_entite' => 'entità sconosciuta', |
|
| 734 | + 'zxml_inconnu_id' => 'ID sconosciuto', |
|
| 735 | + 'zxml_mais_de' => 'ma di', |
|
| 736 | + 'zxml_non_conforme' => 'non è conforme al motivo', |
|
| 737 | + 'zxml_non_fils' => 'non è un figlio di', |
|
| 738 | + 'zxml_nonvide_balise' => 'segnaposto non vuoto', |
|
| 739 | + 'zxml_obligatoire_attribut' => 'attributo obbligatorio ma assente in', |
|
| 740 | + 'zxml_succession_fils_incorrecte' => 'successione dei figli non corretta', |
|
| 741 | + 'zxml_survoler' => 'passarci sopra col mouse per vedere i corretti', |
|
| 742 | + 'zxml_valeur_attribut' => 'valore dell’attributo', |
|
| 743 | + 'zxml_vide_balise' => 'tag vuoto', |
|
| 744 | + 'zxml_vu' => 'visto in precedenza' |
|
| 745 | 745 | ); |
@@ -17,7 +17,7 @@ discard block |
||
| 17 | 17 | **/ |
| 18 | 18 | |
| 19 | 19 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 20 | - return; |
|
| 20 | + return; |
|
| 21 | 21 | } |
| 22 | 22 | include_spip('base/abstract_sql'); |
| 23 | 23 | |
@@ -59,56 +59,56 @@ discard block |
||
| 59 | 59 | * Retour des traitements. |
| 60 | 60 | **/ |
| 61 | 61 | function formulaires_editer_objet_traiter( |
| 62 | - $type, |
|
| 63 | - $id = 'new', |
|
| 64 | - $id_parent = 0, |
|
| 65 | - $lier_trad = 0, |
|
| 66 | - $retour = '', |
|
| 67 | - $config_fonc = 'articles_edit_config', |
|
| 68 | - $row = [], |
|
| 69 | - $hidden = '' |
|
| 62 | + $type, |
|
| 63 | + $id = 'new', |
|
| 64 | + $id_parent = 0, |
|
| 65 | + $lier_trad = 0, |
|
| 66 | + $retour = '', |
|
| 67 | + $config_fonc = 'articles_edit_config', |
|
| 68 | + $row = [], |
|
| 69 | + $hidden = '' |
|
| 70 | 70 | ) { |
| 71 | 71 | |
| 72 | - $res = []; |
|
| 73 | - // eviter la redirection forcee par l'action... |
|
| 74 | - set_request('redirect'); |
|
| 75 | - if ($action_editer = charger_fonction("editer_$type", 'action', true)) { |
|
| 76 | - [$id, $err] = $action_editer($id); |
|
| 77 | - } else { |
|
| 78 | - $action_editer = charger_fonction('editer_objet', 'action'); |
|
| 79 | - [$id, $err] = $action_editer($id, $type); |
|
| 80 | - } |
|
| 81 | - $id_table_objet = id_table_objet($type); |
|
| 82 | - $res[$id_table_objet] = $id; |
|
| 83 | - if ($err or !$id) { |
|
| 84 | - $res['message_erreur'] = ($err ?: _T('erreur')); |
|
| 85 | - } else { |
|
| 86 | - // Un lien de trad a prendre en compte |
|
| 87 | - if ($lier_trad) { |
|
| 88 | - // referencer la traduction |
|
| 89 | - $referencer_traduction = charger_fonction('referencer_traduction', 'action'); |
|
| 90 | - $referencer_traduction($type, $id, $lier_trad); |
|
| 91 | - // actions de recopie de champs / liens sur le nouvel objet créé |
|
| 92 | - $completer_traduction = charger_fonction('completer_traduction', 'inc'); |
|
| 93 | - $err = $completer_traduction($type, $id, $lier_trad); |
|
| 94 | - if ($err) { |
|
| 95 | - $res['message_erreur'] = $err; |
|
| 96 | - return $res; |
|
| 97 | - } |
|
| 98 | - } |
|
| 99 | - |
|
| 100 | - $res['message_ok'] = _T('info_modification_enregistree'); |
|
| 101 | - if ($retour) { |
|
| 102 | - if (strncmp($retour, 'javascript:', 11) == 0) { |
|
| 103 | - $res['message_ok'] .= '<script type="text/javascript">/*<![CDATA[*/' . substr($retour, 11) . '/*]]>*/</script>'; |
|
| 104 | - $res['editable'] = true; |
|
| 105 | - } else { |
|
| 106 | - $res['redirect'] = parametre_url($retour, $id_table_objet, $id); |
|
| 107 | - } |
|
| 108 | - } |
|
| 109 | - } |
|
| 110 | - |
|
| 111 | - return $res; |
|
| 72 | + $res = []; |
|
| 73 | + // eviter la redirection forcee par l'action... |
|
| 74 | + set_request('redirect'); |
|
| 75 | + if ($action_editer = charger_fonction("editer_$type", 'action', true)) { |
|
| 76 | + [$id, $err] = $action_editer($id); |
|
| 77 | + } else { |
|
| 78 | + $action_editer = charger_fonction('editer_objet', 'action'); |
|
| 79 | + [$id, $err] = $action_editer($id, $type); |
|
| 80 | + } |
|
| 81 | + $id_table_objet = id_table_objet($type); |
|
| 82 | + $res[$id_table_objet] = $id; |
|
| 83 | + if ($err or !$id) { |
|
| 84 | + $res['message_erreur'] = ($err ?: _T('erreur')); |
|
| 85 | + } else { |
|
| 86 | + // Un lien de trad a prendre en compte |
|
| 87 | + if ($lier_trad) { |
|
| 88 | + // referencer la traduction |
|
| 89 | + $referencer_traduction = charger_fonction('referencer_traduction', 'action'); |
|
| 90 | + $referencer_traduction($type, $id, $lier_trad); |
|
| 91 | + // actions de recopie de champs / liens sur le nouvel objet créé |
|
| 92 | + $completer_traduction = charger_fonction('completer_traduction', 'inc'); |
|
| 93 | + $err = $completer_traduction($type, $id, $lier_trad); |
|
| 94 | + if ($err) { |
|
| 95 | + $res['message_erreur'] = $err; |
|
| 96 | + return $res; |
|
| 97 | + } |
|
| 98 | + } |
|
| 99 | + |
|
| 100 | + $res['message_ok'] = _T('info_modification_enregistree'); |
|
| 101 | + if ($retour) { |
|
| 102 | + if (strncmp($retour, 'javascript:', 11) == 0) { |
|
| 103 | + $res['message_ok'] .= '<script type="text/javascript">/*<![CDATA[*/' . substr($retour, 11) . '/*]]>*/</script>'; |
|
| 104 | + $res['editable'] = true; |
|
| 105 | + } else { |
|
| 106 | + $res['redirect'] = parametre_url($retour, $id_table_objet, $id); |
|
| 107 | + } |
|
| 108 | + } |
|
| 109 | + } |
|
| 110 | + |
|
| 111 | + return $res; |
|
| 112 | 112 | } |
| 113 | 113 | |
| 114 | 114 | /** |
@@ -132,29 +132,29 @@ discard block |
||
| 132 | 132 | * Tableau des erreurs |
| 133 | 133 | **/ |
| 134 | 134 | function formulaires_editer_objet_verifier($type, $id = 'new', $oblis = []) { |
| 135 | - $erreurs = []; |
|
| 136 | - if (intval($id)) { |
|
| 137 | - $conflits = controler_contenu($type, $id); |
|
| 138 | - if ($conflits and is_countable($conflits) ? count($conflits) : 0) { |
|
| 139 | - foreach ($conflits as $champ => $conflit) { |
|
| 140 | - if (!isset($erreurs[$champ])) { |
|
| 141 | - $erreurs[$champ] = ''; |
|
| 142 | - } |
|
| 143 | - $erreurs[$champ] .= _T('alerte_modif_info_concourante') . "<br /><textarea readonly='readonly' class='forml'>" . entites_html($conflit['base']) . '</textarea>'; |
|
| 144 | - } |
|
| 145 | - } |
|
| 146 | - } |
|
| 147 | - foreach ($oblis as $obli) { |
|
| 148 | - $value = _request($obli); |
|
| 149 | - if (is_null($value) or !(is_array($value) ? count($value) : strlen($value))) { |
|
| 150 | - if (!isset($erreurs[$obli])) { |
|
| 151 | - $erreurs[$obli] = ''; |
|
| 152 | - } |
|
| 153 | - $erreurs[$obli] .= _T('info_obligatoire'); |
|
| 154 | - } |
|
| 155 | - } |
|
| 156 | - |
|
| 157 | - return $erreurs; |
|
| 135 | + $erreurs = []; |
|
| 136 | + if (intval($id)) { |
|
| 137 | + $conflits = controler_contenu($type, $id); |
|
| 138 | + if ($conflits and is_countable($conflits) ? count($conflits) : 0) { |
|
| 139 | + foreach ($conflits as $champ => $conflit) { |
|
| 140 | + if (!isset($erreurs[$champ])) { |
|
| 141 | + $erreurs[$champ] = ''; |
|
| 142 | + } |
|
| 143 | + $erreurs[$champ] .= _T('alerte_modif_info_concourante') . "<br /><textarea readonly='readonly' class='forml'>" . entites_html($conflit['base']) . '</textarea>'; |
|
| 144 | + } |
|
| 145 | + } |
|
| 146 | + } |
|
| 147 | + foreach ($oblis as $obli) { |
|
| 148 | + $value = _request($obli); |
|
| 149 | + if (is_null($value) or !(is_array($value) ? count($value) : strlen($value))) { |
|
| 150 | + if (!isset($erreurs[$obli])) { |
|
| 151 | + $erreurs[$obli] = ''; |
|
| 152 | + } |
|
| 153 | + $erreurs[$obli] .= _T('info_obligatoire'); |
|
| 154 | + } |
|
| 155 | + } |
|
| 156 | + |
|
| 157 | + return $erreurs; |
|
| 158 | 158 | } |
| 159 | 159 | |
| 160 | 160 | /** |
@@ -199,154 +199,154 @@ discard block |
||
| 199 | 199 | * Environnement du formulaire. |
| 200 | 200 | **/ |
| 201 | 201 | function formulaires_editer_objet_charger( |
| 202 | - $type, |
|
| 203 | - $id = 'new', |
|
| 204 | - $id_parent = 0, |
|
| 205 | - $lier_trad = 0, |
|
| 206 | - $retour = '', |
|
| 207 | - $config_fonc = 'articles_edit_config', |
|
| 208 | - $row = [], |
|
| 209 | - $hidden = '' |
|
| 202 | + $type, |
|
| 203 | + $id = 'new', |
|
| 204 | + $id_parent = 0, |
|
| 205 | + $lier_trad = 0, |
|
| 206 | + $retour = '', |
|
| 207 | + $config_fonc = 'articles_edit_config', |
|
| 208 | + $row = [], |
|
| 209 | + $hidden = '' |
|
| 210 | 210 | ) { |
| 211 | 211 | |
| 212 | - $table_objet = table_objet($type); |
|
| 213 | - $table_objet_sql = table_objet_sql($type); |
|
| 214 | - $id_table_objet = id_table_objet($type); |
|
| 215 | - if (!is_array($row)) { |
|
| 216 | - $row = []; |
|
| 217 | - } |
|
| 218 | - |
|
| 219 | - // on accepte pas une fonction de config inconnue si elle vient d'un modele |
|
| 220 | - if ( |
|
| 221 | - $config_fonc |
|
| 222 | - and !in_array($config_fonc, ['articles_edit_config', 'rubriques_edit_config', 'auteurs_edit_config']) |
|
| 223 | - and $config_fonc !== $table_objet . '_edit_config' |
|
| 224 | - ) { |
|
| 225 | - if ( |
|
| 226 | - $args = test_formulaire_inclus_par_modele() |
|
| 227 | - and in_array($config_fonc, $args) |
|
| 228 | - ) { |
|
| 229 | - $config_fonc = ''; |
|
| 230 | - } |
|
| 231 | - } |
|
| 232 | - |
|
| 233 | - $new = !is_numeric($id); |
|
| 234 | - $lang_default = ''; |
|
| 235 | - // Appel direct dans un squelette |
|
| 236 | - if (!$row) { |
|
| 237 | - if (!$new or $lier_trad) { |
|
| 238 | - if ($select = charger_fonction('precharger_' . $type, 'inc', true)) { |
|
| 239 | - $row = $select($id, $id_parent, $lier_trad); |
|
| 240 | - // si on a une fonction precharger, elle pu faire un reglage de langue |
|
| 241 | - $lang_default = (!empty($row['lang']) ? $row['lang'] : null); |
|
| 242 | - } else { |
|
| 243 | - $row = sql_fetsel('*', $table_objet_sql, $id_table_objet . '=' . intval($id)); |
|
| 244 | - } |
|
| 245 | - if (!$new) { |
|
| 246 | - $md5 = controles_md5($row ?: []); |
|
| 247 | - } |
|
| 248 | - } |
|
| 249 | - if (!$row) { |
|
| 250 | - $row = []; |
|
| 251 | - $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 252 | - if ($desc = $trouver_table($table_objet)) { |
|
| 253 | - foreach ($desc['field'] as $k => $v) { |
|
| 254 | - $row[$k] = ''; |
|
| 255 | - } |
|
| 256 | - } |
|
| 257 | - } |
|
| 258 | - } |
|
| 259 | - |
|
| 260 | - // Gaffe: sans ceci, on ecrase systematiquement l'article d'origine |
|
| 261 | - // (et donc: pas de lien de traduction) |
|
| 262 | - $id = ($new or $lier_trad) |
|
| 263 | - ? 'oui' |
|
| 264 | - : $row[$id_table_objet]; |
|
| 265 | - $row[$id_table_objet] = $id; |
|
| 266 | - |
|
| 267 | - $contexte = $row; |
|
| 268 | - if (is_numeric($id_parent) && strlen($id_parent) && (!isset($contexte['id_parent']) or $new)) { |
|
| 269 | - if (!isset($contexte['id_parent'])) { |
|
| 270 | - unset($contexte['id_rubrique']); |
|
| 271 | - } |
|
| 272 | - $contexte['id_parent'] = $id_parent; |
|
| 273 | - } elseif (!isset($contexte['id_parent'])) { |
|
| 274 | - // id_rubrique dans id_parent si possible |
|
| 275 | - if (isset($contexte['id_rubrique'])) { |
|
| 276 | - $contexte['id_parent'] = $contexte['id_rubrique']; |
|
| 277 | - unset($contexte['id_rubrique']); |
|
| 278 | - } else { |
|
| 279 | - $contexte['id_parent'] = ''; |
|
| 280 | - } |
|
| 281 | - if ( |
|
| 282 | - !$contexte['id_parent'] |
|
| 283 | - and $preselectionner_parent_nouvel_objet = charger_fonction('preselectionner_parent_nouvel_objet', 'inc', true) |
|
| 284 | - ) { |
|
| 285 | - $contexte['id_parent'] = $preselectionner_parent_nouvel_objet($type, $row); |
|
| 286 | - } |
|
| 287 | - } |
|
| 288 | - |
|
| 289 | - $config = []; |
|
| 290 | - if ($config_fonc) { |
|
| 291 | - $contexte['config'] = $config = $config_fonc($contexte); |
|
| 292 | - if (!$lang_default) { |
|
| 293 | - $lang_default = $config['langue'] ?? session_get('lang') ; |
|
| 294 | - } |
|
| 295 | - } |
|
| 296 | - $config = $config + [ |
|
| 297 | - 'lignes' => 0, |
|
| 298 | - 'langue' => '', |
|
| 299 | - ]; |
|
| 300 | - |
|
| 301 | - $att_text = " class='textarea' " |
|
| 302 | - . " rows='" |
|
| 303 | - . ($config['lignes'] + 15) |
|
| 304 | - . "' cols='40'"; |
|
| 305 | - if (isset($contexte['texte'])) { |
|
| 306 | - [$contexte['texte'], $contexte['_texte_trop_long']] = editer_texte_recolle($contexte['texte'], $att_text); |
|
| 307 | - } |
|
| 308 | - |
|
| 309 | - // on veut conserver la langue de l'interface ; |
|
| 310 | - // on passe cette donnee sous un autre nom, au cas ou le squelette |
|
| 311 | - // voudrait l'exploiter |
|
| 312 | - if (isset($contexte['lang'])) { |
|
| 313 | - $contexte['langue'] = $contexte['lang']; |
|
| 314 | - unset($contexte['lang']); |
|
| 315 | - } |
|
| 316 | - |
|
| 317 | - $contexte['_hidden'] = "<input type='hidden' name='editer_$type' value='oui' />\n" . |
|
| 318 | - (!$lier_trad ? '' : |
|
| 319 | - ("\n<input type='hidden' name='lier_trad' value='" . |
|
| 320 | - $lier_trad . |
|
| 321 | - "' />" . |
|
| 322 | - "\n<input type='hidden' name='changer_lang' value='" . |
|
| 323 | - $lang_default . |
|
| 324 | - "' />")) |
|
| 325 | - . $hidden |
|
| 326 | - . ($md5 ?? ''); |
|
| 327 | - |
|
| 328 | - // preciser que le formulaire doit passer dans un pipeline |
|
| 329 | - $contexte['_pipeline'] = ['editer_contenu_objet', ['type' => $type, 'id' => $id]]; |
|
| 330 | - |
|
| 331 | - // preciser que le formulaire doit etre securise auteur/action |
|
| 332 | - // n'est plus utile lorsque l'action accepte l'id en argument direct |
|
| 333 | - // on le garde pour compat |
|
| 334 | - $contexte['_action'] = ["editer_$type", $id]; |
|
| 335 | - |
|
| 336 | - // et in fine placer l'autorisation |
|
| 337 | - include_spip('inc/autoriser'); |
|
| 338 | - if (intval($id)) { |
|
| 339 | - if (!autoriser('modifier', $type, intval($id))) { |
|
| 340 | - $contexte['editable'] = ''; |
|
| 341 | - } |
|
| 342 | - } |
|
| 343 | - else { |
|
| 344 | - if (!autoriser('creer', $type, 0, null, ['id_parent' => $id_parent])) { |
|
| 345 | - $contexte['editable'] = ''; |
|
| 346 | - } |
|
| 347 | - } |
|
| 348 | - |
|
| 349 | - return $contexte; |
|
| 212 | + $table_objet = table_objet($type); |
|
| 213 | + $table_objet_sql = table_objet_sql($type); |
|
| 214 | + $id_table_objet = id_table_objet($type); |
|
| 215 | + if (!is_array($row)) { |
|
| 216 | + $row = []; |
|
| 217 | + } |
|
| 218 | + |
|
| 219 | + // on accepte pas une fonction de config inconnue si elle vient d'un modele |
|
| 220 | + if ( |
|
| 221 | + $config_fonc |
|
| 222 | + and !in_array($config_fonc, ['articles_edit_config', 'rubriques_edit_config', 'auteurs_edit_config']) |
|
| 223 | + and $config_fonc !== $table_objet . '_edit_config' |
|
| 224 | + ) { |
|
| 225 | + if ( |
|
| 226 | + $args = test_formulaire_inclus_par_modele() |
|
| 227 | + and in_array($config_fonc, $args) |
|
| 228 | + ) { |
|
| 229 | + $config_fonc = ''; |
|
| 230 | + } |
|
| 231 | + } |
|
| 232 | + |
|
| 233 | + $new = !is_numeric($id); |
|
| 234 | + $lang_default = ''; |
|
| 235 | + // Appel direct dans un squelette |
|
| 236 | + if (!$row) { |
|
| 237 | + if (!$new or $lier_trad) { |
|
| 238 | + if ($select = charger_fonction('precharger_' . $type, 'inc', true)) { |
|
| 239 | + $row = $select($id, $id_parent, $lier_trad); |
|
| 240 | + // si on a une fonction precharger, elle pu faire un reglage de langue |
|
| 241 | + $lang_default = (!empty($row['lang']) ? $row['lang'] : null); |
|
| 242 | + } else { |
|
| 243 | + $row = sql_fetsel('*', $table_objet_sql, $id_table_objet . '=' . intval($id)); |
|
| 244 | + } |
|
| 245 | + if (!$new) { |
|
| 246 | + $md5 = controles_md5($row ?: []); |
|
| 247 | + } |
|
| 248 | + } |
|
| 249 | + if (!$row) { |
|
| 250 | + $row = []; |
|
| 251 | + $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 252 | + if ($desc = $trouver_table($table_objet)) { |
|
| 253 | + foreach ($desc['field'] as $k => $v) { |
|
| 254 | + $row[$k] = ''; |
|
| 255 | + } |
|
| 256 | + } |
|
| 257 | + } |
|
| 258 | + } |
|
| 259 | + |
|
| 260 | + // Gaffe: sans ceci, on ecrase systematiquement l'article d'origine |
|
| 261 | + // (et donc: pas de lien de traduction) |
|
| 262 | + $id = ($new or $lier_trad) |
|
| 263 | + ? 'oui' |
|
| 264 | + : $row[$id_table_objet]; |
|
| 265 | + $row[$id_table_objet] = $id; |
|
| 266 | + |
|
| 267 | + $contexte = $row; |
|
| 268 | + if (is_numeric($id_parent) && strlen($id_parent) && (!isset($contexte['id_parent']) or $new)) { |
|
| 269 | + if (!isset($contexte['id_parent'])) { |
|
| 270 | + unset($contexte['id_rubrique']); |
|
| 271 | + } |
|
| 272 | + $contexte['id_parent'] = $id_parent; |
|
| 273 | + } elseif (!isset($contexte['id_parent'])) { |
|
| 274 | + // id_rubrique dans id_parent si possible |
|
| 275 | + if (isset($contexte['id_rubrique'])) { |
|
| 276 | + $contexte['id_parent'] = $contexte['id_rubrique']; |
|
| 277 | + unset($contexte['id_rubrique']); |
|
| 278 | + } else { |
|
| 279 | + $contexte['id_parent'] = ''; |
|
| 280 | + } |
|
| 281 | + if ( |
|
| 282 | + !$contexte['id_parent'] |
|
| 283 | + and $preselectionner_parent_nouvel_objet = charger_fonction('preselectionner_parent_nouvel_objet', 'inc', true) |
|
| 284 | + ) { |
|
| 285 | + $contexte['id_parent'] = $preselectionner_parent_nouvel_objet($type, $row); |
|
| 286 | + } |
|
| 287 | + } |
|
| 288 | + |
|
| 289 | + $config = []; |
|
| 290 | + if ($config_fonc) { |
|
| 291 | + $contexte['config'] = $config = $config_fonc($contexte); |
|
| 292 | + if (!$lang_default) { |
|
| 293 | + $lang_default = $config['langue'] ?? session_get('lang') ; |
|
| 294 | + } |
|
| 295 | + } |
|
| 296 | + $config = $config + [ |
|
| 297 | + 'lignes' => 0, |
|
| 298 | + 'langue' => '', |
|
| 299 | + ]; |
|
| 300 | + |
|
| 301 | + $att_text = " class='textarea' " |
|
| 302 | + . " rows='" |
|
| 303 | + . ($config['lignes'] + 15) |
|
| 304 | + . "' cols='40'"; |
|
| 305 | + if (isset($contexte['texte'])) { |
|
| 306 | + [$contexte['texte'], $contexte['_texte_trop_long']] = editer_texte_recolle($contexte['texte'], $att_text); |
|
| 307 | + } |
|
| 308 | + |
|
| 309 | + // on veut conserver la langue de l'interface ; |
|
| 310 | + // on passe cette donnee sous un autre nom, au cas ou le squelette |
|
| 311 | + // voudrait l'exploiter |
|
| 312 | + if (isset($contexte['lang'])) { |
|
| 313 | + $contexte['langue'] = $contexte['lang']; |
|
| 314 | + unset($contexte['lang']); |
|
| 315 | + } |
|
| 316 | + |
|
| 317 | + $contexte['_hidden'] = "<input type='hidden' name='editer_$type' value='oui' />\n" . |
|
| 318 | + (!$lier_trad ? '' : |
|
| 319 | + ("\n<input type='hidden' name='lier_trad' value='" . |
|
| 320 | + $lier_trad . |
|
| 321 | + "' />" . |
|
| 322 | + "\n<input type='hidden' name='changer_lang' value='" . |
|
| 323 | + $lang_default . |
|
| 324 | + "' />")) |
|
| 325 | + . $hidden |
|
| 326 | + . ($md5 ?? ''); |
|
| 327 | + |
|
| 328 | + // preciser que le formulaire doit passer dans un pipeline |
|
| 329 | + $contexte['_pipeline'] = ['editer_contenu_objet', ['type' => $type, 'id' => $id]]; |
|
| 330 | + |
|
| 331 | + // preciser que le formulaire doit etre securise auteur/action |
|
| 332 | + // n'est plus utile lorsque l'action accepte l'id en argument direct |
|
| 333 | + // on le garde pour compat |
|
| 334 | + $contexte['_action'] = ["editer_$type", $id]; |
|
| 335 | + |
|
| 336 | + // et in fine placer l'autorisation |
|
| 337 | + include_spip('inc/autoriser'); |
|
| 338 | + if (intval($id)) { |
|
| 339 | + if (!autoriser('modifier', $type, intval($id))) { |
|
| 340 | + $contexte['editable'] = ''; |
|
| 341 | + } |
|
| 342 | + } |
|
| 343 | + else { |
|
| 344 | + if (!autoriser('creer', $type, 0, null, ['id_parent' => $id_parent])) { |
|
| 345 | + $contexte['editable'] = ''; |
|
| 346 | + } |
|
| 347 | + } |
|
| 348 | + |
|
| 349 | + return $contexte; |
|
| 350 | 350 | } |
| 351 | 351 | |
| 352 | 352 | /** |
@@ -357,29 +357,29 @@ discard block |
||
| 357 | 357 | * @return array |
| 358 | 358 | */ |
| 359 | 359 | function coupe_trop_long($texte) { |
| 360 | - $aider = charger_fonction('aider', 'inc'); |
|
| 361 | - if (strlen($texte) > 28 * 1024) { |
|
| 362 | - $texte = str_replace("\r\n", "\n", $texte); |
|
| 363 | - $pos = strpos($texte, "\n\n", 28 * 1024); // coupe para > 28 ko |
|
| 364 | - if ($pos > 0 and $pos < 32 * 1024) { |
|
| 365 | - $debut = substr($texte, 0, $pos) . "\n\n<!--SPIP-->\n"; |
|
| 366 | - $suite = substr($texte, $pos + 2); |
|
| 367 | - } else { |
|
| 368 | - $pos = strpos($texte, ' ', 28 * 1024); // sinon coupe espace |
|
| 369 | - if (!($pos > 0 and $pos < 32 * 1024)) { |
|
| 370 | - $pos = 28 * 1024; // au pire (pas d'espace trouv'e) |
|
| 371 | - $decalage = 0; // si y'a pas d'espace, il ne faut pas perdre le caract`ere |
|
| 372 | - } else { |
|
| 373 | - $decalage = 1; |
|
| 374 | - } |
|
| 375 | - $debut = substr($texte, 0, $pos + $decalage); // Il faut conserver l'espace s'il y en a un |
|
| 376 | - $suite = substr($texte, $pos + $decalage); |
|
| 377 | - } |
|
| 378 | - |
|
| 379 | - return ([$debut, $suite]); |
|
| 380 | - } else { |
|
| 381 | - return ([$texte, '']); |
|
| 382 | - } |
|
| 360 | + $aider = charger_fonction('aider', 'inc'); |
|
| 361 | + if (strlen($texte) > 28 * 1024) { |
|
| 362 | + $texte = str_replace("\r\n", "\n", $texte); |
|
| 363 | + $pos = strpos($texte, "\n\n", 28 * 1024); // coupe para > 28 ko |
|
| 364 | + if ($pos > 0 and $pos < 32 * 1024) { |
|
| 365 | + $debut = substr($texte, 0, $pos) . "\n\n<!--SPIP-->\n"; |
|
| 366 | + $suite = substr($texte, $pos + 2); |
|
| 367 | + } else { |
|
| 368 | + $pos = strpos($texte, ' ', 28 * 1024); // sinon coupe espace |
|
| 369 | + if (!($pos > 0 and $pos < 32 * 1024)) { |
|
| 370 | + $pos = 28 * 1024; // au pire (pas d'espace trouv'e) |
|
| 371 | + $decalage = 0; // si y'a pas d'espace, il ne faut pas perdre le caract`ere |
|
| 372 | + } else { |
|
| 373 | + $decalage = 1; |
|
| 374 | + } |
|
| 375 | + $debut = substr($texte, 0, $pos + $decalage); // Il faut conserver l'espace s'il y en a un |
|
| 376 | + $suite = substr($texte, $pos + $decalage); |
|
| 377 | + } |
|
| 378 | + |
|
| 379 | + return ([$debut, $suite]); |
|
| 380 | + } else { |
|
| 381 | + return ([$texte, '']); |
|
| 382 | + } |
|
| 383 | 383 | } |
| 384 | 384 | |
| 385 | 385 | /** |
@@ -390,25 +390,25 @@ discard block |
||
| 390 | 390 | * @return array |
| 391 | 391 | */ |
| 392 | 392 | function editer_texte_recolle($texte, $att_text) { |
| 393 | - if ( |
|
| 394 | - (strlen($texte) < 29 * 1024) |
|
| 395 | - or (include_spip('inc/layer') and ($GLOBALS['browser_name'] != 'MSIE')) |
|
| 396 | - ) { |
|
| 397 | - return [$texte, '']; |
|
| 398 | - } |
|
| 399 | - |
|
| 400 | - include_spip('inc/barre'); |
|
| 401 | - $textes_supplement = "<br /><span style='color: red'>" . _T('info_texte_long') . "</span>\n"; |
|
| 402 | - $nombre = 0; |
|
| 403 | - |
|
| 404 | - while (strlen($texte) > 29 * 1024) { |
|
| 405 | - $nombre++; |
|
| 406 | - [$texte1, $texte] = coupe_trop_long($texte); |
|
| 407 | - $textes_supplement .= '<br />' . |
|
| 408 | - "<textarea id='texte$nombre' name='texte_plus[$nombre]'$att_text>$texte1</textarea>\n"; |
|
| 409 | - } |
|
| 410 | - |
|
| 411 | - return [$texte, $textes_supplement]; |
|
| 393 | + if ( |
|
| 394 | + (strlen($texte) < 29 * 1024) |
|
| 395 | + or (include_spip('inc/layer') and ($GLOBALS['browser_name'] != 'MSIE')) |
|
| 396 | + ) { |
|
| 397 | + return [$texte, '']; |
|
| 398 | + } |
|
| 399 | + |
|
| 400 | + include_spip('inc/barre'); |
|
| 401 | + $textes_supplement = "<br /><span style='color: red'>" . _T('info_texte_long') . "</span>\n"; |
|
| 402 | + $nombre = 0; |
|
| 403 | + |
|
| 404 | + while (strlen($texte) > 29 * 1024) { |
|
| 405 | + $nombre++; |
|
| 406 | + [$texte1, $texte] = coupe_trop_long($texte); |
|
| 407 | + $textes_supplement .= '<br />' . |
|
| 408 | + "<textarea id='texte$nombre' name='texte_plus[$nombre]'$att_text>$texte1</textarea>\n"; |
|
| 409 | + } |
|
| 410 | + |
|
| 411 | + return [$texte, $textes_supplement]; |
|
| 412 | 412 | } |
| 413 | 413 | |
| 414 | 414 | /** |
@@ -419,17 +419,17 @@ discard block |
||
| 419 | 419 | * @param int $longueur |
| 420 | 420 | */ |
| 421 | 421 | function titre_automatique($champ_titre, $champs_contenu, $longueur = null) { |
| 422 | - if (!_request($champ_titre)) { |
|
| 423 | - $titrer_contenu = charger_fonction('titrer_contenu', 'inc'); |
|
| 424 | - if (!is_null($longueur)) { |
|
| 425 | - $t = $titrer_contenu($champs_contenu, null, $longueur); |
|
| 426 | - } else { |
|
| 427 | - $t = $titrer_contenu($champs_contenu); |
|
| 428 | - } |
|
| 429 | - if ($t) { |
|
| 430 | - set_request($champ_titre, $t); |
|
| 431 | - } |
|
| 432 | - } |
|
| 422 | + if (!_request($champ_titre)) { |
|
| 423 | + $titrer_contenu = charger_fonction('titrer_contenu', 'inc'); |
|
| 424 | + if (!is_null($longueur)) { |
|
| 425 | + $t = $titrer_contenu($champs_contenu, null, $longueur); |
|
| 426 | + } else { |
|
| 427 | + $t = $titrer_contenu($champs_contenu); |
|
| 428 | + } |
|
| 429 | + if ($t) { |
|
| 430 | + set_request($champ_titre, $t); |
|
| 431 | + } |
|
| 432 | + } |
|
| 433 | 433 | } |
| 434 | 434 | |
| 435 | 435 | /** |
@@ -449,20 +449,20 @@ discard block |
||
| 449 | 449 | * @return string |
| 450 | 450 | */ |
| 451 | 451 | function inc_titrer_contenu_dist($champs_contenu, $c = null, $longueur = 50) { |
| 452 | - // trouver un champ texte non vide |
|
| 453 | - $t = ''; |
|
| 454 | - foreach ($champs_contenu as $champ) { |
|
| 455 | - if ($t = _request($champ, $c)) { |
|
| 456 | - break; |
|
| 457 | - } |
|
| 458 | - } |
|
| 459 | - |
|
| 460 | - if ($t) { |
|
| 461 | - include_spip('inc/texte_mini'); |
|
| 462 | - $t = couper($t, $longueur, '...'); |
|
| 463 | - } |
|
| 464 | - |
|
| 465 | - return $t; |
|
| 452 | + // trouver un champ texte non vide |
|
| 453 | + $t = ''; |
|
| 454 | + foreach ($champs_contenu as $champ) { |
|
| 455 | + if ($t = _request($champ, $c)) { |
|
| 456 | + break; |
|
| 457 | + } |
|
| 458 | + } |
|
| 459 | + |
|
| 460 | + if ($t) { |
|
| 461 | + include_spip('inc/texte_mini'); |
|
| 462 | + $t = couper($t, $longueur, '...'); |
|
| 463 | + } |
|
| 464 | + |
|
| 465 | + return $t; |
|
| 466 | 466 | } |
| 467 | 467 | |
| 468 | 468 | /** |
@@ -484,26 +484,26 @@ discard block |
||
| 484 | 484 | * - array sinon couples ('$prefixe$colonne => md5) |
| 485 | 485 | **/ |
| 486 | 486 | function controles_md5(array $data, string $prefixe = 'ctr_', string $format = 'html') { |
| 487 | - $ctr = []; |
|
| 488 | - foreach ($data as $key => $val) { |
|
| 489 | - $m = md5($val ?? ''); |
|
| 490 | - $k = $prefixe . $key; |
|
| 491 | - |
|
| 492 | - switch ($format) { |
|
| 493 | - case 'html': |
|
| 494 | - $ctr[$k] = "<input type='hidden' value='$m' name='$k' />"; |
|
| 495 | - break; |
|
| 496 | - default: |
|
| 497 | - $ctr[$k] = $m; |
|
| 498 | - break; |
|
| 499 | - } |
|
| 500 | - } |
|
| 501 | - |
|
| 502 | - if ($format === 'html') { |
|
| 503 | - return "\n\n<!-- controles md5 -->\n" . join("\n", $ctr) . "\n\n"; |
|
| 504 | - } else { |
|
| 505 | - return $ctr; |
|
| 506 | - } |
|
| 487 | + $ctr = []; |
|
| 488 | + foreach ($data as $key => $val) { |
|
| 489 | + $m = md5($val ?? ''); |
|
| 490 | + $k = $prefixe . $key; |
|
| 491 | + |
|
| 492 | + switch ($format) { |
|
| 493 | + case 'html': |
|
| 494 | + $ctr[$k] = "<input type='hidden' value='$m' name='$k' />"; |
|
| 495 | + break; |
|
| 496 | + default: |
|
| 497 | + $ctr[$k] = $m; |
|
| 498 | + break; |
|
| 499 | + } |
|
| 500 | + } |
|
| 501 | + |
|
| 502 | + if ($format === 'html') { |
|
| 503 | + return "\n\n<!-- controles md5 -->\n" . join("\n", $ctr) . "\n\n"; |
|
| 504 | + } else { |
|
| 505 | + return $ctr; |
|
| 506 | + } |
|
| 507 | 507 | } |
| 508 | 508 | |
| 509 | 509 | /** |
@@ -542,80 +542,80 @@ discard block |
||
| 542 | 542 | * - post : le contenu posté |
| 543 | 543 | **/ |
| 544 | 544 | function controler_contenu($type, $id, $options = [], $c = false, $serveur = '') { |
| 545 | - include_spip('inc/filtres'); |
|
| 546 | - |
|
| 547 | - $table_objet = table_objet($type); |
|
| 548 | - $spip_table_objet = table_objet_sql($type); |
|
| 549 | - $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 550 | - $desc = $trouver_table($table_objet, $serveur); |
|
| 551 | - |
|
| 552 | - // Appels incomplets (sans $c) |
|
| 553 | - if (!is_array($c)) { |
|
| 554 | - $c = []; |
|
| 555 | - foreach ($desc['field'] as $champ => $ignore) { |
|
| 556 | - if (_request($champ)) { |
|
| 557 | - $c[$champ] = _request($champ); |
|
| 558 | - } |
|
| 559 | - } |
|
| 560 | - } |
|
| 561 | - |
|
| 562 | - // Securite : certaines variables ne sont jamais acceptees ici |
|
| 563 | - // car elles ne relevent pas de autoriser(article, modifier) ; |
|
| 564 | - // il faut passer par instituer_XX() |
|
| 565 | - // TODO: faut-il passer ces variables interdites |
|
| 566 | - // dans un fichier de description separe ? |
|
| 567 | - unset($c['statut']); |
|
| 568 | - unset($c['id_parent']); |
|
| 569 | - unset($c['id_rubrique']); |
|
| 570 | - unset($c['id_secteur']); |
|
| 571 | - |
|
| 572 | - // Gerer les champs non vides |
|
| 573 | - if (isset($options['nonvide']) and is_array($options['nonvide'])) { |
|
| 574 | - foreach ($options['nonvide'] as $champ => $sinon) { |
|
| 575 | - if ($c[$champ] === '') { |
|
| 576 | - $c[$champ] = $sinon; |
|
| 577 | - } |
|
| 578 | - } |
|
| 579 | - } |
|
| 580 | - |
|
| 581 | - // N'accepter que les champs qui existent |
|
| 582 | - // [TODO] ici aussi on peut valider les contenus en fonction du type |
|
| 583 | - $champs = []; |
|
| 584 | - foreach ($desc['field'] as $champ => $ignore) { |
|
| 585 | - if (isset($c[$champ])) { |
|
| 586 | - $champs[$champ] = $c[$champ]; |
|
| 587 | - } |
|
| 588 | - } |
|
| 589 | - |
|
| 590 | - // Nettoyer les valeurs |
|
| 591 | - $champs = array_map('corriger_caracteres', $champs); |
|
| 592 | - |
|
| 593 | - // Envoyer aux plugins |
|
| 594 | - $champs = pipeline( |
|
| 595 | - 'pre_edition', |
|
| 596 | - [ |
|
| 597 | - 'args' => [ |
|
| 598 | - 'table' => $spip_table_objet, // compatibilite |
|
| 599 | - 'table_objet' => $table_objet, |
|
| 600 | - 'spip_table_objet' => $spip_table_objet, |
|
| 601 | - 'type' => $type, |
|
| 602 | - 'id_objet' => $id, |
|
| 603 | - 'champs' => $options['champs'] ?? [], // [doc] c'est quoi ? |
|
| 604 | - 'action' => 'controler', |
|
| 605 | - 'serveur' => $serveur, |
|
| 606 | - ], |
|
| 607 | - 'data' => $champs |
|
| 608 | - ] |
|
| 609 | - ); |
|
| 610 | - |
|
| 611 | - if (!$champs) { |
|
| 612 | - return false; |
|
| 613 | - } |
|
| 614 | - |
|
| 615 | - // Verifier si les mises a jour sont pertinentes, datees, en conflit etc |
|
| 616 | - $conflits = controler_md5($champs, $_POST, $type, $id, $serveur, $options['prefix'] ?? 'ctr_'); |
|
| 617 | - |
|
| 618 | - return $conflits; |
|
| 545 | + include_spip('inc/filtres'); |
|
| 546 | + |
|
| 547 | + $table_objet = table_objet($type); |
|
| 548 | + $spip_table_objet = table_objet_sql($type); |
|
| 549 | + $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 550 | + $desc = $trouver_table($table_objet, $serveur); |
|
| 551 | + |
|
| 552 | + // Appels incomplets (sans $c) |
|
| 553 | + if (!is_array($c)) { |
|
| 554 | + $c = []; |
|
| 555 | + foreach ($desc['field'] as $champ => $ignore) { |
|
| 556 | + if (_request($champ)) { |
|
| 557 | + $c[$champ] = _request($champ); |
|
| 558 | + } |
|
| 559 | + } |
|
| 560 | + } |
|
| 561 | + |
|
| 562 | + // Securite : certaines variables ne sont jamais acceptees ici |
|
| 563 | + // car elles ne relevent pas de autoriser(article, modifier) ; |
|
| 564 | + // il faut passer par instituer_XX() |
|
| 565 | + // TODO: faut-il passer ces variables interdites |
|
| 566 | + // dans un fichier de description separe ? |
|
| 567 | + unset($c['statut']); |
|
| 568 | + unset($c['id_parent']); |
|
| 569 | + unset($c['id_rubrique']); |
|
| 570 | + unset($c['id_secteur']); |
|
| 571 | + |
|
| 572 | + // Gerer les champs non vides |
|
| 573 | + if (isset($options['nonvide']) and is_array($options['nonvide'])) { |
|
| 574 | + foreach ($options['nonvide'] as $champ => $sinon) { |
|
| 575 | + if ($c[$champ] === '') { |
|
| 576 | + $c[$champ] = $sinon; |
|
| 577 | + } |
|
| 578 | + } |
|
| 579 | + } |
|
| 580 | + |
|
| 581 | + // N'accepter que les champs qui existent |
|
| 582 | + // [TODO] ici aussi on peut valider les contenus en fonction du type |
|
| 583 | + $champs = []; |
|
| 584 | + foreach ($desc['field'] as $champ => $ignore) { |
|
| 585 | + if (isset($c[$champ])) { |
|
| 586 | + $champs[$champ] = $c[$champ]; |
|
| 587 | + } |
|
| 588 | + } |
|
| 589 | + |
|
| 590 | + // Nettoyer les valeurs |
|
| 591 | + $champs = array_map('corriger_caracteres', $champs); |
|
| 592 | + |
|
| 593 | + // Envoyer aux plugins |
|
| 594 | + $champs = pipeline( |
|
| 595 | + 'pre_edition', |
|
| 596 | + [ |
|
| 597 | + 'args' => [ |
|
| 598 | + 'table' => $spip_table_objet, // compatibilite |
|
| 599 | + 'table_objet' => $table_objet, |
|
| 600 | + 'spip_table_objet' => $spip_table_objet, |
|
| 601 | + 'type' => $type, |
|
| 602 | + 'id_objet' => $id, |
|
| 603 | + 'champs' => $options['champs'] ?? [], // [doc] c'est quoi ? |
|
| 604 | + 'action' => 'controler', |
|
| 605 | + 'serveur' => $serveur, |
|
| 606 | + ], |
|
| 607 | + 'data' => $champs |
|
| 608 | + ] |
|
| 609 | + ); |
|
| 610 | + |
|
| 611 | + if (!$champs) { |
|
| 612 | + return false; |
|
| 613 | + } |
|
| 614 | + |
|
| 615 | + // Verifier si les mises a jour sont pertinentes, datees, en conflit etc |
|
| 616 | + $conflits = controler_md5($champs, $_POST, $type, $id, $serveur, $options['prefix'] ?? 'ctr_'); |
|
| 617 | + |
|
| 618 | + return $conflits; |
|
| 619 | 619 | } |
| 620 | 620 | |
| 621 | 621 | |
@@ -645,64 +645,64 @@ discard block |
||
| 645 | 645 | * - post : le contenu posté |
| 646 | 646 | **/ |
| 647 | 647 | function controler_md5(&$champs, $ctr, $type, $id, $serveur, $prefix = 'ctr_') { |
| 648 | - $spip_table_objet = table_objet_sql($type); |
|
| 649 | - $id_table_objet = id_table_objet($type); |
|
| 650 | - |
|
| 651 | - // Controle des MD5 envoyes |
|
| 652 | - // On elimine les donnees non modifiees par le formulaire (mais |
|
| 653 | - // potentiellement modifiees entre temps par un autre utilisateur) |
|
| 654 | - foreach ($champs as $key => $val) { |
|
| 655 | - if (isset($ctr[$prefix . $key]) and $m = $ctr[$prefix . $key]) { |
|
| 656 | - if (is_scalar($val) and $m == md5($val)) { |
|
| 657 | - unset($champs[$key]); |
|
| 658 | - } |
|
| 659 | - } |
|
| 660 | - } |
|
| 661 | - if (!$champs) { |
|
| 662 | - return; |
|
| 663 | - } |
|
| 664 | - |
|
| 665 | - // On veut savoir si notre modif va avoir un impact |
|
| 666 | - // par rapport aux donnees contenues dans la base |
|
| 667 | - // (qui peuvent etre differentes de celles ayant servi a calculer le ctr) |
|
| 668 | - $s = sql_fetsel(array_keys($champs), $spip_table_objet, "$id_table_objet=$id", $serveur); |
|
| 669 | - $intact = true; |
|
| 670 | - foreach ($champs as $ch => $val) { |
|
| 671 | - $intact &= ($s[$ch] == $val); |
|
| 672 | - } |
|
| 673 | - if ($intact) { |
|
| 674 | - return; |
|
| 675 | - } |
|
| 676 | - |
|
| 677 | - // Detection de conflits : |
|
| 678 | - // On verifie si notre modif ne provient pas d'un formulaire |
|
| 679 | - // genere a partir de donnees modifiees dans l'intervalle ; ici |
|
| 680 | - // on compare a ce qui est dans la base, et on bloque en cas |
|
| 681 | - // de conflit. |
|
| 682 | - $ctrh = $ctrq = $conflits = []; |
|
| 683 | - foreach (array_keys($champs) as $key) { |
|
| 684 | - if (isset($ctr[$prefix . $key]) and $m = $ctr[$prefix . $key]) { |
|
| 685 | - $ctrh[$key] = $m; |
|
| 686 | - $ctrq[] = $key; |
|
| 687 | - } |
|
| 688 | - } |
|
| 689 | - if ($ctrq) { |
|
| 690 | - $ctrq = sql_fetsel($ctrq, $spip_table_objet, "$id_table_objet=$id", $serveur); |
|
| 691 | - foreach ($ctrh as $key => $m) { |
|
| 692 | - if ( |
|
| 693 | - $m != md5($ctrq[$key]) |
|
| 694 | - and $champs[$key] !== $ctrq[$key] |
|
| 695 | - ) { |
|
| 696 | - $conflits[$key] = [ |
|
| 697 | - 'base' => $ctrq[$key], |
|
| 698 | - 'post' => $champs[$key] |
|
| 699 | - ]; |
|
| 700 | - unset($champs[$key]); # stocker quand meme les modifs ? |
|
| 701 | - } |
|
| 702 | - } |
|
| 703 | - } |
|
| 704 | - |
|
| 705 | - return $conflits; |
|
| 648 | + $spip_table_objet = table_objet_sql($type); |
|
| 649 | + $id_table_objet = id_table_objet($type); |
|
| 650 | + |
|
| 651 | + // Controle des MD5 envoyes |
|
| 652 | + // On elimine les donnees non modifiees par le formulaire (mais |
|
| 653 | + // potentiellement modifiees entre temps par un autre utilisateur) |
|
| 654 | + foreach ($champs as $key => $val) { |
|
| 655 | + if (isset($ctr[$prefix . $key]) and $m = $ctr[$prefix . $key]) { |
|
| 656 | + if (is_scalar($val) and $m == md5($val)) { |
|
| 657 | + unset($champs[$key]); |
|
| 658 | + } |
|
| 659 | + } |
|
| 660 | + } |
|
| 661 | + if (!$champs) { |
|
| 662 | + return; |
|
| 663 | + } |
|
| 664 | + |
|
| 665 | + // On veut savoir si notre modif va avoir un impact |
|
| 666 | + // par rapport aux donnees contenues dans la base |
|
| 667 | + // (qui peuvent etre differentes de celles ayant servi a calculer le ctr) |
|
| 668 | + $s = sql_fetsel(array_keys($champs), $spip_table_objet, "$id_table_objet=$id", $serveur); |
|
| 669 | + $intact = true; |
|
| 670 | + foreach ($champs as $ch => $val) { |
|
| 671 | + $intact &= ($s[$ch] == $val); |
|
| 672 | + } |
|
| 673 | + if ($intact) { |
|
| 674 | + return; |
|
| 675 | + } |
|
| 676 | + |
|
| 677 | + // Detection de conflits : |
|
| 678 | + // On verifie si notre modif ne provient pas d'un formulaire |
|
| 679 | + // genere a partir de donnees modifiees dans l'intervalle ; ici |
|
| 680 | + // on compare a ce qui est dans la base, et on bloque en cas |
|
| 681 | + // de conflit. |
|
| 682 | + $ctrh = $ctrq = $conflits = []; |
|
| 683 | + foreach (array_keys($champs) as $key) { |
|
| 684 | + if (isset($ctr[$prefix . $key]) and $m = $ctr[$prefix . $key]) { |
|
| 685 | + $ctrh[$key] = $m; |
|
| 686 | + $ctrq[] = $key; |
|
| 687 | + } |
|
| 688 | + } |
|
| 689 | + if ($ctrq) { |
|
| 690 | + $ctrq = sql_fetsel($ctrq, $spip_table_objet, "$id_table_objet=$id", $serveur); |
|
| 691 | + foreach ($ctrh as $key => $m) { |
|
| 692 | + if ( |
|
| 693 | + $m != md5($ctrq[$key]) |
|
| 694 | + and $champs[$key] !== $ctrq[$key] |
|
| 695 | + ) { |
|
| 696 | + $conflits[$key] = [ |
|
| 697 | + 'base' => $ctrq[$key], |
|
| 698 | + 'post' => $champs[$key] |
|
| 699 | + ]; |
|
| 700 | + unset($champs[$key]); # stocker quand meme les modifs ? |
|
| 701 | + } |
|
| 702 | + } |
|
| 703 | + } |
|
| 704 | + |
|
| 705 | + return $conflits; |
|
| 706 | 706 | } |
| 707 | 707 | |
| 708 | 708 | /** |
@@ -714,9 +714,9 @@ discard block |
||
| 714 | 714 | * @return string |
| 715 | 715 | */ |
| 716 | 716 | function display_conflit_champ($x) { |
| 717 | - if (strstr($x, "\n") or strlen($x) > 80) { |
|
| 718 | - return "<textarea style='width:99%; height:10em;'>" . entites_html($x) . "</textarea>\n"; |
|
| 719 | - } else { |
|
| 720 | - return "<input type='text' size='40' style='width:99%' value=\"" . entites_html($x) . "\" />\n"; |
|
| 721 | - } |
|
| 717 | + if (strstr($x, "\n") or strlen($x) > 80) { |
|
| 718 | + return "<textarea style='width:99%; height:10em;'>" . entites_html($x) . "</textarea>\n"; |
|
| 719 | + } else { |
|
| 720 | + return "<input type='text' size='40' style='width:99%' value=\"" . entites_html($x) . "\" />\n"; |
|
| 721 | + } |
|
| 722 | 722 | } |
@@ -23,7 +23,7 @@ discard block |
||
| 23 | 23 | **/ |
| 24 | 24 | |
| 25 | 25 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 26 | - return; |
|
| 26 | + return; |
|
| 27 | 27 | } |
| 28 | 28 | |
| 29 | 29 | // public/interfaces definit des traitements sur les champs qui utilisent des fonctions de inc/texte |
@@ -55,75 +55,75 @@ discard block |
||
| 55 | 55 | * Introduction calculée |
| 56 | 56 | **/ |
| 57 | 57 | function filtre_introduction_dist($descriptif, $texte, $longueur, $connect, $suite = null) { |
| 58 | - // Si un descriptif est envoye, on l'utilise directement |
|
| 59 | - if (strlen($descriptif)) { |
|
| 60 | - return appliquer_traitement_champ($descriptif, 'introduction', '', [], $connect); |
|
| 61 | - } |
|
| 62 | - |
|
| 63 | - // De preference ce qui est marque <intro>...</intro> |
|
| 64 | - $intro = ''; |
|
| 65 | - $texte = preg_replace(',(</?)intro>,i', "\\1intro>", $texte); // minuscules |
|
| 66 | - while ($fin = strpos($texte, '</intro>')) { |
|
| 67 | - $zone = substr($texte, 0, $fin); |
|
| 68 | - $texte = substr($texte, $fin + strlen('</intro>')); |
|
| 69 | - if ($deb = strpos($zone, '<intro>') or substr($zone, 0, 7) == '<intro>') { |
|
| 70 | - $zone = substr($zone, $deb + 7); |
|
| 71 | - } |
|
| 72 | - $intro .= $zone; |
|
| 73 | - } |
|
| 74 | - |
|
| 75 | - // [12025] On ne *PEUT* pas couper simplement ici car c'est du texte brut, |
|
| 76 | - // qui inclus raccourcis et modeles |
|
| 77 | - // un simple <articlexx> peut etre ensuite transforme en 1000 lignes ... |
|
| 78 | - // par ailleurs le nettoyage des raccourcis ne tient pas compte |
|
| 79 | - // des surcharges et enrichissement de propre |
|
| 80 | - // couper doit se faire apres propre |
|
| 81 | - //$texte = nettoyer_raccourcis_typo($intro ? $intro : $texte, $connect); |
|
| 82 | - |
|
| 83 | - // Cependant pour des questions de perfs on coupe quand meme, en prenant |
|
| 84 | - // large et en se mefiant des tableaux #1323 |
|
| 85 | - |
|
| 86 | - if (strlen($intro)) { |
|
| 87 | - $texte = $intro; |
|
| 88 | - } else { |
|
| 89 | - if ( |
|
| 90 | - strpos("\n" . $texte, "\n|") === false |
|
| 91 | - and strlen($texte) > 2.5 * $longueur |
|
| 92 | - ) { |
|
| 93 | - if (strpos($texte, '<multi') !== false) { |
|
| 94 | - $texte = extraire_multi($texte); |
|
| 95 | - } |
|
| 96 | - $texte = couper($texte, 2 * $longueur); |
|
| 97 | - } |
|
| 98 | - } |
|
| 99 | - |
|
| 100 | - // ne pas tenir compte des notes |
|
| 101 | - if ($notes = charger_fonction('notes', 'inc', true)) { |
|
| 102 | - $notes('', 'empiler'); |
|
| 103 | - } |
|
| 104 | - // Supprimer les modèles avant le propre afin d'éviter qu'ils n'ajoutent du texte indésirable |
|
| 105 | - // dans l'introduction. |
|
| 106 | - $texte = supprime_img($texte, ''); |
|
| 107 | - $texte = appliquer_traitement_champ($texte, 'introduction', '', [], $connect); |
|
| 108 | - |
|
| 109 | - if ($notes) { |
|
| 110 | - $notes('', 'depiler'); |
|
| 111 | - } |
|
| 112 | - |
|
| 113 | - if (is_null($suite) and defined('_INTRODUCTION_SUITE')) { |
|
| 114 | - $suite = _INTRODUCTION_SUITE; |
|
| 115 | - } |
|
| 116 | - $texte = couper($texte, $longueur, $suite); |
|
| 117 | - // comme on a coupe il faut repasser la typo (on a perdu les insecables) |
|
| 118 | - $texte = typo($texte, true, $connect, []); |
|
| 119 | - |
|
| 120 | - // et reparagrapher si necessaire (coherence avec le cas descriptif) |
|
| 121 | - // une introduction a tojours un <p> |
|
| 122 | - if ($GLOBALS['toujours_paragrapher']) { // Fermer les paragraphes |
|
| 123 | - $texte = paragrapher($texte, $GLOBALS['toujours_paragrapher']); |
|
| 124 | - } |
|
| 125 | - |
|
| 126 | - return $texte; |
|
| 58 | + // Si un descriptif est envoye, on l'utilise directement |
|
| 59 | + if (strlen($descriptif)) { |
|
| 60 | + return appliquer_traitement_champ($descriptif, 'introduction', '', [], $connect); |
|
| 61 | + } |
|
| 62 | + |
|
| 63 | + // De preference ce qui est marque <intro>...</intro> |
|
| 64 | + $intro = ''; |
|
| 65 | + $texte = preg_replace(',(</?)intro>,i', "\\1intro>", $texte); // minuscules |
|
| 66 | + while ($fin = strpos($texte, '</intro>')) { |
|
| 67 | + $zone = substr($texte, 0, $fin); |
|
| 68 | + $texte = substr($texte, $fin + strlen('</intro>')); |
|
| 69 | + if ($deb = strpos($zone, '<intro>') or substr($zone, 0, 7) == '<intro>') { |
|
| 70 | + $zone = substr($zone, $deb + 7); |
|
| 71 | + } |
|
| 72 | + $intro .= $zone; |
|
| 73 | + } |
|
| 74 | + |
|
| 75 | + // [12025] On ne *PEUT* pas couper simplement ici car c'est du texte brut, |
|
| 76 | + // qui inclus raccourcis et modeles |
|
| 77 | + // un simple <articlexx> peut etre ensuite transforme en 1000 lignes ... |
|
| 78 | + // par ailleurs le nettoyage des raccourcis ne tient pas compte |
|
| 79 | + // des surcharges et enrichissement de propre |
|
| 80 | + // couper doit se faire apres propre |
|
| 81 | + //$texte = nettoyer_raccourcis_typo($intro ? $intro : $texte, $connect); |
|
| 82 | + |
|
| 83 | + // Cependant pour des questions de perfs on coupe quand meme, en prenant |
|
| 84 | + // large et en se mefiant des tableaux #1323 |
|
| 85 | + |
|
| 86 | + if (strlen($intro)) { |
|
| 87 | + $texte = $intro; |
|
| 88 | + } else { |
|
| 89 | + if ( |
|
| 90 | + strpos("\n" . $texte, "\n|") === false |
|
| 91 | + and strlen($texte) > 2.5 * $longueur |
|
| 92 | + ) { |
|
| 93 | + if (strpos($texte, '<multi') !== false) { |
|
| 94 | + $texte = extraire_multi($texte); |
|
| 95 | + } |
|
| 96 | + $texte = couper($texte, 2 * $longueur); |
|
| 97 | + } |
|
| 98 | + } |
|
| 99 | + |
|
| 100 | + // ne pas tenir compte des notes |
|
| 101 | + if ($notes = charger_fonction('notes', 'inc', true)) { |
|
| 102 | + $notes('', 'empiler'); |
|
| 103 | + } |
|
| 104 | + // Supprimer les modèles avant le propre afin d'éviter qu'ils n'ajoutent du texte indésirable |
|
| 105 | + // dans l'introduction. |
|
| 106 | + $texte = supprime_img($texte, ''); |
|
| 107 | + $texte = appliquer_traitement_champ($texte, 'introduction', '', [], $connect); |
|
| 108 | + |
|
| 109 | + if ($notes) { |
|
| 110 | + $notes('', 'depiler'); |
|
| 111 | + } |
|
| 112 | + |
|
| 113 | + if (is_null($suite) and defined('_INTRODUCTION_SUITE')) { |
|
| 114 | + $suite = _INTRODUCTION_SUITE; |
|
| 115 | + } |
|
| 116 | + $texte = couper($texte, $longueur, $suite); |
|
| 117 | + // comme on a coupe il faut repasser la typo (on a perdu les insecables) |
|
| 118 | + $texte = typo($texte, true, $connect, []); |
|
| 119 | + |
|
| 120 | + // et reparagrapher si necessaire (coherence avec le cas descriptif) |
|
| 121 | + // une introduction a tojours un <p> |
|
| 122 | + if ($GLOBALS['toujours_paragrapher']) { // Fermer les paragraphes |
|
| 123 | + $texte = paragrapher($texte, $GLOBALS['toujours_paragrapher']); |
|
| 124 | + } |
|
| 125 | + |
|
| 126 | + return $texte; |
|
| 127 | 127 | } |
| 128 | 128 | |
| 129 | 129 | |
@@ -158,73 +158,73 @@ discard block |
||
| 158 | 158 | * Code HTML de la pagination |
| 159 | 159 | **/ |
| 160 | 160 | function filtre_pagination_dist( |
| 161 | - $total, |
|
| 162 | - $nom, |
|
| 163 | - $position, |
|
| 164 | - $pas, |
|
| 165 | - $liste = true, |
|
| 166 | - $modele = '', |
|
| 167 | - string $connect = '', |
|
| 168 | - $env = [] |
|
| 161 | + $total, |
|
| 162 | + $nom, |
|
| 163 | + $position, |
|
| 164 | + $pas, |
|
| 165 | + $liste = true, |
|
| 166 | + $modele = '', |
|
| 167 | + string $connect = '', |
|
| 168 | + $env = [] |
|
| 169 | 169 | ) { |
| 170 | - static $ancres = []; |
|
| 171 | - if ($pas < 1) { |
|
| 172 | - return ''; |
|
| 173 | - } |
|
| 174 | - $ancre = 'pagination' . $nom; // #pagination_articles |
|
| 175 | - $debut = 'debut' . $nom; // 'debut_articles' |
|
| 176 | - |
|
| 177 | - // n'afficher l'ancre qu'une fois |
|
| 178 | - if (!isset($ancres[$ancre])) { |
|
| 179 | - $bloc_ancre = $ancres[$ancre] = "<a id='" . $ancre . "' class='pagination_ancre'></a>"; |
|
| 180 | - } else { |
|
| 181 | - $bloc_ancre = ''; |
|
| 182 | - } |
|
| 183 | - // liste = false : on ne veut que l'ancre |
|
| 184 | - if (!$liste) { |
|
| 185 | - return $ancres[$ancre]; |
|
| 186 | - } |
|
| 187 | - |
|
| 188 | - $self = (empty($env['self']) ? self() : $env['self']); |
|
| 189 | - $pagination = [ |
|
| 190 | - 'debut' => $debut, |
|
| 191 | - 'url' => parametre_url($self, 'fragment', ''), // nettoyer l'id ahah eventuel |
|
| 192 | - 'total' => $total, |
|
| 193 | - 'position' => intval($position), |
|
| 194 | - 'pas' => $pas, |
|
| 195 | - 'nombre_pages' => floor(($total - 1) / $pas) + 1, |
|
| 196 | - 'page_courante' => floor(intval($position) / $pas) + 1, |
|
| 197 | - 'ancre' => $ancre, |
|
| 198 | - 'bloc_ancre' => $bloc_ancre |
|
| 199 | - ]; |
|
| 200 | - if (is_array($env)) { |
|
| 201 | - $pagination = array_merge($env, $pagination); |
|
| 202 | - } |
|
| 203 | - |
|
| 204 | - // Pas de pagination |
|
| 205 | - if ($pagination['nombre_pages'] <= 1) { |
|
| 206 | - return ''; |
|
| 207 | - } |
|
| 208 | - |
|
| 209 | - if ($modele) { |
|
| 210 | - $pagination['type_pagination'] = $modele; |
|
| 211 | - if (trouver_fond('pagination_' . $modele, 'modeles')) { |
|
| 212 | - $modele = '_' . $modele; |
|
| 213 | - } |
|
| 214 | - else { |
|
| 215 | - $modele = ''; |
|
| 216 | - } |
|
| 217 | - } |
|
| 218 | - |
|
| 219 | - if (!defined('_PAGINATION_NOMBRE_LIENS_MAX')) { |
|
| 220 | - define('_PAGINATION_NOMBRE_LIENS_MAX', 10); |
|
| 221 | - } |
|
| 222 | - if (!defined('_PAGINATION_NOMBRE_LIENS_MAX_ECRIRE')) { |
|
| 223 | - define('_PAGINATION_NOMBRE_LIENS_MAX_ECRIRE', 5); |
|
| 224 | - } |
|
| 225 | - |
|
| 226 | - |
|
| 227 | - return recuperer_fond("modeles/pagination$modele", $pagination, ['trim' => true], $connect); |
|
| 170 | + static $ancres = []; |
|
| 171 | + if ($pas < 1) { |
|
| 172 | + return ''; |
|
| 173 | + } |
|
| 174 | + $ancre = 'pagination' . $nom; // #pagination_articles |
|
| 175 | + $debut = 'debut' . $nom; // 'debut_articles' |
|
| 176 | + |
|
| 177 | + // n'afficher l'ancre qu'une fois |
|
| 178 | + if (!isset($ancres[$ancre])) { |
|
| 179 | + $bloc_ancre = $ancres[$ancre] = "<a id='" . $ancre . "' class='pagination_ancre'></a>"; |
|
| 180 | + } else { |
|
| 181 | + $bloc_ancre = ''; |
|
| 182 | + } |
|
| 183 | + // liste = false : on ne veut que l'ancre |
|
| 184 | + if (!$liste) { |
|
| 185 | + return $ancres[$ancre]; |
|
| 186 | + } |
|
| 187 | + |
|
| 188 | + $self = (empty($env['self']) ? self() : $env['self']); |
|
| 189 | + $pagination = [ |
|
| 190 | + 'debut' => $debut, |
|
| 191 | + 'url' => parametre_url($self, 'fragment', ''), // nettoyer l'id ahah eventuel |
|
| 192 | + 'total' => $total, |
|
| 193 | + 'position' => intval($position), |
|
| 194 | + 'pas' => $pas, |
|
| 195 | + 'nombre_pages' => floor(($total - 1) / $pas) + 1, |
|
| 196 | + 'page_courante' => floor(intval($position) / $pas) + 1, |
|
| 197 | + 'ancre' => $ancre, |
|
| 198 | + 'bloc_ancre' => $bloc_ancre |
|
| 199 | + ]; |
|
| 200 | + if (is_array($env)) { |
|
| 201 | + $pagination = array_merge($env, $pagination); |
|
| 202 | + } |
|
| 203 | + |
|
| 204 | + // Pas de pagination |
|
| 205 | + if ($pagination['nombre_pages'] <= 1) { |
|
| 206 | + return ''; |
|
| 207 | + } |
|
| 208 | + |
|
| 209 | + if ($modele) { |
|
| 210 | + $pagination['type_pagination'] = $modele; |
|
| 211 | + if (trouver_fond('pagination_' . $modele, 'modeles')) { |
|
| 212 | + $modele = '_' . $modele; |
|
| 213 | + } |
|
| 214 | + else { |
|
| 215 | + $modele = ''; |
|
| 216 | + } |
|
| 217 | + } |
|
| 218 | + |
|
| 219 | + if (!defined('_PAGINATION_NOMBRE_LIENS_MAX')) { |
|
| 220 | + define('_PAGINATION_NOMBRE_LIENS_MAX', 10); |
|
| 221 | + } |
|
| 222 | + if (!defined('_PAGINATION_NOMBRE_LIENS_MAX_ECRIRE')) { |
|
| 223 | + define('_PAGINATION_NOMBRE_LIENS_MAX_ECRIRE', 5); |
|
| 224 | + } |
|
| 225 | + |
|
| 226 | + |
|
| 227 | + return recuperer_fond("modeles/pagination$modele", $pagination, ['trim' => true], $connect); |
|
| 228 | 228 | } |
| 229 | 229 | |
| 230 | 230 | |
@@ -243,44 +243,44 @@ discard block |
||
| 243 | 243 | * Liste (première page, dernière page). |
| 244 | 244 | **/ |
| 245 | 245 | function filtre_bornes_pagination_dist($courante, $nombre, $max = 10) { |
| 246 | - if ($max <= 0 or $max >= $nombre) { |
|
| 247 | - return [1, $nombre]; |
|
| 248 | - } |
|
| 249 | - if ($max <= 1) { |
|
| 250 | - return [$courante, $courante]; |
|
| 251 | - } |
|
| 252 | - |
|
| 253 | - $premiere = max(1, $courante - floor(($max - 1) / 2)); |
|
| 254 | - $derniere = min($nombre, $premiere + $max - 2); |
|
| 255 | - $premiere = $derniere == $nombre ? $derniere - $max + 1 : $premiere; |
|
| 256 | - |
|
| 257 | - return [$premiere, $derniere]; |
|
| 246 | + if ($max <= 0 or $max >= $nombre) { |
|
| 247 | + return [1, $nombre]; |
|
| 248 | + } |
|
| 249 | + if ($max <= 1) { |
|
| 250 | + return [$courante, $courante]; |
|
| 251 | + } |
|
| 252 | + |
|
| 253 | + $premiere = max(1, $courante - floor(($max - 1) / 2)); |
|
| 254 | + $derniere = min($nombre, $premiere + $max - 2); |
|
| 255 | + $premiere = $derniere == $nombre ? $derniere - $max + 1 : $premiere; |
|
| 256 | + |
|
| 257 | + return [$premiere, $derniere]; |
|
| 258 | 258 | } |
| 259 | 259 | |
| 260 | 260 | function filtre_pagination_affiche_texte_lien_page_dist($type_pagination, $numero_page, $rang_item) { |
| 261 | - if ($numero_page === 'tous') { |
|
| 262 | - return '∞'; |
|
| 263 | - } |
|
| 264 | - if ($numero_page === 'prev') { |
|
| 265 | - return '<'; |
|
| 266 | - } |
|
| 267 | - if ($numero_page === 'next') { |
|
| 268 | - return '>'; |
|
| 269 | - } |
|
| 270 | - |
|
| 271 | - switch ($type_pagination) { |
|
| 272 | - case 'resultats': |
|
| 273 | - return $rang_item + 1; // 1 11 21 31... |
|
| 274 | - case 'naturel': |
|
| 275 | - return $rang_item ?: 1; // 1 10 20 30... |
|
| 276 | - case 'rang': |
|
| 277 | - return $rang_item; // 0 10 20 30... |
|
| 278 | - |
|
| 279 | - case 'page': |
|
| 280 | - case 'prive': |
|
| 281 | - default: |
|
| 282 | - return $numero_page; // 1 2 3 4 5... |
|
| 283 | - } |
|
| 261 | + if ($numero_page === 'tous') { |
|
| 262 | + return '∞'; |
|
| 263 | + } |
|
| 264 | + if ($numero_page === 'prev') { |
|
| 265 | + return '<'; |
|
| 266 | + } |
|
| 267 | + if ($numero_page === 'next') { |
|
| 268 | + return '>'; |
|
| 269 | + } |
|
| 270 | + |
|
| 271 | + switch ($type_pagination) { |
|
| 272 | + case 'resultats': |
|
| 273 | + return $rang_item + 1; // 1 11 21 31... |
|
| 274 | + case 'naturel': |
|
| 275 | + return $rang_item ?: 1; // 1 10 20 30... |
|
| 276 | + case 'rang': |
|
| 277 | + return $rang_item; // 0 10 20 30... |
|
| 278 | + |
|
| 279 | + case 'page': |
|
| 280 | + case 'prive': |
|
| 281 | + default: |
|
| 282 | + return $numero_page; // 1 2 3 4 5... |
|
| 283 | + } |
|
| 284 | 284 | } |
| 285 | 285 | |
| 286 | 286 | /** |
@@ -293,15 +293,15 @@ discard block |
||
| 293 | 293 | **/ |
| 294 | 294 | function lister_objets_avec_logos($type) { |
| 295 | 295 | |
| 296 | - $objet = objet_type($type); |
|
| 297 | - $ids = sql_allfetsel('L.id_objet', 'spip_documents AS D JOIN spip_documents_liens AS L ON L.id_document=D.id_document', 'D.mode=' . sql_quote('logoon') . ' AND L.objet=' . sql_quote($objet)); |
|
| 298 | - if ($ids) { |
|
| 299 | - $ids = array_column($ids, 'id_objet'); |
|
| 300 | - return implode(',', $ids); |
|
| 301 | - } |
|
| 302 | - else { |
|
| 303 | - return '0'; |
|
| 304 | - } |
|
| 296 | + $objet = objet_type($type); |
|
| 297 | + $ids = sql_allfetsel('L.id_objet', 'spip_documents AS D JOIN spip_documents_liens AS L ON L.id_document=D.id_document', 'D.mode=' . sql_quote('logoon') . ' AND L.objet=' . sql_quote($objet)); |
|
| 298 | + if ($ids) { |
|
| 299 | + $ids = array_column($ids, 'id_objet'); |
|
| 300 | + return implode(',', $ids); |
|
| 301 | + } |
|
| 302 | + else { |
|
| 303 | + return '0'; |
|
| 304 | + } |
|
| 305 | 305 | } |
| 306 | 306 | |
| 307 | 307 | |
@@ -317,14 +317,14 @@ discard block |
||
| 317 | 317 | * Code HTML des notes |
| 318 | 318 | **/ |
| 319 | 319 | function calculer_notes() { |
| 320 | - $r = ''; |
|
| 321 | - if ($notes = charger_fonction('notes', 'inc', true)) { |
|
| 322 | - $r = $notes([]); |
|
| 323 | - $notes('', 'depiler'); |
|
| 324 | - $notes('', 'empiler'); |
|
| 325 | - } |
|
| 326 | - |
|
| 327 | - return $r; |
|
| 320 | + $r = ''; |
|
| 321 | + if ($notes = charger_fonction('notes', 'inc', true)) { |
|
| 322 | + $r = $notes([]); |
|
| 323 | + $notes('', 'depiler'); |
|
| 324 | + $notes('', 'empiler'); |
|
| 325 | + } |
|
| 326 | + |
|
| 327 | + return $r; |
|
| 328 | 328 | } |
| 329 | 329 | |
| 330 | 330 | |
@@ -341,10 +341,10 @@ discard block |
||
| 341 | 341 | * @return string |
| 342 | 342 | */ |
| 343 | 343 | function retrouver_rang_lien($objet_source, $ids, $objet_lie, $idl, $objet_lien) { |
| 344 | - $res = lister_objets_liens($objet_source, $objet_lie, $idl, $objet_lien); |
|
| 345 | - $res = array_column($res, 'rang_lien', $objet_source); |
|
| 344 | + $res = lister_objets_liens($objet_source, $objet_lie, $idl, $objet_lien); |
|
| 345 | + $res = array_column($res, 'rang_lien', $objet_source); |
|
| 346 | 346 | |
| 347 | - return ($res[$ids] ?? ''); |
|
| 347 | + return ($res[$ids] ?? ''); |
|
| 348 | 348 | } |
| 349 | 349 | |
| 350 | 350 | |
@@ -361,19 +361,19 @@ discard block |
||
| 361 | 361 | * @private |
| 362 | 362 | */ |
| 363 | 363 | function lister_objets_liens($objet_source, $objet, $id_objet, $objet_lien) { |
| 364 | - static $liens = []; |
|
| 365 | - if (!isset($liens["$objet_source-$objet-$id_objet-$objet_lien"])) { |
|
| 366 | - include_spip('action/editer_liens'); |
|
| 367 | - // quand $objet == $objet_lien == $objet_source on reste sur le cas par defaut de $objet_lien == $objet_source |
|
| 368 | - if ($objet_lien == $objet and $objet_lien !== $objet_source) { |
|
| 369 | - $res = objet_trouver_liens([$objet => $id_objet], [$objet_source => '*']); |
|
| 370 | - } else { |
|
| 371 | - $res = objet_trouver_liens([$objet_source => '*'], [$objet => $id_objet]); |
|
| 372 | - } |
|
| 373 | - |
|
| 374 | - $liens["$objet_source-$objet-$id_objet-$objet_lien"] = $res; |
|
| 375 | - } |
|
| 376 | - return $liens["$objet_source-$objet-$id_objet-$objet_lien"]; |
|
| 364 | + static $liens = []; |
|
| 365 | + if (!isset($liens["$objet_source-$objet-$id_objet-$objet_lien"])) { |
|
| 366 | + include_spip('action/editer_liens'); |
|
| 367 | + // quand $objet == $objet_lien == $objet_source on reste sur le cas par defaut de $objet_lien == $objet_source |
|
| 368 | + if ($objet_lien == $objet and $objet_lien !== $objet_source) { |
|
| 369 | + $res = objet_trouver_liens([$objet => $id_objet], [$objet_source => '*']); |
|
| 370 | + } else { |
|
| 371 | + $res = objet_trouver_liens([$objet_source => '*'], [$objet => $id_objet]); |
|
| 372 | + } |
|
| 373 | + |
|
| 374 | + $liens["$objet_source-$objet-$id_objet-$objet_lien"] = $res; |
|
| 375 | + } |
|
| 376 | + return $liens["$objet_source-$objet-$id_objet-$objet_lien"]; |
|
| 377 | 377 | } |
| 378 | 378 | |
| 379 | 379 | /** |
@@ -387,24 +387,24 @@ discard block |
||
| 387 | 387 | * @return int|string |
| 388 | 388 | */ |
| 389 | 389 | function calculer_rang_smart($titre, $objet_source, $id, $env) { |
| 390 | - // Cas du #RANG utilisé dans #FORMULAIRE_EDITER_LIENS -> attraper le rang du lien |
|
| 391 | - // permet de voir le rang du lien si il y en a un en base, meme avant un squelette xxxx-lies.html ne gerant pas les liens |
|
| 392 | - if ( |
|
| 393 | - isset($env['form']) and $env['form'] |
|
| 394 | - and isset($env['_objet_lien']) and $env['_objet_lien'] |
|
| 395 | - and (function_exists('lien_triables') or include_spip('action/editer_liens')) |
|
| 396 | - and $r = objet_associable($env['_objet_lien']) |
|
| 397 | - and [$p, $table_lien] = $r |
|
| 398 | - and lien_triables($table_lien) |
|
| 399 | - and isset($env['objet']) and $env['objet'] |
|
| 400 | - and isset($env['id_objet']) and $env['id_objet'] |
|
| 401 | - and $objet_source |
|
| 402 | - and $id = intval($id) |
|
| 403 | - ) { |
|
| 404 | - $rang = retrouver_rang_lien($objet_source, $id, $env['objet'], $env['id_objet'], $env['_objet_lien']); |
|
| 405 | - return ($rang ?: ''); |
|
| 406 | - } |
|
| 407 | - return recuperer_numero($titre); |
|
| 390 | + // Cas du #RANG utilisé dans #FORMULAIRE_EDITER_LIENS -> attraper le rang du lien |
|
| 391 | + // permet de voir le rang du lien si il y en a un en base, meme avant un squelette xxxx-lies.html ne gerant pas les liens |
|
| 392 | + if ( |
|
| 393 | + isset($env['form']) and $env['form'] |
|
| 394 | + and isset($env['_objet_lien']) and $env['_objet_lien'] |
|
| 395 | + and (function_exists('lien_triables') or include_spip('action/editer_liens')) |
|
| 396 | + and $r = objet_associable($env['_objet_lien']) |
|
| 397 | + and [$p, $table_lien] = $r |
|
| 398 | + and lien_triables($table_lien) |
|
| 399 | + and isset($env['objet']) and $env['objet'] |
|
| 400 | + and isset($env['id_objet']) and $env['id_objet'] |
|
| 401 | + and $objet_source |
|
| 402 | + and $id = intval($id) |
|
| 403 | + ) { |
|
| 404 | + $rang = retrouver_rang_lien($objet_source, $id, $env['objet'], $env['id_objet'], $env['_objet_lien']); |
|
| 405 | + return ($rang ?: ''); |
|
| 406 | + } |
|
| 407 | + return recuperer_numero($titre); |
|
| 408 | 408 | } |
| 409 | 409 | |
| 410 | 410 | /** |
@@ -431,72 +431,72 @@ discard block |
||
| 431 | 431 | */ |
| 432 | 432 | function calculer_balise_tri(string $champ_ou_sens, string $libelle, string $classe, string $tri_nom, string $tri_champ, string $tri_sens, $liste_tri_sens_defaut): string { |
| 433 | 433 | |
| 434 | - $url = self('&'); |
|
| 435 | - $tri_sens = (int) $tri_sens; |
|
| 436 | - $alias_sens = [ |
|
| 437 | - '<' => -1, |
|
| 438 | - '>' => 1, |
|
| 439 | - 'inverse' => -1, |
|
| 440 | - ]; |
|
| 441 | - |
|
| 442 | - // Normaliser la liste des sens de tri par défaut |
|
| 443 | - // On ajoute un jocker pour les champs non présents dans la liste |
|
| 444 | - // avec la valeur du 1er item de la liste, idem critère {tri} |
|
| 445 | - if (is_array($liste_tri_sens_defaut)) { |
|
| 446 | - $liste_tri_sens_defaut['*'] = array_values($liste_tri_sens_defaut)[0]; |
|
| 447 | - } else { |
|
| 448 | - $liste_tri_sens_defaut = [ |
|
| 449 | - '*' => (int) ($alias_sens[$liste_tri_sens_defaut] ?? $liste_tri_sens_defaut), |
|
| 450 | - ]; |
|
| 451 | - } |
|
| 452 | - |
|
| 453 | - // Les sens de tri actuel et nouveau : |
|
| 454 | - // Soit c'est un sens fixe donné en paramètre (< ou >) |
|
| 455 | - $is_sens_fixe = array_key_exists($champ_ou_sens, $alias_sens); |
|
| 456 | - if ($is_sens_fixe) { |
|
| 457 | - $tri_sens_actuel = $tri_sens; |
|
| 458 | - $tri_sens_nouveau = $alias_sens[$champ_ou_sens]; |
|
| 459 | - // Soit c'est le champ utilisé actuellement pour le tri → on inverse le sens |
|
| 460 | - } elseif ($champ_ou_sens === $tri_champ) { |
|
| 461 | - $tri_sens_actuel = $tri_sens; |
|
| 462 | - $tri_sens_nouveau = $tri_sens * -1; |
|
| 463 | - // Sinon c'est un nouveau champ, et on prend son tri par défaut |
|
| 464 | - } else { |
|
| 465 | - $tri_sens_actuel = $tri_sens_nouveau = (int) ($liste_tri_sens_defaut[$champ_ou_sens] ?? $liste_tri_sens_defaut['*']); |
|
| 466 | - } |
|
| 467 | - |
|
| 468 | - // URL : ajouter le champ sur lequel porte le tri |
|
| 469 | - if (!$is_sens_fixe) { |
|
| 470 | - $param_tri = "tri$tri_nom"; |
|
| 471 | - $url = parametre_url($url, $param_tri, $champ_ou_sens); |
|
| 472 | - } |
|
| 473 | - |
|
| 474 | - // URL : n'ajouter le sens de tri que si nécessaire, |
|
| 475 | - // c.à.d différent du sens par défaut pour le champ |
|
| 476 | - $param_sens = "sens$tri_nom"; |
|
| 477 | - $tri_sens_defaut_champ = (int) ($liste_tri_sens_defaut[$champ_ou_sens] ?? $liste_tri_sens_defaut['*']); |
|
| 478 | - if ($tri_sens_nouveau !== $tri_sens_defaut_champ) { |
|
| 479 | - $url = parametre_url($url, $param_sens, $tri_sens_nouveau); |
|
| 480 | - } else { |
|
| 481 | - $url = parametre_url($url, $param_sens, ''); |
|
| 482 | - } |
|
| 483 | - |
|
| 484 | - // Drapeau pour garder en session ? |
|
| 485 | - $param_memo = (!$is_sens_fixe ? $param_tri : $param_sens); |
|
| 486 | - $url = parametre_url($url, 'var_memotri', strncmp($tri_nom, 'session', 7) == 0 ? $param_memo : ''); |
|
| 487 | - |
|
| 488 | - // Classes : on indique le sens de tri et l'item exposé |
|
| 489 | - if (!$is_sens_fixe) { |
|
| 490 | - $classe .= ' item-tri item-tri_' . ($tri_sens_actuel === 1 ? 'asc' : 'desc'); |
|
| 491 | - } |
|
| 492 | - if ($champ_ou_sens === $tri_champ) { |
|
| 493 | - $classe .= ' item-tri_actif'; |
|
| 494 | - } |
|
| 495 | - |
|
| 496 | - // Lien |
|
| 497 | - $balise = lien_ou_expose($url, $libelle, false, $classe); |
|
| 498 | - |
|
| 499 | - return $balise; |
|
| 434 | + $url = self('&'); |
|
| 435 | + $tri_sens = (int) $tri_sens; |
|
| 436 | + $alias_sens = [ |
|
| 437 | + '<' => -1, |
|
| 438 | + '>' => 1, |
|
| 439 | + 'inverse' => -1, |
|
| 440 | + ]; |
|
| 441 | + |
|
| 442 | + // Normaliser la liste des sens de tri par défaut |
|
| 443 | + // On ajoute un jocker pour les champs non présents dans la liste |
|
| 444 | + // avec la valeur du 1er item de la liste, idem critère {tri} |
|
| 445 | + if (is_array($liste_tri_sens_defaut)) { |
|
| 446 | + $liste_tri_sens_defaut['*'] = array_values($liste_tri_sens_defaut)[0]; |
|
| 447 | + } else { |
|
| 448 | + $liste_tri_sens_defaut = [ |
|
| 449 | + '*' => (int) ($alias_sens[$liste_tri_sens_defaut] ?? $liste_tri_sens_defaut), |
|
| 450 | + ]; |
|
| 451 | + } |
|
| 452 | + |
|
| 453 | + // Les sens de tri actuel et nouveau : |
|
| 454 | + // Soit c'est un sens fixe donné en paramètre (< ou >) |
|
| 455 | + $is_sens_fixe = array_key_exists($champ_ou_sens, $alias_sens); |
|
| 456 | + if ($is_sens_fixe) { |
|
| 457 | + $tri_sens_actuel = $tri_sens; |
|
| 458 | + $tri_sens_nouveau = $alias_sens[$champ_ou_sens]; |
|
| 459 | + // Soit c'est le champ utilisé actuellement pour le tri → on inverse le sens |
|
| 460 | + } elseif ($champ_ou_sens === $tri_champ) { |
|
| 461 | + $tri_sens_actuel = $tri_sens; |
|
| 462 | + $tri_sens_nouveau = $tri_sens * -1; |
|
| 463 | + // Sinon c'est un nouveau champ, et on prend son tri par défaut |
|
| 464 | + } else { |
|
| 465 | + $tri_sens_actuel = $tri_sens_nouveau = (int) ($liste_tri_sens_defaut[$champ_ou_sens] ?? $liste_tri_sens_defaut['*']); |
|
| 466 | + } |
|
| 467 | + |
|
| 468 | + // URL : ajouter le champ sur lequel porte le tri |
|
| 469 | + if (!$is_sens_fixe) { |
|
| 470 | + $param_tri = "tri$tri_nom"; |
|
| 471 | + $url = parametre_url($url, $param_tri, $champ_ou_sens); |
|
| 472 | + } |
|
| 473 | + |
|
| 474 | + // URL : n'ajouter le sens de tri que si nécessaire, |
|
| 475 | + // c.à.d différent du sens par défaut pour le champ |
|
| 476 | + $param_sens = "sens$tri_nom"; |
|
| 477 | + $tri_sens_defaut_champ = (int) ($liste_tri_sens_defaut[$champ_ou_sens] ?? $liste_tri_sens_defaut['*']); |
|
| 478 | + if ($tri_sens_nouveau !== $tri_sens_defaut_champ) { |
|
| 479 | + $url = parametre_url($url, $param_sens, $tri_sens_nouveau); |
|
| 480 | + } else { |
|
| 481 | + $url = parametre_url($url, $param_sens, ''); |
|
| 482 | + } |
|
| 483 | + |
|
| 484 | + // Drapeau pour garder en session ? |
|
| 485 | + $param_memo = (!$is_sens_fixe ? $param_tri : $param_sens); |
|
| 486 | + $url = parametre_url($url, 'var_memotri', strncmp($tri_nom, 'session', 7) == 0 ? $param_memo : ''); |
|
| 487 | + |
|
| 488 | + // Classes : on indique le sens de tri et l'item exposé |
|
| 489 | + if (!$is_sens_fixe) { |
|
| 490 | + $classe .= ' item-tri item-tri_' . ($tri_sens_actuel === 1 ? 'asc' : 'desc'); |
|
| 491 | + } |
|
| 492 | + if ($champ_ou_sens === $tri_champ) { |
|
| 493 | + $classe .= ' item-tri_actif'; |
|
| 494 | + } |
|
| 495 | + |
|
| 496 | + // Lien |
|
| 497 | + $balise = lien_ou_expose($url, $libelle, false, $classe); |
|
| 498 | + |
|
| 499 | + return $balise; |
|
| 500 | 500 | } |
| 501 | 501 | |
| 502 | 502 | |
@@ -512,7 +512,7 @@ discard block |
||
| 512 | 512 | * @return string |
| 513 | 513 | */ |
| 514 | 514 | function tri_protege_champ($t) { |
| 515 | - return preg_replace(',[^\s\w.+\[\]],', '', $t); |
|
| 515 | + return preg_replace(',[^\s\w.+\[\]],', '', $t); |
|
| 516 | 516 | } |
| 517 | 517 | |
| 518 | 518 | /** |
@@ -525,43 +525,43 @@ discard block |
||
| 525 | 525 | * @return string |
| 526 | 526 | */ |
| 527 | 527 | function tri_champ_order($t, $from = null, $senstri = '') { |
| 528 | - if (strncmp($t, 'multi ', 6) == 0) { |
|
| 529 | - return 'multi' . $senstri; |
|
| 530 | - } |
|
| 531 | - |
|
| 532 | - $champ = $t; |
|
| 533 | - |
|
| 534 | - $prefixe = ''; |
|
| 535 | - foreach (['num ', 'sinum '] as $p) { |
|
| 536 | - if (strpos($t, $p) === 0) { |
|
| 537 | - $champ = substr($t, strlen($p)); |
|
| 538 | - $prefixe = $p; |
|
| 539 | - } |
|
| 540 | - } |
|
| 541 | - |
|
| 542 | - // enlever les autres espaces non evacues par tri_protege_champ |
|
| 543 | - $champ = preg_replace(',\s,', '', $champ); |
|
| 544 | - |
|
| 545 | - if (is_array($from)) { |
|
| 546 | - $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 547 | - foreach ($from as $idt => $table_sql) { |
|
| 548 | - if ( |
|
| 549 | - $desc = $trouver_table($table_sql) |
|
| 550 | - and isset($desc['field'][$champ]) |
|
| 551 | - ) { |
|
| 552 | - $champ = "$idt.$champ"; |
|
| 553 | - break; |
|
| 554 | - } |
|
| 555 | - } |
|
| 556 | - } |
|
| 557 | - switch ($prefixe) { |
|
| 558 | - case 'num ': |
|
| 559 | - return "CASE( 0+$champ ) WHEN 0 THEN 1 ELSE 0 END{$senstri}, 0+$champ{$senstri}"; |
|
| 560 | - case 'sinum ': |
|
| 561 | - return "CASE( 0+$champ ) WHEN 0 THEN 1 ELSE 0 END{$senstri}"; |
|
| 562 | - default: |
|
| 563 | - return $champ . $senstri; |
|
| 564 | - } |
|
| 528 | + if (strncmp($t, 'multi ', 6) == 0) { |
|
| 529 | + return 'multi' . $senstri; |
|
| 530 | + } |
|
| 531 | + |
|
| 532 | + $champ = $t; |
|
| 533 | + |
|
| 534 | + $prefixe = ''; |
|
| 535 | + foreach (['num ', 'sinum '] as $p) { |
|
| 536 | + if (strpos($t, $p) === 0) { |
|
| 537 | + $champ = substr($t, strlen($p)); |
|
| 538 | + $prefixe = $p; |
|
| 539 | + } |
|
| 540 | + } |
|
| 541 | + |
|
| 542 | + // enlever les autres espaces non evacues par tri_protege_champ |
|
| 543 | + $champ = preg_replace(',\s,', '', $champ); |
|
| 544 | + |
|
| 545 | + if (is_array($from)) { |
|
| 546 | + $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 547 | + foreach ($from as $idt => $table_sql) { |
|
| 548 | + if ( |
|
| 549 | + $desc = $trouver_table($table_sql) |
|
| 550 | + and isset($desc['field'][$champ]) |
|
| 551 | + ) { |
|
| 552 | + $champ = "$idt.$champ"; |
|
| 553 | + break; |
|
| 554 | + } |
|
| 555 | + } |
|
| 556 | + } |
|
| 557 | + switch ($prefixe) { |
|
| 558 | + case 'num ': |
|
| 559 | + return "CASE( 0+$champ ) WHEN 0 THEN 1 ELSE 0 END{$senstri}, 0+$champ{$senstri}"; |
|
| 560 | + case 'sinum ': |
|
| 561 | + return "CASE( 0+$champ ) WHEN 0 THEN 1 ELSE 0 END{$senstri}"; |
|
| 562 | + default: |
|
| 563 | + return $champ . $senstri; |
|
| 564 | + } |
|
| 565 | 565 | } |
| 566 | 566 | |
| 567 | 567 | /** |
@@ -575,18 +575,18 @@ discard block |
||
| 575 | 575 | * @return string |
| 576 | 576 | */ |
| 577 | 577 | function tri_champ_select($t) { |
| 578 | - if (strncmp($t, 'multi ', 6) == 0) { |
|
| 579 | - $t = substr($t, 6); |
|
| 580 | - $t = preg_replace(',\s,', '', $t); |
|
| 581 | - $t = sql_multi($t, $GLOBALS['spip_lang']); |
|
| 582 | - |
|
| 583 | - return $t; |
|
| 584 | - } |
|
| 585 | - if (trim($t) == 'hasard') { |
|
| 586 | - return 'rand() AS hasard'; |
|
| 587 | - } |
|
| 588 | - |
|
| 589 | - return "''"; |
|
| 578 | + if (strncmp($t, 'multi ', 6) == 0) { |
|
| 579 | + $t = substr($t, 6); |
|
| 580 | + $t = preg_replace(',\s,', '', $t); |
|
| 581 | + $t = sql_multi($t, $GLOBALS['spip_lang']); |
|
| 582 | + |
|
| 583 | + return $t; |
|
| 584 | + } |
|
| 585 | + if (trim($t) == 'hasard') { |
|
| 586 | + return 'rand() AS hasard'; |
|
| 587 | + } |
|
| 588 | + |
|
| 589 | + return "''"; |
|
| 590 | 590 | } |
| 591 | 591 | |
| 592 | 592 | /** |
@@ -598,16 +598,16 @@ discard block |
||
| 598 | 598 | * @return string |
| 599 | 599 | */ |
| 600 | 600 | function formate_liste_critere_par_ordre_liste($valeurs, $serveur = '') { |
| 601 | - if (!is_array($valeurs)) { |
|
| 602 | - return ''; |
|
| 603 | - } |
|
| 604 | - $f = sql_serveur('quote', $serveur, true); |
|
| 605 | - if (!is_string($f) or !$f) { |
|
| 606 | - return ''; |
|
| 607 | - } |
|
| 608 | - $valeurs = implode(',', array_map($f, array_unique($valeurs))); |
|
| 609 | - |
|
| 610 | - return $valeurs; |
|
| 601 | + if (!is_array($valeurs)) { |
|
| 602 | + return ''; |
|
| 603 | + } |
|
| 604 | + $f = sql_serveur('quote', $serveur, true); |
|
| 605 | + if (!is_string($f) or !$f) { |
|
| 606 | + return ''; |
|
| 607 | + } |
|
| 608 | + $valeurs = implode(',', array_map($f, array_unique($valeurs))); |
|
| 609 | + |
|
| 610 | + return $valeurs; |
|
| 611 | 611 | } |
| 612 | 612 | |
| 613 | 613 | /** |
@@ -630,20 +630,20 @@ discard block |
||
| 630 | 630 | * Valeur $defaut sinon. |
| 631 | 631 | **/ |
| 632 | 632 | function appliquer_filtre_sinon($arg, $filtre, $args, $defaut = '') { |
| 633 | - // Si c'est un filtre d'image, on utilise image_filtrer() |
|
| 634 | - // Attention : les 2 premiers arguments sont inversés dans ce cas |
|
| 635 | - if (trouver_filtre_matrice($filtre) and substr($filtre, 0, 6) == 'image_') { |
|
| 636 | - include_spip('inc/filtres_images_lib_mini'); |
|
| 637 | - $args[1] = $args[0]; |
|
| 638 | - $args[0] = $filtre; |
|
| 639 | - return image_graver(image_filtrer($args)); |
|
| 640 | - } |
|
| 641 | - |
|
| 642 | - $f = chercher_filtre($filtre); |
|
| 643 | - if (!$f) { |
|
| 644 | - return $defaut; |
|
| 645 | - } |
|
| 646 | - array_shift($args); // enlever $arg |
|
| 647 | - array_shift($args); // enlever $filtre |
|
| 648 | - return $f($arg, ...$args); |
|
| 633 | + // Si c'est un filtre d'image, on utilise image_filtrer() |
|
| 634 | + // Attention : les 2 premiers arguments sont inversés dans ce cas |
|
| 635 | + if (trouver_filtre_matrice($filtre) and substr($filtre, 0, 6) == 'image_') { |
|
| 636 | + include_spip('inc/filtres_images_lib_mini'); |
|
| 637 | + $args[1] = $args[0]; |
|
| 638 | + $args[0] = $filtre; |
|
| 639 | + return image_graver(image_filtrer($args)); |
|
| 640 | + } |
|
| 641 | + |
|
| 642 | + $f = chercher_filtre($filtre); |
|
| 643 | + if (!$f) { |
|
| 644 | + return $defaut; |
|
| 645 | + } |
|
| 646 | + array_shift($args); // enlever $arg |
|
| 647 | + array_shift($args); // enlever $filtre |
|
| 648 | + return $f($arg, ...$args); |
|
| 649 | 649 | } |
@@ -30,7 +30,7 @@ discard block |
||
| 30 | 30 | * @package SPIP\Core\Drapeaux\Edition |
| 31 | 31 | **/ |
| 32 | 32 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 33 | - return; |
|
| 33 | + return; |
|
| 34 | 34 | } |
| 35 | 35 | |
| 36 | 36 | |
@@ -45,46 +45,46 @@ discard block |
||
| 45 | 45 | * `[ type d'objet ][id_objet][id_auteur][nom de l'auteur] = time()` |
| 46 | 46 | **/ |
| 47 | 47 | function lire_tableau_edition() { |
| 48 | - $edition = @unserialize($GLOBALS['meta']['drapeau_edition']); |
|
| 49 | - if (!$edition) { |
|
| 50 | - return []; |
|
| 51 | - } |
|
| 52 | - $changed = false; |
|
| 48 | + $edition = @unserialize($GLOBALS['meta']['drapeau_edition']); |
|
| 49 | + if (!$edition) { |
|
| 50 | + return []; |
|
| 51 | + } |
|
| 52 | + $changed = false; |
|
| 53 | 53 | |
| 54 | - $bon_pour_le_service = time() - 3600; |
|
| 55 | - // parcourir le tableau et virer les vieux |
|
| 56 | - foreach ($edition as $objet => $data) { |
|
| 57 | - if (!is_array($data)) { |
|
| 58 | - unset($edition[$objet]); |
|
| 59 | - } // vieille version |
|
| 60 | - else { |
|
| 61 | - foreach ($data as $id => $tab) { |
|
| 62 | - if (!is_array($tab)) { |
|
| 63 | - unset($edition[$objet][$tab]); |
|
| 64 | - } // vieille version |
|
| 65 | - else { |
|
| 66 | - foreach ($tab as $n => $duo) { |
|
| 67 | - if (current($duo) < $bon_pour_le_service) { |
|
| 68 | - unset($edition[$objet][$id][$n]); |
|
| 69 | - $changed = true; |
|
| 70 | - } |
|
| 71 | - } |
|
| 72 | - } |
|
| 73 | - if (!$edition[$objet][$id]) { |
|
| 74 | - unset($edition[$objet][$id]); |
|
| 75 | - } |
|
| 76 | - } |
|
| 77 | - } |
|
| 78 | - if (!$edition[$objet]) { |
|
| 79 | - unset($edition[$objet]); |
|
| 80 | - } |
|
| 81 | - } |
|
| 54 | + $bon_pour_le_service = time() - 3600; |
|
| 55 | + // parcourir le tableau et virer les vieux |
|
| 56 | + foreach ($edition as $objet => $data) { |
|
| 57 | + if (!is_array($data)) { |
|
| 58 | + unset($edition[$objet]); |
|
| 59 | + } // vieille version |
|
| 60 | + else { |
|
| 61 | + foreach ($data as $id => $tab) { |
|
| 62 | + if (!is_array($tab)) { |
|
| 63 | + unset($edition[$objet][$tab]); |
|
| 64 | + } // vieille version |
|
| 65 | + else { |
|
| 66 | + foreach ($tab as $n => $duo) { |
|
| 67 | + if (current($duo) < $bon_pour_le_service) { |
|
| 68 | + unset($edition[$objet][$id][$n]); |
|
| 69 | + $changed = true; |
|
| 70 | + } |
|
| 71 | + } |
|
| 72 | + } |
|
| 73 | + if (!$edition[$objet][$id]) { |
|
| 74 | + unset($edition[$objet][$id]); |
|
| 75 | + } |
|
| 76 | + } |
|
| 77 | + } |
|
| 78 | + if (!$edition[$objet]) { |
|
| 79 | + unset($edition[$objet]); |
|
| 80 | + } |
|
| 81 | + } |
|
| 82 | 82 | |
| 83 | - if ($changed) { |
|
| 84 | - ecrire_tableau_edition($edition); |
|
| 85 | - } |
|
| 83 | + if ($changed) { |
|
| 84 | + ecrire_tableau_edition($edition); |
|
| 85 | + } |
|
| 86 | 86 | |
| 87 | - return $edition; |
|
| 87 | + return $edition; |
|
| 88 | 88 | } |
| 89 | 89 | |
| 90 | 90 | /** |
@@ -97,7 +97,7 @@ discard block |
||
| 97 | 97 | * `[ type d'objet ][id_objet][id_auteur][nom de l'auteur] = time()` |
| 98 | 98 | **/ |
| 99 | 99 | function ecrire_tableau_edition($edition) { |
| 100 | - ecrire_meta('drapeau_edition', serialize($edition)); |
|
| 100 | + ecrire_meta('drapeau_edition', serialize($edition)); |
|
| 101 | 101 | } |
| 102 | 102 | |
| 103 | 103 | /** |
@@ -117,22 +117,22 @@ discard block |
||
| 117 | 117 | * Type d'objet édité |
| 118 | 118 | */ |
| 119 | 119 | function signale_edition($id, $auteur, $type = 'article') { |
| 120 | - include_spip('base/objets'); |
|
| 121 | - include_spip('inc/filtres'); |
|
| 122 | - if (objet_info($type, 'editable') !== 'oui') { |
|
| 123 | - return; |
|
| 124 | - } |
|
| 120 | + include_spip('base/objets'); |
|
| 121 | + include_spip('inc/filtres'); |
|
| 122 | + if (objet_info($type, 'editable') !== 'oui') { |
|
| 123 | + return; |
|
| 124 | + } |
|
| 125 | 125 | |
| 126 | - $edition = lire_tableau_edition(); |
|
| 126 | + $edition = lire_tableau_edition(); |
|
| 127 | 127 | |
| 128 | - $nom = $auteur['nom'] ?? $GLOBALS['ip']; |
|
| 129 | - $id_a = $auteur['id_auteur'] ?? $GLOBALS['ip']; |
|
| 128 | + $nom = $auteur['nom'] ?? $GLOBALS['ip']; |
|
| 129 | + $id_a = $auteur['id_auteur'] ?? $GLOBALS['ip']; |
|
| 130 | 130 | |
| 131 | - if (!isset($edition[$type][$id]) or !is_array($edition[$type][$id])) { |
|
| 132 | - $edition[$type][$id] = []; |
|
| 133 | - } |
|
| 134 | - $edition[$type][$id][$id_a][$nom] = time(); |
|
| 135 | - ecrire_tableau_edition($edition); |
|
| 131 | + if (!isset($edition[$type][$id]) or !is_array($edition[$type][$id])) { |
|
| 132 | + $edition[$type][$id] = []; |
|
| 133 | + } |
|
| 134 | + $edition[$type][$id][$id_a][$nom] = time(); |
|
| 135 | + ecrire_tableau_edition($edition); |
|
| 136 | 136 | } |
| 137 | 137 | |
| 138 | 138 | /** |
@@ -149,9 +149,9 @@ discard block |
||
| 149 | 149 | */ |
| 150 | 150 | function qui_edite($id, $type = 'article') { |
| 151 | 151 | |
| 152 | - $edition = lire_tableau_edition(); |
|
| 152 | + $edition = lire_tableau_edition(); |
|
| 153 | 153 | |
| 154 | - return empty($edition[$type][$id]) ? [] : $edition[$type][$id]; |
|
| 154 | + return empty($edition[$type][$id]) ? [] : $edition[$type][$id]; |
|
| 155 | 155 | } |
| 156 | 156 | |
| 157 | 157 | /** |
@@ -165,23 +165,23 @@ discard block |
||
| 165 | 165 | * Liste de tableaux `['nom_auteur_modif' => x|y|z, 'date_diff' => n]` |
| 166 | 166 | */ |
| 167 | 167 | function mention_qui_edite($id, $type = 'article'): array { |
| 168 | - $modif = qui_edite($id, $type); |
|
| 169 | - unset($modif[$GLOBALS['visiteur_session']['id_auteur']]); |
|
| 168 | + $modif = qui_edite($id, $type); |
|
| 169 | + unset($modif[$GLOBALS['visiteur_session']['id_auteur']]); |
|
| 170 | 170 | |
| 171 | - if ($modif) { |
|
| 172 | - $quand = 0; |
|
| 173 | - foreach ($modif as $duo) { |
|
| 174 | - $auteurs[] = typo(key($duo)); |
|
| 175 | - $quand = max($quand, current($duo)); |
|
| 176 | - } |
|
| 171 | + if ($modif) { |
|
| 172 | + $quand = 0; |
|
| 173 | + foreach ($modif as $duo) { |
|
| 174 | + $auteurs[] = typo(key($duo)); |
|
| 175 | + $quand = max($quand, current($duo)); |
|
| 176 | + } |
|
| 177 | 177 | |
| 178 | - // format lie a la chaine de langue 'avis_article_modifie' |
|
| 179 | - return [ |
|
| 180 | - 'nom_auteur_modif' => join(' | ', $auteurs), |
|
| 181 | - 'date_diff' => ceil((time() - $quand) / 60) |
|
| 182 | - ]; |
|
| 183 | - } |
|
| 184 | - return []; |
|
| 178 | + // format lie a la chaine de langue 'avis_article_modifie' |
|
| 179 | + return [ |
|
| 180 | + 'nom_auteur_modif' => join(' | ', $auteurs), |
|
| 181 | + 'date_diff' => ceil((time() - $quand) / 60) |
|
| 182 | + ]; |
|
| 183 | + } |
|
| 184 | + return []; |
|
| 185 | 185 | } |
| 186 | 186 | |
| 187 | 187 | /** |
@@ -195,25 +195,25 @@ discard block |
||
| 195 | 195 | * Liste de tableaux `['objet' => x, 'id_objet' => n]` |
| 196 | 196 | */ |
| 197 | 197 | function liste_drapeau_edition($id_auteur) { |
| 198 | - $edition = lire_tableau_edition(); |
|
| 199 | - $objets_ouverts = []; |
|
| 198 | + $edition = lire_tableau_edition(); |
|
| 199 | + $objets_ouverts = []; |
|
| 200 | 200 | |
| 201 | - foreach ($edition as $objet => $data) { |
|
| 202 | - foreach ($data as $id => $auteurs) { |
|
| 203 | - if ( |
|
| 204 | - isset($auteurs[$id_auteur]) |
|
| 205 | - and is_array($auteurs[$id_auteur]) // precaution |
|
| 206 | - and (array_pop($auteurs[$id_auteur]) > time() - 3600) |
|
| 207 | - ) { |
|
| 208 | - $objets_ouverts[] = [ |
|
| 209 | - 'objet' => $objet, |
|
| 210 | - 'id_objet' => $id, |
|
| 211 | - ]; |
|
| 212 | - } |
|
| 213 | - } |
|
| 214 | - } |
|
| 201 | + foreach ($edition as $objet => $data) { |
|
| 202 | + foreach ($data as $id => $auteurs) { |
|
| 203 | + if ( |
|
| 204 | + isset($auteurs[$id_auteur]) |
|
| 205 | + and is_array($auteurs[$id_auteur]) // precaution |
|
| 206 | + and (array_pop($auteurs[$id_auteur]) > time() - 3600) |
|
| 207 | + ) { |
|
| 208 | + $objets_ouverts[] = [ |
|
| 209 | + 'objet' => $objet, |
|
| 210 | + 'id_objet' => $id, |
|
| 211 | + ]; |
|
| 212 | + } |
|
| 213 | + } |
|
| 214 | + } |
|
| 215 | 215 | |
| 216 | - return $objets_ouverts; |
|
| 216 | + return $objets_ouverts; |
|
| 217 | 217 | } |
| 218 | 218 | |
| 219 | 219 | /** |
@@ -226,15 +226,15 @@ discard block |
||
| 226 | 226 | * @return void |
| 227 | 227 | */ |
| 228 | 228 | function debloquer_tous($id_auteur) { |
| 229 | - $edition = lire_tableau_edition(); |
|
| 230 | - foreach ($edition as $objet => $data) { |
|
| 231 | - foreach ($data as $id => $auteurs) { |
|
| 232 | - if (isset($auteurs[$id_auteur])) { |
|
| 233 | - unset($edition[$objet][$id][$id_auteur]); |
|
| 234 | - ecrire_tableau_edition($edition); |
|
| 235 | - } |
|
| 236 | - } |
|
| 237 | - } |
|
| 229 | + $edition = lire_tableau_edition(); |
|
| 230 | + foreach ($edition as $objet => $data) { |
|
| 231 | + foreach ($data as $id => $auteurs) { |
|
| 232 | + if (isset($auteurs[$id_auteur])) { |
|
| 233 | + unset($edition[$objet][$id][$id_auteur]); |
|
| 234 | + ecrire_tableau_edition($edition); |
|
| 235 | + } |
|
| 236 | + } |
|
| 237 | + } |
|
| 238 | 238 | } |
| 239 | 239 | |
| 240 | 240 | /** |
@@ -252,19 +252,19 @@ discard block |
||
| 252 | 252 | * @return void |
| 253 | 253 | */ |
| 254 | 254 | function debloquer_edition($id_auteur, $id_objet, $type = 'article') { |
| 255 | - $edition = lire_tableau_edition(); |
|
| 255 | + $edition = lire_tableau_edition(); |
|
| 256 | 256 | |
| 257 | - foreach ($edition as $objet => $data) { |
|
| 258 | - if ($objet == $type) { |
|
| 259 | - foreach ($data as $id => $auteurs) { |
|
| 260 | - if ( |
|
| 261 | - $id == $id_objet |
|
| 262 | - and isset($auteurs[$id_auteur]) |
|
| 263 | - ) { |
|
| 264 | - unset($edition[$objet][$id][$id_auteur]); |
|
| 265 | - ecrire_tableau_edition($edition); |
|
| 266 | - } |
|
| 267 | - } |
|
| 268 | - } |
|
| 269 | - } |
|
| 257 | + foreach ($edition as $objet => $data) { |
|
| 258 | + if ($objet == $type) { |
|
| 259 | + foreach ($data as $id => $auteurs) { |
|
| 260 | + if ( |
|
| 261 | + $id == $id_objet |
|
| 262 | + and isset($auteurs[$id_auteur]) |
|
| 263 | + ) { |
|
| 264 | + unset($edition[$objet][$id][$id_auteur]); |
|
| 265 | + ecrire_tableau_edition($edition); |
|
| 266 | + } |
|
| 267 | + } |
|
| 268 | + } |
|
| 269 | + } |
|
| 270 | 270 | } |
@@ -30,7 +30,7 @@ discard block |
||
| 30 | 30 | **/ |
| 31 | 31 | |
| 32 | 32 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 33 | - return; |
|
| 33 | + return; |
|
| 34 | 34 | } |
| 35 | 35 | |
| 36 | 36 | // utilise pour le logo du site, donc doit rester ici |
@@ -48,91 +48,91 @@ discard block |
||
| 48 | 48 | * @return array Variables d'environnement pour le fond |
| 49 | 49 | */ |
| 50 | 50 | function formulaires_editer_logo_charger_dist($objet, $id_objet, $retour = '', $options = []) { |
| 51 | - // pas dans une boucle ? formulaire pour le logo du site |
|
| 52 | - // dans ce cas, il faut chercher un 'siteon0.ext' |
|
| 53 | - if (!$objet) { |
|
| 54 | - $objet = 'site'; |
|
| 55 | - } |
|
| 51 | + // pas dans une boucle ? formulaire pour le logo du site |
|
| 52 | + // dans ce cas, il faut chercher un 'siteon0.ext' |
|
| 53 | + if (!$objet) { |
|
| 54 | + $objet = 'site'; |
|
| 55 | + } |
|
| 56 | 56 | |
| 57 | - $objet = objet_type($objet); |
|
| 58 | - $_id_objet = id_table_objet($objet); |
|
| 57 | + $objet = objet_type($objet); |
|
| 58 | + $_id_objet = id_table_objet($objet); |
|
| 59 | 59 | |
| 60 | - if (!is_array($options)) { |
|
| 61 | - $options = unserialize($options); |
|
| 62 | - } |
|
| 63 | - $options = spip_sanitize_from_request($options, '*'); |
|
| 60 | + if (!is_array($options)) { |
|
| 61 | + $options = unserialize($options); |
|
| 62 | + } |
|
| 63 | + $options = spip_sanitize_from_request($options, '*'); |
|
| 64 | 64 | |
| 65 | - if (!isset($options['titre'])) { |
|
| 66 | - $balise_img = chercher_filtre('balise_img'); |
|
| 67 | - $img = $balise_img(chemin_image('image-24.png'), '', 'cadre-icone'); |
|
| 68 | - $libelles = pipeline('libeller_logo', $GLOBALS['logo_libelles']); |
|
| 69 | - $libelle = (($id_objet or $objet != 'rubrique') ? $objet : 'racine'); |
|
| 70 | - if (isset($libelles[$libelle])) { |
|
| 71 | - $libelle = $libelles[$libelle]; |
|
| 72 | - } elseif ($libelle = objet_info($objet, 'texte_logo_objet')) { |
|
| 73 | - $libelle = _T($libelle); |
|
| 74 | - } else { |
|
| 75 | - $libelle = _L('Logo'); |
|
| 76 | - } |
|
| 77 | - switch ($objet) { |
|
| 78 | - case 'article': |
|
| 79 | - $libelle .= ' ' . aider('logoart'); |
|
| 80 | - break; |
|
| 81 | - case 'breve': |
|
| 82 | - $libelle .= ' ' . aider('breveslogo'); |
|
| 83 | - break; |
|
| 84 | - case 'rubrique': |
|
| 85 | - $libelle .= ' ' . aider('rublogo'); |
|
| 86 | - break; |
|
| 87 | - default: |
|
| 88 | - break; |
|
| 89 | - } |
|
| 65 | + if (!isset($options['titre'])) { |
|
| 66 | + $balise_img = chercher_filtre('balise_img'); |
|
| 67 | + $img = $balise_img(chemin_image('image-24.png'), '', 'cadre-icone'); |
|
| 68 | + $libelles = pipeline('libeller_logo', $GLOBALS['logo_libelles']); |
|
| 69 | + $libelle = (($id_objet or $objet != 'rubrique') ? $objet : 'racine'); |
|
| 70 | + if (isset($libelles[$libelle])) { |
|
| 71 | + $libelle = $libelles[$libelle]; |
|
| 72 | + } elseif ($libelle = objet_info($objet, 'texte_logo_objet')) { |
|
| 73 | + $libelle = _T($libelle); |
|
| 74 | + } else { |
|
| 75 | + $libelle = _L('Logo'); |
|
| 76 | + } |
|
| 77 | + switch ($objet) { |
|
| 78 | + case 'article': |
|
| 79 | + $libelle .= ' ' . aider('logoart'); |
|
| 80 | + break; |
|
| 81 | + case 'breve': |
|
| 82 | + $libelle .= ' ' . aider('breveslogo'); |
|
| 83 | + break; |
|
| 84 | + case 'rubrique': |
|
| 85 | + $libelle .= ' ' . aider('rublogo'); |
|
| 86 | + break; |
|
| 87 | + default: |
|
| 88 | + break; |
|
| 89 | + } |
|
| 90 | 90 | |
| 91 | - $options['titre'] = $img . $libelle; |
|
| 92 | - } |
|
| 93 | - if (!isset($options['editable'])) { |
|
| 94 | - include_spip('inc/autoriser'); |
|
| 95 | - $options['editable'] = autoriser('iconifier', $objet, $id_objet); |
|
| 96 | - } |
|
| 91 | + $options['titre'] = $img . $libelle; |
|
| 92 | + } |
|
| 93 | + if (!isset($options['editable'])) { |
|
| 94 | + include_spip('inc/autoriser'); |
|
| 95 | + $options['editable'] = autoriser('iconifier', $objet, $id_objet); |
|
| 96 | + } |
|
| 97 | 97 | |
| 98 | - $res = [ |
|
| 99 | - 'editable' => ($GLOBALS['meta']['activer_logos'] == 'oui' ? ' ' : '') && (!isset($options['editable']) or $options['editable']), |
|
| 100 | - 'logo_survol' => ($GLOBALS['meta']['activer_logos_survol'] == 'oui' ? ' ' : ''), |
|
| 101 | - 'objet' => $objet, |
|
| 102 | - 'id_objet' => $id_objet, |
|
| 103 | - '_options' => $options, |
|
| 104 | - '_show_upload_off' => '', |
|
| 105 | - ]; |
|
| 98 | + $res = [ |
|
| 99 | + 'editable' => ($GLOBALS['meta']['activer_logos'] == 'oui' ? ' ' : '') && (!isset($options['editable']) or $options['editable']), |
|
| 100 | + 'logo_survol' => ($GLOBALS['meta']['activer_logos_survol'] == 'oui' ? ' ' : ''), |
|
| 101 | + 'objet' => $objet, |
|
| 102 | + 'id_objet' => $id_objet, |
|
| 103 | + '_options' => $options, |
|
| 104 | + '_show_upload_off' => '', |
|
| 105 | + ]; |
|
| 106 | 106 | |
| 107 | - // rechercher le logo de l'objet |
|
| 108 | - // la fonction prend un parametre '_id_objet' etrange : |
|
| 109 | - // le nom de la cle primaire (et non le nom de la table) |
|
| 110 | - // ou directement le nom du raccourcis a chercher |
|
| 111 | - $chercher_logo = charger_fonction('chercher_logo', 'inc'); |
|
| 112 | - $etats = $res['logo_survol'] ? ['on', 'off'] : ['on']; |
|
| 113 | - foreach ($etats as $etat) { |
|
| 114 | - $logo = $chercher_logo($id_objet, $_id_objet, $etat); |
|
| 115 | - if ($logo) { |
|
| 116 | - $res['logo_' . $etat] = $logo[0]; |
|
| 117 | - } |
|
| 118 | - } |
|
| 119 | - // pas de logo_on -> pas de formulaire pour le survol |
|
| 120 | - if (!isset($res['logo_on'])) { |
|
| 121 | - $res['logo_survol'] = ''; |
|
| 122 | - } elseif (!isset($res['logo_off']) and _request('logo_up')) { |
|
| 123 | - $res['_show_upload_off'] = ' '; |
|
| 124 | - } |
|
| 107 | + // rechercher le logo de l'objet |
|
| 108 | + // la fonction prend un parametre '_id_objet' etrange : |
|
| 109 | + // le nom de la cle primaire (et non le nom de la table) |
|
| 110 | + // ou directement le nom du raccourcis a chercher |
|
| 111 | + $chercher_logo = charger_fonction('chercher_logo', 'inc'); |
|
| 112 | + $etats = $res['logo_survol'] ? ['on', 'off'] : ['on']; |
|
| 113 | + foreach ($etats as $etat) { |
|
| 114 | + $logo = $chercher_logo($id_objet, $_id_objet, $etat); |
|
| 115 | + if ($logo) { |
|
| 116 | + $res['logo_' . $etat] = $logo[0]; |
|
| 117 | + } |
|
| 118 | + } |
|
| 119 | + // pas de logo_on -> pas de formulaire pour le survol |
|
| 120 | + if (!isset($res['logo_on'])) { |
|
| 121 | + $res['logo_survol'] = ''; |
|
| 122 | + } elseif (!isset($res['logo_off']) and _request('logo_up')) { |
|
| 123 | + $res['_show_upload_off'] = ' '; |
|
| 124 | + } |
|
| 125 | 125 | |
| 126 | - // si le logo n'est pas editable et qu'il n'y en a pas, on affiche pas du tout le formulaire |
|
| 127 | - if ( |
|
| 128 | - !$res['editable'] |
|
| 129 | - and !isset($res['logo_off']) |
|
| 130 | - and !isset($res['logo_on']) |
|
| 131 | - ) { |
|
| 132 | - return false; |
|
| 133 | - } |
|
| 126 | + // si le logo n'est pas editable et qu'il n'y en a pas, on affiche pas du tout le formulaire |
|
| 127 | + if ( |
|
| 128 | + !$res['editable'] |
|
| 129 | + and !isset($res['logo_off']) |
|
| 130 | + and !isset($res['logo_on']) |
|
| 131 | + ) { |
|
| 132 | + return false; |
|
| 133 | + } |
|
| 134 | 134 | |
| 135 | - return $res; |
|
| 135 | + return $res; |
|
| 136 | 136 | } |
| 137 | 137 | |
| 138 | 138 | /** |
@@ -146,7 +146,7 @@ discard block |
||
| 146 | 146 | * @return string Hash du formulaire |
| 147 | 147 | */ |
| 148 | 148 | function formulaires_editer_logo_identifier_dist($objet, $id_objet, $retour = '', $options = []) { |
| 149 | - return serialize([$objet, $id_objet]); |
|
| 149 | + return serialize([$objet, $id_objet]); |
|
| 150 | 150 | } |
| 151 | 151 | |
| 152 | 152 | /** |
@@ -162,31 +162,31 @@ discard block |
||
| 162 | 162 | * @return array Erreurs du formulaire |
| 163 | 163 | */ |
| 164 | 164 | function formulaires_editer_logo_verifier_dist($objet, $id_objet, $retour = '', $options = []) { |
| 165 | - $erreurs = []; |
|
| 166 | - // verifier les extensions |
|
| 167 | - $sources = formulaire_editer_logo_get_sources(); |
|
| 168 | - include_spip('action/editer_logo'); |
|
| 169 | - $extensions_possibles = $GLOBALS['formats_logos']; |
|
| 170 | - if (in_array('jpg', $extensions_possibles)) { |
|
| 171 | - $extensions_possibles[] = 'jpeg'; |
|
| 172 | - } |
|
| 173 | - foreach ($sources as $etat => $file) { |
|
| 174 | - // seulement si une reception correcte a eu lieu |
|
| 175 | - if ($file and $file['error'] == 0) { |
|
| 176 | - if ( |
|
| 177 | - !in_array( |
|
| 178 | - strtolower(pathinfo($file['name'], PATHINFO_EXTENSION)), |
|
| 179 | - $extensions_possibles |
|
| 180 | - ) |
|
| 181 | - ) { |
|
| 182 | - $erreurs['logo_' . $etat] = _L('Extension non reconnue'); |
|
| 183 | - } |
|
| 184 | - } elseif ($file and $file['error'] != 0 and isset($file['msg'])) { |
|
| 185 | - $erreurs['message_erreur'] = $file['msg']; |
|
| 186 | - } |
|
| 187 | - } |
|
| 165 | + $erreurs = []; |
|
| 166 | + // verifier les extensions |
|
| 167 | + $sources = formulaire_editer_logo_get_sources(); |
|
| 168 | + include_spip('action/editer_logo'); |
|
| 169 | + $extensions_possibles = $GLOBALS['formats_logos']; |
|
| 170 | + if (in_array('jpg', $extensions_possibles)) { |
|
| 171 | + $extensions_possibles[] = 'jpeg'; |
|
| 172 | + } |
|
| 173 | + foreach ($sources as $etat => $file) { |
|
| 174 | + // seulement si une reception correcte a eu lieu |
|
| 175 | + if ($file and $file['error'] == 0) { |
|
| 176 | + if ( |
|
| 177 | + !in_array( |
|
| 178 | + strtolower(pathinfo($file['name'], PATHINFO_EXTENSION)), |
|
| 179 | + $extensions_possibles |
|
| 180 | + ) |
|
| 181 | + ) { |
|
| 182 | + $erreurs['logo_' . $etat] = _L('Extension non reconnue'); |
|
| 183 | + } |
|
| 184 | + } elseif ($file and $file['error'] != 0 and isset($file['msg'])) { |
|
| 185 | + $erreurs['message_erreur'] = $file['msg']; |
|
| 186 | + } |
|
| 187 | + } |
|
| 188 | 188 | |
| 189 | - return $erreurs; |
|
| 189 | + return $erreurs; |
|
| 190 | 190 | } |
| 191 | 191 | |
| 192 | 192 | /** |
@@ -202,47 +202,47 @@ discard block |
||
| 202 | 202 | * @return array Retour des traitements |
| 203 | 203 | */ |
| 204 | 204 | function formulaires_editer_logo_traiter_dist($objet, $id_objet, $retour = '', $options = []) { |
| 205 | - $res = ['editable' => ' ']; |
|
| 205 | + $res = ['editable' => ' ']; |
|
| 206 | 206 | |
| 207 | - // pas dans une boucle ? formulaire pour le logo du site |
|
| 208 | - // dans ce cas, il faut chercher un 'siteon0.ext' |
|
| 209 | - if (!$objet) { |
|
| 210 | - $objet = 'site'; |
|
| 211 | - } |
|
| 207 | + // pas dans une boucle ? formulaire pour le logo du site |
|
| 208 | + // dans ce cas, il faut chercher un 'siteon0.ext' |
|
| 209 | + if (!$objet) { |
|
| 210 | + $objet = 'site'; |
|
| 211 | + } |
|
| 212 | 212 | |
| 213 | - include_spip('action/editer_logo'); |
|
| 213 | + include_spip('action/editer_logo'); |
|
| 214 | 214 | |
| 215 | - // effectuer la suppression si demandee d'un logo |
|
| 216 | - $on = _request('supprimer_logo_on'); |
|
| 217 | - if ($on or _request('supprimer_logo_off')) { |
|
| 218 | - logo_supprimer($objet, $id_objet, $on ? 'on' : 'off'); |
|
| 219 | - $res['message_ok'] = ''; // pas besoin de message : la validation est visuelle |
|
| 220 | - set_request('logo_up', ' '); |
|
| 221 | - } // sinon supprimer ancien logo puis copier le nouveau |
|
| 222 | - else { |
|
| 223 | - $sources = formulaire_editer_logo_get_sources(); |
|
| 224 | - foreach ($sources as $etat => $file) { |
|
| 225 | - if ($file and $file['error'] == 0) { |
|
| 226 | - if ($err = logo_modifier($objet, $id_objet, $etat, $file)) { |
|
| 227 | - $res['message_erreur'] = $err; |
|
| 228 | - } else { |
|
| 229 | - $res['message_ok'] = ''; |
|
| 230 | - } // pas besoin de message : la validation est visuelle |
|
| 231 | - set_request('logo_up', ' '); |
|
| 232 | - } |
|
| 233 | - } |
|
| 234 | - } |
|
| 215 | + // effectuer la suppression si demandee d'un logo |
|
| 216 | + $on = _request('supprimer_logo_on'); |
|
| 217 | + if ($on or _request('supprimer_logo_off')) { |
|
| 218 | + logo_supprimer($objet, $id_objet, $on ? 'on' : 'off'); |
|
| 219 | + $res['message_ok'] = ''; // pas besoin de message : la validation est visuelle |
|
| 220 | + set_request('logo_up', ' '); |
|
| 221 | + } // sinon supprimer ancien logo puis copier le nouveau |
|
| 222 | + else { |
|
| 223 | + $sources = formulaire_editer_logo_get_sources(); |
|
| 224 | + foreach ($sources as $etat => $file) { |
|
| 225 | + if ($file and $file['error'] == 0) { |
|
| 226 | + if ($err = logo_modifier($objet, $id_objet, $etat, $file)) { |
|
| 227 | + $res['message_erreur'] = $err; |
|
| 228 | + } else { |
|
| 229 | + $res['message_ok'] = ''; |
|
| 230 | + } // pas besoin de message : la validation est visuelle |
|
| 231 | + set_request('logo_up', ' '); |
|
| 232 | + } |
|
| 233 | + } |
|
| 234 | + } |
|
| 235 | 235 | |
| 236 | - // Invalider les caches de l'objet |
|
| 237 | - include_spip('inc/invalideur'); |
|
| 238 | - suivre_invalideur("id='$objet/$id_objet'"); |
|
| 236 | + // Invalider les caches de l'objet |
|
| 237 | + include_spip('inc/invalideur'); |
|
| 238 | + suivre_invalideur("id='$objet/$id_objet'"); |
|
| 239 | 239 | |
| 240 | 240 | |
| 241 | - if ($retour) { |
|
| 242 | - $res['redirect'] = $retour; |
|
| 243 | - } |
|
| 241 | + if ($retour) { |
|
| 242 | + $res['redirect'] = $retour; |
|
| 243 | + } |
|
| 244 | 244 | |
| 245 | - return $res; |
|
| 245 | + return $res; |
|
| 246 | 246 | } |
| 247 | 247 | |
| 248 | 248 | |
@@ -254,29 +254,29 @@ discard block |
||
| 254 | 254 | * Sources des fichiers dans les clés `on` ou `off` |
| 255 | 255 | */ |
| 256 | 256 | function formulaire_editer_logo_get_sources() { |
| 257 | - if (!$_FILES) { |
|
| 258 | - $_FILES = $GLOBALS['HTTP_POST_FILES'] ?? []; |
|
| 259 | - } |
|
| 260 | - if (!is_array($_FILES)) { |
|
| 261 | - return []; |
|
| 262 | - } |
|
| 257 | + if (!$_FILES) { |
|
| 258 | + $_FILES = $GLOBALS['HTTP_POST_FILES'] ?? []; |
|
| 259 | + } |
|
| 260 | + if (!is_array($_FILES)) { |
|
| 261 | + return []; |
|
| 262 | + } |
|
| 263 | 263 | |
| 264 | - include_spip('inc/documents'); |
|
| 265 | - $sources = []; |
|
| 266 | - foreach (['on', 'off'] as $etat) { |
|
| 267 | - $logo = 'logo_' . $etat; |
|
| 268 | - if (isset($_FILES[$logo])) { |
|
| 269 | - if ($_FILES[$logo]['error'] == 0) { |
|
| 270 | - $sources[$etat] = $_FILES[$logo]; |
|
| 271 | - } elseif ($_FILES[$logo]['error'] != 0) { |
|
| 272 | - $msg = check_upload_error($_FILES[$logo]['error'], false, true); |
|
| 273 | - if ($msg and is_string($msg)) { |
|
| 274 | - $sources[$etat] = $_FILES[$logo]; |
|
| 275 | - $sources[$etat]['msg'] = $msg; |
|
| 276 | - } |
|
| 277 | - } |
|
| 278 | - } |
|
| 279 | - } |
|
| 264 | + include_spip('inc/documents'); |
|
| 265 | + $sources = []; |
|
| 266 | + foreach (['on', 'off'] as $etat) { |
|
| 267 | + $logo = 'logo_' . $etat; |
|
| 268 | + if (isset($_FILES[$logo])) { |
|
| 269 | + if ($_FILES[$logo]['error'] == 0) { |
|
| 270 | + $sources[$etat] = $_FILES[$logo]; |
|
| 271 | + } elseif ($_FILES[$logo]['error'] != 0) { |
|
| 272 | + $msg = check_upload_error($_FILES[$logo]['error'], false, true); |
|
| 273 | + if ($msg and is_string($msg)) { |
|
| 274 | + $sources[$etat] = $_FILES[$logo]; |
|
| 275 | + $sources[$etat]['msg'] = $msg; |
|
| 276 | + } |
|
| 277 | + } |
|
| 278 | + } |
|
| 279 | + } |
|
| 280 | 280 | |
| 281 | - return $sources; |
|
| 281 | + return $sources; |
|
| 282 | 282 | } |
@@ -15,11 +15,11 @@ discard block |
||
| 15 | 15 | * Test utilisateur |
| 16 | 16 | */ |
| 17 | 17 | if (isset($_GET['test_ecran_securite'])) { |
| 18 | - $ecran_securite_raison = 'test ' . _ECRAN_SECURITE; |
|
| 18 | + $ecran_securite_raison = 'test ' . _ECRAN_SECURITE; |
|
| 19 | 19 | } |
| 20 | 20 | |
| 21 | 21 | if (file_exists($f = __DIR__ . DIRECTORY_SEPARATOR . 'ecran_securite_options.php')) { |
| 22 | - include ($f); |
|
| 22 | + include ($f); |
|
| 23 | 23 | } |
| 24 | 24 | |
| 25 | 25 | /* |
@@ -29,222 +29,222 @@ discard block |
||
| 29 | 29 | * le load depasse ECRAN_SECURITE_LOAD) |
| 30 | 30 | */ |
| 31 | 31 | if (!defined('_IS_BOT') and isset($_GET['var_isbot'])) { |
| 32 | - define('_IS_BOT', $_GET['var_isbot'] ? true : false); |
|
| 32 | + define('_IS_BOT', $_GET['var_isbot'] ? true : false); |
|
| 33 | 33 | } |
| 34 | 34 | |
| 35 | 35 | /* |
| 36 | 36 | * Détecteur de robot d'indexation |
| 37 | 37 | */ |
| 38 | 38 | if (!defined('_IS_BOT')) { |
| 39 | - define( |
|
| 40 | - '_IS_BOT', |
|
| 41 | - isset($_SERVER['HTTP_USER_AGENT']) |
|
| 42 | - and preg_match( |
|
| 43 | - ',' |
|
| 44 | - . implode('|', array( |
|
| 45 | - // mots generiques |
|
| 46 | - 'bot', |
|
| 47 | - 'slurp', |
|
| 48 | - 'crawler', |
|
| 49 | - 'crwlr', |
|
| 50 | - 'java', |
|
| 51 | - 'monitoring', |
|
| 52 | - 'spider', |
|
| 53 | - 'webvac', |
|
| 54 | - 'yandex', |
|
| 55 | - 'MSIE 6\.0', // botnet 99,9% du temps |
|
| 56 | - // UA plus cibles |
|
| 57 | - '200please', |
|
| 58 | - '80legs', |
|
| 59 | - 'a6-indexer', |
|
| 60 | - 'aboundex', |
|
| 61 | - 'accoona', |
|
| 62 | - 'acrylicapps', |
|
| 63 | - 'addthis', |
|
| 64 | - 'adressendeutschland', |
|
| 65 | - 'alexa', |
|
| 66 | - 'altavista', |
|
| 67 | - 'analyticsseo', |
|
| 68 | - 'antennapod', |
|
| 69 | - 'arachnys', |
|
| 70 | - 'archive', |
|
| 71 | - 'argclrint', |
|
| 72 | - 'aspseek', |
|
| 73 | - 'baidu', |
|
| 74 | - 'begunadvertising', |
|
| 75 | - 'bing', |
|
| 76 | - 'bloglines', |
|
| 77 | - 'buck', |
|
| 78 | - 'browsershots', |
|
| 79 | - 'bubing', |
|
| 80 | - 'butterfly', |
|
| 81 | - 'changedetection', |
|
| 82 | - 'charlotte', |
|
| 83 | - 'chilkat', |
|
| 84 | - 'china', |
|
| 85 | - 'coccoc', |
|
| 86 | - 'crowsnest', |
|
| 87 | - 'dataminr', |
|
| 88 | - 'daumoa', |
|
| 89 | - 'dlvr\.it', |
|
| 90 | - 'dlweb', |
|
| 91 | - 'drupal', |
|
| 92 | - 'ec2linkfinder', |
|
| 93 | - 'eset\.com', |
|
| 94 | - 'estyle', |
|
| 95 | - 'exalead', |
|
| 96 | - 'ezooms', |
|
| 97 | - 'facebookexternalhit', |
|
| 98 | - 'facebookplatform', |
|
| 99 | - 'fairshare', |
|
| 100 | - 'feedfetcher', |
|
| 101 | - 'feedfetcher-google', |
|
| 102 | - 'feedly', |
|
| 103 | - 'fetch', |
|
| 104 | - 'flipboardproxy', |
|
| 105 | - 'genieo', |
|
| 106 | - 'google', |
|
| 107 | - 'go-http-client', |
|
| 108 | - 'grapeshot', |
|
| 109 | - 'hatena-useragent', |
|
| 110 | - 'head', |
|
| 111 | - 'hosttracker', |
|
| 112 | - 'hubspot', |
|
| 113 | - 'ia_archiver', |
|
| 114 | - 'ichiro', |
|
| 115 | - 'iltrovatore-setaccio', |
|
| 116 | - 'immediatenet', |
|
| 117 | - 'ina', |
|
| 118 | - 'inoreader', |
|
| 119 | - 'infegyatlas', |
|
| 120 | - 'infohelfer', |
|
| 121 | - 'instapaper', |
|
| 122 | - 'jabse', |
|
| 123 | - 'james', |
|
| 124 | - 'jersey', |
|
| 125 | - 'kumkie', |
|
| 126 | - 'linkdex', |
|
| 127 | - 'linkfluence', |
|
| 128 | - 'linkwalker', |
|
| 129 | - 'litefinder', |
|
| 130 | - 'loadimpactpageanalyzer', |
|
| 131 | - 'ltx71', |
|
| 132 | - 'luminate', |
|
| 133 | - 'lycos', |
|
| 134 | - 'lycosa', |
|
| 135 | - 'mediapartners-google', |
|
| 136 | - 'msai', |
|
| 137 | - 'myapp', |
|
| 138 | - 'nativehost', |
|
| 139 | - 'najdi', |
|
| 140 | - 'netcraftsurveyagent', |
|
| 141 | - 'netestate', |
|
| 142 | - 'netseer', |
|
| 143 | - 'netnewswire', |
|
| 144 | - 'newspaper', |
|
| 145 | - 'newsblur', |
|
| 146 | - 'nuhk', |
|
| 147 | - 'nuzzel', |
|
| 148 | - 'okhttp', |
|
| 149 | - 'otmedia', |
|
| 150 | - 'owlin', |
|
| 151 | - 'owncloud', |
|
| 152 | - 'panscient', |
|
| 153 | - 'paper\.li', |
|
| 154 | - 'parsijoo', |
|
| 155 | - 'protopage', |
|
| 156 | - 'plukkie', |
|
| 157 | - 'proximic', |
|
| 158 | - 'pubsub', |
|
| 159 | - 'python', |
|
| 160 | - 'qirina', |
|
| 161 | - 'qoshe', |
|
| 162 | - 'qualidator', |
|
| 163 | - 'qwantify', |
|
| 164 | - 'rambler', |
|
| 165 | - 'readability', |
|
| 166 | - 'ruby', |
|
| 167 | - 'sbsearch', |
|
| 168 | - 'scoop\.it', |
|
| 169 | - 'scooter', |
|
| 170 | - 'scoutjet', |
|
| 171 | - 'scrapy', |
|
| 172 | - 'scrubby', |
|
| 173 | - 'scrubbybloglines', |
|
| 174 | - 'shareaholic', |
|
| 175 | - 'shopwiki', |
|
| 176 | - 'simplepie', |
|
| 177 | - 'sistrix', |
|
| 178 | - 'sitechecker', |
|
| 179 | - 'siteexplorer', |
|
| 180 | - 'snapshot', |
|
| 181 | - 'sogou', |
|
| 182 | - 'special_archiver', |
|
| 183 | - 'speedy', |
|
| 184 | - 'spinn3r', |
|
| 185 | - 'spreadtrum', |
|
| 186 | - 'steeler', |
|
| 187 | - 'subscriber', |
|
| 188 | - 'suma', |
|
| 189 | - 'superdownloads', |
|
| 190 | - 'svenska-webbsido', |
|
| 191 | - 'teoma', |
|
| 192 | - 'the knowledge AI', |
|
| 193 | - 'thumbshots', |
|
| 194 | - 'tineye', |
|
| 195 | - 'traackr', |
|
| 196 | - 'trendiction', |
|
| 197 | - 'trendsmap', |
|
| 198 | - 'tweetedtimes', |
|
| 199 | - 'tweetmeme', |
|
| 200 | - 'universalfeedparser', |
|
| 201 | - 'uaslinkchecker', |
|
| 202 | - 'undrip', |
|
| 203 | - 'unwindfetchor', |
|
| 204 | - 'upday', |
|
| 205 | - 'vedma', |
|
| 206 | - 'vkshare', |
|
| 207 | - 'vm', |
|
| 208 | - 'wch', |
|
| 209 | - 'webalta', |
|
| 210 | - 'webcookies', |
|
| 211 | - 'webparser', |
|
| 212 | - 'webthumbnail', |
|
| 213 | - 'wesee', |
|
| 214 | - 'wise-guys', |
|
| 215 | - 'woko', |
|
| 216 | - 'wordpress', |
|
| 217 | - 'wotbox', |
|
| 218 | - 'y!j-bri', |
|
| 219 | - 'y!j-bro', |
|
| 220 | - 'y!j-brw', |
|
| 221 | - 'y!j-bsc', |
|
| 222 | - 'yahoo', |
|
| 223 | - 'yahoo!', |
|
| 224 | - 'yahooysmcm', |
|
| 225 | - 'ymobactus', |
|
| 226 | - 'yats', |
|
| 227 | - 'yeti', |
|
| 228 | - 'zeerch' |
|
| 229 | - )) . ',i', |
|
| 230 | - (string)$_SERVER['HTTP_USER_AGENT'] |
|
| 231 | - ) |
|
| 232 | - ); |
|
| 39 | + define( |
|
| 40 | + '_IS_BOT', |
|
| 41 | + isset($_SERVER['HTTP_USER_AGENT']) |
|
| 42 | + and preg_match( |
|
| 43 | + ',' |
|
| 44 | + . implode('|', array( |
|
| 45 | + // mots generiques |
|
| 46 | + 'bot', |
|
| 47 | + 'slurp', |
|
| 48 | + 'crawler', |
|
| 49 | + 'crwlr', |
|
| 50 | + 'java', |
|
| 51 | + 'monitoring', |
|
| 52 | + 'spider', |
|
| 53 | + 'webvac', |
|
| 54 | + 'yandex', |
|
| 55 | + 'MSIE 6\.0', // botnet 99,9% du temps |
|
| 56 | + // UA plus cibles |
|
| 57 | + '200please', |
|
| 58 | + '80legs', |
|
| 59 | + 'a6-indexer', |
|
| 60 | + 'aboundex', |
|
| 61 | + 'accoona', |
|
| 62 | + 'acrylicapps', |
|
| 63 | + 'addthis', |
|
| 64 | + 'adressendeutschland', |
|
| 65 | + 'alexa', |
|
| 66 | + 'altavista', |
|
| 67 | + 'analyticsseo', |
|
| 68 | + 'antennapod', |
|
| 69 | + 'arachnys', |
|
| 70 | + 'archive', |
|
| 71 | + 'argclrint', |
|
| 72 | + 'aspseek', |
|
| 73 | + 'baidu', |
|
| 74 | + 'begunadvertising', |
|
| 75 | + 'bing', |
|
| 76 | + 'bloglines', |
|
| 77 | + 'buck', |
|
| 78 | + 'browsershots', |
|
| 79 | + 'bubing', |
|
| 80 | + 'butterfly', |
|
| 81 | + 'changedetection', |
|
| 82 | + 'charlotte', |
|
| 83 | + 'chilkat', |
|
| 84 | + 'china', |
|
| 85 | + 'coccoc', |
|
| 86 | + 'crowsnest', |
|
| 87 | + 'dataminr', |
|
| 88 | + 'daumoa', |
|
| 89 | + 'dlvr\.it', |
|
| 90 | + 'dlweb', |
|
| 91 | + 'drupal', |
|
| 92 | + 'ec2linkfinder', |
|
| 93 | + 'eset\.com', |
|
| 94 | + 'estyle', |
|
| 95 | + 'exalead', |
|
| 96 | + 'ezooms', |
|
| 97 | + 'facebookexternalhit', |
|
| 98 | + 'facebookplatform', |
|
| 99 | + 'fairshare', |
|
| 100 | + 'feedfetcher', |
|
| 101 | + 'feedfetcher-google', |
|
| 102 | + 'feedly', |
|
| 103 | + 'fetch', |
|
| 104 | + 'flipboardproxy', |
|
| 105 | + 'genieo', |
|
| 106 | + 'google', |
|
| 107 | + 'go-http-client', |
|
| 108 | + 'grapeshot', |
|
| 109 | + 'hatena-useragent', |
|
| 110 | + 'head', |
|
| 111 | + 'hosttracker', |
|
| 112 | + 'hubspot', |
|
| 113 | + 'ia_archiver', |
|
| 114 | + 'ichiro', |
|
| 115 | + 'iltrovatore-setaccio', |
|
| 116 | + 'immediatenet', |
|
| 117 | + 'ina', |
|
| 118 | + 'inoreader', |
|
| 119 | + 'infegyatlas', |
|
| 120 | + 'infohelfer', |
|
| 121 | + 'instapaper', |
|
| 122 | + 'jabse', |
|
| 123 | + 'james', |
|
| 124 | + 'jersey', |
|
| 125 | + 'kumkie', |
|
| 126 | + 'linkdex', |
|
| 127 | + 'linkfluence', |
|
| 128 | + 'linkwalker', |
|
| 129 | + 'litefinder', |
|
| 130 | + 'loadimpactpageanalyzer', |
|
| 131 | + 'ltx71', |
|
| 132 | + 'luminate', |
|
| 133 | + 'lycos', |
|
| 134 | + 'lycosa', |
|
| 135 | + 'mediapartners-google', |
|
| 136 | + 'msai', |
|
| 137 | + 'myapp', |
|
| 138 | + 'nativehost', |
|
| 139 | + 'najdi', |
|
| 140 | + 'netcraftsurveyagent', |
|
| 141 | + 'netestate', |
|
| 142 | + 'netseer', |
|
| 143 | + 'netnewswire', |
|
| 144 | + 'newspaper', |
|
| 145 | + 'newsblur', |
|
| 146 | + 'nuhk', |
|
| 147 | + 'nuzzel', |
|
| 148 | + 'okhttp', |
|
| 149 | + 'otmedia', |
|
| 150 | + 'owlin', |
|
| 151 | + 'owncloud', |
|
| 152 | + 'panscient', |
|
| 153 | + 'paper\.li', |
|
| 154 | + 'parsijoo', |
|
| 155 | + 'protopage', |
|
| 156 | + 'plukkie', |
|
| 157 | + 'proximic', |
|
| 158 | + 'pubsub', |
|
| 159 | + 'python', |
|
| 160 | + 'qirina', |
|
| 161 | + 'qoshe', |
|
| 162 | + 'qualidator', |
|
| 163 | + 'qwantify', |
|
| 164 | + 'rambler', |
|
| 165 | + 'readability', |
|
| 166 | + 'ruby', |
|
| 167 | + 'sbsearch', |
|
| 168 | + 'scoop\.it', |
|
| 169 | + 'scooter', |
|
| 170 | + 'scoutjet', |
|
| 171 | + 'scrapy', |
|
| 172 | + 'scrubby', |
|
| 173 | + 'scrubbybloglines', |
|
| 174 | + 'shareaholic', |
|
| 175 | + 'shopwiki', |
|
| 176 | + 'simplepie', |
|
| 177 | + 'sistrix', |
|
| 178 | + 'sitechecker', |
|
| 179 | + 'siteexplorer', |
|
| 180 | + 'snapshot', |
|
| 181 | + 'sogou', |
|
| 182 | + 'special_archiver', |
|
| 183 | + 'speedy', |
|
| 184 | + 'spinn3r', |
|
| 185 | + 'spreadtrum', |
|
| 186 | + 'steeler', |
|
| 187 | + 'subscriber', |
|
| 188 | + 'suma', |
|
| 189 | + 'superdownloads', |
|
| 190 | + 'svenska-webbsido', |
|
| 191 | + 'teoma', |
|
| 192 | + 'the knowledge AI', |
|
| 193 | + 'thumbshots', |
|
| 194 | + 'tineye', |
|
| 195 | + 'traackr', |
|
| 196 | + 'trendiction', |
|
| 197 | + 'trendsmap', |
|
| 198 | + 'tweetedtimes', |
|
| 199 | + 'tweetmeme', |
|
| 200 | + 'universalfeedparser', |
|
| 201 | + 'uaslinkchecker', |
|
| 202 | + 'undrip', |
|
| 203 | + 'unwindfetchor', |
|
| 204 | + 'upday', |
|
| 205 | + 'vedma', |
|
| 206 | + 'vkshare', |
|
| 207 | + 'vm', |
|
| 208 | + 'wch', |
|
| 209 | + 'webalta', |
|
| 210 | + 'webcookies', |
|
| 211 | + 'webparser', |
|
| 212 | + 'webthumbnail', |
|
| 213 | + 'wesee', |
|
| 214 | + 'wise-guys', |
|
| 215 | + 'woko', |
|
| 216 | + 'wordpress', |
|
| 217 | + 'wotbox', |
|
| 218 | + 'y!j-bri', |
|
| 219 | + 'y!j-bro', |
|
| 220 | + 'y!j-brw', |
|
| 221 | + 'y!j-bsc', |
|
| 222 | + 'yahoo', |
|
| 223 | + 'yahoo!', |
|
| 224 | + 'yahooysmcm', |
|
| 225 | + 'ymobactus', |
|
| 226 | + 'yats', |
|
| 227 | + 'yeti', |
|
| 228 | + 'zeerch' |
|
| 229 | + )) . ',i', |
|
| 230 | + (string)$_SERVER['HTTP_USER_AGENT'] |
|
| 231 | + ) |
|
| 232 | + ); |
|
| 233 | 233 | } |
| 234 | 234 | if (!defined('_IS_BOT_FRIEND')) { |
| 235 | - define( |
|
| 236 | - '_IS_BOT_FRIEND', |
|
| 237 | - isset($_SERVER['HTTP_USER_AGENT']) |
|
| 238 | - and preg_match( |
|
| 239 | - ',' . implode('|', array( |
|
| 240 | - 'facebookexternalhit', |
|
| 241 | - 'twitterbot', |
|
| 242 | - 'flipboardproxy', |
|
| 243 | - 'wordpress' |
|
| 244 | - )) . ',i', |
|
| 245 | - (string)$_SERVER['HTTP_USER_AGENT'] |
|
| 246 | - ) |
|
| 247 | - ); |
|
| 235 | + define( |
|
| 236 | + '_IS_BOT_FRIEND', |
|
| 237 | + isset($_SERVER['HTTP_USER_AGENT']) |
|
| 238 | + and preg_match( |
|
| 239 | + ',' . implode('|', array( |
|
| 240 | + 'facebookexternalhit', |
|
| 241 | + 'twitterbot', |
|
| 242 | + 'flipboardproxy', |
|
| 243 | + 'wordpress' |
|
| 244 | + )) . ',i', |
|
| 245 | + (string)$_SERVER['HTTP_USER_AGENT'] |
|
| 246 | + ) |
|
| 247 | + ); |
|
| 248 | 248 | } |
| 249 | 249 | |
| 250 | 250 | /* |
@@ -256,28 +256,28 @@ discard block |
||
| 256 | 256 | */ |
| 257 | 257 | $_exceptions = array('id_table', 'id_base', 'id_parent', 'id_article_pdf'); |
| 258 | 258 | foreach ($_GET as $var => $val) { |
| 259 | - if ( |
|
| 260 | - $_GET[$var] and strncmp($var, "id_", 3) == 0 |
|
| 261 | - and !in_array($var, $_exceptions) |
|
| 262 | - ) { |
|
| 263 | - $_GET[$var] = is_array($_GET[$var]) ? @array_map('intval', $_GET[$var]) : intval($_GET[$var]); |
|
| 264 | - } |
|
| 259 | + if ( |
|
| 260 | + $_GET[$var] and strncmp($var, "id_", 3) == 0 |
|
| 261 | + and !in_array($var, $_exceptions) |
|
| 262 | + ) { |
|
| 263 | + $_GET[$var] = is_array($_GET[$var]) ? @array_map('intval', $_GET[$var]) : intval($_GET[$var]); |
|
| 264 | + } |
|
| 265 | 265 | } |
| 266 | 266 | foreach ($_POST as $var => $val) { |
| 267 | - if ( |
|
| 268 | - $_POST[$var] and strncmp($var, "id_", 3) == 0 |
|
| 269 | - and !in_array($var, $_exceptions) |
|
| 270 | - ) { |
|
| 271 | - $_POST[$var] = is_array($_POST[$var]) ? @array_map('intval', $_POST[$var]) : intval($_POST[$var]); |
|
| 272 | - } |
|
| 267 | + if ( |
|
| 268 | + $_POST[$var] and strncmp($var, "id_", 3) == 0 |
|
| 269 | + and !in_array($var, $_exceptions) |
|
| 270 | + ) { |
|
| 271 | + $_POST[$var] = is_array($_POST[$var]) ? @array_map('intval', $_POST[$var]) : intval($_POST[$var]); |
|
| 272 | + } |
|
| 273 | 273 | } |
| 274 | 274 | foreach ($GLOBALS as $var => $val) { |
| 275 | - if ( |
|
| 276 | - $GLOBALS[$var] and strncmp($var, "id_", 3) == 0 |
|
| 277 | - and !in_array($var, $_exceptions) |
|
| 278 | - ) { |
|
| 279 | - $GLOBALS[$var] = is_array($GLOBALS[$var]) ? @array_map('intval', $GLOBALS[$var]) : intval($GLOBALS[$var]); |
|
| 280 | - } |
|
| 275 | + if ( |
|
| 276 | + $GLOBALS[$var] and strncmp($var, "id_", 3) == 0 |
|
| 277 | + and !in_array($var, $_exceptions) |
|
| 278 | + ) { |
|
| 279 | + $GLOBALS[$var] = is_array($GLOBALS[$var]) ? @array_map('intval', $GLOBALS[$var]) : intval($GLOBALS[$var]); |
|
| 280 | + } |
|
| 281 | 281 | } |
| 282 | 282 | |
| 283 | 283 | /* |
@@ -290,116 +290,116 @@ discard block |
||
| 290 | 290 | * Contrôle de quelques variables (XSS) |
| 291 | 291 | */ |
| 292 | 292 | foreach (array('lang', 'var_recherche', 'aide', 'var_lang_r', 'lang_r', 'var_ajax_ancre', 'nom_fichier') as $var) { |
| 293 | - if (isset($_GET[$var])) { |
|
| 294 | - $_REQUEST[$var] = $GLOBALS[$var] = $_GET[$var] = preg_replace(',[^\w\,/#&;-]+,', ' ', (string)$_GET[$var]); |
|
| 295 | - } |
|
| 296 | - if (isset($_POST[$var])) { |
|
| 297 | - $_REQUEST[$var] = $GLOBALS[$var] = $_POST[$var] = preg_replace(',[^\w\,/#&;-]+,', ' ', (string)$_POST[$var]); |
|
| 298 | - } |
|
| 293 | + if (isset($_GET[$var])) { |
|
| 294 | + $_REQUEST[$var] = $GLOBALS[$var] = $_GET[$var] = preg_replace(',[^\w\,/#&;-]+,', ' ', (string)$_GET[$var]); |
|
| 295 | + } |
|
| 296 | + if (isset($_POST[$var])) { |
|
| 297 | + $_REQUEST[$var] = $GLOBALS[$var] = $_POST[$var] = preg_replace(',[^\w\,/#&;-]+,', ' ', (string)$_POST[$var]); |
|
| 298 | + } |
|
| 299 | 299 | } |
| 300 | 300 | |
| 301 | 301 | /* |
| 302 | 302 | * Filtre l'accès à spip_acces_doc (injection SQL en 1.8.2x) |
| 303 | 303 | */ |
| 304 | 304 | if (isset($_SERVER['REQUEST_URI'])) { |
| 305 | - if (preg_match(',^(.*/)?spip_acces_doc\.,', (string)$_SERVER['REQUEST_URI'])) { |
|
| 306 | - $file = addslashes((string)$_GET['file']); |
|
| 307 | - } |
|
| 305 | + if (preg_match(',^(.*/)?spip_acces_doc\.,', (string)$_SERVER['REQUEST_URI'])) { |
|
| 306 | + $file = addslashes((string)$_GET['file']); |
|
| 307 | + } |
|
| 308 | 308 | } |
| 309 | 309 | |
| 310 | 310 | /* |
| 311 | 311 | * Pas d'inscription abusive |
| 312 | 312 | */ |
| 313 | 313 | if ( |
| 314 | - isset($_REQUEST['mode']) and isset($_REQUEST['page']) |
|
| 315 | - and !in_array($_REQUEST['mode'], array("6forum", "1comite")) |
|
| 316 | - and $_REQUEST['page'] == "identifiants" |
|
| 314 | + isset($_REQUEST['mode']) and isset($_REQUEST['page']) |
|
| 315 | + and !in_array($_REQUEST['mode'], array("6forum", "1comite")) |
|
| 316 | + and $_REQUEST['page'] == "identifiants" |
|
| 317 | 317 | ) { |
| 318 | - $ecran_securite_raison = "identifiants"; |
|
| 318 | + $ecran_securite_raison = "identifiants"; |
|
| 319 | 319 | } |
| 320 | 320 | |
| 321 | 321 | /* |
| 322 | 322 | * Agenda joue à l'injection php |
| 323 | 323 | */ |
| 324 | 324 | if ( |
| 325 | - isset($_REQUEST['partie_cal']) |
|
| 326 | - and $_REQUEST['partie_cal'] !== htmlentities((string)$_REQUEST['partie_cal']) |
|
| 325 | + isset($_REQUEST['partie_cal']) |
|
| 326 | + and $_REQUEST['partie_cal'] !== htmlentities((string)$_REQUEST['partie_cal']) |
|
| 327 | 327 | ) { |
| 328 | - $ecran_securite_raison = "partie_cal"; |
|
| 328 | + $ecran_securite_raison = "partie_cal"; |
|
| 329 | 329 | } |
| 330 | 330 | if ( |
| 331 | - isset($_REQUEST['echelle']) |
|
| 332 | - and $_REQUEST['echelle'] !== htmlentities((string)$_REQUEST['echelle']) |
|
| 331 | + isset($_REQUEST['echelle']) |
|
| 332 | + and $_REQUEST['echelle'] !== htmlentities((string)$_REQUEST['echelle']) |
|
| 333 | 333 | ) { |
| 334 | - $ecran_securite_raison = "echelle"; |
|
| 334 | + $ecran_securite_raison = "echelle"; |
|
| 335 | 335 | } |
| 336 | 336 | |
| 337 | 337 | /* |
| 338 | 338 | * Espace privé |
| 339 | 339 | */ |
| 340 | 340 | if ( |
| 341 | - isset($_REQUEST['exec']) |
|
| 342 | - and !preg_match(',^[\w-]+$,', (string)$_REQUEST['exec']) |
|
| 341 | + isset($_REQUEST['exec']) |
|
| 342 | + and !preg_match(',^[\w-]+$,', (string)$_REQUEST['exec']) |
|
| 343 | 343 | ) { |
| 344 | - $ecran_securite_raison = "exec"; |
|
| 344 | + $ecran_securite_raison = "exec"; |
|
| 345 | 345 | } |
| 346 | 346 | if ( |
| 347 | - isset($_REQUEST['cherche_auteur']) |
|
| 348 | - and preg_match(',[<],', (string)$_REQUEST['cherche_auteur']) |
|
| 347 | + isset($_REQUEST['cherche_auteur']) |
|
| 348 | + and preg_match(',[<],', (string)$_REQUEST['cherche_auteur']) |
|
| 349 | 349 | ) { |
| 350 | - $ecran_securite_raison = "cherche_auteur"; |
|
| 350 | + $ecran_securite_raison = "cherche_auteur"; |
|
| 351 | 351 | } |
| 352 | 352 | if ( |
| 353 | - isset($_REQUEST['exec']) |
|
| 354 | - and $_REQUEST['exec'] == 'auteurs' |
|
| 355 | - and isset($_REQUEST['recherche']) |
|
| 356 | - and preg_match(',[<],', (string)$_REQUEST['recherche']) |
|
| 353 | + isset($_REQUEST['exec']) |
|
| 354 | + and $_REQUEST['exec'] == 'auteurs' |
|
| 355 | + and isset($_REQUEST['recherche']) |
|
| 356 | + and preg_match(',[<],', (string)$_REQUEST['recherche']) |
|
| 357 | 357 | ) { |
| 358 | - $ecran_securite_raison = "recherche"; |
|
| 358 | + $ecran_securite_raison = "recherche"; |
|
| 359 | 359 | } |
| 360 | 360 | if ( |
| 361 | - isset($_REQUEST['exec']) |
|
| 362 | - and $_REQUEST['exec'] == 'info_plugin' |
|
| 363 | - and isset($_REQUEST['plugin']) |
|
| 364 | - and preg_match(',[<],', (string)$_REQUEST['plugin']) |
|
| 361 | + isset($_REQUEST['exec']) |
|
| 362 | + and $_REQUEST['exec'] == 'info_plugin' |
|
| 363 | + and isset($_REQUEST['plugin']) |
|
| 364 | + and preg_match(',[<],', (string)$_REQUEST['plugin']) |
|
| 365 | 365 | ) { |
| 366 | - $ecran_securite_raison = "plugin"; |
|
| 366 | + $ecran_securite_raison = "plugin"; |
|
| 367 | 367 | } |
| 368 | 368 | if ( |
| 369 | - isset($_REQUEST['exec']) |
|
| 370 | - and $_REQUEST['exec'] == 'puce_statut' |
|
| 371 | - and isset($_REQUEST['id']) |
|
| 372 | - and !intval($_REQUEST['id']) |
|
| 369 | + isset($_REQUEST['exec']) |
|
| 370 | + and $_REQUEST['exec'] == 'puce_statut' |
|
| 371 | + and isset($_REQUEST['id']) |
|
| 372 | + and !intval($_REQUEST['id']) |
|
| 373 | 373 | ) { |
| 374 | - $ecran_securite_raison = "puce_statut"; |
|
| 374 | + $ecran_securite_raison = "puce_statut"; |
|
| 375 | 375 | } |
| 376 | 376 | if ( |
| 377 | - isset($_REQUEST['action']) |
|
| 378 | - and $_REQUEST['action'] == 'configurer' |
|
| 377 | + isset($_REQUEST['action']) |
|
| 378 | + and $_REQUEST['action'] == 'configurer' |
|
| 379 | 379 | ) { |
| 380 | - if ( |
|
| 381 | - @file_exists('inc_version.php') |
|
| 382 | - or @file_exists('ecrire/inc_version.php') |
|
| 383 | - ) { |
|
| 384 | - function action_configurer() { |
|
| 385 | - include_spip('inc/autoriser'); |
|
| 386 | - if (!autoriser('configurer', _request('configuration'))) { |
|
| 387 | - include_spip('inc/minipres'); |
|
| 388 | - echo minipres(_T('info_acces_interdit')); |
|
| 389 | - exit; |
|
| 390 | - } |
|
| 391 | - require _DIR_RESTREINT . 'action/configurer.php'; |
|
| 392 | - action_configurer_dist(); |
|
| 393 | - } |
|
| 394 | - } |
|
| 380 | + if ( |
|
| 381 | + @file_exists('inc_version.php') |
|
| 382 | + or @file_exists('ecrire/inc_version.php') |
|
| 383 | + ) { |
|
| 384 | + function action_configurer() { |
|
| 385 | + include_spip('inc/autoriser'); |
|
| 386 | + if (!autoriser('configurer', _request('configuration'))) { |
|
| 387 | + include_spip('inc/minipres'); |
|
| 388 | + echo minipres(_T('info_acces_interdit')); |
|
| 389 | + exit; |
|
| 390 | + } |
|
| 391 | + require _DIR_RESTREINT . 'action/configurer.php'; |
|
| 392 | + action_configurer_dist(); |
|
| 393 | + } |
|
| 394 | + } |
|
| 395 | 395 | } |
| 396 | 396 | if ( |
| 397 | - isset($_REQUEST['action']) |
|
| 398 | - and $_REQUEST['action'] == 'ordonner_liens_documents' |
|
| 399 | - and isset($_REQUEST['ordre']) |
|
| 400 | - and is_string($_REQUEST['ordre']) |
|
| 397 | + isset($_REQUEST['action']) |
|
| 398 | + and $_REQUEST['action'] == 'ordonner_liens_documents' |
|
| 399 | + and isset($_REQUEST['ordre']) |
|
| 400 | + and is_string($_REQUEST['ordre']) |
|
| 401 | 401 | ) { |
| 402 | - $ecran_securite_raison = "ordre a la chaine"; |
|
| 402 | + $ecran_securite_raison = "ordre a la chaine"; |
|
| 403 | 403 | } |
| 404 | 404 | |
| 405 | 405 | |
@@ -407,29 +407,29 @@ discard block |
||
| 407 | 407 | * Bloque les requêtes contenant %00 (manipulation d'include) |
| 408 | 408 | */ |
| 409 | 409 | if (strpos( |
| 410 | - (function_exists('get_magic_quotes_gpc') and @get_magic_quotes_gpc()) |
|
| 411 | - ? stripslashes(serialize($_REQUEST)) |
|
| 412 | - : serialize($_REQUEST), |
|
| 413 | - chr(0) |
|
| 410 | + (function_exists('get_magic_quotes_gpc') and @get_magic_quotes_gpc()) |
|
| 411 | + ? stripslashes(serialize($_REQUEST)) |
|
| 412 | + : serialize($_REQUEST), |
|
| 413 | + chr(0) |
|
| 414 | 414 | ) !== false) { |
| 415 | - $ecran_securite_raison = "%00"; |
|
| 415 | + $ecran_securite_raison = "%00"; |
|
| 416 | 416 | } |
| 417 | 417 | |
| 418 | 418 | /* |
| 419 | 419 | * Bloque les requêtes fond=formulaire_ |
| 420 | 420 | */ |
| 421 | 421 | if ( |
| 422 | - isset($_REQUEST['fond']) |
|
| 423 | - and preg_match(',^formulaire_,i', $_REQUEST['fond']) |
|
| 422 | + isset($_REQUEST['fond']) |
|
| 423 | + and preg_match(',^formulaire_,i', $_REQUEST['fond']) |
|
| 424 | 424 | ) { |
| 425 | - $ecran_securite_raison = "fond=formulaire_"; |
|
| 425 | + $ecran_securite_raison = "fond=formulaire_"; |
|
| 426 | 426 | } |
| 427 | 427 | |
| 428 | 428 | /* |
| 429 | 429 | * Bloque les requêtes du type ?GLOBALS[type_urls]=toto (bug vieux php) |
| 430 | 430 | */ |
| 431 | 431 | if (isset($_REQUEST['GLOBALS'])) { |
| 432 | - $ecran_securite_raison = "GLOBALS[GLOBALS]"; |
|
| 432 | + $ecran_securite_raison = "GLOBALS[GLOBALS]"; |
|
| 433 | 433 | } |
| 434 | 434 | |
| 435 | 435 | /* |
@@ -438,14 +438,14 @@ discard block |
||
| 438 | 438 | * les paginations entremélées |
| 439 | 439 | */ |
| 440 | 440 | if (_IS_BOT) { |
| 441 | - if ( |
|
| 442 | - (isset($_REQUEST['echelle']) and isset($_REQUEST['partie_cal']) and isset($_REQUEST['type'])) |
|
| 443 | - or (strpos((string)$_SERVER['REQUEST_URI'], 'debut_') and preg_match(',[?&]debut_.*&debut_,', (string)$_SERVER['REQUEST_URI'])) |
|
| 444 | - or (isset($_REQUEST['calendrier_annee']) and strpos((string)$_SERVER['REQUEST_URI'], 'debut_')) |
|
| 445 | - or (isset($_REQUEST['calendrier_annee']) and preg_match(',[?&]calendrier_annee=.*&calendrier_annee=,', (string)$_SERVER['REQUEST_URI'])) |
|
| 446 | - ) { |
|
| 447 | - $ecran_securite_raison = "robot agenda/double pagination"; |
|
| 448 | - } |
|
| 441 | + if ( |
|
| 442 | + (isset($_REQUEST['echelle']) and isset($_REQUEST['partie_cal']) and isset($_REQUEST['type'])) |
|
| 443 | + or (strpos((string)$_SERVER['REQUEST_URI'], 'debut_') and preg_match(',[?&]debut_.*&debut_,', (string)$_SERVER['REQUEST_URI'])) |
|
| 444 | + or (isset($_REQUEST['calendrier_annee']) and strpos((string)$_SERVER['REQUEST_URI'], 'debut_')) |
|
| 445 | + or (isset($_REQUEST['calendrier_annee']) and preg_match(',[?&]calendrier_annee=.*&calendrier_annee=,', (string)$_SERVER['REQUEST_URI'])) |
|
| 446 | + ) { |
|
| 447 | + $ecran_securite_raison = "robot agenda/double pagination"; |
|
| 448 | + } |
|
| 449 | 449 | } |
| 450 | 450 | |
| 451 | 451 | /* |
@@ -453,82 +453,82 @@ discard block |
||
| 453 | 453 | * Bloque un XSS sur une page inexistante |
| 454 | 454 | */ |
| 455 | 455 | if (isset($_REQUEST['page'])) { |
| 456 | - if ($_REQUEST['page'] == 'test_cfg') { |
|
| 457 | - $ecran_securite_raison = "test_cfg"; |
|
| 458 | - } |
|
| 459 | - if ($_REQUEST['page'] !== htmlspecialchars((string)$_REQUEST['page'])) { |
|
| 460 | - $ecran_securite_raison = "xsspage"; |
|
| 461 | - } |
|
| 462 | - if ( |
|
| 463 | - $_REQUEST['page'] == '404' |
|
| 464 | - and isset($_REQUEST['erreur']) |
|
| 465 | - ) { |
|
| 466 | - $ecran_securite_raison = "xss404"; |
|
| 467 | - } |
|
| 456 | + if ($_REQUEST['page'] == 'test_cfg') { |
|
| 457 | + $ecran_securite_raison = "test_cfg"; |
|
| 458 | + } |
|
| 459 | + if ($_REQUEST['page'] !== htmlspecialchars((string)$_REQUEST['page'])) { |
|
| 460 | + $ecran_securite_raison = "xsspage"; |
|
| 461 | + } |
|
| 462 | + if ( |
|
| 463 | + $_REQUEST['page'] == '404' |
|
| 464 | + and isset($_REQUEST['erreur']) |
|
| 465 | + ) { |
|
| 466 | + $ecran_securite_raison = "xss404"; |
|
| 467 | + } |
|
| 468 | 468 | } |
| 469 | 469 | |
| 470 | 470 | /* |
| 471 | 471 | * XSS par array |
| 472 | 472 | */ |
| 473 | 473 | foreach (array('var_login') as $var) { |
| 474 | - if (isset($_REQUEST[$var]) and is_array($_REQUEST[$var])) { |
|
| 475 | - $ecran_securite_raison = "xss " . $var; |
|
| 476 | - } |
|
| 474 | + if (isset($_REQUEST[$var]) and is_array($_REQUEST[$var])) { |
|
| 475 | + $ecran_securite_raison = "xss " . $var; |
|
| 476 | + } |
|
| 477 | 477 | } |
| 478 | 478 | |
| 479 | 479 | /* |
| 480 | 480 | * Parade antivirale contre un cheval de troie |
| 481 | 481 | */ |
| 482 | 482 | if (!function_exists('tmp_lkojfghx')) { |
| 483 | - function tmp_lkojfghx() {} |
|
| 484 | - function tmp_lkojfghx2($a = 0, $b = 0, $c = 0, $d = 0) { |
|
| 485 | - // si jamais on est arrivé ici sur une erreur php |
|
| 486 | - // et qu'un autre gestionnaire d'erreur est défini, l'appeller |
|
| 487 | - if ($b && $GLOBALS['tmp_xhgfjokl']) { |
|
| 488 | - call_user_func($GLOBALS['tmp_xhgfjokl'], $a, $b, $c, $d); |
|
| 489 | - } |
|
| 490 | - } |
|
| 483 | + function tmp_lkojfghx() {} |
|
| 484 | + function tmp_lkojfghx2($a = 0, $b = 0, $c = 0, $d = 0) { |
|
| 485 | + // si jamais on est arrivé ici sur une erreur php |
|
| 486 | + // et qu'un autre gestionnaire d'erreur est défini, l'appeller |
|
| 487 | + if ($b && $GLOBALS['tmp_xhgfjokl']) { |
|
| 488 | + call_user_func($GLOBALS['tmp_xhgfjokl'], $a, $b, $c, $d); |
|
| 489 | + } |
|
| 490 | + } |
|
| 491 | 491 | } |
| 492 | 492 | if (isset($_POST['tmp_lkojfghx3'])) { |
| 493 | - $ecran_securite_raison = "gumblar"; |
|
| 493 | + $ecran_securite_raison = "gumblar"; |
|
| 494 | 494 | } |
| 495 | 495 | |
| 496 | 496 | /* |
| 497 | 497 | * Outils XML mal sécurisés < 2.0.9 |
| 498 | 498 | */ |
| 499 | 499 | if (isset($_REQUEST['transformer_xml'])) { |
| 500 | - $ecran_securite_raison = "transformer_xml"; |
|
| 500 | + $ecran_securite_raison = "transformer_xml"; |
|
| 501 | 501 | } |
| 502 | 502 | |
| 503 | 503 | /* |
| 504 | 504 | * Outils XML mal sécurisés again |
| 505 | 505 | */ |
| 506 | 506 | if (isset($_REQUEST['var_url']) and $_REQUEST['var_url'] and isset($_REQUEST['exec']) and $_REQUEST['exec'] == 'valider_xml') { |
| 507 | - $url = trim($_REQUEST['var_url']); |
|
| 508 | - if ( |
|
| 509 | - strncmp($url, '/', 1) == 0 |
|
| 510 | - or (($p = strpos($url, '..')) !== false and strpos($url, '..', $p + 3) !== false) |
|
| 511 | - or (($p = strpos($url, '..')) !== false and strpos($url, 'IMG', $p + 3) !== false) |
|
| 512 | - or (strpos($url, '://') !== false or strpos($url, ':\\') !== false) |
|
| 513 | - ) { |
|
| 514 | - $ecran_securite_raison = 'URL interdite pour var_url'; |
|
| 515 | - } |
|
| 507 | + $url = trim($_REQUEST['var_url']); |
|
| 508 | + if ( |
|
| 509 | + strncmp($url, '/', 1) == 0 |
|
| 510 | + or (($p = strpos($url, '..')) !== false and strpos($url, '..', $p + 3) !== false) |
|
| 511 | + or (($p = strpos($url, '..')) !== false and strpos($url, 'IMG', $p + 3) !== false) |
|
| 512 | + or (strpos($url, '://') !== false or strpos($url, ':\\') !== false) |
|
| 513 | + ) { |
|
| 514 | + $ecran_securite_raison = 'URL interdite pour var_url'; |
|
| 515 | + } |
|
| 516 | 516 | } |
| 517 | 517 | |
| 518 | 518 | /* |
| 519 | 519 | * Sauvegarde mal securisée < 2.0.9 |
| 520 | 520 | */ |
| 521 | 521 | if ( |
| 522 | - isset($_REQUEST['nom_sauvegarde']) |
|
| 523 | - and strstr((string)$_REQUEST['nom_sauvegarde'], '/') |
|
| 522 | + isset($_REQUEST['nom_sauvegarde']) |
|
| 523 | + and strstr((string)$_REQUEST['nom_sauvegarde'], '/') |
|
| 524 | 524 | ) { |
| 525 | - $ecran_securite_raison = 'nom_sauvegarde manipulee'; |
|
| 525 | + $ecran_securite_raison = 'nom_sauvegarde manipulee'; |
|
| 526 | 526 | } |
| 527 | 527 | if ( |
| 528 | - isset($_REQUEST['znom_sauvegarde']) |
|
| 529 | - and strstr((string)$_REQUEST['znom_sauvegarde'], '/') |
|
| 528 | + isset($_REQUEST['znom_sauvegarde']) |
|
| 529 | + and strstr((string)$_REQUEST['znom_sauvegarde'], '/') |
|
| 530 | 530 | ) { |
| 531 | - $ecran_securite_raison = 'znom_sauvegarde manipulee'; |
|
| 531 | + $ecran_securite_raison = 'znom_sauvegarde manipulee'; |
|
| 532 | 532 | } |
| 533 | 533 | |
| 534 | 534 | |
@@ -537,57 +537,57 @@ discard block |
||
| 537 | 537 | * on vérifie 'page' pour ne pas bloquer ... drupal |
| 538 | 538 | */ |
| 539 | 539 | if ( |
| 540 | - isset($_REQUEST['op']) and isset($_REQUEST['page']) |
|
| 541 | - and $_REQUEST['op'] !== preg_replace('/[^\\-\w]/', '', $_REQUEST['op']) |
|
| 540 | + isset($_REQUEST['op']) and isset($_REQUEST['page']) |
|
| 541 | + and $_REQUEST['op'] !== preg_replace('/[^\\-\w]/', '', $_REQUEST['op']) |
|
| 542 | 542 | ) { |
| 543 | - $ecran_securite_raison = 'op'; |
|
| 543 | + $ecran_securite_raison = 'op'; |
|
| 544 | 544 | } |
| 545 | 545 | |
| 546 | 546 | /* |
| 547 | 547 | * Forms & Table ne se méfiait pas assez des uploads de fichiers |
| 548 | 548 | */ |
| 549 | 549 | if (count($_FILES)) { |
| 550 | - foreach ($_FILES as $k => $v) { |
|
| 551 | - if ( |
|
| 552 | - preg_match(',^fichier_\d+$,', $k) |
|
| 553 | - and preg_match(',\.php,i', $v['name']) |
|
| 554 | - ) { |
|
| 555 | - unset($_FILES[$k]); |
|
| 556 | - } |
|
| 557 | - } |
|
| 550 | + foreach ($_FILES as $k => $v) { |
|
| 551 | + if ( |
|
| 552 | + preg_match(',^fichier_\d+$,', $k) |
|
| 553 | + and preg_match(',\.php,i', $v['name']) |
|
| 554 | + ) { |
|
| 555 | + unset($_FILES[$k]); |
|
| 556 | + } |
|
| 557 | + } |
|
| 558 | 558 | } |
| 559 | 559 | /* |
| 560 | 560 | * et Contact trop laxiste avec une variable externe |
| 561 | 561 | * on bloque pas le post pour eviter de perdre des donnees mais on unset la variable et c'est tout |
| 562 | 562 | */ |
| 563 | 563 | if (isset($_REQUEST['pj_enregistrees_nom']) and $_REQUEST['pj_enregistrees_nom']) { |
| 564 | - unset($_REQUEST['pj_enregistrees_nom']); |
|
| 565 | - unset($_GET['pj_enregistrees_nom']); |
|
| 566 | - unset($_POST['pj_enregistrees_nom']); |
|
| 564 | + unset($_REQUEST['pj_enregistrees_nom']); |
|
| 565 | + unset($_GET['pj_enregistrees_nom']); |
|
| 566 | + unset($_POST['pj_enregistrees_nom']); |
|
| 567 | 567 | } |
| 568 | 568 | |
| 569 | 569 | /* |
| 570 | 570 | * reinstall=oui un peu trop permissif |
| 571 | 571 | */ |
| 572 | 572 | if ( |
| 573 | - isset($_REQUEST['reinstall']) |
|
| 574 | - and $_REQUEST['reinstall'] == 'oui' |
|
| 573 | + isset($_REQUEST['reinstall']) |
|
| 574 | + and $_REQUEST['reinstall'] == 'oui' |
|
| 575 | 575 | ) { |
| 576 | - $ecran_securite_raison = 'reinstall=oui'; |
|
| 576 | + $ecran_securite_raison = 'reinstall=oui'; |
|
| 577 | 577 | } |
| 578 | 578 | |
| 579 | 579 | /* |
| 580 | 580 | * Pas d'action pendant l'install |
| 581 | 581 | */ |
| 582 | 582 | if (isset($_REQUEST['exec']) and $_REQUEST['exec'] === 'install' and isset($_REQUEST['action'])) { |
| 583 | - $ecran_securite_raison = 'install&action impossibles'; |
|
| 583 | + $ecran_securite_raison = 'install&action impossibles'; |
|
| 584 | 584 | } |
| 585 | 585 | |
| 586 | 586 | /* |
| 587 | 587 | * Échappement xss referer |
| 588 | 588 | */ |
| 589 | 589 | if (isset($_SERVER['HTTP_REFERER'])) { |
| 590 | - $_SERVER['HTTP_REFERER'] = strtr($_SERVER['HTTP_REFERER'], '<>"\'', '[]##'); |
|
| 590 | + $_SERVER['HTTP_REFERER'] = strtr($_SERVER['HTTP_REFERER'], '<>"\'', '[]##'); |
|
| 591 | 591 | } |
| 592 | 592 | |
| 593 | 593 | |
@@ -595,7 +595,7 @@ discard block |
||
| 595 | 595 | * Echappement HTTP_X_FORWARDED_HOST |
| 596 | 596 | */ |
| 597 | 597 | if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) { |
| 598 | - $_SERVER['HTTP_X_FORWARDED_HOST'] = strtr($_SERVER['HTTP_X_FORWARDED_HOST'], "<>?\"\{\}\$'` \r\n", '____________'); |
|
| 598 | + $_SERVER['HTTP_X_FORWARDED_HOST'] = strtr($_SERVER['HTTP_X_FORWARDED_HOST'], "<>?\"\{\}\$'` \r\n", '____________'); |
|
| 599 | 599 | } |
| 600 | 600 | |
| 601 | 601 | |
@@ -603,9 +603,9 @@ discard block |
||
| 603 | 603 | * Pas d'erreur dans l'erreur |
| 604 | 604 | */ |
| 605 | 605 | if (isset($_REQUEST['var_erreur']) and isset($_REQUEST['page']) and $_REQUEST['page'] === 'login') { |
| 606 | - if (strlen($_REQUEST['var_erreur']) !== strcspn($_REQUEST['var_erreur'], '<>')) { |
|
| 607 | - $ecran_securite_raison = 'var_erreur incorrecte'; |
|
| 608 | - } |
|
| 606 | + if (strlen($_REQUEST['var_erreur']) !== strcspn($_REQUEST['var_erreur'], '<>')) { |
|
| 607 | + $ecran_securite_raison = 'var_erreur incorrecte'; |
|
| 608 | + } |
|
| 609 | 609 | } |
| 610 | 610 | |
| 611 | 611 | |
@@ -613,30 +613,30 @@ discard block |
||
| 613 | 613 | * Réinjection des clés en html dans l'admin r19561 |
| 614 | 614 | */ |
| 615 | 615 | if ( |
| 616 | - (isset($_SERVER['REQUEST_URI']) and strpos($_SERVER['REQUEST_URI'], "ecrire/") !== false) |
|
| 617 | - or isset($_REQUEST['var_memotri']) |
|
| 616 | + (isset($_SERVER['REQUEST_URI']) and strpos($_SERVER['REQUEST_URI'], "ecrire/") !== false) |
|
| 617 | + or isset($_REQUEST['var_memotri']) |
|
| 618 | 618 | ) { |
| 619 | - $zzzz = implode("", array_keys($_REQUEST)); |
|
| 620 | - if (strlen($zzzz) != strcspn($zzzz, '<>"\'')) { |
|
| 621 | - $ecran_securite_raison = 'Cle incorrecte en $_REQUEST'; |
|
| 622 | - } |
|
| 619 | + $zzzz = implode("", array_keys($_REQUEST)); |
|
| 620 | + if (strlen($zzzz) != strcspn($zzzz, '<>"\'')) { |
|
| 621 | + $ecran_securite_raison = 'Cle incorrecte en $_REQUEST'; |
|
| 622 | + } |
|
| 623 | 623 | } |
| 624 | 624 | |
| 625 | 625 | /* |
| 626 | 626 | * Injection par connect |
| 627 | 627 | */ |
| 628 | 628 | if ( |
| 629 | - isset($_REQUEST['connect']) |
|
| 630 | - // cas qui permettent de sortir d'un commentaire PHP |
|
| 631 | - and ( |
|
| 632 | - strpos($_REQUEST['connect'], "?") !== false |
|
| 633 | - or strpos($_REQUEST['connect'], "<") !== false |
|
| 634 | - or strpos($_REQUEST['connect'], ">") !== false |
|
| 635 | - or strpos($_REQUEST['connect'], "\n") !== false |
|
| 636 | - or strpos($_REQUEST['connect'], "\r") !== false |
|
| 637 | - ) |
|
| 629 | + isset($_REQUEST['connect']) |
|
| 630 | + // cas qui permettent de sortir d'un commentaire PHP |
|
| 631 | + and ( |
|
| 632 | + strpos($_REQUEST['connect'], "?") !== false |
|
| 633 | + or strpos($_REQUEST['connect'], "<") !== false |
|
| 634 | + or strpos($_REQUEST['connect'], ">") !== false |
|
| 635 | + or strpos($_REQUEST['connect'], "\n") !== false |
|
| 636 | + or strpos($_REQUEST['connect'], "\r") !== false |
|
| 637 | + ) |
|
| 638 | 638 | ) { |
| 639 | - $ecran_securite_raison = "malformed connect argument"; |
|
| 639 | + $ecran_securite_raison = "malformed connect argument"; |
|
| 640 | 640 | } |
| 641 | 641 | |
| 642 | 642 | |
@@ -644,9 +644,9 @@ discard block |
||
| 644 | 644 | * _oups donc |
| 645 | 645 | */ |
| 646 | 646 | if ( |
| 647 | - isset($_REQUEST['_oups']) |
|
| 648 | - and base64_decode($_REQUEST['_oups'], true) === false) { |
|
| 649 | - $ecran_securite_raison = "malformed _oups argument"; |
|
| 647 | + isset($_REQUEST['_oups']) |
|
| 648 | + and base64_decode($_REQUEST['_oups'], true) === false) { |
|
| 649 | + $ecran_securite_raison = "malformed _oups argument"; |
|
| 650 | 650 | } |
| 651 | 651 | |
| 652 | 652 | |
@@ -654,23 +654,23 @@ discard block |
||
| 654 | 654 | * S'il y a une raison de mourir, mourons |
| 655 | 655 | */ |
| 656 | 656 | if (isset($ecran_securite_raison)) { |
| 657 | - header("HTTP/1.0 403 Forbidden"); |
|
| 658 | - header("Expires: Wed, 11 Jan 1984 05:00:00 GMT"); |
|
| 659 | - header("Cache-Control: no-cache, must-revalidate"); |
|
| 660 | - header("Pragma: no-cache"); |
|
| 661 | - header("Content-Type: text/html"); |
|
| 662 | - header("Connection: close"); |
|
| 663 | - die("<html><title>Error 403: Forbidden</title><body><h1>Error 403</h1><p>You are not authorized to view this page ($ecran_securite_raison)</p></body></html>"); |
|
| 657 | + header("HTTP/1.0 403 Forbidden"); |
|
| 658 | + header("Expires: Wed, 11 Jan 1984 05:00:00 GMT"); |
|
| 659 | + header("Cache-Control: no-cache, must-revalidate"); |
|
| 660 | + header("Pragma: no-cache"); |
|
| 661 | + header("Content-Type: text/html"); |
|
| 662 | + header("Connection: close"); |
|
| 663 | + die("<html><title>Error 403: Forbidden</title><body><h1>Error 403</h1><p>You are not authorized to view this page ($ecran_securite_raison)</p></body></html>"); |
|
| 664 | 664 | } |
| 665 | 665 | |
| 666 | 666 | /* |
| 667 | 667 | * Un filtre filtrer_entites securise |
| 668 | 668 | */ |
| 669 | 669 | if (!function_exists('filtre_filtrer_entites_dist')) { |
| 670 | - function filtre_filtrer_entites_dist($t) { |
|
| 671 | - include_spip('inc/texte'); |
|
| 672 | - return interdire_scripts(filtrer_entites($t)); |
|
| 673 | - } |
|
| 670 | + function filtre_filtrer_entites_dist($t) { |
|
| 671 | + include_spip('inc/texte'); |
|
| 672 | + return interdire_scripts(filtrer_entites($t)); |
|
| 673 | + } |
|
| 674 | 674 | } |
| 675 | 675 | |
| 676 | 676 | |
@@ -684,35 +684,35 @@ discard block |
||
| 684 | 684 | * Bloque les bots quand le load déborde |
| 685 | 685 | */ |
| 686 | 686 | if (!defined('_ECRAN_SECURITE_LOAD')) { |
| 687 | - define('_ECRAN_SECURITE_LOAD', 4); |
|
| 687 | + define('_ECRAN_SECURITE_LOAD', 4); |
|
| 688 | 688 | } |
| 689 | 689 | |
| 690 | 690 | if ( |
| 691 | - defined('_ECRAN_SECURITE_LOAD') |
|
| 692 | - and _ECRAN_SECURITE_LOAD > 0 |
|
| 693 | - and _IS_BOT |
|
| 694 | - and !_IS_BOT_FRIEND |
|
| 695 | - and $_SERVER['REQUEST_METHOD'] === 'GET' |
|
| 696 | - and ( |
|
| 697 | - (function_exists('sys_getloadavg') |
|
| 698 | - and $load = sys_getloadavg() |
|
| 699 | - and is_array($load) |
|
| 700 | - and $load = array_shift($load)) |
|
| 701 | - or |
|
| 702 | - (@is_readable('/proc/loadavg') |
|
| 703 | - and $load = file_get_contents('/proc/loadavg') |
|
| 704 | - and $load = floatval($load)) |
|
| 705 | - ) |
|
| 706 | - and $load > _ECRAN_SECURITE_LOAD // eviter l'evaluation suivante si de toute facon le load est inferieur a la limite |
|
| 707 | - and rand(0, $load * $load) > _ECRAN_SECURITE_LOAD * _ECRAN_SECURITE_LOAD |
|
| 691 | + defined('_ECRAN_SECURITE_LOAD') |
|
| 692 | + and _ECRAN_SECURITE_LOAD > 0 |
|
| 693 | + and _IS_BOT |
|
| 694 | + and !_IS_BOT_FRIEND |
|
| 695 | + and $_SERVER['REQUEST_METHOD'] === 'GET' |
|
| 696 | + and ( |
|
| 697 | + (function_exists('sys_getloadavg') |
|
| 698 | + and $load = sys_getloadavg() |
|
| 699 | + and is_array($load) |
|
| 700 | + and $load = array_shift($load)) |
|
| 701 | + or |
|
| 702 | + (@is_readable('/proc/loadavg') |
|
| 703 | + and $load = file_get_contents('/proc/loadavg') |
|
| 704 | + and $load = floatval($load)) |
|
| 705 | + ) |
|
| 706 | + and $load > _ECRAN_SECURITE_LOAD // eviter l'evaluation suivante si de toute facon le load est inferieur a la limite |
|
| 707 | + and rand(0, $load * $load) > _ECRAN_SECURITE_LOAD * _ECRAN_SECURITE_LOAD |
|
| 708 | 708 | ) { |
| 709 | - //https://webmasters.stackexchange.com/questions/65674/should-i-return-a-429-or-503-status-code-to-a-bot |
|
| 710 | - header("HTTP/1.0 429 Too Many Requests"); |
|
| 711 | - header("Retry-After: 300"); |
|
| 712 | - header("Expires: Wed, 11 Jan 1984 05:00:00 GMT"); |
|
| 713 | - header("Cache-Control: no-cache, must-revalidate"); |
|
| 714 | - header("Pragma: no-cache"); |
|
| 715 | - header("Content-Type: text/html"); |
|
| 716 | - header("Connection: close"); |
|
| 717 | - die("<html><title>Status 429: Too Many Requests</title><body><h1>Status 429</h1><p>Too Many Requests (try again soon)</p></body></html>"); |
|
| 709 | + //https://webmasters.stackexchange.com/questions/65674/should-i-return-a-429-or-503-status-code-to-a-bot |
|
| 710 | + header("HTTP/1.0 429 Too Many Requests"); |
|
| 711 | + header("Retry-After: 300"); |
|
| 712 | + header("Expires: Wed, 11 Jan 1984 05:00:00 GMT"); |
|
| 713 | + header("Cache-Control: no-cache, must-revalidate"); |
|
| 714 | + header("Pragma: no-cache"); |
|
| 715 | + header("Content-Type: text/html"); |
|
| 716 | + header("Connection: close"); |
|
| 717 | + die("<html><title>Status 429: Too Many Requests</title><body><h1>Status 429</h1><p>Too Many Requests (try again soon)</p></body></html>"); |
|
| 718 | 718 | } |
@@ -14,171 +14,171 @@ |
||
| 14 | 14 | |
| 15 | 15 | /** Gestion des clés d’authentification / chiffrement de SPIP */ |
| 16 | 16 | final class SpipCles { |
| 17 | - private static array $instances = []; |
|
| 18 | - |
|
| 19 | - private string $file = _DIR_ETC . 'cles.php'; |
|
| 20 | - private Cles $cles; |
|
| 21 | - |
|
| 22 | - public static function instance(string $file = ''): self { |
|
| 23 | - if (empty(self::$instances[$file])) { |
|
| 24 | - self::$instances[$file] = new self($file); |
|
| 25 | - } |
|
| 26 | - return self::$instances[$file]; |
|
| 27 | - } |
|
| 28 | - |
|
| 29 | - /** |
|
| 30 | - * Retourne le secret du site (shorthand) |
|
| 31 | - * @uses self::getSecretSite() |
|
| 32 | - */ |
|
| 33 | - public static function secret_du_site(): ?string { |
|
| 34 | - return (self::instance())->getSecretSite(); |
|
| 35 | - } |
|
| 36 | - |
|
| 37 | - private function __construct(string $file = '') { |
|
| 38 | - if ($file) { |
|
| 39 | - $this->file = $file; |
|
| 40 | - } |
|
| 41 | - $this->cles = new Cles($this->read()); |
|
| 42 | - } |
|
| 43 | - |
|
| 44 | - /** |
|
| 45 | - * Renvoyer le secret du site |
|
| 46 | - * |
|
| 47 | - * Le secret du site doit rester aussi secret que possible, et est eternel |
|
| 48 | - * On ne doit pas l'exporter |
|
| 49 | - * |
|
| 50 | - * Le secret est partagé entre une clé disque et une clé bdd |
|
| 51 | - * |
|
| 52 | - * @return string |
|
| 53 | - */ |
|
| 54 | - public function getSecretSite(bool $autoInit = true): ?string { |
|
| 55 | - $key = $this->getKey('secret_du_site', $autoInit); |
|
| 56 | - $meta = $this->getMetaKey('secret_du_site', $autoInit); |
|
| 57 | - // conserve la même longeur. |
|
| 58 | - return $key ^ $meta; |
|
| 59 | - } |
|
| 60 | - |
|
| 61 | - /** Renvoyer le secret des authentifications */ |
|
| 62 | - public function getSecretAuth(bool $autoInit = false): ?string { |
|
| 63 | - return $this->getKey('secret_des_auth', $autoInit); |
|
| 64 | - } |
|
| 65 | - public function save(): bool { |
|
| 66 | - return ecrire_fichier_securise($this->file, $this->cles->toJson()); |
|
| 67 | - } |
|
| 68 | - |
|
| 69 | - /** |
|
| 70 | - * Fournir une sauvegarde chiffree des cles (a l'aide d'une autre clé, comme le pass d'un auteur) |
|
| 71 | - * |
|
| 72 | - * @param string $withKey Clé de chiffrage de la sauvegarde |
|
| 73 | - * @return string Contenu de la sauvegarde chiffrée générée |
|
| 74 | - */ |
|
| 75 | - public function backup( |
|
| 76 | - #[\SensitiveParameter] |
|
| 77 | - string $withKey |
|
| 78 | - ): string { |
|
| 79 | - if (count($this->cles)) { |
|
| 80 | - return Chiffrement::chiffrer($this->cles->toJson(), $withKey); |
|
| 81 | - } |
|
| 82 | - return ''; |
|
| 83 | - } |
|
| 84 | - |
|
| 85 | - /** |
|
| 86 | - * Restaurer les cles manquantes depuis une sauvegarde chiffree des cles |
|
| 87 | - * (si la sauvegarde est bien valide) |
|
| 88 | - * |
|
| 89 | - * @param string $backup Sauvegarde chiffrée (générée par backup()) |
|
| 90 | - * @param int $id_auteur |
|
| 91 | - * @param string $pass |
|
| 92 | - * @return void |
|
| 93 | - */ |
|
| 94 | - public function restore( |
|
| 95 | - string $backup, |
|
| 96 | - #[\SensitiveParameter] |
|
| 97 | - string $password_clair, |
|
| 98 | - #[\SensitiveParameter] |
|
| 99 | - string $password_hash, |
|
| 100 | - int $id_auteur |
|
| 101 | - ): bool { |
|
| 102 | - if (empty($backup)) { |
|
| 103 | - return false; |
|
| 104 | - } |
|
| 105 | - |
|
| 106 | - $sauvegarde = Chiffrement::dechiffrer($backup, $password_clair); |
|
| 107 | - $json = json_decode($sauvegarde, true); |
|
| 108 | - if (!$json) { |
|
| 109 | - return false; |
|
| 110 | - } |
|
| 111 | - |
|
| 112 | - // cela semble une sauvegarde valide |
|
| 113 | - $cles_potentielles = array_map('base64_decode', $json); |
|
| 114 | - |
|
| 115 | - // il faut faire une double verif sur secret_des_auth |
|
| 116 | - // pour s'assurer qu'elle permet bien de decrypter le pass de l'auteur qui fournit la sauvegarde |
|
| 117 | - // et par extension tous les passwords |
|
| 118 | - if (!empty($cles_potentielles['secret_des_auth'])) { |
|
| 119 | - if (!Password::verifier($password_clair, $password_hash, $cles_potentielles['secret_des_auth'])) { |
|
| 120 | - spip_log("Restauration de la cle `secret_des_auth` par id_auteur $id_auteur erronnee, on ignore", 'chiffrer' . _LOG_INFO_IMPORTANTE); |
|
| 121 | - unset($cles_potentielles['secret_des_auth']); |
|
| 122 | - } |
|
| 123 | - } |
|
| 124 | - |
|
| 125 | - // on merge les cles pour recuperer les cles manquantes |
|
| 126 | - $restauration = false; |
|
| 127 | - foreach ($cles_potentielles as $name => $key) { |
|
| 128 | - if (!$this->cles->has($name)) { |
|
| 129 | - $this->cles->set($name, $key); |
|
| 130 | - spip_log("Restauration de la cle $name par id_auteur $id_auteur", 'chiffrer' . _LOG_INFO_IMPORTANTE); |
|
| 131 | - $restauration = true; |
|
| 132 | - } |
|
| 133 | - } |
|
| 134 | - return $restauration; |
|
| 135 | - } |
|
| 136 | - |
|
| 137 | - private function getKey(string $name, bool $autoInit): ?string { |
|
| 138 | - if ($this->cles->has($name)) { |
|
| 139 | - return $this->cles->get($name); |
|
| 140 | - } |
|
| 141 | - if ($autoInit) { |
|
| 142 | - $this->cles->generate($name); |
|
| 143 | - // si l'ecriture de fichier a bien marche on peut utiliser la cle |
|
| 144 | - if ($this->save()) { |
|
| 145 | - return $this->cles->get($name); |
|
| 146 | - } |
|
| 147 | - // sinon loger et annule la cle generee car il ne faut pas l'utiliser |
|
| 148 | - spip_log('Echec ecriture du fichier cle ' . $this->file . " ; impossible de generer une cle $name", 'chiffrer' . _LOG_ERREUR); |
|
| 149 | - $this->cles->delete($name); |
|
| 150 | - } |
|
| 151 | - return null; |
|
| 152 | - } |
|
| 153 | - |
|
| 154 | - private function getMetaKey(string $name, bool $autoInit = true): ?string { |
|
| 155 | - if (!isset($GLOBALS['meta'][$name])) { |
|
| 156 | - include_spip('base/abstract_sql'); |
|
| 157 | - $GLOBALS['meta'][$name] = sql_getfetsel('valeur', 'spip_meta', 'nom = ' . sql_quote($name, '', 'string')); |
|
| 158 | - } |
|
| 159 | - $key = base64_decode($GLOBALS['meta'][$name] ?? ''); |
|
| 160 | - if (strlen($key) === \SODIUM_CRYPTO_SECRETBOX_KEYBYTES) { |
|
| 161 | - return $key; |
|
| 162 | - } |
|
| 163 | - if (!$autoInit) { |
|
| 164 | - return null; |
|
| 165 | - } |
|
| 166 | - $key = Chiffrement::keygen(); |
|
| 167 | - ecrire_meta($name, base64_encode($key), 'non'); |
|
| 168 | - lire_metas(); // au cas ou ecrire_meta() ne fonctionne pas |
|
| 169 | - |
|
| 170 | - return $key; |
|
| 171 | - } |
|
| 172 | - |
|
| 173 | - private function read(): array { |
|
| 174 | - lire_fichier_securise($this->file, $json); |
|
| 175 | - if ( |
|
| 176 | - $json |
|
| 177 | - and $json = \json_decode($json, true) |
|
| 178 | - and is_array($json) |
|
| 179 | - ) { |
|
| 180 | - return array_map('base64_decode', $json); |
|
| 181 | - } |
|
| 182 | - return []; |
|
| 183 | - } |
|
| 17 | + private static array $instances = []; |
|
| 18 | + |
|
| 19 | + private string $file = _DIR_ETC . 'cles.php'; |
|
| 20 | + private Cles $cles; |
|
| 21 | + |
|
| 22 | + public static function instance(string $file = ''): self { |
|
| 23 | + if (empty(self::$instances[$file])) { |
|
| 24 | + self::$instances[$file] = new self($file); |
|
| 25 | + } |
|
| 26 | + return self::$instances[$file]; |
|
| 27 | + } |
|
| 28 | + |
|
| 29 | + /** |
|
| 30 | + * Retourne le secret du site (shorthand) |
|
| 31 | + * @uses self::getSecretSite() |
|
| 32 | + */ |
|
| 33 | + public static function secret_du_site(): ?string { |
|
| 34 | + return (self::instance())->getSecretSite(); |
|
| 35 | + } |
|
| 36 | + |
|
| 37 | + private function __construct(string $file = '') { |
|
| 38 | + if ($file) { |
|
| 39 | + $this->file = $file; |
|
| 40 | + } |
|
| 41 | + $this->cles = new Cles($this->read()); |
|
| 42 | + } |
|
| 43 | + |
|
| 44 | + /** |
|
| 45 | + * Renvoyer le secret du site |
|
| 46 | + * |
|
| 47 | + * Le secret du site doit rester aussi secret que possible, et est eternel |
|
| 48 | + * On ne doit pas l'exporter |
|
| 49 | + * |
|
| 50 | + * Le secret est partagé entre une clé disque et une clé bdd |
|
| 51 | + * |
|
| 52 | + * @return string |
|
| 53 | + */ |
|
| 54 | + public function getSecretSite(bool $autoInit = true): ?string { |
|
| 55 | + $key = $this->getKey('secret_du_site', $autoInit); |
|
| 56 | + $meta = $this->getMetaKey('secret_du_site', $autoInit); |
|
| 57 | + // conserve la même longeur. |
|
| 58 | + return $key ^ $meta; |
|
| 59 | + } |
|
| 60 | + |
|
| 61 | + /** Renvoyer le secret des authentifications */ |
|
| 62 | + public function getSecretAuth(bool $autoInit = false): ?string { |
|
| 63 | + return $this->getKey('secret_des_auth', $autoInit); |
|
| 64 | + } |
|
| 65 | + public function save(): bool { |
|
| 66 | + return ecrire_fichier_securise($this->file, $this->cles->toJson()); |
|
| 67 | + } |
|
| 68 | + |
|
| 69 | + /** |
|
| 70 | + * Fournir une sauvegarde chiffree des cles (a l'aide d'une autre clé, comme le pass d'un auteur) |
|
| 71 | + * |
|
| 72 | + * @param string $withKey Clé de chiffrage de la sauvegarde |
|
| 73 | + * @return string Contenu de la sauvegarde chiffrée générée |
|
| 74 | + */ |
|
| 75 | + public function backup( |
|
| 76 | + #[\SensitiveParameter] |
|
| 77 | + string $withKey |
|
| 78 | + ): string { |
|
| 79 | + if (count($this->cles)) { |
|
| 80 | + return Chiffrement::chiffrer($this->cles->toJson(), $withKey); |
|
| 81 | + } |
|
| 82 | + return ''; |
|
| 83 | + } |
|
| 84 | + |
|
| 85 | + /** |
|
| 86 | + * Restaurer les cles manquantes depuis une sauvegarde chiffree des cles |
|
| 87 | + * (si la sauvegarde est bien valide) |
|
| 88 | + * |
|
| 89 | + * @param string $backup Sauvegarde chiffrée (générée par backup()) |
|
| 90 | + * @param int $id_auteur |
|
| 91 | + * @param string $pass |
|
| 92 | + * @return void |
|
| 93 | + */ |
|
| 94 | + public function restore( |
|
| 95 | + string $backup, |
|
| 96 | + #[\SensitiveParameter] |
|
| 97 | + string $password_clair, |
|
| 98 | + #[\SensitiveParameter] |
|
| 99 | + string $password_hash, |
|
| 100 | + int $id_auteur |
|
| 101 | + ): bool { |
|
| 102 | + if (empty($backup)) { |
|
| 103 | + return false; |
|
| 104 | + } |
|
| 105 | + |
|
| 106 | + $sauvegarde = Chiffrement::dechiffrer($backup, $password_clair); |
|
| 107 | + $json = json_decode($sauvegarde, true); |
|
| 108 | + if (!$json) { |
|
| 109 | + return false; |
|
| 110 | + } |
|
| 111 | + |
|
| 112 | + // cela semble une sauvegarde valide |
|
| 113 | + $cles_potentielles = array_map('base64_decode', $json); |
|
| 114 | + |
|
| 115 | + // il faut faire une double verif sur secret_des_auth |
|
| 116 | + // pour s'assurer qu'elle permet bien de decrypter le pass de l'auteur qui fournit la sauvegarde |
|
| 117 | + // et par extension tous les passwords |
|
| 118 | + if (!empty($cles_potentielles['secret_des_auth'])) { |
|
| 119 | + if (!Password::verifier($password_clair, $password_hash, $cles_potentielles['secret_des_auth'])) { |
|
| 120 | + spip_log("Restauration de la cle `secret_des_auth` par id_auteur $id_auteur erronnee, on ignore", 'chiffrer' . _LOG_INFO_IMPORTANTE); |
|
| 121 | + unset($cles_potentielles['secret_des_auth']); |
|
| 122 | + } |
|
| 123 | + } |
|
| 124 | + |
|
| 125 | + // on merge les cles pour recuperer les cles manquantes |
|
| 126 | + $restauration = false; |
|
| 127 | + foreach ($cles_potentielles as $name => $key) { |
|
| 128 | + if (!$this->cles->has($name)) { |
|
| 129 | + $this->cles->set($name, $key); |
|
| 130 | + spip_log("Restauration de la cle $name par id_auteur $id_auteur", 'chiffrer' . _LOG_INFO_IMPORTANTE); |
|
| 131 | + $restauration = true; |
|
| 132 | + } |
|
| 133 | + } |
|
| 134 | + return $restauration; |
|
| 135 | + } |
|
| 136 | + |
|
| 137 | + private function getKey(string $name, bool $autoInit): ?string { |
|
| 138 | + if ($this->cles->has($name)) { |
|
| 139 | + return $this->cles->get($name); |
|
| 140 | + } |
|
| 141 | + if ($autoInit) { |
|
| 142 | + $this->cles->generate($name); |
|
| 143 | + // si l'ecriture de fichier a bien marche on peut utiliser la cle |
|
| 144 | + if ($this->save()) { |
|
| 145 | + return $this->cles->get($name); |
|
| 146 | + } |
|
| 147 | + // sinon loger et annule la cle generee car il ne faut pas l'utiliser |
|
| 148 | + spip_log('Echec ecriture du fichier cle ' . $this->file . " ; impossible de generer une cle $name", 'chiffrer' . _LOG_ERREUR); |
|
| 149 | + $this->cles->delete($name); |
|
| 150 | + } |
|
| 151 | + return null; |
|
| 152 | + } |
|
| 153 | + |
|
| 154 | + private function getMetaKey(string $name, bool $autoInit = true): ?string { |
|
| 155 | + if (!isset($GLOBALS['meta'][$name])) { |
|
| 156 | + include_spip('base/abstract_sql'); |
|
| 157 | + $GLOBALS['meta'][$name] = sql_getfetsel('valeur', 'spip_meta', 'nom = ' . sql_quote($name, '', 'string')); |
|
| 158 | + } |
|
| 159 | + $key = base64_decode($GLOBALS['meta'][$name] ?? ''); |
|
| 160 | + if (strlen($key) === \SODIUM_CRYPTO_SECRETBOX_KEYBYTES) { |
|
| 161 | + return $key; |
|
| 162 | + } |
|
| 163 | + if (!$autoInit) { |
|
| 164 | + return null; |
|
| 165 | + } |
|
| 166 | + $key = Chiffrement::keygen(); |
|
| 167 | + ecrire_meta($name, base64_encode($key), 'non'); |
|
| 168 | + lire_metas(); // au cas ou ecrire_meta() ne fonctionne pas |
|
| 169 | + |
|
| 170 | + return $key; |
|
| 171 | + } |
|
| 172 | + |
|
| 173 | + private function read(): array { |
|
| 174 | + lire_fichier_securise($this->file, $json); |
|
| 175 | + if ( |
|
| 176 | + $json |
|
| 177 | + and $json = \json_decode($json, true) |
|
| 178 | + and is_array($json) |
|
| 179 | + ) { |
|
| 180 | + return array_map('base64_decode', $json); |
|
| 181 | + } |
|
| 182 | + return []; |
|
| 183 | + } |
|
| 184 | 184 | } |