@@ -4,247 +4,247 @@ 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' => 'Retour à l’interface graphique complète', |
|
| 14 | - 'access_mode_texte' => 'Afficher l’interface textuelle simplifiée', |
|
| 15 | - 'admin_debug' => 'debug', |
|
| 16 | - 'admin_modifier_article' => 'Modifier cet article', |
|
| 17 | - 'admin_modifier_auteur' => 'Modifier cet auteur', |
|
| 18 | - 'admin_modifier_breve' => 'Modifier cette brève', |
|
| 19 | - 'admin_modifier_mot' => 'Modifier ce mot-clé', |
|
| 20 | - 'admin_modifier_rubrique' => 'Modifier cette rubrique', |
|
| 21 | - 'admin_recalculer' => 'Recalculer cette page', |
|
| 22 | - 'afficher_calendrier' => 'Afficher le calendrier', |
|
| 23 | - 'afficher_trad' => 'afficher les traductions', |
|
| 24 | - 'alerte_maj_impossible' => '<b>Alerte !</b> La mise à jour de la base SQL vers la version @version@ est impossible, peut-être à cause d’un problème de droit de modification sur la base de données. Contacte ton hébergeur.', |
|
| 25 | - 'alerte_modif_info_concourante' => 'ATTENTION : Cette information a été modifiée par ailleurs. La valeur actuelle est :', |
|
| 26 | - 'analyse_xml' => 'Analyse XML', |
|
| 27 | - 'annuler' => 'Annuler', |
|
| 28 | - 'antispam_champ_vide' => 'Laisse ce champ vide :', |
|
| 29 | - 'articles_recents' => 'Articles les plus récents', |
|
| 30 | - 'attention_champ_mini_nb_caractères' => 'Attention ! @nb@ caractères au minimum', |
|
| 31 | - 'avis_1_erreur_saisie' => 'Il y a 1 erreur dans dans ta saisie, vérifie les informations.', |
|
| 32 | - 'avis_archive_incorrect' => 'le fichier archive n’est pas un fichier SPIP', |
|
| 33 | - 'avis_archive_invalide' => 'le fichier archive n’est pas valide', |
|
| 34 | - 'avis_attention' => 'ATTENTION !', |
|
| 35 | - 'avis_champ_incorrect_type_objet' => 'Nom de champ incorrect @name@ pour objet de type @type@', |
|
| 36 | - 'avis_colonne_inexistante' => 'La colonne @col@ n’existe pas', |
|
| 37 | - 'avis_erreur' => 'Erreur : voir ci-dessous', |
|
| 38 | - 'avis_erreur_connexion' => 'Erreur de connexion', |
|
| 39 | - 'avis_erreur_cookie' => 'problème de cookie', |
|
| 40 | - 'avis_erreur_fonction_contexte' => 'Erreur de programmation. Cette fonction ne doit pas être appelée dans ce contexte.', |
|
| 41 | - 'avis_erreur_mysql' => 'Erreur SQL', |
|
| 42 | - 'avis_erreur_sauvegarde' => 'Erreur dans la sauvegarde (@type@ @id_objet@) !', |
|
| 43 | - 'avis_erreur_visiteur' => 'Problème d’accès à l’espace privé', |
|
| 44 | - 'avis_nb_erreurs_saisie' => 'Il y a @nb@ erreurs dans ta saisie, vérifie les informations.', |
|
| 12 | + // A |
|
| 13 | + 'access_interface_graphique' => 'Retour à l’interface graphique complète', |
|
| 14 | + 'access_mode_texte' => 'Afficher l’interface textuelle simplifiée', |
|
| 15 | + 'admin_debug' => 'debug', |
|
| 16 | + 'admin_modifier_article' => 'Modifier cet article', |
|
| 17 | + 'admin_modifier_auteur' => 'Modifier cet auteur', |
|
| 18 | + 'admin_modifier_breve' => 'Modifier cette brève', |
|
| 19 | + 'admin_modifier_mot' => 'Modifier ce mot-clé', |
|
| 20 | + 'admin_modifier_rubrique' => 'Modifier cette rubrique', |
|
| 21 | + 'admin_recalculer' => 'Recalculer cette page', |
|
| 22 | + 'afficher_calendrier' => 'Afficher le calendrier', |
|
| 23 | + 'afficher_trad' => 'afficher les traductions', |
|
| 24 | + 'alerte_maj_impossible' => '<b>Alerte !</b> La mise à jour de la base SQL vers la version @version@ est impossible, peut-être à cause d’un problème de droit de modification sur la base de données. Contacte ton hébergeur.', |
|
| 25 | + 'alerte_modif_info_concourante' => 'ATTENTION : Cette information a été modifiée par ailleurs. La valeur actuelle est :', |
|
| 26 | + 'analyse_xml' => 'Analyse XML', |
|
| 27 | + 'annuler' => 'Annuler', |
|
| 28 | + 'antispam_champ_vide' => 'Laisse ce champ vide :', |
|
| 29 | + 'articles_recents' => 'Articles les plus récents', |
|
| 30 | + 'attention_champ_mini_nb_caractères' => 'Attention ! @nb@ caractères au minimum', |
|
| 31 | + 'avis_1_erreur_saisie' => 'Il y a 1 erreur dans dans ta saisie, vérifie les informations.', |
|
| 32 | + 'avis_archive_incorrect' => 'le fichier archive n’est pas un fichier SPIP', |
|
| 33 | + 'avis_archive_invalide' => 'le fichier archive n’est pas valide', |
|
| 34 | + 'avis_attention' => 'ATTENTION !', |
|
| 35 | + 'avis_champ_incorrect_type_objet' => 'Nom de champ incorrect @name@ pour objet de type @type@', |
|
| 36 | + 'avis_colonne_inexistante' => 'La colonne @col@ n’existe pas', |
|
| 37 | + 'avis_erreur' => 'Erreur : voir ci-dessous', |
|
| 38 | + 'avis_erreur_connexion' => 'Erreur de connexion', |
|
| 39 | + 'avis_erreur_cookie' => 'problème de cookie', |
|
| 40 | + 'avis_erreur_fonction_contexte' => 'Erreur de programmation. Cette fonction ne doit pas être appelée dans ce contexte.', |
|
| 41 | + 'avis_erreur_mysql' => 'Erreur SQL', |
|
| 42 | + 'avis_erreur_sauvegarde' => 'Erreur dans la sauvegarde (@type@ @id_objet@) !', |
|
| 43 | + 'avis_erreur_visiteur' => 'Problème d’accès à l’espace privé', |
|
| 44 | + 'avis_nb_erreurs_saisie' => 'Il y a @nb@ erreurs dans ta saisie, vérifie les informations.', |
|
| 45 | 45 | |
| 46 | - // B |
|
| 47 | - 'barre_a_accent_grave' => 'Insérer un A accent grave majuscule', |
|
| 48 | - 'barre_aide' => 'Utilise les raccourcis typographiques pour enrichir ta mise en page', |
|
| 49 | - 'barre_e_accent_aigu' => 'Insérer un E accent aigu majuscule', |
|
| 50 | - 'barre_eo' => 'Insérer un E dans l’O', |
|
| 51 | - 'barre_eo_maj' => 'Insérer un E dans l’O majuscule', |
|
| 52 | - 'barre_euro' => 'Insérer le symbole ?', |
|
| 53 | - 'barre_gras' => 'Mettre en {{gras}}', |
|
| 54 | - 'barre_guillemets' => 'Entourer de « guillemets français »', |
|
| 55 | - 'barre_guillemets_simples' => 'Entourer de ?guillemets de second niveau ?', |
|
| 56 | - 'barre_intertitre' => 'Transformer en {{{intertitre}}}', |
|
| 57 | - 'barre_italic' => 'Mettre en {italique}', |
|
| 58 | - 'barre_lien' => 'Transformer en [lien hypertexte->http://...]', |
|
| 59 | - 'barre_lien_input' => 'Indiquer l’adresse de ton lien (tu peux indiquer une adresse Web sous la forme http://www.monsite/com ou simplement indiquer le numéro d’un article de ce site.', |
|
| 60 | - 'barre_note' => 'Transformer en [[Note de bas de page]]', |
|
| 61 | - 'barre_paragraphe' => 'Crée un paragraphe', |
|
| 62 | - 'barre_quote' => '<quote>Citer un message</quote>', |
|
| 63 | - 'bouton_changer' => 'Changer', |
|
| 64 | - 'bouton_chercher' => 'Chercher', |
|
| 65 | - 'bouton_choisir' => 'Choisir', |
|
| 66 | - 'bouton_deplacer' => 'Déplacer', |
|
| 67 | - 'bouton_download' => 'Télécharger', |
|
| 68 | - 'bouton_enregistrer' => 'Enregistrer', |
|
| 69 | - 'bouton_radio_desactiver_messagerie_interne' => 'Désactiver la messagerie interne', |
|
| 70 | - 'bouton_radio_envoi_annonces' => 'Envoyer les annonces éditoriales', |
|
| 71 | - 'bouton_radio_non_envoi_annonces' => 'Ne pas envoyer d’annonces', |
|
| 72 | - 'bouton_radio_non_envoi_liste_nouveautes' => 'Ne pas envoyer la liste des nouveautés', |
|
| 73 | - 'bouton_recharger_page' => 'recharger cette page', |
|
| 74 | - 'bouton_telecharger' => 'Télécharger', |
|
| 75 | - 'bouton_upload' => 'Téléverser', |
|
| 76 | - 'bouton_valider' => 'Valider', |
|
| 46 | + // B |
|
| 47 | + 'barre_a_accent_grave' => 'Insérer un A accent grave majuscule', |
|
| 48 | + 'barre_aide' => 'Utilise les raccourcis typographiques pour enrichir ta mise en page', |
|
| 49 | + 'barre_e_accent_aigu' => 'Insérer un E accent aigu majuscule', |
|
| 50 | + 'barre_eo' => 'Insérer un E dans l’O', |
|
| 51 | + 'barre_eo_maj' => 'Insérer un E dans l’O majuscule', |
|
| 52 | + 'barre_euro' => 'Insérer le symbole ?', |
|
| 53 | + 'barre_gras' => 'Mettre en {{gras}}', |
|
| 54 | + 'barre_guillemets' => 'Entourer de « guillemets français »', |
|
| 55 | + 'barre_guillemets_simples' => 'Entourer de ?guillemets de second niveau ?', |
|
| 56 | + 'barre_intertitre' => 'Transformer en {{{intertitre}}}', |
|
| 57 | + 'barre_italic' => 'Mettre en {italique}', |
|
| 58 | + 'barre_lien' => 'Transformer en [lien hypertexte->http://...]', |
|
| 59 | + 'barre_lien_input' => 'Indiquer l’adresse de ton lien (tu peux indiquer une adresse Web sous la forme http://www.monsite/com ou simplement indiquer le numéro d’un article de ce site.', |
|
| 60 | + 'barre_note' => 'Transformer en [[Note de bas de page]]', |
|
| 61 | + 'barre_paragraphe' => 'Crée un paragraphe', |
|
| 62 | + 'barre_quote' => '<quote>Citer un message</quote>', |
|
| 63 | + 'bouton_changer' => 'Changer', |
|
| 64 | + 'bouton_chercher' => 'Chercher', |
|
| 65 | + 'bouton_choisir' => 'Choisir', |
|
| 66 | + 'bouton_deplacer' => 'Déplacer', |
|
| 67 | + 'bouton_download' => 'Télécharger', |
|
| 68 | + 'bouton_enregistrer' => 'Enregistrer', |
|
| 69 | + 'bouton_radio_desactiver_messagerie_interne' => 'Désactiver la messagerie interne', |
|
| 70 | + 'bouton_radio_envoi_annonces' => 'Envoyer les annonces éditoriales', |
|
| 71 | + 'bouton_radio_non_envoi_annonces' => 'Ne pas envoyer d’annonces', |
|
| 72 | + 'bouton_radio_non_envoi_liste_nouveautes' => 'Ne pas envoyer la liste des nouveautés', |
|
| 73 | + 'bouton_recharger_page' => 'recharger cette page', |
|
| 74 | + 'bouton_telecharger' => 'Télécharger', |
|
| 75 | + 'bouton_upload' => 'Téléverser', |
|
| 76 | + 'bouton_valider' => 'Valider', |
|
| 77 | 77 | |
| 78 | - // C |
|
| 79 | - 'cal_apresmidi' => 'après-midi', |
|
| 80 | - 'cal_jour_entier' => 'jour entier', |
|
| 81 | - 'cal_matin' => 'matin', |
|
| 82 | - 'cal_par_jour' => 'calendrier par jour', |
|
| 83 | - 'cal_par_mois' => 'calendrier par mois', |
|
| 84 | - 'cal_par_semaine' => 'calendrier par semaine', |
|
| 85 | - 'choix_couleur_interface' => 'couleur ', |
|
| 86 | - 'choix_interface' => 'choix de l’interface', |
|
| 87 | - 'colonne' => 'Colonne', |
|
| 88 | - 'confirm_changer_statut' => 'Attention, tu as demandé à changer le statut de cet élément. Souhaites-tu continuer ?', |
|
| 89 | - 'correcte' => 'correcte', |
|
| 78 | + // C |
|
| 79 | + 'cal_apresmidi' => 'après-midi', |
|
| 80 | + 'cal_jour_entier' => 'jour entier', |
|
| 81 | + 'cal_matin' => 'matin', |
|
| 82 | + 'cal_par_jour' => 'calendrier par jour', |
|
| 83 | + 'cal_par_mois' => 'calendrier par mois', |
|
| 84 | + 'cal_par_semaine' => 'calendrier par semaine', |
|
| 85 | + 'choix_couleur_interface' => 'couleur ', |
|
| 86 | + 'choix_interface' => 'choix de l’interface', |
|
| 87 | + 'colonne' => 'Colonne', |
|
| 88 | + 'confirm_changer_statut' => 'Attention, tu as demandé à changer le statut de cet élément. Souhaites-tu continuer ?', |
|
| 89 | + 'correcte' => 'correcte', |
|
| 90 | 90 | |
| 91 | - // D |
|
| 92 | - 'date_aujourdhui' => 'aujourd’hui', |
|
| 93 | - 'date_avant_jc' => 'av. J.C.', |
|
| 94 | - 'date_dans' => 'dans @delai@', |
|
| 95 | - 'date_de_mois_1' => '@j@ @nommois@', |
|
| 96 | - 'date_de_mois_10' => '@j@ @nommois@', |
|
| 97 | - 'date_de_mois_11' => '@j@ @nommois@', |
|
| 98 | - 'date_de_mois_12' => '@j@ @nommois@', |
|
| 99 | - 'date_de_mois_2' => '@j@ @nommois@', |
|
| 100 | - 'date_de_mois_3' => '@j@ @nommois@', |
|
| 101 | - 'date_de_mois_4' => '@j@ @nommois@', |
|
| 102 | - 'date_de_mois_5' => '@j@ @nommois@', |
|
| 103 | - 'date_de_mois_6' => '@j@ @nommois@', |
|
| 104 | - 'date_de_mois_7' => '@j@ @nommois@', |
|
| 105 | - 'date_de_mois_8' => '@j@ @nommois@', |
|
| 106 | - 'date_de_mois_9' => '@j@ @nommois@', |
|
| 107 | - 'date_demain' => 'demain', |
|
| 108 | - 'date_fmt_heures_minutes' => '@h@h@m@min', |
|
| 109 | - 'date_fmt_heures_minutes_court' => '@h@h@m@', |
|
| 110 | - 'date_fmt_jour' => '@nomjour@ @jour@', |
|
| 111 | - 'date_fmt_jour_heure' => '@jour@ à @heure@', |
|
| 112 | - 'date_fmt_jour_heure_debut_fin' => 'le @jour@ de @heure_debut@ à @heure_fin@', |
|
| 113 | - 'date_fmt_jour_heure_debut_fin_abbr' => 'le @dtstart@@jour@ de @heure_debut@@dtabbr@ à @dtstart@@heure_fin@@dtend@', |
|
| 114 | - 'date_fmt_jour_mois' => '@jour@ @nommois@', |
|
| 115 | - 'date_fmt_jour_mois_annee' => '@jour@ @nommois@ @annee@', |
|
| 116 | - 'date_fmt_mois_annee' => '@nommois@ @annee@', |
|
| 117 | - 'date_fmt_nomjour' => '@nomjour@ @date@', |
|
| 118 | - 'date_fmt_nomjour_date' => 'le @nomjour@ @date@', |
|
| 119 | - 'date_fmt_periode' => 'Du @date_debut@ au @date_fin@', |
|
| 120 | - 'date_fmt_periode_abbr' => 'Du @dtart@@date_debut@@dtabbr@ au @dtend@@date_fin@@dtabbr@', |
|
| 121 | - 'date_fmt_periode_from' => 'Du', |
|
| 122 | - 'date_fmt_periode_to' => 'au', |
|
| 123 | - 'date_fmt_saison_annee' => '@saison@ @annee@', |
|
| 124 | - 'date_heures' => 'heures', |
|
| 125 | - 'date_hier' => 'hier', |
|
| 126 | - 'date_il_y_a' => 'il y a @delai@', |
|
| 127 | - 'date_jnum1' => '1er', |
|
| 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' => 'dimanche', |
|
| 159 | - 'date_jour_1_abbr' => 'dim.', |
|
| 160 | - 'date_jour_1_initiale' => 'd.', |
|
| 161 | - 'date_jour_2' => 'lundi', |
|
| 162 | - 'date_jour_2_abbr' => 'lun.', |
|
| 163 | - 'date_jour_2_initiale' => 'l.', |
|
| 164 | - 'date_jour_3' => 'mardi', |
|
| 165 | - 'date_jour_3_abbr' => 'mar.', |
|
| 166 | - 'date_jour_3_initiale' => 'm.', |
|
| 167 | - 'date_jour_4' => 'mercredi', |
|
| 168 | - 'date_jour_4_abbr' => 'mer.', |
|
| 169 | - 'date_jour_4_initiale' => 'm.', |
|
| 170 | - 'date_jour_5' => 'jeudi', |
|
| 171 | - 'date_jour_5_abbr' => 'jeu.', |
|
| 172 | - 'date_jour_5_initiale' => 'j.', |
|
| 173 | - 'date_jour_6' => 'vendredi', |
|
| 174 | - 'date_jour_6_abbr' => 'ven.', |
|
| 175 | - 'date_jour_6_initiale' => 'v.', |
|
| 176 | - 'date_jour_7' => 'samedi', |
|
| 177 | - 'date_jour_7_abbr' => 'sam.', |
|
| 178 | - 'date_jour_7_initiale' => 's.', |
|
| 179 | - 'date_jours' => 'jours', |
|
| 180 | - 'date_minutes' => 'minutes', |
|
| 181 | - 'date_mois' => 'mois', |
|
| 182 | - 'date_mois_1' => 'janvier', |
|
| 183 | - 'date_mois_10' => 'octobre', |
|
| 184 | - 'date_mois_10_abbr' => 'oct.', |
|
| 185 | - 'date_mois_11' => 'novembre', |
|
| 186 | - 'date_mois_11_abbr' => 'nov.', |
|
| 187 | - 'date_mois_12' => 'décembre', |
|
| 188 | - 'date_mois_12_abbr' => 'déc.', |
|
| 189 | - 'date_mois_1_abbr' => 'janv.', |
|
| 190 | - 'date_mois_2' => 'février', |
|
| 191 | - 'date_mois_2_abbr' => 'févr.', |
|
| 192 | - 'date_mois_3' => 'mars', |
|
| 193 | - 'date_mois_3_abbr' => 'mars', |
|
| 194 | - 'date_mois_4' => 'avril', |
|
| 195 | - 'date_mois_4_abbr' => 'avr.', |
|
| 196 | - 'date_mois_5' => 'mai', |
|
| 197 | - 'date_mois_5_abbr' => 'mai', |
|
| 198 | - 'date_mois_6' => 'juin', |
|
| 199 | - 'date_mois_6_abbr' => 'juin', |
|
| 200 | - 'date_mois_7' => 'juillet', |
|
| 201 | - 'date_mois_7_abbr' => 'juil.', |
|
| 202 | - 'date_mois_8' => 'août', |
|
| 203 | - 'date_mois_8_abbr' => 'août', |
|
| 204 | - 'date_mois_9' => 'septembre', |
|
| 205 | - 'date_mois_9_abbr' => 'sept.', |
|
| 206 | - 'date_saison_1' => 'hiver', |
|
| 207 | - 'date_saison_2' => 'printemps', |
|
| 208 | - 'date_saison_3' => 'été', |
|
| 209 | - 'date_saison_4' => 'automne', |
|
| 210 | - 'date_secondes' => 'secondes', |
|
| 211 | - 'date_semaines' => 'semaines', |
|
| 212 | - 'date_un_mois' => 'mois', |
|
| 213 | - 'date_une_heure' => 'heure', |
|
| 214 | - 'date_une_minute' => 'minute', |
|
| 215 | - 'date_une_seconde' => 'seconde', |
|
| 216 | - 'date_une_semaine' => 'semaine', |
|
| 217 | - 'dirs_commencer' => ' afin de commencer réellement l’installation', |
|
| 218 | - 'dirs_preliminaire' => 'Préliminaire : <b>Régler les droits d’accès</b>', |
|
| 219 | - 'dirs_probleme_droits' => 'Problème de droits d’accès', |
|
| 220 | - 'dirs_repertoires_absents' => '<p><b>Les répertoires suivants n’ont pas été trouvés :</b></p><ul>@bad_dirs@.</ul> |
|
| 91 | + // D |
|
| 92 | + 'date_aujourdhui' => 'aujourd’hui', |
|
| 93 | + 'date_avant_jc' => 'av. J.C.', |
|
| 94 | + 'date_dans' => 'dans @delai@', |
|
| 95 | + 'date_de_mois_1' => '@j@ @nommois@', |
|
| 96 | + 'date_de_mois_10' => '@j@ @nommois@', |
|
| 97 | + 'date_de_mois_11' => '@j@ @nommois@', |
|
| 98 | + 'date_de_mois_12' => '@j@ @nommois@', |
|
| 99 | + 'date_de_mois_2' => '@j@ @nommois@', |
|
| 100 | + 'date_de_mois_3' => '@j@ @nommois@', |
|
| 101 | + 'date_de_mois_4' => '@j@ @nommois@', |
|
| 102 | + 'date_de_mois_5' => '@j@ @nommois@', |
|
| 103 | + 'date_de_mois_6' => '@j@ @nommois@', |
|
| 104 | + 'date_de_mois_7' => '@j@ @nommois@', |
|
| 105 | + 'date_de_mois_8' => '@j@ @nommois@', |
|
| 106 | + 'date_de_mois_9' => '@j@ @nommois@', |
|
| 107 | + 'date_demain' => 'demain', |
|
| 108 | + 'date_fmt_heures_minutes' => '@h@h@m@min', |
|
| 109 | + 'date_fmt_heures_minutes_court' => '@h@h@m@', |
|
| 110 | + 'date_fmt_jour' => '@nomjour@ @jour@', |
|
| 111 | + 'date_fmt_jour_heure' => '@jour@ à @heure@', |
|
| 112 | + 'date_fmt_jour_heure_debut_fin' => 'le @jour@ de @heure_debut@ à @heure_fin@', |
|
| 113 | + 'date_fmt_jour_heure_debut_fin_abbr' => 'le @dtstart@@jour@ de @heure_debut@@dtabbr@ à @dtstart@@heure_fin@@dtend@', |
|
| 114 | + 'date_fmt_jour_mois' => '@jour@ @nommois@', |
|
| 115 | + 'date_fmt_jour_mois_annee' => '@jour@ @nommois@ @annee@', |
|
| 116 | + 'date_fmt_mois_annee' => '@nommois@ @annee@', |
|
| 117 | + 'date_fmt_nomjour' => '@nomjour@ @date@', |
|
| 118 | + 'date_fmt_nomjour_date' => 'le @nomjour@ @date@', |
|
| 119 | + 'date_fmt_periode' => 'Du @date_debut@ au @date_fin@', |
|
| 120 | + 'date_fmt_periode_abbr' => 'Du @dtart@@date_debut@@dtabbr@ au @dtend@@date_fin@@dtabbr@', |
|
| 121 | + 'date_fmt_periode_from' => 'Du', |
|
| 122 | + 'date_fmt_periode_to' => 'au', |
|
| 123 | + 'date_fmt_saison_annee' => '@saison@ @annee@', |
|
| 124 | + 'date_heures' => 'heures', |
|
| 125 | + 'date_hier' => 'hier', |
|
| 126 | + 'date_il_y_a' => 'il y a @delai@', |
|
| 127 | + 'date_jnum1' => '1er', |
|
| 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' => 'dimanche', |
|
| 159 | + 'date_jour_1_abbr' => 'dim.', |
|
| 160 | + 'date_jour_1_initiale' => 'd.', |
|
| 161 | + 'date_jour_2' => 'lundi', |
|
| 162 | + 'date_jour_2_abbr' => 'lun.', |
|
| 163 | + 'date_jour_2_initiale' => 'l.', |
|
| 164 | + 'date_jour_3' => 'mardi', |
|
| 165 | + 'date_jour_3_abbr' => 'mar.', |
|
| 166 | + 'date_jour_3_initiale' => 'm.', |
|
| 167 | + 'date_jour_4' => 'mercredi', |
|
| 168 | + 'date_jour_4_abbr' => 'mer.', |
|
| 169 | + 'date_jour_4_initiale' => 'm.', |
|
| 170 | + 'date_jour_5' => 'jeudi', |
|
| 171 | + 'date_jour_5_abbr' => 'jeu.', |
|
| 172 | + 'date_jour_5_initiale' => 'j.', |
|
| 173 | + 'date_jour_6' => 'vendredi', |
|
| 174 | + 'date_jour_6_abbr' => 'ven.', |
|
| 175 | + 'date_jour_6_initiale' => 'v.', |
|
| 176 | + 'date_jour_7' => 'samedi', |
|
| 177 | + 'date_jour_7_abbr' => 'sam.', |
|
| 178 | + 'date_jour_7_initiale' => 's.', |
|
| 179 | + 'date_jours' => 'jours', |
|
| 180 | + 'date_minutes' => 'minutes', |
|
| 181 | + 'date_mois' => 'mois', |
|
| 182 | + 'date_mois_1' => 'janvier', |
|
| 183 | + 'date_mois_10' => 'octobre', |
|
| 184 | + 'date_mois_10_abbr' => 'oct.', |
|
| 185 | + 'date_mois_11' => 'novembre', |
|
| 186 | + 'date_mois_11_abbr' => 'nov.', |
|
| 187 | + 'date_mois_12' => 'décembre', |
|
| 188 | + 'date_mois_12_abbr' => 'déc.', |
|
| 189 | + 'date_mois_1_abbr' => 'janv.', |
|
| 190 | + 'date_mois_2' => 'février', |
|
| 191 | + 'date_mois_2_abbr' => 'févr.', |
|
| 192 | + 'date_mois_3' => 'mars', |
|
| 193 | + 'date_mois_3_abbr' => 'mars', |
|
| 194 | + 'date_mois_4' => 'avril', |
|
| 195 | + 'date_mois_4_abbr' => 'avr.', |
|
| 196 | + 'date_mois_5' => 'mai', |
|
| 197 | + 'date_mois_5_abbr' => 'mai', |
|
| 198 | + 'date_mois_6' => 'juin', |
|
| 199 | + 'date_mois_6_abbr' => 'juin', |
|
| 200 | + 'date_mois_7' => 'juillet', |
|
| 201 | + 'date_mois_7_abbr' => 'juil.', |
|
| 202 | + 'date_mois_8' => 'août', |
|
| 203 | + 'date_mois_8_abbr' => 'août', |
|
| 204 | + 'date_mois_9' => 'septembre', |
|
| 205 | + 'date_mois_9_abbr' => 'sept.', |
|
| 206 | + 'date_saison_1' => 'hiver', |
|
| 207 | + 'date_saison_2' => 'printemps', |
|
| 208 | + 'date_saison_3' => 'été', |
|
| 209 | + 'date_saison_4' => 'automne', |
|
| 210 | + 'date_secondes' => 'secondes', |
|
| 211 | + 'date_semaines' => 'semaines', |
|
| 212 | + 'date_un_mois' => 'mois', |
|
| 213 | + 'date_une_heure' => 'heure', |
|
| 214 | + 'date_une_minute' => 'minute', |
|
| 215 | + 'date_une_seconde' => 'seconde', |
|
| 216 | + 'date_une_semaine' => 'semaine', |
|
| 217 | + 'dirs_commencer' => ' afin de commencer réellement l’installation', |
|
| 218 | + 'dirs_preliminaire' => 'Préliminaire : <b>Régler les droits d’accès</b>', |
|
| 219 | + 'dirs_probleme_droits' => 'Problème de droits d’accès', |
|
| 220 | + 'dirs_repertoires_absents' => '<p><b>Les répertoires suivants n’ont pas été trouvés :</b></p><ul>@bad_dirs@.</ul> |
|
| 221 | 221 | <p>Il est probable que cela soit dû à un problème de mauvaise mise en majuscules ou minuscules. |
| 222 | 222 | Vérifie que les minuscules et majuscules de ces répertoires concordent bien avec ce qui est affiché |
| 223 | 223 | ci-dessus ; si ce n’est pas le cas, renomme les répertoires avec ton logiciel FTP de façon à corriger l’erreur.</p> |
| 224 | 224 | <p>Une fois cette manipulation effectuée, tu pourras ', |
| 225 | - 'dirs_repertoires_suivants' => '<p><b>Les répertoires suivants ne sont pas accessibles en écriture :</b></p> <ul>@bad_dirs@</ul> |
|
| 225 | + 'dirs_repertoires_suivants' => '<p><b>Les répertoires suivants ne sont pas accessibles en écriture :</b></p> <ul>@bad_dirs@</ul> |
|
| 226 | 226 | <p>Pour y remédier, utilise ton client FTP afin de régler les droits d’accès de chacun |
| 227 | 227 | de ces répertoires. La procédure est expliquée en détail dans le guide d’installation.</p> |
| 228 | 228 | <p>Une fois cette manipulation effectuée, tu pourras ', |
| 229 | - 'double_occurrence' => 'Double occurrence de @balise@', |
|
| 229 | + 'double_occurrence' => 'Double occurrence de @balise@', |
|
| 230 | 230 | |
| 231 | - // E |
|
| 232 | - 'en_cours' => 'en cours', |
|
| 233 | - 'envoi_via_le_site' => 'Envoi via le site', |
|
| 234 | - 'erreur' => 'Erreur', |
|
| 235 | - 'erreur_balise_non_fermee' => 'dernière balise non refermée :', |
|
| 236 | - 'erreur_technique_ajaxform' => 'Ooops. Une erreur innatendue a empêché de soumettre le formulaire. Tu peux essayer à nouveau.', |
|
| 237 | - 'erreur_technique_enregistrement_champs' => 'Une erreur technique a empêché l’enregistrement correct du champ @champs@.', |
|
| 238 | - 'erreur_technique_enregistrement_impossible' => 'Une erreur technique a empêché l’enregistrement.', |
|
| 239 | - 'erreur_texte' => 'erreur(s)', |
|
| 240 | - 'etape' => 'Étape', |
|
| 231 | + // E |
|
| 232 | + 'en_cours' => 'en cours', |
|
| 233 | + 'envoi_via_le_site' => 'Envoi via le site', |
|
| 234 | + 'erreur' => 'Erreur', |
|
| 235 | + 'erreur_balise_non_fermee' => 'dernière balise non refermée :', |
|
| 236 | + 'erreur_technique_ajaxform' => 'Ooops. Une erreur innatendue a empêché de soumettre le formulaire. Tu peux essayer à nouveau.', |
|
| 237 | + 'erreur_technique_enregistrement_champs' => 'Une erreur technique a empêché l’enregistrement correct du champ @champs@.', |
|
| 238 | + 'erreur_technique_enregistrement_impossible' => 'Une erreur technique a empêché l’enregistrement.', |
|
| 239 | + 'erreur_texte' => 'erreur(s)', |
|
| 240 | + 'etape' => 'Étape', |
|
| 241 | 241 | |
| 242 | - // F |
|
| 243 | - 'fichier_introuvable' => 'Fichier @fichier@ introuvable', |
|
| 244 | - 'form_auteur_confirmation' => 'Confirme ton adresse email', |
|
| 245 | - 'form_auteur_email_modifie' => 'Ton adresse email a été modifiée.', |
|
| 246 | - 'form_auteur_envoi_mail_confirmation' => 'Un courrier électronique de confirmation vient d’être envoyé à @email@. Visite l’adresse Web mentionnée dans ce courrier pour valider ton adresse mail.', |
|
| 247 | - 'form_auteur_mail_confirmation' => 'Salut, |
|
| 242 | + // F |
|
| 243 | + 'fichier_introuvable' => 'Fichier @fichier@ introuvable', |
|
| 244 | + 'form_auteur_confirmation' => 'Confirme ton adresse email', |
|
| 245 | + 'form_auteur_email_modifie' => 'Ton adresse email a été modifiée.', |
|
| 246 | + 'form_auteur_envoi_mail_confirmation' => 'Un courrier électronique de confirmation vient d’être envoyé à @email@. Visite l’adresse Web mentionnée dans ce courrier pour valider ton adresse mail.', |
|
| 247 | + 'form_auteur_mail_confirmation' => 'Salut, |
|
| 248 | 248 | |
| 249 | 249 | Tu as demandé à changer ton adresse email. |
| 250 | 250 | Pour confirmer ta nouvelle adresse, il suffit de te connecter à |
@@ -253,346 +253,346 @@ discard block |
||
| 253 | 253 | |
| 254 | 254 | @url@ |
| 255 | 255 | ', |
| 256 | - 'form_deja_inscrit' => 'Tu es déjà inscrit.', |
|
| 257 | - 'form_email_non_valide' => 'Ton adresse email n’est pas valide.', |
|
| 258 | - 'form_forum_access_refuse' => 'Tu n’as plus accès à ce site.', |
|
| 259 | - 'form_forum_bonjour' => 'Salut @nom@,', |
|
| 260 | - 'form_forum_confirmer_email' => 'Pour confirmer ton adresse email, va à cette adresse : @url_confirm@', |
|
| 261 | - 'form_forum_email_deja_enregistre' => 'Cette adresse email est déjà enregistrée, tu peux donc utiliser ton mot de passe habituel.', |
|
| 262 | - 'form_forum_identifiant_mail' => 'Ton nouvel identifiant vient de t’être envoyé par email.', |
|
| 263 | - 'form_forum_identifiants' => 'Identifiants personnels', |
|
| 264 | - 'form_forum_indiquer_nom_email' => 'Indique ici ton nom et ton adresse email. Ton identifiant personnel te parviendra rapidement, par courrier électronique.', |
|
| 265 | - 'form_forum_login' => 'login :', |
|
| 266 | - 'form_forum_message_auto' => '(ceci est un message automatique)', |
|
| 267 | - 'form_forum_pass' => 'mot de passe :', |
|
| 268 | - 'form_forum_probleme_mail' => 'Problème de mail : l’identifiant ne peut pas être envoyé.', |
|
| 269 | - 'form_forum_voici1' => 'Voici tes identifiants pour pouvoir participer à la vie du site "@nom_site_spip@" (@adresse_site@) :', |
|
| 270 | - 'form_forum_voici2' => 'Voici tes identifiants pour proposer des articles sur |
|
| 256 | + 'form_deja_inscrit' => 'Tu es déjà inscrit.', |
|
| 257 | + 'form_email_non_valide' => 'Ton adresse email n’est pas valide.', |
|
| 258 | + 'form_forum_access_refuse' => 'Tu n’as plus accès à ce site.', |
|
| 259 | + 'form_forum_bonjour' => 'Salut @nom@,', |
|
| 260 | + 'form_forum_confirmer_email' => 'Pour confirmer ton adresse email, va à cette adresse : @url_confirm@', |
|
| 261 | + 'form_forum_email_deja_enregistre' => 'Cette adresse email est déjà enregistrée, tu peux donc utiliser ton mot de passe habituel.', |
|
| 262 | + 'form_forum_identifiant_mail' => 'Ton nouvel identifiant vient de t’être envoyé par email.', |
|
| 263 | + 'form_forum_identifiants' => 'Identifiants personnels', |
|
| 264 | + 'form_forum_indiquer_nom_email' => 'Indique ici ton nom et ton adresse email. Ton identifiant personnel te parviendra rapidement, par courrier électronique.', |
|
| 265 | + 'form_forum_login' => 'login :', |
|
| 266 | + 'form_forum_message_auto' => '(ceci est un message automatique)', |
|
| 267 | + 'form_forum_pass' => 'mot de passe :', |
|
| 268 | + 'form_forum_probleme_mail' => 'Problème de mail : l’identifiant ne peut pas être envoyé.', |
|
| 269 | + 'form_forum_voici1' => 'Voici tes identifiants pour pouvoir participer à la vie du site "@nom_site_spip@" (@adresse_site@) :', |
|
| 270 | + 'form_forum_voici2' => 'Voici tes identifiants pour proposer des articles sur |
|
| 271 | 271 | le site "@nom_site_spip@" (@adresse_login@) :', |
| 272 | - 'form_indiquer_email' => 'Indique ton adresse email.', |
|
| 273 | - 'form_indiquer_nom' => 'Indique ton nom.', |
|
| 274 | - 'form_indiquer_nom_site' => 'Indique le nom de ton site.', |
|
| 275 | - 'form_pet_deja_enregistre' => 'Ce site est déjà enregistré', |
|
| 276 | - 'form_pet_signature_pasprise' => 'Ta signature n’est pas prise en compte.', |
|
| 277 | - 'form_prop_confirmer_envoi' => 'Confirmer l’envoi', |
|
| 278 | - 'form_prop_description' => 'Description/commentaire', |
|
| 279 | - 'form_prop_enregistre' => 'Ta proposition est enregistrée, elle apparaîtra en ligne après validation par les responsables de ce site.', |
|
| 280 | - 'form_prop_envoyer' => 'Envoyer un message', |
|
| 281 | - 'form_prop_indiquer_email' => 'Indiquer une adresse email valide', |
|
| 282 | - 'form_prop_indiquer_nom_site' => 'Indiquer le nom du site.', |
|
| 283 | - 'form_prop_indiquer_sujet' => 'Indiquer un sujet', |
|
| 284 | - 'form_prop_message_envoye' => 'Message envoyé', |
|
| 285 | - 'form_prop_non_enregistre' => 'Ta proposition n’a pas été enregistrée.', |
|
| 286 | - 'form_prop_sujet' => 'Sujet', |
|
| 287 | - 'form_prop_url_site' => 'Adresse URL du site', |
|
| 288 | - 'format_date_attendu' => 'Saisir une date au format jj/mm/aaaa.', |
|
| 289 | - 'format_date_incorrecte' => 'La date ou son format est incorrect', |
|
| 290 | - 'format_heure_attendu' => 'Saisir une heure au format hh:mm.', |
|
| 291 | - 'format_heure_incorrecte' => 'L’heure ou son format est incorrect', |
|
| 292 | - 'forum_non_inscrit' => 'Tu n’es pas inscrit, ou l’adresse ou le mot de passe sont erronés.', |
|
| 293 | - 'forum_par_auteur' => 'par @auteur@', |
|
| 294 | - 'forum_titre_erreur' => 'Erreur...', |
|
| 272 | + 'form_indiquer_email' => 'Indique ton adresse email.', |
|
| 273 | + 'form_indiquer_nom' => 'Indique ton nom.', |
|
| 274 | + 'form_indiquer_nom_site' => 'Indique le nom de ton site.', |
|
| 275 | + 'form_pet_deja_enregistre' => 'Ce site est déjà enregistré', |
|
| 276 | + 'form_pet_signature_pasprise' => 'Ta signature n’est pas prise en compte.', |
|
| 277 | + 'form_prop_confirmer_envoi' => 'Confirmer l’envoi', |
|
| 278 | + 'form_prop_description' => 'Description/commentaire', |
|
| 279 | + 'form_prop_enregistre' => 'Ta proposition est enregistrée, elle apparaîtra en ligne après validation par les responsables de ce site.', |
|
| 280 | + 'form_prop_envoyer' => 'Envoyer un message', |
|
| 281 | + 'form_prop_indiquer_email' => 'Indiquer une adresse email valide', |
|
| 282 | + 'form_prop_indiquer_nom_site' => 'Indiquer le nom du site.', |
|
| 283 | + 'form_prop_indiquer_sujet' => 'Indiquer un sujet', |
|
| 284 | + 'form_prop_message_envoye' => 'Message envoyé', |
|
| 285 | + 'form_prop_non_enregistre' => 'Ta proposition n’a pas été enregistrée.', |
|
| 286 | + 'form_prop_sujet' => 'Sujet', |
|
| 287 | + 'form_prop_url_site' => 'Adresse URL du site', |
|
| 288 | + 'format_date_attendu' => 'Saisir une date au format jj/mm/aaaa.', |
|
| 289 | + 'format_date_incorrecte' => 'La date ou son format est incorrect', |
|
| 290 | + 'format_heure_attendu' => 'Saisir une heure au format hh:mm.', |
|
| 291 | + 'format_heure_incorrecte' => 'L’heure ou son format est incorrect', |
|
| 292 | + 'forum_non_inscrit' => 'Tu n’es pas inscrit, ou l’adresse ou le mot de passe sont erronés.', |
|
| 293 | + 'forum_par_auteur' => 'par @auteur@', |
|
| 294 | + 'forum_titre_erreur' => 'Erreur...', |
|
| 295 | 295 | |
| 296 | - // I |
|
| 297 | - 'ical_texte_rss_articles' => 'Le fichier « backend » des articles de ce site se trouve à l’adresse :', |
|
| 298 | - 'ical_texte_rss_articles2' => 'Tu peux également obtenir des fichiers « backend » pour les articles de chaque rubrique du site :', |
|
| 299 | - 'ical_texte_rss_breves' => 'Il existe de plus un fichier contenant les brèves du site. En précisant un numéro de rubrique, tu obtiendras uniquement les brèves de cette rubrique.', |
|
| 300 | - 'icone_a_suivre' => 'À suivre', |
|
| 301 | - 'icone_admin_site' => 'Administration du site', |
|
| 302 | - 'icone_agenda' => 'Agenda', |
|
| 303 | - 'icone_aide_ligne' => 'Aide', |
|
| 304 | - 'icone_articles' => 'Articles', |
|
| 305 | - 'icone_auteurs' => 'Auteurs', |
|
| 306 | - 'icone_brouteur' => 'Navigation rapide', |
|
| 307 | - 'icone_configuration_site' => 'Configuration', |
|
| 308 | - 'icone_configurer_site' => 'Configurer ton site', |
|
| 309 | - 'icone_creer_nouvel_auteur' => 'Créer un nouvel auteur', |
|
| 310 | - 'icone_creer_rubrique' => 'Créer une rubrique', |
|
| 311 | - 'icone_creer_sous_rubrique' => 'Créer une sous-rubrique', |
|
| 312 | - 'icone_deconnecter' => 'Se déconnecter', |
|
| 313 | - 'icone_discussions' => 'Discussions', |
|
| 314 | - 'icone_doc_rubrique' => 'Documents des rubriques', |
|
| 315 | - 'icone_ecrire_article' => 'Écrire un nouvel article', |
|
| 316 | - 'icone_edition_site' => 'Édition', |
|
| 317 | - 'icone_gestion_langues' => 'Gestion des langues', |
|
| 318 | - 'icone_informations_personnelles' => 'Informations personnelles', |
|
| 319 | - 'icone_interface_complet' => 'interface complète', |
|
| 320 | - 'icone_interface_simple' => 'Interface simplifiée', |
|
| 321 | - 'icone_maintenance_site' => 'Maintenance du site', |
|
| 322 | - 'icone_messagerie_personnelle' => 'Messagerie personnelle', |
|
| 323 | - 'icone_repartition_debut' => 'Afficher la répartition depuis le début', |
|
| 324 | - 'icone_rubriques' => 'Rubriques', |
|
| 325 | - 'icone_sauver_site' => 'Sauvegarde du site', |
|
| 326 | - 'icone_site_entier' => 'Tout le site', |
|
| 327 | - 'icone_sites_references' => 'Sites référencés', |
|
| 328 | - 'icone_statistiques' => 'Statistiques du site', |
|
| 329 | - 'icone_suivi_activite' => 'Suivre la vie du site', |
|
| 330 | - 'icone_suivi_actualite' => 'Évolution du site', |
|
| 331 | - 'icone_suivi_pettions' => 'Suivre/gérer les pétitions', |
|
| 332 | - 'icone_suivi_revisions' => 'Modifications des articles', |
|
| 333 | - 'icone_supprimer_document' => 'Supprimer ce document', |
|
| 334 | - 'icone_supprimer_image' => 'Supprimer cette image', |
|
| 335 | - 'icone_tous_articles' => 'Tous tes articles', |
|
| 336 | - 'icone_tous_auteur' => 'Tous les auteurs', |
|
| 337 | - 'icone_tous_visiteur' => 'Tous les visiteurs', |
|
| 338 | - 'icone_visiter_site' => 'Voir le site public', |
|
| 339 | - 'icone_voir_en_ligne' => 'Voir en ligne', |
|
| 340 | - 'img_indisponible' => 'image indisponible', |
|
| 341 | - 'impossible' => 'impossible', |
|
| 342 | - 'info_a_suivre' => 'À SUIVRE »', |
|
| 343 | - 'info_acces_interdit' => 'Accès interdit', |
|
| 344 | - 'info_acces_refuse' => 'Accès refusé', |
|
| 345 | - 'info_action' => 'Action : @action@', |
|
| 346 | - 'info_administrer_rubriques' => 'Tu peux administrer cette rubrique et ses sous-rubriques', |
|
| 347 | - 'info_adresse_non_indiquee' => 'Tu n’as pas indiqué d’adresse à tester !', |
|
| 348 | - 'info_aide' => 'AIDE :', |
|
| 349 | - 'info_ajouter_mot' => 'Ajouter ce mot', |
|
| 350 | - 'info_annonce' => 'ANNONCE', |
|
| 351 | - 'info_annonces_generales' => 'Annonces générales :', |
|
| 352 | - 'info_article_propose' => 'Article proposé', |
|
| 353 | - 'info_article_publie' => 'Article publié', |
|
| 354 | - 'info_article_redaction' => 'Article en cours de rédaction', |
|
| 355 | - 'info_article_refuse' => 'Article refusé', |
|
| 356 | - 'info_article_supprime' => 'Article supprimé', |
|
| 357 | - 'info_articles' => 'Articles', |
|
| 358 | - 'info_articles_a_valider' => 'Les articles à valider', |
|
| 359 | - 'info_articles_nb' => '@nb@ articles', |
|
| 360 | - 'info_articles_proposes' => 'Articles proposés', |
|
| 361 | - 'info_articles_un' => '1 article', |
|
| 362 | - 'info_auteurs_nombre' => 'auteur(s) :', |
|
| 363 | - 'info_authentification_ftp' => 'Authentification (par FTP).', |
|
| 364 | - 'info_breves_2' => 'brèves', |
|
| 365 | - 'info_breves_nb' => '@nb@ brèves', |
|
| 366 | - 'info_breves_un' => '1 brève', |
|
| 367 | - 'info_connexion_refusee' => 'Connexion refusée', |
|
| 368 | - 'info_contact_developpeur' => 'Contacte un développeur.', |
|
| 369 | - 'info_contenance' => 'Ce site contient :', |
|
| 370 | - 'info_contribution' => 'contributions', |
|
| 371 | - 'info_copyright' => '@spip@ est un logiciel libre distribué @lien_gpl@.', |
|
| 372 | - 'info_copyright_doc' => 'Pour plus d’informations, voir le site <a href="@spipnet@">@spipnet_affiche@</a>.', |
|
| 373 | - 'info_copyright_gpl' => 'sous licence GPL', |
|
| 374 | - 'info_cours_edition' => 'En cours de modification', |
|
| 375 | - 'info_creer_repertoire' => 'Crée un fichier ou un répertoire nommé :', |
|
| 376 | - 'info_creer_repertoire_2' => 'à l’intérieur du sous-répertoire <b>@repertoire@</b>, puis :', |
|
| 377 | - 'info_creer_vignette' => 'création automatique de la vignette', |
|
| 378 | - 'info_creerdansrubrique_non_autorise' => 'Tu n’as pas de droits suffisants pour créer un contenu dans cette rubrique', |
|
| 379 | - 'info_deplier' => 'Déplier', |
|
| 380 | - 'info_descriptif_nombre' => 'descriptif(s) :', |
|
| 381 | - 'info_description' => 'Description :', |
|
| 382 | - 'info_description_2' => 'Description :', |
|
| 383 | - 'info_dimension' => 'Dimensions :', |
|
| 384 | - 'info_documents_nb' => '@nb@ documents', |
|
| 385 | - 'info_documents_un' => '1 document', |
|
| 386 | - 'info_ecire_message_prive' => 'Écrire un message privé', |
|
| 387 | - 'info_email_invalide' => 'Adresse email invalide.', |
|
| 388 | - 'info_en_cours_validation' => 'Tes articles en cours de rédaction', |
|
| 389 | - 'info_en_ligne' => 'Actuellement en ligne :', |
|
| 390 | - 'info_envoyer_message_prive' => 'Envoyer un message privé à cet auteur', |
|
| 391 | - 'info_erreur_requete' => 'Erreur dans la requête :', |
|
| 392 | - 'info_erreur_squelette2' => 'Aucun squelette <b>@fichier@</b> n’est disponible...', |
|
| 393 | - 'info_erreur_systeme' => 'Erreur système (errno @errsys@)', |
|
| 394 | - 'info_erreur_systeme2' => 'Le disque dur est peut-être plein, ou la base de données endommagée.<br /> |
|
| 296 | + // I |
|
| 297 | + 'ical_texte_rss_articles' => 'Le fichier « backend » des articles de ce site se trouve à l’adresse :', |
|
| 298 | + 'ical_texte_rss_articles2' => 'Tu peux également obtenir des fichiers « backend » pour les articles de chaque rubrique du site :', |
|
| 299 | + 'ical_texte_rss_breves' => 'Il existe de plus un fichier contenant les brèves du site. En précisant un numéro de rubrique, tu obtiendras uniquement les brèves de cette rubrique.', |
|
| 300 | + 'icone_a_suivre' => 'À suivre', |
|
| 301 | + 'icone_admin_site' => 'Administration du site', |
|
| 302 | + 'icone_agenda' => 'Agenda', |
|
| 303 | + 'icone_aide_ligne' => 'Aide', |
|
| 304 | + 'icone_articles' => 'Articles', |
|
| 305 | + 'icone_auteurs' => 'Auteurs', |
|
| 306 | + 'icone_brouteur' => 'Navigation rapide', |
|
| 307 | + 'icone_configuration_site' => 'Configuration', |
|
| 308 | + 'icone_configurer_site' => 'Configurer ton site', |
|
| 309 | + 'icone_creer_nouvel_auteur' => 'Créer un nouvel auteur', |
|
| 310 | + 'icone_creer_rubrique' => 'Créer une rubrique', |
|
| 311 | + 'icone_creer_sous_rubrique' => 'Créer une sous-rubrique', |
|
| 312 | + 'icone_deconnecter' => 'Se déconnecter', |
|
| 313 | + 'icone_discussions' => 'Discussions', |
|
| 314 | + 'icone_doc_rubrique' => 'Documents des rubriques', |
|
| 315 | + 'icone_ecrire_article' => 'Écrire un nouvel article', |
|
| 316 | + 'icone_edition_site' => 'Édition', |
|
| 317 | + 'icone_gestion_langues' => 'Gestion des langues', |
|
| 318 | + 'icone_informations_personnelles' => 'Informations personnelles', |
|
| 319 | + 'icone_interface_complet' => 'interface complète', |
|
| 320 | + 'icone_interface_simple' => 'Interface simplifiée', |
|
| 321 | + 'icone_maintenance_site' => 'Maintenance du site', |
|
| 322 | + 'icone_messagerie_personnelle' => 'Messagerie personnelle', |
|
| 323 | + 'icone_repartition_debut' => 'Afficher la répartition depuis le début', |
|
| 324 | + 'icone_rubriques' => 'Rubriques', |
|
| 325 | + 'icone_sauver_site' => 'Sauvegarde du site', |
|
| 326 | + 'icone_site_entier' => 'Tout le site', |
|
| 327 | + 'icone_sites_references' => 'Sites référencés', |
|
| 328 | + 'icone_statistiques' => 'Statistiques du site', |
|
| 329 | + 'icone_suivi_activite' => 'Suivre la vie du site', |
|
| 330 | + 'icone_suivi_actualite' => 'Évolution du site', |
|
| 331 | + 'icone_suivi_pettions' => 'Suivre/gérer les pétitions', |
|
| 332 | + 'icone_suivi_revisions' => 'Modifications des articles', |
|
| 333 | + 'icone_supprimer_document' => 'Supprimer ce document', |
|
| 334 | + 'icone_supprimer_image' => 'Supprimer cette image', |
|
| 335 | + 'icone_tous_articles' => 'Tous tes articles', |
|
| 336 | + 'icone_tous_auteur' => 'Tous les auteurs', |
|
| 337 | + 'icone_tous_visiteur' => 'Tous les visiteurs', |
|
| 338 | + 'icone_visiter_site' => 'Voir le site public', |
|
| 339 | + 'icone_voir_en_ligne' => 'Voir en ligne', |
|
| 340 | + 'img_indisponible' => 'image indisponible', |
|
| 341 | + 'impossible' => 'impossible', |
|
| 342 | + 'info_a_suivre' => 'À SUIVRE »', |
|
| 343 | + 'info_acces_interdit' => 'Accès interdit', |
|
| 344 | + 'info_acces_refuse' => 'Accès refusé', |
|
| 345 | + 'info_action' => 'Action : @action@', |
|
| 346 | + 'info_administrer_rubriques' => 'Tu peux administrer cette rubrique et ses sous-rubriques', |
|
| 347 | + 'info_adresse_non_indiquee' => 'Tu n’as pas indiqué d’adresse à tester !', |
|
| 348 | + 'info_aide' => 'AIDE :', |
|
| 349 | + 'info_ajouter_mot' => 'Ajouter ce mot', |
|
| 350 | + 'info_annonce' => 'ANNONCE', |
|
| 351 | + 'info_annonces_generales' => 'Annonces générales :', |
|
| 352 | + 'info_article_propose' => 'Article proposé', |
|
| 353 | + 'info_article_publie' => 'Article publié', |
|
| 354 | + 'info_article_redaction' => 'Article en cours de rédaction', |
|
| 355 | + 'info_article_refuse' => 'Article refusé', |
|
| 356 | + 'info_article_supprime' => 'Article supprimé', |
|
| 357 | + 'info_articles' => 'Articles', |
|
| 358 | + 'info_articles_a_valider' => 'Les articles à valider', |
|
| 359 | + 'info_articles_nb' => '@nb@ articles', |
|
| 360 | + 'info_articles_proposes' => 'Articles proposés', |
|
| 361 | + 'info_articles_un' => '1 article', |
|
| 362 | + 'info_auteurs_nombre' => 'auteur(s) :', |
|
| 363 | + 'info_authentification_ftp' => 'Authentification (par FTP).', |
|
| 364 | + 'info_breves_2' => 'brèves', |
|
| 365 | + 'info_breves_nb' => '@nb@ brèves', |
|
| 366 | + 'info_breves_un' => '1 brève', |
|
| 367 | + 'info_connexion_refusee' => 'Connexion refusée', |
|
| 368 | + 'info_contact_developpeur' => 'Contacte un développeur.', |
|
| 369 | + 'info_contenance' => 'Ce site contient :', |
|
| 370 | + 'info_contribution' => 'contributions', |
|
| 371 | + 'info_copyright' => '@spip@ est un logiciel libre distribué @lien_gpl@.', |
|
| 372 | + 'info_copyright_doc' => 'Pour plus d’informations, voir le site <a href="@spipnet@">@spipnet_affiche@</a>.', |
|
| 373 | + 'info_copyright_gpl' => 'sous licence GPL', |
|
| 374 | + 'info_cours_edition' => 'En cours de modification', |
|
| 375 | + 'info_creer_repertoire' => 'Crée un fichier ou un répertoire nommé :', |
|
| 376 | + 'info_creer_repertoire_2' => 'à l’intérieur du sous-répertoire <b>@repertoire@</b>, puis :', |
|
| 377 | + 'info_creer_vignette' => 'création automatique de la vignette', |
|
| 378 | + 'info_creerdansrubrique_non_autorise' => 'Tu n’as pas de droits suffisants pour créer un contenu dans cette rubrique', |
|
| 379 | + 'info_deplier' => 'Déplier', |
|
| 380 | + 'info_descriptif_nombre' => 'descriptif(s) :', |
|
| 381 | + 'info_description' => 'Description :', |
|
| 382 | + 'info_description_2' => 'Description :', |
|
| 383 | + 'info_dimension' => 'Dimensions :', |
|
| 384 | + 'info_documents_nb' => '@nb@ documents', |
|
| 385 | + 'info_documents_un' => '1 document', |
|
| 386 | + 'info_ecire_message_prive' => 'Écrire un message privé', |
|
| 387 | + 'info_email_invalide' => 'Adresse email invalide.', |
|
| 388 | + 'info_en_cours_validation' => 'Tes articles en cours de rédaction', |
|
| 389 | + 'info_en_ligne' => 'Actuellement en ligne :', |
|
| 390 | + 'info_envoyer_message_prive' => 'Envoyer un message privé à cet auteur', |
|
| 391 | + 'info_erreur_requete' => 'Erreur dans la requête :', |
|
| 392 | + 'info_erreur_squelette2' => 'Aucun squelette <b>@fichier@</b> n’est disponible...', |
|
| 393 | + 'info_erreur_systeme' => 'Erreur système (errno @errsys@)', |
|
| 394 | + 'info_erreur_systeme2' => 'Le disque dur est peut-être plein, ou la base de données endommagée.<br /> |
|
| 395 | 395 | <span style="color:red;">Essaie de <a href=\'@script@\'>réparer la base</a>, ou contacte ton hébergeur.</span>', |
| 396 | - 'info_fini' => 'C’est fini !', |
|
| 397 | - 'info_format_image' => 'Formats d’images pouvant être utilisées pour créer des vignettes : @gd_formats@.', |
|
| 398 | - 'info_format_non_defini' => 'format non défini', |
|
| 399 | - 'info_grand_ecran' => 'Grand écran', |
|
| 400 | - 'info_image_aide' => 'AIDE', |
|
| 401 | - 'info_image_process_titre' => 'Comment faire de nouveaux signets', |
|
| 402 | - 'info_impossible_lire_page' => '<b>Erreur !</b> Impossible de lire la page <tt><html>@test_proxy@</html></tt> à travers le proxy ', |
|
| 403 | - 'info_installation_systeme_publication' => 'Installation du système de publication...', |
|
| 404 | - 'info_installer_documents' => 'Tu peux installer automatiquement tous les documents contenus dans le dossier @upload@.', |
|
| 405 | - 'info_installer_ftp' => 'En tant qu’administrateur, tu peux installer (par FTP) des fichiers dans le dossier @upload@ pour ensuite les sélectionner directement ici.', |
|
| 406 | - 'info_installer_images' => 'Tu peux installer des images aux formats JPEG, GIF et PNG.', |
|
| 407 | - 'info_installer_images_dossier' => 'Installer des images dans le dossier @upload@ pour pouvoir les sélectionner ici.', |
|
| 408 | - 'info_interface_complete' => 'interface complète', |
|
| 409 | - 'info_interface_simple' => 'Interface simplifiée', |
|
| 410 | - 'info_joindre_document_article' => 'Tu peux joindre à cet article des documents de type', |
|
| 411 | - 'info_joindre_document_rubrique' => 'Tu peux ajouter dans cette rubrique des documents de type', |
|
| 412 | - 'info_joindre_documents_article' => 'Tu peux joindre à ton article des documents de type :', |
|
| 413 | - 'info_l_article' => 'l’article', |
|
| 414 | - 'info_la_breve' => 'la brève', |
|
| 415 | - 'info_la_rubrique' => 'la rubrique', |
|
| 416 | - 'info_langue_principale' => 'Langue principale du site', |
|
| 417 | - 'info_largeur_vignette' => '@largeur_vignette@ × @hauteur_vignette@ pixels', |
|
| 418 | - 'info_les_auteurs_1' => 'par @les_auteurs@', |
|
| 419 | - 'info_logo_format_interdit' => 'Seuls les logos aux formats @formats@ sont autorisés.', |
|
| 420 | - 'info_logo_max_poids' => 'Les logos doivent obligatoirement faire moins de @maxi@ (ce fichier fait @actuel@).', |
|
| 421 | - 'info_mail_fournisseur' => '[email protected]', |
|
| 422 | - 'info_message_2' => 'MESSAGE', |
|
| 423 | - 'info_message_supprime' => 'MESSAGE SUPPRIMÉ', |
|
| 424 | - 'info_messages_nb' => '@nb@ messages', |
|
| 425 | - 'info_messages_un' => '1 message', |
|
| 426 | - 'info_mise_en_ligne' => 'Date de mise en ligne :', |
|
| 427 | - 'info_modification_parametres_securite' => 'modifications des paramètres de sécurité', |
|
| 428 | - 'info_mois_courant' => 'Dans le courant du mois :', |
|
| 429 | - 'info_mot_cle_ajoute' => 'Le mot-clé suivant a été ajouté à', |
|
| 430 | - 'info_multi_herit' => 'Langue par défaut', |
|
| 431 | - 'info_multi_langues_soulignees' => 'Les <u>langues soulignées</u> bénéficient d’une traduction totale ou partielle des textes de l’interface. Si tu sélectionnes ces langues, de nombreux éléments du site public (dates, formulaires) seront automatiquement traduits. Pour les langues non soulignées, ces éléments apparaîtront dans la langue principale du site.', |
|
| 432 | - 'info_multilinguisme' => 'Multilinguisme', |
|
| 433 | - 'info_nom_non_utilisateurs_connectes' => 'Ton nom n’apparaît pas dans la liste des utilisateurs connectés.', |
|
| 434 | - 'info_nom_utilisateurs_connectes' => 'Ton nom apparaît dans la liste des utilisateurs connectés.', |
|
| 435 | - 'info_nombre_en_ligne' => 'Actuellement en ligne :', |
|
| 436 | - 'info_non_resultat' => 'Aucun résultat pour "@cherche_mot@"', |
|
| 437 | - 'info_non_utilisation_messagerie' => 'Tu n’utilise pas la messagerie interne de ce site.', |
|
| 438 | - 'info_nouveau_message' => 'TU AS UN NOUVEAU MESSAGE', |
|
| 439 | - 'info_nouveaux_messages' => 'TU AS @total_messages@ NOUVEAUX MESSAGES', |
|
| 440 | - 'info_numero_abbreviation' => 'N° ', |
|
| 441 | - 'info_obligatoire' => 'Cette information est obligatoire', |
|
| 442 | - 'info_page_actuelle' => 'Page actuelle', |
|
| 443 | - 'info_pense_bete' => 'PENSE-BÊTE', |
|
| 444 | - 'info_petit_ecran' => 'Petit écran', |
|
| 445 | - 'info_petition_close' => 'Pétition close', |
|
| 446 | - 'info_pixels' => 'pixels', |
|
| 447 | - 'info_plusieurs_mots_trouves' => 'Plusieurs mots-clés trouvés pour "@cherche_mot@" :', |
|
| 448 | - 'info_portfolio_automatique' => 'Portfolio automatique :', |
|
| 449 | - 'info_premier_resultat' => '[@debut_limit@ premiers résultats sur @total@]', |
|
| 450 | - 'info_premier_resultat_sur' => '[@debut_limit@ premiers résultats sur @total@]', |
|
| 451 | - 'info_propose_1' => '[@nom_site_spip@] Propose : @titre@', |
|
| 452 | - 'info_propose_2' => 'Article proposé |
|
| 396 | + 'info_fini' => 'C’est fini !', |
|
| 397 | + 'info_format_image' => 'Formats d’images pouvant être utilisées pour créer des vignettes : @gd_formats@.', |
|
| 398 | + 'info_format_non_defini' => 'format non défini', |
|
| 399 | + 'info_grand_ecran' => 'Grand écran', |
|
| 400 | + 'info_image_aide' => 'AIDE', |
|
| 401 | + 'info_image_process_titre' => 'Comment faire de nouveaux signets', |
|
| 402 | + 'info_impossible_lire_page' => '<b>Erreur !</b> Impossible de lire la page <tt><html>@test_proxy@</html></tt> à travers le proxy ', |
|
| 403 | + 'info_installation_systeme_publication' => 'Installation du système de publication...', |
|
| 404 | + 'info_installer_documents' => 'Tu peux installer automatiquement tous les documents contenus dans le dossier @upload@.', |
|
| 405 | + 'info_installer_ftp' => 'En tant qu’administrateur, tu peux installer (par FTP) des fichiers dans le dossier @upload@ pour ensuite les sélectionner directement ici.', |
|
| 406 | + 'info_installer_images' => 'Tu peux installer des images aux formats JPEG, GIF et PNG.', |
|
| 407 | + 'info_installer_images_dossier' => 'Installer des images dans le dossier @upload@ pour pouvoir les sélectionner ici.', |
|
| 408 | + 'info_interface_complete' => 'interface complète', |
|
| 409 | + 'info_interface_simple' => 'Interface simplifiée', |
|
| 410 | + 'info_joindre_document_article' => 'Tu peux joindre à cet article des documents de type', |
|
| 411 | + 'info_joindre_document_rubrique' => 'Tu peux ajouter dans cette rubrique des documents de type', |
|
| 412 | + 'info_joindre_documents_article' => 'Tu peux joindre à ton article des documents de type :', |
|
| 413 | + 'info_l_article' => 'l’article', |
|
| 414 | + 'info_la_breve' => 'la brève', |
|
| 415 | + 'info_la_rubrique' => 'la rubrique', |
|
| 416 | + 'info_langue_principale' => 'Langue principale du site', |
|
| 417 | + 'info_largeur_vignette' => '@largeur_vignette@ × @hauteur_vignette@ pixels', |
|
| 418 | + 'info_les_auteurs_1' => 'par @les_auteurs@', |
|
| 419 | + 'info_logo_format_interdit' => 'Seuls les logos aux formats @formats@ sont autorisés.', |
|
| 420 | + 'info_logo_max_poids' => 'Les logos doivent obligatoirement faire moins de @maxi@ (ce fichier fait @actuel@).', |
|
| 421 | + 'info_mail_fournisseur' => '[email protected]', |
|
| 422 | + 'info_message_2' => 'MESSAGE', |
|
| 423 | + 'info_message_supprime' => 'MESSAGE SUPPRIMÉ', |
|
| 424 | + 'info_messages_nb' => '@nb@ messages', |
|
| 425 | + 'info_messages_un' => '1 message', |
|
| 426 | + 'info_mise_en_ligne' => 'Date de mise en ligne :', |
|
| 427 | + 'info_modification_parametres_securite' => 'modifications des paramètres de sécurité', |
|
| 428 | + 'info_mois_courant' => 'Dans le courant du mois :', |
|
| 429 | + 'info_mot_cle_ajoute' => 'Le mot-clé suivant a été ajouté à', |
|
| 430 | + 'info_multi_herit' => 'Langue par défaut', |
|
| 431 | + 'info_multi_langues_soulignees' => 'Les <u>langues soulignées</u> bénéficient d’une traduction totale ou partielle des textes de l’interface. Si tu sélectionnes ces langues, de nombreux éléments du site public (dates, formulaires) seront automatiquement traduits. Pour les langues non soulignées, ces éléments apparaîtront dans la langue principale du site.', |
|
| 432 | + 'info_multilinguisme' => 'Multilinguisme', |
|
| 433 | + 'info_nom_non_utilisateurs_connectes' => 'Ton nom n’apparaît pas dans la liste des utilisateurs connectés.', |
|
| 434 | + 'info_nom_utilisateurs_connectes' => 'Ton nom apparaît dans la liste des utilisateurs connectés.', |
|
| 435 | + 'info_nombre_en_ligne' => 'Actuellement en ligne :', |
|
| 436 | + 'info_non_resultat' => 'Aucun résultat pour "@cherche_mot@"', |
|
| 437 | + 'info_non_utilisation_messagerie' => 'Tu n’utilise pas la messagerie interne de ce site.', |
|
| 438 | + 'info_nouveau_message' => 'TU AS UN NOUVEAU MESSAGE', |
|
| 439 | + 'info_nouveaux_messages' => 'TU AS @total_messages@ NOUVEAUX MESSAGES', |
|
| 440 | + 'info_numero_abbreviation' => 'N° ', |
|
| 441 | + 'info_obligatoire' => 'Cette information est obligatoire', |
|
| 442 | + 'info_page_actuelle' => 'Page actuelle', |
|
| 443 | + 'info_pense_bete' => 'PENSE-BÊTE', |
|
| 444 | + 'info_petit_ecran' => 'Petit écran', |
|
| 445 | + 'info_petition_close' => 'Pétition close', |
|
| 446 | + 'info_pixels' => 'pixels', |
|
| 447 | + 'info_plusieurs_mots_trouves' => 'Plusieurs mots-clés trouvés pour "@cherche_mot@" :', |
|
| 448 | + 'info_portfolio_automatique' => 'Portfolio automatique :', |
|
| 449 | + 'info_premier_resultat' => '[@debut_limit@ premiers résultats sur @total@]', |
|
| 450 | + 'info_premier_resultat_sur' => '[@debut_limit@ premiers résultats sur @total@]', |
|
| 451 | + 'info_propose_1' => '[@nom_site_spip@] Propose : @titre@', |
|
| 452 | + 'info_propose_2' => 'Article proposé |
|
| 453 | 453 | ---------------', |
| 454 | - 'info_propose_3' => 'L’article "@titre@" est proposé à la publication.', |
|
| 455 | - 'info_propose_4' => 'Tu es invité à venir le consulter et à donner ton opinion', |
|
| 456 | - 'info_propose_5' => 'dans le forum qui lui est attaché. Il est disponible à l’adresse :', |
|
| 457 | - 'info_publie_01' => 'L’article "@titre@" a été validé par @connect_nom@.', |
|
| 458 | - 'info_publie_1' => '[@nom_site_spip@] PUBLIE : @titre@', |
|
| 459 | - 'info_publie_2' => 'Article publié |
|
| 454 | + 'info_propose_3' => 'L’article "@titre@" est proposé à la publication.', |
|
| 455 | + 'info_propose_4' => 'Tu es invité à venir le consulter et à donner ton opinion', |
|
| 456 | + 'info_propose_5' => 'dans le forum qui lui est attaché. Il est disponible à l’adresse :', |
|
| 457 | + 'info_publie_01' => 'L’article "@titre@" a été validé par @connect_nom@.', |
|
| 458 | + 'info_publie_1' => '[@nom_site_spip@] PUBLIE : @titre@', |
|
| 459 | + 'info_publie_2' => 'Article publié |
|
| 460 | 460 | --------------', |
| 461 | - 'info_rechercher' => 'Rechercher', |
|
| 462 | - 'info_rechercher_02' => 'Rechercher :', |
|
| 463 | - 'info_remplacer_vignette' => 'Remplacer la vignette par défaut par un logo personnalisé :', |
|
| 464 | - 'info_rubriques_nb' => '@nb@ rubriques', |
|
| 465 | - 'info_rubriques_un' => '1 rubrique', |
|
| 466 | - 'info_sans_titre_2' => 'sans titre', |
|
| 467 | - 'info_selectionner_fichier' => 'Tu peux sélectionner un fichier du dossier @upload@', |
|
| 468 | - 'info_selectionner_fichier_2' => 'Sélectionner un fichier :', |
|
| 469 | - 'info_sites_nb' => '@nb@ sites', |
|
| 470 | - 'info_sites_un' => '1 site', |
|
| 471 | - 'info_supprimer_vignette' => 'supprimer la vignette', |
|
| 472 | - 'info_symbole_bleu' => 'Le symbole <b>bleu</b> indique un <b>pense-bête</b> : c’est-à-dire un message à ton usage personnel.', |
|
| 473 | - 'info_symbole_jaune' => 'Le symbole <b>jaune</b> indique une <b>annonce à tous les rédacteurs</b> : modifiable par tous les administrateurs, et visible par tous les rédacteurs.', |
|
| 474 | - 'info_symbole_vert' => 'Le symbole <b>vert</b> indique les <b>messages échangés avec d’autres utilisateurs</b> du site.', |
|
| 475 | - 'info_telecharger_nouveau_logo' => 'Télécharger un nouveau logo :', |
|
| 476 | - 'info_telecharger_ordinateur' => 'Télécharger depuis ton ordinateur :', |
|
| 477 | - 'info_tous_resultats_enregistres' => '[tous les résultats sont enregistrés]', |
|
| 478 | - 'info_tout_afficher' => 'Tout afficher', |
|
| 479 | - 'info_travaux_texte' => 'Ce site n’est pas encore configuré. Reviens plus tard...', |
|
| 480 | - 'info_travaux_titre' => 'Site en travaux', |
|
| 481 | - 'info_trop_resultat' => 'Trop de résultats pour "@cherche_mot@" ; affine la recherche.', |
|
| 482 | - 'info_utilisation_messagerie_interne' => 'Tu utilises la messagerie interne de ce site.', |
|
| 483 | - 'info_valider_lien' => 'valider ce lien', |
|
| 484 | - 'info_verifier_image' => ', vérifie que tes images ont été transférées correctement.', |
|
| 485 | - 'info_vignette_defaut' => 'Vignette par défaut', |
|
| 486 | - 'info_vignette_personnalisee' => 'Vignette personnalisée', |
|
| 487 | - 'info_visite' => 'visite :', |
|
| 488 | - 'info_vos_rendez_vous' => 'Tes rendez-vous à venir', |
|
| 489 | - 'infos_vos_pense_bete' => 'Tes pense-bêtes', |
|
| 461 | + 'info_rechercher' => 'Rechercher', |
|
| 462 | + 'info_rechercher_02' => 'Rechercher :', |
|
| 463 | + 'info_remplacer_vignette' => 'Remplacer la vignette par défaut par un logo personnalisé :', |
|
| 464 | + 'info_rubriques_nb' => '@nb@ rubriques', |
|
| 465 | + 'info_rubriques_un' => '1 rubrique', |
|
| 466 | + 'info_sans_titre_2' => 'sans titre', |
|
| 467 | + 'info_selectionner_fichier' => 'Tu peux sélectionner un fichier du dossier @upload@', |
|
| 468 | + 'info_selectionner_fichier_2' => 'Sélectionner un fichier :', |
|
| 469 | + 'info_sites_nb' => '@nb@ sites', |
|
| 470 | + 'info_sites_un' => '1 site', |
|
| 471 | + 'info_supprimer_vignette' => 'supprimer la vignette', |
|
| 472 | + 'info_symbole_bleu' => 'Le symbole <b>bleu</b> indique un <b>pense-bête</b> : c’est-à-dire un message à ton usage personnel.', |
|
| 473 | + 'info_symbole_jaune' => 'Le symbole <b>jaune</b> indique une <b>annonce à tous les rédacteurs</b> : modifiable par tous les administrateurs, et visible par tous les rédacteurs.', |
|
| 474 | + 'info_symbole_vert' => 'Le symbole <b>vert</b> indique les <b>messages échangés avec d’autres utilisateurs</b> du site.', |
|
| 475 | + 'info_telecharger_nouveau_logo' => 'Télécharger un nouveau logo :', |
|
| 476 | + 'info_telecharger_ordinateur' => 'Télécharger depuis ton ordinateur :', |
|
| 477 | + 'info_tous_resultats_enregistres' => '[tous les résultats sont enregistrés]', |
|
| 478 | + 'info_tout_afficher' => 'Tout afficher', |
|
| 479 | + 'info_travaux_texte' => 'Ce site n’est pas encore configuré. Reviens plus tard...', |
|
| 480 | + 'info_travaux_titre' => 'Site en travaux', |
|
| 481 | + 'info_trop_resultat' => 'Trop de résultats pour "@cherche_mot@" ; affine la recherche.', |
|
| 482 | + 'info_utilisation_messagerie_interne' => 'Tu utilises la messagerie interne de ce site.', |
|
| 483 | + 'info_valider_lien' => 'valider ce lien', |
|
| 484 | + 'info_verifier_image' => ', vérifie que tes images ont été transférées correctement.', |
|
| 485 | + 'info_vignette_defaut' => 'Vignette par défaut', |
|
| 486 | + 'info_vignette_personnalisee' => 'Vignette personnalisée', |
|
| 487 | + 'info_visite' => 'visite :', |
|
| 488 | + 'info_vos_rendez_vous' => 'Tes rendez-vous à venir', |
|
| 489 | + 'infos_vos_pense_bete' => 'Tes pense-bêtes', |
|
| 490 | 490 | |
| 491 | - // L |
|
| 492 | - 'label_ajout_id_rapide' => 'Ajout rapide', |
|
| 493 | - 'label_poids_fichier' => 'Taille', |
|
| 494 | - 'label_ponctuer' => '@label@ :', |
|
| 495 | - 'lien_afficher_icones_seuls' => 'Afficher uniquement les icones', |
|
| 496 | - 'lien_afficher_texte_icones' => 'Afficher les icones et le texte', |
|
| 497 | - 'lien_afficher_texte_seul' => 'Afficher uniquement le texte', |
|
| 498 | - 'lien_aller_a_la_derniere_page' => 'Aller à la dernière page', |
|
| 499 | - 'lien_aller_a_la_page_nb' => 'Aller à la page @nb@', |
|
| 500 | - 'lien_aller_a_la_page_precedente' => 'Aller à la page précédente', |
|
| 501 | - 'lien_aller_a_la_page_suivante' => 'Aller à la page suivante', |
|
| 502 | - 'lien_aller_a_la_premiere_page' => 'Aller à la première page', |
|
| 503 | - 'lien_liberer' => 'libérer', |
|
| 504 | - 'lien_liberer_tous' => 'Tout libérer', |
|
| 505 | - 'lien_nouvea_pense_bete' => 'NOUVEAU PENSE-BÊTE', |
|
| 506 | - 'lien_nouveau_message' => 'NOUVEAU MESSAGE', |
|
| 507 | - 'lien_nouvelle_annonce' => 'NOUVELLE ANNONCE', |
|
| 508 | - 'lien_petitions' => 'PÉTITION', |
|
| 509 | - 'lien_popularite' => 'popularité : @popularite@%', |
|
| 510 | - 'lien_racine_site' => 'RACINE DU SITE', |
|
| 511 | - 'lien_reessayer' => 'réessayer', |
|
| 512 | - 'lien_repondre_message' => 'Répondre à ce message', |
|
| 513 | - 'lien_supprimer' => 'supprimer', |
|
| 514 | - 'lien_tout_afficher' => 'Tout afficher', |
|
| 515 | - 'lien_visite_site' => 'visiter ce site', |
|
| 516 | - 'lien_visites' => '@visites@ visites', |
|
| 517 | - 'lien_voir_auteur' => 'Voir cet auteur', |
|
| 518 | - 'ligne' => 'Ligne', |
|
| 519 | - 'login' => 'Connexion', |
|
| 520 | - 'login_acces_prive' => 'accès à l’espace privé', |
|
| 521 | - 'login_autre_identifiant' => 'se connecter sous un autre identifiant', |
|
| 522 | - 'login_cookie_accepte' => 'Régle ton navigateur pour qu’il les accepte (au moins pour ce site).', |
|
| 523 | - 'login_cookie_oblige' => 'Pour t’identifier de façon sûre sur ce site, tu dois accepter les cookies.', |
|
| 524 | - 'login_deconnexion_ok' => 'Déconnexion effectuée.', |
|
| 525 | - 'login_erreur_pass' => 'Erreur de mot de passe.', |
|
| 526 | - 'login_espace_prive' => 'espace privé', |
|
| 527 | - 'login_identifiant_inconnu' => 'L’identifiant « @login@ » est inconnu.', |
|
| 528 | - 'login_login' => 'Login :', |
|
| 529 | - 'login_login2' => 'Login ou adresse email@circ@ :', |
|
| 530 | - 'login_login_pass_incorrect' => '(Login ou mot de passe incorrect.)', |
|
| 531 | - 'login_motpasseoublie' => 'mot de passe oublié ?', |
|
| 532 | - 'login_non_securise' => 'Attention, ce formulaire n’est pas sécurisé. |
|
| 491 | + // L |
|
| 492 | + 'label_ajout_id_rapide' => 'Ajout rapide', |
|
| 493 | + 'label_poids_fichier' => 'Taille', |
|
| 494 | + 'label_ponctuer' => '@label@ :', |
|
| 495 | + 'lien_afficher_icones_seuls' => 'Afficher uniquement les icones', |
|
| 496 | + 'lien_afficher_texte_icones' => 'Afficher les icones et le texte', |
|
| 497 | + 'lien_afficher_texte_seul' => 'Afficher uniquement le texte', |
|
| 498 | + 'lien_aller_a_la_derniere_page' => 'Aller à la dernière page', |
|
| 499 | + 'lien_aller_a_la_page_nb' => 'Aller à la page @nb@', |
|
| 500 | + 'lien_aller_a_la_page_precedente' => 'Aller à la page précédente', |
|
| 501 | + 'lien_aller_a_la_page_suivante' => 'Aller à la page suivante', |
|
| 502 | + 'lien_aller_a_la_premiere_page' => 'Aller à la première page', |
|
| 503 | + 'lien_liberer' => 'libérer', |
|
| 504 | + 'lien_liberer_tous' => 'Tout libérer', |
|
| 505 | + 'lien_nouvea_pense_bete' => 'NOUVEAU PENSE-BÊTE', |
|
| 506 | + 'lien_nouveau_message' => 'NOUVEAU MESSAGE', |
|
| 507 | + 'lien_nouvelle_annonce' => 'NOUVELLE ANNONCE', |
|
| 508 | + 'lien_petitions' => 'PÉTITION', |
|
| 509 | + 'lien_popularite' => 'popularité : @popularite@%', |
|
| 510 | + 'lien_racine_site' => 'RACINE DU SITE', |
|
| 511 | + 'lien_reessayer' => 'réessayer', |
|
| 512 | + 'lien_repondre_message' => 'Répondre à ce message', |
|
| 513 | + 'lien_supprimer' => 'supprimer', |
|
| 514 | + 'lien_tout_afficher' => 'Tout afficher', |
|
| 515 | + 'lien_visite_site' => 'visiter ce site', |
|
| 516 | + 'lien_visites' => '@visites@ visites', |
|
| 517 | + 'lien_voir_auteur' => 'Voir cet auteur', |
|
| 518 | + 'ligne' => 'Ligne', |
|
| 519 | + 'login' => 'Connexion', |
|
| 520 | + 'login_acces_prive' => 'accès à l’espace privé', |
|
| 521 | + 'login_autre_identifiant' => 'se connecter sous un autre identifiant', |
|
| 522 | + 'login_cookie_accepte' => 'Régle ton navigateur pour qu’il les accepte (au moins pour ce site).', |
|
| 523 | + 'login_cookie_oblige' => 'Pour t’identifier de façon sûre sur ce site, tu dois accepter les cookies.', |
|
| 524 | + 'login_deconnexion_ok' => 'Déconnexion effectuée.', |
|
| 525 | + 'login_erreur_pass' => 'Erreur de mot de passe.', |
|
| 526 | + 'login_espace_prive' => 'espace privé', |
|
| 527 | + 'login_identifiant_inconnu' => 'L’identifiant « @login@ » est inconnu.', |
|
| 528 | + 'login_login' => 'Login :', |
|
| 529 | + 'login_login2' => 'Login ou adresse email@circ@ :', |
|
| 530 | + 'login_login_pass_incorrect' => '(Login ou mot de passe incorrect.)', |
|
| 531 | + 'login_motpasseoublie' => 'mot de passe oublié ?', |
|
| 532 | + 'login_non_securise' => 'Attention, ce formulaire n’est pas sécurisé. |
|
| 533 | 533 | Si tu ne veux pas que ton mot de passe puisse être |
| 534 | 534 | intercepté sur le réseau, active Javascript |
| 535 | 535 | dans ton navigateur et', |
| 536 | - 'login_nouvelle_tentative' => 'Nouvelle tentative', |
|
| 537 | - 'login_par_ici' => 'Tu es enregistré... par ici...', |
|
| 538 | - 'login_pass2' => 'Mot de passe :', |
|
| 539 | - 'login_preferez_refuser' => '<b>Si tu préfére refuser les cookies</b>, une autre méthode de connexion (moins sécurisée) est à ta disposition :', |
|
| 540 | - 'login_recharger' => 'recharger cette page', |
|
| 541 | - 'login_rester_identifie' => 'Se souvenir de moi', |
|
| 542 | - 'login_retour_public' => 'Retour au site public', |
|
| 543 | - 'login_retour_site' => 'Retour au site public', |
|
| 544 | - 'login_retoursitepublic' => 'retour au site public', |
|
| 545 | - 'login_sans_cookie' => 'Identification sans cookie', |
|
| 546 | - 'login_securise' => 'Login sécurisé', |
|
| 547 | - 'login_sinscrire' => 's’inscrire', |
|
| 548 | - 'login_test_navigateur' => 'test navigateur/reconnexion', |
|
| 549 | - 'login_verifiez_navigateur' => '(Vérifie toutefois que ton navigateur n’a pas mémorisé ton mot de passe...)', |
|
| 536 | + 'login_nouvelle_tentative' => 'Nouvelle tentative', |
|
| 537 | + 'login_par_ici' => 'Tu es enregistré... par ici...', |
|
| 538 | + 'login_pass2' => 'Mot de passe :', |
|
| 539 | + 'login_preferez_refuser' => '<b>Si tu préfére refuser les cookies</b>, une autre méthode de connexion (moins sécurisée) est à ta disposition :', |
|
| 540 | + 'login_recharger' => 'recharger cette page', |
|
| 541 | + 'login_rester_identifie' => 'Se souvenir de moi', |
|
| 542 | + 'login_retour_public' => 'Retour au site public', |
|
| 543 | + 'login_retour_site' => 'Retour au site public', |
|
| 544 | + 'login_retoursitepublic' => 'retour au site public', |
|
| 545 | + 'login_sans_cookie' => 'Identification sans cookie', |
|
| 546 | + 'login_securise' => 'Login sécurisé', |
|
| 547 | + 'login_sinscrire' => 's’inscrire', |
|
| 548 | + 'login_test_navigateur' => 'test navigateur/reconnexion', |
|
| 549 | + 'login_verifiez_navigateur' => '(Vérifie toutefois que ton navigateur n’a pas mémorisé ton mot de passe...)', |
|
| 550 | 550 | |
| 551 | - // M |
|
| 552 | - 'masquer_colonne' => 'Masquer cette colonne', |
|
| 553 | - 'masquer_trad' => 'masquer les traductions', |
|
| 554 | - 'message_nouveaux_identifiants_echec' => 'Impossible de générer de nouveaux identifiants.', |
|
| 555 | - 'message_nouveaux_identifiants_echec_envoi' => 'Les nouveaux identifiants de connexion n’ont pas pu être envoyés.', |
|
| 556 | - 'message_nouveaux_identifiants_ok' => 'Les nouveaux identifiants de connexion ont été envoyés à @email@.', |
|
| 557 | - 'module_fichiers_langues' => 'Fichiers de langue', |
|
| 551 | + // M |
|
| 552 | + 'masquer_colonne' => 'Masquer cette colonne', |
|
| 553 | + 'masquer_trad' => 'masquer les traductions', |
|
| 554 | + 'message_nouveaux_identifiants_echec' => 'Impossible de générer de nouveaux identifiants.', |
|
| 555 | + 'message_nouveaux_identifiants_echec_envoi' => 'Les nouveaux identifiants de connexion n’ont pas pu être envoyés.', |
|
| 556 | + 'message_nouveaux_identifiants_ok' => 'Les nouveaux identifiants de connexion ont été envoyés à @email@.', |
|
| 557 | + 'module_fichiers_langues' => 'Fichiers de langue', |
|
| 558 | 558 | |
| 559 | - // N |
|
| 560 | - 'navigateur_pas_redirige' => 'Si votre navigateur n’est pas redirigé, cliquez ici pour continuer.', |
|
| 561 | - 'numero' => 'Numéro', |
|
| 559 | + // N |
|
| 560 | + 'navigateur_pas_redirige' => 'Si votre navigateur n’est pas redirigé, cliquez ici pour continuer.', |
|
| 561 | + 'numero' => 'Numéro', |
|
| 562 | 562 | |
| 563 | - // O |
|
| 564 | - 'occurence' => 'Occurence', |
|
| 565 | - 'onglet_affacer_base' => 'Effacer la base', |
|
| 566 | - 'onglet_auteur' => 'L’auteur', |
|
| 567 | - 'onglet_contenu_site' => 'Contenu du site', |
|
| 568 | - 'onglet_evolution_visite_mod' => 'Évolution', |
|
| 569 | - 'onglet_fonctions_avances' => 'Fonctions avancées', |
|
| 570 | - 'onglet_informations_personnelles' => 'Informations personnelles', |
|
| 571 | - 'onglet_interactivite' => 'Interactivité', |
|
| 572 | - 'onglet_messagerie' => 'Messagerie', |
|
| 573 | - 'onglet_repartition_rubrique' => 'Répartition par rubriques', |
|
| 574 | - 'onglet_save_restaur_base' => 'Sauvegarder/restaurer la base', |
|
| 575 | - 'onglet_vider_cache' => 'Vider le cache', |
|
| 563 | + // O |
|
| 564 | + 'occurence' => 'Occurence', |
|
| 565 | + 'onglet_affacer_base' => 'Effacer la base', |
|
| 566 | + 'onglet_auteur' => 'L’auteur', |
|
| 567 | + 'onglet_contenu_site' => 'Contenu du site', |
|
| 568 | + 'onglet_evolution_visite_mod' => 'Évolution', |
|
| 569 | + 'onglet_fonctions_avances' => 'Fonctions avancées', |
|
| 570 | + 'onglet_informations_personnelles' => 'Informations personnelles', |
|
| 571 | + 'onglet_interactivite' => 'Interactivité', |
|
| 572 | + 'onglet_messagerie' => 'Messagerie', |
|
| 573 | + 'onglet_repartition_rubrique' => 'Répartition par rubriques', |
|
| 574 | + 'onglet_save_restaur_base' => 'Sauvegarder/restaurer la base', |
|
| 575 | + 'onglet_vider_cache' => 'Vider le cache', |
|
| 576 | 576 | |
| 577 | - // P |
|
| 578 | - 'pass_choix_pass' => 'Choisis ton nouveau mot de passe :', |
|
| 579 | - 'pass_erreur' => 'Erreur', |
|
| 580 | - 'pass_erreur_acces_refuse' => '<b>Erreur :</b> tu n’as plus accès à ce site.', |
|
| 581 | - 'pass_erreur_code_inconnu' => '<b>Erreur :</b> ce code ne correspond à aucun des visiteurs ayant accès à ce site.', |
|
| 582 | - 'pass_erreur_non_enregistre' => '<b>Erreur :</b> l’adresse <tt>@email_oubli@</tt> n’est pas enregistrée sur ce site.', |
|
| 583 | - 'pass_erreur_non_valide' => '<b>Erreur :</b> cet email <tt>@email_oubli@</tt> n’est pas valide !', |
|
| 584 | - 'pass_erreur_probleme_technique' => '<b>Erreur :</b> à cause d’un problème technique, l’email ne peut pas être envoyé.', |
|
| 585 | - 'pass_espace_prive_bla' => 'L’espace privé de ce site est ouvert aux |
|
| 577 | + // P |
|
| 578 | + 'pass_choix_pass' => 'Choisis ton nouveau mot de passe :', |
|
| 579 | + 'pass_erreur' => 'Erreur', |
|
| 580 | + 'pass_erreur_acces_refuse' => '<b>Erreur :</b> tu n’as plus accès à ce site.', |
|
| 581 | + 'pass_erreur_code_inconnu' => '<b>Erreur :</b> ce code ne correspond à aucun des visiteurs ayant accès à ce site.', |
|
| 582 | + 'pass_erreur_non_enregistre' => '<b>Erreur :</b> l’adresse <tt>@email_oubli@</tt> n’est pas enregistrée sur ce site.', |
|
| 583 | + 'pass_erreur_non_valide' => '<b>Erreur :</b> cet email <tt>@email_oubli@</tt> n’est pas valide !', |
|
| 584 | + 'pass_erreur_probleme_technique' => '<b>Erreur :</b> à cause d’un problème technique, l’email ne peut pas être envoyé.', |
|
| 585 | + 'pass_espace_prive_bla' => 'L’espace privé de ce site est ouvert aux |
|
| 586 | 586 | visiteurs, après inscription. Une fois enregistré, |
| 587 | 587 | tu pourras consulter les articles en cours de rédaction, |
| 588 | 588 | proposer des articles et participer à tous les forums.', |
| 589 | - 'pass_forum_bla' => 'Tu as demandé à intervenir sur un forum |
|
| 589 | + 'pass_forum_bla' => 'Tu as demandé à intervenir sur un forum |
|
| 590 | 590 | réservé aux visiteurs enregistrés.', |
| 591 | - 'pass_indiquez_cidessous' => 'Indique ci-dessous l’adresse email sous laquelle tu |
|
| 591 | + 'pass_indiquez_cidessous' => 'Indique ci-dessous l’adresse email sous laquelle tu |
|
| 592 | 592 | t’es précédemment enregistré. Tu |
| 593 | 593 | recevras un email t’indiquant la marche à suivre pour |
| 594 | 594 | récupérer ton accès.', |
| 595 | - 'pass_mail_passcookie' => '(ceci est un message automatique) |
|
| 595 | + 'pass_mail_passcookie' => '(ceci est un message automatique) |
|
| 596 | 596 | Pour retrouver ton accès au site |
| 597 | 597 | @nom_site_spip@ (@adresse_site@) |
| 598 | 598 | Rends toi à l’adresse suivante : |
@@ -603,146 +603,146 @@ discard block |
||
| 603 | 603 | et te reconnecter au site. |
| 604 | 604 | |
| 605 | 605 | ', |
| 606 | - 'pass_mot_oublie' => 'Mot de passe oublié', |
|
| 607 | - 'pass_nouveau_enregistre' => 'Ton nouveau mot de passe a été enregistré.', |
|
| 608 | - 'pass_nouveau_pass' => 'Nouveau mot de passe', |
|
| 609 | - 'pass_ok' => 'OK', |
|
| 610 | - 'pass_oubli_mot' => 'Oubli du mot de passe', |
|
| 611 | - 'pass_procedure_changer' => 'Pour changer ton mot de passe, merci d’indiquer l’adresse email associée à ton compte.', |
|
| 612 | - 'pass_quitter_fenetre' => 'Quitter cette fenêtre', |
|
| 613 | - 'pass_rappel_login' => 'Rappel : ton identifiant (login) est « @login@ ».', |
|
| 614 | - 'pass_recevoir_mail' => 'Un lien de réinitialisation de ton mot de passe t’a été envoyé sur ton adresse email (si celle-ci est valide).', |
|
| 615 | - 'pass_retour_public' => 'Retour sur le site public', |
|
| 616 | - 'pass_rien_a_faire_ici' => 'Rien à faire ici.', |
|
| 617 | - 'pass_vousinscrire' => 'T’inscrire sur ce site', |
|
| 618 | - 'precedent' => 'précédent', |
|
| 619 | - 'previsualisation' => 'Prévisualisation', |
|
| 620 | - 'previsualiser' => 'Prévisualiser', |
|
| 606 | + 'pass_mot_oublie' => 'Mot de passe oublié', |
|
| 607 | + 'pass_nouveau_enregistre' => 'Ton nouveau mot de passe a été enregistré.', |
|
| 608 | + 'pass_nouveau_pass' => 'Nouveau mot de passe', |
|
| 609 | + 'pass_ok' => 'OK', |
|
| 610 | + 'pass_oubli_mot' => 'Oubli du mot de passe', |
|
| 611 | + 'pass_procedure_changer' => 'Pour changer ton mot de passe, merci d’indiquer l’adresse email associée à ton compte.', |
|
| 612 | + 'pass_quitter_fenetre' => 'Quitter cette fenêtre', |
|
| 613 | + 'pass_rappel_login' => 'Rappel : ton identifiant (login) est « @login@ ».', |
|
| 614 | + 'pass_recevoir_mail' => 'Un lien de réinitialisation de ton mot de passe t’a été envoyé sur ton adresse email (si celle-ci est valide).', |
|
| 615 | + 'pass_retour_public' => 'Retour sur le site public', |
|
| 616 | + 'pass_rien_a_faire_ici' => 'Rien à faire ici.', |
|
| 617 | + 'pass_vousinscrire' => 'T’inscrire sur ce site', |
|
| 618 | + 'precedent' => 'précédent', |
|
| 619 | + 'previsualisation' => 'Prévisualisation', |
|
| 620 | + 'previsualiser' => 'Prévisualiser', |
|
| 621 | 621 | |
| 622 | - // R |
|
| 623 | - 'retour' => 'Retour', |
|
| 622 | + // R |
|
| 623 | + 'retour' => 'Retour', |
|
| 624 | 624 | |
| 625 | - // S |
|
| 626 | - 'spip_conforme_dtd' => 'SPIP considère ce document comme conforme à son DOCTYPE :', |
|
| 627 | - 'squelette' => 'squelette', |
|
| 628 | - 'squelette_inclus_ligne' => 'squelette inclus, ligne', |
|
| 629 | - 'squelette_ligne' => 'squelette, ligne', |
|
| 630 | - 'stats_visites_et_popularite' => '@visites@ visites ; popularité : @popularite@', |
|
| 631 | - 'suivant' => 'suivant', |
|
| 625 | + // S |
|
| 626 | + 'spip_conforme_dtd' => 'SPIP considère ce document comme conforme à son DOCTYPE :', |
|
| 627 | + 'squelette' => 'squelette', |
|
| 628 | + 'squelette_inclus_ligne' => 'squelette inclus, ligne', |
|
| 629 | + 'squelette_ligne' => 'squelette, ligne', |
|
| 630 | + 'stats_visites_et_popularite' => '@visites@ visites ; popularité : @popularite@', |
|
| 631 | + 'suivant' => 'suivant', |
|
| 632 | 632 | |
| 633 | - // T |
|
| 634 | - 'taille_go' => '@taille@ Go', |
|
| 635 | - 'taille_ko' => '@taille@ ko', |
|
| 636 | - 'taille_mo' => '@taille@ Mo', |
|
| 637 | - 'taille_octets' => '@taille@ octets', |
|
| 638 | - 'texte_actualite_site_1' => 'Quand tu seras familiarisé(e) avec l’interface, tu pourras cliquer sur « ', |
|
| 639 | - 'texte_actualite_site_2' => 'interface complète', |
|
| 640 | - 'texte_actualite_site_3' => ' » pour ouvrir plus de possibilités.', |
|
| 641 | - 'texte_creation_automatique_vignette' => 'La création automatique de vignettes de prévisualisation est activée sur ce site. Si tu installe à partir de ce formulaire des images au(x) format(s) @gd_formats@, elles seront accompagnées d’une vignette d’une taille maximale de @taille_preview@ pixels.', |
|
| 642 | - 'texte_documents_associes' => 'Les documents suivants sont associés à l’article, |
|
| 633 | + // T |
|
| 634 | + 'taille_go' => '@taille@ Go', |
|
| 635 | + 'taille_ko' => '@taille@ ko', |
|
| 636 | + 'taille_mo' => '@taille@ Mo', |
|
| 637 | + 'taille_octets' => '@taille@ octets', |
|
| 638 | + 'texte_actualite_site_1' => 'Quand tu seras familiarisé(e) avec l’interface, tu pourras cliquer sur « ', |
|
| 639 | + 'texte_actualite_site_2' => 'interface complète', |
|
| 640 | + 'texte_actualite_site_3' => ' » pour ouvrir plus de possibilités.', |
|
| 641 | + 'texte_creation_automatique_vignette' => 'La création automatique de vignettes de prévisualisation est activée sur ce site. Si tu installe à partir de ce formulaire des images au(x) format(s) @gd_formats@, elles seront accompagnées d’une vignette d’une taille maximale de @taille_preview@ pixels.', |
|
| 642 | + 'texte_documents_associes' => 'Les documents suivants sont associés à l’article, |
|
| 643 | 643 | mais ils n’y ont pas été directement |
| 644 | 644 | insérés. Selon la mise en page du site public, |
| 645 | 645 | ils pourront apparaître sous forme de documents joints.', |
| 646 | - 'texte_erreur_mise_niveau_base' => 'Erreur de base de données lors de la mise à niveau. |
|
| 646 | + 'texte_erreur_mise_niveau_base' => 'Erreur de base de données lors de la mise à niveau. |
|
| 647 | 647 | L’image <b>@fichier@</b> n’est pas passée (article @id_article@). |
| 648 | 648 | Note bien cette référence, réessaye la mise à |
| 649 | 649 | niveau, et enfin vérifie que les images apparaissent |
| 650 | 650 | toujours dans les articles.', |
| 651 | - 'texte_erreur_visiteur' => 'Tu as tenté d’accéder à l’espace privé avec un login qui ne le permet pas.', |
|
| 652 | - 'texte_inc_auth_1' => 'Tu es identifié sous le |
|
| 651 | + 'texte_erreur_visiteur' => 'Tu as tenté d’accéder à l’espace privé avec un login qui ne le permet pas.', |
|
| 652 | + 'texte_inc_auth_1' => 'Tu es identifié sous le |
|
| 653 | 653 | login <b>@auth_login@</b>, mais celui-ci n’existe pas/plus dans la base. |
| 654 | 654 | Essaye de te', |
| 655 | - 'texte_inc_auth_2' => 'reconnecter', |
|
| 656 | - 'texte_inc_auth_3' => ', après avoir éventuellement quitté puis |
|
| 655 | + 'texte_inc_auth_2' => 'reconnecter', |
|
| 656 | + 'texte_inc_auth_3' => ', après avoir éventuellement quitté puis |
|
| 657 | 657 | redémarré ton navigateur.', |
| 658 | - 'texte_inc_config' => 'Les modifications effectuées dans ces pages influent notablement sur le |
|
| 658 | + 'texte_inc_config' => 'Les modifications effectuées dans ces pages influent notablement sur le |
|
| 659 | 659 | fonctionnement de ton site. Nous te recommandons de ne pas y intervenir tant que tu n’es pas |
| 660 | 660 | familier du fonctionnement du système SPIP. <br /><br /><b>Plus |
| 661 | 661 | généralement, il est fortement conseillé |
| 662 | 662 | de laisser la charge de ces pages au webmestre principal de ton site.</b>', |
| 663 | - 'texte_inc_meta_1' => 'Le système a rencontré une erreur lors de l’écriture du fichier <code>@fichier@</code>. En tant qu’administrateur du site,', |
|
| 664 | - 'texte_inc_meta_2' => 'vérifie les droits d’ecriture', |
|
| 665 | - 'texte_inc_meta_3' => 'sur le répertoire <code>@repertoire@</code>.', |
|
| 666 | - 'texte_statut_en_cours_redaction' => 'en cours de rédaction', |
|
| 667 | - 'texte_statut_poubelle' => 'à la poubelle', |
|
| 668 | - 'texte_statut_propose_evaluation' => 'proposé à l’évaluation', |
|
| 669 | - 'texte_statut_publie' => 'publié en ligne', |
|
| 670 | - 'texte_statut_refuse' => 'refusé', |
|
| 671 | - 'titre_ajouter_mot_cle' => 'AJOUTER UN MOT-CLÉ :', |
|
| 672 | - 'titre_cadre_raccourcis' => 'RACCOURCIS :', |
|
| 673 | - 'titre_changer_couleur_interface' => 'Changer la couleur de l’interface', |
|
| 674 | - 'titre_image_admin_article' => 'Tu peux administrer cet article', |
|
| 675 | - 'titre_image_administrateur' => 'Administrateur', |
|
| 676 | - 'titre_image_aide' => 'De l’aide sur cet élément', |
|
| 677 | - 'titre_image_auteur_supprime' => 'Auteur supprimé', |
|
| 678 | - 'titre_image_redacteur' => 'Rédacteur sans accès', |
|
| 679 | - 'titre_image_redacteur_02' => 'Rédacteur', |
|
| 680 | - 'titre_image_selecteur' => 'Afficher la liste', |
|
| 681 | - 'titre_image_visiteur' => 'Visiteur', |
|
| 682 | - 'titre_joindre_document' => 'JOINDRE UN DOCUMENT', |
|
| 683 | - 'titre_mots_cles' => 'MOTS-CLÉS', |
|
| 684 | - 'titre_probleme_technique' => 'Attention : un problème technique (serveur SQL) empêche l’accès à cette partie du site. Merci de ta compréhension.', |
|
| 685 | - 'titre_publier_document' => 'PUBLIER UN DOCUMENT DANS CETTE RUBRIQUE', |
|
| 686 | - 'titre_signatures_attente' => 'Signatures en attente de validation', |
|
| 687 | - 'titre_signatures_confirmees' => 'Signatures confirmées', |
|
| 688 | - 'titre_statistiques' => 'Statistiques du site', |
|
| 689 | - 'titre_titre_document' => 'Titre du document :', |
|
| 690 | - 'todo' => 'à venir', |
|
| 691 | - 'trad_definir_reference' => 'Choisir "@titre@" comme référence des traductions', |
|
| 692 | - 'trad_reference' => '(référence des traductions)', |
|
| 663 | + 'texte_inc_meta_1' => 'Le système a rencontré une erreur lors de l’écriture du fichier <code>@fichier@</code>. En tant qu’administrateur du site,', |
|
| 664 | + 'texte_inc_meta_2' => 'vérifie les droits d’ecriture', |
|
| 665 | + 'texte_inc_meta_3' => 'sur le répertoire <code>@repertoire@</code>.', |
|
| 666 | + 'texte_statut_en_cours_redaction' => 'en cours de rédaction', |
|
| 667 | + 'texte_statut_poubelle' => 'à la poubelle', |
|
| 668 | + 'texte_statut_propose_evaluation' => 'proposé à l’évaluation', |
|
| 669 | + 'texte_statut_publie' => 'publié en ligne', |
|
| 670 | + 'texte_statut_refuse' => 'refusé', |
|
| 671 | + 'titre_ajouter_mot_cle' => 'AJOUTER UN MOT-CLÉ :', |
|
| 672 | + 'titre_cadre_raccourcis' => 'RACCOURCIS :', |
|
| 673 | + 'titre_changer_couleur_interface' => 'Changer la couleur de l’interface', |
|
| 674 | + 'titre_image_admin_article' => 'Tu peux administrer cet article', |
|
| 675 | + 'titre_image_administrateur' => 'Administrateur', |
|
| 676 | + 'titre_image_aide' => 'De l’aide sur cet élément', |
|
| 677 | + 'titre_image_auteur_supprime' => 'Auteur supprimé', |
|
| 678 | + 'titre_image_redacteur' => 'Rédacteur sans accès', |
|
| 679 | + 'titre_image_redacteur_02' => 'Rédacteur', |
|
| 680 | + 'titre_image_selecteur' => 'Afficher la liste', |
|
| 681 | + 'titre_image_visiteur' => 'Visiteur', |
|
| 682 | + 'titre_joindre_document' => 'JOINDRE UN DOCUMENT', |
|
| 683 | + 'titre_mots_cles' => 'MOTS-CLÉS', |
|
| 684 | + 'titre_probleme_technique' => 'Attention : un problème technique (serveur SQL) empêche l’accès à cette partie du site. Merci de ta compréhension.', |
|
| 685 | + 'titre_publier_document' => 'PUBLIER UN DOCUMENT DANS CETTE RUBRIQUE', |
|
| 686 | + 'titre_signatures_attente' => 'Signatures en attente de validation', |
|
| 687 | + 'titre_signatures_confirmees' => 'Signatures confirmées', |
|
| 688 | + 'titre_statistiques' => 'Statistiques du site', |
|
| 689 | + 'titre_titre_document' => 'Titre du document :', |
|
| 690 | + 'todo' => 'à venir', |
|
| 691 | + 'trad_definir_reference' => 'Choisir "@titre@" comme référence des traductions', |
|
| 692 | + 'trad_reference' => '(référence des traductions)', |
|
| 693 | 693 | |
| 694 | - // U |
|
| 695 | - 'upload_limit' => 'Ce fichier est trop gros pour le serveur ; la taille maximum autorisée en <i>upload</i> est de @max@.', |
|
| 694 | + // U |
|
| 695 | + 'upload_limit' => 'Ce fichier est trop gros pour le serveur ; la taille maximum autorisée en <i>upload</i> est de @max@.', |
|
| 696 | 696 | |
| 697 | - // Z |
|
| 698 | - 'zbug_balise_b_aval' => ' : balise B en aval', |
|
| 699 | - 'zbug_balise_inexistante' => 'Balise @balise@ mal déclarée pour @from@', |
|
| 700 | - 'zbug_balise_sans_argument' => 'Argument manquant dans la balise @balise@', |
|
| 701 | - 'zbug_boucle' => 'boucle', |
|
| 702 | - 'zbug_boucle_recursive_undef' => 'boucle récursive non définie', |
|
| 703 | - 'zbug_calcul' => 'calcul', |
|
| 704 | - 'zbug_champ_hors_boucle' => 'Champ @champ@ hors boucle', |
|
| 705 | - 'zbug_champ_hors_critere' => 'Champ @champ@ hors critère @critere@', |
|
| 706 | - 'zbug_champ_hors_motif' => 'Champ @champ@ hors d’un contexte @motif@', |
|
| 707 | - 'zbug_code' => 'code', |
|
| 708 | - 'zbug_critere_inconnu' => 'critère inconnu @critere@', |
|
| 709 | - 'zbug_critere_sur_table_sans_cle_primaire' => '{@critere@} sur une table sans clef primaire atomique', |
|
| 710 | - 'zbug_distant_interdit' => 'externe interdit', |
|
| 711 | - 'zbug_doublon_table_sans_cle_primaire' => 'doublons sur une table sans clef primaire atomique', |
|
| 712 | - 'zbug_doublon_table_sans_index' => 'doublons sur une table sans index', |
|
| 713 | - 'zbug_erreur_boucle_double' => 'BOUCLE@id@ : double définition', |
|
| 714 | - 'zbug_erreur_boucle_fermant' => 'BOUCLE@id@ : tag fermant manquant', |
|
| 715 | - 'zbug_erreur_boucle_syntaxe' => 'Syntaxe boucle incorrecte', |
|
| 716 | - 'zbug_erreur_compilation' => 'Erreur de compilation', |
|
| 717 | - 'zbug_erreur_execution_page' => 'erreur d’exécution de la page', |
|
| 718 | - 'zbug_erreur_filtre' => 'Erreur : filtre <b>« @filtre@ »</b> non défini', |
|
| 719 | - 'zbug_erreur_filtre_nbarg_min' => 'Filtre @filtre@ : il manque @nb@ argument(s)', |
|
| 720 | - 'zbug_erreur_meme_parent' => '{meme_parent} ne s’applique qu’aux boucles (FORUMS) ou (RUBRIQUES)', |
|
| 721 | - 'zbug_erreur_squelette' => 'Erreur(s) dans le squelette', |
|
| 722 | - 'zbug_hors_compilation' => 'Hors Compilation', |
|
| 723 | - 'zbug_info_erreur_squelette' => 'Erreur sur le site', |
|
| 724 | - 'zbug_inversion_ordre_inexistant' => 'inversion d’un ordre inexistant', |
|
| 725 | - 'zbug_pagination_sans_critere' => '#PAGINATION sans critère {pagination} ou employé dans une boucle récursive', |
|
| 726 | - 'zbug_parametres_inclus_incorrects' => 'Paramètre d’inclusion incorrect : @param@', |
|
| 727 | - 'zbug_profile' => 'Temps de calcul : @time@', |
|
| 728 | - 'zbug_resultat' => 'résultat', |
|
| 729 | - 'zbug_serveur_indefini' => 'serveur SQL indéfini', |
|
| 730 | - 'zbug_statistiques' => 'Statistiques des requêtes SQL classées par durée', |
|
| 731 | - 'zbug_table_inconnue' => 'Table SQL « @table@ » inconnue', |
|
| 732 | - 'zxml_connus_attributs' => 'attributs connus', |
|
| 733 | - 'zxml_de' => 'de', |
|
| 734 | - 'zxml_inconnu_attribut' => 'attribut inconnu', |
|
| 735 | - 'zxml_inconnu_balise' => 'balise inconnue', |
|
| 736 | - 'zxml_inconnu_entite' => 'entité inconnue', |
|
| 737 | - 'zxml_inconnu_id' => 'ID inconnu', |
|
| 738 | - 'zxml_mais_de' => 'mais de', |
|
| 739 | - 'zxml_non_conforme' => 'n’est pas conforme au motif', |
|
| 740 | - 'zxml_non_fils' => 'n’est pas un fils de', |
|
| 741 | - 'zxml_nonvide_balise' => 'balise non vide', |
|
| 742 | - 'zxml_obligatoire_attribut' => 'attribut obligatoire mais absent dans', |
|
| 743 | - 'zxml_succession_fils_incorrecte' => 'succession des fils incorrecte', |
|
| 744 | - 'zxml_survoler' => 'survoler pour voir les corrects', |
|
| 745 | - 'zxml_valeur_attribut' => 'valeur de l’attribut', |
|
| 746 | - 'zxml_vide_balise' => 'balise vide', |
|
| 747 | - 'zxml_vu' => 'vu auparavant' |
|
| 697 | + // Z |
|
| 698 | + 'zbug_balise_b_aval' => ' : balise B en aval', |
|
| 699 | + 'zbug_balise_inexistante' => 'Balise @balise@ mal déclarée pour @from@', |
|
| 700 | + 'zbug_balise_sans_argument' => 'Argument manquant dans la balise @balise@', |
|
| 701 | + 'zbug_boucle' => 'boucle', |
|
| 702 | + 'zbug_boucle_recursive_undef' => 'boucle récursive non définie', |
|
| 703 | + 'zbug_calcul' => 'calcul', |
|
| 704 | + 'zbug_champ_hors_boucle' => 'Champ @champ@ hors boucle', |
|
| 705 | + 'zbug_champ_hors_critere' => 'Champ @champ@ hors critère @critere@', |
|
| 706 | + 'zbug_champ_hors_motif' => 'Champ @champ@ hors d’un contexte @motif@', |
|
| 707 | + 'zbug_code' => 'code', |
|
| 708 | + 'zbug_critere_inconnu' => 'critère inconnu @critere@', |
|
| 709 | + 'zbug_critere_sur_table_sans_cle_primaire' => '{@critere@} sur une table sans clef primaire atomique', |
|
| 710 | + 'zbug_distant_interdit' => 'externe interdit', |
|
| 711 | + 'zbug_doublon_table_sans_cle_primaire' => 'doublons sur une table sans clef primaire atomique', |
|
| 712 | + 'zbug_doublon_table_sans_index' => 'doublons sur une table sans index', |
|
| 713 | + 'zbug_erreur_boucle_double' => 'BOUCLE@id@ : double définition', |
|
| 714 | + 'zbug_erreur_boucle_fermant' => 'BOUCLE@id@ : tag fermant manquant', |
|
| 715 | + 'zbug_erreur_boucle_syntaxe' => 'Syntaxe boucle incorrecte', |
|
| 716 | + 'zbug_erreur_compilation' => 'Erreur de compilation', |
|
| 717 | + 'zbug_erreur_execution_page' => 'erreur d’exécution de la page', |
|
| 718 | + 'zbug_erreur_filtre' => 'Erreur : filtre <b>« @filtre@ »</b> non défini', |
|
| 719 | + 'zbug_erreur_filtre_nbarg_min' => 'Filtre @filtre@ : il manque @nb@ argument(s)', |
|
| 720 | + 'zbug_erreur_meme_parent' => '{meme_parent} ne s’applique qu’aux boucles (FORUMS) ou (RUBRIQUES)', |
|
| 721 | + 'zbug_erreur_squelette' => 'Erreur(s) dans le squelette', |
|
| 722 | + 'zbug_hors_compilation' => 'Hors Compilation', |
|
| 723 | + 'zbug_info_erreur_squelette' => 'Erreur sur le site', |
|
| 724 | + 'zbug_inversion_ordre_inexistant' => 'inversion d’un ordre inexistant', |
|
| 725 | + 'zbug_pagination_sans_critere' => '#PAGINATION sans critère {pagination} ou employé dans une boucle récursive', |
|
| 726 | + 'zbug_parametres_inclus_incorrects' => 'Paramètre d’inclusion incorrect : @param@', |
|
| 727 | + 'zbug_profile' => 'Temps de calcul : @time@', |
|
| 728 | + 'zbug_resultat' => 'résultat', |
|
| 729 | + 'zbug_serveur_indefini' => 'serveur SQL indéfini', |
|
| 730 | + 'zbug_statistiques' => 'Statistiques des requêtes SQL classées par durée', |
|
| 731 | + 'zbug_table_inconnue' => 'Table SQL « @table@ » inconnue', |
|
| 732 | + 'zxml_connus_attributs' => 'attributs connus', |
|
| 733 | + 'zxml_de' => 'de', |
|
| 734 | + 'zxml_inconnu_attribut' => 'attribut inconnu', |
|
| 735 | + 'zxml_inconnu_balise' => 'balise inconnue', |
|
| 736 | + 'zxml_inconnu_entite' => 'entité inconnue', |
|
| 737 | + 'zxml_inconnu_id' => 'ID inconnu', |
|
| 738 | + 'zxml_mais_de' => 'mais de', |
|
| 739 | + 'zxml_non_conforme' => 'n’est pas conforme au motif', |
|
| 740 | + 'zxml_non_fils' => 'n’est pas un fils de', |
|
| 741 | + 'zxml_nonvide_balise' => 'balise non vide', |
|
| 742 | + 'zxml_obligatoire_attribut' => 'attribut obligatoire mais absent dans', |
|
| 743 | + 'zxml_succession_fils_incorrecte' => 'succession des fils incorrecte', |
|
| 744 | + 'zxml_survoler' => 'survoler pour voir les corrects', |
|
| 745 | + 'zxml_valeur_attribut' => 'valeur de l’attribut', |
|
| 746 | + 'zxml_vide_balise' => 'balise vide', |
|
| 747 | + 'zxml_vu' => 'vu auparavant' |
|
| 748 | 748 | ); |
@@ -4,925 +4,925 @@ |
||
| 4 | 4 | // ** ne pas modifier le fichier ** |
| 5 | 5 | |
| 6 | 6 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 7 | - return; |
|
| 7 | + return; |
|
| 8 | 8 | } |
| 9 | 9 | |
| 10 | 10 | $GLOBALS[$GLOBALS['idx_lang']] = array( |
| 11 | 11 | |
| 12 | - // A |
|
| 13 | - 'activer_plugin' => 'Activar o plugin', |
|
| 14 | - 'affichage' => 'Mostrar', |
|
| 15 | - 'aide_non_disponible' => 'Esta parte da ajuda online ainda não está disponível neste idioma.', |
|
| 16 | - 'annuler_recherche' => 'Cancelar a pesquisa', |
|
| 17 | - 'auteur' => 'Autor :', |
|
| 18 | - 'avis_acces_interdit' => 'Accesso interdito. ', |
|
| 19 | - 'avis_acces_interdit_prive' => 'Não está autorizado a aceder à página <b>@exec@</b>.', |
|
| 20 | - 'avis_article_modifie' => 'Atenção, @nom_auteur_modif@ trabalhou neste artigo há @date_diff@ minutes', |
|
| 21 | - 'avis_aucun_resultat' => 'Sem resultados. ', |
|
| 22 | - 'avis_base_inaccessible' => 'Impossível conectar-se à base de dados @base@.', |
|
| 23 | - 'avis_chemin_invalide_1' => 'O caminho que escolheu ', |
|
| 24 | - 'avis_chemin_invalide_2' => 'não parece ser válido. Por favor regresse à página anterior e verifique as informações fornecidas. ', |
|
| 25 | - 'avis_connexion_echec_1' => 'A ligação ao servidor SQL falhou.', |
|
| 26 | - 'avis_connexion_echec_2' => 'Volte à página anterior e verifique as informações que forneceu. ', |
|
| 27 | - 'avis_connexion_echec_3' => '<b>N.B.</b> Em diversos servidores, precisa <b>solicitar</b> a activação do seu acesso à base de dados SQL antes de poder utilizá-la. Se não consegue ligar-se à sua base de dados, verifique se efectuou esse pedido.', |
|
| 28 | - 'avis_connexion_erreur_creer_base' => 'Não foi possível criar a base de dados.', |
|
| 29 | - 'avis_connexion_erreur_nom_base' => 'O nome da base de dados só pode conter letras, números e hífen.', |
|
| 30 | - 'avis_connexion_ldap_echec_1' => 'A ligação ao servidor LDAP falhou.', |
|
| 31 | - 'avis_connexion_ldap_echec_2' => 'Volte à página anterior e verifique as informações que forneceu ', |
|
| 32 | - 'avis_connexion_ldap_echec_3' => 'Alternativamente, não utilize o suporte LDAP para importar utilizadores.', |
|
| 33 | - 'avis_deplacement_rubrique' => 'Atenção ! Esta rubrica contém @contient_breves@ informação@scb@ : se a deslocar, por favor confirme-o nesta caixa.', |
|
| 34 | - 'avis_erreur_connexion_mysql' => 'Erro de ligação SQL', |
|
| 35 | - 'avis_espace_interdit' => '<b>Espaço interdito</b><p>SPIP já está instalado.', |
|
| 36 | - 'avis_lecture_noms_bases_1' => 'O programa de instalação não conseguiu ler os nomes das bases de dados instaladas. ', |
|
| 37 | - 'avis_lecture_noms_bases_2' => 'Ou nenhuma base de dados está disponível, ou a função que permite listá-las foi desactivada |
|
| 12 | + // A |
|
| 13 | + 'activer_plugin' => 'Activar o plugin', |
|
| 14 | + 'affichage' => 'Mostrar', |
|
| 15 | + 'aide_non_disponible' => 'Esta parte da ajuda online ainda não está disponível neste idioma.', |
|
| 16 | + 'annuler_recherche' => 'Cancelar a pesquisa', |
|
| 17 | + 'auteur' => 'Autor :', |
|
| 18 | + 'avis_acces_interdit' => 'Accesso interdito. ', |
|
| 19 | + 'avis_acces_interdit_prive' => 'Não está autorizado a aceder à página <b>@exec@</b>.', |
|
| 20 | + 'avis_article_modifie' => 'Atenção, @nom_auteur_modif@ trabalhou neste artigo há @date_diff@ minutes', |
|
| 21 | + 'avis_aucun_resultat' => 'Sem resultados. ', |
|
| 22 | + 'avis_base_inaccessible' => 'Impossível conectar-se à base de dados @base@.', |
|
| 23 | + 'avis_chemin_invalide_1' => 'O caminho que escolheu ', |
|
| 24 | + 'avis_chemin_invalide_2' => 'não parece ser válido. Por favor regresse à página anterior e verifique as informações fornecidas. ', |
|
| 25 | + 'avis_connexion_echec_1' => 'A ligação ao servidor SQL falhou.', |
|
| 26 | + 'avis_connexion_echec_2' => 'Volte à página anterior e verifique as informações que forneceu. ', |
|
| 27 | + 'avis_connexion_echec_3' => '<b>N.B.</b> Em diversos servidores, precisa <b>solicitar</b> a activação do seu acesso à base de dados SQL antes de poder utilizá-la. Se não consegue ligar-se à sua base de dados, verifique se efectuou esse pedido.', |
|
| 28 | + 'avis_connexion_erreur_creer_base' => 'Não foi possível criar a base de dados.', |
|
| 29 | + 'avis_connexion_erreur_nom_base' => 'O nome da base de dados só pode conter letras, números e hífen.', |
|
| 30 | + 'avis_connexion_ldap_echec_1' => 'A ligação ao servidor LDAP falhou.', |
|
| 31 | + 'avis_connexion_ldap_echec_2' => 'Volte à página anterior e verifique as informações que forneceu ', |
|
| 32 | + 'avis_connexion_ldap_echec_3' => 'Alternativamente, não utilize o suporte LDAP para importar utilizadores.', |
|
| 33 | + 'avis_deplacement_rubrique' => 'Atenção ! Esta rubrica contém @contient_breves@ informação@scb@ : se a deslocar, por favor confirme-o nesta caixa.', |
|
| 34 | + 'avis_erreur_connexion_mysql' => 'Erro de ligação SQL', |
|
| 35 | + 'avis_espace_interdit' => '<b>Espaço interdito</b><p>SPIP já está instalado.', |
|
| 36 | + 'avis_lecture_noms_bases_1' => 'O programa de instalação não conseguiu ler os nomes das bases de dados instaladas. ', |
|
| 37 | + 'avis_lecture_noms_bases_2' => 'Ou nenhuma base de dados está disponível, ou a função que permite listá-las foi desactivada |
|
| 38 | 38 | por razões de segurança (o que é o caso em muitos serviços de hospedagem). ', |
| 39 | - 'avis_lecture_noms_bases_3' => 'Na segunda alternativa, é provável que uma base tendo o seu nome de login seja utilizável :', |
|
| 40 | - 'avis_non_acces_page' => 'Não tem acesso a esta página. ', |
|
| 41 | - 'avis_operation_echec' => 'A operação falhou. ', |
|
| 42 | - 'avis_operation_impossible' => 'Operação impossivel', |
|
| 43 | - 'avis_suppression_base' => 'Atenção, a supressão dos dados é irreversível', |
|
| 39 | + 'avis_lecture_noms_bases_3' => 'Na segunda alternativa, é provável que uma base tendo o seu nome de login seja utilizável :', |
|
| 40 | + 'avis_non_acces_page' => 'Não tem acesso a esta página. ', |
|
| 41 | + 'avis_operation_echec' => 'A operação falhou. ', |
|
| 42 | + 'avis_operation_impossible' => 'Operação impossivel', |
|
| 43 | + 'avis_suppression_base' => 'Atenção, a supressão dos dados é irreversível', |
|
| 44 | 44 | |
| 45 | - // B |
|
| 46 | - 'bouton_acces_ldap' => 'Acrescentar o acesso a LDAP >>', |
|
| 47 | - 'bouton_ajouter' => 'Acrescentar ', |
|
| 48 | - 'bouton_annuler' => 'Cancelar', |
|
| 49 | - 'bouton_cache_activer' => 'Reactivar a cache', |
|
| 50 | - 'bouton_cache_desactiver' => 'Desactivar temporariamente a cache', |
|
| 51 | - 'bouton_demande_publication' => 'Pedir a publicação deste artigo ', |
|
| 52 | - 'bouton_desactive_tout' => 'Desactivar tudo', |
|
| 53 | - 'bouton_desinstaller' => 'Desinstalar', |
|
| 54 | - 'bouton_effacer_tout' => 'Apagar TUDO', |
|
| 55 | - 'bouton_envoyer_message' => 'Mensagem definitiva: enviar', |
|
| 56 | - 'bouton_fermer' => 'Fechar', |
|
| 57 | - 'bouton_mettre_a_jour_base' => 'Actualizar a base de dados', |
|
| 58 | - 'bouton_modifier' => 'Modificar', |
|
| 59 | - 'bouton_radio_afficher' => 'Exibir', |
|
| 60 | - 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Aparecer na lista dos redactores ligados', |
|
| 61 | - 'bouton_radio_envoi_annonces_adresse' => 'Enviar os anúncios para o endereço:', |
|
| 62 | - 'bouton_radio_envoi_liste_nouveautes' => 'Enviar a lista das novidades', |
|
| 63 | - 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Não aparecer na lista dos redactores online', |
|
| 64 | - 'bouton_radio_non_envoi_annonces_editoriales' => 'Não enviar anúncios editoriais', |
|
| 65 | - 'bouton_redirection' => 'REDIRECCIONAR', |
|
| 66 | - 'bouton_reinitialiser_aux_valeurs_par_defaut' => 'Repor para valores padrão', |
|
| 67 | - 'bouton_relancer_inscription' => 'Relançar o registo', |
|
| 68 | - 'bouton_relancer_inscriptions' => 'Relançar os registos', |
|
| 69 | - 'bouton_relancer_installation' => 'Recomeçar a instalação', |
|
| 70 | - 'bouton_reset_password' => 'Gerar uma nova senha e enviá-la por e-mail', |
|
| 71 | - 'bouton_suivant' => 'Seguinte', |
|
| 72 | - 'bouton_tenter_recuperation' => 'Tentar uma reparação', |
|
| 73 | - 'bouton_test_proxy' => 'Testar o proxy', |
|
| 74 | - 'bouton_vider_cache' => 'Esvaziar a cache', |
|
| 45 | + // B |
|
| 46 | + 'bouton_acces_ldap' => 'Acrescentar o acesso a LDAP >>', |
|
| 47 | + 'bouton_ajouter' => 'Acrescentar ', |
|
| 48 | + 'bouton_annuler' => 'Cancelar', |
|
| 49 | + 'bouton_cache_activer' => 'Reactivar a cache', |
|
| 50 | + 'bouton_cache_desactiver' => 'Desactivar temporariamente a cache', |
|
| 51 | + 'bouton_demande_publication' => 'Pedir a publicação deste artigo ', |
|
| 52 | + 'bouton_desactive_tout' => 'Desactivar tudo', |
|
| 53 | + 'bouton_desinstaller' => 'Desinstalar', |
|
| 54 | + 'bouton_effacer_tout' => 'Apagar TUDO', |
|
| 55 | + 'bouton_envoyer_message' => 'Mensagem definitiva: enviar', |
|
| 56 | + 'bouton_fermer' => 'Fechar', |
|
| 57 | + 'bouton_mettre_a_jour_base' => 'Actualizar a base de dados', |
|
| 58 | + 'bouton_modifier' => 'Modificar', |
|
| 59 | + 'bouton_radio_afficher' => 'Exibir', |
|
| 60 | + 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Aparecer na lista dos redactores ligados', |
|
| 61 | + 'bouton_radio_envoi_annonces_adresse' => 'Enviar os anúncios para o endereço:', |
|
| 62 | + 'bouton_radio_envoi_liste_nouveautes' => 'Enviar a lista das novidades', |
|
| 63 | + 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Não aparecer na lista dos redactores online', |
|
| 64 | + 'bouton_radio_non_envoi_annonces_editoriales' => 'Não enviar anúncios editoriais', |
|
| 65 | + 'bouton_redirection' => 'REDIRECCIONAR', |
|
| 66 | + 'bouton_reinitialiser_aux_valeurs_par_defaut' => 'Repor para valores padrão', |
|
| 67 | + 'bouton_relancer_inscription' => 'Relançar o registo', |
|
| 68 | + 'bouton_relancer_inscriptions' => 'Relançar os registos', |
|
| 69 | + 'bouton_relancer_installation' => 'Recomeçar a instalação', |
|
| 70 | + 'bouton_reset_password' => 'Gerar uma nova senha e enviá-la por e-mail', |
|
| 71 | + 'bouton_suivant' => 'Seguinte', |
|
| 72 | + 'bouton_tenter_recuperation' => 'Tentar uma reparação', |
|
| 73 | + 'bouton_test_proxy' => 'Testar o proxy', |
|
| 74 | + 'bouton_vider_cache' => 'Esvaziar a cache', |
|
| 75 | 75 | |
| 76 | - // C |
|
| 77 | - 'cache_modifiable_webmestre' => 'Este parâmetro é modificável pelo webmaster do site.', |
|
| 78 | - 'calendrier_synchro' => 'Se utilizar um software de agenda compatível <b>iCal</b>, pode sincronizá-lo com as informações deste sítio.', |
|
| 79 | - 'config_activer_champs' => 'Activar os campos seguintes', |
|
| 80 | - 'config_choix_base_sup' => 'Escolher uma base de dados neste servidor', |
|
| 81 | - 'config_erreur_base_sup' => 'SPIP não tem acesso à lista de bases de dados disponíveis', |
|
| 82 | - 'config_info_base_sup' => 'Se precisar de consultar outras bases de dados usando SPIP, quer seja neste servidor SQL ou noutro, use este formulário para as declarar. Se deixar alguns campos por preencher, os identificadores de conexão à base de dados principal serão usados.', |
|
| 83 | - 'config_info_base_sup_disponibles' => 'Bases de dados adicionais que se podem consultar:', |
|
| 84 | - 'config_info_enregistree' => 'A nova configuração foi guardada', |
|
| 85 | - 'config_info_logos' => 'Cada elemento do site pode ter o seu próprio logo, assim como um «mouseover»', |
|
| 86 | - 'config_info_logos_utiliser' => 'Utilizar os logos', |
|
| 87 | - 'config_info_logos_utiliser_non' => 'Não utilizar os logos', |
|
| 88 | - 'config_info_logos_utiliser_survol' => 'Usar os logos de "mouseover"', |
|
| 89 | - 'config_info_logos_utiliser_survol_non' => 'Não usar os logos de "mouseover"', |
|
| 90 | - 'config_info_redirection' => 'Activando esta opção, pode criar artigos virtuais, que são referências simples a artigos publicados noutros sítios, não necessariamente usando SPIP.', |
|
| 91 | - 'config_redirection' => 'Artigos virtuais', |
|
| 92 | - 'config_titre_base_sup' => 'Declaração de uma base de dados suplementar', |
|
| 93 | - 'config_titre_base_sup_choix' => 'Escolher uma base de dados suplementar', |
|
| 94 | - 'connexion_ldap' => 'Conexão:', |
|
| 95 | - 'creer_et_associer_un_auteur' => 'Criar e associar um autor', |
|
| 76 | + // C |
|
| 77 | + 'cache_modifiable_webmestre' => 'Este parâmetro é modificável pelo webmaster do site.', |
|
| 78 | + 'calendrier_synchro' => 'Se utilizar um software de agenda compatível <b>iCal</b>, pode sincronizá-lo com as informações deste sítio.', |
|
| 79 | + 'config_activer_champs' => 'Activar os campos seguintes', |
|
| 80 | + 'config_choix_base_sup' => 'Escolher uma base de dados neste servidor', |
|
| 81 | + 'config_erreur_base_sup' => 'SPIP não tem acesso à lista de bases de dados disponíveis', |
|
| 82 | + 'config_info_base_sup' => 'Se precisar de consultar outras bases de dados usando SPIP, quer seja neste servidor SQL ou noutro, use este formulário para as declarar. Se deixar alguns campos por preencher, os identificadores de conexão à base de dados principal serão usados.', |
|
| 83 | + 'config_info_base_sup_disponibles' => 'Bases de dados adicionais que se podem consultar:', |
|
| 84 | + 'config_info_enregistree' => 'A nova configuração foi guardada', |
|
| 85 | + 'config_info_logos' => 'Cada elemento do site pode ter o seu próprio logo, assim como um «mouseover»', |
|
| 86 | + 'config_info_logos_utiliser' => 'Utilizar os logos', |
|
| 87 | + 'config_info_logos_utiliser_non' => 'Não utilizar os logos', |
|
| 88 | + 'config_info_logos_utiliser_survol' => 'Usar os logos de "mouseover"', |
|
| 89 | + 'config_info_logos_utiliser_survol_non' => 'Não usar os logos de "mouseover"', |
|
| 90 | + 'config_info_redirection' => 'Activando esta opção, pode criar artigos virtuais, que são referências simples a artigos publicados noutros sítios, não necessariamente usando SPIP.', |
|
| 91 | + 'config_redirection' => 'Artigos virtuais', |
|
| 92 | + 'config_titre_base_sup' => 'Declaração de uma base de dados suplementar', |
|
| 93 | + 'config_titre_base_sup_choix' => 'Escolher uma base de dados suplementar', |
|
| 94 | + 'connexion_ldap' => 'Conexão:', |
|
| 95 | + 'creer_et_associer_un_auteur' => 'Criar e associar um autor', |
|
| 96 | 96 | |
| 97 | - // D |
|
| 98 | - 'date_mot_heures' => 'horas', |
|
| 97 | + // D |
|
| 98 | + 'date_mot_heures' => 'horas', |
|
| 99 | 99 | |
| 100 | - // E |
|
| 101 | - 'ecran_connexion_couleur_principale' => 'Cor principal', |
|
| 102 | - 'ecran_connexion_image_fond' => 'Imagem de fundo', |
|
| 103 | - 'ecran_connexion_image_fond_explication' => 'Usar uma imagem (formato JPEG, 1920x1080 pixels)', |
|
| 104 | - 'ecran_connexion_image_revenir_couleur_defaut' => 'Reverter para a cor padrão', |
|
| 105 | - 'ecran_connexion_titre' => 'Ecrã de ligação', |
|
| 106 | - 'ecran_securite' => ' + ecrã de segurança @version@', |
|
| 107 | - 'email' => 'email', |
|
| 108 | - 'email_2' => 'email :', |
|
| 109 | - 'en_savoir_plus' => 'Para saber mais', |
|
| 110 | - 'entree_adresse_annuaire' => 'Endereço do directório', |
|
| 111 | - 'entree_adresse_email' => 'O seu endereço email', |
|
| 112 | - 'entree_adresse_email_2' => 'Endereço electrónico', |
|
| 113 | - 'entree_base_donnee_1' => 'Endereço da base de dados', |
|
| 114 | - 'entree_base_donnee_2' => '(Muitas vezes, este endereço corresponde ao do seu sítio, outras vezes, corresponde à menção «localhost», às vezes, fica totalmente vazio.)', |
|
| 115 | - 'entree_biographie' => 'Curta biografia', |
|
| 116 | - 'entree_chemin_acces' => '<b>Introduzir</b> o caminho de acesso :', |
|
| 117 | - 'entree_cle_pgp' => 'A sua chave PGP', |
|
| 118 | - 'entree_cle_pgp_2' => 'Chave PGP', |
|
| 119 | - 'entree_contenu_rubrique' => '(Conteúdo da rubrica em poucas palavras.)', |
|
| 120 | - 'entree_identifiants_connexion' => 'Os seus identificadores de ligação', |
|
| 121 | - 'entree_identifiants_connexion_2' => 'Identifcadores de conexão', |
|
| 122 | - 'entree_informations_connexion_ldap' => 'Por favor preencha este formulário com as informações de ligação ao seu anuário LDAP. |
|
| 100 | + // E |
|
| 101 | + 'ecran_connexion_couleur_principale' => 'Cor principal', |
|
| 102 | + 'ecran_connexion_image_fond' => 'Imagem de fundo', |
|
| 103 | + 'ecran_connexion_image_fond_explication' => 'Usar uma imagem (formato JPEG, 1920x1080 pixels)', |
|
| 104 | + 'ecran_connexion_image_revenir_couleur_defaut' => 'Reverter para a cor padrão', |
|
| 105 | + 'ecran_connexion_titre' => 'Ecrã de ligação', |
|
| 106 | + 'ecran_securite' => ' + ecrã de segurança @version@', |
|
| 107 | + 'email' => 'email', |
|
| 108 | + 'email_2' => 'email :', |
|
| 109 | + 'en_savoir_plus' => 'Para saber mais', |
|
| 110 | + 'entree_adresse_annuaire' => 'Endereço do directório', |
|
| 111 | + 'entree_adresse_email' => 'O seu endereço email', |
|
| 112 | + 'entree_adresse_email_2' => 'Endereço electrónico', |
|
| 113 | + 'entree_base_donnee_1' => 'Endereço da base de dados', |
|
| 114 | + 'entree_base_donnee_2' => '(Muitas vezes, este endereço corresponde ao do seu sítio, outras vezes, corresponde à menção «localhost», às vezes, fica totalmente vazio.)', |
|
| 115 | + 'entree_biographie' => 'Curta biografia', |
|
| 116 | + 'entree_chemin_acces' => '<b>Introduzir</b> o caminho de acesso :', |
|
| 117 | + 'entree_cle_pgp' => 'A sua chave PGP', |
|
| 118 | + 'entree_cle_pgp_2' => 'Chave PGP', |
|
| 119 | + 'entree_contenu_rubrique' => '(Conteúdo da rubrica em poucas palavras.)', |
|
| 120 | + 'entree_identifiants_connexion' => 'Os seus identificadores de ligação', |
|
| 121 | + 'entree_identifiants_connexion_2' => 'Identifcadores de conexão', |
|
| 122 | + 'entree_informations_connexion_ldap' => 'Por favor preencha este formulário com as informações de ligação ao seu anuário LDAP. |
|
| 123 | 123 | Essas informações devem poder ser fornecidas pelo administrador do sistema ou da rede', |
| 124 | - 'entree_infos_perso' => 'Quem é você?', |
|
| 125 | - 'entree_infos_perso_2' => 'Quem é o autor?', |
|
| 126 | - 'entree_interieur_rubrique' => 'Dentro da rubrica :', |
|
| 127 | - 'entree_liens_sites' => '<b>Ligação hipertexto</b> (referência, sítio a visitar...)', |
|
| 128 | - 'entree_login' => 'O seu login', |
|
| 129 | - 'entree_login_connexion_1' => 'O login de ligação', |
|
| 130 | - 'entree_login_connexion_2' => '(Corresponde às vezes ao seu login de acesso ao FTP; outras vezes deixado vazio.)', |
|
| 131 | - 'entree_mot_passe' => 'A sua palavra-passe', |
|
| 132 | - 'entree_mot_passe_1' => 'A palavra-passe de ligação', |
|
| 133 | - 'entree_mot_passe_2' => '(Corresponde, às vezes, à sua palavra-passe para o FTP; outras vezes fica vazio)', |
|
| 134 | - 'entree_nom_fichier' => 'Por favor introduza o nome do ficheiro @texte_compresse@:', |
|
| 135 | - 'entree_nom_pseudo' => 'O seu nome ou o seu pseudónimo', |
|
| 136 | - 'entree_nom_pseudo_1' => '(O seu nome ou o seu pseudónimo)', |
|
| 137 | - 'entree_nom_pseudo_2' => 'Nome ou pseudónimo', |
|
| 138 | - 'entree_nom_site' => 'O nome do seu sítio', |
|
| 139 | - 'entree_nom_site_2' => 'Nome do sítio do autor', |
|
| 140 | - 'entree_nouveau_passe' => 'Nova palavra-passe', |
|
| 141 | - 'entree_passe_ldap' => 'Palavra-passe', |
|
| 142 | - 'entree_port_annuaire' => 'O número de porta do anuário', |
|
| 143 | - 'entree_signature' => 'Assinatura', |
|
| 144 | - 'entree_titre_obligatoire' => '<b>Título</b> [Obrigatório]<br />', |
|
| 145 | - 'entree_url' => 'O endereço (URL) do seu sítio', |
|
| 146 | - 'entree_url_2' => 'Endereço (URL) do sítio', |
|
| 147 | - 'erreur_connect_deja_existant' => 'Já existe um servidor com esse nome', |
|
| 148 | - 'erreur_contenu_suspect' => 'Texto de caracteres de escape', |
|
| 149 | - 'erreur_email_deja_existant' => 'Este endereço de correio electrónico já está registado.', |
|
| 150 | - 'erreur_nom_connect_incorrect' => 'O nome de servidor não é autorizado', |
|
| 151 | - 'erreur_plugin_attribut_balise_manquant' => 'Atributo @attribut@ em falta no marcador @balise@.', |
|
| 152 | - 'erreur_plugin_desinstalation_echouee' => 'A desinstalação do plugin falhou. No entanto, pode desactivá-lo.', |
|
| 153 | - 'erreur_plugin_fichier_absent' => 'Ficheiro inexistente', |
|
| 154 | - 'erreur_plugin_fichier_def_absent' => 'Ficheiro de definição inexistente', |
|
| 155 | - 'erreur_plugin_nom_fonction_interdit' => 'Nome de função interdito', |
|
| 156 | - 'erreur_plugin_nom_manquant' => 'Nome de plugin inexistente', |
|
| 157 | - 'erreur_plugin_prefix_manquant' => 'Espaço de criação de nome não definido para este plugin ', |
|
| 158 | - 'erreur_plugin_tag_plugin_absent' => '<plugin> inexistente no ficheiro de definição', |
|
| 159 | - 'erreur_plugin_version_manquant' => 'Versão de plugin inexistente', |
|
| 160 | - 'erreur_type_fichier' => 'Tipo de ficheiro incorrecto', |
|
| 124 | + 'entree_infos_perso' => 'Quem é você?', |
|
| 125 | + 'entree_infos_perso_2' => 'Quem é o autor?', |
|
| 126 | + 'entree_interieur_rubrique' => 'Dentro da rubrica :', |
|
| 127 | + 'entree_liens_sites' => '<b>Ligação hipertexto</b> (referência, sítio a visitar...)', |
|
| 128 | + 'entree_login' => 'O seu login', |
|
| 129 | + 'entree_login_connexion_1' => 'O login de ligação', |
|
| 130 | + 'entree_login_connexion_2' => '(Corresponde às vezes ao seu login de acesso ao FTP; outras vezes deixado vazio.)', |
|
| 131 | + 'entree_mot_passe' => 'A sua palavra-passe', |
|
| 132 | + 'entree_mot_passe_1' => 'A palavra-passe de ligação', |
|
| 133 | + 'entree_mot_passe_2' => '(Corresponde, às vezes, à sua palavra-passe para o FTP; outras vezes fica vazio)', |
|
| 134 | + 'entree_nom_fichier' => 'Por favor introduza o nome do ficheiro @texte_compresse@:', |
|
| 135 | + 'entree_nom_pseudo' => 'O seu nome ou o seu pseudónimo', |
|
| 136 | + 'entree_nom_pseudo_1' => '(O seu nome ou o seu pseudónimo)', |
|
| 137 | + 'entree_nom_pseudo_2' => 'Nome ou pseudónimo', |
|
| 138 | + 'entree_nom_site' => 'O nome do seu sítio', |
|
| 139 | + 'entree_nom_site_2' => 'Nome do sítio do autor', |
|
| 140 | + 'entree_nouveau_passe' => 'Nova palavra-passe', |
|
| 141 | + 'entree_passe_ldap' => 'Palavra-passe', |
|
| 142 | + 'entree_port_annuaire' => 'O número de porta do anuário', |
|
| 143 | + 'entree_signature' => 'Assinatura', |
|
| 144 | + 'entree_titre_obligatoire' => '<b>Título</b> [Obrigatório]<br />', |
|
| 145 | + 'entree_url' => 'O endereço (URL) do seu sítio', |
|
| 146 | + 'entree_url_2' => 'Endereço (URL) do sítio', |
|
| 147 | + 'erreur_connect_deja_existant' => 'Já existe um servidor com esse nome', |
|
| 148 | + 'erreur_contenu_suspect' => 'Texto de caracteres de escape', |
|
| 149 | + 'erreur_email_deja_existant' => 'Este endereço de correio electrónico já está registado.', |
|
| 150 | + 'erreur_nom_connect_incorrect' => 'O nome de servidor não é autorizado', |
|
| 151 | + 'erreur_plugin_attribut_balise_manquant' => 'Atributo @attribut@ em falta no marcador @balise@.', |
|
| 152 | + 'erreur_plugin_desinstalation_echouee' => 'A desinstalação do plugin falhou. No entanto, pode desactivá-lo.', |
|
| 153 | + 'erreur_plugin_fichier_absent' => 'Ficheiro inexistente', |
|
| 154 | + 'erreur_plugin_fichier_def_absent' => 'Ficheiro de definição inexistente', |
|
| 155 | + 'erreur_plugin_nom_fonction_interdit' => 'Nome de função interdito', |
|
| 156 | + 'erreur_plugin_nom_manquant' => 'Nome de plugin inexistente', |
|
| 157 | + 'erreur_plugin_prefix_manquant' => 'Espaço de criação de nome não definido para este plugin ', |
|
| 158 | + 'erreur_plugin_tag_plugin_absent' => '<plugin> inexistente no ficheiro de definição', |
|
| 159 | + 'erreur_plugin_version_manquant' => 'Versão de plugin inexistente', |
|
| 160 | + 'erreur_type_fichier' => 'Tipo de ficheiro incorrecto', |
|
| 161 | 161 | |
| 162 | - // H |
|
| 163 | - 'htaccess_a_simuler' => 'Atenção: a configuração do servidor HTTP ignora @htaccess@. Para garantir uma boa segurança, deve alterar esta configuração. Alternativamente, deve assegurar que as constantes @constantes@ (definíveis no ficheiro mes_options.php) têm como valores diretórios fora de @document_root@.', |
|
| 164 | - 'htaccess_inoperant' => 'htaccess inoperacional', |
|
| 162 | + // H |
|
| 163 | + 'htaccess_a_simuler' => 'Atenção: a configuração do servidor HTTP ignora @htaccess@. Para garantir uma boa segurança, deve alterar esta configuração. Alternativamente, deve assegurar que as constantes @constantes@ (definíveis no ficheiro mes_options.php) têm como valores diretórios fora de @document_root@.', |
|
| 164 | + 'htaccess_inoperant' => 'htaccess inoperacional', |
|
| 165 | 165 | |
| 166 | - // I |
|
| 167 | - 'ical_info1' => 'Esta página apresenta muitos modos de permanecer em contacto com as actividades deste sítio.', |
|
| 168 | - 'ical_info2' => 'Para mais informações sobre estas técnicas, consultar <a href="@spipnet@">a documentação de SPIP</a>.', |
|
| 169 | - 'ical_info_calendrier' => 'Estão disponíveis dois calendários. O primeiro é uma planta do sítio anunciando todos os artigos publicados. O segundo é pessoal e contém os anúncios editoriais assim como as últimas mensagens privadas : está reservado para si graças a uma chave pessoal, que pode modificar a qualquer momento com a renovação da sua palavra-passe.', |
|
| 170 | - 'ical_methode_http' => 'Download', |
|
| 171 | - 'ical_methode_webcal' => 'Sincronização (webcal://)', |
|
| 172 | - 'ical_texte_js' => 'Uma linha de javascript permite-lhe facilmente exibir, em qualquer sítio que lhe pertença, os artigos recentes publicados neste sítio.', |
|
| 173 | - 'ical_texte_prive' => 'Este calendário, de uso estritamente pessoal, informa sobre a actividade editorial privada deste sítio (tarefas e encontros pessoais, artigos e notícias propostos...).', |
|
| 174 | - 'ical_texte_public' => 'Este calendário permite acompanhar a actividade pública deste sítio (artigos e notícias publicados).', |
|
| 175 | - 'ical_texte_rss' => 'Pode vincular as novidades deste sítio em qualquer leitor de ficheiros de formato XML/RSS (Rich Site Summary). É também o formato que permite a SPIP ler as novidades publicadas em outros sítios que utilizam um formato de troca compatível.', |
|
| 176 | - 'ical_titre_js' => 'Javascript', |
|
| 177 | - 'ical_titre_mailing' => 'Mailing-list', |
|
| 178 | - 'ical_titre_rss' => 'Ficheiros « backend »', |
|
| 179 | - 'icone_accueil' => 'Início', |
|
| 180 | - 'icone_activer_cookie' => 'Activar o cookie de correspondência', |
|
| 181 | - 'icone_activite' => 'Actividade', |
|
| 182 | - 'icone_admin_plugin' => 'Gerir plugins', |
|
| 183 | - 'icone_administration' => 'Manutenção', |
|
| 184 | - 'icone_afficher_auteurs' => 'Exibir os autores', |
|
| 185 | - 'icone_afficher_visiteurs' => 'Exibir os visitantes', |
|
| 186 | - 'icone_arret_discussion' => 'Não voltar a participar nesta discussão', |
|
| 187 | - 'icone_calendrier' => 'Calendário', |
|
| 188 | - 'icone_configuration' => 'Configuração', |
|
| 189 | - 'icone_creer_auteur' => 'Criar um novo autor e associá-lo a este artigo', |
|
| 190 | - 'icone_creer_mot_cle' => 'Criar uma nova palavra-chave e vinculá-la a este artigo', |
|
| 191 | - 'icone_creer_rubrique_2' => 'Criar uma nova rubrica', |
|
| 192 | - 'icone_developpement' => 'Desenvolvimento', |
|
| 193 | - 'icone_edition' => 'Editar', |
|
| 194 | - 'icone_ma_langue' => 'Idioma', |
|
| 195 | - 'icone_mes_infos' => 'Minhas informações', |
|
| 196 | - 'icone_mes_preferences' => 'Preferências', |
|
| 197 | - 'icone_modifier_article' => 'Modificar este artigo', |
|
| 198 | - 'icone_modifier_rubrique' => 'Modificar esta rubrica', |
|
| 199 | - 'icone_publication' => 'Publicação', |
|
| 200 | - 'icone_relancer_signataire' => 'Contactar o signatário novamente', |
|
| 201 | - 'icone_retour' => 'Voltar', |
|
| 202 | - 'icone_retour_article' => 'Voltar ao artigo', |
|
| 203 | - 'icone_squelette' => 'Modelos', |
|
| 204 | - 'icone_suivi_publication' => 'Monitorização da publicação', |
|
| 205 | - 'icone_supprimer_cookie' => 'Suprimir o cookie de correspondência', |
|
| 206 | - 'icone_supprimer_rubrique' => 'Suprimir esta rubrica', |
|
| 207 | - 'icone_supprimer_signature' => 'Suprimir esta assinatura', |
|
| 208 | - 'icone_valider_signature' => 'Validar esta assinatura', |
|
| 209 | - 'image_administrer_rubrique' => 'Pode administrar esta rubrica', |
|
| 210 | - 'impossible_modifier_login_auteur' => 'Impossível alterar o login.', |
|
| 211 | - 'impossible_modifier_pass_auteur' => 'Impossível alterar a palavra-passe.', |
|
| 212 | - 'info_1_article' => '1 artigo', |
|
| 213 | - 'info_1_auteur' => '1 autor', |
|
| 214 | - 'info_1_message' => '1 mensagem', |
|
| 215 | - 'info_1_mot_cle' => '1 palavra-chave', |
|
| 216 | - 'info_1_rubrique' => '1 rubrica', |
|
| 217 | - 'info_1_visiteur' => '1 visitante', |
|
| 218 | - 'info_activer_cookie' => 'Pode activar um <b>cookie de correspondência</b>, o que lhe |
|
| 166 | + // I |
|
| 167 | + 'ical_info1' => 'Esta página apresenta muitos modos de permanecer em contacto com as actividades deste sítio.', |
|
| 168 | + 'ical_info2' => 'Para mais informações sobre estas técnicas, consultar <a href="@spipnet@">a documentação de SPIP</a>.', |
|
| 169 | + 'ical_info_calendrier' => 'Estão disponíveis dois calendários. O primeiro é uma planta do sítio anunciando todos os artigos publicados. O segundo é pessoal e contém os anúncios editoriais assim como as últimas mensagens privadas : está reservado para si graças a uma chave pessoal, que pode modificar a qualquer momento com a renovação da sua palavra-passe.', |
|
| 170 | + 'ical_methode_http' => 'Download', |
|
| 171 | + 'ical_methode_webcal' => 'Sincronização (webcal://)', |
|
| 172 | + 'ical_texte_js' => 'Uma linha de javascript permite-lhe facilmente exibir, em qualquer sítio que lhe pertença, os artigos recentes publicados neste sítio.', |
|
| 173 | + 'ical_texte_prive' => 'Este calendário, de uso estritamente pessoal, informa sobre a actividade editorial privada deste sítio (tarefas e encontros pessoais, artigos e notícias propostos...).', |
|
| 174 | + 'ical_texte_public' => 'Este calendário permite acompanhar a actividade pública deste sítio (artigos e notícias publicados).', |
|
| 175 | + 'ical_texte_rss' => 'Pode vincular as novidades deste sítio em qualquer leitor de ficheiros de formato XML/RSS (Rich Site Summary). É também o formato que permite a SPIP ler as novidades publicadas em outros sítios que utilizam um formato de troca compatível.', |
|
| 176 | + 'ical_titre_js' => 'Javascript', |
|
| 177 | + 'ical_titre_mailing' => 'Mailing-list', |
|
| 178 | + 'ical_titre_rss' => 'Ficheiros « backend »', |
|
| 179 | + 'icone_accueil' => 'Início', |
|
| 180 | + 'icone_activer_cookie' => 'Activar o cookie de correspondência', |
|
| 181 | + 'icone_activite' => 'Actividade', |
|
| 182 | + 'icone_admin_plugin' => 'Gerir plugins', |
|
| 183 | + 'icone_administration' => 'Manutenção', |
|
| 184 | + 'icone_afficher_auteurs' => 'Exibir os autores', |
|
| 185 | + 'icone_afficher_visiteurs' => 'Exibir os visitantes', |
|
| 186 | + 'icone_arret_discussion' => 'Não voltar a participar nesta discussão', |
|
| 187 | + 'icone_calendrier' => 'Calendário', |
|
| 188 | + 'icone_configuration' => 'Configuração', |
|
| 189 | + 'icone_creer_auteur' => 'Criar um novo autor e associá-lo a este artigo', |
|
| 190 | + 'icone_creer_mot_cle' => 'Criar uma nova palavra-chave e vinculá-la a este artigo', |
|
| 191 | + 'icone_creer_rubrique_2' => 'Criar uma nova rubrica', |
|
| 192 | + 'icone_developpement' => 'Desenvolvimento', |
|
| 193 | + 'icone_edition' => 'Editar', |
|
| 194 | + 'icone_ma_langue' => 'Idioma', |
|
| 195 | + 'icone_mes_infos' => 'Minhas informações', |
|
| 196 | + 'icone_mes_preferences' => 'Preferências', |
|
| 197 | + 'icone_modifier_article' => 'Modificar este artigo', |
|
| 198 | + 'icone_modifier_rubrique' => 'Modificar esta rubrica', |
|
| 199 | + 'icone_publication' => 'Publicação', |
|
| 200 | + 'icone_relancer_signataire' => 'Contactar o signatário novamente', |
|
| 201 | + 'icone_retour' => 'Voltar', |
|
| 202 | + 'icone_retour_article' => 'Voltar ao artigo', |
|
| 203 | + 'icone_squelette' => 'Modelos', |
|
| 204 | + 'icone_suivi_publication' => 'Monitorização da publicação', |
|
| 205 | + 'icone_supprimer_cookie' => 'Suprimir o cookie de correspondência', |
|
| 206 | + 'icone_supprimer_rubrique' => 'Suprimir esta rubrica', |
|
| 207 | + 'icone_supprimer_signature' => 'Suprimir esta assinatura', |
|
| 208 | + 'icone_valider_signature' => 'Validar esta assinatura', |
|
| 209 | + 'image_administrer_rubrique' => 'Pode administrar esta rubrica', |
|
| 210 | + 'impossible_modifier_login_auteur' => 'Impossível alterar o login.', |
|
| 211 | + 'impossible_modifier_pass_auteur' => 'Impossível alterar a palavra-passe.', |
|
| 212 | + 'info_1_article' => '1 artigo', |
|
| 213 | + 'info_1_auteur' => '1 autor', |
|
| 214 | + 'info_1_message' => '1 mensagem', |
|
| 215 | + 'info_1_mot_cle' => '1 palavra-chave', |
|
| 216 | + 'info_1_rubrique' => '1 rubrica', |
|
| 217 | + 'info_1_visiteur' => '1 visitante', |
|
| 218 | + 'info_activer_cookie' => 'Pode activar um <b>cookie de correspondência</b>, o que lhe |
|
| 219 | 219 | permitirá passar facilmente do sítio público ao sítio privado ', |
| 220 | - 'info_activer_menu_developpement' => 'Mostrar o menu Desenvolvimento', |
|
| 221 | - 'info_admin_etre_webmestre' => 'Conceder-me os direitos de webmaster', |
|
| 222 | - 'info_admin_je_suis_webmestre' => 'Eu sou <b>webmaster</b>', |
|
| 223 | - 'info_admin_statuer_webmestre' => 'Conceder ao administrador os direitos de webmaster', |
|
| 224 | - 'info_admin_webmestre' => 'Este administrador é <b>webmaster</b>', |
|
| 225 | - 'info_administrateur' => 'Administrador', |
|
| 226 | - 'info_administrateur_1' => 'Administrador', |
|
| 227 | - 'info_administrateur_2' => 'do sítio (<i>utilize com precaução</i>)', |
|
| 228 | - 'info_administrateur_site_01' => 'Se for o administrador do sítio, por favor', |
|
| 229 | - 'info_administrateur_site_02' => 'clicar sobre esta ligação', |
|
| 230 | - 'info_administrateurs' => 'Administradores', |
|
| 231 | - 'info_administrer_rubrique' => 'Pode administrar esta rubrica', |
|
| 232 | - 'info_adresse' => 'ao endereço :', |
|
| 233 | - 'info_adresse_desinscription' => 'Endereço de cancelamento da subscrição: ', |
|
| 234 | - 'info_adresse_url' => 'Endereço (URL) do sítio público', |
|
| 235 | - 'info_afficher_par_nb' => 'Exibir', |
|
| 236 | - 'info_aide_en_ligne' => 'Ajuda online SPIP', |
|
| 237 | - 'info_ajout_image' => 'Quando acrescentar imagens como documentos ligados a um artigo, |
|
| 220 | + 'info_activer_menu_developpement' => 'Mostrar o menu Desenvolvimento', |
|
| 221 | + 'info_admin_etre_webmestre' => 'Conceder-me os direitos de webmaster', |
|
| 222 | + 'info_admin_je_suis_webmestre' => 'Eu sou <b>webmaster</b>', |
|
| 223 | + 'info_admin_statuer_webmestre' => 'Conceder ao administrador os direitos de webmaster', |
|
| 224 | + 'info_admin_webmestre' => 'Este administrador é <b>webmaster</b>', |
|
| 225 | + 'info_administrateur' => 'Administrador', |
|
| 226 | + 'info_administrateur_1' => 'Administrador', |
|
| 227 | + 'info_administrateur_2' => 'do sítio (<i>utilize com precaução</i>)', |
|
| 228 | + 'info_administrateur_site_01' => 'Se for o administrador do sítio, por favor', |
|
| 229 | + 'info_administrateur_site_02' => 'clicar sobre esta ligação', |
|
| 230 | + 'info_administrateurs' => 'Administradores', |
|
| 231 | + 'info_administrer_rubrique' => 'Pode administrar esta rubrica', |
|
| 232 | + 'info_adresse' => 'ao endereço :', |
|
| 233 | + 'info_adresse_desinscription' => 'Endereço de cancelamento da subscrição: ', |
|
| 234 | + 'info_adresse_url' => 'Endereço (URL) do sítio público', |
|
| 235 | + 'info_afficher_par_nb' => 'Exibir', |
|
| 236 | + 'info_aide_en_ligne' => 'Ajuda online SPIP', |
|
| 237 | + 'info_ajout_image' => 'Quando acrescentar imagens como documentos ligados a um artigo, |
|
| 238 | 238 | SPIP pode criar para si, automaticamente, vinhetas (miniaturas) das |
| 239 | 239 | imagens inseridas. Isso permite por exemplo criar |
| 240 | 240 | automaticamente uma galeria ou um portfolio.', |
| 241 | - 'info_ajouter_rubrique' => 'Acrescentar uma rubrica a administrar :', |
|
| 242 | - 'info_annonce_nouveautes' => 'Anúncio das novidades', |
|
| 243 | - 'info_article' => 'artigo', |
|
| 244 | - 'info_article_2' => 'artigos', |
|
| 245 | - 'info_article_a_paraitre' => 'Os artigos pós-datados a publicar', |
|
| 246 | - 'info_articles_02' => 'artigos', |
|
| 247 | - 'info_articles_2' => 'Artigos', |
|
| 248 | - 'info_articles_auteur' => 'Os artigos deste autor', |
|
| 249 | - 'info_articles_miens' => 'Os meus artigos', |
|
| 250 | - 'info_articles_tous' => 'Todos os artigos', |
|
| 251 | - 'info_articles_trouves' => 'Artigos encontrados', |
|
| 252 | - 'info_attente_validation' => 'Os seus artigos à espera de validação', |
|
| 253 | - 'info_aucun_article' => 'Nenhum artigo', |
|
| 254 | - 'info_aucun_auteur' => 'Nenhum autor', |
|
| 255 | - 'info_aucun_message' => 'Sem mensagens', |
|
| 256 | - 'info_aucun_rubrique' => 'Sem rubricas', |
|
| 257 | - 'info_aujourdhui' => 'hoje :', |
|
| 258 | - 'info_auteur_gere_rubriques' => 'Este autor gere as seguintes secções:', |
|
| 259 | - 'info_auteur_gere_toutes_rubriques' => 'Este autor gere <b>todas as secções</b>', |
|
| 260 | - 'info_auteur_gere_toutes_rubriques_2' => 'Eu administro <b>todas as rubricas</b>', |
|
| 261 | - 'info_auteurs' => 'Os autores', |
|
| 262 | - 'info_auteurs_par_tri' => 'Autores@partri@', |
|
| 263 | - 'info_auteurs_trouves' => 'Autores encontrados', |
|
| 264 | - 'info_authentification_externe' => 'Autenticação externa', |
|
| 265 | - 'info_avertissement' => 'Aviso', |
|
| 266 | - 'info_barre_outils' => 'com a sua barra de ferramentas?', |
|
| 267 | - 'info_base_installee' => 'A estrutura da sua base de dados está instalada.', |
|
| 268 | - 'info_bio' => 'Biografia', |
|
| 269 | - 'info_cache_desactive' => 'A cache encontra-se temporariamente desactivada.', |
|
| 270 | - 'info_chapeau' => 'Cabeçalho', |
|
| 271 | - 'info_chapeau_2' => 'Cabeçalho :', |
|
| 272 | - 'info_chemin_acces_1' => 'Opções : <b>Caminho de acesso no diretório</b>', |
|
| 273 | - 'info_chemin_acces_2' => 'Doravante, deve configurar o caminho de acesso às informações no anuário. Esta informação é indispensável para ler os perfis de utilizador armazenados no anuário.', |
|
| 274 | - 'info_chemin_acces_annuaire' => 'Opções : <b>Caminho de acesso no diretório', |
|
| 275 | - 'info_choix_base' => 'Terceira etapa :', |
|
| 276 | - 'info_classement_1' => '<sup>er</sup> no @liste@', |
|
| 277 | - 'info_classement_2' => '<sup>e</sup> no @liste@', |
|
| 278 | - 'info_code_acces' => 'Não se esqueça dos seus próprios códigos de acesso !', |
|
| 279 | - 'info_config_suivi' => 'Se este endereço corresponder a uma mailing-list, pode indicar, a seguir, o endereço no qual os participantes no sítio podem inscrever-se. Este endereço pode ser uma URL (por exemplo a página de inscrição na lista pela Web), ou um endereço email com um assunto específico (por exemplo: <tt>@adresse_suivi@?subject=subscribe</tt>):', |
|
| 280 | - 'info_config_suivi_explication' => ' Pode assinar a mailing-list deste sítio. Receberá então, por correio electrónico, os anúncios de artigos e de notícias propostos para publicação.', |
|
| 281 | - 'info_confirmer_passe' => 'Confirmar esta nova palavra-passe', |
|
| 282 | - 'info_conflit_edition_avis_non_sauvegarde' => 'Atenção: os campos seguintes foram modificados anteriormente. As suas alterações a estes campos não foram portanto guardadas. ', |
|
| 283 | - 'info_conflit_edition_differences' => 'Diferenças:', |
|
| 284 | - 'info_conflit_edition_version_enregistree' => 'Versão guardada :', |
|
| 285 | - 'info_conflit_edition_votre_version' => 'A sua versão:', |
|
| 286 | - 'info_connexion_base' => 'Segunda etapa: <b>Teste de ligação à base de dados</b>', |
|
| 287 | - 'info_connexion_base_donnee' => 'Ligação à sua base de dados', |
|
| 288 | - 'info_connexion_ldap_ok' => 'A ligação LDAP foi bem sucedida.</b><p> Pode passar para a etapa seguinte.</p>', |
|
| 289 | - 'info_connexion_mysql' => 'Primeira etapa : <b>A sua ligação SQL<b>', |
|
| 290 | - 'info_connexion_ok' => 'A ligação foi bem sucedida.', |
|
| 291 | - 'info_contact' => 'Contacto', |
|
| 292 | - 'info_contenu_articles' => 'Conteúdo dos artigos', |
|
| 293 | - 'info_contributions' => 'Contributos', |
|
| 294 | - 'info_creation_paragraphe' => 'Para criar parágrafos, deixe simplesmente linhas vazias.', |
|
| 295 | - 'info_creation_rubrique' => 'Antes de poder escrever artigos, <br />deve criar pelo menos uma rubrica.<br />', |
|
| 296 | - 'info_creation_tables' => 'Quarta etapa : <b>Criação das tabelas da base de dados<b>', |
|
| 297 | - 'info_creer_base' => '<b>Criar</b> uma nova base de dados', |
|
| 298 | - 'info_dans_rubrique' => 'Na rubrica :', |
|
| 299 | - 'info_date_publication_anterieure' => 'Data de publicação anterior:', |
|
| 300 | - 'info_date_referencement' => 'DATA DE REFERENCIAMENTO DESTE SÍTIO :', |
|
| 301 | - 'info_derniere_etape' => 'Última etapa : <b>Terminou !', |
|
| 302 | - 'info_descriptif' => 'Descrição:', |
|
| 303 | - 'info_desinstaller_plugin' => 'elimina os dados e desactiva o plugin', |
|
| 304 | - 'info_discussion_cours' => 'Discussões em curso', |
|
| 305 | - 'info_ecrire_article' => 'Antes de poder escrever artigos, deve criar pelo menos uma rubrica.', |
|
| 306 | - 'info_email_envoi' => 'Endereço de email de envio (opcional)', |
|
| 307 | - 'info_email_envoi_txt' => 'Indique aqui o endereço a utilizar para enviar os emails (se não for o caso, o endereço do destinatário será utilizado como endereço de envio) :', |
|
| 308 | - 'info_email_webmestre' => 'Endereço e-mail do webmaster ', |
|
| 309 | - 'info_envoi_email_automatique' => 'Envio automático de mails', |
|
| 310 | - 'info_envoyer_maintenant' => 'Enviar agora', |
|
| 311 | - 'info_etape_suivante' => 'Passar para a seguinte etapa', |
|
| 312 | - 'info_etape_suivante_1' => 'Pode passar para a etapa seguinte', |
|
| 313 | - 'info_etape_suivante_2' => 'Pode passar para a etapa seguinte', |
|
| 314 | - 'info_exceptions_proxy' => 'Excepções para o proxy', |
|
| 315 | - 'info_exportation_base' => 'exportação da base para @archive@', |
|
| 316 | - 'info_facilite_suivi_activite' => 'A fim de facilitar o acompanhamento da actividade |
|
| 241 | + 'info_ajouter_rubrique' => 'Acrescentar uma rubrica a administrar :', |
|
| 242 | + 'info_annonce_nouveautes' => 'Anúncio das novidades', |
|
| 243 | + 'info_article' => 'artigo', |
|
| 244 | + 'info_article_2' => 'artigos', |
|
| 245 | + 'info_article_a_paraitre' => 'Os artigos pós-datados a publicar', |
|
| 246 | + 'info_articles_02' => 'artigos', |
|
| 247 | + 'info_articles_2' => 'Artigos', |
|
| 248 | + 'info_articles_auteur' => 'Os artigos deste autor', |
|
| 249 | + 'info_articles_miens' => 'Os meus artigos', |
|
| 250 | + 'info_articles_tous' => 'Todos os artigos', |
|
| 251 | + 'info_articles_trouves' => 'Artigos encontrados', |
|
| 252 | + 'info_attente_validation' => 'Os seus artigos à espera de validação', |
|
| 253 | + 'info_aucun_article' => 'Nenhum artigo', |
|
| 254 | + 'info_aucun_auteur' => 'Nenhum autor', |
|
| 255 | + 'info_aucun_message' => 'Sem mensagens', |
|
| 256 | + 'info_aucun_rubrique' => 'Sem rubricas', |
|
| 257 | + 'info_aujourdhui' => 'hoje :', |
|
| 258 | + 'info_auteur_gere_rubriques' => 'Este autor gere as seguintes secções:', |
|
| 259 | + 'info_auteur_gere_toutes_rubriques' => 'Este autor gere <b>todas as secções</b>', |
|
| 260 | + 'info_auteur_gere_toutes_rubriques_2' => 'Eu administro <b>todas as rubricas</b>', |
|
| 261 | + 'info_auteurs' => 'Os autores', |
|
| 262 | + 'info_auteurs_par_tri' => 'Autores@partri@', |
|
| 263 | + 'info_auteurs_trouves' => 'Autores encontrados', |
|
| 264 | + 'info_authentification_externe' => 'Autenticação externa', |
|
| 265 | + 'info_avertissement' => 'Aviso', |
|
| 266 | + 'info_barre_outils' => 'com a sua barra de ferramentas?', |
|
| 267 | + 'info_base_installee' => 'A estrutura da sua base de dados está instalada.', |
|
| 268 | + 'info_bio' => 'Biografia', |
|
| 269 | + 'info_cache_desactive' => 'A cache encontra-se temporariamente desactivada.', |
|
| 270 | + 'info_chapeau' => 'Cabeçalho', |
|
| 271 | + 'info_chapeau_2' => 'Cabeçalho :', |
|
| 272 | + 'info_chemin_acces_1' => 'Opções : <b>Caminho de acesso no diretório</b>', |
|
| 273 | + 'info_chemin_acces_2' => 'Doravante, deve configurar o caminho de acesso às informações no anuário. Esta informação é indispensável para ler os perfis de utilizador armazenados no anuário.', |
|
| 274 | + 'info_chemin_acces_annuaire' => 'Opções : <b>Caminho de acesso no diretório', |
|
| 275 | + 'info_choix_base' => 'Terceira etapa :', |
|
| 276 | + 'info_classement_1' => '<sup>er</sup> no @liste@', |
|
| 277 | + 'info_classement_2' => '<sup>e</sup> no @liste@', |
|
| 278 | + 'info_code_acces' => 'Não se esqueça dos seus próprios códigos de acesso !', |
|
| 279 | + 'info_config_suivi' => 'Se este endereço corresponder a uma mailing-list, pode indicar, a seguir, o endereço no qual os participantes no sítio podem inscrever-se. Este endereço pode ser uma URL (por exemplo a página de inscrição na lista pela Web), ou um endereço email com um assunto específico (por exemplo: <tt>@adresse_suivi@?subject=subscribe</tt>):', |
|
| 280 | + 'info_config_suivi_explication' => ' Pode assinar a mailing-list deste sítio. Receberá então, por correio electrónico, os anúncios de artigos e de notícias propostos para publicação.', |
|
| 281 | + 'info_confirmer_passe' => 'Confirmar esta nova palavra-passe', |
|
| 282 | + 'info_conflit_edition_avis_non_sauvegarde' => 'Atenção: os campos seguintes foram modificados anteriormente. As suas alterações a estes campos não foram portanto guardadas. ', |
|
| 283 | + 'info_conflit_edition_differences' => 'Diferenças:', |
|
| 284 | + 'info_conflit_edition_version_enregistree' => 'Versão guardada :', |
|
| 285 | + 'info_conflit_edition_votre_version' => 'A sua versão:', |
|
| 286 | + 'info_connexion_base' => 'Segunda etapa: <b>Teste de ligação à base de dados</b>', |
|
| 287 | + 'info_connexion_base_donnee' => 'Ligação à sua base de dados', |
|
| 288 | + 'info_connexion_ldap_ok' => 'A ligação LDAP foi bem sucedida.</b><p> Pode passar para a etapa seguinte.</p>', |
|
| 289 | + 'info_connexion_mysql' => 'Primeira etapa : <b>A sua ligação SQL<b>', |
|
| 290 | + 'info_connexion_ok' => 'A ligação foi bem sucedida.', |
|
| 291 | + 'info_contact' => 'Contacto', |
|
| 292 | + 'info_contenu_articles' => 'Conteúdo dos artigos', |
|
| 293 | + 'info_contributions' => 'Contributos', |
|
| 294 | + 'info_creation_paragraphe' => 'Para criar parágrafos, deixe simplesmente linhas vazias.', |
|
| 295 | + 'info_creation_rubrique' => 'Antes de poder escrever artigos, <br />deve criar pelo menos uma rubrica.<br />', |
|
| 296 | + 'info_creation_tables' => 'Quarta etapa : <b>Criação das tabelas da base de dados<b>', |
|
| 297 | + 'info_creer_base' => '<b>Criar</b> uma nova base de dados', |
|
| 298 | + 'info_dans_rubrique' => 'Na rubrica :', |
|
| 299 | + 'info_date_publication_anterieure' => 'Data de publicação anterior:', |
|
| 300 | + 'info_date_referencement' => 'DATA DE REFERENCIAMENTO DESTE SÍTIO :', |
|
| 301 | + 'info_derniere_etape' => 'Última etapa : <b>Terminou !', |
|
| 302 | + 'info_descriptif' => 'Descrição:', |
|
| 303 | + 'info_desinstaller_plugin' => 'elimina os dados e desactiva o plugin', |
|
| 304 | + 'info_discussion_cours' => 'Discussões em curso', |
|
| 305 | + 'info_ecrire_article' => 'Antes de poder escrever artigos, deve criar pelo menos uma rubrica.', |
|
| 306 | + 'info_email_envoi' => 'Endereço de email de envio (opcional)', |
|
| 307 | + 'info_email_envoi_txt' => 'Indique aqui o endereço a utilizar para enviar os emails (se não for o caso, o endereço do destinatário será utilizado como endereço de envio) :', |
|
| 308 | + 'info_email_webmestre' => 'Endereço e-mail do webmaster ', |
|
| 309 | + 'info_envoi_email_automatique' => 'Envio automático de mails', |
|
| 310 | + 'info_envoyer_maintenant' => 'Enviar agora', |
|
| 311 | + 'info_etape_suivante' => 'Passar para a seguinte etapa', |
|
| 312 | + 'info_etape_suivante_1' => 'Pode passar para a etapa seguinte', |
|
| 313 | + 'info_etape_suivante_2' => 'Pode passar para a etapa seguinte', |
|
| 314 | + 'info_exceptions_proxy' => 'Excepções para o proxy', |
|
| 315 | + 'info_exportation_base' => 'exportação da base para @archive@', |
|
| 316 | + 'info_facilite_suivi_activite' => 'A fim de facilitar o acompanhamento da actividade |
|
| 317 | 317 | editorial do sítio, SPIP pode fazer chegar por email, por exemplo |
| 318 | 318 | a uma <i>mailing-list</i> dos redactores, o anúncio dos pedidos de |
| 319 | 319 | publicação e das validações de artigos.', |
| 320 | - 'info_fichiers_authent' => 'Ficheiros de autenticação « .htpasswd »', |
|
| 321 | - 'info_forums_abo_invites' => 'O seu sítio contém fóruns por assinatura; os visitantes são convidados a registar-se no sítio público.', |
|
| 322 | - 'info_gauche_admin_tech' => '<b>Esta página está acessível apenas aos responsáveis pelo site.</b><p> Ela dá acesso às diferentes funções de manutenção técnica. Algumas dessas funções possuem um processo específico de autenticação que exige acesso FTP ao sítio.</p>', |
|
| 323 | - 'info_gauche_admin_vider' => '<b>Esta página é acessível apenas aos responsáveis pelo sítio.</b><p> Ela dá acesso às diferentes funções de manutenção técnica. Algumas dessas funções possuem um processo específico de autenticação que exige acesso FTP ao sítio web</p>', |
|
| 324 | - 'info_gauche_auteurs' => 'Encontrará aqui todos os autores do sítio. |
|
| 320 | + 'info_fichiers_authent' => 'Ficheiros de autenticação « .htpasswd »', |
|
| 321 | + 'info_forums_abo_invites' => 'O seu sítio contém fóruns por assinatura; os visitantes são convidados a registar-se no sítio público.', |
|
| 322 | + 'info_gauche_admin_tech' => '<b>Esta página está acessível apenas aos responsáveis pelo site.</b><p> Ela dá acesso às diferentes funções de manutenção técnica. Algumas dessas funções possuem um processo específico de autenticação que exige acesso FTP ao sítio.</p>', |
|
| 323 | + 'info_gauche_admin_vider' => '<b>Esta página é acessível apenas aos responsáveis pelo sítio.</b><p> Ela dá acesso às diferentes funções de manutenção técnica. Algumas dessas funções possuem um processo específico de autenticação que exige acesso FTP ao sítio web</p>', |
|
| 324 | + 'info_gauche_auteurs' => 'Encontrará aqui todos os autores do sítio. |
|
| 325 | 325 | Os estatuto dos autores é indicado pela cor dos ícones (administrador = verde; redactor = amarelo).', |
| 326 | - 'info_gauche_auteurs_exterieurs' => 'Os autores externos, sem acesso ao sítio, são indicados por um ícone azul; |
|
| 326 | + 'info_gauche_auteurs_exterieurs' => 'Os autores externos, sem acesso ao sítio, são indicados por um ícone azul; |
|
| 327 | 327 | os autores apagados, por um ícone cinzento.', |
| 328 | - 'info_gauche_messagerie' => 'A caixa de correio permite-lhe trocar mensagens entre redactores, conservar memorandos (para o seu uso pessoal) ou exibir anúncios na página de abertura do espaço privado (se for administrador).', |
|
| 329 | - 'info_gauche_statistiques_referers' => 'Esta página apresenta a lista dos <i>referers</i>, ou seja, dos sítios que contêm links para o seu sítio, unicamente para ontem e hoje; esta lista é actualizada a cada 24 horas.', |
|
| 330 | - 'info_gauche_visiteurs_enregistres' => 'Encontrará aqui os visitantes registados |
|
| 328 | + 'info_gauche_messagerie' => 'A caixa de correio permite-lhe trocar mensagens entre redactores, conservar memorandos (para o seu uso pessoal) ou exibir anúncios na página de abertura do espaço privado (se for administrador).', |
|
| 329 | + 'info_gauche_statistiques_referers' => 'Esta página apresenta a lista dos <i>referers</i>, ou seja, dos sítios que contêm links para o seu sítio, unicamente para ontem e hoje; esta lista é actualizada a cada 24 horas.', |
|
| 330 | + 'info_gauche_visiteurs_enregistres' => 'Encontrará aqui os visitantes registados |
|
| 331 | 331 | no espaço público do sítio (fóruns por assinatura).', |
| 332 | - 'info_generation_miniatures_images' => 'Geração de miniaturas das imagens', |
|
| 333 | - 'info_gerer_trad_objets' => '@objets@ : gerir as ligações de tradução', |
|
| 334 | - 'info_hebergeur_desactiver_envoi_email' => 'Alguns serviços de hospedagem desactivam o envio automático de |
|
| 332 | + 'info_generation_miniatures_images' => 'Geração de miniaturas das imagens', |
|
| 333 | + 'info_gerer_trad_objets' => '@objets@ : gerir as ligações de tradução', |
|
| 334 | + 'info_hebergeur_desactiver_envoi_email' => 'Alguns serviços de hospedagem desactivam o envio automático de |
|
| 335 | 335 | e-mails a partir dos seus servidores. Nesse caso, as seguintes |
| 336 | 336 | funcionalidades de SPIP não funcionarão.', |
| 337 | - 'info_hier' => 'ontem :', |
|
| 338 | - 'info_identification_publique' => 'A sua identidade pública...', |
|
| 339 | - 'info_image_process' => 'Seleccione o melhor método para criar as vinhetas clicando sobre a imagem correspondente.', |
|
| 340 | - 'info_image_process2' => '<b>N.B.</b> <i> Se nenhuma imagem aparece, então o servidor que alberga o seu sítio não foi configurado para utilizar tais ferramentas. Se deseja utilizar essas funções, contacte o responsavel técnico e peça as extensões «GD» ou «Imagick».</i>', |
|
| 341 | - 'info_images_auto' => 'Imagens calculadas automaticamente', |
|
| 342 | - 'info_informations_personnelles' => 'Quinta etapa : <b>Informações pessoais<b>', |
|
| 343 | - 'info_inscription' => 'Inscrição em ', |
|
| 344 | - 'info_inscription_automatique' => 'Inscrição automática de novos redactores', |
|
| 345 | - 'info_jeu_caractere' => 'Conjunto de caracteres do sítio', |
|
| 346 | - 'info_jours' => 'dias', |
|
| 347 | - 'info_laisser_champs_vides' => 'deixar estes campos vazios)', |
|
| 348 | - 'info_langues' => 'Idiomas do sítio', |
|
| 349 | - 'info_ldap_ok' => 'A autenticação LDAP está instalada.', |
|
| 350 | - 'info_lien_hypertexte' => 'Hiperligação :', |
|
| 351 | - 'info_liste_nouveautes_envoyee' => 'A lista de novidades foi enviada.', |
|
| 352 | - 'info_liste_redacteurs_connectes' => 'Lista dos redactores ligados', |
|
| 353 | - 'info_login_existant' => 'Este login já existe.', |
|
| 354 | - 'info_login_trop_court' => 'Login demasiado curto.', |
|
| 355 | - 'info_login_trop_court_car_pluriel' => 'O login deve conter pelo menos @nb@ caracteres.', |
|
| 356 | - 'info_logos' => 'Os logos', |
|
| 357 | - 'info_maximum' => 'máximo :', |
|
| 358 | - 'info_meme_rubrique' => 'Na mesma rubrica', |
|
| 359 | - 'info_message_en_redaction' => 'As suas mensagens em rascunho', |
|
| 360 | - 'info_message_technique' => 'Mensagem técnica:', |
|
| 361 | - 'info_messagerie_interne' => 'Correio interno', |
|
| 362 | - 'info_mise_a_niveau_base' => 'melhoramento da sua base de dados SQL', |
|
| 363 | - 'info_mise_a_niveau_base_2' => '{{Atenção!}} Instalou uma versão |
|
| 337 | + 'info_hier' => 'ontem :', |
|
| 338 | + 'info_identification_publique' => 'A sua identidade pública...', |
|
| 339 | + 'info_image_process' => 'Seleccione o melhor método para criar as vinhetas clicando sobre a imagem correspondente.', |
|
| 340 | + 'info_image_process2' => '<b>N.B.</b> <i> Se nenhuma imagem aparece, então o servidor que alberga o seu sítio não foi configurado para utilizar tais ferramentas. Se deseja utilizar essas funções, contacte o responsavel técnico e peça as extensões «GD» ou «Imagick».</i>', |
|
| 341 | + 'info_images_auto' => 'Imagens calculadas automaticamente', |
|
| 342 | + 'info_informations_personnelles' => 'Quinta etapa : <b>Informações pessoais<b>', |
|
| 343 | + 'info_inscription' => 'Inscrição em ', |
|
| 344 | + 'info_inscription_automatique' => 'Inscrição automática de novos redactores', |
|
| 345 | + 'info_jeu_caractere' => 'Conjunto de caracteres do sítio', |
|
| 346 | + 'info_jours' => 'dias', |
|
| 347 | + 'info_laisser_champs_vides' => 'deixar estes campos vazios)', |
|
| 348 | + 'info_langues' => 'Idiomas do sítio', |
|
| 349 | + 'info_ldap_ok' => 'A autenticação LDAP está instalada.', |
|
| 350 | + 'info_lien_hypertexte' => 'Hiperligação :', |
|
| 351 | + 'info_liste_nouveautes_envoyee' => 'A lista de novidades foi enviada.', |
|
| 352 | + 'info_liste_redacteurs_connectes' => 'Lista dos redactores ligados', |
|
| 353 | + 'info_login_existant' => 'Este login já existe.', |
|
| 354 | + 'info_login_trop_court' => 'Login demasiado curto.', |
|
| 355 | + 'info_login_trop_court_car_pluriel' => 'O login deve conter pelo menos @nb@ caracteres.', |
|
| 356 | + 'info_logos' => 'Os logos', |
|
| 357 | + 'info_maximum' => 'máximo :', |
|
| 358 | + 'info_meme_rubrique' => 'Na mesma rubrica', |
|
| 359 | + 'info_message_en_redaction' => 'As suas mensagens em rascunho', |
|
| 360 | + 'info_message_technique' => 'Mensagem técnica:', |
|
| 361 | + 'info_messagerie_interne' => 'Correio interno', |
|
| 362 | + 'info_mise_a_niveau_base' => 'melhoramento da sua base de dados SQL', |
|
| 363 | + 'info_mise_a_niveau_base_2' => '{{Atenção!}} Instalou uma versão |
|
| 364 | 364 | dos ficheiros SPIP {anterior} à que se encontrava |
| 365 | 365 | antes neste sítio: a sua base de dados corre o risco de se perder |
| 366 | 366 | e o seu sítio já não funcionará .<br />{{Re-instalar os |
| 367 | 367 | ficheiros de SPIP.}}', |
| 368 | - 'info_modification_enregistree' => 'As suas modificações foram guardadas', |
|
| 369 | - 'info_modifier_auteur' => 'Modifcar o autor :', |
|
| 370 | - 'info_modifier_rubrique' => 'Modificar a rubrica :', |
|
| 371 | - 'info_modifier_titre' => 'Modificar : @titre@', |
|
| 372 | - 'info_mon_site_spip' => 'O meu sítio SPIP', |
|
| 373 | - 'info_moyenne' => 'média :', |
|
| 374 | - 'info_multi_cet_article' => 'Idioma deste artigo :', |
|
| 375 | - 'info_multi_langues_choisies' => 'Por favor seleccione a seguir os idiomas à disposição dos redactores do seu sítio. |
|
| 368 | + 'info_modification_enregistree' => 'As suas modificações foram guardadas', |
|
| 369 | + 'info_modifier_auteur' => 'Modifcar o autor :', |
|
| 370 | + 'info_modifier_rubrique' => 'Modificar a rubrica :', |
|
| 371 | + 'info_modifier_titre' => 'Modificar : @titre@', |
|
| 372 | + 'info_mon_site_spip' => 'O meu sítio SPIP', |
|
| 373 | + 'info_moyenne' => 'média :', |
|
| 374 | + 'info_multi_cet_article' => 'Idioma deste artigo :', |
|
| 375 | + 'info_multi_langues_choisies' => 'Por favor seleccione a seguir os idiomas à disposição dos redactores do seu sítio. |
|
| 376 | 376 | Os idiomas já utilizados no seu sítio (exibidos em primeiro lugar) não podem ser desactivados.', |
| 377 | - 'info_multi_objets' => '@objets@ : activar o menu de idioma', |
|
| 378 | - 'info_multi_secteurs' => '... só para as rubricas situadas na raíz ?', |
|
| 379 | - 'info_nb_articles' => '@nb@ artigos', |
|
| 380 | - 'info_nb_auteurs' => '@nb@ autores', |
|
| 381 | - 'info_nb_messages' => '@nb@ mensagens', |
|
| 382 | - 'info_nb_mots_cles' => '@nb@ palavras-chave', |
|
| 383 | - 'info_nb_rubriques' => '@nb@ rubricas', |
|
| 384 | - 'info_nb_visiteurs' => '@nb@ visitantes', |
|
| 385 | - 'info_nom' => 'Nome', |
|
| 386 | - 'info_nom_destinataire' => 'Nome do destinatário', |
|
| 387 | - 'info_nom_pas_conforme' => 'as tags html não são autorizadas', |
|
| 388 | - 'info_nom_site' => 'Nome do seu sítio', |
|
| 389 | - 'info_nombre_articles' => '@nb_articles@ artigos,', |
|
| 390 | - 'info_nombre_rubriques' => '@nb_rubriques@ rubricas,', |
|
| 391 | - 'info_nombre_sites' => '@nb_sites@ sítios,', |
|
| 392 | - 'info_non_deplacer' => 'Não deslocar...', |
|
| 393 | - 'info_non_envoi_annonce_dernieres_nouveautes' => 'SPIP pode enviar regularmente o anúncio das últimas novidades do sítio |
|
| 377 | + 'info_multi_objets' => '@objets@ : activar o menu de idioma', |
|
| 378 | + 'info_multi_secteurs' => '... só para as rubricas situadas na raíz ?', |
|
| 379 | + 'info_nb_articles' => '@nb@ artigos', |
|
| 380 | + 'info_nb_auteurs' => '@nb@ autores', |
|
| 381 | + 'info_nb_messages' => '@nb@ mensagens', |
|
| 382 | + 'info_nb_mots_cles' => '@nb@ palavras-chave', |
|
| 383 | + 'info_nb_rubriques' => '@nb@ rubricas', |
|
| 384 | + 'info_nb_visiteurs' => '@nb@ visitantes', |
|
| 385 | + 'info_nom' => 'Nome', |
|
| 386 | + 'info_nom_destinataire' => 'Nome do destinatário', |
|
| 387 | + 'info_nom_pas_conforme' => 'as tags html não são autorizadas', |
|
| 388 | + 'info_nom_site' => 'Nome do seu sítio', |
|
| 389 | + 'info_nombre_articles' => '@nb_articles@ artigos,', |
|
| 390 | + 'info_nombre_rubriques' => '@nb_rubriques@ rubricas,', |
|
| 391 | + 'info_nombre_sites' => '@nb_sites@ sítios,', |
|
| 392 | + 'info_non_deplacer' => 'Não deslocar...', |
|
| 393 | + 'info_non_envoi_annonce_dernieres_nouveautes' => 'SPIP pode enviar regularmente o anúncio das últimas novidades do sítio |
|
| 394 | 394 | (artigos e notícias recentemente publicados).', |
| 395 | - 'info_non_envoi_liste_nouveautes' => 'Não enviar a lista das novidades', |
|
| 396 | - 'info_non_modifiable' => 'não pode ser modificado', |
|
| 397 | - 'info_non_suppression_mot_cle' => 'Não quero suprimir esta palavra-chave.', |
|
| 398 | - 'info_notes' => 'Notas', |
|
| 399 | - 'info_nouvel_article' => 'Novo artigo', |
|
| 400 | - 'info_nouvelle_traduction' => 'Nova tradução :', |
|
| 401 | - 'info_numero_article' => 'ARTIGO NÚMERO :', |
|
| 402 | - 'info_obligatoire_02' => '(obrigatório)', |
|
| 403 | - 'info_option_accepter_visiteurs' => 'Aceitar a inscrição de visitantes do sítio público', |
|
| 404 | - 'info_option_ne_pas_accepter_visiteurs' => 'Recusar a inscrição de visitantes', |
|
| 405 | - 'info_options_avancees' => 'OPÇÕES AVANÇADAS', |
|
| 406 | - 'info_ou' => 'ou...', |
|
| 407 | - 'info_page_interdite' => 'Página proibida', |
|
| 408 | - 'info_par_nom' => 'por nome', |
|
| 409 | - 'info_par_nombre_article' => 'por número de artigos', |
|
| 410 | - 'info_par_statut' => 'por estado', |
|
| 411 | - 'info_par_tri' => '’(por @tri@)’', |
|
| 412 | - 'info_passe_trop_court' => 'Palavra-passe demasiado curta.', |
|
| 413 | - 'info_passe_trop_court_car_pluriel' => 'A palavra-passe deve conter pelo menos @nb@ caracteres.', |
|
| 414 | - 'info_passes_identiques' => 'As duas palavras-passe não são idênticas.', |
|
| 415 | - 'info_plus_cinq_car' => 'mais de 5 caracteres', |
|
| 416 | - 'info_plus_cinq_car_2' => '(Mais de 5 caracteres)', |
|
| 417 | - 'info_plus_trois_car' => '(Mais de 3 caracteres)', |
|
| 418 | - 'info_popularite' => 'popularidade : @popularite@ ; visitas : @visites@', |
|
| 419 | - 'info_post_scriptum' => 'Post-Scriptum', |
|
| 420 | - 'info_post_scriptum_2' => 'Post-scriptum :', |
|
| 421 | - 'info_pour' => 'para', |
|
| 422 | - 'info_preview_texte' => 'É possível visualizar os vários elementos editoriais do site que têm pelo menos o estatuto "proposto", bem como os artigos em processo de escrita dos quais se é o autor. Esta funcionalidade deve estar disponível para administradores, editores ou para ninguém?', |
|
| 423 | - 'info_procedez_par_etape' => 'proceder etapa por etapa', |
|
| 424 | - 'info_procedure_maj_version' => 'o procedimento de actualização deve ser lançado para adaptar |
|
| 395 | + 'info_non_envoi_liste_nouveautes' => 'Não enviar a lista das novidades', |
|
| 396 | + 'info_non_modifiable' => 'não pode ser modificado', |
|
| 397 | + 'info_non_suppression_mot_cle' => 'Não quero suprimir esta palavra-chave.', |
|
| 398 | + 'info_notes' => 'Notas', |
|
| 399 | + 'info_nouvel_article' => 'Novo artigo', |
|
| 400 | + 'info_nouvelle_traduction' => 'Nova tradução :', |
|
| 401 | + 'info_numero_article' => 'ARTIGO NÚMERO :', |
|
| 402 | + 'info_obligatoire_02' => '(obrigatório)', |
|
| 403 | + 'info_option_accepter_visiteurs' => 'Aceitar a inscrição de visitantes do sítio público', |
|
| 404 | + 'info_option_ne_pas_accepter_visiteurs' => 'Recusar a inscrição de visitantes', |
|
| 405 | + 'info_options_avancees' => 'OPÇÕES AVANÇADAS', |
|
| 406 | + 'info_ou' => 'ou...', |
|
| 407 | + 'info_page_interdite' => 'Página proibida', |
|
| 408 | + 'info_par_nom' => 'por nome', |
|
| 409 | + 'info_par_nombre_article' => 'por número de artigos', |
|
| 410 | + 'info_par_statut' => 'por estado', |
|
| 411 | + 'info_par_tri' => '’(por @tri@)’', |
|
| 412 | + 'info_passe_trop_court' => 'Palavra-passe demasiado curta.', |
|
| 413 | + 'info_passe_trop_court_car_pluriel' => 'A palavra-passe deve conter pelo menos @nb@ caracteres.', |
|
| 414 | + 'info_passes_identiques' => 'As duas palavras-passe não são idênticas.', |
|
| 415 | + 'info_plus_cinq_car' => 'mais de 5 caracteres', |
|
| 416 | + 'info_plus_cinq_car_2' => '(Mais de 5 caracteres)', |
|
| 417 | + 'info_plus_trois_car' => '(Mais de 3 caracteres)', |
|
| 418 | + 'info_popularite' => 'popularidade : @popularite@ ; visitas : @visites@', |
|
| 419 | + 'info_post_scriptum' => 'Post-Scriptum', |
|
| 420 | + 'info_post_scriptum_2' => 'Post-scriptum :', |
|
| 421 | + 'info_pour' => 'para', |
|
| 422 | + 'info_preview_texte' => 'É possível visualizar os vários elementos editoriais do site que têm pelo menos o estatuto "proposto", bem como os artigos em processo de escrita dos quais se é o autor. Esta funcionalidade deve estar disponível para administradores, editores ou para ninguém?', |
|
| 423 | + 'info_procedez_par_etape' => 'proceder etapa por etapa', |
|
| 424 | + 'info_procedure_maj_version' => 'o procedimento de actualização deve ser lançado para adaptar |
|
| 425 | 425 | a base de dados à nova versão de SPIP.', |
| 426 | - 'info_proxy_ok' => 'Proxy testado com sucesso.', |
|
| 427 | - 'info_ps' => 'P.S.', |
|
| 428 | - 'info_publier' => 'publicar', |
|
| 429 | - 'info_publies' => 'Os seus artigos publicados online', |
|
| 430 | - 'info_question_accepter_visiteurs' => 'Se os parâmetros do seu site prevêem o registo de visitantes sem acesso ao espaço privado, por favor, active a opção abaixo:', |
|
| 431 | - 'info_question_inscription_nouveaux_redacteurs' => 'Aceita as inscrições de novos redactores a |
|
| 426 | + 'info_proxy_ok' => 'Proxy testado com sucesso.', |
|
| 427 | + 'info_ps' => 'P.S.', |
|
| 428 | + 'info_publier' => 'publicar', |
|
| 429 | + 'info_publies' => 'Os seus artigos publicados online', |
|
| 430 | + 'info_question_accepter_visiteurs' => 'Se os parâmetros do seu site prevêem o registo de visitantes sem acesso ao espaço privado, por favor, active a opção abaixo:', |
|
| 431 | + 'info_question_inscription_nouveaux_redacteurs' => 'Aceita as inscrições de novos redactores a |
|
| 432 | 432 | partir do sítio público? Se aceitar, os visitantes poderão inscrever-se |
| 433 | 433 | a partir de um formulário automatizado e acederão então ao espaço privado para |
| 434 | 434 | propor os seus próprios artigos. <blockquote><i>Durante a fase de inscrição, os utilizadores recebem um e-mail automático |
| 435 | 435 | fornecendo-lhes os seus códigos de acesso ao sítio privado. Alguns |
| 436 | 436 | serviços de hospedagem desactivam o envio de e-mails a partir dos seus |
| 437 | 437 | servidores: nesse caso, a inscrição automática é impossível.', |
| 438 | - 'info_qui_edite' => '@nom_auteur_modif@ modificou o conteúdo há @date_diff@ minutos', |
|
| 439 | - 'info_racine_site' => 'Raiz do sítio', |
|
| 440 | - 'info_recharger_page' => 'Por favor volte a carregar esta página daqui a pouco.', |
|
| 441 | - 'info_recherche_auteur_zero' => 'Nenhum resultado para "@cherche_auteur@".', |
|
| 442 | - 'info_recommencer' => 'Por favor tente de novo.', |
|
| 443 | - 'info_redacteur_1' => 'Redactor', |
|
| 444 | - 'info_redacteur_2' => 'tendo acesso ao espaço privado(<i>recomendado</i>)', |
|
| 445 | - 'info_redacteurs' => 'Redactores', |
|
| 446 | - 'info_redaction_en_cours' => 'EM CURSO DE REDACÇÃO', |
|
| 447 | - 'info_redirection' => 'Redirigir', |
|
| 448 | - 'info_redirection_activee' => 'O redireccionamento está activado.', |
|
| 449 | - 'info_redirection_boucle' => 'Está a tentar redireccionar o artigo para este mesmo artigo.', |
|
| 450 | - 'info_redirection_desactivee' => 'O redireccionamento foi eliminado.', |
|
| 451 | - 'info_refuses' => 'Os seus artigos recusados', |
|
| 452 | - 'info_reglage_ldap' => 'Opções : <b>Acerto da importação LDAP</b>', |
|
| 453 | - 'info_renvoi_article' => '<b>Redireccionar.</b> Este artigo remete para a página:', |
|
| 454 | - 'info_reserve_admin' => 'Só os administradores podem modificar este endereço.', |
|
| 455 | - 'info_restreindre_rubrique' => 'Limitar a gestão à rubrica : ', |
|
| 456 | - 'info_resultat_recherche' => 'Resultados da pesquisa ;', |
|
| 457 | - 'info_rubriques' => 'Rubricas', |
|
| 458 | - 'info_rubriques_02' => 'rubricas', |
|
| 459 | - 'info_rubriques_trouvees' => 'Rubricas encontradas', |
|
| 460 | - 'info_sans_titre' => 'Sem título', |
|
| 461 | - 'info_selection_chemin_acces' => '<b>Seleccione</b> a seguir o caminho de acesso no anuário :', |
|
| 462 | - 'info_signatures' => 'assinaturas', |
|
| 463 | - 'info_site' => 'Sítio', |
|
| 464 | - 'info_site_2' => 'sítio :', |
|
| 465 | - 'info_site_min' => 'sítio', |
|
| 466 | - 'info_site_reference_2' => 'Sítio referenciado', |
|
| 467 | - 'info_site_web' => 'Sítio web :', |
|
| 468 | - 'info_sites' => 'sítios', |
|
| 469 | - 'info_sites_lies_mot' => 'Os sítios referenciados ligados a esta palavra-chave', |
|
| 470 | - 'info_sites_proxy' => 'Utilizar um proxy', |
|
| 471 | - 'info_sites_trouves' => 'Sítios encontrados', |
|
| 472 | - 'info_sous_titre' => 'Sub-título :', |
|
| 473 | - 'info_statut_administrateur' => 'Administrador', |
|
| 474 | - 'info_statut_auteur' => 'Estatuto deste autor :', |
|
| 475 | - 'info_statut_auteur_2' => 'Eu sou', |
|
| 476 | - 'info_statut_auteur_a_confirmer' => 'Registo a confirmar', |
|
| 477 | - 'info_statut_auteur_autre' => 'Outro estado:', |
|
| 478 | - 'info_statut_redacteur' => 'Redactor', |
|
| 479 | - 'info_statut_utilisateurs_1' => 'Estatuto por defeito dos utilizadores importados', |
|
| 480 | - 'info_statut_utilisateurs_2' => 'Escolha o estatuto atribuído às pessoas presentes no anuário LDAP quando elas se ligam pela primeira vez. Poderá depois modificar este valor para cada autor, caso a caso.', |
|
| 481 | - 'info_suivi_activite' => 'Acompanhamento da actividade editorial', |
|
| 482 | - 'info_surtitre' => 'Antetítulo', |
|
| 483 | - 'info_syndication_integrale_1' => 'O seu sítio propõe os ficheiros redifundidos (ver « <a href="@url@">@titre@</a> »).', |
|
| 484 | - 'info_syndication_integrale_2' => 'Deseja enviar os artigos completos ou apenas um resumo de algumas centenas de caracteres?', |
|
| 485 | - 'info_table_prefix' => 'Pode modificar o prefixo do nome das tabelas das bases de dados. (Precisa de o fazer se estiver a instalar vários sítios na mesma base de dados.) O prefixo tem de ser escrito sem acentos, em minúsculas e sem espaços.', |
|
| 486 | - 'info_taille_maximale_images' => 'SPIP testará o tamanho máximo de imagem que pode processar (em milhões de pixels).<br /> As imagens maiores não serão reduzidas.', |
|
| 487 | - 'info_taille_maximale_vignette' => 'Tamanho máximo das vinhetas geradas pelo sistema :', |
|
| 488 | - 'info_terminer_installation' => 'Pode agora acabar o procedimento de instalação tipo.', |
|
| 489 | - 'info_texte' => 'Texto', |
|
| 490 | - 'info_texte_explicatif' => 'Texto explicativo', |
|
| 491 | - 'info_texte_long' => '(o texto é comprido : aparece, por isso, em muitas partes que serão coladas depois da validação.)', |
|
| 492 | - 'info_texte_message' => 'Texto da sua mensagem :', |
|
| 493 | - 'info_texte_message_02' => 'Texto da mensagem', |
|
| 494 | - 'info_titre' => 'Título :', |
|
| 495 | - 'info_total' => 'total :', |
|
| 496 | - 'info_tous_articles_en_redaction' => 'Todos os artgos em curso de redacção', |
|
| 497 | - 'info_tous_articles_presents' => 'Todos os artigos publicados nesta rubrica', |
|
| 498 | - 'info_tous_articles_refuses' => 'Todos os artigos rejeitados', |
|
| 499 | - 'info_tous_les' => 'todos os', |
|
| 500 | - 'info_tout_site' => 'Todo o sítio', |
|
| 501 | - 'info_tout_site2' => 'O artigo não está traduzido neste idioma.', |
|
| 502 | - 'info_tout_site3' => 'O artigo foi traduzido neste idioma, mas foram feitas modificações ao artigo original. A tradução necessita ser actualizada.', |
|
| 503 | - 'info_tout_site4' => 'O artigo foi traduzido neste idioma e a tradução está actual.', |
|
| 504 | - 'info_tout_site5' => 'Artigo original.', |
|
| 505 | - 'info_tout_site6' => '<b>Atenção:</b> só os artigos originais são mostrados. |
|
| 438 | + 'info_qui_edite' => '@nom_auteur_modif@ modificou o conteúdo há @date_diff@ minutos', |
|
| 439 | + 'info_racine_site' => 'Raiz do sítio', |
|
| 440 | + 'info_recharger_page' => 'Por favor volte a carregar esta página daqui a pouco.', |
|
| 441 | + 'info_recherche_auteur_zero' => 'Nenhum resultado para "@cherche_auteur@".', |
|
| 442 | + 'info_recommencer' => 'Por favor tente de novo.', |
|
| 443 | + 'info_redacteur_1' => 'Redactor', |
|
| 444 | + 'info_redacteur_2' => 'tendo acesso ao espaço privado(<i>recomendado</i>)', |
|
| 445 | + 'info_redacteurs' => 'Redactores', |
|
| 446 | + 'info_redaction_en_cours' => 'EM CURSO DE REDACÇÃO', |
|
| 447 | + 'info_redirection' => 'Redirigir', |
|
| 448 | + 'info_redirection_activee' => 'O redireccionamento está activado.', |
|
| 449 | + 'info_redirection_boucle' => 'Está a tentar redireccionar o artigo para este mesmo artigo.', |
|
| 450 | + 'info_redirection_desactivee' => 'O redireccionamento foi eliminado.', |
|
| 451 | + 'info_refuses' => 'Os seus artigos recusados', |
|
| 452 | + 'info_reglage_ldap' => 'Opções : <b>Acerto da importação LDAP</b>', |
|
| 453 | + 'info_renvoi_article' => '<b>Redireccionar.</b> Este artigo remete para a página:', |
|
| 454 | + 'info_reserve_admin' => 'Só os administradores podem modificar este endereço.', |
|
| 455 | + 'info_restreindre_rubrique' => 'Limitar a gestão à rubrica : ', |
|
| 456 | + 'info_resultat_recherche' => 'Resultados da pesquisa ;', |
|
| 457 | + 'info_rubriques' => 'Rubricas', |
|
| 458 | + 'info_rubriques_02' => 'rubricas', |
|
| 459 | + 'info_rubriques_trouvees' => 'Rubricas encontradas', |
|
| 460 | + 'info_sans_titre' => 'Sem título', |
|
| 461 | + 'info_selection_chemin_acces' => '<b>Seleccione</b> a seguir o caminho de acesso no anuário :', |
|
| 462 | + 'info_signatures' => 'assinaturas', |
|
| 463 | + 'info_site' => 'Sítio', |
|
| 464 | + 'info_site_2' => 'sítio :', |
|
| 465 | + 'info_site_min' => 'sítio', |
|
| 466 | + 'info_site_reference_2' => 'Sítio referenciado', |
|
| 467 | + 'info_site_web' => 'Sítio web :', |
|
| 468 | + 'info_sites' => 'sítios', |
|
| 469 | + 'info_sites_lies_mot' => 'Os sítios referenciados ligados a esta palavra-chave', |
|
| 470 | + 'info_sites_proxy' => 'Utilizar um proxy', |
|
| 471 | + 'info_sites_trouves' => 'Sítios encontrados', |
|
| 472 | + 'info_sous_titre' => 'Sub-título :', |
|
| 473 | + 'info_statut_administrateur' => 'Administrador', |
|
| 474 | + 'info_statut_auteur' => 'Estatuto deste autor :', |
|
| 475 | + 'info_statut_auteur_2' => 'Eu sou', |
|
| 476 | + 'info_statut_auteur_a_confirmer' => 'Registo a confirmar', |
|
| 477 | + 'info_statut_auteur_autre' => 'Outro estado:', |
|
| 478 | + 'info_statut_redacteur' => 'Redactor', |
|
| 479 | + 'info_statut_utilisateurs_1' => 'Estatuto por defeito dos utilizadores importados', |
|
| 480 | + 'info_statut_utilisateurs_2' => 'Escolha o estatuto atribuído às pessoas presentes no anuário LDAP quando elas se ligam pela primeira vez. Poderá depois modificar este valor para cada autor, caso a caso.', |
|
| 481 | + 'info_suivi_activite' => 'Acompanhamento da actividade editorial', |
|
| 482 | + 'info_surtitre' => 'Antetítulo', |
|
| 483 | + 'info_syndication_integrale_1' => 'O seu sítio propõe os ficheiros redifundidos (ver « <a href="@url@">@titre@</a> »).', |
|
| 484 | + 'info_syndication_integrale_2' => 'Deseja enviar os artigos completos ou apenas um resumo de algumas centenas de caracteres?', |
|
| 485 | + 'info_table_prefix' => 'Pode modificar o prefixo do nome das tabelas das bases de dados. (Precisa de o fazer se estiver a instalar vários sítios na mesma base de dados.) O prefixo tem de ser escrito sem acentos, em minúsculas e sem espaços.', |
|
| 486 | + 'info_taille_maximale_images' => 'SPIP testará o tamanho máximo de imagem que pode processar (em milhões de pixels).<br /> As imagens maiores não serão reduzidas.', |
|
| 487 | + 'info_taille_maximale_vignette' => 'Tamanho máximo das vinhetas geradas pelo sistema :', |
|
| 488 | + 'info_terminer_installation' => 'Pode agora acabar o procedimento de instalação tipo.', |
|
| 489 | + 'info_texte' => 'Texto', |
|
| 490 | + 'info_texte_explicatif' => 'Texto explicativo', |
|
| 491 | + 'info_texte_long' => '(o texto é comprido : aparece, por isso, em muitas partes que serão coladas depois da validação.)', |
|
| 492 | + 'info_texte_message' => 'Texto da sua mensagem :', |
|
| 493 | + 'info_texte_message_02' => 'Texto da mensagem', |
|
| 494 | + 'info_titre' => 'Título :', |
|
| 495 | + 'info_total' => 'total :', |
|
| 496 | + 'info_tous_articles_en_redaction' => 'Todos os artgos em curso de redacção', |
|
| 497 | + 'info_tous_articles_presents' => 'Todos os artigos publicados nesta rubrica', |
|
| 498 | + 'info_tous_articles_refuses' => 'Todos os artigos rejeitados', |
|
| 499 | + 'info_tous_les' => 'todos os', |
|
| 500 | + 'info_tout_site' => 'Todo o sítio', |
|
| 501 | + 'info_tout_site2' => 'O artigo não está traduzido neste idioma.', |
|
| 502 | + 'info_tout_site3' => 'O artigo foi traduzido neste idioma, mas foram feitas modificações ao artigo original. A tradução necessita ser actualizada.', |
|
| 503 | + 'info_tout_site4' => 'O artigo foi traduzido neste idioma e a tradução está actual.', |
|
| 504 | + 'info_tout_site5' => 'Artigo original.', |
|
| 505 | + 'info_tout_site6' => '<b>Atenção:</b> só os artigos originais são mostrados. |
|
| 506 | 506 | As traduções estão associadas ao original, |
| 507 | 507 | numa cor que indica o seu estado:', |
| 508 | - 'info_traductions' => 'Traduções', |
|
| 509 | - 'info_travail_colaboratif' => 'Trabalho colaborativo sobre os artigos', |
|
| 510 | - 'info_un_article' => 'um artigo', |
|
| 511 | - 'info_un_site' => 'um sítio', |
|
| 512 | - 'info_une_rubrique' => 'uma rubrica,', |
|
| 513 | - 'info_une_rubrique_02' => '1 rubrica', |
|
| 514 | - 'info_url' => 'URL :', |
|
| 515 | - 'info_url_proxy' => 'URL do proxy', |
|
| 516 | - 'info_url_proxy_pas_conforme' => 'o URL do proxy não é válido.', |
|
| 517 | - 'info_url_site_pas_conforme' => 'O URL do sítio não é válido', |
|
| 518 | - 'info_url_test_proxy' => 'URL de teste', |
|
| 519 | - 'info_urlref' => 'Ligação hipertexto :', |
|
| 520 | - 'info_utilisation_spip' => 'Pode começar agora a utilizar o sistema de publicação assistida...', |
|
| 521 | - 'info_visites_par_mois' => 'Exibição por mês :', |
|
| 522 | - 'info_visiteur_1' => 'Visitante', |
|
| 523 | - 'info_visiteur_2' => 'do sítio público', |
|
| 524 | - 'info_visiteurs' => 'Visitantes', |
|
| 525 | - 'info_visiteurs_02' => 'Visitantes do sítio público', |
|
| 526 | - 'info_webmestre_forces' => 'Os webmasters são actualmente definidos em <tt>@file_options@</tt>.', |
|
| 527 | - 'install_adresse_base_hebergeur' => 'Endereço da base de dados atribuído pelo serviço de hospedagem', |
|
| 528 | - 'install_connect_ok' => 'A nova base de dados foi declarada usando o nome de servidor @connect@.', |
|
| 529 | - 'install_echec_annonce' => 'A instalação vai provavelmente falhar,ou criar um sítio não funcional', |
|
| 530 | - 'install_extension_mbstring' => 'O SPIP não funciona com :', |
|
| 531 | - 'install_extension_php_obligatoire' => 'O SPIP exige a extensão php :', |
|
| 532 | - 'install_login_base_hebergeur' => 'Login de ligação atribuído pelo serviço de hospedagem', |
|
| 533 | - 'install_nom_base_hebergeur' => 'Nome da base de dados atribuído pelo serviço de hospedagem:', |
|
| 534 | - 'install_pas_table' => 'A base de dados não tem tabelas', |
|
| 535 | - 'install_pass_base_hebergeur' => 'Palavra-passe atribuída pelo serviço de hospedagem', |
|
| 536 | - 'install_php_version' => 'Esta versão de PHP @version@ é demasiado curta (minimum = @minimum@)', |
|
| 537 | - 'install_select_langue' => 'Seleccione um idioma e depois clique no botão " seguinte " para lançar o procedimento de instalação.', |
|
| 538 | - 'install_select_type_db' => 'Indicar o tipo de base de dados :', |
|
| 539 | - 'install_select_type_mysql' => 'MySQL', |
|
| 540 | - 'install_select_type_pg' => 'PostgreSQL', |
|
| 541 | - 'install_select_type_sqlite2' => 'SQLite 2', |
|
| 542 | - 'install_select_type_sqlite3' => 'SQLite 3', |
|
| 543 | - 'install_serveur_hebergeur' => 'Servidor da base de dados atribuído pelo serviço de hospedagem', |
|
| 544 | - 'install_table_prefix_hebergeur' => 'Prefixo de tabela atribuído pelo serviço de hospedagem:', |
|
| 545 | - 'install_tables_base' => 'Tabelas da base de dados', |
|
| 546 | - 'install_types_db_connus' => 'SPIP pode usar <b>MySQL</b> (o mais comum), <b>PostgreSQL</b> e <b>SQLite</b>.', |
|
| 547 | - 'install_types_db_connus_avertissement' => 'O suporte de <b>PostgreSQL</b> está proposto a nível experimental', |
|
| 548 | - 'instituer_erreur_statut_a_change' => 'O estado já tinha sido modificado', |
|
| 549 | - 'instituer_erreur_statut_non_autorise' => 'Não pode seleccionar este estado', |
|
| 550 | - 'intem_redacteur' => 'redactor', |
|
| 551 | - 'intitule_licence' => 'Licença', |
|
| 552 | - 'item_accepter_inscriptions' => 'Aceitar as inscrições', |
|
| 553 | - 'item_activer_messages_avertissement' => 'Activar as mensagens de aviso', |
|
| 554 | - 'item_administrateur_2' => 'administrador', |
|
| 555 | - 'item_afficher_calendrier' => 'Exibir o calendário', |
|
| 556 | - 'item_autoriser_syndication_integrale' => 'Incluir artigos completos nos ficheiros de redifusão', |
|
| 557 | - 'item_choix_administrateurs' => 'os administradores', |
|
| 558 | - 'item_choix_generation_miniature' => 'Gerar automaticamente as miniaturas das imagens.', |
|
| 559 | - 'item_choix_non_generation_miniature' => 'Não gerar miniaturas das imagens.', |
|
| 560 | - 'item_choix_redacteurs' => 'os redactores', |
|
| 561 | - 'item_choix_visiteurs' => 'os visitadores do sítio público', |
|
| 562 | - 'item_creer_fichiers_authent' => 'Criar os ficheiros .htpasswd', |
|
| 563 | - 'item_login' => 'Login', |
|
| 564 | - 'item_messagerie_agenda' => 'Activar as mensagens e a agenda', |
|
| 565 | - 'item_mots_cles_association_articles' => 'aos artigos', |
|
| 566 | - 'item_mots_cles_association_rubriques' => 'às rubricas', |
|
| 567 | - 'item_mots_cles_association_sites' => 'aos sítios referenciados ou vinculados.', |
|
| 568 | - 'item_non' => 'Não', |
|
| 569 | - 'item_non_accepter_inscriptions' => 'Não aceitar as inscrições', |
|
| 570 | - 'item_non_activer_messages_avertissement' => 'Não há mensagens de aviso', |
|
| 571 | - 'item_non_afficher_calendrier' => 'Não exibir no calendário', |
|
| 572 | - 'item_non_autoriser_syndication_integrale' => 'Enviar apenas um resumo', |
|
| 573 | - 'item_non_creer_fichiers_authent' => 'Não criar estes ficheiros', |
|
| 574 | - 'item_non_messagerie_agenda' => 'Desactivar as mensagens e a agenda', |
|
| 575 | - 'item_non_publier_articles' => 'Não publicar os artigos antes da data de publicação fixada.', |
|
| 576 | - 'item_nouvel_auteur' => 'Novo autor', |
|
| 577 | - 'item_nouvelle_rubrique' => 'Nova rubrica', |
|
| 578 | - 'item_oui' => 'Sim', |
|
| 579 | - 'item_publier_articles' => 'Publicar os artigos, seja qual for a sua data de publicação.', |
|
| 580 | - 'item_reponse_article' => 'Resposta ao artigo', |
|
| 581 | - 'item_visiteur' => 'visitante', |
|
| 508 | + 'info_traductions' => 'Traduções', |
|
| 509 | + 'info_travail_colaboratif' => 'Trabalho colaborativo sobre os artigos', |
|
| 510 | + 'info_un_article' => 'um artigo', |
|
| 511 | + 'info_un_site' => 'um sítio', |
|
| 512 | + 'info_une_rubrique' => 'uma rubrica,', |
|
| 513 | + 'info_une_rubrique_02' => '1 rubrica', |
|
| 514 | + 'info_url' => 'URL :', |
|
| 515 | + 'info_url_proxy' => 'URL do proxy', |
|
| 516 | + 'info_url_proxy_pas_conforme' => 'o URL do proxy não é válido.', |
|
| 517 | + 'info_url_site_pas_conforme' => 'O URL do sítio não é válido', |
|
| 518 | + 'info_url_test_proxy' => 'URL de teste', |
|
| 519 | + 'info_urlref' => 'Ligação hipertexto :', |
|
| 520 | + 'info_utilisation_spip' => 'Pode começar agora a utilizar o sistema de publicação assistida...', |
|
| 521 | + 'info_visites_par_mois' => 'Exibição por mês :', |
|
| 522 | + 'info_visiteur_1' => 'Visitante', |
|
| 523 | + 'info_visiteur_2' => 'do sítio público', |
|
| 524 | + 'info_visiteurs' => 'Visitantes', |
|
| 525 | + 'info_visiteurs_02' => 'Visitantes do sítio público', |
|
| 526 | + 'info_webmestre_forces' => 'Os webmasters são actualmente definidos em <tt>@file_options@</tt>.', |
|
| 527 | + 'install_adresse_base_hebergeur' => 'Endereço da base de dados atribuído pelo serviço de hospedagem', |
|
| 528 | + 'install_connect_ok' => 'A nova base de dados foi declarada usando o nome de servidor @connect@.', |
|
| 529 | + 'install_echec_annonce' => 'A instalação vai provavelmente falhar,ou criar um sítio não funcional', |
|
| 530 | + 'install_extension_mbstring' => 'O SPIP não funciona com :', |
|
| 531 | + 'install_extension_php_obligatoire' => 'O SPIP exige a extensão php :', |
|
| 532 | + 'install_login_base_hebergeur' => 'Login de ligação atribuído pelo serviço de hospedagem', |
|
| 533 | + 'install_nom_base_hebergeur' => 'Nome da base de dados atribuído pelo serviço de hospedagem:', |
|
| 534 | + 'install_pas_table' => 'A base de dados não tem tabelas', |
|
| 535 | + 'install_pass_base_hebergeur' => 'Palavra-passe atribuída pelo serviço de hospedagem', |
|
| 536 | + 'install_php_version' => 'Esta versão de PHP @version@ é demasiado curta (minimum = @minimum@)', |
|
| 537 | + 'install_select_langue' => 'Seleccione um idioma e depois clique no botão " seguinte " para lançar o procedimento de instalação.', |
|
| 538 | + 'install_select_type_db' => 'Indicar o tipo de base de dados :', |
|
| 539 | + 'install_select_type_mysql' => 'MySQL', |
|
| 540 | + 'install_select_type_pg' => 'PostgreSQL', |
|
| 541 | + 'install_select_type_sqlite2' => 'SQLite 2', |
|
| 542 | + 'install_select_type_sqlite3' => 'SQLite 3', |
|
| 543 | + 'install_serveur_hebergeur' => 'Servidor da base de dados atribuído pelo serviço de hospedagem', |
|
| 544 | + 'install_table_prefix_hebergeur' => 'Prefixo de tabela atribuído pelo serviço de hospedagem:', |
|
| 545 | + 'install_tables_base' => 'Tabelas da base de dados', |
|
| 546 | + 'install_types_db_connus' => 'SPIP pode usar <b>MySQL</b> (o mais comum), <b>PostgreSQL</b> e <b>SQLite</b>.', |
|
| 547 | + 'install_types_db_connus_avertissement' => 'O suporte de <b>PostgreSQL</b> está proposto a nível experimental', |
|
| 548 | + 'instituer_erreur_statut_a_change' => 'O estado já tinha sido modificado', |
|
| 549 | + 'instituer_erreur_statut_non_autorise' => 'Não pode seleccionar este estado', |
|
| 550 | + 'intem_redacteur' => 'redactor', |
|
| 551 | + 'intitule_licence' => 'Licença', |
|
| 552 | + 'item_accepter_inscriptions' => 'Aceitar as inscrições', |
|
| 553 | + 'item_activer_messages_avertissement' => 'Activar as mensagens de aviso', |
|
| 554 | + 'item_administrateur_2' => 'administrador', |
|
| 555 | + 'item_afficher_calendrier' => 'Exibir o calendário', |
|
| 556 | + 'item_autoriser_syndication_integrale' => 'Incluir artigos completos nos ficheiros de redifusão', |
|
| 557 | + 'item_choix_administrateurs' => 'os administradores', |
|
| 558 | + 'item_choix_generation_miniature' => 'Gerar automaticamente as miniaturas das imagens.', |
|
| 559 | + 'item_choix_non_generation_miniature' => 'Não gerar miniaturas das imagens.', |
|
| 560 | + 'item_choix_redacteurs' => 'os redactores', |
|
| 561 | + 'item_choix_visiteurs' => 'os visitadores do sítio público', |
|
| 562 | + 'item_creer_fichiers_authent' => 'Criar os ficheiros .htpasswd', |
|
| 563 | + 'item_login' => 'Login', |
|
| 564 | + 'item_messagerie_agenda' => 'Activar as mensagens e a agenda', |
|
| 565 | + 'item_mots_cles_association_articles' => 'aos artigos', |
|
| 566 | + 'item_mots_cles_association_rubriques' => 'às rubricas', |
|
| 567 | + 'item_mots_cles_association_sites' => 'aos sítios referenciados ou vinculados.', |
|
| 568 | + 'item_non' => 'Não', |
|
| 569 | + 'item_non_accepter_inscriptions' => 'Não aceitar as inscrições', |
|
| 570 | + 'item_non_activer_messages_avertissement' => 'Não há mensagens de aviso', |
|
| 571 | + 'item_non_afficher_calendrier' => 'Não exibir no calendário', |
|
| 572 | + 'item_non_autoriser_syndication_integrale' => 'Enviar apenas um resumo', |
|
| 573 | + 'item_non_creer_fichiers_authent' => 'Não criar estes ficheiros', |
|
| 574 | + 'item_non_messagerie_agenda' => 'Desactivar as mensagens e a agenda', |
|
| 575 | + 'item_non_publier_articles' => 'Não publicar os artigos antes da data de publicação fixada.', |
|
| 576 | + 'item_nouvel_auteur' => 'Novo autor', |
|
| 577 | + 'item_nouvelle_rubrique' => 'Nova rubrica', |
|
| 578 | + 'item_oui' => 'Sim', |
|
| 579 | + 'item_publier_articles' => 'Publicar os artigos, seja qual for a sua data de publicação.', |
|
| 580 | + 'item_reponse_article' => 'Resposta ao artigo', |
|
| 581 | + 'item_visiteur' => 'visitante', |
|
| 582 | 582 | |
| 583 | - // J |
|
| 584 | - 'jour_non_connu_nc' => 'n.c.', |
|
| 583 | + // J |
|
| 584 | + 'jour_non_connu_nc' => 'n.c.', |
|
| 585 | 585 | |
| 586 | - // L |
|
| 587 | - 'label_bando_outils' => 'Barra de ferramentas', |
|
| 588 | - 'label_bando_outils_afficher' => 'Exibir as ferramentas', |
|
| 589 | - 'label_bando_outils_masquer' => 'Ocultar as ferramentas', |
|
| 590 | - 'label_choix_langue' => 'Seleccione o seu idioma', |
|
| 591 | - 'label_nom_fichier_connect' => 'Indique o nome para este servidor', |
|
| 592 | - 'label_slogan_site' => 'Slogan do sítio', |
|
| 593 | - 'label_taille_ecran' => 'Largura do ecrã', |
|
| 594 | - 'label_texte_et_icones_navigation' => 'Menu de navegação', |
|
| 595 | - 'label_texte_et_icones_page' => 'Exibição da página', |
|
| 596 | - 'ldap_correspondance' => 'sucessão do campo @champ@', |
|
| 597 | - 'ldap_correspondance_1' => 'Sucessão dos campos LDAP', |
|
| 598 | - 'ldap_correspondance_2' => 'Para cada um destes campos SPIP, indique o nome do campo LDAP correspondente. Deixe em branco se não o deseja preenchido. Separe com espaços ou vírgulas, para tentar vários campos LDAP.', |
|
| 599 | - 'lien_ajouter_auteur' => 'Acrescentar este autor', |
|
| 600 | - 'lien_ajouter_une_rubrique' => 'Adicionar esta rubrica', |
|
| 601 | - 'lien_email' => 'email', |
|
| 602 | - 'lien_nom_site' => 'NOME DO SÍTIO', |
|
| 603 | - 'lien_rapide_contenu' => 'Ir para o conteúdo', |
|
| 604 | - 'lien_rapide_navigation' => 'Ir para a navegação', |
|
| 605 | - 'lien_rapide_recherche' => 'Ir para a pesquisa', |
|
| 606 | - 'lien_retirer_auteur' => 'Remover o autor', |
|
| 607 | - 'lien_retirer_rubrique' => 'Eliminar a rubrica', |
|
| 608 | - 'lien_retirer_tous_auteurs' => 'Eliminar todos os autores', |
|
| 609 | - 'lien_retirer_toutes_rubriques' => 'Remover todas as rubricas', |
|
| 610 | - 'lien_site' => 'sítio', |
|
| 611 | - 'lien_tout_decocher' => 'Desmarcar tudo', |
|
| 612 | - 'lien_tout_deplier' => 'Expandir tudo', |
|
| 613 | - 'lien_tout_replier' => 'Recolher tudo', |
|
| 614 | - 'lien_tout_supprimer' => 'Eliminar tudo', |
|
| 615 | - 'lien_trier_nom' => 'Seleccionar por nome', |
|
| 616 | - 'lien_trier_nombre_articles' => 'seleccionar por número de artgos', |
|
| 617 | - 'lien_trier_statut' => 'Seleccionar por estatuto', |
|
| 618 | - 'lien_voir_en_ligne' => 'VER EM LINHA', |
|
| 619 | - 'logo_article' => 'Logotipo do artigo', |
|
| 620 | - 'logo_auteur' => 'Logotipo do autor ', |
|
| 621 | - 'logo_rubrique' => 'Logotipo da rubrica', |
|
| 622 | - 'logo_site' => 'Logotipo deste sítio', |
|
| 623 | - 'logo_standard_rubrique' => 'Logotipo modelo das rubricas', |
|
| 624 | - 'logo_survol' => 'Logotipo "mouseover"', |
|
| 586 | + // L |
|
| 587 | + 'label_bando_outils' => 'Barra de ferramentas', |
|
| 588 | + 'label_bando_outils_afficher' => 'Exibir as ferramentas', |
|
| 589 | + 'label_bando_outils_masquer' => 'Ocultar as ferramentas', |
|
| 590 | + 'label_choix_langue' => 'Seleccione o seu idioma', |
|
| 591 | + 'label_nom_fichier_connect' => 'Indique o nome para este servidor', |
|
| 592 | + 'label_slogan_site' => 'Slogan do sítio', |
|
| 593 | + 'label_taille_ecran' => 'Largura do ecrã', |
|
| 594 | + 'label_texte_et_icones_navigation' => 'Menu de navegação', |
|
| 595 | + 'label_texte_et_icones_page' => 'Exibição da página', |
|
| 596 | + 'ldap_correspondance' => 'sucessão do campo @champ@', |
|
| 597 | + 'ldap_correspondance_1' => 'Sucessão dos campos LDAP', |
|
| 598 | + 'ldap_correspondance_2' => 'Para cada um destes campos SPIP, indique o nome do campo LDAP correspondente. Deixe em branco se não o deseja preenchido. Separe com espaços ou vírgulas, para tentar vários campos LDAP.', |
|
| 599 | + 'lien_ajouter_auteur' => 'Acrescentar este autor', |
|
| 600 | + 'lien_ajouter_une_rubrique' => 'Adicionar esta rubrica', |
|
| 601 | + 'lien_email' => 'email', |
|
| 602 | + 'lien_nom_site' => 'NOME DO SÍTIO', |
|
| 603 | + 'lien_rapide_contenu' => 'Ir para o conteúdo', |
|
| 604 | + 'lien_rapide_navigation' => 'Ir para a navegação', |
|
| 605 | + 'lien_rapide_recherche' => 'Ir para a pesquisa', |
|
| 606 | + 'lien_retirer_auteur' => 'Remover o autor', |
|
| 607 | + 'lien_retirer_rubrique' => 'Eliminar a rubrica', |
|
| 608 | + 'lien_retirer_tous_auteurs' => 'Eliminar todos os autores', |
|
| 609 | + 'lien_retirer_toutes_rubriques' => 'Remover todas as rubricas', |
|
| 610 | + 'lien_site' => 'sítio', |
|
| 611 | + 'lien_tout_decocher' => 'Desmarcar tudo', |
|
| 612 | + 'lien_tout_deplier' => 'Expandir tudo', |
|
| 613 | + 'lien_tout_replier' => 'Recolher tudo', |
|
| 614 | + 'lien_tout_supprimer' => 'Eliminar tudo', |
|
| 615 | + 'lien_trier_nom' => 'Seleccionar por nome', |
|
| 616 | + 'lien_trier_nombre_articles' => 'seleccionar por número de artgos', |
|
| 617 | + 'lien_trier_statut' => 'Seleccionar por estatuto', |
|
| 618 | + 'lien_voir_en_ligne' => 'VER EM LINHA', |
|
| 619 | + 'logo_article' => 'Logotipo do artigo', |
|
| 620 | + 'logo_auteur' => 'Logotipo do autor ', |
|
| 621 | + 'logo_rubrique' => 'Logotipo da rubrica', |
|
| 622 | + 'logo_site' => 'Logotipo deste sítio', |
|
| 623 | + 'logo_standard_rubrique' => 'Logotipo modelo das rubricas', |
|
| 624 | + 'logo_survol' => 'Logotipo "mouseover"', |
|
| 625 | 625 | |
| 626 | - // M |
|
| 627 | - 'menu_aide_installation_choix_base' => 'Escolha da sua base', |
|
| 628 | - 'module_fichier_langue' => 'Ficheiro de idioma', |
|
| 629 | - 'module_raccourci' => 'Atalhos', |
|
| 630 | - 'module_texte_affiche' => 'Texto exibido', |
|
| 631 | - 'module_texte_explicatif' => 'Pode inserir os seguintes atalhos nos esqueletos do seu sítio público. Serão automaticamente traduzidos para os vários idiomas nos quais há um ficheiro de idioma.', |
|
| 632 | - 'module_texte_traduction' => 'O ficheiro de idioma « @module@ » está disponível em :', |
|
| 633 | - 'mois_non_connu' => 'não conhecido', |
|
| 626 | + // M |
|
| 627 | + 'menu_aide_installation_choix_base' => 'Escolha da sua base', |
|
| 628 | + 'module_fichier_langue' => 'Ficheiro de idioma', |
|
| 629 | + 'module_raccourci' => 'Atalhos', |
|
| 630 | + 'module_texte_affiche' => 'Texto exibido', |
|
| 631 | + 'module_texte_explicatif' => 'Pode inserir os seguintes atalhos nos esqueletos do seu sítio público. Serão automaticamente traduzidos para os vários idiomas nos quais há um ficheiro de idioma.', |
|
| 632 | + 'module_texte_traduction' => 'O ficheiro de idioma « @module@ » está disponível em :', |
|
| 633 | + 'mois_non_connu' => 'não conhecido', |
|
| 634 | 634 | |
| 635 | - // N |
|
| 636 | - 'nouvelle_version_spip' => 'A versão @version@ de SPIP está disponível', |
|
| 637 | - 'nouvelle_version_spip_majeure' => 'Um novo SPIP @version@ está disponível', |
|
| 635 | + // N |
|
| 636 | + 'nouvelle_version_spip' => 'A versão @version@ de SPIP está disponível', |
|
| 637 | + 'nouvelle_version_spip_majeure' => 'Um novo SPIP @version@ está disponível', |
|
| 638 | 638 | |
| 639 | - // O |
|
| 640 | - 'onglet_contenu' => 'Conteúdo', |
|
| 641 | - 'onglet_declarer_une_autre_base' => 'Declarar outra base de dados', |
|
| 642 | - 'onglet_discuter' => 'Discussão', |
|
| 643 | - 'onglet_interactivite' => 'Interactividade', |
|
| 644 | - 'onglet_proprietes' => 'Propriedades', |
|
| 645 | - 'onglet_repartition_actuelle' => 'actualmente', |
|
| 646 | - 'onglet_sous_rubriques' => 'Sub-rubricas', |
|
| 639 | + // O |
|
| 640 | + 'onglet_contenu' => 'Conteúdo', |
|
| 641 | + 'onglet_declarer_une_autre_base' => 'Declarar outra base de dados', |
|
| 642 | + 'onglet_discuter' => 'Discussão', |
|
| 643 | + 'onglet_interactivite' => 'Interactividade', |
|
| 644 | + 'onglet_proprietes' => 'Propriedades', |
|
| 645 | + 'onglet_repartition_actuelle' => 'actualmente', |
|
| 646 | + 'onglet_sous_rubriques' => 'Sub-rubricas', |
|
| 647 | 647 | |
| 648 | - // P |
|
| 649 | - 'page_pas_proxy' => 'Esta página não deve passar através do proxy', |
|
| 650 | - 'pas_de_proxy_pour' => 'Se necessário, indique a que máquinas ou domínios este proxy não se deve aplicar (por exemplo : @exemple@)', |
|
| 651 | - 'phpinfo' => 'Configuração PHP', |
|
| 652 | - 'plugin_charge_paquet' => 'Carregamento do ficheiro @name@', |
|
| 653 | - 'plugin_charger' => 'Download', |
|
| 654 | - 'plugin_erreur_charger' => 'erro : impossível carregar @zip@', |
|
| 655 | - 'plugin_erreur_droit1' => 'Não pode escrever no directório <code>@dest@</code>.', |
|
| 656 | - 'plugin_erreur_droit2' => 'Por favor verifique as autorizações para este directório (e crie o directório se necessário). Alternativamente, instale os ficheiros por FTP.', |
|
| 657 | - 'plugin_erreur_zip' => 'falha pclzip : erro @status@', |
|
| 658 | - 'plugin_etat_developpement' => 'em desenvolvimento', |
|
| 659 | - 'plugin_etat_experimental' => 'experimental', |
|
| 660 | - 'plugin_etat_stable' => 'estável', |
|
| 661 | - 'plugin_etat_test' => 'em teste', |
|
| 662 | - 'plugin_impossible_activer' => 'Impossível activar o plugin @plugin@', |
|
| 663 | - 'plugin_info_automatique1' => 'Se deseja autorizar a instalação automática de plugins, por favor:', |
|
| 664 | - 'plugin_info_automatique1_lib' => 'Se deseja que a biblioteca seja instalada automaticamente, por favor:', |
|
| 665 | - 'plugin_info_automatique2' => 'criar um directório <code>@rep@</code> ;', |
|
| 666 | - 'plugin_info_automatique3' => 'Verifique se o servidor está autorizado a escrever neste directório.', |
|
| 667 | - 'plugin_info_automatique_creer' => 'a criar na raiz do sítio.', |
|
| 668 | - 'plugin_info_automatique_exemples' => 'exemplos:', |
|
| 669 | - 'plugin_info_automatique_ftp' => 'Pode instalar os plugins, por FTP, no directório <tt>@rep@</tt>', |
|
| 670 | - 'plugin_info_automatique_lib' => 'Alguns plugins precisam de estar aptos a carregar ficheiros no directório <code>lib/</code>. Este directório deve ser criado na raiz do sítio.', |
|
| 671 | - 'plugin_info_automatique_liste' => 'As suas listas de plugins :', |
|
| 672 | - 'plugin_info_automatique_liste_officielle' => 'os plugins oficiais', |
|
| 673 | - 'plugin_info_automatique_liste_update' => 'Actualizar as listas', |
|
| 674 | - 'plugin_info_automatique_ou' => 'ou...', |
|
| 675 | - 'plugin_info_automatique_select' => 'Seleccione um plugin abaixo: SPIP irá carregá-lo e instalá-lo no directório <code>@rep@</code>. Se o plugin já existir, será actualizado.', |
|
| 676 | - 'plugin_info_credit' => 'Créditos', |
|
| 677 | - 'plugin_info_erreur_xml' => 'A declaração do plugin está incorrecta', |
|
| 678 | - 'plugin_info_install_ok' => 'Instalado com sucesso', |
|
| 679 | - 'plugin_info_necessite' => 'Requer:', |
|
| 680 | - 'plugin_info_non_compatible_spip' => 'O plugin é incompatível com esta versão de SPIP', |
|
| 681 | - 'plugin_info_plugins_dist_1' => 'Os plugins seguintes estão carregados e activados no directório @plugins_dist@.', |
|
| 682 | - 'plugin_info_plugins_dist_2' => 'Não podem ser desactivados.', |
|
| 683 | - 'plugin_info_telecharger' => 'carregar de @url@ e instalar em @rep@', |
|
| 684 | - 'plugin_info_upgrade_ok' => 'Actualizado com sucesso', |
|
| 685 | - 'plugin_librairies_installees' => 'Bibliotecas instaladas', |
|
| 686 | - 'plugin_necessite_extension_php' => 'Requer a extensão PHP @plugin@ em @version@.', |
|
| 687 | - 'plugin_necessite_extension_php_sans_version' => 'Requer a extensão PHP @plugin@', |
|
| 688 | - 'plugin_necessite_lib' => 'Este plugin requer a biblioteca @lib@', |
|
| 689 | - 'plugin_necessite_php' => 'Requer @plugin@ em versão @version@.', |
|
| 690 | - 'plugin_necessite_plugin' => 'Requer o plugin @plugin@ em versão @version@ ou mais recente.', |
|
| 691 | - 'plugin_necessite_plugin_sans_version' => 'Requer o plugin @plugin@', |
|
| 692 | - 'plugin_necessite_spip' => 'Requer SPIP em version @version@ ou mais recente.', |
|
| 693 | - 'plugin_source' => 'fonte: ', |
|
| 694 | - 'plugin_titre_automatique' => 'Instalação automática', |
|
| 695 | - 'plugin_titre_automatique_ajouter' => 'Adicionar plugins', |
|
| 696 | - 'plugin_titre_installation' => 'Instalação do plugin @plugin@', |
|
| 697 | - 'plugin_titre_modifier' => 'Os meus plugins', |
|
| 698 | - 'plugin_utilise_extension_php' => 'A extensão PHP @plugin@ deve estar na versão @version@.', |
|
| 699 | - 'plugin_utilise_php' => '@plugin@ deve estar na versão @version@.', |
|
| 700 | - 'plugin_utilise_plugin' => 'O plugin @plugin@ deve estar na versão @version@.', |
|
| 701 | - 'plugin_zip_active' => 'Continue para activar', |
|
| 702 | - 'plugin_zip_adresse' => 'Para carregar um ficheiro zip de plugin, ou uma lista de plugins, introduza o caminho abaixo.', |
|
| 703 | - 'plugin_zip_adresse_champ' => 'Endereço do plugin ou da lista', |
|
| 704 | - 'plugin_zip_content' => 'Contém os seguintes ficheiros (@taille@),<br /> prontos a ser instalados no directório <code>@rep@</code>', |
|
| 705 | - 'plugin_zip_installe_finie' => 'O ficheiro @zip@ foi descomprimido e instalado.', |
|
| 706 | - 'plugin_zip_installe_rep_finie' => 'O ficheiro @zip@ foi descompactado e instalado no directório @rep@', |
|
| 707 | - 'plugin_zip_installer' => 'Agora pode instalar.', |
|
| 708 | - 'plugin_zip_telecharge' => 'O ficheiro @zip@ foi carregado', |
|
| 709 | - 'plugins_actif_aucun' => 'Sem plugins activados.', |
|
| 710 | - 'plugins_actif_un' => 'Um plugin activado.', |
|
| 711 | - 'plugins_actifs' => '@count@ plugins activados.', |
|
| 712 | - 'plugins_actifs_liste' => 'Activados', |
|
| 713 | - 'plugins_compte' => '@count@ plugins', |
|
| 714 | - 'plugins_disponible_un' => 'Um plugin disponível.', |
|
| 715 | - 'plugins_disponibles' => '@count@ plugins disponíveis.', |
|
| 716 | - 'plugins_erreur' => 'Erro nos plugins : @plugins@', |
|
| 717 | - 'plugins_liste' => 'Lista de plugins', |
|
| 718 | - 'plugins_liste_dist' => 'Plugins bloqueados', |
|
| 719 | - 'plugins_recents' => 'Plugins recentes.', |
|
| 720 | - 'plugins_tous_liste' => 'Todos', |
|
| 721 | - 'plugins_vue_hierarchie' => 'Hierarquia', |
|
| 722 | - 'plugins_vue_liste' => 'Lista', |
|
| 723 | - 'protocole_ldap' => 'Versão do protocolo:', |
|
| 648 | + // P |
|
| 649 | + 'page_pas_proxy' => 'Esta página não deve passar através do proxy', |
|
| 650 | + 'pas_de_proxy_pour' => 'Se necessário, indique a que máquinas ou domínios este proxy não se deve aplicar (por exemplo : @exemple@)', |
|
| 651 | + 'phpinfo' => 'Configuração PHP', |
|
| 652 | + 'plugin_charge_paquet' => 'Carregamento do ficheiro @name@', |
|
| 653 | + 'plugin_charger' => 'Download', |
|
| 654 | + 'plugin_erreur_charger' => 'erro : impossível carregar @zip@', |
|
| 655 | + 'plugin_erreur_droit1' => 'Não pode escrever no directório <code>@dest@</code>.', |
|
| 656 | + 'plugin_erreur_droit2' => 'Por favor verifique as autorizações para este directório (e crie o directório se necessário). Alternativamente, instale os ficheiros por FTP.', |
|
| 657 | + 'plugin_erreur_zip' => 'falha pclzip : erro @status@', |
|
| 658 | + 'plugin_etat_developpement' => 'em desenvolvimento', |
|
| 659 | + 'plugin_etat_experimental' => 'experimental', |
|
| 660 | + 'plugin_etat_stable' => 'estável', |
|
| 661 | + 'plugin_etat_test' => 'em teste', |
|
| 662 | + 'plugin_impossible_activer' => 'Impossível activar o plugin @plugin@', |
|
| 663 | + 'plugin_info_automatique1' => 'Se deseja autorizar a instalação automática de plugins, por favor:', |
|
| 664 | + 'plugin_info_automatique1_lib' => 'Se deseja que a biblioteca seja instalada automaticamente, por favor:', |
|
| 665 | + 'plugin_info_automatique2' => 'criar um directório <code>@rep@</code> ;', |
|
| 666 | + 'plugin_info_automatique3' => 'Verifique se o servidor está autorizado a escrever neste directório.', |
|
| 667 | + 'plugin_info_automatique_creer' => 'a criar na raiz do sítio.', |
|
| 668 | + 'plugin_info_automatique_exemples' => 'exemplos:', |
|
| 669 | + 'plugin_info_automatique_ftp' => 'Pode instalar os plugins, por FTP, no directório <tt>@rep@</tt>', |
|
| 670 | + 'plugin_info_automatique_lib' => 'Alguns plugins precisam de estar aptos a carregar ficheiros no directório <code>lib/</code>. Este directório deve ser criado na raiz do sítio.', |
|
| 671 | + 'plugin_info_automatique_liste' => 'As suas listas de plugins :', |
|
| 672 | + 'plugin_info_automatique_liste_officielle' => 'os plugins oficiais', |
|
| 673 | + 'plugin_info_automatique_liste_update' => 'Actualizar as listas', |
|
| 674 | + 'plugin_info_automatique_ou' => 'ou...', |
|
| 675 | + 'plugin_info_automatique_select' => 'Seleccione um plugin abaixo: SPIP irá carregá-lo e instalá-lo no directório <code>@rep@</code>. Se o plugin já existir, será actualizado.', |
|
| 676 | + 'plugin_info_credit' => 'Créditos', |
|
| 677 | + 'plugin_info_erreur_xml' => 'A declaração do plugin está incorrecta', |
|
| 678 | + 'plugin_info_install_ok' => 'Instalado com sucesso', |
|
| 679 | + 'plugin_info_necessite' => 'Requer:', |
|
| 680 | + 'plugin_info_non_compatible_spip' => 'O plugin é incompatível com esta versão de SPIP', |
|
| 681 | + 'plugin_info_plugins_dist_1' => 'Os plugins seguintes estão carregados e activados no directório @plugins_dist@.', |
|
| 682 | + 'plugin_info_plugins_dist_2' => 'Não podem ser desactivados.', |
|
| 683 | + 'plugin_info_telecharger' => 'carregar de @url@ e instalar em @rep@', |
|
| 684 | + 'plugin_info_upgrade_ok' => 'Actualizado com sucesso', |
|
| 685 | + 'plugin_librairies_installees' => 'Bibliotecas instaladas', |
|
| 686 | + 'plugin_necessite_extension_php' => 'Requer a extensão PHP @plugin@ em @version@.', |
|
| 687 | + 'plugin_necessite_extension_php_sans_version' => 'Requer a extensão PHP @plugin@', |
|
| 688 | + 'plugin_necessite_lib' => 'Este plugin requer a biblioteca @lib@', |
|
| 689 | + 'plugin_necessite_php' => 'Requer @plugin@ em versão @version@.', |
|
| 690 | + 'plugin_necessite_plugin' => 'Requer o plugin @plugin@ em versão @version@ ou mais recente.', |
|
| 691 | + 'plugin_necessite_plugin_sans_version' => 'Requer o plugin @plugin@', |
|
| 692 | + 'plugin_necessite_spip' => 'Requer SPIP em version @version@ ou mais recente.', |
|
| 693 | + 'plugin_source' => 'fonte: ', |
|
| 694 | + 'plugin_titre_automatique' => 'Instalação automática', |
|
| 695 | + 'plugin_titre_automatique_ajouter' => 'Adicionar plugins', |
|
| 696 | + 'plugin_titre_installation' => 'Instalação do plugin @plugin@', |
|
| 697 | + 'plugin_titre_modifier' => 'Os meus plugins', |
|
| 698 | + 'plugin_utilise_extension_php' => 'A extensão PHP @plugin@ deve estar na versão @version@.', |
|
| 699 | + 'plugin_utilise_php' => '@plugin@ deve estar na versão @version@.', |
|
| 700 | + 'plugin_utilise_plugin' => 'O plugin @plugin@ deve estar na versão @version@.', |
|
| 701 | + 'plugin_zip_active' => 'Continue para activar', |
|
| 702 | + 'plugin_zip_adresse' => 'Para carregar um ficheiro zip de plugin, ou uma lista de plugins, introduza o caminho abaixo.', |
|
| 703 | + 'plugin_zip_adresse_champ' => 'Endereço do plugin ou da lista', |
|
| 704 | + 'plugin_zip_content' => 'Contém os seguintes ficheiros (@taille@),<br /> prontos a ser instalados no directório <code>@rep@</code>', |
|
| 705 | + 'plugin_zip_installe_finie' => 'O ficheiro @zip@ foi descomprimido e instalado.', |
|
| 706 | + 'plugin_zip_installe_rep_finie' => 'O ficheiro @zip@ foi descompactado e instalado no directório @rep@', |
|
| 707 | + 'plugin_zip_installer' => 'Agora pode instalar.', |
|
| 708 | + 'plugin_zip_telecharge' => 'O ficheiro @zip@ foi carregado', |
|
| 709 | + 'plugins_actif_aucun' => 'Sem plugins activados.', |
|
| 710 | + 'plugins_actif_un' => 'Um plugin activado.', |
|
| 711 | + 'plugins_actifs' => '@count@ plugins activados.', |
|
| 712 | + 'plugins_actifs_liste' => 'Activados', |
|
| 713 | + 'plugins_compte' => '@count@ plugins', |
|
| 714 | + 'plugins_disponible_un' => 'Um plugin disponível.', |
|
| 715 | + 'plugins_disponibles' => '@count@ plugins disponíveis.', |
|
| 716 | + 'plugins_erreur' => 'Erro nos plugins : @plugins@', |
|
| 717 | + 'plugins_liste' => 'Lista de plugins', |
|
| 718 | + 'plugins_liste_dist' => 'Plugins bloqueados', |
|
| 719 | + 'plugins_recents' => 'Plugins recentes.', |
|
| 720 | + 'plugins_tous_liste' => 'Todos', |
|
| 721 | + 'plugins_vue_hierarchie' => 'Hierarquia', |
|
| 722 | + 'plugins_vue_liste' => 'Lista', |
|
| 723 | + 'protocole_ldap' => 'Versão do protocolo:', |
|
| 724 | 724 | |
| 725 | - // Q |
|
| 726 | - 'queue_executer_maintenant' => 'Executar agora', |
|
| 727 | - 'queue_info_purger' => 'Pode eliminar todas as tarefas em espera e pôr a zeros a lista de tarefas periódicas', |
|
| 728 | - 'queue_nb_jobs_in_queue' => '@nb@ tarefas em espera', |
|
| 729 | - 'queue_next_job_in_nb_sec' => 'Próxima tarefa em @nb@ s', |
|
| 730 | - 'queue_no_job_in_queue' => 'Sem tarefas em espera', |
|
| 731 | - 'queue_one_job_in_queue' => '1 tarefa em espera', |
|
| 732 | - 'queue_priorite_tache' => 'prioridade', |
|
| 733 | - 'queue_purger_queue' => 'Pôr a zeros a lista de tarefas', |
|
| 734 | - 'queue_titre' => 'Lista de tarefas', |
|
| 725 | + // Q |
|
| 726 | + 'queue_executer_maintenant' => 'Executar agora', |
|
| 727 | + 'queue_info_purger' => 'Pode eliminar todas as tarefas em espera e pôr a zeros a lista de tarefas periódicas', |
|
| 728 | + 'queue_nb_jobs_in_queue' => '@nb@ tarefas em espera', |
|
| 729 | + 'queue_next_job_in_nb_sec' => 'Próxima tarefa em @nb@ s', |
|
| 730 | + 'queue_no_job_in_queue' => 'Sem tarefas em espera', |
|
| 731 | + 'queue_one_job_in_queue' => '1 tarefa em espera', |
|
| 732 | + 'queue_priorite_tache' => 'prioridade', |
|
| 733 | + 'queue_purger_queue' => 'Pôr a zeros a lista de tarefas', |
|
| 734 | + 'queue_titre' => 'Lista de tarefas', |
|
| 735 | 735 | |
| 736 | - // R |
|
| 737 | - 'repertoire_plugins' => 'Directório :', |
|
| 738 | - 'required' => '(obrigatório)', |
|
| 736 | + // R |
|
| 737 | + 'repertoire_plugins' => 'Directório :', |
|
| 738 | + 'required' => '(obrigatório)', |
|
| 739 | 739 | |
| 740 | - // S |
|
| 741 | - 'sans_heure' => 'tempo não especificado', |
|
| 742 | - 'statut_admin_restreint' => 'administrador restrito', |
|
| 743 | - 'statut_webmestre' => 'webmaster', |
|
| 740 | + // S |
|
| 741 | + 'sans_heure' => 'tempo não especificado', |
|
| 742 | + 'statut_admin_restreint' => 'administrador restrito', |
|
| 743 | + 'statut_webmestre' => 'webmaster', |
|
| 744 | 744 | |
| 745 | - // T |
|
| 746 | - 'tache_cron_asap' => 'Tarefas CRON @function@ (ASAP)', |
|
| 747 | - 'tache_cron_secondes' => 'Tarefa CRON @function@ (todas as @nb@ s)', |
|
| 748 | - 'taille_cache_image' => 'As imagens calculadas automaticamente pelo SPIP (miniaturas dos documentos, títulos apresentados sob forma gráfica, funções matemáticas no formato TeX...) ocupam no directório @dir@ um total de @taille@.', |
|
| 749 | - 'taille_cache_infinie' => 'Este sítio não prevê limitação de tamanho do directório de cache <code>CACHE/</code>.', |
|
| 750 | - 'taille_cache_maxi' => 'SPIP tenta limitar o tamanho do diretório cache <code>CACHE/</code> deste sítio em cerca de <b>@octets@</b>.', |
|
| 751 | - 'taille_cache_moins_de' => 'O tamanho da cache é menor do que @octets@.', |
|
| 752 | - 'taille_cache_octets' => 'O tamanho da cache é actualmente cerca de @octets@.', |
|
| 753 | - 'taille_cache_vide' => 'A cache está vazia.', |
|
| 754 | - 'taille_repertoire_cache' => 'Tamanho do directório cache', |
|
| 755 | - 'text_article_propose_publication' => 'Artigo proposto para publicação. Não hesite em dar a sua opinião graças ao fórum ligado a este artigo (no fundo da página).', |
|
| 756 | - 'texte_acces_ldap_anonyme_1' => 'Alguns servidores LDAP não aceitam nenhum acesso anónimo. Nesse caso, é preciso especificar um identificador de acesso inicial a fim de poder depois procurar informações no anuário. Na maior parte dos casos, porém, os seguintes campos poderão ser deixados vazios.', |
|
| 757 | - 'texte_admin_effacer_01' => 'Este comando apaga <i>todo</i> o conteúdo da base de dados, |
|
| 745 | + // T |
|
| 746 | + 'tache_cron_asap' => 'Tarefas CRON @function@ (ASAP)', |
|
| 747 | + 'tache_cron_secondes' => 'Tarefa CRON @function@ (todas as @nb@ s)', |
|
| 748 | + 'taille_cache_image' => 'As imagens calculadas automaticamente pelo SPIP (miniaturas dos documentos, títulos apresentados sob forma gráfica, funções matemáticas no formato TeX...) ocupam no directório @dir@ um total de @taille@.', |
|
| 749 | + 'taille_cache_infinie' => 'Este sítio não prevê limitação de tamanho do directório de cache <code>CACHE/</code>.', |
|
| 750 | + 'taille_cache_maxi' => 'SPIP tenta limitar o tamanho do diretório cache <code>CACHE/</code> deste sítio em cerca de <b>@octets@</b>.', |
|
| 751 | + 'taille_cache_moins_de' => 'O tamanho da cache é menor do que @octets@.', |
|
| 752 | + 'taille_cache_octets' => 'O tamanho da cache é actualmente cerca de @octets@.', |
|
| 753 | + 'taille_cache_vide' => 'A cache está vazia.', |
|
| 754 | + 'taille_repertoire_cache' => 'Tamanho do directório cache', |
|
| 755 | + 'text_article_propose_publication' => 'Artigo proposto para publicação. Não hesite em dar a sua opinião graças ao fórum ligado a este artigo (no fundo da página).', |
|
| 756 | + 'texte_acces_ldap_anonyme_1' => 'Alguns servidores LDAP não aceitam nenhum acesso anónimo. Nesse caso, é preciso especificar um identificador de acesso inicial a fim de poder depois procurar informações no anuário. Na maior parte dos casos, porém, os seguintes campos poderão ser deixados vazios.', |
|
| 757 | + 'texte_admin_effacer_01' => 'Este comando apaga <i>todo</i> o conteúdo da base de dados, |
|
| 758 | 758 | inclusive <i>todos</i> os acessos de redactores e administradores. Depois de o ter executado, deverá |
| 759 | 759 | reinstalar SPIP para recriar uma nova base assim como uma primeira conta de administrador.', |
| 760 | - 'texte_adresse_annuaire_1' => '(Se o seu anuário está instalado na mesma máquina que este sítio Web, trata-se de «localhost».)', |
|
| 761 | - 'texte_ajout_auteur' => 'O seguinte autor foi acrescentado ao artigo :', |
|
| 762 | - 'texte_annuaire_ldap_1' => 'Se tiver acesso a um anuário (LDAP), pode utilizá-lo para importar automaticamente utilizadores sob SPIP.', |
|
| 763 | - 'texte_article_statut' => 'Este artigo está:', |
|
| 764 | - 'texte_article_virtuel' => 'Artigo virtual', |
|
| 765 | - 'texte_article_virtuel_reference' => '<b>Artigo virtual :</b> artigo referenciado no seu sítio SPIP, mas redirigido para uma outra URL. Para suprimir a redirecção, apague a URL acima.', |
|
| 766 | - 'texte_aucun_resultat_auteur' => 'Nenhum resultado para "@cherche_auteur@"', |
|
| 767 | - 'texte_auteur_messagerie' => 'Este site pode indicar permanentemente a lista dos redactores ligados, o que lhe permite trocar mensagens em directo ( quando o correio está desactivado mais acima, a lista dos redactores está desactivada). Pode decidir não aparecer nesta lista (estando « invisível » para os outros utilizadores).', |
|
| 768 | - 'texte_auteurs' => 'OS AUTORES', |
|
| 769 | - 'texte_choix_base_1' => 'Escolha a sua base de dados :', |
|
| 770 | - 'texte_choix_base_2' => 'O servidor SQL contém várias bases de dados.', |
|
| 771 | - 'texte_choix_base_3' => '<b>Seleccione</b> a seguir a que lhe foi atribuida pelo seu serviço de hospedagem.', |
|
| 772 | - 'texte_choix_table_prefix' => 'Prefixo das tabelas:', |
|
| 773 | - 'texte_compte_element' => '@count@ elemento', |
|
| 774 | - 'texte_compte_elements' => '@count@ elementos', |
|
| 775 | - 'texte_conflit_edition_correction' => 'Por favor compare as diferenças entre as duas versões. Pode também copiar as suas alterações e recomeçar.', |
|
| 776 | - 'texte_connexion_mysql' => 'Consulte as informações fornecidas pelo seu serviço de hospedagem: deve encontrar nelas, se o seu hospedeiro suporta SQL, os códigos de ligação ao servidor SQL.', |
|
| 777 | - 'texte_contenu_article' => '(Conteúdo do artigo em poucas palavras.)', |
|
| 778 | - 'texte_contenu_articles' => 'Segundo a maqueta adoptada para o seu sítio, pode decidir |
|
| 760 | + 'texte_adresse_annuaire_1' => '(Se o seu anuário está instalado na mesma máquina que este sítio Web, trata-se de «localhost».)', |
|
| 761 | + 'texte_ajout_auteur' => 'O seguinte autor foi acrescentado ao artigo :', |
|
| 762 | + 'texte_annuaire_ldap_1' => 'Se tiver acesso a um anuário (LDAP), pode utilizá-lo para importar automaticamente utilizadores sob SPIP.', |
|
| 763 | + 'texte_article_statut' => 'Este artigo está:', |
|
| 764 | + 'texte_article_virtuel' => 'Artigo virtual', |
|
| 765 | + 'texte_article_virtuel_reference' => '<b>Artigo virtual :</b> artigo referenciado no seu sítio SPIP, mas redirigido para uma outra URL. Para suprimir a redirecção, apague a URL acima.', |
|
| 766 | + 'texte_aucun_resultat_auteur' => 'Nenhum resultado para "@cherche_auteur@"', |
|
| 767 | + 'texte_auteur_messagerie' => 'Este site pode indicar permanentemente a lista dos redactores ligados, o que lhe permite trocar mensagens em directo ( quando o correio está desactivado mais acima, a lista dos redactores está desactivada). Pode decidir não aparecer nesta lista (estando « invisível » para os outros utilizadores).', |
|
| 768 | + 'texte_auteurs' => 'OS AUTORES', |
|
| 769 | + 'texte_choix_base_1' => 'Escolha a sua base de dados :', |
|
| 770 | + 'texte_choix_base_2' => 'O servidor SQL contém várias bases de dados.', |
|
| 771 | + 'texte_choix_base_3' => '<b>Seleccione</b> a seguir a que lhe foi atribuida pelo seu serviço de hospedagem.', |
|
| 772 | + 'texte_choix_table_prefix' => 'Prefixo das tabelas:', |
|
| 773 | + 'texte_compte_element' => '@count@ elemento', |
|
| 774 | + 'texte_compte_elements' => '@count@ elementos', |
|
| 775 | + 'texte_conflit_edition_correction' => 'Por favor compare as diferenças entre as duas versões. Pode também copiar as suas alterações e recomeçar.', |
|
| 776 | + 'texte_connexion_mysql' => 'Consulte as informações fornecidas pelo seu serviço de hospedagem: deve encontrar nelas, se o seu hospedeiro suporta SQL, os códigos de ligação ao servidor SQL.', |
|
| 777 | + 'texte_contenu_article' => '(Conteúdo do artigo em poucas palavras.)', |
|
| 778 | + 'texte_contenu_articles' => 'Segundo a maqueta adoptada para o seu sítio, pode decidir |
|
| 779 | 779 | que alguns elementos dos artigos não são utilizados. |
| 780 | 780 | Utilize a lista a seguir para indicar quais são os elementos disponíveis.', |
| 781 | - 'texte_crash_base' => 'Se a sua base de dados foi |
|
| 781 | + 'texte_crash_base' => 'Se a sua base de dados foi |
|
| 782 | 782 | destruída, pode tentar uma reparação |
| 783 | 783 | automática.', |
| 784 | - 'texte_creer_rubrique' => 'Antes de poder escrever artigos, <br /> deve criar uma rubrica.', |
|
| 785 | - 'texte_date_creation_article' => 'DATA DE CRIAÇÃO DO ARTIGO:', |
|
| 786 | - 'texte_date_creation_objet' => 'Data de criação:', # on ajoute le ":" |
|
| 787 | - 'texte_date_publication_anterieure' => 'Data de redacção anterior :', |
|
| 788 | - 'texte_date_publication_anterieure_nonaffichee' => 'Não exibir a data de redacção anterior', |
|
| 789 | - 'texte_date_publication_article' => 'DATA DE PUBLICAÇÃO ONLINE:', |
|
| 790 | - 'texte_date_publication_objet' => 'Data de publicação online:', |
|
| 791 | - 'texte_definir_comme_traduction_rubrique' => 'Esta secção é uma tradução da secção número: ', |
|
| 792 | - 'texte_descriptif_rapide' => 'Descrição rápida', |
|
| 793 | - 'texte_effacer_base' => 'Apagar a base de dados SPIP', |
|
| 794 | - 'texte_effacer_statistiques' => 'Apagar as estatísticas', |
|
| 795 | - 'texte_en_cours_validation' => 'Os artigos e notícias seguintes estão propostos para publicação. Não hesite em dar a sua opinião graças aos fóruns que lhes estão ligados.', |
|
| 796 | - 'texte_enrichir_mise_a_jour' => 'Pode enriquecer a paginação do seu texto, utilizando « atalhos tipográficos ».', |
|
| 797 | - 'texte_fichier_authent' => '<b>Deverá o SPIP criar os ficheiros especiais<tt>.htpasswd-admin</tt> no directório @dossier@?</b> |
|
| 784 | + 'texte_creer_rubrique' => 'Antes de poder escrever artigos, <br /> deve criar uma rubrica.', |
|
| 785 | + 'texte_date_creation_article' => 'DATA DE CRIAÇÃO DO ARTIGO:', |
|
| 786 | + 'texte_date_creation_objet' => 'Data de criação:', # on ajoute le ":" |
|
| 787 | + 'texte_date_publication_anterieure' => 'Data de redacção anterior :', |
|
| 788 | + 'texte_date_publication_anterieure_nonaffichee' => 'Não exibir a data de redacção anterior', |
|
| 789 | + 'texte_date_publication_article' => 'DATA DE PUBLICAÇÃO ONLINE:', |
|
| 790 | + 'texte_date_publication_objet' => 'Data de publicação online:', |
|
| 791 | + 'texte_definir_comme_traduction_rubrique' => 'Esta secção é uma tradução da secção número: ', |
|
| 792 | + 'texte_descriptif_rapide' => 'Descrição rápida', |
|
| 793 | + 'texte_effacer_base' => 'Apagar a base de dados SPIP', |
|
| 794 | + 'texte_effacer_statistiques' => 'Apagar as estatísticas', |
|
| 795 | + 'texte_en_cours_validation' => 'Os artigos e notícias seguintes estão propostos para publicação. Não hesite em dar a sua opinião graças aos fóruns que lhes estão ligados.', |
|
| 796 | + 'texte_enrichir_mise_a_jour' => 'Pode enriquecer a paginação do seu texto, utilizando « atalhos tipográficos ».', |
|
| 797 | + 'texte_fichier_authent' => '<b>Deverá o SPIP criar os ficheiros especiais<tt>.htpasswd-admin</tt> no directório @dossier@?</b> |
|
| 798 | 798 | <p>Estes ficheiros podem servir-lhe para restringir o acesso aos autores |
| 799 | 799 | e administradores a outras partes do seu sítio (por exemplo, um programa externo de estatísticas).<p> |
| 800 | 800 | Se não utilizar os ficheiros especiais, pode deixar esta opção no seu valor por omissão (não há criação de ficheiros).', |
| 801 | - 'texte_informations_personnelles_1' => 'O sistema vai agora criar-lhe um acesso personalizado ao sítio', |
|
| 802 | - 'texte_informations_personnelles_2' => '(Nota : se se tratar de uma reinstalação e se o seu acesso continua funcional, pode', |
|
| 803 | - 'texte_introductif_article' => '(Texto introdutório do artigo.)', |
|
| 804 | - 'texte_jeu_caractere' => 'Esta opção é útil se o seu sítio precisa de exibir alfabetos diferentes do alfabeto romano (ou «ocidental») e seus derivados. Nesse caso, pode ser preferível mudar a definição por defeito para utilizar um conjunto de carácteres adequado; aconselhamos, em todos os casos, a proceder a experiências a fim de encontrar uma solução satisfatória. Se modificar este parâmetro, não esqueça também de adaptar o sítio público (balisa<tt>#CHARSET</tt>).', |
|
| 805 | - 'texte_jeu_caractere_3' => 'O seu sítio usa actualmente o conjunto de caracteres:', |
|
| 806 | - 'texte_jeu_caractere_4' => 'Se não corresponde aos seus dados actuais (pode ocorrer após restaurar a base de dados a partir de uma cópia de segurança), ou se <em> estiver a configurar este sítio </em> e deseja usar um conjunto diferente de caracteres, por favor indique-o aqui :', |
|
| 807 | - 'texte_login_ldap_1' => '(Deixar vazio para um acesso anónimo, ou introduzir o caminho completo, por exemplo, « <tt>uid=silva, ou=users, dc=meu-dominio, dc=com</tt> ».)', |
|
| 808 | - 'texte_login_precaution' => 'Atenção ! Isto é o login sob o qual está ligado actualmente. |
|
| 801 | + 'texte_informations_personnelles_1' => 'O sistema vai agora criar-lhe um acesso personalizado ao sítio', |
|
| 802 | + 'texte_informations_personnelles_2' => '(Nota : se se tratar de uma reinstalação e se o seu acesso continua funcional, pode', |
|
| 803 | + 'texte_introductif_article' => '(Texto introdutório do artigo.)', |
|
| 804 | + 'texte_jeu_caractere' => 'Esta opção é útil se o seu sítio precisa de exibir alfabetos diferentes do alfabeto romano (ou «ocidental») e seus derivados. Nesse caso, pode ser preferível mudar a definição por defeito para utilizar um conjunto de carácteres adequado; aconselhamos, em todos os casos, a proceder a experiências a fim de encontrar uma solução satisfatória. Se modificar este parâmetro, não esqueça também de adaptar o sítio público (balisa<tt>#CHARSET</tt>).', |
|
| 805 | + 'texte_jeu_caractere_3' => 'O seu sítio usa actualmente o conjunto de caracteres:', |
|
| 806 | + 'texte_jeu_caractere_4' => 'Se não corresponde aos seus dados actuais (pode ocorrer após restaurar a base de dados a partir de uma cópia de segurança), ou se <em> estiver a configurar este sítio </em> e deseja usar um conjunto diferente de caracteres, por favor indique-o aqui :', |
|
| 807 | + 'texte_login_ldap_1' => '(Deixar vazio para um acesso anónimo, ou introduzir o caminho completo, por exemplo, « <tt>uid=silva, ou=users, dc=meu-dominio, dc=com</tt> ».)', |
|
| 808 | + 'texte_login_precaution' => 'Atenção ! Isto é o login sob o qual está ligado actualmente. |
|
| 809 | 809 | Utilize este formulário com precaução...', |
| 810 | - 'texte_messagerie_agenda' => 'Um sistema de mensagens permite aos redactores deste sítio comunicar directamente entre si na área privada. Está associado a uma agenda.', |
|
| 811 | - 'texte_mise_a_niveau_base_1' => 'Acaba de actualizar os ficheiros SPIP. |
|
| 810 | + 'texte_messagerie_agenda' => 'Um sistema de mensagens permite aos redactores deste sítio comunicar directamente entre si na área privada. Está associado a uma agenda.', |
|
| 811 | + 'texte_mise_a_niveau_base_1' => 'Acaba de actualizar os ficheiros SPIP. |
|
| 812 | 812 | Agora é preciso pôr a nível a base de dados do sítio. ', |
| 813 | - 'texte_modifier_article' => 'Modificar o artigo :', |
|
| 814 | - 'texte_multilinguisme' => 'Se desejar gerir artigos em muitos idiomas, com uma navegação complexa, pode acrescentar um menu de idioma aos artigos e/ou às rubricas, em função da organização do seu sítio.', |
|
| 815 | - 'texte_multilinguisme_trad' => 'Pode também activar um sistema de gestão de ligações entre as diferentes traduções de um artigo.', |
|
| 816 | - 'texte_non_compresse' => '<i>não comprimido</i> ( o seu servidor não suporta esta funcionalidade)', |
|
| 817 | - 'texte_nouvelle_version_spip_1' => 'Instalou uma nova versão de SPIP.', |
|
| 818 | - 'texte_nouvelle_version_spip_2' => 'Esta nova versão precisa de uma actualização mais completa do que o normal. Se é o webmaster do sítio, por favor, apague o ficheiro <tt>inc_connect.php3</tt> do directório <tt>ecrire</tt> e retome a instalação de modo a incluir os seus parâmetros de ligação à base de dados.<p> (NB.: se não se lembra dos seus parâmetros de ligação, consulte o arquivo @connect@ antes de o apagar...)</p>', |
|
| 819 | - 'texte_operation_echec' => 'Volte à página anterior, seleccione uma outra base de dados ou crie uma nova. Verifique as informações fornecidas pelo seu serviço de hospedagem.', |
|
| 820 | - 'texte_plus_trois_car' => 'mais de 3 carácteres', |
|
| 821 | - 'texte_plusieurs_articles' => 'Muitos autores encontrados para "@cherche_auteur@":', |
|
| 822 | - 'texte_port_annuaire' => '(O valor indicado por defeito geralmente convém.)', |
|
| 823 | - 'texte_presente_plugin' => 'Esta página mostra os plugins disponíveis neste sítio. Pode activar os plugins necessários selaccionando a caixa correspondente.', |
|
| 824 | - 'texte_proposer_publication' => 'Quando terminar o seu artigo, <br /> pode propor a sua publicação.', |
|
| 825 | - 'texte_proxy' => 'Em alguns caso (intranet, redes protegidas...), |
|
| 813 | + 'texte_modifier_article' => 'Modificar o artigo :', |
|
| 814 | + 'texte_multilinguisme' => 'Se desejar gerir artigos em muitos idiomas, com uma navegação complexa, pode acrescentar um menu de idioma aos artigos e/ou às rubricas, em função da organização do seu sítio.', |
|
| 815 | + 'texte_multilinguisme_trad' => 'Pode também activar um sistema de gestão de ligações entre as diferentes traduções de um artigo.', |
|
| 816 | + 'texte_non_compresse' => '<i>não comprimido</i> ( o seu servidor não suporta esta funcionalidade)', |
|
| 817 | + 'texte_nouvelle_version_spip_1' => 'Instalou uma nova versão de SPIP.', |
|
| 818 | + 'texte_nouvelle_version_spip_2' => 'Esta nova versão precisa de uma actualização mais completa do que o normal. Se é o webmaster do sítio, por favor, apague o ficheiro <tt>inc_connect.php3</tt> do directório <tt>ecrire</tt> e retome a instalação de modo a incluir os seus parâmetros de ligação à base de dados.<p> (NB.: se não se lembra dos seus parâmetros de ligação, consulte o arquivo @connect@ antes de o apagar...)</p>', |
|
| 819 | + 'texte_operation_echec' => 'Volte à página anterior, seleccione uma outra base de dados ou crie uma nova. Verifique as informações fornecidas pelo seu serviço de hospedagem.', |
|
| 820 | + 'texte_plus_trois_car' => 'mais de 3 carácteres', |
|
| 821 | + 'texte_plusieurs_articles' => 'Muitos autores encontrados para "@cherche_auteur@":', |
|
| 822 | + 'texte_port_annuaire' => '(O valor indicado por defeito geralmente convém.)', |
|
| 823 | + 'texte_presente_plugin' => 'Esta página mostra os plugins disponíveis neste sítio. Pode activar os plugins necessários selaccionando a caixa correspondente.', |
|
| 824 | + 'texte_proposer_publication' => 'Quando terminar o seu artigo, <br /> pode propor a sua publicação.', |
|
| 825 | + 'texte_proxy' => 'Em alguns caso (intranet, redes protegidas...), |
|
| 826 | 826 | pode ser necessário utilizar um <i>proxy HTTP</i> para atingir os sítios vinculados. |
| 827 | 827 | Se for o caso, indique a seguir o endereço, sob a forma |
| 828 | 828 | @proxy_en_cours@. Em geral, |
| 829 | 829 | poderá deixar esta caixa vazia.', |
| 830 | - 'texte_publication_articles_post_dates' => 'Que comportamento SPIP deve adoptar perante os artigos cuja |
|
| 830 | + 'texte_publication_articles_post_dates' => 'Que comportamento SPIP deve adoptar perante os artigos cuja |
|
| 831 | 831 | data de publicação foi fixada para um prazo futuro ?', |
| 832 | - 'texte_rappel_selection_champs' => '[Não esquecer de seleccionar correctamente este campo.]', |
|
| 833 | - 'texte_recalcul_page' => 'Se quiser |
|
| 832 | + 'texte_rappel_selection_champs' => '[Não esquecer de seleccionar correctamente este campo.]', |
|
| 833 | + 'texte_recalcul_page' => 'Se quiser |
|
| 834 | 834 | recompor uma única página, passe pelo espaço público e utilize o botão «recompor».', |
| 835 | - 'texte_recuperer_base' => 'Reparar a base de dados', |
|
| 836 | - 'texte_reference_mais_redirige' => 'artigo referenciado no seu sítio SPIP, mas redirigido para uma outra URL.', |
|
| 837 | - 'texte_requetes_echouent' => '<b>Quando algumas consultas SQL falharem sistematicamente e sem razão aparente, é possível que seja por causa da própria base de dados |
|
| 835 | + 'texte_recuperer_base' => 'Reparar a base de dados', |
|
| 836 | + 'texte_reference_mais_redirige' => 'artigo referenciado no seu sítio SPIP, mas redirigido para uma outra URL.', |
|
| 837 | + 'texte_requetes_echouent' => '<b>Quando algumas consultas SQL falharem sistematicamente e sem razão aparente, é possível que seja por causa da própria base de dados |
|
| 838 | 838 | .</b><p> |
| 839 | 839 | SQL dispõe de uma funcionalidade de reparação das suas tabelas quando forem acidententalmente danificadas. Pode tentar aqui essa reparação: se falhar, conserve uma cópia da exibição que talvez contenha |
| 840 | 840 | indícios daquilo que não funciona...<p> |
| 841 | 841 | Se o problema persistir, contacte o seu serviço de hospedagem.', |
| 842 | - 'texte_selection_langue_principale' => 'Pode seleccionar a seguir o « idioma principal » do sítio. Esta opção não o obriga - felizmente ! - a escrever os seus artigos no idioma seleccionado, mas permite determinar : |
|
| 842 | + 'texte_selection_langue_principale' => 'Pode seleccionar a seguir o « idioma principal » do sítio. Esta opção não o obriga - felizmente ! - a escrever os seus artigos no idioma seleccionado, mas permite determinar : |
|
| 843 | 843 | <u><li> o formato por defeito das datas no sítio público ;</li> |
| 844 | 844 | <li> a natureza do motor tipográfico que SPIP deve utilizar para a restituição dos textos ;</li> |
| 845 | 845 | <li> o idioma utilizado nos formulários do sítio público ;</li> |
| 846 | 846 | <li> o idioma apresentado por defeito no espaço privado.</li></ul> ', |
| 847 | - 'texte_sous_titre' => 'Sub-título', |
|
| 848 | - 'texte_statistiques_visites' => '(barras escuras : domingo / curva escura : evolução da média)', |
|
| 849 | - 'texte_statut_attente_validation' => 'à espera de validação', |
|
| 850 | - 'texte_statut_publies' => 'publicados online', |
|
| 851 | - 'texte_statut_refuses' => 'recusados', |
|
| 852 | - 'texte_suppression_fichiers' => 'Utilize este comando para suprimir todos os ficheiros presentes |
|
| 847 | + 'texte_sous_titre' => 'Sub-título', |
|
| 848 | + 'texte_statistiques_visites' => '(barras escuras : domingo / curva escura : evolução da média)', |
|
| 849 | + 'texte_statut_attente_validation' => 'à espera de validação', |
|
| 850 | + 'texte_statut_publies' => 'publicados online', |
|
| 851 | + 'texte_statut_refuses' => 'recusados', |
|
| 852 | + 'texte_suppression_fichiers' => 'Utilize este comando para suprimir todos os ficheiros presentes |
|
| 853 | 853 | na cache SPIP. Isso permite, por exemplo, obrigar uma recomposição de todas as páginas se você |
| 854 | 854 | fez modificações importantes de grafismo ou de estrutura do sítio.', |
| 855 | - 'texte_sur_titre' => 'Supra-título', |
|
| 856 | - 'texte_table_ok' => ': esta tabela está OK.', |
|
| 857 | - 'texte_tentative_recuperation' => 'Tentativa de reparação', |
|
| 858 | - 'texte_tenter_reparation' => 'Tentar uma reparação da base de dados', |
|
| 859 | - 'texte_test_proxy' => 'Para experimentar este proxy, indique aqui o endereço de um sítio Web |
|
| 855 | + 'texte_sur_titre' => 'Supra-título', |
|
| 856 | + 'texte_table_ok' => ': esta tabela está OK.', |
|
| 857 | + 'texte_tentative_recuperation' => 'Tentativa de reparação', |
|
| 858 | + 'texte_tenter_reparation' => 'Tentar uma reparação da base de dados', |
|
| 859 | + 'texte_test_proxy' => 'Para experimentar este proxy, indique aqui o endereço de um sítio Web |
|
| 860 | 860 | que deseje testar;', |
| 861 | - 'texte_titre_02' => 'Título', |
|
| 862 | - 'texte_titre_obligatoire' => '<b>Título</b> [Obrigatório]', |
|
| 863 | - 'texte_travail_article' => '@nom_auteur_modif@ trabalhou sobre este artigo há @date_diff@ minutes', |
|
| 864 | - 'texte_travail_collaboratif' => 'Se é frequente muitos redactores |
|
| 861 | + 'texte_titre_02' => 'Título', |
|
| 862 | + 'texte_titre_obligatoire' => '<b>Título</b> [Obrigatório]', |
|
| 863 | + 'texte_travail_article' => '@nom_auteur_modif@ trabalhou sobre este artigo há @date_diff@ minutes', |
|
| 864 | + 'texte_travail_collaboratif' => 'Se é frequente muitos redactores |
|
| 865 | 865 | trabalharem no mesmo artigo, o sistema |
| 866 | 866 | pode exibir os artigos recentemente « abertos » |
| 867 | 867 | a fim de evitar as modificações simultâneas. |
| 868 | 868 | Esta opção está desactivada por defeito |
| 869 | 869 | a fim de evitar exibir mensagens de aviso |
| 870 | 870 | intempestivas.', |
| 871 | - 'texte_vide' => 'vazio', |
|
| 872 | - 'texte_vider_cache' => 'Esvaziar a cache', |
|
| 873 | - 'titre_admin_tech' => 'Manutenção técnica', |
|
| 874 | - 'titre_admin_vider' => 'Manutenção técnica', |
|
| 875 | - 'titre_ajouter_un_auteur' => 'Adicionar um autor', |
|
| 876 | - 'titre_ajouter_un_mot' => 'Adicionar uma palavra-chave', |
|
| 877 | - 'titre_cadre_afficher_article' => 'Exibir os artigos', |
|
| 878 | - 'titre_cadre_afficher_traductions' => 'Exibir o estado das traduções para estes idiomas:', |
|
| 879 | - 'titre_cadre_ajouter_auteur' => 'ACRESCENTAR UM AUTOR :', |
|
| 880 | - 'titre_cadre_interieur_rubrique' => 'Dentro da rubrica', |
|
| 881 | - 'titre_cadre_numero_auteur' => 'AUTOR NÚMERO', |
|
| 882 | - 'titre_cadre_numero_objet' => '@objet@ NÚMERO:', |
|
| 883 | - 'titre_cadre_signature_obligatoire' => '<b>Assinatura</b> [Obrigatória]<br />', |
|
| 884 | - 'titre_config_contenu_notifications' => 'Notificações', |
|
| 885 | - 'titre_config_contenu_prive' => 'Na área privada', |
|
| 886 | - 'titre_config_contenu_public' => 'No sítio público', |
|
| 887 | - 'titre_config_fonctions' => 'Configuração do sítio', |
|
| 888 | - 'titre_config_langage' => 'Configurar o idioma', |
|
| 889 | - 'titre_configuration' => 'Configuração do sítio', |
|
| 890 | - 'titre_configurer_preferences' => 'Configure as suas preferências', |
|
| 891 | - 'titre_configurer_preferences_menus' => 'Definir as suas preferências de menu', |
|
| 892 | - 'titre_conflit_edition' => 'Conflito durante a redacção', |
|
| 893 | - 'titre_connexion_ldap' => 'Opções: <b>Sua ligação LDAP</b>', |
|
| 894 | - 'titre_groupe_mots' => 'GRUPO DE PALAVRAS :', |
|
| 895 | - 'titre_identite_site' => 'Identidade do sítio', |
|
| 896 | - 'titre_langue_article' => 'IDIOMA DO ARTIGO ', |
|
| 897 | - 'titre_langue_rubrique' => 'Idioma da rubrica', |
|
| 898 | - 'titre_langue_trad_article' => 'IDIOMA E TRADUÇÕES DO ARTIGO', |
|
| 899 | - 'titre_les_articles' => 'OS ARTIGOS', |
|
| 900 | - 'titre_messagerie_agenda' => 'Mensagens e agenda', |
|
| 901 | - 'titre_naviguer_dans_le_site' => 'Navegar no sítio', |
|
| 902 | - 'titre_nouvelle_rubrique' => 'Nova rubrica', |
|
| 903 | - 'titre_numero_rubrique' => 'RUBRICA NÚMERO :', |
|
| 904 | - 'titre_page_articles_edit' => 'Modificar : @titre@', |
|
| 905 | - 'titre_page_articles_page' => 'Os artigos', |
|
| 906 | - 'titre_page_articles_tous' => 'Todo o sítio', |
|
| 907 | - 'titre_page_calendrier' => 'Calendário @nom_mois@ @annee@', |
|
| 908 | - 'titre_page_config_contenu' => 'Configuração do sítio', |
|
| 909 | - 'titre_page_delete_all' => 'Supressão total e irreversível', |
|
| 910 | - 'titre_page_recherche' => 'Resultados da pesquisa @recherche@', |
|
| 911 | - 'titre_page_statistiques_referers' => 'Estatísticas (ligações de entrada)', |
|
| 912 | - 'titre_page_upgrade' => 'Reactualização de SPIP', |
|
| 913 | - 'titre_preference_menus_favoris' => 'Menus de marcadores', |
|
| 914 | - 'titre_publication_articles_post_dates' => 'Publicação dos artigos pós-datados', |
|
| 915 | - 'titre_reparation' => 'Reparação', |
|
| 916 | - 'titre_suivi_petition' => 'Seguimento dos abaixo-assinados', |
|
| 917 | - 'tls_ldap' => 'Transport Layer Security :', |
|
| 918 | - 'trad_article_traduction' => 'Todas as versões deste artigo :', |
|
| 919 | - 'trad_delier' => 'Não voltar a ligar este artigo a estas traduções', |
|
| 920 | - 'trad_lier' => 'Este artigo é uma tradução do artigo número :', |
|
| 921 | - 'trad_new' => 'Escrever uma nova tradução deste artigo', |
|
| 871 | + 'texte_vide' => 'vazio', |
|
| 872 | + 'texte_vider_cache' => 'Esvaziar a cache', |
|
| 873 | + 'titre_admin_tech' => 'Manutenção técnica', |
|
| 874 | + 'titre_admin_vider' => 'Manutenção técnica', |
|
| 875 | + 'titre_ajouter_un_auteur' => 'Adicionar um autor', |
|
| 876 | + 'titre_ajouter_un_mot' => 'Adicionar uma palavra-chave', |
|
| 877 | + 'titre_cadre_afficher_article' => 'Exibir os artigos', |
|
| 878 | + 'titre_cadre_afficher_traductions' => 'Exibir o estado das traduções para estes idiomas:', |
|
| 879 | + 'titre_cadre_ajouter_auteur' => 'ACRESCENTAR UM AUTOR :', |
|
| 880 | + 'titre_cadre_interieur_rubrique' => 'Dentro da rubrica', |
|
| 881 | + 'titre_cadre_numero_auteur' => 'AUTOR NÚMERO', |
|
| 882 | + 'titre_cadre_numero_objet' => '@objet@ NÚMERO:', |
|
| 883 | + 'titre_cadre_signature_obligatoire' => '<b>Assinatura</b> [Obrigatória]<br />', |
|
| 884 | + 'titre_config_contenu_notifications' => 'Notificações', |
|
| 885 | + 'titre_config_contenu_prive' => 'Na área privada', |
|
| 886 | + 'titre_config_contenu_public' => 'No sítio público', |
|
| 887 | + 'titre_config_fonctions' => 'Configuração do sítio', |
|
| 888 | + 'titre_config_langage' => 'Configurar o idioma', |
|
| 889 | + 'titre_configuration' => 'Configuração do sítio', |
|
| 890 | + 'titre_configurer_preferences' => 'Configure as suas preferências', |
|
| 891 | + 'titre_configurer_preferences_menus' => 'Definir as suas preferências de menu', |
|
| 892 | + 'titre_conflit_edition' => 'Conflito durante a redacção', |
|
| 893 | + 'titre_connexion_ldap' => 'Opções: <b>Sua ligação LDAP</b>', |
|
| 894 | + 'titre_groupe_mots' => 'GRUPO DE PALAVRAS :', |
|
| 895 | + 'titre_identite_site' => 'Identidade do sítio', |
|
| 896 | + 'titre_langue_article' => 'IDIOMA DO ARTIGO ', |
|
| 897 | + 'titre_langue_rubrique' => 'Idioma da rubrica', |
|
| 898 | + 'titre_langue_trad_article' => 'IDIOMA E TRADUÇÕES DO ARTIGO', |
|
| 899 | + 'titre_les_articles' => 'OS ARTIGOS', |
|
| 900 | + 'titre_messagerie_agenda' => 'Mensagens e agenda', |
|
| 901 | + 'titre_naviguer_dans_le_site' => 'Navegar no sítio', |
|
| 902 | + 'titre_nouvelle_rubrique' => 'Nova rubrica', |
|
| 903 | + 'titre_numero_rubrique' => 'RUBRICA NÚMERO :', |
|
| 904 | + 'titre_page_articles_edit' => 'Modificar : @titre@', |
|
| 905 | + 'titre_page_articles_page' => 'Os artigos', |
|
| 906 | + 'titre_page_articles_tous' => 'Todo o sítio', |
|
| 907 | + 'titre_page_calendrier' => 'Calendário @nom_mois@ @annee@', |
|
| 908 | + 'titre_page_config_contenu' => 'Configuração do sítio', |
|
| 909 | + 'titre_page_delete_all' => 'Supressão total e irreversível', |
|
| 910 | + 'titre_page_recherche' => 'Resultados da pesquisa @recherche@', |
|
| 911 | + 'titre_page_statistiques_referers' => 'Estatísticas (ligações de entrada)', |
|
| 912 | + 'titre_page_upgrade' => 'Reactualização de SPIP', |
|
| 913 | + 'titre_preference_menus_favoris' => 'Menus de marcadores', |
|
| 914 | + 'titre_publication_articles_post_dates' => 'Publicação dos artigos pós-datados', |
|
| 915 | + 'titre_reparation' => 'Reparação', |
|
| 916 | + 'titre_suivi_petition' => 'Seguimento dos abaixo-assinados', |
|
| 917 | + 'tls_ldap' => 'Transport Layer Security :', |
|
| 918 | + 'trad_article_traduction' => 'Todas as versões deste artigo :', |
|
| 919 | + 'trad_delier' => 'Não voltar a ligar este artigo a estas traduções', |
|
| 920 | + 'trad_lier' => 'Este artigo é uma tradução do artigo número :', |
|
| 921 | + 'trad_new' => 'Escrever uma nova tradução deste artigo', |
|
| 922 | 922 | |
| 923 | - // U |
|
| 924 | - 'utf8_convert_erreur_orig' => 'Erro : o conjunto de caracteres @charset@ não é suportado.', |
|
| 923 | + // U |
|
| 924 | + 'utf8_convert_erreur_orig' => 'Erro : o conjunto de caracteres @charset@ não é suportado.', |
|
| 925 | 925 | |
| 926 | - // V |
|
| 927 | - 'version' => 'Versão:' |
|
| 926 | + // V |
|
| 927 | + 'version' => 'Versão:' |
|
| 928 | 928 | ); |
@@ -4,571 +4,571 @@ discard block |
||
| 4 | 4 | // ** ne pas modifier le fichier ** |
| 5 | 5 | |
| 6 | 6 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 7 | - return; |
|
| 7 | + return; |
|
| 8 | 8 | } |
| 9 | 9 | |
| 10 | 10 | $GLOBALS[$GLOBALS['idx_lang']] = array( |
| 11 | 11 | |
| 12 | - // A |
|
| 13 | - 'access_interface_graphique' => 'Voltar à interface gráfica completa', |
|
| 14 | - 'access_mode_texte' => 'Exibir a interface textual simplificada', |
|
| 15 | - 'admin_debug' => 'debug', |
|
| 16 | - 'admin_modifier_article' => 'Modificar este artigo', |
|
| 17 | - 'admin_modifier_auteur' => 'Modificar este autor', |
|
| 18 | - 'admin_modifier_breve' => 'Modificar esta notícia', |
|
| 19 | - 'admin_modifier_mot' => 'Modificar esta palavra-chave', |
|
| 20 | - 'admin_modifier_rubrique' => 'Modificar esta rubrica', |
|
| 21 | - 'admin_recalculer' => 'Recompor esta página', |
|
| 22 | - 'afficher_calendrier' => 'Exibir o calendário', |
|
| 23 | - 'afficher_trad' => 'exibir as traduções', |
|
| 24 | - 'alerte_maj_impossible' => '<b>Alerta !</b> A actualização da base de dados SQL para a versão @version@ é impossível, talvez por causa de um problema de permissão de modificação na base de dados. Por favor contacte o seu serviço de hospedagem.', |
|
| 25 | - 'alerte_modif_info_concourante' => 'ATTENÇÃO : Esta informação já foi modificada noutro menu. O valor actual é :', |
|
| 26 | - 'analyse_xml' => 'Análise XML', |
|
| 27 | - 'annuler' => 'Cancelar', |
|
| 28 | - 'antispam_champ_vide' => 'Por favor deixe este campo vazio :', |
|
| 29 | - 'articles_recents' => 'Artigos mais recentes', |
|
| 30 | - 'avis_archive_incorrect' => 'o ficheiro arquivo não é um ficheiro SPIP', |
|
| 31 | - 'avis_archive_invalide' => 'o ficheiro arquivo não é válido ', |
|
| 32 | - 'avis_attention' => ' ATENÇÂO!', |
|
| 33 | - 'avis_champ_incorrect_type_objet' => 'Nome de campo incorrecto @name@ para objecto de tipo @type@', |
|
| 34 | - 'avis_colonne_inexistante' => 'A coluna @col@ não existe', |
|
| 35 | - 'avis_erreur' => 'Erro: ver mais abaixo', |
|
| 36 | - 'avis_erreur_connexion' => 'Erro de ligação ', |
|
| 37 | - 'avis_erreur_cookie' => 'problema de cookie', |
|
| 38 | - 'avis_erreur_fonction_contexte' => 'Erro de programação. Não se pode chamar esta função neste contexto.', |
|
| 39 | - 'avis_erreur_mysql' => 'Erro SQL', |
|
| 40 | - 'avis_erreur_sauvegarde' => 'Erro na cópia de segurança (@type@ @id_objet@) !', |
|
| 41 | - 'avis_erreur_visiteur' => 'Problema de acesso à área privada', |
|
| 12 | + // A |
|
| 13 | + 'access_interface_graphique' => 'Voltar à interface gráfica completa', |
|
| 14 | + 'access_mode_texte' => 'Exibir a interface textual simplificada', |
|
| 15 | + 'admin_debug' => 'debug', |
|
| 16 | + 'admin_modifier_article' => 'Modificar este artigo', |
|
| 17 | + 'admin_modifier_auteur' => 'Modificar este autor', |
|
| 18 | + 'admin_modifier_breve' => 'Modificar esta notícia', |
|
| 19 | + 'admin_modifier_mot' => 'Modificar esta palavra-chave', |
|
| 20 | + 'admin_modifier_rubrique' => 'Modificar esta rubrica', |
|
| 21 | + 'admin_recalculer' => 'Recompor esta página', |
|
| 22 | + 'afficher_calendrier' => 'Exibir o calendário', |
|
| 23 | + 'afficher_trad' => 'exibir as traduções', |
|
| 24 | + 'alerte_maj_impossible' => '<b>Alerta !</b> A actualização da base de dados SQL para a versão @version@ é impossível, talvez por causa de um problema de permissão de modificação na base de dados. Por favor contacte o seu serviço de hospedagem.', |
|
| 25 | + 'alerte_modif_info_concourante' => 'ATTENÇÃO : Esta informação já foi modificada noutro menu. O valor actual é :', |
|
| 26 | + 'analyse_xml' => 'Análise XML', |
|
| 27 | + 'annuler' => 'Cancelar', |
|
| 28 | + 'antispam_champ_vide' => 'Por favor deixe este campo vazio :', |
|
| 29 | + 'articles_recents' => 'Artigos mais recentes', |
|
| 30 | + 'avis_archive_incorrect' => 'o ficheiro arquivo não é um ficheiro SPIP', |
|
| 31 | + 'avis_archive_invalide' => 'o ficheiro arquivo não é válido ', |
|
| 32 | + 'avis_attention' => ' ATENÇÂO!', |
|
| 33 | + 'avis_champ_incorrect_type_objet' => 'Nome de campo incorrecto @name@ para objecto de tipo @type@', |
|
| 34 | + 'avis_colonne_inexistante' => 'A coluna @col@ não existe', |
|
| 35 | + 'avis_erreur' => 'Erro: ver mais abaixo', |
|
| 36 | + 'avis_erreur_connexion' => 'Erro de ligação ', |
|
| 37 | + 'avis_erreur_cookie' => 'problema de cookie', |
|
| 38 | + 'avis_erreur_fonction_contexte' => 'Erro de programação. Não se pode chamar esta função neste contexto.', |
|
| 39 | + 'avis_erreur_mysql' => 'Erro SQL', |
|
| 40 | + 'avis_erreur_sauvegarde' => 'Erro na cópia de segurança (@type@ @id_objet@) !', |
|
| 41 | + 'avis_erreur_visiteur' => 'Problema de acesso à área privada', |
|
| 42 | 42 | |
| 43 | - // B |
|
| 44 | - 'barre_a_accent_grave' => 'Inserir um A maiúsculo com acento grave', |
|
| 45 | - 'barre_aide' => 'Utilize as abreviaturas tipográficas para enriquecer a sua paginação.', |
|
| 46 | - 'barre_e_accent_aigu' => 'Inserir um E maiúsculo com acento agudo ', |
|
| 47 | - 'barre_eo' => 'Inserir um E no O', |
|
| 48 | - 'barre_eo_maj' => 'Inserir um E no O maiúsculo', |
|
| 49 | - 'barre_euro' => 'Inserir o símbolo €', |
|
| 50 | - 'barre_gras' => ' Escrever em {{negro}}', |
|
| 51 | - 'barre_guillemets' => 'Colocar entre "aspas" ', |
|
| 52 | - 'barre_guillemets_simples' => 'Colocar entre ’aspas simples’', |
|
| 53 | - 'barre_intertitre' => 'Transfomar em {{{intertítulo}}} ', |
|
| 54 | - 'barre_italic' => 'Pôr em itálico ', |
|
| 55 | - 'barre_lien' => 'Transformar em [ligação hipertexto->http://...]', |
|
| 56 | - 'barre_lien_input' => 'Por favor indique o endereço da sua ligação (pode indicar um endereço Web sob a forma http://www.monsite/com ou simplesmente indicar o número de um artigo deste sítio.) ', |
|
| 57 | - 'barre_note' => 'Transformar em [[Nota de rodapé ]]', |
|
| 58 | - 'barre_paragraphe' => 'Criar um parágrafo', |
|
| 59 | - 'barre_quote' => '<quote>Citar uma mensagem</quote>', |
|
| 60 | - 'bouton_changer' => 'Modificar', |
|
| 61 | - 'bouton_chercher' => 'Procurar', |
|
| 62 | - 'bouton_choisir' => 'Seleccionar', |
|
| 63 | - 'bouton_deplacer' => 'Mover', |
|
| 64 | - 'bouton_download' => 'Download', |
|
| 65 | - 'bouton_enregistrer' => 'Guardar', |
|
| 66 | - 'bouton_radio_desactiver_messagerie_interne' => 'Desactivar a caixa de correio interno', |
|
| 67 | - 'bouton_radio_envoi_annonces' => 'Enviar os anúncios editoriais', |
|
| 68 | - 'bouton_radio_non_envoi_annonces' => 'Não enviar anúncios', |
|
| 69 | - 'bouton_radio_non_envoi_liste_nouveautes' => 'Não enviar a lista das novidades', |
|
| 70 | - 'bouton_recharger_page' => 'recarregar esta página', |
|
| 71 | - 'bouton_telecharger' => 'Carregar', |
|
| 72 | - 'bouton_upload' => 'Carregar', |
|
| 73 | - 'bouton_valider' => 'Submeter', |
|
| 43 | + // B |
|
| 44 | + 'barre_a_accent_grave' => 'Inserir um A maiúsculo com acento grave', |
|
| 45 | + 'barre_aide' => 'Utilize as abreviaturas tipográficas para enriquecer a sua paginação.', |
|
| 46 | + 'barre_e_accent_aigu' => 'Inserir um E maiúsculo com acento agudo ', |
|
| 47 | + 'barre_eo' => 'Inserir um E no O', |
|
| 48 | + 'barre_eo_maj' => 'Inserir um E no O maiúsculo', |
|
| 49 | + 'barre_euro' => 'Inserir o símbolo €', |
|
| 50 | + 'barre_gras' => ' Escrever em {{negro}}', |
|
| 51 | + 'barre_guillemets' => 'Colocar entre "aspas" ', |
|
| 52 | + 'barre_guillemets_simples' => 'Colocar entre ’aspas simples’', |
|
| 53 | + 'barre_intertitre' => 'Transfomar em {{{intertítulo}}} ', |
|
| 54 | + 'barre_italic' => 'Pôr em itálico ', |
|
| 55 | + 'barre_lien' => 'Transformar em [ligação hipertexto->http://...]', |
|
| 56 | + 'barre_lien_input' => 'Por favor indique o endereço da sua ligação (pode indicar um endereço Web sob a forma http://www.monsite/com ou simplesmente indicar o número de um artigo deste sítio.) ', |
|
| 57 | + 'barre_note' => 'Transformar em [[Nota de rodapé ]]', |
|
| 58 | + 'barre_paragraphe' => 'Criar um parágrafo', |
|
| 59 | + 'barre_quote' => '<quote>Citar uma mensagem</quote>', |
|
| 60 | + 'bouton_changer' => 'Modificar', |
|
| 61 | + 'bouton_chercher' => 'Procurar', |
|
| 62 | + 'bouton_choisir' => 'Seleccionar', |
|
| 63 | + 'bouton_deplacer' => 'Mover', |
|
| 64 | + 'bouton_download' => 'Download', |
|
| 65 | + 'bouton_enregistrer' => 'Guardar', |
|
| 66 | + 'bouton_radio_desactiver_messagerie_interne' => 'Desactivar a caixa de correio interno', |
|
| 67 | + 'bouton_radio_envoi_annonces' => 'Enviar os anúncios editoriais', |
|
| 68 | + 'bouton_radio_non_envoi_annonces' => 'Não enviar anúncios', |
|
| 69 | + 'bouton_radio_non_envoi_liste_nouveautes' => 'Não enviar a lista das novidades', |
|
| 70 | + 'bouton_recharger_page' => 'recarregar esta página', |
|
| 71 | + 'bouton_telecharger' => 'Carregar', |
|
| 72 | + 'bouton_upload' => 'Carregar', |
|
| 73 | + 'bouton_valider' => 'Submeter', |
|
| 74 | 74 | |
| 75 | - // C |
|
| 76 | - 'cal_apresmidi' => 'tarde', |
|
| 77 | - 'cal_jour_entier' => 'dia todo', |
|
| 78 | - 'cal_matin' => 'manhã', |
|
| 79 | - 'cal_par_jour' => 'calendário por dia', |
|
| 80 | - 'cal_par_mois' => 'calendário por mês', |
|
| 81 | - 'cal_par_semaine' => 'calendário por semana', |
|
| 82 | - 'choix_couleur_interface' => 'cor', |
|
| 83 | - 'choix_interface' => 'escolha da interface', |
|
| 84 | - 'colonne' => 'Coluna', |
|
| 85 | - 'confirm_changer_statut' => 'Atenção, solicitou a alteração do estatuto deste elemento. Deseja continuar?', |
|
| 86 | - 'correcte' => 'correcto', |
|
| 75 | + // C |
|
| 76 | + 'cal_apresmidi' => 'tarde', |
|
| 77 | + 'cal_jour_entier' => 'dia todo', |
|
| 78 | + 'cal_matin' => 'manhã', |
|
| 79 | + 'cal_par_jour' => 'calendário por dia', |
|
| 80 | + 'cal_par_mois' => 'calendário por mês', |
|
| 81 | + 'cal_par_semaine' => 'calendário por semana', |
|
| 82 | + 'choix_couleur_interface' => 'cor', |
|
| 83 | + 'choix_interface' => 'escolha da interface', |
|
| 84 | + 'colonne' => 'Coluna', |
|
| 85 | + 'confirm_changer_statut' => 'Atenção, solicitou a alteração do estatuto deste elemento. Deseja continuar?', |
|
| 86 | + 'correcte' => 'correcto', |
|
| 87 | 87 | |
| 88 | - // D |
|
| 89 | - 'date_aujourdhui' => 'hoje', |
|
| 90 | - 'date_avant_jc' => 'a. J.C.', |
|
| 91 | - 'date_dans' => 'entre @delai@', |
|
| 92 | - 'date_de_mois_1' => '@j@ de @nommois@', |
|
| 93 | - 'date_de_mois_10' => '@j@ de @nommois@', |
|
| 94 | - 'date_de_mois_11' => '@j@ de @nommois@', |
|
| 95 | - 'date_de_mois_12' => '@j@ de @nommois@', |
|
| 96 | - 'date_de_mois_2' => '@j@ de @nommois@', |
|
| 97 | - 'date_de_mois_3' => '@j@ de @nommois@', |
|
| 98 | - 'date_de_mois_4' => '@j@ de @nommois@', |
|
| 99 | - 'date_de_mois_5' => '@j@ de @nommois@', |
|
| 100 | - 'date_de_mois_6' => '@j@ de @nommois@', |
|
| 101 | - 'date_de_mois_7' => '@j@ de @nommois@', |
|
| 102 | - 'date_de_mois_8' => '@j@ de @nommois@', |
|
| 103 | - 'date_de_mois_9' => '@j@ de @nommois@', |
|
| 104 | - 'date_demain' => 'amanhã', |
|
| 105 | - 'date_fmt_heures_minutes' => '@h@h@m@min', |
|
| 106 | - 'date_fmt_heures_minutes_court' => '@h@:@m@', |
|
| 107 | - 'date_fmt_jour' => '@nomjour@ @jour@', |
|
| 108 | - 'date_fmt_jour_heure' => '@jour@ a @heure@', |
|
| 109 | - 'date_fmt_jour_heure_debut_fin' => '@jour@ de @heure_debut@ a @heure_fin@', # MODIF |
|
| 110 | - 'date_fmt_jour_heure_debut_fin_abbr' => '@dtstart@@jour@ de @heure_debut@@dtabbr@ a @dtstart@@heure_fin@@dtend@', # MODIF |
|
| 111 | - 'date_fmt_jour_mois' => '@jour@ de @nommois@', |
|
| 112 | - 'date_fmt_jour_mois_annee' => '@jour@ de @nommois@ de @annee@', |
|
| 113 | - 'date_fmt_mois_annee' => '@nommois@ de @annee@', |
|
| 114 | - 'date_fmt_nomjour' => '@nomjour@ @date@', |
|
| 115 | - 'date_fmt_nomjour_date' => ' @nomjour@ @date@', |
|
| 116 | - 'date_fmt_periode' => 'De @date_debut@ a @date_fin@', |
|
| 117 | - 'date_fmt_periode_abbr' => 'De @dtart@@date_debut@@dtabbr@ a @dtend@@date_fin@@dtabbr@', |
|
| 118 | - 'date_fmt_periode_from' => 'De', |
|
| 119 | - 'date_fmt_periode_to' => 'a', |
|
| 120 | - 'date_heures' => 'horas', |
|
| 121 | - 'date_hier' => 'ontem', |
|
| 122 | - 'date_il_y_a' => 'há @delai@', |
|
| 123 | - 'date_jnum1' => '1', |
|
| 124 | - 'date_jnum10' => '10', |
|
| 125 | - 'date_jnum11' => '11', |
|
| 126 | - 'date_jnum12' => '12', |
|
| 127 | - 'date_jnum13' => '13', |
|
| 128 | - 'date_jnum14' => '14', |
|
| 129 | - 'date_jnum15' => '15', |
|
| 130 | - 'date_jnum16' => '16', |
|
| 131 | - 'date_jnum17' => '17', |
|
| 132 | - 'date_jnum18' => '18', |
|
| 133 | - 'date_jnum19' => '19', |
|
| 134 | - 'date_jnum2' => '2', |
|
| 135 | - 'date_jnum20' => '20', |
|
| 136 | - 'date_jnum21' => '21', |
|
| 137 | - 'date_jnum22' => '22', |
|
| 138 | - 'date_jnum23' => '23', |
|
| 139 | - 'date_jnum24' => '24', |
|
| 140 | - 'date_jnum25' => '25', |
|
| 141 | - 'date_jnum26' => '26', |
|
| 142 | - 'date_jnum27' => '27', |
|
| 143 | - 'date_jnum28' => '28', |
|
| 144 | - 'date_jnum29' => '29', |
|
| 145 | - 'date_jnum3' => '3', |
|
| 146 | - 'date_jnum30' => '30', |
|
| 147 | - 'date_jnum31' => '31', |
|
| 148 | - 'date_jnum4' => '4', |
|
| 149 | - 'date_jnum5' => '5', |
|
| 150 | - 'date_jnum6' => '6', |
|
| 151 | - 'date_jnum7' => '7', |
|
| 152 | - 'date_jnum8' => '8', |
|
| 153 | - 'date_jnum9' => '9', |
|
| 154 | - 'date_jour_1' => 'domingo', |
|
| 155 | - 'date_jour_1_abbr' => 'Dom.', |
|
| 156 | - 'date_jour_1_initiale' => 'D.', |
|
| 157 | - 'date_jour_2' => 'segunda-feira', |
|
| 158 | - 'date_jour_2_abbr' => 'Seg.', |
|
| 159 | - 'date_jour_2_initiale' => 'S.', |
|
| 160 | - 'date_jour_3' => 'terça-feira', |
|
| 161 | - 'date_jour_3_abbr' => 'Ter.', |
|
| 162 | - 'date_jour_3_initiale' => 'T.', |
|
| 163 | - 'date_jour_4' => 'quarta-feira', |
|
| 164 | - 'date_jour_4_abbr' => 'Qua.', |
|
| 165 | - 'date_jour_4_initiale' => 'Q.', |
|
| 166 | - 'date_jour_5' => 'quinta-feira', |
|
| 167 | - 'date_jour_5_abbr' => 'Qui.', |
|
| 168 | - 'date_jour_5_initiale' => 'Q.', |
|
| 169 | - 'date_jour_6' => 'sexta-feira', |
|
| 170 | - 'date_jour_6_abbr' => 'Sex.', |
|
| 171 | - 'date_jour_6_initiale' => 'S.', |
|
| 172 | - 'date_jour_7' => 'sábado', |
|
| 173 | - 'date_jour_7_abbr' => 'Sab.', |
|
| 174 | - 'date_jour_7_initiale' => 'S.', |
|
| 175 | - 'date_jours' => 'dias', |
|
| 176 | - 'date_minutes' => 'minutos', |
|
| 177 | - 'date_mois' => 'meses', |
|
| 178 | - 'date_mois_1' => 'Janeiro', |
|
| 179 | - 'date_mois_10' => 'Outubro', |
|
| 180 | - 'date_mois_10_abbr' => 'Out.', |
|
| 181 | - 'date_mois_11' => 'Novembro', |
|
| 182 | - 'date_mois_11_abbr' => 'Nov.', |
|
| 183 | - 'date_mois_12' => 'Dezembro', |
|
| 184 | - 'date_mois_12_abbr' => 'Dez.', |
|
| 185 | - 'date_mois_1_abbr' => 'Jan.', |
|
| 186 | - 'date_mois_2' => 'Fevereiro', |
|
| 187 | - 'date_mois_2_abbr' => 'Feb.', |
|
| 188 | - 'date_mois_3' => 'Março', |
|
| 189 | - 'date_mois_3_abbr' => 'Mar', |
|
| 190 | - 'date_mois_4' => 'Abril', |
|
| 191 | - 'date_mois_4_abbr' => 'Abr.', |
|
| 192 | - 'date_mois_5' => 'Maio', |
|
| 193 | - 'date_mois_5_abbr' => 'Mai', |
|
| 194 | - 'date_mois_6' => 'Junho', |
|
| 195 | - 'date_mois_6_abbr' => 'Jun', |
|
| 196 | - 'date_mois_7' => 'Julho', |
|
| 197 | - 'date_mois_7_abbr' => 'Jul', |
|
| 198 | - 'date_mois_8' => 'Agosto', |
|
| 199 | - 'date_mois_8_abbr' => 'Ago', |
|
| 200 | - 'date_mois_9' => 'Setembro', |
|
| 201 | - 'date_mois_9_abbr' => 'Set', |
|
| 202 | - 'date_saison_1' => 'inverno', |
|
| 203 | - 'date_saison_2' => 'primavera', |
|
| 204 | - 'date_saison_3' => 'verão', |
|
| 205 | - 'date_saison_4' => 'outono', |
|
| 206 | - 'date_secondes' => 'segundos', |
|
| 207 | - 'date_semaines' => 'semanas', |
|
| 208 | - 'date_un_mois' => 'mês', |
|
| 209 | - 'date_une_heure' => 'hora', |
|
| 210 | - 'date_une_minute' => 'minuto', |
|
| 211 | - 'date_une_seconde' => 'segundo', |
|
| 212 | - 'date_une_semaine' => 'semana', |
|
| 213 | - 'dirs_commencer' => 'a fim de começar realmente a instalação', |
|
| 214 | - 'dirs_preliminaire' => 'Preliminar : <b>Configurar os direitos de acesso</b>', |
|
| 215 | - 'dirs_probleme_droits' => 'Problema de direitos de acesso', |
|
| 216 | - 'dirs_repertoires_absents' => '<b>Os seguintes directórios não foram encontrados : <ul>@bad_dirs@.</ul> </b> |
|
| 88 | + // D |
|
| 89 | + 'date_aujourdhui' => 'hoje', |
|
| 90 | + 'date_avant_jc' => 'a. J.C.', |
|
| 91 | + 'date_dans' => 'entre @delai@', |
|
| 92 | + 'date_de_mois_1' => '@j@ de @nommois@', |
|
| 93 | + 'date_de_mois_10' => '@j@ de @nommois@', |
|
| 94 | + 'date_de_mois_11' => '@j@ de @nommois@', |
|
| 95 | + 'date_de_mois_12' => '@j@ de @nommois@', |
|
| 96 | + 'date_de_mois_2' => '@j@ de @nommois@', |
|
| 97 | + 'date_de_mois_3' => '@j@ de @nommois@', |
|
| 98 | + 'date_de_mois_4' => '@j@ de @nommois@', |
|
| 99 | + 'date_de_mois_5' => '@j@ de @nommois@', |
|
| 100 | + 'date_de_mois_6' => '@j@ de @nommois@', |
|
| 101 | + 'date_de_mois_7' => '@j@ de @nommois@', |
|
| 102 | + 'date_de_mois_8' => '@j@ de @nommois@', |
|
| 103 | + 'date_de_mois_9' => '@j@ de @nommois@', |
|
| 104 | + 'date_demain' => 'amanhã', |
|
| 105 | + 'date_fmt_heures_minutes' => '@h@h@m@min', |
|
| 106 | + 'date_fmt_heures_minutes_court' => '@h@:@m@', |
|
| 107 | + 'date_fmt_jour' => '@nomjour@ @jour@', |
|
| 108 | + 'date_fmt_jour_heure' => '@jour@ a @heure@', |
|
| 109 | + 'date_fmt_jour_heure_debut_fin' => '@jour@ de @heure_debut@ a @heure_fin@', # MODIF |
|
| 110 | + 'date_fmt_jour_heure_debut_fin_abbr' => '@dtstart@@jour@ de @heure_debut@@dtabbr@ a @dtstart@@heure_fin@@dtend@', # MODIF |
|
| 111 | + 'date_fmt_jour_mois' => '@jour@ de @nommois@', |
|
| 112 | + 'date_fmt_jour_mois_annee' => '@jour@ de @nommois@ de @annee@', |
|
| 113 | + 'date_fmt_mois_annee' => '@nommois@ de @annee@', |
|
| 114 | + 'date_fmt_nomjour' => '@nomjour@ @date@', |
|
| 115 | + 'date_fmt_nomjour_date' => ' @nomjour@ @date@', |
|
| 116 | + 'date_fmt_periode' => 'De @date_debut@ a @date_fin@', |
|
| 117 | + 'date_fmt_periode_abbr' => 'De @dtart@@date_debut@@dtabbr@ a @dtend@@date_fin@@dtabbr@', |
|
| 118 | + 'date_fmt_periode_from' => 'De', |
|
| 119 | + 'date_fmt_periode_to' => 'a', |
|
| 120 | + 'date_heures' => 'horas', |
|
| 121 | + 'date_hier' => 'ontem', |
|
| 122 | + 'date_il_y_a' => 'há @delai@', |
|
| 123 | + 'date_jnum1' => '1', |
|
| 124 | + 'date_jnum10' => '10', |
|
| 125 | + 'date_jnum11' => '11', |
|
| 126 | + 'date_jnum12' => '12', |
|
| 127 | + 'date_jnum13' => '13', |
|
| 128 | + 'date_jnum14' => '14', |
|
| 129 | + 'date_jnum15' => '15', |
|
| 130 | + 'date_jnum16' => '16', |
|
| 131 | + 'date_jnum17' => '17', |
|
| 132 | + 'date_jnum18' => '18', |
|
| 133 | + 'date_jnum19' => '19', |
|
| 134 | + 'date_jnum2' => '2', |
|
| 135 | + 'date_jnum20' => '20', |
|
| 136 | + 'date_jnum21' => '21', |
|
| 137 | + 'date_jnum22' => '22', |
|
| 138 | + 'date_jnum23' => '23', |
|
| 139 | + 'date_jnum24' => '24', |
|
| 140 | + 'date_jnum25' => '25', |
|
| 141 | + 'date_jnum26' => '26', |
|
| 142 | + 'date_jnum27' => '27', |
|
| 143 | + 'date_jnum28' => '28', |
|
| 144 | + 'date_jnum29' => '29', |
|
| 145 | + 'date_jnum3' => '3', |
|
| 146 | + 'date_jnum30' => '30', |
|
| 147 | + 'date_jnum31' => '31', |
|
| 148 | + 'date_jnum4' => '4', |
|
| 149 | + 'date_jnum5' => '5', |
|
| 150 | + 'date_jnum6' => '6', |
|
| 151 | + 'date_jnum7' => '7', |
|
| 152 | + 'date_jnum8' => '8', |
|
| 153 | + 'date_jnum9' => '9', |
|
| 154 | + 'date_jour_1' => 'domingo', |
|
| 155 | + 'date_jour_1_abbr' => 'Dom.', |
|
| 156 | + 'date_jour_1_initiale' => 'D.', |
|
| 157 | + 'date_jour_2' => 'segunda-feira', |
|
| 158 | + 'date_jour_2_abbr' => 'Seg.', |
|
| 159 | + 'date_jour_2_initiale' => 'S.', |
|
| 160 | + 'date_jour_3' => 'terça-feira', |
|
| 161 | + 'date_jour_3_abbr' => 'Ter.', |
|
| 162 | + 'date_jour_3_initiale' => 'T.', |
|
| 163 | + 'date_jour_4' => 'quarta-feira', |
|
| 164 | + 'date_jour_4_abbr' => 'Qua.', |
|
| 165 | + 'date_jour_4_initiale' => 'Q.', |
|
| 166 | + 'date_jour_5' => 'quinta-feira', |
|
| 167 | + 'date_jour_5_abbr' => 'Qui.', |
|
| 168 | + 'date_jour_5_initiale' => 'Q.', |
|
| 169 | + 'date_jour_6' => 'sexta-feira', |
|
| 170 | + 'date_jour_6_abbr' => 'Sex.', |
|
| 171 | + 'date_jour_6_initiale' => 'S.', |
|
| 172 | + 'date_jour_7' => 'sábado', |
|
| 173 | + 'date_jour_7_abbr' => 'Sab.', |
|
| 174 | + 'date_jour_7_initiale' => 'S.', |
|
| 175 | + 'date_jours' => 'dias', |
|
| 176 | + 'date_minutes' => 'minutos', |
|
| 177 | + 'date_mois' => 'meses', |
|
| 178 | + 'date_mois_1' => 'Janeiro', |
|
| 179 | + 'date_mois_10' => 'Outubro', |
|
| 180 | + 'date_mois_10_abbr' => 'Out.', |
|
| 181 | + 'date_mois_11' => 'Novembro', |
|
| 182 | + 'date_mois_11_abbr' => 'Nov.', |
|
| 183 | + 'date_mois_12' => 'Dezembro', |
|
| 184 | + 'date_mois_12_abbr' => 'Dez.', |
|
| 185 | + 'date_mois_1_abbr' => 'Jan.', |
|
| 186 | + 'date_mois_2' => 'Fevereiro', |
|
| 187 | + 'date_mois_2_abbr' => 'Feb.', |
|
| 188 | + 'date_mois_3' => 'Março', |
|
| 189 | + 'date_mois_3_abbr' => 'Mar', |
|
| 190 | + 'date_mois_4' => 'Abril', |
|
| 191 | + 'date_mois_4_abbr' => 'Abr.', |
|
| 192 | + 'date_mois_5' => 'Maio', |
|
| 193 | + 'date_mois_5_abbr' => 'Mai', |
|
| 194 | + 'date_mois_6' => 'Junho', |
|
| 195 | + 'date_mois_6_abbr' => 'Jun', |
|
| 196 | + 'date_mois_7' => 'Julho', |
|
| 197 | + 'date_mois_7_abbr' => 'Jul', |
|
| 198 | + 'date_mois_8' => 'Agosto', |
|
| 199 | + 'date_mois_8_abbr' => 'Ago', |
|
| 200 | + 'date_mois_9' => 'Setembro', |
|
| 201 | + 'date_mois_9_abbr' => 'Set', |
|
| 202 | + 'date_saison_1' => 'inverno', |
|
| 203 | + 'date_saison_2' => 'primavera', |
|
| 204 | + 'date_saison_3' => 'verão', |
|
| 205 | + 'date_saison_4' => 'outono', |
|
| 206 | + 'date_secondes' => 'segundos', |
|
| 207 | + 'date_semaines' => 'semanas', |
|
| 208 | + 'date_un_mois' => 'mês', |
|
| 209 | + 'date_une_heure' => 'hora', |
|
| 210 | + 'date_une_minute' => 'minuto', |
|
| 211 | + 'date_une_seconde' => 'segundo', |
|
| 212 | + 'date_une_semaine' => 'semana', |
|
| 213 | + 'dirs_commencer' => 'a fim de começar realmente a instalação', |
|
| 214 | + 'dirs_preliminaire' => 'Preliminar : <b>Configurar os direitos de acesso</b>', |
|
| 215 | + 'dirs_probleme_droits' => 'Problema de direitos de acesso', |
|
| 216 | + 'dirs_repertoires_absents' => '<b>Os seguintes directórios não foram encontrados : <ul>@bad_dirs@.</ul> </b> |
|
| 217 | 217 | <p>É provável que resulte de um problema de má colocação de maiúsculas ou minúsculas. |
| 218 | 218 | Verifique que as minúsculas e maiúsculas destes directórios concordam com o que está exibido |
| 219 | 219 | acima; se não for o caso, renomeie os repertórios com o seu software FTP de modo a corrigir o erro. |
| 220 | 220 | <p>Terminada esta operação, poderá</p>', |
| 221 | - 'dirs_repertoires_suivants' => '<b>Os seguintes directórios não estão acessíveis para escrita: <ul>@bad_dirs@.</ul> </b> |
|
| 221 | + 'dirs_repertoires_suivants' => '<b>Os seguintes directórios não estão acessíveis para escrita: <ul>@bad_dirs@.</ul> </b> |
|
| 222 | 222 | <p>Para corrigir, utilize o seu programa de FTP para configurar os direitos de acesso de cada um |
| 223 | 223 | destes directórios. O procedimento está explicado em detalhe no manual de instalação. |
| 224 | 224 | <p>Uma vez efectuada esta alteração, poderá', |
| 225 | - 'double_occurrence' => 'Dupla ocorrência de @balise@', |
|
| 225 | + 'double_occurrence' => 'Dupla ocorrência de @balise@', |
|
| 226 | 226 | |
| 227 | - // E |
|
| 228 | - 'en_cours' => 'em curso', |
|
| 229 | - 'envoi_via_le_site' => 'Envio pelo sítio', |
|
| 230 | - 'erreur' => 'Erro', |
|
| 231 | - 'erreur_balise_non_fermee' => 'última tag não fechada :', |
|
| 232 | - 'erreur_technique_ajaxform' => 'Ooops. Uum erro inesperado impediu o formulário de ser enviado. Por favor tente novamente.', |
|
| 233 | - 'erreur_technique_enregistrement_champs' => 'Um erro técnico impediu o registo correcto do campo @champs@.', |
|
| 234 | - 'erreur_technique_enregistrement_impossible' => 'Um erro técnico impediu o registo.', |
|
| 235 | - 'erreur_texte' => 'erro(s)', |
|
| 236 | - 'etape' => 'Etapa', |
|
| 227 | + // E |
|
| 228 | + 'en_cours' => 'em curso', |
|
| 229 | + 'envoi_via_le_site' => 'Envio pelo sítio', |
|
| 230 | + 'erreur' => 'Erro', |
|
| 231 | + 'erreur_balise_non_fermee' => 'última tag não fechada :', |
|
| 232 | + 'erreur_technique_ajaxform' => 'Ooops. Uum erro inesperado impediu o formulário de ser enviado. Por favor tente novamente.', |
|
| 233 | + 'erreur_technique_enregistrement_champs' => 'Um erro técnico impediu o registo correcto do campo @champs@.', |
|
| 234 | + 'erreur_technique_enregistrement_impossible' => 'Um erro técnico impediu o registo.', |
|
| 235 | + 'erreur_texte' => 'erro(s)', |
|
| 236 | + 'etape' => 'Etapa', |
|
| 237 | 237 | |
| 238 | - // F |
|
| 239 | - 'fichier_introuvable' => 'Ficheiro @fichier@ não localizado', |
|
| 240 | - 'form_auteur_confirmation' => 'Confirme o seu endereço e-mail', |
|
| 241 | - 'form_auteur_email_modifie' => 'O seu endereço e-mail foi alterado.', |
|
| 242 | - 'form_auteur_envoi_mail_confirmation' => 'Um e-mail de confirmação foi enviado para @email@. Para validar o seu endereço de e-mail, deve abrir o endereço Web mencionado na mensagem.', |
|
| 243 | - 'form_auteur_mail_confirmation' => 'Olá, |
|
| 238 | + // F |
|
| 239 | + 'fichier_introuvable' => 'Ficheiro @fichier@ não localizado', |
|
| 240 | + 'form_auteur_confirmation' => 'Confirme o seu endereço e-mail', |
|
| 241 | + 'form_auteur_email_modifie' => 'O seu endereço e-mail foi alterado.', |
|
| 242 | + 'form_auteur_envoi_mail_confirmation' => 'Um e-mail de confirmação foi enviado para @email@. Para validar o seu endereço de e-mail, deve abrir o endereço Web mencionado na mensagem.', |
|
| 243 | + 'form_auteur_mail_confirmation' => 'Olá, |
|
| 244 | 244 | |
| 245 | 245 | Pediu para alterar o seu endereço e-mail. Para confirmar o seu novo endereço, precisa de se conectar ao endereço abaixo (caso contrário, o seu pedido será ignorado) : |
| 246 | 246 | |
| 247 | 247 | @url@ |
| 248 | 248 | ', |
| 249 | - 'form_deja_inscrit' => 'Já está inscrito.', |
|
| 250 | - 'form_email_non_valide' => 'O seu endereço email não é válido', |
|
| 251 | - 'form_forum_access_refuse' => 'Você já não tem acesso a este sítio', |
|
| 252 | - 'form_forum_bonjour' => 'Bom dia @nom@,', |
|
| 253 | - 'form_forum_confirmer_email' => 'Para confirmar o seu endereço e-maill, abra esta ligação : @url_confirm@', |
|
| 254 | - 'form_forum_email_deja_enregistre' => 'Este endereço e-mail já está registado,pode portanto utilizar a sua palavra-passe habitual', |
|
| 255 | - 'form_forum_identifiant_mail' => 'O seu novo identificador acabou de lhe ser enviado por email.', |
|
| 256 | - 'form_forum_identifiants' => 'Identificadores pessoais', |
|
| 257 | - 'form_forum_indiquer_nom_email' => 'Indicar aqui o seu nome e o seu endereço email. O seu identificador pessoal ser-lhe-á enviado rapidamente por correio electrónico.', |
|
| 258 | - 'form_forum_login' => 'login:', |
|
| 259 | - 'form_forum_message_auto' => '(esta é uma mensagem automática)', |
|
| 260 | - 'form_forum_pass' => 'palavra-passe', |
|
| 261 | - 'form_forum_probleme_mail' => 'Problema de mail :o identificador não pôde ser enviado', |
|
| 262 | - 'form_forum_voici1' => 'Aqui estão os seus dados para poder aceder ao sítio Internet do "@nom_site_spip@" (@adresse_site@):', |
|
| 263 | - 'form_forum_voici2' => 'Eis os seus identificadores para propor artigos no |
|
| 249 | + 'form_deja_inscrit' => 'Já está inscrito.', |
|
| 250 | + 'form_email_non_valide' => 'O seu endereço email não é válido', |
|
| 251 | + 'form_forum_access_refuse' => 'Você já não tem acesso a este sítio', |
|
| 252 | + 'form_forum_bonjour' => 'Bom dia @nom@,', |
|
| 253 | + 'form_forum_confirmer_email' => 'Para confirmar o seu endereço e-maill, abra esta ligação : @url_confirm@', |
|
| 254 | + 'form_forum_email_deja_enregistre' => 'Este endereço e-mail já está registado,pode portanto utilizar a sua palavra-passe habitual', |
|
| 255 | + 'form_forum_identifiant_mail' => 'O seu novo identificador acabou de lhe ser enviado por email.', |
|
| 256 | + 'form_forum_identifiants' => 'Identificadores pessoais', |
|
| 257 | + 'form_forum_indiquer_nom_email' => 'Indicar aqui o seu nome e o seu endereço email. O seu identificador pessoal ser-lhe-á enviado rapidamente por correio electrónico.', |
|
| 258 | + 'form_forum_login' => 'login:', |
|
| 259 | + 'form_forum_message_auto' => '(esta é uma mensagem automática)', |
|
| 260 | + 'form_forum_pass' => 'palavra-passe', |
|
| 261 | + 'form_forum_probleme_mail' => 'Problema de mail :o identificador não pôde ser enviado', |
|
| 262 | + 'form_forum_voici1' => 'Aqui estão os seus dados para poder aceder ao sítio Internet do "@nom_site_spip@" (@adresse_site@):', |
|
| 263 | + 'form_forum_voici2' => 'Eis os seus identificadores para propor artigos no |
|
| 264 | 264 | sítio "@nom_site_spip@" (@adresse_login@):', |
| 265 | - 'form_indiquer_email' => 'Por favor indique o seu endereço email.', |
|
| 266 | - 'form_indiquer_nom' => 'Por favor indique o seu nome.', |
|
| 267 | - 'form_indiquer_nom_site' => 'Por favor indique o nome do seu sítio.', |
|
| 268 | - 'form_pet_deja_enregistre' => 'Este sítio já está registado', |
|
| 269 | - 'form_pet_signature_pasprise' => 'A sua assinatura não está tomada em conta.', |
|
| 270 | - 'form_prop_confirmer_envoi' => 'Confirmar o envio', |
|
| 271 | - 'form_prop_description' => 'Descrição/comentário', |
|
| 272 | - 'form_prop_enregistre' => 'A sua proposta foi registada. Aparecerá online após a validação pelos responsáveis deste sítio.', |
|
| 273 | - 'form_prop_envoyer' => 'Enviar uma mensagem', |
|
| 274 | - 'form_prop_indiquer_email' => 'Por favor indique um endereço email válido', |
|
| 275 | - 'form_prop_indiquer_nom_site' => 'Por favor indique o nome do sítio.', |
|
| 276 | - 'form_prop_indiquer_sujet' => 'Por favor indique um tema', |
|
| 277 | - 'form_prop_message_envoye' => 'Mensagem enviada', |
|
| 278 | - 'form_prop_non_enregistre' => 'A sua proposta não foi registada.', |
|
| 279 | - 'form_prop_sujet' => 'Tema', |
|
| 280 | - 'form_prop_url_site' => 'Endereço (URL) do sítio', |
|
| 281 | - 'forum_non_inscrit' => 'Não está inscrito, ou o endereço ou a palavra-passe estão errados.', |
|
| 282 | - 'forum_par_auteur' => 'por @auteur@', |
|
| 283 | - 'forum_titre_erreur' => 'Erro...', |
|
| 265 | + 'form_indiquer_email' => 'Por favor indique o seu endereço email.', |
|
| 266 | + 'form_indiquer_nom' => 'Por favor indique o seu nome.', |
|
| 267 | + 'form_indiquer_nom_site' => 'Por favor indique o nome do seu sítio.', |
|
| 268 | + 'form_pet_deja_enregistre' => 'Este sítio já está registado', |
|
| 269 | + 'form_pet_signature_pasprise' => 'A sua assinatura não está tomada em conta.', |
|
| 270 | + 'form_prop_confirmer_envoi' => 'Confirmar o envio', |
|
| 271 | + 'form_prop_description' => 'Descrição/comentário', |
|
| 272 | + 'form_prop_enregistre' => 'A sua proposta foi registada. Aparecerá online após a validação pelos responsáveis deste sítio.', |
|
| 273 | + 'form_prop_envoyer' => 'Enviar uma mensagem', |
|
| 274 | + 'form_prop_indiquer_email' => 'Por favor indique um endereço email válido', |
|
| 275 | + 'form_prop_indiquer_nom_site' => 'Por favor indique o nome do sítio.', |
|
| 276 | + 'form_prop_indiquer_sujet' => 'Por favor indique um tema', |
|
| 277 | + 'form_prop_message_envoye' => 'Mensagem enviada', |
|
| 278 | + 'form_prop_non_enregistre' => 'A sua proposta não foi registada.', |
|
| 279 | + 'form_prop_sujet' => 'Tema', |
|
| 280 | + 'form_prop_url_site' => 'Endereço (URL) do sítio', |
|
| 281 | + 'forum_non_inscrit' => 'Não está inscrito, ou o endereço ou a palavra-passe estão errados.', |
|
| 282 | + 'forum_par_auteur' => 'por @auteur@', |
|
| 283 | + 'forum_titre_erreur' => 'Erro...', |
|
| 284 | 284 | |
| 285 | - // I |
|
| 286 | - 'ical_texte_rss_articles' => 'O ficheiro «backend» dos artigos deste sítio encontra-se neste endereço:', |
|
| 287 | - 'ical_texte_rss_articles2' => 'Pode igualmente obter os ficheiros «backend» para os artigos de cada rubrica do sítio:', |
|
| 288 | - 'ical_texte_rss_breves' => 'Existe também um ficheiro contendo notícias do sítio. Especificando um número de rubrica, obterá unicamente as notícias dessa rubrica.', |
|
| 289 | - 'icone_a_suivre' => 'Continua', |
|
| 290 | - 'icone_admin_site' => 'Administração do sítio', |
|
| 291 | - 'icone_agenda' => 'Agenda e correio', |
|
| 292 | - 'icone_aide_ligne' => 'Ajuda', |
|
| 293 | - 'icone_articles' => 'Artigos', |
|
| 294 | - 'icone_auteurs' => 'Autores', |
|
| 295 | - 'icone_brouteur' => 'Navegação rápida', |
|
| 296 | - 'icone_configuration_site' => 'Configuração', |
|
| 297 | - 'icone_configurer_site' => 'Configurar o seu sítio', |
|
| 298 | - 'icone_creer_nouvel_auteur' => 'Criar um novo autor', |
|
| 299 | - 'icone_creer_rubrique' => 'Criar uma rubrica', |
|
| 300 | - 'icone_creer_sous_rubrique' => 'Criar uma sub-rubrica', |
|
| 301 | - 'icone_deconnecter' => 'Sair', |
|
| 302 | - 'icone_discussions' => 'Discussões', |
|
| 303 | - 'icone_doc_rubrique' => 'Documentos das rubricas', |
|
| 304 | - 'icone_ecrire_article' => 'Escrever um novo artigo', |
|
| 305 | - 'icone_edition_site' => 'Edição', |
|
| 306 | - 'icone_gestion_langues' => 'Opções de idiomas', |
|
| 307 | - 'icone_informations_personnelles' => 'Informações pessoais', |
|
| 308 | - 'icone_interface_complet' => 'interface completa', |
|
| 309 | - 'icone_interface_simple' => 'Interface simplificada', |
|
| 310 | - 'icone_maintenance_site' => 'Manutenção do sítio', |
|
| 311 | - 'icone_messagerie_personnelle' => 'Mensagens privadas', |
|
| 312 | - 'icone_repartition_debut' => 'Exibir a distribuição desde o início', |
|
| 313 | - 'icone_rubriques' => 'Rubricas', |
|
| 314 | - 'icone_sauver_site' => 'Cópia de segurança do sítio', |
|
| 315 | - 'icone_site_entier' => 'Todo o sítio', |
|
| 316 | - 'icone_sites_references' => 'Sítios referenciados', |
|
| 317 | - 'icone_statistiques' => 'Estatísticas do sítio', |
|
| 318 | - 'icone_suivi_activite' => 'Acompanhar a actividade do sítio', |
|
| 319 | - 'icone_suivi_actualite' => 'Evolução do sítio', |
|
| 320 | - 'icone_suivi_pettions' => 'Seguir/gerir os abaixo-assinados', |
|
| 321 | - 'icone_suivi_revisions' => 'Modificações dos artigos', |
|
| 322 | - 'icone_supprimer_document' => 'Suprimir este documento', |
|
| 323 | - 'icone_supprimer_image' => 'Suprimir esta imagem', |
|
| 324 | - 'icone_tous_articles' => 'Todos os seus artigos', |
|
| 325 | - 'icone_tous_auteur' => 'Todos os autores', |
|
| 326 | - 'icone_tous_visiteur' => 'Todos os visitantes', |
|
| 327 | - 'icone_visiter_site' => 'Visitar o sítio público', |
|
| 328 | - 'icone_voir_en_ligne' => 'Ver online', |
|
| 329 | - 'img_indisponible' => 'imagem indisponível', |
|
| 330 | - 'impossible' => 'impossível', |
|
| 331 | - 'info_a_suivre' => 'A SEGUIR »', |
|
| 332 | - 'info_acces_interdit' => 'Acesso proibido', |
|
| 333 | - 'info_acces_refuse' => 'Acesso recusado', |
|
| 334 | - 'info_action' => 'Acção : @action@', |
|
| 335 | - 'info_administrer_rubriques' => 'Pode administrar esta rubrica e as suas sub-rubricas', |
|
| 336 | - 'info_adresse_non_indiquee' => 'Não indicou endereço a testar !', |
|
| 337 | - 'info_aide' => 'AJUDA', |
|
| 338 | - 'info_ajouter_mot' => 'Acrescentar esta palavra', |
|
| 339 | - 'info_annonce' => 'ANÚNCIO', |
|
| 340 | - 'info_annonces_generales' => 'Anúncios gerais :', |
|
| 341 | - 'info_article_propose' => 'Artigo proposto', |
|
| 342 | - 'info_article_publie' => 'Artigo publicado', |
|
| 343 | - 'info_article_redaction' => 'Artigo em curso de redacção', |
|
| 344 | - 'info_article_refuse' => 'Artigo recusado', |
|
| 345 | - 'info_article_supprime' => 'Artigo suprimido', |
|
| 346 | - 'info_articles' => 'Artigos', |
|
| 347 | - 'info_articles_a_valider' => 'Os artigos a validar', |
|
| 348 | - 'info_articles_nb' => '@nb@ artigos', |
|
| 349 | - 'info_articles_proposes' => 'Artigos propostos', |
|
| 350 | - 'info_articles_un' => '1 artigo', |
|
| 351 | - 'info_auteurs_nombre' => 'autor(es) :', |
|
| 352 | - 'info_authentification_ftp' => 'Autenticação (por FTP)', |
|
| 353 | - 'info_breves_2' => 'notícias', |
|
| 354 | - 'info_breves_nb' => '@nb@ notícias', |
|
| 355 | - 'info_breves_un' => '1 notícia', |
|
| 356 | - 'info_connexion_refusee' => 'Ligação recusada', |
|
| 357 | - 'info_contact_developpeur' => 'Por favor contacte um programador', |
|
| 358 | - 'info_contenance' => 'Este sítio contém:', |
|
| 359 | - 'info_contribution' => 'contribuições de fórum', |
|
| 360 | - 'info_copyright' => '@spip@ é um software livre distribuído @lien_gpl@.', |
|
| 361 | - 'info_copyright_doc' => 'Para mais informações, visite o sítio <a href="@spipnet@">@spipnet_affiche@</a', |
|
| 362 | - 'info_copyright_gpl' => 'sob licença GPL', |
|
| 363 | - 'info_cours_edition' => 'Os seus artigos em curso de redacção', # MODIF |
|
| 364 | - 'info_creer_repertoire' => 'Por favor crie um ficheiro ou um directório chamado :', |
|
| 365 | - 'info_creer_repertoire_2' => 'dentro do sub-directório <b>@repertoire@</b>, depois :', |
|
| 366 | - 'info_creer_vignette' => 'criação automática de miniatura', |
|
| 367 | - 'info_creerdansrubrique_non_autorise' => 'Não tem direitos suficientes para criar conteúdo nesta rubrica.', |
|
| 368 | - 'info_deplier' => 'Desenvolver', |
|
| 369 | - 'info_descriptif_nombre' => 'descritivo(s) :', |
|
| 370 | - 'info_description' => 'Descrição :', |
|
| 371 | - 'info_description_2' => 'Descrição :', |
|
| 372 | - 'info_dimension' => 'Dimensões :', |
|
| 373 | - 'info_documents_nb' => '@nb@ documentos', |
|
| 374 | - 'info_documents_un' => '1 documento', |
|
| 375 | - 'info_ecire_message_prive' => 'Escrever uma mensagem privada', |
|
| 376 | - 'info_email_invalide' => 'Endereço email inválido.', |
|
| 377 | - 'info_en_cours_validation' => 'Os seus artigos em curso de redação', |
|
| 378 | - 'info_en_ligne' => 'Actualmente online:', |
|
| 379 | - 'info_envoyer_message_prive' => 'Enviar uma mensagem privada a este autor', |
|
| 380 | - 'info_erreur_requete' => 'Erro no pedido :', |
|
| 381 | - 'info_erreur_squelette2' => 'Modelo <b>@fichier@</b> não disponível...', |
|
| 382 | - 'info_erreur_systeme' => 'Erro de Sistema (errno @errsys@)', |
|
| 383 | - 'info_erreur_systeme2' => 'O disco rígido poderá estar cheio, ou a base de dados danificada.<br /> |
|
| 285 | + // I |
|
| 286 | + 'ical_texte_rss_articles' => 'O ficheiro «backend» dos artigos deste sítio encontra-se neste endereço:', |
|
| 287 | + 'ical_texte_rss_articles2' => 'Pode igualmente obter os ficheiros «backend» para os artigos de cada rubrica do sítio:', |
|
| 288 | + 'ical_texte_rss_breves' => 'Existe também um ficheiro contendo notícias do sítio. Especificando um número de rubrica, obterá unicamente as notícias dessa rubrica.', |
|
| 289 | + 'icone_a_suivre' => 'Continua', |
|
| 290 | + 'icone_admin_site' => 'Administração do sítio', |
|
| 291 | + 'icone_agenda' => 'Agenda e correio', |
|
| 292 | + 'icone_aide_ligne' => 'Ajuda', |
|
| 293 | + 'icone_articles' => 'Artigos', |
|
| 294 | + 'icone_auteurs' => 'Autores', |
|
| 295 | + 'icone_brouteur' => 'Navegação rápida', |
|
| 296 | + 'icone_configuration_site' => 'Configuração', |
|
| 297 | + 'icone_configurer_site' => 'Configurar o seu sítio', |
|
| 298 | + 'icone_creer_nouvel_auteur' => 'Criar um novo autor', |
|
| 299 | + 'icone_creer_rubrique' => 'Criar uma rubrica', |
|
| 300 | + 'icone_creer_sous_rubrique' => 'Criar uma sub-rubrica', |
|
| 301 | + 'icone_deconnecter' => 'Sair', |
|
| 302 | + 'icone_discussions' => 'Discussões', |
|
| 303 | + 'icone_doc_rubrique' => 'Documentos das rubricas', |
|
| 304 | + 'icone_ecrire_article' => 'Escrever um novo artigo', |
|
| 305 | + 'icone_edition_site' => 'Edição', |
|
| 306 | + 'icone_gestion_langues' => 'Opções de idiomas', |
|
| 307 | + 'icone_informations_personnelles' => 'Informações pessoais', |
|
| 308 | + 'icone_interface_complet' => 'interface completa', |
|
| 309 | + 'icone_interface_simple' => 'Interface simplificada', |
|
| 310 | + 'icone_maintenance_site' => 'Manutenção do sítio', |
|
| 311 | + 'icone_messagerie_personnelle' => 'Mensagens privadas', |
|
| 312 | + 'icone_repartition_debut' => 'Exibir a distribuição desde o início', |
|
| 313 | + 'icone_rubriques' => 'Rubricas', |
|
| 314 | + 'icone_sauver_site' => 'Cópia de segurança do sítio', |
|
| 315 | + 'icone_site_entier' => 'Todo o sítio', |
|
| 316 | + 'icone_sites_references' => 'Sítios referenciados', |
|
| 317 | + 'icone_statistiques' => 'Estatísticas do sítio', |
|
| 318 | + 'icone_suivi_activite' => 'Acompanhar a actividade do sítio', |
|
| 319 | + 'icone_suivi_actualite' => 'Evolução do sítio', |
|
| 320 | + 'icone_suivi_pettions' => 'Seguir/gerir os abaixo-assinados', |
|
| 321 | + 'icone_suivi_revisions' => 'Modificações dos artigos', |
|
| 322 | + 'icone_supprimer_document' => 'Suprimir este documento', |
|
| 323 | + 'icone_supprimer_image' => 'Suprimir esta imagem', |
|
| 324 | + 'icone_tous_articles' => 'Todos os seus artigos', |
|
| 325 | + 'icone_tous_auteur' => 'Todos os autores', |
|
| 326 | + 'icone_tous_visiteur' => 'Todos os visitantes', |
|
| 327 | + 'icone_visiter_site' => 'Visitar o sítio público', |
|
| 328 | + 'icone_voir_en_ligne' => 'Ver online', |
|
| 329 | + 'img_indisponible' => 'imagem indisponível', |
|
| 330 | + 'impossible' => 'impossível', |
|
| 331 | + 'info_a_suivre' => 'A SEGUIR »', |
|
| 332 | + 'info_acces_interdit' => 'Acesso proibido', |
|
| 333 | + 'info_acces_refuse' => 'Acesso recusado', |
|
| 334 | + 'info_action' => 'Acção : @action@', |
|
| 335 | + 'info_administrer_rubriques' => 'Pode administrar esta rubrica e as suas sub-rubricas', |
|
| 336 | + 'info_adresse_non_indiquee' => 'Não indicou endereço a testar !', |
|
| 337 | + 'info_aide' => 'AJUDA', |
|
| 338 | + 'info_ajouter_mot' => 'Acrescentar esta palavra', |
|
| 339 | + 'info_annonce' => 'ANÚNCIO', |
|
| 340 | + 'info_annonces_generales' => 'Anúncios gerais :', |
|
| 341 | + 'info_article_propose' => 'Artigo proposto', |
|
| 342 | + 'info_article_publie' => 'Artigo publicado', |
|
| 343 | + 'info_article_redaction' => 'Artigo em curso de redacção', |
|
| 344 | + 'info_article_refuse' => 'Artigo recusado', |
|
| 345 | + 'info_article_supprime' => 'Artigo suprimido', |
|
| 346 | + 'info_articles' => 'Artigos', |
|
| 347 | + 'info_articles_a_valider' => 'Os artigos a validar', |
|
| 348 | + 'info_articles_nb' => '@nb@ artigos', |
|
| 349 | + 'info_articles_proposes' => 'Artigos propostos', |
|
| 350 | + 'info_articles_un' => '1 artigo', |
|
| 351 | + 'info_auteurs_nombre' => 'autor(es) :', |
|
| 352 | + 'info_authentification_ftp' => 'Autenticação (por FTP)', |
|
| 353 | + 'info_breves_2' => 'notícias', |
|
| 354 | + 'info_breves_nb' => '@nb@ notícias', |
|
| 355 | + 'info_breves_un' => '1 notícia', |
|
| 356 | + 'info_connexion_refusee' => 'Ligação recusada', |
|
| 357 | + 'info_contact_developpeur' => 'Por favor contacte um programador', |
|
| 358 | + 'info_contenance' => 'Este sítio contém:', |
|
| 359 | + 'info_contribution' => 'contribuições de fórum', |
|
| 360 | + 'info_copyright' => '@spip@ é um software livre distribuído @lien_gpl@.', |
|
| 361 | + 'info_copyright_doc' => 'Para mais informações, visite o sítio <a href="@spipnet@">@spipnet_affiche@</a', |
|
| 362 | + 'info_copyright_gpl' => 'sob licença GPL', |
|
| 363 | + 'info_cours_edition' => 'Os seus artigos em curso de redacção', # MODIF |
|
| 364 | + 'info_creer_repertoire' => 'Por favor crie um ficheiro ou um directório chamado :', |
|
| 365 | + 'info_creer_repertoire_2' => 'dentro do sub-directório <b>@repertoire@</b>, depois :', |
|
| 366 | + 'info_creer_vignette' => 'criação automática de miniatura', |
|
| 367 | + 'info_creerdansrubrique_non_autorise' => 'Não tem direitos suficientes para criar conteúdo nesta rubrica.', |
|
| 368 | + 'info_deplier' => 'Desenvolver', |
|
| 369 | + 'info_descriptif_nombre' => 'descritivo(s) :', |
|
| 370 | + 'info_description' => 'Descrição :', |
|
| 371 | + 'info_description_2' => 'Descrição :', |
|
| 372 | + 'info_dimension' => 'Dimensões :', |
|
| 373 | + 'info_documents_nb' => '@nb@ documentos', |
|
| 374 | + 'info_documents_un' => '1 documento', |
|
| 375 | + 'info_ecire_message_prive' => 'Escrever uma mensagem privada', |
|
| 376 | + 'info_email_invalide' => 'Endereço email inválido.', |
|
| 377 | + 'info_en_cours_validation' => 'Os seus artigos em curso de redação', |
|
| 378 | + 'info_en_ligne' => 'Actualmente online:', |
|
| 379 | + 'info_envoyer_message_prive' => 'Enviar uma mensagem privada a este autor', |
|
| 380 | + 'info_erreur_requete' => 'Erro no pedido :', |
|
| 381 | + 'info_erreur_squelette2' => 'Modelo <b>@fichier@</b> não disponível...', |
|
| 382 | + 'info_erreur_systeme' => 'Erro de Sistema (errno @errsys@)', |
|
| 383 | + 'info_erreur_systeme2' => 'O disco rígido poderá estar cheio, ou a base de dados danificada.<br /> |
|
| 384 | 384 | <span style="color:red;">Tente <a href=\'@script@\'>reparar a base de dados </a>, ou contacte o seu fornecedor de internet.</span>', |
| 385 | - 'info_fini' => 'Terminou !', |
|
| 386 | - 'info_format_image' => 'Formatos de imagens que podem ser utilizadas para criar vinhetas : @gd_formats@.', |
|
| 387 | - 'info_format_non_defini' => 'formato não definido', |
|
| 388 | - 'info_grand_ecran' => 'Ecrã total', |
|
| 389 | - 'info_image_aide' => 'AJUDA', |
|
| 390 | - 'info_image_process_titre' => 'Como criar miniaturas', |
|
| 391 | - 'info_impossible_lire_page' => '<b>Erro !</b> Impossível ler a página<tt><html>@test_proxy@</html></tt> através do proxy <tt>', |
|
| 392 | - 'info_installation_systeme_publication' => 'Instalação do sistema de publicação', |
|
| 393 | - 'info_installer_documents' => 'Pode instalar automaticamente todos os documentos contidos na pasta @upload@.', |
|
| 394 | - 'info_installer_ftp' => 'Como administrador, pode instalar (por FTP) ficheiros na pasta @upload@ para depois seleccioná-los directamente aqui.', |
|
| 395 | - 'info_installer_images' => 'Pode instalar imagens nos formatos JPEG, GIF e PNG.', |
|
| 396 | - 'info_installer_images_dossier' => 'Instalar imagens na pasta @upload@ para poder seleccioná-los aqui.', |
|
| 397 | - 'info_interface_complete' => 'Interface completa', |
|
| 398 | - 'info_interface_simple' => 'Interface simplificada', |
|
| 399 | - 'info_joindre_document_article' => 'Pode juntar a este artigo documentos de tipo', |
|
| 400 | - 'info_joindre_document_rubrique' => 'Pode acrescentar a esta rubrica documentos de tipo', |
|
| 401 | - 'info_joindre_documents_article' => 'Pode juntar ao seu artigo documentos de tipo :', |
|
| 402 | - 'info_l_article' => 'o artigo', |
|
| 403 | - 'info_la_breve' => 'a notícia', |
|
| 404 | - 'info_la_rubrique' => 'a rubrica', |
|
| 405 | - 'info_langue_principale' => 'Idioma principal do sítio', |
|
| 406 | - 'info_largeur_vignette' => '@largeur_vignette@ x @hauteur_vignette@ pixels', |
|
| 407 | - 'info_les_auteurs_1' => 'por @les_auteurs@', |
|
| 408 | - 'info_logo_format_interdit' => 'Apenas os ícones nos formatos @formats@ estão autorizados.', |
|
| 409 | - 'info_logo_max_poids' => 'Os ícones devem obrigatoriamente ter menos de @maxi@ (este arquivo tem @actuel@).', |
|
| 410 | - 'info_mail_fournisseur' => 'você@seucorreio.com', |
|
| 411 | - 'info_message_2' => 'MENSAGEM', |
|
| 412 | - 'info_message_supprime' => 'MENSAGEM ELIMINADA', |
|
| 413 | - 'info_messages_nb' => '@nb@ mensagens', |
|
| 414 | - 'info_messages_un' => '1 mensagem', |
|
| 415 | - 'info_mise_en_ligne' => 'Data de colocação online :', |
|
| 416 | - 'info_modification_parametres_securite' => 'modificação dos parâmetros de segurança', |
|
| 417 | - 'info_mois_courant' => 'Durante o mês :', |
|
| 418 | - 'info_mot_cle_ajoute' => 'A seguinte palavra-chave foi acrescentada a', |
|
| 419 | - 'info_multi_herit' => 'Idioma por defeito', |
|
| 420 | - 'info_multi_langues_soulignees' => 'Os <u>idiomas sublinhadas</u> beneficiam de uma tradução de todos os textos da interface. Se seleccionar esses idiomas, muitos elementos do sítio público (datas, formulários) serão automaticamente traduzidos. Para os idiomas não sublinhadas, esses elementos aparecerão no idioma principal do sítio.', |
|
| 421 | - 'info_multilinguisme' => 'Multilinguismo', |
|
| 422 | - 'info_nom_non_utilisateurs_connectes' => 'O seu nome não aparece na lista dos utilizadores ligados.', |
|
| 423 | - 'info_nom_utilisateurs_connectes' => 'O seu nome aparece na lista dos utilizadores ligados.', |
|
| 424 | - 'info_nombre_en_ligne' => 'Actualmente online :', |
|
| 425 | - 'info_non_resultat' => 'Nenhum resultado para "@cherche_mot@"', |
|
| 426 | - 'info_non_utilisation_messagerie' => 'Não utiliza o correio interno deste sítio.', |
|
| 427 | - 'info_nouveau_message' => 'TEM UMA NOVA MENSAGEM', |
|
| 428 | - 'info_nouveaux_messages' => 'TEM @total_messages@ NOVAS MENSAGENS', |
|
| 429 | - 'info_numero_abbreviation' => '<N° >', |
|
| 430 | - 'info_obligatoire' => 'Esta informação é obrigatória', |
|
| 431 | - 'info_pense_bete' => 'MEMORANDO', |
|
| 432 | - 'info_petit_ecran' => 'Ecrã Pequeno', |
|
| 433 | - 'info_petition_close' => 'Petição encerrada', |
|
| 434 | - 'info_pixels' => 'pixels', |
|
| 435 | - 'info_plusieurs_mots_trouves' => 'Muitas palavras-chave encontradas para "@cherche_mot@":', |
|
| 436 | - 'info_portfolio_automatique' => 'Portfolio automático :', |
|
| 437 | - 'info_premier_resultat' => '[@debut_limit@ primeiros resultados em @total@]', |
|
| 438 | - 'info_premier_resultat_sur' => '[@debut_limit@ primeiros resultados em @total@]', |
|
| 439 | - 'info_propose_1' => '[@nom_site_spip@] Proposto : @titre@', |
|
| 440 | - 'info_propose_2' => 'Artigos propostos |
|
| 385 | + 'info_fini' => 'Terminou !', |
|
| 386 | + 'info_format_image' => 'Formatos de imagens que podem ser utilizadas para criar vinhetas : @gd_formats@.', |
|
| 387 | + 'info_format_non_defini' => 'formato não definido', |
|
| 388 | + 'info_grand_ecran' => 'Ecrã total', |
|
| 389 | + 'info_image_aide' => 'AJUDA', |
|
| 390 | + 'info_image_process_titre' => 'Como criar miniaturas', |
|
| 391 | + 'info_impossible_lire_page' => '<b>Erro !</b> Impossível ler a página<tt><html>@test_proxy@</html></tt> através do proxy <tt>', |
|
| 392 | + 'info_installation_systeme_publication' => 'Instalação do sistema de publicação', |
|
| 393 | + 'info_installer_documents' => 'Pode instalar automaticamente todos os documentos contidos na pasta @upload@.', |
|
| 394 | + 'info_installer_ftp' => 'Como administrador, pode instalar (por FTP) ficheiros na pasta @upload@ para depois seleccioná-los directamente aqui.', |
|
| 395 | + 'info_installer_images' => 'Pode instalar imagens nos formatos JPEG, GIF e PNG.', |
|
| 396 | + 'info_installer_images_dossier' => 'Instalar imagens na pasta @upload@ para poder seleccioná-los aqui.', |
|
| 397 | + 'info_interface_complete' => 'Interface completa', |
|
| 398 | + 'info_interface_simple' => 'Interface simplificada', |
|
| 399 | + 'info_joindre_document_article' => 'Pode juntar a este artigo documentos de tipo', |
|
| 400 | + 'info_joindre_document_rubrique' => 'Pode acrescentar a esta rubrica documentos de tipo', |
|
| 401 | + 'info_joindre_documents_article' => 'Pode juntar ao seu artigo documentos de tipo :', |
|
| 402 | + 'info_l_article' => 'o artigo', |
|
| 403 | + 'info_la_breve' => 'a notícia', |
|
| 404 | + 'info_la_rubrique' => 'a rubrica', |
|
| 405 | + 'info_langue_principale' => 'Idioma principal do sítio', |
|
| 406 | + 'info_largeur_vignette' => '@largeur_vignette@ x @hauteur_vignette@ pixels', |
|
| 407 | + 'info_les_auteurs_1' => 'por @les_auteurs@', |
|
| 408 | + 'info_logo_format_interdit' => 'Apenas os ícones nos formatos @formats@ estão autorizados.', |
|
| 409 | + 'info_logo_max_poids' => 'Os ícones devem obrigatoriamente ter menos de @maxi@ (este arquivo tem @actuel@).', |
|
| 410 | + 'info_mail_fournisseur' => 'você@seucorreio.com', |
|
| 411 | + 'info_message_2' => 'MENSAGEM', |
|
| 412 | + 'info_message_supprime' => 'MENSAGEM ELIMINADA', |
|
| 413 | + 'info_messages_nb' => '@nb@ mensagens', |
|
| 414 | + 'info_messages_un' => '1 mensagem', |
|
| 415 | + 'info_mise_en_ligne' => 'Data de colocação online :', |
|
| 416 | + 'info_modification_parametres_securite' => 'modificação dos parâmetros de segurança', |
|
| 417 | + 'info_mois_courant' => 'Durante o mês :', |
|
| 418 | + 'info_mot_cle_ajoute' => 'A seguinte palavra-chave foi acrescentada a', |
|
| 419 | + 'info_multi_herit' => 'Idioma por defeito', |
|
| 420 | + 'info_multi_langues_soulignees' => 'Os <u>idiomas sublinhadas</u> beneficiam de uma tradução de todos os textos da interface. Se seleccionar esses idiomas, muitos elementos do sítio público (datas, formulários) serão automaticamente traduzidos. Para os idiomas não sublinhadas, esses elementos aparecerão no idioma principal do sítio.', |
|
| 421 | + 'info_multilinguisme' => 'Multilinguismo', |
|
| 422 | + 'info_nom_non_utilisateurs_connectes' => 'O seu nome não aparece na lista dos utilizadores ligados.', |
|
| 423 | + 'info_nom_utilisateurs_connectes' => 'O seu nome aparece na lista dos utilizadores ligados.', |
|
| 424 | + 'info_nombre_en_ligne' => 'Actualmente online :', |
|
| 425 | + 'info_non_resultat' => 'Nenhum resultado para "@cherche_mot@"', |
|
| 426 | + 'info_non_utilisation_messagerie' => 'Não utiliza o correio interno deste sítio.', |
|
| 427 | + 'info_nouveau_message' => 'TEM UMA NOVA MENSAGEM', |
|
| 428 | + 'info_nouveaux_messages' => 'TEM @total_messages@ NOVAS MENSAGENS', |
|
| 429 | + 'info_numero_abbreviation' => '<N° >', |
|
| 430 | + 'info_obligatoire' => 'Esta informação é obrigatória', |
|
| 431 | + 'info_pense_bete' => 'MEMORANDO', |
|
| 432 | + 'info_petit_ecran' => 'Ecrã Pequeno', |
|
| 433 | + 'info_petition_close' => 'Petição encerrada', |
|
| 434 | + 'info_pixels' => 'pixels', |
|
| 435 | + 'info_plusieurs_mots_trouves' => 'Muitas palavras-chave encontradas para "@cherche_mot@":', |
|
| 436 | + 'info_portfolio_automatique' => 'Portfolio automático :', |
|
| 437 | + 'info_premier_resultat' => '[@debut_limit@ primeiros resultados em @total@]', |
|
| 438 | + 'info_premier_resultat_sur' => '[@debut_limit@ primeiros resultados em @total@]', |
|
| 439 | + 'info_propose_1' => '[@nom_site_spip@] Proposto : @titre@', |
|
| 440 | + 'info_propose_2' => 'Artigos propostos |
|
| 441 | 441 | ----------------', |
| 442 | - 'info_propose_3' => 'O artigo "@titre@" é proposto para publicação.', |
|
| 443 | - 'info_propose_4' => 'Está convidado a vir consultá-lo e a dar a sua opinião', |
|
| 444 | - 'info_propose_5' => 'no fórum que lhe está ligado. Está disponível no endereço:', |
|
| 445 | - 'info_publie_01' => 'O artigo "@titre@" foi validado por @connect_nom@.', |
|
| 446 | - 'info_publie_1' => '[@nom_site_spip@] PUBLICADO : @titre@', |
|
| 447 | - 'info_publie_2' => 'Artigo publicado |
|
| 442 | + 'info_propose_3' => 'O artigo "@titre@" é proposto para publicação.', |
|
| 443 | + 'info_propose_4' => 'Está convidado a vir consultá-lo e a dar a sua opinião', |
|
| 444 | + 'info_propose_5' => 'no fórum que lhe está ligado. Está disponível no endereço:', |
|
| 445 | + 'info_publie_01' => 'O artigo "@titre@" foi validado por @connect_nom@.', |
|
| 446 | + 'info_publie_1' => '[@nom_site_spip@] PUBLICADO : @titre@', |
|
| 447 | + 'info_publie_2' => 'Artigo publicado |
|
| 448 | 448 | --------------', |
| 449 | - 'info_rechercher' => 'Procurar', |
|
| 450 | - 'info_rechercher_02' => 'Procurar :', |
|
| 451 | - 'info_remplacer_vignette' => 'Substituir a miniatura por defeito por um logotipo personalizado :', |
|
| 452 | - 'info_rubriques_nb' => '@nb@ rubricas', |
|
| 453 | - 'info_rubriques_un' => '1 rubrica', |
|
| 454 | - 'info_sans_titre_2' => 'sem título', |
|
| 455 | - 'info_selectionner_fichier' => 'Pode seleccionar um ficheiro da pasta @upload@', |
|
| 456 | - 'info_selectionner_fichier_2' => 'Seleccionar um ficheiro :', |
|
| 457 | - 'info_sites_nb' => '@nb@ sítios', |
|
| 458 | - 'info_sites_un' => '1 sítio', |
|
| 459 | - 'info_supprimer_vignette' => 'suprimir a miniatura', |
|
| 460 | - 'info_symbole_bleu' => 'O símbolo <b>azul</b> indica um<b>memorando </b>: isto é uma mensagem para o seu uso pessoal.', |
|
| 461 | - 'info_symbole_jaune' => 'O símbolo<b>amarelo</b> indica um <b>anúncio a todos os redactores</b> : modificável por todos os administradores, e visível por todos os redactores.', |
|
| 462 | - 'info_symbole_vert' => 'O símbolo<b>verde</b> indica as <b>mensagens trocadas com outros utilizadores</b> do sítio.', |
|
| 463 | - 'info_telecharger_nouveau_logo' => 'Telecarregar um novo logotipo :', |
|
| 464 | - 'info_telecharger_ordinateur' => 'Telecarregar do seu computador :', |
|
| 465 | - 'info_tous_resultats_enregistres' => '[todos os resultados estão registados]', |
|
| 466 | - 'info_tout_afficher' => 'Exibir tudo', |
|
| 467 | - 'info_travaux_texte' => 'Este sítio ainda não está configurado. Volte mais tarde...', |
|
| 468 | - 'info_travaux_titre' => 'Sítio em construção', |
|
| 469 | - 'info_trop_resultat' => 'Demasiado resultados para "@cherche_mot@". Por favor afine a pesquisa.', |
|
| 470 | - 'info_utilisation_messagerie_interne' => 'Você utiliza o correio interno deste sítio.', |
|
| 471 | - 'info_valider_lien' => 'validar esta ligação', |
|
| 472 | - 'info_verifier_image' => ', Por favor verifique se as suas imagens foram transferidas correctamente.', |
|
| 473 | - 'info_vignette_defaut' => 'Miniatura por defeito', |
|
| 474 | - 'info_vignette_personnalisee' => 'Miniatura personalizada', |
|
| 475 | - 'info_visite' => 'visita :', |
|
| 476 | - 'info_vos_rendez_vous' => 'Os seus futuros encontros', |
|
| 477 | - 'infos_vos_pense_bete' => 'Os seus memorandos', |
|
| 449 | + 'info_rechercher' => 'Procurar', |
|
| 450 | + 'info_rechercher_02' => 'Procurar :', |
|
| 451 | + 'info_remplacer_vignette' => 'Substituir a miniatura por defeito por um logotipo personalizado :', |
|
| 452 | + 'info_rubriques_nb' => '@nb@ rubricas', |
|
| 453 | + 'info_rubriques_un' => '1 rubrica', |
|
| 454 | + 'info_sans_titre_2' => 'sem título', |
|
| 455 | + 'info_selectionner_fichier' => 'Pode seleccionar um ficheiro da pasta @upload@', |
|
| 456 | + 'info_selectionner_fichier_2' => 'Seleccionar um ficheiro :', |
|
| 457 | + 'info_sites_nb' => '@nb@ sítios', |
|
| 458 | + 'info_sites_un' => '1 sítio', |
|
| 459 | + 'info_supprimer_vignette' => 'suprimir a miniatura', |
|
| 460 | + 'info_symbole_bleu' => 'O símbolo <b>azul</b> indica um<b>memorando </b>: isto é uma mensagem para o seu uso pessoal.', |
|
| 461 | + 'info_symbole_jaune' => 'O símbolo<b>amarelo</b> indica um <b>anúncio a todos os redactores</b> : modificável por todos os administradores, e visível por todos os redactores.', |
|
| 462 | + 'info_symbole_vert' => 'O símbolo<b>verde</b> indica as <b>mensagens trocadas com outros utilizadores</b> do sítio.', |
|
| 463 | + 'info_telecharger_nouveau_logo' => 'Telecarregar um novo logotipo :', |
|
| 464 | + 'info_telecharger_ordinateur' => 'Telecarregar do seu computador :', |
|
| 465 | + 'info_tous_resultats_enregistres' => '[todos os resultados estão registados]', |
|
| 466 | + 'info_tout_afficher' => 'Exibir tudo', |
|
| 467 | + 'info_travaux_texte' => 'Este sítio ainda não está configurado. Volte mais tarde...', |
|
| 468 | + 'info_travaux_titre' => 'Sítio em construção', |
|
| 469 | + 'info_trop_resultat' => 'Demasiado resultados para "@cherche_mot@". Por favor afine a pesquisa.', |
|
| 470 | + 'info_utilisation_messagerie_interne' => 'Você utiliza o correio interno deste sítio.', |
|
| 471 | + 'info_valider_lien' => 'validar esta ligação', |
|
| 472 | + 'info_verifier_image' => ', Por favor verifique se as suas imagens foram transferidas correctamente.', |
|
| 473 | + 'info_vignette_defaut' => 'Miniatura por defeito', |
|
| 474 | + 'info_vignette_personnalisee' => 'Miniatura personalizada', |
|
| 475 | + 'info_visite' => 'visita :', |
|
| 476 | + 'info_vos_rendez_vous' => 'Os seus futuros encontros', |
|
| 477 | + 'infos_vos_pense_bete' => 'Os seus memorandos', |
|
| 478 | 478 | |
| 479 | - // L |
|
| 480 | - 'label_ajout_id_rapide' => 'Adição rápida', |
|
| 481 | - 'label_poids_fichier' => 'Dimensões', |
|
| 482 | - 'lien_afficher_icones_seuls' => 'Exibir apenas os ícones', |
|
| 483 | - 'lien_afficher_texte_icones' => 'Exibir ícones e o texto', |
|
| 484 | - 'lien_afficher_texte_seul' => 'Exibir apenas o texto', |
|
| 485 | - 'lien_liberer' => 'desbloquear', |
|
| 486 | - 'lien_liberer_tous' => 'desbloquear estes artigos', |
|
| 487 | - 'lien_nouvea_pense_bete' => 'NOVO MEMORANDO', |
|
| 488 | - 'lien_nouveau_message' => 'NOVA MENSAGEM', |
|
| 489 | - 'lien_nouvelle_annonce' => 'NOVO ANÚNCIO', |
|
| 490 | - 'lien_petitions' => 'PETIÇÃO', |
|
| 491 | - 'lien_popularite' => 'popularidade : @popularite@%', |
|
| 492 | - 'lien_racine_site' => 'RAIZ DO SÍTIO', |
|
| 493 | - 'lien_reessayer' => 'tentar de novo', |
|
| 494 | - 'lien_repondre_message' => 'Responder a esta mensagem', |
|
| 495 | - 'lien_supprimer' => 'eliminar', |
|
| 496 | - 'lien_tout_afficher' => 'Exibir tudo', |
|
| 497 | - 'lien_visite_site' => 'visitar este sítio', |
|
| 498 | - 'lien_visites' => '@visites@ visitas', |
|
| 499 | - 'lien_voir_auteur' => 'Ver este autor', |
|
| 500 | - 'ligne' => 'Linha', |
|
| 501 | - 'login' => 'Ligação', |
|
| 502 | - 'login_acces_prive' => 'acesso ao espaço privado', |
|
| 503 | - 'login_autre_identifiant' => 'ligar-se sob um outro identificador', |
|
| 504 | - 'login_cookie_accepte' => 'Por favor configure o seu navegador para que os aceite (pelo menos para este sítio).', |
|
| 505 | - 'login_cookie_oblige' => 'Para se identificar de maneira segura neste sítio, deve aceitar os cookies.', |
|
| 506 | - 'login_deconnexion_ok' => 'Ligação terminada.', |
|
| 507 | - 'login_erreur_pass' => 'Erro de palavra-passe', |
|
| 508 | - 'login_espace_prive' => 'área privada', |
|
| 509 | - 'login_identifiant_inconnu' => 'O identificador « @login@ » é desconhecido.', |
|
| 510 | - 'login_login' => 'Login :', |
|
| 511 | - 'login_login2' => 'Login ou endereço de e-mail :', |
|
| 512 | - 'login_login_pass_incorrect' => '(Login ou palavra-passe incorrecta.)', |
|
| 513 | - 'login_motpasseoublie' => 'palavra - passe esquecida ?', |
|
| 514 | - 'login_non_securise' => 'Atenção, este formulário não é seguro. |
|
| 479 | + // L |
|
| 480 | + 'label_ajout_id_rapide' => 'Adição rápida', |
|
| 481 | + 'label_poids_fichier' => 'Dimensões', |
|
| 482 | + 'lien_afficher_icones_seuls' => 'Exibir apenas os ícones', |
|
| 483 | + 'lien_afficher_texte_icones' => 'Exibir ícones e o texto', |
|
| 484 | + 'lien_afficher_texte_seul' => 'Exibir apenas o texto', |
|
| 485 | + 'lien_liberer' => 'desbloquear', |
|
| 486 | + 'lien_liberer_tous' => 'desbloquear estes artigos', |
|
| 487 | + 'lien_nouvea_pense_bete' => 'NOVO MEMORANDO', |
|
| 488 | + 'lien_nouveau_message' => 'NOVA MENSAGEM', |
|
| 489 | + 'lien_nouvelle_annonce' => 'NOVO ANÚNCIO', |
|
| 490 | + 'lien_petitions' => 'PETIÇÃO', |
|
| 491 | + 'lien_popularite' => 'popularidade : @popularite@%', |
|
| 492 | + 'lien_racine_site' => 'RAIZ DO SÍTIO', |
|
| 493 | + 'lien_reessayer' => 'tentar de novo', |
|
| 494 | + 'lien_repondre_message' => 'Responder a esta mensagem', |
|
| 495 | + 'lien_supprimer' => 'eliminar', |
|
| 496 | + 'lien_tout_afficher' => 'Exibir tudo', |
|
| 497 | + 'lien_visite_site' => 'visitar este sítio', |
|
| 498 | + 'lien_visites' => '@visites@ visitas', |
|
| 499 | + 'lien_voir_auteur' => 'Ver este autor', |
|
| 500 | + 'ligne' => 'Linha', |
|
| 501 | + 'login' => 'Ligação', |
|
| 502 | + 'login_acces_prive' => 'acesso ao espaço privado', |
|
| 503 | + 'login_autre_identifiant' => 'ligar-se sob um outro identificador', |
|
| 504 | + 'login_cookie_accepte' => 'Por favor configure o seu navegador para que os aceite (pelo menos para este sítio).', |
|
| 505 | + 'login_cookie_oblige' => 'Para se identificar de maneira segura neste sítio, deve aceitar os cookies.', |
|
| 506 | + 'login_deconnexion_ok' => 'Ligação terminada.', |
|
| 507 | + 'login_erreur_pass' => 'Erro de palavra-passe', |
|
| 508 | + 'login_espace_prive' => 'área privada', |
|
| 509 | + 'login_identifiant_inconnu' => 'O identificador « @login@ » é desconhecido.', |
|
| 510 | + 'login_login' => 'Login :', |
|
| 511 | + 'login_login2' => 'Login ou endereço de e-mail :', |
|
| 512 | + 'login_login_pass_incorrect' => '(Login ou palavra-passe incorrecta.)', |
|
| 513 | + 'login_motpasseoublie' => 'palavra - passe esquecida ?', |
|
| 514 | + 'login_non_securise' => 'Atenção, este formulário não é seguro. |
|
| 515 | 515 | Se não quiser que a sua palavra-passe seja |
| 516 | 516 | interceptada na rede, por favor active Javascript |
| 517 | 517 | no seu navegador e', |
| 518 | - 'login_nouvelle_tentative' => 'Nova tentativa', |
|
| 519 | - 'login_par_ici' => 'Você está registado... por aqui....', |
|
| 520 | - 'login_pass2' => 'Palavra-passe :', |
|
| 521 | - 'login_preferez_refuser' => '<b>Se prefere recusar os cookies</b>, um outro método de ligação (menos seguro) está à sua disposição', |
|
| 522 | - 'login_recharger' => 'carregar de novo esta página ', |
|
| 523 | - 'login_rester_identifie' => 'Permanecer identificado durante alguns dias ', # MODIF |
|
| 524 | - 'login_retour_public' => 'Regresso ao sítio público', |
|
| 525 | - 'login_retour_site' => 'Regresso ao sítio público', |
|
| 526 | - 'login_retoursitepublic' => 'Regresso ao sítio público', |
|
| 527 | - 'login_securise' => 'Login seguro', |
|
| 528 | - 'login_sinscrire' => 'inscrever-se', |
|
| 529 | - 'login_test_navigateur' => 'teste navegação/nova ligação', |
|
| 530 | - 'login_verifiez_navigateur' => '(Verifique, porém, que o seu navegador não memorizou a sua palavra-passe...)', |
|
| 518 | + 'login_nouvelle_tentative' => 'Nova tentativa', |
|
| 519 | + 'login_par_ici' => 'Você está registado... por aqui....', |
|
| 520 | + 'login_pass2' => 'Palavra-passe :', |
|
| 521 | + 'login_preferez_refuser' => '<b>Se prefere recusar os cookies</b>, um outro método de ligação (menos seguro) está à sua disposição', |
|
| 522 | + 'login_recharger' => 'carregar de novo esta página ', |
|
| 523 | + 'login_rester_identifie' => 'Permanecer identificado durante alguns dias ', # MODIF |
|
| 524 | + 'login_retour_public' => 'Regresso ao sítio público', |
|
| 525 | + 'login_retour_site' => 'Regresso ao sítio público', |
|
| 526 | + 'login_retoursitepublic' => 'Regresso ao sítio público', |
|
| 527 | + 'login_securise' => 'Login seguro', |
|
| 528 | + 'login_sinscrire' => 'inscrever-se', |
|
| 529 | + 'login_test_navigateur' => 'teste navegação/nova ligação', |
|
| 530 | + 'login_verifiez_navigateur' => '(Verifique, porém, que o seu navegador não memorizou a sua palavra-passe...)', |
|
| 531 | 531 | |
| 532 | - // M |
|
| 533 | - 'masquer_colonne' => 'Ocultar esta coluna', |
|
| 534 | - 'masquer_trad' => 'ocultar as traduções', |
|
| 535 | - 'module_fichiers_langues' => 'Ficheiros de idioma', |
|
| 532 | + // M |
|
| 533 | + 'masquer_colonne' => 'Ocultar esta coluna', |
|
| 534 | + 'masquer_trad' => 'ocultar as traduções', |
|
| 535 | + 'module_fichiers_langues' => 'Ficheiros de idioma', |
|
| 536 | 536 | |
| 537 | - // N |
|
| 538 | - 'navigateur_pas_redirige' => 'Se o seu navegador não está redireccionado, clique aqui para continuar.', |
|
| 539 | - 'numero' => 'Número', |
|
| 537 | + // N |
|
| 538 | + 'navigateur_pas_redirige' => 'Se o seu navegador não está redireccionado, clique aqui para continuar.', |
|
| 539 | + 'numero' => 'Número', |
|
| 540 | 540 | |
| 541 | - // O |
|
| 542 | - 'occurence' => 'Ocorrência', |
|
| 543 | - 'onglet_affacer_base' => 'Apagar a base de dados', |
|
| 544 | - 'onglet_auteur' => 'O autor', |
|
| 545 | - 'onglet_contenu_site' => 'Conteúdo do sítio', |
|
| 546 | - 'onglet_evolution_visite_mod' => 'Evolução', |
|
| 547 | - 'onglet_fonctions_avances' => 'Funções avançadas', |
|
| 548 | - 'onglet_informations_personnelles' => 'Informações pessoais', |
|
| 549 | - 'onglet_interactivite' => 'Interactividade', |
|
| 550 | - 'onglet_messagerie' => 'Correio', |
|
| 551 | - 'onglet_repartition_rubrique' => 'Distribuição das rubricas', |
|
| 552 | - 'onglet_save_restaur_base' => 'Guardar uma cópia/restaurar a base', |
|
| 553 | - 'onglet_vider_cache' => 'Esvaziar a cache', |
|
| 541 | + // O |
|
| 542 | + 'occurence' => 'Ocorrência', |
|
| 543 | + 'onglet_affacer_base' => 'Apagar a base de dados', |
|
| 544 | + 'onglet_auteur' => 'O autor', |
|
| 545 | + 'onglet_contenu_site' => 'Conteúdo do sítio', |
|
| 546 | + 'onglet_evolution_visite_mod' => 'Evolução', |
|
| 547 | + 'onglet_fonctions_avances' => 'Funções avançadas', |
|
| 548 | + 'onglet_informations_personnelles' => 'Informações pessoais', |
|
| 549 | + 'onglet_interactivite' => 'Interactividade', |
|
| 550 | + 'onglet_messagerie' => 'Correio', |
|
| 551 | + 'onglet_repartition_rubrique' => 'Distribuição das rubricas', |
|
| 552 | + 'onglet_save_restaur_base' => 'Guardar uma cópia/restaurar a base', |
|
| 553 | + 'onglet_vider_cache' => 'Esvaziar a cache', |
|
| 554 | 554 | |
| 555 | - // P |
|
| 556 | - 'pass_choix_pass' => 'Por favor escolha a sua nova palavra-passe', |
|
| 557 | - 'pass_erreur' => 'Erro', |
|
| 558 | - 'pass_erreur_acces_refuse' => '<b>Erro :</b> já não tem acesso a este sítio.', |
|
| 559 | - 'pass_erreur_code_inconnu' => '<b>Erro :</b> este código não corresponde a nenhum dos visitantes com acesso a este sítio.', |
|
| 560 | - 'pass_erreur_non_enregistre' => '<b>Erro :</b> o endereço <tt>@email_oubli@</tt> não está registado neste sítio. ', |
|
| 561 | - 'pass_erreur_non_valide' => '<b>Erro :</b> este email <tt>@email_oubli@</tt> não é válido ! ', |
|
| 562 | - 'pass_erreur_probleme_technique' => '<b>Erro :</b> por causa de um problema técnico, o email não pôde ser enviado.', |
|
| 563 | - 'pass_espace_prive_bla' => 'O espaço privado deste sítio está aberto aos |
|
| 555 | + // P |
|
| 556 | + 'pass_choix_pass' => 'Por favor escolha a sua nova palavra-passe', |
|
| 557 | + 'pass_erreur' => 'Erro', |
|
| 558 | + 'pass_erreur_acces_refuse' => '<b>Erro :</b> já não tem acesso a este sítio.', |
|
| 559 | + 'pass_erreur_code_inconnu' => '<b>Erro :</b> este código não corresponde a nenhum dos visitantes com acesso a este sítio.', |
|
| 560 | + 'pass_erreur_non_enregistre' => '<b>Erro :</b> o endereço <tt>@email_oubli@</tt> não está registado neste sítio. ', |
|
| 561 | + 'pass_erreur_non_valide' => '<b>Erro :</b> este email <tt>@email_oubli@</tt> não é válido ! ', |
|
| 562 | + 'pass_erreur_probleme_technique' => '<b>Erro :</b> por causa de um problema técnico, o email não pôde ser enviado.', |
|
| 563 | + 'pass_espace_prive_bla' => 'O espaço privado deste sítio está aberto aos |
|
| 564 | 564 | visitantes, após inscrição. Uma vez registado poderá consultar os artigos em curso de redacção, |
| 565 | 565 | propor artigos e participar em todos os fóruns.', |
| 566 | - 'pass_forum_bla' => 'Pediu para intervir num fórum |
|
| 566 | + 'pass_forum_bla' => 'Pediu para intervir num fórum |
|
| 567 | 567 | reservado aos visitadores registados.', |
| 568 | - 'pass_indiquez_cidessous' => 'Indique abaixo o endereço email sob o qual se registou. Receberá |
|
| 568 | + 'pass_indiquez_cidessous' => 'Indique abaixo o endereço email sob o qual se registou. Receberá |
|
| 569 | 569 | um mail que indicará o procedimento a seguir para |
| 570 | 570 | recuperar o seu acesso.', |
| 571 | - 'pass_mail_passcookie' => '(esta é uma mensagem automática) |
|
| 571 | + 'pass_mail_passcookie' => '(esta é uma mensagem automática) |
|
| 572 | 572 | Para recuperar o seu acesso ao sítio |
| 573 | 573 | @nom_site_spip@ (@adresse_site@) |
| 574 | 574 | |
@@ -578,136 +578,136 @@ discard block |
||
| 578 | 578 | |
| 579 | 579 | Poderá então introduzir uma nova palavra-passe e reconectar-se ao sítio. |
| 580 | 580 | ', |
| 581 | - 'pass_mot_oublie' => 'Palavra-passe esquecida', |
|
| 582 | - 'pass_nouveau_enregistre' => 'A sua nova palavra-passe foi registada', |
|
| 583 | - 'pass_nouveau_pass' => 'Nova palavra-passe', |
|
| 584 | - 'pass_ok' => 'OK', |
|
| 585 | - 'pass_oubli_mot' => 'Palavra-passe esquecida', |
|
| 586 | - 'pass_procedure_changer' => 'Para alterar a sua palavra-passe, temos primeiro de verificar a sua identidade. Por favor escreva o endereço e-mail associado a esta conta.', # MODIF |
|
| 587 | - 'pass_quitter_fenetre' => 'Fechar esta janela', |
|
| 588 | - 'pass_rappel_login' => 'Recorde : o seu identificador (login) é « @login@ ».', |
|
| 589 | - 'pass_recevoir_mail' => 'Vai receber um email que indica como recuperar o seu acesso ao sítio.', # MODIF |
|
| 590 | - 'pass_retour_public' => 'Regresso ao sítio público', |
|
| 591 | - 'pass_rien_a_faire_ici' => 'Nada a fazer aqui.', |
|
| 592 | - 'pass_vousinscrire' => 'Inscrever-se neste sítio', |
|
| 593 | - 'precedent' => 'anterior', |
|
| 594 | - 'previsualisation' => 'Visualização', |
|
| 595 | - 'previsualiser' => 'Pré-visualizar', |
|
| 581 | + 'pass_mot_oublie' => 'Palavra-passe esquecida', |
|
| 582 | + 'pass_nouveau_enregistre' => 'A sua nova palavra-passe foi registada', |
|
| 583 | + 'pass_nouveau_pass' => 'Nova palavra-passe', |
|
| 584 | + 'pass_ok' => 'OK', |
|
| 585 | + 'pass_oubli_mot' => 'Palavra-passe esquecida', |
|
| 586 | + 'pass_procedure_changer' => 'Para alterar a sua palavra-passe, temos primeiro de verificar a sua identidade. Por favor escreva o endereço e-mail associado a esta conta.', # MODIF |
|
| 587 | + 'pass_quitter_fenetre' => 'Fechar esta janela', |
|
| 588 | + 'pass_rappel_login' => 'Recorde : o seu identificador (login) é « @login@ ».', |
|
| 589 | + 'pass_recevoir_mail' => 'Vai receber um email que indica como recuperar o seu acesso ao sítio.', # MODIF |
|
| 590 | + 'pass_retour_public' => 'Regresso ao sítio público', |
|
| 591 | + 'pass_rien_a_faire_ici' => 'Nada a fazer aqui.', |
|
| 592 | + 'pass_vousinscrire' => 'Inscrever-se neste sítio', |
|
| 593 | + 'precedent' => 'anterior', |
|
| 594 | + 'previsualisation' => 'Visualização', |
|
| 595 | + 'previsualiser' => 'Pré-visualizar', |
|
| 596 | 596 | |
| 597 | - // R |
|
| 598 | - 'retour' => 'Retroceder', |
|
| 597 | + // R |
|
| 598 | + 'retour' => 'Retroceder', |
|
| 599 | 599 | |
| 600 | - // S |
|
| 601 | - 'spip_conforme_dtd' => 'SPIP considera esta página em conforme com o seu DOCTYPE :', |
|
| 602 | - 'squelette' => 'modelo', |
|
| 603 | - 'squelette_inclus_ligne' => 'modelo incluído, linha', |
|
| 604 | - 'squelette_ligne' => 'modelo, linha', |
|
| 605 | - 'stats_visites_et_popularite' => '@visites@ visitas ; popularidade : @popularite@', |
|
| 606 | - 'suivant' => 'seguinte', |
|
| 600 | + // S |
|
| 601 | + 'spip_conforme_dtd' => 'SPIP considera esta página em conforme com o seu DOCTYPE :', |
|
| 602 | + 'squelette' => 'modelo', |
|
| 603 | + 'squelette_inclus_ligne' => 'modelo incluído, linha', |
|
| 604 | + 'squelette_ligne' => 'modelo, linha', |
|
| 605 | + 'stats_visites_et_popularite' => '@visites@ visitas ; popularidade : @popularite@', |
|
| 606 | + 'suivant' => 'seguinte', |
|
| 607 | 607 | |
| 608 | - // T |
|
| 609 | - 'taille_go' => '@taille@ Gb', |
|
| 610 | - 'taille_ko' => '@taille@ kb', |
|
| 611 | - 'taille_mo' => '@taille@ Mb', |
|
| 612 | - 'taille_octets' => ' @taille@ bytes', |
|
| 613 | - 'texte_actualite_site_1' => 'Quando estiver familiarizado(a) com a interface, poderá clicar em «', |
|
| 614 | - 'texte_actualite_site_2' => 'interface completa', |
|
| 615 | - 'texte_actualite_site_3' => '» para abrir mais possibilidades.', |
|
| 616 | - 'texte_creation_automatique_vignette' => 'A criação automática de miniaturas de pré-visualização está activada neste sítio. Se instalar a partir deste formulário imagens de formato(s) @gd_formats@, serão acompanhadas de uma miniatura de um tamanho máximo de @taille_preview@ pixels.', |
|
| 617 | - 'texte_documents_associes' => 'Os documentos seguintes estão associados ao artigo, |
|
| 608 | + // T |
|
| 609 | + 'taille_go' => '@taille@ Gb', |
|
| 610 | + 'taille_ko' => '@taille@ kb', |
|
| 611 | + 'taille_mo' => '@taille@ Mb', |
|
| 612 | + 'taille_octets' => ' @taille@ bytes', |
|
| 613 | + 'texte_actualite_site_1' => 'Quando estiver familiarizado(a) com a interface, poderá clicar em «', |
|
| 614 | + 'texte_actualite_site_2' => 'interface completa', |
|
| 615 | + 'texte_actualite_site_3' => '» para abrir mais possibilidades.', |
|
| 616 | + 'texte_creation_automatique_vignette' => 'A criação automática de miniaturas de pré-visualização está activada neste sítio. Se instalar a partir deste formulário imagens de formato(s) @gd_formats@, serão acompanhadas de uma miniatura de um tamanho máximo de @taille_preview@ pixels.', |
|
| 617 | + 'texte_documents_associes' => 'Os documentos seguintes estão associados ao artigo, |
|
| 618 | 618 | mas não foram directamente |
| 619 | 619 | inseridos nele. Conforme a paginação do sítio público, |
| 620 | 620 | poderão aparecer sob forma de documentos anexados.', |
| 621 | - 'texte_erreur_mise_niveau_base' => 'Erro de base de dados por ocasião do nivelamento. |
|
| 621 | + 'texte_erreur_mise_niveau_base' => 'Erro de base de dados por ocasião do nivelamento. |
|
| 622 | 622 | A imagem <b>@fichier@</b> não passou (artigo @id_article@). |
| 623 | 623 | Note bem esta referência, volte a tentar o nivelamento, e verifique se as imagens aparecem sempre nos artigos.', |
| 624 | - 'texte_erreur_visiteur' => 'Tentou aceder à área privada usando um login não autorizado.', |
|
| 625 | - 'texte_inc_auth_1' => 'Você está identificado sob o |
|
| 624 | + 'texte_erreur_visiteur' => 'Tentou aceder à área privada usando um login não autorizado.', |
|
| 625 | + 'texte_inc_auth_1' => 'Você está identificado sob o |
|
| 626 | 626 | login <b>@auth_login@</b>, mas este já/ não existe na base de dados. |
| 627 | 627 | Tente', |
| 628 | - 'texte_inc_auth_2' => 'refazer a ligação', |
|
| 629 | - 'texte_inc_auth_3' => ', depois de eventualmente ter fechado e |
|
| 628 | + 'texte_inc_auth_2' => 'refazer a ligação', |
|
| 629 | + 'texte_inc_auth_3' => ', depois de eventualmente ter fechado e |
|
| 630 | 630 | voltado a abrir o seu navegador.', |
| 631 | - 'texte_inc_config' => 'As modificações efectuadas nestas páginas influenciam muito o |
|
| 631 | + 'texte_inc_config' => 'As modificações efectuadas nestas páginas influenciam muito o |
|
| 632 | 632 | funcionamento do seu sítio. Recomendamos que não intervenha enquanto não estiver familiarizado com o funcionamento do sistema SPIP. <br /><br /><b> Em |
| 633 | 633 | geral, é fortemente recomendado |
| 634 | 634 | deixar a responsabilidade dessas páginas ao webmaster principal do seu sítio. <b>', |
| 635 | - 'texte_inc_meta_1' => 'O sistema encontrou um erro durante a escrita do arquivo <code>@fichier@</code>. Como administrador do sítio, por favor,', |
|
| 636 | - 'texte_inc_meta_2' => 'verificar as permissões de escrita', |
|
| 637 | - 'texte_inc_meta_3' => 'no directório <code>@repertoire@</code>.', |
|
| 638 | - 'texte_statut_en_cours_redaction' => 'em curso de redacção', |
|
| 639 | - 'texte_statut_poubelle' => 'para o caixote de lixo', |
|
| 640 | - 'texte_statut_propose_evaluation' => 'proposto para avaliação', |
|
| 641 | - 'texte_statut_publie' => 'publicado online', |
|
| 642 | - 'texte_statut_refuse' => 'recusado', |
|
| 643 | - 'titre_ajouter_mot_cle' => 'ACRESCENTAR UMA PALAVRA-CHAVE', |
|
| 644 | - 'titre_cadre_raccourcis' => 'ATALHOS :', |
|
| 645 | - 'titre_changer_couleur_interface' => 'Mudar a cor da interface', |
|
| 646 | - 'titre_image_admin_article' => 'Pode administrar este artigo', |
|
| 647 | - 'titre_image_administrateur' => 'Administrador', |
|
| 648 | - 'titre_image_aide' => 'Ajuda sobre este elemento', |
|
| 649 | - 'titre_image_auteur_supprime' => 'Autor eliminado', |
|
| 650 | - 'titre_image_redacteur' => 'Redactor sem acesso', |
|
| 651 | - 'titre_image_redacteur_02' => 'Redactor', |
|
| 652 | - 'titre_image_selecteur' => 'Exibir a lista', |
|
| 653 | - 'titre_image_visiteur' => 'Visitante', |
|
| 654 | - 'titre_joindre_document' => 'ANEXAR UM DOCUMENTO', |
|
| 655 | - 'titre_mots_cles' => 'PALAVRAS-CHAVE', |
|
| 656 | - 'titre_probleme_technique' => 'Atenção : um problema técnico (servidor SQL) impede o acesso a esta parte do sítio. Obrigado pela sua compreensão.', |
|
| 657 | - 'titre_publier_document' => 'PUBLICAR UM DOCUMENTO NESTA RUBRICA', |
|
| 658 | - 'titre_signatures_attente' => 'Assinaturas aguardando validação', |
|
| 659 | - 'titre_signatures_confirmees' => 'Assinaturas confirmadas', |
|
| 660 | - 'titre_statistiques' => 'Estatísticas do sítio', |
|
| 661 | - 'titre_titre_document' => 'Título do documento :', |
|
| 662 | - 'todo' => 'a caminho', |
|
| 663 | - 'trad_reference' => '(referência para as traduções)', |
|
| 635 | + 'texte_inc_meta_1' => 'O sistema encontrou um erro durante a escrita do arquivo <code>@fichier@</code>. Como administrador do sítio, por favor,', |
|
| 636 | + 'texte_inc_meta_2' => 'verificar as permissões de escrita', |
|
| 637 | + 'texte_inc_meta_3' => 'no directório <code>@repertoire@</code>.', |
|
| 638 | + 'texte_statut_en_cours_redaction' => 'em curso de redacção', |
|
| 639 | + 'texte_statut_poubelle' => 'para o caixote de lixo', |
|
| 640 | + 'texte_statut_propose_evaluation' => 'proposto para avaliação', |
|
| 641 | + 'texte_statut_publie' => 'publicado online', |
|
| 642 | + 'texte_statut_refuse' => 'recusado', |
|
| 643 | + 'titre_ajouter_mot_cle' => 'ACRESCENTAR UMA PALAVRA-CHAVE', |
|
| 644 | + 'titre_cadre_raccourcis' => 'ATALHOS :', |
|
| 645 | + 'titre_changer_couleur_interface' => 'Mudar a cor da interface', |
|
| 646 | + 'titre_image_admin_article' => 'Pode administrar este artigo', |
|
| 647 | + 'titre_image_administrateur' => 'Administrador', |
|
| 648 | + 'titre_image_aide' => 'Ajuda sobre este elemento', |
|
| 649 | + 'titre_image_auteur_supprime' => 'Autor eliminado', |
|
| 650 | + 'titre_image_redacteur' => 'Redactor sem acesso', |
|
| 651 | + 'titre_image_redacteur_02' => 'Redactor', |
|
| 652 | + 'titre_image_selecteur' => 'Exibir a lista', |
|
| 653 | + 'titre_image_visiteur' => 'Visitante', |
|
| 654 | + 'titre_joindre_document' => 'ANEXAR UM DOCUMENTO', |
|
| 655 | + 'titre_mots_cles' => 'PALAVRAS-CHAVE', |
|
| 656 | + 'titre_probleme_technique' => 'Atenção : um problema técnico (servidor SQL) impede o acesso a esta parte do sítio. Obrigado pela sua compreensão.', |
|
| 657 | + 'titre_publier_document' => 'PUBLICAR UM DOCUMENTO NESTA RUBRICA', |
|
| 658 | + 'titre_signatures_attente' => 'Assinaturas aguardando validação', |
|
| 659 | + 'titre_signatures_confirmees' => 'Assinaturas confirmadas', |
|
| 660 | + 'titre_statistiques' => 'Estatísticas do sítio', |
|
| 661 | + 'titre_titre_document' => 'Título do documento :', |
|
| 662 | + 'todo' => 'a caminho', |
|
| 663 | + 'trad_reference' => '(referência para as traduções)', |
|
| 664 | 664 | |
| 665 | - // Z |
|
| 666 | - 'zbug_balise_b_aval' => ': tag B colocada demasiado tarde no laço infinito', |
|
| 667 | - 'zbug_balise_inexistante' => 'Tag @balise@ mal declarada para @from@', |
|
| 668 | - 'zbug_balise_sans_argument' => 'Argumento em falta na tag @balise@', |
|
| 669 | - 'zbug_boucle' => 'laço infinito', |
|
| 670 | - 'zbug_boucle_recursive_undef' => 'laço recursivo não definido @nom@', |
|
| 671 | - 'zbug_calcul' => 'cálculo', |
|
| 672 | - 'zbug_champ_hors_boucle' => 'Campo @champ@ fora do laço infinito', |
|
| 673 | - 'zbug_champ_hors_motif' => 'Campo @champ@ fora de contexto @motif@', |
|
| 674 | - 'zbug_code' => 'código', |
|
| 675 | - 'zbug_critere_inconnu' => 'critério desconhecido @critere@ ', |
|
| 676 | - 'zbug_distant_interdit' => 'Dados externos interditos', |
|
| 677 | - 'zbug_doublon_table_sans_cle_primaire' => 'Entradas duplas numa tabela que não tem uma chave primária simples', |
|
| 678 | - 'zbug_doublon_table_sans_index' => 'Entradas duplas numa tabela sem índice', |
|
| 679 | - 'zbug_erreur_boucle_double' => 'laço @id@: Dupla definição ', |
|
| 680 | - 'zbug_erreur_boucle_fermant' => 'laço @id@: tag final em falta ', |
|
| 681 | - 'zbug_erreur_boucle_syntaxe' => 'Laço com sintaxe incorrecta @id@', |
|
| 682 | - 'zbug_erreur_compilation' => 'Erro de compilação', |
|
| 683 | - 'zbug_erreur_execution_page' => 'erro de execução da página', |
|
| 684 | - 'zbug_erreur_filtre' => 'Erro : filtro indefinido @filtre@ ', |
|
| 685 | - 'zbug_erreur_meme_parent' => '{meme_parent} aplica-se exclusivamente aos laços (FORUMS) ou (RUBRIQUES)', |
|
| 686 | - 'zbug_erreur_squelette' => 'Erro(s) no modelo', |
|
| 687 | - 'zbug_hors_compilation' => 'Não compilado', |
|
| 688 | - 'zbug_info_erreur_squelette' => 'Erro no sítio', |
|
| 689 | - 'zbug_inversion_ordre_inexistant' => 'inversão de uma ordem inexistente', |
|
| 690 | - 'zbug_pagination_sans_critere' => '#PAGINAÇÃO sem critério {paginação} ou usada num laço recursivo', |
|
| 691 | - 'zbug_parametres_inclus_incorrects' => 'Parâmetros de inclusão incorrectos: @param@', |
|
| 692 | - 'zbug_profile' => 'Cálculo de tempo : @time@', |
|
| 693 | - 'zbug_resultat' => 'resultado', |
|
| 694 | - 'zbug_serveur_indefini' => 'Sevidor SQL não definido', |
|
| 695 | - 'zbug_statistiques' => 'Estatísticas das consulta SQL classificadas por duração', |
|
| 696 | - 'zbug_table_inconnue' => 'Tabela SQL «@table@» desconhecida', |
|
| 697 | - 'zxml_connus_attributs' => 'attributos conhecidos', |
|
| 698 | - 'zxml_de' => 'de', |
|
| 699 | - 'zxml_inconnu_attribut' => 'atributo desconhecido', |
|
| 700 | - 'zxml_inconnu_balise' => 'tag desconhecida', |
|
| 701 | - 'zxml_inconnu_entite' => 'entidade desconhecida', |
|
| 702 | - 'zxml_inconnu_id' => 'ID desconhecido', |
|
| 703 | - 'zxml_mais_de' => 'mas de', |
|
| 704 | - 'zxml_non_conforme' => 'não está de acordo com o princípio', |
|
| 705 | - 'zxml_non_fils' => 'não é um filho de ', |
|
| 706 | - 'zxml_nonvide_balise' => 'a tag não está vazia', |
|
| 707 | - 'zxml_obligatoire_attribut' => 'atributo obrigatório está em falta', |
|
| 708 | - 'zxml_succession_fils_incorrecte' => 'sucessão de filhos incorrecta', |
|
| 709 | - 'zxml_survoler' => 'para visualizar os correctos, mover o rato por cima', |
|
| 710 | - 'zxml_valeur_attribut' => 'valor do atributo', |
|
| 711 | - 'zxml_vide_balise' => 'tag vazia', |
|
| 712 | - 'zxml_vu' => 'visualizado antes' |
|
| 665 | + // Z |
|
| 666 | + 'zbug_balise_b_aval' => ': tag B colocada demasiado tarde no laço infinito', |
|
| 667 | + 'zbug_balise_inexistante' => 'Tag @balise@ mal declarada para @from@', |
|
| 668 | + 'zbug_balise_sans_argument' => 'Argumento em falta na tag @balise@', |
|
| 669 | + 'zbug_boucle' => 'laço infinito', |
|
| 670 | + 'zbug_boucle_recursive_undef' => 'laço recursivo não definido @nom@', |
|
| 671 | + 'zbug_calcul' => 'cálculo', |
|
| 672 | + 'zbug_champ_hors_boucle' => 'Campo @champ@ fora do laço infinito', |
|
| 673 | + 'zbug_champ_hors_motif' => 'Campo @champ@ fora de contexto @motif@', |
|
| 674 | + 'zbug_code' => 'código', |
|
| 675 | + 'zbug_critere_inconnu' => 'critério desconhecido @critere@ ', |
|
| 676 | + 'zbug_distant_interdit' => 'Dados externos interditos', |
|
| 677 | + 'zbug_doublon_table_sans_cle_primaire' => 'Entradas duplas numa tabela que não tem uma chave primária simples', |
|
| 678 | + 'zbug_doublon_table_sans_index' => 'Entradas duplas numa tabela sem índice', |
|
| 679 | + 'zbug_erreur_boucle_double' => 'laço @id@: Dupla definição ', |
|
| 680 | + 'zbug_erreur_boucle_fermant' => 'laço @id@: tag final em falta ', |
|
| 681 | + 'zbug_erreur_boucle_syntaxe' => 'Laço com sintaxe incorrecta @id@', |
|
| 682 | + 'zbug_erreur_compilation' => 'Erro de compilação', |
|
| 683 | + 'zbug_erreur_execution_page' => 'erro de execução da página', |
|
| 684 | + 'zbug_erreur_filtre' => 'Erro : filtro indefinido @filtre@ ', |
|
| 685 | + 'zbug_erreur_meme_parent' => '{meme_parent} aplica-se exclusivamente aos laços (FORUMS) ou (RUBRIQUES)', |
|
| 686 | + 'zbug_erreur_squelette' => 'Erro(s) no modelo', |
|
| 687 | + 'zbug_hors_compilation' => 'Não compilado', |
|
| 688 | + 'zbug_info_erreur_squelette' => 'Erro no sítio', |
|
| 689 | + 'zbug_inversion_ordre_inexistant' => 'inversão de uma ordem inexistente', |
|
| 690 | + 'zbug_pagination_sans_critere' => '#PAGINAÇÃO sem critério {paginação} ou usada num laço recursivo', |
|
| 691 | + 'zbug_parametres_inclus_incorrects' => 'Parâmetros de inclusão incorrectos: @param@', |
|
| 692 | + 'zbug_profile' => 'Cálculo de tempo : @time@', |
|
| 693 | + 'zbug_resultat' => 'resultado', |
|
| 694 | + 'zbug_serveur_indefini' => 'Sevidor SQL não definido', |
|
| 695 | + 'zbug_statistiques' => 'Estatísticas das consulta SQL classificadas por duração', |
|
| 696 | + 'zbug_table_inconnue' => 'Tabela SQL «@table@» desconhecida', |
|
| 697 | + 'zxml_connus_attributs' => 'attributos conhecidos', |
|
| 698 | + 'zxml_de' => 'de', |
|
| 699 | + 'zxml_inconnu_attribut' => 'atributo desconhecido', |
|
| 700 | + 'zxml_inconnu_balise' => 'tag desconhecida', |
|
| 701 | + 'zxml_inconnu_entite' => 'entidade desconhecida', |
|
| 702 | + 'zxml_inconnu_id' => 'ID desconhecido', |
|
| 703 | + 'zxml_mais_de' => 'mas de', |
|
| 704 | + 'zxml_non_conforme' => 'não está de acordo com o princípio', |
|
| 705 | + 'zxml_non_fils' => 'não é um filho de ', |
|
| 706 | + 'zxml_nonvide_balise' => 'a tag não está vazia', |
|
| 707 | + 'zxml_obligatoire_attribut' => 'atributo obrigatório está em falta', |
|
| 708 | + 'zxml_succession_fils_incorrecte' => 'sucessão de filhos incorrecta', |
|
| 709 | + 'zxml_survoler' => 'para visualizar os correctos, mover o rato por cima', |
|
| 710 | + 'zxml_valeur_attribut' => 'valor do atributo', |
|
| 711 | + 'zxml_vide_balise' => 'tag vazia', |
|
| 712 | + 'zxml_vu' => 'visualizado antes' |
|
| 713 | 713 | ); |
@@ -17,7 +17,7 @@ discard block |
||
| 17 | 17 | **/ |
| 18 | 18 | |
| 19 | 19 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 20 | - return; |
|
| 20 | + return; |
|
| 21 | 21 | } |
| 22 | 22 | |
| 23 | 23 | /** |
@@ -39,28 +39,28 @@ discard block |
||
| 39 | 39 | * Tableau des champs et valeurs collectées |
| 40 | 40 | */ |
| 41 | 41 | function collecter_requests($white_list, $black_list = [], $set = null, $tous = false) { |
| 42 | - $c = $set; |
|
| 43 | - if (!$c) { |
|
| 44 | - $c = []; |
|
| 45 | - foreach ($white_list as $champ) { |
|
| 46 | - // on ne collecte que les champs reellement envoyes par defaut. |
|
| 47 | - // le cas d'un envoi de valeur NULL peut du coup poser probleme. |
|
| 48 | - $val = _request($champ); |
|
| 49 | - if ($tous or $val !== null) { |
|
| 50 | - $c[$champ] = $val; |
|
| 51 | - } |
|
| 52 | - } |
|
| 53 | - // on ajoute toujours la lang en saisie possible |
|
| 54 | - // meme si pas prevu au depart pour l'objet concerne |
|
| 55 | - if ($l = _request('changer_lang')) { |
|
| 56 | - $c['lang'] = $l; |
|
| 57 | - } |
|
| 58 | - } |
|
| 59 | - foreach ($black_list as $champ) { |
|
| 60 | - unset($c[$champ]); |
|
| 61 | - } |
|
| 62 | - |
|
| 63 | - return $c; |
|
| 42 | + $c = $set; |
|
| 43 | + if (!$c) { |
|
| 44 | + $c = []; |
|
| 45 | + foreach ($white_list as $champ) { |
|
| 46 | + // on ne collecte que les champs reellement envoyes par defaut. |
|
| 47 | + // le cas d'un envoi de valeur NULL peut du coup poser probleme. |
|
| 48 | + $val = _request($champ); |
|
| 49 | + if ($tous or $val !== null) { |
|
| 50 | + $c[$champ] = $val; |
|
| 51 | + } |
|
| 52 | + } |
|
| 53 | + // on ajoute toujours la lang en saisie possible |
|
| 54 | + // meme si pas prevu au depart pour l'objet concerne |
|
| 55 | + if ($l = _request('changer_lang')) { |
|
| 56 | + $c['lang'] = $l; |
|
| 57 | + } |
|
| 58 | + } |
|
| 59 | + foreach ($black_list as $champ) { |
|
| 60 | + unset($c[$champ]); |
|
| 61 | + } |
|
| 62 | + |
|
| 63 | + return $c; |
|
| 64 | 64 | } |
| 65 | 65 | |
| 66 | 66 | /** |
@@ -97,237 +97,237 @@ discard block |
||
| 97 | 97 | * - chaîne : Texte d'un message d'erreur |
| 98 | 98 | */ |
| 99 | 99 | function objet_modifier_champs($objet, $id_objet, $options, $c = null, $serveur = '') { |
| 100 | - if (!$id_objet = intval($id_objet)) { |
|
| 101 | - spip_log('Erreur $id_objet non defini', 'warn'); |
|
| 102 | - |
|
| 103 | - return _T('erreur_technique_enregistrement_impossible'); |
|
| 104 | - } |
|
| 105 | - |
|
| 106 | - include_spip('inc/filtres'); |
|
| 107 | - |
|
| 108 | - $table_objet = table_objet($objet, $serveur); |
|
| 109 | - $spip_table_objet = table_objet_sql($objet, $serveur); |
|
| 110 | - $id_table_objet = id_table_objet($objet, $serveur); |
|
| 111 | - $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 112 | - $desc = $trouver_table($spip_table_objet, $serveur); |
|
| 113 | - |
|
| 114 | - // Appels incomplets (sans $c) |
|
| 115 | - if (!is_array($c)) { |
|
| 116 | - spip_log('erreur appel objet_modifier_champs(' . $objet . '), manque $c'); |
|
| 117 | - |
|
| 118 | - return _T('erreur_technique_enregistrement_impossible'); |
|
| 119 | - } |
|
| 120 | - |
|
| 121 | - // Securite : certaines variables ne sont jamais acceptees ici |
|
| 122 | - // car elles ne relevent pas de autoriser(xxx, modifier) ; |
|
| 123 | - // il faut passer par instituer_XX() |
|
| 124 | - // TODO: faut-il passer ces variables interdites |
|
| 125 | - // dans un fichier de description separe ? |
|
| 126 | - unset($c['statut']); |
|
| 127 | - unset($c['id_parent']); |
|
| 128 | - unset($c['id_rubrique']); |
|
| 129 | - unset($c['id_secteur']); |
|
| 130 | - |
|
| 131 | - // Gerer les champs non vides |
|
| 132 | - if (isset($options['nonvide']) and is_array($options['nonvide'])) { |
|
| 133 | - foreach ($options['nonvide'] as $champ => $sinon) { |
|
| 134 | - if (isset($c[$champ]) and $c[$champ] === '') { |
|
| 135 | - $c[$champ] = $sinon; |
|
| 136 | - } |
|
| 137 | - } |
|
| 138 | - } |
|
| 139 | - |
|
| 140 | - // N'accepter que les champs qui existent |
|
| 141 | - // TODO: ici aussi on peut valider les contenus |
|
| 142 | - // en fonction du type |
|
| 143 | - $champs = array_intersect_key($c, $desc['field']); |
|
| 144 | - |
|
| 145 | - // Nettoyer les valeurs |
|
| 146 | - $champs = array_map('corriger_caracteres', $champs); |
|
| 147 | - |
|
| 148 | - // On récupère l'état avant toute modification |
|
| 149 | - $row = sql_fetsel('*', $spip_table_objet, $id_table_objet . '=' . $id_objet); |
|
| 150 | - |
|
| 151 | - // Envoyer aux plugins |
|
| 152 | - $champs = pipeline( |
|
| 153 | - 'pre_edition', |
|
| 154 | - [ |
|
| 155 | - 'args' => [ |
|
| 156 | - 'table' => $spip_table_objet, // compatibilite |
|
| 157 | - 'table_objet' => $table_objet, |
|
| 158 | - 'spip_table_objet' => $spip_table_objet, |
|
| 159 | - 'desc' => $desc, |
|
| 160 | - 'type' => $objet, |
|
| 161 | - 'id_objet' => $id_objet, |
|
| 162 | - 'data' => $options['data'] ?? null, |
|
| 163 | - 'champs' => $options['champs'] ?? [], // [doc] c'est quoi ? |
|
| 164 | - 'champs_anciens' => $row, // état du contenu avant modif |
|
| 165 | - 'serveur' => $serveur, |
|
| 166 | - 'action' => $options['action'] ?? 'modifier' |
|
| 167 | - ], |
|
| 168 | - 'data' => $champs |
|
| 169 | - ] |
|
| 170 | - ); |
|
| 171 | - |
|
| 172 | - if (!$champs) { |
|
| 173 | - return false; |
|
| 174 | - } |
|
| 175 | - |
|
| 176 | - |
|
| 177 | - // marquer le fait que l'objet est travaille par toto a telle date |
|
| 178 | - if ($GLOBALS['meta']['articles_modif'] != 'non') { |
|
| 179 | - include_spip('inc/drapeau_edition'); |
|
| 180 | - signale_edition($id_objet, $GLOBALS['visiteur_session'], $objet); |
|
| 181 | - } |
|
| 182 | - |
|
| 183 | - // Verifier si les mises a jour sont pertinentes, datees, en conflit etc |
|
| 184 | - include_spip('inc/editer'); |
|
| 185 | - if (!isset($options['data']) or is_null($options['data'])) { |
|
| 186 | - $options['data'] = &$_POST; |
|
| 187 | - } |
|
| 188 | - $conflits = controler_md5($champs, $options['data'], $objet, $id_objet, $serveur); |
|
| 189 | - // cas hypothetique : normalement inc/editer verifie en amont le conflit edition |
|
| 190 | - // et gere l'interface |
|
| 191 | - // ici on ne renvoie donc qu'un messsage d'erreur, au cas ou on y arrive quand meme |
|
| 192 | - if ($conflits) { |
|
| 193 | - return _T('titre_conflit_edition'); |
|
| 194 | - } |
|
| 195 | - |
|
| 196 | - if ($champs) { |
|
| 197 | - // cas particulier de la langue : passer par instituer_langue_objet |
|
| 198 | - if (isset($champs['lang'])) { |
|
| 199 | - if ($changer_lang = $champs['lang']) { |
|
| 200 | - $id_rubrique = 0; |
|
| 201 | - if (isset($desc['field']['id_rubrique'])) { |
|
| 202 | - $parent = ($objet == 'rubrique') ? 'id_parent' : 'id_rubrique'; |
|
| 203 | - $id_rubrique = sql_getfetsel($parent, $spip_table_objet, "$id_table_objet=" . intval($id_objet)); |
|
| 204 | - } |
|
| 205 | - $instituer_langue_objet = charger_fonction('instituer_langue_objet', 'action'); |
|
| 206 | - $champs['lang'] = $instituer_langue_objet($objet, $id_objet, $id_rubrique, $changer_lang, $serveur); |
|
| 207 | - } |
|
| 208 | - // on laisse 'lang' dans $champs, |
|
| 209 | - // ca permet de passer dans le pipeline post_edition et de journaliser |
|
| 210 | - // et ca ne gene pas qu'on refasse un sql_updateq dessus apres l'avoir |
|
| 211 | - // deja pris en compte |
|
| 212 | - } |
|
| 213 | - |
|
| 214 | - // la modif peut avoir lieu |
|
| 215 | - |
|
| 216 | - // faut-il ajouter date_modif ? |
|
| 217 | - if ( |
|
| 218 | - !empty($options['date_modif']) |
|
| 219 | - and !isset($champs[$options['date_modif']]) |
|
| 220 | - ) { |
|
| 221 | - $champs[$options['date_modif']] = date('Y-m-d H:i:s'); |
|
| 222 | - } |
|
| 223 | - |
|
| 224 | - // allez on commit la modif |
|
| 225 | - sql_updateq($spip_table_objet, $champs, "$id_table_objet=" . intval($id_objet), $serveur); |
|
| 226 | - |
|
| 227 | - // on verifie si elle est bien passee |
|
| 228 | - $moof = sql_fetsel( |
|
| 229 | - array_keys($champs), |
|
| 230 | - $spip_table_objet, |
|
| 231 | - "$id_table_objet=" . intval($id_objet), |
|
| 232 | - [], |
|
| 233 | - [], |
|
| 234 | - '', |
|
| 235 | - [], |
|
| 236 | - $serveur |
|
| 237 | - ); |
|
| 238 | - // si difference entre les champs, reperer les champs mal enregistres |
|
| 239 | - if ($moof != $champs) { |
|
| 240 | - $liste = []; |
|
| 241 | - foreach ($moof as $k => $v) { |
|
| 242 | - if ( |
|
| 243 | - $v !== $champs[$k] |
|
| 244 | - // ne pas alerter si le champ est numerique est que les valeurs sont equivalentes |
|
| 245 | - and (!is_numeric($v) or intval($v) !== intval($champs[$k])) |
|
| 246 | - // ne pas alerter si le champ est date, qu'on a envoye une valeur vide et qu'on recupere une date nulle |
|
| 247 | - and (strlen($champs[$k]) or !in_array($v, ['0000-00-00 00:00:00', '0000-00-00'])) |
|
| 248 | - ) { |
|
| 249 | - $liste[] = $k; |
|
| 250 | - $conflits[$k]['post'] = $champs[$k]; |
|
| 251 | - $conflits[$k]['save'] = $v; |
|
| 252 | - |
|
| 253 | - // cas specifique MySQL+emoji : si l'un est la |
|
| 254 | - // conversion utf8_noplanes de l'autre alors c'est OK |
|
| 255 | - if (defined('_MYSQL_NOPLANES') && _MYSQL_NOPLANES) { |
|
| 256 | - include_spip('inc/charsets'); |
|
| 257 | - if ($v == utf8_noplanes($champs[$k])) { |
|
| 258 | - array_pop($liste); |
|
| 259 | - } |
|
| 260 | - } |
|
| 261 | - } |
|
| 262 | - } |
|
| 263 | - // si un champ n'a pas ete correctement enregistre, loger et retourner une erreur |
|
| 264 | - // c'est un cas exceptionnel |
|
| 265 | - if (count($liste)) { |
|
| 266 | - spip_log( |
|
| 267 | - "Erreur enregistrement en base $objet/$id_objet champs :" . var_export($conflits, true), |
|
| 268 | - 'modifier.' . _LOG_CRITIQUE |
|
| 269 | - ); |
|
| 270 | - |
|
| 271 | - return _T( |
|
| 272 | - 'erreur_technique_enregistrement_champs', |
|
| 273 | - ['champs' => "<i>'" . implode("'</i>,<i>'", $liste) . "'</i>"] |
|
| 274 | - ); |
|
| 275 | - } |
|
| 276 | - } |
|
| 277 | - |
|
| 278 | - // Invalider les caches |
|
| 279 | - if (isset($options['invalideur']) and $options['invalideur']) { |
|
| 280 | - include_spip('inc/invalideur'); |
|
| 281 | - if (is_array($options['invalideur'])) { |
|
| 282 | - array_map('suivre_invalideur', $options['invalideur']); |
|
| 283 | - } else { |
|
| 284 | - suivre_invalideur($options['invalideur']); |
|
| 285 | - } |
|
| 286 | - } |
|
| 287 | - |
|
| 288 | - // Notifications, gestion des revisions... |
|
| 289 | - // en standard, appelle |nouvelle_revision ci-dessous |
|
| 290 | - pipeline( |
|
| 291 | - 'post_edition', |
|
| 292 | - [ |
|
| 293 | - 'args' => [ |
|
| 294 | - 'table' => $spip_table_objet, |
|
| 295 | - 'table_objet' => $table_objet, |
|
| 296 | - 'spip_table_objet' => $spip_table_objet, |
|
| 297 | - 'desc' => $desc, |
|
| 298 | - 'type' => $objet, |
|
| 299 | - 'id_objet' => $id_objet, |
|
| 300 | - 'champs' => $options['champs'] ?? [], // [doc] kesako ? |
|
| 301 | - 'champs_anciens' => $row, // état du contenu avant modif |
|
| 302 | - 'serveur' => $serveur, |
|
| 303 | - 'action' => $options['action'] ?? 'modifier' |
|
| 304 | - ], |
|
| 305 | - 'data' => $champs |
|
| 306 | - ] |
|
| 307 | - ); |
|
| 308 | - } |
|
| 309 | - |
|
| 310 | - // journaliser l'affaire |
|
| 311 | - // message a affiner :-) |
|
| 312 | - include_spip('inc/filtres_mini'); |
|
| 313 | - $qui = ''; |
|
| 314 | - if (!empty($GLOBALS['visiteur_session']['id_auteur'])) { |
|
| 315 | - $qui .= ' #id_auteur:' . $GLOBALS['visiteur_session']['id_auteur'] . '#'; |
|
| 316 | - } |
|
| 317 | - if (!empty($GLOBALS['visiteur_session']['nom'])) { |
|
| 318 | - $qui .= ' #nom:' . $GLOBALS['visiteur_session']['nom'] . '#'; |
|
| 319 | - } |
|
| 320 | - if ($qui == '') { |
|
| 321 | - $qui = '#ip:' . $GLOBALS['ip'] . '#'; |
|
| 322 | - } |
|
| 323 | - journal(_L($qui . ' a édité ' . $objet . ' ' . $id_objet . ' (' . join( |
|
| 324 | - '+', |
|
| 325 | - array_diff(array_keys($champs), ['date_modif']) |
|
| 326 | - ) . ')'), [ |
|
| 327 | - 'faire' => 'modifier', |
|
| 328 | - 'quoi' => $objet, |
|
| 329 | - 'id' => $id_objet |
|
| 330 | - ]); |
|
| 331 | - |
|
| 332 | - return ''; |
|
| 100 | + if (!$id_objet = intval($id_objet)) { |
|
| 101 | + spip_log('Erreur $id_objet non defini', 'warn'); |
|
| 102 | + |
|
| 103 | + return _T('erreur_technique_enregistrement_impossible'); |
|
| 104 | + } |
|
| 105 | + |
|
| 106 | + include_spip('inc/filtres'); |
|
| 107 | + |
|
| 108 | + $table_objet = table_objet($objet, $serveur); |
|
| 109 | + $spip_table_objet = table_objet_sql($objet, $serveur); |
|
| 110 | + $id_table_objet = id_table_objet($objet, $serveur); |
|
| 111 | + $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 112 | + $desc = $trouver_table($spip_table_objet, $serveur); |
|
| 113 | + |
|
| 114 | + // Appels incomplets (sans $c) |
|
| 115 | + if (!is_array($c)) { |
|
| 116 | + spip_log('erreur appel objet_modifier_champs(' . $objet . '), manque $c'); |
|
| 117 | + |
|
| 118 | + return _T('erreur_technique_enregistrement_impossible'); |
|
| 119 | + } |
|
| 120 | + |
|
| 121 | + // Securite : certaines variables ne sont jamais acceptees ici |
|
| 122 | + // car elles ne relevent pas de autoriser(xxx, modifier) ; |
|
| 123 | + // il faut passer par instituer_XX() |
|
| 124 | + // TODO: faut-il passer ces variables interdites |
|
| 125 | + // dans un fichier de description separe ? |
|
| 126 | + unset($c['statut']); |
|
| 127 | + unset($c['id_parent']); |
|
| 128 | + unset($c['id_rubrique']); |
|
| 129 | + unset($c['id_secteur']); |
|
| 130 | + |
|
| 131 | + // Gerer les champs non vides |
|
| 132 | + if (isset($options['nonvide']) and is_array($options['nonvide'])) { |
|
| 133 | + foreach ($options['nonvide'] as $champ => $sinon) { |
|
| 134 | + if (isset($c[$champ]) and $c[$champ] === '') { |
|
| 135 | + $c[$champ] = $sinon; |
|
| 136 | + } |
|
| 137 | + } |
|
| 138 | + } |
|
| 139 | + |
|
| 140 | + // N'accepter que les champs qui existent |
|
| 141 | + // TODO: ici aussi on peut valider les contenus |
|
| 142 | + // en fonction du type |
|
| 143 | + $champs = array_intersect_key($c, $desc['field']); |
|
| 144 | + |
|
| 145 | + // Nettoyer les valeurs |
|
| 146 | + $champs = array_map('corriger_caracteres', $champs); |
|
| 147 | + |
|
| 148 | + // On récupère l'état avant toute modification |
|
| 149 | + $row = sql_fetsel('*', $spip_table_objet, $id_table_objet . '=' . $id_objet); |
|
| 150 | + |
|
| 151 | + // Envoyer aux plugins |
|
| 152 | + $champs = pipeline( |
|
| 153 | + 'pre_edition', |
|
| 154 | + [ |
|
| 155 | + 'args' => [ |
|
| 156 | + 'table' => $spip_table_objet, // compatibilite |
|
| 157 | + 'table_objet' => $table_objet, |
|
| 158 | + 'spip_table_objet' => $spip_table_objet, |
|
| 159 | + 'desc' => $desc, |
|
| 160 | + 'type' => $objet, |
|
| 161 | + 'id_objet' => $id_objet, |
|
| 162 | + 'data' => $options['data'] ?? null, |
|
| 163 | + 'champs' => $options['champs'] ?? [], // [doc] c'est quoi ? |
|
| 164 | + 'champs_anciens' => $row, // état du contenu avant modif |
|
| 165 | + 'serveur' => $serveur, |
|
| 166 | + 'action' => $options['action'] ?? 'modifier' |
|
| 167 | + ], |
|
| 168 | + 'data' => $champs |
|
| 169 | + ] |
|
| 170 | + ); |
|
| 171 | + |
|
| 172 | + if (!$champs) { |
|
| 173 | + return false; |
|
| 174 | + } |
|
| 175 | + |
|
| 176 | + |
|
| 177 | + // marquer le fait que l'objet est travaille par toto a telle date |
|
| 178 | + if ($GLOBALS['meta']['articles_modif'] != 'non') { |
|
| 179 | + include_spip('inc/drapeau_edition'); |
|
| 180 | + signale_edition($id_objet, $GLOBALS['visiteur_session'], $objet); |
|
| 181 | + } |
|
| 182 | + |
|
| 183 | + // Verifier si les mises a jour sont pertinentes, datees, en conflit etc |
|
| 184 | + include_spip('inc/editer'); |
|
| 185 | + if (!isset($options['data']) or is_null($options['data'])) { |
|
| 186 | + $options['data'] = &$_POST; |
|
| 187 | + } |
|
| 188 | + $conflits = controler_md5($champs, $options['data'], $objet, $id_objet, $serveur); |
|
| 189 | + // cas hypothetique : normalement inc/editer verifie en amont le conflit edition |
|
| 190 | + // et gere l'interface |
|
| 191 | + // ici on ne renvoie donc qu'un messsage d'erreur, au cas ou on y arrive quand meme |
|
| 192 | + if ($conflits) { |
|
| 193 | + return _T('titre_conflit_edition'); |
|
| 194 | + } |
|
| 195 | + |
|
| 196 | + if ($champs) { |
|
| 197 | + // cas particulier de la langue : passer par instituer_langue_objet |
|
| 198 | + if (isset($champs['lang'])) { |
|
| 199 | + if ($changer_lang = $champs['lang']) { |
|
| 200 | + $id_rubrique = 0; |
|
| 201 | + if (isset($desc['field']['id_rubrique'])) { |
|
| 202 | + $parent = ($objet == 'rubrique') ? 'id_parent' : 'id_rubrique'; |
|
| 203 | + $id_rubrique = sql_getfetsel($parent, $spip_table_objet, "$id_table_objet=" . intval($id_objet)); |
|
| 204 | + } |
|
| 205 | + $instituer_langue_objet = charger_fonction('instituer_langue_objet', 'action'); |
|
| 206 | + $champs['lang'] = $instituer_langue_objet($objet, $id_objet, $id_rubrique, $changer_lang, $serveur); |
|
| 207 | + } |
|
| 208 | + // on laisse 'lang' dans $champs, |
|
| 209 | + // ca permet de passer dans le pipeline post_edition et de journaliser |
|
| 210 | + // et ca ne gene pas qu'on refasse un sql_updateq dessus apres l'avoir |
|
| 211 | + // deja pris en compte |
|
| 212 | + } |
|
| 213 | + |
|
| 214 | + // la modif peut avoir lieu |
|
| 215 | + |
|
| 216 | + // faut-il ajouter date_modif ? |
|
| 217 | + if ( |
|
| 218 | + !empty($options['date_modif']) |
|
| 219 | + and !isset($champs[$options['date_modif']]) |
|
| 220 | + ) { |
|
| 221 | + $champs[$options['date_modif']] = date('Y-m-d H:i:s'); |
|
| 222 | + } |
|
| 223 | + |
|
| 224 | + // allez on commit la modif |
|
| 225 | + sql_updateq($spip_table_objet, $champs, "$id_table_objet=" . intval($id_objet), $serveur); |
|
| 226 | + |
|
| 227 | + // on verifie si elle est bien passee |
|
| 228 | + $moof = sql_fetsel( |
|
| 229 | + array_keys($champs), |
|
| 230 | + $spip_table_objet, |
|
| 231 | + "$id_table_objet=" . intval($id_objet), |
|
| 232 | + [], |
|
| 233 | + [], |
|
| 234 | + '', |
|
| 235 | + [], |
|
| 236 | + $serveur |
|
| 237 | + ); |
|
| 238 | + // si difference entre les champs, reperer les champs mal enregistres |
|
| 239 | + if ($moof != $champs) { |
|
| 240 | + $liste = []; |
|
| 241 | + foreach ($moof as $k => $v) { |
|
| 242 | + if ( |
|
| 243 | + $v !== $champs[$k] |
|
| 244 | + // ne pas alerter si le champ est numerique est que les valeurs sont equivalentes |
|
| 245 | + and (!is_numeric($v) or intval($v) !== intval($champs[$k])) |
|
| 246 | + // ne pas alerter si le champ est date, qu'on a envoye une valeur vide et qu'on recupere une date nulle |
|
| 247 | + and (strlen($champs[$k]) or !in_array($v, ['0000-00-00 00:00:00', '0000-00-00'])) |
|
| 248 | + ) { |
|
| 249 | + $liste[] = $k; |
|
| 250 | + $conflits[$k]['post'] = $champs[$k]; |
|
| 251 | + $conflits[$k]['save'] = $v; |
|
| 252 | + |
|
| 253 | + // cas specifique MySQL+emoji : si l'un est la |
|
| 254 | + // conversion utf8_noplanes de l'autre alors c'est OK |
|
| 255 | + if (defined('_MYSQL_NOPLANES') && _MYSQL_NOPLANES) { |
|
| 256 | + include_spip('inc/charsets'); |
|
| 257 | + if ($v == utf8_noplanes($champs[$k])) { |
|
| 258 | + array_pop($liste); |
|
| 259 | + } |
|
| 260 | + } |
|
| 261 | + } |
|
| 262 | + } |
|
| 263 | + // si un champ n'a pas ete correctement enregistre, loger et retourner une erreur |
|
| 264 | + // c'est un cas exceptionnel |
|
| 265 | + if (count($liste)) { |
|
| 266 | + spip_log( |
|
| 267 | + "Erreur enregistrement en base $objet/$id_objet champs :" . var_export($conflits, true), |
|
| 268 | + 'modifier.' . _LOG_CRITIQUE |
|
| 269 | + ); |
|
| 270 | + |
|
| 271 | + return _T( |
|
| 272 | + 'erreur_technique_enregistrement_champs', |
|
| 273 | + ['champs' => "<i>'" . implode("'</i>,<i>'", $liste) . "'</i>"] |
|
| 274 | + ); |
|
| 275 | + } |
|
| 276 | + } |
|
| 277 | + |
|
| 278 | + // Invalider les caches |
|
| 279 | + if (isset($options['invalideur']) and $options['invalideur']) { |
|
| 280 | + include_spip('inc/invalideur'); |
|
| 281 | + if (is_array($options['invalideur'])) { |
|
| 282 | + array_map('suivre_invalideur', $options['invalideur']); |
|
| 283 | + } else { |
|
| 284 | + suivre_invalideur($options['invalideur']); |
|
| 285 | + } |
|
| 286 | + } |
|
| 287 | + |
|
| 288 | + // Notifications, gestion des revisions... |
|
| 289 | + // en standard, appelle |nouvelle_revision ci-dessous |
|
| 290 | + pipeline( |
|
| 291 | + 'post_edition', |
|
| 292 | + [ |
|
| 293 | + 'args' => [ |
|
| 294 | + 'table' => $spip_table_objet, |
|
| 295 | + 'table_objet' => $table_objet, |
|
| 296 | + 'spip_table_objet' => $spip_table_objet, |
|
| 297 | + 'desc' => $desc, |
|
| 298 | + 'type' => $objet, |
|
| 299 | + 'id_objet' => $id_objet, |
|
| 300 | + 'champs' => $options['champs'] ?? [], // [doc] kesako ? |
|
| 301 | + 'champs_anciens' => $row, // état du contenu avant modif |
|
| 302 | + 'serveur' => $serveur, |
|
| 303 | + 'action' => $options['action'] ?? 'modifier' |
|
| 304 | + ], |
|
| 305 | + 'data' => $champs |
|
| 306 | + ] |
|
| 307 | + ); |
|
| 308 | + } |
|
| 309 | + |
|
| 310 | + // journaliser l'affaire |
|
| 311 | + // message a affiner :-) |
|
| 312 | + include_spip('inc/filtres_mini'); |
|
| 313 | + $qui = ''; |
|
| 314 | + if (!empty($GLOBALS['visiteur_session']['id_auteur'])) { |
|
| 315 | + $qui .= ' #id_auteur:' . $GLOBALS['visiteur_session']['id_auteur'] . '#'; |
|
| 316 | + } |
|
| 317 | + if (!empty($GLOBALS['visiteur_session']['nom'])) { |
|
| 318 | + $qui .= ' #nom:' . $GLOBALS['visiteur_session']['nom'] . '#'; |
|
| 319 | + } |
|
| 320 | + if ($qui == '') { |
|
| 321 | + $qui = '#ip:' . $GLOBALS['ip'] . '#'; |
|
| 322 | + } |
|
| 323 | + journal(_L($qui . ' a édité ' . $objet . ' ' . $id_objet . ' (' . join( |
|
| 324 | + '+', |
|
| 325 | + array_diff(array_keys($champs), ['date_modif']) |
|
| 326 | + ) . ')'), [ |
|
| 327 | + 'faire' => 'modifier', |
|
| 328 | + 'quoi' => $objet, |
|
| 329 | + 'id' => $id_objet |
|
| 330 | + ]); |
|
| 331 | + |
|
| 332 | + return ''; |
|
| 333 | 333 | } |
@@ -1,94 +1,94 @@ |
||
| 1 | 1 | <?php |
| 2 | 2 | |
| 3 | 3 | function formulaires_configurer_ecran_connexion_data(): array { |
| 4 | - return [ |
|
| 5 | - 'couleur_defaut' => '#db1762', |
|
| 6 | - 'img_fond' => _DIR_IMG . 'spip_fond_login.jpg', |
|
| 7 | - ]; |
|
| 4 | + return [ |
|
| 5 | + 'couleur_defaut' => '#db1762', |
|
| 6 | + 'img_fond' => _DIR_IMG . 'spip_fond_login.jpg', |
|
| 7 | + ]; |
|
| 8 | 8 | } |
| 9 | 9 | |
| 10 | 10 | function formulaires_configurer_ecran_connexion_charger_dist() { |
| 11 | - include_spip('inc/config'); |
|
| 12 | - include_spip('inc/autoriser'); |
|
| 11 | + include_spip('inc/config'); |
|
| 12 | + include_spip('inc/autoriser'); |
|
| 13 | 13 | |
| 14 | - $data = formulaires_configurer_ecran_connexion_data(); |
|
| 14 | + $data = formulaires_configurer_ecran_connexion_data(); |
|
| 15 | 15 | |
| 16 | - $valeurs = [ |
|
| 17 | - 'couleur_login' => lire_config('couleur_login', $data['couleur_defaut']), |
|
| 18 | - 'couleur_defaut_login' => $data['couleur_defaut'], |
|
| 19 | - 'upload_image_fond_login' => '', |
|
| 20 | - ]; |
|
| 16 | + $valeurs = [ |
|
| 17 | + 'couleur_login' => lire_config('couleur_login', $data['couleur_defaut']), |
|
| 18 | + 'couleur_defaut_login' => $data['couleur_defaut'], |
|
| 19 | + 'upload_image_fond_login' => '', |
|
| 20 | + ]; |
|
| 21 | 21 | |
| 22 | - if (file_exists($data['img_fond'])) { |
|
| 23 | - $valeurs['src_img'] = $data['img_fond']; |
|
| 24 | - } |
|
| 22 | + if (file_exists($data['img_fond'])) { |
|
| 23 | + $valeurs['src_img'] = $data['img_fond']; |
|
| 24 | + } |
|
| 25 | 25 | |
| 26 | - return $valeurs; |
|
| 26 | + return $valeurs; |
|
| 27 | 27 | } |
| 28 | 28 | |
| 29 | 29 | |
| 30 | 30 | function formulaires_configurer_ecran_connexion_verifier_dist() { |
| 31 | - $erreurs = []; |
|
| 32 | - |
|
| 33 | - if (_request('supprimer_image_fond_login')) { |
|
| 34 | - // rien à tester |
|
| 35 | - } |
|
| 36 | - |
|
| 37 | - elseif (_request('supprimer_couleur_login')) { |
|
| 38 | - // rien à tester |
|
| 39 | - } |
|
| 40 | - |
|
| 41 | - elseif (!empty($_FILES['upload_image_fond_login'])) { |
|
| 42 | - $file = $_FILES['upload_image_fond_login']; |
|
| 43 | - include_spip('inc/documents'); |
|
| 44 | - $extension = pathinfo($file['name'], PATHINFO_EXTENSION); |
|
| 45 | - $extension = corriger_extension(strtolower($extension)); |
|
| 46 | - if (!in_array($extension, ['jpg'])) { |
|
| 47 | - $erreurs['upload_image_fond_login'] = _T('erreur_type_fichier'); |
|
| 48 | - } |
|
| 49 | - } |
|
| 50 | - |
|
| 51 | - return $erreurs; |
|
| 31 | + $erreurs = []; |
|
| 32 | + |
|
| 33 | + if (_request('supprimer_image_fond_login')) { |
|
| 34 | + // rien à tester |
|
| 35 | + } |
|
| 36 | + |
|
| 37 | + elseif (_request('supprimer_couleur_login')) { |
|
| 38 | + // rien à tester |
|
| 39 | + } |
|
| 40 | + |
|
| 41 | + elseif (!empty($_FILES['upload_image_fond_login'])) { |
|
| 42 | + $file = $_FILES['upload_image_fond_login']; |
|
| 43 | + include_spip('inc/documents'); |
|
| 44 | + $extension = pathinfo($file['name'], PATHINFO_EXTENSION); |
|
| 45 | + $extension = corriger_extension(strtolower($extension)); |
|
| 46 | + if (!in_array($extension, ['jpg'])) { |
|
| 47 | + $erreurs['upload_image_fond_login'] = _T('erreur_type_fichier'); |
|
| 48 | + } |
|
| 49 | + } |
|
| 50 | + |
|
| 51 | + return $erreurs; |
|
| 52 | 52 | } |
| 53 | 53 | |
| 54 | 54 | |
| 55 | 55 | function formulaires_configurer_ecran_connexion_traiter_dist() { |
| 56 | 56 | |
| 57 | - $retours = [ |
|
| 58 | - 'message_ok' => _T('config_info_enregistree'), |
|
| 59 | - 'editable' => true, |
|
| 60 | - ]; |
|
| 61 | - |
|
| 62 | - include_spip('inc/config'); |
|
| 63 | - $data = formulaires_configurer_ecran_connexion_data(); |
|
| 64 | - $dest = $data['img_fond']; |
|
| 65 | - |
|
| 66 | - if (_request('couleur_login')) { |
|
| 67 | - $color = _request('couleur_login'); |
|
| 68 | - if ($color === $data['couleur_defaut']) { |
|
| 69 | - effacer_config('couleur_login'); |
|
| 70 | - } else { |
|
| 71 | - ecrire_config('couleur_login', $color); |
|
| 72 | - } |
|
| 73 | - } |
|
| 74 | - |
|
| 75 | - if (_request('supprimer_image_fond_login')) { |
|
| 76 | - @unlink($dest); |
|
| 77 | - } |
|
| 78 | - |
|
| 79 | - elseif (_request('supprimer_couleur_login')) { |
|
| 80 | - effacer_config('couleur_login'); |
|
| 81 | - set_request('couleur_login', null); |
|
| 82 | - } |
|
| 83 | - |
|
| 84 | - elseif (!empty($_FILES['upload_image_fond_login'])) { |
|
| 85 | - $file = $_FILES['upload_image_fond_login']; |
|
| 86 | - include_spip('inc/documents'); |
|
| 87 | - deplacer_fichier_upload($file['tmp_name'], $dest); |
|
| 88 | - } |
|
| 89 | - |
|
| 90 | - include_spip('inc/invalideur'); |
|
| 91 | - suivre_invalideur('1'); # tout effacer |
|
| 92 | - |
|
| 93 | - return $retours; |
|
| 57 | + $retours = [ |
|
| 58 | + 'message_ok' => _T('config_info_enregistree'), |
|
| 59 | + 'editable' => true, |
|
| 60 | + ]; |
|
| 61 | + |
|
| 62 | + include_spip('inc/config'); |
|
| 63 | + $data = formulaires_configurer_ecran_connexion_data(); |
|
| 64 | + $dest = $data['img_fond']; |
|
| 65 | + |
|
| 66 | + if (_request('couleur_login')) { |
|
| 67 | + $color = _request('couleur_login'); |
|
| 68 | + if ($color === $data['couleur_defaut']) { |
|
| 69 | + effacer_config('couleur_login'); |
|
| 70 | + } else { |
|
| 71 | + ecrire_config('couleur_login', $color); |
|
| 72 | + } |
|
| 73 | + } |
|
| 74 | + |
|
| 75 | + if (_request('supprimer_image_fond_login')) { |
|
| 76 | + @unlink($dest); |
|
| 77 | + } |
|
| 78 | + |
|
| 79 | + elseif (_request('supprimer_couleur_login')) { |
|
| 80 | + effacer_config('couleur_login'); |
|
| 81 | + set_request('couleur_login', null); |
|
| 82 | + } |
|
| 83 | + |
|
| 84 | + elseif (!empty($_FILES['upload_image_fond_login'])) { |
|
| 85 | + $file = $_FILES['upload_image_fond_login']; |
|
| 86 | + include_spip('inc/documents'); |
|
| 87 | + deplacer_fichier_upload($file['tmp_name'], $dest); |
|
| 88 | + } |
|
| 89 | + |
|
| 90 | + include_spip('inc/invalideur'); |
|
| 91 | + suivre_invalideur('1'); # tout effacer |
|
| 92 | + |
|
| 93 | + return $retours; |
|
| 94 | 94 | } |
@@ -16,7 +16,7 @@ discard block |
||
| 16 | 16 | * @package SPIP\Core\Fichier |
| 17 | 17 | **/ |
| 18 | 18 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 19 | - return; |
|
| 19 | + return; |
|
| 20 | 20 | } |
| 21 | 21 | |
| 22 | 22 | /** |
@@ -36,28 +36,28 @@ discard block |
||
| 36 | 36 | */ |
| 37 | 37 | function spip_livrer_fichier($fichier, $content_type = 'application/octet-stream', $options = []) { |
| 38 | 38 | |
| 39 | - $defaut = [ |
|
| 40 | - 'attachment' => false, |
|
| 41 | - 'expires' => 3600, |
|
| 42 | - 'range' => null |
|
| 43 | - ]; |
|
| 44 | - $options = array_merge($defaut, $options); |
|
| 45 | - if (is_numeric($options['expire']) and $options['expire'] > 0) { |
|
| 46 | - $options['expire'] = gmdate('D, d M Y H:i:s', time() + $options['expires']) . ' GMT'; |
|
| 47 | - } |
|
| 48 | - |
|
| 49 | - if (is_null($options) and isset($_SERVER['HTTP_RANGE'])) { |
|
| 50 | - $options['range'] = $_SERVER['HTTP_RANGE']; |
|
| 51 | - } |
|
| 52 | - |
|
| 53 | - spip_livrer_fichier_entetes($fichier, $content_type, $options['attachment'] && !$options['range'], $options['expires']); |
|
| 54 | - |
|
| 55 | - if (!is_null($options['range'])) { |
|
| 56 | - spip_livrer_fichier_partie($fichier, $options['range']); |
|
| 57 | - } |
|
| 58 | - else { |
|
| 59 | - spip_livrer_fichier_entier($fichier); |
|
| 60 | - } |
|
| 39 | + $defaut = [ |
|
| 40 | + 'attachment' => false, |
|
| 41 | + 'expires' => 3600, |
|
| 42 | + 'range' => null |
|
| 43 | + ]; |
|
| 44 | + $options = array_merge($defaut, $options); |
|
| 45 | + if (is_numeric($options['expire']) and $options['expire'] > 0) { |
|
| 46 | + $options['expire'] = gmdate('D, d M Y H:i:s', time() + $options['expires']) . ' GMT'; |
|
| 47 | + } |
|
| 48 | + |
|
| 49 | + if (is_null($options) and isset($_SERVER['HTTP_RANGE'])) { |
|
| 50 | + $options['range'] = $_SERVER['HTTP_RANGE']; |
|
| 51 | + } |
|
| 52 | + |
|
| 53 | + spip_livrer_fichier_entetes($fichier, $content_type, $options['attachment'] && !$options['range'], $options['expires']); |
|
| 54 | + |
|
| 55 | + if (!is_null($options['range'])) { |
|
| 56 | + spip_livrer_fichier_partie($fichier, $options['range']); |
|
| 57 | + } |
|
| 58 | + else { |
|
| 59 | + spip_livrer_fichier_entier($fichier); |
|
| 60 | + } |
|
| 61 | 61 | } |
| 62 | 62 | |
| 63 | 63 | /** |
@@ -70,28 +70,28 @@ discard block |
||
| 70 | 70 | * @param int|string $expires |
| 71 | 71 | */ |
| 72 | 72 | function spip_livrer_fichier_entetes($fichier, $content_type = 'application/octet-stream', $attachment = false, $expires = 0) { |
| 73 | - // toujours envoyer un content type, meme vide ! |
|
| 74 | - header('Accept-Ranges: bytes'); |
|
| 75 | - header('Content-Type: ' . $content_type); |
|
| 76 | - |
|
| 77 | - if ($attachment) { |
|
| 78 | - $f = basename($fichier); |
|
| 79 | - // ce content-type est necessaire pour eviter des corruptions de zip dans ie6 |
|
| 80 | - header('Content-Type: application/octet-stream'); |
|
| 81 | - |
|
| 82 | - header("Content-Disposition: attachment; filename=\"$f\";"); |
|
| 83 | - header('Content-Transfer-Encoding: binary'); |
|
| 84 | - |
|
| 85 | - // fix for IE caching or PHP bug issue |
|
| 86 | - header('Expires: 0'); // set expiration time |
|
| 87 | - header('Pragma: public'); |
|
| 88 | - header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); |
|
| 89 | - } |
|
| 90 | - else { |
|
| 91 | - $f = basename($fichier); |
|
| 92 | - header("Content-Disposition: inline; filename=\"$f\";"); |
|
| 93 | - header('Expires: ' . $expires); // set expiration time |
|
| 94 | - } |
|
| 73 | + // toujours envoyer un content type, meme vide ! |
|
| 74 | + header('Accept-Ranges: bytes'); |
|
| 75 | + header('Content-Type: ' . $content_type); |
|
| 76 | + |
|
| 77 | + if ($attachment) { |
|
| 78 | + $f = basename($fichier); |
|
| 79 | + // ce content-type est necessaire pour eviter des corruptions de zip dans ie6 |
|
| 80 | + header('Content-Type: application/octet-stream'); |
|
| 81 | + |
|
| 82 | + header("Content-Disposition: attachment; filename=\"$f\";"); |
|
| 83 | + header('Content-Transfer-Encoding: binary'); |
|
| 84 | + |
|
| 85 | + // fix for IE caching or PHP bug issue |
|
| 86 | + header('Expires: 0'); // set expiration time |
|
| 87 | + header('Pragma: public'); |
|
| 88 | + header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); |
|
| 89 | + } |
|
| 90 | + else { |
|
| 91 | + $f = basename($fichier); |
|
| 92 | + header("Content-Disposition: inline; filename=\"$f\";"); |
|
| 93 | + header('Expires: ' . $expires); // set expiration time |
|
| 94 | + } |
|
| 95 | 95 | } |
| 96 | 96 | |
| 97 | 97 | /** |
@@ -99,20 +99,20 @@ discard block |
||
| 99 | 99 | * @param string $fichier |
| 100 | 100 | */ |
| 101 | 101 | function spip_livrer_fichier_entier($fichier) { |
| 102 | - if (!file_exists($fichier)) { |
|
| 103 | - throw new \Exception(sprintf('File not found: %s', $fichier)); |
|
| 104 | - } |
|
| 102 | + if (!file_exists($fichier)) { |
|
| 103 | + throw new \Exception(sprintf('File not found: %s', $fichier)); |
|
| 104 | + } |
|
| 105 | 105 | |
| 106 | - if (!is_readable($fichier)) { |
|
| 107 | - throw new \Exception(sprintf('File not readable: %s', $fichier)); |
|
| 108 | - } |
|
| 106 | + if (!is_readable($fichier)) { |
|
| 107 | + throw new \Exception(sprintf('File not readable: %s', $fichier)); |
|
| 108 | + } |
|
| 109 | 109 | |
| 110 | - if ($size = filesize($fichier)) { |
|
| 111 | - header(sprintf('Content-Length: %d', $size)); |
|
| 112 | - } |
|
| 110 | + if ($size = filesize($fichier)) { |
|
| 111 | + header(sprintf('Content-Length: %d', $size)); |
|
| 112 | + } |
|
| 113 | 113 | |
| 114 | - readfile($fichier); |
|
| 115 | - exit(); |
|
| 114 | + readfile($fichier); |
|
| 115 | + exit(); |
|
| 116 | 116 | } |
| 117 | 117 | |
| 118 | 118 | /** |
@@ -125,98 +125,98 @@ discard block |
||
| 125 | 125 | * @throws Exception |
| 126 | 126 | */ |
| 127 | 127 | function spip_livrer_fichier_partie($fichier, $range = null) { |
| 128 | - if (!file_exists($fichier)) { |
|
| 129 | - throw new \Exception(sprintf('File not found: %s', $fichier)); |
|
| 130 | - } |
|
| 128 | + if (!file_exists($fichier)) { |
|
| 129 | + throw new \Exception(sprintf('File not found: %s', $fichier)); |
|
| 130 | + } |
|
| 131 | 131 | |
| 132 | - if (!is_readable($fichier)) { |
|
| 133 | - throw new \Exception(sprintf('File not readable: %s', $fichier)); |
|
| 134 | - } |
|
| 132 | + if (!is_readable($fichier)) { |
|
| 133 | + throw new \Exception(sprintf('File not readable: %s', $fichier)); |
|
| 134 | + } |
|
| 135 | 135 | |
| 136 | 136 | |
| 137 | - // Par defaut on envoie tout |
|
| 138 | - $byteOffset = 0; |
|
| 139 | - $byteLength = $fileSize = filesize($fichier); |
|
| 137 | + // Par defaut on envoie tout |
|
| 138 | + $byteOffset = 0; |
|
| 139 | + $byteLength = $fileSize = filesize($fichier); |
|
| 140 | 140 | |
| 141 | 141 | |
| 142 | - // Parse Content-Range header for byte offsets, looks like "bytes=11525-" OR "bytes=11525-12451" |
|
| 143 | - if ($range and preg_match('%bytes=(\d+)-(\d+)?%i', $range, $match)) { |
|
| 144 | - ### Offset signifies where we should begin to read the file |
|
| 145 | - $byteOffset = (int)$match[1]; |
|
| 142 | + // Parse Content-Range header for byte offsets, looks like "bytes=11525-" OR "bytes=11525-12451" |
|
| 143 | + if ($range and preg_match('%bytes=(\d+)-(\d+)?%i', $range, $match)) { |
|
| 144 | + ### Offset signifies where we should begin to read the file |
|
| 145 | + $byteOffset = (int)$match[1]; |
|
| 146 | 146 | |
| 147 | 147 | |
| 148 | - ### Length is for how long we should read the file according to the browser, and can never go beyond the file size |
|
| 149 | - if (isset($match[2])) { |
|
| 150 | - $finishBytes = (int)$match[2]; |
|
| 151 | - $byteLength = $finishBytes + 1; |
|
| 152 | - } else { |
|
| 153 | - $finishBytes = $fileSize - 1; |
|
| 154 | - } |
|
| 148 | + ### Length is for how long we should read the file according to the browser, and can never go beyond the file size |
|
| 149 | + if (isset($match[2])) { |
|
| 150 | + $finishBytes = (int)$match[2]; |
|
| 151 | + $byteLength = $finishBytes + 1; |
|
| 152 | + } else { |
|
| 153 | + $finishBytes = $fileSize - 1; |
|
| 154 | + } |
|
| 155 | 155 | |
| 156 | - $cr_header = sprintf('Content-Range: bytes %d-%d/%d', $byteOffset, $finishBytes, $fileSize); |
|
| 157 | - } |
|
| 158 | - else { |
|
| 159 | - // si pas de range valide, on delegue a la methode d'envoi complet |
|
| 160 | - spip_livrer_fichier_entier($fichier); |
|
| 161 | - // redondant, mais facilite la comprehension du code |
|
| 162 | - exit(); |
|
| 163 | - } |
|
| 156 | + $cr_header = sprintf('Content-Range: bytes %d-%d/%d', $byteOffset, $finishBytes, $fileSize); |
|
| 157 | + } |
|
| 158 | + else { |
|
| 159 | + // si pas de range valide, on delegue a la methode d'envoi complet |
|
| 160 | + spip_livrer_fichier_entier($fichier); |
|
| 161 | + // redondant, mais facilite la comprehension du code |
|
| 162 | + exit(); |
|
| 163 | + } |
|
| 164 | 164 | |
| 165 | - // Remove headers that might unnecessarily clutter up the output |
|
| 166 | - header_remove('Cache-Control'); |
|
| 167 | - header_remove('Pragma'); |
|
| 165 | + // Remove headers that might unnecessarily clutter up the output |
|
| 166 | + header_remove('Cache-Control'); |
|
| 167 | + header_remove('Pragma'); |
|
| 168 | 168 | |
| 169 | - // partial content |
|
| 170 | - header('HTTP/1.1 206 Partial content'); |
|
| 171 | - header($cr_header); ### Decrease by 1 on byte-length since this definition is zero-based index of bytes being sent |
|
| 169 | + // partial content |
|
| 170 | + header('HTTP/1.1 206 Partial content'); |
|
| 171 | + header($cr_header); ### Decrease by 1 on byte-length since this definition is zero-based index of bytes being sent |
|
| 172 | 172 | |
| 173 | 173 | |
| 174 | - $byteRange = $byteLength - $byteOffset; |
|
| 174 | + $byteRange = $byteLength - $byteOffset; |
|
| 175 | 175 | |
| 176 | - header(sprintf('Content-Length: %d', $byteRange)); |
|
| 176 | + header(sprintf('Content-Length: %d', $byteRange)); |
|
| 177 | 177 | |
| 178 | - // Variable containing the buffer |
|
| 179 | - $buffer = ''; |
|
| 180 | - // Just a reasonable buffer size |
|
| 181 | - $bufferSize = 512 * 16; |
|
| 182 | - // Contains how much is left to read of the byteRange |
|
| 183 | - $bytePool = $byteRange; |
|
| 178 | + // Variable containing the buffer |
|
| 179 | + $buffer = ''; |
|
| 180 | + // Just a reasonable buffer size |
|
| 181 | + $bufferSize = 512 * 16; |
|
| 182 | + // Contains how much is left to read of the byteRange |
|
| 183 | + $bytePool = $byteRange; |
|
| 184 | 184 | |
| 185 | - if (!$handle = fopen($fichier, 'r')) { |
|
| 186 | - throw new \Exception(sprintf('Could not get handle for file %s', $fichier)); |
|
| 187 | - } |
|
| 185 | + if (!$handle = fopen($fichier, 'r')) { |
|
| 186 | + throw new \Exception(sprintf('Could not get handle for file %s', $fichier)); |
|
| 187 | + } |
|
| 188 | 188 | |
| 189 | - if (fseek($handle, $byteOffset, SEEK_SET) == -1) { |
|
| 190 | - throw new \Exception(sprintf('Could not seek to byte offset %d', $byteOffset)); |
|
| 191 | - } |
|
| 189 | + if (fseek($handle, $byteOffset, SEEK_SET) == -1) { |
|
| 190 | + throw new \Exception(sprintf('Could not seek to byte offset %d', $byteOffset)); |
|
| 191 | + } |
|
| 192 | 192 | |
| 193 | 193 | |
| 194 | - while ($bytePool > 0) { |
|
| 195 | - // How many bytes we request on this iteration |
|
| 196 | - $chunkSizeRequested = min($bufferSize, $bytePool); |
|
| 194 | + while ($bytePool > 0) { |
|
| 195 | + // How many bytes we request on this iteration |
|
| 196 | + $chunkSizeRequested = min($bufferSize, $bytePool); |
|
| 197 | 197 | |
| 198 | - // Try readin $chunkSizeRequested bytes from $handle and put data in $buffer |
|
| 199 | - $buffer = fread($handle, $chunkSizeRequested); |
|
| 198 | + // Try readin $chunkSizeRequested bytes from $handle and put data in $buffer |
|
| 199 | + $buffer = fread($handle, $chunkSizeRequested); |
|
| 200 | 200 | |
| 201 | - // Store how many bytes were actually read |
|
| 202 | - $chunkSizeActual = strlen($buffer); |
|
| 201 | + // Store how many bytes were actually read |
|
| 202 | + $chunkSizeActual = strlen($buffer); |
|
| 203 | 203 | |
| 204 | - // If we didn't get any bytes that means something unexpected has happened since $bytePool should be zero already |
|
| 205 | - if ($chunkSizeActual == 0) { |
|
| 206 | - // For production servers this should go in your php error log, since it will break the output |
|
| 207 | - trigger_error('Chunksize became 0', E_USER_WARNING); |
|
| 208 | - break; |
|
| 209 | - } |
|
| 204 | + // If we didn't get any bytes that means something unexpected has happened since $bytePool should be zero already |
|
| 205 | + if ($chunkSizeActual == 0) { |
|
| 206 | + // For production servers this should go in your php error log, since it will break the output |
|
| 207 | + trigger_error('Chunksize became 0', E_USER_WARNING); |
|
| 208 | + break; |
|
| 209 | + } |
|
| 210 | 210 | |
| 211 | - // Decrease byte pool with amount of bytes that were read during this iteration |
|
| 212 | - $bytePool -= $chunkSizeActual; |
|
| 211 | + // Decrease byte pool with amount of bytes that were read during this iteration |
|
| 212 | + $bytePool -= $chunkSizeActual; |
|
| 213 | 213 | |
| 214 | - // Write the buffer to output |
|
| 215 | - print $buffer; |
|
| 214 | + // Write the buffer to output |
|
| 215 | + print $buffer; |
|
| 216 | 216 | |
| 217 | - // Try to output the data to the client immediately |
|
| 218 | - flush(); |
|
| 219 | - } |
|
| 217 | + // Try to output the data to the client immediately |
|
| 218 | + flush(); |
|
| 219 | + } |
|
| 220 | 220 | |
| 221 | - exit(); |
|
| 221 | + exit(); |
|
| 222 | 222 | } |
@@ -18,7 +18,7 @@ discard block |
||
| 18 | 18 | */ |
| 19 | 19 | |
| 20 | 20 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 21 | - return; |
|
| 21 | + return; |
|
| 22 | 22 | } |
| 23 | 23 | |
| 24 | 24 | // TODO: get/set_caracteres ? |
@@ -42,91 +42,91 @@ discard block |
||
| 42 | 42 | * @return array|bool |
| 43 | 43 | */ |
| 44 | 44 | function req_sqlite_dist($addr, $port, $login, $pass, $db = '', $prefixe = '', $sqlite_version = '') { |
| 45 | - static $last_connect = []; |
|
| 46 | - |
|
| 47 | - // si provient de selectdb |
|
| 48 | - // un code pour etre sur que l'on vient de select_db() |
|
| 49 | - if (strpos($db, $code = '@selectdb@') !== false) { |
|
| 50 | - foreach (['addr', 'port', 'login', 'pass', 'prefixe'] as $a) { |
|
| 51 | - $$a = $last_connect[$a]; |
|
| 52 | - } |
|
| 53 | - $db = str_replace($code, '', $db); |
|
| 54 | - } |
|
| 55 | - |
|
| 56 | - /* |
|
| 45 | + static $last_connect = []; |
|
| 46 | + |
|
| 47 | + // si provient de selectdb |
|
| 48 | + // un code pour etre sur que l'on vient de select_db() |
|
| 49 | + if (strpos($db, $code = '@selectdb@') !== false) { |
|
| 50 | + foreach (['addr', 'port', 'login', 'pass', 'prefixe'] as $a) { |
|
| 51 | + $$a = $last_connect[$a]; |
|
| 52 | + } |
|
| 53 | + $db = str_replace($code, '', $db); |
|
| 54 | + } |
|
| 55 | + |
|
| 56 | + /* |
|
| 57 | 57 | * En sqlite, seule l'adresse du fichier est importante. |
| 58 | 58 | * Ce sera $db le nom, |
| 59 | 59 | * le path est $addr |
| 60 | 60 | * (_DIR_DB si $addr est vide) |
| 61 | 61 | */ |
| 62 | - _sqlite_init(); |
|
| 63 | - |
|
| 64 | - // determiner le dossier de la base : $addr ou _DIR_DB |
|
| 65 | - $f = _DIR_DB; |
|
| 66 | - if ($addr and strpos($addr, '/') !== false) { |
|
| 67 | - $f = rtrim($addr, '/') . '/'; |
|
| 68 | - } |
|
| 69 | - |
|
| 70 | - // un nom de base demande et impossible d'obtenir la base, on s'en va : |
|
| 71 | - // il faut que la base existe ou que le repertoire parent soit writable |
|
| 72 | - if ($db and !is_file($f .= $db . '.sqlite') and !is_writable(dirname($f))) { |
|
| 73 | - spip_log("base $f non trouvee ou droits en ecriture manquants", 'sqlite.' . _LOG_HS); |
|
| 74 | - |
|
| 75 | - return false; |
|
| 76 | - } |
|
| 77 | - |
|
| 78 | - // charger les modules sqlite au besoin |
|
| 79 | - if (!_sqlite_charger_version($sqlite_version)) { |
|
| 80 | - spip_log("Impossible de trouver/charger le module SQLite ($sqlite_version)!", 'sqlite.' . _LOG_HS); |
|
| 81 | - |
|
| 82 | - return false; |
|
| 83 | - } |
|
| 84 | - |
|
| 85 | - // chargement des constantes |
|
| 86 | - // il ne faut pas definir les constantes avant d'avoir charge les modules sqlite |
|
| 87 | - $define = 'spip_sqlite' . $sqlite_version . '_constantes'; |
|
| 88 | - $define(); |
|
| 89 | - |
|
| 90 | - $ok = false; |
|
| 91 | - if (!$db) { |
|
| 92 | - // si pas de db -> |
|
| 93 | - // base temporaire tant qu'on ne connait pas son vrai nom |
|
| 94 | - // pour tester la connexion |
|
| 95 | - $db = '_sqlite' . $sqlite_version . '_install'; |
|
| 96 | - $tmp = _DIR_DB . $db . '.sqlite'; |
|
| 97 | - $ok = $link = new \PDO("sqlite:$tmp"); |
|
| 98 | - } else { |
|
| 99 | - // Ouvrir (eventuellement creer la base) |
|
| 100 | - $ok = $link = new \PDO("sqlite:$f"); |
|
| 101 | - } |
|
| 102 | - |
|
| 103 | - if (!$ok) { |
|
| 104 | - $e = _sqlite_last_error_from_link($link); |
|
| 105 | - spip_log("Impossible d'ouvrir la base SQLite($sqlite_version) $f : $e", 'sqlite.' . _LOG_HS); |
|
| 106 | - |
|
| 107 | - return false; |
|
| 108 | - } |
|
| 109 | - |
|
| 110 | - if ($link) { |
|
| 111 | - $last_connect = [ |
|
| 112 | - 'addr' => $addr, |
|
| 113 | - 'port' => $port, |
|
| 114 | - 'login' => $login, |
|
| 115 | - 'pass' => $pass, |
|
| 116 | - 'db' => $db, |
|
| 117 | - 'prefixe' => $prefixe, |
|
| 118 | - ]; |
|
| 119 | - // etre sur qu'on definit bien les fonctions a chaque nouvelle connexion |
|
| 120 | - include_spip('req/sqlite_fonctions'); |
|
| 121 | - _sqlite_init_functions($link); |
|
| 122 | - } |
|
| 123 | - |
|
| 124 | - return [ |
|
| 125 | - 'db' => $db, |
|
| 126 | - 'prefixe' => $prefixe ? $prefixe : $db, |
|
| 127 | - 'link' => $link, |
|
| 128 | - 'total_requetes' => 0, |
|
| 129 | - ]; |
|
| 62 | + _sqlite_init(); |
|
| 63 | + |
|
| 64 | + // determiner le dossier de la base : $addr ou _DIR_DB |
|
| 65 | + $f = _DIR_DB; |
|
| 66 | + if ($addr and strpos($addr, '/') !== false) { |
|
| 67 | + $f = rtrim($addr, '/') . '/'; |
|
| 68 | + } |
|
| 69 | + |
|
| 70 | + // un nom de base demande et impossible d'obtenir la base, on s'en va : |
|
| 71 | + // il faut que la base existe ou que le repertoire parent soit writable |
|
| 72 | + if ($db and !is_file($f .= $db . '.sqlite') and !is_writable(dirname($f))) { |
|
| 73 | + spip_log("base $f non trouvee ou droits en ecriture manquants", 'sqlite.' . _LOG_HS); |
|
| 74 | + |
|
| 75 | + return false; |
|
| 76 | + } |
|
| 77 | + |
|
| 78 | + // charger les modules sqlite au besoin |
|
| 79 | + if (!_sqlite_charger_version($sqlite_version)) { |
|
| 80 | + spip_log("Impossible de trouver/charger le module SQLite ($sqlite_version)!", 'sqlite.' . _LOG_HS); |
|
| 81 | + |
|
| 82 | + return false; |
|
| 83 | + } |
|
| 84 | + |
|
| 85 | + // chargement des constantes |
|
| 86 | + // il ne faut pas definir les constantes avant d'avoir charge les modules sqlite |
|
| 87 | + $define = 'spip_sqlite' . $sqlite_version . '_constantes'; |
|
| 88 | + $define(); |
|
| 89 | + |
|
| 90 | + $ok = false; |
|
| 91 | + if (!$db) { |
|
| 92 | + // si pas de db -> |
|
| 93 | + // base temporaire tant qu'on ne connait pas son vrai nom |
|
| 94 | + // pour tester la connexion |
|
| 95 | + $db = '_sqlite' . $sqlite_version . '_install'; |
|
| 96 | + $tmp = _DIR_DB . $db . '.sqlite'; |
|
| 97 | + $ok = $link = new \PDO("sqlite:$tmp"); |
|
| 98 | + } else { |
|
| 99 | + // Ouvrir (eventuellement creer la base) |
|
| 100 | + $ok = $link = new \PDO("sqlite:$f"); |
|
| 101 | + } |
|
| 102 | + |
|
| 103 | + if (!$ok) { |
|
| 104 | + $e = _sqlite_last_error_from_link($link); |
|
| 105 | + spip_log("Impossible d'ouvrir la base SQLite($sqlite_version) $f : $e", 'sqlite.' . _LOG_HS); |
|
| 106 | + |
|
| 107 | + return false; |
|
| 108 | + } |
|
| 109 | + |
|
| 110 | + if ($link) { |
|
| 111 | + $last_connect = [ |
|
| 112 | + 'addr' => $addr, |
|
| 113 | + 'port' => $port, |
|
| 114 | + 'login' => $login, |
|
| 115 | + 'pass' => $pass, |
|
| 116 | + 'db' => $db, |
|
| 117 | + 'prefixe' => $prefixe, |
|
| 118 | + ]; |
|
| 119 | + // etre sur qu'on definit bien les fonctions a chaque nouvelle connexion |
|
| 120 | + include_spip('req/sqlite_fonctions'); |
|
| 121 | + _sqlite_init_functions($link); |
|
| 122 | + } |
|
| 123 | + |
|
| 124 | + return [ |
|
| 125 | + 'db' => $db, |
|
| 126 | + 'prefixe' => $prefixe ? $prefixe : $db, |
|
| 127 | + 'link' => $link, |
|
| 128 | + 'total_requetes' => 0, |
|
| 129 | + ]; |
|
| 130 | 130 | } |
| 131 | 131 | |
| 132 | 132 | |
@@ -145,14 +145,14 @@ discard block |
||
| 145 | 145 | * Resultat de la requete |
| 146 | 146 | */ |
| 147 | 147 | function spip_sqlite_query($query, $serveur = '', $requeter = true) { |
| 148 | - #spip_log("spip_sqlite_query() > $query",'sqlite.'._LOG_DEBUG); |
|
| 149 | - #_sqlite_init(); // fait la premiere fois dans spip_sqlite |
|
| 150 | - $query = spip_sqlite::traduire_requete($query, $serveur); |
|
| 151 | - if (!$requeter) { |
|
| 152 | - return $query; |
|
| 153 | - } |
|
| 148 | + #spip_log("spip_sqlite_query() > $query",'sqlite.'._LOG_DEBUG); |
|
| 149 | + #_sqlite_init(); // fait la premiere fois dans spip_sqlite |
|
| 150 | + $query = spip_sqlite::traduire_requete($query, $serveur); |
|
| 151 | + if (!$requeter) { |
|
| 152 | + return $query; |
|
| 153 | + } |
|
| 154 | 154 | |
| 155 | - return spip_sqlite::executer_requete($query, $serveur); |
|
| 155 | + return spip_sqlite::executer_requete($query, $serveur); |
|
| 156 | 156 | } |
| 157 | 157 | |
| 158 | 158 | |
@@ -169,11 +169,11 @@ discard block |
||
| 169 | 169 | */ |
| 170 | 170 | function spip_sqlite_alter($query, $serveur = '', $requeter = true) { |
| 171 | 171 | |
| 172 | - $query = spip_sqlite_query("ALTER $query", $serveur, false); |
|
| 173 | - // traduire la requete pour recuperer les bons noms de table |
|
| 174 | - $query = spip_sqlite::traduire_requete($query, $serveur); |
|
| 172 | + $query = spip_sqlite_query("ALTER $query", $serveur, false); |
|
| 173 | + // traduire la requete pour recuperer les bons noms de table |
|
| 174 | + $query = spip_sqlite::traduire_requete($query, $serveur); |
|
| 175 | 175 | |
| 176 | - /* |
|
| 176 | + /* |
|
| 177 | 177 | * la il faut faire les transformations |
| 178 | 178 | * si ALTER TABLE x (DROP|CHANGE) y |
| 179 | 179 | * |
@@ -182,251 +182,251 @@ discard block |
||
| 182 | 182 | * 3) faire chaque requete independemment |
| 183 | 183 | */ |
| 184 | 184 | |
| 185 | - // 1 |
|
| 186 | - if (preg_match('/\s*(ALTER(\s*IGNORE)?\s*TABLE\s*([^\s]*))\s*(.*)?/is', $query, $regs)) { |
|
| 187 | - $debut = $regs[1]; |
|
| 188 | - $table = $regs[3]; |
|
| 189 | - $suite = $regs[4]; |
|
| 190 | - } else { |
|
| 191 | - spip_log("SQLite : Probleme de ALTER TABLE mal forme dans $query", 'sqlite.' . _LOG_ERREUR); |
|
| 192 | - |
|
| 193 | - return false; |
|
| 194 | - } |
|
| 195 | - |
|
| 196 | - // 2 |
|
| 197 | - // il faudrait une regexp pour eviter de spliter ADD PRIMARY KEY (colA, colB) |
|
| 198 | - // tout en cassant "ADD PRIMARY KEY (colA, colB), ADD INDEX (chose)"... en deux |
|
| 199 | - // ou revoir l'api de sql_alter en creant un |
|
| 200 | - // sql_alter_table($table,array($actions)); |
|
| 201 | - $todo = explode(',', $suite); |
|
| 202 | - |
|
| 203 | - // on remet les morceaux dechires ensembles... que c'est laid ! |
|
| 204 | - $todo2 = []; |
|
| 205 | - $i = 0; |
|
| 206 | - $ouverte = false; |
|
| 207 | - while ($do = array_shift($todo)) { |
|
| 208 | - $todo2[$i] = isset($todo2[$i]) ? $todo2[$i] . ',' . $do : $do; |
|
| 209 | - $o = (false !== strpos($do, '(')); |
|
| 210 | - $f = (false !== strpos($do, ')')); |
|
| 211 | - if ($o and !$f) { |
|
| 212 | - $ouverte = true; |
|
| 213 | - } elseif ($f) { |
|
| 214 | - $ouverte = false; |
|
| 215 | - } |
|
| 216 | - if (!$ouverte) { |
|
| 217 | - $i++; |
|
| 218 | - } |
|
| 219 | - } |
|
| 220 | - |
|
| 221 | - // 3 |
|
| 222 | - $resultats = []; |
|
| 223 | - foreach ($todo2 as $do) { |
|
| 224 | - $do = trim($do); |
|
| 225 | - if ( |
|
| 226 | - !preg_match('/(DROP PRIMARY KEY|DROP KEY|DROP INDEX|DROP COLUMN|DROP' |
|
| 227 | - . '|CHANGE COLUMN|CHANGE|MODIFY|RENAME TO|RENAME' |
|
| 228 | - . '|ADD PRIMARY KEY|ADD KEY|ADD INDEX|ADD UNIQUE KEY|ADD UNIQUE' |
|
| 229 | - . '|ADD COLUMN|ADD' |
|
| 230 | - . ')\s*([^\s]*)\s*(.*)?/i', $do, $matches) |
|
| 231 | - ) { |
|
| 232 | - spip_log( |
|
| 233 | - "SQLite : Probleme de ALTER TABLE, utilisation non reconnue dans : $do \n(requete d'origine : $query)", |
|
| 234 | - 'sqlite.' . _LOG_ERREUR |
|
| 235 | - ); |
|
| 236 | - |
|
| 237 | - return false; |
|
| 238 | - } |
|
| 239 | - |
|
| 240 | - $cle = strtoupper($matches[1]); |
|
| 241 | - $colonne_origine = $matches[2]; |
|
| 242 | - $colonne_destination = ''; |
|
| 243 | - |
|
| 244 | - $def = $matches[3]; |
|
| 245 | - |
|
| 246 | - // eluder une eventuelle clause before|after|first inutilisable |
|
| 247 | - $defr = rtrim(preg_replace('/(BEFORE|AFTER|FIRST)(.*)$/is', '', $def)); |
|
| 248 | - $defo = $defr; // garder la def d'origine pour certains cas |
|
| 249 | - // remplacer les definitions venant de mysql |
|
| 250 | - $defr = _sqlite_remplacements_definitions_table($defr); |
|
| 251 | - |
|
| 252 | - // reinjecter dans le do |
|
| 253 | - $do = str_replace($def, $defr, $do); |
|
| 254 | - $def = $defr; |
|
| 255 | - |
|
| 256 | - switch ($cle) { |
|
| 257 | - // suppression d'un index |
|
| 258 | - case 'DROP KEY': |
|
| 259 | - case 'DROP INDEX': |
|
| 260 | - $nom_index = $colonne_origine; |
|
| 261 | - spip_sqlite_drop_index($nom_index, $table, $serveur); |
|
| 262 | - break; |
|
| 263 | - |
|
| 264 | - // suppression d'une pk |
|
| 265 | - case 'DROP PRIMARY KEY': |
|
| 266 | - if ( |
|
| 267 | - !_sqlite_modifier_table( |
|
| 268 | - $table, |
|
| 269 | - $colonne_origine, |
|
| 270 | - ['key' => ['PRIMARY KEY' => '']], |
|
| 271 | - $serveur |
|
| 272 | - ) |
|
| 273 | - ) { |
|
| 274 | - return false; |
|
| 275 | - } |
|
| 276 | - break; |
|
| 277 | - // suppression d'une colonne |
|
| 278 | - case 'DROP COLUMN': |
|
| 279 | - case 'DROP': |
|
| 280 | - if ( |
|
| 281 | - !_sqlite_modifier_table( |
|
| 282 | - $table, |
|
| 283 | - [$colonne_origine => ''], |
|
| 284 | - [], |
|
| 285 | - $serveur |
|
| 286 | - ) |
|
| 287 | - ) { |
|
| 288 | - return false; |
|
| 289 | - } |
|
| 290 | - break; |
|
| 291 | - |
|
| 292 | - case 'CHANGE COLUMN': |
|
| 293 | - case 'CHANGE': |
|
| 294 | - // recuperer le nom de la future colonne |
|
| 295 | - // on reprend la def d'origine car _sqlite_modifier_table va refaire la translation |
|
| 296 | - // en tenant compte de la cle primaire (ce qui est mieux) |
|
| 297 | - $def = trim($defo); |
|
| 298 | - $colonne_destination = substr($def, 0, strpos($def, ' ')); |
|
| 299 | - $def = substr($def, strlen($colonne_destination) + 1); |
|
| 300 | - |
|
| 301 | - if ( |
|
| 302 | - !_sqlite_modifier_table( |
|
| 303 | - $table, |
|
| 304 | - [$colonne_origine => $colonne_destination], |
|
| 305 | - ['field' => [$colonne_destination => $def]], |
|
| 306 | - $serveur |
|
| 307 | - ) |
|
| 308 | - ) { |
|
| 309 | - return false; |
|
| 310 | - } |
|
| 311 | - break; |
|
| 312 | - |
|
| 313 | - case 'MODIFY': |
|
| 314 | - // on reprend la def d'origine car _sqlite_modifier_table va refaire la translation |
|
| 315 | - // en tenant compte de la cle primaire (ce qui est mieux) |
|
| 316 | - if ( |
|
| 317 | - !_sqlite_modifier_table( |
|
| 318 | - $table, |
|
| 319 | - $colonne_origine, |
|
| 320 | - ['field' => [$colonne_origine => $defo]], |
|
| 321 | - $serveur |
|
| 322 | - ) |
|
| 323 | - ) { |
|
| 324 | - return false; |
|
| 325 | - } |
|
| 326 | - break; |
|
| 327 | - |
|
| 328 | - // pas geres en sqlite2 |
|
| 329 | - case 'RENAME': |
|
| 330 | - $do = 'RENAME TO' . substr($do, 6); |
|
| 331 | - case 'RENAME TO': |
|
| 332 | - if (!spip_sqlite::executer_requete("$debut $do", $serveur)) { |
|
| 333 | - spip_log("SQLite : Erreur ALTER TABLE / RENAME : $query", 'sqlite.' . _LOG_ERREUR); |
|
| 334 | - |
|
| 335 | - return false; |
|
| 336 | - } |
|
| 337 | - break; |
|
| 338 | - |
|
| 339 | - // ajout d'une pk |
|
| 340 | - case 'ADD PRIMARY KEY': |
|
| 341 | - $pk = trim(substr($do, 16)); |
|
| 342 | - $pk = ($pk[0] == '(') ? substr($pk, 1, -1) : $pk; |
|
| 343 | - if ( |
|
| 344 | - !_sqlite_modifier_table( |
|
| 345 | - $table, |
|
| 346 | - $colonne_origine, |
|
| 347 | - ['key' => ['PRIMARY KEY' => $pk]], |
|
| 348 | - $serveur |
|
| 349 | - ) |
|
| 350 | - ) { |
|
| 351 | - return false; |
|
| 352 | - } |
|
| 353 | - break; |
|
| 354 | - // ajout d'un index |
|
| 355 | - case 'ADD UNIQUE KEY': |
|
| 356 | - case 'ADD UNIQUE': |
|
| 357 | - $unique = true; |
|
| 358 | - case 'ADD INDEX': |
|
| 359 | - case 'ADD KEY': |
|
| 360 | - if (!isset($unique)) { |
|
| 361 | - $unique = false; |
|
| 362 | - } |
|
| 363 | - // peut etre "(colonne)" ou "nom_index (colonnes)" |
|
| 364 | - // bug potentiel si qqn met "(colonne, colonne)" |
|
| 365 | - // |
|
| 366 | - // nom_index (colonnes) |
|
| 367 | - if ($def) { |
|
| 368 | - $colonnes = substr($def, 1, -1); |
|
| 369 | - $nom_index = $colonne_origine; |
|
| 370 | - } else { |
|
| 371 | - // (colonne) |
|
| 372 | - if ($colonne_origine[0] == '(') { |
|
| 373 | - $colonnes = substr($colonne_origine, 1, -1); |
|
| 374 | - if (false !== strpos(',', $colonnes)) { |
|
| 375 | - spip_log('SQLite : Erreur, impossible de creer un index sur plusieurs colonnes' |
|
| 376 | - . " sans qu'il ait de nom ($table, ($colonnes))", 'sqlite.' . _LOG_ERREUR); |
|
| 377 | - break; |
|
| 378 | - } else { |
|
| 379 | - $nom_index = $colonnes; |
|
| 380 | - } |
|
| 381 | - } // nom_index |
|
| 382 | - else { |
|
| 383 | - $nom_index = $colonnes = $colonne_origine; |
|
| 384 | - } |
|
| 385 | - } |
|
| 386 | - spip_sqlite_create_index($nom_index, $table, $colonnes, $unique, $serveur); |
|
| 387 | - break; |
|
| 388 | - |
|
| 389 | - // pas geres en sqlite2 |
|
| 390 | - case 'ADD COLUMN': |
|
| 391 | - $do = 'ADD' . substr($do, 10); |
|
| 392 | - case 'ADD': |
|
| 393 | - default: |
|
| 394 | - if (!preg_match(',primary\s+key,i', $do)) { |
|
| 395 | - if (!spip_sqlite::executer_requete("$debut $do", $serveur)) { |
|
| 396 | - spip_log("SQLite : Erreur ALTER TABLE / ADD : $query", 'sqlite.' . _LOG_ERREUR); |
|
| 397 | - |
|
| 398 | - return false; |
|
| 399 | - } |
|
| 400 | - break; |
|
| 401 | - } |
|
| 402 | - // ou si la colonne est aussi primary key |
|
| 403 | - // cas du add id_truc int primary key |
|
| 404 | - // ajout d'une colonne qui passe en primary key directe |
|
| 405 | - else { |
|
| 406 | - $def = trim(substr($do, 3)); |
|
| 407 | - $colonne_ajoutee = substr($def, 0, strpos($def, ' ')); |
|
| 408 | - $def = substr($def, strlen($colonne_ajoutee) + 1); |
|
| 409 | - $opts = []; |
|
| 410 | - if (preg_match(',primary\s+key,i', $def)) { |
|
| 411 | - $opts['key'] = ['PRIMARY KEY' => $colonne_ajoutee]; |
|
| 412 | - $def = preg_replace(',primary\s+key,i', '', $def); |
|
| 413 | - } |
|
| 414 | - $opts['field'] = [$colonne_ajoutee => $def]; |
|
| 415 | - if (!_sqlite_modifier_table($table, [$colonne_ajoutee], $opts, $serveur)) { |
|
| 416 | - spip_log("SQLite : Erreur ALTER TABLE / ADD : $query", 'sqlite.' . _LOG_ERREUR); |
|
| 417 | - |
|
| 418 | - return false; |
|
| 419 | - } |
|
| 420 | - } |
|
| 421 | - break; |
|
| 422 | - } |
|
| 423 | - // tout est bon, ouf ! |
|
| 424 | - spip_log("SQLite ($serveur) : Changements OK : $debut $do", 'sqlite.' . _LOG_INFO); |
|
| 425 | - } |
|
| 426 | - |
|
| 427 | - spip_log("SQLite ($serveur) : fin ALTER TABLE OK !", 'sqlite.' . _LOG_INFO); |
|
| 428 | - |
|
| 429 | - return true; |
|
| 185 | + // 1 |
|
| 186 | + if (preg_match('/\s*(ALTER(\s*IGNORE)?\s*TABLE\s*([^\s]*))\s*(.*)?/is', $query, $regs)) { |
|
| 187 | + $debut = $regs[1]; |
|
| 188 | + $table = $regs[3]; |
|
| 189 | + $suite = $regs[4]; |
|
| 190 | + } else { |
|
| 191 | + spip_log("SQLite : Probleme de ALTER TABLE mal forme dans $query", 'sqlite.' . _LOG_ERREUR); |
|
| 192 | + |
|
| 193 | + return false; |
|
| 194 | + } |
|
| 195 | + |
|
| 196 | + // 2 |
|
| 197 | + // il faudrait une regexp pour eviter de spliter ADD PRIMARY KEY (colA, colB) |
|
| 198 | + // tout en cassant "ADD PRIMARY KEY (colA, colB), ADD INDEX (chose)"... en deux |
|
| 199 | + // ou revoir l'api de sql_alter en creant un |
|
| 200 | + // sql_alter_table($table,array($actions)); |
|
| 201 | + $todo = explode(',', $suite); |
|
| 202 | + |
|
| 203 | + // on remet les morceaux dechires ensembles... que c'est laid ! |
|
| 204 | + $todo2 = []; |
|
| 205 | + $i = 0; |
|
| 206 | + $ouverte = false; |
|
| 207 | + while ($do = array_shift($todo)) { |
|
| 208 | + $todo2[$i] = isset($todo2[$i]) ? $todo2[$i] . ',' . $do : $do; |
|
| 209 | + $o = (false !== strpos($do, '(')); |
|
| 210 | + $f = (false !== strpos($do, ')')); |
|
| 211 | + if ($o and !$f) { |
|
| 212 | + $ouverte = true; |
|
| 213 | + } elseif ($f) { |
|
| 214 | + $ouverte = false; |
|
| 215 | + } |
|
| 216 | + if (!$ouverte) { |
|
| 217 | + $i++; |
|
| 218 | + } |
|
| 219 | + } |
|
| 220 | + |
|
| 221 | + // 3 |
|
| 222 | + $resultats = []; |
|
| 223 | + foreach ($todo2 as $do) { |
|
| 224 | + $do = trim($do); |
|
| 225 | + if ( |
|
| 226 | + !preg_match('/(DROP PRIMARY KEY|DROP KEY|DROP INDEX|DROP COLUMN|DROP' |
|
| 227 | + . '|CHANGE COLUMN|CHANGE|MODIFY|RENAME TO|RENAME' |
|
| 228 | + . '|ADD PRIMARY KEY|ADD KEY|ADD INDEX|ADD UNIQUE KEY|ADD UNIQUE' |
|
| 229 | + . '|ADD COLUMN|ADD' |
|
| 230 | + . ')\s*([^\s]*)\s*(.*)?/i', $do, $matches) |
|
| 231 | + ) { |
|
| 232 | + spip_log( |
|
| 233 | + "SQLite : Probleme de ALTER TABLE, utilisation non reconnue dans : $do \n(requete d'origine : $query)", |
|
| 234 | + 'sqlite.' . _LOG_ERREUR |
|
| 235 | + ); |
|
| 236 | + |
|
| 237 | + return false; |
|
| 238 | + } |
|
| 239 | + |
|
| 240 | + $cle = strtoupper($matches[1]); |
|
| 241 | + $colonne_origine = $matches[2]; |
|
| 242 | + $colonne_destination = ''; |
|
| 243 | + |
|
| 244 | + $def = $matches[3]; |
|
| 245 | + |
|
| 246 | + // eluder une eventuelle clause before|after|first inutilisable |
|
| 247 | + $defr = rtrim(preg_replace('/(BEFORE|AFTER|FIRST)(.*)$/is', '', $def)); |
|
| 248 | + $defo = $defr; // garder la def d'origine pour certains cas |
|
| 249 | + // remplacer les definitions venant de mysql |
|
| 250 | + $defr = _sqlite_remplacements_definitions_table($defr); |
|
| 251 | + |
|
| 252 | + // reinjecter dans le do |
|
| 253 | + $do = str_replace($def, $defr, $do); |
|
| 254 | + $def = $defr; |
|
| 255 | + |
|
| 256 | + switch ($cle) { |
|
| 257 | + // suppression d'un index |
|
| 258 | + case 'DROP KEY': |
|
| 259 | + case 'DROP INDEX': |
|
| 260 | + $nom_index = $colonne_origine; |
|
| 261 | + spip_sqlite_drop_index($nom_index, $table, $serveur); |
|
| 262 | + break; |
|
| 263 | + |
|
| 264 | + // suppression d'une pk |
|
| 265 | + case 'DROP PRIMARY KEY': |
|
| 266 | + if ( |
|
| 267 | + !_sqlite_modifier_table( |
|
| 268 | + $table, |
|
| 269 | + $colonne_origine, |
|
| 270 | + ['key' => ['PRIMARY KEY' => '']], |
|
| 271 | + $serveur |
|
| 272 | + ) |
|
| 273 | + ) { |
|
| 274 | + return false; |
|
| 275 | + } |
|
| 276 | + break; |
|
| 277 | + // suppression d'une colonne |
|
| 278 | + case 'DROP COLUMN': |
|
| 279 | + case 'DROP': |
|
| 280 | + if ( |
|
| 281 | + !_sqlite_modifier_table( |
|
| 282 | + $table, |
|
| 283 | + [$colonne_origine => ''], |
|
| 284 | + [], |
|
| 285 | + $serveur |
|
| 286 | + ) |
|
| 287 | + ) { |
|
| 288 | + return false; |
|
| 289 | + } |
|
| 290 | + break; |
|
| 291 | + |
|
| 292 | + case 'CHANGE COLUMN': |
|
| 293 | + case 'CHANGE': |
|
| 294 | + // recuperer le nom de la future colonne |
|
| 295 | + // on reprend la def d'origine car _sqlite_modifier_table va refaire la translation |
|
| 296 | + // en tenant compte de la cle primaire (ce qui est mieux) |
|
| 297 | + $def = trim($defo); |
|
| 298 | + $colonne_destination = substr($def, 0, strpos($def, ' ')); |
|
| 299 | + $def = substr($def, strlen($colonne_destination) + 1); |
|
| 300 | + |
|
| 301 | + if ( |
|
| 302 | + !_sqlite_modifier_table( |
|
| 303 | + $table, |
|
| 304 | + [$colonne_origine => $colonne_destination], |
|
| 305 | + ['field' => [$colonne_destination => $def]], |
|
| 306 | + $serveur |
|
| 307 | + ) |
|
| 308 | + ) { |
|
| 309 | + return false; |
|
| 310 | + } |
|
| 311 | + break; |
|
| 312 | + |
|
| 313 | + case 'MODIFY': |
|
| 314 | + // on reprend la def d'origine car _sqlite_modifier_table va refaire la translation |
|
| 315 | + // en tenant compte de la cle primaire (ce qui est mieux) |
|
| 316 | + if ( |
|
| 317 | + !_sqlite_modifier_table( |
|
| 318 | + $table, |
|
| 319 | + $colonne_origine, |
|
| 320 | + ['field' => [$colonne_origine => $defo]], |
|
| 321 | + $serveur |
|
| 322 | + ) |
|
| 323 | + ) { |
|
| 324 | + return false; |
|
| 325 | + } |
|
| 326 | + break; |
|
| 327 | + |
|
| 328 | + // pas geres en sqlite2 |
|
| 329 | + case 'RENAME': |
|
| 330 | + $do = 'RENAME TO' . substr($do, 6); |
|
| 331 | + case 'RENAME TO': |
|
| 332 | + if (!spip_sqlite::executer_requete("$debut $do", $serveur)) { |
|
| 333 | + spip_log("SQLite : Erreur ALTER TABLE / RENAME : $query", 'sqlite.' . _LOG_ERREUR); |
|
| 334 | + |
|
| 335 | + return false; |
|
| 336 | + } |
|
| 337 | + break; |
|
| 338 | + |
|
| 339 | + // ajout d'une pk |
|
| 340 | + case 'ADD PRIMARY KEY': |
|
| 341 | + $pk = trim(substr($do, 16)); |
|
| 342 | + $pk = ($pk[0] == '(') ? substr($pk, 1, -1) : $pk; |
|
| 343 | + if ( |
|
| 344 | + !_sqlite_modifier_table( |
|
| 345 | + $table, |
|
| 346 | + $colonne_origine, |
|
| 347 | + ['key' => ['PRIMARY KEY' => $pk]], |
|
| 348 | + $serveur |
|
| 349 | + ) |
|
| 350 | + ) { |
|
| 351 | + return false; |
|
| 352 | + } |
|
| 353 | + break; |
|
| 354 | + // ajout d'un index |
|
| 355 | + case 'ADD UNIQUE KEY': |
|
| 356 | + case 'ADD UNIQUE': |
|
| 357 | + $unique = true; |
|
| 358 | + case 'ADD INDEX': |
|
| 359 | + case 'ADD KEY': |
|
| 360 | + if (!isset($unique)) { |
|
| 361 | + $unique = false; |
|
| 362 | + } |
|
| 363 | + // peut etre "(colonne)" ou "nom_index (colonnes)" |
|
| 364 | + // bug potentiel si qqn met "(colonne, colonne)" |
|
| 365 | + // |
|
| 366 | + // nom_index (colonnes) |
|
| 367 | + if ($def) { |
|
| 368 | + $colonnes = substr($def, 1, -1); |
|
| 369 | + $nom_index = $colonne_origine; |
|
| 370 | + } else { |
|
| 371 | + // (colonne) |
|
| 372 | + if ($colonne_origine[0] == '(') { |
|
| 373 | + $colonnes = substr($colonne_origine, 1, -1); |
|
| 374 | + if (false !== strpos(',', $colonnes)) { |
|
| 375 | + spip_log('SQLite : Erreur, impossible de creer un index sur plusieurs colonnes' |
|
| 376 | + . " sans qu'il ait de nom ($table, ($colonnes))", 'sqlite.' . _LOG_ERREUR); |
|
| 377 | + break; |
|
| 378 | + } else { |
|
| 379 | + $nom_index = $colonnes; |
|
| 380 | + } |
|
| 381 | + } // nom_index |
|
| 382 | + else { |
|
| 383 | + $nom_index = $colonnes = $colonne_origine; |
|
| 384 | + } |
|
| 385 | + } |
|
| 386 | + spip_sqlite_create_index($nom_index, $table, $colonnes, $unique, $serveur); |
|
| 387 | + break; |
|
| 388 | + |
|
| 389 | + // pas geres en sqlite2 |
|
| 390 | + case 'ADD COLUMN': |
|
| 391 | + $do = 'ADD' . substr($do, 10); |
|
| 392 | + case 'ADD': |
|
| 393 | + default: |
|
| 394 | + if (!preg_match(',primary\s+key,i', $do)) { |
|
| 395 | + if (!spip_sqlite::executer_requete("$debut $do", $serveur)) { |
|
| 396 | + spip_log("SQLite : Erreur ALTER TABLE / ADD : $query", 'sqlite.' . _LOG_ERREUR); |
|
| 397 | + |
|
| 398 | + return false; |
|
| 399 | + } |
|
| 400 | + break; |
|
| 401 | + } |
|
| 402 | + // ou si la colonne est aussi primary key |
|
| 403 | + // cas du add id_truc int primary key |
|
| 404 | + // ajout d'une colonne qui passe en primary key directe |
|
| 405 | + else { |
|
| 406 | + $def = trim(substr($do, 3)); |
|
| 407 | + $colonne_ajoutee = substr($def, 0, strpos($def, ' ')); |
|
| 408 | + $def = substr($def, strlen($colonne_ajoutee) + 1); |
|
| 409 | + $opts = []; |
|
| 410 | + if (preg_match(',primary\s+key,i', $def)) { |
|
| 411 | + $opts['key'] = ['PRIMARY KEY' => $colonne_ajoutee]; |
|
| 412 | + $def = preg_replace(',primary\s+key,i', '', $def); |
|
| 413 | + } |
|
| 414 | + $opts['field'] = [$colonne_ajoutee => $def]; |
|
| 415 | + if (!_sqlite_modifier_table($table, [$colonne_ajoutee], $opts, $serveur)) { |
|
| 416 | + spip_log("SQLite : Erreur ALTER TABLE / ADD : $query", 'sqlite.' . _LOG_ERREUR); |
|
| 417 | + |
|
| 418 | + return false; |
|
| 419 | + } |
|
| 420 | + } |
|
| 421 | + break; |
|
| 422 | + } |
|
| 423 | + // tout est bon, ouf ! |
|
| 424 | + spip_log("SQLite ($serveur) : Changements OK : $debut $do", 'sqlite.' . _LOG_INFO); |
|
| 425 | + } |
|
| 426 | + |
|
| 427 | + spip_log("SQLite ($serveur) : fin ALTER TABLE OK !", 'sqlite.' . _LOG_INFO); |
|
| 428 | + |
|
| 429 | + return true; |
|
| 430 | 430 | } |
| 431 | 431 | |
| 432 | 432 | |
@@ -449,38 +449,38 @@ discard block |
||
| 449 | 449 | * - true si la requête réussie, false sinon. |
| 450 | 450 | */ |
| 451 | 451 | function spip_sqlite_create( |
| 452 | - $nom, |
|
| 453 | - $champs, |
|
| 454 | - $cles, |
|
| 455 | - $autoinc = false, |
|
| 456 | - $temporary = false, |
|
| 457 | - $serveur = '', |
|
| 458 | - $requeter = true |
|
| 452 | + $nom, |
|
| 453 | + $champs, |
|
| 454 | + $cles, |
|
| 455 | + $autoinc = false, |
|
| 456 | + $temporary = false, |
|
| 457 | + $serveur = '', |
|
| 458 | + $requeter = true |
|
| 459 | 459 | ) { |
| 460 | - $query = _sqlite_requete_create($nom, $champs, $cles, $autoinc, $temporary, $ifnotexists = true, $serveur, $requeter); |
|
| 461 | - if (!$query) { |
|
| 462 | - return false; |
|
| 463 | - } |
|
| 464 | - $res = spip_sqlite_query($query, $serveur, $requeter); |
|
| 465 | - |
|
| 466 | - // SQLite ne cree pas les KEY sur les requetes CREATE TABLE |
|
| 467 | - // il faut donc les faire creer ensuite |
|
| 468 | - if (!$requeter) { |
|
| 469 | - return $res; |
|
| 470 | - } |
|
| 471 | - |
|
| 472 | - $ok = $res ? true : false; |
|
| 473 | - if ($ok) { |
|
| 474 | - foreach ($cles as $k => $v) { |
|
| 475 | - if (preg_match(',^(UNIQUE KEY|KEY|UNIQUE)\s,i', $k, $m)) { |
|
| 476 | - $index = trim(substr($k, strlen($m[1]))); |
|
| 477 | - $unique = (strlen($m[1]) > 3); |
|
| 478 | - $ok &= spip_sqlite_create_index($index, $nom, $v, $unique, $serveur); |
|
| 479 | - } |
|
| 480 | - } |
|
| 481 | - } |
|
| 482 | - |
|
| 483 | - return $ok ? true : false; |
|
| 460 | + $query = _sqlite_requete_create($nom, $champs, $cles, $autoinc, $temporary, $ifnotexists = true, $serveur, $requeter); |
|
| 461 | + if (!$query) { |
|
| 462 | + return false; |
|
| 463 | + } |
|
| 464 | + $res = spip_sqlite_query($query, $serveur, $requeter); |
|
| 465 | + |
|
| 466 | + // SQLite ne cree pas les KEY sur les requetes CREATE TABLE |
|
| 467 | + // il faut donc les faire creer ensuite |
|
| 468 | + if (!$requeter) { |
|
| 469 | + return $res; |
|
| 470 | + } |
|
| 471 | + |
|
| 472 | + $ok = $res ? true : false; |
|
| 473 | + if ($ok) { |
|
| 474 | + foreach ($cles as $k => $v) { |
|
| 475 | + if (preg_match(',^(UNIQUE KEY|KEY|UNIQUE)\s,i', $k, $m)) { |
|
| 476 | + $index = trim(substr($k, strlen($m[1]))); |
|
| 477 | + $unique = (strlen($m[1]) > 3); |
|
| 478 | + $ok &= spip_sqlite_create_index($index, $nom, $v, $unique, $serveur); |
|
| 479 | + } |
|
| 480 | + } |
|
| 481 | + } |
|
| 482 | + |
|
| 483 | + return $ok ? true : false; |
|
| 484 | 484 | } |
| 485 | 485 | |
| 486 | 486 | /** |
@@ -493,21 +493,21 @@ discard block |
||
| 493 | 493 | * @return bool true si la base est créee. |
| 494 | 494 | **/ |
| 495 | 495 | function spip_sqlite_create_base($nom, $serveur = '', $option = true) { |
| 496 | - $f = $nom . '.sqlite'; |
|
| 497 | - if (strpos($nom, '/') === false) { |
|
| 498 | - $f = _DIR_DB . $f; |
|
| 499 | - } |
|
| 496 | + $f = $nom . '.sqlite'; |
|
| 497 | + if (strpos($nom, '/') === false) { |
|
| 498 | + $f = _DIR_DB . $f; |
|
| 499 | + } |
|
| 500 | 500 | |
| 501 | - $ok = new \PDO("sqlite:$f"); |
|
| 501 | + $ok = new \PDO("sqlite:$f"); |
|
| 502 | 502 | |
| 503 | - if ($ok) { |
|
| 504 | - unset($ok); |
|
| 503 | + if ($ok) { |
|
| 504 | + unset($ok); |
|
| 505 | 505 | |
| 506 | - return true; |
|
| 507 | - } |
|
| 508 | - unset($ok); |
|
| 506 | + return true; |
|
| 507 | + } |
|
| 508 | + unset($ok); |
|
| 509 | 509 | |
| 510 | - return false; |
|
| 510 | + return false; |
|
| 511 | 511 | } |
| 512 | 512 | |
| 513 | 513 | |
@@ -528,22 +528,22 @@ discard block |
||
| 528 | 528 | * - string texte de la requête si $requeter vaut false |
| 529 | 529 | */ |
| 530 | 530 | function spip_sqlite_create_view($nom, $query_select, $serveur = '', $requeter = true) { |
| 531 | - if (!$query_select) { |
|
| 532 | - return false; |
|
| 533 | - } |
|
| 534 | - // vue deja presente |
|
| 535 | - if (sql_showtable($nom, false, $serveur)) { |
|
| 536 | - spip_log( |
|
| 537 | - "Echec creation d'une vue sql ($nom) car celle-ci existe deja (serveur:$serveur)", |
|
| 538 | - 'sqlite.' . _LOG_ERREUR |
|
| 539 | - ); |
|
| 531 | + if (!$query_select) { |
|
| 532 | + return false; |
|
| 533 | + } |
|
| 534 | + // vue deja presente |
|
| 535 | + if (sql_showtable($nom, false, $serveur)) { |
|
| 536 | + spip_log( |
|
| 537 | + "Echec creation d'une vue sql ($nom) car celle-ci existe deja (serveur:$serveur)", |
|
| 538 | + 'sqlite.' . _LOG_ERREUR |
|
| 539 | + ); |
|
| 540 | 540 | |
| 541 | - return false; |
|
| 542 | - } |
|
| 541 | + return false; |
|
| 542 | + } |
|
| 543 | 543 | |
| 544 | - $query = "CREATE VIEW $nom AS " . $query_select; |
|
| 544 | + $query = "CREATE VIEW $nom AS " . $query_select; |
|
| 545 | 545 | |
| 546 | - return spip_sqlite_query($query, $serveur, $requeter); |
|
| 546 | + return spip_sqlite_query($query, $serveur, $requeter); |
|
| 547 | 547 | } |
| 548 | 548 | |
| 549 | 549 | /** |
@@ -565,54 +565,54 @@ discard block |
||
| 565 | 565 | * string : requête, false si erreur, true sinon. |
| 566 | 566 | */ |
| 567 | 567 | function spip_sqlite_create_index($nom, $table, $champs, $unique = '', $serveur = '', $requeter = true) { |
| 568 | - if (!($nom or $table or $champs)) { |
|
| 569 | - spip_log( |
|
| 570 | - "Champ manquant pour creer un index sqlite ($nom, $table, (" . join(',', $champs) . '))', |
|
| 571 | - 'sqlite.' . _LOG_ERREUR |
|
| 572 | - ); |
|
| 573 | - |
|
| 574 | - return false; |
|
| 575 | - } |
|
| 576 | - |
|
| 577 | - // SQLite ne differentie pas noms des index en fonction des tables |
|
| 578 | - // il faut donc creer des noms uniques d'index pour une base sqlite |
|
| 579 | - $nom = $table . '_' . $nom; |
|
| 580 | - // enlever d'eventuelles parentheses deja presentes sur champs |
|
| 581 | - if (!is_array($champs)) { |
|
| 582 | - if ($champs[0] == '(') { |
|
| 583 | - $champs = substr($champs, 1, -1); |
|
| 584 | - } |
|
| 585 | - $champs = [$champs]; |
|
| 586 | - // supprimer l'info de longueur d'index mysql en fin de champ |
|
| 587 | - $champs = preg_replace(',\(\d+\)$,', '', $champs); |
|
| 588 | - } |
|
| 589 | - |
|
| 590 | - $ifnotexists = ''; |
|
| 591 | - $version = spip_sqlite_fetch(spip_sqlite_query('select sqlite_version() AS sqlite_version', $serveur), '', $serveur); |
|
| 592 | - if (!function_exists('spip_version_compare')) { |
|
| 593 | - include_spip('plugins/installer'); |
|
| 594 | - } |
|
| 595 | - |
|
| 596 | - if ($version and spip_version_compare($version['sqlite_version'], '3.3.0', '>=')) { |
|
| 597 | - $ifnotexists = ' IF NOT EXISTS'; |
|
| 598 | - } else { |
|
| 599 | - /* simuler le IF EXISTS - version 2 et sqlite < 3.3a */ |
|
| 600 | - $a = spip_sqlite_showtable($table, $serveur); |
|
| 601 | - if (isset($a['key']['KEY ' . $nom])) { |
|
| 602 | - return true; |
|
| 603 | - } |
|
| 604 | - } |
|
| 605 | - |
|
| 606 | - $query = 'CREATE ' . ($unique ? 'UNIQUE ' : '') . "INDEX$ifnotexists $nom ON $table (" . join(',', $champs) . ')'; |
|
| 607 | - $res = spip_sqlite_query($query, $serveur, $requeter); |
|
| 608 | - if (!$requeter) { |
|
| 609 | - return $res; |
|
| 610 | - } |
|
| 611 | - if ($res) { |
|
| 612 | - return true; |
|
| 613 | - } else { |
|
| 614 | - return false; |
|
| 615 | - } |
|
| 568 | + if (!($nom or $table or $champs)) { |
|
| 569 | + spip_log( |
|
| 570 | + "Champ manquant pour creer un index sqlite ($nom, $table, (" . join(',', $champs) . '))', |
|
| 571 | + 'sqlite.' . _LOG_ERREUR |
|
| 572 | + ); |
|
| 573 | + |
|
| 574 | + return false; |
|
| 575 | + } |
|
| 576 | + |
|
| 577 | + // SQLite ne differentie pas noms des index en fonction des tables |
|
| 578 | + // il faut donc creer des noms uniques d'index pour une base sqlite |
|
| 579 | + $nom = $table . '_' . $nom; |
|
| 580 | + // enlever d'eventuelles parentheses deja presentes sur champs |
|
| 581 | + if (!is_array($champs)) { |
|
| 582 | + if ($champs[0] == '(') { |
|
| 583 | + $champs = substr($champs, 1, -1); |
|
| 584 | + } |
|
| 585 | + $champs = [$champs]; |
|
| 586 | + // supprimer l'info de longueur d'index mysql en fin de champ |
|
| 587 | + $champs = preg_replace(',\(\d+\)$,', '', $champs); |
|
| 588 | + } |
|
| 589 | + |
|
| 590 | + $ifnotexists = ''; |
|
| 591 | + $version = spip_sqlite_fetch(spip_sqlite_query('select sqlite_version() AS sqlite_version', $serveur), '', $serveur); |
|
| 592 | + if (!function_exists('spip_version_compare')) { |
|
| 593 | + include_spip('plugins/installer'); |
|
| 594 | + } |
|
| 595 | + |
|
| 596 | + if ($version and spip_version_compare($version['sqlite_version'], '3.3.0', '>=')) { |
|
| 597 | + $ifnotexists = ' IF NOT EXISTS'; |
|
| 598 | + } else { |
|
| 599 | + /* simuler le IF EXISTS - version 2 et sqlite < 3.3a */ |
|
| 600 | + $a = spip_sqlite_showtable($table, $serveur); |
|
| 601 | + if (isset($a['key']['KEY ' . $nom])) { |
|
| 602 | + return true; |
|
| 603 | + } |
|
| 604 | + } |
|
| 605 | + |
|
| 606 | + $query = 'CREATE ' . ($unique ? 'UNIQUE ' : '') . "INDEX$ifnotexists $nom ON $table (" . join(',', $champs) . ')'; |
|
| 607 | + $res = spip_sqlite_query($query, $serveur, $requeter); |
|
| 608 | + if (!$requeter) { |
|
| 609 | + return $res; |
|
| 610 | + } |
|
| 611 | + if ($res) { |
|
| 612 | + return true; |
|
| 613 | + } else { |
|
| 614 | + return false; |
|
| 615 | + } |
|
| 616 | 616 | } |
| 617 | 617 | |
| 618 | 618 | /** |
@@ -629,31 +629,31 @@ discard block |
||
| 629 | 629 | * @return int Nombre de lignes |
| 630 | 630 | */ |
| 631 | 631 | function spip_sqlite_count($r, $serveur = '', $requeter = true) { |
| 632 | - if (!$r) { |
|
| 633 | - return 0; |
|
| 634 | - } |
|
| 635 | - |
|
| 636 | - // select ou autre (insert, update,...) ? |
|
| 637 | - // (link,requete) a compter |
|
| 638 | - if (is_array($r->spipSqliteRowCount)) { |
|
| 639 | - list($link, $query) = $r->spipSqliteRowCount; |
|
| 640 | - // amelioration possible a tester intensivement : pas de order by pour compter ! |
|
| 641 | - // $query = preg_replace(",ORDER BY .+(LIMIT\s|HAVING\s|GROUP BY\s|$),Uims","\\1",$query); |
|
| 642 | - $query = "SELECT count(*) as zzzzsqlitecount FROM ($query)"; |
|
| 643 | - $l = $link->query($query); |
|
| 644 | - $i = 0; |
|
| 645 | - if ($l and $z = $l->fetch()) { |
|
| 646 | - $i = $z['zzzzsqlitecount']; |
|
| 647 | - } |
|
| 648 | - $r->spipSqliteRowCount = $i; |
|
| 649 | - } |
|
| 650 | - if (isset($r->spipSqliteRowCount)) { |
|
| 651 | - // Ce compte est faux s'il y a des limit dans la requete :( |
|
| 652 | - // il retourne le nombre d'enregistrements sans le limit |
|
| 653 | - return $r->spipSqliteRowCount; |
|
| 654 | - } else { |
|
| 655 | - return $r->rowCount(); |
|
| 656 | - } |
|
| 632 | + if (!$r) { |
|
| 633 | + return 0; |
|
| 634 | + } |
|
| 635 | + |
|
| 636 | + // select ou autre (insert, update,...) ? |
|
| 637 | + // (link,requete) a compter |
|
| 638 | + if (is_array($r->spipSqliteRowCount)) { |
|
| 639 | + list($link, $query) = $r->spipSqliteRowCount; |
|
| 640 | + // amelioration possible a tester intensivement : pas de order by pour compter ! |
|
| 641 | + // $query = preg_replace(",ORDER BY .+(LIMIT\s|HAVING\s|GROUP BY\s|$),Uims","\\1",$query); |
|
| 642 | + $query = "SELECT count(*) as zzzzsqlitecount FROM ($query)"; |
|
| 643 | + $l = $link->query($query); |
|
| 644 | + $i = 0; |
|
| 645 | + if ($l and $z = $l->fetch()) { |
|
| 646 | + $i = $z['zzzzsqlitecount']; |
|
| 647 | + } |
|
| 648 | + $r->spipSqliteRowCount = $i; |
|
| 649 | + } |
|
| 650 | + if (isset($r->spipSqliteRowCount)) { |
|
| 651 | + // Ce compte est faux s'il y a des limit dans la requete :( |
|
| 652 | + // il retourne le nombre d'enregistrements sans le limit |
|
| 653 | + return $r->spipSqliteRowCount; |
|
| 654 | + } else { |
|
| 655 | + return $r->rowCount(); |
|
| 656 | + } |
|
| 657 | 657 | } |
| 658 | 658 | |
| 659 | 659 | |
@@ -672,30 +672,30 @@ discard block |
||
| 672 | 672 | * - false si la requête a échouée |
| 673 | 673 | **/ |
| 674 | 674 | function spip_sqlite_countsel( |
| 675 | - $from = [], |
|
| 676 | - $where = [], |
|
| 677 | - $groupby = '', |
|
| 678 | - $having = [], |
|
| 679 | - $serveur = '', |
|
| 680 | - $requeter = true |
|
| 675 | + $from = [], |
|
| 676 | + $where = [], |
|
| 677 | + $groupby = '', |
|
| 678 | + $having = [], |
|
| 679 | + $serveur = '', |
|
| 680 | + $requeter = true |
|
| 681 | 681 | ) { |
| 682 | - $c = !$groupby ? '*' : ('DISTINCT ' . (is_string($groupby) ? $groupby : join(',', $groupby))); |
|
| 683 | - $r = spip_sqlite_select( |
|
| 684 | - "COUNT($c)", |
|
| 685 | - $from, |
|
| 686 | - $where, |
|
| 687 | - '', |
|
| 688 | - '', |
|
| 689 | - '', |
|
| 690 | - $having, |
|
| 691 | - $serveur, |
|
| 692 | - $requeter |
|
| 693 | - ); |
|
| 694 | - if ((is_resource($r) or is_object($r)) && $requeter) { // ressource : sqlite2, object : sqlite3 |
|
| 695 | - list($r) = spip_sqlite_fetch($r, SPIP_SQLITE3_NUM, $serveur); |
|
| 696 | - } |
|
| 697 | - |
|
| 698 | - return $r; |
|
| 682 | + $c = !$groupby ? '*' : ('DISTINCT ' . (is_string($groupby) ? $groupby : join(',', $groupby))); |
|
| 683 | + $r = spip_sqlite_select( |
|
| 684 | + "COUNT($c)", |
|
| 685 | + $from, |
|
| 686 | + $where, |
|
| 687 | + '', |
|
| 688 | + '', |
|
| 689 | + '', |
|
| 690 | + $having, |
|
| 691 | + $serveur, |
|
| 692 | + $requeter |
|
| 693 | + ); |
|
| 694 | + if ((is_resource($r) or is_object($r)) && $requeter) { // ressource : sqlite2, object : sqlite3 |
|
| 695 | + list($r) = spip_sqlite_fetch($r, SPIP_SQLITE3_NUM, $serveur); |
|
| 696 | + } |
|
| 697 | + |
|
| 698 | + return $r; |
|
| 699 | 699 | } |
| 700 | 700 | |
| 701 | 701 | |
@@ -712,24 +712,24 @@ discard block |
||
| 712 | 712 | * - False en cas d'erreur. |
| 713 | 713 | **/ |
| 714 | 714 | function spip_sqlite_delete($table, $where = '', $serveur = '', $requeter = true) { |
| 715 | - $res = spip_sqlite_query( |
|
| 716 | - _sqlite_calculer_expression('DELETE FROM', $table, ',') |
|
| 717 | - . _sqlite_calculer_expression('WHERE', $where), |
|
| 718 | - $serveur, |
|
| 719 | - $requeter |
|
| 720 | - ); |
|
| 715 | + $res = spip_sqlite_query( |
|
| 716 | + _sqlite_calculer_expression('DELETE FROM', $table, ',') |
|
| 717 | + . _sqlite_calculer_expression('WHERE', $where), |
|
| 718 | + $serveur, |
|
| 719 | + $requeter |
|
| 720 | + ); |
|
| 721 | 721 | |
| 722 | - // renvoyer la requete inerte si demandee |
|
| 723 | - if (!$requeter) { |
|
| 724 | - return $res; |
|
| 725 | - } |
|
| 722 | + // renvoyer la requete inerte si demandee |
|
| 723 | + if (!$requeter) { |
|
| 724 | + return $res; |
|
| 725 | + } |
|
| 726 | 726 | |
| 727 | - if ($res) { |
|
| 728 | - $link = _sqlite_link($serveur); |
|
| 729 | - return $res->rowCount(); |
|
| 730 | - } else { |
|
| 731 | - return false; |
|
| 732 | - } |
|
| 727 | + if ($res) { |
|
| 728 | + $link = _sqlite_link($serveur); |
|
| 729 | + return $res->rowCount(); |
|
| 730 | + } else { |
|
| 731 | + return false; |
|
| 732 | + } |
|
| 733 | 733 | } |
| 734 | 734 | |
| 735 | 735 | |
@@ -745,15 +745,15 @@ discard block |
||
| 745 | 745 | * - true si la requête a réussie, false sinon |
| 746 | 746 | */ |
| 747 | 747 | function spip_sqlite_drop_table($table, $exist = '', $serveur = '', $requeter = true) { |
| 748 | - if ($exist) { |
|
| 749 | - $exist = ' IF EXISTS'; |
|
| 750 | - } |
|
| 748 | + if ($exist) { |
|
| 749 | + $exist = ' IF EXISTS'; |
|
| 750 | + } |
|
| 751 | 751 | |
| 752 | - if (spip_sqlite_query("DROP TABLE$exist $table", $serveur, $requeter)) { |
|
| 753 | - return true; |
|
| 754 | - } else { |
|
| 755 | - return false; |
|
| 756 | - } |
|
| 752 | + if (spip_sqlite_query("DROP TABLE$exist $table", $serveur, $requeter)) { |
|
| 753 | + return true; |
|
| 754 | + } else { |
|
| 755 | + return false; |
|
| 756 | + } |
|
| 757 | 757 | } |
| 758 | 758 | |
| 759 | 759 | |
@@ -769,11 +769,11 @@ discard block |
||
| 769 | 769 | * - true si la requête a réussie, false sinon |
| 770 | 770 | */ |
| 771 | 771 | function spip_sqlite_drop_view($view, $exist = '', $serveur = '', $requeter = true) { |
| 772 | - if ($exist) { |
|
| 773 | - $exist = ' IF EXISTS'; |
|
| 774 | - } |
|
| 772 | + if ($exist) { |
|
| 773 | + $exist = ' IF EXISTS'; |
|
| 774 | + } |
|
| 775 | 775 | |
| 776 | - return spip_sqlite_query("DROP VIEW$exist $view", $serveur, $requeter); |
|
| 776 | + return spip_sqlite_query("DROP VIEW$exist $view", $serveur, $requeter); |
|
| 777 | 777 | } |
| 778 | 778 | |
| 779 | 779 | /** |
@@ -787,20 +787,20 @@ discard block |
||
| 787 | 787 | * @return bool ou requete |
| 788 | 788 | */ |
| 789 | 789 | function spip_sqlite_drop_index($nom, $table, $serveur = '', $requeter = true) { |
| 790 | - if (!($nom or $table)) { |
|
| 791 | - spip_log("Champ manquant pour supprimer un index sqlite ($nom, $table)", 'sqlite.' . _LOG_ERREUR); |
|
| 790 | + if (!($nom or $table)) { |
|
| 791 | + spip_log("Champ manquant pour supprimer un index sqlite ($nom, $table)", 'sqlite.' . _LOG_ERREUR); |
|
| 792 | 792 | |
| 793 | - return false; |
|
| 794 | - } |
|
| 793 | + return false; |
|
| 794 | + } |
|
| 795 | 795 | |
| 796 | - // SQLite ne differentie pas noms des index en fonction des tables |
|
| 797 | - // il faut donc creer des noms uniques d'index pour une base sqlite |
|
| 798 | - $index = $table . '_' . $nom; |
|
| 799 | - $exist = ' IF EXISTS'; |
|
| 796 | + // SQLite ne differentie pas noms des index en fonction des tables |
|
| 797 | + // il faut donc creer des noms uniques d'index pour une base sqlite |
|
| 798 | + $index = $table . '_' . $nom; |
|
| 799 | + $exist = ' IF EXISTS'; |
|
| 800 | 800 | |
| 801 | - $query = "DROP INDEX$exist $index"; |
|
| 801 | + $query = "DROP INDEX$exist $index"; |
|
| 802 | 802 | |
| 803 | - return spip_sqlite_query($query, $serveur, $requeter); |
|
| 803 | + return spip_sqlite_query($query, $serveur, $requeter); |
|
| 804 | 804 | } |
| 805 | 805 | |
| 806 | 806 | /** |
@@ -816,28 +816,28 @@ discard block |
||
| 816 | 816 | * Erreur eventuelle |
| 817 | 817 | **/ |
| 818 | 818 | function spip_sqlite_error($query = '', $serveur = '') { |
| 819 | - $link = _sqlite_link($serveur); |
|
| 819 | + $link = _sqlite_link($serveur); |
|
| 820 | 820 | |
| 821 | - if ($link) { |
|
| 822 | - $errs = $link->errorInfo(); |
|
| 823 | - $s = _sqlite_last_error_from_link($link); |
|
| 824 | - } else { |
|
| 825 | - $s = ': aucune ressource sqlite (link)'; |
|
| 826 | - } |
|
| 827 | - if ($s) { |
|
| 828 | - $trace = debug_backtrace(); |
|
| 829 | - if ($trace[0]['function'] != 'spip_sqlite_error') { |
|
| 830 | - spip_log("$s - $query - " . sql_error_backtrace(), 'sqlite.' . _LOG_ERREUR); |
|
| 831 | - } |
|
| 832 | - } |
|
| 821 | + if ($link) { |
|
| 822 | + $errs = $link->errorInfo(); |
|
| 823 | + $s = _sqlite_last_error_from_link($link); |
|
| 824 | + } else { |
|
| 825 | + $s = ': aucune ressource sqlite (link)'; |
|
| 826 | + } |
|
| 827 | + if ($s) { |
|
| 828 | + $trace = debug_backtrace(); |
|
| 829 | + if ($trace[0]['function'] != 'spip_sqlite_error') { |
|
| 830 | + spip_log("$s - $query - " . sql_error_backtrace(), 'sqlite.' . _LOG_ERREUR); |
|
| 831 | + } |
|
| 832 | + } |
|
| 833 | 833 | |
| 834 | - return $s; |
|
| 834 | + return $s; |
|
| 835 | 835 | } |
| 836 | 836 | |
| 837 | 837 | function _sqlite_last_error_from_link($link) { |
| 838 | - if ($link) { |
|
| 839 | - $errs = $link->errorInfo(); |
|
| 840 | - /* |
|
| 838 | + if ($link) { |
|
| 839 | + $errs = $link->errorInfo(); |
|
| 840 | + /* |
|
| 841 | 841 | $errs[0] |
| 842 | 842 | numero SQLState ('HY000' souvent lors d'une erreur) |
| 843 | 843 | http://www.easysoft.com/developer/interfaces/odbc/sqlstate_status_return_codes.html |
@@ -847,11 +847,11 @@ discard block |
||
| 847 | 847 | $errs[2] |
| 848 | 848 | Le texte du message d'erreur |
| 849 | 849 | */ |
| 850 | - if (ltrim($errs[0], '0')) { // 00000 si pas d'erreur |
|
| 851 | - return "$errs[2]"; |
|
| 852 | - } |
|
| 853 | - } |
|
| 854 | - return ''; |
|
| 850 | + if (ltrim($errs[0], '0')) { // 00000 si pas d'erreur |
|
| 851 | + return "$errs[2]"; |
|
| 852 | + } |
|
| 853 | + } |
|
| 854 | + return ''; |
|
| 855 | 855 | } |
| 856 | 856 | |
| 857 | 857 | /** |
@@ -868,23 +868,23 @@ discard block |
||
| 868 | 868 | * 'HY000/1' : numéro de l'erreur SQLState / numéro d'erreur interne SQLite (en sqlite 3) |
| 869 | 869 | **/ |
| 870 | 870 | function spip_sqlite_errno($serveur = '') { |
| 871 | - $link = _sqlite_link($serveur); |
|
| 871 | + $link = _sqlite_link($serveur); |
|
| 872 | 872 | |
| 873 | - if ($link) { |
|
| 874 | - $t = $link->errorInfo(); |
|
| 875 | - $s = ltrim($t[0], '0'); // 00000 si pas d'erreur |
|
| 876 | - if ($s) { |
|
| 877 | - $s .= ' / ' . $t[1]; |
|
| 878 | - } // ajoute l'erreur du moteur SQLite |
|
| 879 | - } else { |
|
| 880 | - $s = ': aucune ressource sqlite (link)'; |
|
| 881 | - } |
|
| 873 | + if ($link) { |
|
| 874 | + $t = $link->errorInfo(); |
|
| 875 | + $s = ltrim($t[0], '0'); // 00000 si pas d'erreur |
|
| 876 | + if ($s) { |
|
| 877 | + $s .= ' / ' . $t[1]; |
|
| 878 | + } // ajoute l'erreur du moteur SQLite |
|
| 879 | + } else { |
|
| 880 | + $s = ': aucune ressource sqlite (link)'; |
|
| 881 | + } |
|
| 882 | 882 | |
| 883 | - if ($s) { |
|
| 884 | - spip_log("Erreur sqlite $s", 'sqlite.' . _LOG_ERREUR); |
|
| 885 | - } |
|
| 883 | + if ($s) { |
|
| 884 | + spip_log("Erreur sqlite $s", 'sqlite.' . _LOG_ERREUR); |
|
| 885 | + } |
|
| 886 | 886 | |
| 887 | - return $s ? $s : 0; |
|
| 887 | + return $s ? $s : 0; |
|
| 888 | 888 | } |
| 889 | 889 | |
| 890 | 890 | |
@@ -900,19 +900,19 @@ discard block |
||
| 900 | 900 | * - false si on a pas pu avoir d'explication |
| 901 | 901 | */ |
| 902 | 902 | function spip_sqlite_explain($query, $serveur = '', $requeter = true) { |
| 903 | - if (strpos(ltrim($query), 'SELECT') !== 0) { |
|
| 904 | - return []; |
|
| 905 | - } |
|
| 903 | + if (strpos(ltrim($query), 'SELECT') !== 0) { |
|
| 904 | + return []; |
|
| 905 | + } |
|
| 906 | 906 | |
| 907 | - $query = spip_sqlite::traduire_requete($query, $serveur); |
|
| 908 | - $query = 'EXPLAIN ' . $query; |
|
| 909 | - if (!$requeter) { |
|
| 910 | - return $query; |
|
| 911 | - } |
|
| 912 | - // on ne trace pas ces requetes, sinon on obtient un tracage sans fin... |
|
| 913 | - $r = spip_sqlite::executer_requete($query, $serveur, false); |
|
| 907 | + $query = spip_sqlite::traduire_requete($query, $serveur); |
|
| 908 | + $query = 'EXPLAIN ' . $query; |
|
| 909 | + if (!$requeter) { |
|
| 910 | + return $query; |
|
| 911 | + } |
|
| 912 | + // on ne trace pas ces requetes, sinon on obtient un tracage sans fin... |
|
| 913 | + $r = spip_sqlite::executer_requete($query, $serveur, false); |
|
| 914 | 914 | |
| 915 | - return $r ? spip_sqlite_fetch($r, null, $serveur) : false; // hum ? etrange ca... a verifier |
|
| 915 | + return $r ? spip_sqlite_fetch($r, null, $serveur) : false; // hum ? etrange ca... a verifier |
|
| 916 | 916 | } |
| 917 | 917 | |
| 918 | 918 | |
@@ -929,30 +929,30 @@ discard block |
||
| 929 | 929 | */ |
| 930 | 930 | function spip_sqlite_fetch($r, $t = '', $serveur = '', $requeter = true) { |
| 931 | 931 | |
| 932 | - $link = _sqlite_link($serveur); |
|
| 933 | - $t = $t ? $t : SPIP_SQLITE3_ASSOC; |
|
| 932 | + $link = _sqlite_link($serveur); |
|
| 933 | + $t = $t ? $t : SPIP_SQLITE3_ASSOC; |
|
| 934 | 934 | |
| 935 | - $retour = false; |
|
| 936 | - if ($r) { |
|
| 937 | - $retour = $r->fetch($t); |
|
| 938 | - } |
|
| 935 | + $retour = false; |
|
| 936 | + if ($r) { |
|
| 937 | + $retour = $r->fetch($t); |
|
| 938 | + } |
|
| 939 | 939 | |
| 940 | - // Renvoie des 'table.titre' au lieu de 'titre' tout court ! pff ! |
|
| 941 | - // suppression de 'table.' pour toutes les cles (c'est un peu violent !) |
|
| 942 | - // c'est couteux : on ne verifie que la premiere ligne pour voir si on le fait ou non |
|
| 943 | - if ( |
|
| 944 | - $retour |
|
| 945 | - and strpos(implode('', array_keys($retour)), '.') !== false |
|
| 946 | - ) { |
|
| 947 | - foreach ($retour as $cle => $val) { |
|
| 948 | - if (($pos = strpos($cle, '.')) !== false) { |
|
| 949 | - $retour[substr($cle, $pos + 1)] = &$retour[$cle]; |
|
| 950 | - unset($retour[$cle]); |
|
| 951 | - } |
|
| 952 | - } |
|
| 953 | - } |
|
| 940 | + // Renvoie des 'table.titre' au lieu de 'titre' tout court ! pff ! |
|
| 941 | + // suppression de 'table.' pour toutes les cles (c'est un peu violent !) |
|
| 942 | + // c'est couteux : on ne verifie que la premiere ligne pour voir si on le fait ou non |
|
| 943 | + if ( |
|
| 944 | + $retour |
|
| 945 | + and strpos(implode('', array_keys($retour)), '.') !== false |
|
| 946 | + ) { |
|
| 947 | + foreach ($retour as $cle => $val) { |
|
| 948 | + if (($pos = strpos($cle, '.')) !== false) { |
|
| 949 | + $retour[substr($cle, $pos + 1)] = &$retour[$cle]; |
|
| 950 | + unset($retour[$cle]); |
|
| 951 | + } |
|
| 952 | + } |
|
| 953 | + } |
|
| 954 | 954 | |
| 955 | - return $retour; |
|
| 955 | + return $retour; |
|
| 956 | 956 | } |
| 957 | 957 | |
| 958 | 958 | /** |
@@ -965,8 +965,8 @@ discard block |
||
| 965 | 965 | * @return bool True si déplacement réussi, false sinon. |
| 966 | 966 | **/ |
| 967 | 967 | function spip_sqlite_seek($r, $row_number, $serveur = '', $requeter = true) { |
| 968 | - // encore un truc de bien fichu : PDO ne PEUT PAS faire de seek ou de rewind... |
|
| 969 | - return false; |
|
| 968 | + // encore un truc de bien fichu : PDO ne PEUT PAS faire de seek ou de rewind... |
|
| 969 | + return false; |
|
| 970 | 970 | } |
| 971 | 971 | |
| 972 | 972 | |
@@ -982,10 +982,10 @@ discard block |
||
| 982 | 982 | * @return bool True si réussi |
| 983 | 983 | */ |
| 984 | 984 | function spip_sqlite_free(&$r, $serveur = '', $requeter = true) { |
| 985 | - unset($r); |
|
| 985 | + unset($r); |
|
| 986 | 986 | |
| 987 | - return true; |
|
| 988 | - //return sqlite_free_result($r); |
|
| 987 | + return true; |
|
| 988 | + //return sqlite_free_result($r); |
|
| 989 | 989 | } |
| 990 | 990 | |
| 991 | 991 | |
@@ -1000,8 +1000,8 @@ discard block |
||
| 1000 | 1000 | * @return void |
| 1001 | 1001 | */ |
| 1002 | 1002 | function spip_sqlite_get_charset($charset = [], $serveur = '', $requeter = true) { |
| 1003 | - //$c = !$charset ? '' : (" LIKE "._q($charset['charset'])); |
|
| 1004 | - //return spip_sqlite_fetch(sqlite_query(_sqlite_link($serveur), "SHOW CHARACTER SET$c"), NULL, $serveur); |
|
| 1003 | + //$c = !$charset ? '' : (" LIKE "._q($charset['charset'])); |
|
| 1004 | + //return spip_sqlite_fetch(sqlite_query(_sqlite_link($serveur), "SHOW CHARACTER SET$c"), NULL, $serveur); |
|
| 1005 | 1005 | } |
| 1006 | 1006 | |
| 1007 | 1007 | |
@@ -1016,7 +1016,7 @@ discard block |
||
| 1016 | 1016 | * Valeur hexadécimale pour SQLite |
| 1017 | 1017 | **/ |
| 1018 | 1018 | function spip_sqlite_hex($v) { |
| 1019 | - return hexdec($v); |
|
| 1019 | + return hexdec($v); |
|
| 1020 | 1020 | } |
| 1021 | 1021 | |
| 1022 | 1022 | |
@@ -1038,7 +1038,7 @@ discard block |
||
| 1038 | 1038 | * Expression de requête SQL |
| 1039 | 1039 | **/ |
| 1040 | 1040 | function spip_sqlite_in($val, $valeurs, $not = '', $serveur = '', $requeter = true) { |
| 1041 | - return "($val $not IN ($valeurs))"; |
|
| 1041 | + return "($val $not IN ($valeurs))"; |
|
| 1042 | 1042 | } |
| 1043 | 1043 | |
| 1044 | 1044 | |
@@ -1066,20 +1066,20 @@ discard block |
||
| 1066 | 1066 | **/ |
| 1067 | 1067 | function spip_sqlite_insert($table, $champs, $valeurs, $desc = [], $serveur = '', $requeter = true) { |
| 1068 | 1068 | |
| 1069 | - $query = "INSERT INTO $table " . ($champs ? "$champs VALUES $valeurs" : 'DEFAULT VALUES'); |
|
| 1070 | - if ($r = spip_sqlite_query($query, $serveur, $requeter)) { |
|
| 1071 | - if (!$requeter) { |
|
| 1072 | - return $r; |
|
| 1073 | - } |
|
| 1074 | - $nb = spip_sqlite::last_insert_id($serveur); |
|
| 1075 | - } else { |
|
| 1076 | - $nb = false; |
|
| 1077 | - } |
|
| 1069 | + $query = "INSERT INTO $table " . ($champs ? "$champs VALUES $valeurs" : 'DEFAULT VALUES'); |
|
| 1070 | + if ($r = spip_sqlite_query($query, $serveur, $requeter)) { |
|
| 1071 | + if (!$requeter) { |
|
| 1072 | + return $r; |
|
| 1073 | + } |
|
| 1074 | + $nb = spip_sqlite::last_insert_id($serveur); |
|
| 1075 | + } else { |
|
| 1076 | + $nb = false; |
|
| 1077 | + } |
|
| 1078 | 1078 | |
| 1079 | - $err = spip_sqlite_error($query, $serveur); |
|
| 1079 | + $err = spip_sqlite_error($query, $serveur); |
|
| 1080 | 1080 | |
| 1081 | - // cas particulier : ne pas substituer la reponse spip_sqlite_query si on est en profilage |
|
| 1082 | - return isset($_GET['var_profile']) ? $r : $nb; |
|
| 1081 | + // cas particulier : ne pas substituer la reponse spip_sqlite_query si on est en profilage |
|
| 1082 | + return isset($_GET['var_profile']) ? $r : $nb; |
|
| 1083 | 1083 | } |
| 1084 | 1084 | |
| 1085 | 1085 | |
@@ -1104,28 +1104,28 @@ discard block |
||
| 1104 | 1104 | * - Tableau de description de la requête et du temps d'exécution, si var_profile activé |
| 1105 | 1105 | **/ |
| 1106 | 1106 | function spip_sqlite_insertq($table, $couples = [], $desc = [], $serveur = '', $requeter = true) { |
| 1107 | - if (!$desc) { |
|
| 1108 | - $desc = description_table($table, $serveur); |
|
| 1109 | - } |
|
| 1110 | - if (!$desc) { |
|
| 1111 | - die("$table insertion sans description"); |
|
| 1112 | - } |
|
| 1113 | - $fields = isset($desc['field']) ? $desc['field'] : []; |
|
| 1107 | + if (!$desc) { |
|
| 1108 | + $desc = description_table($table, $serveur); |
|
| 1109 | + } |
|
| 1110 | + if (!$desc) { |
|
| 1111 | + die("$table insertion sans description"); |
|
| 1112 | + } |
|
| 1113 | + $fields = isset($desc['field']) ? $desc['field'] : []; |
|
| 1114 | 1114 | |
| 1115 | - foreach ($couples as $champ => $val) { |
|
| 1116 | - $couples[$champ] = _sqlite_calculer_cite($val, $fields[$champ]); |
|
| 1117 | - } |
|
| 1115 | + foreach ($couples as $champ => $val) { |
|
| 1116 | + $couples[$champ] = _sqlite_calculer_cite($val, $fields[$champ]); |
|
| 1117 | + } |
|
| 1118 | 1118 | |
| 1119 | - // recherche de champs 'timestamp' pour mise a jour auto de ceux-ci |
|
| 1120 | - $couples = _sqlite_ajouter_champs_timestamp($table, $couples, $desc, $serveur); |
|
| 1119 | + // recherche de champs 'timestamp' pour mise a jour auto de ceux-ci |
|
| 1120 | + $couples = _sqlite_ajouter_champs_timestamp($table, $couples, $desc, $serveur); |
|
| 1121 | 1121 | |
| 1122 | - $cles = $valeurs = ''; |
|
| 1123 | - if (count($couples)) { |
|
| 1124 | - $cles = '(' . join(',', array_keys($couples)) . ')'; |
|
| 1125 | - $valeurs = '(' . join(',', $couples) . ')'; |
|
| 1126 | - } |
|
| 1122 | + $cles = $valeurs = ''; |
|
| 1123 | + if (count($couples)) { |
|
| 1124 | + $cles = '(' . join(',', array_keys($couples)) . ')'; |
|
| 1125 | + $valeurs = '(' . join(',', $couples) . ')'; |
|
| 1126 | + } |
|
| 1127 | 1127 | |
| 1128 | - return spip_sqlite_insert($table, $cles, $valeurs, $desc, $serveur, $requeter); |
|
| 1128 | + return spip_sqlite_insert($table, $cles, $valeurs, $desc, $serveur, $requeter); |
|
| 1129 | 1129 | } |
| 1130 | 1130 | |
| 1131 | 1131 | |
@@ -1149,70 +1149,70 @@ discard block |
||
| 1149 | 1149 | * - False en cas d'erreur. |
| 1150 | 1150 | **/ |
| 1151 | 1151 | function spip_sqlite_insertq_multi($table, $tab_couples = [], $desc = [], $serveur = '', $requeter = true) { |
| 1152 | - if (!$desc) { |
|
| 1153 | - $desc = description_table($table, $serveur); |
|
| 1154 | - } |
|
| 1155 | - if (!$desc) { |
|
| 1156 | - die("$table insertion sans description"); |
|
| 1157 | - } |
|
| 1158 | - if (!isset($desc['field'])) { |
|
| 1159 | - $desc['field'] = []; |
|
| 1160 | - } |
|
| 1161 | - |
|
| 1162 | - // recuperer les champs 'timestamp' pour mise a jour auto de ceux-ci |
|
| 1163 | - $maj = _sqlite_ajouter_champs_timestamp($table, [], $desc, $serveur); |
|
| 1164 | - |
|
| 1165 | - // seul le nom de la table est a traduire ici : |
|
| 1166 | - // le faire une seule fois au debut |
|
| 1167 | - $query_start = "INSERT INTO $table "; |
|
| 1168 | - $query_start = spip_sqlite::traduire_requete($query_start, $serveur); |
|
| 1169 | - |
|
| 1170 | - // ouvrir une transaction |
|
| 1171 | - if ($requeter) { |
|
| 1172 | - spip_sqlite::demarrer_transaction($serveur); |
|
| 1173 | - } |
|
| 1174 | - |
|
| 1175 | - while ($couples = array_shift($tab_couples)) { |
|
| 1176 | - foreach ($couples as $champ => $val) { |
|
| 1177 | - $couples[$champ] = _sqlite_calculer_cite($val, $desc['field'][$champ]); |
|
| 1178 | - } |
|
| 1179 | - |
|
| 1180 | - // inserer les champs timestamp par defaut |
|
| 1181 | - $couples = array_merge($maj, $couples); |
|
| 1182 | - |
|
| 1183 | - $champs = $valeurs = ''; |
|
| 1184 | - if (count($couples)) { |
|
| 1185 | - $champs = '(' . join(',', array_keys($couples)) . ')'; |
|
| 1186 | - $valeurs = '(' . join(',', $couples) . ')'; |
|
| 1187 | - $query = $query_start . "$champs VALUES $valeurs"; |
|
| 1188 | - } else { |
|
| 1189 | - $query = $query_start . 'DEFAULT VALUES'; |
|
| 1190 | - } |
|
| 1191 | - |
|
| 1192 | - if ($requeter) { |
|
| 1193 | - $retour = spip_sqlite::executer_requete($query, $serveur); |
|
| 1194 | - } |
|
| 1195 | - |
|
| 1196 | - // sur le dernier couple uniquement |
|
| 1197 | - if (!count($tab_couples)) { |
|
| 1198 | - $nb = 0; |
|
| 1199 | - if ($requeter) { |
|
| 1200 | - $nb = spip_sqlite::last_insert_id($serveur); |
|
| 1201 | - } else { |
|
| 1202 | - return $query; |
|
| 1203 | - } |
|
| 1204 | - } |
|
| 1205 | - |
|
| 1206 | - $err = spip_sqlite_error($query, $serveur); |
|
| 1207 | - } |
|
| 1208 | - |
|
| 1209 | - if ($requeter) { |
|
| 1210 | - spip_sqlite::finir_transaction($serveur); |
|
| 1211 | - } |
|
| 1212 | - |
|
| 1213 | - // renvoie le dernier id d'autoincrement ajoute |
|
| 1214 | - // cas particulier : ne pas substituer la reponse spip_sqlite_query si on est en profilage |
|
| 1215 | - return isset($_GET['var_profile']) ? $retour : $nb; |
|
| 1152 | + if (!$desc) { |
|
| 1153 | + $desc = description_table($table, $serveur); |
|
| 1154 | + } |
|
| 1155 | + if (!$desc) { |
|
| 1156 | + die("$table insertion sans description"); |
|
| 1157 | + } |
|
| 1158 | + if (!isset($desc['field'])) { |
|
| 1159 | + $desc['field'] = []; |
|
| 1160 | + } |
|
| 1161 | + |
|
| 1162 | + // recuperer les champs 'timestamp' pour mise a jour auto de ceux-ci |
|
| 1163 | + $maj = _sqlite_ajouter_champs_timestamp($table, [], $desc, $serveur); |
|
| 1164 | + |
|
| 1165 | + // seul le nom de la table est a traduire ici : |
|
| 1166 | + // le faire une seule fois au debut |
|
| 1167 | + $query_start = "INSERT INTO $table "; |
|
| 1168 | + $query_start = spip_sqlite::traduire_requete($query_start, $serveur); |
|
| 1169 | + |
|
| 1170 | + // ouvrir une transaction |
|
| 1171 | + if ($requeter) { |
|
| 1172 | + spip_sqlite::demarrer_transaction($serveur); |
|
| 1173 | + } |
|
| 1174 | + |
|
| 1175 | + while ($couples = array_shift($tab_couples)) { |
|
| 1176 | + foreach ($couples as $champ => $val) { |
|
| 1177 | + $couples[$champ] = _sqlite_calculer_cite($val, $desc['field'][$champ]); |
|
| 1178 | + } |
|
| 1179 | + |
|
| 1180 | + // inserer les champs timestamp par defaut |
|
| 1181 | + $couples = array_merge($maj, $couples); |
|
| 1182 | + |
|
| 1183 | + $champs = $valeurs = ''; |
|
| 1184 | + if (count($couples)) { |
|
| 1185 | + $champs = '(' . join(',', array_keys($couples)) . ')'; |
|
| 1186 | + $valeurs = '(' . join(',', $couples) . ')'; |
|
| 1187 | + $query = $query_start . "$champs VALUES $valeurs"; |
|
| 1188 | + } else { |
|
| 1189 | + $query = $query_start . 'DEFAULT VALUES'; |
|
| 1190 | + } |
|
| 1191 | + |
|
| 1192 | + if ($requeter) { |
|
| 1193 | + $retour = spip_sqlite::executer_requete($query, $serveur); |
|
| 1194 | + } |
|
| 1195 | + |
|
| 1196 | + // sur le dernier couple uniquement |
|
| 1197 | + if (!count($tab_couples)) { |
|
| 1198 | + $nb = 0; |
|
| 1199 | + if ($requeter) { |
|
| 1200 | + $nb = spip_sqlite::last_insert_id($serveur); |
|
| 1201 | + } else { |
|
| 1202 | + return $query; |
|
| 1203 | + } |
|
| 1204 | + } |
|
| 1205 | + |
|
| 1206 | + $err = spip_sqlite_error($query, $serveur); |
|
| 1207 | + } |
|
| 1208 | + |
|
| 1209 | + if ($requeter) { |
|
| 1210 | + spip_sqlite::finir_transaction($serveur); |
|
| 1211 | + } |
|
| 1212 | + |
|
| 1213 | + // renvoie le dernier id d'autoincrement ajoute |
|
| 1214 | + // cas particulier : ne pas substituer la reponse spip_sqlite_query si on est en profilage |
|
| 1215 | + return isset($_GET['var_profile']) ? $retour : $nb; |
|
| 1216 | 1216 | } |
| 1217 | 1217 | |
| 1218 | 1218 | |
@@ -1227,7 +1227,7 @@ discard block |
||
| 1227 | 1227 | * Toujours true. |
| 1228 | 1228 | **/ |
| 1229 | 1229 | function spip_sqlite_preferer_transaction($serveur = '', $requeter = true) { |
| 1230 | - return true; |
|
| 1230 | + return true; |
|
| 1231 | 1231 | } |
| 1232 | 1232 | |
| 1233 | 1233 | /** |
@@ -1244,12 +1244,12 @@ discard block |
||
| 1244 | 1244 | * string si texte de la requête demandé, true sinon |
| 1245 | 1245 | **/ |
| 1246 | 1246 | function spip_sqlite_demarrer_transaction($serveur = '', $requeter = true) { |
| 1247 | - if (!$requeter) { |
|
| 1248 | - return 'BEGIN TRANSACTION'; |
|
| 1249 | - } |
|
| 1250 | - spip_sqlite::demarrer_transaction($serveur); |
|
| 1247 | + if (!$requeter) { |
|
| 1248 | + return 'BEGIN TRANSACTION'; |
|
| 1249 | + } |
|
| 1250 | + spip_sqlite::demarrer_transaction($serveur); |
|
| 1251 | 1251 | |
| 1252 | - return true; |
|
| 1252 | + return true; |
|
| 1253 | 1253 | } |
| 1254 | 1254 | |
| 1255 | 1255 | /** |
@@ -1263,12 +1263,12 @@ discard block |
||
| 1263 | 1263 | * string si texte de la requête demandé, true sinon |
| 1264 | 1264 | **/ |
| 1265 | 1265 | function spip_sqlite_terminer_transaction($serveur = '', $requeter = true) { |
| 1266 | - if (!$requeter) { |
|
| 1267 | - return 'COMMIT'; |
|
| 1268 | - } |
|
| 1269 | - spip_sqlite::finir_transaction($serveur); |
|
| 1266 | + if (!$requeter) { |
|
| 1267 | + return 'COMMIT'; |
|
| 1268 | + } |
|
| 1269 | + spip_sqlite::finir_transaction($serveur); |
|
| 1270 | 1270 | |
| 1271 | - return true; |
|
| 1271 | + return true; |
|
| 1272 | 1272 | } |
| 1273 | 1273 | |
| 1274 | 1274 | |
@@ -1283,27 +1283,27 @@ discard block |
||
| 1283 | 1283 | * Liste des noms de bases |
| 1284 | 1284 | **/ |
| 1285 | 1285 | function spip_sqlite_listdbs($serveur = '', $requeter = true) { |
| 1286 | - _sqlite_init(); |
|
| 1286 | + _sqlite_init(); |
|
| 1287 | 1287 | |
| 1288 | - if (!is_dir($d = substr(_DIR_DB, 0, -1))) { |
|
| 1289 | - return []; |
|
| 1290 | - } |
|
| 1288 | + if (!is_dir($d = substr(_DIR_DB, 0, -1))) { |
|
| 1289 | + return []; |
|
| 1290 | + } |
|
| 1291 | 1291 | |
| 1292 | - include_spip('inc/flock'); |
|
| 1293 | - $bases = preg_files($d, $pattern = '(.*)\.sqlite$'); |
|
| 1294 | - $bds = []; |
|
| 1292 | + include_spip('inc/flock'); |
|
| 1293 | + $bases = preg_files($d, $pattern = '(.*)\.sqlite$'); |
|
| 1294 | + $bds = []; |
|
| 1295 | 1295 | |
| 1296 | - foreach ($bases as $b) { |
|
| 1297 | - // pas de bases commencant pas sqlite |
|
| 1298 | - // (on s'en sert pour l'installation pour simuler la presence d'un serveur) |
|
| 1299 | - // les bases sont de la forme _sqliteX_tmp_spip_install.sqlite |
|
| 1300 | - if (strpos($b, '_sqlite')) { |
|
| 1301 | - continue; |
|
| 1302 | - } |
|
| 1303 | - $bds[] = preg_replace(";.*/$pattern;iS", '$1', $b); |
|
| 1304 | - } |
|
| 1296 | + foreach ($bases as $b) { |
|
| 1297 | + // pas de bases commencant pas sqlite |
|
| 1298 | + // (on s'en sert pour l'installation pour simuler la presence d'un serveur) |
|
| 1299 | + // les bases sont de la forme _sqliteX_tmp_spip_install.sqlite |
|
| 1300 | + if (strpos($b, '_sqlite')) { |
|
| 1301 | + continue; |
|
| 1302 | + } |
|
| 1303 | + $bds[] = preg_replace(";.*/$pattern;iS", '$1', $b); |
|
| 1304 | + } |
|
| 1305 | 1305 | |
| 1306 | - return $bds; |
|
| 1306 | + return $bds; |
|
| 1307 | 1307 | } |
| 1308 | 1308 | |
| 1309 | 1309 | |
@@ -1318,9 +1318,9 @@ discard block |
||
| 1318 | 1318 | * @return string Texte de sélection pour la requête |
| 1319 | 1319 | */ |
| 1320 | 1320 | function spip_sqlite_multi($objet, $lang) { |
| 1321 | - $r = 'EXTRAIRE_MULTI(' . $objet . ", '" . $lang . "') AS multi"; |
|
| 1321 | + $r = 'EXTRAIRE_MULTI(' . $objet . ", '" . $lang . "') AS multi"; |
|
| 1322 | 1322 | |
| 1323 | - return $r; |
|
| 1323 | + return $r; |
|
| 1324 | 1324 | } |
| 1325 | 1325 | |
| 1326 | 1326 | |
@@ -1337,15 +1337,15 @@ discard block |
||
| 1337 | 1337 | * @return bool|string true / false / requete |
| 1338 | 1338 | **/ |
| 1339 | 1339 | function spip_sqlite_optimize($table, $serveur = '', $requeter = true) { |
| 1340 | - static $do = false; |
|
| 1341 | - if ($requeter and $do) { |
|
| 1342 | - return true; |
|
| 1343 | - } |
|
| 1344 | - if ($requeter) { |
|
| 1345 | - $do = true; |
|
| 1346 | - } |
|
| 1340 | + static $do = false; |
|
| 1341 | + if ($requeter and $do) { |
|
| 1342 | + return true; |
|
| 1343 | + } |
|
| 1344 | + if ($requeter) { |
|
| 1345 | + $do = true; |
|
| 1346 | + } |
|
| 1347 | 1347 | |
| 1348 | - return spip_sqlite_query('VACUUM', $serveur, $requeter); |
|
| 1348 | + return spip_sqlite_query('VACUUM', $serveur, $requeter); |
|
| 1349 | 1349 | } |
| 1350 | 1350 | |
| 1351 | 1351 | |
@@ -1362,15 +1362,15 @@ discard block |
||
| 1362 | 1362 | * Donnée prête à être utilisée par le gestionnaire SQL |
| 1363 | 1363 | */ |
| 1364 | 1364 | function spip_sqlite_quote($v, $type = '') { |
| 1365 | - if (!is_array($v)) { |
|
| 1366 | - return _sqlite_calculer_cite($v, $type); |
|
| 1367 | - } |
|
| 1368 | - // si c'est un tableau, le parcourir en propageant le type |
|
| 1369 | - foreach ($v as $k => $r) { |
|
| 1370 | - $v[$k] = spip_sqlite_quote($r, $type); |
|
| 1371 | - } |
|
| 1365 | + if (!is_array($v)) { |
|
| 1366 | + return _sqlite_calculer_cite($v, $type); |
|
| 1367 | + } |
|
| 1368 | + // si c'est un tableau, le parcourir en propageant le type |
|
| 1369 | + foreach ($v as $k => $r) { |
|
| 1370 | + $v[$k] = spip_sqlite_quote($r, $type); |
|
| 1371 | + } |
|
| 1372 | 1372 | |
| 1373 | - return join(',', $v); |
|
| 1373 | + return join(',', $v); |
|
| 1374 | 1374 | } |
| 1375 | 1375 | |
| 1376 | 1376 | |
@@ -1387,9 +1387,9 @@ discard block |
||
| 1387 | 1387 | * Expression SQL |
| 1388 | 1388 | **/ |
| 1389 | 1389 | function spip_sqlite_date_proche($champ, $interval, $unite) { |
| 1390 | - $op = (($interval <= 0) ? '>' : '<'); |
|
| 1390 | + $op = (($interval <= 0) ? '>' : '<'); |
|
| 1391 | 1391 | |
| 1392 | - return "($champ $op datetime('" . date('Y-m-d H:i:s') . "', '$interval $unite'))"; |
|
| 1392 | + return "($champ $op datetime('" . date('Y-m-d H:i:s') . "', '$interval $unite'))"; |
|
| 1393 | 1393 | } |
| 1394 | 1394 | |
| 1395 | 1395 | |
@@ -1407,48 +1407,48 @@ discard block |
||
| 1407 | 1407 | * l'état de la table après la réparation |
| 1408 | 1408 | */ |
| 1409 | 1409 | function spip_sqlite_repair($table, $serveur = '', $requeter = true) { |
| 1410 | - if ( |
|
| 1411 | - $desc = spip_sqlite_showtable($table, $serveur) |
|
| 1412 | - and isset($desc['field']) |
|
| 1413 | - and is_array($desc['field']) |
|
| 1414 | - ) { |
|
| 1415 | - foreach ($desc['field'] as $c => $d) { |
|
| 1416 | - if ( |
|
| 1417 | - preg_match(',^(tinytext|mediumtext|text|longtext|varchar|char),i', $d) |
|
| 1418 | - and stripos($d, 'NOT NULL') !== false |
|
| 1419 | - and stripos($d, 'DEFAULT') === false |
|
| 1420 | - /* pas touche aux cles primaires */ |
|
| 1421 | - and (!isset($desc['key']['PRIMARY KEY']) or $desc['key']['PRIMARY KEY'] !== $c) |
|
| 1422 | - ) { |
|
| 1423 | - spip_sqlite_alter($q = "TABLE $table CHANGE $c $c $d DEFAULT ''", $serveur); |
|
| 1424 | - spip_log("ALTER $q", 'repair' . _LOG_INFO_IMPORTANTE); |
|
| 1425 | - } |
|
| 1426 | - if ( |
|
| 1427 | - preg_match(',^(INTEGER),i', $d) |
|
| 1428 | - and stripos($d, 'NOT NULL') !== false |
|
| 1429 | - and stripos($d, 'DEFAULT') === false |
|
| 1430 | - /* pas touche aux cles primaires */ |
|
| 1431 | - and (!isset($desc['key']['PRIMARY KEY']) or $desc['key']['PRIMARY KEY'] !== $c) |
|
| 1432 | - ) { |
|
| 1433 | - spip_sqlite_alter($q = "TABLE $table CHANGE $c $c $d DEFAULT '0'", $serveur); |
|
| 1434 | - spip_log("ALTER $q", 'repair' . _LOG_INFO_IMPORTANTE); |
|
| 1435 | - } |
|
| 1436 | - if ( |
|
| 1437 | - preg_match(',^(datetime),i', $d) |
|
| 1438 | - and stripos($d, 'NOT NULL') !== false |
|
| 1439 | - and stripos($d, 'DEFAULT') === false |
|
| 1440 | - /* pas touche aux cles primaires */ |
|
| 1441 | - and (!isset($desc['key']['PRIMARY KEY']) or $desc['key']['PRIMARY KEY'] !== $c) |
|
| 1442 | - ) { |
|
| 1443 | - spip_sqlite_alter($q = "TABLE $table CHANGE $c $c $d DEFAULT '0000-00-00 00:00:00'", $serveur); |
|
| 1444 | - spip_log("ALTER $q", 'repair' . _LOG_INFO_IMPORTANTE); |
|
| 1445 | - } |
|
| 1446 | - } |
|
| 1447 | - |
|
| 1448 | - return [' OK ']; |
|
| 1449 | - } |
|
| 1450 | - |
|
| 1451 | - return [' ERROR ']; |
|
| 1410 | + if ( |
|
| 1411 | + $desc = spip_sqlite_showtable($table, $serveur) |
|
| 1412 | + and isset($desc['field']) |
|
| 1413 | + and is_array($desc['field']) |
|
| 1414 | + ) { |
|
| 1415 | + foreach ($desc['field'] as $c => $d) { |
|
| 1416 | + if ( |
|
| 1417 | + preg_match(',^(tinytext|mediumtext|text|longtext|varchar|char),i', $d) |
|
| 1418 | + and stripos($d, 'NOT NULL') !== false |
|
| 1419 | + and stripos($d, 'DEFAULT') === false |
|
| 1420 | + /* pas touche aux cles primaires */ |
|
| 1421 | + and (!isset($desc['key']['PRIMARY KEY']) or $desc['key']['PRIMARY KEY'] !== $c) |
|
| 1422 | + ) { |
|
| 1423 | + spip_sqlite_alter($q = "TABLE $table CHANGE $c $c $d DEFAULT ''", $serveur); |
|
| 1424 | + spip_log("ALTER $q", 'repair' . _LOG_INFO_IMPORTANTE); |
|
| 1425 | + } |
|
| 1426 | + if ( |
|
| 1427 | + preg_match(',^(INTEGER),i', $d) |
|
| 1428 | + and stripos($d, 'NOT NULL') !== false |
|
| 1429 | + and stripos($d, 'DEFAULT') === false |
|
| 1430 | + /* pas touche aux cles primaires */ |
|
| 1431 | + and (!isset($desc['key']['PRIMARY KEY']) or $desc['key']['PRIMARY KEY'] !== $c) |
|
| 1432 | + ) { |
|
| 1433 | + spip_sqlite_alter($q = "TABLE $table CHANGE $c $c $d DEFAULT '0'", $serveur); |
|
| 1434 | + spip_log("ALTER $q", 'repair' . _LOG_INFO_IMPORTANTE); |
|
| 1435 | + } |
|
| 1436 | + if ( |
|
| 1437 | + preg_match(',^(datetime),i', $d) |
|
| 1438 | + and stripos($d, 'NOT NULL') !== false |
|
| 1439 | + and stripos($d, 'DEFAULT') === false |
|
| 1440 | + /* pas touche aux cles primaires */ |
|
| 1441 | + and (!isset($desc['key']['PRIMARY KEY']) or $desc['key']['PRIMARY KEY'] !== $c) |
|
| 1442 | + ) { |
|
| 1443 | + spip_sqlite_alter($q = "TABLE $table CHANGE $c $c $d DEFAULT '0000-00-00 00:00:00'", $serveur); |
|
| 1444 | + spip_log("ALTER $q", 'repair' . _LOG_INFO_IMPORTANTE); |
|
| 1445 | + } |
|
| 1446 | + } |
|
| 1447 | + |
|
| 1448 | + return [' OK ']; |
|
| 1449 | + } |
|
| 1450 | + |
|
| 1451 | + return [' ERROR ']; |
|
| 1452 | 1452 | } |
| 1453 | 1453 | |
| 1454 | 1454 | |
@@ -1477,25 +1477,25 @@ discard block |
||
| 1477 | 1477 | * - False en cas d'erreur. |
| 1478 | 1478 | **/ |
| 1479 | 1479 | function spip_sqlite_replace($table, $couples, $desc = [], $serveur = '', $requeter = true) { |
| 1480 | - if (!$desc) { |
|
| 1481 | - $desc = description_table($table, $serveur); |
|
| 1482 | - } |
|
| 1483 | - if (!$desc) { |
|
| 1484 | - die("$table insertion sans description"); |
|
| 1485 | - } |
|
| 1486 | - $fields = isset($desc['field']) ? $desc['field'] : []; |
|
| 1480 | + if (!$desc) { |
|
| 1481 | + $desc = description_table($table, $serveur); |
|
| 1482 | + } |
|
| 1483 | + if (!$desc) { |
|
| 1484 | + die("$table insertion sans description"); |
|
| 1485 | + } |
|
| 1486 | + $fields = isset($desc['field']) ? $desc['field'] : []; |
|
| 1487 | 1487 | |
| 1488 | - foreach ($couples as $champ => $val) { |
|
| 1489 | - $couples[$champ] = _sqlite_calculer_cite($val, $fields[$champ]); |
|
| 1490 | - } |
|
| 1488 | + foreach ($couples as $champ => $val) { |
|
| 1489 | + $couples[$champ] = _sqlite_calculer_cite($val, $fields[$champ]); |
|
| 1490 | + } |
|
| 1491 | 1491 | |
| 1492 | - // recherche de champs 'timestamp' pour mise a jour auto de ceux-ci |
|
| 1493 | - $couples = _sqlite_ajouter_champs_timestamp($table, $couples, $desc, $serveur); |
|
| 1492 | + // recherche de champs 'timestamp' pour mise a jour auto de ceux-ci |
|
| 1493 | + $couples = _sqlite_ajouter_champs_timestamp($table, $couples, $desc, $serveur); |
|
| 1494 | 1494 | |
| 1495 | - return spip_sqlite_query("REPLACE INTO $table (" . join(',', array_keys($couples)) . ') VALUES (' . join( |
|
| 1496 | - ',', |
|
| 1497 | - $couples |
|
| 1498 | - ) . ')', $serveur); |
|
| 1495 | + return spip_sqlite_query("REPLACE INTO $table (" . join(',', array_keys($couples)) . ') VALUES (' . join( |
|
| 1496 | + ',', |
|
| 1497 | + $couples |
|
| 1498 | + ) . ')', $serveur); |
|
| 1499 | 1499 | } |
| 1500 | 1500 | |
| 1501 | 1501 | |
@@ -1525,13 +1525,13 @@ discard block |
||
| 1525 | 1525 | **/ |
| 1526 | 1526 | function spip_sqlite_replace_multi($table, $tab_couples, $desc = [], $serveur = '', $requeter = true) { |
| 1527 | 1527 | |
| 1528 | - // boucler pour trainter chaque requete independemment |
|
| 1529 | - foreach ($tab_couples as $couples) { |
|
| 1530 | - $retour = spip_sqlite_replace($table, $couples, $desc, $serveur, $requeter); |
|
| 1531 | - } |
|
| 1528 | + // boucler pour trainter chaque requete independemment |
|
| 1529 | + foreach ($tab_couples as $couples) { |
|
| 1530 | + $retour = spip_sqlite_replace($table, $couples, $desc, $serveur, $requeter); |
|
| 1531 | + } |
|
| 1532 | 1532 | |
| 1533 | - // renvoie le dernier id |
|
| 1534 | - return $retour; |
|
| 1533 | + // renvoie le dernier id |
|
| 1534 | + return $retour; |
|
| 1535 | 1535 | } |
| 1536 | 1536 | |
| 1537 | 1537 | |
@@ -1558,44 +1558,44 @@ discard block |
||
| 1558 | 1558 | * - array : Tableau décrivant requête et temps d'exécution si var_profile actif pour tracer. |
| 1559 | 1559 | */ |
| 1560 | 1560 | function spip_sqlite_select( |
| 1561 | - $select, |
|
| 1562 | - $from, |
|
| 1563 | - $where = '', |
|
| 1564 | - $groupby = '', |
|
| 1565 | - $orderby = '', |
|
| 1566 | - $limit = '', |
|
| 1567 | - $having = '', |
|
| 1568 | - $serveur = '', |
|
| 1569 | - $requeter = true |
|
| 1561 | + $select, |
|
| 1562 | + $from, |
|
| 1563 | + $where = '', |
|
| 1564 | + $groupby = '', |
|
| 1565 | + $orderby = '', |
|
| 1566 | + $limit = '', |
|
| 1567 | + $having = '', |
|
| 1568 | + $serveur = '', |
|
| 1569 | + $requeter = true |
|
| 1570 | 1570 | ) { |
| 1571 | 1571 | |
| 1572 | - // version() n'est pas connu de sqlite |
|
| 1573 | - $select = str_replace('version()', 'sqlite_version()', $select); |
|
| 1572 | + // version() n'est pas connu de sqlite |
|
| 1573 | + $select = str_replace('version()', 'sqlite_version()', $select); |
|
| 1574 | 1574 | |
| 1575 | - // recomposer from |
|
| 1576 | - $from = (!is_array($from) ? $from : _sqlite_calculer_select_as($from)); |
|
| 1575 | + // recomposer from |
|
| 1576 | + $from = (!is_array($from) ? $from : _sqlite_calculer_select_as($from)); |
|
| 1577 | 1577 | |
| 1578 | - $query = |
|
| 1579 | - _sqlite_calculer_expression('SELECT', $select, ', ') |
|
| 1580 | - . _sqlite_calculer_expression('FROM', $from, ', ') |
|
| 1581 | - . _sqlite_calculer_expression('WHERE', $where) |
|
| 1582 | - . _sqlite_calculer_expression('GROUP BY', $groupby, ',') |
|
| 1583 | - . _sqlite_calculer_expression('HAVING', $having) |
|
| 1584 | - . ($orderby ? ("\nORDER BY " . _sqlite_calculer_order($orderby)) : '') |
|
| 1585 | - . ($limit ? "\nLIMIT $limit" : ''); |
|
| 1578 | + $query = |
|
| 1579 | + _sqlite_calculer_expression('SELECT', $select, ', ') |
|
| 1580 | + . _sqlite_calculer_expression('FROM', $from, ', ') |
|
| 1581 | + . _sqlite_calculer_expression('WHERE', $where) |
|
| 1582 | + . _sqlite_calculer_expression('GROUP BY', $groupby, ',') |
|
| 1583 | + . _sqlite_calculer_expression('HAVING', $having) |
|
| 1584 | + . ($orderby ? ("\nORDER BY " . _sqlite_calculer_order($orderby)) : '') |
|
| 1585 | + . ($limit ? "\nLIMIT $limit" : ''); |
|
| 1586 | 1586 | |
| 1587 | - // dans un select, on doit renvoyer la requête en cas d'erreur |
|
| 1588 | - $res = spip_sqlite_query($query, $serveur, $requeter); |
|
| 1589 | - // texte de la requete demande ? |
|
| 1590 | - if (!$requeter) { |
|
| 1591 | - return $res; |
|
| 1592 | - } |
|
| 1593 | - // erreur survenue ? |
|
| 1594 | - if ($res === false) { |
|
| 1595 | - return spip_sqlite::traduire_requete($query, $serveur); |
|
| 1596 | - } |
|
| 1587 | + // dans un select, on doit renvoyer la requête en cas d'erreur |
|
| 1588 | + $res = spip_sqlite_query($query, $serveur, $requeter); |
|
| 1589 | + // texte de la requete demande ? |
|
| 1590 | + if (!$requeter) { |
|
| 1591 | + return $res; |
|
| 1592 | + } |
|
| 1593 | + // erreur survenue ? |
|
| 1594 | + if ($res === false) { |
|
| 1595 | + return spip_sqlite::traduire_requete($query, $serveur); |
|
| 1596 | + } |
|
| 1597 | 1597 | |
| 1598 | - return $res; |
|
| 1598 | + return $res; |
|
| 1599 | 1599 | } |
| 1600 | 1600 | |
| 1601 | 1601 | |
@@ -1614,32 +1614,32 @@ discard block |
||
| 1614 | 1614 | * - False en cas d'erreur. |
| 1615 | 1615 | **/ |
| 1616 | 1616 | function spip_sqlite_selectdb($db, $serveur = '', $requeter = true) { |
| 1617 | - _sqlite_init(); |
|
| 1617 | + _sqlite_init(); |
|
| 1618 | 1618 | |
| 1619 | - // interdire la creation d'une nouvelle base, |
|
| 1620 | - // sauf si on est dans l'installation |
|
| 1621 | - if ( |
|
| 1622 | - !is_file($f = _DIR_DB . $db . '.sqlite') |
|
| 1623 | - && (!defined('_ECRIRE_INSTALL') || !_ECRIRE_INSTALL) |
|
| 1624 | - ) { |
|
| 1625 | - spip_log("Il est interdit de creer la base $db", 'sqlite.' . _LOG_HS); |
|
| 1619 | + // interdire la creation d'une nouvelle base, |
|
| 1620 | + // sauf si on est dans l'installation |
|
| 1621 | + if ( |
|
| 1622 | + !is_file($f = _DIR_DB . $db . '.sqlite') |
|
| 1623 | + && (!defined('_ECRIRE_INSTALL') || !_ECRIRE_INSTALL) |
|
| 1624 | + ) { |
|
| 1625 | + spip_log("Il est interdit de creer la base $db", 'sqlite.' . _LOG_HS); |
|
| 1626 | 1626 | |
| 1627 | - return false; |
|
| 1628 | - } |
|
| 1627 | + return false; |
|
| 1628 | + } |
|
| 1629 | 1629 | |
| 1630 | - // se connecter a la base indiquee |
|
| 1631 | - // avec les identifiants connus |
|
| 1632 | - $index = $serveur ? $serveur : 0; |
|
| 1630 | + // se connecter a la base indiquee |
|
| 1631 | + // avec les identifiants connus |
|
| 1632 | + $index = $serveur ? $serveur : 0; |
|
| 1633 | 1633 | |
| 1634 | - if ($link = spip_connect_db('', '', '', '', '@selectdb@' . $db, $serveur, '', '')) { |
|
| 1635 | - if (($db == $link['db']) && $GLOBALS['connexions'][$index] = $link) { |
|
| 1636 | - return $db; |
|
| 1637 | - } |
|
| 1638 | - } else { |
|
| 1639 | - spip_log("Impossible de selectionner la base $db", 'sqlite.' . _LOG_HS); |
|
| 1634 | + if ($link = spip_connect_db('', '', '', '', '@selectdb@' . $db, $serveur, '', '')) { |
|
| 1635 | + if (($db == $link['db']) && $GLOBALS['connexions'][$index] = $link) { |
|
| 1636 | + return $db; |
|
| 1637 | + } |
|
| 1638 | + } else { |
|
| 1639 | + spip_log("Impossible de selectionner la base $db", 'sqlite.' . _LOG_HS); |
|
| 1640 | 1640 | |
| 1641 | - return false; |
|
| 1642 | - } |
|
| 1641 | + return false; |
|
| 1642 | + } |
|
| 1643 | 1643 | } |
| 1644 | 1644 | |
| 1645 | 1645 | |
@@ -1654,8 +1654,8 @@ discard block |
||
| 1654 | 1654 | * @return void |
| 1655 | 1655 | */ |
| 1656 | 1656 | function spip_sqlite_set_charset($charset, $serveur = '', $requeter = true) { |
| 1657 | - # spip_log("Gestion charset sql a ecrire : "."SET NAMES "._q($charset), 'sqlite.'._LOG_ERREUR); |
|
| 1658 | - # return spip_sqlite_query("SET NAMES ". spip_sqlite_quote($charset), $serveur); //<-- Passe pas ! |
|
| 1657 | + # spip_log("Gestion charset sql a ecrire : "."SET NAMES "._q($charset), 'sqlite.'._LOG_ERREUR); |
|
| 1658 | + # return spip_sqlite_query("SET NAMES ". spip_sqlite_quote($charset), $serveur); //<-- Passe pas ! |
|
| 1659 | 1659 | } |
| 1660 | 1660 | |
| 1661 | 1661 | |
@@ -1673,24 +1673,24 @@ discard block |
||
| 1673 | 1673 | * Ressource à utiliser avec sql_fetch() |
| 1674 | 1674 | **/ |
| 1675 | 1675 | function spip_sqlite_showbase($match, $serveur = '', $requeter = true) { |
| 1676 | - // type est le type d'entrée : table / index / view |
|
| 1677 | - // on ne retourne que les tables (?) et non les vues... |
|
| 1678 | - # ESCAPE non supporte par les versions sqlite <3 |
|
| 1679 | - # return spip_sqlite_query("SELECT name FROM sqlite_master WHERE type='table' AND tbl_name LIKE "._q($match)." ESCAPE '\'", $serveur, $requeter); |
|
| 1680 | - $match = preg_quote($match); |
|
| 1681 | - $match = str_replace('\\\_', '[[TIRETBAS]]', $match); |
|
| 1682 | - $match = str_replace('\\\%', '[[POURCENT]]', $match); |
|
| 1683 | - $match = str_replace('_', '.', $match); |
|
| 1684 | - $match = str_replace('%', '.*', $match); |
|
| 1685 | - $match = str_replace('[[TIRETBAS]]', '_', $match); |
|
| 1686 | - $match = str_replace('[[POURCENT]]', '%', $match); |
|
| 1687 | - $match = "^$match$"; |
|
| 1688 | - |
|
| 1689 | - return spip_sqlite_query( |
|
| 1690 | - "SELECT name FROM sqlite_master WHERE type='table' AND tbl_name REGEXP " . _q($match), |
|
| 1691 | - $serveur, |
|
| 1692 | - $requeter |
|
| 1693 | - ); |
|
| 1676 | + // type est le type d'entrée : table / index / view |
|
| 1677 | + // on ne retourne que les tables (?) et non les vues... |
|
| 1678 | + # ESCAPE non supporte par les versions sqlite <3 |
|
| 1679 | + # return spip_sqlite_query("SELECT name FROM sqlite_master WHERE type='table' AND tbl_name LIKE "._q($match)." ESCAPE '\'", $serveur, $requeter); |
|
| 1680 | + $match = preg_quote($match); |
|
| 1681 | + $match = str_replace('\\\_', '[[TIRETBAS]]', $match); |
|
| 1682 | + $match = str_replace('\\\%', '[[POURCENT]]', $match); |
|
| 1683 | + $match = str_replace('_', '.', $match); |
|
| 1684 | + $match = str_replace('%', '.*', $match); |
|
| 1685 | + $match = str_replace('[[TIRETBAS]]', '_', $match); |
|
| 1686 | + $match = str_replace('[[POURCENT]]', '%', $match); |
|
| 1687 | + $match = "^$match$"; |
|
| 1688 | + |
|
| 1689 | + return spip_sqlite_query( |
|
| 1690 | + "SELECT name FROM sqlite_master WHERE type='table' AND tbl_name REGEXP " . _q($match), |
|
| 1691 | + $serveur, |
|
| 1692 | + $requeter |
|
| 1693 | + ); |
|
| 1694 | 1694 | } |
| 1695 | 1695 | |
| 1696 | 1696 | /** |
@@ -1707,19 +1707,19 @@ discard block |
||
| 1707 | 1707 | * Ressource à utiliser avec sql_fetch() |
| 1708 | 1708 | **/ |
| 1709 | 1709 | function spip_sqlite_table_exists(string $table, $serveur = '', $requeter = true) { |
| 1710 | - $r = spip_sqlite_query( |
|
| 1711 | - 'SELECT name FROM sqlite_master WHERE' |
|
| 1712 | - . ' type=\'table\'' |
|
| 1713 | - . ' AND name=' . spip_sqlite_quote($table, 'string') |
|
| 1714 | - . ' AND name NOT LIKE \'sqlite_%\'', |
|
| 1715 | - $serveur, |
|
| 1716 | - $requeter |
|
| 1717 | - ); |
|
| 1718 | - if (!$requeter) { |
|
| 1719 | - return $r; |
|
| 1720 | - } |
|
| 1721 | - $res = spip_sqlite_fetch($r); |
|
| 1722 | - return (bool) $res; |
|
| 1710 | + $r = spip_sqlite_query( |
|
| 1711 | + 'SELECT name FROM sqlite_master WHERE' |
|
| 1712 | + . ' type=\'table\'' |
|
| 1713 | + . ' AND name=' . spip_sqlite_quote($table, 'string') |
|
| 1714 | + . ' AND name NOT LIKE \'sqlite_%\'', |
|
| 1715 | + $serveur, |
|
| 1716 | + $requeter |
|
| 1717 | + ); |
|
| 1718 | + if (!$requeter) { |
|
| 1719 | + return $r; |
|
| 1720 | + } |
|
| 1721 | + $res = spip_sqlite_fetch($r); |
|
| 1722 | + return (bool) $res; |
|
| 1723 | 1723 | } |
| 1724 | 1724 | |
| 1725 | 1725 | define('_SQLITE_RE_SHOW_TABLE', '/^[^(),]*\(((?:[^()]*\((?:[^()]*\([^()]*\))?[^()]*\)[^()]*)*[^()]*)\)[^()]*$/'); |
@@ -1742,129 +1742,129 @@ discard block |
||
| 1742 | 1742 | * - array description de la table sinon |
| 1743 | 1743 | */ |
| 1744 | 1744 | function spip_sqlite_showtable($nom_table, $serveur = '', $requeter = true) { |
| 1745 | - $query = |
|
| 1746 | - 'SELECT sql, type FROM' |
|
| 1747 | - . ' (SELECT * FROM sqlite_master UNION ALL' |
|
| 1748 | - . ' SELECT * FROM sqlite_temp_master)' |
|
| 1749 | - . " WHERE tbl_name LIKE '$nom_table'" |
|
| 1750 | - . " AND type!='meta' AND sql NOT NULL AND name NOT LIKE 'sqlite_%'" |
|
| 1751 | - . ' ORDER BY substr(type,2,1), name'; |
|
| 1752 | - |
|
| 1753 | - $a = spip_sqlite_query($query, $serveur, $requeter); |
|
| 1754 | - if (!$a) { |
|
| 1755 | - return ''; |
|
| 1756 | - } |
|
| 1757 | - if (!$requeter) { |
|
| 1758 | - return $a; |
|
| 1759 | - } |
|
| 1760 | - if (!($a = spip_sqlite_fetch($a, null, $serveur))) { |
|
| 1761 | - return ''; |
|
| 1762 | - } |
|
| 1763 | - $vue = ($a['type'] == 'view'); // table | vue |
|
| 1764 | - |
|
| 1765 | - // c'est une table |
|
| 1766 | - // il faut parser le create |
|
| 1767 | - if (!$vue) { |
|
| 1768 | - if (!preg_match(_SQLITE_RE_SHOW_TABLE, array_shift($a), $r)) { |
|
| 1769 | - return ''; |
|
| 1770 | - } else { |
|
| 1771 | - $desc = $r[1]; |
|
| 1772 | - // extraction d'une KEY éventuelle en prenant garde de ne pas |
|
| 1773 | - // relever un champ dont le nom contient KEY (ex. ID_WHISKEY) |
|
| 1774 | - if (preg_match('/^(.*?),([^,]*\sKEY[ (].*)$/s', $desc, $r)) { |
|
| 1775 | - $namedkeys = $r[2]; |
|
| 1776 | - $desc = $r[1]; |
|
| 1777 | - } else { |
|
| 1778 | - $namedkeys = ''; |
|
| 1779 | - } |
|
| 1780 | - |
|
| 1781 | - $fields = []; |
|
| 1782 | - $keys = []; |
|
| 1783 | - |
|
| 1784 | - // enlever les contenus des valeurs DEFAULT 'xxx' qui pourraient perturber |
|
| 1785 | - // par exemple s'il contiennent une virgule. |
|
| 1786 | - // /!\ cela peut aussi echapper le nom des champs si la table a eu des operations avec SQLite Manager ! |
|
| 1787 | - list($desc, $echaps) = query_echappe_textes($desc); |
|
| 1788 | - |
|
| 1789 | - // separer toutes les descriptions de champs, separes par des virgules |
|
| 1790 | - # /!\ explode peut exploser aussi DECIMAL(10,2) ! |
|
| 1791 | - $k_precedent = null; |
|
| 1792 | - foreach (explode(',', $desc) as $v) { |
|
| 1793 | - preg_match('/^\s*([^\s]+)\s+(.*)/', $v, $r); |
|
| 1794 | - // Les cles de champs peuvent etre entourees |
|
| 1795 | - // de guillements doubles " , simples ', graves ` ou de crochets [ ], ou rien. |
|
| 1796 | - // http://www.sqlite.org/lang_keywords.html |
|
| 1797 | - $k = strtolower(query_reinjecte_textes($r[1], $echaps)); // champ, "champ", [champ]... |
|
| 1798 | - if ($char = strpbrk($k[0], '\'"[`')) { |
|
| 1799 | - $k = trim($k, $char); |
|
| 1800 | - if ($char == '[') { |
|
| 1801 | - $k = rtrim($k, ']'); |
|
| 1802 | - } |
|
| 1803 | - } |
|
| 1804 | - $def = query_reinjecte_textes($r[2], $echaps); // valeur du champ |
|
| 1805 | - |
|
| 1806 | - // rustine pour DECIMAL(10,2) |
|
| 1807 | - // s'il y a une parenthèse fermante dans la clé |
|
| 1808 | - // ou dans la définition sans qu'il n'y ait une ouverture avant |
|
| 1809 | - if (false !== strpos($k, ')') or preg_match('/^[^\(]*\)/', $def)) { |
|
| 1810 | - $fields[$k_precedent] .= ',' . $k . ' ' . $def; |
|
| 1811 | - continue; |
|
| 1812 | - } |
|
| 1813 | - |
|
| 1814 | - // la primary key peut etre dans une des descriptions de champs |
|
| 1815 | - // et non en fin de table, cas encore decouvert avec Sqlite Manager |
|
| 1816 | - if (stripos($r[2], 'PRIMARY KEY') !== false) { |
|
| 1817 | - $keys['PRIMARY KEY'] = $k; |
|
| 1818 | - } |
|
| 1819 | - |
|
| 1820 | - $fields[$k] = $def; |
|
| 1821 | - $k_precedent = $k; |
|
| 1822 | - } |
|
| 1823 | - // key inclues dans la requete |
|
| 1824 | - foreach (preg_split('/\)\s*(,|$)/', $namedkeys) as $v) { |
|
| 1825 | - if (preg_match('/^\s*([^(]*)\(([^(]*(\(\d+\))?)$/', $v, $r)) { |
|
| 1826 | - $k = str_replace('`', '', trim($r[1])); |
|
| 1827 | - $t = trim(strtolower(str_replace('`', '', $r[2])), '"'); |
|
| 1828 | - if ($k && !isset($keys[$k])) { |
|
| 1829 | - $keys[$k] = $t; |
|
| 1830 | - } else { |
|
| 1831 | - $keys[] = $t; |
|
| 1832 | - } |
|
| 1833 | - } |
|
| 1834 | - } |
|
| 1835 | - // sinon ajouter les key index |
|
| 1836 | - $query = |
|
| 1837 | - 'SELECT name,sql FROM' |
|
| 1838 | - . ' (SELECT * FROM sqlite_master UNION ALL' |
|
| 1839 | - . ' SELECT * FROM sqlite_temp_master)' |
|
| 1840 | - . " WHERE tbl_name LIKE '$nom_table'" |
|
| 1841 | - . " AND type='index' AND name NOT LIKE 'sqlite_%'" |
|
| 1842 | - . 'ORDER BY substr(type,2,1), name'; |
|
| 1843 | - $a = spip_sqlite_query($query, $serveur, $requeter); |
|
| 1844 | - while ($r = spip_sqlite_fetch($a, null, $serveur)) { |
|
| 1845 | - $key = str_replace($nom_table . '_', '', $r['name']); // enlever le nom de la table ajoute a l'index |
|
| 1846 | - $keytype = 'KEY'; |
|
| 1847 | - if (strpos($r['sql'], 'UNIQUE INDEX') !== false) { |
|
| 1848 | - $keytype = 'UNIQUE KEY'; |
|
| 1849 | - } |
|
| 1850 | - $colonnes = preg_replace(',.*\((.*)\).*,', '$1', $r['sql']); |
|
| 1851 | - $keys[$keytype . ' ' . $key] = $colonnes; |
|
| 1852 | - } |
|
| 1853 | - } |
|
| 1854 | - } // c'est une vue, on liste les champs disponibles simplement |
|
| 1855 | - else { |
|
| 1856 | - if ($res = sql_fetsel('*', $nom_table, '', '', '', '1', '', $serveur)) { // limit 1 |
|
| 1857 | - $fields = []; |
|
| 1858 | - foreach ($res as $c => $v) { |
|
| 1859 | - $fields[$c] = ''; |
|
| 1860 | - } |
|
| 1861 | - $keys = []; |
|
| 1862 | - } else { |
|
| 1863 | - return ''; |
|
| 1864 | - } |
|
| 1865 | - } |
|
| 1866 | - |
|
| 1867 | - return ['field' => $fields, 'key' => $keys]; |
|
| 1745 | + $query = |
|
| 1746 | + 'SELECT sql, type FROM' |
|
| 1747 | + . ' (SELECT * FROM sqlite_master UNION ALL' |
|
| 1748 | + . ' SELECT * FROM sqlite_temp_master)' |
|
| 1749 | + . " WHERE tbl_name LIKE '$nom_table'" |
|
| 1750 | + . " AND type!='meta' AND sql NOT NULL AND name NOT LIKE 'sqlite_%'" |
|
| 1751 | + . ' ORDER BY substr(type,2,1), name'; |
|
| 1752 | + |
|
| 1753 | + $a = spip_sqlite_query($query, $serveur, $requeter); |
|
| 1754 | + if (!$a) { |
|
| 1755 | + return ''; |
|
| 1756 | + } |
|
| 1757 | + if (!$requeter) { |
|
| 1758 | + return $a; |
|
| 1759 | + } |
|
| 1760 | + if (!($a = spip_sqlite_fetch($a, null, $serveur))) { |
|
| 1761 | + return ''; |
|
| 1762 | + } |
|
| 1763 | + $vue = ($a['type'] == 'view'); // table | vue |
|
| 1764 | + |
|
| 1765 | + // c'est une table |
|
| 1766 | + // il faut parser le create |
|
| 1767 | + if (!$vue) { |
|
| 1768 | + if (!preg_match(_SQLITE_RE_SHOW_TABLE, array_shift($a), $r)) { |
|
| 1769 | + return ''; |
|
| 1770 | + } else { |
|
| 1771 | + $desc = $r[1]; |
|
| 1772 | + // extraction d'une KEY éventuelle en prenant garde de ne pas |
|
| 1773 | + // relever un champ dont le nom contient KEY (ex. ID_WHISKEY) |
|
| 1774 | + if (preg_match('/^(.*?),([^,]*\sKEY[ (].*)$/s', $desc, $r)) { |
|
| 1775 | + $namedkeys = $r[2]; |
|
| 1776 | + $desc = $r[1]; |
|
| 1777 | + } else { |
|
| 1778 | + $namedkeys = ''; |
|
| 1779 | + } |
|
| 1780 | + |
|
| 1781 | + $fields = []; |
|
| 1782 | + $keys = []; |
|
| 1783 | + |
|
| 1784 | + // enlever les contenus des valeurs DEFAULT 'xxx' qui pourraient perturber |
|
| 1785 | + // par exemple s'il contiennent une virgule. |
|
| 1786 | + // /!\ cela peut aussi echapper le nom des champs si la table a eu des operations avec SQLite Manager ! |
|
| 1787 | + list($desc, $echaps) = query_echappe_textes($desc); |
|
| 1788 | + |
|
| 1789 | + // separer toutes les descriptions de champs, separes par des virgules |
|
| 1790 | + # /!\ explode peut exploser aussi DECIMAL(10,2) ! |
|
| 1791 | + $k_precedent = null; |
|
| 1792 | + foreach (explode(',', $desc) as $v) { |
|
| 1793 | + preg_match('/^\s*([^\s]+)\s+(.*)/', $v, $r); |
|
| 1794 | + // Les cles de champs peuvent etre entourees |
|
| 1795 | + // de guillements doubles " , simples ', graves ` ou de crochets [ ], ou rien. |
|
| 1796 | + // http://www.sqlite.org/lang_keywords.html |
|
| 1797 | + $k = strtolower(query_reinjecte_textes($r[1], $echaps)); // champ, "champ", [champ]... |
|
| 1798 | + if ($char = strpbrk($k[0], '\'"[`')) { |
|
| 1799 | + $k = trim($k, $char); |
|
| 1800 | + if ($char == '[') { |
|
| 1801 | + $k = rtrim($k, ']'); |
|
| 1802 | + } |
|
| 1803 | + } |
|
| 1804 | + $def = query_reinjecte_textes($r[2], $echaps); // valeur du champ |
|
| 1805 | + |
|
| 1806 | + // rustine pour DECIMAL(10,2) |
|
| 1807 | + // s'il y a une parenthèse fermante dans la clé |
|
| 1808 | + // ou dans la définition sans qu'il n'y ait une ouverture avant |
|
| 1809 | + if (false !== strpos($k, ')') or preg_match('/^[^\(]*\)/', $def)) { |
|
| 1810 | + $fields[$k_precedent] .= ',' . $k . ' ' . $def; |
|
| 1811 | + continue; |
|
| 1812 | + } |
|
| 1813 | + |
|
| 1814 | + // la primary key peut etre dans une des descriptions de champs |
|
| 1815 | + // et non en fin de table, cas encore decouvert avec Sqlite Manager |
|
| 1816 | + if (stripos($r[2], 'PRIMARY KEY') !== false) { |
|
| 1817 | + $keys['PRIMARY KEY'] = $k; |
|
| 1818 | + } |
|
| 1819 | + |
|
| 1820 | + $fields[$k] = $def; |
|
| 1821 | + $k_precedent = $k; |
|
| 1822 | + } |
|
| 1823 | + // key inclues dans la requete |
|
| 1824 | + foreach (preg_split('/\)\s*(,|$)/', $namedkeys) as $v) { |
|
| 1825 | + if (preg_match('/^\s*([^(]*)\(([^(]*(\(\d+\))?)$/', $v, $r)) { |
|
| 1826 | + $k = str_replace('`', '', trim($r[1])); |
|
| 1827 | + $t = trim(strtolower(str_replace('`', '', $r[2])), '"'); |
|
| 1828 | + if ($k && !isset($keys[$k])) { |
|
| 1829 | + $keys[$k] = $t; |
|
| 1830 | + } else { |
|
| 1831 | + $keys[] = $t; |
|
| 1832 | + } |
|
| 1833 | + } |
|
| 1834 | + } |
|
| 1835 | + // sinon ajouter les key index |
|
| 1836 | + $query = |
|
| 1837 | + 'SELECT name,sql FROM' |
|
| 1838 | + . ' (SELECT * FROM sqlite_master UNION ALL' |
|
| 1839 | + . ' SELECT * FROM sqlite_temp_master)' |
|
| 1840 | + . " WHERE tbl_name LIKE '$nom_table'" |
|
| 1841 | + . " AND type='index' AND name NOT LIKE 'sqlite_%'" |
|
| 1842 | + . 'ORDER BY substr(type,2,1), name'; |
|
| 1843 | + $a = spip_sqlite_query($query, $serveur, $requeter); |
|
| 1844 | + while ($r = spip_sqlite_fetch($a, null, $serveur)) { |
|
| 1845 | + $key = str_replace($nom_table . '_', '', $r['name']); // enlever le nom de la table ajoute a l'index |
|
| 1846 | + $keytype = 'KEY'; |
|
| 1847 | + if (strpos($r['sql'], 'UNIQUE INDEX') !== false) { |
|
| 1848 | + $keytype = 'UNIQUE KEY'; |
|
| 1849 | + } |
|
| 1850 | + $colonnes = preg_replace(',.*\((.*)\).*,', '$1', $r['sql']); |
|
| 1851 | + $keys[$keytype . ' ' . $key] = $colonnes; |
|
| 1852 | + } |
|
| 1853 | + } |
|
| 1854 | + } // c'est une vue, on liste les champs disponibles simplement |
|
| 1855 | + else { |
|
| 1856 | + if ($res = sql_fetsel('*', $nom_table, '', '', '', '1', '', $serveur)) { // limit 1 |
|
| 1857 | + $fields = []; |
|
| 1858 | + foreach ($res as $c => $v) { |
|
| 1859 | + $fields[$c] = ''; |
|
| 1860 | + } |
|
| 1861 | + $keys = []; |
|
| 1862 | + } else { |
|
| 1863 | + return ''; |
|
| 1864 | + } |
|
| 1865 | + } |
|
| 1866 | + |
|
| 1867 | + return ['field' => $fields, 'key' => $keys]; |
|
| 1868 | 1868 | } |
| 1869 | 1869 | |
| 1870 | 1870 | |
@@ -1890,22 +1890,22 @@ discard block |
||
| 1890 | 1890 | * - array Tableau décrivant la requête et son temps d'exécution si var_profile est actif |
| 1891 | 1891 | */ |
| 1892 | 1892 | function spip_sqlite_update($table, $champs, $where = '', $desc = '', $serveur = '', $requeter = true) { |
| 1893 | - // recherche de champs 'timestamp' pour mise a jour auto de ceux-ci |
|
| 1894 | - $champs = _sqlite_ajouter_champs_timestamp($table, $champs, $desc, $serveur); |
|
| 1893 | + // recherche de champs 'timestamp' pour mise a jour auto de ceux-ci |
|
| 1894 | + $champs = _sqlite_ajouter_champs_timestamp($table, $champs, $desc, $serveur); |
|
| 1895 | 1895 | |
| 1896 | - $set = []; |
|
| 1897 | - foreach ($champs as $champ => $val) { |
|
| 1898 | - $set[] = $champ . "=$val"; |
|
| 1899 | - } |
|
| 1900 | - if (!empty($set)) { |
|
| 1901 | - return spip_sqlite_query( |
|
| 1902 | - _sqlite_calculer_expression('UPDATE', $table, ',') |
|
| 1903 | - . _sqlite_calculer_expression('SET', $set, ',') |
|
| 1904 | - . _sqlite_calculer_expression('WHERE', $where), |
|
| 1905 | - $serveur, |
|
| 1906 | - $requeter |
|
| 1907 | - ); |
|
| 1908 | - } |
|
| 1896 | + $set = []; |
|
| 1897 | + foreach ($champs as $champ => $val) { |
|
| 1898 | + $set[] = $champ . "=$val"; |
|
| 1899 | + } |
|
| 1900 | + if (!empty($set)) { |
|
| 1901 | + return spip_sqlite_query( |
|
| 1902 | + _sqlite_calculer_expression('UPDATE', $table, ',') |
|
| 1903 | + . _sqlite_calculer_expression('SET', $set, ',') |
|
| 1904 | + . _sqlite_calculer_expression('WHERE', $where), |
|
| 1905 | + $serveur, |
|
| 1906 | + $requeter |
|
| 1907 | + ); |
|
| 1908 | + } |
|
| 1909 | 1909 | } |
| 1910 | 1910 | |
| 1911 | 1911 | |
@@ -1935,38 +1935,38 @@ discard block |
||
| 1935 | 1935 | */ |
| 1936 | 1936 | function spip_sqlite_updateq($table, $champs, $where = '', $desc = [], $serveur = '', $requeter = true) { |
| 1937 | 1937 | |
| 1938 | - if (!$champs) { |
|
| 1939 | - return; |
|
| 1940 | - } |
|
| 1941 | - if (!$desc) { |
|
| 1942 | - $desc = description_table($table, $serveur); |
|
| 1943 | - } |
|
| 1944 | - if (!$desc) { |
|
| 1945 | - die("$table insertion sans description"); |
|
| 1946 | - } |
|
| 1947 | - $fields = $desc['field']; |
|
| 1948 | - |
|
| 1949 | - $set = []; |
|
| 1950 | - foreach ($champs as $champ => $val) { |
|
| 1951 | - $set[$champ] = $champ . '=' . _sqlite_calculer_cite($val, isset($fields[$champ]) ? $fields[$champ] : ''); |
|
| 1952 | - } |
|
| 1953 | - |
|
| 1954 | - // recherche de champs 'timestamp' pour mise a jour auto de ceux-ci |
|
| 1955 | - // attention ils sont deja quotes |
|
| 1956 | - $maj = _sqlite_ajouter_champs_timestamp($table, [], $desc, $serveur); |
|
| 1957 | - foreach ($maj as $champ => $val) { |
|
| 1958 | - if (!isset($set[$champ])) { |
|
| 1959 | - $set[$champ] = $champ . '=' . $val; |
|
| 1960 | - } |
|
| 1961 | - } |
|
| 1962 | - |
|
| 1963 | - return spip_sqlite_query( |
|
| 1964 | - _sqlite_calculer_expression('UPDATE', $table, ',') |
|
| 1965 | - . _sqlite_calculer_expression('SET', $set, ',') |
|
| 1966 | - . _sqlite_calculer_expression('WHERE', $where), |
|
| 1967 | - $serveur, |
|
| 1968 | - $requeter |
|
| 1969 | - ); |
|
| 1938 | + if (!$champs) { |
|
| 1939 | + return; |
|
| 1940 | + } |
|
| 1941 | + if (!$desc) { |
|
| 1942 | + $desc = description_table($table, $serveur); |
|
| 1943 | + } |
|
| 1944 | + if (!$desc) { |
|
| 1945 | + die("$table insertion sans description"); |
|
| 1946 | + } |
|
| 1947 | + $fields = $desc['field']; |
|
| 1948 | + |
|
| 1949 | + $set = []; |
|
| 1950 | + foreach ($champs as $champ => $val) { |
|
| 1951 | + $set[$champ] = $champ . '=' . _sqlite_calculer_cite($val, isset($fields[$champ]) ? $fields[$champ] : ''); |
|
| 1952 | + } |
|
| 1953 | + |
|
| 1954 | + // recherche de champs 'timestamp' pour mise a jour auto de ceux-ci |
|
| 1955 | + // attention ils sont deja quotes |
|
| 1956 | + $maj = _sqlite_ajouter_champs_timestamp($table, [], $desc, $serveur); |
|
| 1957 | + foreach ($maj as $champ => $val) { |
|
| 1958 | + if (!isset($set[$champ])) { |
|
| 1959 | + $set[$champ] = $champ . '=' . $val; |
|
| 1960 | + } |
|
| 1961 | + } |
|
| 1962 | + |
|
| 1963 | + return spip_sqlite_query( |
|
| 1964 | + _sqlite_calculer_expression('UPDATE', $table, ',') |
|
| 1965 | + . _sqlite_calculer_expression('SET', $set, ',') |
|
| 1966 | + . _sqlite_calculer_expression('WHERE', $where), |
|
| 1967 | + $serveur, |
|
| 1968 | + $requeter |
|
| 1969 | + ); |
|
| 1970 | 1970 | } |
| 1971 | 1971 | |
| 1972 | 1972 | |
@@ -1984,17 +1984,17 @@ discard block |
||
| 1984 | 1984 | * @return void |
| 1985 | 1985 | */ |
| 1986 | 1986 | function _sqlite_init() { |
| 1987 | - if (!defined('_DIR_DB')) { |
|
| 1988 | - define('_DIR_DB', _DIR_ETC . 'bases/'); |
|
| 1989 | - } |
|
| 1990 | - if (!defined('_SQLITE_CHMOD')) { |
|
| 1991 | - define('_SQLITE_CHMOD', _SPIP_CHMOD); |
|
| 1992 | - } |
|
| 1987 | + if (!defined('_DIR_DB')) { |
|
| 1988 | + define('_DIR_DB', _DIR_ETC . 'bases/'); |
|
| 1989 | + } |
|
| 1990 | + if (!defined('_SQLITE_CHMOD')) { |
|
| 1991 | + define('_SQLITE_CHMOD', _SPIP_CHMOD); |
|
| 1992 | + } |
|
| 1993 | 1993 | |
| 1994 | - if (!is_dir($d = _DIR_DB)) { |
|
| 1995 | - include_spip('inc/flock'); |
|
| 1996 | - sous_repertoire($d); |
|
| 1997 | - } |
|
| 1994 | + if (!is_dir($d = _DIR_DB)) { |
|
| 1995 | + include_spip('inc/flock'); |
|
| 1996 | + sous_repertoire($d); |
|
| 1997 | + } |
|
| 1998 | 1998 | } |
| 1999 | 1999 | |
| 2000 | 2000 | |
@@ -2008,20 +2008,20 @@ discard block |
||
| 2008 | 2008 | * @return bool|int |
| 2009 | 2009 | */ |
| 2010 | 2010 | function _sqlite_is_version($version = '', $link = '', $serveur = '', $requeter = true) { |
| 2011 | - if ($link === '') { |
|
| 2012 | - $link = _sqlite_link($serveur); |
|
| 2013 | - } |
|
| 2014 | - if (!$link) { |
|
| 2015 | - return false; |
|
| 2016 | - } |
|
| 2011 | + if ($link === '') { |
|
| 2012 | + $link = _sqlite_link($serveur); |
|
| 2013 | + } |
|
| 2014 | + if (!$link) { |
|
| 2015 | + return false; |
|
| 2016 | + } |
|
| 2017 | 2017 | |
| 2018 | - $v = 3; |
|
| 2018 | + $v = 3; |
|
| 2019 | 2019 | |
| 2020 | - if (!$version) { |
|
| 2021 | - return $v; |
|
| 2022 | - } |
|
| 2020 | + if (!$version) { |
|
| 2021 | + return $v; |
|
| 2022 | + } |
|
| 2023 | 2023 | |
| 2024 | - return ($version == $v); |
|
| 2024 | + return ($version == $v); |
|
| 2025 | 2025 | } |
| 2026 | 2026 | |
| 2027 | 2027 | |
@@ -2032,9 +2032,9 @@ discard block |
||
| 2032 | 2032 | * @return Object Information de connexion pour SQLite |
| 2033 | 2033 | */ |
| 2034 | 2034 | function _sqlite_link($serveur = '') { |
| 2035 | - $link = &$GLOBALS['connexions'][$serveur ? $serveur : 0]['link']; |
|
| 2035 | + $link = &$GLOBALS['connexions'][$serveur ? $serveur : 0]['link']; |
|
| 2036 | 2036 | |
| 2037 | - return $link; |
|
| 2037 | + return $link; |
|
| 2038 | 2038 | } |
| 2039 | 2039 | |
| 2040 | 2040 | |
@@ -2049,52 +2049,52 @@ discard block |
||
| 2049 | 2049 | * @return string|number Texte ou nombre échappé |
| 2050 | 2050 | */ |
| 2051 | 2051 | function _sqlite_calculer_cite($v, $type) { |
| 2052 | - if ($type) { |
|
| 2053 | - if ( |
|
| 2054 | - is_null($v) |
|
| 2055 | - and stripos($type, 'NOT NULL') === false |
|
| 2056 | - ) { |
|
| 2057 | - return 'NULL'; |
|
| 2058 | - } // null php se traduit en NULL SQL |
|
| 2059 | - |
|
| 2060 | - if (sql_test_date($type) and preg_match('/^\w+\(/', $v)) { |
|
| 2061 | - return $v; |
|
| 2062 | - } |
|
| 2063 | - if (sql_test_int($type)) { |
|
| 2064 | - if (is_numeric($v)) { |
|
| 2065 | - return $v; |
|
| 2066 | - } elseif (ctype_xdigit(substr($v, 2)) and strncmp($v, '0x', 2) == 0) { |
|
| 2067 | - return hexdec(substr($v, 2)); |
|
| 2068 | - } else { |
|
| 2069 | - return intval($v); |
|
| 2070 | - } |
|
| 2071 | - } |
|
| 2072 | - } else { |
|
| 2073 | - // si on ne connait pas le type on le deduit de $v autant que possible |
|
| 2074 | - if (is_bool($v)) { |
|
| 2075 | - return strval(intval($v)); |
|
| 2076 | - } |
|
| 2077 | - elseif (is_numeric($v)) { |
|
| 2078 | - return strval($v); |
|
| 2079 | - } |
|
| 2080 | - } |
|
| 2081 | - |
|
| 2082 | - // trouver un link sqlite pour faire l'echappement |
|
| 2083 | - foreach ($GLOBALS['connexions'] as $s) { |
|
| 2084 | - if ( |
|
| 2085 | - $l = $s['link'] |
|
| 2086 | - and is_object($l) |
|
| 2087 | - and $l instanceof \PDO |
|
| 2088 | - and $l->getAttribute(\PDO::ATTR_DRIVER_NAME) === 'sqlite' |
|
| 2089 | - ) { |
|
| 2090 | - return $l->quote($v); |
|
| 2091 | - } |
|
| 2092 | - } |
|
| 2093 | - |
|
| 2094 | - // echapper les ' en '' |
|
| 2095 | - spip_log('Pas de methode ->quote pour echapper', 'sqlite.' . _LOG_INFO_IMPORTANTE); |
|
| 2096 | - |
|
| 2097 | - return ("'" . str_replace("'", "''", $v) . "'"); |
|
| 2052 | + if ($type) { |
|
| 2053 | + if ( |
|
| 2054 | + is_null($v) |
|
| 2055 | + and stripos($type, 'NOT NULL') === false |
|
| 2056 | + ) { |
|
| 2057 | + return 'NULL'; |
|
| 2058 | + } // null php se traduit en NULL SQL |
|
| 2059 | + |
|
| 2060 | + if (sql_test_date($type) and preg_match('/^\w+\(/', $v)) { |
|
| 2061 | + return $v; |
|
| 2062 | + } |
|
| 2063 | + if (sql_test_int($type)) { |
|
| 2064 | + if (is_numeric($v)) { |
|
| 2065 | + return $v; |
|
| 2066 | + } elseif (ctype_xdigit(substr($v, 2)) and strncmp($v, '0x', 2) == 0) { |
|
| 2067 | + return hexdec(substr($v, 2)); |
|
| 2068 | + } else { |
|
| 2069 | + return intval($v); |
|
| 2070 | + } |
|
| 2071 | + } |
|
| 2072 | + } else { |
|
| 2073 | + // si on ne connait pas le type on le deduit de $v autant que possible |
|
| 2074 | + if (is_bool($v)) { |
|
| 2075 | + return strval(intval($v)); |
|
| 2076 | + } |
|
| 2077 | + elseif (is_numeric($v)) { |
|
| 2078 | + return strval($v); |
|
| 2079 | + } |
|
| 2080 | + } |
|
| 2081 | + |
|
| 2082 | + // trouver un link sqlite pour faire l'echappement |
|
| 2083 | + foreach ($GLOBALS['connexions'] as $s) { |
|
| 2084 | + if ( |
|
| 2085 | + $l = $s['link'] |
|
| 2086 | + and is_object($l) |
|
| 2087 | + and $l instanceof \PDO |
|
| 2088 | + and $l->getAttribute(\PDO::ATTR_DRIVER_NAME) === 'sqlite' |
|
| 2089 | + ) { |
|
| 2090 | + return $l->quote($v); |
|
| 2091 | + } |
|
| 2092 | + } |
|
| 2093 | + |
|
| 2094 | + // echapper les ' en '' |
|
| 2095 | + spip_log('Pas de methode ->quote pour echapper', 'sqlite.' . _LOG_INFO_IMPORTANTE); |
|
| 2096 | + |
|
| 2097 | + return ("'" . str_replace("'", "''", $v) . "'"); |
|
| 2098 | 2098 | } |
| 2099 | 2099 | |
| 2100 | 2100 | |
@@ -2110,21 +2110,21 @@ discard block |
||
| 2110 | 2110 | * @return string Texte de l'expression, une partie donc, du texte la requête. |
| 2111 | 2111 | */ |
| 2112 | 2112 | function _sqlite_calculer_expression($expression, $v, $join = 'AND') { |
| 2113 | - if (empty($v)) { |
|
| 2114 | - return ''; |
|
| 2115 | - } |
|
| 2113 | + if (empty($v)) { |
|
| 2114 | + return ''; |
|
| 2115 | + } |
|
| 2116 | 2116 | |
| 2117 | - $exp = "\n$expression "; |
|
| 2117 | + $exp = "\n$expression "; |
|
| 2118 | 2118 | |
| 2119 | - if (!is_array($v)) { |
|
| 2120 | - return $exp . $v; |
|
| 2121 | - } else { |
|
| 2122 | - if (strtoupper($join) === 'AND') { |
|
| 2123 | - return $exp . join("\n\t$join ", array_map('_sqlite_calculer_where', $v)); |
|
| 2124 | - } else { |
|
| 2125 | - return $exp . join($join, $v); |
|
| 2126 | - } |
|
| 2127 | - } |
|
| 2119 | + if (!is_array($v)) { |
|
| 2120 | + return $exp . $v; |
|
| 2121 | + } else { |
|
| 2122 | + if (strtoupper($join) === 'AND') { |
|
| 2123 | + return $exp . join("\n\t$join ", array_map('_sqlite_calculer_where', $v)); |
|
| 2124 | + } else { |
|
| 2125 | + return $exp . join($join, $v); |
|
| 2126 | + } |
|
| 2127 | + } |
|
| 2128 | 2128 | } |
| 2129 | 2129 | |
| 2130 | 2130 | |
@@ -2140,7 +2140,7 @@ discard block |
||
| 2140 | 2140 | * @return string Texte du orderby préparé |
| 2141 | 2141 | */ |
| 2142 | 2142 | function _sqlite_calculer_order($orderby) { |
| 2143 | - return (is_array($orderby)) ? join(', ', $orderby) : $orderby; |
|
| 2143 | + return (is_array($orderby)) ? join(', ', $orderby) : $orderby; |
|
| 2144 | 2144 | } |
| 2145 | 2145 | |
| 2146 | 2146 | |
@@ -2151,26 +2151,26 @@ discard block |
||
| 2151 | 2151 | * @return string Sélection de colonnes pour une clause SELECT |
| 2152 | 2152 | */ |
| 2153 | 2153 | function _sqlite_calculer_select_as($args) { |
| 2154 | - $res = ''; |
|
| 2155 | - foreach ($args as $k => $v) { |
|
| 2156 | - if (substr($k, -1) == '@') { |
|
| 2157 | - // c'est une jointure qui se refere au from precedent |
|
| 2158 | - // pas de virgule |
|
| 2159 | - $res .= ' ' . $v; |
|
| 2160 | - } else { |
|
| 2161 | - if (!is_numeric($k)) { |
|
| 2162 | - $p = strpos($v, ' '); |
|
| 2163 | - if ($p) { |
|
| 2164 | - $v = substr($v, 0, $p) . " AS '$k'" . substr($v, $p); |
|
| 2165 | - } else { |
|
| 2166 | - $v .= " AS '$k'"; |
|
| 2167 | - } |
|
| 2168 | - } |
|
| 2169 | - $res .= ', ' . $v; |
|
| 2170 | - } |
|
| 2171 | - } |
|
| 2172 | - |
|
| 2173 | - return substr($res, 2); |
|
| 2154 | + $res = ''; |
|
| 2155 | + foreach ($args as $k => $v) { |
|
| 2156 | + if (substr($k, -1) == '@') { |
|
| 2157 | + // c'est une jointure qui se refere au from precedent |
|
| 2158 | + // pas de virgule |
|
| 2159 | + $res .= ' ' . $v; |
|
| 2160 | + } else { |
|
| 2161 | + if (!is_numeric($k)) { |
|
| 2162 | + $p = strpos($v, ' '); |
|
| 2163 | + if ($p) { |
|
| 2164 | + $v = substr($v, 0, $p) . " AS '$k'" . substr($v, $p); |
|
| 2165 | + } else { |
|
| 2166 | + $v .= " AS '$k'"; |
|
| 2167 | + } |
|
| 2168 | + } |
|
| 2169 | + $res .= ', ' . $v; |
|
| 2170 | + } |
|
| 2171 | + } |
|
| 2172 | + |
|
| 2173 | + return substr($res, 2); |
|
| 2174 | 2174 | } |
| 2175 | 2175 | |
| 2176 | 2176 | |
@@ -2193,26 +2193,26 @@ discard block |
||
| 2193 | 2193 | * Contrainte pour clause WHERE |
| 2194 | 2194 | */ |
| 2195 | 2195 | function _sqlite_calculer_where($v) { |
| 2196 | - if (!is_array($v)) { |
|
| 2197 | - return $v; |
|
| 2198 | - } |
|
| 2199 | - |
|
| 2200 | - $op = array_shift($v); |
|
| 2201 | - if (!($n = count($v))) { |
|
| 2202 | - return $op; |
|
| 2203 | - } else { |
|
| 2204 | - $arg = _sqlite_calculer_where(array_shift($v)); |
|
| 2205 | - if ($n == 1) { |
|
| 2206 | - return "$op($arg)"; |
|
| 2207 | - } else { |
|
| 2208 | - $arg2 = _sqlite_calculer_where(array_shift($v)); |
|
| 2209 | - if ($n == 2) { |
|
| 2210 | - return "($arg $op $arg2)"; |
|
| 2211 | - } else { |
|
| 2212 | - return "($arg $op ($arg2) : $v[0])"; |
|
| 2213 | - } |
|
| 2214 | - } |
|
| 2215 | - } |
|
| 2196 | + if (!is_array($v)) { |
|
| 2197 | + return $v; |
|
| 2198 | + } |
|
| 2199 | + |
|
| 2200 | + $op = array_shift($v); |
|
| 2201 | + if (!($n = count($v))) { |
|
| 2202 | + return $op; |
|
| 2203 | + } else { |
|
| 2204 | + $arg = _sqlite_calculer_where(array_shift($v)); |
|
| 2205 | + if ($n == 1) { |
|
| 2206 | + return "$op($arg)"; |
|
| 2207 | + } else { |
|
| 2208 | + $arg2 = _sqlite_calculer_where(array_shift($v)); |
|
| 2209 | + if ($n == 2) { |
|
| 2210 | + return "($arg $op $arg2)"; |
|
| 2211 | + } else { |
|
| 2212 | + return "($arg $op ($arg2) : $v[0])"; |
|
| 2213 | + } |
|
| 2214 | + } |
|
| 2215 | + } |
|
| 2216 | 2216 | } |
| 2217 | 2217 | |
| 2218 | 2218 | |
@@ -2227,19 +2227,19 @@ discard block |
||
| 2227 | 2227 | * @return array|bool |
| 2228 | 2228 | */ |
| 2229 | 2229 | function _sqlite_charger_version($version = '') { |
| 2230 | - $versions = []; |
|
| 2230 | + $versions = []; |
|
| 2231 | 2231 | |
| 2232 | - // version 3 |
|
| 2233 | - if (!$version || $version == 3) { |
|
| 2234 | - if (extension_loaded('pdo') && extension_loaded('pdo_sqlite')) { |
|
| 2235 | - $versions[] = 3; |
|
| 2236 | - } |
|
| 2237 | - } |
|
| 2238 | - if ($version) { |
|
| 2239 | - return in_array($version, $versions); |
|
| 2240 | - } |
|
| 2232 | + // version 3 |
|
| 2233 | + if (!$version || $version == 3) { |
|
| 2234 | + if (extension_loaded('pdo') && extension_loaded('pdo_sqlite')) { |
|
| 2235 | + $versions[] = 3; |
|
| 2236 | + } |
|
| 2237 | + } |
|
| 2238 | + if ($version) { |
|
| 2239 | + return in_array($version, $versions); |
|
| 2240 | + } |
|
| 2241 | 2241 | |
| 2242 | - return $versions; |
|
| 2242 | + return $versions; |
|
| 2243 | 2243 | } |
| 2244 | 2244 | |
| 2245 | 2245 | |
@@ -2277,147 +2277,147 @@ discard block |
||
| 2277 | 2277 | */ |
| 2278 | 2278 | function _sqlite_modifier_table($table, $colonne, $opt = [], $serveur = '') { |
| 2279 | 2279 | |
| 2280 | - if (is_array($table)) { |
|
| 2281 | - $table_destination = reset($table); |
|
| 2282 | - $table_origine = key($table); |
|
| 2283 | - } else { |
|
| 2284 | - $table_origine = $table_destination = $table; |
|
| 2285 | - } |
|
| 2286 | - // ne prend actuellement qu'un changement |
|
| 2287 | - // mais pourra etre adapte pour changer plus qu'une colonne a la fois |
|
| 2288 | - if (is_array($colonne)) { |
|
| 2289 | - $colonne_destination = reset($colonne); |
|
| 2290 | - $colonne_origine = key($colonne); |
|
| 2291 | - } else { |
|
| 2292 | - $colonne_origine = $colonne_destination = $colonne; |
|
| 2293 | - } |
|
| 2294 | - if (!isset($opt['field'])) { |
|
| 2295 | - $opt['field'] = []; |
|
| 2296 | - } |
|
| 2297 | - if (!isset($opt['key'])) { |
|
| 2298 | - $opt['key'] = []; |
|
| 2299 | - } |
|
| 2300 | - |
|
| 2301 | - // si les noms de tables sont differents, pas besoin de table temporaire |
|
| 2302 | - // on prendra directement le nom de la future table |
|
| 2303 | - $meme_table = ($table_origine == $table_destination); |
|
| 2304 | - |
|
| 2305 | - $def_origine = sql_showtable($table_origine, false, $serveur); |
|
| 2306 | - if (!$def_origine or !isset($def_origine['field'])) { |
|
| 2307 | - spip_log("Alter table impossible sur $table_origine : table non trouvee", 'sqlite' . _LOG_ERREUR); |
|
| 2308 | - |
|
| 2309 | - return false; |
|
| 2310 | - } |
|
| 2311 | - |
|
| 2312 | - |
|
| 2313 | - $table_tmp = $table_origine . '_tmp'; |
|
| 2314 | - |
|
| 2315 | - // 1) creer une table temporaire avec les modifications |
|
| 2316 | - // - DROP : suppression de la colonne |
|
| 2317 | - // - CHANGE : modification de la colonne |
|
| 2318 | - // (foreach pour conserver l'ordre des champs) |
|
| 2319 | - |
|
| 2320 | - // field |
|
| 2321 | - $fields = []; |
|
| 2322 | - // pour le INSERT INTO plus loin |
|
| 2323 | - // stocker la correspondance nouvelles->anciennes colonnes |
|
| 2324 | - $fields_correspondances = []; |
|
| 2325 | - foreach ($def_origine['field'] as $c => $d) { |
|
| 2326 | - if ($colonne_origine && ($c == $colonne_origine)) { |
|
| 2327 | - // si pas DROP |
|
| 2328 | - if ($colonne_destination) { |
|
| 2329 | - $fields[$colonne_destination] = $opt['field'][$colonne_destination]; |
|
| 2330 | - $fields_correspondances[$colonne_destination] = $c; |
|
| 2331 | - } |
|
| 2332 | - } else { |
|
| 2333 | - $fields[$c] = $d; |
|
| 2334 | - $fields_correspondances[$c] = $c; |
|
| 2335 | - } |
|
| 2336 | - } |
|
| 2337 | - // cas de ADD sqlite2 (ajout du champ en fin de table): |
|
| 2338 | - if (!$colonne_origine && $colonne_destination) { |
|
| 2339 | - $fields[$colonne_destination] = $opt['field'][$colonne_destination]; |
|
| 2340 | - } |
|
| 2341 | - |
|
| 2342 | - // key... |
|
| 2343 | - $keys = []; |
|
| 2344 | - foreach ($def_origine['key'] as $c => $d) { |
|
| 2345 | - $c = str_replace($colonne_origine, $colonne_destination, $c); |
|
| 2346 | - $d = str_replace($colonne_origine, $colonne_destination, $d); |
|
| 2347 | - // seulement si on ne supprime pas la colonne ! |
|
| 2348 | - if ($d) { |
|
| 2349 | - $keys[$c] = $d; |
|
| 2350 | - } |
|
| 2351 | - } |
|
| 2352 | - |
|
| 2353 | - // autres keys, on merge |
|
| 2354 | - $keys = array_merge($keys, $opt['key']); |
|
| 2355 | - $queries = []; |
|
| 2356 | - |
|
| 2357 | - // copier dans destination (si differente de origine), sinon tmp |
|
| 2358 | - $table_copie = ($meme_table) ? $table_tmp : $table_destination; |
|
| 2359 | - $autoinc = (isset($keys['PRIMARY KEY']) |
|
| 2360 | - and $keys['PRIMARY KEY'] |
|
| 2361 | - and stripos($keys['PRIMARY KEY'], ',') === false |
|
| 2362 | - and stripos($fields[$keys['PRIMARY KEY']], 'default') === false); |
|
| 2363 | - |
|
| 2364 | - if ( |
|
| 2365 | - $q = _sqlite_requete_create( |
|
| 2366 | - $table_copie, |
|
| 2367 | - $fields, |
|
| 2368 | - $keys, |
|
| 2369 | - $autoinc, |
|
| 2370 | - $temporary = false, |
|
| 2371 | - $ifnotexists = true, |
|
| 2372 | - $serveur |
|
| 2373 | - ) |
|
| 2374 | - ) { |
|
| 2375 | - $queries[] = $q; |
|
| 2376 | - } |
|
| 2377 | - |
|
| 2378 | - |
|
| 2379 | - // 2) y copier les champs qui vont bien |
|
| 2380 | - $champs_dest = join(', ', array_keys($fields_correspondances)); |
|
| 2381 | - $champs_ori = join(', ', $fields_correspondances); |
|
| 2382 | - $queries[] = "INSERT INTO $table_copie ($champs_dest) SELECT $champs_ori FROM $table_origine"; |
|
| 2383 | - |
|
| 2384 | - // 3) supprimer la table d'origine |
|
| 2385 | - $queries[] = "DROP TABLE $table_origine"; |
|
| 2386 | - |
|
| 2387 | - // 4) renommer la table temporaire |
|
| 2388 | - // avec le nom de la table destination |
|
| 2389 | - // si necessaire |
|
| 2390 | - if ($meme_table) { |
|
| 2391 | - $queries[] = "ALTER TABLE $table_copie RENAME TO $table_destination"; |
|
| 2392 | - } |
|
| 2393 | - |
|
| 2394 | - // 5) remettre les index ! |
|
| 2395 | - foreach ($keys as $k => $v) { |
|
| 2396 | - if ($k == 'PRIMARY KEY') { |
|
| 2397 | - } else { |
|
| 2398 | - // enlever KEY |
|
| 2399 | - $k = substr($k, 4); |
|
| 2400 | - $queries[] = "CREATE INDEX $table_destination" . "_$k ON $table_destination ($v)"; |
|
| 2401 | - } |
|
| 2402 | - } |
|
| 2403 | - |
|
| 2404 | - |
|
| 2405 | - if (count($queries)) { |
|
| 2406 | - spip_sqlite::demarrer_transaction($serveur); |
|
| 2407 | - // il faut les faire une par une car $query = join('; ', $queries).";"; ne fonctionne pas |
|
| 2408 | - foreach ($queries as $q) { |
|
| 2409 | - if (!spip_sqlite::executer_requete($q, $serveur)) { |
|
| 2410 | - spip_log('SQLite : ALTER TABLE table :' |
|
| 2411 | - . " Erreur a l'execution de la requete : $q", 'sqlite.' . _LOG_ERREUR); |
|
| 2412 | - spip_sqlite::annuler_transaction($serveur); |
|
| 2413 | - |
|
| 2414 | - return false; |
|
| 2415 | - } |
|
| 2416 | - } |
|
| 2417 | - spip_sqlite::finir_transaction($serveur); |
|
| 2418 | - } |
|
| 2419 | - |
|
| 2420 | - return true; |
|
| 2280 | + if (is_array($table)) { |
|
| 2281 | + $table_destination = reset($table); |
|
| 2282 | + $table_origine = key($table); |
|
| 2283 | + } else { |
|
| 2284 | + $table_origine = $table_destination = $table; |
|
| 2285 | + } |
|
| 2286 | + // ne prend actuellement qu'un changement |
|
| 2287 | + // mais pourra etre adapte pour changer plus qu'une colonne a la fois |
|
| 2288 | + if (is_array($colonne)) { |
|
| 2289 | + $colonne_destination = reset($colonne); |
|
| 2290 | + $colonne_origine = key($colonne); |
|
| 2291 | + } else { |
|
| 2292 | + $colonne_origine = $colonne_destination = $colonne; |
|
| 2293 | + } |
|
| 2294 | + if (!isset($opt['field'])) { |
|
| 2295 | + $opt['field'] = []; |
|
| 2296 | + } |
|
| 2297 | + if (!isset($opt['key'])) { |
|
| 2298 | + $opt['key'] = []; |
|
| 2299 | + } |
|
| 2300 | + |
|
| 2301 | + // si les noms de tables sont differents, pas besoin de table temporaire |
|
| 2302 | + // on prendra directement le nom de la future table |
|
| 2303 | + $meme_table = ($table_origine == $table_destination); |
|
| 2304 | + |
|
| 2305 | + $def_origine = sql_showtable($table_origine, false, $serveur); |
|
| 2306 | + if (!$def_origine or !isset($def_origine['field'])) { |
|
| 2307 | + spip_log("Alter table impossible sur $table_origine : table non trouvee", 'sqlite' . _LOG_ERREUR); |
|
| 2308 | + |
|
| 2309 | + return false; |
|
| 2310 | + } |
|
| 2311 | + |
|
| 2312 | + |
|
| 2313 | + $table_tmp = $table_origine . '_tmp'; |
|
| 2314 | + |
|
| 2315 | + // 1) creer une table temporaire avec les modifications |
|
| 2316 | + // - DROP : suppression de la colonne |
|
| 2317 | + // - CHANGE : modification de la colonne |
|
| 2318 | + // (foreach pour conserver l'ordre des champs) |
|
| 2319 | + |
|
| 2320 | + // field |
|
| 2321 | + $fields = []; |
|
| 2322 | + // pour le INSERT INTO plus loin |
|
| 2323 | + // stocker la correspondance nouvelles->anciennes colonnes |
|
| 2324 | + $fields_correspondances = []; |
|
| 2325 | + foreach ($def_origine['field'] as $c => $d) { |
|
| 2326 | + if ($colonne_origine && ($c == $colonne_origine)) { |
|
| 2327 | + // si pas DROP |
|
| 2328 | + if ($colonne_destination) { |
|
| 2329 | + $fields[$colonne_destination] = $opt['field'][$colonne_destination]; |
|
| 2330 | + $fields_correspondances[$colonne_destination] = $c; |
|
| 2331 | + } |
|
| 2332 | + } else { |
|
| 2333 | + $fields[$c] = $d; |
|
| 2334 | + $fields_correspondances[$c] = $c; |
|
| 2335 | + } |
|
| 2336 | + } |
|
| 2337 | + // cas de ADD sqlite2 (ajout du champ en fin de table): |
|
| 2338 | + if (!$colonne_origine && $colonne_destination) { |
|
| 2339 | + $fields[$colonne_destination] = $opt['field'][$colonne_destination]; |
|
| 2340 | + } |
|
| 2341 | + |
|
| 2342 | + // key... |
|
| 2343 | + $keys = []; |
|
| 2344 | + foreach ($def_origine['key'] as $c => $d) { |
|
| 2345 | + $c = str_replace($colonne_origine, $colonne_destination, $c); |
|
| 2346 | + $d = str_replace($colonne_origine, $colonne_destination, $d); |
|
| 2347 | + // seulement si on ne supprime pas la colonne ! |
|
| 2348 | + if ($d) { |
|
| 2349 | + $keys[$c] = $d; |
|
| 2350 | + } |
|
| 2351 | + } |
|
| 2352 | + |
|
| 2353 | + // autres keys, on merge |
|
| 2354 | + $keys = array_merge($keys, $opt['key']); |
|
| 2355 | + $queries = []; |
|
| 2356 | + |
|
| 2357 | + // copier dans destination (si differente de origine), sinon tmp |
|
| 2358 | + $table_copie = ($meme_table) ? $table_tmp : $table_destination; |
|
| 2359 | + $autoinc = (isset($keys['PRIMARY KEY']) |
|
| 2360 | + and $keys['PRIMARY KEY'] |
|
| 2361 | + and stripos($keys['PRIMARY KEY'], ',') === false |
|
| 2362 | + and stripos($fields[$keys['PRIMARY KEY']], 'default') === false); |
|
| 2363 | + |
|
| 2364 | + if ( |
|
| 2365 | + $q = _sqlite_requete_create( |
|
| 2366 | + $table_copie, |
|
| 2367 | + $fields, |
|
| 2368 | + $keys, |
|
| 2369 | + $autoinc, |
|
| 2370 | + $temporary = false, |
|
| 2371 | + $ifnotexists = true, |
|
| 2372 | + $serveur |
|
| 2373 | + ) |
|
| 2374 | + ) { |
|
| 2375 | + $queries[] = $q; |
|
| 2376 | + } |
|
| 2377 | + |
|
| 2378 | + |
|
| 2379 | + // 2) y copier les champs qui vont bien |
|
| 2380 | + $champs_dest = join(', ', array_keys($fields_correspondances)); |
|
| 2381 | + $champs_ori = join(', ', $fields_correspondances); |
|
| 2382 | + $queries[] = "INSERT INTO $table_copie ($champs_dest) SELECT $champs_ori FROM $table_origine"; |
|
| 2383 | + |
|
| 2384 | + // 3) supprimer la table d'origine |
|
| 2385 | + $queries[] = "DROP TABLE $table_origine"; |
|
| 2386 | + |
|
| 2387 | + // 4) renommer la table temporaire |
|
| 2388 | + // avec le nom de la table destination |
|
| 2389 | + // si necessaire |
|
| 2390 | + if ($meme_table) { |
|
| 2391 | + $queries[] = "ALTER TABLE $table_copie RENAME TO $table_destination"; |
|
| 2392 | + } |
|
| 2393 | + |
|
| 2394 | + // 5) remettre les index ! |
|
| 2395 | + foreach ($keys as $k => $v) { |
|
| 2396 | + if ($k == 'PRIMARY KEY') { |
|
| 2397 | + } else { |
|
| 2398 | + // enlever KEY |
|
| 2399 | + $k = substr($k, 4); |
|
| 2400 | + $queries[] = "CREATE INDEX $table_destination" . "_$k ON $table_destination ($v)"; |
|
| 2401 | + } |
|
| 2402 | + } |
|
| 2403 | + |
|
| 2404 | + |
|
| 2405 | + if (count($queries)) { |
|
| 2406 | + spip_sqlite::demarrer_transaction($serveur); |
|
| 2407 | + // il faut les faire une par une car $query = join('; ', $queries).";"; ne fonctionne pas |
|
| 2408 | + foreach ($queries as $q) { |
|
| 2409 | + if (!spip_sqlite::executer_requete($q, $serveur)) { |
|
| 2410 | + spip_log('SQLite : ALTER TABLE table :' |
|
| 2411 | + . " Erreur a l'execution de la requete : $q", 'sqlite.' . _LOG_ERREUR); |
|
| 2412 | + spip_sqlite::annuler_transaction($serveur); |
|
| 2413 | + |
|
| 2414 | + return false; |
|
| 2415 | + } |
|
| 2416 | + } |
|
| 2417 | + spip_sqlite::finir_transaction($serveur); |
|
| 2418 | + } |
|
| 2419 | + |
|
| 2420 | + return true; |
|
| 2421 | 2421 | } |
| 2422 | 2422 | |
| 2423 | 2423 | |
@@ -2427,61 +2427,61 @@ discard block |
||
| 2427 | 2427 | * @return array |
| 2428 | 2428 | */ |
| 2429 | 2429 | function _sqlite_ref_fonctions() { |
| 2430 | - $fonctions = [ |
|
| 2431 | - 'alter' => 'spip_sqlite_alter', |
|
| 2432 | - 'count' => 'spip_sqlite_count', |
|
| 2433 | - 'countsel' => 'spip_sqlite_countsel', |
|
| 2434 | - 'create' => 'spip_sqlite_create', |
|
| 2435 | - 'create_base' => 'spip_sqlite_create_base', |
|
| 2436 | - 'create_view' => 'spip_sqlite_create_view', |
|
| 2437 | - 'date_proche' => 'spip_sqlite_date_proche', |
|
| 2438 | - 'delete' => 'spip_sqlite_delete', |
|
| 2439 | - 'drop_table' => 'spip_sqlite_drop_table', |
|
| 2440 | - 'drop_view' => 'spip_sqlite_drop_view', |
|
| 2441 | - 'errno' => 'spip_sqlite_errno', |
|
| 2442 | - 'error' => 'spip_sqlite_error', |
|
| 2443 | - 'explain' => 'spip_sqlite_explain', |
|
| 2444 | - 'fetch' => 'spip_sqlite_fetch', |
|
| 2445 | - 'seek' => 'spip_sqlite_seek', |
|
| 2446 | - 'free' => 'spip_sqlite_free', |
|
| 2447 | - 'hex' => 'spip_sqlite_hex', |
|
| 2448 | - 'in' => 'spip_sqlite_in', |
|
| 2449 | - 'insert' => 'spip_sqlite_insert', |
|
| 2450 | - 'insertq' => 'spip_sqlite_insertq', |
|
| 2451 | - 'insertq_multi' => 'spip_sqlite_insertq_multi', |
|
| 2452 | - 'listdbs' => 'spip_sqlite_listdbs', |
|
| 2453 | - 'multi' => 'spip_sqlite_multi', |
|
| 2454 | - 'optimize' => 'spip_sqlite_optimize', |
|
| 2455 | - 'query' => 'spip_sqlite_query', |
|
| 2456 | - 'quote' => 'spip_sqlite_quote', |
|
| 2457 | - 'repair' => 'spip_sqlite_repair', |
|
| 2458 | - 'replace' => 'spip_sqlite_replace', |
|
| 2459 | - 'replace_multi' => 'spip_sqlite_replace_multi', |
|
| 2460 | - 'select' => 'spip_sqlite_select', |
|
| 2461 | - 'selectdb' => 'spip_sqlite_selectdb', |
|
| 2462 | - 'set_charset' => 'spip_sqlite_set_charset', |
|
| 2463 | - 'get_charset' => 'spip_sqlite_get_charset', |
|
| 2464 | - 'showbase' => 'spip_sqlite_showbase', |
|
| 2465 | - 'showtable' => 'spip_sqlite_showtable', |
|
| 2466 | - 'table_exists' => 'spip_sqlite_table_exists', |
|
| 2467 | - 'update' => 'spip_sqlite_update', |
|
| 2468 | - 'updateq' => 'spip_sqlite_updateq', |
|
| 2469 | - 'preferer_transaction' => 'spip_sqlite_preferer_transaction', |
|
| 2470 | - 'demarrer_transaction' => 'spip_sqlite_demarrer_transaction', |
|
| 2471 | - 'terminer_transaction' => 'spip_sqlite_terminer_transaction', |
|
| 2472 | - ]; |
|
| 2473 | - |
|
| 2474 | - // association de chaque nom http d'un charset aux couples sqlite |
|
| 2475 | - // SQLite supporte utf-8 et utf-16 uniquement. |
|
| 2476 | - $charsets = [ |
|
| 2477 | - 'utf-8' => ['charset' => 'utf8', 'collation' => 'utf8_general_ci'], |
|
| 2478 | - //'utf-16be'=>array('charset'=>'utf16be','collation'=>'UTF-16BE'),// aucune idee de quoi il faut remplir dans es champs la |
|
| 2479 | - //'utf-16le'=>array('charset'=>'utf16le','collation'=>'UTF-16LE') |
|
| 2480 | - ]; |
|
| 2481 | - |
|
| 2482 | - $fonctions['charsets'] = $charsets; |
|
| 2483 | - |
|
| 2484 | - return $fonctions; |
|
| 2430 | + $fonctions = [ |
|
| 2431 | + 'alter' => 'spip_sqlite_alter', |
|
| 2432 | + 'count' => 'spip_sqlite_count', |
|
| 2433 | + 'countsel' => 'spip_sqlite_countsel', |
|
| 2434 | + 'create' => 'spip_sqlite_create', |
|
| 2435 | + 'create_base' => 'spip_sqlite_create_base', |
|
| 2436 | + 'create_view' => 'spip_sqlite_create_view', |
|
| 2437 | + 'date_proche' => 'spip_sqlite_date_proche', |
|
| 2438 | + 'delete' => 'spip_sqlite_delete', |
|
| 2439 | + 'drop_table' => 'spip_sqlite_drop_table', |
|
| 2440 | + 'drop_view' => 'spip_sqlite_drop_view', |
|
| 2441 | + 'errno' => 'spip_sqlite_errno', |
|
| 2442 | + 'error' => 'spip_sqlite_error', |
|
| 2443 | + 'explain' => 'spip_sqlite_explain', |
|
| 2444 | + 'fetch' => 'spip_sqlite_fetch', |
|
| 2445 | + 'seek' => 'spip_sqlite_seek', |
|
| 2446 | + 'free' => 'spip_sqlite_free', |
|
| 2447 | + 'hex' => 'spip_sqlite_hex', |
|
| 2448 | + 'in' => 'spip_sqlite_in', |
|
| 2449 | + 'insert' => 'spip_sqlite_insert', |
|
| 2450 | + 'insertq' => 'spip_sqlite_insertq', |
|
| 2451 | + 'insertq_multi' => 'spip_sqlite_insertq_multi', |
|
| 2452 | + 'listdbs' => 'spip_sqlite_listdbs', |
|
| 2453 | + 'multi' => 'spip_sqlite_multi', |
|
| 2454 | + 'optimize' => 'spip_sqlite_optimize', |
|
| 2455 | + 'query' => 'spip_sqlite_query', |
|
| 2456 | + 'quote' => 'spip_sqlite_quote', |
|
| 2457 | + 'repair' => 'spip_sqlite_repair', |
|
| 2458 | + 'replace' => 'spip_sqlite_replace', |
|
| 2459 | + 'replace_multi' => 'spip_sqlite_replace_multi', |
|
| 2460 | + 'select' => 'spip_sqlite_select', |
|
| 2461 | + 'selectdb' => 'spip_sqlite_selectdb', |
|
| 2462 | + 'set_charset' => 'spip_sqlite_set_charset', |
|
| 2463 | + 'get_charset' => 'spip_sqlite_get_charset', |
|
| 2464 | + 'showbase' => 'spip_sqlite_showbase', |
|
| 2465 | + 'showtable' => 'spip_sqlite_showtable', |
|
| 2466 | + 'table_exists' => 'spip_sqlite_table_exists', |
|
| 2467 | + 'update' => 'spip_sqlite_update', |
|
| 2468 | + 'updateq' => 'spip_sqlite_updateq', |
|
| 2469 | + 'preferer_transaction' => 'spip_sqlite_preferer_transaction', |
|
| 2470 | + 'demarrer_transaction' => 'spip_sqlite_demarrer_transaction', |
|
| 2471 | + 'terminer_transaction' => 'spip_sqlite_terminer_transaction', |
|
| 2472 | + ]; |
|
| 2473 | + |
|
| 2474 | + // association de chaque nom http d'un charset aux couples sqlite |
|
| 2475 | + // SQLite supporte utf-8 et utf-16 uniquement. |
|
| 2476 | + $charsets = [ |
|
| 2477 | + 'utf-8' => ['charset' => 'utf8', 'collation' => 'utf8_general_ci'], |
|
| 2478 | + //'utf-16be'=>array('charset'=>'utf16be','collation'=>'UTF-16BE'),// aucune idee de quoi il faut remplir dans es champs la |
|
| 2479 | + //'utf-16le'=>array('charset'=>'utf16le','collation'=>'UTF-16LE') |
|
| 2480 | + ]; |
|
| 2481 | + |
|
| 2482 | + $fonctions['charsets'] = $charsets; |
|
| 2483 | + |
|
| 2484 | + return $fonctions; |
|
| 2485 | 2485 | } |
| 2486 | 2486 | |
| 2487 | 2487 | |
@@ -2493,56 +2493,56 @@ discard block |
||
| 2493 | 2493 | * @return mixed |
| 2494 | 2494 | */ |
| 2495 | 2495 | function _sqlite_remplacements_definitions_table($query, $autoinc = false) { |
| 2496 | - // quelques remplacements |
|
| 2497 | - $num = '(\s*\([0-9]*\))?'; |
|
| 2498 | - $enum = '(\s*\([^\)]*\))?'; |
|
| 2499 | - |
|
| 2500 | - $remplace = [ |
|
| 2501 | - '/enum' . $enum . '/is' => 'VARCHAR(255)', |
|
| 2502 | - '/COLLATE \w+_bin/is' => 'COLLATE BINARY', |
|
| 2503 | - '/COLLATE \w+_ci/is' => 'COLLATE NOCASE', |
|
| 2504 | - '/auto_increment/is' => '', |
|
| 2505 | - '/current_timestamp\(\)/is' => 'CURRENT_TIMESTAMP', // Fix export depuis mariaDB #4374 |
|
| 2506 | - '/(timestamp .* )ON .*$/is' => '\\1', |
|
| 2507 | - '/character set \w+/is' => '', |
|
| 2508 | - '/((big|small|medium|tiny)?int(eger)?)' . $num . '\s*unsigned/is' => '\\1 UNSIGNED', |
|
| 2509 | - '/(text\s+not\s+null(\s+collate\s+\w+)?)\s*$/is' => "\\1 DEFAULT ''", |
|
| 2510 | - '/((char|varchar)' . $num . '\s+not\s+null(\s+collate\s+\w+)?)\s*$/is' => "\\1 DEFAULT ''", |
|
| 2511 | - '/(datetime\s+not\s+null)\s*$/is' => "\\1 DEFAULT '0000-00-00 00:00:00'", |
|
| 2512 | - '/(date\s+not\s+null)\s*$/is' => "\\1 DEFAULT '0000-00-00'", |
|
| 2513 | - ]; |
|
| 2514 | - |
|
| 2515 | - // pour l'autoincrement, il faut des INTEGER NOT NULL PRIMARY KEY |
|
| 2516 | - $remplace_autocinc = [ |
|
| 2517 | - '/(big|small|medium|tiny)?int(eger)?' . $num . '/is' => 'INTEGER' |
|
| 2518 | - ]; |
|
| 2519 | - // pour les int non autoincrement, il faut un DEFAULT |
|
| 2520 | - $remplace_nonautocinc = [ |
|
| 2521 | - '/((big|small|medium|tiny)?int(eger)?' . $num . '\s+not\s+null)\s*$/is' => "\\1 DEFAULT 0", |
|
| 2522 | - ]; |
|
| 2523 | - |
|
| 2524 | - if (is_string($query)) { |
|
| 2525 | - $query = preg_replace(array_keys($remplace), $remplace, $query); |
|
| 2526 | - if ($autoinc or preg_match(',AUTO_INCREMENT,is', $query)) { |
|
| 2527 | - $query = preg_replace(array_keys($remplace_autocinc), $remplace_autocinc, $query); |
|
| 2528 | - } else { |
|
| 2529 | - $query = preg_replace(array_keys($remplace_nonautocinc), $remplace_nonautocinc, $query); |
|
| 2530 | - $query = _sqlite_collate_ci($query); |
|
| 2531 | - } |
|
| 2532 | - } elseif (is_array($query)) { |
|
| 2533 | - foreach ($query as $k => $q) { |
|
| 2534 | - $ai = ($autoinc ? $k == $autoinc : preg_match(',AUTO_INCREMENT,is', $q)); |
|
| 2535 | - $query[$k] = preg_replace(array_keys($remplace), $remplace, $query[$k]); |
|
| 2536 | - if ($ai) { |
|
| 2537 | - $query[$k] = preg_replace(array_keys($remplace_autocinc), $remplace_autocinc, $query[$k]); |
|
| 2538 | - } else { |
|
| 2539 | - $query[$k] = preg_replace(array_keys($remplace_nonautocinc), $remplace_nonautocinc, $query[$k]); |
|
| 2540 | - $query[$k] = _sqlite_collate_ci($query[$k]); |
|
| 2541 | - } |
|
| 2542 | - } |
|
| 2543 | - } |
|
| 2544 | - |
|
| 2545 | - return $query; |
|
| 2496 | + // quelques remplacements |
|
| 2497 | + $num = '(\s*\([0-9]*\))?'; |
|
| 2498 | + $enum = '(\s*\([^\)]*\))?'; |
|
| 2499 | + |
|
| 2500 | + $remplace = [ |
|
| 2501 | + '/enum' . $enum . '/is' => 'VARCHAR(255)', |
|
| 2502 | + '/COLLATE \w+_bin/is' => 'COLLATE BINARY', |
|
| 2503 | + '/COLLATE \w+_ci/is' => 'COLLATE NOCASE', |
|
| 2504 | + '/auto_increment/is' => '', |
|
| 2505 | + '/current_timestamp\(\)/is' => 'CURRENT_TIMESTAMP', // Fix export depuis mariaDB #4374 |
|
| 2506 | + '/(timestamp .* )ON .*$/is' => '\\1', |
|
| 2507 | + '/character set \w+/is' => '', |
|
| 2508 | + '/((big|small|medium|tiny)?int(eger)?)' . $num . '\s*unsigned/is' => '\\1 UNSIGNED', |
|
| 2509 | + '/(text\s+not\s+null(\s+collate\s+\w+)?)\s*$/is' => "\\1 DEFAULT ''", |
|
| 2510 | + '/((char|varchar)' . $num . '\s+not\s+null(\s+collate\s+\w+)?)\s*$/is' => "\\1 DEFAULT ''", |
|
| 2511 | + '/(datetime\s+not\s+null)\s*$/is' => "\\1 DEFAULT '0000-00-00 00:00:00'", |
|
| 2512 | + '/(date\s+not\s+null)\s*$/is' => "\\1 DEFAULT '0000-00-00'", |
|
| 2513 | + ]; |
|
| 2514 | + |
|
| 2515 | + // pour l'autoincrement, il faut des INTEGER NOT NULL PRIMARY KEY |
|
| 2516 | + $remplace_autocinc = [ |
|
| 2517 | + '/(big|small|medium|tiny)?int(eger)?' . $num . '/is' => 'INTEGER' |
|
| 2518 | + ]; |
|
| 2519 | + // pour les int non autoincrement, il faut un DEFAULT |
|
| 2520 | + $remplace_nonautocinc = [ |
|
| 2521 | + '/((big|small|medium|tiny)?int(eger)?' . $num . '\s+not\s+null)\s*$/is' => "\\1 DEFAULT 0", |
|
| 2522 | + ]; |
|
| 2523 | + |
|
| 2524 | + if (is_string($query)) { |
|
| 2525 | + $query = preg_replace(array_keys($remplace), $remplace, $query); |
|
| 2526 | + if ($autoinc or preg_match(',AUTO_INCREMENT,is', $query)) { |
|
| 2527 | + $query = preg_replace(array_keys($remplace_autocinc), $remplace_autocinc, $query); |
|
| 2528 | + } else { |
|
| 2529 | + $query = preg_replace(array_keys($remplace_nonautocinc), $remplace_nonautocinc, $query); |
|
| 2530 | + $query = _sqlite_collate_ci($query); |
|
| 2531 | + } |
|
| 2532 | + } elseif (is_array($query)) { |
|
| 2533 | + foreach ($query as $k => $q) { |
|
| 2534 | + $ai = ($autoinc ? $k == $autoinc : preg_match(',AUTO_INCREMENT,is', $q)); |
|
| 2535 | + $query[$k] = preg_replace(array_keys($remplace), $remplace, $query[$k]); |
|
| 2536 | + if ($ai) { |
|
| 2537 | + $query[$k] = preg_replace(array_keys($remplace_autocinc), $remplace_autocinc, $query[$k]); |
|
| 2538 | + } else { |
|
| 2539 | + $query[$k] = preg_replace(array_keys($remplace_nonautocinc), $remplace_nonautocinc, $query[$k]); |
|
| 2540 | + $query[$k] = _sqlite_collate_ci($query[$k]); |
|
| 2541 | + } |
|
| 2542 | + } |
|
| 2543 | + } |
|
| 2544 | + |
|
| 2545 | + return $query; |
|
| 2546 | 2546 | } |
| 2547 | 2547 | |
| 2548 | 2548 | /** |
@@ -2553,17 +2553,17 @@ discard block |
||
| 2553 | 2553 | * @return string |
| 2554 | 2554 | */ |
| 2555 | 2555 | function _sqlite_collate_ci($champ) { |
| 2556 | - if (stripos($champ, 'COLLATE') !== false) { |
|
| 2557 | - return $champ; |
|
| 2558 | - } |
|
| 2559 | - if (stripos($champ, 'BINARY') !== false) { |
|
| 2560 | - return str_ireplace('BINARY', 'COLLATE BINARY', $champ); |
|
| 2561 | - } |
|
| 2562 | - if (preg_match(',^(char|varchar|(long|small|medium|tiny)?text),i', $champ)) { |
|
| 2563 | - return $champ . ' COLLATE NOCASE'; |
|
| 2564 | - } |
|
| 2556 | + if (stripos($champ, 'COLLATE') !== false) { |
|
| 2557 | + return $champ; |
|
| 2558 | + } |
|
| 2559 | + if (stripos($champ, 'BINARY') !== false) { |
|
| 2560 | + return str_ireplace('BINARY', 'COLLATE BINARY', $champ); |
|
| 2561 | + } |
|
| 2562 | + if (preg_match(',^(char|varchar|(long|small|medium|tiny)?text),i', $champ)) { |
|
| 2563 | + return $champ . ' COLLATE NOCASE'; |
|
| 2564 | + } |
|
| 2565 | 2565 | |
| 2566 | - return $champ; |
|
| 2566 | + return $champ; |
|
| 2567 | 2567 | } |
| 2568 | 2568 | |
| 2569 | 2569 | |
@@ -2582,84 +2582,84 @@ discard block |
||
| 2582 | 2582 | * @return bool|string |
| 2583 | 2583 | */ |
| 2584 | 2584 | function _sqlite_requete_create( |
| 2585 | - $nom, |
|
| 2586 | - $champs, |
|
| 2587 | - $cles, |
|
| 2588 | - $autoinc = false, |
|
| 2589 | - $temporary = false, |
|
| 2590 | - $_ifnotexists = true, |
|
| 2591 | - $serveur = '', |
|
| 2592 | - $requeter = true |
|
| 2585 | + $nom, |
|
| 2586 | + $champs, |
|
| 2587 | + $cles, |
|
| 2588 | + $autoinc = false, |
|
| 2589 | + $temporary = false, |
|
| 2590 | + $_ifnotexists = true, |
|
| 2591 | + $serveur = '', |
|
| 2592 | + $requeter = true |
|
| 2593 | 2593 | ) { |
| 2594 | - $query = $keys = $s = $p = ''; |
|
| 2595 | - |
|
| 2596 | - // certains plugins declarent les tables (permet leur inclusion dans le dump) |
|
| 2597 | - // sans les renseigner (laisse le compilo recuperer la description) |
|
| 2598 | - if (!is_array($champs) || !is_array($cles)) { |
|
| 2599 | - return; |
|
| 2600 | - } |
|
| 2601 | - |
|
| 2602 | - // sqlite ne gere pas KEY tout court dans une requete CREATE TABLE |
|
| 2603 | - // il faut passer par des create index |
|
| 2604 | - // Il gere par contre primary key ! |
|
| 2605 | - // Soit la PK est definie dans les cles, soit dans un champs |
|
| 2606 | - // soit faussement dans les 2 (et dans ce cas, il faut l’enlever à un des 2 endroits !) |
|
| 2607 | - $pk = 'PRIMARY KEY'; |
|
| 2608 | - // le champ de cle primaire |
|
| 2609 | - $champ_pk = !empty($cles[$pk]) ? $cles[$pk] : ''; |
|
| 2610 | - |
|
| 2611 | - foreach ($champs as $k => $v) { |
|
| 2612 | - if (false !== stripos($v, $pk)) { |
|
| 2613 | - $champ_pk = $k; |
|
| 2614 | - // on n'en a plus besoin dans field, vu que defini dans key |
|
| 2615 | - $champs[$k] = preg_replace("/$pk/is", '', $champs[$k]); |
|
| 2616 | - break; |
|
| 2617 | - } |
|
| 2618 | - } |
|
| 2619 | - |
|
| 2620 | - if ($champ_pk) { |
|
| 2621 | - $keys = "\n\t\t$pk ($champ_pk)"; |
|
| 2622 | - } |
|
| 2623 | - // Pas de DEFAULT 0 sur les cles primaires en auto-increment |
|
| 2624 | - if ( |
|
| 2625 | - isset($champs[$champ_pk]) |
|
| 2626 | - and stripos($champs[$champ_pk], 'default 0') !== false |
|
| 2627 | - ) { |
|
| 2628 | - $champs[$champ_pk] = trim(str_ireplace('default 0', '', $champs[$champ_pk])); |
|
| 2629 | - } |
|
| 2630 | - |
|
| 2631 | - $champs = _sqlite_remplacements_definitions_table($champs, $autoinc ? $champ_pk : false); |
|
| 2632 | - foreach ($champs as $k => $v) { |
|
| 2633 | - $query .= "$s\n\t\t$k $v"; |
|
| 2634 | - $s = ','; |
|
| 2635 | - } |
|
| 2636 | - |
|
| 2637 | - $ifnotexists = ''; |
|
| 2638 | - if ($_ifnotexists) { |
|
| 2639 | - $version = spip_sqlite_fetch( |
|
| 2640 | - spip_sqlite_query('select sqlite_version() AS sqlite_version', $serveur), |
|
| 2641 | - '', |
|
| 2642 | - $serveur |
|
| 2643 | - ); |
|
| 2644 | - if (!function_exists('spip_version_compare')) { |
|
| 2645 | - include_spip('plugins/installer'); |
|
| 2646 | - } |
|
| 2647 | - |
|
| 2648 | - if ($version and spip_version_compare($version['sqlite_version'], '3.3.0', '>=')) { |
|
| 2649 | - $ifnotexists = ' IF NOT EXISTS'; |
|
| 2650 | - } else { |
|
| 2651 | - /* simuler le IF EXISTS - version 2 et sqlite < 3.3a */ |
|
| 2652 | - $a = spip_sqlite_showtable($nom, $serveur); |
|
| 2653 | - if (isset($a['key']['KEY ' . $nom])) { |
|
| 2654 | - return true; |
|
| 2655 | - } |
|
| 2656 | - } |
|
| 2657 | - } |
|
| 2658 | - |
|
| 2659 | - $temporary = $temporary ? ' TEMPORARY' : ''; |
|
| 2660 | - $q = "CREATE$temporary TABLE$ifnotexists $nom ($query" . ($keys ? ",$keys" : '') . ")\n"; |
|
| 2661 | - |
|
| 2662 | - return $q; |
|
| 2594 | + $query = $keys = $s = $p = ''; |
|
| 2595 | + |
|
| 2596 | + // certains plugins declarent les tables (permet leur inclusion dans le dump) |
|
| 2597 | + // sans les renseigner (laisse le compilo recuperer la description) |
|
| 2598 | + if (!is_array($champs) || !is_array($cles)) { |
|
| 2599 | + return; |
|
| 2600 | + } |
|
| 2601 | + |
|
| 2602 | + // sqlite ne gere pas KEY tout court dans une requete CREATE TABLE |
|
| 2603 | + // il faut passer par des create index |
|
| 2604 | + // Il gere par contre primary key ! |
|
| 2605 | + // Soit la PK est definie dans les cles, soit dans un champs |
|
| 2606 | + // soit faussement dans les 2 (et dans ce cas, il faut l’enlever à un des 2 endroits !) |
|
| 2607 | + $pk = 'PRIMARY KEY'; |
|
| 2608 | + // le champ de cle primaire |
|
| 2609 | + $champ_pk = !empty($cles[$pk]) ? $cles[$pk] : ''; |
|
| 2610 | + |
|
| 2611 | + foreach ($champs as $k => $v) { |
|
| 2612 | + if (false !== stripos($v, $pk)) { |
|
| 2613 | + $champ_pk = $k; |
|
| 2614 | + // on n'en a plus besoin dans field, vu que defini dans key |
|
| 2615 | + $champs[$k] = preg_replace("/$pk/is", '', $champs[$k]); |
|
| 2616 | + break; |
|
| 2617 | + } |
|
| 2618 | + } |
|
| 2619 | + |
|
| 2620 | + if ($champ_pk) { |
|
| 2621 | + $keys = "\n\t\t$pk ($champ_pk)"; |
|
| 2622 | + } |
|
| 2623 | + // Pas de DEFAULT 0 sur les cles primaires en auto-increment |
|
| 2624 | + if ( |
|
| 2625 | + isset($champs[$champ_pk]) |
|
| 2626 | + and stripos($champs[$champ_pk], 'default 0') !== false |
|
| 2627 | + ) { |
|
| 2628 | + $champs[$champ_pk] = trim(str_ireplace('default 0', '', $champs[$champ_pk])); |
|
| 2629 | + } |
|
| 2630 | + |
|
| 2631 | + $champs = _sqlite_remplacements_definitions_table($champs, $autoinc ? $champ_pk : false); |
|
| 2632 | + foreach ($champs as $k => $v) { |
|
| 2633 | + $query .= "$s\n\t\t$k $v"; |
|
| 2634 | + $s = ','; |
|
| 2635 | + } |
|
| 2636 | + |
|
| 2637 | + $ifnotexists = ''; |
|
| 2638 | + if ($_ifnotexists) { |
|
| 2639 | + $version = spip_sqlite_fetch( |
|
| 2640 | + spip_sqlite_query('select sqlite_version() AS sqlite_version', $serveur), |
|
| 2641 | + '', |
|
| 2642 | + $serveur |
|
| 2643 | + ); |
|
| 2644 | + if (!function_exists('spip_version_compare')) { |
|
| 2645 | + include_spip('plugins/installer'); |
|
| 2646 | + } |
|
| 2647 | + |
|
| 2648 | + if ($version and spip_version_compare($version['sqlite_version'], '3.3.0', '>=')) { |
|
| 2649 | + $ifnotexists = ' IF NOT EXISTS'; |
|
| 2650 | + } else { |
|
| 2651 | + /* simuler le IF EXISTS - version 2 et sqlite < 3.3a */ |
|
| 2652 | + $a = spip_sqlite_showtable($nom, $serveur); |
|
| 2653 | + if (isset($a['key']['KEY ' . $nom])) { |
|
| 2654 | + return true; |
|
| 2655 | + } |
|
| 2656 | + } |
|
| 2657 | + } |
|
| 2658 | + |
|
| 2659 | + $temporary = $temporary ? ' TEMPORARY' : ''; |
|
| 2660 | + $q = "CREATE$temporary TABLE$ifnotexists $nom ($query" . ($keys ? ",$keys" : '') . ")\n"; |
|
| 2661 | + |
|
| 2662 | + return $q; |
|
| 2663 | 2663 | } |
| 2664 | 2664 | |
| 2665 | 2665 | |
@@ -2678,41 +2678,41 @@ discard block |
||
| 2678 | 2678 | * @return |
| 2679 | 2679 | */ |
| 2680 | 2680 | function _sqlite_ajouter_champs_timestamp($table, $couples, $desc = '', $serveur = '') { |
| 2681 | - static $tables = []; |
|
| 2682 | - |
|
| 2683 | - if (!isset($tables[$table])) { |
|
| 2684 | - if (!$desc) { |
|
| 2685 | - $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 2686 | - $desc = $trouver_table($table, $serveur); |
|
| 2687 | - // si pas de description, on ne fait rien, ou on die() ? |
|
| 2688 | - if (!$desc) { |
|
| 2689 | - return $couples; |
|
| 2690 | - } |
|
| 2691 | - } |
|
| 2692 | - |
|
| 2693 | - // recherche des champs avec simplement 'TIMESTAMP' |
|
| 2694 | - // cependant, il faudra peut etre etendre |
|
| 2695 | - // avec la gestion de DEFAULT et ON UPDATE |
|
| 2696 | - // mais ceux-ci ne sont pas utilises dans le core |
|
| 2697 | - $tables[$table] = ['valeur' => [], 'cite' => [], 'desc' => []]; |
|
| 2698 | - |
|
| 2699 | - $now = _sqlite_func_now(true); |
|
| 2700 | - foreach ($desc['field'] as $k => $v) { |
|
| 2701 | - if (strpos(strtolower(ltrim($v)), 'timestamp') === 0) { |
|
| 2702 | - $tables[$table]['desc'][$k] = $v; |
|
| 2703 | - $tables[$table]['valeur'][$k] = _sqlite_calculer_cite($now, $tables[$table]['desc'][$k]); |
|
| 2704 | - } |
|
| 2705 | - } |
|
| 2706 | - } |
|
| 2707 | - else { |
|
| 2708 | - $now = _sqlite_func_now(true); |
|
| 2709 | - foreach (array_keys($tables[$table]['desc']) as $k) { |
|
| 2710 | - $tables[$table]['valeur'][$k] = _sqlite_calculer_cite($now, $tables[$table]['desc'][$k]); |
|
| 2711 | - } |
|
| 2712 | - } |
|
| 2713 | - |
|
| 2714 | - // ajout des champs type 'timestamp' absents |
|
| 2715 | - return array_merge($tables[$table]['valeur'], $couples); |
|
| 2681 | + static $tables = []; |
|
| 2682 | + |
|
| 2683 | + if (!isset($tables[$table])) { |
|
| 2684 | + if (!$desc) { |
|
| 2685 | + $trouver_table = charger_fonction('trouver_table', 'base'); |
|
| 2686 | + $desc = $trouver_table($table, $serveur); |
|
| 2687 | + // si pas de description, on ne fait rien, ou on die() ? |
|
| 2688 | + if (!$desc) { |
|
| 2689 | + return $couples; |
|
| 2690 | + } |
|
| 2691 | + } |
|
| 2692 | + |
|
| 2693 | + // recherche des champs avec simplement 'TIMESTAMP' |
|
| 2694 | + // cependant, il faudra peut etre etendre |
|
| 2695 | + // avec la gestion de DEFAULT et ON UPDATE |
|
| 2696 | + // mais ceux-ci ne sont pas utilises dans le core |
|
| 2697 | + $tables[$table] = ['valeur' => [], 'cite' => [], 'desc' => []]; |
|
| 2698 | + |
|
| 2699 | + $now = _sqlite_func_now(true); |
|
| 2700 | + foreach ($desc['field'] as $k => $v) { |
|
| 2701 | + if (strpos(strtolower(ltrim($v)), 'timestamp') === 0) { |
|
| 2702 | + $tables[$table]['desc'][$k] = $v; |
|
| 2703 | + $tables[$table]['valeur'][$k] = _sqlite_calculer_cite($now, $tables[$table]['desc'][$k]); |
|
| 2704 | + } |
|
| 2705 | + } |
|
| 2706 | + } |
|
| 2707 | + else { |
|
| 2708 | + $now = _sqlite_func_now(true); |
|
| 2709 | + foreach (array_keys($tables[$table]['desc']) as $k) { |
|
| 2710 | + $tables[$table]['valeur'][$k] = _sqlite_calculer_cite($now, $tables[$table]['desc'][$k]); |
|
| 2711 | + } |
|
| 2712 | + } |
|
| 2713 | + |
|
| 2714 | + // ajout des champs type 'timestamp' absents |
|
| 2715 | + return array_merge($tables[$table]['valeur'], $couples); |
|
| 2716 | 2716 | } |
| 2717 | 2717 | |
| 2718 | 2718 | |
@@ -2723,7 +2723,7 @@ discard block |
||
| 2723 | 2723 | * @return array|bool |
| 2724 | 2724 | */ |
| 2725 | 2725 | function spip_versions_sqlite() { |
| 2726 | - return _sqlite_charger_version(); |
|
| 2726 | + return _sqlite_charger_version(); |
|
| 2727 | 2727 | } |
| 2728 | 2728 | |
| 2729 | 2729 | /** |
@@ -2731,114 +2731,114 @@ discard block |
||
| 2731 | 2731 | * encadrées de transactions. |
| 2732 | 2732 | **/ |
| 2733 | 2733 | class spip_sqlite { |
| 2734 | - /** @var sqlite_requeteur[] Liste des instances de requêteurs créés */ |
|
| 2735 | - public static $requeteurs = []; |
|
| 2736 | - /** @var bool[] Pour chaque connexion, flag pour savoir si une transaction est en cours */ |
|
| 2737 | - public static $transaction_en_cours = []; |
|
| 2738 | - |
|
| 2739 | - |
|
| 2740 | - /** |
|
| 2741 | - * Retourne une unique instance du requêteur |
|
| 2742 | - * |
|
| 2743 | - * Retourne une instance unique du requêteur pour une connexion SQLite |
|
| 2744 | - * donnée |
|
| 2745 | - * |
|
| 2746 | - * @param string $serveur |
|
| 2747 | - * Nom du connecteur |
|
| 2748 | - * @return sqlite_requeteur |
|
| 2749 | - * Instance unique du requêteur |
|
| 2750 | - **/ |
|
| 2751 | - public static function requeteur($serveur) { |
|
| 2752 | - if (!isset(spip_sqlite::$requeteurs[$serveur])) { |
|
| 2753 | - spip_sqlite::$requeteurs[$serveur] = new sqlite_requeteur($serveur); |
|
| 2754 | - } |
|
| 2755 | - |
|
| 2756 | - return spip_sqlite::$requeteurs[$serveur]; |
|
| 2757 | - } |
|
| 2758 | - |
|
| 2759 | - /** |
|
| 2760 | - * Prépare le texte d'une requête avant son exécution |
|
| 2761 | - * |
|
| 2762 | - * Adapte la requête au format plus ou moins MySQL par un format |
|
| 2763 | - * compris de SQLite. |
|
| 2764 | - * |
|
| 2765 | - * Change les préfixes de tables SPIP par ceux véritables |
|
| 2766 | - * |
|
| 2767 | - * @param string $query Requête à préparer |
|
| 2768 | - * @param string $serveur Nom de la connexion |
|
| 2769 | - * @return string Requête préparée |
|
| 2770 | - */ |
|
| 2771 | - public static function traduire_requete($query, $serveur) { |
|
| 2772 | - $requeteur = spip_sqlite::requeteur($serveur); |
|
| 2773 | - $traducteur = new sqlite_traducteur($query, $requeteur->prefixe, $requeteur->sqlite_version); |
|
| 2774 | - |
|
| 2775 | - return $traducteur->traduire_requete(); |
|
| 2776 | - } |
|
| 2777 | - |
|
| 2778 | - /** |
|
| 2779 | - * Démarre une transaction |
|
| 2780 | - * |
|
| 2781 | - * @param string $serveur Nom de la connexion |
|
| 2782 | - **/ |
|
| 2783 | - public static function demarrer_transaction($serveur) { |
|
| 2784 | - spip_sqlite::executer_requete('BEGIN TRANSACTION', $serveur); |
|
| 2785 | - spip_sqlite::$transaction_en_cours[$serveur] = true; |
|
| 2786 | - } |
|
| 2787 | - |
|
| 2788 | - /** |
|
| 2789 | - * Exécute la requête donnée |
|
| 2790 | - * |
|
| 2791 | - * @param string $query Requête |
|
| 2792 | - * @param string $serveur Nom de la connexion |
|
| 2793 | - * @param null|bool $tracer Demander des statistiques (temps) ? |
|
| 2794 | - **/ |
|
| 2795 | - public static function executer_requete($query, $serveur, $tracer = null) { |
|
| 2796 | - $requeteur = spip_sqlite::requeteur($serveur); |
|
| 2797 | - |
|
| 2798 | - return $requeteur->executer_requete($query, $tracer); |
|
| 2799 | - } |
|
| 2800 | - |
|
| 2801 | - /** |
|
| 2802 | - * Obtient l'identifiant de la dernière ligne insérée ou modifiée |
|
| 2803 | - * |
|
| 2804 | - * @param string $serveur Nom de la connexion |
|
| 2805 | - * return int Identifiant |
|
| 2806 | - **/ |
|
| 2807 | - public static function last_insert_id($serveur) { |
|
| 2808 | - $requeteur = spip_sqlite::requeteur($serveur); |
|
| 2809 | - |
|
| 2810 | - return $requeteur->last_insert_id($serveur); |
|
| 2811 | - } |
|
| 2812 | - |
|
| 2813 | - /** |
|
| 2814 | - * Annule une transaction |
|
| 2815 | - * |
|
| 2816 | - * @param string $serveur Nom de la connexion |
|
| 2817 | - **/ |
|
| 2818 | - public static function annuler_transaction($serveur) { |
|
| 2819 | - spip_sqlite::executer_requete('ROLLBACK', $serveur); |
|
| 2820 | - spip_sqlite::$transaction_en_cours[$serveur] = false; |
|
| 2821 | - } |
|
| 2822 | - |
|
| 2823 | - /** |
|
| 2824 | - * Termine une transaction |
|
| 2825 | - * |
|
| 2826 | - * @param string $serveur Nom de la connexion |
|
| 2827 | - **/ |
|
| 2828 | - public static function finir_transaction($serveur) { |
|
| 2829 | - // si pas de transaction en cours, ne rien faire et le dire |
|
| 2830 | - if ( |
|
| 2831 | - !isset(spip_sqlite::$transaction_en_cours[$serveur]) |
|
| 2832 | - or spip_sqlite::$transaction_en_cours[$serveur] == false |
|
| 2833 | - ) { |
|
| 2834 | - return false; |
|
| 2835 | - } |
|
| 2836 | - // sinon fermer la transaction et retourner true |
|
| 2837 | - spip_sqlite::executer_requete('COMMIT', $serveur); |
|
| 2838 | - spip_sqlite::$transaction_en_cours[$serveur] = false; |
|
| 2839 | - |
|
| 2840 | - return true; |
|
| 2841 | - } |
|
| 2734 | + /** @var sqlite_requeteur[] Liste des instances de requêteurs créés */ |
|
| 2735 | + public static $requeteurs = []; |
|
| 2736 | + /** @var bool[] Pour chaque connexion, flag pour savoir si une transaction est en cours */ |
|
| 2737 | + public static $transaction_en_cours = []; |
|
| 2738 | + |
|
| 2739 | + |
|
| 2740 | + /** |
|
| 2741 | + * Retourne une unique instance du requêteur |
|
| 2742 | + * |
|
| 2743 | + * Retourne une instance unique du requêteur pour une connexion SQLite |
|
| 2744 | + * donnée |
|
| 2745 | + * |
|
| 2746 | + * @param string $serveur |
|
| 2747 | + * Nom du connecteur |
|
| 2748 | + * @return sqlite_requeteur |
|
| 2749 | + * Instance unique du requêteur |
|
| 2750 | + **/ |
|
| 2751 | + public static function requeteur($serveur) { |
|
| 2752 | + if (!isset(spip_sqlite::$requeteurs[$serveur])) { |
|
| 2753 | + spip_sqlite::$requeteurs[$serveur] = new sqlite_requeteur($serveur); |
|
| 2754 | + } |
|
| 2755 | + |
|
| 2756 | + return spip_sqlite::$requeteurs[$serveur]; |
|
| 2757 | + } |
|
| 2758 | + |
|
| 2759 | + /** |
|
| 2760 | + * Prépare le texte d'une requête avant son exécution |
|
| 2761 | + * |
|
| 2762 | + * Adapte la requête au format plus ou moins MySQL par un format |
|
| 2763 | + * compris de SQLite. |
|
| 2764 | + * |
|
| 2765 | + * Change les préfixes de tables SPIP par ceux véritables |
|
| 2766 | + * |
|
| 2767 | + * @param string $query Requête à préparer |
|
| 2768 | + * @param string $serveur Nom de la connexion |
|
| 2769 | + * @return string Requête préparée |
|
| 2770 | + */ |
|
| 2771 | + public static function traduire_requete($query, $serveur) { |
|
| 2772 | + $requeteur = spip_sqlite::requeteur($serveur); |
|
| 2773 | + $traducteur = new sqlite_traducteur($query, $requeteur->prefixe, $requeteur->sqlite_version); |
|
| 2774 | + |
|
| 2775 | + return $traducteur->traduire_requete(); |
|
| 2776 | + } |
|
| 2777 | + |
|
| 2778 | + /** |
|
| 2779 | + * Démarre une transaction |
|
| 2780 | + * |
|
| 2781 | + * @param string $serveur Nom de la connexion |
|
| 2782 | + **/ |
|
| 2783 | + public static function demarrer_transaction($serveur) { |
|
| 2784 | + spip_sqlite::executer_requete('BEGIN TRANSACTION', $serveur); |
|
| 2785 | + spip_sqlite::$transaction_en_cours[$serveur] = true; |
|
| 2786 | + } |
|
| 2787 | + |
|
| 2788 | + /** |
|
| 2789 | + * Exécute la requête donnée |
|
| 2790 | + * |
|
| 2791 | + * @param string $query Requête |
|
| 2792 | + * @param string $serveur Nom de la connexion |
|
| 2793 | + * @param null|bool $tracer Demander des statistiques (temps) ? |
|
| 2794 | + **/ |
|
| 2795 | + public static function executer_requete($query, $serveur, $tracer = null) { |
|
| 2796 | + $requeteur = spip_sqlite::requeteur($serveur); |
|
| 2797 | + |
|
| 2798 | + return $requeteur->executer_requete($query, $tracer); |
|
| 2799 | + } |
|
| 2800 | + |
|
| 2801 | + /** |
|
| 2802 | + * Obtient l'identifiant de la dernière ligne insérée ou modifiée |
|
| 2803 | + * |
|
| 2804 | + * @param string $serveur Nom de la connexion |
|
| 2805 | + * return int Identifiant |
|
| 2806 | + **/ |
|
| 2807 | + public static function last_insert_id($serveur) { |
|
| 2808 | + $requeteur = spip_sqlite::requeteur($serveur); |
|
| 2809 | + |
|
| 2810 | + return $requeteur->last_insert_id($serveur); |
|
| 2811 | + } |
|
| 2812 | + |
|
| 2813 | + /** |
|
| 2814 | + * Annule une transaction |
|
| 2815 | + * |
|
| 2816 | + * @param string $serveur Nom de la connexion |
|
| 2817 | + **/ |
|
| 2818 | + public static function annuler_transaction($serveur) { |
|
| 2819 | + spip_sqlite::executer_requete('ROLLBACK', $serveur); |
|
| 2820 | + spip_sqlite::$transaction_en_cours[$serveur] = false; |
|
| 2821 | + } |
|
| 2822 | + |
|
| 2823 | + /** |
|
| 2824 | + * Termine une transaction |
|
| 2825 | + * |
|
| 2826 | + * @param string $serveur Nom de la connexion |
|
| 2827 | + **/ |
|
| 2828 | + public static function finir_transaction($serveur) { |
|
| 2829 | + // si pas de transaction en cours, ne rien faire et le dire |
|
| 2830 | + if ( |
|
| 2831 | + !isset(spip_sqlite::$transaction_en_cours[$serveur]) |
|
| 2832 | + or spip_sqlite::$transaction_en_cours[$serveur] == false |
|
| 2833 | + ) { |
|
| 2834 | + return false; |
|
| 2835 | + } |
|
| 2836 | + // sinon fermer la transaction et retourner true |
|
| 2837 | + spip_sqlite::executer_requete('COMMIT', $serveur); |
|
| 2838 | + spip_sqlite::$transaction_en_cours[$serveur] = false; |
|
| 2839 | + |
|
| 2840 | + return true; |
|
| 2841 | + } |
|
| 2842 | 2842 | } |
| 2843 | 2843 | |
| 2844 | 2844 | /* |
@@ -2851,127 +2851,127 @@ discard block |
||
| 2851 | 2851 | */ |
| 2852 | 2852 | |
| 2853 | 2853 | class sqlite_requeteur { |
| 2854 | - /** @var string Texte de la requête */ |
|
| 2855 | - public $query = ''; // la requete |
|
| 2856 | - /** @var string Nom de la connexion */ |
|
| 2857 | - public $serveur = ''; |
|
| 2858 | - /** @var Ressource Identifiant de la connexion SQLite */ |
|
| 2859 | - public $link = ''; |
|
| 2860 | - /** @var string Prefixe des tables SPIP */ |
|
| 2861 | - public $prefixe = ''; |
|
| 2862 | - /** @var string Nom de la base de donnée */ |
|
| 2863 | - public $db = ''; |
|
| 2864 | - /** @var bool Doit-on tracer les requetes (var_profile) ? */ |
|
| 2865 | - public $tracer = false; // doit-on tracer les requetes (var_profile) |
|
| 2866 | - |
|
| 2867 | - /** @var string Version de SQLite (2 ou 3) */ |
|
| 2868 | - public $sqlite_version = ''; |
|
| 2869 | - |
|
| 2870 | - /** |
|
| 2871 | - * Constructeur |
|
| 2872 | - * |
|
| 2873 | - * @param string $serveur |
|
| 2874 | - * @return bool |
|
| 2875 | - */ |
|
| 2876 | - public function __construct($serveur = '') { |
|
| 2877 | - _sqlite_init(); |
|
| 2878 | - $this->serveur = strtolower($serveur); |
|
| 2879 | - |
|
| 2880 | - if (!($this->link = _sqlite_link($this->serveur)) && (!defined('_ECRIRE_INSTALL') || !_ECRIRE_INSTALL)) { |
|
| 2881 | - spip_log('Aucune connexion sqlite (link)', 'sqlite.' . _LOG_ERREUR); |
|
| 2882 | - |
|
| 2883 | - return false; |
|
| 2884 | - } |
|
| 2885 | - |
|
| 2886 | - $this->sqlite_version = _sqlite_is_version('', $this->link); |
|
| 2887 | - |
|
| 2888 | - $this->prefixe = $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['prefixe']; |
|
| 2889 | - $this->db = $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['db']; |
|
| 2890 | - |
|
| 2891 | - // tracage des requetes ? |
|
| 2892 | - $this->tracer = (isset($_GET['var_profile']) && $_GET['var_profile']); |
|
| 2893 | - } |
|
| 2894 | - |
|
| 2895 | - /** |
|
| 2896 | - * Lancer la requête transmise et faire le tracage si demandé |
|
| 2897 | - * |
|
| 2898 | - * @param string $query |
|
| 2899 | - * Requête à exécuter |
|
| 2900 | - * @param bool|null $tracer |
|
| 2901 | - * true pour tracer la requête |
|
| 2902 | - * @return bool|SQLiteResult |
|
| 2903 | - */ |
|
| 2904 | - public function executer_requete($query, $tracer = null) { |
|
| 2905 | - if (is_null($tracer)) { |
|
| 2906 | - $tracer = $this->tracer; |
|
| 2907 | - } |
|
| 2908 | - $err = ''; |
|
| 2909 | - $t = 0; |
|
| 2910 | - if ($tracer or (defined('_DEBUG_TRACE_QUERIES') and _DEBUG_TRACE_QUERIES)) { |
|
| 2911 | - include_spip('public/tracer'); |
|
| 2912 | - $t = trace_query_start(); |
|
| 2913 | - } |
|
| 2914 | - |
|
| 2915 | - # spip_log("requete: $this->serveur >> $query",'sqlite.'._LOG_DEBUG); // boum ? pourquoi ? |
|
| 2916 | - if ($this->link) { |
|
| 2917 | - // memoriser la derniere erreur PHP vue |
|
| 2918 | - $last_error = (function_exists('error_get_last') ? error_get_last() : ''); |
|
| 2919 | - $e = null; |
|
| 2920 | - // sauver la derniere requete |
|
| 2921 | - $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['last'] = $query; |
|
| 2922 | - $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['total_requetes']++; |
|
| 2923 | - |
|
| 2924 | - try { |
|
| 2925 | - $r = $this->link->query($query); |
|
| 2926 | - } catch (\PDOException $e) { |
|
| 2927 | - spip_log('PDOException: ' . $e->getMessage(), 'sqlite.' . _LOG_DEBUG); |
|
| 2928 | - $r = false; |
|
| 2929 | - } |
|
| 2930 | - // sauvegarde de la requete (elle y est deja dans $r->queryString) |
|
| 2931 | - # $r->spipQueryString = $query; |
|
| 2932 | - |
|
| 2933 | - // comptage : oblige de compter le nombre d'entrees retournees |
|
| 2934 | - // par une requete SELECT |
|
| 2935 | - // aucune autre solution ne donne le nombre attendu :( ! |
|
| 2936 | - // particulierement s'il y a des LIMIT dans la requete. |
|
| 2937 | - if (strtoupper(substr(ltrim($query), 0, 6)) == 'SELECT') { |
|
| 2938 | - if ($r) { |
|
| 2939 | - // noter le link et la query pour faire le comptage *si* on en a besoin |
|
| 2940 | - $r->spipSqliteRowCount = [$this->link, $query]; |
|
| 2941 | - } elseif ($r instanceof PDOStatement) { |
|
| 2942 | - $r->spipSqliteRowCount = 0; |
|
| 2943 | - } |
|
| 2944 | - } |
|
| 2945 | - |
|
| 2946 | - // loger les warnings/erreurs eventuels de sqlite remontant dans PHP |
|
| 2947 | - if ($e and $e instanceof \PDOException) { |
|
| 2948 | - $err = strip_tags($e->getMessage()) . ' in ' . $e->getFile() . ' line ' . $e->getLine(); |
|
| 2949 | - spip_log("$err - " . $query, 'sqlite.' . _LOG_ERREUR); |
|
| 2950 | - } elseif ($err = (function_exists('error_get_last') ? error_get_last() : '') and $err != $last_error) { |
|
| 2951 | - $err = strip_tags($err['message']) . ' in ' . $err['file'] . ' line ' . $err['line']; |
|
| 2952 | - spip_log("$err - " . $query, 'sqlite.' . _LOG_ERREUR); |
|
| 2953 | - } else { |
|
| 2954 | - $err = ''; |
|
| 2955 | - } |
|
| 2956 | - } else { |
|
| 2957 | - $r = false; |
|
| 2958 | - } |
|
| 2959 | - |
|
| 2960 | - if (spip_sqlite_errno($this->serveur)) { |
|
| 2961 | - $err .= spip_sqlite_error($query, $this->serveur); |
|
| 2962 | - } |
|
| 2963 | - |
|
| 2964 | - return $t ? trace_query_end($query, $t, $r, $err, $this->serveur) : $r; |
|
| 2965 | - } |
|
| 2966 | - |
|
| 2967 | - /** |
|
| 2968 | - * Obtient l'identifiant de la dernière ligne insérée ou modifiée |
|
| 2969 | - * |
|
| 2970 | - * @return int |
|
| 2971 | - **/ |
|
| 2972 | - public function last_insert_id() { |
|
| 2973 | - return $this->link->lastInsertId(); |
|
| 2974 | - } |
|
| 2854 | + /** @var string Texte de la requête */ |
|
| 2855 | + public $query = ''; // la requete |
|
| 2856 | + /** @var string Nom de la connexion */ |
|
| 2857 | + public $serveur = ''; |
|
| 2858 | + /** @var Ressource Identifiant de la connexion SQLite */ |
|
| 2859 | + public $link = ''; |
|
| 2860 | + /** @var string Prefixe des tables SPIP */ |
|
| 2861 | + public $prefixe = ''; |
|
| 2862 | + /** @var string Nom de la base de donnée */ |
|
| 2863 | + public $db = ''; |
|
| 2864 | + /** @var bool Doit-on tracer les requetes (var_profile) ? */ |
|
| 2865 | + public $tracer = false; // doit-on tracer les requetes (var_profile) |
|
| 2866 | + |
|
| 2867 | + /** @var string Version de SQLite (2 ou 3) */ |
|
| 2868 | + public $sqlite_version = ''; |
|
| 2869 | + |
|
| 2870 | + /** |
|
| 2871 | + * Constructeur |
|
| 2872 | + * |
|
| 2873 | + * @param string $serveur |
|
| 2874 | + * @return bool |
|
| 2875 | + */ |
|
| 2876 | + public function __construct($serveur = '') { |
|
| 2877 | + _sqlite_init(); |
|
| 2878 | + $this->serveur = strtolower($serveur); |
|
| 2879 | + |
|
| 2880 | + if (!($this->link = _sqlite_link($this->serveur)) && (!defined('_ECRIRE_INSTALL') || !_ECRIRE_INSTALL)) { |
|
| 2881 | + spip_log('Aucune connexion sqlite (link)', 'sqlite.' . _LOG_ERREUR); |
|
| 2882 | + |
|
| 2883 | + return false; |
|
| 2884 | + } |
|
| 2885 | + |
|
| 2886 | + $this->sqlite_version = _sqlite_is_version('', $this->link); |
|
| 2887 | + |
|
| 2888 | + $this->prefixe = $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['prefixe']; |
|
| 2889 | + $this->db = $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['db']; |
|
| 2890 | + |
|
| 2891 | + // tracage des requetes ? |
|
| 2892 | + $this->tracer = (isset($_GET['var_profile']) && $_GET['var_profile']); |
|
| 2893 | + } |
|
| 2894 | + |
|
| 2895 | + /** |
|
| 2896 | + * Lancer la requête transmise et faire le tracage si demandé |
|
| 2897 | + * |
|
| 2898 | + * @param string $query |
|
| 2899 | + * Requête à exécuter |
|
| 2900 | + * @param bool|null $tracer |
|
| 2901 | + * true pour tracer la requête |
|
| 2902 | + * @return bool|SQLiteResult |
|
| 2903 | + */ |
|
| 2904 | + public function executer_requete($query, $tracer = null) { |
|
| 2905 | + if (is_null($tracer)) { |
|
| 2906 | + $tracer = $this->tracer; |
|
| 2907 | + } |
|
| 2908 | + $err = ''; |
|
| 2909 | + $t = 0; |
|
| 2910 | + if ($tracer or (defined('_DEBUG_TRACE_QUERIES') and _DEBUG_TRACE_QUERIES)) { |
|
| 2911 | + include_spip('public/tracer'); |
|
| 2912 | + $t = trace_query_start(); |
|
| 2913 | + } |
|
| 2914 | + |
|
| 2915 | + # spip_log("requete: $this->serveur >> $query",'sqlite.'._LOG_DEBUG); // boum ? pourquoi ? |
|
| 2916 | + if ($this->link) { |
|
| 2917 | + // memoriser la derniere erreur PHP vue |
|
| 2918 | + $last_error = (function_exists('error_get_last') ? error_get_last() : ''); |
|
| 2919 | + $e = null; |
|
| 2920 | + // sauver la derniere requete |
|
| 2921 | + $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['last'] = $query; |
|
| 2922 | + $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['total_requetes']++; |
|
| 2923 | + |
|
| 2924 | + try { |
|
| 2925 | + $r = $this->link->query($query); |
|
| 2926 | + } catch (\PDOException $e) { |
|
| 2927 | + spip_log('PDOException: ' . $e->getMessage(), 'sqlite.' . _LOG_DEBUG); |
|
| 2928 | + $r = false; |
|
| 2929 | + } |
|
| 2930 | + // sauvegarde de la requete (elle y est deja dans $r->queryString) |
|
| 2931 | + # $r->spipQueryString = $query; |
|
| 2932 | + |
|
| 2933 | + // comptage : oblige de compter le nombre d'entrees retournees |
|
| 2934 | + // par une requete SELECT |
|
| 2935 | + // aucune autre solution ne donne le nombre attendu :( ! |
|
| 2936 | + // particulierement s'il y a des LIMIT dans la requete. |
|
| 2937 | + if (strtoupper(substr(ltrim($query), 0, 6)) == 'SELECT') { |
|
| 2938 | + if ($r) { |
|
| 2939 | + // noter le link et la query pour faire le comptage *si* on en a besoin |
|
| 2940 | + $r->spipSqliteRowCount = [$this->link, $query]; |
|
| 2941 | + } elseif ($r instanceof PDOStatement) { |
|
| 2942 | + $r->spipSqliteRowCount = 0; |
|
| 2943 | + } |
|
| 2944 | + } |
|
| 2945 | + |
|
| 2946 | + // loger les warnings/erreurs eventuels de sqlite remontant dans PHP |
|
| 2947 | + if ($e and $e instanceof \PDOException) { |
|
| 2948 | + $err = strip_tags($e->getMessage()) . ' in ' . $e->getFile() . ' line ' . $e->getLine(); |
|
| 2949 | + spip_log("$err - " . $query, 'sqlite.' . _LOG_ERREUR); |
|
| 2950 | + } elseif ($err = (function_exists('error_get_last') ? error_get_last() : '') and $err != $last_error) { |
|
| 2951 | + $err = strip_tags($err['message']) . ' in ' . $err['file'] . ' line ' . $err['line']; |
|
| 2952 | + spip_log("$err - " . $query, 'sqlite.' . _LOG_ERREUR); |
|
| 2953 | + } else { |
|
| 2954 | + $err = ''; |
|
| 2955 | + } |
|
| 2956 | + } else { |
|
| 2957 | + $r = false; |
|
| 2958 | + } |
|
| 2959 | + |
|
| 2960 | + if (spip_sqlite_errno($this->serveur)) { |
|
| 2961 | + $err .= spip_sqlite_error($query, $this->serveur); |
|
| 2962 | + } |
|
| 2963 | + |
|
| 2964 | + return $t ? trace_query_end($query, $t, $r, $err, $this->serveur) : $r; |
|
| 2965 | + } |
|
| 2966 | + |
|
| 2967 | + /** |
|
| 2968 | + * Obtient l'identifiant de la dernière ligne insérée ou modifiée |
|
| 2969 | + * |
|
| 2970 | + * @return int |
|
| 2971 | + **/ |
|
| 2972 | + public function last_insert_id() { |
|
| 2973 | + return $this->link->lastInsertId(); |
|
| 2974 | + } |
|
| 2975 | 2975 | } |
| 2976 | 2976 | |
| 2977 | 2977 | |
@@ -2981,206 +2981,206 @@ discard block |
||
| 2981 | 2981 | * (fonction pour proteger les textes) |
| 2982 | 2982 | */ |
| 2983 | 2983 | class sqlite_traducteur { |
| 2984 | - /** @var string $query Texte de la requête */ |
|
| 2985 | - public $query = ''; |
|
| 2986 | - /** @var string $prefixe Préfixe des tables */ |
|
| 2987 | - public $prefixe = ''; |
|
| 2988 | - /** @var string $sqlite_version Version de sqlite (2 ou 3) */ |
|
| 2989 | - public $sqlite_version = ''; |
|
| 2990 | - |
|
| 2991 | - /** Pour les corrections à effectuer sur les requêtes : array(code=>'texte') trouvé |
|
| 2992 | - * |
|
| 2993 | - * @var array |
|
| 2994 | - */ |
|
| 2995 | - public $textes = []; |
|
| 2996 | - |
|
| 2997 | - /** |
|
| 2998 | - * Constructeur |
|
| 2999 | - * |
|
| 3000 | - * @param string $query Requête à préparer |
|
| 3001 | - * @param string $prefixe Prefixe des tables à utiliser |
|
| 3002 | - * @param string $sqlite_version Version SQLite (2 ou 3) |
|
| 3003 | - */ |
|
| 3004 | - public function __construct($query, $prefixe, $sqlite_version) { |
|
| 3005 | - $this->query = $query; |
|
| 3006 | - $this->prefixe = $prefixe; |
|
| 3007 | - $this->sqlite_version = $sqlite_version; |
|
| 3008 | - } |
|
| 3009 | - |
|
| 3010 | - /** |
|
| 3011 | - * Transformer la requete pour SQLite |
|
| 3012 | - * |
|
| 3013 | - * Enlève les textes, transforme la requête pour quelle soit |
|
| 3014 | - * bien interprétée par SQLite, puis remet les textes |
|
| 3015 | - * la fonction affecte `$this->query` |
|
| 3016 | - */ |
|
| 3017 | - public function traduire_requete() { |
|
| 3018 | - // |
|
| 3019 | - // 1) Protection des textes en les remplacant par des codes |
|
| 3020 | - // |
|
| 3021 | - // enlever les 'textes' et initialiser avec |
|
| 3022 | - list($this->query, $textes) = query_echappe_textes($this->query); |
|
| 3023 | - |
|
| 3024 | - // |
|
| 3025 | - // 2) Corrections de la requete |
|
| 3026 | - // |
|
| 3027 | - // Correction Create Database |
|
| 3028 | - // Create Database -> requete ignoree |
|
| 3029 | - if (strpos($this->query, 'CREATE DATABASE') === 0) { |
|
| 3030 | - spip_log("Sqlite : requete non executee -> $this->query", 'sqlite.' . _LOG_AVERTISSEMENT); |
|
| 3031 | - $this->query = 'SELECT 1'; |
|
| 3032 | - } |
|
| 3033 | - |
|
| 3034 | - // Correction Insert Ignore |
|
| 3035 | - // INSERT IGNORE -> insert (tout court et pas 'insert or replace') |
|
| 3036 | - if (strpos($this->query, 'INSERT IGNORE') === 0) { |
|
| 3037 | - spip_log("Sqlite : requete transformee -> $this->query", 'sqlite.' . _LOG_DEBUG); |
|
| 3038 | - $this->query = 'INSERT ' . substr($this->query, '13'); |
|
| 3039 | - } |
|
| 3040 | - |
|
| 3041 | - // Correction des dates avec INTERVAL |
|
| 3042 | - // utiliser sql_date_proche() de preference |
|
| 3043 | - if (strpos($this->query, 'INTERVAL') !== false) { |
|
| 3044 | - $this->query = preg_replace_callback( |
|
| 3045 | - '/DATE_(ADD|SUB)(.*)INTERVAL\s+(\d+)\s+([a-zA-Z]+)\)/U', |
|
| 3046 | - [&$this, '_remplacerDateParTime'], |
|
| 3047 | - $this->query |
|
| 3048 | - ); |
|
| 3049 | - } |
|
| 3050 | - |
|
| 3051 | - if (strpos($this->query, 'LEFT(') !== false) { |
|
| 3052 | - $this->query = str_replace('LEFT(', '_LEFT(', $this->query); |
|
| 3053 | - } |
|
| 3054 | - |
|
| 3055 | - if (strpos($this->query, 'TIMESTAMPDIFF(') !== false) { |
|
| 3056 | - $this->query = preg_replace('/TIMESTAMPDIFF\(\s*([^,]*)\s*,/Uims', "TIMESTAMPDIFF('\\1',", $this->query); |
|
| 3057 | - } |
|
| 3058 | - |
|
| 3059 | - |
|
| 3060 | - // Correction Using |
|
| 3061 | - // USING (non reconnu en sqlite2) |
|
| 3062 | - // problematique car la jointure ne se fait pas du coup. |
|
| 3063 | - if (($this->sqlite_version == 2) && (strpos($this->query, 'USING') !== false)) { |
|
| 3064 | - spip_log( |
|
| 3065 | - "'USING (champ)' n'est pas reconnu en SQLite 2. Utilisez 'ON table1.champ = table2.champ'", |
|
| 3066 | - 'sqlite.' . _LOG_ERREUR |
|
| 3067 | - ); |
|
| 3068 | - $this->query = preg_replace('/USING\s*\([^\)]*\)/', '', $this->query); |
|
| 3069 | - } |
|
| 3070 | - |
|
| 3071 | - // Correction Field |
|
| 3072 | - // remplace FIELD(table,i,j,k...) par CASE WHEN table=i THEN n ... ELSE 0 END |
|
| 3073 | - if (strpos($this->query, 'FIELD') !== false) { |
|
| 3074 | - $this->query = preg_replace_callback( |
|
| 3075 | - '/FIELD\s*\(([^\)]*)\)/', |
|
| 3076 | - [&$this, '_remplacerFieldParCase'], |
|
| 3077 | - $this->query |
|
| 3078 | - ); |
|
| 3079 | - } |
|
| 3080 | - |
|
| 3081 | - // Correction des noms de tables FROM |
|
| 3082 | - // mettre les bons noms de table dans from, update, insert, replace... |
|
| 3083 | - if (preg_match('/\s(SET|VALUES|WHERE|DATABASE)\s/iS', $this->query, $regs)) { |
|
| 3084 | - $suite = strstr($this->query, $regs[0]); |
|
| 3085 | - $this->query = substr($this->query, 0, -strlen($suite)); |
|
| 3086 | - } else { |
|
| 3087 | - $suite = ''; |
|
| 3088 | - } |
|
| 3089 | - $pref = ($this->prefixe) ? $this->prefixe . '_' : ''; |
|
| 3090 | - $this->query = preg_replace('/([,\s])spip_/S', '\1' . $pref, $this->query) . $suite; |
|
| 3091 | - |
|
| 3092 | - // Correction zero AS x |
|
| 3093 | - // pg n'aime pas 0+x AS alias, sqlite, dans le meme style, |
|
| 3094 | - // n'apprecie pas du tout SELECT 0 as x ... ORDER BY x |
|
| 3095 | - // il dit que x ne doit pas être un integer dans le order by ! |
|
| 3096 | - // on remplace du coup x par vide() dans ce cas uniquement |
|
| 3097 | - // |
|
| 3098 | - // apparait dans public/vertebrer.php et dans le plugin menu aussi qui genere aussi ce genre de requete via un {par num #GET{tri_num}} |
|
| 3099 | - // mais est-ce encore un soucis pour sqlite en 2021 ? (ie commenter le preg_replace marche très bien en sqlite 3.28) |
|
| 3100 | - if ((strpos($this->query, '0 AS') !== false)) { |
|
| 3101 | - // on ne remplace que dans ORDER BY ou GROUP BY |
|
| 3102 | - if (preg_match('/\s(ORDER|GROUP) BY\s/i', $this->query, $regs)) { |
|
| 3103 | - $suite = strstr($this->query, $regs[0]); |
|
| 3104 | - $this->query = substr($this->query, 0, -strlen($suite)); |
|
| 3105 | - |
|
| 3106 | - // on cherche les noms des x dans 0 AS x |
|
| 3107 | - // on remplace dans $suite le nom par vide() |
|
| 3108 | - preg_match_all('/\b0 AS\s*([^\s,]+)/', $this->query, $matches, PREG_PATTERN_ORDER); |
|
| 3109 | - foreach ($matches[1] as $m) { |
|
| 3110 | - if (strpos($suite, $m) !== false) { |
|
| 3111 | - $suite = preg_replace(",\b$m\b,", 'VIDE()', $suite); |
|
| 3112 | - } |
|
| 3113 | - } |
|
| 3114 | - $this->query .= $suite; |
|
| 3115 | - } |
|
| 3116 | - } |
|
| 3117 | - |
|
| 3118 | - // Correction possible des divisions entieres |
|
| 3119 | - // Le standard SQL (lequel? ou?) semble indiquer que |
|
| 3120 | - // a/b=c doit donner c entier si a et b sont entiers 4/3=1. |
|
| 3121 | - // C'est ce que retournent effectivement SQL Server et SQLite |
|
| 3122 | - // Ce n'est pas ce qu'applique MySQL qui retourne un reel : 4/3=1.333... |
|
| 3123 | - // |
|
| 3124 | - // On peut forcer la conversion en multipliant par 1.0 avant la division |
|
| 3125 | - // /!\ SQLite 3.5.9 Debian/Ubuntu est victime d'un bug en plus ! |
|
| 3126 | - // cf. https://bugs.launchpad.net/ubuntu/+source/sqlite3/+bug/254228 |
|
| 3127 | - // http://www.sqlite.org/cvstrac/tktview?tn=3202 |
|
| 3128 | - // (4*1.0/3) n'est pas rendu dans ce cas ! |
|
| 3129 | - # $this->query = str_replace('/','* 1.00 / ',$this->query); |
|
| 3130 | - |
|
| 3131 | - |
|
| 3132 | - // Correction critere REGEXP, non reconnu en sqlite2 |
|
| 3133 | - if (($this->sqlite_version == 2) && (strpos($this->query, 'REGEXP') !== false)) { |
|
| 3134 | - $this->query = preg_replace('/([^\s\(]*)(\s*)REGEXP(\s*)([^\s\)]*)/', 'REGEXP($4, $1)', $this->query); |
|
| 3135 | - } |
|
| 3136 | - |
|
| 3137 | - // |
|
| 3138 | - // 3) Remise en place des textes d'origine |
|
| 3139 | - // |
|
| 3140 | - // Correction Antiquotes et echappements |
|
| 3141 | - // ` => rien |
|
| 3142 | - if (strpos($this->query, '`') !== false) { |
|
| 3143 | - $this->query = str_replace('`', '', $this->query); |
|
| 3144 | - } |
|
| 3145 | - |
|
| 3146 | - $this->query = query_reinjecte_textes($this->query, $textes); |
|
| 3147 | - |
|
| 3148 | - return $this->query; |
|
| 3149 | - } |
|
| 3150 | - |
|
| 3151 | - |
|
| 3152 | - /** |
|
| 3153 | - * Callback pour remplacer `DATE_` / `INTERVAL` |
|
| 3154 | - * par `DATE ... strtotime` |
|
| 3155 | - * |
|
| 3156 | - * @param array $matches Captures |
|
| 3157 | - * @return string Texte de date compris par SQLite |
|
| 3158 | - */ |
|
| 3159 | - public function _remplacerDateParTime($matches) { |
|
| 3160 | - $op = strtoupper($matches[1] == 'ADD') ? '+' : '-'; |
|
| 3161 | - |
|
| 3162 | - return "datetime$matches[2] '$op$matches[3] $matches[4]')"; |
|
| 3163 | - } |
|
| 3164 | - |
|
| 3165 | - /** |
|
| 3166 | - * Callback pour remplacer `FIELD(table,i,j,k...)` |
|
| 3167 | - * par `CASE WHEN table=i THEN n ... ELSE 0 END` |
|
| 3168 | - * |
|
| 3169 | - * @param array $matches Captures |
|
| 3170 | - * @return string Texte de liste ordonnée compris par SQLite |
|
| 3171 | - */ |
|
| 3172 | - public function _remplacerFieldParCase($matches) { |
|
| 3173 | - $fields = substr($matches[0], 6, -1); // ne recuperer que l'interieur X de field(X) |
|
| 3174 | - $t = explode(',', $fields); |
|
| 3175 | - $index = array_shift($t); |
|
| 3176 | - |
|
| 3177 | - $res = ''; |
|
| 3178 | - $n = 0; |
|
| 3179 | - foreach ($t as $v) { |
|
| 3180 | - $n++; |
|
| 3181 | - $res .= "\nWHEN $index=$v THEN $n"; |
|
| 3182 | - } |
|
| 3183 | - |
|
| 3184 | - return "CASE $res ELSE 0 END "; |
|
| 3185 | - } |
|
| 2984 | + /** @var string $query Texte de la requête */ |
|
| 2985 | + public $query = ''; |
|
| 2986 | + /** @var string $prefixe Préfixe des tables */ |
|
| 2987 | + public $prefixe = ''; |
|
| 2988 | + /** @var string $sqlite_version Version de sqlite (2 ou 3) */ |
|
| 2989 | + public $sqlite_version = ''; |
|
| 2990 | + |
|
| 2991 | + /** Pour les corrections à effectuer sur les requêtes : array(code=>'texte') trouvé |
|
| 2992 | + * |
|
| 2993 | + * @var array |
|
| 2994 | + */ |
|
| 2995 | + public $textes = []; |
|
| 2996 | + |
|
| 2997 | + /** |
|
| 2998 | + * Constructeur |
|
| 2999 | + * |
|
| 3000 | + * @param string $query Requête à préparer |
|
| 3001 | + * @param string $prefixe Prefixe des tables à utiliser |
|
| 3002 | + * @param string $sqlite_version Version SQLite (2 ou 3) |
|
| 3003 | + */ |
|
| 3004 | + public function __construct($query, $prefixe, $sqlite_version) { |
|
| 3005 | + $this->query = $query; |
|
| 3006 | + $this->prefixe = $prefixe; |
|
| 3007 | + $this->sqlite_version = $sqlite_version; |
|
| 3008 | + } |
|
| 3009 | + |
|
| 3010 | + /** |
|
| 3011 | + * Transformer la requete pour SQLite |
|
| 3012 | + * |
|
| 3013 | + * Enlève les textes, transforme la requête pour quelle soit |
|
| 3014 | + * bien interprétée par SQLite, puis remet les textes |
|
| 3015 | + * la fonction affecte `$this->query` |
|
| 3016 | + */ |
|
| 3017 | + public function traduire_requete() { |
|
| 3018 | + // |
|
| 3019 | + // 1) Protection des textes en les remplacant par des codes |
|
| 3020 | + // |
|
| 3021 | + // enlever les 'textes' et initialiser avec |
|
| 3022 | + list($this->query, $textes) = query_echappe_textes($this->query); |
|
| 3023 | + |
|
| 3024 | + // |
|
| 3025 | + // 2) Corrections de la requete |
|
| 3026 | + // |
|
| 3027 | + // Correction Create Database |
|
| 3028 | + // Create Database -> requete ignoree |
|
| 3029 | + if (strpos($this->query, 'CREATE DATABASE') === 0) { |
|
| 3030 | + spip_log("Sqlite : requete non executee -> $this->query", 'sqlite.' . _LOG_AVERTISSEMENT); |
|
| 3031 | + $this->query = 'SELECT 1'; |
|
| 3032 | + } |
|
| 3033 | + |
|
| 3034 | + // Correction Insert Ignore |
|
| 3035 | + // INSERT IGNORE -> insert (tout court et pas 'insert or replace') |
|
| 3036 | + if (strpos($this->query, 'INSERT IGNORE') === 0) { |
|
| 3037 | + spip_log("Sqlite : requete transformee -> $this->query", 'sqlite.' . _LOG_DEBUG); |
|
| 3038 | + $this->query = 'INSERT ' . substr($this->query, '13'); |
|
| 3039 | + } |
|
| 3040 | + |
|
| 3041 | + // Correction des dates avec INTERVAL |
|
| 3042 | + // utiliser sql_date_proche() de preference |
|
| 3043 | + if (strpos($this->query, 'INTERVAL') !== false) { |
|
| 3044 | + $this->query = preg_replace_callback( |
|
| 3045 | + '/DATE_(ADD|SUB)(.*)INTERVAL\s+(\d+)\s+([a-zA-Z]+)\)/U', |
|
| 3046 | + [&$this, '_remplacerDateParTime'], |
|
| 3047 | + $this->query |
|
| 3048 | + ); |
|
| 3049 | + } |
|
| 3050 | + |
|
| 3051 | + if (strpos($this->query, 'LEFT(') !== false) { |
|
| 3052 | + $this->query = str_replace('LEFT(', '_LEFT(', $this->query); |
|
| 3053 | + } |
|
| 3054 | + |
|
| 3055 | + if (strpos($this->query, 'TIMESTAMPDIFF(') !== false) { |
|
| 3056 | + $this->query = preg_replace('/TIMESTAMPDIFF\(\s*([^,]*)\s*,/Uims', "TIMESTAMPDIFF('\\1',", $this->query); |
|
| 3057 | + } |
|
| 3058 | + |
|
| 3059 | + |
|
| 3060 | + // Correction Using |
|
| 3061 | + // USING (non reconnu en sqlite2) |
|
| 3062 | + // problematique car la jointure ne se fait pas du coup. |
|
| 3063 | + if (($this->sqlite_version == 2) && (strpos($this->query, 'USING') !== false)) { |
|
| 3064 | + spip_log( |
|
| 3065 | + "'USING (champ)' n'est pas reconnu en SQLite 2. Utilisez 'ON table1.champ = table2.champ'", |
|
| 3066 | + 'sqlite.' . _LOG_ERREUR |
|
| 3067 | + ); |
|
| 3068 | + $this->query = preg_replace('/USING\s*\([^\)]*\)/', '', $this->query); |
|
| 3069 | + } |
|
| 3070 | + |
|
| 3071 | + // Correction Field |
|
| 3072 | + // remplace FIELD(table,i,j,k...) par CASE WHEN table=i THEN n ... ELSE 0 END |
|
| 3073 | + if (strpos($this->query, 'FIELD') !== false) { |
|
| 3074 | + $this->query = preg_replace_callback( |
|
| 3075 | + '/FIELD\s*\(([^\)]*)\)/', |
|
| 3076 | + [&$this, '_remplacerFieldParCase'], |
|
| 3077 | + $this->query |
|
| 3078 | + ); |
|
| 3079 | + } |
|
| 3080 | + |
|
| 3081 | + // Correction des noms de tables FROM |
|
| 3082 | + // mettre les bons noms de table dans from, update, insert, replace... |
|
| 3083 | + if (preg_match('/\s(SET|VALUES|WHERE|DATABASE)\s/iS', $this->query, $regs)) { |
|
| 3084 | + $suite = strstr($this->query, $regs[0]); |
|
| 3085 | + $this->query = substr($this->query, 0, -strlen($suite)); |
|
| 3086 | + } else { |
|
| 3087 | + $suite = ''; |
|
| 3088 | + } |
|
| 3089 | + $pref = ($this->prefixe) ? $this->prefixe . '_' : ''; |
|
| 3090 | + $this->query = preg_replace('/([,\s])spip_/S', '\1' . $pref, $this->query) . $suite; |
|
| 3091 | + |
|
| 3092 | + // Correction zero AS x |
|
| 3093 | + // pg n'aime pas 0+x AS alias, sqlite, dans le meme style, |
|
| 3094 | + // n'apprecie pas du tout SELECT 0 as x ... ORDER BY x |
|
| 3095 | + // il dit que x ne doit pas être un integer dans le order by ! |
|
| 3096 | + // on remplace du coup x par vide() dans ce cas uniquement |
|
| 3097 | + // |
|
| 3098 | + // apparait dans public/vertebrer.php et dans le plugin menu aussi qui genere aussi ce genre de requete via un {par num #GET{tri_num}} |
|
| 3099 | + // mais est-ce encore un soucis pour sqlite en 2021 ? (ie commenter le preg_replace marche très bien en sqlite 3.28) |
|
| 3100 | + if ((strpos($this->query, '0 AS') !== false)) { |
|
| 3101 | + // on ne remplace que dans ORDER BY ou GROUP BY |
|
| 3102 | + if (preg_match('/\s(ORDER|GROUP) BY\s/i', $this->query, $regs)) { |
|
| 3103 | + $suite = strstr($this->query, $regs[0]); |
|
| 3104 | + $this->query = substr($this->query, 0, -strlen($suite)); |
|
| 3105 | + |
|
| 3106 | + // on cherche les noms des x dans 0 AS x |
|
| 3107 | + // on remplace dans $suite le nom par vide() |
|
| 3108 | + preg_match_all('/\b0 AS\s*([^\s,]+)/', $this->query, $matches, PREG_PATTERN_ORDER); |
|
| 3109 | + foreach ($matches[1] as $m) { |
|
| 3110 | + if (strpos($suite, $m) !== false) { |
|
| 3111 | + $suite = preg_replace(",\b$m\b,", 'VIDE()', $suite); |
|
| 3112 | + } |
|
| 3113 | + } |
|
| 3114 | + $this->query .= $suite; |
|
| 3115 | + } |
|
| 3116 | + } |
|
| 3117 | + |
|
| 3118 | + // Correction possible des divisions entieres |
|
| 3119 | + // Le standard SQL (lequel? ou?) semble indiquer que |
|
| 3120 | + // a/b=c doit donner c entier si a et b sont entiers 4/3=1. |
|
| 3121 | + // C'est ce que retournent effectivement SQL Server et SQLite |
|
| 3122 | + // Ce n'est pas ce qu'applique MySQL qui retourne un reel : 4/3=1.333... |
|
| 3123 | + // |
|
| 3124 | + // On peut forcer la conversion en multipliant par 1.0 avant la division |
|
| 3125 | + // /!\ SQLite 3.5.9 Debian/Ubuntu est victime d'un bug en plus ! |
|
| 3126 | + // cf. https://bugs.launchpad.net/ubuntu/+source/sqlite3/+bug/254228 |
|
| 3127 | + // http://www.sqlite.org/cvstrac/tktview?tn=3202 |
|
| 3128 | + // (4*1.0/3) n'est pas rendu dans ce cas ! |
|
| 3129 | + # $this->query = str_replace('/','* 1.00 / ',$this->query); |
|
| 3130 | + |
|
| 3131 | + |
|
| 3132 | + // Correction critere REGEXP, non reconnu en sqlite2 |
|
| 3133 | + if (($this->sqlite_version == 2) && (strpos($this->query, 'REGEXP') !== false)) { |
|
| 3134 | + $this->query = preg_replace('/([^\s\(]*)(\s*)REGEXP(\s*)([^\s\)]*)/', 'REGEXP($4, $1)', $this->query); |
|
| 3135 | + } |
|
| 3136 | + |
|
| 3137 | + // |
|
| 3138 | + // 3) Remise en place des textes d'origine |
|
| 3139 | + // |
|
| 3140 | + // Correction Antiquotes et echappements |
|
| 3141 | + // ` => rien |
|
| 3142 | + if (strpos($this->query, '`') !== false) { |
|
| 3143 | + $this->query = str_replace('`', '', $this->query); |
|
| 3144 | + } |
|
| 3145 | + |
|
| 3146 | + $this->query = query_reinjecte_textes($this->query, $textes); |
|
| 3147 | + |
|
| 3148 | + return $this->query; |
|
| 3149 | + } |
|
| 3150 | + |
|
| 3151 | + |
|
| 3152 | + /** |
|
| 3153 | + * Callback pour remplacer `DATE_` / `INTERVAL` |
|
| 3154 | + * par `DATE ... strtotime` |
|
| 3155 | + * |
|
| 3156 | + * @param array $matches Captures |
|
| 3157 | + * @return string Texte de date compris par SQLite |
|
| 3158 | + */ |
|
| 3159 | + public function _remplacerDateParTime($matches) { |
|
| 3160 | + $op = strtoupper($matches[1] == 'ADD') ? '+' : '-'; |
|
| 3161 | + |
|
| 3162 | + return "datetime$matches[2] '$op$matches[3] $matches[4]')"; |
|
| 3163 | + } |
|
| 3164 | + |
|
| 3165 | + /** |
|
| 3166 | + * Callback pour remplacer `FIELD(table,i,j,k...)` |
|
| 3167 | + * par `CASE WHEN table=i THEN n ... ELSE 0 END` |
|
| 3168 | + * |
|
| 3169 | + * @param array $matches Captures |
|
| 3170 | + * @return string Texte de liste ordonnée compris par SQLite |
|
| 3171 | + */ |
|
| 3172 | + public function _remplacerFieldParCase($matches) { |
|
| 3173 | + $fields = substr($matches[0], 6, -1); // ne recuperer que l'interieur X de field(X) |
|
| 3174 | + $t = explode(',', $fields); |
|
| 3175 | + $index = array_shift($t); |
|
| 3176 | + |
|
| 3177 | + $res = ''; |
|
| 3178 | + $n = 0; |
|
| 3179 | + foreach ($t as $v) { |
|
| 3180 | + $n++; |
|
| 3181 | + $res .= "\nWHEN $index=$v THEN $n"; |
|
| 3182 | + } |
|
| 3183 | + |
|
| 3184 | + return "CASE $res ELSE 0 END "; |
|
| 3185 | + } |
|
| 3186 | 3186 | } |
@@ -17,7 +17,7 @@ discard block |
||
| 17 | 17 | **/ |
| 18 | 18 | |
| 19 | 19 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 20 | - return; |
|
| 20 | + return; |
|
| 21 | 21 | } |
| 22 | 22 | |
| 23 | 23 | |
@@ -34,53 +34,53 @@ discard block |
||
| 34 | 34 | * @package SPIP\Core\Compilateur\AST |
| 35 | 35 | */ |
| 36 | 36 | class Contexte { |
| 37 | - /** |
|
| 38 | - * Description du squelette |
|
| 39 | - * |
|
| 40 | - * Sert pour la gestion d'erreur et la production de code dependant du contexte |
|
| 41 | - * |
|
| 42 | - * Peut contenir les index : |
|
| 43 | - * |
|
| 44 | - * - nom : Nom du fichier de cache |
|
| 45 | - * - gram : Nom de la grammaire du squelette (détermine le phraseur à utiliser) |
|
| 46 | - * - sourcefile : Chemin du squelette |
|
| 47 | - * - squelette : Code du squelette |
|
| 48 | - * - id_mere : Identifiant de la boucle parente |
|
| 49 | - * - documents : Pour embed et img dans les textes |
|
| 50 | - * - session : Pour un cache sessionné par auteur |
|
| 51 | - * - niv : Niveau de tabulation |
|
| 52 | - * |
|
| 53 | - * @var array |
|
| 54 | - */ |
|
| 55 | - public $descr = []; |
|
| 56 | - |
|
| 57 | - /** |
|
| 58 | - * Identifiant de la boucle |
|
| 59 | - * |
|
| 60 | - * @var string |
|
| 61 | - */ |
|
| 62 | - public $id_boucle = ''; |
|
| 63 | - |
|
| 64 | - /** |
|
| 65 | - * Numéro de ligne dans le code source du squelette |
|
| 66 | - * |
|
| 67 | - * @var int |
|
| 68 | - */ |
|
| 69 | - public $ligne = 0; |
|
| 70 | - |
|
| 71 | - /** |
|
| 72 | - * Langue d'exécution |
|
| 73 | - * |
|
| 74 | - * @var string |
|
| 75 | - */ |
|
| 76 | - public $lang = ''; |
|
| 77 | - |
|
| 78 | - /** |
|
| 79 | - * Résultat de la compilation: toujours une expression PHP |
|
| 80 | - * |
|
| 81 | - * @var string |
|
| 82 | - */ |
|
| 83 | - public $code = ''; |
|
| 37 | + /** |
|
| 38 | + * Description du squelette |
|
| 39 | + * |
|
| 40 | + * Sert pour la gestion d'erreur et la production de code dependant du contexte |
|
| 41 | + * |
|
| 42 | + * Peut contenir les index : |
|
| 43 | + * |
|
| 44 | + * - nom : Nom du fichier de cache |
|
| 45 | + * - gram : Nom de la grammaire du squelette (détermine le phraseur à utiliser) |
|
| 46 | + * - sourcefile : Chemin du squelette |
|
| 47 | + * - squelette : Code du squelette |
|
| 48 | + * - id_mere : Identifiant de la boucle parente |
|
| 49 | + * - documents : Pour embed et img dans les textes |
|
| 50 | + * - session : Pour un cache sessionné par auteur |
|
| 51 | + * - niv : Niveau de tabulation |
|
| 52 | + * |
|
| 53 | + * @var array |
|
| 54 | + */ |
|
| 55 | + public $descr = []; |
|
| 56 | + |
|
| 57 | + /** |
|
| 58 | + * Identifiant de la boucle |
|
| 59 | + * |
|
| 60 | + * @var string |
|
| 61 | + */ |
|
| 62 | + public $id_boucle = ''; |
|
| 63 | + |
|
| 64 | + /** |
|
| 65 | + * Numéro de ligne dans le code source du squelette |
|
| 66 | + * |
|
| 67 | + * @var int |
|
| 68 | + */ |
|
| 69 | + public $ligne = 0; |
|
| 70 | + |
|
| 71 | + /** |
|
| 72 | + * Langue d'exécution |
|
| 73 | + * |
|
| 74 | + * @var string |
|
| 75 | + */ |
|
| 76 | + public $lang = ''; |
|
| 77 | + |
|
| 78 | + /** |
|
| 79 | + * Résultat de la compilation: toujours une expression PHP |
|
| 80 | + * |
|
| 81 | + * @var string |
|
| 82 | + */ |
|
| 83 | + public $code = ''; |
|
| 84 | 84 | } |
| 85 | 85 | |
| 86 | 86 | |
@@ -90,44 +90,44 @@ discard block |
||
| 90 | 90 | * @package SPIP\Core\Compilateur\AST |
| 91 | 91 | **/ |
| 92 | 92 | class Texte { |
| 93 | - /** |
|
| 94 | - * Type de noeud |
|
| 95 | - * |
|
| 96 | - * @var string |
|
| 97 | - */ |
|
| 98 | - public $type = 'texte'; |
|
| 99 | - |
|
| 100 | - /** |
|
| 101 | - * Le texte |
|
| 102 | - * |
|
| 103 | - * @var string |
|
| 104 | - */ |
|
| 105 | - public $texte; |
|
| 106 | - |
|
| 107 | - /** |
|
| 108 | - * Contenu avant le texte. |
|
| 109 | - * |
|
| 110 | - * Vide ou apostrophe simple ou double si le texte en était entouré |
|
| 111 | - * |
|
| 112 | - * @var string|array |
|
| 113 | - */ |
|
| 114 | - public $avant = ''; |
|
| 115 | - |
|
| 116 | - /** |
|
| 117 | - * Contenu après le texte. |
|
| 118 | - * |
|
| 119 | - * Vide ou apostrophe simple ou double si le texte en était entouré |
|
| 120 | - * |
|
| 121 | - * @var string|array |
|
| 122 | - */ |
|
| 123 | - public $apres = ''; |
|
| 124 | - |
|
| 125 | - /** |
|
| 126 | - * Numéro de ligne dans le code source du squelette |
|
| 127 | - * |
|
| 128 | - * @var int |
|
| 129 | - */ |
|
| 130 | - public $ligne = 0; |
|
| 93 | + /** |
|
| 94 | + * Type de noeud |
|
| 95 | + * |
|
| 96 | + * @var string |
|
| 97 | + */ |
|
| 98 | + public $type = 'texte'; |
|
| 99 | + |
|
| 100 | + /** |
|
| 101 | + * Le texte |
|
| 102 | + * |
|
| 103 | + * @var string |
|
| 104 | + */ |
|
| 105 | + public $texte; |
|
| 106 | + |
|
| 107 | + /** |
|
| 108 | + * Contenu avant le texte. |
|
| 109 | + * |
|
| 110 | + * Vide ou apostrophe simple ou double si le texte en était entouré |
|
| 111 | + * |
|
| 112 | + * @var string|array |
|
| 113 | + */ |
|
| 114 | + public $avant = ''; |
|
| 115 | + |
|
| 116 | + /** |
|
| 117 | + * Contenu après le texte. |
|
| 118 | + * |
|
| 119 | + * Vide ou apostrophe simple ou double si le texte en était entouré |
|
| 120 | + * |
|
| 121 | + * @var string|array |
|
| 122 | + */ |
|
| 123 | + public $apres = ''; |
|
| 124 | + |
|
| 125 | + /** |
|
| 126 | + * Numéro de ligne dans le code source du squelette |
|
| 127 | + * |
|
| 128 | + * @var int |
|
| 129 | + */ |
|
| 130 | + public $ligne = 0; |
|
| 131 | 131 | } |
| 132 | 132 | |
| 133 | 133 | /** |
@@ -136,50 +136,50 @@ discard block |
||
| 136 | 136 | * @package SPIP\Core\Compilateur\AST |
| 137 | 137 | **/ |
| 138 | 138 | class Inclure { |
| 139 | - /** |
|
| 140 | - * Type de noeud |
|
| 141 | - * |
|
| 142 | - * @var string |
|
| 143 | - */ |
|
| 144 | - public $type = 'include'; |
|
| 145 | - |
|
| 146 | - /** |
|
| 147 | - * Nom d'un fichier inclu |
|
| 148 | - * |
|
| 149 | - * - Objet Texte si inclusion d'un autre squelette |
|
| 150 | - * - chaîne si inclusion d'un fichier PHP directement |
|
| 151 | - * |
|
| 152 | - * @var string|Texte |
|
| 153 | - */ |
|
| 154 | - public $texte; |
|
| 155 | - |
|
| 156 | - /** |
|
| 157 | - * Inutilisé, propriété générique de l'AST |
|
| 158 | - * |
|
| 159 | - * @var string|array |
|
| 160 | - */ |
|
| 161 | - public $avant = ''; |
|
| 162 | - |
|
| 163 | - /** |
|
| 164 | - * Inutilisé, propriété générique de l'AST |
|
| 165 | - * |
|
| 166 | - * @var string|array |
|
| 167 | - */ |
|
| 168 | - public $apres = ''; |
|
| 169 | - |
|
| 170 | - /** |
|
| 171 | - * Numéro de ligne dans le code source du squelette |
|
| 172 | - * |
|
| 173 | - * @var int |
|
| 174 | - */ |
|
| 175 | - public $ligne = 0; |
|
| 176 | - |
|
| 177 | - /** |
|
| 178 | - * Valeurs des paramètres |
|
| 179 | - * |
|
| 180 | - * @var array |
|
| 181 | - */ |
|
| 182 | - public $param = []; |
|
| 139 | + /** |
|
| 140 | + * Type de noeud |
|
| 141 | + * |
|
| 142 | + * @var string |
|
| 143 | + */ |
|
| 144 | + public $type = 'include'; |
|
| 145 | + |
|
| 146 | + /** |
|
| 147 | + * Nom d'un fichier inclu |
|
| 148 | + * |
|
| 149 | + * - Objet Texte si inclusion d'un autre squelette |
|
| 150 | + * - chaîne si inclusion d'un fichier PHP directement |
|
| 151 | + * |
|
| 152 | + * @var string|Texte |
|
| 153 | + */ |
|
| 154 | + public $texte; |
|
| 155 | + |
|
| 156 | + /** |
|
| 157 | + * Inutilisé, propriété générique de l'AST |
|
| 158 | + * |
|
| 159 | + * @var string|array |
|
| 160 | + */ |
|
| 161 | + public $avant = ''; |
|
| 162 | + |
|
| 163 | + /** |
|
| 164 | + * Inutilisé, propriété générique de l'AST |
|
| 165 | + * |
|
| 166 | + * @var string|array |
|
| 167 | + */ |
|
| 168 | + public $apres = ''; |
|
| 169 | + |
|
| 170 | + /** |
|
| 171 | + * Numéro de ligne dans le code source du squelette |
|
| 172 | + * |
|
| 173 | + * @var int |
|
| 174 | + */ |
|
| 175 | + public $ligne = 0; |
|
| 176 | + |
|
| 177 | + /** |
|
| 178 | + * Valeurs des paramètres |
|
| 179 | + * |
|
| 180 | + * @var array |
|
| 181 | + */ |
|
| 182 | + public $param = []; |
|
| 183 | 183 | } |
| 184 | 184 | |
| 185 | 185 | |
@@ -189,386 +189,386 @@ discard block |
||
| 189 | 189 | * @package SPIP\Core\Compilateur\AST |
| 190 | 190 | **/ |
| 191 | 191 | class Boucle { |
| 192 | - /** |
|
| 193 | - * Type de noeud |
|
| 194 | - * |
|
| 195 | - * @var string |
|
| 196 | - */ |
|
| 197 | - public $type = 'boucle'; |
|
| 198 | - |
|
| 199 | - /** |
|
| 200 | - * Identifiant de la boucle |
|
| 201 | - * |
|
| 202 | - * @var string |
|
| 203 | - */ |
|
| 204 | - public $id_boucle; |
|
| 205 | - |
|
| 206 | - /** |
|
| 207 | - * Identifiant de la boucle parente |
|
| 208 | - * |
|
| 209 | - * @var string |
|
| 210 | - */ |
|
| 211 | - public $id_parent = ''; |
|
| 212 | - |
|
| 213 | - /** |
|
| 214 | - * Partie avant toujours affichee |
|
| 215 | - * |
|
| 216 | - * @var string|array |
|
| 217 | - */ |
|
| 218 | - public $preaff = ''; |
|
| 219 | - |
|
| 220 | - /** |
|
| 221 | - * Partie optionnelle avant |
|
| 222 | - * |
|
| 223 | - * @var string|array |
|
| 224 | - */ |
|
| 225 | - public $avant = ''; |
|
| 226 | - |
|
| 227 | - /** |
|
| 228 | - * Pour chaque élément |
|
| 229 | - * |
|
| 230 | - * @var string|array |
|
| 231 | - */ |
|
| 232 | - public $milieu = ''; |
|
| 233 | - |
|
| 234 | - /** |
|
| 235 | - * Partie optionnelle après |
|
| 236 | - * |
|
| 237 | - * @var string|array |
|
| 238 | - */ |
|
| 239 | - public $apres = ''; |
|
| 240 | - |
|
| 241 | - /** |
|
| 242 | - * Partie alternative, si pas de résultat dans la boucle |
|
| 243 | - * |
|
| 244 | - * @var string|array |
|
| 245 | - */ |
|
| 246 | - public $altern = ''; |
|
| 247 | - |
|
| 248 | - /** |
|
| 249 | - * Partie apres toujours affichee |
|
| 250 | - * |
|
| 251 | - * @var string|array |
|
| 252 | - */ |
|
| 253 | - public $postaff = ''; |
|
| 254 | - |
|
| 255 | - |
|
| 256 | - /** |
|
| 257 | - * La boucle doit-elle sélectionner la langue ? |
|
| 258 | - * |
|
| 259 | - * @var string|null |
|
| 260 | - */ |
|
| 261 | - public $lang_select; |
|
| 262 | - |
|
| 263 | - /** |
|
| 264 | - * Alias de table d'application de la requête ou nom complet de la table SQL |
|
| 265 | - * |
|
| 266 | - * @var string|null |
|
| 267 | - */ |
|
| 268 | - public $type_requete; |
|
| 269 | - |
|
| 270 | - /** |
|
| 271 | - * La table est elle optionnelle ? |
|
| 272 | - * |
|
| 273 | - * Si oui, aucune erreur ne sera générée si la table demandée n'est pas présente |
|
| 274 | - * |
|
| 275 | - * @var bool |
|
| 276 | - */ |
|
| 277 | - public $table_optionnelle = false; |
|
| 278 | - |
|
| 279 | - /** |
|
| 280 | - * Nom du fichier de connexion |
|
| 281 | - * |
|
| 282 | - * @var string |
|
| 283 | - */ |
|
| 284 | - public $sql_serveur = ''; |
|
| 285 | - |
|
| 286 | - /** |
|
| 287 | - * Paramètres de la boucle |
|
| 288 | - * |
|
| 289 | - * Description des paramètres passés à la boucle, qui servent ensuite |
|
| 290 | - * au calcul des critères |
|
| 291 | - * |
|
| 292 | - * @var array |
|
| 293 | - */ |
|
| 294 | - public $param = []; |
|
| 295 | - |
|
| 296 | - /** |
|
| 297 | - * Critères de la boucle |
|
| 298 | - * |
|
| 299 | - * @var Critere[] |
|
| 300 | - */ |
|
| 301 | - public $criteres = []; |
|
| 302 | - |
|
| 303 | - /** |
|
| 304 | - * Textes insérés entre 2 éléments de boucle (critère inter) |
|
| 305 | - * |
|
| 306 | - * @var string[] |
|
| 307 | - */ |
|
| 308 | - public $separateur = []; |
|
| 309 | - |
|
| 310 | - /** |
|
| 311 | - * Liste des jointures possibles avec cette table |
|
| 312 | - * |
|
| 313 | - * Les jointures par défaut de la table sont complétées en priorité |
|
| 314 | - * des jointures déclarées explicitement sur la boucle |
|
| 315 | - * |
|
| 316 | - * @see base_trouver_table_dist() |
|
| 317 | - * @var array |
|
| 318 | - */ |
|
| 319 | - public $jointures = []; |
|
| 320 | - |
|
| 321 | - /** |
|
| 322 | - * Jointures explicites avec cette table |
|
| 323 | - * |
|
| 324 | - * Ces jointures sont utilisées en priorité par rapport aux jointures |
|
| 325 | - * normales possibles pour retrouver les colonnes demandées extérieures |
|
| 326 | - * à la boucle. |
|
| 327 | - * |
|
| 328 | - * @var string|bool |
|
| 329 | - */ |
|
| 330 | - public $jointures_explicites = false; |
|
| 331 | - |
|
| 332 | - /** |
|
| 333 | - * Nom de la variable PHP stockant le noms de doublons utilisés "$doublons_index" |
|
| 334 | - * |
|
| 335 | - * @var string|null |
|
| 336 | - */ |
|
| 337 | - public $doublons; |
|
| 338 | - |
|
| 339 | - /** |
|
| 340 | - * Code PHP ajouté au début de chaque itération de boucle. |
|
| 341 | - * |
|
| 342 | - * Utilisé entre autre par les critères {pagination}, {n-a,b}, {a/b}... |
|
| 343 | - * |
|
| 344 | - * @var string |
|
| 345 | - */ |
|
| 346 | - public $partie = ''; |
|
| 347 | - |
|
| 348 | - /** |
|
| 349 | - * Nombre de divisions de la boucle, d'éléments à afficher, |
|
| 350 | - * ou de soustractions d'éléments à faire |
|
| 351 | - * |
|
| 352 | - * Dans les critères limitant le nombre d'éléments affichés |
|
| 353 | - * {a,b}, {a,n-b}, {a/b}, {pagination b}, b est affecté à total_parties. |
|
| 354 | - * |
|
| 355 | - * @var string |
|
| 356 | - */ |
|
| 357 | - public $total_parties = ''; |
|
| 358 | - |
|
| 359 | - /** |
|
| 360 | - * Code PHP ajouté avant l'itération de boucle. |
|
| 361 | - * |
|
| 362 | - * Utilisé entre autre par les critères {pagination}, {a,b}, {a/b} |
|
| 363 | - * pour initialiser les variables de début et de fin d'itération. |
|
| 364 | - * |
|
| 365 | - * @var string |
|
| 366 | - */ |
|
| 367 | - public $mode_partie = ''; |
|
| 368 | - |
|
| 369 | - /** |
|
| 370 | - * Identifiant d'une boucle qui appelle celle-ci de manière récursive |
|
| 371 | - * |
|
| 372 | - * Si une boucle est appelée de manière récursive quelque part par |
|
| 373 | - * une autre boucle comme <BOUCLE_rec(boucle_identifiant) />, cette |
|
| 374 | - * boucle (identifiant) reçoit dans cette propriété l'identifiant |
|
| 375 | - * de l'appelant (rec) |
|
| 376 | - * |
|
| 377 | - * @var string |
|
| 378 | - */ |
|
| 379 | - public $externe = ''; |
|
| 380 | - |
|
| 381 | - // champs pour la construction de la requete SQL |
|
| 382 | - |
|
| 383 | - /** |
|
| 384 | - * Liste des champs à récupérer par la boucle |
|
| 385 | - * |
|
| 386 | - * Expression 'table.nom_champ' ou calculée 'nom_champ AS x' |
|
| 387 | - * |
|
| 388 | - * @var string[] |
|
| 389 | - */ |
|
| 390 | - public $select = []; |
|
| 391 | - |
|
| 392 | - /** |
|
| 393 | - * Liste des alias / tables SQL utilisées dans la boucle |
|
| 394 | - * |
|
| 395 | - * L'index est un identifiant (xx dans spip_xx assez souvent) qui servira |
|
| 396 | - * d'alias au nom de la table ; la valeur est le nom de la table SQL désirée. |
|
| 397 | - * |
|
| 398 | - * L'index 0 peut définir le type de sources de données de l'itérateur DATA |
|
| 399 | - * |
|
| 400 | - * @var string[] |
|
| 401 | - */ |
|
| 402 | - public $from = []; |
|
| 403 | - |
|
| 404 | - /** |
|
| 405 | - * Liste des alias / type de jointures utilisées dans la boucle |
|
| 406 | - * |
|
| 407 | - * L'index est le nom d'alias (comme pour la propriété $from), et la valeur |
|
| 408 | - * un type de jointure parmi 'INNER', 'LEFT', 'RIGHT', 'OUTER'. |
|
| 409 | - * |
|
| 410 | - * Lorsque le type n'est pas déclaré pour un alias, c'est 'INNER' |
|
| 411 | - * qui sera utilisé par défaut (créant donc un INNER JOIN). |
|
| 412 | - * |
|
| 413 | - * @var string[] |
|
| 414 | - */ |
|
| 415 | - public $from_type = []; |
|
| 416 | - |
|
| 417 | - /** |
|
| 418 | - * Liste des conditions WHERE de la boucle |
|
| 419 | - * |
|
| 420 | - * Permet de restreindre les éléments retournés par une boucle |
|
| 421 | - * en fonctions des conditions transmises dans ce tableau. |
|
| 422 | - * |
|
| 423 | - * Ce tableau peut avoir plusieurs niveaux de profondeur. |
|
| 424 | - * |
|
| 425 | - * Les éléments du premier niveau sont reliés par des AND, donc |
|
| 426 | - * chaque élément ajouté directement au where par |
|
| 427 | - * $boucle->where[] = array(...) ou $boucle->where[] = "'expression'" |
|
| 428 | - * est une condition AND en plus. |
|
| 429 | - * |
|
| 430 | - * Par contre, lorsqu'on indique un tableau, il peut décrire des relations |
|
| 431 | - * internes différentes. Soit $expr un tableau d'expressions quelconques de 3 valeurs : |
|
| 432 | - * $expr = array(operateur, val1, val2) |
|
| 433 | - * |
|
| 434 | - * Ces 3 valeurs sont des expressions PHP. L'index 0 désigne l'opérateur |
|
| 435 | - * à réaliser tel que : |
|
| 436 | - * |
|
| 437 | - * - "'='" , "'>='", "'<'", "'IN'", "'REGEXP'", "'LIKE'", ... : |
|
| 438 | - * val1 et val2 sont des champs et valeurs à utiliser dans la comparaison |
|
| 439 | - * suivant cet ordre : "val1 operateur val2". |
|
| 440 | - * Exemple : $boucle->where[] = array("'='", "'articles.statut'", "'\"publie\"'"); |
|
| 441 | - * - "'AND'", "'OR'", "'NOT'" : |
|
| 442 | - * dans ce cas val1 et val2 sont également des expressions |
|
| 443 | - * de comparaison complètes, et peuvent être eux-même des tableaux comme $expr |
|
| 444 | - * Exemples : |
|
| 445 | - * $boucle->where[] = array("'OR'", $expr1, $expr2); |
|
| 446 | - * $boucle->where[] = array("'NOT'", $expr); // val2 n'existe pas avec NOT |
|
| 447 | - * |
|
| 448 | - * D'autres noms sont possibles pour l'opérateur (le nombre de valeurs diffère) : |
|
| 449 | - * - "'SELF'", "'SUBSELECT'" : indiquent des sous requêtes |
|
| 450 | - * - "'?'" : indique une condition à faire évaluer (val1 ? val2 : val3) |
|
| 451 | - * |
|
| 452 | - * @var array |
|
| 453 | - */ |
|
| 454 | - public $where = []; |
|
| 455 | - |
|
| 456 | - public $join = []; |
|
| 457 | - public $having = []; |
|
| 458 | - public $limit = ''; |
|
| 459 | - public $group = []; |
|
| 460 | - public $order = []; |
|
| 461 | - public $default_order = []; |
|
| 462 | - public $date = 'date'; |
|
| 463 | - public $hash = ''; |
|
| 464 | - public $in = ''; |
|
| 465 | - public $sous_requete = false; |
|
| 466 | - |
|
| 467 | - /** |
|
| 468 | - * Code PHP qui sera ajouté en tout début de la fonction de boucle |
|
| 469 | - * |
|
| 470 | - * Il sert à insérer le code calculant une hierarchie |
|
| 471 | - * |
|
| 472 | - * @var string |
|
| 473 | - */ |
|
| 474 | - public $hierarchie = ''; |
|
| 475 | - |
|
| 476 | - // champs pour la construction du corps PHP |
|
| 477 | - |
|
| 478 | - /** |
|
| 479 | - * Description des sources de données de la boucle |
|
| 480 | - * |
|
| 481 | - * Description des données de la boucle issu de trouver_table |
|
| 482 | - * dans le cadre de l'itérateur SQL et contenant au moins l'index 'field'. |
|
| 483 | - * |
|
| 484 | - * @see base_trouver_table_dist() |
|
| 485 | - * @var array |
|
| 486 | - */ |
|
| 487 | - public $show = []; |
|
| 488 | - |
|
| 489 | - /** |
|
| 490 | - * Nom de la table SQL principale de la boucle, sans son préfixe |
|
| 491 | - * |
|
| 492 | - * @var string |
|
| 493 | - */ |
|
| 494 | - public $id_table; |
|
| 495 | - |
|
| 496 | - /** |
|
| 497 | - * Nom de la clé primaire de la table SQL principale de la boucle |
|
| 498 | - * |
|
| 499 | - * @var string |
|
| 500 | - */ |
|
| 501 | - public $primary; |
|
| 502 | - |
|
| 503 | - /** |
|
| 504 | - * Code PHP compilé de la boucle |
|
| 505 | - * |
|
| 506 | - * @var string |
|
| 507 | - */ |
|
| 508 | - public $return; |
|
| 509 | - |
|
| 510 | - public $numrows = false; |
|
| 511 | - public $cptrows = false; |
|
| 512 | - |
|
| 513 | - /** |
|
| 514 | - * Description du squelette |
|
| 515 | - * |
|
| 516 | - * Sert pour la gestion d'erreur et la production de code dependant du contexte |
|
| 517 | - * |
|
| 518 | - * Peut contenir les index : |
|
| 519 | - * |
|
| 520 | - * - nom : Nom du fichier de cache |
|
| 521 | - * - gram : Nom de la grammaire du squelette (détermine le phraseur à utiliser) |
|
| 522 | - * - sourcefile : Chemin du squelette |
|
| 523 | - * - squelette : Code du squelette |
|
| 524 | - * - id_mere : Identifiant de la boucle parente |
|
| 525 | - * - documents : Pour embed et img dans les textes |
|
| 526 | - * - session : Pour un cache sessionné par auteur |
|
| 527 | - * - niv : Niveau de tabulation |
|
| 528 | - * |
|
| 529 | - * @var array |
|
| 530 | - */ |
|
| 531 | - public $descr = []; |
|
| 532 | - |
|
| 533 | - /** |
|
| 534 | - * Numéro de ligne dans le code source du squelette |
|
| 535 | - * |
|
| 536 | - * @var int |
|
| 537 | - */ |
|
| 538 | - public $ligne = 0; |
|
| 539 | - |
|
| 540 | - |
|
| 541 | - public $modificateur = []; // table pour stocker les modificateurs de boucle tels que tout, plat ..., utilisable par les plugins egalement |
|
| 542 | - |
|
| 543 | - /** |
|
| 544 | - * Type d'itérateur utilisé pour cette boucle |
|
| 545 | - * |
|
| 546 | - * - 'SQL' dans le cadre d'une boucle sur une table SQL |
|
| 547 | - * - 'DATA' pour l'itérateur DATA, ... |
|
| 548 | - * |
|
| 549 | - * @var string |
|
| 550 | - */ |
|
| 551 | - public $iterateur = ''; // type d'iterateur |
|
| 552 | - |
|
| 553 | - /** |
|
| 554 | - * @var array $debug Textes qui seront insérés dans l’entête de boucle du mode debug |
|
| 555 | - */ |
|
| 556 | - public $debug = []; |
|
| 557 | - |
|
| 558 | - /** |
|
| 559 | - * Index de la boucle dont le champ présent dans cette boucle est originaire, |
|
| 560 | - * notamment si le champ a été trouve dans une boucle parente |
|
| 561 | - * |
|
| 562 | - * Tableau nom du champ => index de boucle |
|
| 563 | - * |
|
| 564 | - * @var array $index_champ |
|
| 565 | - */ |
|
| 566 | - public $index_champ = []; |
|
| 567 | - |
|
| 568 | - // obsoletes, conserves provisoirement pour compatibilite |
|
| 569 | - public $tout = false; |
|
| 570 | - public $plat = false; |
|
| 571 | - public $lien = false; |
|
| 192 | + /** |
|
| 193 | + * Type de noeud |
|
| 194 | + * |
|
| 195 | + * @var string |
|
| 196 | + */ |
|
| 197 | + public $type = 'boucle'; |
|
| 198 | + |
|
| 199 | + /** |
|
| 200 | + * Identifiant de la boucle |
|
| 201 | + * |
|
| 202 | + * @var string |
|
| 203 | + */ |
|
| 204 | + public $id_boucle; |
|
| 205 | + |
|
| 206 | + /** |
|
| 207 | + * Identifiant de la boucle parente |
|
| 208 | + * |
|
| 209 | + * @var string |
|
| 210 | + */ |
|
| 211 | + public $id_parent = ''; |
|
| 212 | + |
|
| 213 | + /** |
|
| 214 | + * Partie avant toujours affichee |
|
| 215 | + * |
|
| 216 | + * @var string|array |
|
| 217 | + */ |
|
| 218 | + public $preaff = ''; |
|
| 219 | + |
|
| 220 | + /** |
|
| 221 | + * Partie optionnelle avant |
|
| 222 | + * |
|
| 223 | + * @var string|array |
|
| 224 | + */ |
|
| 225 | + public $avant = ''; |
|
| 226 | + |
|
| 227 | + /** |
|
| 228 | + * Pour chaque élément |
|
| 229 | + * |
|
| 230 | + * @var string|array |
|
| 231 | + */ |
|
| 232 | + public $milieu = ''; |
|
| 233 | + |
|
| 234 | + /** |
|
| 235 | + * Partie optionnelle après |
|
| 236 | + * |
|
| 237 | + * @var string|array |
|
| 238 | + */ |
|
| 239 | + public $apres = ''; |
|
| 240 | + |
|
| 241 | + /** |
|
| 242 | + * Partie alternative, si pas de résultat dans la boucle |
|
| 243 | + * |
|
| 244 | + * @var string|array |
|
| 245 | + */ |
|
| 246 | + public $altern = ''; |
|
| 247 | + |
|
| 248 | + /** |
|
| 249 | + * Partie apres toujours affichee |
|
| 250 | + * |
|
| 251 | + * @var string|array |
|
| 252 | + */ |
|
| 253 | + public $postaff = ''; |
|
| 254 | + |
|
| 255 | + |
|
| 256 | + /** |
|
| 257 | + * La boucle doit-elle sélectionner la langue ? |
|
| 258 | + * |
|
| 259 | + * @var string|null |
|
| 260 | + */ |
|
| 261 | + public $lang_select; |
|
| 262 | + |
|
| 263 | + /** |
|
| 264 | + * Alias de table d'application de la requête ou nom complet de la table SQL |
|
| 265 | + * |
|
| 266 | + * @var string|null |
|
| 267 | + */ |
|
| 268 | + public $type_requete; |
|
| 269 | + |
|
| 270 | + /** |
|
| 271 | + * La table est elle optionnelle ? |
|
| 272 | + * |
|
| 273 | + * Si oui, aucune erreur ne sera générée si la table demandée n'est pas présente |
|
| 274 | + * |
|
| 275 | + * @var bool |
|
| 276 | + */ |
|
| 277 | + public $table_optionnelle = false; |
|
| 278 | + |
|
| 279 | + /** |
|
| 280 | + * Nom du fichier de connexion |
|
| 281 | + * |
|
| 282 | + * @var string |
|
| 283 | + */ |
|
| 284 | + public $sql_serveur = ''; |
|
| 285 | + |
|
| 286 | + /** |
|
| 287 | + * Paramètres de la boucle |
|
| 288 | + * |
|
| 289 | + * Description des paramètres passés à la boucle, qui servent ensuite |
|
| 290 | + * au calcul des critères |
|
| 291 | + * |
|
| 292 | + * @var array |
|
| 293 | + */ |
|
| 294 | + public $param = []; |
|
| 295 | + |
|
| 296 | + /** |
|
| 297 | + * Critères de la boucle |
|
| 298 | + * |
|
| 299 | + * @var Critere[] |
|
| 300 | + */ |
|
| 301 | + public $criteres = []; |
|
| 302 | + |
|
| 303 | + /** |
|
| 304 | + * Textes insérés entre 2 éléments de boucle (critère inter) |
|
| 305 | + * |
|
| 306 | + * @var string[] |
|
| 307 | + */ |
|
| 308 | + public $separateur = []; |
|
| 309 | + |
|
| 310 | + /** |
|
| 311 | + * Liste des jointures possibles avec cette table |
|
| 312 | + * |
|
| 313 | + * Les jointures par défaut de la table sont complétées en priorité |
|
| 314 | + * des jointures déclarées explicitement sur la boucle |
|
| 315 | + * |
|
| 316 | + * @see base_trouver_table_dist() |
|
| 317 | + * @var array |
|
| 318 | + */ |
|
| 319 | + public $jointures = []; |
|
| 320 | + |
|
| 321 | + /** |
|
| 322 | + * Jointures explicites avec cette table |
|
| 323 | + * |
|
| 324 | + * Ces jointures sont utilisées en priorité par rapport aux jointures |
|
| 325 | + * normales possibles pour retrouver les colonnes demandées extérieures |
|
| 326 | + * à la boucle. |
|
| 327 | + * |
|
| 328 | + * @var string|bool |
|
| 329 | + */ |
|
| 330 | + public $jointures_explicites = false; |
|
| 331 | + |
|
| 332 | + /** |
|
| 333 | + * Nom de la variable PHP stockant le noms de doublons utilisés "$doublons_index" |
|
| 334 | + * |
|
| 335 | + * @var string|null |
|
| 336 | + */ |
|
| 337 | + public $doublons; |
|
| 338 | + |
|
| 339 | + /** |
|
| 340 | + * Code PHP ajouté au début de chaque itération de boucle. |
|
| 341 | + * |
|
| 342 | + * Utilisé entre autre par les critères {pagination}, {n-a,b}, {a/b}... |
|
| 343 | + * |
|
| 344 | + * @var string |
|
| 345 | + */ |
|
| 346 | + public $partie = ''; |
|
| 347 | + |
|
| 348 | + /** |
|
| 349 | + * Nombre de divisions de la boucle, d'éléments à afficher, |
|
| 350 | + * ou de soustractions d'éléments à faire |
|
| 351 | + * |
|
| 352 | + * Dans les critères limitant le nombre d'éléments affichés |
|
| 353 | + * {a,b}, {a,n-b}, {a/b}, {pagination b}, b est affecté à total_parties. |
|
| 354 | + * |
|
| 355 | + * @var string |
|
| 356 | + */ |
|
| 357 | + public $total_parties = ''; |
|
| 358 | + |
|
| 359 | + /** |
|
| 360 | + * Code PHP ajouté avant l'itération de boucle. |
|
| 361 | + * |
|
| 362 | + * Utilisé entre autre par les critères {pagination}, {a,b}, {a/b} |
|
| 363 | + * pour initialiser les variables de début et de fin d'itération. |
|
| 364 | + * |
|
| 365 | + * @var string |
|
| 366 | + */ |
|
| 367 | + public $mode_partie = ''; |
|
| 368 | + |
|
| 369 | + /** |
|
| 370 | + * Identifiant d'une boucle qui appelle celle-ci de manière récursive |
|
| 371 | + * |
|
| 372 | + * Si une boucle est appelée de manière récursive quelque part par |
|
| 373 | + * une autre boucle comme <BOUCLE_rec(boucle_identifiant) />, cette |
|
| 374 | + * boucle (identifiant) reçoit dans cette propriété l'identifiant |
|
| 375 | + * de l'appelant (rec) |
|
| 376 | + * |
|
| 377 | + * @var string |
|
| 378 | + */ |
|
| 379 | + public $externe = ''; |
|
| 380 | + |
|
| 381 | + // champs pour la construction de la requete SQL |
|
| 382 | + |
|
| 383 | + /** |
|
| 384 | + * Liste des champs à récupérer par la boucle |
|
| 385 | + * |
|
| 386 | + * Expression 'table.nom_champ' ou calculée 'nom_champ AS x' |
|
| 387 | + * |
|
| 388 | + * @var string[] |
|
| 389 | + */ |
|
| 390 | + public $select = []; |
|
| 391 | + |
|
| 392 | + /** |
|
| 393 | + * Liste des alias / tables SQL utilisées dans la boucle |
|
| 394 | + * |
|
| 395 | + * L'index est un identifiant (xx dans spip_xx assez souvent) qui servira |
|
| 396 | + * d'alias au nom de la table ; la valeur est le nom de la table SQL désirée. |
|
| 397 | + * |
|
| 398 | + * L'index 0 peut définir le type de sources de données de l'itérateur DATA |
|
| 399 | + * |
|
| 400 | + * @var string[] |
|
| 401 | + */ |
|
| 402 | + public $from = []; |
|
| 403 | + |
|
| 404 | + /** |
|
| 405 | + * Liste des alias / type de jointures utilisées dans la boucle |
|
| 406 | + * |
|
| 407 | + * L'index est le nom d'alias (comme pour la propriété $from), et la valeur |
|
| 408 | + * un type de jointure parmi 'INNER', 'LEFT', 'RIGHT', 'OUTER'. |
|
| 409 | + * |
|
| 410 | + * Lorsque le type n'est pas déclaré pour un alias, c'est 'INNER' |
|
| 411 | + * qui sera utilisé par défaut (créant donc un INNER JOIN). |
|
| 412 | + * |
|
| 413 | + * @var string[] |
|
| 414 | + */ |
|
| 415 | + public $from_type = []; |
|
| 416 | + |
|
| 417 | + /** |
|
| 418 | + * Liste des conditions WHERE de la boucle |
|
| 419 | + * |
|
| 420 | + * Permet de restreindre les éléments retournés par une boucle |
|
| 421 | + * en fonctions des conditions transmises dans ce tableau. |
|
| 422 | + * |
|
| 423 | + * Ce tableau peut avoir plusieurs niveaux de profondeur. |
|
| 424 | + * |
|
| 425 | + * Les éléments du premier niveau sont reliés par des AND, donc |
|
| 426 | + * chaque élément ajouté directement au where par |
|
| 427 | + * $boucle->where[] = array(...) ou $boucle->where[] = "'expression'" |
|
| 428 | + * est une condition AND en plus. |
|
| 429 | + * |
|
| 430 | + * Par contre, lorsqu'on indique un tableau, il peut décrire des relations |
|
| 431 | + * internes différentes. Soit $expr un tableau d'expressions quelconques de 3 valeurs : |
|
| 432 | + * $expr = array(operateur, val1, val2) |
|
| 433 | + * |
|
| 434 | + * Ces 3 valeurs sont des expressions PHP. L'index 0 désigne l'opérateur |
|
| 435 | + * à réaliser tel que : |
|
| 436 | + * |
|
| 437 | + * - "'='" , "'>='", "'<'", "'IN'", "'REGEXP'", "'LIKE'", ... : |
|
| 438 | + * val1 et val2 sont des champs et valeurs à utiliser dans la comparaison |
|
| 439 | + * suivant cet ordre : "val1 operateur val2". |
|
| 440 | + * Exemple : $boucle->where[] = array("'='", "'articles.statut'", "'\"publie\"'"); |
|
| 441 | + * - "'AND'", "'OR'", "'NOT'" : |
|
| 442 | + * dans ce cas val1 et val2 sont également des expressions |
|
| 443 | + * de comparaison complètes, et peuvent être eux-même des tableaux comme $expr |
|
| 444 | + * Exemples : |
|
| 445 | + * $boucle->where[] = array("'OR'", $expr1, $expr2); |
|
| 446 | + * $boucle->where[] = array("'NOT'", $expr); // val2 n'existe pas avec NOT |
|
| 447 | + * |
|
| 448 | + * D'autres noms sont possibles pour l'opérateur (le nombre de valeurs diffère) : |
|
| 449 | + * - "'SELF'", "'SUBSELECT'" : indiquent des sous requêtes |
|
| 450 | + * - "'?'" : indique une condition à faire évaluer (val1 ? val2 : val3) |
|
| 451 | + * |
|
| 452 | + * @var array |
|
| 453 | + */ |
|
| 454 | + public $where = []; |
|
| 455 | + |
|
| 456 | + public $join = []; |
|
| 457 | + public $having = []; |
|
| 458 | + public $limit = ''; |
|
| 459 | + public $group = []; |
|
| 460 | + public $order = []; |
|
| 461 | + public $default_order = []; |
|
| 462 | + public $date = 'date'; |
|
| 463 | + public $hash = ''; |
|
| 464 | + public $in = ''; |
|
| 465 | + public $sous_requete = false; |
|
| 466 | + |
|
| 467 | + /** |
|
| 468 | + * Code PHP qui sera ajouté en tout début de la fonction de boucle |
|
| 469 | + * |
|
| 470 | + * Il sert à insérer le code calculant une hierarchie |
|
| 471 | + * |
|
| 472 | + * @var string |
|
| 473 | + */ |
|
| 474 | + public $hierarchie = ''; |
|
| 475 | + |
|
| 476 | + // champs pour la construction du corps PHP |
|
| 477 | + |
|
| 478 | + /** |
|
| 479 | + * Description des sources de données de la boucle |
|
| 480 | + * |
|
| 481 | + * Description des données de la boucle issu de trouver_table |
|
| 482 | + * dans le cadre de l'itérateur SQL et contenant au moins l'index 'field'. |
|
| 483 | + * |
|
| 484 | + * @see base_trouver_table_dist() |
|
| 485 | + * @var array |
|
| 486 | + */ |
|
| 487 | + public $show = []; |
|
| 488 | + |
|
| 489 | + /** |
|
| 490 | + * Nom de la table SQL principale de la boucle, sans son préfixe |
|
| 491 | + * |
|
| 492 | + * @var string |
|
| 493 | + */ |
|
| 494 | + public $id_table; |
|
| 495 | + |
|
| 496 | + /** |
|
| 497 | + * Nom de la clé primaire de la table SQL principale de la boucle |
|
| 498 | + * |
|
| 499 | + * @var string |
|
| 500 | + */ |
|
| 501 | + public $primary; |
|
| 502 | + |
|
| 503 | + /** |
|
| 504 | + * Code PHP compilé de la boucle |
|
| 505 | + * |
|
| 506 | + * @var string |
|
| 507 | + */ |
|
| 508 | + public $return; |
|
| 509 | + |
|
| 510 | + public $numrows = false; |
|
| 511 | + public $cptrows = false; |
|
| 512 | + |
|
| 513 | + /** |
|
| 514 | + * Description du squelette |
|
| 515 | + * |
|
| 516 | + * Sert pour la gestion d'erreur et la production de code dependant du contexte |
|
| 517 | + * |
|
| 518 | + * Peut contenir les index : |
|
| 519 | + * |
|
| 520 | + * - nom : Nom du fichier de cache |
|
| 521 | + * - gram : Nom de la grammaire du squelette (détermine le phraseur à utiliser) |
|
| 522 | + * - sourcefile : Chemin du squelette |
|
| 523 | + * - squelette : Code du squelette |
|
| 524 | + * - id_mere : Identifiant de la boucle parente |
|
| 525 | + * - documents : Pour embed et img dans les textes |
|
| 526 | + * - session : Pour un cache sessionné par auteur |
|
| 527 | + * - niv : Niveau de tabulation |
|
| 528 | + * |
|
| 529 | + * @var array |
|
| 530 | + */ |
|
| 531 | + public $descr = []; |
|
| 532 | + |
|
| 533 | + /** |
|
| 534 | + * Numéro de ligne dans le code source du squelette |
|
| 535 | + * |
|
| 536 | + * @var int |
|
| 537 | + */ |
|
| 538 | + public $ligne = 0; |
|
| 539 | + |
|
| 540 | + |
|
| 541 | + public $modificateur = []; // table pour stocker les modificateurs de boucle tels que tout, plat ..., utilisable par les plugins egalement |
|
| 542 | + |
|
| 543 | + /** |
|
| 544 | + * Type d'itérateur utilisé pour cette boucle |
|
| 545 | + * |
|
| 546 | + * - 'SQL' dans le cadre d'une boucle sur une table SQL |
|
| 547 | + * - 'DATA' pour l'itérateur DATA, ... |
|
| 548 | + * |
|
| 549 | + * @var string |
|
| 550 | + */ |
|
| 551 | + public $iterateur = ''; // type d'iterateur |
|
| 552 | + |
|
| 553 | + /** |
|
| 554 | + * @var array $debug Textes qui seront insérés dans l’entête de boucle du mode debug |
|
| 555 | + */ |
|
| 556 | + public $debug = []; |
|
| 557 | + |
|
| 558 | + /** |
|
| 559 | + * Index de la boucle dont le champ présent dans cette boucle est originaire, |
|
| 560 | + * notamment si le champ a été trouve dans une boucle parente |
|
| 561 | + * |
|
| 562 | + * Tableau nom du champ => index de boucle |
|
| 563 | + * |
|
| 564 | + * @var array $index_champ |
|
| 565 | + */ |
|
| 566 | + public $index_champ = []; |
|
| 567 | + |
|
| 568 | + // obsoletes, conserves provisoirement pour compatibilite |
|
| 569 | + public $tout = false; |
|
| 570 | + public $plat = false; |
|
| 571 | + public $lien = false; |
|
| 572 | 572 | } |
| 573 | 573 | |
| 574 | 574 | /** |
@@ -579,56 +579,56 @@ discard block |
||
| 579 | 579 | * @package SPIP\Core\Compilateur\AST |
| 580 | 580 | **/ |
| 581 | 581 | class Critere { |
| 582 | - /** |
|
| 583 | - * Type de noeud |
|
| 584 | - * |
|
| 585 | - * @var string |
|
| 586 | - */ |
|
| 587 | - public $type = 'critere'; |
|
| 588 | - |
|
| 589 | - /** |
|
| 590 | - * Opérateur (>, <, >=, IN, ...) |
|
| 591 | - * |
|
| 592 | - * @var null|string |
|
| 593 | - */ |
|
| 594 | - public $op; |
|
| 595 | - |
|
| 596 | - /** |
|
| 597 | - * Présence d'une négation (truc !op valeur) |
|
| 598 | - * |
|
| 599 | - * @var null|string |
|
| 600 | - */ |
|
| 601 | - public $not; |
|
| 602 | - |
|
| 603 | - /** |
|
| 604 | - * Présence d'une exclusion (!truc op valeur) |
|
| 605 | - * |
|
| 606 | - * @var null|string |
|
| 607 | - */ |
|
| 608 | - public $exclus; |
|
| 609 | - |
|
| 610 | - /** |
|
| 611 | - * Présence d'une condition dans le critère (truc ?) |
|
| 612 | - * |
|
| 613 | - * @var bool |
|
| 614 | - */ |
|
| 615 | - public $cond = false; |
|
| 616 | - |
|
| 617 | - /** |
|
| 618 | - * Paramètres du critère |
|
| 619 | - * - $param[0] : élément avant l'opérateur |
|
| 620 | - * - $param[1..n] : éléments après l'opérateur |
|
| 621 | - * |
|
| 622 | - * @var array |
|
| 623 | - */ |
|
| 624 | - public $param = []; |
|
| 625 | - |
|
| 626 | - /** |
|
| 627 | - * Numéro de ligne dans le code source du squelette |
|
| 628 | - * |
|
| 629 | - * @var int |
|
| 630 | - */ |
|
| 631 | - public $ligne = 0; |
|
| 582 | + /** |
|
| 583 | + * Type de noeud |
|
| 584 | + * |
|
| 585 | + * @var string |
|
| 586 | + */ |
|
| 587 | + public $type = 'critere'; |
|
| 588 | + |
|
| 589 | + /** |
|
| 590 | + * Opérateur (>, <, >=, IN, ...) |
|
| 591 | + * |
|
| 592 | + * @var null|string |
|
| 593 | + */ |
|
| 594 | + public $op; |
|
| 595 | + |
|
| 596 | + /** |
|
| 597 | + * Présence d'une négation (truc !op valeur) |
|
| 598 | + * |
|
| 599 | + * @var null|string |
|
| 600 | + */ |
|
| 601 | + public $not; |
|
| 602 | + |
|
| 603 | + /** |
|
| 604 | + * Présence d'une exclusion (!truc op valeur) |
|
| 605 | + * |
|
| 606 | + * @var null|string |
|
| 607 | + */ |
|
| 608 | + public $exclus; |
|
| 609 | + |
|
| 610 | + /** |
|
| 611 | + * Présence d'une condition dans le critère (truc ?) |
|
| 612 | + * |
|
| 613 | + * @var bool |
|
| 614 | + */ |
|
| 615 | + public $cond = false; |
|
| 616 | + |
|
| 617 | + /** |
|
| 618 | + * Paramètres du critère |
|
| 619 | + * - $param[0] : élément avant l'opérateur |
|
| 620 | + * - $param[1..n] : éléments après l'opérateur |
|
| 621 | + * |
|
| 622 | + * @var array |
|
| 623 | + */ |
|
| 624 | + public $param = []; |
|
| 625 | + |
|
| 626 | + /** |
|
| 627 | + * Numéro de ligne dans le code source du squelette |
|
| 628 | + * |
|
| 629 | + * @var int |
|
| 630 | + */ |
|
| 631 | + public $ligne = 0; |
|
| 632 | 632 | } |
| 633 | 633 | |
| 634 | 634 | /** |
@@ -637,139 +637,139 @@ discard block |
||
| 637 | 637 | * @package SPIP\Core\Compilateur\AST |
| 638 | 638 | **/ |
| 639 | 639 | class Champ { |
| 640 | - /** |
|
| 641 | - * Type de noeud |
|
| 642 | - * |
|
| 643 | - * @var string |
|
| 644 | - */ |
|
| 645 | - public $type = 'champ'; |
|
| 646 | - |
|
| 647 | - /** |
|
| 648 | - * Nom du champ demandé. Exemple 'ID_ARTICLE' |
|
| 649 | - * |
|
| 650 | - * @var string|null |
|
| 651 | - */ |
|
| 652 | - public $nom_champ; |
|
| 653 | - |
|
| 654 | - /** |
|
| 655 | - * Identifiant de la boucle parente si explicité |
|
| 656 | - * |
|
| 657 | - * @var string|null |
|
| 658 | - */ |
|
| 659 | - public $nom_boucle = ''; |
|
| 660 | - |
|
| 661 | - /** |
|
| 662 | - * Partie optionnelle avant |
|
| 663 | - * |
|
| 664 | - * @var null|string|array |
|
| 665 | - */ |
|
| 666 | - public $avant; |
|
| 667 | - |
|
| 668 | - /** |
|
| 669 | - * Partie optionnelle après |
|
| 670 | - * |
|
| 671 | - * @var null|string|array |
|
| 672 | - */ |
|
| 673 | - public $apres; |
|
| 674 | - |
|
| 675 | - /** |
|
| 676 | - * Étoiles : annuler des automatismes |
|
| 677 | - * |
|
| 678 | - * - '*' annule les filtres automatiques |
|
| 679 | - * - '**' annule en plus les protections de scripts |
|
| 680 | - * |
|
| 681 | - * @var null|string |
|
| 682 | - */ |
|
| 683 | - public $etoile; |
|
| 684 | - |
|
| 685 | - /** |
|
| 686 | - * Arguments et filtres explicites sur la balise |
|
| 687 | - * |
|
| 688 | - * - $param[0] contient les arguments de la balise |
|
| 689 | - * - $param[1..n] contient les filtres à appliquer à la balise |
|
| 690 | - * |
|
| 691 | - * @var array |
|
| 692 | - */ |
|
| 693 | - public $param = []; |
|
| 694 | - |
|
| 695 | - /** |
|
| 696 | - * Source des filtres (compatibilité) (?) |
|
| 697 | - * |
|
| 698 | - * @var array|null |
|
| 699 | - */ |
|
| 700 | - public $fonctions = []; |
|
| 701 | - |
|
| 702 | - /** |
|
| 703 | - * Identifiant de la boucle |
|
| 704 | - * |
|
| 705 | - * @var string |
|
| 706 | - */ |
|
| 707 | - public $id_boucle = ''; |
|
| 708 | - |
|
| 709 | - /** |
|
| 710 | - * AST du squelette, liste de toutes les boucles |
|
| 711 | - * |
|
| 712 | - * @var Boucles[] |
|
| 713 | - */ |
|
| 714 | - public $boucles; |
|
| 715 | - |
|
| 716 | - /** |
|
| 717 | - * Alias de table d'application de la requête ou nom complet de la table SQL |
|
| 718 | - * |
|
| 719 | - * @var string|null |
|
| 720 | - */ |
|
| 721 | - public $type_requete; |
|
| 722 | - |
|
| 723 | - /** |
|
| 724 | - * Résultat de la compilation: toujours une expression PHP |
|
| 725 | - * |
|
| 726 | - * @var string |
|
| 727 | - */ |
|
| 728 | - public $code = ''; |
|
| 729 | - |
|
| 730 | - /** |
|
| 731 | - * Interdire les scripts |
|
| 732 | - * |
|
| 733 | - * false si on est sûr de cette balise |
|
| 734 | - * |
|
| 735 | - * @see interdire_scripts() |
|
| 736 | - * @var bool |
|
| 737 | - */ |
|
| 738 | - public $interdire_scripts = true; |
|
| 739 | - |
|
| 740 | - /** |
|
| 741 | - * Description du squelette |
|
| 742 | - * |
|
| 743 | - * Sert pour la gestion d'erreur et la production de code dependant du contexte |
|
| 744 | - * |
|
| 745 | - * Peut contenir les index : |
|
| 746 | - * |
|
| 747 | - * - nom : Nom du fichier de cache |
|
| 748 | - * - gram : Nom de la grammaire du squelette (détermine le phraseur à utiliser) |
|
| 749 | - * - sourcefile : Chemin du squelette |
|
| 750 | - * - squelette : Code du squelette |
|
| 751 | - * - id_mere : Identifiant de la boucle parente |
|
| 752 | - * - documents : Pour embed et img dans les textes |
|
| 753 | - * - session : Pour un cache sessionné par auteur |
|
| 754 | - * - niv : Niveau de tabulation |
|
| 755 | - * |
|
| 756 | - * @var array |
|
| 757 | - */ |
|
| 758 | - public $descr = []; |
|
| 759 | - |
|
| 760 | - /** |
|
| 761 | - * Numéro de ligne dans le code source du squelette |
|
| 762 | - * |
|
| 763 | - * @var int |
|
| 764 | - */ |
|
| 765 | - public $ligne = 0; |
|
| 766 | - |
|
| 767 | - /** |
|
| 768 | - * Drapeau pour reperer les balises calculées par une fonction explicite |
|
| 769 | - * |
|
| 770 | - * @var bool |
|
| 771 | - */ |
|
| 772 | - public $balise_calculee = false; |
|
| 640 | + /** |
|
| 641 | + * Type de noeud |
|
| 642 | + * |
|
| 643 | + * @var string |
|
| 644 | + */ |
|
| 645 | + public $type = 'champ'; |
|
| 646 | + |
|
| 647 | + /** |
|
| 648 | + * Nom du champ demandé. Exemple 'ID_ARTICLE' |
|
| 649 | + * |
|
| 650 | + * @var string|null |
|
| 651 | + */ |
|
| 652 | + public $nom_champ; |
|
| 653 | + |
|
| 654 | + /** |
|
| 655 | + * Identifiant de la boucle parente si explicité |
|
| 656 | + * |
|
| 657 | + * @var string|null |
|
| 658 | + */ |
|
| 659 | + public $nom_boucle = ''; |
|
| 660 | + |
|
| 661 | + /** |
|
| 662 | + * Partie optionnelle avant |
|
| 663 | + * |
|
| 664 | + * @var null|string|array |
|
| 665 | + */ |
|
| 666 | + public $avant; |
|
| 667 | + |
|
| 668 | + /** |
|
| 669 | + * Partie optionnelle après |
|
| 670 | + * |
|
| 671 | + * @var null|string|array |
|
| 672 | + */ |
|
| 673 | + public $apres; |
|
| 674 | + |
|
| 675 | + /** |
|
| 676 | + * Étoiles : annuler des automatismes |
|
| 677 | + * |
|
| 678 | + * - '*' annule les filtres automatiques |
|
| 679 | + * - '**' annule en plus les protections de scripts |
|
| 680 | + * |
|
| 681 | + * @var null|string |
|
| 682 | + */ |
|
| 683 | + public $etoile; |
|
| 684 | + |
|
| 685 | + /** |
|
| 686 | + * Arguments et filtres explicites sur la balise |
|
| 687 | + * |
|
| 688 | + * - $param[0] contient les arguments de la balise |
|
| 689 | + * - $param[1..n] contient les filtres à appliquer à la balise |
|
| 690 | + * |
|
| 691 | + * @var array |
|
| 692 | + */ |
|
| 693 | + public $param = []; |
|
| 694 | + |
|
| 695 | + /** |
|
| 696 | + * Source des filtres (compatibilité) (?) |
|
| 697 | + * |
|
| 698 | + * @var array|null |
|
| 699 | + */ |
|
| 700 | + public $fonctions = []; |
|
| 701 | + |
|
| 702 | + /** |
|
| 703 | + * Identifiant de la boucle |
|
| 704 | + * |
|
| 705 | + * @var string |
|
| 706 | + */ |
|
| 707 | + public $id_boucle = ''; |
|
| 708 | + |
|
| 709 | + /** |
|
| 710 | + * AST du squelette, liste de toutes les boucles |
|
| 711 | + * |
|
| 712 | + * @var Boucles[] |
|
| 713 | + */ |
|
| 714 | + public $boucles; |
|
| 715 | + |
|
| 716 | + /** |
|
| 717 | + * Alias de table d'application de la requête ou nom complet de la table SQL |
|
| 718 | + * |
|
| 719 | + * @var string|null |
|
| 720 | + */ |
|
| 721 | + public $type_requete; |
|
| 722 | + |
|
| 723 | + /** |
|
| 724 | + * Résultat de la compilation: toujours une expression PHP |
|
| 725 | + * |
|
| 726 | + * @var string |
|
| 727 | + */ |
|
| 728 | + public $code = ''; |
|
| 729 | + |
|
| 730 | + /** |
|
| 731 | + * Interdire les scripts |
|
| 732 | + * |
|
| 733 | + * false si on est sûr de cette balise |
|
| 734 | + * |
|
| 735 | + * @see interdire_scripts() |
|
| 736 | + * @var bool |
|
| 737 | + */ |
|
| 738 | + public $interdire_scripts = true; |
|
| 739 | + |
|
| 740 | + /** |
|
| 741 | + * Description du squelette |
|
| 742 | + * |
|
| 743 | + * Sert pour la gestion d'erreur et la production de code dependant du contexte |
|
| 744 | + * |
|
| 745 | + * Peut contenir les index : |
|
| 746 | + * |
|
| 747 | + * - nom : Nom du fichier de cache |
|
| 748 | + * - gram : Nom de la grammaire du squelette (détermine le phraseur à utiliser) |
|
| 749 | + * - sourcefile : Chemin du squelette |
|
| 750 | + * - squelette : Code du squelette |
|
| 751 | + * - id_mere : Identifiant de la boucle parente |
|
| 752 | + * - documents : Pour embed et img dans les textes |
|
| 753 | + * - session : Pour un cache sessionné par auteur |
|
| 754 | + * - niv : Niveau de tabulation |
|
| 755 | + * |
|
| 756 | + * @var array |
|
| 757 | + */ |
|
| 758 | + public $descr = []; |
|
| 759 | + |
|
| 760 | + /** |
|
| 761 | + * Numéro de ligne dans le code source du squelette |
|
| 762 | + * |
|
| 763 | + * @var int |
|
| 764 | + */ |
|
| 765 | + public $ligne = 0; |
|
| 766 | + |
|
| 767 | + /** |
|
| 768 | + * Drapeau pour reperer les balises calculées par une fonction explicite |
|
| 769 | + * |
|
| 770 | + * @var bool |
|
| 771 | + */ |
|
| 772 | + public $balise_calculee = false; |
|
| 773 | 773 | } |
| 774 | 774 | |
| 775 | 775 | |
@@ -777,123 +777,123 @@ discard block |
||
| 777 | 777 | * Description d'une chaîne de langue |
| 778 | 778 | **/ |
| 779 | 779 | class Idiome { |
| 780 | - /** |
|
| 781 | - * Type de noeud |
|
| 782 | - * |
|
| 783 | - * @var string |
|
| 784 | - */ |
|
| 785 | - public $type = 'idiome'; |
|
| 786 | - |
|
| 787 | - /** |
|
| 788 | - * Clé de traduction demandée. Exemple 'item_oui' |
|
| 789 | - * |
|
| 790 | - * @var string |
|
| 791 | - */ |
|
| 792 | - public $nom_champ = ''; |
|
| 793 | - |
|
| 794 | - /** |
|
| 795 | - * Module de langue où chercher la clé de traduction. Exemple 'medias' |
|
| 796 | - * |
|
| 797 | - * @var string |
|
| 798 | - */ |
|
| 799 | - public $module = ''; |
|
| 800 | - |
|
| 801 | - /** |
|
| 802 | - * Arguments à passer à la chaîne |
|
| 803 | - * |
|
| 804 | - * @var array |
|
| 805 | - */ |
|
| 806 | - public $arg = []; |
|
| 807 | - |
|
| 808 | - /** |
|
| 809 | - * Filtres à appliquer au résultat |
|
| 810 | - * |
|
| 811 | - * @var array |
|
| 812 | - */ |
|
| 813 | - public $param = []; |
|
| 814 | - |
|
| 815 | - /** |
|
| 816 | - * Source des filtres (compatibilité) (?) |
|
| 817 | - * |
|
| 818 | - * @var array|null |
|
| 819 | - */ |
|
| 820 | - public $fonctions = []; |
|
| 821 | - |
|
| 822 | - /** |
|
| 823 | - * Inutilisé, propriété générique de l'AST |
|
| 824 | - * |
|
| 825 | - * @var string|array |
|
| 826 | - */ |
|
| 827 | - public $avant = ''; |
|
| 828 | - |
|
| 829 | - /** |
|
| 830 | - * Inutilisé, propriété générique de l'AST |
|
| 831 | - * |
|
| 832 | - * @var string|array |
|
| 833 | - */ |
|
| 834 | - public $apres = ''; |
|
| 835 | - |
|
| 836 | - /** |
|
| 837 | - * Identifiant de la boucle |
|
| 838 | - * |
|
| 839 | - * @var string |
|
| 840 | - */ |
|
| 841 | - public $id_boucle = ''; |
|
| 842 | - |
|
| 843 | - /** |
|
| 844 | - * AST du squelette, liste de toutes les boucles |
|
| 845 | - * |
|
| 846 | - * @var Boucles[] |
|
| 847 | - */ |
|
| 848 | - public $boucles; |
|
| 849 | - |
|
| 850 | - /** |
|
| 851 | - * Alias de table d'application de la requête ou nom complet de la table SQL |
|
| 852 | - * |
|
| 853 | - * @var string|null |
|
| 854 | - */ |
|
| 855 | - public $type_requete; |
|
| 856 | - |
|
| 857 | - /** |
|
| 858 | - * Résultat de la compilation: toujours une expression PHP |
|
| 859 | - * |
|
| 860 | - * @var string |
|
| 861 | - */ |
|
| 862 | - public $code = ''; |
|
| 863 | - |
|
| 864 | - /** |
|
| 865 | - * Interdire les scripts |
|
| 866 | - * |
|
| 867 | - * @see interdire_scripts() |
|
| 868 | - * @var bool |
|
| 869 | - */ |
|
| 870 | - public $interdire_scripts = false; |
|
| 871 | - |
|
| 872 | - /** |
|
| 873 | - * Description du squelette |
|
| 874 | - * |
|
| 875 | - * Sert pour la gestion d'erreur et la production de code dependant du contexte |
|
| 876 | - * |
|
| 877 | - * Peut contenir les index : |
|
| 878 | - * - nom : Nom du fichier de cache |
|
| 879 | - * - gram : Nom de la grammaire du squelette (détermine le phraseur à utiliser) |
|
| 880 | - * - sourcefile : Chemin du squelette |
|
| 881 | - * - squelette : Code du squelette |
|
| 882 | - * - id_mere : Identifiant de la boucle parente |
|
| 883 | - * - documents : Pour embed et img dans les textes |
|
| 884 | - * - session : Pour un cache sessionné par auteur |
|
| 885 | - * - niv : Niveau de tabulation |
|
| 886 | - * |
|
| 887 | - * @var array |
|
| 888 | - */ |
|
| 889 | - public $descr = []; |
|
| 890 | - |
|
| 891 | - /** |
|
| 892 | - * Numéro de ligne dans le code source du squelette |
|
| 893 | - * |
|
| 894 | - * @var int |
|
| 895 | - */ |
|
| 896 | - public $ligne = 0; |
|
| 780 | + /** |
|
| 781 | + * Type de noeud |
|
| 782 | + * |
|
| 783 | + * @var string |
|
| 784 | + */ |
|
| 785 | + public $type = 'idiome'; |
|
| 786 | + |
|
| 787 | + /** |
|
| 788 | + * Clé de traduction demandée. Exemple 'item_oui' |
|
| 789 | + * |
|
| 790 | + * @var string |
|
| 791 | + */ |
|
| 792 | + public $nom_champ = ''; |
|
| 793 | + |
|
| 794 | + /** |
|
| 795 | + * Module de langue où chercher la clé de traduction. Exemple 'medias' |
|
| 796 | + * |
|
| 797 | + * @var string |
|
| 798 | + */ |
|
| 799 | + public $module = ''; |
|
| 800 | + |
|
| 801 | + /** |
|
| 802 | + * Arguments à passer à la chaîne |
|
| 803 | + * |
|
| 804 | + * @var array |
|
| 805 | + */ |
|
| 806 | + public $arg = []; |
|
| 807 | + |
|
| 808 | + /** |
|
| 809 | + * Filtres à appliquer au résultat |
|
| 810 | + * |
|
| 811 | + * @var array |
|
| 812 | + */ |
|
| 813 | + public $param = []; |
|
| 814 | + |
|
| 815 | + /** |
|
| 816 | + * Source des filtres (compatibilité) (?) |
|
| 817 | + * |
|
| 818 | + * @var array|null |
|
| 819 | + */ |
|
| 820 | + public $fonctions = []; |
|
| 821 | + |
|
| 822 | + /** |
|
| 823 | + * Inutilisé, propriété générique de l'AST |
|
| 824 | + * |
|
| 825 | + * @var string|array |
|
| 826 | + */ |
|
| 827 | + public $avant = ''; |
|
| 828 | + |
|
| 829 | + /** |
|
| 830 | + * Inutilisé, propriété générique de l'AST |
|
| 831 | + * |
|
| 832 | + * @var string|array |
|
| 833 | + */ |
|
| 834 | + public $apres = ''; |
|
| 835 | + |
|
| 836 | + /** |
|
| 837 | + * Identifiant de la boucle |
|
| 838 | + * |
|
| 839 | + * @var string |
|
| 840 | + */ |
|
| 841 | + public $id_boucle = ''; |
|
| 842 | + |
|
| 843 | + /** |
|
| 844 | + * AST du squelette, liste de toutes les boucles |
|
| 845 | + * |
|
| 846 | + * @var Boucles[] |
|
| 847 | + */ |
|
| 848 | + public $boucles; |
|
| 849 | + |
|
| 850 | + /** |
|
| 851 | + * Alias de table d'application de la requête ou nom complet de la table SQL |
|
| 852 | + * |
|
| 853 | + * @var string|null |
|
| 854 | + */ |
|
| 855 | + public $type_requete; |
|
| 856 | + |
|
| 857 | + /** |
|
| 858 | + * Résultat de la compilation: toujours une expression PHP |
|
| 859 | + * |
|
| 860 | + * @var string |
|
| 861 | + */ |
|
| 862 | + public $code = ''; |
|
| 863 | + |
|
| 864 | + /** |
|
| 865 | + * Interdire les scripts |
|
| 866 | + * |
|
| 867 | + * @see interdire_scripts() |
|
| 868 | + * @var bool |
|
| 869 | + */ |
|
| 870 | + public $interdire_scripts = false; |
|
| 871 | + |
|
| 872 | + /** |
|
| 873 | + * Description du squelette |
|
| 874 | + * |
|
| 875 | + * Sert pour la gestion d'erreur et la production de code dependant du contexte |
|
| 876 | + * |
|
| 877 | + * Peut contenir les index : |
|
| 878 | + * - nom : Nom du fichier de cache |
|
| 879 | + * - gram : Nom de la grammaire du squelette (détermine le phraseur à utiliser) |
|
| 880 | + * - sourcefile : Chemin du squelette |
|
| 881 | + * - squelette : Code du squelette |
|
| 882 | + * - id_mere : Identifiant de la boucle parente |
|
| 883 | + * - documents : Pour embed et img dans les textes |
|
| 884 | + * - session : Pour un cache sessionné par auteur |
|
| 885 | + * - niv : Niveau de tabulation |
|
| 886 | + * |
|
| 887 | + * @var array |
|
| 888 | + */ |
|
| 889 | + public $descr = []; |
|
| 890 | + |
|
| 891 | + /** |
|
| 892 | + * Numéro de ligne dans le code source du squelette |
|
| 893 | + * |
|
| 894 | + * @var int |
|
| 895 | + */ |
|
| 896 | + public $ligne = 0; |
|
| 897 | 897 | } |
| 898 | 898 | |
| 899 | 899 | /** |
@@ -902,28 +902,28 @@ discard block |
||
| 902 | 902 | * @package SPIP\Core\Compilateur\AST |
| 903 | 903 | **/ |
| 904 | 904 | class Polyglotte { |
| 905 | - /** |
|
| 906 | - * Type de noeud |
|
| 907 | - * |
|
| 908 | - * @var string |
|
| 909 | - */ |
|
| 910 | - public $type = 'polyglotte'; |
|
| 911 | - |
|
| 912 | - /** |
|
| 913 | - * Tableau des traductions possibles classées par langue |
|
| 914 | - * |
|
| 915 | - * Tableau code de langue => texte |
|
| 916 | - * |
|
| 917 | - * @var array |
|
| 918 | - */ |
|
| 919 | - public $traductions = []; |
|
| 920 | - |
|
| 921 | - /** |
|
| 922 | - * Numéro de ligne dans le code source du squelette |
|
| 923 | - * |
|
| 924 | - * @var int |
|
| 925 | - */ |
|
| 926 | - public $ligne = 0; |
|
| 905 | + /** |
|
| 906 | + * Type de noeud |
|
| 907 | + * |
|
| 908 | + * @var string |
|
| 909 | + */ |
|
| 910 | + public $type = 'polyglotte'; |
|
| 911 | + |
|
| 912 | + /** |
|
| 913 | + * Tableau des traductions possibles classées par langue |
|
| 914 | + * |
|
| 915 | + * Tableau code de langue => texte |
|
| 916 | + * |
|
| 917 | + * @var array |
|
| 918 | + */ |
|
| 919 | + public $traductions = []; |
|
| 920 | + |
|
| 921 | + /** |
|
| 922 | + * Numéro de ligne dans le code source du squelette |
|
| 923 | + * |
|
| 924 | + * @var int |
|
| 925 | + */ |
|
| 926 | + public $ligne = 0; |
|
| 927 | 927 | } |
| 928 | 928 | |
| 929 | 929 | |
@@ -948,90 +948,90 @@ discard block |
||
| 948 | 948 | */ |
| 949 | 949 | function declarer_interfaces() { |
| 950 | 950 | |
| 951 | - $GLOBALS['table_des_tables']['articles'] = 'articles'; |
|
| 952 | - $GLOBALS['table_des_tables']['auteurs'] = 'auteurs'; |
|
| 953 | - $GLOBALS['table_des_tables']['rubriques'] = 'rubriques'; |
|
| 954 | - $GLOBALS['table_des_tables']['hierarchie'] = 'rubriques'; |
|
| 955 | - |
|
| 956 | - // definition des statuts de publication |
|
| 957 | - $GLOBALS['table_statut'] = []; |
|
| 958 | - |
|
| 959 | - // |
|
| 960 | - // tableau des tables de jointures |
|
| 961 | - // Ex: gestion du critere {id_mot} dans la boucle(ARTICLES) |
|
| 962 | - $GLOBALS['tables_jointures'] = []; |
|
| 963 | - $GLOBALS['tables_jointures']['spip_jobs'][] = 'jobs_liens'; |
|
| 964 | - |
|
| 965 | - // $GLOBALS['exceptions_des_jointures']['titre_mot'] = array('spip_mots', 'titre'); // pour exemple |
|
| 966 | - $GLOBALS['exceptions_des_jointures']['profondeur'] = ['spip_rubriques', 'profondeur']; |
|
| 967 | - |
|
| 968 | - |
|
| 969 | - if (!defined('_TRAITEMENT_TYPO')) { |
|
| 970 | - define('_TRAITEMENT_TYPO', 'typo(%s, "TYPO", $connect, $Pile[0])'); |
|
| 971 | - } |
|
| 972 | - if (!defined('_TRAITEMENT_RACCOURCIS')) { |
|
| 973 | - define('_TRAITEMENT_RACCOURCIS', 'propre(%s, $connect, $Pile[0])'); |
|
| 974 | - } |
|
| 975 | - if (!defined('_TRAITEMENT_TYPO_SANS_NUMERO')) { |
|
| 976 | - define('_TRAITEMENT_TYPO_SANS_NUMERO', 'supprimer_numero(typo(%s, "TYPO", $connect, $Pile[0]))'); |
|
| 977 | - } |
|
| 978 | - $GLOBALS['table_des_traitements']['BIO'][] = 'safehtml(' . _TRAITEMENT_RACCOURCIS . ')'; |
|
| 979 | - $GLOBALS['table_des_traitements']['NOM_SITE']['spip_auteurs'] = 'entites_html(%s)'; |
|
| 980 | - $GLOBALS['table_des_traitements']['NOM']['spip_auteurs'] = 'safehtml(' . _TRAITEMENT_TYPO_SANS_NUMERO . ')'; |
|
| 981 | - $GLOBALS['table_des_traitements']['CHAPO'][] = _TRAITEMENT_RACCOURCIS; |
|
| 982 | - $GLOBALS['table_des_traitements']['DATE'][] = 'normaliser_date(%s)'; |
|
| 983 | - $GLOBALS['table_des_traitements']['DATE_REDAC'][] = 'normaliser_date(%s)'; |
|
| 984 | - $GLOBALS['table_des_traitements']['DATE_MODIF'][] = 'normaliser_date(%s)'; |
|
| 985 | - $GLOBALS['table_des_traitements']['DATE_NOUVEAUTES'][] = 'normaliser_date(%s)'; |
|
| 986 | - $GLOBALS['table_des_traitements']['DESCRIPTIF'][] = _TRAITEMENT_RACCOURCIS; |
|
| 987 | - $GLOBALS['table_des_traitements']['INTRODUCTION'][] = _TRAITEMENT_RACCOURCIS; |
|
| 988 | - $GLOBALS['table_des_traitements']['NOM_SITE_SPIP'][] = _TRAITEMENT_TYPO; |
|
| 989 | - $GLOBALS['table_des_traitements']['NOM'][] = _TRAITEMENT_TYPO_SANS_NUMERO; |
|
| 990 | - $GLOBALS['table_des_traitements']['AUTEUR'][] = _TRAITEMENT_TYPO; |
|
| 991 | - $GLOBALS['table_des_traitements']['PS'][] = _TRAITEMENT_RACCOURCIS; |
|
| 992 | - $GLOBALS['table_des_traitements']['SOURCE'][] = _TRAITEMENT_TYPO; |
|
| 993 | - $GLOBALS['table_des_traitements']['SOUSTITRE'][] = _TRAITEMENT_TYPO; |
|
| 994 | - $GLOBALS['table_des_traitements']['SURTITRE'][] = _TRAITEMENT_TYPO; |
|
| 995 | - $GLOBALS['table_des_traitements']['TAGS'][] = '%s'; |
|
| 996 | - $GLOBALS['table_des_traitements']['TEXTE'][] = _TRAITEMENT_RACCOURCIS; |
|
| 997 | - $GLOBALS['table_des_traitements']['TITRE'][] = _TRAITEMENT_TYPO_SANS_NUMERO; |
|
| 998 | - $GLOBALS['table_des_traitements']['TYPE'][] = _TRAITEMENT_TYPO; |
|
| 999 | - $GLOBALS['table_des_traitements']['DESCRIPTIF_SITE_SPIP'][] = _TRAITEMENT_RACCOURCIS; |
|
| 1000 | - $GLOBALS['table_des_traitements']['SLOGAN_SITE_SPIP'][] = _TRAITEMENT_TYPO; |
|
| 1001 | - $GLOBALS['table_des_traitements']['ENV'][] = 'entites_html(%s,true)'; |
|
| 1002 | - |
|
| 1003 | - // valeur par defaut pour les balises non listees ci-dessus |
|
| 1004 | - $GLOBALS['table_des_traitements']['*'][] = false; // pas de traitement, mais permet au compilo de trouver la declaration suivante |
|
| 1005 | - // toujours securiser les DATA |
|
| 1006 | - $GLOBALS['table_des_traitements']['*']['DATA'] = 'safehtml(%s)'; |
|
| 1007 | - // expliciter pour VALEUR qui est un champ calcule et ne sera pas protege par le catch-all * |
|
| 1008 | - $GLOBALS['table_des_traitements']['VALEUR']['DATA'] = 'safehtml(%s)'; |
|
| 1009 | - |
|
| 1010 | - |
|
| 1011 | - // gerer l'affectation en 2 temps car si le pipe n'est pas encore declare, on ecrase les globales |
|
| 1012 | - $interfaces = pipeline( |
|
| 1013 | - 'declarer_tables_interfaces', |
|
| 1014 | - [ |
|
| 1015 | - 'table_des_tables' => $GLOBALS['table_des_tables'], |
|
| 1016 | - 'exceptions_des_tables' => $GLOBALS['exceptions_des_tables'], |
|
| 1017 | - 'table_date' => $GLOBALS['table_date'], |
|
| 1018 | - 'table_titre' => $GLOBALS['table_titre'], |
|
| 1019 | - 'tables_jointures' => $GLOBALS['tables_jointures'], |
|
| 1020 | - 'exceptions_des_jointures' => $GLOBALS['exceptions_des_jointures'], |
|
| 1021 | - 'table_des_traitements' => $GLOBALS['table_des_traitements'], |
|
| 1022 | - 'table_statut' => $GLOBALS['table_statut'], |
|
| 1023 | - ] |
|
| 1024 | - ); |
|
| 1025 | - if ($interfaces) { |
|
| 1026 | - $GLOBALS['table_des_tables'] = $interfaces['table_des_tables']; |
|
| 1027 | - $GLOBALS['exceptions_des_tables'] = $interfaces['exceptions_des_tables']; |
|
| 1028 | - $GLOBALS['table_date'] = $interfaces['table_date']; |
|
| 1029 | - $GLOBALS['table_titre'] = $interfaces['table_titre']; |
|
| 1030 | - $GLOBALS['tables_jointures'] = $interfaces['tables_jointures']; |
|
| 1031 | - $GLOBALS['exceptions_des_jointures'] = $interfaces['exceptions_des_jointures']; |
|
| 1032 | - $GLOBALS['table_des_traitements'] = $interfaces['table_des_traitements']; |
|
| 1033 | - $GLOBALS['table_statut'] = $interfaces['table_statut']; |
|
| 1034 | - } |
|
| 951 | + $GLOBALS['table_des_tables']['articles'] = 'articles'; |
|
| 952 | + $GLOBALS['table_des_tables']['auteurs'] = 'auteurs'; |
|
| 953 | + $GLOBALS['table_des_tables']['rubriques'] = 'rubriques'; |
|
| 954 | + $GLOBALS['table_des_tables']['hierarchie'] = 'rubriques'; |
|
| 955 | + |
|
| 956 | + // definition des statuts de publication |
|
| 957 | + $GLOBALS['table_statut'] = []; |
|
| 958 | + |
|
| 959 | + // |
|
| 960 | + // tableau des tables de jointures |
|
| 961 | + // Ex: gestion du critere {id_mot} dans la boucle(ARTICLES) |
|
| 962 | + $GLOBALS['tables_jointures'] = []; |
|
| 963 | + $GLOBALS['tables_jointures']['spip_jobs'][] = 'jobs_liens'; |
|
| 964 | + |
|
| 965 | + // $GLOBALS['exceptions_des_jointures']['titre_mot'] = array('spip_mots', 'titre'); // pour exemple |
|
| 966 | + $GLOBALS['exceptions_des_jointures']['profondeur'] = ['spip_rubriques', 'profondeur']; |
|
| 967 | + |
|
| 968 | + |
|
| 969 | + if (!defined('_TRAITEMENT_TYPO')) { |
|
| 970 | + define('_TRAITEMENT_TYPO', 'typo(%s, "TYPO", $connect, $Pile[0])'); |
|
| 971 | + } |
|
| 972 | + if (!defined('_TRAITEMENT_RACCOURCIS')) { |
|
| 973 | + define('_TRAITEMENT_RACCOURCIS', 'propre(%s, $connect, $Pile[0])'); |
|
| 974 | + } |
|
| 975 | + if (!defined('_TRAITEMENT_TYPO_SANS_NUMERO')) { |
|
| 976 | + define('_TRAITEMENT_TYPO_SANS_NUMERO', 'supprimer_numero(typo(%s, "TYPO", $connect, $Pile[0]))'); |
|
| 977 | + } |
|
| 978 | + $GLOBALS['table_des_traitements']['BIO'][] = 'safehtml(' . _TRAITEMENT_RACCOURCIS . ')'; |
|
| 979 | + $GLOBALS['table_des_traitements']['NOM_SITE']['spip_auteurs'] = 'entites_html(%s)'; |
|
| 980 | + $GLOBALS['table_des_traitements']['NOM']['spip_auteurs'] = 'safehtml(' . _TRAITEMENT_TYPO_SANS_NUMERO . ')'; |
|
| 981 | + $GLOBALS['table_des_traitements']['CHAPO'][] = _TRAITEMENT_RACCOURCIS; |
|
| 982 | + $GLOBALS['table_des_traitements']['DATE'][] = 'normaliser_date(%s)'; |
|
| 983 | + $GLOBALS['table_des_traitements']['DATE_REDAC'][] = 'normaliser_date(%s)'; |
|
| 984 | + $GLOBALS['table_des_traitements']['DATE_MODIF'][] = 'normaliser_date(%s)'; |
|
| 985 | + $GLOBALS['table_des_traitements']['DATE_NOUVEAUTES'][] = 'normaliser_date(%s)'; |
|
| 986 | + $GLOBALS['table_des_traitements']['DESCRIPTIF'][] = _TRAITEMENT_RACCOURCIS; |
|
| 987 | + $GLOBALS['table_des_traitements']['INTRODUCTION'][] = _TRAITEMENT_RACCOURCIS; |
|
| 988 | + $GLOBALS['table_des_traitements']['NOM_SITE_SPIP'][] = _TRAITEMENT_TYPO; |
|
| 989 | + $GLOBALS['table_des_traitements']['NOM'][] = _TRAITEMENT_TYPO_SANS_NUMERO; |
|
| 990 | + $GLOBALS['table_des_traitements']['AUTEUR'][] = _TRAITEMENT_TYPO; |
|
| 991 | + $GLOBALS['table_des_traitements']['PS'][] = _TRAITEMENT_RACCOURCIS; |
|
| 992 | + $GLOBALS['table_des_traitements']['SOURCE'][] = _TRAITEMENT_TYPO; |
|
| 993 | + $GLOBALS['table_des_traitements']['SOUSTITRE'][] = _TRAITEMENT_TYPO; |
|
| 994 | + $GLOBALS['table_des_traitements']['SURTITRE'][] = _TRAITEMENT_TYPO; |
|
| 995 | + $GLOBALS['table_des_traitements']['TAGS'][] = '%s'; |
|
| 996 | + $GLOBALS['table_des_traitements']['TEXTE'][] = _TRAITEMENT_RACCOURCIS; |
|
| 997 | + $GLOBALS['table_des_traitements']['TITRE'][] = _TRAITEMENT_TYPO_SANS_NUMERO; |
|
| 998 | + $GLOBALS['table_des_traitements']['TYPE'][] = _TRAITEMENT_TYPO; |
|
| 999 | + $GLOBALS['table_des_traitements']['DESCRIPTIF_SITE_SPIP'][] = _TRAITEMENT_RACCOURCIS; |
|
| 1000 | + $GLOBALS['table_des_traitements']['SLOGAN_SITE_SPIP'][] = _TRAITEMENT_TYPO; |
|
| 1001 | + $GLOBALS['table_des_traitements']['ENV'][] = 'entites_html(%s,true)'; |
|
| 1002 | + |
|
| 1003 | + // valeur par defaut pour les balises non listees ci-dessus |
|
| 1004 | + $GLOBALS['table_des_traitements']['*'][] = false; // pas de traitement, mais permet au compilo de trouver la declaration suivante |
|
| 1005 | + // toujours securiser les DATA |
|
| 1006 | + $GLOBALS['table_des_traitements']['*']['DATA'] = 'safehtml(%s)'; |
|
| 1007 | + // expliciter pour VALEUR qui est un champ calcule et ne sera pas protege par le catch-all * |
|
| 1008 | + $GLOBALS['table_des_traitements']['VALEUR']['DATA'] = 'safehtml(%s)'; |
|
| 1009 | + |
|
| 1010 | + |
|
| 1011 | + // gerer l'affectation en 2 temps car si le pipe n'est pas encore declare, on ecrase les globales |
|
| 1012 | + $interfaces = pipeline( |
|
| 1013 | + 'declarer_tables_interfaces', |
|
| 1014 | + [ |
|
| 1015 | + 'table_des_tables' => $GLOBALS['table_des_tables'], |
|
| 1016 | + 'exceptions_des_tables' => $GLOBALS['exceptions_des_tables'], |
|
| 1017 | + 'table_date' => $GLOBALS['table_date'], |
|
| 1018 | + 'table_titre' => $GLOBALS['table_titre'], |
|
| 1019 | + 'tables_jointures' => $GLOBALS['tables_jointures'], |
|
| 1020 | + 'exceptions_des_jointures' => $GLOBALS['exceptions_des_jointures'], |
|
| 1021 | + 'table_des_traitements' => $GLOBALS['table_des_traitements'], |
|
| 1022 | + 'table_statut' => $GLOBALS['table_statut'], |
|
| 1023 | + ] |
|
| 1024 | + ); |
|
| 1025 | + if ($interfaces) { |
|
| 1026 | + $GLOBALS['table_des_tables'] = $interfaces['table_des_tables']; |
|
| 1027 | + $GLOBALS['exceptions_des_tables'] = $interfaces['exceptions_des_tables']; |
|
| 1028 | + $GLOBALS['table_date'] = $interfaces['table_date']; |
|
| 1029 | + $GLOBALS['table_titre'] = $interfaces['table_titre']; |
|
| 1030 | + $GLOBALS['tables_jointures'] = $interfaces['tables_jointures']; |
|
| 1031 | + $GLOBALS['exceptions_des_jointures'] = $interfaces['exceptions_des_jointures']; |
|
| 1032 | + $GLOBALS['table_des_traitements'] = $interfaces['table_des_traitements']; |
|
| 1033 | + $GLOBALS['table_statut'] = $interfaces['table_statut']; |
|
| 1034 | + } |
|
| 1035 | 1035 | } |
| 1036 | 1036 | |
| 1037 | 1037 | declarer_interfaces(); |
@@ -17,7 +17,7 @@ discard block |
||
| 17 | 17 | **/ |
| 18 | 18 | |
| 19 | 19 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 20 | - return; |
|
| 20 | + return; |
|
| 21 | 21 | } |
| 22 | 22 | |
| 23 | 23 | |
@@ -28,210 +28,210 @@ discard block |
||
| 28 | 28 | */ |
| 29 | 29 | class IterateurSQL implements Iterator { |
| 30 | 30 | |
| 31 | - /** |
|
| 32 | - * ressource sql |
|
| 33 | - * |
|
| 34 | - * @var resource|bool |
|
| 35 | - */ |
|
| 36 | - protected $sqlresult = false; |
|
| 37 | - |
|
| 38 | - /** |
|
| 39 | - * row sql courante |
|
| 40 | - * |
|
| 41 | - * @var array|null |
|
| 42 | - */ |
|
| 43 | - protected $row = null; |
|
| 44 | - |
|
| 45 | - protected $firstseek = false; |
|
| 46 | - |
|
| 47 | - /** |
|
| 48 | - * Erreur presente ? |
|
| 49 | - * |
|
| 50 | - * @var bool |
|
| 51 | - **/ |
|
| 52 | - public $err = false; |
|
| 53 | - |
|
| 54 | - /** |
|
| 55 | - * Calcul du total des elements |
|
| 56 | - * |
|
| 57 | - * @var int|null |
|
| 58 | - **/ |
|
| 59 | - public $total = null; |
|
| 60 | - |
|
| 61 | - /** |
|
| 62 | - * selectionner les donnees, ie faire la requete SQL |
|
| 63 | - * |
|
| 64 | - * @return void |
|
| 65 | - */ |
|
| 66 | - protected function select() { |
|
| 67 | - $this->row = null; |
|
| 68 | - $v = &$this->command; |
|
| 69 | - $this->sqlresult = calculer_select( |
|
| 70 | - $v['select'], |
|
| 71 | - $v['from'], |
|
| 72 | - $v['type'], |
|
| 73 | - $v['where'], |
|
| 74 | - $v['join'], |
|
| 75 | - $v['groupby'], |
|
| 76 | - $v['orderby'], |
|
| 77 | - $v['limit'], |
|
| 78 | - $v['having'], |
|
| 79 | - $v['table'], |
|
| 80 | - $v['id'], |
|
| 81 | - $v['connect'], |
|
| 82 | - $this->info |
|
| 83 | - ); |
|
| 84 | - $this->err = !$this->sqlresult; |
|
| 85 | - $this->firstseek = false; |
|
| 86 | - $this->pos = -1; |
|
| 87 | - |
|
| 88 | - // pas d'init a priori, le calcul ne sera fait qu'en cas de besoin (provoque une double requete souvent inutile en sqlite) |
|
| 89 | - //$this->total = $this->count(); |
|
| 90 | - } |
|
| 91 | - |
|
| 92 | - /* |
|
| 31 | + /** |
|
| 32 | + * ressource sql |
|
| 33 | + * |
|
| 34 | + * @var resource|bool |
|
| 35 | + */ |
|
| 36 | + protected $sqlresult = false; |
|
| 37 | + |
|
| 38 | + /** |
|
| 39 | + * row sql courante |
|
| 40 | + * |
|
| 41 | + * @var array|null |
|
| 42 | + */ |
|
| 43 | + protected $row = null; |
|
| 44 | + |
|
| 45 | + protected $firstseek = false; |
|
| 46 | + |
|
| 47 | + /** |
|
| 48 | + * Erreur presente ? |
|
| 49 | + * |
|
| 50 | + * @var bool |
|
| 51 | + **/ |
|
| 52 | + public $err = false; |
|
| 53 | + |
|
| 54 | + /** |
|
| 55 | + * Calcul du total des elements |
|
| 56 | + * |
|
| 57 | + * @var int|null |
|
| 58 | + **/ |
|
| 59 | + public $total = null; |
|
| 60 | + |
|
| 61 | + /** |
|
| 62 | + * selectionner les donnees, ie faire la requete SQL |
|
| 63 | + * |
|
| 64 | + * @return void |
|
| 65 | + */ |
|
| 66 | + protected function select() { |
|
| 67 | + $this->row = null; |
|
| 68 | + $v = &$this->command; |
|
| 69 | + $this->sqlresult = calculer_select( |
|
| 70 | + $v['select'], |
|
| 71 | + $v['from'], |
|
| 72 | + $v['type'], |
|
| 73 | + $v['where'], |
|
| 74 | + $v['join'], |
|
| 75 | + $v['groupby'], |
|
| 76 | + $v['orderby'], |
|
| 77 | + $v['limit'], |
|
| 78 | + $v['having'], |
|
| 79 | + $v['table'], |
|
| 80 | + $v['id'], |
|
| 81 | + $v['connect'], |
|
| 82 | + $this->info |
|
| 83 | + ); |
|
| 84 | + $this->err = !$this->sqlresult; |
|
| 85 | + $this->firstseek = false; |
|
| 86 | + $this->pos = -1; |
|
| 87 | + |
|
| 88 | + // pas d'init a priori, le calcul ne sera fait qu'en cas de besoin (provoque une double requete souvent inutile en sqlite) |
|
| 89 | + //$this->total = $this->count(); |
|
| 90 | + } |
|
| 91 | + |
|
| 92 | + /* |
|
| 93 | 93 | * array command: les commandes d'initialisation |
| 94 | 94 | * array info: les infos sur le squelette |
| 95 | 95 | */ |
| 96 | - public function __construct($command, $info = []) { |
|
| 97 | - $this->type = 'SQL'; |
|
| 98 | - $this->command = $command; |
|
| 99 | - $this->info = $info; |
|
| 100 | - $this->select(); |
|
| 101 | - } |
|
| 102 | - |
|
| 103 | - /** |
|
| 104 | - * Rembobiner |
|
| 105 | - * |
|
| 106 | - * @return bool |
|
| 107 | - */ |
|
| 108 | - public function rewind() : void { |
|
| 109 | - if ($this->pos > 0) { |
|
| 110 | - $this->seek(0); |
|
| 111 | - } |
|
| 112 | - } |
|
| 113 | - |
|
| 114 | - /** |
|
| 115 | - * Verifier l'etat de l'iterateur |
|
| 116 | - * |
|
| 117 | - * @return bool |
|
| 118 | - */ |
|
| 119 | - public function valid(): bool { |
|
| 120 | - if ($this->err) { |
|
| 121 | - return false; |
|
| 122 | - } |
|
| 123 | - if (!$this->firstseek) { |
|
| 124 | - $this->next(); |
|
| 125 | - } |
|
| 126 | - |
|
| 127 | - return is_array($this->row); |
|
| 128 | - } |
|
| 129 | - |
|
| 130 | - /** |
|
| 131 | - * Valeurs sur la position courante |
|
| 132 | - * |
|
| 133 | - * @return array |
|
| 134 | - */ |
|
| 135 | - #[\ReturnTypeWillChange] |
|
| 136 | - public function current() { |
|
| 137 | - return $this->row; |
|
| 138 | - } |
|
| 139 | - |
|
| 140 | - #[\ReturnTypeWillChange] |
|
| 141 | - public function key() { |
|
| 142 | - return $this->pos; |
|
| 143 | - } |
|
| 144 | - |
|
| 145 | - /** |
|
| 146 | - * Sauter a une position absolue |
|
| 147 | - * |
|
| 148 | - * @param int $n |
|
| 149 | - * @param null|string $continue |
|
| 150 | - * @return bool |
|
| 151 | - */ |
|
| 152 | - public function seek($n = 0, $continue = null) { |
|
| 153 | - if (!sql_seek($this->sqlresult, $n, $this->command['connect'], $continue)) { |
|
| 154 | - // SQLite ne sait pas seek(), il faut relancer la query |
|
| 155 | - // si la position courante est apres la position visee |
|
| 156 | - // il faut relancer la requete |
|
| 157 | - if ($this->pos > $n) { |
|
| 158 | - $this->free(); |
|
| 159 | - $this->select(); |
|
| 160 | - $this->valid(); |
|
| 161 | - } |
|
| 162 | - // et utiliser la methode par defaut pour se deplacer au bon endroit |
|
| 163 | - // (sera fait en cas d'echec de cette fonction) |
|
| 164 | - return false; |
|
| 165 | - } |
|
| 166 | - $this->row = sql_fetch($this->sqlresult, $this->command['connect']); |
|
| 167 | - $this->pos = min($n, $this->count()); |
|
| 168 | - |
|
| 169 | - return true; |
|
| 170 | - } |
|
| 171 | - |
|
| 172 | - /** |
|
| 173 | - * Avancer d'un cran |
|
| 174 | - * |
|
| 175 | - * @return void |
|
| 176 | - */ |
|
| 177 | - public function next() : void { |
|
| 178 | - $this->row = sql_fetch($this->sqlresult, $this->command['connect']); |
|
| 179 | - $this->pos++; |
|
| 180 | - $this->firstseek |= true; |
|
| 181 | - } |
|
| 182 | - |
|
| 183 | - /** |
|
| 184 | - * Avancer et retourner les donnees pour le nouvel element |
|
| 185 | - * |
|
| 186 | - * @return array|bool|null |
|
| 187 | - */ |
|
| 188 | - public function fetch() { |
|
| 189 | - if ($this->valid()) { |
|
| 190 | - $r = $this->current(); |
|
| 191 | - $this->next(); |
|
| 192 | - } else { |
|
| 193 | - $r = false; |
|
| 194 | - } |
|
| 195 | - |
|
| 196 | - return $r; |
|
| 197 | - } |
|
| 198 | - |
|
| 199 | - /** |
|
| 200 | - * liberer les ressources |
|
| 201 | - * |
|
| 202 | - * @return bool |
|
| 203 | - */ |
|
| 204 | - public function free() { |
|
| 205 | - if (!$this->sqlresult) { |
|
| 206 | - return true; |
|
| 207 | - } |
|
| 208 | - $a = sql_free($this->sqlresult, $this->command['connect']); |
|
| 209 | - $this->sqlresult = null; |
|
| 210 | - |
|
| 211 | - return $a; |
|
| 212 | - } |
|
| 213 | - |
|
| 214 | - /** |
|
| 215 | - * Compter le nombre de resultats |
|
| 216 | - * |
|
| 217 | - * @return int |
|
| 218 | - */ |
|
| 219 | - public function count() { |
|
| 220 | - if (is_null($this->total)) { |
|
| 221 | - if (!$this->sqlresult) { |
|
| 222 | - $this->total = 0; |
|
| 223 | - } else { |
|
| 224 | - # cas count(*) |
|
| 225 | - if (in_array('count(*)', $this->command['select'])) { |
|
| 226 | - $this->valid(); |
|
| 227 | - $s = $this->current(); |
|
| 228 | - $this->total = $s['count(*)']; |
|
| 229 | - } else { |
|
| 230 | - $this->total = sql_count($this->sqlresult, $this->command['connect']); |
|
| 231 | - } |
|
| 232 | - } |
|
| 233 | - } |
|
| 234 | - |
|
| 235 | - return $this->total; |
|
| 236 | - } |
|
| 96 | + public function __construct($command, $info = []) { |
|
| 97 | + $this->type = 'SQL'; |
|
| 98 | + $this->command = $command; |
|
| 99 | + $this->info = $info; |
|
| 100 | + $this->select(); |
|
| 101 | + } |
|
| 102 | + |
|
| 103 | + /** |
|
| 104 | + * Rembobiner |
|
| 105 | + * |
|
| 106 | + * @return bool |
|
| 107 | + */ |
|
| 108 | + public function rewind() : void { |
|
| 109 | + if ($this->pos > 0) { |
|
| 110 | + $this->seek(0); |
|
| 111 | + } |
|
| 112 | + } |
|
| 113 | + |
|
| 114 | + /** |
|
| 115 | + * Verifier l'etat de l'iterateur |
|
| 116 | + * |
|
| 117 | + * @return bool |
|
| 118 | + */ |
|
| 119 | + public function valid(): bool { |
|
| 120 | + if ($this->err) { |
|
| 121 | + return false; |
|
| 122 | + } |
|
| 123 | + if (!$this->firstseek) { |
|
| 124 | + $this->next(); |
|
| 125 | + } |
|
| 126 | + |
|
| 127 | + return is_array($this->row); |
|
| 128 | + } |
|
| 129 | + |
|
| 130 | + /** |
|
| 131 | + * Valeurs sur la position courante |
|
| 132 | + * |
|
| 133 | + * @return array |
|
| 134 | + */ |
|
| 135 | + #[\ReturnTypeWillChange] |
|
| 136 | + public function current() { |
|
| 137 | + return $this->row; |
|
| 138 | + } |
|
| 139 | + |
|
| 140 | + #[\ReturnTypeWillChange] |
|
| 141 | + public function key() { |
|
| 142 | + return $this->pos; |
|
| 143 | + } |
|
| 144 | + |
|
| 145 | + /** |
|
| 146 | + * Sauter a une position absolue |
|
| 147 | + * |
|
| 148 | + * @param int $n |
|
| 149 | + * @param null|string $continue |
|
| 150 | + * @return bool |
|
| 151 | + */ |
|
| 152 | + public function seek($n = 0, $continue = null) { |
|
| 153 | + if (!sql_seek($this->sqlresult, $n, $this->command['connect'], $continue)) { |
|
| 154 | + // SQLite ne sait pas seek(), il faut relancer la query |
|
| 155 | + // si la position courante est apres la position visee |
|
| 156 | + // il faut relancer la requete |
|
| 157 | + if ($this->pos > $n) { |
|
| 158 | + $this->free(); |
|
| 159 | + $this->select(); |
|
| 160 | + $this->valid(); |
|
| 161 | + } |
|
| 162 | + // et utiliser la methode par defaut pour se deplacer au bon endroit |
|
| 163 | + // (sera fait en cas d'echec de cette fonction) |
|
| 164 | + return false; |
|
| 165 | + } |
|
| 166 | + $this->row = sql_fetch($this->sqlresult, $this->command['connect']); |
|
| 167 | + $this->pos = min($n, $this->count()); |
|
| 168 | + |
|
| 169 | + return true; |
|
| 170 | + } |
|
| 171 | + |
|
| 172 | + /** |
|
| 173 | + * Avancer d'un cran |
|
| 174 | + * |
|
| 175 | + * @return void |
|
| 176 | + */ |
|
| 177 | + public function next() : void { |
|
| 178 | + $this->row = sql_fetch($this->sqlresult, $this->command['connect']); |
|
| 179 | + $this->pos++; |
|
| 180 | + $this->firstseek |= true; |
|
| 181 | + } |
|
| 182 | + |
|
| 183 | + /** |
|
| 184 | + * Avancer et retourner les donnees pour le nouvel element |
|
| 185 | + * |
|
| 186 | + * @return array|bool|null |
|
| 187 | + */ |
|
| 188 | + public function fetch() { |
|
| 189 | + if ($this->valid()) { |
|
| 190 | + $r = $this->current(); |
|
| 191 | + $this->next(); |
|
| 192 | + } else { |
|
| 193 | + $r = false; |
|
| 194 | + } |
|
| 195 | + |
|
| 196 | + return $r; |
|
| 197 | + } |
|
| 198 | + |
|
| 199 | + /** |
|
| 200 | + * liberer les ressources |
|
| 201 | + * |
|
| 202 | + * @return bool |
|
| 203 | + */ |
|
| 204 | + public function free() { |
|
| 205 | + if (!$this->sqlresult) { |
|
| 206 | + return true; |
|
| 207 | + } |
|
| 208 | + $a = sql_free($this->sqlresult, $this->command['connect']); |
|
| 209 | + $this->sqlresult = null; |
|
| 210 | + |
|
| 211 | + return $a; |
|
| 212 | + } |
|
| 213 | + |
|
| 214 | + /** |
|
| 215 | + * Compter le nombre de resultats |
|
| 216 | + * |
|
| 217 | + * @return int |
|
| 218 | + */ |
|
| 219 | + public function count() { |
|
| 220 | + if (is_null($this->total)) { |
|
| 221 | + if (!$this->sqlresult) { |
|
| 222 | + $this->total = 0; |
|
| 223 | + } else { |
|
| 224 | + # cas count(*) |
|
| 225 | + if (in_array('count(*)', $this->command['select'])) { |
|
| 226 | + $this->valid(); |
|
| 227 | + $s = $this->current(); |
|
| 228 | + $this->total = $s['count(*)']; |
|
| 229 | + } else { |
|
| 230 | + $this->total = sql_count($this->sqlresult, $this->command['connect']); |
|
| 231 | + } |
|
| 232 | + } |
|
| 233 | + } |
|
| 234 | + |
|
| 235 | + return $this->total; |
|
| 236 | + } |
|
| 237 | 237 | } |