From: Ludovic CHEVALIER Date: Tue, 25 Jun 2013 16:44:01 +0000 (+0200) Subject: [PLUGINS] +set de base X-Git-Tag: v3.3.0~135 X-Git-Url: http://git.cyclocoop.org/?p=lhc%2Fweb%2Fwww.git;a=commitdiff_plain;h=65660962ebbb8d98885bc8e9356ab3b41c88e325 [PLUGINS] +set de base --- diff --git a/www/plugins/Menu_langue_lien/balise/menu_lang.php b/www/plugins/Menu_langue_lien/balise/menu_lang.php new file mode 100644 index 00000000..7816784e --- /dev/null +++ b/www/plugins/Menu_langue_lien/balise/menu_lang.php @@ -0,0 +1,70 @@ +nom_boucle ? $p->nom_boucle : ($p->id_boucle ? $p->id_boucle :''); + if($i_boucle){ + $_id_objet = $p->boucles[$i_boucle]->primary; + } + + return calculer_balise_dynamique( + $p, + 'MENU_LANG', + array( + 'LANG_TYPE_BOUCLE', // demande du type d'objet + $_id_objet + ) + ); +} + +// s'il n'y a qu'une langue eviter definitivement la balise ?php +// http://doc.spip.org/@balise_MENU_LANG_stat +function balise_MENU_LANG_stat ($args, $context_compil) { + if (strpos($GLOBALS['meta']['langues_multilingue'],',') === false) return ''; + $objet = $args[0]; + $id_objet = $args[1]; + if ($objet == 'balise_hors_boucle') { + $objet = ''; + $id_objet = ''; + $id_table_objet =''; + }else{ + $objet = table_objet($objet); + $id_table_objet = id_table_objet($objet); + } + return array($objet, $id_objet,$id_table_objet); +} + +// normalement $opt sera toujours non vide suite au test ci-dessus +// http://doc.spip.org/@balise_MENU_LANG_dyn +function balise_MENU_LANG_dyn($objet,$id_objet,$id_table_objet) { + include_spip('inc/lang'); + # lien a partir de / + $cible = parametre_url(self(), 'lang' , '', '&'); + $post = generer_url_action('converser', 'redirect='. rawurlencode($cible), '&'); + + return array('formulaires/menu_lang', + 3600, + array( + //'nom' => $nom, + 'lang' => $GLOBALS['spip_lang'], + 'url' => $post, + $id_table_objet => $id_objet + ) + ); +} + +// balise type_boucle de Rastapopoulos dans le plugin etiquettes +// present aussi dans plugin ajaxforms... +// bref, a integrer dans le core ? :p +function balise_LANG_TYPE_BOUCLE($p) { + $type = $p->boucles[$p->id_boucle]->id_table; + $p->code = $type ? $type : "balise_hors_boucle"; + return $p; +} +?> \ No newline at end of file diff --git a/www/plugins/Menu_langue_lien/fonds/cfg_menu_lang_liens.html b/www/plugins/Menu_langue_lien/fonds/cfg_menu_lang_liens.html new file mode 100644 index 00000000..c4f50825 --- /dev/null +++ b/www/plugins/Menu_langue_lien/fonds/cfg_menu_lang_liens.html @@ -0,0 +1,9 @@ + + + + + +#CACHE{0} +
+#FORMULAIRE_CONFIGURER_MENU_LANG_LIENS +
diff --git a/www/plugins/Menu_langue_lien/formulaires/configurer_menu_lang_liens.html b/www/plugins/Menu_langue_lien/formulaires/configurer_menu_lang_liens.html new file mode 100644 index 00000000..dc8600ad --- /dev/null +++ b/www/plugins/Menu_langue_lien/formulaires/configurer_menu_lang_liens.html @@ -0,0 +1,47 @@ + + + + +
+[

(#ENV*{message_ok})

] +[

(#ENV*{message_erreur})

] +
+ #ACTION_FORMULAIRE{#ENV{action}} +
    +
  • + +

    <:mll:explication_langues_invisibles:>

    + +
  • +
  • + +
    + + +
    +
    + + +
    +
  • +
  • + +
    + + +
    +
    + + +
    +
  • +
+

+ +

+
+
\ No newline at end of file diff --git a/www/plugins/Menu_langue_lien/formulaires/menu_lang.html b/www/plugins/Menu_langue_lien/formulaires/menu_lang.html new file mode 100644 index 00000000..648967cf --- /dev/null +++ b/www/plugins/Menu_langue_lien/formulaires/menu_lang.html @@ -0,0 +1,70 @@ +[(#REM) +Stocker les traductions eventuelles de l'article en cours +] + +#SET{ListeTraductions, #ARRAY{}} + + #SET_MERGE{ListeTraductions,#GET{ListeTraductions},#ARRAY{#LANG,#URL_ARTICLE}} + + + +[(#REM) +Stocker les traductions eventuelles de la rubrique en cours si le plugin Tradrub est installe (permet l'utilisation du +critere traduction sur les rubriques) +] + + + #SET{ListeTraductions, #ARRAY{}} + + #SET_MERGE{ListeTraductions,#GET{ListeTraductions},#ARRAY{#LANG,#URL_RUBRIQUE}} + + + + +[(#REM) +Y-a-t'il plus d'une langue reellement utilisee dans le site (moins les langues "invisibles") ? +Si oui, on affiche le menu de langue +Si non, rien + +Les langues "invisibles" sont les langues que le webmestre peut choisir de ne pas afficher dans le menu, +a partir du formulaire de configuration du plugin. + +Note : 'explode' est une fonction PHP : http://php.net/manual/fr/function.explode.php, utilisee ici pour renvoyer un tableau contenant +les langues utilisees, a partir de la variable meta 'langues_utilisees'. Ce tableau est compare avec le tableau des langues invisibles +avec la fonction PHP 'array_diff' http://www.php.net/manual/fr/function.array-diff.php qui renvoie elle-meme un tableau. + +] + +[(#SET{langues_a_afficher,[(#CONFIG{langues_utilisees}|explode{","}|array_diff{#CONFIG{menu_lang_liens/langues_invisibles, #ARRAY}})]})] + + +<[(#CONFIG{menu_lang_liens/formatliste,bloc}|=={'bloc'}|?{div,ul})] id="menu_lang"> +[(#REM) +On liste les langues utilisees dans le site +] + + [(#CONFIG{menu_lang_liens/formatliste,bloc}|=={'liste'}|oui)
  • ] + [(#REM) + Si la langue n'est pas celle en cours, on fait un lien qui fait 2 actions : + - fixer le cookie de langue sur la langue demandee + - rediriger sur l'article dans la langue demandee si opportun + sinon, revenir sur la page en cours + ] + [(#CONFIG{menu_lang_liens/format,abrege}|=={'complet'}|oui)[(#SET{nom_langue,[(#VALEUR|traduire_nom_langue)]})]] + [(#CONFIG{menu_lang_liens/format,abrege}|=={'abrege'}|oui)[(#SET{nom_langue,[(#VALEUR)]})]] + [(#VALEUR|=={#ENV{lang}}|non) + [(#REM) + url_absolue pour éviter des problèmes en urls arbo + ] + [(#GET{nom_langue}|ucfirst)] + ] + [(#REM) + Si la langue est celle en cours, afficher celle-ci en gras, sans lien + ] + [(#VALEUR|=={#ENV{lang}}|oui) + [(#GET{nom_langue}|ucfirst)] + ] + [(#CONFIG{menu_lang_liens/formatliste,bloc}|=={'liste'}|oui)
  • ] + + + \ No newline at end of file diff --git a/www/plugins/Menu_langue_lien/img_pack/world_link-16.png b/www/plugins/Menu_langue_lien/img_pack/world_link-16.png new file mode 100755 index 00000000..e7370268 Binary files /dev/null and b/www/plugins/Menu_langue_lien/img_pack/world_link-16.png differ diff --git a/www/plugins/Menu_langue_lien/img_pack/world_link-24.png b/www/plugins/Menu_langue_lien/img_pack/world_link-24.png new file mode 100644 index 00000000..fcd0d5fe Binary files /dev/null and b/www/plugins/Menu_langue_lien/img_pack/world_link-24.png differ diff --git a/www/plugins/Menu_langue_lien/img_pack/world_link-32.png b/www/plugins/Menu_langue_lien/img_pack/world_link-32.png new file mode 100755 index 00000000..5c1384a7 Binary files /dev/null and b/www/plugins/Menu_langue_lien/img_pack/world_link-32.png differ diff --git a/www/plugins/Menu_langue_lien/lang/mll.xml b/www/plugins/Menu_langue_lien/lang/mll.xml new file mode 100644 index 00000000..aecfbcb8 --- /dev/null +++ b/www/plugins/Menu_langue_lien/lang/mll.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/www/plugins/Menu_langue_lien/lang/mll_en.php b/www/plugins/Menu_langue_lien/lang/mll_en.php new file mode 100755 index 00000000..6e08135d --- /dev/null +++ b/www/plugins/Menu_langue_lien/lang/mll_en.php @@ -0,0 +1,26 @@ + 'Language menu as links', + + // E + 'explication_langues_invisibles' => 'Allows to remove some languages ​​from the menu', + + // L + 'label_format' => 'Languages display format', + 'label_format_abrege' => 'Shortened (for instance, Fr)', + 'label_format_complet' => 'Complete (for instance, Français)', + 'label_format_liste' => 'Languages list display format', + 'label_format_liste_bloc' => 'A block divided by spaces', + 'label_format_liste_liste' => 'A bulleted list', + 'label_langues_invisibles' => 'Invisible languages in the​​ menu' +); + +?> diff --git a/www/plugins/Menu_langue_lien/lang/mll_es.php b/www/plugins/Menu_langue_lien/lang/mll_es.php new file mode 100644 index 00000000..7264cf4a --- /dev/null +++ b/www/plugins/Menu_langue_lien/lang/mll_es.php @@ -0,0 +1,26 @@ + 'Menú de idiomas en forma de enlaces', + + // E + 'explication_langues_invisibles' => 'Permite quitar algunos idiomas del menú', + + // L + 'label_format' => 'Formato de visualización de los idiomas', + 'label_format_abrege' => 'Abreviado (por ejemplo, Es)', + 'label_format_complet' => 'Completo (por ejemplo, Español)', + 'label_format_liste' => 'Formato de la lista de idiomas', + 'label_format_liste_bloc' => 'Bloque separado por espacios', + 'label_format_liste_liste' => 'Lista por viñetas', + 'label_langues_invisibles' => 'Idiomas invisibles del menú' +); + +?> diff --git a/www/plugins/Menu_langue_lien/lang/mll_fr.php b/www/plugins/Menu_langue_lien/lang/mll_fr.php new file mode 100755 index 00000000..e981ffe7 --- /dev/null +++ b/www/plugins/Menu_langue_lien/lang/mll_fr.php @@ -0,0 +1,24 @@ + 'Menu de langues sous forme de liens', + + // E + 'explication_langues_invisibles' => 'Permet d\'enlever certaines langues du menu', + + // L + 'label_format' => 'Format d\'affichage des langues', + 'label_format_abrege' => 'Abrégé (par exemple, Fr)', + 'label_format_complet' => 'Complet (par exemple, Français)', + 'label_format_liste' => 'Format de la liste des langues', + 'label_format_liste_bloc' => 'Un bloc séparé par des espaces', + 'label_format_liste_liste' => 'Une liste à puces', + 'label_langues_invisibles' => 'Langues invisibles du menu' +); + +?> diff --git a/www/plugins/Menu_langue_lien/lang/mll_sk.php b/www/plugins/Menu_langue_lien/lang/mll_sk.php new file mode 100644 index 00000000..59b56c4c --- /dev/null +++ b/www/plugins/Menu_langue_lien/lang/mll_sk.php @@ -0,0 +1,26 @@ + 'Jazykové menu vo forme odkazov', + + // E + 'explication_langues_invisibles' => 'Umožňuje odstrániÅ¥ z menu niektoré jazyky', + + // L + 'label_format' => 'Formát zobrazenia jazykov', + 'label_format_abrege' => 'Skrátený (napríklad Sk)', + 'label_format_complet' => 'Úplný (napríklad Slovenčina)', + 'label_format_liste' => 'Formát zoznamu jazykov', + 'label_format_liste_bloc' => 'Blok oddelený medzerami', + 'label_format_liste_liste' => 'Zoznam s odrážkami', + 'label_langues_invisibles' => 'Jazyky, ktoré nebudú zobrazené v menu' +); + +?> diff --git a/www/plugins/Menu_langue_lien/lang/paquet-mll.xml b/www/plugins/Menu_langue_lien/lang/paquet-mll.xml new file mode 100644 index 00000000..4bd03eb2 --- /dev/null +++ b/www/plugins/Menu_langue_lien/lang/paquet-mll.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/www/plugins/Menu_langue_lien/lang/paquet-mll_en.php b/www/plugins/Menu_langue_lien/lang/paquet-mll_en.php new file mode 100644 index 00000000..b31b6dfc --- /dev/null +++ b/www/plugins/Menu_langue_lien/lang/paquet-mll_en.php @@ -0,0 +1,16 @@ + 'Replace the original language menu by a clickable menu. This menu is displayed only if at least two languages are ​​actually used on the site.', + 'mll_nom' => 'Language menu as links', + 'mll_slogan' => 'View languages ​​as clickable links' +); + +?> diff --git a/www/plugins/Menu_langue_lien/lang/paquet-mll_es.php b/www/plugins/Menu_langue_lien/lang/paquet-mll_es.php new file mode 100644 index 00000000..15d889a1 --- /dev/null +++ b/www/plugins/Menu_langue_lien/lang/paquet-mll_es.php @@ -0,0 +1,16 @@ + 'Remplaza al menú desplegable de idiomas por un menú en el que hacer click. Este menú no se muestra salvo si hay al menos 2 idiomas verdaderamente utilizados en el sitio.', + 'mll_nom' => 'Menú de idiomas con enlaces', + 'mll_slogan' => 'Mostrar los idiomas bajo la forma de enlaces en los que hacer click' +); + +?> diff --git a/www/plugins/Menu_langue_lien/lang/paquet-mll_fr.php b/www/plugins/Menu_langue_lien/lang/paquet-mll_fr.php new file mode 100644 index 00000000..ad4808f9 --- /dev/null +++ b/www/plugins/Menu_langue_lien/lang/paquet-mll_fr.php @@ -0,0 +1,14 @@ + 'Remplace le menu déroulant de langues par un menu cliquable. Ce menu n\'est affiché que s\'il y a au moins 2 langues vraiment utilisées dans le site.', + 'mll_nom' => 'Menu de langues avec liens', + 'mll_slogan' => 'Afficher les langues sous forme de liens cliquables' +); + +?> diff --git a/www/plugins/Menu_langue_lien/lang/paquet-mll_sk.php b/www/plugins/Menu_langue_lien/lang/paquet-mll_sk.php new file mode 100644 index 00000000..f7117e72 --- /dev/null +++ b/www/plugins/Menu_langue_lien/lang/paquet-mll_sk.php @@ -0,0 +1,16 @@ + 'Rozbaľovacie menu s jazykmi nahradí klikateľným. Toto menu sa nezobrazí, ak sa na stránke naozaj nepoužívajú aspoň 2 jazyky.', + 'mll_nom' => 'Jazykové menu s odkazmi', + 'mll_slogan' => 'ZobraziÅ¥ jazyky vo forme klikateľných odkazov' +); + +?> diff --git a/www/plugins/Menu_langue_lien/mll_options.php b/www/plugins/Menu_langue_lien/mll_options.php new file mode 100644 index 00000000..a5a023a2 --- /dev/null +++ b/www/plugins/Menu_langue_lien/mll_options.php @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/www/plugins/Menu_langue_lien/mll_pipelines.php b/www/plugins/Menu_langue_lien/mll_pipelines.php new file mode 100755 index 00000000..7e88b7b0 --- /dev/null +++ b/www/plugins/Menu_langue_lien/mll_pipelines.php @@ -0,0 +1,12 @@ +'; + + return $flux; +} + +?> \ No newline at end of file diff --git a/www/plugins/Menu_langue_lien/mll_styles.css b/www/plugins/Menu_langue_lien/mll_styles.css new file mode 100755 index 00000000..66e9f0cf --- /dev/null +++ b/www/plugins/Menu_langue_lien/mll_styles.css @@ -0,0 +1,28 @@ +#menu_lang { + list-style: none outside none; +} + +#menu_lang li { + float: left; +} + +#menu_lang li a, #menu_lang li span, #menu_lang li strong { + border-left: 1px solid; +} + +#menu_lang li a, #menu_lang li span, #menu_lang li strong { + padding: 0 5px; + font-size: 11px; +} + +#menu_lang li.first a, #menu_lang li.first span, #menu_lang li.first strong { + border: none; +} + +#menu_lang li.last a, #menu_lang li.last span, #menu_lang li.last strong { + padding-right: 0; +} + +#menu_lang li a:hover { + text-decoration: underline; +} \ No newline at end of file diff --git a/www/plugins/Menu_langue_lien/paquet.xml b/www/plugins/Menu_langue_lien/paquet.xml new file mode 100644 index 00000000..19a5c6b7 --- /dev/null +++ b/www/plugins/Menu_langue_lien/paquet.xml @@ -0,0 +1,23 @@ + + Menu de langues avec liens + + Jacques + Jean-Baptiste Pressac + kent1 + Cédric Morin + icône par FatCow + 2009-2012 + GPL 3 + + + + + \ No newline at end of file diff --git a/www/plugins/Menu_langue_lien/plugin.xml b/www/plugins/Menu_langue_lien/plugin.xml new file mode 100644 index 00000000..46eb6973 --- /dev/null +++ b/www/plugins/Menu_langue_lien/plugin.xml @@ -0,0 +1,53 @@ + + + + [fr]Menu de langues avec liens + [en]Language menu as links + + + + + [fr]Afficher les langues sous forme de liens cliquables + [en]View languages ​​as clickable links + + + [Jacques->http://www.spip-contrib.net/_Jacques-PYRAT_] - Jean-Baptiste Pressac - Quentin Drouet - Cedric Morin + © 2009-2012 GNU/GPL + http://www.spip-contrib.net/Menu-de-langues-sous-forme-de-liens + 1.1.9 + test + + +[fr]Remplace le menu déroulant de langues par un menu cliquable. Ce menu n'est affiché que s'il y a au moins 2 langues vraiment utilisées dans le site. + +Icone par [FatCow->http://www.fatcow.com/free-icons] +[en]Replace the original language menu by a clickable menu. This menu is displayed only if at least two languages are ​​actually used on the site. + +Icon by [FatCow->http://www.fatcow.com/free-icons] + + + mll + img_pack/world_link-32.png + mll_options.php + + insert_head_css + mll_pipelines.php + + + + + + navigation + + img_pack/world_link-24.png + mll:cfg_titre_mll + cfg + cfg=menu_lang_liens + + + img_pack/world_link-16.png + mll:cfg_titre_mll + cfg + cfg=menu_lang_liens + + \ No newline at end of file diff --git a/www/plugins/Menu_langue_lien/prive/squelettes/contenu/configurer_mll.html b/www/plugins/Menu_langue_lien/prive/squelettes/contenu/configurer_mll.html new file mode 100644 index 00000000..4cf4e9ff --- /dev/null +++ b/www/plugins/Menu_langue_lien/prive/squelettes/contenu/configurer_mll.html @@ -0,0 +1,5 @@ +[(#AUTORISER{webmestre}|sinon_interdire_acces)] +

    <:mll:cfg_titre_mll:>

    +
    + #FORMULAIRE_CONFIGURER_MENU_LANG_LIENS +
    diff --git a/www/plugins/Menu_langue_lien/prive/themes/spip/images/world_link-16.png b/www/plugins/Menu_langue_lien/prive/themes/spip/images/world_link-16.png new file mode 100755 index 00000000..e7370268 Binary files /dev/null and b/www/plugins/Menu_langue_lien/prive/themes/spip/images/world_link-16.png differ diff --git a/www/plugins/Menu_langue_lien/prive/themes/spip/images/world_link-24.png b/www/plugins/Menu_langue_lien/prive/themes/spip/images/world_link-24.png new file mode 100644 index 00000000..fcd0d5fe Binary files /dev/null and b/www/plugins/Menu_langue_lien/prive/themes/spip/images/world_link-24.png differ diff --git a/www/plugins/Menu_langue_lien/prive/themes/spip/images/world_link-32.png b/www/plugins/Menu_langue_lien/prive/themes/spip/images/world_link-32.png new file mode 100755 index 00000000..5c1384a7 Binary files /dev/null and b/www/plugins/Menu_langue_lien/prive/themes/spip/images/world_link-32.png differ diff --git a/www/plugins/Menu_langue_lien/svn.revision b/www/plugins/Menu_langue_lien/svn.revision new file mode 100644 index 00000000..3d836e7d --- /dev/null +++ b/www/plugins/Menu_langue_lien/svn.revision @@ -0,0 +1,10 @@ + + +Origine: file:///home/svn/repository/spip-zone/_plugins_/menu_langues_liens +Revision: 71303 +Dernier commit: 2013-03-30 04:01:43 +0100 + +file:///home/svn/repository/spip-zone/_plugins_/menu_langues_liens +71303 +2013-03-30 04:01:43 +0100 + \ No newline at end of file diff --git a/www/plugins/abomailmans/abomailman_template.html b/www/plugins/abomailmans/abomailman_template.html new file mode 100644 index 00000000..fa40a365 --- /dev/null +++ b/www/plugins/abomailmans/abomailman_template.html @@ -0,0 +1,6 @@ +#CACHE{0} +[(#ENV{envoi_txt}|non) + ] +[(#ENV{envoi_txt}|oui|et{#CHEMIN{templates/#ENV{template}.txt.html}|oui}) + +] \ No newline at end of file diff --git a/www/plugins/abomailmans/abomailmans_administrations.php b/www/plugins/abomailmans/abomailmans_administrations.php new file mode 100644 index 00000000..86fa3cfb --- /dev/null +++ b/www/plugins/abomailmans/abomailmans_administrations.php @@ -0,0 +1,28 @@ + \ No newline at end of file diff --git a/www/plugins/abomailmans/abomailmans_autoriser.php b/www/plugins/abomailmans/abomailmans_autoriser.php new file mode 100755 index 00000000..ec860f9d --- /dev/null +++ b/www/plugins/abomailmans/abomailmans_autoriser.php @@ -0,0 +1,32 @@ + \ No newline at end of file diff --git a/www/plugins/abomailmans/abomailmans_fonctions.php b/www/plugins/abomailmans/abomailmans_fonctions.php new file mode 100755 index 00000000..3b8aa9aa --- /dev/null +++ b/www/plugins/abomailmans/abomailmans_fonctions.php @@ -0,0 +1,45 @@ + \ No newline at end of file diff --git a/www/plugins/abomailmans/abomailmans_pipelines.php b/www/plugins/abomailmans/abomailmans_pipelines.php new file mode 100755 index 00000000..4ab2a0d3 --- /dev/null +++ b/www/plugins/abomailmans/abomailmans_pipelines.php @@ -0,0 +1,31 @@ + \ No newline at end of file diff --git a/www/plugins/abomailmans/base/abomailmans_install.php b/www/plugins/abomailmans/base/abomailmans_install.php new file mode 100755 index 00000000..390d9b05 --- /dev/null +++ b/www/plugins/abomailmans/base/abomailmans_install.php @@ -0,0 +1,62 @@ + 'abomailman', + 'url_edit' => 'abomailman_edit', + 'editable' => 'oui', + 'texte_retour' => 'abomailmans:icone_retour_abomailman', + 'texte_objet' => 'abomailmans:abomailman', + 'texte_objets' => 'abomailmans:abomailmans', + 'texte_modifier' => 'abomailmans:icone_modifier_abomailman', + 'texte_creer' => 'abomailmans:nouveau_abomailman', + 'info_aucun_objet'=> 'abomailmans:info_abomailman_aucun', + 'info_1_objet' => 'abomailmans:info_abomailmans_1', + 'info_nb_objets' => 'abomailmans:info_abomailmans_nb', + 'icone_objet' => 'abomailmans-24', + 'titre' => "titre, '' AS lang", + 'principale' => 'oui', + 'champs_editables' => array('titre','descriptif','abo_type','email','email_sympa','email_subscribe','email_unsubscribe','modele_defaut','periodicite','lang','desactive'), + 'field'=> array( + "id_abomailman" => "bigint(21) NOT NULL", + "titre" => "varchar(255) NOT NULL", + "descriptif" => "text", + "abo_type" => "varchar(255) DEFAULT 'news' NOT NULL", + "email" => "varchar(255)", + "email_sympa" => "varchar(255) DEFAULT '' NOT NULL", + "email_subscribe" => "varchar(255)", + "email_unsubscribe" => "varchar(255)", + "modele_defaut" => "varchar(255) DEFAULT '' NOT NULL", + "periodicite" => "varchar(255) DEFAULT '' NOT NULL", + "maj" => "TIMESTAMP", + "date_envoi" => "TIMESTAMP", + "lang" => "VARCHAR(10) DEFAULT '' NOT NULL", + "desactive" => "tinyint(4) NOT NULL default '0'" + ), + 'key' => array( + "PRIMARY KEY" => "id_abomailman" + ), + 'rechercher_champs' => array( + 'titre' => 8, + 'descriptif' => 8 + ), + 'champs_versionnes' => array('titre', 'descriptif', 'email', 'email_sympa', 'email_subscribe', 'email_unsubscribe', 'modele_defaut','periodicite','lang','desactive') + ); + return $tables; +} + +?> \ No newline at end of file diff --git a/www/plugins/abomailmans/content/newsletter.html b/www/plugins/abomailmans/content/newsletter.html new file mode 100644 index 00000000..49cb3947 --- /dev/null +++ b/www/plugins/abomailmans/content/newsletter.html @@ -0,0 +1,10 @@ +[(#REM) Fil d'Ariane ] +

    <:accueil_site:> > <:abomailmans:bouton_listes_diffusion:>

    + +
    +
    +
    +
    + #FORMULAIRE_ABOMAILMAN +
    +
    diff --git a/www/plugins/abomailmans/contenu/page-newsletter.html b/www/plugins/abomailmans/contenu/page-newsletter.html new file mode 100644 index 00000000..49cb3947 --- /dev/null +++ b/www/plugins/abomailmans/contenu/page-newsletter.html @@ -0,0 +1,10 @@ +[(#REM) Fil d'Ariane ] +

    <:accueil_site:> > <:abomailmans:bouton_listes_diffusion:>

    + +
    +
    +
    +
    + #FORMULAIRE_ABOMAILMAN +
    +
    diff --git a/www/plugins/abomailmans/controleurs/abomailman_descriptif.html b/www/plugins/abomailmans/controleurs/abomailman_descriptif.html new file mode 100644 index 00000000..0a8dbaf3 --- /dev/null +++ b/www/plugins/abomailmans/controleurs/abomailman_descriptif.html @@ -0,0 +1,13 @@ +[(#REM) + + Controleur pour le crayon 'abomailman_descriptif' , uniquement html + + Permet de bénéficier du plugin multilang + +] +#CACHE{0} + + + diff --git a/www/plugins/abomailmans/controleurs/abomailman_titre.html b/www/plugins/abomailmans/controleurs/abomailman_titre.html new file mode 100644 index 00000000..037d0647 --- /dev/null +++ b/www/plugins/abomailmans/controleurs/abomailman_titre.html @@ -0,0 +1,13 @@ +[(#REM) + + Controleur pour le crayon 'abomailman_titre', uniquement html + + Permet de bénéficier du plugin multilang + +] +#CACHE{0} + + + + diff --git a/www/plugins/abomailmans/formulaires/abomailman.html b/www/plugins/abomailmans/formulaires/abomailman.html new file mode 100644 index 00000000..112a8cc6 --- /dev/null +++ b/www/plugins/abomailmans/formulaires/abomailman.html @@ -0,0 +1,72 @@ +
    + [
    (#ENV*{message_ok})
    ] + [

    (#ENV*{message_erreur})

    ] + + + #SET{abo_types,#ARRAY} + + [(#SET{abo_types,[(#GET{abo_types}|push{#ABO_TYPE})]})] + + [(#GET{abo_types}|count|>{1}|oui) + [(#SET{legende,<:abomailmans:inscription_lettres_legende:>})] + ] + [(#GET{abo_types}|count|=={1}|oui) + [(#GRAND_TOTAL|>{1}|oui) + [(#SET{legende,[(#VAL{abomailmans:legende_inscriptions_}|concat{#GET{abo_types}|table_valeur{0}}|_T)]})] + ] + [(#GRAND_TOTAL|>{1}|non) + [(#SET{legende,[(#VAL{abomailmans:legende_inscription_}|concat{#GET{abo_types}|table_valeur{0}}|_T)]})] + ] + ] +
    +
    + [(#REM) declarer les hidden qui declencheront le service du formulaire + parametre : url d'action ] + #ACTION_FORMULAIRE{#ENV{action}} +
    + #GET{legende} +
      +
    • + + [(#ENV**{erreurs}|table_valeur{nom})] + +
    • +
    • + + [(#ENV**{erreurs}|table_valeur{email})] + +
    • + +
    • + [(#ENV**{erreurs}|table_valeur{listes})] +
        +
      • + +
        + [

        + (#DESCRIPTIF|PtoBR) +

        ] + + +
        + +
      • +
      +
    • + +
    + [(#REM) Piege a robots spammeurs, du moins on essaie] +

    + + +

    +

    + + +

    +
    +
    +
    +
    + +
    diff --git a/www/plugins/abomailmans/formulaires/abomailman.php b/www/plugins/abomailmans/formulaires/abomailman.php new file mode 100644 index 00000000..9b20930b --- /dev/null +++ b/www/plugins/abomailmans/formulaires/abomailman.php @@ -0,0 +1,151 @@ +_T('abomailmans:erreur_nobot')); + } + + $nom = _request('nom'); + $email = _request('email'); + $listes = _request('listes', true); + $abonnement = _request('abonnement'); + $desabonnement = _request('desabonnement'); + + $message = null; + + $message_listes = "
      "; + + $nb_listes = 0; + foreach($listes as $id_abomailman) { + $nb_listes++; + + //on initialise l'envoi + // on traite chaque liste via une fonction reutilisable ailleurs + $traiter=abomailman_traiter_abonnement($id_abomailman,$abonnement); + $titre = $traiter[0]; + $proprio_email=$traiter[1]; + $liste_email=$traiter[2]; + $sujet=$traiter[3]; + $body= array( + 'texte' => $traiter[4], + 'nom_envoyeur' => $nom + ); + $headers=$traiter[5]; + + // si on veut ajouter un mail de notification ou de test + /* + $liste_email = array( + $liste_email,"verif@exemple.com" + ); + */ + if (abomailman_mail($nom, $email, $proprio_email,$liste_email, $sujet, $body,'',$headers)){ + $message_listes .= "
    • $titre
    • "; + }else{ + $message_listes .= "
    • ". _T('pass_erreur_probleme_technique')."
    • "; + $probleme=true; + } + } + + $message_listes .= "

    "; + + if($abonnement){ + if($nb_listes>1){ + $message .= _T("abomailmans:message_confirmation_a"); + }else{ + $message .= _T("abomailmans:message_confirmation_unique_a"); + } + } else{ + if($nb_listes>1){ + $message .= _T("abomailmans:message_confirmation_d"); + }else{ + $message .= _T("abomailmans:message_confirmation_unique_d"); + } + } + + $message .= $message_listes; + $message .= "

    " . _T("abomailmans:message_confirm_suite") . "

    "; + + if ($probleme==false) + return $message; + else + return $message_listes; +} +?> diff --git a/www/plugins/abomailmans/formulaires/abomailman_envoi_liste.html b/www/plugins/abomailmans/formulaires/abomailman_envoi_liste.html new file mode 100644 index 00000000..1860427f --- /dev/null +++ b/www/plugins/abomailmans/formulaires/abomailman_envoi_liste.html @@ -0,0 +1,72 @@ +
    +[(#REM) pour IE qui sinon se perd dans l'ajax !, ne pas retirer]
    + + [

    (#ENV*{message_ok})

    ] + [

    (#ENV*{message_erreur})

    ] + [(#ENV{editable}) + [(#REM) + Bloc de previsualisation + + Si on valide la previsu, on n'envoie pas en ajax + + ][
    +
    + [(#ACTION_FORMULAIRE{#ENV{action}})] + + + + + + + (#ENV*{erreurs}|table_valeur{previsu}) +
    +
    ] +
    + [(#ACTION_FORMULAIRE{#ENV{action}})] +
      +
    • + + [(#ENV**{erreurs}|table_valeur{template})] + +
    • +
    • + + [(#ENV**{erreurs}|table_valeur{date})] + + #INCLURE{fond=formulaires/dateur/inc-dateur} +
    • +
    • + + [(#ENV**{erreurs}|table_valeur{id_rubrique})] + +
    • +
    • + + [(#ENV**{erreurs}|table_valeur{id_mot})] + +
    • +
    • + + [(#ENV**{erreurs}|table_valeur{sujet})] + +
    • +
    • + + [(#ENV**{erreurs}|table_valeur{message})] + +
    • +
    +

    + +

    +
    +
    ] +
    diff --git a/www/plugins/abomailmans/formulaires/abomailman_envoi_liste.php b/www/plugins/abomailmans/formulaires/abomailman_envoi_liste.php new file mode 100644 index 00000000..99608605 --- /dev/null +++ b/www/plugins/abomailmans/formulaires/abomailman_envoi_liste.php @@ -0,0 +1,130 @@ +$fond, + ); + /* Format Texte */ + $query['envoi_txt'] = "oui"; + $body['texte'] = recuperer_fond('abomailman_template',$query); + + if (strlen($fond) > 10) { + // email denvoi depuis config facteur + if ($GLOBALS['meta']['facteur_adresse_envoi'] == 'oui' + AND $GLOBALS['meta']['facteur_adresse_envoi_email']) + $from_email = $GLOBALS['meta']['facteur_adresse_envoi_email']; + else + $from_email = $email_webmaster; + // nom denvoi depuis config facteur + if ($GLOBALS['meta']['facteur_adresse_envoi'] == 'oui' + AND $GLOBALS['meta']['facteur_adresse_envoi_nom']) + $from_nom = $GLOBALS['meta']['facteur_adresse_envoi_nom']; + else + $from_nom = $nom_site; + + if (abomailman_mail($from_nom, $from_email, "", $email_receipt, $sujet,$body, true, $charset)) { + $message = _T('abomailmans:email_envoye',array('liste'=>$email_receipt)); + } else { + $message = _T('pass_erreur_probleme_technique'); + } + } else { + $message = _T('abomailmans:contenu_insuffisant'); + } + + return array('message_ok'=>$message); +} + +?> diff --git a/www/plugins/abomailmans/formulaires/abomailman_mini_une_liste.html b/www/plugins/abomailmans/formulaires/abomailman_mini_une_liste.html new file mode 100644 index 00000000..13bd9901 --- /dev/null +++ b/www/plugins/abomailmans/formulaires/abomailman_mini_une_liste.html @@ -0,0 +1,27 @@ +#CACHE{0} +
    + + [

    (#ENV*{message_ok})

    ] + [

    (#ENV*{message_erreur})

    ] + + [(#ENV*{editable}|oui) +
    +
    + #ACTION_FORMULAIRE{#ENV{action}} +
      + #SET{erreurs,#ENV**{erreurs}|table_valeur{la_demo}} +
    • + [(#GET{erreurs})] + +
    • +
    + [(#REM) Piege a robots spammeurs, du moins on essaie] +

    + + +

    +

    +
    +
    + ] +
    diff --git a/www/plugins/abomailmans/formulaires/abomailman_mini_une_liste.php b/www/plugins/abomailmans/formulaires/abomailman_mini_une_liste.php new file mode 100644 index 00000000..747d423b --- /dev/null +++ b/www/plugins/abomailmans/formulaires/abomailman_mini_une_liste.php @@ -0,0 +1,94 @@ +_T('abomailmans:erreur_nobot')); + } + + $message = null; + + // on initialise l'envoi + // on traite chaque liste via une fonction reutilisable ailleurs + // on passe abonnement a true d'office + $traiter=abomailman_traiter_abonnement($id_abomailman,true); + $titre = $traiter[0]; + $proprio_email=$traiter[1]; + $liste_email=$traiter[2]; + $sujet=$traiter[3]; + $body="$nom - $email ".$traiter[4]; + $headers=$traiter[5]; + + if (abomailman_mail($nom, $email, $proprio_email,$liste_email, $sujet, $body,$headers)){ + $message_listes .= "

    $titre

    "; + }else{ + $message_listes .= "

    ". _T('pass_erreur_probleme_technique')."

    "; + $probleme=true; + } + + $message .= $body."". _T("abomailmans:message_confirmation_unique_a"); + $message .= $message_listes; + $message .= "

    " . _T("abomailmans:message_confirm_suite") . "

    "; + + if ($probleme==false) + return $message; + else + return $message_listes; +} +?> \ No newline at end of file diff --git a/www/plugins/abomailmans/formulaires/editer_abomailman.html b/www/plugins/abomailmans/formulaires/editer_abomailman.html new file mode 100644 index 00000000..7c749566 --- /dev/null +++ b/www/plugins/abomailmans/formulaires/editer_abomailman.html @@ -0,0 +1,136 @@ +
    + + [

    (#ENV*{message_ok})

    ] + [

    (#ENV*{message_erreur})

    ] + [(#ENV{editable}) +
    + #ACTION_FORMULAIRE{#ENV{action}} +
      +
    • + + [(#ENV**{erreurs}|table_valeur{titre})] + +
    • +
    • + [ + (#ENV**{erreurs}|table_valeur{descriptif}) + ] +
    • +
    • + +
      + + +
      +
      + + +
      +
    • +
    • +
      +

      <:abomailmans:emails_a_renseigner:>

      +
        +
      • + +

        <:abomailmans:emailliste_abomailman:>

        + [(#ENV**{erreurs}|table_valeur{email})] + +
      • +
      • + +

        <:abomailmans:explication_email_subscribe:>

        + [(#ENV**{erreurs}|table_valeur{email_subscribe})] + +
      • +
      • + +

        <:abomailmans:explication_email_unsubscribe:>

        + [(#ENV**{erreurs}|table_valeur{email_unsubscribe})] + +
      • +
      • + +

        <:abomailmans:explication_email_sympa:>

        + [(#ENV**{erreurs}|table_valeur{email_sympa})] + +
      • + [
      • + + [(#ENV**{erreurs}|table_valeur{langue})] + +
      • ] +
      +
      +
    • +
    • +
      +

      <:abomailmans:envoi_regulier:>

      +
        +
      • + +

        <:abomailmans:envoi_regulier_info:>

        +
        + + + +
        +
      • +
      • + +

        <:abomailmans:template_defaut_info:>

        + [(#ENV**{erreurs}|table_valeur{template})] + +
      • +
      • + +

        + <:abomailmans:envoi_liste_parametres:> + [(#ENV{modele_defaut}|oui) +
        + [(#SET{date_ref,[(#DATE|moins30|affdate{annee})-][(#DATE|moins30|affdate{mois})]})] + <:abomailmans:voir_modele_depuis:>[ (#DATE|moins30|affdate{nom_mois})][ (#DATE|moins30|affdate{annee})] : <:abomailmans:previsu_html:> | <:abomailmans:previsu_txt:>. + ] +

        + +
      • +
      +
      +
    • +
    • +
      +

      <:abomailmans:label_etat_liste:>

      +
        +
      • + +
        + + +
        +
        + + +
        +
      • + [(#ENV{id_abomailman}|intval|oui) +
      • + +
        + + +
        +
      • ] +
      +
      +
    • +
    +

    + +

    +
    ] +
    \ No newline at end of file diff --git a/www/plugins/abomailmans/formulaires/editer_abomailman.php b/www/plugins/abomailmans/formulaires/editer_abomailman.php new file mode 100644 index 00000000..5d746f85 --- /dev/null +++ b/www/plugins/abomailmans/formulaires/editer_abomailman.php @@ -0,0 +1,114 @@ +0) { + $erreurs['message_erreur'] .= _T('abomailmans:verifier_formulaire'); + } + + return $erreurs; // si c'est vide, traiter sera appele, sinon le formulaire sera resoumis +} + +function formulaires_editer_abomailman_traiter_dist($id_abomailman='new',$retour='', $config_fonc='', $row=array(), $hidden=''){ + $res = formulaires_editer_objet_traiter('abomailman',$id_abomailman,0,0,$retour,$config_fonc,$row,$hidden); + + $message = array(); + $valeurs['envoi_liste_parametres'] = _request('envoi_liste_parametres'); + + $datas = array(); + + // Récupération des données + $datas['titre'] = _request('titre'); + $datas['descriptif'] = _request('descriptif'); + if(_request('abo_type') && in_array(_request('abo_type'), array('news','ml'))){ + $datas['abo_type'] = _request('abo_type'); + } + $datas['email'] = _request('email'); + $datas['email_subscribe'] = _request('email_subscribe'); + $datas['email_unsubscribe'] = _request('email_unsubscribe'); + $datas['email_sympa'] = _request('email_sympa'); + $datas['desactive'] = _request('desactive'); + $datas['modele_defaut'] = str_replace('\'','',_request('template'))."".$valeurs['envoi_liste_parametres']; + $datas['periodicite'] = _request('periodicite'); + $datas['lang'] = _request('langue'); + + // on récupère les données de la liste + if(intval($id_abomailman)){ + if($datas['desactive'] == '2'){ + sql_delete("spip_abomailmans","id_abomailman = $id_abomailman"); + $message['message_ok'] = _T('abomailmans:liste_supprimee',array("id"=>$id_abomailman,"titre"=> $datas['titre'])); + $message['editable'] = false; + }else{ + sql_updateq("spip_abomailmans",$datas,"id_abomailman = $id_abomailman"); + $message['message_ok'] = _T('abomailmans:liste_updatee',array("id"=>$id_abomailman,"titre"=> $datas['titre'])); + } + }else{ + $message['message_ok'] = _T('abomailmans:liste_creee',array("id"=>$id_abomailman,"titre"=> $datas['titre'])); + $message['editable'] = false; + } + + if (!$retour) { + $message['redirect'] = parametre_url(parametre_url(self(),'id_abomailman', $res['id_abomailman']),'abomailman',''); + } else { + // sinon on utilise la redirection donnee. + $message['redirect'] = parametre_url($retour, 'id_abomailman', $res['id_abomailman']); + } + return $message; +} + +?> \ No newline at end of file diff --git a/www/plugins/abomailmans/formulaires/inc-previsu_mail.html b/www/plugins/abomailmans/formulaires/inc-previsu_mail.html new file mode 100644 index 00000000..5e570ba1 --- /dev/null +++ b/www/plugins/abomailmans/formulaires/inc-previsu_mail.html @@ -0,0 +1,30 @@ +
      +
    • +
      +

      <:previsualisation:> <:abomailmans:previsu_html:>

      +
      + #ENV*{template_html} +
      +

      <:previsualisation:> <:abomailmans:previsu_txt:>

      +
      +
      #ENV*{template_txt, #VAL{abomailmans:pas_template_txt}|_T}
      +
      +

      <:abomailmans:destinataire:>

      +
        +
      • + + + + +
      • +
      +
      +
    • +
    +[

    + +

    ] \ No newline at end of file diff --git a/www/plugins/abomailmans/genie/abomailmans_envois.php b/www/plugins/abomailmans/genie/abomailmans_envois.php new file mode 100755 index 00000000..0a5da567 --- /dev/null +++ b/www/plugins/abomailmans/genie/abomailmans_envois.php @@ -0,0 +1,133 @@ +$fond, + ); + /* Format Texte */ + $query['envoi_txt'] = "oui"; + $body['texte'] = recuperer_fond('abomailman_template',$query); + + //Si la page renvoie un contenu + if (strlen($fond) > 10) { + + // email denvoi depuis config facteur + if ($GLOBALS['meta']['facteur_adresse_envoi'] == 'oui' + AND $GLOBALS['meta']['facteur_adresse_envoi_email']) + $from_email = $GLOBALS['meta']['facteur_adresse_envoi_email']; + else + $from_email = $email_webmaster; + // nom denvoi depuis config facteur + if ($GLOBALS['meta']['facteur_adresse_envoi'] == 'oui' + AND $GLOBALS['meta']['facteur_adresse_envoi_nom']) + $from_nom = $GLOBALS['meta']['facteur_adresse_envoi_nom']; + else + $from_nom = $nom_site; + + if (abomailman_mail($from_nom, $from_email, "", $email_receipt, $sujet,$body, true, $charset)) { + spip_log("envoi ok = $url_genere tous les $periodicite jours sujet =".$sujet,"abomailmans"); + } else { + spip_log("!! envoi nok = $url_genere tous les $periodicite jours sujet =".$sujet,"abomailmans."._LOG_ERREUR); + $envoi_ok=false; + } + } + else { + spip_log("maintenant=".date('Y-m-d H:i:s', time())." date demande = ".$query['date']." non envoye =$url_genere : rien de neuf depuis $periodicite jours","abomailmans"); + } + + if($envoi_ok) { + // Noter que l'envoi est OK meme si envoi echoue faute de contenu, on reessaiera dans /periodicite/ jours + sql_updateq("spip_abomailmans", array("date_envoi" => date('Y-m-d H:i:s', time())), "id_abomailman=".$t['id_abomailman']); + } + return false; # c'est bon +} + +?> \ No newline at end of file diff --git a/www/plugins/abomailmans/inc/abomailmans.php b/www/plugins/abomailmans/inc/abomailmans.php new file mode 100755 index 00000000..e4ba2d68 --- /dev/null +++ b/www/plugins/abomailmans/inc/abomailmans.php @@ -0,0 +1,84 @@ + diff --git a/www/plugins/abomailmans/lang/abomailmans.xml b/www/plugins/abomailmans/lang/abomailmans.xml new file mode 100644 index 00000000..c692a7f8 --- /dev/null +++ b/www/plugins/abomailmans/lang/abomailmans.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/www/plugins/abomailmans/lang/abomailmans_de.php b/www/plugins/abomailmans/lang/abomailmans_de.php new file mode 100644 index 00000000..fcebb205 --- /dev/null +++ b/www/plugins/abomailmans/lang/abomailmans_de.php @@ -0,0 +1,141 @@ + 'Liste de diffusion ou discussions', # NEW + 'abomailmans' => 'Listes de diffusion ou discussions', # NEW + 'abonne' => 'Ich abonniere', + 'activation' => 'Activation', # NEW + 'active' => 'Aktiv', + 'aucune_langue' => 'Keine ANgabn', + + // B + 'bouton_listes_diffusion' => 'Mailinglisten', + 'btn_abonnement' => 'Abonnieren', + 'btn_desabonnement' => 'Abbestellen', + + // C + 'choisir_liste' => 'Sie müssen eine Liste wählen.', + 'contenu_date' => 'Inhalt ab diesem Datum', # MODIF + 'creation_droits_insuffisants' => 'Sie haben kein Recht dazu ...', + + // D + 'desactive' => 'Abgeschaltet', + 'destinataire' => 'Destinataire', # NEW + + // E + 'email' => 'E-Mail', + 'email_abonnement' => 'Ihre E-Mail Adresse', + 'email_envoye' => 'Die E-Mail wurde an die Mailingliste verschickt: @liste@.', + 'email_oublie' => 'Sie haben ihre E-Mail Adresse vergessen', + 'emailliste_abomailman' => 'E-Mail Adresse der Liste', + 'emailliste_abosympa' => 'E-Mail Adresse des Sympa-Administrators', + 'emailliste_subscribe' => 'Subscribe', + 'emailliste_unsubscribe' => 'Unsubscribe', # MODIF + 'emails_a_renseigner' => 'Emails à renseigner', # NEW + 'envoi_apercu' => 'Vorschau', + 'envoi_confirmer' => 'Bestätigen und absenden', + 'envoi_liste_parametres' => 'Parameterliste', + 'envoi_parametres' => 'Paramétres', # NEW + 'envoi_regulier' => 'Automatics mail', + 'envoi_regulier_info' => 'Keep empty if you do not want to send automatically', + 'envoi_regulier_tous_les' => 'Send each', + 'envoi_vers' => 'send to', + 'envoyer_courier' => 'Mail senden', + 'envoyer_courier_liste' => 'Mail an diese Mailingliste senden:', + 'envoyer_mailmans' => 'Modell und Inhalt auswählen', # MODIF + 'erreur_email_liste_oublie' => 'Die E-Mail Adresse ist obligatorisch.', + 'erreur_nobot' => 'Votre inscription n\' a pu être effectué à cause d\'un problème technique', # NEW + 'explication_email_subscribe' => 'Email for subscribe, something like suffix+subscribe@exemple.org', + 'explication_email_sympa' => 'Wenn dieses Feld ausgefüllt ist, wird von einer Sympa-Liste ausgegangen, + anderenfalls von einer Mailman-Liste.', + 'explication_email_unsubscribe' => 'Email for unsubscribe', + + // I + 'icone_ajouter_liste' => 'Neue Liste hinzufügen', + 'icone_envoyer_mail_liste' => 'Mail aus dem Inhalt dieser Website generieren und an die Buchstaben senden', + 'icone_modifier_abomailman' => 'Modifier la liste', # NEW + 'icone_retour_abomailman' => 'Retour à la liste', # NEW + 'info_abomailman_aucun' => 'Aucune liste', # NEW + 'info_abomailmans_1' => 'Une liste', # NEW + 'info_abomailmans_nb' => '@nb@ listes', # NEW + 'info_sisympa' => '[Obligatorisch bei Sympa-Listen]', + 'insciption_listes_legende' => 'Mailing-Listen Abonnements', # MODIF + 'inscription_lettres_legende' => 'Abonnement bei Newslettern
    und Diskussionslisten', + + // J + 'je_m_abonne' => 'Markieren um Abonnement zu bestellen oder zu kündigen.', + + // L + 'label_etat_liste' => 'Status der Liste', + 'label_type_abo' => 'Type', # NEW + 'label_type_ml' => 'Liste de discussion', # NEW + 'label_type_news' => 'Liste de diffusion', # NEW + 'langue_liste' => 'Sprache der Liste', + 'legende_inscription_ml' => 'Inscription à la liste de discussion', # NEW + 'legende_inscription_news' => 'Inscription à la liste de diffusion', # NEW + 'legende_inscriptions_ml' => 'Inscription aux listes de discussion', # NEW + 'legende_inscriptions_news' => 'Inscription aux listes de diffusion', # NEW + 'les_listes_mailmans' => 'Bekannte Mailman-Listen', + 'lire_article' => 'Artikel lesen', + 'liste_creee' => 'Die Liste Nummer @id@ (@titre@) wurde angelegt.', + 'liste_non_existante' => 'Die Liste existiert nich oder wurde entfernt.', + 'liste_oublie' => 'Sie habe vergessen, eine Liste auszuwählen!', + 'liste_supprimee' => 'Die Liste Nummer @id@ (@titre@) wurde gelöscht.', + 'liste_updatee' => 'Die Liste Nummer @id@ (@titre@) wurde aktualisiert.', + + // M + 'message' => 'Einleitungstext vor den Inhalten ihrer Website', + 'message_confirm_suite' => 'Um ihren Auftrag zu bestätigen beantworten sie bitte die Bestätigungsmail, die sie erhalten werden..', + 'message_confirmation_a' => 'Aboanfragen an folgende Listen wurden gesendet:', + 'message_confirmation_d' => 'Stornierungsaufträge an folgende Listen wurden gesendet. ', + 'message_confirmation_unique_a' => 'Eine Aboanfragen an folgende Liste wurden gesendet:', + 'message_confirmation_unique_d' => 'Stornierungsauftrag an folgende Liste wurden gesendet. ', + 'mot' => 'Artikel zu diesem Schlagwort auflisten', + + // N + 'nom' => 'Name und Vorname (freiwillige Angabe)', + 'nouveau_abomailman' => 'Nouvelle liste de diffusion', # NEW + + // P + 'pas_template_txt' => 'Il n\'y a pas de version texte pour ce modèle', # NEW + 'periodicite' => ' days.', + 'prenom' => 'Vorname', + 'previsu_html' => 'html', # NEW + 'previsu_txt' => 'texte', # NEW + + // R + 'rubrique' => 'Artikel der Rubrik auflisten', + + // S + 'souhaite_rester' => 'Ich möchte auf dem Laufenden bleiben', + 'sujet' => 'Thema der Mail', + 'sujet_obligatoire' => 'Es muss ein Thema angegeben werden.', + 'suppression_definitive' => 'Suppression définitive !', # NEW + 'supprimer' => 'Löschen', + 'sympa_message_confirmation' => 'Eine Bestätigungsmail wurde an folgende Adresse gesendet: ', # MODIF + + // T + 'template' => 'Modell und Inhalte auswählen', + 'template_defaut' => 'Default template', + 'template_defaut_info' => 'Si le fichier modele_choisi.txt.html existe, la newsletter sera envoyée en mode html + texte. Sinon seule la version html sera expédiée.', # NEW + 'texte_descriptif' => 'Descriptif', # NEW + 'titre_abomailman' => 'Bezeichnung der Liste', + 'titre_liste_obligatoire' => 'Die Liste muss eine Bezeichnung erhalten', + 'toute_liste' => 'ALle Mailinglisten', # MODIF + + // V + 'verifier_formulaire' => 'Überprüfen sie den Inhalt des Formulars.', + 'veut_s_abonner' => 'want to subscribe', + 'veut_se_desabonner' => 'want to unsubscribe', + 'voir_modele_depuis' => 'Voir un exemple du modéle avec', # NEW + 'votre_email' => 'Ihre E-Mail' +); + +?> diff --git a/www/plugins/abomailmans/lang/abomailmans_en.php b/www/plugins/abomailmans/lang/abomailmans_en.php new file mode 100755 index 00000000..129120ff --- /dev/null +++ b/www/plugins/abomailmans/lang/abomailmans_en.php @@ -0,0 +1,140 @@ + 'Newsletter or mailing list', + 'abomailmans' => 'Mailing lists or newsletters', + 'abonne' => 'I subscribe', + 'activation' => 'Activation', + 'active' => 'Active', + 'aucune_langue' => 'None specified', + + // B + 'bouton_listes_diffusion' => 'Mailing lists', + 'btn_abonnement' => 'Subscribe', + 'btn_desabonnement' => 'Unsubscribe', + + // C + 'choisir_liste' => 'You should choose a list.', + 'contenu_date' => 'Content since this date', + 'creation_droits_insuffisants' => 'Your rights are insufficients', + + // D + 'desactive' => 'Disabled', + 'destinataire' => 'Recipient', + + // E + 'email' => 'Email address', + 'email_abonnement' => 'Your email address', + 'email_envoye' => 'The email has been sent to the list : @liste@.', + 'email_oublie' => 'You forgot your email address', + 'emailliste_abomailman' => 'The email address of the list', + 'emailliste_abosympa' => 'The email address of the Sympa admin', + 'emailliste_subscribe' => 'Subscribe', + 'emailliste_unsubscribe' => 'Unsubscribe', + 'emails_a_renseigner' => 'Email addresses to provide', + 'envoi_apercu' => 'Previsualization', + 'envoi_confirmer' => 'Confirm and send', + 'envoi_liste_parametres' => 'List of parameters [Facultatif]', + 'envoi_parametres' => 'Settings', + 'envoi_regulier' => 'Automatics mail', + 'envoi_regulier_info' => 'Leave empty if you do not want to send automatically', + 'envoi_regulier_tous_les' => 'Send each', + 'envoi_vers' => 'send to', + 'envoyer_courier' => 'Send an email', + 'envoyer_courier_liste' => 'Send this content to this list :', + 'envoyer_mailmans' => 'Select the template and its content', + 'erreur_email_liste_oublie' => 'The email address of the list is mandatory', + 'erreur_nobot' => 'No registration has been made ​​due to a technical problem', + 'explication_email_subscribe' => 'Email for subscribe, something like suffix+subscribe@exemple.org', + 'explication_email_sympa' => 'If this field is filled in, the list is considered as a "Sympa" list, if not, as a "Mailman" list.', + 'explication_email_unsubscribe' => 'Email for unsubscribe', + + // I + 'icone_ajouter_liste' => 'Add a new list', + 'icone_envoyer_mail_liste' => 'Send an e-mail to the lists from the content of this site', + 'icone_modifier_abomailman' => 'Edit the list', + 'icone_retour_abomailman' => 'Back to the list', + 'info_abomailman_aucun' => 'No list', + 'info_abomailmans_1' => 'A list', + 'info_abomailmans_nb' => '@nb@ lists', + 'info_sisympa' => '[Mandatory for a Sympa list]', + 'insciption_listes_legende' => 'Subscription to the mailing lists', + 'inscription_lettres_legende' => 'Subscription to the newsletters
    and mailing lists', + + // J + 'je_m_abonne' => 'Check to confirm the subscription or unsubscription.', + + // L + 'label_etat_liste' => 'Status of the list', + 'label_type_abo' => 'Type', + 'label_type_ml' => 'Mailing-list', + 'label_type_news' => 'Newsletter', + 'langue_liste' => 'Language of the list', + 'legende_inscription_ml' => 'Subscription to the mailing list', + 'legende_inscription_news' => 'Subscription to the newsletter', + 'legende_inscriptions_ml' => 'Subscription to the mailing lists', + 'legende_inscriptions_news' => 'Subscription to the newsletters', + 'les_listes_mailmans' => 'The Mailman\'s or Sympa\'s lists filled', + 'lire_article' => 'Read the article', + 'liste_creee' => 'The list number @id@ (@titre@) has been created.', + 'liste_non_existante' => 'The asked list doesn\'t exist or has been deleted', + 'liste_oublie' => 'You forgot to check a list.', + 'liste_supprimee' => 'The list number @id@ (@titre@) has been deleted.', + 'liste_updatee' => 'The list number @id@ (@titre@) has been updated.', + + // M + 'message' => 'Introduction of your email, before the site\'s content', + 'message_confirm_suite' => 'To validate your request, please reply to the confirmation email that you will receive.', + 'message_confirmation_a' => 'A subscription request to the following lists has been sent :', + 'message_confirmation_d' => 'An unsubscribing request from the lists below has been sent. ', + 'message_confirmation_unique_a' => 'A subscription request to the following list has been sent :', + 'message_confirmation_unique_d' => 'An unsubscribing request from the list below has been sent. ', + 'mot' => 'And list the articles linked to the keyword', + + // N + 'nom' => 'Name and surname (optional)', + 'nouveau_abomailman' => 'New mailing list', + + // P + 'pas_template_txt' => 'There is no text version for this template', + 'periodicite' => ' days.', + 'prenom' => 'First name', + 'previsu_html' => 'html', + 'previsu_txt' => 'text', + + // R + 'rubrique' => 'And list the articles of the section', + + // S + 'souhaite_rester' => 'I wish to keep informed', + 'sujet' => 'Subject of the mail', + 'sujet_obligatoire' => 'The subject is mandatory.', + 'suppression_definitive' => 'Permanent removal !', + 'supprimer' => 'Delete', + 'sympa_message_confirmation' => 'A validation email has been sent to the address: ', + + // T + 'template' => 'Choose a template and his content', + 'template_defaut' => 'Default template', + 'template_defaut_info' => 'If the file "choosed_template.txt.html" exists, the newsletter will be sent in html + text format. Otherwise, only the html version will be sent.', + 'texte_descriptif' => 'Description', + 'titre_abomailman' => 'Title of the list', + 'titre_liste_obligatoire' => 'The title of the list is mandatory', + 'toute_liste' => 'All mailing lists', + + // V + 'verifier_formulaire' => 'Please verify the filling of the form.', + 'veut_s_abonner' => 'want to subscribe', + 'veut_se_desabonner' => 'want to unsubscribe', + 'voir_modele_depuis' => 'See an example of the template with', + 'votre_email' => 'Your email' +); + +?> diff --git a/www/plugins/abomailmans/lang/abomailmans_es.php b/www/plugins/abomailmans/lang/abomailmans_es.php new file mode 100644 index 00000000..8ca4b810 --- /dev/null +++ b/www/plugins/abomailmans/lang/abomailmans_es.php @@ -0,0 +1,140 @@ + 'Lista de difusión o discusiones', + 'abomailmans' => 'Listas de difusión o discusiones', + 'abonne' => 'Me suscribo', + 'activation' => 'Activación', + 'active' => 'Activo', + 'aucune_langue' => 'Ninguno específico', + + // B + 'bouton_listes_diffusion' => 'Listas de difusión', + 'btn_abonnement' => 'Suscribirse', + 'btn_desabonnement' => 'Darse de baja', + + // C + 'choisir_liste' => 'Debe elegir una lista.', + 'contenu_date' => 'Contenido a partir de esta fecha', + 'creation_droits_insuffisants' => 'Sus derechos son insuficientes...', + + // D + 'desactive' => 'Desactivado', + 'destinataire' => 'Destinatario', + + // E + 'email' => 'Correo electrónico', + 'email_abonnement' => 'Su dirección de correo electrónico', + 'email_envoye' => 'El correo electrónico ha sido enviado a la lista de difusión: @liste@.', + 'email_oublie' => 'Ha olvidado su dirección de correo electrónico', + 'emailliste_abomailman' => 'La dirección de correo electrónico de la lista', + 'emailliste_abosympa' => 'La dirección de correo electrónico del administrador Sympa', + 'emailliste_subscribe' => 'Suscripción', + 'emailliste_unsubscribe' => 'Baja como suscriptor', + 'emails_a_renseigner' => 'Correos electrónicos a reportar', + 'envoi_apercu' => 'Vista previa', + 'envoi_confirmer' => 'Confirmar y enviar', + 'envoi_liste_parametres' => 'Lista de parámetros de configuración [Opcional]', + 'envoi_parametres' => 'Configuración', + 'envoi_regulier' => 'Envíos automáticos', + 'envoi_regulier_info' => 'Dejar en blanco para no recibir envíos automáticos', + 'envoi_regulier_tous_les' => 'Enviar todos los', + 'envoi_vers' => 'enviar a', + 'envoyer_courier' => 'Envíar un correo electrónico', + 'envoyer_courier_liste' => 'Enviar este correo electrónico a esta lista de difusión:', + 'envoyer_mailmans' => 'Seleccionar el modelo y su contenido', + 'erreur_email_liste_oublie' => 'La dirección de correo electrónico es obligatoria', + 'erreur_nobot' => 'Su inscripción no ha podido efectuarse debido a un problema técnico', + 'explication_email_subscribe' => 'Correo electrónico de suscripción, del estilo suffixe+subscribe@exemple.org', + 'explication_email_sympa' => 'Si este campo es reportado, la lista se considera como una lista de servidor "Sympa", en caso contrario como una lista "Mailman" o "ezmlm".', + 'explication_email_unsubscribe' => 'Correo electrónico de baja de suscripción', + + // I + 'icone_ajouter_liste' => 'Añadir una nueva lista', + 'icone_envoyer_mail_liste' => 'Enviar un correo electrónico a los boletines a partir del contenido de este sitio', + 'icone_modifier_abomailman' => 'Modificar la lista', + 'icone_retour_abomailman' => 'Volver a la lista', + 'info_abomailman_aucun' => 'Ninguna lista', + 'info_abomailmans_1' => 'Una lista', + 'info_abomailmans_nb' => '@nb@ listas', + 'info_sisympa' => '[Obligatorio en caso de liste Sympa]', + 'insciption_listes_legende' => 'Suscripción a las listas de suscripción', + 'inscription_lettres_legende' => 'Suscripción a las listas de difusión y de discusiones', + + // J + 'je_m_abonne' => 'Marque para validar la suscripción o la baja en la suscripción', + + // L + 'label_etat_liste' => 'Estado de la lista', + 'label_type_abo' => 'Tipo', + 'label_type_ml' => 'Lista de discusión', + 'label_type_news' => 'Lista de difusión', + 'langue_liste' => 'Idioma de la lista', + 'legende_inscription_ml' => 'Inscripción a la lista de discusión', + 'legende_inscription_news' => 'Inscripción en la lista de difusión', + 'legende_inscriptions_ml' => 'Inscripción en la listas de discusión', + 'legende_inscriptions_news' => 'Inscripción a las listas de difusión', + 'les_listes_mailmans' => 'Listas mailmans, sympa o ezmlm reportadas', + 'lire_article' => 'Leer artículo', + 'liste_creee' => 'La lista número @id@ (@titre@) ha sido creada.', + 'liste_non_existante' => 'La lista solicitada no existe o ha sido eliminada', + 'liste_oublie' => '¡Ha olvidado marcar una lista!', + 'liste_supprimee' => 'La lista número @id@ (@titre@) ha sido eliminada.', + 'liste_updatee' => 'La lista número @id@ (@titre@) ha sido actualizada.', + + // M + 'message' => 'Introducción a su correo, antes del contenido del sitio', + 'message_confirm_suite' => 'Para confirmar su solicitud, responda a la solicitud de confirmación que ha recibido por correo electrónico.', + 'message_confirmation_a' => 'Una solicitud de suscripción a las siguientes listas acaba de ser enviada:', + 'message_confirmation_d' => 'Una solicitud de baja en la suscripción a las siguientes listas acaba de ser enviada.', + 'message_confirmation_unique_a' => 'Una solicitud de suscripción a la siguiente lista acaba de ser enviada:', + 'message_confirmation_unique_d' => 'Una solicitud de baja de la suscripción a la siguiente lista acaba de ser enviada. ', + 'mot' => 'Y listar los artículos de la palabra clave', + + // N + 'nom' => 'Apellidos y nombre (opcional)', + 'nouveau_abomailman' => 'Nueva lista de difusión', + + // P + 'pas_template_txt' => 'No hay una versión texto para este modelo', + 'periodicite' => ' días.', + 'prenom' => 'Nombre', + 'previsu_html' => 'html', + 'previsu_txt' => 'texto', + + // R + 'rubrique' => 'Y listar los artículos de la sección', + + // S + 'souhaite_rester' => 'Quiero estar informado/a', + 'sujet' => 'Asunto del correo electrónico', + 'sujet_obligatoire' => 'El asunto es obligatorio.', + 'suppression_definitive' => '¡Eliminación definitiva!', + 'supprimer' => 'Eliminar', + 'sympa_message_confirmation' => 'Un correo electrónico de confirmación ha sido enviado a la dirección: ', + + // T + 'template' => 'Elija el modelo y su contenido', + 'template_defaut' => 'Modelo por defecto', + 'template_defaut_info' => 'Si el archivo modelo_elegido.txt.html existe, el boletín será enviado en modo html + texte. Si no, sólo la versión html será expedida. ', + 'texte_descriptif' => 'Descripción', + 'titre_abomailman' => 'Título de la lista', + 'titre_liste_obligatoire' => 'El título de la lista es obligatorio', + 'toute_liste' => 'Todas las listas de difusión', + + // V + 'verifier_formulaire' => 'Verifique el contenido del formulario.', + 'veut_s_abonner' => 'quiere suscribirse', + 'veut_se_desabonner' => 'quiere darse de baja', + 'voir_modele_depuis' => 'Ver un ejemplo del modelo con', + 'votre_email' => 'Su correo electrónico' +); + +?> diff --git a/www/plugins/abomailmans/lang/abomailmans_fr.php b/www/plugins/abomailmans/lang/abomailmans_fr.php new file mode 100755 index 00000000..ef5733aa --- /dev/null +++ b/www/plugins/abomailmans/lang/abomailmans_fr.php @@ -0,0 +1,138 @@ + 'Liste de diffusion ou discussions', + 'abomailmans' => 'Listes de diffusion ou discussions', + 'abonne' => 'Je m\'abonne', + 'activation' => 'Activation', + 'active' => 'Active', + 'aucune_langue' => 'Aucune spécifique', + + // B + 'bouton_listes_diffusion' => 'Les listes de diffusion', + 'btn_abonnement' => 'S\'abonner', + 'btn_desabonnement' => 'Se désabonner', + + // C + 'choisir_liste' => 'Vous devez choisir une liste.', + 'contenu_date' => 'Contenu à partir de cette date', + 'creation_droits_insuffisants' => 'Vos droits sont insuffisants...', + + // D + 'desactive' => 'Désactivée', + 'destinataire' => 'Destinataire', + + // E + 'email' => 'E-mail', + 'email_abonnement' => 'Votre adresse e-mail', + 'email_envoye' => 'L\'e-mail a été envoyé à la liste de diffusion : @liste@.', + 'email_oublie' => 'Vous avez oublié votre adresse e-mail', + 'emailliste_abomailman' => 'L\'adresse e-mail de la liste', + 'emailliste_abosympa' => 'L\'adresse e-mail de l\'administrateur Sympa', + 'emailliste_subscribe' => 'Abonnement', + 'emailliste_unsubscribe' => 'Désabonnement', + 'emails_a_renseigner' => 'Emails à renseigner', + 'envoi_apercu' => 'Aperçu', + 'envoi_confirmer' => 'Confirmer et envoyer', + 'envoi_liste_parametres' => 'Liste des paramètres [Facultatif]', + 'envoi_parametres' => 'Paramètres', + 'envoi_regulier' => 'Envois automatiques', + 'envoi_regulier_info' => 'Laisser vide pour ne pas avoir d\'envois automatiques', + 'envoi_regulier_tous_les' => 'Envoi tous les', + 'envoi_vers' => 'envoi vers', + 'envoyer_courier' => 'Envoyer un courrier', + 'envoyer_courier_liste' => 'Envoyer ce courrier à cette liste de diffusion :', + 'envoyer_mailmans' => 'Sélectionner le modèle et son contenu', + 'erreur_email_liste_oublie' => 'L\'adresse email de la liste est obligatoire', + 'erreur_nobot' => 'Votre inscription n\' a pu être effectué à cause d\'un problème technique', + 'explication_email_subscribe' => 'Email d\'abonnement, de style suffixe+subscribe@exemple.org', + 'explication_email_sympa' => 'Si ce champ est renseigné, la liste est considérée comme une liste de serveur "Sympa", dans le cas contraire comme une liste "Mailman" ou "ezmlm".', + 'explication_email_unsubscribe' => 'Email de désabonnement', + + // I + 'icone_ajouter_liste' => 'Ajouter une nouvelle liste', + 'icone_envoyer_mail_liste' => 'Envoyer un e-mail aux lettres à partir du contenu de ce site', + 'icone_modifier_abomailman' => 'Modifier la liste', + 'icone_retour_abomailman' => 'Retour à la liste', + 'info_abomailman_aucun' => 'Aucune liste', + 'info_abomailmans_1' => 'Une liste', + 'info_abomailmans_nb' => '@nb@ listes', + 'info_sisympa' => '[Obligatoire si liste Sympa]', + 'insciption_listes_legende' => 'Abonnement aux listes de diffusion', + 'inscription_lettres_legende' => 'Abonnement aux listes de diffusion et de discussions', + + // J + 'je_m_abonne' => 'Cochez pour valider l\'abonnement ou le désabonnement.', + + // L + 'label_etat_liste' => 'État de la liste', + 'label_type_abo' => 'Type', + 'label_type_ml' => 'Liste de discussion', + 'label_type_news' => 'Liste de diffusion', + 'langue_liste' => 'Langue de la liste', + 'legende_inscription_ml' => 'Inscription à la liste de discussion', + 'legende_inscription_news' => 'Inscription à la liste de diffusion', + 'legende_inscriptions_ml' => 'Inscription aux listes de discussion', + 'legende_inscriptions_news' => 'Inscription aux listes de diffusion', + 'les_listes_mailmans' => 'Les listes mailmans, sympa ou ezmlm renseignées', + 'lire_article' => 'Lire l\'article', + 'liste_creee' => 'La liste numéro @id@ (@titre@) a été créée.', + 'liste_non_existante' => 'La liste demandée n\'existe pas ou a été supprimée', + 'liste_oublie' => 'Vous avez oublié de cocher une liste !', + 'liste_supprimee' => 'La liste numéro @id@ (@titre@) a été supprimée.', + 'liste_updatee' => 'La liste numéro @id@ (@titre@) a été mise à jour.', + + // M + 'message' => 'Introduction à votre courrier, avant le contenu issu du site', + 'message_confirm_suite' => 'Pour valider votre demande, répondez à la demande de confirmation que vous allez recevoir par mail.', + 'message_confirmation_a' => 'Une demande d\'abonnement aux listes suivantes vient d\'être envoyée :', + 'message_confirmation_d' => 'Une demande de désabonnement aux listes suivantes vient d\'être envoyée. ', + 'message_confirmation_unique_a' => 'Une demande d\'abonnement à la liste suivante vient d\'être envoyée :', + 'message_confirmation_unique_d' => 'Une demande de désabonnement à la liste suivante vient d\'être envoyée. ', + 'mot' => 'Et lister les articles du mot clé', + + // N + 'nom' => 'Nom et prénom (facultatif)', + 'nouveau_abomailman' => 'Nouvelle liste de diffusion', + + // P + 'pas_template_txt' => 'Il n\'y a pas de version texte pour ce modèle', + 'periodicite' => ' jours.', + 'prenom' => 'Prénom', + 'previsu_html' => 'html', + 'previsu_txt' => 'texte', + + // R + 'rubrique' => 'Et lister les articles de la rubrique', + + // S + 'souhaite_rester' => 'Je souhaite rester informé-e', + 'sujet' => 'Sujet du courrier', + 'sujet_obligatoire' => 'Le sujet est obligatoire.', + 'suppression_definitive' => 'Suppression définitive !', + 'supprimer' => 'Supprimer', + 'sympa_message_confirmation' => 'Un email de validation a été envoyé à l\'adresse : ', + + // T + 'template' => 'Choisissez le modèle et son contenu', + 'template_defaut' => 'Modèle par défaut', + 'template_defaut_info' => 'Si le fichier modele_choisi.txt.html existe, la newsletter sera envoyée en mode html + texte. Sinon seule la version html sera expédiée.', + 'texte_descriptif' => 'Descriptif', + 'titre_abomailman' => 'Titre de la liste', + 'titre_liste_obligatoire' => 'Le titre de la liste est obligatoire', + 'toute_liste' => 'Toutes les listes de diffusion', + + // V + 'verifier_formulaire' => 'Vérifiez le remplissage du formulaire.', + 'veut_s_abonner' => 'veut s\'abonner', + 'veut_se_desabonner' => 'veut se désabonner', + 'voir_modele_depuis' => 'Voir un exemple du modèle avec', + 'votre_email' => 'Votre email' +); + +?> diff --git a/www/plugins/abomailmans/lang/abomailmans_sk.php b/www/plugins/abomailmans/lang/abomailmans_sk.php new file mode 100644 index 00000000..8d181851 --- /dev/null +++ b/www/plugins/abomailmans/lang/abomailmans_sk.php @@ -0,0 +1,140 @@ + 'E-mailová alebo diskusná skupina', + 'abomailmans' => 'E-mailové alebo diskusné skupiny', + 'abonne' => 'Prihlasujem sa na odoberanie', + 'activation' => 'Aktivácia', + 'active' => 'Aktivovaný', + 'aucune_langue' => 'Žiaden konkrétny', + + // B + 'bouton_listes_diffusion' => 'E-mailové skupiny', + 'btn_abonnement' => 'PrihlásiÅ¥ sa na odoberanie', + 'btn_desabonnement' => 'OdhlásiÅ¥ sa z odoberania', + + // C + 'choisir_liste' => 'Musíte si vybraÅ¥ skupinu.', + 'contenu_date' => 'Novinky z tohto dňa', + 'creation_droits_insuffisants' => 'VaÅ¡e práva sú nedostatočné.', + + // D + 'desactive' => 'Deaktivovaný', + 'destinataire' => 'Príjemca', + + // E + 'email' => 'E-mail', + 'email_abonnement' => 'VaÅ¡a e-mailová adresa', + 'email_envoye' => 'E-mail bol odoslaný do skupiny: @liste@.', + 'email_oublie' => 'Zabudli ste svoju e-mailovú adresu', + 'emailliste_abomailman' => 'E-mailová adresa skupiny', + 'emailliste_abosympa' => 'E-mailová adresa administrátora (Sympa)', + 'emailliste_subscribe' => 'Prihlásenie na odoberanie', + 'emailliste_unsubscribe' => 'Odhlásenie sa z odoberania', + 'emails_a_renseigner' => 'E-maily pre informácie', + 'envoi_apercu' => 'Anketa', + 'envoi_confirmer' => 'PotvrdiÅ¥ a poslaÅ¥', + 'envoi_liste_parametres' => 'Zoznam parametrov [Nepovinné]', + 'envoi_parametres' => 'Parametre', + 'envoi_regulier' => 'Automatické odosielanie', + 'envoi_regulier_info' => 'Nevypĺňajte, ak nechcete využívaÅ¥ automatické odosielanie', + 'envoi_regulier_tous_les' => 'PoslaÅ¥ vÅ¡etky', + 'envoi_vers' => 'príjemca', + 'envoyer_courier' => 'PoslaÅ¥ e-mail', + 'envoyer_courier_liste' => 'Tento e-mail poslaÅ¥ do e-mailovej skupiny:', + 'envoyer_mailmans' => 'Vyberte si Å¡ablónu a jej obsah', + 'erreur_email_liste_oublie' => 'E-mailová adresa skupiny je povinný údaj', + 'erreur_nobot' => 'Registrácia sa z technických príčin neuskutočnila', + 'explication_email_subscribe' => 'E-mail na prihlásenie sa na odoberanie v podobesuffixe+subscribe@exemple.org', + 'explication_email_sympa' => 'Ak toto pole vyplníte, skupina bude považovaná za skupinu servera Sympa, v opačnom prípade za skupinu servera "Mailman" alebo "ezmlm".', + 'explication_email_unsubscribe' => 'E-mail na odhlásenie', + + // I + 'icone_ajouter_liste' => 'PridaÅ¥ novú skupinu', + 'icone_envoyer_mail_liste' => 'PoslaÅ¥ e-mail s textom tejto stránky', + 'icone_modifier_abomailman' => 'UpraviÅ¥ skupinu', + 'icone_retour_abomailman' => 'VrátiÅ¥ sa na skupinu', + 'info_abomailman_aucun' => 'Žiadna skupina', + 'info_abomailmans_1' => 'Jedna skupina', + 'info_abomailmans_nb' => '@nb@ skupín', + 'info_sisympa' => '(Povinné pre skupinu Sympa)', + 'insciption_listes_legende' => 'Odoberanie príspevkov e-mailových skupín', + 'inscription_lettres_legende' => 'Odoberanie príspevkov e-mailových a diskusných skupín', + + // J + 'je_m_abonne' => 'Označením prísluÅ¡ného poľa potvrďte svoje prihlásenie alebo odhlásenie.', + + // L + 'label_etat_liste' => 'Stav skupiny', + 'label_type_abo' => 'Typ', + 'label_type_ml' => 'Diskusná skupina', + 'label_type_news' => 'E-mailová skupina', + 'langue_liste' => 'Jazyk skupiny', + 'legende_inscription_ml' => 'Registrácia do diskusnej skupiny', + 'legende_inscription_news' => 'Registrácia do e-mailovej skupiny', + 'legende_inscriptions_ml' => 'Registrácia do diskusných skupín', + 'legende_inscriptions_news' => 'Registrácia do e-mailových skupín', + 'les_listes_mailmans' => 'Informované skupiny mailmans, sympa alebo ezmlm', + 'lire_article' => 'ČítaÅ¥ článok', + 'liste_creee' => 'Skupina číslo @id@ (@titre@) bola vytvorená.', + 'liste_non_existante' => 'Požadovaná skupina neexistuje alebo bola vymazaná', + 'liste_oublie' => 'Zabudli ste skontrolovaÅ¥ skupinu!', + 'liste_supprimee' => 'Skupina číslo @id@ (@titre@) bola vymazaná.', + 'liste_updatee' => 'Skupina číslo @id@ (@titre@) bola aktualizovaná.', + + // M + 'message' => 'Úvod do e-mailu pred obsahom stránky', + 'message_confirm_suite' => 'Ak chcete potvrdiÅ¥ požiadavku, postupujte podľa pokynov, ktoré dostanete e-mailom.', + 'message_confirmation_a' => 'Bola odoslaná požiadavka na prihlásenie na odoberanie príspevkov týchto skupín:', + 'message_confirmation_d' => 'Požiadavka na odhlásenie z odoberania príspevkov týchto skupín bola odoslaná.', + 'message_confirmation_unique_a' => 'Bola odoslaná požiadavka na odoberanie príspevkov z tejto skupiny:', + 'message_confirmation_unique_d' => 'Požiadavka na odhlásenie sa z odoberania príspevkov z tejto skupiny bola odoslaná.', + 'mot' => 'A vypísaÅ¥ články s kľúčovým slovom ', + + // N + 'nom' => 'Priezvisko a meno (nepovinné)', + 'nouveau_abomailman' => 'Nová e-mailová skupina', + + // P + 'pas_template_txt' => 'K tejto Å¡ablóne neexistuje textová verzie', + 'periodicite' => ' dní/dni.', + 'prenom' => 'Krstné meno', + 'previsu_html' => 'html', + 'previsu_txt' => 'nenaformátovaný text', + + // R + 'rubrique' => 'A vypísaÅ¥ články z rubriky', + + // S + 'souhaite_rester' => 'Chcem maÅ¥ prehľad', + 'sujet' => 'Predmet e-mailu', + 'sujet_obligatoire' => 'Predmet je povinný.', + 'suppression_definitive' => 'Definitívne odstránenie!', + 'supprimer' => 'OdstrániÅ¥', + 'sympa_message_confirmation' => 'Potvrdzovací e-mail bol odoslaný na túto adresu: ', + + // T + 'template' => 'Vyberte si Å¡ablónu a jej obsah', + 'template_defaut' => 'Predvolená Å¡ablóna', + 'template_defaut_info' => 'Ak súbor modele_choisi.txt.html existuje, bulletin bude odoslaný vo verzii html aj ako text. Inak bude odoslaný iba vo verzii html.', + 'texte_descriptif' => 'Popis', + 'titre_abomailman' => 'Názov skupiny', + 'titre_liste_obligatoire' => 'Názov skupiny je povinný údaj', + 'toute_liste' => 'VÅ¡etky e-mailové skupiny', + + // V + 'verifier_formulaire' => 'Skontrolujte, ako ste vyplnili formulár.', + 'veut_s_abonner' => 'chcem sa prihlásiÅ¥', + 'veut_se_desabonner' => 'chcem sa odhlásiÅ¥', + 'voir_modele_depuis' => 'ZobraziÅ¥ príklad Å¡ablóny s ', + 'votre_email' => 'Váš e-mail' +); + +?> diff --git a/www/plugins/abomailmans/lang/paquet-abomailmans.xml b/www/plugins/abomailmans/lang/paquet-abomailmans.xml new file mode 100644 index 00000000..15f26a05 --- /dev/null +++ b/www/plugins/abomailmans/lang/paquet-abomailmans.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/www/plugins/abomailmans/lang/paquet-abomailmans_de.php b/www/plugins/abomailmans/lang/paquet-abomailmans_de.php new file mode 100644 index 00000000..acdbf2af --- /dev/null +++ b/www/plugins/abomailmans/lang/paquet-abomailmans_de.php @@ -0,0 +1,17 @@ + 'Dieses Plugin ermöglich mit dem TAG #FORMULAIRE_ABOMAILMAN das Abnonnieren von Mailinglisten. + Dem Adminstrator steht ein Interface zur Verwaltung dieser Listen zur Verfügung.', + 'abomailmans_nom' => 'Abonnieren Sie Mailing-Listen', + 'abomailmans_slogan' => 'Interfacer vos listes de diffusions mailman, ezmlm ou sympa avec votre SPIP' # NEW +); + +?> diff --git a/www/plugins/abomailmans/lang/paquet-abomailmans_en.php b/www/plugins/abomailmans/lang/paquet-abomailmans_en.php new file mode 100644 index 00000000..125c1ac4 --- /dev/null +++ b/www/plugins/abomailmans/lang/paquet-abomailmans_en.php @@ -0,0 +1,18 @@ + 'This plugin adds a registration form to mailing lists and newsletters services as [Mailman->http://www.gnu.org/software/mailman/], [Ezmlm->http://www.ezmlm.org/] or [Sympa->http://www.sympa.org]. + +The administrator can manage the lists from the private space via a dedicated interface.', + 'abomailmans_nom' => 'Mailing lists and newsletters subscription', + 'abomailmans_slogan' => 'Interface your Mailman, Ezmlm or Sympa mailing lists and newsletters with SPIP' +); + +?> diff --git a/www/plugins/abomailmans/lang/paquet-abomailmans_es.php b/www/plugins/abomailmans/lang/paquet-abomailmans_es.php new file mode 100644 index 00000000..3ec69301 --- /dev/null +++ b/www/plugins/abomailmans/lang/paquet-abomailmans_es.php @@ -0,0 +1,19 @@ + 'Este plugin permite a través de una etiqueta #FORMULAIRE_ABOMAILMAN mostrar un formulario de suscripción al conjunto de las listas [Mailman->http://www.gnu.org/software/mailman/], [Ezmlm->http://www.ezmlm.org/] o [Sympa->http://www.sympa.org] renseignées. +_ Esta inscripción se hace a través de la interfaz privada de SPIP por el menú "Edición Abomailmans listas de difusiones mailman". +_ A continuación puede seleccionar artículos de su SPIP, por criterios de fecha, de sección y/o de palabra clave y enviar su contenido a estas listas, usando esqueletos de formateo de contenido. +_ El enlace con las listas Mailman, Ezmlm y Sympa se hace por envíos de correo electrónico. ', + 'abomailmans_nom' => 'Suscripción a las listas de difusión', + 'abomailmans_slogan' => 'Vincular sus listas de difusiones mailman, ezmlm o sympa con su SPIP' +); + +?> diff --git a/www/plugins/abomailmans/lang/paquet-abomailmans_fr.php b/www/plugins/abomailmans/lang/paquet-abomailmans_fr.php new file mode 100644 index 00000000..f8f88670 --- /dev/null +++ b/www/plugins/abomailmans/lang/paquet-abomailmans_fr.php @@ -0,0 +1,17 @@ + 'Ce plugin permet via une balise #FORMULAIRE_ABOMAILMAN d\'afficher un formulaire d\'abonnement à l\'ensemble des listes [Mailman->http://www.gnu.org/software/mailman/], [Ezmlm->http://www.ezmlm.org/] ou [Sympa->http://www.sympa.org] renseignées. +_ Cette inscription se fait via l\'interface privée de SPIP par le menu "Edition Abomailmans les listes de diffusions mailman". +_ Ensuite il vous est possible de sélectionner des articles de votre SPIP, par des critères de date, de rubrique et/ou de mot-clé et envoyer leurs contenus à ces listes, en utilisant des squelettes de mise en page du contenu. +_ Le lien avec les listes Mailman, Ezmlm et Sympa se fait par des envois d\'e-mail.', + 'abomailmans_nom' => 'Abonnement à des listes de diffusion', + 'abomailmans_slogan' => 'Interfacer vos listes de diffusions mailman, ezmlm ou sympa avec votre SPIP' +); + +?> diff --git a/www/plugins/abomailmans/lang/paquet-abomailmans_sk.php b/www/plugins/abomailmans/lang/paquet-abomailmans_sk.php new file mode 100644 index 00000000..817dd1ef --- /dev/null +++ b/www/plugins/abomailmans/lang/paquet-abomailmans_sk.php @@ -0,0 +1,19 @@ + 'Tento zásuvný modul umožňuje pomocou tagu #FORMULAIRE_ABOMAILMAN zobraziÅ¥ formulár na prihlásenie sa na odoberanie príspevkov celého radu typov skupín (resp. konferencií) [Mailman,->http://www.gnu.org/software/mailman/] [Ezmlm->http://www.ezmlm.org/] alebo [Sympa.->http://www.sympa.org] +_ Registrácia sa vykonáva cez súkromnú zónu SPIPu pomocou menu "Úprava skupín typu mailman". +_ Potom si zo svojej stránky v SPIPe môžete vybraÅ¥ články podľa dátumu, rubriky a/lebo kľúčového slova a poslaÅ¥ ich do týchto skupín (resp. konferencií, mailing listov) pomocou Å¡ablón na úpravu vzhľadu textu. +_ Odkaz na skupiny Mailman, Ezmlm a Sympa získate odoslaním e-mailu.', + 'abomailmans_nom' => 'Odoberanie príspevkov e-mailových konferencií (skupín)', + 'abomailmans_slogan' => 'Ovládajte svoje e-mailové skupiny, (e-mailové konferencie), diskusné skupiny či mailing listy typu mailman, ezmlm alebo sympa so svojím SPIPom' +); + +?> diff --git a/www/plugins/abomailmans/paquet.xml b/www/plugins/abomailmans/paquet.xml new file mode 100644 index 00000000..6a1f0b8c --- /dev/null +++ b/www/plugins/abomailmans/paquet.xml @@ -0,0 +1,34 @@ + + + Abonnement à des listes de diffusion + + + NetAktiv + Anne-lise Martenot + Yffic + kent1 + GPL 3 + + + + + + + + + + + + + + + diff --git a/www/plugins/abomailmans/prive/listes/abomailman_mots.html b/www/plugins/abomailmans/prive/listes/abomailman_mots.html new file mode 100644 index 00000000..f50a3c2d --- /dev/null +++ b/www/plugins/abomailmans/prive/listes/abomailman_mots.html @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/www/plugins/abomailmans/prive/listes/abomailman_rubriques.html b/www/plugins/abomailmans/prive/listes/abomailman_rubriques.html new file mode 100644 index 00000000..02ec561f --- /dev/null +++ b/www/plugins/abomailmans/prive/listes/abomailman_rubriques.html @@ -0,0 +1,17 @@ +#SET{id_parent,#ENV{id_rubrique,0}} +#SET{niveau,#ENV{niveau,1}} +[(#GET{niveau}|>={2}|oui) + [(#SET{marge,#ENV{marge}|concat{----}})] + +] + +[(#GET{niveau}|=={1}|oui) + [(#SET{marge,•})] +] +[(#GET{niveau}|=={2}|oui) + [(#SET{marge,'   |----'})] +] + + +[(#INCLURE{fond=prive/listes/abomailman_rubriques}{niveau=[(#GET{niveau}|plus{1})]}{id_rubrique=#ID_RUBRIQUE}{id_rubrique_env}{marge=#GET{marge}})] + \ No newline at end of file diff --git a/www/plugins/abomailmans/prive/listes/abomailman_templates.html b/www/plugins/abomailmans/prive/listes/abomailman_templates.html new file mode 100755 index 00000000..a5c33405 --- /dev/null +++ b/www/plugins/abomailmans/prive/listes/abomailman_templates.html @@ -0,0 +1,16 @@ +[(#REM) Tous les fichiers *.html, mais pas les .txt.html ] +#SET{arraytemplate,#EVAL{find_all_in_path("templates/",".*(? +[(#SET{select,[(#MODELE_DEFAUT|nettoie_chemin)]})] + +[(#ENV{template}|oui) +[(#SET{select,[(#ENV{template})]})] +] + + + + + \ No newline at end of file diff --git a/www/plugins/abomailmans/prive/listes/listes_des_listes.html b/www/plugins/abomailmans/prive/listes/listes_des_listes.html new file mode 100644 index 00000000..5b8556fd --- /dev/null +++ b/www/plugins/abomailmans/prive/listes/listes_des_listes.html @@ -0,0 +1,20 @@ + +
  • + [(#ENV**{erreurs}|table_valeur{listes})] +
      +
    • + [(#GRAND_TOTAL|>{1}|oui) + ] + +
      + + + [

      + (#DESCRIPTIF|PtoBR) +

      ] +
      + +
    • +
    +
  • +
    diff --git a/www/plugins/abomailmans/prive/objets/contenu/abomailman.html b/www/plugins/abomailmans/prive/objets/contenu/abomailman.html new file mode 100644 index 00000000..3bd664d7 --- /dev/null +++ b/www/plugins/abomailmans/prive/objets/contenu/abomailman.html @@ -0,0 +1,30 @@ + +
    +
    <:info_titre:>
    +
    #TITRE
    +
    +
    +
    <:info_descriptif:>
    + [(#DESCRIPTIF|image_reduire{500,0})]
    + +
    +
    <:abomailmans:emailliste_abomailman:>
    + +
    +[
    +
    <:abomailmans:emailliste_abosympa:>
    + +
    ] +[
    +
    <:abomailmans:envoi_regulier:>
    +
    (#PERIODICITE)
    +
    ] +[
    +
    <:abomailmans:langue_liste:>
    +
    (#LANG|traduire_nom_langue|sinon{<:abomailmans:aucune_langue:>})
    +
    ] +[
    +
    <:info_notes:>
    +
    (#NOTES)
    +
    +] \ No newline at end of file diff --git a/www/plugins/abomailmans/prive/objets/infos/abomailman.html b/www/plugins/abomailmans/prive/objets/infos/abomailman.html new file mode 100644 index 00000000..674be399 --- /dev/null +++ b/www/plugins/abomailmans/prive/objets/infos/abomailman.html @@ -0,0 +1,4 @@ +
    +#SET{texte_objet,#ENV{type}|objet_info{texte_objet}|_T} +
    <:titre_cadre_numero_objet{objet=#GET{texte_objet}}:>

    [(#ENV{id}|generer_info_entite{#ENV{type},[(#ENV{type}|id_table_objet)],'**'})]

    +
    diff --git a/www/plugins/abomailmans/prive/squelettes/contenu/abomailman.html b/www/plugins/abomailmans/prive/squelettes/contenu/abomailman.html new file mode 100644 index 00000000..80aef1b4 --- /dev/null +++ b/www/plugins/abomailmans/prive/squelettes/contenu/abomailman.html @@ -0,0 +1,24 @@ + +[(#BOITE_OUVRIR{[ + [(#AUTORISER{modifier,abomailman,#ID_ABOMAILMAN}) + [(#ID_ABOMAILMAN|afficher_qui_edite{abomailman}|non) + [(#URL_ECRIRE{abomailman_edit,id_abomailman=#ID_ABOMAILMAN}|icone_verticale{<:abomailmans:icone_modifier_abomailman:>,abomailmans-24,edit,right ajax preload})] + ] + [(#ID_ABOMAILMAN|afficher_qui_edite{abomailman}|oui) + [(#URL_ECRIRE{abomailman_edit,id_abomailman=#ID_ABOMAILMAN}|icone_verticale{#ID_ABOMAILMAN|afficher_qui_edite{abomailmans-24},warning-24,'',right ajax preload})] + ] + ] +

    [(#RANG). ](#TITRE|sinon{<:info_sans_titre:>})[(#CHEMIN_IMAGE{abomailmans-24.png}|balise_img{article,cadre-icone})]

    +],simple fiche_objet})] +
    +
    +#INCLURE{fond=prive/objets/contenu/abomailman,env} +
    +#BOITE_FERMER + +[(#EVAL{_AJAX}|oui) + +] + +[(#ENV**{exec}|=={abomailman_edit}|?{#INCLURE{fond=prive/squelettes/contenu/abomailman_edit,env,retourajax=oui},#REM|sinon_interdire_acces})] + diff --git a/www/plugins/abomailmans/prive/squelettes/contenu/abomailman_edit.html b/www/plugins/abomailmans/prive/squelettes/contenu/abomailman_edit.html new file mode 100644 index 00000000..d35478b5 --- /dev/null +++ b/www/plugins/abomailmans/prive/squelettes/contenu/abomailman_edit.html @@ -0,0 +1,30 @@ +[(#ID_ABOMAILMAN|intval|oui) + [(#AUTORISER{modifier,abomailman,#ID_ABOMAILMAN}|sinon_interdire_acces)] +][(#ID_ABOMAILMAN|intval|non) + [(#AUTORISER{creer,abomailman}|sinon_interdire_acces)] +] +#SET{retour,#ENV{redirect}|sinon{#ID_ABOMAILMAN|intval|?{#URL_ECRIRE{abomailman,id_abomailman=#ID_ABOMAILMAN},#URL_ECRIRE{abomailmans}}}} + +
    + +
    + [(#GET{retour}|icone_verticale{<:icone_retour:>,abomailmans-24,'',left retour[(#ENV{retourajax,''}|oui)ajax preload]})] +

    [(#TITRE|supprimer_numero)]

    +
    + +
    + [(#GET{retour}|icone_verticale{<:icone_retour:>,abomailmans-24,'',left retour[(#ENV{retourajax,''}|oui)ajax preload]})] +

    <:abomailmans:icone_ajouter_liste:>

    +
    + + #SET{redirect,#ENV{redirect,#ID_ABOMAILMAN|generer_url_entite{abomailman}}} + [(#ENV{retourajax,''}|oui) + #SET{redirect,'javascript:if (window.jQuery) jQuery(".entete-formulaire .retour a").followLink();'} +
    + ] + #FORMULAIRE_EDITER_ABOMAILMAN{#ENV{id_abomailman,oui},#GET{redirect}} + [(#ENV{retourajax,''}|oui) +
    + + ] +
    \ No newline at end of file diff --git a/www/plugins/abomailmans/prive/squelettes/contenu/abomailman_envoyer.html b/www/plugins/abomailmans/prive/squelettes/contenu/abomailman_envoyer.html new file mode 100644 index 00000000..bdd5b3b9 --- /dev/null +++ b/www/plugins/abomailmans/prive/squelettes/contenu/abomailman_envoyer.html @@ -0,0 +1,7 @@ +
    +
    + [(#GET{retour}|icone_verticale{<:icone_retour:>,abomailmans-24,'',left retour[(#ENV{retourajax,''}|oui)ajax preload]})] +

    <:abomailmans:envoyer_courier:>

    +
    +#FORMULAIRE_ABOMAILMAN_ENVOI_LISTE +
    \ No newline at end of file diff --git a/www/plugins/abomailmans/prive/squelettes/contenu/abomailmans.html b/www/plugins/abomailmans/prive/squelettes/contenu/abomailmans.html new file mode 100644 index 00000000..2e0616a3 --- /dev/null +++ b/www/plugins/abomailmans/prive/squelettes/contenu/abomailmans.html @@ -0,0 +1,40 @@ +#CACHE{0} + +

    <:abomailmans:les_listes_mailmans:>

    + + +#BOITE_OUVRIR + #ANCRE_PAGINATION +
    + + + + + + + + + + +
    + [] + + [(#TITRE)] + + #LANG + + [(#DESACTIVE|=={1}|?{<:abomailmans:desactive:>,<:abomailmans:active:>})] + [(#AUTORISER{modifier,abomailman,#ID_ABOMAILMAN}|?{ + #ID_ABOMAILMAN, + #ID_ABOMAILMAN + })]
    + [] +
    +[(#BOITE_FERMER)] +
    +[(#AUTORISER{creer, abomailman}|oui) + [(#URL_ECRIRE{abomailman_edit,id_abomailman=new}|parametre_url{redirect,#SELF} + |icone_verticale{<:abomailmans:icone_ajouter_liste:>,abomailmans-24,new,right})] +] \ No newline at end of file diff --git a/www/plugins/abomailmans/prive/squelettes/navigation/abomailman.html b/www/plugins/abomailmans/prive/squelettes/navigation/abomailman.html new file mode 100644 index 00000000..fb094b5c --- /dev/null +++ b/www/plugins/abomailmans/prive/squelettes/navigation/abomailman.html @@ -0,0 +1,8 @@ +[(#ID_ABOMAILMAN|generer_info_entite{abomailman,[(#VAL{abomailman}|id_table_objet)],'**'}|intval|=={#ID_ABOMAILMAN}|sinon_interdire_acces)] + +#BOITE_OUVRIR{'','info'} +#PIPELINE{boite_infos,#ARRAY{data,'',args,#ARRAY{'type','abomailman','id',#ID_ABOMAILMAN}}} +#BOITE_FERMER + +[(#ENV{exec}|=={abomailman_edit}|oui)] + diff --git a/www/plugins/abomailmans/prive/squelettes/navigation/abomailmans.html b/www/plugins/abomailmans/prive/squelettes/navigation/abomailmans.html new file mode 100644 index 00000000..4c9b97de --- /dev/null +++ b/www/plugins/abomailmans/prive/squelettes/navigation/abomailmans.html @@ -0,0 +1,5 @@ + +[(#BOITE_OUVRIR)] +[(#URL_ECRIRE{abomailman_envoyer}|icone_horizontale{<:abomailmans:icone_envoyer_mail_liste:>,abomailmans-envoyer-24})] +[(#BOITE_FERMER)] + \ No newline at end of file diff --git a/www/plugins/abomailmans/prive/style_prive_plugin_abomailmans.html b/www/plugins/abomailmans/prive/style_prive_plugin_abomailmans.html new file mode 100644 index 00000000..54a76777 --- /dev/null +++ b/www/plugins/abomailmans/prive/style_prive_plugin_abomailmans.html @@ -0,0 +1,8 @@ +#CACHE{3600*100,cache-client} +#HTTP_HEADER{Content-Type: text/css; charset=iso-8859-15} +#HTTP_HEADER{Vary: Accept-Encoding} + +.abo_message { + overflow:auto; + width:520px; +} \ No newline at end of file diff --git a/www/plugins/abomailmans/prive/themes/spip/images/abomailmans-16.png b/www/plugins/abomailmans/prive/themes/spip/images/abomailmans-16.png new file mode 100755 index 00000000..a98ffe98 Binary files /dev/null and b/www/plugins/abomailmans/prive/themes/spip/images/abomailmans-16.png differ diff --git a/www/plugins/abomailmans/prive/themes/spip/images/abomailmans-24.png b/www/plugins/abomailmans/prive/themes/spip/images/abomailmans-24.png new file mode 100644 index 00000000..b2b75fab Binary files /dev/null and b/www/plugins/abomailmans/prive/themes/spip/images/abomailmans-24.png differ diff --git a/www/plugins/abomailmans/prive/themes/spip/images/abomailmans-32.png b/www/plugins/abomailmans/prive/themes/spip/images/abomailmans-32.png new file mode 100644 index 00000000..5ef4e7a8 Binary files /dev/null and b/www/plugins/abomailmans/prive/themes/spip/images/abomailmans-32.png differ diff --git a/www/plugins/abomailmans/prive/themes/spip/images/abomailmans-envoyer-24.png b/www/plugins/abomailmans/prive/themes/spip/images/abomailmans-envoyer-24.png new file mode 100644 index 00000000..d2f77618 Binary files /dev/null and b/www/plugins/abomailmans/prive/themes/spip/images/abomailmans-envoyer-24.png differ diff --git a/www/plugins/abomailmans/prive/themes/spip/images/abomailmans-new-16.png b/www/plugins/abomailmans/prive/themes/spip/images/abomailmans-new-16.png new file mode 100644 index 00000000..68dc0afc Binary files /dev/null and b/www/plugins/abomailmans/prive/themes/spip/images/abomailmans-new-16.png differ diff --git a/www/plugins/abomailmans/svn.revision b/www/plugins/abomailmans/svn.revision new file mode 100644 index 00000000..d7ef5416 --- /dev/null +++ b/www/plugins/abomailmans/svn.revision @@ -0,0 +1,10 @@ + + +Origine: file:///home/svn/repository/spip-zone/_plugins_/abomailmans/trunk +Revision: 73175 +Dernier commit: 2013-06-01 20:43:16 +0200 + +file:///home/svn/repository/spip-zone/_plugins_/abomailmans/trunk +73175 +2013-06-01 20:43:16 +0200 + \ No newline at end of file diff --git a/www/plugins/abomailmans/templates/nouveautes.html b/www/plugins/abomailmans/templates/nouveautes.html new file mode 100755 index 00000000..31a071e3 --- /dev/null +++ b/www/plugins/abomailmans/templates/nouveautes.html @@ -0,0 +1,67 @@ +#CACHE{0}[(#HTTP_HEADER{Content-type: text/html[; charset=(#CHARSET)]})] +[(#REM) +/********************************************************** +* Ce squelette pour Abomailmains +* Attention a : +* - ne pas envoyer des gabarits de plus de 10Ko +* - ne pas placer de balises d'ouverture ou de fermeture html et body +* ils seront ajoutes automatiquement a l'envoi du mail +* - mettre les style CSS directement dans les balises pour etre sur qu'ils seront interpretes (meme par les webmails) +* - les urls et liens images seront automatiquement converties en absolues +* ex. rubrique5.html -> http://www.monsite.org/rubrique5.html +* Inspire du plugin Spip-Listes +* $Id: nouveautes.html 59659 2012-03-23 14:00:11Z root $ +***********************************************************/] + + + +
    + + + + + + #SET{type, agenda} + + + + +
    +

    + [(#LOGO_SITE_SPIP||image_reduire{100,100}|inserer_attribut{style,'border:0;'}|sinon{#NOM_SITE_SPIP})] +

    + #DESCRIPTIF + + [

    (#ENV{sujet})

    ] + [

    (#ENV{message})

    ] + +
     
    +
    + [(#GET{type}|!={'agenda'}|?{'',' '}) + [
    + [(#DATE_REDAC|nom_jour)] (#DATE_REDAC|affdate_jourcourt)[ - (#DATE_REDAC|affdate{'H:i'})] +
    ] + ] + [

    (#TITRE|textebrut|supprimer_numero)

    ] + + [(#GET{type}|=={'agenda'}|?{'',' '})

    [(#DATE|affdate)]

    ] + + + + +
    [

    (#INTRODUCTION|textebrut|liens_absolus)

    ]
    + [(#LOGO_ARTICLE||image_reduire{100,100}|liens_absolus)] +
    + <:abomailmans:lire_article:> +
    +
     
    +
    +
    +
    diff --git a/www/plugins/abomailmans/templates/nouveautes.txt.html b/www/plugins/abomailmans/templates/nouveautes.txt.html new file mode 100644 index 00000000..b31aee38 --- /dev/null +++ b/www/plugins/abomailmans/templates/nouveautes.txt.html @@ -0,0 +1,38 @@ +#CACHE{0}[(#HTTP_HEADER{Content-type: text/plain[; charset=(#CHARSET)]})] +[(#REM) +/********************************************************** +* Ce squelette pour Abomailmains +* Attention a : +* - ne pas envoyer des gabarits de plus de 10Ko +* - les urls et liens images seront automatiquement converties en absolues +* ex. rubrique5.html -> http://www.monsite.org/rubrique5.html +* Inspire du plugin Spip-Listes +* $Id: nouveautes.html 44651 2011-02-14 10:33:12Z yffic@lefourneau.com $ +***********************************************************/] + + +[(#DESCRIPTIF)] + +[(#ENV{sujet})] +[(#ENV{message})] + + +------------------------------------------------------------------------------ + +#SET{type, agenda} +[(#GET{type}|!={'agenda'}|?{'',' '}) + [[(#DATE_REDAC|nom_jour)] (#DATE_REDAC|affdate_jourcourt)[ - (#DATE_REDAC|affdate{'H:i'})]] +] +[(#TITRE|textebrut|supprimer_numero)] +[(#GET{type}|=={'agenda'}|?{'',' '})[(#DATE|affdate)]] + > [(#TITRE|couper{80})] +[(#INTRODUCTION|textebrut|liens_absolus)] +<:abomailmans:lire_article:> : [(#URL_ARTICLE|url_absolue)] + +------------------------------------------------------------------------------ + +------------------------------------------------------------------------------ + +[(#NOM_SITE_SPIP|textebrut)] (#URL_SITE_SPIP) + +[(#FILTRE{supprimer_tags|filtrer_entites|trim})] \ No newline at end of file diff --git a/www/plugins/abomailmans/templates/nouveautes_fr_en.html b/www/plugins/abomailmans/templates/nouveautes_fr_en.html new file mode 100644 index 00000000..24ce9dc8 --- /dev/null +++ b/www/plugins/abomailmans/templates/nouveautes_fr_en.html @@ -0,0 +1,98 @@ +#CACHE{0}[(#HTTP_HEADER{Content-type: text/html[; charset=(#CHARSET)]})] +[(#REM) +/********************************************************** +* Ce squelette pour Abomailmains +* Attention a : +* - ne pas envoyer des gabarits de plus de 10Ko +* - ne pas placer de balises d'ouverture ou de fermeture html et body +* ils seront ajoutes automatiquement a l'envoi du mail +* - mettre les style CSS directement dans les balises pour etre sur qu'ils seront interpretes (meme par les webmails) +* - les urls et liens images seront automatiquement converties en absolues +* ex. rubrique5.html -> http://www.monsite.org/rubrique5.html +* Inspire du plugin Spip-Listes +* $Id: nouveautes.html 44651 2011-02-14 10:33:12Z yffic@lefourneau.com $ +***********************************************************/] +#SET{tableau_nouveautes,#ARRAY} + + #SET{tableau_nouveautes, #GET{tableau_nouveautes}|push{#ID_ARTICLE}} + + + + +
    + + + + + + + + + + + + + + +
    +

    + [(#LOGO_SITE_SPIP||image_reduire{100,100}|inserer_attribut{style,'border:0;'}|sinon{#NOM_SITE_SPIP})] +

    +
    + + + + +
    + [(#DESCRIPTIF*|extraire_multi{fr}|propre)] + + [

    (#ENV*{sujet}|extraire_multi{fr})

    ] + [

    (#ENV*{message}|extraire_multi{fr})

    ] + +
      + [(#DESCRIPTIF*|extraire_multi{en}|propre)] + + [

    (#ENV*{sujet}|extraire_multi{en})

    ] + [

    (#ENV*{message}|extraire_multi{en})

    ] + +
    +
     
    +
    + + + + +
    + + [

    (#TITRE|textebrut|supprimer_numero)

    ] +
    [(#DATE|affdate)]
    + + [

    (#INTRODUCTION{150}|textebrut|liens_absolus)

    +

    Lire l'article

    ] + [(#SET{logo,#LOGO_ARTICLE||image_reduire{100,100}|liens_absolus})] + +
    + [(#GET{logo})] + + + [

    (#TITRE|textebrut|supprimer_numero)

    ] +
    [(#DATE|affdate)]
    + + [

    (#INTRODUCTION{150}|textebrut|liens_absolus)

    +

    Read the article

    ] + +
    +
     
    +
    +
    diff --git a/www/plugins/abomailmans/templates/nouveautes_fr_en.txt.html b/www/plugins/abomailmans/templates/nouveautes_fr_en.txt.html new file mode 100644 index 00000000..6d5987d9 --- /dev/null +++ b/www/plugins/abomailmans/templates/nouveautes_fr_en.txt.html @@ -0,0 +1,58 @@ +#CACHE{0}[(#HTTP_HEADER{Content-type: text/plain[; charset=(#CHARSET)]})] +[(#REM) +/********************************************************** +* Ce squelette pour Abomailmains +* Attention a : +* - ne pas envoyer des gabarits de plus de 10Ko +* - les urls et liens images seront automatiquement converties en absolues +* ex. rubrique5.html -> http://www.monsite.org/rubrique5.html +* Inspire du plugin Spip-Listes +* $Id: nouveautes.html 44651 2011-02-14 10:33:12Z yffic@lefourneau.com $ +***********************************************************/] + + +[(#DESCRIPTIF*|extraire_multi{fr}|propre)] + +[(#ENV*{sujet}|extraire_multi{fr})] +[(#ENV*{message}|extraire_multi{fr})] + + +------------------------------------------------------------------------------ + + +[(#SURTITRE|textebrut|supprimer_numero) :] +[(#TITRE|textebrut|supprimer_numero)] +[(#DATE|affdate)] + > [(#TITRE*|extraire_multi{fr}|couper{80})] +[(#INTRODUCTION|textebrut|liens_absolus)] +Lire l'article : [(#URL_ARTICLE|url_absolue)] +------------------------------------------------------------------------------ + + +[(#NOM_SITE_SPIP*|extraire_multi{fr}|textebrut)] (#URL_SITE_SPIP) + + +############################################################################## + + +[(#DESCRIPTIF*|extraire_multi{en}|propre)] + +[(#ENV*{sujet}|extraire_multi{en})] +[(#ENV*{message}|extraire_multi{en})] + + +------------------------------------------------------------------------------ + + +[(#SURTITRE|textebrut|supprimer_numero) :] +[(#TITRE|textebrut|supprimer_numero)] +[(#DATE|affdate)] + > [(#TITRE*|extraire_multi{en}|couper{80})] +[(#INTRODUCTION|textebrut|liens_absolus)] +Read the article : [(#URL_ARTICLE|url_absolue)] +------------------------------------------------------------------------------ + + +[(#NOM_SITE_SPIP*|extraire_multi{en}|textebrut)] (#URL_SITE_SPIP) + +[(#FILTRE{supprimer_tags|filtrer_entites|trim})] \ No newline at end of file diff --git a/www/plugins/compositions_v3/composition-vide.html b/www/plugins/compositions_v3/composition-vide.html new file mode 100644 index 00000000..47c48749 --- /dev/null +++ b/www/plugins/compositions_v3/composition-vide.html @@ -0,0 +1,9 @@ +[(#REM) + + Squelette + (c) Cedric Morin 2009 + Distribue sous licence GPL + + Un squelette qui ne produit rien. +] +#CACHE{3600*100} \ No newline at end of file diff --git a/www/plugins/compositions_v3/compositions_administrations.php b/www/plugins/compositions_v3/compositions_administrations.php new file mode 100644 index 00000000..20393d99 --- /dev/null +++ b/www/plugins/compositions_v3/compositions_administrations.php @@ -0,0 +1,80 @@ + \ No newline at end of file diff --git a/www/plugins/compositions_v3/compositions_fonctions.php b/www/plugins/compositions_v3/compositions_fonctions.php new file mode 100644 index 00000000..88dcd56f --- /dev/null +++ b/www/plugins/compositions_v3/compositions_fonctions.php @@ -0,0 +1,451 @@ +array('type' => $type,'informer' => $informer), + 'data'=> $res + ) + ); + return $res; +} + +/** + * Liste les id d'un type donne utilisant une composition donnee + * + * @param string $type + * @param string $composition + * @return array + */ +function compositions_lister_utilisations($type,$composition){ + $table_sql = table_objet_sql($type); + if (!in_array($table_sql, sql_alltable())) return; + $_id_table_objet = id_table_objet($type); + return sql_allfetsel("$_id_table_objet as id,titre", $table_sql, "composition=".sql_quote($composition)); +} + +/** + * Selectionner le fond en fonction du type et de la composition + * en prenant en compte la configuration pour le chemin + * et le fait que la composition a pu etre supprimee + * + * @param string $composition + * @param string $type + * @param string $defaut + * @param string $ext + * @param bool $fullpath + * @param string $vide + * @return string + */ +function compositions_selectionner($composition,$type,$defaut="",$ext="html",$fullpath = false, $vide="composition-vide"){ + if ($type=='syndic') $type='site'; //grml + $fond = compositions_chemin() . $type; + + // regarder si compositions/article-xxx est disponible + if (strlen($composition) + AND $f = find_in_path("$fond-$composition.$ext")) + return $fullpath ? $f : $fond . "-$composition"; + else + // sinon regarder si compositions/article-defaut est disponible + if (strlen($defaut) + AND $f = find_in_path("$fond-$defaut.$ext")) + return $fullpath ? $f : $fond . "-$defaut"; + + // se rabattre sur compositions/article si disponible + if ($f = find_in_path("$fond.$ext")) + return $fullpath ? $f : $fond; + + // sinon une composition vide pour ne pas generer d'erreur + if ($vide AND $f = find_in_path("$vide.$ext")) + return $fullpath ? $f : $vide; + + // rien mais ca fera une erreur dans le squelette si appele en filtre + return ''; +} + +/** + * Decrire une composition pour un objet + * @param string $type + * @param string $composition + * @return array|bool|string + */ +function compositions_decrire($type, $composition){ + static $compositions = array(); + if (!function_exists('compositions_charger_infos')) + include_spip('inc/compositions'); + if ($type=='syndic') $type='site'; //grml + if (isset($compositions[$type][$composition])) + return $compositions[$type][$composition]; + $ext = "html"; + $fond = compositions_chemin() . $type; + if (strlen($composition) + AND $f = find_in_path("$fond-$composition.$ext") + AND $desc = compositions_charger_infos($f)) + return $compositions[$type][$composition] = $desc; + return $compositions[$type][$composition] = false; +} + +/** + * Un filtre a utiliser sur [(#COMPOSITION|composition_class{#ENV{type}})] + * pour poser des classes generiques sur le + * si une balise toto est definie dans la composition c'est elle qui est appliquee + * sinon on pose simplement le nom de la composition + * + * @param string $composition + * @param string $type + * @return string + */ +function composition_class($composition,$type){ + if ($desc = compositions_decrire($type, $composition) + AND isset($desc['class']) + AND strlen($desc['class'])) + return $desc['class']; + return $composition; +} + +/** + * Liste les types d'objets qui ont une composition ET sont autorises par la configuration + * utilise la valeur en cache meta sauf si demande de recalcul + * ou pas encore definie + * + * @staticvar array $liste + * @return array + */ +function compositions_types(){ + static $liste = null; + if (is_null($liste)) { + if (_VAR_MODE OR !isset($GLOBALS['meta']['compositions_types'])){ + include_spip('inc/compositions'); + compositions_cacher(); + } + $liste = explode(',',$GLOBALS['meta']['compositions_types']); + } + return $liste; +} + +/** + * Renvoie les parametres necessaires pour utiliser l'heritage de composition de façon generique + * recupere les donnes du pipeline compositions_declarer_heritage. + * Si $type n'est pas precise, on renvoie simplement le tableau des objets pouvant heriter. + * + * @param string $type + * @staticvar array $heritages + * @return array + */ +function compositions_recuperer_heritage($type=NULL){ + static $heritages = NULL; + if (is_null($heritages)) // recuperer les heritages declares via le pipeline compositions_declarer_heritage + $heritages = pipeline('compositions_declarer_heritage', array()); + + if (is_null($type)) + return $heritages; + + if (array_key_exists($type, $heritages)) { + $type_parent = $heritages[$type]; + $table_parent = table_objet_sql($type_parent); + $nom_id_parent = ($type==$type_parent) ? 'id_parent' : id_table_objet($type_parent); // Recursivite pour les rubriques, nom de l'identifiant du parent dans la table enfant + $nom_id_table_parent = id_table_objet($type_parent); // Nom de l'identifiant du parent dans la table parent + + // verifier que table et champs existent... + $trouver_table = charger_fonction('trouver_table', 'base'); + if (!$type_parent + OR !$desc = $trouver_table($table_parent) + OR !isset($desc['field']['composition']) + OR !isset($desc['field'][$nom_id_parent])) + return ''; + + return array( + 'type_parent' => $type_parent, + 'table_parent' => $table_parent, + 'nom_id_parent' => $nom_id_parent, + 'nom_id_table_parent' => $nom_id_table_parent + ); + } + return array(); +} + +/** + * Renvoie la composition qui s'applique a un objet + * en tenant compte, le cas echeant, de la composition heritee + * si etoile=true on renvoi directment le champ sql + * + * @param string $type + * @param integer $id + * @param string $serveur + * @param bool $etoile + * @return string + */ +function compositions_determiner($type, $id, $serveur='', $etoile = false){ + static $composition = array(); + $id = intval($id); + + if (isset($composition[$etoile][$serveur][$type][$id])) + return $composition[$etoile][$serveur][$type][$id]; + + include_spip('base/abstract_sql'); + $table = table_objet($type); + $table_sql = table_objet_sql($type); + $_id_table = id_table_objet($type); + + $retour = ''; + + $trouver_table = charger_fonction('trouver_table', 'base'); + $desc = $trouver_table($table,$serveur); + if (isset($desc['field']['composition']) AND $id){ + $select = "composition"; + + $heritage = compositions_recuperer_heritage($type); + if (isset($desc['field'][$heritage['nom_id_parent']])) + $select .= ', '.$heritage['nom_id_parent'].' as id_parent'; + + $row = sql_fetsel($select, $table_sql, "$_id_table=".intval($id), '', '', '', '', $serveur); + if ($row['composition'] != '') + $retour = $row['composition']; + elseif (!$etoile + AND isset($row['id_parent']) + AND $row['id_parent']) + $retour = compositions_heriter($type, $id, $row['id_parent'], $serveur); + } + return $composition[$etoile][$serveur][$type][$id] = (($retour == '-') ? '' : $retour); +} + +/** + * Renvoie la composition heritee par un objet selon son identifiant. + * Optionnellement, on peut lui transmettre directement l'id du parent s'il a ate calcule. + * + * @param string $type + * @param integer $id + * @param integer $id_parent + * @param string $serveur + * @return string + */ +function compositions_heriter($type, $id, $id_parent=NULL, $serveur=''){ + if ($type=='syndic') $type='site'; //grml + if (intval($id) < 1) return ''; + static $infos = null; + $compo_parent = ''; + + $heritage = compositions_recuperer_heritage($type); + $type_parent = $heritage['type_parent']; + $table_parent = $heritage['table_parent']; + $nom_id_parent = $heritage['nom_id_parent']; + $nom_id_table_parent = $heritage['nom_id_table_parent']; + + if (is_null($id_parent)) + $id_parent = sql_getfetsel($nom_id_parent, table_objet_sql($type), id_table_objet($type).'='.intval($id)); + + $heritages = compositions_recuperer_heritage(); + + do { + $select = 'composition'; + if ($heritages[$type_parent]==$type_parent) // S'il y a recursivite sur le parent + $select .= ', id_parent'; + $row = sql_fetsel($select, $table_parent, $nom_id_table_parent.'='.intval($id_parent),'','','','',$serveur); + if (strlen($row['composition']) AND $row['composition']!='-') + $compo_parent = $row['composition']; + elseif (strlen($row['composition'])==0 AND isset($heritages[$type_parent])) // Si le parent peut heriter, il faut verifier s'il y a heritage + $compo_parent = compositions_determiner($type_parent, $id_parent, $serveur=''); + + if (strlen($compo_parent) AND is_null($infos)) + $infos = compositions_lister_disponibles(''); + + } + while ($id_parent = $row['id_parent'] + AND + (!strlen($compo_parent) OR !isset($infos[$type_parent][$compo_parent]['branche'][$type]))); + + if (strlen($compo_parent) AND isset($infos[$type_parent][$compo_parent]['branche'][$type])) + return $infos[$type_parent][$compo_parent]['branche'][$type]; + + return ''; +} + +/** + * #COMPOSITION + * Renvoie la composition s'appliquant a un objet + * en tenant compte, le cas echeant, de l'heritage. + * + * Sans precision, l'objet et son identifiant sont pris + * dans la boucle en cours, mais l'on peut specifier notre recherche + * en passant objet et id_objet en argument de la balise : + * #COMPOSITION{article, 8} + * + * #COMPOSITION* renvoie toujours le champs brut, sans tenir compte de l'heritage + * + * @param array $p AST au niveau de la balise + * @return array AST->code modifie pour calculer le nom de la composition + */ +function balise_COMPOSITION_dist($p) { + $_composition = ""; + if ($_objet = interprete_argument_balise(1, $p)) { + $_id_objet = interprete_argument_balise(2, $p); + } else { + $_composition = champ_sql('composition',$p); + $_id_objet = champ_sql($p->boucles[$p->id_boucle]->primary, $p); + $_objet = "objet_type('" . $p->boucles[$p->id_boucle]->id_table . "')"; + } + // si on veut le champ brut, et qu'on l'a sous la main, inutile d'invoquer toute la machinerie + if ($_composition AND $p->etoile) + $p->code = $_composition; + else { + $connect = $p->boucles[$p->id_boucle]->sql_serveur; + $p->code = "compositions_determiner($_objet, $_id_objet, '$connect', ".($p->etoile?'true':'false').")"; + // ne declencher l'usine a gaz que si composition est vide ... + if ($_composition) + $p->code = "((\$zc=$_composition)?(\$zc=='-'?'':\$zc):".$p->code.")"; + } + return $p; +} + +/** + * Indique si la composition d'un objet est verrouillee ou non, + * auquel cas, seul le webmaster peut la modifier + * + * @param string $type + * @param integer $id + * @param string $serveur + * @return string + */ +function compositions_verrouiller($type, $id, $serveur=''){ + $config = unserialize($GLOBALS['meta']['compositions']); + if (isset($config['tout_verrouiller']) AND $config['tout_verrouiller'] == 'oui') + return true; + + include_spip('base/abstract_sql'); + $table = table_objet($type); + $table_sql = table_objet_sql($type); + $_id_table = id_table_objet($type); + + $trouver_table = charger_fonction('trouver_table', 'base'); + $desc = $trouver_table($table,$serveur); + if (isset($desc['field']['composition_lock']) AND $id){ + $lock = sql_getfetsel('composition_lock', $table_sql, "$_id_table=".intval($id), '', '', '', '', $serveur); + if ($lock) + return true; + elseif (isset($desc['field']['id_rubrique'])) { + $id_rubrique = sql_getfetsel('id_rubrique', $table_sql, "$_id_table=".intval($id), '', '', '', '', $serveur); + return compositions_verrou_branche($id_rubrique, $serveur); + } + else + return false; + } + else return false; +} + +/** + * Indique si les objets d'une branche sont verrouilles + * @param integer $id_rubrique + * @param string $serveur + * @return string + */ +function compositions_verrou_branche($id_rubrique, $serveur=''){ + + if (intval($id_rubrique) < 1) return false; + if($infos_rubrique = sql_fetsel(array('id_parent','composition_branche_lock'),'spip_rubriques','id_rubrique='.intval($id_rubrique),'','','','',$serveur)) { + if ($infos_rubrique['composition_branche_lock']) + return true; + else + return compositions_verrou_branche($infos_rubrique['id_parent'],$serveur); + } + return ''; +} +?> diff --git a/www/plugins/compositions_v3/compositions_ieconfig.php b/www/plugins/compositions_v3/compositions_ieconfig.php new file mode 100644 index 00000000..ea5c5206 --- /dev/null +++ b/www/plugins/compositions_v3/compositions_ieconfig.php @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/www/plugins/compositions_v3/compositions_pipeline.php b/www/plugins/compositions_v3/compositions_pipeline.php new file mode 100644 index 00000000..32584c68 --- /dev/null +++ b/www/plugins/compositions_v3/compositions_pipeline.php @@ -0,0 +1,144 @@ +$type, + 'id'=>$id, + ) + ); + + if (($p = strpos($flux['data'],''))!==false) + $flux['data'] = substr_replace($flux['data'],$texte,$p,0); + else + $flux['data'] .= $texte; + } + } + } + + return $flux; +} + +/** + * Le pipeline compositions_declarer_heritage permet de declarer les heritages + * sous la forme : + * $heritages['objet'] = 'parent'; + * ce qui permet ensuite de faire dans le fichier parent-ma_compo.xml + * + * + * A partir de compositions 3.3.0 cette declaration est obligatoire. + * Les objets "standards" de SPIP sont declares ici. (a deplacer dans leurs plugins respectifs ?) + */ +function compositions_compositions_declarer_heritage($heritages){ + $heritages['mot'] = 'groupe_mots'; + $heritages['rubrique'] = 'rubrique'; + $heritages['article'] = 'rubrique'; + $heritages['breve'] = 'rubrique'; + $heritages['site'] = 'rubrique'; + return $heritages; +} + + +?> diff --git a/www/plugins/compositions_v3/formulaires/configurer_compositions.html b/www/plugins/compositions_v3/formulaires/configurer_compositions.html new file mode 100644 index 00000000..f43a62d2 --- /dev/null +++ b/www/plugins/compositions_v3/formulaires/configurer_compositions.html @@ -0,0 +1,49 @@ +
    +

    <:compositions:compositions:>

    + +[

    (#ENV*{message_ok})

    ] +[

    (#ENV*{message_erreur})

    ] + +
    + #ACTION_FORMULAIRE +
      + #SET{name,objets}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} +
    • + [ + (#GET{erreurs}) + ] + #INCLURE{fond=formulaires/inc-choisir-objets,name=#GET{name},selected=#ENV**{#GET{name},#LISTE{spip_articles,spip_rubriques}}} +
    • + +
    • + + [(#PLUGIN{z}|ou{#PLUGIN{zcore}}|non)
      <:compositions:label_chemin_compositions_details:>
      ] + +
    • + [(#PLUGIN{z}|ou{#PLUGIN{zcore}}|non)
    • + +
      + + +
      +
    • + ] +
    • + +
      + + +
      +
    • +
    • + +
      + + +
      +
    • +
    +

    +
    + +
    \ No newline at end of file diff --git a/www/plugins/compositions_v3/formulaires/configurer_compositions_fonctions.php b/www/plugins/compositions_v3/formulaires/configurer_compositions_fonctions.php new file mode 100644 index 00000000..99d8f571 --- /dev/null +++ b/www/plugins/compositions_v3/formulaires/configurer_compositions_fonctions.php @@ -0,0 +1,12 @@ + + [

    (#ENV*{message_ok})

    ] + [

    (#ENV*{message_erreur})

    ] + [(#ENV{editable}) +
    + [(#REM) declarer les hidden qui declencheront le service du formulaire + parametre : url d'action ] + #ACTION_FORMULAIRE{#ENV{action}} + ] + + <:compositions:composition_utilisee:> + [(#ENV{composition}|oui)[(#ENV{_compositions}|table_valeur{#ENV{composition}}|table_valeur{nom}|supprimer_numero|sinon{#ENV{composition}})] + ][(#ENV{composition}|non) + [(#ENV{composition_heritee}|oui) + [(#ENV{composition_heritee}|=={'-'}|oui)<:compositions:composition_defaut:>] + [(#ENV{composition_heritee}|!={'-'}|oui)[(#ENV{_compositions}|table_valeur{''}|table_valeur{nom}|supprimer_numero|sinon{#ENV{composition_heritee}})]] + (<:compositions:composition_heritee:>) + ] + [(#ENV{composition_heritee}|non)<:compositions:composition_defaut:>] + ][(#ENV{composition_verrouillee}|oui) ] + + + [(#ENV{editable}) + + ] +
    + [(#ENV{composition_verrouillee}|oui)

    <:compositions:composition_verrouillee:>

    ] +

    <:compositions:heritages:> #CLE (#VALEUR).

    +
    + + [(#ENV{editable}) +
      + #SET{fl,compositions} + #SET{name,composition}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}#SET{obli,''} + [
    • + + [(#GET{erreurs})] + (#INCLURE{fond=formulaires/inc-selecteur_composition}{name=#GET{name}}{id=#GET{name}}{id_rubrique}{selected=#ENV{#GET{name}}}{_compositions}{composition_heritee}) +
    • ] + + #SET{lock,''} + [(#AUTORISER{webmestre}|et{#ENV{verrou_branche}|non}|et{#CONFIG{compositions/tout_verrouiller}|non}|oui) + #SET{name,composition_lock}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}#SET{obli,''} +
    • + [(#GET{erreurs})] + + [(#ENV{_compositions}|is_array|oui) +
      + + +
      + ] + [(#ENV{_compositions}|is_array|non)] + [(#ENV{objet}|=={rubrique}|oui) + #SET{name,composition_branche_lock}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}#SET{obli,''} + [(#GET{erreurs})] +
      + + +
      + ] +
    • + #SET{lock,'oui'} + ] + [(#ENV{verrou_branche}|oui) +
    • + + <:compositions:label_branche_verrouillee:> +
    • + ] + [(#CONFIG{compositions/tout_verrouiller}|oui) +
    • + + <:compositions:label_toutes_verrouilles:> +
    • + ] +
    + [(#GET{lock}|non) + + [(#ENV{objet}|=={rubrique}|oui) + + ] + ] + + [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ] + +

    +   + + +

    +
    + ] +
    + \ No newline at end of file diff --git a/www/plugins/compositions_v3/formulaires/editer_composition_objet.php b/www/plugins/compositions_v3/formulaires/editer_composition_objet.php new file mode 100644 index 00000000..18e76891 --- /dev/null +++ b/www/plugins/compositions_v3/formulaires/editer_composition_objet.php @@ -0,0 +1,99 @@ +array('nom'=>_T('compositions:composition_defaut'),'description'=>'','icon'=>'','configuration'=>'')), + $valeurs['_compositions'] + ); + } + + // Si on herite d'une composition + // On modifie le tableau des compositions + if ($valeurs['composition_heritee'] AND $valeurs['composition_heritee'] != '-') { + $compo_defaut = $valeurs['_compositions'][$valeurs['composition_heritee']]; + $compo_vide = $valeurs['_compositions']['']; + unset($valeurs['_compositions'][$valeurs['composition_heritee']]); + unset($valeurs['_compositions']['']); + $valeurs['_compositions'] = array_merge( + array('' => $compo_defaut,'-' => $compo_vide), + $valeurs['_compositions'] + ); + } + + $valeurs['_hidden'] = ""; + + if (!autoriser('styliser',$type,$id)) + $valeurs['editable'] = false; + + return $valeurs; +} + +/** + * Traitement + * + * @param string $type + * @param int $id + * @return array + */ +function formulaires_editer_composition_objet_traiter($type,$id){ + $valeurs = array(); + $table_objet_sql = table_objet_sql($type); + $id_table_objet = id_table_objet($type); + $update = array(); + + if (!is_null($p = _request('composition'))) + $update['composition'] = $p; + + if (autoriser('webmestre')) + $update['composition_lock'] = _request('composition_lock')?1:0; + + if (autoriser('webmestre') AND $type == 'rubrique') + $update['composition_branche_lock'] = _request('composition_branche_lock')?1:0; + + sql_updateq($table_objet_sql,$update,"$id_table_objet=".intval($id)); + + // mettre a jour la liste des types de compo en cache + compositions_cacher(); + return array('message_ok'=>'','editable'=>true); +} \ No newline at end of file diff --git a/www/plugins/compositions_v3/formulaires/inc-informeur_composition.html b/www/plugins/compositions_v3/formulaires/inc-informeur_composition.html new file mode 100644 index 00000000..0ac26149 --- /dev/null +++ b/www/plugins/compositions_v3/formulaires/inc-informeur_composition.html @@ -0,0 +1,8 @@ + + +
    [(#VALEUR|table_valeur{icon}|image_reduire{24,24}|inserer_attribut{class,logo})] +[(#VALEUR|table_valeur{nom})] +[
    (#VALEUR|table_valeur{description})] +
    + +
    \ No newline at end of file diff --git a/www/plugins/compositions_v3/formulaires/inc-selecteur_composition.html b/www/plugins/compositions_v3/formulaires/inc-selecteur_composition.html new file mode 100644 index 00000000..d63dfc40 --- /dev/null +++ b/www/plugins/compositions_v3/formulaires/inc-selecteur_composition.html @@ -0,0 +1,7 @@ + + +
    + +
    + +
    \ No newline at end of file diff --git a/www/plugins/compositions_v3/images/composition-cours.png b/www/plugins/compositions_v3/images/composition-cours.png new file mode 100644 index 00000000..96fd1258 Binary files /dev/null and b/www/plugins/compositions_v3/images/composition-cours.png differ diff --git a/www/plugins/compositions_v3/images/composition-tableau.png b/www/plugins/compositions_v3/images/composition-tableau.png new file mode 100755 index 00000000..ce4f60ec Binary files /dev/null and b/www/plugins/compositions_v3/images/composition-tableau.png differ diff --git a/www/plugins/compositions_v3/images/composition-test.png b/www/plugins/compositions_v3/images/composition-test.png new file mode 100644 index 00000000..d4ba8cdb Binary files /dev/null and b/www/plugins/compositions_v3/images/composition-test.png differ diff --git a/www/plugins/compositions_v3/images/objet-liste-contenus-dates.png b/www/plugins/compositions_v3/images/objet-liste-contenus-dates.png new file mode 100644 index 00000000..8a092631 Binary files /dev/null and b/www/plugins/compositions_v3/images/objet-liste-contenus-dates.png differ diff --git a/www/plugins/compositions_v3/images/objet-liste-contenus.png b/www/plugins/compositions_v3/images/objet-liste-contenus.png new file mode 100644 index 00000000..0c39d8e7 Binary files /dev/null and b/www/plugins/compositions_v3/images/objet-liste-contenus.png differ diff --git a/www/plugins/compositions_v3/images/objet-simple.png b/www/plugins/compositions_v3/images/objet-simple.png new file mode 100644 index 00000000..1f387f34 Binary files /dev/null and b/www/plugins/compositions_v3/images/objet-simple.png differ diff --git a/www/plugins/compositions_v3/inc/compositions.php b/www/plugins/compositions_v3/inc/compositions.php new file mode 100644 index 00000000..f705be13 --- /dev/null +++ b/www/plugins/compositions_v3/inc/compositions.php @@ -0,0 +1,102 @@ + \ No newline at end of file diff --git a/www/plugins/compositions_v3/lang/compositions.xml b/www/plugins/compositions_v3/lang/compositions.xml new file mode 100644 index 00000000..0c8d758d --- /dev/null +++ b/www/plugins/compositions_v3/lang/compositions.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/www/plugins/compositions_v3/lang/compositions_en.php b/www/plugins/compositions_v3/lang/compositions_en.php new file mode 100644 index 00000000..56b47190 --- /dev/null +++ b/www/plugins/compositions_v3/lang/compositions_en.php @@ -0,0 +1,48 @@ + 'Composition', + 'composition_defaut' => 'default composition', + 'composition_heritee' => 'inherited', + 'composition_utilisee' => 'Used :', + 'composition_verrouillee' => 'This composition is locked by the webmaster', + 'compositions' => 'Compositions', + + // D + 'des_utilisations' => '@nb@ uses', + + // H + 'heritages' => 'This composition defines default compositions for the following objects:', + + // L + 'label_activer_composition_objets' => 'Use compositions on objects', + 'label_branche_verrouillee' => 'The compositions of this branch are locked.', + 'label_chemin_compositions' => 'Compositions folder', + 'label_chemin_compositions_details' => 'Specify the path where the skeletons will be found for composition.', + 'label_composition' => 'Type of composition', + 'label_composition_branche_lock' => 'Lock the composition of all objects in the branch', + 'label_composition_explication' => 'You are Webmaster, you can', + 'label_composition_lock' => 'Lock the composition', + 'label_composition_rubrique' => 'Sections composition', + 'label_information' => 'Information', + 'label_masquer_formulaire' => 'Hide the form', + 'label_masquer_formulaire_composition' => 'Hide the selection form of a composition when the user does not have the rights to edit it.', + 'label_pas_de_composition' => 'No composition', + 'label_styliser' => 'Selection of skeletons', + 'label_styliser_auto' => 'Do not use automatic selection. The selection is supported by my skeletons.', + 'label_tout_verrouiller' => 'Lock all', + 'label_toutes_verrouilles' => 'All compositions are locked.', + 'label_verrouiller_toutes_compositions' => 'Lock all compositions (only the webmasters can change them).', + + // U + 'une_utilisation' => '1 use' +); + +?> diff --git a/www/plugins/compositions_v3/lang/compositions_es.php b/www/plugins/compositions_v3/lang/compositions_es.php new file mode 100644 index 00000000..4c1aa3b0 --- /dev/null +++ b/www/plugins/compositions_v3/lang/compositions_es.php @@ -0,0 +1,48 @@ + 'Composición', + 'composition_defaut' => 'composición por defecto', + 'composition_heritee' => 'heredada', + 'composition_utilisee' => 'Composición:', + 'composition_verrouillee' => 'Esta composición esta cerrada por el administrador.', + 'compositions' => 'Composiciones', + + // D + 'des_utilisations' => '@nb@ utilizaciones', + + // H + 'heritages' => 'Esta composición define las composiciones por defecto para los siguientes objetos:', + + // L + 'label_activer_composition_objets' => 'Utilizar las composiciones en los objetos', + 'label_branche_verrouillee' => 'Las composiciones de esta rama están bloqueadas.', + 'label_chemin_compositions' => 'Carpeta de las composiciones', + 'label_chemin_compositions_details' => 'Indique el camino en el que buscar los esqueletos de composición.', + 'label_composition' => 'Composición', + 'label_composition_branche_lock' => 'Bloquear la composición de todos los objetos de la rama', + 'label_composition_explication' => 'Usted es administrador, puede', + 'label_composition_lock' => 'Bloquear la composición', + 'label_composition_rubrique' => 'Composición de las secciones', + 'label_information' => 'Información', + 'label_masquer_formulaire' => 'Ocultar el formulario', + 'label_masquer_formulaire_composition' => 'Ocultar el formulario de elección de una composición cuando el usuario no tenga los derechos para modificarla. ', + 'label_pas_de_composition' => ' Ninguna composición', + 'label_styliser' => 'Selección de los esqueletos', + 'label_styliser_auto' => 'No utilizar la selección automatica. La selección está implementada por mis esqueletos.', + 'label_tout_verrouiller' => 'Bloquear todo', + 'label_toutes_verrouilles' => 'Todas las composiciones están bloqueadas.', + 'label_verrouiller_toutes_compositions' => 'Bloquear todas las composiciones (sólo los administradores podrán modificarlas).', + + // U + 'une_utilisation' => '1 utilización' +); + +?> diff --git a/www/plugins/compositions_v3/lang/compositions_fr.php b/www/plugins/compositions_v3/lang/compositions_fr.php new file mode 100644 index 00000000..4384ab34 --- /dev/null +++ b/www/plugins/compositions_v3/lang/compositions_fr.php @@ -0,0 +1,46 @@ + 'Composition', + 'composition_defaut' => 'composition par défaut', + 'composition_heritee' => 'héritée', + 'composition_utilisee' => 'Composition :', + 'composition_verrouillee' => 'Cette composition est verrouillé par le webmestre.', + 'compositions' => 'Compositions', + + // D + 'des_utilisations' => '@nb@ utilisations', + + // H + 'heritages' => 'Cette composition définit des compositions par défaut pour les objets suivants :', + + // L + 'label_activer_composition_objets' => 'Utiliser les compositions sur les objets', + 'label_branche_verrouillee' => 'Les compositions de cette branche sont verrouillées.', + 'label_chemin_compositions' => 'Dossier des compositions', + 'label_chemin_compositions_details' => 'Indiquez le chemin dans lequel seront recherchés les squelettes de composition.', + 'label_composition' => 'Composition', + 'label_composition_branche_lock' => 'Verrouiller la composition de tous les objets de la branche', + 'label_composition_explication' => 'Vous êtes Webmestre, vous pouvez', + 'label_composition_lock' => 'Verrouiller la composition', + 'label_composition_rubrique' => 'Composition des rubriques', + 'label_information' => 'Information', + 'label_masquer_formulaire' => 'Masquer le formulaire', + 'label_masquer_formulaire_composition' => 'Masquer le formulaire de choix d\'une composition lorsque l\'utilisateur n\'a pas les droits de la modifier.', + 'label_pas_de_composition' => 'Aucune composition', + 'label_styliser' => 'Sélection des squelettes', + 'label_styliser_auto' => 'Ne pas utiliser la sélection automatique. La sélection est prise en charge par mes squelettes.', + 'label_tout_verrouiller' => 'Tout verrouiller', + 'label_toutes_verrouilles' => 'Toutes les compositions sont verrouillées.', + 'label_verrouiller_toutes_compositions' => 'Verrouiller toutes les compositions (seuls les webmestres pourront les modifier).', + + // U + 'une_utilisation' => '1 utilisation' +); + +?> diff --git a/www/plugins/compositions_v3/lang/compositions_ru.php b/www/plugins/compositions_v3/lang/compositions_ru.php new file mode 100644 index 00000000..6cf56ccd --- /dev/null +++ b/www/plugins/compositions_v3/lang/compositions_ru.php @@ -0,0 +1,48 @@ + 'Шаблон страницы', + 'composition_defaut' => 'шаблон по умолчанию', + 'composition_heritee' => 'унаследован', + 'composition_utilisee' => 'Используется:', + 'composition_verrouillee' => 'Возможность сменить шаблон заблокирована вебмастером.', + 'compositions' => 'Шаблоны страниц', + + // D + 'des_utilisations' => '@nb@ используется', + + // H + 'heritages' => 'Этот шаблон определяет шаблоны страниц по умолчанию для следующих объектов:', + + // L + 'label_activer_composition_objets' => 'Использовать выбор шаблонов для объектов', + 'label_branche_verrouillee' => 'Выбор шаблонов в этой ветке заблокирован вебмастером.', + 'label_chemin_compositions' => 'Папка с шаблонами', + 'label_chemin_compositions_details' => 'Укажите папку в которой находятся файлы шаблонов.', + 'label_composition' => 'Доступные шаблоны', + 'label_composition_branche_lock' => 'Заблокировать возможность менять шаблон для всех объектов в этой ветке', + 'label_composition_explication' => 'У вас права вебмастера, вы можете', + 'label_composition_lock' => 'Заблокировать шаблон', + 'label_composition_rubrique' => 'Шаблон для разделов', + 'label_information' => 'Информация', + 'label_masquer_formulaire' => 'Спрятать форму', + 'label_masquer_formulaire_composition' => 'Скрывать форму выбора шаблона страницы для пользователей, у которых нет прав их менять.', + 'label_pas_de_composition' => 'Нет шаблонов', + 'label_styliser' => 'Выбор шаблонов страниц', + 'label_styliser_auto' => 'Не использовать автоматический выбор. Выбор поддерживается моими шаблонами.', + 'label_tout_verrouiller' => 'Заблокировать все шабоны', + 'label_toutes_verrouilles' => 'Все шаблоны заблокированы.', + 'label_verrouiller_toutes_compositions' => 'Заблокировать все шаблоны(только вебмастер сайта может их менять).', + + // U + 'une_utilisation' => '1 использование' +); + +?> diff --git a/www/plugins/compositions_v3/lang/compositions_sk.php b/www/plugins/compositions_v3/lang/compositions_sk.php new file mode 100644 index 00000000..76684b3e --- /dev/null +++ b/www/plugins/compositions_v3/lang/compositions_sk.php @@ -0,0 +1,48 @@ + 'Rozmiestnenie', + 'composition_defaut' => 'predvolené rozmiestnenie', + 'composition_heritee' => 'zdedené', + 'composition_utilisee' => 'Rozmiestnenie:', + 'composition_verrouillee' => 'Toto rozmiestnenie webmaster zamkol.', + 'compositions' => 'Rozmiestnenia', + + // D + 'des_utilisations' => '@nb@ použití', + + // H + 'heritages' => 'Toto rozmiestnenie je predvolených rozmiestnením pre tieto objekty:', + + // L + 'label_activer_composition_objets' => 'Rozmiestnenia používať na objekty', + 'label_branche_verrouillee' => 'Rozmiestnenia tejto vetvy sú zamknuté.', + 'label_chemin_compositions' => 'Priečinok s rozmiestneniami', + 'label_chemin_compositions_details' => 'Zadajte umiestnenie, v ktorom sa budú hľadať šablóny rozmiestnenia.', + 'label_composition' => 'Rozmiestnenie', + 'label_composition_branche_lock' => 'Zamknúť rozmiestnenie všetkých objektov vetvy', + 'label_composition_explication' => 'Vy ste webmaster, môžete', + 'label_composition_lock' => 'Zamknúť rozmiestnenie', + 'label_composition_rubrique' => 'Rozmiestnenie pre rubriky', + 'label_information' => 'Informácie', + 'label_masquer_formulaire' => 'Schovať formulár', + 'label_masquer_formulaire_composition' => 'Schovať formulár s výberom rozmiestnenia, ak ho používateľ nemá právo meniť.', + 'label_pas_de_composition' => 'Žiadne rozmiestnenie', + 'label_styliser' => 'Výber šablón', + 'label_styliser_auto' => 'Nepoužívajte automatický výber. Výber podporujú moje šablóny.', + 'label_tout_verrouiller' => 'Zamknúť všetky', + 'label_toutes_verrouilles' => 'Všetky rozmiestnenia sú zamknuté.', + 'label_verrouiller_toutes_compositions' => 'Zamknúť všetky rozmiestnenia (môže to zmeniť len webmaster).', + + // U + 'une_utilisation' => '1 použitie' +); + +?> diff --git a/www/plugins/compositions_v3/lang/paquet-compositions.xml b/www/plugins/compositions_v3/lang/paquet-compositions.xml new file mode 100644 index 00000000..bf5b3851 --- /dev/null +++ b/www/plugins/compositions_v3/lang/paquet-compositions.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/www/plugins/compositions_v3/lang/paquet-compositions_en.php b/www/plugins/compositions_v3/lang/paquet-compositions_en.php new file mode 100644 index 00000000..e89f0465 --- /dev/null +++ b/www/plugins/compositions_v3/lang/paquet-compositions_en.php @@ -0,0 +1,16 @@ + 'This plugin allows you to define several variants of compositions for each kind of SPIP objects (article, sections, etc..) and to easily apply them, case by case, from the private area.', + 'compositions_nom' => 'Compositions', + 'compositions_slogan' => 'Differ page layouts according to sections, articles...' +); + +?> diff --git a/www/plugins/compositions_v3/lang/paquet-compositions_es.php b/www/plugins/compositions_v3/lang/paquet-compositions_es.php new file mode 100644 index 00000000..8acdb0e1 --- /dev/null +++ b/www/plugins/compositions_v3/lang/paquet-compositions_es.php @@ -0,0 +1,16 @@ + 'Este plugin le permite definir diversas variantes de composiciones para cada tipo de objeto SPIP (artículo, sección, etcétera) y aplicarlas, simplemente, caso por caso, desde el espacio privado.', + 'compositions_nom' => 'Composiciones', + 'compositions_slogan' => 'Variar los formateos según las secciones, los artículos...' +); + +?> diff --git a/www/plugins/compositions_v3/lang/paquet-compositions_fr.php b/www/plugins/compositions_v3/lang/paquet-compositions_fr.php new file mode 100644 index 00000000..374952ef --- /dev/null +++ b/www/plugins/compositions_v3/lang/paquet-compositions_fr.php @@ -0,0 +1,14 @@ + 'Ce plugin vous permet de définir plusieurs variantes de compositions pour chaque type objet SPIP (article, rubrique, etc.) et de les appliquer simplement, cas par cas, depuis l\'espace privé.', + 'compositions_nom' => 'Compositions', + 'compositions_slogan' => 'Varier les mises en page selon les rubriques, les articles...' +); + +?> diff --git a/www/plugins/compositions_v3/lang/paquet-compositions_ru.php b/www/plugins/compositions_v3/lang/paquet-compositions_ru.php new file mode 100644 index 00000000..2c5a3a62 --- /dev/null +++ b/www/plugins/compositions_v3/lang/paquet-compositions_ru.php @@ -0,0 +1,16 @@ + 'Этот плагин позволяет вам задавать определенный шаблон вывода для конкретного раздела, статьи и т.д. ', + 'compositions_nom' => 'Шаблоны страниц (Compositions)', + 'compositions_slogan' => 'Возможность задавать определенный шаблон для вывода статьи, раздела и т.д.' +); + +?> diff --git a/www/plugins/compositions_v3/lang/paquet-compositions_sk.php b/www/plugins/compositions_v3/lang/paquet-compositions_sk.php new file mode 100644 index 00000000..e282cd8f --- /dev/null +++ b/www/plugins/compositions_v3/lang/paquet-compositions_sk.php @@ -0,0 +1,16 @@ + 'Tento zásuvný modul vám umožňuje definovať niekoľko variantov rozmiestnenia pre každý typ objektu SPIPu (článok, rubrika, atď.) a jednoducho ho rad radom použiť zo súkromnej zóny.', + 'compositions_nom' => 'Rozmiestnenia', + 'compositions_slogan' => 'Meňte rozmiestnenie podľa rubrík, článkov, atď.' +); + +?> diff --git a/www/plugins/compositions_v3/paquet.xml b/www/plugins/compositions_v3/paquet.xml new file mode 100644 index 00000000..81d5892b --- /dev/null +++ b/www/plugins/compositions_v3/paquet.xml @@ -0,0 +1,39 @@ + + + Compositions + + + Cedric Morin + + 2007-2012 + + GPL 3 + + + + + + + + + + + + + + + + + + + + diff --git a/www/plugins/compositions_v3/prive/editer/compositions.html b/www/plugins/compositions_v3/prive/editer/compositions.html new file mode 100644 index 00000000..e448f8ef --- /dev/null +++ b/www/plugins/compositions_v3/prive/editer/compositions.html @@ -0,0 +1 @@ +[
    (#FORMULAIRE_EDITER_COMPOSITION_OBJET{#ENV{type},#ENV{id}})
    ] diff --git a/www/plugins/compositions_v3/prive/squelettes/contenu/compositions.html b/www/plugins/compositions_v3/prive/squelettes/contenu/compositions.html new file mode 100644 index 00000000..aef0debb --- /dev/null +++ b/www/plugins/compositions_v3/prive/squelettes/contenu/compositions.html @@ -0,0 +1,28 @@ +#SET{compositions,#REM|compositions_lister_disponibles} + + +

    [(#CLE|table_objet|ucfirst)]

    +
      + +
    • + [(#VALEUR|table_valeur{icon}|image_reduire{24,24}|inserer_attribut{class,logo})] +

      [(#VALEUR|table_valeur{nom}|supprimer_numero)]

      + [
      (#VALEUR|table_valeur{description})
      ] + + +
      <:compositions:heritages:> #CLE (#VALEUR).
      +
      + + + [(#TOTAL_BOUCLE|singulier_ou_pluriel{compositions:une_utilisation,compositions:des_utilisations})] + + +
    • + +
    +
    + \ No newline at end of file diff --git a/www/plugins/compositions_v3/prive/squelettes/contenu/configurer_compositions.html b/www/plugins/compositions_v3/prive/squelettes/contenu/configurer_compositions.html new file mode 100644 index 00000000..e148f111 --- /dev/null +++ b/www/plugins/compositions_v3/prive/squelettes/contenu/configurer_compositions.html @@ -0,0 +1,6 @@ +[(#AUTORISER{configurer,composition}|sinon_interdire_acces)] + +

    <:compositions:compositions:>

    +
    + #FORMULAIRE_CONFIGURER_COMPOSITIONS +
    \ No newline at end of file diff --git a/www/plugins/compositions_v3/prive/style_prive_plugin_compositions.html b/www/plugins/compositions_v3/prive/style_prive_plugin_compositions.html new file mode 100644 index 00000000..29a74e03 --- /dev/null +++ b/www/plugins/compositions_v3/prive/style_prive_plugin_compositions.html @@ -0,0 +1,23 @@ +[(#REM) + + +
    +Glissez un document ou une image dans cette zone pour l'ajouter à l'article. + +
      + +
    • #MODELE{uploader_item,id_document}
    • + +[] + +
    + + +
    + + \ No newline at end of file diff --git a/www/plugins/crayons/paquet.xml b/www/plugins/crayons/paquet.xml new file mode 100644 index 00000000..df6437fe --- /dev/null +++ b/www/plugins/crayons/paquet.xml @@ -0,0 +1,21 @@ + + Crayons + + Fil + toggg + + GNU/GPL + + + + + + diff --git a/www/plugins/crayons/plugin.xml b/www/plugins/crayons/plugin.xml new file mode 100644 index 00000000..33c1c674 --- /dev/null +++ b/www/plugins/crayons/plugin.xml @@ -0,0 +1,59 @@ + + + + Crayons + [ar]القلم + [it]Pennarelli + [de]Der Stift + [en]Pencils + [ru]Карандаш + + + + Fil, toggg + + + © 2006-2013 - GNU/GPL + + + 1.16.1 + + + stable + + + + Édition rapide depuis les pages publiques du site. + [it] Modifica rapida dalle pagine pubbliche del sito. + [ar]هذا الملحق، {{المتوافر للاصدار ١.٩.٢ فقط}} يقدم وظائف تحرير سريعة من في صفحات الموقع العمومي. للاستفادة منه يجب انشاء صفحات نموذجية متوافقة معه. + +كما في صفحات الاصدار 1.9.2 النموذجية يكفي ادخال علامة {#EDIT} في كل مكان نريد تحريره. مثلاً، ليصبح العنوان قابل للتحرير: +_

    #TITRE

    . + [de]Änderungen in öffentlichen Seiten direkt erledigen, Vorausetzung für Wikis mit SPIP + [en]Quick editing from the public pages of the site. + [ru]Позволяет редактировать информацию прямо на сайте, не заходя в административную часть. +
    +
    + http://www.spip-contrib.net/Les-Crayons + + Crayons + + + images/crayon-128.png + + crayons_fonctions.php + + affichage_final + crayons_fonctions.php + + + header_prive + insert_head + crayons_fonctions.php + + + edition + + + +
    diff --git a/www/plugins/crayons/prive/squelettes/contenu/configurer_crayons.html b/www/plugins/crayons/prive/squelettes/contenu/configurer_crayons.html new file mode 100644 index 00000000..14a73889 --- /dev/null +++ b/www/plugins/crayons/prive/squelettes/contenu/configurer_crayons.html @@ -0,0 +1,5 @@ +#CACHE{0} +[(#AUTORISER{configurer}|sinon_interdire_acces)] +
    +#FORMULAIRE_CONFIGURER_CRAYONS +
    diff --git a/www/plugins/crayons/svn.revision b/www/plugins/crayons/svn.revision new file mode 100644 index 00000000..7ffcffa0 --- /dev/null +++ b/www/plugins/crayons/svn.revision @@ -0,0 +1,10 @@ + + +Origine: file:///home/svn/repository/spip-zone/_plugins_/crayons +Revision: 73111 +Dernier commit: 2013-05-31 10:42:21 +0200 + +file:///home/svn/repository/spip-zone/_plugins_/crayons +73111 +2013-05-31 10:42:21 +0200 + \ No newline at end of file diff --git a/www/plugins/crayons/tetecrayons.php b/www/plugins/crayons/tetecrayons.php new file mode 100644 index 00000000..ffa6c8a5 --- /dev/null +++ b/www/plugins/crayons/tetecrayons.php @@ -0,0 +1,10 @@ + diff --git a/www/plugins/crayons/vues/article_intro.html b/www/plugins/crayons/vues/article_intro.html new file mode 100644 index 00000000..f9fcdbf4 --- /dev/null +++ b/www/plugins/crayons/vues/article_intro.html @@ -0,0 +1,9 @@ +[(#REM) + + Vue pour le crayon 'article_intro' + +] +#CACHE{0} + +#INTRODUCTION + diff --git a/www/plugins/crayons/vues/article_intro2.html b/www/plugins/crayons/vues/article_intro2.html new file mode 100644 index 00000000..9e62a1f6 --- /dev/null +++ b/www/plugins/crayons/vues/article_intro2.html @@ -0,0 +1,9 @@ +[(#REM) + + Vue pour le crayon 'article_intro3' + +] +#CACHE{0} + +#INTRODUCTION + diff --git a/www/plugins/crayons/vues/article_intro3.html b/www/plugins/crayons/vues/article_intro3.html new file mode 100644 index 00000000..9e62a1f6 --- /dev/null +++ b/www/plugins/crayons/vues/article_intro3.html @@ -0,0 +1,9 @@ +[(#REM) + + Vue pour le crayon 'article_intro3' + +] +#CACHE{0} + +#INTRODUCTION + diff --git a/www/plugins/crayons/vues/article_introduction.html b/www/plugins/crayons/vues/article_introduction.html new file mode 100644 index 00000000..d5ae81e6 --- /dev/null +++ b/www/plugins/crayons/vues/article_introduction.html @@ -0,0 +1,9 @@ +[(#REM) + + Vue pour le crayon 'article_introduction' + +] +#CACHE{0} + +#INTRODUCTION + diff --git a/www/plugins/crayons/vues/article_texte.html b/www/plugins/crayons/vues/article_texte.html new file mode 100644 index 00000000..52621133 --- /dev/null +++ b/www/plugins/crayons/vues/article_texte.html @@ -0,0 +1,23 @@ +[(#REM) + + Vue pour le crayon 'article_texte' + + Juste pour le bonheur de tester les limites : la classe + imagereduire.NNN associee a #EDIT{texte} provoque l'application + du filtre |image_reduire{NNN,0} + +] +#CACHE{0} + +[(#REM) met dans la variable r la valeur de la class ] +[(#SET{r,[(#ENV{class}|match{\bimagereduire\.\d+\b}|match{\b\d+\b})]})] + + +[(#GET{r}|?{ + [(#TEXTE|image_reduire{#GET{r},0})] +, + [(#TEXTE|image_reduire{500,0})] +})] + + +[(#NOTES)] diff --git a/www/plugins/crayons/vues/document_fichier.html b/www/plugins/crayons/vues/document_fichier.html new file mode 100644 index 00000000..163d7f3a --- /dev/null +++ b/www/plugins/crayons/vues/document_fichier.html @@ -0,0 +1,11 @@ +[(#REM) + + Vue pour le controleur de document + +] + + + +[(#VAL{}|propre)] + + \ No newline at end of file diff --git a/www/plugins/crayons/vues/extra.html b/www/plugins/crayons/vues/extra.html new file mode 100644 index 00000000..4e80b8fe --- /dev/null +++ b/www/plugins/crayons/vues/extra.html @@ -0,0 +1,31 @@ +[(#REM) + + Vue pour le crayon 'extra' + +] +#CACHE{0} + + +[(#EXTRA**|extra_affichage{auteurs})] + + + +[(#EXTRA**|extra_affichage{articles})] + + + +[(#EXTRA**|extra_affichage{breves})] + + + +[(#EXTRA**|extra_affichage{rubriques})] + + + +[(#EXTRA**|extra_affichage{sites})] + + + + + + diff --git a/www/plugins/crayons/vues/extra_fonctions.php b/www/plugins/crayons/vues/extra_fonctions.php new file mode 100644 index 00000000..9dacf6ea --- /dev/null +++ b/www/plugins/crayons/vues/extra_fonctions.php @@ -0,0 +1,7 @@ + \ No newline at end of file diff --git a/www/plugins/crayons/vues/hyperlien.html b/www/plugins/crayons/vues/hyperlien.html new file mode 100644 index 00000000..2c1d3523 --- /dev/null +++ b/www/plugins/crayons/vues/hyperlien.html @@ -0,0 +1,30 @@ +[(#REM) + + Vue pour le crayon 'hyperlien' + +] +#CACHE{0} + +[(#REM) Cas general ] +#SET{titre,#ENV*{nom_site}} +#SET{url,#ENV*{url_site}} + +[(#REM) syndic-article ] +[(#ENV{id_syndic_article}|?{ + [(#SET{titre,#ENV*{titre}})] + [(#SET{url,#ENV*{url}})] +})] + +[(#REM) breve ] +[(#ENV{id_breve}|?{ + [(#SET{titre,#ENV*{lien_titre}})] + [(#SET{url,#ENV*{lien_url}})] +})] + +[(#ENV{id_article}|?{' '})<:voir_en_ligne:> :] + +[(#GET{url}|?{ + [(#GET{titre}|typo|sinon{[(#GET{url}|couper{80})]})] +, + [(#GET{titre}|typo|sinon{<:info_sans_titre:>})] +})] \ No newline at end of file diff --git a/www/plugins/crayons/vues/id_parent.html b/www/plugins/crayons/vues/id_parent.html new file mode 100644 index 00000000..046d2050 --- /dev/null +++ b/www/plugins/crayons/vues/id_parent.html @@ -0,0 +1,11 @@ +[(#REM) + + Vue pour le crayon id_parent + Cf. controleurs/id_parent.html + + nb: teste sur les articles uniquement +] + + +#TITRE + diff --git a/www/plugins/crayons/vues/logo.html b/www/plugins/crayons/vues/logo.html new file mode 100644 index 00000000..57183f26 --- /dev/null +++ b/www/plugins/crayons/vues/logo.html @@ -0,0 +1,37 @@ +[(#REM) + + Vue du logo qu'on vient d'uploader + + On doit hacker l'url du logo avec sa date pour eviter le cache du navigateur + +] + +[(#REM) En fonction de du contexte, choisir un logo ] + +[(#SET{image,[(#ID_ARTICLE|?{#LOGO_ARTICLE_NORMAL} + |sinon{[(#ID_AUTEUR|?{#LOGO_AUTEUR_NORMAL})]} + |sinon{[(#ID_BREVE|?{#LOGO_BREVE_NORMAL})]} + |sinon{[(#ID_RUBRIQUE|?{#LOGO_RUBRIQUE_NORMAL})]} + |sinon{[(#ID_SYNDIC_ARTICLE|?{#LOGO_SYNDIC_ARTICLE_NORMAL})]} + |sinon{[(#ID_SYNDIC|?{#LOGO_SITE_NORMAL})]} + |sinon{[(#ID_MOT|?{#LOGO_MOT_NORMAL})]})]})] + + +[(#REM) Si la class contient resize-XXX, on appliquera ce filtre au logo ] + +[(#SET{resize,[(#ENV{class}|match{\bresize-\d+\b}|replace{resize-})]})] + + +[(#GET{image}|?{ + + [(#SET{logo,[(#GET{image} + |image_reduire{#GET{resize,0},#GET{resize,120}})]})] + [(#SET{url,[(#GET{logo}|extraire_attribut{src}|replace{\?.*$})]})] + [(#SET{url,[(#GET{url}|parametre_url{s,#EVAL{time()}})]})] + [(#SET{width,[(#GET{logo}|extraire_attribut{width})]})] + + [(#GET{logo}|inserer_attribut{src,#GET{url}})] + +, + '?' +})] diff --git a/www/plugins/crayons/vues/mots_article_brut.html b/www/plugins/crayons/vues/mots_article_brut.html new file mode 100644 index 00000000..4b0d461a --- /dev/null +++ b/www/plugins/crayons/vues/mots_article_brut.html @@ -0,0 +1,17 @@ +[(#REM) + + Vue pour le crayon 'mots_article_brut' + +] +#CACHE{0} + + +

      Mots-clé pour #TITRE (#ID_ARTICLE)

      + +
    • #ID_GROUPE:#ID_MOT : [(#TITRE|entites_html)]
    • + +
    +
    +

    Pas de mot-clé existant

    + + diff --git a/www/plugins/crayons/vues/qui.html b/www/plugins/crayons/vues/qui.html new file mode 100644 index 00000000..a9b0b62a --- /dev/null +++ b/www/plugins/crayons/vues/qui.html @@ -0,0 +1,21 @@ +[(#REM) + + Vue pour le crayon 'qui' + +] +#CACHE{0} + + +[][(#NOM|sinon{#EMAIL})][(#EMAIL|?{})] + + + +[][(#NOM|sinon{#EMAIL})][(#EMAIL|?{})] + + + +[][(#NOM|sinon{#EMAIL})][(#EMAIL|?{})] + + + + diff --git a/www/plugins/crayons/vues/rubrique_id_parent.html b/www/plugins/crayons/vues/rubrique_id_parent.html new file mode 100644 index 00000000..bc186858 --- /dev/null +++ b/www/plugins/crayons/vues/rubrique_id_parent.html @@ -0,0 +1,5 @@ + + +#TITRE + + diff --git a/www/plugins/crayons/vues/vignette.html b/www/plugins/crayons/vues/vignette.html new file mode 100644 index 00000000..8d2225fc --- /dev/null +++ b/www/plugins/crayons/vues/vignette.html @@ -0,0 +1,18 @@ +[(#REM) + + Vue pour le crayon 'vignette', + Ce crayons ne s'applique qu'aux documents + +] +[(#SET{resize,[(#ENV{class}|match{\bresize-\d+\b}|replace{resize-})]})] + +[(#SET{image,[(#LOGO_DOCUMENT||image_reduire{#GET{resize,0},#GET{resize,120}})]})] + +[(#GET{image}|?{ + + [(#SET{url,[(#GET{image}|extraire_attribut{src}|replace{\?.*$})]})] + [(#SET{url,[(#GET{url}|parametre_url{s,#EVAL{time()}})]})] + [(#SET{width,[(#GET{image}|extraire_attribut{width})]})] + + [(#GET{image}|inserer_attribut{src,#GET{url}})] +})] \ No newline at end of file diff --git a/www/plugins/enluminures_typographiques_v3/css/enluminurestypo.css b/www/plugins/enluminures_typographiques_v3/css/enluminurestypo.css new file mode 100644 index 00000000..876c5b37 --- /dev/null +++ b/www/plugins/enluminures_typographiques_v3/css/enluminurestypo.css @@ -0,0 +1,50 @@ +.texteencadre-spip { + color: #000033; + background: #EEF; + border-bottom: 2px solid #0066CC; + border-left: 1px solid #3399FF; + border-right: 2px solid #0066CC; + border-top: 1px solid #3399FF; + margin: 1em 0; + padding: .25em; + position: relative; +} + +.caractencadre-spip { + color: #F60; + font-weight: bold; +} + +.caractencadre2-spip { + color: #009; + font-weight: bold; +} + +acronym.spip_acronym { + cursor: help; + border-bottom: 1px dotted; +} + +/* ne marche pas sur MSIE, a refaire en jQuery */ +a[hreflang]:after { +content: "\0000a0[" attr(hreflang) "]"; +color: #999; +background: transparent; +font-size:x-small; +} + +sup, sup.typo_exposants { + font-size: 78%; + font-variant: normal; + vertical-align: 24%; +} + +sub { + font-size: 60%; + font-variant: normal; + vertical-align: -20%; +} + +.caps { + font-variant: small-caps; +} \ No newline at end of file diff --git a/www/plugins/enluminures_typographiques_v3/css/enluminurestypo_prive.css b/www/plugins/enluminures_typographiques_v3/css/enluminurestypo_prive.css new file mode 100644 index 00000000..0bce269d --- /dev/null +++ b/www/plugins/enluminures_typographiques_v3/css/enluminurestypo_prive.css @@ -0,0 +1,25 @@ +h2.spip, h3.spip, h4.spip, h5.spip, h6.spip { + border-left: 1px solid #ccd; + color: #666; + padding-left: 1em; + text-align: left; + margin-left: 15px; +} +h2.spip { + border-left-width: 16px; + margin-left: 0; +} +h3.spip { + border-left-width: 10px; + margin-left: 6px; +} +h4.spip { + border-left-width: 6px; + margin-left: 10px; +} +h5.spip { + border-left-width: 2px; + margin-left: 14px; +} + +acronym, abbr { border-bottom: .1em dotted; cursor: help; } diff --git a/www/plugins/enluminures_typographiques_v3/editeur/inserer_colonne.gif b/www/plugins/enluminures_typographiques_v3/editeur/inserer_colonne.gif new file mode 100644 index 00000000..b669d4fa Binary files /dev/null and b/www/plugins/enluminures_typographiques_v3/editeur/inserer_colonne.gif differ diff --git a/www/plugins/enluminures_typographiques_v3/editeur/inserer_ligne.gif b/www/plugins/enluminures_typographiques_v3/editeur/inserer_ligne.gif new file mode 100644 index 00000000..157d3736 Binary files /dev/null and b/www/plugins/enluminures_typographiques_v3/editeur/inserer_ligne.gif differ diff --git a/www/plugins/enluminures_typographiques_v3/editeur/supprimer_ligne.png b/www/plugins/enluminures_typographiques_v3/editeur/supprimer_ligne.png new file mode 100644 index 00000000..1514d51a Binary files /dev/null and b/www/plugins/enluminures_typographiques_v3/editeur/supprimer_ligne.png differ diff --git a/www/plugins/enluminures_typographiques_v3/editeur/table.css b/www/plugins/enluminures_typographiques_v3/editeur/table.css new file mode 100644 index 00000000..de52e21e --- /dev/null +++ b/www/plugins/enluminures_typographiques_v3/editeur/table.css @@ -0,0 +1,33 @@ +body{ + padding: 1em 2em 1em 1em; + text-align:center; + font: 12px Verdana, Geneva, Arial, Helvetica, sans-serif; +} +a img{border:none} +#enregistrer{ + display:block; + width:10em; + margin:1em auto; + padding:0.5em; + font-size:14px; + text-align:center; + text-decoration:none; + background:#eee; + border:1px outset #aaa; +} +div{text-align:left;margin-bottom:0.5em;} +div span{float:left;width:10em} +input{width:60%} +#ihm{ + border-collapse:collapse; + border:3px ridge gray; + width:85%; +} +#ihm td{border:3px ridge gray;text-align:center} +#ihm td td{border:none} +#ihm img{margin:4px} +textarea{ width:100%} +.first_c a img {display:block} +.last_l, .last_c {background:#eee} +.first_l, .first_c {background: #F0E68C} +.first_c, .last_c {width:24px;} diff --git a/www/plugins/enluminures_typographiques_v3/editeur/table.js b/www/plugins/enluminures_typographiques_v3/editeur/table.js new file mode 100644 index 00000000..c6734512 --- /dev/null +++ b/www/plugins/enluminures_typographiques_v3/editeur/table.js @@ -0,0 +1,482 @@ +/* ce code s'inspire du travail de http://www.spip-contrib.net/_courcy_ + * il a été en grande partie ré-écrit pour : + * - générer une syntaxe de tableau SPIP et non HTML (l'éditeur de couleur de cellules disparaît donc aussi) + * - pour permettre non seulement de créer un tableau mais aussi de modifier un tableau existant + * - pour intégrer les éléments HTML titre et résumé de tableau + */ +/****************************************** + * FONCTIONNEMENT Général + *********************BUT**************************************** + * Le but de ce script est de permettre à l'utilisateur de créer son propre + * tableau sans s'encombrer de la syntaxe SPIP. Si un tableau à syntaxe SPIP est + * sélectionné avant l'appel de l'assistant, les données sont récupérées par l'assistant. + * Si rien n'est sélectionné l'appel de l'assistant, un nouveau tableau est créé au point + * d'insertion. + ************Structure de donnees *********************************** + * + * Classe ihm qui gère l'interface homme-machine de l'assistant et sa construction + * On trouve en autres les méthodes permettant d'insérer et de supprimer lignes et colonnes + * + * Classe Cellule qui contient les informations relatives à une cellule + * Ses attributs sont des informations relatives a une cellule (contenu) + * chaque objet cellule est contenu dans le tableau lc qui est un tableau bidimensionnel de cellules + * ce tableau a autant d'éléments que de ligne * colonne dans le tableau + * + * + *******************ALGORITHME************************************* + * Le tableau est sauvé en mémoire dans la variable lc + * La fonction construit_tableau( ) de la classe ihm construit l'interface pour manipuler les données du tableau + * qui (re)initialisera la valeur innerHTML de
    + * toute modification des valeurs dans l'assistant modifie lc + * toute modification de l'interface (ajout/suppression de ligne/colonne) modifie lc puis appelle la fonction construit_tableau + * simple mais efficace+ + * + * La validation des modifications déclenche construit_code_tableau qui construit le code SPIP du tableau + */ + + + /********INITIALISATION**************/ + //classe ihm : classe générique de gestion de tableau + function ihm() { + this.titre_t = ""; + this.resume_t = ""; + /* méthodes */ + this.construit_tableau = construit_tableau; + this.bouton_insere_ligne = bouton_insere_ligne; + this.bouton_supprime_ligne = bouton_supprime_ligne; + this.bouton_insere_colonne = bouton_insere_colonne; + this.bouton_supprime_colonne = bouton_supprime_colonne; + this.insere_commande_ligne = insere_commande_ligne; + this.insere_commande_colonne = insere_commande_colonne; + this.insere_ligne = insere_ligne; + this.supprime_ligne = supprime_ligne; + this.insere_colonne = insere_colonne; + this.supprime_colonne = supprime_colonne; + + /*******CONStrUIT tableAU**********/ + function construit_tableau(){ + var texte = ""; + texte+="\n"; + for (i=0;i0) position = "1st_l"; //on est sur la premiere ligne on insere des colonnes + if (i>0 && j==0) position = "1st_c"; //on est sur la premiere colonne on insere des lignes + if (i==nl+1 && j>0) position = "last_l"; //on est dans la zone non éditée de la derniere ligne + if (i>0 && j==nc+1) position = "last_c"; //on est dans la zone non éditée la derniere colonne + switch (position) { + case "coin" : texte+="\n"; break; + case "1st_l" : texte+="\n"; break; + case "1st_c" : texte+="\n"; break; + case "last_l" : texte+="\n"; break; + case "last_c" : texte+="\n"; break; + default: //on est dans la partie éditable du tableau + texte+="\n"; + } + }//fin du for j + texte+=""; + }//fin du for i + texte+="
    "+this.insere_commande_colonne(j-1)+""+this.insere_commande_ligne(i-1)+""+ lc[i-1][j-1].insere() +"
    "; + //win=window.open(''); + //win.document.write(""); + table.innerHTML=texte;//on modifie le texte de ce noeud + } + /** + *cette fonction crée un bouton pour l'insertion d'une ligne + */ + function bouton_insere_ligne(ligne){ + var texte = "\n"; + return texte; + } + + /** + *cette fonction crée un bouton pour la supression d'une ligne + */ + function bouton_supprime_ligne(ligne){ + if (nl == 1) return ""; + var texte="\n"; + return texte; + } + + /** + *cette fonction crée un bouton pour l'insertion d'une colonne + */ + function bouton_insere_colonne(colonne){ + var texte=" \n"; + return texte; + } + /** + *cette fonction crée un bouton pour la supression d'une colonne + */ + function bouton_supprime_colonne(colonne){ + if (nc == 1) return ""; + var texte="\n"; + return texte; + } + /** + *cette fonction met en forme les commandes pour une ligne + */ + function insere_commande_ligne(ligne){ + var texte; + + texte = this.bouton_insere_ligne(ligne); + if (ligne"; + texte+=this.content; + texte+=" \n"; + return texte; + } + } //fin de la classe "cellule" + + function tableau_cellules(nb_l,nb_c){ + this.t = new Array(); + for (var i=0; inum_ligne){ + //on incrémente de 1 + this.t[i][j]=lc[i-1][j]; + this.t[i][j].setL(i); + } + } + } + } + + this.supL = function(num_ligne){ + for (i=0;inum_colonne){ + //on incrémente de 1 + this.t[i][j]=lc[i][j-1]; + this.t[i][j].setC(j); + } + } + } + } + + this.supC = function(num_colonne){ + for (i=0;i= 4) && is_ie && is_win) + { + var theSelection = false; + + theSelection = top.opener.document.selection.createRange().text; // Get text selection + if (theSelection) { + this.s2 = theSelection; + } else { + this.s1 = top.opener.document.getElementById("text_area").value; + } + } + else { + var selLength = zone.textLength; + var selStart = zone.selectionStart; + var selEnd = zone.selectionEnd; + + if (selEnd == 1 || selEnd == 2) selEnd = selLength; + + // Raccourcir la selection par double-clic si dernier caractere est espace + if (selEnd - selStart > 0 && (zone.value).substring(selEnd-1,selEnd) == ' ') selEnd = selEnd-1; + this.s1 = (zone.value).substring(0,selStart); + this.s2 = (zone.value).substring(selStart, selEnd) + this.s3 = (zone.value).substring(selEnd, selLength); + } + + lignes = this.s2.split("\n"); + + if (this.avec_entete()) init_i = 1; + for (i=init_i;i= 4) && is_ie && is_win) { + top.opener.document.selection.createRange().text = construit_code_tableau(); + } else { + top.opener.zone_selection.value = ancien_tableau.s1 + construit_code_tableau() + ancien_tableau.s3; + } + } else { //insertion d'un nouveau tableau + if (top.opener.zone_selection.createTextRange && top.opener.zone_selection.caretPos) { //IE + var caretPos = top.opener.zone_selection.caretPos; + caretPos.text = caretPos.text + construit_code_tableau(); + top.opener.zone_selection.focus(); + } else { + top.opener.zone_selection.value = ancien_tableau.s1 + construit_code_tableau() + ancien_tableau.s3; + } + } + window.close(); + } \ No newline at end of file diff --git a/www/plugins/enluminures_typographiques_v3/editeur/table_rtl.css b/www/plugins/enluminures_typographiques_v3/editeur/table_rtl.css new file mode 100644 index 00000000..650455c1 --- /dev/null +++ b/www/plugins/enluminures_typographiques_v3/editeur/table_rtl.css @@ -0,0 +1,33 @@ +body{ + padding: 1em 1em 1em 2em; + text-align: center; + font: 12px Verdana, Geneva, Arial, Helvetica, sans-serif; +} +a img{border:none} +#enregistrer{ + display:block; + width:10em; + margin:1em auto; + padding:0.5em; + font-size:14px; + text-align:center; + text-decoration:none; + background:#eee; + border:1px outset #aaa; +} +div{text-align:right;margin-bottom:0.5em;} +div span{float:right;width:10em} +input{width:60%} +#ihm{ + border-collapse:collapse; + border:3px ridge gray; + width:85%; +} +#ihm td{border:3px ridge gray;text-align:center} +#ihm td td{border:none} +#ihm img{margin:4px} +textarea{ width:100%} +.first_c a img {display:block} +.last_l, .last_c {background:#eee} +.first_l, .first_c {background: #F0E68C} +.first_c, .last_c {width:24px;} diff --git a/www/plugins/enluminures_typographiques_v3/editeur/table_rtl.js b/www/plugins/enluminures_typographiques_v3/editeur/table_rtl.js new file mode 100644 index 00000000..78104397 --- /dev/null +++ b/www/plugins/enluminures_typographiques_v3/editeur/table_rtl.js @@ -0,0 +1,482 @@ +/* ce code s'inspire du travail de http://www.spip-contrib.net/_courcy_ + * il a été en grande partie ré-écrit pour : + * - générer une syntaxe de tableau SPIP et non HTML (l'éditeur de couleur de cellules disparaît donc aussi) + * - pour permettre non seulement de créer un tableau mais aussi de modifier un tableau existant + * - pour intégrer les éléments HTML titre et résumé de tableau + */ +/****************************************** + * FONCTIONNEMENT Général + *********************BUT**************************************** + * Le but de ce script est de permettre à l'utilisateur de créer son propre + * tableau sans s'encombrer de la syntaxe SPIP. Si un tableau à syntaxe SPIP est + * sélectionné avant l'appel de l'assistant, les données sont récupérées par l'assistant. + * Si rien n'est sélectionné l'appel de l'assistant, un nouveau tableau est créé au point + * d'insertion. + ************Structure de donnees *********************************** + * + * Classe ihm qui gère l'interface homme-machine de l'assistant et sa construction + * On trouve en autres les méthodes permettant d'insérer et de supprimer lignes et colonnes + * + * Classe Cellule qui contient les informations relatives à une cellule + * Ses attributs sont des informations relatives a une cellule (contenu) + * chaque objet cellule est contenu dans le tableau lc qui est un tableau bidimensionnel de cellules + * ce tableau a autant d'éléments que de ligne * colonne dans le tableau + * + * + *******************ALGORITHME************************************* + * Le tableau est sauvé en mémoire dans la variable lc + * La fonction construit_tableau( ) de la classe ihm construit l'interface pour manipuler les données du tableau + * qui (re)initialisera la valeur innerHTML de
    + * toute modification des valeurs dans l'assistant modifie lc + * toute modification de l'interface (ajout/suppression de ligne/colonne) modifie lc puis appelle la fonction construit_tableau + * simple mais efficace+ + * + * La validation des modifications déclenche construit_code_tableau qui construit le code SPIP du tableau + */ + + + /********INITIALISATION**************/ + //classe ihm : classe générique de gestion de tableau + function ihm() { + this.titre_t = ""; + this.resume_t = ""; + /* méthodes */ + this.construit_tableau = construit_tableau; + this.bouton_insere_ligne = bouton_insere_ligne; + this.bouton_supprime_ligne = bouton_supprime_ligne; + this.bouton_insere_colonne = bouton_insere_colonne; + this.bouton_supprime_colonne = bouton_supprime_colonne; + this.insere_commande_ligne = insere_commande_ligne; + this.insere_commande_colonne = insere_commande_colonne; + this.insere_ligne = insere_ligne; + this.supprime_ligne = supprime_ligne; + this.insere_colonne = insere_colonne; + this.supprime_colonne = supprime_colonne; + + /*******CONStrUIT tableAU**********/ + function construit_tableau(){ + var texte = ""; + texte+="\n"; + for (i=0;i0) position = "1st_l"; //on est sur la premiere ligne on insere des colonnes + if (i>0 && j==0) position = "1st_c"; //on est sur la premiere colonne on insere des lignes + if (i==nl+1 && j>0) position = "last_l"; //on est dans la zone non éditée de la derniere ligne + if (i>0 && j==nc+1) position = "last_c"; //on est dans la zone non éditée la derniere colonne + switch (position) { + case "coin" : texte+="\n"; break; + case "1st_l" : texte+="\n"; break; + case "1st_c" : texte+="\n"; break; + case "last_l" : texte+="\n"; break; + case "last_c" : texte+="\n"; break; + default: //on est dans la partie éditable du tableau + texte+="\n"; + } + }//fin du for j + texte+=""; + }//fin du for i + texte+="
    "+this.insere_commande_colonne(j-1)+""+this.insere_commande_ligne(i-1)+""+ lc[i-1][j-1].insere() +"
    "; + //win=window.open(''); + //win.document.write(""); + table.innerHTML=texte;//on modifie le texte de ce noeud + } + /** + *cette fonction crée un bouton pour l'insertion d'une ligne + */ + function bouton_insere_ligne(ligne){ + var texte = "\n"; + return texte; + } + + /** + *cette fonction crée un bouton pour la supression d'une ligne + */ + function bouton_supprime_ligne(ligne){ + if (nl == 1) return ""; + var texte="\n"; + return texte; + } + + /** + *cette fonction crée un bouton pour l'insertion d'une colonne + */ + function bouton_insere_colonne(colonne){ + var texte=" \n"; + return texte; + } + /** + *cette fonction crée un bouton pour la supression d'une colonne + */ + function bouton_supprime_colonne(colonne){ + if (nc == 1) return ""; + var texte="\n"; + return texte; + } + /** + *cette fonction met en forme les commandes pour une ligne + */ + function insere_commande_ligne(ligne){ + var texte; + + texte = this.bouton_insere_ligne(ligne); + if (ligne"; + texte+=this.content; + texte+=" \n"; + return texte; + } + } //fin de la classe "cellule" + + function tableau_cellules(nb_l,nb_c){ + this.t = new Array(); + for (var i=0; inum_ligne){ + //on incrémente de 1 + this.t[i][j]=lc[i-1][j]; + this.t[i][j].setL(i); + } + } + } + } + + this.supL = function(num_ligne){ + for (i=0;inum_colonne){ + //on incrémente de 1 + this.t[i][j]=lc[i][j-1]; + this.t[i][j].setC(j); + } + } + } + } + + this.supC = function(num_colonne){ + for (i=0;i= 4) && is_ie && is_win) + { + var theSelection = false; + + theSelection = top.opener.document.selection.createRange().text; // Get text selection + if (theSelection) { + this.s2 = theSelection; + } else { + this.s1 = top.opener.document.getElementById("text_area").value; + } + } + else { + var selLength = zone.textLength; + var selStart = zone.selectionStart; + var selEnd = zone.selectionEnd; + + if (selEnd == 1 || selEnd == 2) selEnd = selLength; + + // Raccourcir la selection par double-clic si dernier caractere est espace + if (selEnd - selStart > 0 && (zone.value).substring(selEnd-1,selEnd) == ' ') selEnd = selEnd-1; + this.s1 = (zone.value).substring(0,selStart); + this.s2 = (zone.value).substring(selStart, selEnd) + this.s3 = (zone.value).substring(selEnd, selLength); + } + + lignes = this.s2.split("\n"); + + if (this.avec_entete()) init_i = 1; + for (i=init_i;i= 4) && is_ie && is_win) { + top.opener.document.selection.createRange().text = construit_code_tableau(); + } else { + top.opener.zone_selection.value = ancien_tableau.s1 + construit_code_tableau() + ancien_tableau.s3; + } + } else { //insertion d'un nouveau tableau + if (top.opener.zone_selection.createTextRange && top.opener.zone_selection.caretPos) { //IE + var caretPos = top.opener.zone_selection.caretPos; + caretPos.text = caretPos.text + construit_code_tableau(); + top.opener.zone_selection.focus(); + } else { + top.opener.zone_selection.value = ancien_tableau.s1 + construit_code_tableau() + ancien_tableau.s3; + } + } + window.close(); + } \ No newline at end of file diff --git a/www/plugins/enluminures_typographiques_v3/editeur/tableau_edit.html b/www/plugins/enluminures_typographiques_v3/editeur/tableau_edit.html new file mode 100644 index 00000000..a278b921 --- /dev/null +++ b/www/plugins/enluminures_typographiques_v3/editeur/tableau_edit.html @@ -0,0 +1,24 @@ +#CACHE{24*3600} + + + + Editeur de table + + + + + + + + +
    +
    +
    +
    +
    +
    + <:enlumtypo:tableau_enregistrer:> + + diff --git a/www/plugins/enluminures_typographiques_v3/enluminures_typo_pipelines.php b/www/plugins/enluminures_typographiques_v3/enluminures_typo_pipelines.php new file mode 100644 index 00000000..6a9587aa --- /dev/null +++ b/www/plugins/enluminures_typographiques_v3/enluminures_typo_pipelines.php @@ -0,0 +1,213 @@ +cacher('stroke_through'); + + $module_barre = "barre_outils"; + if (intval($GLOBALS['spip_version_branche'])>2) + $module_barre = "barreoutils"; + + $barre->set('header1', array( + // groupe formatage paragraphe + "dropMenu" => array( + // bouton + array( + "id" => 'intertitre', + "name" => _T('barre_intertitre'), + "className" => 'outil_intertitre1', + "openWith" => "\n{{{", + "closeWith" => "}}}\n", + "display" => true, + "selectionType" => "line", + ), + array( + "id" => 'intertitre2', + "name" => _T('enlumtypo:barre_intertitre2'), + "className" => 'outil_intertitre2', + "openWith" => "\n{{{**", + "closeWith" => "}}}\n", + "display" => true, + "selectionType" => "line", + ), + array( + "id" => 'intertitre3', + "name" => _T('enlumtypo:barre_intertitre3'), + "className" => 'outil_intertitre3', + "openWith" => "\n{{{***", + "closeWith" => "}}}\n", + "display" => true, + "selectionType" => "line", + ), + array( + "id" => 'alignerdroite', + "name" => _T('enlumtypo:barre_alignerdroite'), + "className" => 'outil_alignerdroite', + "openWith" => "\n[/", + "closeWith" => "/]\n", + "display" => true, + "selectionType" => "line", + ), + array( + "id" => 'alignergauche', + "name" => _T('enlumtypo:barre_alignergauche'), + "className" => 'outil_alignergauche', + "openWith" => "\n[!", + "closeWith" => "!]\n", + "display" => true, + "lang" => array('ar','fa'), + "selectionType" => "line", + ), + array( + "id" => 'cadretexte', + "name" => _T('enlumtypo:barre_encadrer'), + "className" => 'outil_cadretexte', + "openWith" => "\n[(", + "closeWith" => ")]\n", + "display" => true, + "selectionType" => "line", + ), + // code spip + array( + "id" => 'barre_cadre', + "name" => _T($module_barre.':barre_cadre'), + "className" => "outil_barre_cadre", + "openWith" => "\n<cadre>", + "closeWith" => "</cadre>\n", + "display" => true, + "selectionType" => "line", + ), + ), + )); + + $barre->set('bold', array( + // groupe formatage texte + "dropMenu" => array( + // Mise en évidence (gras + couleur) + array( + "id" => 'miseenevidence', + "name" => _T('enlumtypo:barre_miseenevidence'), + "className" => "outil_miseenevidence", + "openWith" => "[*", + "closeWith" => "*]", + "display" => true, + "selectionType" => "word", + ), + // Mise en évidence2 (gras + autre couleur) + array( + "id" => 'miseenevidence2', + "name" => _T('enlumtypo:barre_miseenevidence2'), + "className" => "outil_miseenevidence2", + "openWith" => "[**", + "closeWith" => "*]", + "display" => true, + "selectionType" => "word", + ), + // montrer une suppression + array( + "id" => 'stroke_through_et', + "name" => _T('enlumtypo:barre_barre'), // :-) + "className" => "outil_stroke_through_et", + "openWith" => "", + "closeWith" => "", + "display" => true, + "selectionType" => "word", + ), + // Mise en exposant + array( + "id" => 'exposant', + "name" => _T('enlumtypo:barre_exposant'), + "className" => "outil_exposant", + "openWith" => "", + "closeWith" => "", + "display" => true, + "selectionType" => "word", + ), + // Mise en indice + array( + "id" => 'indice', + "name" => _T('enlumtypo:barre_indice'), + "className" => "outil_indice", + "openWith" => "", + "closeWith" => "", + "display" => true, + "selectionType" => "word", + ), + // cadre spip + array( + "id" => 'barre_code', + "name" => _T($module_barre.':barre_code'), + "className" => "outil_barre_code", + "openWith" => "<code>", + "closeWith" => "</code>", + "display" => true, + "selectionType" => "word", + ), + ), + )); + + // Appel Tableau + $barre->ajouterApres('notes', array( + "id" => 'barre_tableau', + "name" => _T('enlumtypo:barre_tableau'), + "className" => "outil_barre_tableau", + "replaceWith" => 'function(markitup) { zone_selection = markitup.textarea; window.open("?exec=tableau_edit", "","scrollbars=yes,resizable=yes,width=700,height=600") }', + "display" => true, + "selectionType" => "line", + )); + + $barre->set('quote', array( + "dropMenu" => array( + // poesie spip + array( + "id" => 'barre_poesie', + "name" => _T($module_barre.':barre_poesie'), + "className" => "outil_barre_poesie", + "openWith" => "\n<poesie>", + "closeWith" => "</poesie>\n", + "display" => true, + "selectionType" => "line", + ), + ), + )); + + // Petites capitales + $barre->ajouterApres('italic', array( + "id" => 'petitescapitales', + "name" => _T('enlumtypo:barre_petitescapitales'), + "className" => "outil_petitescapitales", + "openWith" => "", + "closeWith" => "", + "display" => true, + "selectionType" => "word", + )); + + return $barres; +} + +function typoenluminee_porte_plume_lien_classe_vers_icone($flux){ + return array_merge($flux, array( + 'outil_intertitre1' => array('spt-v1.png','-10px -226px'), //'intertitre.png' + 'outil_intertitre2' => array('intertitre2.png','0'), + 'outil_intertitre3' => array('intertitre3.png','0'), + 'outil_alignerdroite' => array('right.png','0'), + 'outil_alignergauche' => array('left.png','0'), + 'outil_stroke_through_et' => array('spt-v1.png','-10px -946px'), //'text_strikethrough.png' + 'outil_cadretexte' => array('cadretexte.png','0'), + 'outil_speciaux' => array('tag.png','0'), + 'outil_barre_code' => array('page_white_code_red.png','0'), + 'outil_barre_cadre' => array('page_white_code.png','0'), + + 'outil_miseenevidence' => array('miseenevidence.png','0'), + 'outil_miseenevidence2' => array('miseenevidence2.png','0'), + 'outil_exposant' => array('exposant.png','0'), + 'outil_indice' => array('indice.png','0'), + 'outil_petitescapitales' => array('petitescapitales.png','0'), + 'outil_barre_poesie' => array('poesie.png','0'), + + 'outil_barre_tableau' => array('barre-tableau.png','0'), + )); +} + +?> diff --git a/www/plugins/enluminures_typographiques_v3/exec/tableau_edit.php b/www/plugins/enluminures_typographiques_v3/exec/tableau_edit.php new file mode 100644 index 00000000..a99aa003 --- /dev/null +++ b/www/plugins/enluminures_typographiques_v3/exec/tableau_edit.php @@ -0,0 +1,8 @@ + \ No newline at end of file diff --git a/www/plugins/enluminures_typographiques_v3/fonds/cfg_bte.html b/www/plugins/enluminures_typographiques_v3/fonds/cfg_bte.html new file mode 100644 index 00000000..213a301a --- /dev/null +++ b/www/plugins/enluminures_typographiques_v3/fonds/cfg_bte.html @@ -0,0 +1,14 @@ + + +[(#SET{logo, +Logo Enluminures Typographiques +})] + +#CACHE{0} + +
    + #FORMULAIRE_CONFIGURER_TYPOENLUMINEE +
    diff --git a/www/plugins/enluminures_typographiques_v3/formulaires/configurer_typoenluminee.html b/www/plugins/enluminures_typographiques_v3/formulaires/configurer_typoenluminee.html new file mode 100644 index 00000000..aaebf341 --- /dev/null +++ b/www/plugins/enluminures_typographiques_v3/formulaires/configurer_typoenluminee.html @@ -0,0 +1,106 @@ +
    +[

    (#ENV*{message_ok})

    ] +[

    (#ENV*{message_erreur})

    ] + +
    [(#ENV{_cfg_}|form_hidden)]
    + #ACTION_FORMULAIRE{#ENV{action}} + +
    • <:enlumtypo:cfg_puces:>
    • + +
    • Configuré dans le mes_options par 'barre_typo_pas_de_fausses_puces' :
      RemplacementConserver le traitement par défaut de SPIP

    • + +
    • +

      Remplacement des fausses puces de SPIP (- en début de ligne) par de vraies listes à puces (-* en début de ligne)

      +
    • + +
    +
    <:enlumtypo:cfg_titraille:> +

    Les valeurs par défaut sont basées sur la valeur historique de SPIP pour {{{}}} <=> H3. En HTML, il n'y a pas de H7 ce qui explique la balise choisie pour le niveau 5.

    +

    N'oubliez pas que la titraille sert à donner un sens dans la hiérarchisation des idées d'un texte, et surtout pas à obtenir un effet de taille de texte !

    +
    • Titraille de premier niveau : {{{}}} ou {{{* }}}

    • + +
    • Configuré dans le mes_options par 'debut_intertitre' et 'fin_intertitre'

    • + +
    • + + '})]" size="30" class="fondl" />
      + + + +
    • +
    • Titraille de deuxième niveau : {{{** }}}

    • + +
    • Configuré dans le mes_options par 'debut_intertitre_2' et 'fin_intertitre_2'

    • + +
    • + + '})]" size="30" class="fondl" />
      + + + +
    • +
    • Titraille de troisième niveau : {{{*** }}}

    • + +
    • Configuré dans le mes_options par 'debut_intertitre_3' et 'fin_intertitre_3'

    • + +
    • + + '})]" size="30" class="fondl" />
      + + + +
    • +
    • Titraille de quatrième niveau : {{{**** }}}

    • + +
    • Configuré dans le mes_options par 'debut_intertitre_4' et 'fin_intertitre_4'

    • + +
    • + + '})]" size="30" class="fondl" />
      + + + +
    • +
    • Titraille de cinquième niveau : {{{***** }}}

    • + +
    • Configuré dans le mes_options par 'debut_intertitre_5' et 'fin_intertitre_5'

    • + +
    • + + '})]" size="30" class="fondl" />
      + + + +
    • +
    +
    +
    • <:enlumtypo:cfg_insertcss:>
    • + +
    • Configuré dans le mes_options par 'BarreTypoEnrichie_Preserve_Header' + +

    • + +
    • +

      Insertion automatique des CSS spécifiques à la BTE dans l'espace public (via #INSERT_HEAD dans les squelettes)

      +
    • + +
    + + +

    + + +

    + +
    +
    \ No newline at end of file diff --git a/www/plugins/enluminures_typographiques_v3/icones_barre/avances.png b/www/plugins/enluminures_typographiques_v3/icones_barre/avances.png new file mode 100644 index 00000000..628cf2da Binary files /dev/null and b/www/plugins/enluminures_typographiques_v3/icones_barre/avances.png differ diff --git a/www/plugins/enluminures_typographiques_v3/icones_barre/barre-tableau.png b/www/plugins/enluminures_typographiques_v3/icones_barre/barre-tableau.png new file mode 100644 index 00000000..c895a1f3 Binary files /dev/null and b/www/plugins/enluminures_typographiques_v3/icones_barre/barre-tableau.png differ diff --git a/www/plugins/enluminures_typographiques_v3/icones_barre/barre-wiki.png b/www/plugins/enluminures_typographiques_v3/icones_barre/barre-wiki.png new file mode 100644 index 00000000..8d1a0350 Binary files /dev/null and b/www/plugins/enluminures_typographiques_v3/icones_barre/barre-wiki.png differ diff --git a/www/plugins/enluminures_typographiques_v3/icones_barre/cadretexte.png b/www/plugins/enluminures_typographiques_v3/icones_barre/cadretexte.png new file mode 100644 index 00000000..29c4ec95 Binary files /dev/null and b/www/plugins/enluminures_typographiques_v3/icones_barre/cadretexte.png differ diff --git a/www/plugins/enluminures_typographiques_v3/icones_barre/center.png b/www/plugins/enluminures_typographiques_v3/icones_barre/center.png new file mode 100644 index 00000000..38a06591 Binary files /dev/null and b/www/plugins/enluminures_typographiques_v3/icones_barre/center.png differ diff --git a/www/plugins/enluminures_typographiques_v3/icones_barre/eacute-maj.png b/www/plugins/enluminures_typographiques_v3/icones_barre/eacute-maj.png new file mode 100644 index 00000000..4deee164 Binary files /dev/null and b/www/plugins/enluminures_typographiques_v3/icones_barre/eacute-maj.png differ diff --git a/www/plugins/enluminures_typographiques_v3/icones_barre/exposant.png b/www/plugins/enluminures_typographiques_v3/icones_barre/exposant.png new file mode 100644 index 00000000..4cb2cfe6 Binary files /dev/null and b/www/plugins/enluminures_typographiques_v3/icones_barre/exposant.png differ diff --git a/www/plugins/enluminures_typographiques_v3/icones_barre/indice.png b/www/plugins/enluminures_typographiques_v3/icones_barre/indice.png new file mode 100644 index 00000000..357b7fe7 Binary files /dev/null and b/www/plugins/enluminures_typographiques_v3/icones_barre/indice.png differ diff --git a/www/plugins/enluminures_typographiques_v3/icones_barre/intertitre2.png b/www/plugins/enluminures_typographiques_v3/icones_barre/intertitre2.png new file mode 100644 index 00000000..da86b80a Binary files /dev/null and b/www/plugins/enluminures_typographiques_v3/icones_barre/intertitre2.png differ diff --git a/www/plugins/enluminures_typographiques_v3/icones_barre/intertitre3.png b/www/plugins/enluminures_typographiques_v3/icones_barre/intertitre3.png new file mode 100644 index 00000000..34f3a6aa Binary files /dev/null and b/www/plugins/enluminures_typographiques_v3/icones_barre/intertitre3.png differ diff --git a/www/plugins/enluminures_typographiques_v3/icones_barre/left.png b/www/plugins/enluminures_typographiques_v3/icones_barre/left.png new file mode 100644 index 00000000..21bfe4ce Binary files /dev/null and b/www/plugins/enluminures_typographiques_v3/icones_barre/left.png differ diff --git a/www/plugins/enluminures_typographiques_v3/icones_barre/listenum.png b/www/plugins/enluminures_typographiques_v3/icones_barre/listenum.png new file mode 100644 index 00000000..04923874 Binary files /dev/null and b/www/plugins/enluminures_typographiques_v3/icones_barre/listenum.png differ diff --git a/www/plugins/enluminures_typographiques_v3/icones_barre/listepuces.png b/www/plugins/enluminures_typographiques_v3/icones_barre/listepuces.png new file mode 100644 index 00000000..fc1d35a2 Binary files /dev/null and b/www/plugins/enluminures_typographiques_v3/icones_barre/listepuces.png differ diff --git a/www/plugins/enluminures_typographiques_v3/icones_barre/miseenevidence.png b/www/plugins/enluminures_typographiques_v3/icones_barre/miseenevidence.png new file mode 100644 index 00000000..1dfa7ddb Binary files /dev/null and b/www/plugins/enluminures_typographiques_v3/icones_barre/miseenevidence.png differ diff --git a/www/plugins/enluminures_typographiques_v3/icones_barre/miseenevidence2.png b/www/plugins/enluminures_typographiques_v3/icones_barre/miseenevidence2.png new file mode 100644 index 00000000..87a3c72e Binary files /dev/null and b/www/plugins/enluminures_typographiques_v3/icones_barre/miseenevidence2.png differ diff --git a/www/plugins/enluminures_typographiques_v3/icones_barre/oelig-maj.png b/www/plugins/enluminures_typographiques_v3/icones_barre/oelig-maj.png new file mode 100644 index 00000000..c335cf10 Binary files /dev/null and b/www/plugins/enluminures_typographiques_v3/icones_barre/oelig-maj.png differ diff --git a/www/plugins/enluminures_typographiques_v3/icones_barre/oelig.png b/www/plugins/enluminures_typographiques_v3/icones_barre/oelig.png new file mode 100644 index 00000000..89bdb5a4 Binary files /dev/null and b/www/plugins/enluminures_typographiques_v3/icones_barre/oelig.png differ diff --git a/www/plugins/enluminures_typographiques_v3/icones_barre/page_white_code.png b/www/plugins/enluminures_typographiques_v3/icones_barre/page_white_code.png new file mode 100644 index 00000000..0c76bd12 Binary files /dev/null and b/www/plugins/enluminures_typographiques_v3/icones_barre/page_white_code.png differ diff --git a/www/plugins/enluminures_typographiques_v3/icones_barre/page_white_code_red.png b/www/plugins/enluminures_typographiques_v3/icones_barre/page_white_code_red.png new file mode 100644 index 00000000..87a69145 Binary files /dev/null and b/www/plugins/enluminures_typographiques_v3/icones_barre/page_white_code_red.png differ diff --git a/www/plugins/enluminures_typographiques_v3/icones_barre/petitescapitales.png b/www/plugins/enluminures_typographiques_v3/icones_barre/petitescapitales.png new file mode 100644 index 00000000..9122ea29 Binary files /dev/null and b/www/plugins/enluminures_typographiques_v3/icones_barre/petitescapitales.png differ diff --git a/www/plugins/enluminures_typographiques_v3/icones_barre/poesie.png b/www/plugins/enluminures_typographiques_v3/icones_barre/poesie.png new file mode 100644 index 00000000..3c5bbfeb Binary files /dev/null and b/www/plugins/enluminures_typographiques_v3/icones_barre/poesie.png differ diff --git a/www/plugins/enluminures_typographiques_v3/icones_barre/right.png b/www/plugins/enluminures_typographiques_v3/icones_barre/right.png new file mode 100644 index 00000000..79d3b19a Binary files /dev/null and b/www/plugins/enluminures_typographiques_v3/icones_barre/right.png differ diff --git a/www/plugins/enluminures_typographiques_v3/icones_barre/tag.png b/www/plugins/enluminures_typographiques_v3/icones_barre/tag.png new file mode 100644 index 00000000..e093032a Binary files /dev/null and b/www/plugins/enluminures_typographiques_v3/icones_barre/tag.png differ diff --git a/www/plugins/enluminures_typographiques_v3/icones_barre/text_strikethrough.png b/www/plugins/enluminures_typographiques_v3/icones_barre/text_strikethrough.png new file mode 100644 index 00000000..612058a7 Binary files /dev/null and b/www/plugins/enluminures_typographiques_v3/icones_barre/text_strikethrough.png differ diff --git a/www/plugins/enluminures_typographiques_v3/img_pack/e.gif b/www/plugins/enluminures_typographiques_v3/img_pack/e.gif new file mode 100644 index 00000000..8a27a207 Binary files /dev/null and b/www/plugins/enluminures_typographiques_v3/img_pack/e.gif differ diff --git a/www/plugins/enluminures_typographiques_v3/img_pack/moinecopiste.gif b/www/plugins/enluminures_typographiques_v3/img_pack/moinecopiste.gif new file mode 100644 index 00000000..c16f8588 Binary files /dev/null and b/www/plugins/enluminures_typographiques_v3/img_pack/moinecopiste.gif differ diff --git a/www/plugins/enluminures_typographiques_v3/lang/enlumtypo_ar.php b/www/plugins/enluminures_typographiques_v3/lang/enlumtypo_ar.php new file mode 100644 index 00000000..a54972a5 --- /dev/null +++ b/www/plugins/enluminures_typographiques_v3/lang/enlumtypo_ar.php @@ -0,0 +1,46 @@ + '{2{عنوان فقرة مستوى 2}2}', +'barre_intertitre3' => '{3{عنوان فقرة مستوى 3}3}', +'barre_miseenevidence' => '[*إبراز*]', +'barre_miseenevidence2' => '[**إبراز*] النص (لون آخر)', + +'barre_exposant' => 'تحويل الى + <sup>نص فوقي</sup>', + + 'barre_indice' => 'تحويل الى +<sub>نص سفلي</sub>', + +'barre_petitescapitales' => 'تحويل الى <sc>حروف كبيرة مصغرة</sc>', +'barre_centrer' => '[|توسيط|] الفقرة', +'barre_alignerdroite' => 'محاذاة الى [/اليمين/]', +'barre_alignergauche' => 'محاذاة الى [!اليسار!]', +'barre_encadrer' => 'وضع في [(إطار)]', + +'barre_barre' => '<del>شطب</del> النص', + +'barre_avances' => 'الاتجاه، الاتجاه!', +'barre_boutonsavances' => 'إدارة إضافية للمحاذاة للاستخدام بتعقل', +'barre_tableau' => 'إدراج جدول أو تعديل جدول (تحديده أولاً)', + +'barre_formatages_speciaux' => 'تنسيقات خاصة', +'barre_code' => 'تنسيق <code>كرموز برمجية</code>', +'barre_cadre' => 'وضع في <cadre>إطار</cadre>', +'barre_poesie' => '<poesie>شعر</poesie>', + +'cfg_puces' => 'معالجة اللوائح', +'cfg_titraille' => 'عناوين', +'cfg_insertcss' => 'ادراج ورقة انماط', + +'tableau_enregistrer' => 'حفظ', +'tableau_prem_ligne' => 'السطر الأول', +'tableau_resume' => 'الخلاصة', +'tableau_titre' => 'العنوان' + +); +?> diff --git a/www/plugins/enluminures_typographiques_v3/lang/enlumtypo_en.php b/www/plugins/enluminures_typographiques_v3/lang/enlumtypo_en.php new file mode 100644 index 00000000..5c1d65fd --- /dev/null +++ b/www/plugins/enluminures_typographiques_v3/lang/enlumtypo_en.php @@ -0,0 +1,44 @@ + 'Turn into a {2{2nd-level subtitle}2}', +'barre_intertitre3' => 'Turn into a {3{3rd-level subtitle}3}', +'barre_miseenevidence' => '[*Emphasize*] the text', +'barre_miseenevidence2' => '[**Emphasize*] the text(2nd colour)', + +'barre_exposant' => 'Superscript', + +'barre_indice' => 'Subscript', + +'barre_petitescapitales' => 'Small caps', +'barre_centrer' => '[|Centre|] the paragraph', +'barre_alignerdroite' => '[/Right-align/] the paragraph', +'barre_alignergauche' => '[!left-align!] the paragraph', +'barre_encadrer' => '[(Place a border)] round the paragraph', + +'barre_barre' => '<del>Strikethrough</del>', + +'barre_avances' => 'Meaning, not apparence!', +'barre_boutonsavances' => 'Extra justifications, use with caution!', +'barre_tableau' => 'Insert/modify (select it first) a table', + +'barre_formatages_speciaux' => 'Special formats', +'barre_code' => 'Turn into <code>programming code</code>', +'barre_cadre' => 'Put in a <cadre>text box</cadre>', +'barre_poesie' => 'display as <poesie>poetry</poesie>', + +'cfg_puces' => 'Bullets', +'cfg_titraille' => 'Headings', +'cfg_insertcss' => 'Insert CSS', + +'tableau_enregistrer' => 'Save', +'tableau_prem_ligne' => 'First row', +'tableau_resume' => 'Summary', +'tableau_titre' => 'Title' + +); +?> diff --git a/www/plugins/enluminures_typographiques_v3/lang/enlumtypo_es.php b/www/plugins/enluminures_typographiques_v3/lang/enlumtypo_es.php new file mode 100644 index 00000000..e3dafacb --- /dev/null +++ b/www/plugins/enluminures_typographiques_v3/lang/enlumtypo_es.php @@ -0,0 +1,27 @@ + 'Transformar en {2{intertítulos nivel dos}2}', +'barre_intertitre3' => 'Transformar en {3{intertítulos nivel tres}3}', +'barre_miseenevidence' => 'Poner el texto en [*evidencia*]', +'barre_exposant' => 'Poner el texto en <sup>potencia</sup>', +'barre_petitescapitales' => 'Poner el texto en <sc>mayúsculas pequeñas</sc>', +'barre_centrer' => '[|Centrar|] el párrafo', +'barre_alignerdroite' => '[/Alínea a la derecha/] el párrafo', +'barre_encadrer' => '[(Encuadrar)] el párrafo', + +'barre_poesie' => 'Mettre en forme comme une <poesie>poésie</poesie>', + +'barre_avances' => 'Du sens, du sens !', +'barre_boutonsavances' => 'Mises en sens supplémentaires, à utiliser avec modération et discernement !', + +'cfg_puces' => 'Traitement des puces', +'cfg_titraille' => 'Titraille', +'cfg_insertcss' => 'Insertion CSS' + +); +?> diff --git a/www/plugins/enluminures_typographiques_v3/lang/enlumtypo_fr.php b/www/plugins/enluminures_typographiques_v3/lang/enlumtypo_fr.php new file mode 100644 index 00000000..669838ee --- /dev/null +++ b/www/plugins/enluminures_typographiques_v3/lang/enlumtypo_fr.php @@ -0,0 +1,45 @@ + 'Transformer en {{{**intertitre niveau deux}}}', +'barre_intertitre3' => 'Transformer en {{{***intertitre niveau trois}}}', +'barre_miseenevidence' => 'Mettre le texte en [*évidence*]', +'barre_miseenevidence2' => 'Mettre le texte en [**évidence*] (2e couleur)', + +'barre_exposant' => 'Mettre le texte en <sup>exposant</sup>', + +'barre_indice' => 'Mettre le texte en <sub>indice</sub>', + +'barre_petitescapitales' => 'Mettre le texte en <sc>petites capitales</sc>', +'barre_centrer' => '[|Centrer|] le paragraphe', +'barre_alignerdroite' => '[/Aligne à droite/] le paragraphe', +'barre_alignergauche' => '[!Aligne à gauche!] le paragraphe', +'barre_encadrer' => '[(Encadrer)] le paragraphe', + +'barre_barre' => '<del>Barrer</del> le texte', + +'barre_avances' => 'Du sens, du sens !', +'barre_boutonsavances' => 'Mises en sens supplémentaires, à utiliser avec modération et discernement !', +'barre_tableau' => 'Insérer/modifier (le sélectionner avant) un tableau', + +'barre_formatages_speciaux' => 'Formatage spéciaux', +'barre_code' => 'Mettre en forme un <code>code informatique</code>', +'barre_cadre' => 'Placer dans une <cadre>zone de saisie de texte</cadre>', +'barre_poesie' => 'Mettre en forme comme une <poesie>poésie</poesie>', + +'cfg_puces' => 'Traitement des puces', +'cfg_titraille' => 'Titraille', +'cfg_insertcss' => 'Insertion CSS', +'configuration_typoenluminee' => 'Enluminures Typographiques', + +'tableau_enregistrer' => 'Enregistrer', +'tableau_prem_ligne' => 'Première ligne', +'tableau_resume' => 'Résumé', +'tableau_titre' => 'Titre' + +); +?> diff --git a/www/plugins/enluminures_typographiques_v3/lang/enlumtypo_it.php b/www/plugins/enluminures_typographiques_v3/lang/enlumtypo_it.php new file mode 100644 index 00000000..39a60a84 --- /dev/null +++ b/www/plugins/enluminures_typographiques_v3/lang/enlumtypo_it.php @@ -0,0 +1,27 @@ + 'Converti in {2{sottotitolo 2o-livello}2}', +'barre_intertitre3' => 'Converti in {3{sottotitolo 3o-livello}3}', +'barre_miseenevidence' => '[*Evidenziare*] il testo', +'barre_exposant' => 'Sovrimpressione', +'barre_petitescapitales' => 'Maiuscoletto', +'barre_centrer' => '[|Centrare|] il paragrafo', +'barre_alignerdroite' => '[/allinea a destra/] il paragrafo', +'barre_encadrer' => '[(Riquadro)] attorno al paragrafo', + +'barre_poesie' => 'stile poetico', + +'barre_avances' => 'Allineamento !', +'barre_boutonsavances' => 'Formattazione supplementare, utilizzare con moderazione e discernimento !', + +'cfg_puces' => 'Traitement des puces', +'cfg_titraille' => 'Titraille', +'cfg_insertcss' => 'Insertion CSS' + +); +?> \ No newline at end of file diff --git a/www/plugins/enluminures_typographiques_v3/lang/paquet-typoenluminee_fr.php b/www/plugins/enluminures_typographiques_v3/lang/paquet-typoenluminee_fr.php new file mode 100644 index 00000000..bfe25838 --- /dev/null +++ b/www/plugins/enluminures_typographiques_v3/lang/paquet-typoenluminee_fr.php @@ -0,0 +1,32 @@ + 'Ce plugin ajoute des raccourcis typographiques et des boutons au porte plume. Par exemple : +-* Paragraphes : +-** {{Sous-titres}} {{{**Texte du titre}}}, le nombre d\'étoiles (*) variant de 2 à 5, la barre de raccourcis ne proposant que 2 et 3 +-** {{Centrer}} [|Paragraphe centré|] +-** {{Aligner à droite}} [/Paragraphe aligné à droite/] +-** {{Encadrer}} [(Paragraphe à encadrer)] +-* Caractères : +-** {{Mise en évidence}} [*texte en évidence*] +-** {{Mise en évidence variante}} [**texte en évidence (autre couleur)*] +-** {{Mise en exposant}} {<sup>}texte en exposant{</sup>} +-** {{Petites capitales}} {<sc>}texte en petite capitales{</sc>} +-** {{Biffé}} {<del>}texte biffé{</del>} + +', + 'typoenluminee_slogan' => 'Plein de raccourcis pour la mise en forme !', +); +?> \ No newline at end of file diff --git a/www/plugins/enluminures_typographiques_v3/paquet.xml b/www/plugins/enluminures_typographiques_v3/paquet.xml new file mode 100644 index 00000000..047b319f --- /dev/null +++ b/www/plugins/enluminures_typographiques_v3/paquet.xml @@ -0,0 +1,35 @@ + + + Enluminures typographiques + + + Jacques + François + + 2007 + + GPL 3 + + + + + + + + + + + + + + + + diff --git a/www/plugins/enluminures_typographiques_v3/plugin.xml b/www/plugins/enluminures_typographiques_v3/plugin.xml new file mode 100644 index 00000000..aba71e00 --- /dev/null +++ b/www/plugins/enluminures_typographiques_v3/plugin.xml @@ -0,0 +1,70 @@ + + Enluminures typographiques + Plein de raccourcis pour la mise en forme ! + [Jacques->http://www.spip-contrib.net/_Jacques-PYRAT_], à partir des raccourcis mis en place par [François->http://www.spip-contrib.net/_Francois-Schreuer_] + © 2007 GNU/GPL + http://www.spip-contrib.net/Enluminures-typographiques-V3-pour-SPIP-2-avec + 3.3.2 + stable + Ce plugin ajoute des raccourcis typographiques et des boutons au porte plume. Par exemple : +-* Paragraphes : +-** {{Sous-titres}} {{{**Texte du titre}}}, le nombre d'étoiles (*) variant de 2 à 5, la barre de raccourcis ne proposant que 2 et 3 +-** {{Centrer}} [|Paragraphe centré|] +-** {{Aligner à droite}} [/Paragraphe aligné à droite/] +-** {{Encadrer}} [(Paragraphe à encadrer)] +-* Caractères : +-** {{Mise en évidence}} [*texte en évidence*] +-** {{Mise en évidence variante}} [**texte en évidence (autre couleur)*] +-** {{Mise en exposant}} {<sup>}texte en exposant{</sup>} +-** {{Petites capitales}} {<sc>}texte en petite capitales{</sc>} +-** {{Biffé}} {<del>}texte biffé{</del>} + +{{Paramétrage}} : vous pouvez modifier le fonctionnement du plugin par votre fichier ecrire/mes_options.php ou en installant le plugin cfg (les options de cfg sont priortitaires par rapport à celles de mes_options.php !) + + typoenluminee + img_pack/moinecopiste.gif + + + pre_propre + typoenluminee.php + + + post_propre + typoenluminee.php + + + pre_typo + typoenluminee.php + + + post_typo + typoenluminee.php + + + nettoyer_raccourcis_typo + typoenluminee.php + + + insert_head_css + typoenluminee_pipelines.php + + + insert_head + typoenluminee_pipelines.php + + + header_prive + typoenluminee_pipelines.php + + + porte_plume_barre_pre_charger + enluminures_typo_pipelines.php + + + porte_plume_lien_classe_vers_icone + enluminures_typo_pipelines.php + + edition + + + diff --git a/www/plugins/enluminures_typographiques_v3/prive/squelettes/contenu/configurer_typoenluminee.html b/www/plugins/enluminures_typographiques_v3/prive/squelettes/contenu/configurer_typoenluminee.html new file mode 100644 index 00000000..7926bbff --- /dev/null +++ b/www/plugins/enluminures_typographiques_v3/prive/squelettes/contenu/configurer_typoenluminee.html @@ -0,0 +1,5 @@ +[(#AUTORISER{configurer,typoenluminee}|sinon_interdire_acces)] +

    <:enlumtypo:configuration_typoenluminee:>

    +
    + #FORMULAIRE_CONFIGURER_TYPOENLUMINEE +
    \ No newline at end of file diff --git a/www/plugins/enluminures_typographiques_v3/prive/themes/spip/images/typoenluminee-16.png b/www/plugins/enluminures_typographiques_v3/prive/themes/spip/images/typoenluminee-16.png new file mode 100644 index 00000000..edb0d98e Binary files /dev/null and b/www/plugins/enluminures_typographiques_v3/prive/themes/spip/images/typoenluminee-16.png differ diff --git a/www/plugins/enluminures_typographiques_v3/prive/themes/spip/images/typoenluminee-32.png b/www/plugins/enluminures_typographiques_v3/prive/themes/spip/images/typoenluminee-32.png new file mode 100644 index 00000000..76fbc360 Binary files /dev/null and b/www/plugins/enluminures_typographiques_v3/prive/themes/spip/images/typoenluminee-32.png differ diff --git a/www/plugins/enluminures_typographiques_v3/svn.revision b/www/plugins/enluminures_typographiques_v3/svn.revision new file mode 100644 index 00000000..9924c511 --- /dev/null +++ b/www/plugins/enluminures_typographiques_v3/svn.revision @@ -0,0 +1,10 @@ + + +Origine: file:///home/svn/repository/spip-zone/_plugins_/porte_plume_extras/enluminures_typographiques_v3 +Revision: 66428 +Dernier commit: 2012-10-02 11:00:02 +0200 + +file:///home/svn/repository/spip-zone/_plugins_/porte_plume_extras/enluminures_typographiques_v3 +66428 +2012-10-02 11:00:02 +0200 + \ No newline at end of file diff --git a/www/plugins/enluminures_typographiques_v3/typoenluminee.php b/www/plugins/enluminures_typographiques_v3/typoenluminee.php new file mode 100644 index 00000000..82bcfc92 --- /dev/null +++ b/www/plugins/enluminures_typographiques_v3/typoenluminee.php @@ -0,0 +1,258 @@ +texte : mettre en exposant le texte selectionne + * texte : mettre en indice le texte selectionne + * + * Styles pour les encadrements a rajouter dans votre feuille de style : + * .texteencadre-spip { + * background: #FFE; + * border-bottom: 2px solid #999999; + * border-left: 1px solid #EEEEEE; + * border-right: 2px solid #999999; + * border-top: 1px solid #EEEEEE; + * padding: .25em; + * } + * .caractencadre-spip { + * border: 1px solid #666; + * padding: 0px .5em 0px .5em; + * } + * + */ + +// Gerer les variables de personnalisation, fonction depreciee sous SPIP 2.0 +// A suivre sur la methode... +if(!function_exists('tester_variable')) { + function tester_variable($var, $val){ + if (!isset($GLOBALS[$var])) $GLOBALS[$var] = $val; + } +} + +function typoenluminee_pre_propre($texte) { + if(!$texte) return $texte; + + static $chercher_raccourcis=NULL; + static $remplacer_raccourcis=NULL; + + if ($chercher_raccourcis===NULL) { + + // tous les elements block doivent etre introduits ici + // pour etre pris en charge par paragrapher + + // Definition des differents intertitres possibles, si pas deja definies + if ((!function_exists('lire_config')) OR (isset($GLOBALS['config_intertitre']))) { + tester_variable('debut_intertitre', '

    '); + tester_variable('fin_intertitre', '

    '); + tester_variable('debut_intertitre_2', '

    '); + tester_variable('fin_intertitre_2', '

    '); + tester_variable('debut_intertitre_3', '
    '); + tester_variable('fin_intertitre_3', '
    '); + tester_variable('debut_intertitre_4', '
    '); + tester_variable('fin_intertitre_4', '
    '); + tester_variable('debut_intertitre_5', ''); + tester_variable('fin_intertitre_5', ''); + } else { + $GLOBALS['debut_intertitre'] = lire_config('bte/titraille1open','

    '); + $GLOBALS['fin_intertitre'] = lire_config('bte/titraille1close','

    '); + $GLOBALS['debut_intertitre_2'] = lire_config('bte/titraille2open','

    '); + $GLOBALS['fin_intertitre_2'] = lire_config('bte/titraille2close','

    '); + $GLOBALS['debut_intertitre_3'] = lire_config('bte/titraille3open','
    '); + $GLOBALS['fin_intertitre_3'] = lire_config('bte/titraille3close','
    '); + $GLOBALS['debut_intertitre_4'] = lire_config('bte/titraille4open','
    '); + $GLOBALS['fin_intertitre_4'] = lire_config('bte/titraille4close','
    '); + $GLOBALS['debut_intertitre_5'] = lire_config('bte/titraille5open',''); + $GLOBALS['fin_intertitre_5'] = lire_config('bte/titraille5close',''); + } + + tester_variable('toujours_paragrapher', false); + + global $debut_intertitre, $fin_intertitre; + global $debut_intertitre_2, $fin_intertitre_2; + global $debut_intertitre_3, $fin_intertitre_3; + global $debut_intertitre_4, $fin_intertitre_4; + global $debut_intertitre_5, $fin_intertitre_5; + + $chercher_raccourcis=array(); + $remplacer_raccourcis=array(); + + /* 9b */ $chercher_raccourcis[]="/(^|[^{])[{][{][{]\*\*\*\*\*(.*)[}][}][}]($|[^}])/SUms"; + /* 9 */ $chercher_raccourcis[]="/(^|[^{])[{][{][{]\*\*\*\*(.*)[}][}][}]($|[^}])/SUms"; + /* 7 */ $chercher_raccourcis[]="/(^|[^{])[{][{][{]\*\*\*(.*)[}][}][}]($|[^}])/SUms"; + /* 5 */ $chercher_raccourcis[]="/(^|[^{])[{][{][{]\*\*(.*)[}][}][}]($|[^}])/SUms"; + /* 3 */ $chercher_raccourcis[]="/(^|[^{])[{][{][{]\*(.*)[}][}][}]($|[^}])/SUms"; + /* 1 */ $chercher_raccourcis[]="/(^|[^{])[{][{][{](.*)[}][}][}]($|[^}])/SUms"; + /* 11 */ $chercher_raccourcis[]="/\{(§|§)\{/S"; # § Pour gerer l'unicode aussi ! + /* 12 */ $chercher_raccourcis[]="/\}(§|§)\}/S"; # ne pas sauvergarder ce fichier en utf8 ! + + /* 9b */ $remplacer_raccourcis[]="\$1\n\n$debut_intertitre_5\$2$fin_intertitre_5\n\n\$3"; + /* 9 */ $remplacer_raccourcis[]="\$1\n\n$debut_intertitre_4\$2$fin_intertitre_4\n\n\$3"; + /* 7 */ $remplacer_raccourcis[]="\$1\n\n$debut_intertitre_3\$2$fin_intertitre_3\n\n\$3"; + /* 5 */ $remplacer_raccourcis[]="\$1\n\n$debut_intertitre_2\$2$fin_intertitre_2\n\n\$3"; + /* 3 */ $remplacer_raccourcis[]="\$1\n\n$debut_intertitre\$2$fin_intertitre\n\n\$3"; + /* 1 */ $remplacer_raccourcis[]="\$1\n\n$debut_intertitre\$2$fin_intertitre\n\n\$3"; + /* 11 */ $remplacer_raccourcis[]=""; + /* 12 */ $remplacer_raccourcis[]=""; + } + + // Conversion des intertitres d'enluminures type {n{titre}n} + // ou n est un nombre en intertitres avec des etoiles type {{{* (avec n etoiles) + // {1{ sera converti en {{{* ; {2{ sera converti en {{{** ; etc. + // Ne faire la recherche que s'il y a au moins un titre ancienne mode a convertir + if (strpos($texte, '{2{')!==false + OR strpos($texte, '{3{')!==false + OR strpos($texte, '{4{')!==false + OR strpos($texte, '{5{')!==false) { + $texte=preg_replace_callback ("/\{(\d)\{(.*)\}(\\1)\}/Ums", + create_function ( + '$matches', + 'return "{{{".str_repeat("*",$matches[1]).trim($matches[2])."}}}";' + ), + $texte); + } + $texte = preg_replace($chercher_raccourcis, $remplacer_raccourcis, $texte); + + return $texte; +} + +function typoenluminee_post_propre($texte) { + if(!$texte) return $texte; + static $cherche1 = NULL; + static $remplace1 = NULL; + if ($cherche1===NULL) { + # Le remplacement des intertitres de premier niveau a deja ete effectue dans inc/texte.php + $cherche1 = array(); + $remplace1 = array(); + $cherche1[] = /* 15 */ ",\[/(.*)/\],Ums"; + $cherche1[] = /* 16 */ ",\[!(.*)!\],Ums"; + $cherche1[] = /* 17 */ ",\[\|(.*)\|\],Ums"; + $cherche1[] = /* 19 */ ",\[\((.*)\)\],Ums"; + $cherche1[] = /* 21 */ "/\[\*\*/S"; + $cherche1[] = /* 21b */ "/\[\*/S"; + $cherche1[] = /* 22 */ "/\*\]/S"; + + $remplace1[] = /* 15 */ "
    $1
    "; + $remplace1[] = /* 16 */ "
    $1
    "; + $remplace1[] = /* 17 */ "
    $1
    "; + $remplace1[] = /* 19 */ "
    $1
    "; + $remplace1[] = /* 21 */ ""; + $remplace1[] = /* 21b */ ""; + $remplace1[] = /* 22 */ ""; + } + $texte = preg_replace($cherche1, $remplace1, $texte); + $texte = paragrapher($texte,$GLOBALS['toujours_paragrapher']); // il faut reparagrapher a cause des raccourcis typo que l'on a ajoute (block div) + return $texte; +} + + +function typoenluminee_pre_typo($texte) { + if(!$texte) return $texte; + static $local_barre_typo_pas_de_fausses_puces = null; + static $chercher_raccourcis; + static $remplacer_raccourcis; + global $debut_italique, $fin_italique; + if (!isset($GLOBALS['barre_typo_pas_de_fork_typo']) OR $GLOBALS['barre_typo_pas_de_fork_typo'] === true) + return $texte; + + if ($local_barre_typo_pas_de_fausses_puces===null){ + // remplace les fausses listes a puce par de vraies ? + // (recherche en debut de lignes - suivi d'un ou plusieurs caracteres blancs, en mode multiligne) + // Mettre $GLOBALS['barre_typo_pas_de_fausses_puces'] = true; dans mes_options.php pour avoir ce comportement + if (isset($GLOBALS['barre_typo_pas_de_fausses_puces'])) { + $local_barre_typo_pas_de_fausses_puces = $GLOBALS['barre_typo_pas_de_fausses_puces']; + } else { + if (function_exists('lire_config')) { + $local_barre_typo_pas_de_fausses_puces = (lire_config('bte/puces','Non') == 'Oui')?true:false; + } + } + global $class_spip; + tester_variable('debut_italique', ""); + tester_variable('fin_italique', ''); + + $chercher_raccourcis = array( + /* 9 */ "/(?','↔',$texte); + $texte = str_replace('-->','→',$texte); + $texte = str_replace('<--','←',$texte); + $texte = str_replace('<==>','⇔',$texte); + $texte = str_replace('==>','⇒',$texte); + $texte = str_replace('<==','⇐',$texte); + $texte = str_ireplace('(c)','©',$texte); + $texte = str_ireplace('(r)','®',$texte); + $texte = str_ireplace('(tm)','™',$texte); + $texte = str_replace('...','…',$texte); + $texte = preg_replace($chercher_raccourcis, $remplacer_raccourcis, $texte); + + /* + Cas particulier pour le gras + Il ne faut pas traiter la mise en gras ici si le texte contient un tableau + */ + if (!preg_match(',.(\|([[:space:]]*{{[^}]+}}[[:space:]]*|<))+.,sS', $texte)) { + $chercher_raccourcisg = array( + /* 7 */ "/(?", + /* 8 */ "" + ); + $texte = preg_replace($chercher_raccourcisg, $remplacer_raccourcisg, $texte); + } + return $texte; +} + +function typoenluminee_post_typo($texte) { + if(!$texte) return $texte; + if (!isset($GLOBALS['barre_typo_pas_de_fork_typo']) OR $GLOBALS['barre_typo_pas_de_fork_typo'] === true) + return $texte; + $texte = str_replace('[^','',$texte); + $texte = str_replace('^]','',$texte); + $texte = str_replace('[**','',$texte); + $texte = str_replace('[*','',$texte); + $texte = str_replace('*]','',$texte); + + // Correction des & en & + $texte = preg_replace('/&([A-Za-z#0-9]*);/','@@@amp:\1:amp@@@',$texte); // echapement des entites html deja presentes + $texte = str_replace('&','&',$texte); + $texte = preg_replace('/@@@amp:([A-Za-z#0-9]*):amp@@@/','&\1;',$texte); + // Raccourci typographique + $texte = str_replace('', '', $texte); + $texte = str_replace('', '', $texte); + return $texte; +} + +function typoenluminee_nettoyer_raccourcis_typo($texte){ + $texte = preg_replace(',\{[1-5]\{,','',$texte); + $texte = preg_replace(',\}[1-5]\},','',$texte); + $texte = preg_replace(',\{\{\{\*+,','{{{',$texte); + $texte = str_replace('…','...',$texte); + return $texte; +} + +?> \ No newline at end of file diff --git a/www/plugins/enluminures_typographiques_v3/typoenluminee_pipelines.php b/www/plugins/enluminures_typographiques_v3/typoenluminee_pipelines.php new file mode 100644 index 00000000..cac292e8 --- /dev/null +++ b/www/plugins/enluminures_typographiques_v3/typoenluminee_pipelines.php @@ -0,0 +1,30 @@ + du document (#INSERT_HEAD) +function TypoEnluminee_insert_head_css($flux) { + static $done = false; + if (!$done) { + $done = true; + if (isset($GLOBALS['BarreTypoEnrichie_Preserve_Header']) OR !function_exists('lire_config')) + global $BarreTypoEnrichie_Preserve_Header; + else + $BarreTypoEnrichie_Preserve_Header = lire_config('bte/insertcss','Oui'); + if ($BarreTypoEnrichie_Preserve_Header == 'Oui') + $flux .= "\n".''; + } + return $flux; +} + +// insert le css pour les styles supplementaires de la BTE dans le du document (#INSERT_HEAD) +function TypoEnluminee_insert_head($flux) { + $flux = TypoEnluminee_insert_head_css($flux); + return $flux; +} +function TypoEnluminee_header_prive($texte) { + $texte.= '' . "\n"; + $texte.= '' . "\n"; + return $texte; +} + +?> \ No newline at end of file diff --git a/www/plugins/facteur/classes/facteur.php b/www/plugins/facteur/classes/facteur.php new file mode 100755 index 00000000..ca3edab2 --- /dev/null +++ b/www/plugins/facteur/classes/facteur.php @@ -0,0 +1,424 @@ + $GLOBALS['meta']['facteur_adresse_envoi'], + 'adresse_envoi_email' => $GLOBALS['meta']['facteur_adresse_envoi_email'], + 'adresse_envoi_nom' => $GLOBALS['meta']['facteur_adresse_envoi_nom'], + 'cc' => $GLOBALS['meta']['facteur_cc'], + 'bcc' => $GLOBALS['meta']['facteur_bcc'], + 'smtp' => $GLOBALS['meta']['facteur_smtp'], + 'smtp_host' => $GLOBALS['meta']['facteur_smtp_host'], + 'smtp_port' => $GLOBALS['meta']['facteur_smtp_port'], + 'smtp_auth' => $GLOBALS['meta']['facteur_smtp_auth'], + 'smtp_username' => $GLOBALS['meta']['facteur_smtp_username'], + 'smtp_password' => $GLOBALS['meta']['facteur_smtp_password'], + 'smtp_secure' => $GLOBALS['meta']['facteur_smtp_secure'], + 'smtp_sender' => $GLOBALS['meta']['facteur_smtp_sender'], + 'filtre_images' => $GLOBALS['meta']['facteur_filtre_images'], + 'filtre_iso_8859' => $GLOBALS['meta']['facteur_filtre_iso_8859'], + ); + $options = array_merge($defaut, $options); + + if (defined('_FACTEUR_DEBUG_SMTP')) { + $this->SMTPDebug = _FACTEUR_DEBUG_SMTP ; + } + if ($options['adresse_envoi'] == 'oui' + AND $options['adresse_envoi_email']) + $this->From = $options['adresse_envoi_email']; + else + $this->From = (isset($GLOBALS['meta']["email_envoi"]) AND $GLOBALS['meta']["email_envoi"])? + $GLOBALS['meta']["email_envoi"] + :$GLOBALS['meta']['email_webmaster']; + + // Si plusieurs emails dans le from, pas de Name ! + if (strpos($this->From,",")===false){ + if ($options['adresse_envoi'] == 'oui' + AND $options['adresse_envoi_nom']) + $this->FromName = $options['adresse_envoi_nom']; + else + $this->FromName = strip_tags(extraire_multi($GLOBALS['meta']['nom_site'])); + } + + $this->CharSet = "utf-8"; + $this->Mailer = 'mail'; + $this->Subject = unicode_to_utf_8(charset2unicode($objet,$GLOBALS['meta']['charset'])); + + //Pour un envoi multiple de mail, $email doit être un tableau avec les adresses. + if (is_array($email)) { + foreach ($email as $cle => $adresseMail) { + if (!$this->AddAddress($adresseMail)) + spip_log("Erreur AddAddress $adresseMail : ".print_r($this->ErrorInfo,true),'facteur'); + } + } + else + if (!$this->AddAddress($email)) + spip_log("Erreur AddAddress $email : ".print_r($this->ErrorInfo,true),'facteur'); + + if (!empty($options['smtp_sender'])) { + $this->Sender = $options['smtp_sender']; + $this->AddCustomHeader("Errors-To: ".$this->Sender); + } + + if (!empty($options['cc'])) { + $this->AddCC( $options['cc'] ); + } + if (!empty($options['bcc'])) { + $this->AddBCC( $options['bcc'] ); + } + + if (isset($options['smtp']) AND $options['smtp'] == 'oui') { + $this->Mailer = 'smtp'; + $this->Host = $options['smtp_host']; + $this->Port = $options['smtp_port']; + if ($options['smtp_auth'] == 'oui') { + $this->SMTPAuth = true; + $this->Username = $options['smtp_username']; + $this->Password = $options['smtp_password']; + } + else { + $this->SMTPAuth = false; + } + if (intval(phpversion()) == 5) { + if ($options['smtp_secure'] == 'ssl') + $this->SMTPSecure = 'ssl'; + if ($options['smtp_secure'] == 'tls') + $this->SMTPSecure = 'tls'; + } + } + + if (!empty($message_html)) { + $message_html = unicode_to_utf_8(charset2unicode($message_html,$GLOBALS['meta']['charset'])); + $this->Body = $message_html; + $this->IsHTML(true); + if ($options['filtre_images']) + $this->JoindreImagesHTML(); + $this->UrlsAbsolues(); + } + if (!empty($message_texte)) { + $message_texte = unicode_to_utf_8(charset2unicode($message_texte,$GLOBALS['meta']['charset'])); + if (!$this->Body) { + $this->IsHTML(false); + $this->Body = $message_texte; + } + else { + $this->AltBody = $message_texte; + } + } + + if ($options['filtre_iso_8859']) + $this->ConvertirUtf8VersIso8859(); + + } + + /* + * Transforme du HTML en texte brut, mais proprement, c'est-à-dire en essayant + * de garder les titrages, les listes, etc + * + * @param string $html Le HTML à transformer + * @return string Retourne un texte brut formaté correctement + */ + function html2text($html){ + // On remplace tous les sauts de lignes par un espace + $html = str_replace("\n", ' ', $html); + + // Supprimer tous les liens internes + $texte = preg_replace("/\]*>(.*?)<\/a>/ims", "\\2", $html); + + // Supprime feuille style + $texte = preg_replace(";]*>[^<]*;i", "", $texte); + + // Remplace tous les liens + $texte = preg_replace("/\]*href=['\"](.*?)['\"][^>]*>(.*?)<\/a>/ims", "\\2 (\\1)", $texte); + + // Les titres + $texte = preg_replace(";]*>;i", "\n= ", $texte); + $texte = str_replace("", " =\n\n", $texte); + $texte = preg_replace(";]*>;i", "\n== ", $texte); + $texte = str_replace("", " ==\n\n", $texte); + $texte = preg_replace(";]*>;i", "\n=== ", $texte); + $texte = str_replace("", " ===\n\n", $texte); + + // Une fin de liste + $texte = preg_replace(";;i", "\n\n", $texte); + + // Une saut de ligne *après* le paragraphe + $texte = preg_replace(";]*>;i", "\n", $texte); + $texte = preg_replace(";

    ;i", "\n\n", $texte); + // Les sauts de ligne interne + $texte = preg_replace(";]*>;i", "\n", $texte); + + //$texte = str_replace('
    \'-\'', "\n".'-', $texte); + $texte = preg_replace (';]*>;i', "\n".'- ', $texte); + + + // accentuation du gras + // texte -> **texte** + $texte = preg_replace (';]*>;i','**' ,$texte); + $texte = str_replace ('','**' ,$texte); + + // accentuation du gras + // texte -> **texte** + $texte = preg_replace (';]*>;i','**' ,$texte); + $texte = str_replace ('
    ','**' ,$texte); + + + // accentuation de l'italique + // texte -> *texte* + $texte = preg_replace (';]*>;i','/' ,$texte); + $texte = str_replace ('','*' ,$texte); + + // accentuation de l'italique + // texte -> *texte* + $texte = preg_replace (';]*>;i','/' ,$texte); + $texte = str_replace ('','*' ,$texte); + + $texte = str_replace('œ', 'oe', $texte); + $texte = str_replace(" ", " ", $texte); + $texte = filtrer_entites($texte); + + // On supprime toutes les balises restantes + $texte = supprimer_tags($texte); + + $texte = str_replace("\x0B", "", $texte); + $texte = str_replace("\t", "", $texte) ; + $texte = preg_replace(";[ ]{3,};", "", $texte); + + // espace en debut de ligne + $texte = preg_replace("/(\r\n|\n|\r)[ ]+/", "\n", $texte); + + //marche po + // Bring down number of empty lines to 4 max + $texte = preg_replace("/(\r\n|\n|\r){3,}/m", "\n\n", $texte); + + //saut de lignes en debut de texte + $texte = preg_replace("/^(\r\n|\n|\r)*/", "\n\n", $texte); + //saut de lignes en debut ou fin de texte + $texte = preg_replace("/(\r\n|\n|\r)*$/", "\n\n", $texte); + + // Faire des lignes de 75 caracteres maximum + //$texte = wordwrap($texte); + + return $texte; + } + + /** + * Transformer les urls des liens et des images en url absolues + * sans toucher aux images embarquees de la forme "cid:..." + */ + function UrlsAbsolues($base=null){ + include_spip('inc/filtres_mini'); + if (preg_match_all(',(<(a|link)[[:space:]]+[^<>]*href=["\']?)([^"\' ><[:space:]]+)([^<>]*>),imsS', + $this->Body, $liens, PREG_SET_ORDER)) { + foreach ($liens as $lien) { + if (strncmp($lien[3],"cid:",4)!==0){ + $abs = url_absolue($lien[3], $base); + if ($abs <> $lien[3] and !preg_match('/^#/',$lien[3])) + $this->Body = str_replace($lien[0], $lien[1].$abs.$lien[4], $this->Body); + } + } + } + if (preg_match_all(',(<(img|script)[[:space:]]+[^<>]*src=["\']?)([^"\' ><[:space:]]+)([^<>]*>),imsS', + $this->Body, $liens, PREG_SET_ORDER)) { + foreach ($liens as $lien) { + if (strncmp($lien[3],"cid:",4)!==0){ + $abs = url_absolue($lien[3], $base); + if ($abs <> $lien[3]) + $this->Body = str_replace($lien[0], $lien[1].$abs.$lien[4], $this->Body); + } + } + } + } + + function JoindreImagesHTML() { + $image_types = array( + 'gif' => 'image/gif', + 'jpg' => 'image/jpeg', + 'jpeg' => 'image/jpeg', + 'jpe' => 'image/jpeg', + 'bmp' => 'image/bmp', + 'png' => 'image/png', + 'tif' => 'image/tiff', + 'tiff' => 'image/tiff', + 'swf' => 'application/x-shockwave-flash' + ); + $src_found = array(); + $images_embeded = array(); + if (preg_match_all( + '/["\'](([^"\']+)\.('.implode('|', array_keys($image_types)).'))([?][^"\']+)?([#][^"\']+)?["\']/Uims', + $this->Body, $images, PREG_SET_ORDER)) { + + $adresse_site = $GLOBALS['meta']['adresse_site'].'/'; + foreach($images as $im){ + $src_orig = $im[1].$im[4].$im[5]; + if (!isset($src_found[$src_orig])){ // deja remplace ? rien a faire (ie la meme image presente plusieurs fois) + // examiner le src et voir si embedable + $src = $im[1]; + if ($src AND strncmp($src,$adresse_site,strlen($adresse_site))==0) + $src = _DIR_RACINE . substr($src,strlen($adresse_site)); + if ($src + AND !preg_match(",^[a-z0-9]+://,i",$src) + AND ( + file_exists($f=$src) // l'image a ete generee depuis le meme cote que l'envoi + OR (_DIR_RACINE AND file_exists($f=_DIR_RACINE.$src)) // l'image a ete generee dans le public et on est dans le prive + OR (!_DIR_RACINE AND file_exists($f=_DIR_RESTREINT.$src)) // l'image a ete generee dans le prive et on est dans le public + ) + ){ + if (!isset($images_embeded[$f])){ + $extension = strtolower($im[3]); + $header_extension = $image_types[$extension]; + $cid = md5($f); // un id unique pour un meme fichier + $images_embeded[$f] = $cid; // marquer l'image comme traitee, inutile d'y revenir + $this->AddEmbeddedImage($f, $cid, basename($f),'base64',$header_extension); + } + + $this->Body = str_replace($src_orig, "cid:".$images_embeded[$f], $this->Body); + $src_found[$src_orig] = $f; + } + } + } + } + } + + + /** + * Compat ascendante, obsolete + */ + function ConvertirStylesEnligne() { + $this->Body = facteur_convertir_styles_inline($this->Body); + } + + + function safe_utf8_decode($text,$mode='texte_brut') { + if (!is_utf8($text)) + return ($text); + + if (function_exists('iconv') && $mode == 'texte_brut') { + $text = str_replace('’',"'",$text); + $text = iconv("UTF-8", "ISO-8859-1//TRANSLIT", $text); + return str_replace('’',"'",$text); + } + else { + if ($mode == 'texte_brut') { + $text = str_replace('’',"'",$text); + } + $text = unicode2charset(utf_8_to_unicode($text),'iso-8859-1'); + return str_replace('’',"'",$text); + } + } + + function ConvertirUtf8VersIso8859() { + $this->CharSet = 'iso-8859-1'; + $this->Body = str_ireplace('charset=utf-8', 'charset=iso-8859-1', $this->Body); + $this->Body = $this->safe_utf8_decode($this->Body,'html'); + $this->AltBody = $this->safe_utf8_decode($this->AltBody); + $this->Subject = $this->safe_utf8_decode($this->Subject); + $this->FromName = $this->safe_utf8_decode($this->FromName); + } + + function ConvertirAccents() { + // tableau à compléter au fur et à mesure + $cor = array( + 'à' => 'à', + 'â' => 'â', + 'ä' => 'ä', + 'ç' => 'ç', + 'é' => 'é', + 'è' => 'è', + 'ê' => 'ê', + 'ë' => 'ë', + 'î' => 'î', + 'ï' => 'ï', + 'ò' => 'ò', + 'ô' => 'ô', + 'ö' => 'ö', + 'ù' => 'ù', + 'û' => 'û', + 'œ' => 'œ', + '€' => '€' + ); + + $this->Body = strtr($this->Body, $cor); + } + public function Send() { + ob_start(); + $retour = parent::Send(); + $error = ob_get_contents(); + ob_end_clean(); + if( !empty($error) ) { + spip_log("Erreur Facteur->Send : $error",'facteur.err'); + } + return $retour; + } + public function AddAttachment($path, $name = '', $encoding = 'base64', $type = 'application/octet-stream') { + ob_start(); + $retour = parent::AddAttachment($path, $name, $encoding, $type); + $error = ob_get_contents(); + ob_end_clean(); + if( !empty($error) ) { + spip_log("Erreur Facteur->AddAttachment : $error",'facteur.err'); + } + return $retour; + } + public function AddReplyTo($address, $name = '') { + ob_start(); + $retour = parent::AddReplyTo($address, $name); + $error = ob_get_contents(); + ob_end_clean(); + if( !empty($error) ) { + spip_log("Erreur Facteur->AddReplyTo : $error",'facteur.err'); + } + return $retour; + } + public function AddBCC($address, $name = '') { + ob_start(); + $retour = parent::AddBCC($address, $name); + $error = ob_get_contents(); + ob_end_clean(); + if( !empty($error) ) { + spip_log("Erreur Facteur->AddBCC : $error",'facteur.err'); + } + return $retour; + } + public function AddCC($address, $name = '') { + ob_start(); + $retour = parent::AddCC($address, $name); + $error = ob_get_contents(); + ob_end_clean(); + if( !empty($error) ) { + spip_log("Erreur Facteur->AddCC : $error",'facteur.err'); + } + return $retour; + } +} + +?> diff --git a/www/plugins/facteur/emails/css.html b/www/plugins/facteur/emails/css.html new file mode 100755 index 00000000..ace3aa93 --- /dev/null +++ b/www/plugins/facteur/emails/css.html @@ -0,0 +1,63 @@ + \ No newline at end of file diff --git a/www/plugins/facteur/emails/inc-bas.html b/www/plugins/facteur/emails/inc-bas.html new file mode 100755 index 00000000..b8a8c191 --- /dev/null +++ b/www/plugins/facteur/emails/inc-bas.html @@ -0,0 +1,22 @@ + +  + +[ +[(#NOM_SITE_SPIP|textebrut)] + +] +  + + + + + + + + + + + + + + \ No newline at end of file diff --git a/www/plugins/facteur/emails/inc-button.html b/www/plugins/facteur/emails/inc-button.html new file mode 100644 index 00000000..08fc0d37 --- /dev/null +++ b/www/plugins/facteur/emails/inc-button.html @@ -0,0 +1,23 @@ +[(#REM) + Bulletproof button code for email html + from http://emailbtn.net/ + + Arguments : + url + label + color (#ffffff par defaut) + bgcolor (#556270 par defaut) + bordercolor (#1e3650 par defaut) + borderradius (4px par defaut) + width (200px par defaut) + height (40px par defaut) + bgurl (rien par defaut) +] +#ENV*{label} \ No newline at end of file diff --git a/www/plugins/facteur/emails/inc-haut.html b/www/plugins/facteur/emails/inc-haut.html new file mode 100755 index 00000000..21f4ee19 --- /dev/null +++ b/www/plugins/facteur/emails/inc-haut.html @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + +
    + + +
    + + + + + + +[ + + +] + + + + + + + + + + +#SET{diff, #ENV{reponses_total}|moins{#ENV{valeurs}|count}} +[(#GET{diff}|>{0}|oui) + + + + +] diff --git a/www/plugins/formidable_1_0/saisies-analyses/checkbox.html b/www/plugins/formidable_1_0/saisies-analyses/checkbox.html new file mode 100644 index 00000000..ad682aea --- /dev/null +++ b/www/plugins/formidable_1_0/saisies-analyses/checkbox.html @@ -0,0 +1,26 @@ +#SET{stats,#ARRAY} + + + #SET_MERGE{stats, #ARRAY{choix-#VALEUR, #GET{stats}|table_valeur{choix-#VALEUR}|sinon{0}|plus{1}}} + + + +[(#REM) datas peut être une chaine qu'on sait décomposer ] +#SET{datas, #ENV*{datas}} +#SET{datas, #GET{datas}|is_string|?{(#GET{datas}|saisies_chaine2tableau), #GET{datas}}} + + +[(#SET{nb,[(#GET{stats}|table_valeur{choix-#CLE}|sinon{0})]})] + + + + + + +#SET{diff, #ENV{reponses_total}|moins{#ENV{valeurs}|count}} +[(#GET{diff}|>{0}|oui) + + + + +] diff --git a/www/plugins/formidable_1_0/saisies-analyses/destinataires.html b/www/plugins/formidable_1_0/saisies-analyses/destinataires.html new file mode 100644 index 00000000..9692d031 --- /dev/null +++ b/www/plugins/formidable_1_0/saisies-analyses/destinataires.html @@ -0,0 +1,14 @@ +#SET{stats,#ARRAY} + + + #SET_MERGE{stats, #ARRAY{auteur-#VALEUR, #GET{stats}|table_valeur{auteur-#VALEUR}|sinon{0}|plus{1}}} + + + + +#SET{id_auteur, #CLE|replace{'auteur-', ''}} + + + + + diff --git a/www/plugins/formidable_1_0/saisies-analyses/explication.html b/www/plugins/formidable_1_0/saisies-analyses/explication.html new file mode 100644 index 00000000..703e6c02 --- /dev/null +++ b/www/plugins/formidable_1_0/saisies-analyses/explication.html @@ -0,0 +1,4 @@ + + + + diff --git a/www/plugins/formidable_1_0/saisies-analyses/oui_non.html b/www/plugins/formidable_1_0/saisies-analyses/oui_non.html new file mode 100644 index 00000000..51a9faf9 --- /dev/null +++ b/www/plugins/formidable_1_0/saisies-analyses/oui_non.html @@ -0,0 +1,27 @@ +#SET{oui,0} +#SET{non,0} + + [(#VALEUR|oui) + #SET{oui,#GET{oui}|plus{1}} + ] + [(#VALEUR|non) + #SET{non,#GET{non}|plus{1}} + ] + + + + + + + + + + + +#SET{diff, #ENV{reponses_total}|moins{#ENV{valeurs}|count}} +[(#GET{diff}|>{0}|oui) + + + + +] diff --git a/www/plugins/formidable_1_0/saisies-analyses/radio.html b/www/plugins/formidable_1_0/saisies-analyses/radio.html new file mode 100644 index 00000000..88627d0a --- /dev/null +++ b/www/plugins/formidable_1_0/saisies-analyses/radio.html @@ -0,0 +1,26 @@ +#SET{stats,#ARRAY} + + [(#VALEUR|oui) + #SET_MERGE{stats, #ARRAY{choix-#VALEUR, #GET{stats}|table_valeur{choix-#VALEUR}|sinon{0}|plus{1}}} + ] + + +[(#REM) datas peut être une chaine qu'on sait décomposer ] +#SET{datas, #ENV*{datas}} +#SET{datas, #GET{datas}|is_string|?{(#GET{datas}|saisies_chaine2tableau), #GET{datas}}} + + +[(#SET{nb,[(#GET{stats}|table_valeur{choix-#CLE}|sinon{0})]})] + + + + + + +#SET{diff, #ENV{reponses_total}|moins{#ENV{valeurs}|count}} +[(#GET{diff}|>{0}|oui) + + + + +] diff --git a/www/plugins/formidable_1_0/saisies-analyses/selecteur_article.html b/www/plugins/formidable_1_0/saisies-analyses/selecteur_article.html new file mode 100644 index 00000000..35f08b42 --- /dev/null +++ b/www/plugins/formidable_1_0/saisies-analyses/selecteur_article.html @@ -0,0 +1,13 @@ +[(#REM) Attention, saisie multiple non testee ] + +#SET{plein,#ENV{valeurs}|array_filter} +#SET{vide,#ENV{valeurs}|array_diff_key{#GET{plein}}} + + + + + + + + + diff --git a/www/plugins/formidable_1_0/saisies-analyses/selecteur_rubrique.html b/www/plugins/formidable_1_0/saisies-analyses/selecteur_rubrique.html new file mode 100644 index 00000000..35f08b42 --- /dev/null +++ b/www/plugins/formidable_1_0/saisies-analyses/selecteur_rubrique.html @@ -0,0 +1,13 @@ +[(#REM) Attention, saisie multiple non testee ] + +#SET{plein,#ENV{valeurs}|array_filter} +#SET{vide,#ENV{valeurs}|array_diff_key{#GET{plein}}} + + + + + + + + + diff --git a/www/plugins/formidable_1_0/saisies-analyses/selecteur_rubrique_article.html b/www/plugins/formidable_1_0/saisies-analyses/selecteur_rubrique_article.html new file mode 100644 index 00000000..a8ef6aec --- /dev/null +++ b/www/plugins/formidable_1_0/saisies-analyses/selecteur_rubrique_article.html @@ -0,0 +1,14 @@ +[(#REM) Peut etre ameliore en comptant par exemple le nombre d'article / rubriques +Attention, saisie multiple non testee ] + +#SET{plein,#ENV{valeurs}|array_filter} +#SET{vide,#ENV{valeurs}|array_diff_key{#GET{plein}}} + + + + + + + + + diff --git a/www/plugins/formidable_1_0/saisies-analyses/selection.html b/www/plugins/formidable_1_0/saisies-analyses/selection.html new file mode 100644 index 00000000..54589d33 --- /dev/null +++ b/www/plugins/formidable_1_0/saisies-analyses/selection.html @@ -0,0 +1,25 @@ +#SET{stats,#ARRAY} + + [(#VALEUR|oui) + #SET_MERGE{stats, #ARRAY{choix-#VALEUR, #GET{stats}|table_valeur{choix-#VALEUR}|sinon{0}|plus{1}}} + ] + + +[(#REM) datas peut être une chaine qu'on sait décomposer ] +#SET{datas, #ENV{datas}} +#SET{datas, #GET{datas}|is_string|?{(#GET{datas}|saisies_chaine2tableau), #GET{datas}}} + + + + + + + + +#SET{diff, #ENV{valeurs}|count|moins{#GET{stats}|array_sum}} +[(#GET{diff}|>{0}|oui) + + + + +] diff --git a/www/plugins/formidable_1_0/saisies-analyses/selection_multiple.html b/www/plugins/formidable_1_0/saisies-analyses/selection_multiple.html new file mode 100644 index 00000000..0f1212a6 --- /dev/null +++ b/www/plugins/formidable_1_0/saisies-analyses/selection_multiple.html @@ -0,0 +1,25 @@ +#SET{stats,#ARRAY} + + + #SET_MERGE{stats, #ARRAY{choix-#VALEUR, #GET{stats}|table_valeur{choix-#VALEUR}|sinon{0}|plus{1}}} + + + +[(#REM) datas peut être une chaine qu'on sait décomposer ] +#SET{datas, #ENV{datas}} +#SET{datas, #GET{datas}|is_string|?{(#GET{datas}|saisies_chaine2tableau), #GET{datas}}} + + + + + + + + +#SET{diff, #ENV{reponses_total}|moins{#ENV{valeurs}|count}} +[(#GET{diff}|>{0}|oui) + + + + +] diff --git a/www/plugins/formidable_1_0/saisies-vues/formulaire_formidable.html b/www/plugins/formidable_1_0/saisies-vues/formulaire_formidable.html new file mode 100644 index 00000000..a9692f86 --- /dev/null +++ b/www/plugins/formidable_1_0/saisies-vues/formulaire_formidable.html @@ -0,0 +1,5 @@ + +

    [(#TITRE|typo)] (#IDENTIFIANT)

    + +

    <:saisies:vue_sans_reponse:>

    + \ No newline at end of file diff --git a/www/plugins/formidable_1_0/saisies-vues/formulaire_formidable_multiple.html b/www/plugins/formidable_1_0/saisies-vues/formulaire_formidable_multiple.html new file mode 100644 index 00000000..9b75a57c --- /dev/null +++ b/www/plugins/formidable_1_0/saisies-vues/formulaire_formidable_multiple.html @@ -0,0 +1,9 @@ + +
      + +
    • [(#TITRE|typo)] (#IDENTIFIANT)
    • + +
    +
    +

    <:saisies:vue_sans_reponse:>

    + \ No newline at end of file diff --git a/www/plugins/formidable_1_0/saisies/champ.html b/www/plugins/formidable_1_0/saisies/champ.html new file mode 100644 index 00000000..d2ad8d8a --- /dev/null +++ b/www/plugins/formidable_1_0/saisies/champ.html @@ -0,0 +1,28 @@ + + diff --git a/www/plugins/formidable_1_0/saisies/formulaire_formidable.html b/www/plugins/formidable_1_0/saisies/formulaire_formidable.html new file mode 100644 index 00000000..e8d8bb4c --- /dev/null +++ b/www/plugins/formidable_1_0/saisies/formulaire_formidable.html @@ -0,0 +1,22 @@ +[(#REM) + Saisie permettant de sélectionner un formulaire par son identifiant + + ### /!\ boucle POUR (spip Bonux) ### + + Parametres : + - option_intro : chaine de langue de la premiere ligne vide ? (defaut:"") + - cacher_option_intro : pas de premier option vide (defaut:"") + - class : classe(s) css ajoutes au select + + Exemple d'appel : + [(#SAISIE{formulaire_formidable,nom, + label=<:plugin:label:>, + })] +] + + diff --git a/www/plugins/formidable_1_0/saisies/formulaire_formidable_multiple.html b/www/plugins/formidable_1_0/saisies/formulaire_formidable_multiple.html new file mode 100644 index 00000000..b8ef7aaa --- /dev/null +++ b/www/plugins/formidable_1_0/saisies/formulaire_formidable_multiple.html @@ -0,0 +1,26 @@ +[(#REM) + Saisie permettant de sélectionner plusieurs formulaires par leur identifiant + + ### /!\ boucle POUR (spip Bonux) ### + + Parametres : + - option_intro : chaine de langue de la premiere ligne vide ? (defaut:"") + - cacher_option_intro : pas de premier option vide (defaut:"") + - class : classe(s) css ajoutes au select + + Exemple d'appel : + [(#SAISIE{formulaire_formidable_multiple,nom, + label=<:plugin:label:>, + })] +] + +[(#REM) defaut peut être une chaine (plusieurs valeurs ou pas) qu'on sait décomposer ] +#SET{defaut, #ENV{defaut}} +#SET{defaut, #GET{defaut}|is_string|?{(#GET{defaut}|saisies_chaine2tableau), (#GET{defaut}|sinon{#ARRAY})}} + + diff --git a/www/plugins/formidable_1_0/svn.revision b/www/plugins/formidable_1_0/svn.revision new file mode 100644 index 00000000..b2c9baba --- /dev/null +++ b/www/plugins/formidable_1_0/svn.revision @@ -0,0 +1,10 @@ + + +Origine: file:///home/svn/repository/spip-zone/_plugins_/formidable/trunk +Revision: 73827 +Dernier commit: 2013-06-24 13:00:08 +0200 + +file:///home/svn/repository/spip-zone/_plugins_/formidable/trunk +73827 +2013-06-24 13:00:08 +0200 + \ No newline at end of file diff --git a/www/plugins/formidable_1_0/todo.txt b/www/plugins/formidable_1_0/todo.txt new file mode 100644 index 00000000..c857bbec --- /dev/null +++ b/www/plugins/formidable_1_0/todo.txt @@ -0,0 +1,19 @@ + +À faire : +--------- ++ Ajouter des liens "réponse précédente/suivante" dans la visualisation d'une réponse ++ Afficher une boite listant les formulaires disponibles dans l'édition d'un article ++ Afficher des saisies en javascript suivant des conditions ++ Utiliser le plugin CVT multi-pages de Cédric ++ Afficher des pages suivant des conditions (scénarios) ++ Pouvoir attacher des fichiers (et donc les envoyer par mail et les enregistrer en base comme document) ++ Déplacer les saisies en drag-n-drop ++ Ajouter une saisie directement au bon endroit en drag-n-drop ++ Améliorer le texte brut généré à partir du HTML + +Idées : +------- ++ Permettre des messages différents lors de la réédition d'un formulaire (avant et après modification) ++ Permettre de prévisualiser avant soumission le formulaire ++ Premettre d'afficher un formulaire en fonction du statut du visiteur ++ Avoir lors de l'édition des champs du formulaire un bouton «Enregistrer et continuer d'éditer» diff --git a/www/plugins/formidable_1_0/traiter/email.php b/www/plugins/formidable_1_0/traiter/email.php new file mode 100644 index 00000000..c7a60e47 --- /dev/null +++ b/www/plugins/formidable_1_0/traiter/email.php @@ -0,0 +1,193 @@ +$val) $a_remplacer[$cle] = trim($val, '@'); + $a_remplacer = array_flip($a_remplacer); + $a_remplacer = array_intersect_key($valeurs, $a_remplacer); + $a_remplacer = array_merge($a_remplacer, array('nom_site_spip' => $nom_site_spip)); + } + $nom_envoyeur = trim(_L($options['champ_nom'], $a_remplacer)); + } + if (!$nom_envoyeur) $nom_envoyeur = $GLOBALS['meta']['nom_site']; + + // On récupère le sujet s'il existe sinon on le construit + if ($options['champ_sujet']){ + $a_remplacer = array(); + if (preg_match_all('/@[\w]+@/', $options['champ_sujet'], $a_remplacer)){ + $a_remplacer = $a_remplacer[0]; + foreach ($a_remplacer as $cle=>$val) $a_remplacer[$cle] = trim($val, '@'); + $a_remplacer = array_flip($a_remplacer); + $a_remplacer = array_intersect_key($valeurs, $a_remplacer); + $a_remplacer = array_merge($a_remplacer, array('nom_site_spip' => $nom_site_spip)); + } + $sujet = trim(_L($options['champ_sujet'], $a_remplacer)); + } + if (!$sujet) $sujet = _T('formidable:traiter_email_sujet', array('nom'=>$nom_envoyeur)); + $sujet = filtrer_entites($sujet); + + // Mais quel va donc être le fond ? + if (find_in_path('notifications/formulaire_'.$formulaire['identifiant'].'_email.html')) + $notification = 'notifications/formulaire_'.$formulaire['identifiant'].'_email'; + else + $notification = 'notifications/formulaire_email'; + + // On génère le mail avec le fond + $html = recuperer_fond( + $notification, + array( + 'id_formulaire' => $formulaire['id_formulaire'], + 'titre' => _T_ou_typo($formulaire['titre']), + 'traitements' => $traitements, + 'saisies' => $saisies, + 'valeurs' => $valeurs + ) + ); + + // On génère le texte brut + include_spip('classes/facteur'); + $texte = Facteur::html2text($html); + + // On utilise la forme avancé de Facteur + $corps = array( + 'html' => $html, + 'texte' => $texte, + 'nom_envoyeur' => $nom_envoyeur + ); + // Si l'utilisateur n'a pas indiqué autrement, on met le courriel de l'envoyeur dans + // Reply-To et on laisse le from par defaut de Facteur car sinon ca bloque sur les + // SMTP un peu restrictifs. + $courriel_from = ""; + if ($courriel_envoyeur && $options['activer_vrai_envoyeur']){ + $courriel_from = $courriel_envoyeur; + } else if ($courriel_envoyeur) { + $corps['repondre_a'] = $courriel_envoyeur; + } + + // On envoie enfin le message + $envoyer_mail = charger_fonction('envoyer_mail','inc'); + + // On envoie aux destinataires + if ($destinataires) + $ok = $envoyer_mail($destinataires, $sujet, $corps, $courriel_from, "X-Originating-IP: ".$GLOBALS['ip']); + + // Si c'est bon, on envoie l'accusé de réception + if ($ok and $courriel_envoyeur and $options['activer_accuse']){ + // On récupère le sujet s'il existe sinon on le construit + if ($options['sujet_accuse']){ + $a_remplacer = array(); + if (preg_match_all('/@[\w]+@/', $options['sujet_accuse'], $a_remplacer)){ + $a_remplacer = $a_remplacer[0]; + foreach ($a_remplacer as $cle=>$val) $a_remplacer[$cle] = trim($val, '@'); + $a_remplacer = array_flip($a_remplacer); + $a_remplacer = array_intersect_key($valeurs, $a_remplacer); + $a_remplacer = array_merge($a_remplacer, array('nom_site_spip' => $nom_site_spip)); + } + $sujet_accuse = trim(_L($options['sujet_accuse'], $a_remplacer)); + } + if (!$sujet_accuse) $sujet_accuse = _T('formidable:traiter_email_sujet_accuse'); + $sujet_accuse = filtrer_entites($sujet_accuse); + + // Mais quel va donc être le fond ? + if (find_in_path('notifications/formulaire_'.$formulaire['identifiant'].'_accuse.html')) + $accuse = 'notifications/formulaire_'.$formulaire['identifiant'].'_accuse'; + else + $accuse = 'notifications/formulaire_accuse'; + + // On génère l'accusé de réception + $html_accuse = recuperer_fond( + $accuse, + array( + 'id_formulaire' => $formulaire['id_formulaire'], + 'titre' => _T_ou_typo($formulaire['titre']), + 'message_retour' => $formulaire['message_retour'], + 'traitements' => $traitements, + 'saisies' => $saisies, + 'valeurs' => $valeurs + ) + ); + + // On génère le texte brut + $texte = Facteur::html2text($html_accuse); + + $corps = array( + 'html' => $html_accuse, + 'texte' => $texte, + 'nom_envoyeur' => $nom_site_spip + ); + + $ok = $envoyer_mail($courriel_envoyeur, $sujet_accuse, $corps, $courriel_from, "X-Originating-IP: ".$GLOBALS['ip']); + } + + if ($ok){ + $retours['message_ok'] .= "\n
    "._T('formidable:traiter_email_message_ok'); + } + else{ + $retours['message_erreur'] .= "\n
    "._T('formidable:traiter_email_message_erreur'); + } + } + + return $retours; +} + +?> diff --git a/www/plugins/formidable_1_0/traiter/email.yaml b/www/plugins/formidable_1_0/traiter/email.yaml new file mode 100644 index 00000000..4f5b4d7f --- /dev/null +++ b/www/plugins/formidable_1_0/traiter/email.yaml @@ -0,0 +1,57 @@ + +titre: '<:formidable:traiter_email_titre:>' +description: '<:formidable:traiter_email_description:>' +options: + - + saisie: 'champ' + options: + nom: 'champ_destinataires' + label: '<:formidable:traiter_email_option_destinataires_label:>' + explication: '<:formidable:traiter_email_option_destinataires_explication:>' + forcer_type: [destinataires,hidden] + env: true + - + saisie: 'input' + options: + nom: 'destinataires_plus' + label: '<:formidable:traiter_email_option_destinataires_plus_label:>' + explication: '<:formidable:traiter_email_option_destinataires_plus_explication:>' + verifier: + type: 'email' + - + saisie: 'champ' + options: + nom: 'champ_courriel' + label: '<:formidable:traiter_email_option_envoyeur_courriel_label:>' + explication: '<:formidable:traiter_email_option_envoyeur_courriel_explication:>' + env: true + - + saisie: 'case' + options: + nom: 'activer_vrai_envoyeur' + label: '<:formidable:traiter_email_option_vrai_envoyeur_label:>' + explication: '<:formidable:traiter_email_option_vrai_envoyeur_explication:>' + - + saisie: 'input' + options: + nom: 'champ_nom' + label: '<:formidable:traiter_email_option_envoyeur_nom_label:>' + explication: '<:formidable:traiter_email_option_envoyeur_nom_explication:>' + - + saisie: 'input' + options: + nom: 'champ_sujet' + label: '<:formidable:traiter_email_option_sujet_label:>' + explication: '<:formidable:traiter_email_option_sujet_explication:>' + - + saisie: 'case' + options: + nom: 'activer_accuse' + label: '<:formidable:traiter_email_option_activer_accuse_label:>' + label_case: '<:formidable:traiter_email_option_activer_accuse_label_case:>' + - + saisie: 'input' + options: + nom: 'sujet_accuse' + label: '<:formidable:traiter_email_option_sujet_accuse_label:>' + explication: '<:formidable:traiter_email_option_sujet_explication:>' diff --git a/www/plugins/formidable_1_0/traiter/enregistrement.php b/www/plugins/formidable_1_0/traiter/enregistrement.php new file mode 100644 index 00000000..8277067c --- /dev/null +++ b/www/plugins/formidable_1_0/traiter/enregistrement.php @@ -0,0 +1,137 @@ +$id_formulaire, 'nouveau_statut'=>'publie'))) + $statut='publie'; + else + $statut = 'prop'; + + // Si ce n'est pas une modif d'une réponse existante, on crée d'abord la réponse + if (!$id_formulaires_reponse){ + $id_formulaires_reponse = sql_insertq( + 'spip_formulaires_reponses', + array( + 'id_formulaire' => $id_formulaire, + 'id_auteur' => $id_auteur, + 'cookie' => $cookie, + 'ip' => $GLOBALS['ip'], + 'date' => 'NOW()', + 'statut' => $statut + ) + ); + // Si on a pas le droit de répondre plusieurs fois ou que les réponses seront modifiables, il faut poser un cookie + if (!$options['multiple'] or $options['modifiable']){ + include_spip("inc/cookie"); + // Expiration dans 30 jours + spip_setcookie($nom_cookie, $_COOKIE[$nom_cookie] = $cookie, time() + 30 * 24 * 3600); + } + } + + // Si l'id n'a pas été créé correctement alors erreur + if (!($id_formulaires_reponse > 0)){ + $retours['message_erreur'] .= "\n
    "._T('formidable:traiter_enregistrement_erreur_base'); + } + // Sinon on continue à mettre à jour + else{ + $champs = array(); + $insertions = array(); + foreach($saisies as $nom => $saisie){ + // On ne prend que les champs qui ont effectivement été envoyés par le formulaire + if (($valeur = _request($nom)) !== null){ + $champs[] = $nom; + $insertions[] = array( + 'id_formulaires_reponse' => $id_formulaires_reponse, + 'nom' => $nom, + 'valeur' => is_array($valeur) ? serialize($valeur) : $valeur + ); + } + } + + // S'il y a bien des choses à modifier + if ($champs){ + // On supprime d'abord les champs + sql_delete( + 'spip_formulaires_reponses_champs', + array( + 'id_formulaires_reponse = '.$id_formulaires_reponse, + sql_in('nom', $champs) + ) + ); + + // Puis on insère les nouvelles valeurs + sql_insertq_multi( + 'spip_formulaires_reponses_champs', + $insertions + ); + } + } + + return $retours; +} + +function traiter_enregistrement_update_dist($id_formulaire, $traitement, $saisies_anciennes, $saisies_nouvelles){ + include_spip('inc/saisies'); + include_spip('base/abstract_sql'); + $comparaison = saisies_comparer($saisies_anciennes, $saisies_nouvelles); + + // Si des champs ont été supprimés, il faut supprimer les réponses à ces champs + if ($comparaison['supprimees']){ + // On récupère les réponses du formulaire + $reponses = sql_allfetsel( + 'id_formulaires_reponse', + 'spip_formulaires_reponses', + 'id_formulaire = '.$id_formulaire + ); + $reponses = array_map('reset', $reponses); + + // Tous les noms de champs à supprimer + $noms = array_keys($comparaison['supprimees']); + + // On supprime + sql_delete( + 'spip_formulaires_reponses_champs', + array( + sql_in('id_formulaires_reponse', $reponses), + sql_in('nom', $noms) + ) + ); + } +} + +?> diff --git a/www/plugins/formidable_1_0/traiter/enregistrement.yaml b/www/plugins/formidable_1_0/traiter/enregistrement.yaml new file mode 100644 index 00000000..41c9ced8 --- /dev/null +++ b/www/plugins/formidable_1_0/traiter/enregistrement.yaml @@ -0,0 +1,55 @@ + +titre: '<:formidable:traiter_enregistrement_titre:>' +description: '<:formidable:traiter_enregistrement_description:>' +options: + - + saisie: 'oui_non' + options: + nom: 'multiple' + label: '<:formidable:traiter_enregistrement_option_multiple_label:>' + explication: '<:formidable:traiter_enregistrement_option_multiple_explication:>' + defaut: 'on' + - + saisie: 'oui_non' + options: + nom: 'modifiable' + label: '<:formidable:traiter_enregistrement_option_modifiable_label:>' + explication: '<:formidable:traiter_enregistrement_option_modifiable_explication:>' + defaut: '' + - + saisie: 'radio' + options: + nom: 'identification' + label: '<:formidable:traiter_enregistrement_option_identification_label:>' + explication: '<:formidable:traiter_enregistrement_option_identification_explication:>' + datas: + cookie: '<:formidable:identification_par_cookie:>' + id_auteur: '<:formidable:identification_par_id_auteur:>' + defaut: 'cookie' + - + saisie: 'oui_non' + options: + nom: 'anonymiser' + label: '<:formidable:traiter_enregistrement_option_anonymiser_label:>' + explication: '<:formidable:traiter_enregistrement_option_anonymiser_explication:>' + defaut: '' + - + saisie: 'selection' + options: + option_intro: '<:formidable:traiter_enregistrement_option_choix_select_label:>' + nom: 'anonymiser_variable' + label: '<:formidable:traiter_enregistrement_option_anonymiser_variable_label:>' + explication: '<:formidable:traiter_enregistrement_option_anonymiser_variable_explication:>' + datas: + remote_user: "Variable serveur : REMOTE_USER" + php_auth_user: "Variable serveur : PHP_AUTH_USER" + defaut: '' + - + saisie: 'radio' + options: + nom: 'moderation' + label: '<:formidable:traiter_enregistrement_option_moderation_label:>' + datas: + posteriori: '<:forum:bouton_radio_modere_posteriori:>' + priori: '<:forum:bouton_radio_modere_priori:>' + defaut: 'posteriori' diff --git a/www/plugins/gis/TODO.txt b/www/plugins/gis/TODO.txt new file mode 100644 index 00000000..b51cd704 --- /dev/null +++ b/www/plugins/gis/TODO.txt @@ -0,0 +1,14 @@ +peut être utiliser cette lib php pour le geocoder ? : https://github.com/willdurand/Geocoder + +des couches à pomper : +- http://earthquake.usgs.gov/template/js/classes/usgs/leaflet/layer/ + +une barre de zoom bien faite à passer en plugin ici : https://github.com/CloudMade/Leaflet/pull/689 + +Avoir un crayon de modification de point depuis le public + +Interface de recherche de point : +- textuelle (recherche dans le titre + descriptif + pays + bla bla bla) +- par carte : Ouvre une carte + on clique le point avec un bouton choisir dedans + joint le point en question à un objet +(utilisation via mediabox possible) +- Une simple liste des points paginés par date de modif/ d'ajout \ No newline at end of file diff --git a/www/plugins/gis/action/editer_gis.php b/www/plugins/gis/action/editer_gis.php new file mode 100644 index 00000000..3eb34863 --- /dev/null +++ b/www/plugins/gis/action/editer_gis.php @@ -0,0 +1,207 @@ + array( + 'table' => 'spip_gis', + ), + 'data' => $champs + )); + + $id_gis = sql_insertq("spip_gis", $champs); + + pipeline('post_insertion', + array( + 'args' => array( + 'table' => 'spip_gis', + 'id_objet' => $id_gis + ), + 'data' => $champs + ) + ); + return $id_gis; +} + +/** + * Enregistrer certaines modifications d'un gis + * + * @param int $id_gis : l'identifiant numérique du point + * @param array $c : un array des valeurs à mettre en base (par défaut false, on récupère les valeurs passées en dans le POST) + */ +/** + * Appelle toutes les fonctions de modification d'un point gis + * $err est de la forme chaine de langue ou vide si pas d'erreur + * http://doc.spip.org/@articles_set + * + * @param $id_gis + * @param null $set + * @return string + */ +function gis_modifier($id_gis, $set=null) { + include_spip('inc/modifier'); + include_spip('inc/filtres'); + $c = collecter_requests( + // white list + objet_info('gis','champs_editables'), + // black list + array('id_objet','objet'), + // donnees eventuellement fournies + $set + ); + + if ($err = objet_modifier_champs('gis', $id_gis, + array( + //'nonvide' => array('nom' => _T('info_sans_titre')), + 'invalideur' => "id='gis/$id_gis'", + ), + $c)) + return $err; + + // lier a un parent ? + $c = collecter_requests(array('id_objet', 'objet'),array(),$set); + if (isset($c['id_objet']) AND intval($c['id_objet']) AND isset($c['objet']) AND $c['objet']) { + lier_gis($id_gis, $c['objet'], $c['id_objet']); + } + + return $err; +} + + +/** + * Associer un point géolocalisé a des objets listes sous forme + * array($objet=>$id_objets,...) + * $id_objets peut lui meme etre un scalaire ou un tableau pour une liste d'objets du meme type + * + * on peut passer optionnellement une qualification du (des) lien(s) qui sera + * alors appliquee dans la foulee. + * En cas de lot de liens, c'est la meme qualification qui est appliquee a tous + * + * @param int $id_gis + * @param array $objets + * @param array $qualif + * @return string + */ +function gis_associer($id_gis,$objets, $qualif = null){ + include_spip('action/editer_liens'); + $res = objet_associer(array('gis'=>$id_gis), $objets, $qualif); + include_spip('inc/invalideur'); + suivre_invalideur("id='gis/$id_gis'"); + return $res; +} + +/** + * Dossocier un point géolocalisé des objets listes sous forme + * array($objet=>$id_objets,...) + * $id_objets peut lui meme etre un scalaire ou un tableau pour une liste d'objets du meme type + * + * un * pour $id_auteur,$objet,$id_objet permet de traiter par lot + * + * @param int $id_gis + * @param array $objets + * @return string + */ +function gis_dissocier($id_gis,$objets){ + include_spip('action/editer_liens'); + $res = objet_dissocier(array('gis'=>$id_gis), $objets); + include_spip('inc/invalideur'); + suivre_invalideur("id='gis/$id_gis'"); + return $res; +} + + + +/** + * Supprimer définitivement un point géolocalisé + * + * @param int $id_gis identifiant numérique du point + * @return int|false 0 si réussite, false dans le cas ou le point n'existe pas + */ +function gis_supprimer($id_gis){ + $valide = sql_getfetsel('id_gis','spip_gis','id_gis='.intval($id_gis)); + if($valide && autoriser('supprimer','gis',$valide)){ + sql_delete("spip_gis_liens", "id_gis=".intval($id_gis)); + sql_delete("spip_gis", "id_gis=".intval($id_gis)); + $id_gis = 0; + include_spip('inc/invalideur'); + suivre_invalideur("id='id_gis/$id_gis'"); + return $id_gis; + } + return false; +} + + +/** + * Délier un point géolocalisé d'un objet SPIP + * + * @param int $id_gis identifiant numérique du point + * @param string $objet Le type de l'objet à lier + * @param int $id_objet L'identifiant numérique de l'objet lié + * + * @return bool : true si la suppression de la liaison s'est bien passée, false à l'inverse + */ +function delier_gis($id_gis, $objet, $id_objet){ + //$objet = objet_type($objet); + if ($id_objet AND $id_gis + AND preg_match('/^[a-z0-9_]+$/i', $objet) # securite + AND autoriser('delier','gis',$id_gis,$GLOBALS['visiteur_session'],array('objet' => $objet,'id_objet'=>$id_objet)) + ) { + gis_dissocier($id_gis,array($objet=>$id_objet)); + return true; + } + return false; +} + +/** + * Lier un point géolocalisé à un objet SPIP + * + * @param int $id_gis identifiant numérique du point + * @param string $objet Le type de l'objet à lier + * @param int $id_objet L'identifiant numérique de l'objet lié + * + * @return bool : true si la liaison s'est bien passée, false à l'inverse + */ +function lier_gis($id_gis, $objet, $id_objet){ + //$objet = objet_type($objet); + if ($id_objet AND $id_gis + AND preg_match('/^[a-z0-9_]+$/i', $objet) # securite + AND !sql_getfetsel("id_gis", "spip_gis_liens", "id_gis=$id_gis AND id_objet=$id_objet AND objet=".sql_quote($objet)) + AND autoriser('lier','gis',$id_gis,$GLOBALS['visiteur_session'],array('objet' => $objet,'id_objet'=>$id_objet)) + ) { + gis_associer($id_gis,array($objet=>$id_objet)); + return true; + } + return false; +} + +function insert_gis() {return gis_inserer();} +function revisions_gis($id_gis, $c=false) {return gis_modifier($id_gis,$c);} +function supprimer_gis($id_gis){return gis_supprimer($id_gis);} + +?> diff --git a/www/plugins/gis/action/editer_lien_gis.php b/www/plugins/gis/action/editer_lien_gis.php new file mode 100644 index 00000000..f5633d3e --- /dev/null +++ b/www/plugins/gis/action/editer_lien_gis.php @@ -0,0 +1,21 @@ + $objet,'id_objet'=>$id_objet))){ + include_spip('action/editer_gis'); + if ($action == 'lier') + lier_gis($id_gis, $objet, $id_objet); + elseif ($action == 'delier') + delier_gis($id_gis, $objet, $id_objet); + } +} + +?> \ No newline at end of file diff --git a/www/plugins/gis/action/kml_infos.php b/www/plugins/gis/action/kml_infos.php new file mode 100644 index 00000000..eda20492 --- /dev/null +++ b/www/plugins/gis/action/kml_infos.php @@ -0,0 +1,68 @@ + $infos['titre'] ? $infos['titre'] : basename($fichier), + 'lat'=> $latitude, + 'lon' => $longitude, + 'zoom' => $config['zoom'] ? $config['zoom'] :'4' + ); + + include_spip('action/editer_gis'); + + if($id_gis = sql_getfetsel("G.id_gis","spip_gis AS G LEFT JOIN spip_gis_liens AS T ON T.id_gis=G.id_gis ","T.id_objet=" . intval($id_document) . " AND T.objet='document'")){ + // Des coordonnées sont déjà définies pour ce document => on les update + revisions_gis($id_gis,$c); + spip_log("GIS EXIFS : Update des coordonnées depuis EXIFS pour le document $id_document => id_gis = $id_gis","gis"); + } + else{ + // Aucune coordonnée n'est définie pour ce document => on les crées + $id_gis = insert_gis(); + revisions_gis($id_gis,$c); + lier_gis($id_gis, 'document', $id_document); + spip_log("GIS EXIFS : Création des coordonnées depuis EXIFS pour le document $id_document => id_gis = $id_gis","gis"); + } + } + unset($infos['longitude']); + unset($infos['latitude']); + if(count($infos) > 0){ + include_spip('action/editer_document'); + document_modifier($id_document, $infos); + } + } + } + $redirect = urldecode(_request('redirect')); + return $redirect; +} + +?> \ No newline at end of file diff --git a/www/plugins/gis/action/supprimer_gis.php b/www/plugins/gis/action/supprimer_gis.php new file mode 100644 index 00000000..6c838f20 --- /dev/null +++ b/www/plugins/gis/action/supprimer_gis.php @@ -0,0 +1,19 @@ + \ No newline at end of file diff --git a/www/plugins/gis/base/gis.php b/www/plugins/gis/base/gis.php new file mode 100644 index 00000000..5117ea6d --- /dev/null +++ b/www/plugins/gis/base/gis.php @@ -0,0 +1,125 @@ + 'gis', + 'table_objet_surnoms' => array('gis'), + 'type' => 'gis', + 'type_surnoms' => array('gi'), + + /* La table */ + 'field' => array( + "id_gis" => "bigint(21) NOT NULL", + "titre" => "varchar(255) NOT NULL DEFAULT ''", + "descriptif" => "text NOT NULL DEFAULT ''", + "lat" => "double NULL NULL", + "lon" => "double NULL NULL", + "zoom" => "tinyint(4) NULL NULL", + "adresse" => "text NOT NULL DEFAULT ''", + "pays" => "text NOT NULL DEFAULT ''", + "code_pays" => "varchar(255) NOT NULL DEFAULT ''", + "region" => "text NOT NULL DEFAULT ''", + "ville" => "text NOT NULL DEFAULT ''", + "code_postal" => "varchar(255) NOT NULL DEFAULT ''" + ), + 'key' => array( + "PRIMARY KEY" => "id_gis", + ), + 'principale' => 'oui', + 'modeles' => array('carte_gis', 'carte_gis_preview'), + + /* Le titre, la date et la gestion du statut */ + 'titre' => "titre, '' AS lang", + + /* L'édition, l'affichage et la recherche */ + 'page' => 'gis', + 'url_voir' => 'gis', + 'url_edit' => 'gis_edit', + 'editable' => 'oui', + 'champs_editables' => array('lat', 'lon', 'zoom', 'titre', 'descriptif', 'adresse', 'code_postal', 'ville', 'region', 'pays'), + /*'champs_editables' => array(), */ + 'icone_objet' => 'gis', + 'rechercher_champs' => array( + 'titre' => 8, + 'descriptif' => 5, + 'pays' => 3, + 'region' => 3, + 'ville' => 3, + 'code_postal' => 3, + ), + + /* Les textes standard */ + 'texte_ajouter' => 'gis:texte_ajouter_gis', + 'texte_retour' => 'icone_retour', + 'texte_modifier' => 'gis:texte_modifier_gis', + 'texte_creer' => 'gis:texte_creer_gis', + 'texte_creer_associer' => 'gis:texte_creer_associer_gis', + 'texte_objet' => 'gis:gis_singulier', + 'texte_objets' => 'gis:gis_pluriel', + 'info_aucun_objet' => 'gis:info_aucun_gis', + 'info_1_objet' => 'gis:info_1_gis', + 'info_nb_objets' => 'gis:info_nb_gis', + 'texte_logo_objet' => 'gis:libelle_logo_gis', + ); + + $spip_gis_liens = array( + "id_gis" => "bigint(21) NOT NULL", + "objet" => "VARCHAR (25) DEFAULT '' NOT NULL", + "id_objet" => "bigint(21) NOT NULL"); + + $spip_gis_liens_key = array( + "PRIMARY KEY" => "id_gis,id_objet,objet", + "KEY id_objet" => "id_gis"); + + $tables_auxiliaires['spip_gis_liens'] = array( + 'field' => &$spip_gis_liens, + 'key' => &$spip_gis_liens_key); + + return $tables; +} + +function gis_declarer_tables_auxiliaires($tables_auxiliaires){ + $spip_gis_liens = array( + "id_gis" => "bigint(21) NOT NULL", + "objet" => "VARCHAR (25) DEFAULT '' NOT NULL", + "id_objet" => "bigint(21) NOT NULL"); + + $spip_gis_liens_key = array( + "PRIMARY KEY" => "id_gis,id_objet,objet", + "KEY id_objet" => "id_gis"); + + $tables_auxiliaires['spip_gis_liens'] = array( + 'field' => &$spip_gis_liens, + 'key' => &$spip_gis_liens_key); + + return $tables_auxiliaires; +} + +?> \ No newline at end of file diff --git a/www/plugins/gis/crud/gis.php b/www/plugins/gis/crud/gis.php new file mode 100644 index 00000000..1b743adb --- /dev/null +++ b/www/plugins/gis/crud/gis.php @@ -0,0 +1,64 @@ +$e?false:true,'message'=>$e?$e:$ok,'result'=>array('id'=>$id)); +} + +/** + * Update : + * Met à jour un point géolocalisé + * + * @param $dummy + * @param array $set : Le contenu des champs à mettre en base + * @return array : un array avec (bool) success, (string) message et (array) result indiquant l'id créé + */ +function crud_gis_update_dist($id,$set=null){ + $id_gis = sql_getfetsel('id_gis','spip_gis','id_gis='.intval($id)); + if(!$id_gis){ + $e = _T('gis:erreur_gis_inconnu',array('id'=>$id)); + }else if(autoriser('modifier','gis',$id)){ + list($e,$ok) = revisions_gis($id,$set); + }else{ + $e = _L('update error'); + } + return array('success'=>$e?false:true,'message'=>$e?$e:$ok,'result'=>array('id'=>$id)); +} + +/** + * Delete : + * Supprime un point géolocalisé + * + * @param $dummy + * @param int $id : L'identifiant numérique du point à supprimer + * @return array : un array avec (bool) success, (string) message et (array) result indiquant l'id supprimé + */ +function crud_gis_delete_dist($id){ + if(autoriser('supprimer','gis',$id)){ + list($e,$ok) = supprimer_gis($id); + } + return array('success'=>$e?false:true,'message'=>$e?$e:$ok,'result'=>array('id'=>$id)); +} + +?> \ No newline at end of file diff --git a/www/plugins/gis/embed/kml.html b/www/plugins/gis/embed/kml.html new file mode 100644 index 00000000..3fe9d5a7 --- /dev/null +++ b/www/plugins/gis/embed/kml.html @@ -0,0 +1,38 @@ + + + + + [(#TITRE|sinon{#FICHIER|basename})] - #NOM_SITE_SPIP + + + + [] + + [(#VAL{''}|gis_insert_head_css)] + [] + [] + [] + [(#VAL{''}|gis_insert_head)] + + +
    + [] +

    [(#TITRE|sinon{#FICHIER|basename})]

    + +
    + #MODELE{carte_gis,largeur=100%,hauteur=#ENV{hauteur,400px},kml=#ID_DOCUMENT,lat=#LAT,lon=#LON,zoom=#ZOOM,point=non,id_carte_gis=kml#ID_DOCUMENT} +
    + + +
    + #MODELE{carte_gis,largeur=100%,hauteur=#ENV{hauteur,400px},kml=#ID_DOCUMENT,point=non,id_carte_gis=kml#ID_DOCUMENT} +
    + +
    + + + + +#INCLURE{fond=embed/document,env} + +#FILTRE{trim} \ No newline at end of file diff --git a/www/plugins/gis/embed/kml_fonctions.php b/www/plugins/gis/embed/kml_fonctions.php new file mode 100644 index 00000000..7ad44a38 --- /dev/null +++ b/www/plugins/gis/embed/kml_fonctions.php @@ -0,0 +1,12 @@ + diff --git a/www/plugins/gis/formulaires/configurer_gis.html b/www/plugins/gis/formulaires/configurer_gis.html new file mode 100755 index 00000000..d38bdf2e --- /dev/null +++ b/www/plugins/gis/formulaires/configurer_gis.html @@ -0,0 +1,152 @@ +
    + +[

    (#ENV*{message_ok})

    ] +[

    (#ENV*{message_erreur})

    ] + +
    + +
    + #ACTION_FORMULAIRE{#ENV{action}} +
      + [(#SAISIE{input,lat, + label=<:gis:lat:>, + defaut=0, + size=40})] + [(#SAISIE{input,lon, + label=<:gis:lon:>, + defaut=0, + size=40})] + [(#SAISIE{input,zoom, + label=<:gis:zoom:>, + defaut=0, + size=2, + maxlength=2})] + + #SET{layers,#ARRAY} + + #SET{layers,#GET{layers}|array_merge{#ARRAY{#CLE,#VALEUR|table_valeur{nom}}}} + + + [(#SET{layer_defaut,openstreetmap_mapnik})] + [(#VAL{_GIS_LAYER_DEFAUT}|defined|oui) + [(#SET{layer_defaut,[(#EVAL{_GIS_LAYER_DEFAUT})]})] + ] + [(#VAL{_GIS_LAYER_DEFAUT_FORCE}|defined|oui) + [(#SET{layer_readonly,readonly})] + [(#SET{layer_disable,disabled})] + [(#SET{layer_forcee,[(#EVAL{_GIS_LAYER_DEFAUT_FORCE})]})] + [(#SET{layer_explications,<:gis:explication_layer_forcee:>})] + ] + [(#SAISIE{selection,layer_defaut, + label=<:gis:cfg_lbl_layer_defaut:>, + cacher_option_intro=oui, + defaut=#GET{layer_defaut}, + valeur_forcee=#GET{layer_forcee}, + readonly=#GET{layer_readonly}, + disable=#GET{layer_disable}, + explication=#GET{layer_explications}, + datas=#GET{layers}})] + + [(#SAISIE{selection_multiple,layers, + label=<:gis:cfg_lbl_layers:>, + cacher_option_intro=oui, + defaut=#GET{layer_defaut}, + datas=#GET{layers}})] + + [(#SAISIE{input,api_key_bing, + label=<:gis:cfg_lbl_api_key_bing:>, + explication=<:gis:cfg_inf_bing{url=https://www.bingmapsportal.com/}:>, + size=40})] + + [(#SAISIE{oui_non,geocoder, + defaut='', + label=<:gis:cfg_lbl_geocoder:>, + explication=<:gis:cfg_inf_geocoder:>})] + + [(#SAISIE{oui_non,adresse, + defaut='', + label=<:gis:cfg_lbl_adresse:>, + explication=<:gis:cfg_inf_adresse:>})] + + [(#SAISIE{oui_non,geolocaliser_user_html5, + defaut='', + label=<:gis:cfg_lbl_geolocaliser_user_html5:>, + explication=<:gis:cfg_inf_geolocaliser_user_html5:>})] + + [(#SAISIE{choisir_objets,gis_objets, + label=<:gis:cfg_lbl_activer_objets:>, + exclus=spip_gis})] + +
    + + +

    + +

    +
    + + +
    diff --git a/www/plugins/gis/formulaires/configurer_gis.php b/www/plugins/gis/formulaires/configurer_gis.php new file mode 100644 index 00000000..40bdc3bc --- /dev/null +++ b/www/plugins/gis/formulaires/configurer_gis.php @@ -0,0 +1,33 @@ + 0) + OR (in_array('bing_aerial', _request('layers')))) + refuser_traiter_formulaire_ajax(); + } + + return $erreurs; +} + +?> diff --git a/www/plugins/gis/formulaires/editer_gis.html b/www/plugins/gis/formulaires/editer_gis.html new file mode 100755 index 00000000..6ff03712 --- /dev/null +++ b/www/plugins/gis/formulaires/editer_gis.html @@ -0,0 +1,62 @@ +#CACHE{0} +
    + + [

    (#ENV**{message_ok})

    ] + [

    (#ENV*{message_erreur})

    ] + +
    + [(#REM) declarer les hidden qui declencheront le service du formulaire + parametre : url d'action ] + #ACTION_FORMULAIRE{#ENV{action}} +
      + [(#SAISIE{hidden,objet})] + [(#SAISIE{hidden,id_objet})] + [(#SAISIE{carte,editer_gis_#ENV{id_gis},env})] +
    • +
        + [(#SAISIE{input,lat, + label=<:gis:lat:>, + defaut=#ENV{lat,#CONFIG{gis/lat,0}}, + obligatoire=oui})] + [(#SAISIE{input,lon, + label=<:gis:lon:>, + defaut=#ENV{lon,#CONFIG{gis/lon,0}}, + obligatoire=oui})] + [(#SAISIE{input,zoom, + label=<:gis:zoom:>, + defaut=#ENV{zoom,#CONFIG{gis/zoom,0}}, + size=2, + maxlength=2, + obligatoire=oui})] + [(#SAISIE{input,titre, + defaut=#INFO_TITRE{#OBJET,#ID_OBJET}, + label=<:info_titre:>, + obligatoire=oui})] + [(#SAISIE{textarea,descriptif, + label=<:info_descriptif:>, + rows=5})] +
      +
    • + +
    + [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ] + +

    + +

    +
    + +
    diff --git a/www/plugins/gis/formulaires/editer_gis.php b/www/plugins/gis/formulaires/editer_gis.php new file mode 100644 index 00000000..22619ddd --- /dev/null +++ b/www/plugins/gis/formulaires/editer_gis.php @@ -0,0 +1,93 @@ + diff --git a/www/plugins/gis/formulaires/gis_inserer_modeles_traiter.php b/www/plugins/gis/formulaires/gis_inserer_modeles_traiter.php new file mode 100644 index 00000000..0126211a --- /dev/null +++ b/www/plugins/gis/formulaires/gis_inserer_modeles_traiter.php @@ -0,0 +1,34 @@ +'; + + return $code; +} + +?> diff --git a/www/plugins/gis/formulaires/rechercher_gis.html b/www/plugins/gis/formulaires/rechercher_gis.html new file mode 100755 index 00000000..55409e03 --- /dev/null +++ b/www/plugins/gis/formulaires/rechercher_gis.html @@ -0,0 +1,36 @@ +#CACHE{0} + + + +
      + #SET{id_gis,#ID_GIS} + #SET{ou, #LISTE{#VILLE, #PAYS}|array_filter|join{", "}} + [
    • (#TITRE)[ ((#GET{ou}))] +
      + [(#BOUTON_ACTION{<:gis:bouton_lier:>,[(#URL_ACTION_AUTEUR{editer_lien_gis,lier/#GET{id_gis}/#ENV{objet}/#ENV{id_objet},#SELF})],ajax})] +
      +
    • ] + +
    +
    +

    <:gis:erreur_recherche_pas_resultats:>

    + + +
    + [

    (#ENV*{message_ok})

    ] + [

    (#ENV*{message_erreur})

    ] + +
    + #ACTION_FORMULAIRE{#ENV{action}} +
      + [(#SAISIE{input,recherche_gis, + label=<:gis:label_rechercher_point:>})] +
    + [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ] + +

    + +

    +
    + +
    diff --git a/www/plugins/gis/formulaires/rechercher_gis.php b/www/plugins/gis/formulaires/rechercher_gis.php new file mode 100755 index 00000000..5e1597ad --- /dev/null +++ b/www/plugins/gis/formulaires/rechercher_gis.php @@ -0,0 +1,51 @@ + \ No newline at end of file diff --git a/www/plugins/gis/genie/gis_nettoyer_base.php b/www/plugins/gis/genie/gis_nettoyer_base.php new file mode 100644 index 00000000..09f40f15 --- /dev/null +++ b/www/plugins/gis/genie/gis_nettoyer_base.php @@ -0,0 +1,33 @@ + ". $row['objet'] ." ". $row['id_objet'],"gis"); + } + + return 1; +} + +?> \ No newline at end of file diff --git a/www/plugins/gis/gis_administrations.php b/www/plugins/gis/gis_administrations.php new file mode 100644 index 00000000..b6e20939 --- /dev/null +++ b/www/plugins/gis/gis_administrations.php @@ -0,0 +1,95 @@ + $titre_mot, + 'lat'=> $row['lat'], + 'lon' => $row['lonx'], + 'zoom' => $row['zoom'] + ); + $id_gis = insert_gis(); + revisions_gis($id_gis,$c); + lier_gis($id_gis, 'mot', $row['id_mot']); + } +} + +/** + * Desinstallation/suppression des tables gis + * + * @param string $nom_meta_base_version + */ +function gis_vider_tables($nom_meta_base_version) { + sql_drop_table("spip_gis"); + sql_drop_table("spip_gis_liens"); + effacer_meta($nom_meta_base_version); + // Effacer la config + effacer_meta('gis'); +} + +?> diff --git a/www/plugins/gis/gis_autoriser.php b/www/plugins/gis/gis_autoriser.php new file mode 100644 index 00000000..2a2c7396 --- /dev/null +++ b/www/plugins/gis/gis_autoriser.php @@ -0,0 +1,107 @@ + \ No newline at end of file diff --git a/www/plugins/gis/gis_download.html b/www/plugins/gis/gis_download.html new file mode 100644 index 00000000..914a7bd1 --- /dev/null +++ b/www/plugins/gis/gis_download.html @@ -0,0 +1 @@ +[(#ENV**{format}|=={kml}|?{#HTTP_HEADER{Content-Type: application/vnd.google-earth.kml+xml;charset=#CHARSET},#HTTP_HEADER{Content-Type: application/gpx+xml;charset=#CHARSET}})][(#HTTP_HEADER{Content-Disposition: attachment; filename=#TITRE|concat{.#ENV**{format}}})][(#INCLURE{fond=inclure/download_#ENV{format},id_gis})] \ No newline at end of file diff --git a/www/plugins/gis/gis_fonctions.php b/www/plugins/gis/gis_fonctions.php new file mode 100755 index 00000000..494d01c8 --- /dev/null +++ b/www/plugins/gis/gis_fonctions.php @@ -0,0 +1,379 @@ + 0 and $from = sql_fetsel('lat,lon','spip_gis',"id_gis=$from")) + ) + and + // Le distant est soit un tableau soit un entier + ( + (is_array($to) and isset($to['lat']) and isset($to['lon'])) + or + ($to = intval($to) and $to > 0 and $to = sql_fetsel('lat,lon','spip_gis',"id_gis=$to")) + ) + ){ + $pi80 = M_PI / 180; + $from['lat'] *= $pi80; + $from['lon'] *= $pi80; + $to['lat'] *= $pi80; + $to['lon'] *= $pi80; + + $r = 6372.797; // mean radius of Earth in km + $dlat = $to['lat'] - $from['lat']; + $dlng = $to['lon'] - $from['lon']; + $a = sin($dlat / 2) * sin($dlat / 2) + cos($from['lat']) * cos($to['lat']) * sin($dlng / 2) * sin($dlng / 2); + $c = 2 * atan2(sqrt($a), sqrt(1 - $a)); + $km = $r * $c; + + return ($miles ? ($km * 0.621371192) : $km); + } + + return false; +} + +/** + * Compilation du critère {distancefrom} + * + * Critère {distancefrom} qui permet de ne sélectionner que les objets se trouvant à une distance comparée avec un point de repère. + * On doit lui passer 3 paramètres obligatoires : + * - le point de repère qui est un tableau avec les clés "lat" et "lon" ou un id_gis + * - l'opérateur de comparaison + * - la distance à comparer, en kilomètres + * Cela donne par exemple : + * {distancefrom #ARRAY{lat,#LAT,lon,#LON},<,30} + * {distancefrom #ARRAY{lat,#ENV{lat},lon,#ENV{lon}},<=,#ENV{distance}} + * + * @param unknown $idb + * @param unknown &$boucles + * @param unknown $crit + */ +function critere_distancefrom_dist($idb, &$boucles, $crit) { + $boucle = &$boucles[$idb]; + $id_table = $boucle->id_table; // articles + $primary = $boucle->primary; // id_article + $objet = objet_type($id_table); // article + + if ( + // Soit depuis une boucle (GIS) soit un autre objet mais avec {gis} + ($id_table == 'gis' or isset($boucle->join['gis'])) + // Il faut aussi qu'il y ait 3 critères obligatoires + and count($crit->param) == 3 + ){ + $point_reference = calculer_liste($crit->param[0], array(), $boucles, $boucles[$idb]->id_parent); + $operateur = calculer_liste($crit->param[1], array(), $boucles, $boucles[$idb]->id_parent); + $distance = calculer_liste($crit->param[2], array(), $boucles, $boucles[$idb]->id_parent); + + // Si le point de référence est un entier, on essaye de récupérer les coordonnées du point GIS + // Et si on a toujours pas de tableau correct, on met false + $boucle->hierarchie .= '$point_reference = '.$point_reference.';'; + $boucle->hierarchie .= 'if (is_numeric($point_reference)){ $point_reference = sql_fetsel("lat,lon", "spip_gis", "id_gis = ".intval($point_reference)); }'; + $boucle->hierarchie .= 'if (!is_array($point_reference) or !isset($point_reference["lat"]) or !isset($point_reference["lon"])){ $point_reference = false; }'; + // L'opérateur doit exister dans une liste précise + $boucle->hierarchie .= '$operateur_distance = trim('.$operateur.');'; + $boucle->hierarchie .= 'if (!in_array($operateur_distance, array("=","<",">","<=",">="))){ $operateur_distance = false; }'; + $boucle->hierarchie .= '$distance = '.$distance.';'; + + $boucle->select[] = '".(!$point_reference ? "\'\' as distance" : "(6371 * acos( cos( radians(".$point_reference["lat"].") ) * cos( radians( gis.lat ) ) * cos( radians( gis.lon ) - radians(".$point_reference["lon"].") ) + sin( radians(".$point_reference["lat"].") ) * sin( radians( gis.lat ) ) ) ) AS distance")."'; + $boucle->having[] = '((!$point_reference or !$operateur_distance or !$distance) ? "1=1" : "distance $operateur_distance ".sql_quote($distance))'; + } +} + +/** + * Critere {gis distanceid_table; // articles + $primary = $boucle->primary; // id_article + $objet = objet_type($id_table); // article + + if ($id_table == 'gis') { + // exclure l'élément en cours des résultats + $id_gis = calculer_argument_precedent($idb,$primary, $boucles); + $boucle->where[]= array("'!='", "'$boucle->id_table." . "$primary'", $id_gis); + + // récupérer les paramètres du critère + $op=''; + $params = $crit->param; + $type = array_shift($params); + $type = $type[0]->texte; + if(preg_match(',^(\w+)([<>=]+)([0-9]+)$,',$type,$r)){ + $type=$r[1]; + $op=$r[2]; + $op_val=$r[3]; + } + if ($op) + $boucle->having[]= array("'".$op."'", "'".$type."'",$op_val); + + // récupérer lat/lon du point de la boucle englobante + $lat = calculer_argument_precedent($idb,'lat', $boucles); + $lon = calculer_argument_precedent($idb,'lon', $boucles); + + // http://www.awelty.fr/developpement-web/php/ + // http://www.movable-type.co.uk/scripts/latlong-db.html + // http://code.google.com/intl/fr/apis/maps/articles/geospatial.html#geospatial + $select = "(6371 * acos( cos( radians(\".$lat.\") ) * cos( radians( gis.lat ) ) * cos( radians( gis.lon ) - radians(\".$lon.\") ) + sin( radians(\".$lat.\") ) * sin( radians( gis.lat ) ) ) ) AS distance"; + $order = "'distance'"; + + $boucle->select[]= $select; + $boucle->order[]= $order; + } else { + // ajouter tous les champs du point au select + // et les suffixer pour lever toute ambiguite avec des champs homonymes + $boucle->select[]= 'gis.titre AS titre_gis'; + $boucle->select[]= 'gis.descriptif AS descriptif_gis'; + $boucle->select[]= 'gis.adresse AS adresse_gis'; + $boucle->select[]= 'gis.pays AS pays_gis'; + $boucle->select[]= 'gis.code_pays AS code_pays_gis'; + $boucle->select[]= 'gis.region AS region_gis'; + $boucle->select[]= 'gis.ville AS ville_gis'; + $boucle->select[]= 'gis.code_postal AS code_postal_gis'; + // jointure sur spip_gis_liens/spip_gis + // cf plugin notation + // $boucle->join["surnom (as) table de liaison"] = array("surnom de la table a lier", "cle primaire de la table de liaison", "identifiant a lier", "type d'objet de l'identifiant"); + $boucle->from['gis_liens'] = 'spip_gis_liens'; + $boucle->join['gis_liens']= array("'$id_table'","'id_objet'","'$primary'","'gis_liens.objet='.sql_quote('$objet')"); + $boucle->from['gis'] = 'spip_gis'; + $boucle->join['gis']= array("'gis_liens'","'id_gis'"); + // bien renvoyer tous les points qui son attachés à l'objet + // mais attention, si on trouve en amont un groupement portant sur un champ *de GIS*, + // alors cela signifie que la personne veut faire une opération de groupement sur les points donc là on n'ajoute pas id_gis + $tous_les_points = true; + foreach ($boucle->group as $champ){ + if (in_array($champ, array('ville', 'code_postal', 'pays', 'code_pays', 'region'))) { + $tous_les_points = false; + } + } + if ($tous_les_points) { + $boucle->group[] = 'gis_liens.id_gis'; + } + // ajouter gis aux jointures et spécifier les jointures explicites pour pouvoir utiliser les balises de la table de jointure + // permet de passer dans trouver_champ_exterieur() depuis index_tables_en_pile() + // cf http://article.gmane.org/gmane.comp.web.spip.zone/6628 + $boucle->jointures[] = 'gis'; + if (empty($boucle->jointures_explicites)){ + $boucle->jointures_explicites = 'gis_liens gis'; + } + else{ + $boucle->jointures_explicites .= ' gis_liens gis'; + } + } +} + +/** + * Balise #DISTANCE issue du critère {gis distance$v){ + if (is_numeric($v)){ + $kml[$k] = url_absolue(generer_url_entite($v,"document")); + } + else + $kml[$k] = _DIR_RACINE.copie_locale($kml[$k]); + } + } + return $kml; +} +?> diff --git a/www/plugins/gis/gis_json.html b/www/plugins/gis/gis_json.html new file mode 100644 index 00000000..ab7370cd --- /dev/null +++ b/www/plugins/gis/gis_json.html @@ -0,0 +1,6 @@ +#HTTP_HEADER{Content-Type: application/json; charset=#CHARSET} +{"type": "FeatureCollection", + "features": [ + [(#INCLURE{fond=json/gis[_(#ENV{objets})],env})] + ] +} diff --git a/www/plugins/gis/gis_kml.html b/www/plugins/gis/gis_kml.html new file mode 100755 index 00000000..28e29346 --- /dev/null +++ b/www/plugins/gis/gis_kml.html @@ -0,0 +1,13 @@ +#HTTP_HEADER{Content-Type: application/vnd.google-earth.kml+xml;charset=#CHARSET}[(#ENV**{dl} +|?{#HTTP_HEADER{Content-Disposition: attachment; filename=#CONFIG{gis/nom_fichier_kml}|sinon{gis}|concat{.kml}},''})] + + +[(#NOM_SITE_SPIP|texte_backend)] +[(#DESCRIPTIF_SITE_SPIP|supprimer_tags|texte_backend)] + + [(#INCLURE{fond=inclure/kml-item,id_gis,objet,id_objet})] + + + \ No newline at end of file diff --git a/www/plugins/gis/gis_options.php b/www/plugins/gis/gis_options.php new file mode 100755 index 00000000..730774c1 --- /dev/null +++ b/www/plugins/gis/gis_options.php @@ -0,0 +1,155 @@ + array( + 'nom' => 'OpenStreetMap', + 'layer' => 'L.tileLayer.provider("OpenStreetMap")' + ), + 'openstreetmap_blackandwhite' => array( + 'nom' => 'OpenStreetMap Black and White', + 'layer' => 'L.tileLayer.provider("OpenStreetMap.BlackAndWhite")' + ), + 'openstreetmap_de' => array( + 'nom' => 'OpenStreetMap DE', + 'layer' => 'L.tileLayer.provider("OpenStreetMap.DE")' + ), + 'google_roadmap' => array( + 'nom' => 'Google Roadmap', + 'layer' => 'L.Google("ROADMAP")' + ), + 'google_satellite' => array( + 'nom' => 'Google Satelitte', + 'layer' => 'L.Google("SATELLITE")' + ), + 'google_terrain' => array( + 'nom' => 'Google Terrain', + 'layer' => 'L.Google("TERRAIN")' + ), + 'bing_aerial' => array( + 'nom' => 'Bing Aerial', + 'layer' => 'L.BingLayer("'.$config['api_key_bing'].'")' + ), + 'thunderforest_opencyclemap' => array( + 'nom' => 'Thunderforest OpenCycleMap', + 'layer' => 'L.tileLayer.provider("Thunderforest.OpenCycleMap")' + ), + 'thunderforest_transport' => array( + 'nom' => 'Thunderforest Transport', + 'layer' => 'L.tileLayer.provider("Thunderforest.Transport")' + ), + 'thunderforest_landscape' => array( + 'nom' => 'Thunderforest Landscape', + 'layer' => 'L.tileLayer.provider("Thunderforest.Landscape")' + ), + 'thunderforest_outdoors' => array( + 'nom' => 'Thunderforest Outdoors', + 'layer' => 'L.tileLayer.provider("Thunderforest.Outdoors")' + ), + 'openmapsurfer' => array( + 'nom' => 'OpenMapSurfer', + 'layer' => 'L.tileLayer.provider("OpenMapSurfer")' + ), + 'openmapsurfer_grayscale' => array( + 'nom' => 'OpenMapSurfer Grayscale', + 'layer' => 'L.tileLayer.provider("OpenMapSurfer.Grayscale")' + ), + 'mapquestopen_osm' => array( + 'nom' => 'Mapquest Open', + 'layer' => 'L.tileLayer.provider("MapQuestOpen.OSM")' + ), + 'mapquestopen_aerial' => array( + 'nom' => 'Mapquest Open Aerial', + 'layer' => 'L.tileLayer.provider("MapQuestOpen.Aerial")' + ), + 'stamen_toner' => array( + 'nom' => 'Stamen Toner', + 'layer' => 'L.tileLayer.provider("Stamen.Toner")' + ), + 'stamen_tonerlite' => array( + 'nom' => 'Stamen Toner Lite', + 'layer' => 'L.tileLayer.provider("Stamen.TonerLite")' + ), + 'stamen_terrain' => array( + 'nom' => 'Stamen Terrain', + 'layer' => 'L.tileLayer.provider("Stamen.Terrain")' + ), + 'stamen_watercolor' => array( + 'nom' => 'Stamen Watercolor', + 'layer' => 'L.tileLayer.provider("Stamen.Watercolor")' + ), + 'esri_worldstreetmap' => array( + 'nom' => 'Esri WorldStreetMap', + 'layer' => 'L.tileLayer.provider("Esri.WorldStreetMap")' + ), + 'esri_delorme' => array( + 'nom' => 'Esri DeLorme', + 'layer' => 'L.tileLayer.provider("Esri.DeLorme")' + ), + 'esri_worldtopomap' => array( + 'nom' => 'Esri WorldTopoMap', + 'layer' => 'L.tileLayer.provider("Esri.WorldTopoMap")' + ), + 'esri_worldimagery' => array( + 'nom' => 'Esri WorldImagery', + 'layer' => 'L.tileLayer.provider("Esri.WorldImagery")' + ), + 'esri_worldterrain' => array( + 'nom' => 'Esri WorldTerrain', + 'layer' => 'L.tileLayer.provider("Esri.WorldTerrain")' + ), + 'esri_worldshadedrelief' => array( + 'nom' => 'Esri WorldShadedRelief', + 'layer' => 'L.tileLayer.provider("Esri.WorldShadedRelief")' + ), + 'esri_worldphysical' => array( + 'nom' => 'Esri WorldPhysical', + 'layer' => 'L.tileLayer.provider("Esri.WorldPhysical")' + ), + + 'esri_oceanbasemap' => array( + 'nom' => 'Esri OceanBasemap', + 'layer' => 'L.tileLayer.provider("Esri.OceanBasemap")' + ), + 'esri_natgeoworldmap' => array( + 'nom' => 'Esri NatGeoWorldMap', + 'layer' => 'L.tileLayer.provider("Esri.NatGeoWorldMap")' + ), + 'esri_worldgraycanvas' => array( + 'nom' => 'Esri WorldGrayCanvas', + 'layer' => 'L.tileLayer.provider("Esri.WorldGrayCanvas")' + ), + 'nokia_normalday' => array( + 'nom' => 'Nokia normalDay', + 'layer' => 'L.tileLayer.provider("Nokia.normalDay")' + ), + 'nokia_normalgreyday' => array( + 'nom' => 'Nokia normalGreyDay', + 'layer' => 'L.tileLayer.provider("Nokia.normalGreyDay")' + ), + 'nokia_satellitenolabelsday' => array( + 'nom' => 'Nokia satelliteNoLabelsDay', + 'layer' => 'L.tileLayer.provider("Nokia.satelliteNoLabelsDay")' + ), + 'nokia_satelliteyeslabelsday' => array( + 'nom' => 'Nokia satelliteYesLabelsDay', + 'layer' => 'L.tileLayer.provider("Nokia.satelliteYesLabelsDay")' + ), + 'nokia_terrainday' => array( + 'nom' => 'Nokia terrainDay', + 'layer' => 'L.tileLayer.provider("Nokia.terrainDay")' + ), + 'acetate' => array( + 'nom' => 'Acetate', + 'layer' => 'L.tileLayer.provider("Acetate.all")' + ), +); + +?> \ No newline at end of file diff --git a/www/plugins/gis/gis_pipelines.php b/www/plugins/gis/gis_pipelines.php new file mode 100755 index 00000000..5259a550 --- /dev/null +++ b/www/plugins/gis/gis_pipelines.php @@ -0,0 +1,320 @@ +'; + $flux .="\n".''; + $flux .="\n".''; + $flux .="\n".''; + $flux .="\n".''; + return $flux; +} + +/** + * Insertion des scripts du plugin dans les pages publiques + * + * @param $flux + * @return mixed + */ +function gis_insert_head($flux){ + + // initialisation des valeurs de config + $config = @unserialize($GLOBALS['meta']['gis']); + if (!is_array($config['layers'])) + $config['layers'] = array('openstreetmap_mapnik'); + + include_spip('gis_fonctions'); + if (!in_array(gis_layer_defaut(),$config['layers'])) + $config['layers'][] = gis_layer_defaut(); + + // insertion des scripts pour google si nécessaire + if (count(array_intersect(array('google_roadmap', 'google_satellite', 'google_terrain'), $config['layers'])) > 0) { + $flux .="\n".''; + } + + return $flux; +} + +/** + * Insertion des scripts et css du plugin dans les pages de l'espace privé + * @param $flux + * @return mixed + */ +function gis_header_prive($flux){ + $flux .= gis_insert_head_css(''); + $flux .= gis_insert_head(''); + return $flux; +} + +function gis_afficher_contenu_objet($flux){ + if ($objet = $flux['args']['type'] + and include_spip('inc/config') + and in_array(table_objet_sql($objet), lire_config('gis/gis_objets', array())) + and ($id = intval($flux['args']['id_objet'])) + + ){ + // TODO : seulement si la conf permet de geolocaliser cet objet + // -> ajouter un element a la array suivante (qqch comme ca - voir les mots): + // 'editable'=>autoriser('associergis',$type,$id)?'oui':'non' + $texte = recuperer_fond( + 'prive/contenu/gis_objet', + array( + 'table_source'=>'gis', + 'objet'=>$objet, + 'id_objet'=>$id + ) + ); + $flux['data'] .= $texte; + } + + return $flux; +} + +function gis_post_edition($flux){ + + if (($flux['args']['operation'] == 'ajouter_document') + AND ($document = sql_fetsel("*","spip_documents","id_document=".intval($flux['args']['id_objet']))) + ) { + if(in_array($document['extension'],array('jpg','kml','kmz'))){ + $config = @unserialize($GLOBALS['meta']['gis']); + if(!is_array($config)) + $config = array(); + include_spip('inc/documents'); + $fichier = get_spip_doc($document['fichier']); + $id_document = $document['id_document']; + } + if ($document['extension'] == 'jpg') { + // on recupere les coords definies dans les exif du document s'il y en a + if ($exifs = @exif_read_data($fichier,'GPS')) { + if(!function_exists('dms_to_dec')) + include_spip('gis_fonctions'); + spip_log("GIS EXIFS : Récuperation des coordonnees du fichier $fichier","gis"); + + $LatDeg = explode("/",$exifs["GPSLatitude"][0]); + if(is_numeric($LatDeg[1]) > 0) + $intLatDeg = $LatDeg[0]/$LatDeg[1]; + + $LatMin = explode("/",$exifs["GPSLatitude"][1]); + if(is_numeric($LatMin[1]) > 0) + $intLatMin = $LatMin[0]/$LatMin[1]; + + $LatSec = explode("/",$exifs["GPSLatitude"][2]); + if(is_numeric($LatSec[1]) > 0) + $intLatSec = $LatSec[0]/$LatSec[1]; + + $LongDeg = explode("/",$exifs["GPSLongitude"][0]); + if(is_numeric($LongDeg[1]) > 0) + $intLongDeg = $LongDeg[0]/$LongDeg[1]; + + $LongMin = explode("/",$exifs["GPSLongitude"][1]); + if(is_numeric($LongMin[1]) > 0) + $intLongMin = $LongMin[0]/$LongMin[1]; + + $LongSec = explode("/",$exifs["GPSLongitude"][2]); + if(is_numeric($LongSec[1]) > 0) + $intLongSec = $LongSec[0]/$LongSec[1]; + + // round to 5 = approximately 1 meter accuracy + if(is_numeric($intLatDeg) && is_numeric($intLatMin) && is_numeric($intLatSec)) + $latitude = round(dms_to_dec($exifs["GPSLatitudeRef"], + $intLatDeg,$intLatMin,$intLatSec),5); + + if(is_numeric($intLongDeg) && is_numeric($intLongMin) && is_numeric($intLongSec)) + $longitude = round(dms_to_dec($exifs["GPSLongitudeRef"], + $intLongDeg,$intLongMin,$intLongSec), 5); + if($config['geocoder'] == 'on'){ + include_spip('inc/xml'); + $url_geocoder = 'http://maps.googleapis.com/maps/api/geocode/xml?latlng='.urlencode($latitude).','.urlencode($longitude).'&sensor=true'; + $geocoder = spip_xml_load($url_geocoder); + spip_xml_match_nodes(',result,',$geocoder,$matches_adress); + if(is_array($matches_adress['result'])){ + foreach($matches_adress['result'] as $component){ + if(in_array('country',$component['type'])){ + $pays = $component['address_component'][0]['long_name'][0]; + $code_pays = $component['address_component'][0]['short_name'][0]; + } + if(in_array('administrative_area_level_1',$component['type'])){ + $region = $component['address_component'][0]['long_name'][0]; + } + if(in_array('locality',$component['type'])){ + $ville = $component['address_component'][0]['long_name'][0]; + } + if(in_array('postal_code',$component['type'])){ + $code_postal = $component['address_component'][0]['long_name'][0]; + } + if(in_array('route',$component['type'])){ + $adresse = $component['address_component'][0]['long_name'][0]; + } + } + } + } + }else if(file_exists($fichier)){ + include_spip("inc/iptc"); + + $er = new class_IPTC($fichier); + $iptc = $er->fct_lireIPTC(); + $codesiptc = $er->h_codesIptc; + $string_recherche = ''; + + if($iptc['city']){ + $string_recherche .= $iptc['city'].', '; + } + if($iptc['provinceState']){ + $string_recherche .= $iptc['provinceState'].', '; + } + if($iptc['country']){ + $string_recherche .= $iptc['country']; + } + if(strlen($string_recherche)){ + include_spip('inc/xml'); + $url_geocoder = 'http://maps.googleapis.com/maps/api/geocode/xml?address='.urlencode($string_recherche).'&sensor=true'; + $geocoder = spip_xml_load($url_geocoder); + if(is_array($geocoder)){ + spip_xml_match_nodes(',location,',$geocoder,$matches); + $latitude = $matches['location']['0']['lat']['0']; + $longitude = $matches['location']['0']['lng']['0']; + if($config['adresse'] == 'on'){ + spip_xml_match_nodes(',address_component,',$geocoder,$matches_adress); + if(is_array($matches_adress['address_component'])){ + foreach($matches_adress['address_component'] as $component){ + if(in_array('country',$component['type'])){ + $pays = $component['long_name'][0]; + $code_pays = $component['short_name'][0]; + } + if(in_array('administrative_area_level_1',$component['type'])){ + $region = $component['long_name'][0]; + } + if(in_array('locality',$component['type'])){ + $ville = $component['long_name'][0]; + } + } + } + } + } + } + } + if(is_numeric($latitude) && is_numeric($longitude)){ + $c = array( + 'titre' => basename($fichier), + 'lat'=> $latitude, + 'lon' => $longitude, + 'zoom' => $config['zoom'] ? $config['zoom'] :'4', + 'adresse' => $adresse, + 'code_postal' => $code_postal, + 'ville' => $ville, + 'region' => $region, + 'pays' => $pays, + 'code_pays' => $code_pays + ); + + if (defined('_DIR_PLUGIN_GISGEOM')) { + $geojson = '{"type":"Point","coordinates":['.$longitude.','.$latitude.']}'; + set_request('geojson',$geojson); + } + + include_spip('action/editer_gis'); + + if($id_gis = sql_getfetsel("G.id_gis","spip_gis AS G LEFT JOIN spip_gis_liens AS T ON T.id_gis=G.id_gis ","T.id_objet=" . intval($id_document) . " AND T.objet='document'")){ + // Des coordonnées sont déjà définies pour ce document => on les update + revisions_gis($id_gis,$c); + spip_log("GIS EXIFS : Update des coordonnées depuis EXIFS pour le document $id_document => id_gis = $id_gis","gis"); + } + else{ + // Aucune coordonnée n'est définie pour ce document => on les crées + $id_gis = insert_gis(); + revisions_gis($id_gis,$c); + lier_gis($id_gis, 'document', $id_document); + spip_log("GIS EXIFS : Création des coordonnées depuis EXIFS pour le document $id_document => id_gis = $id_gis","gis"); + } + } + }elseif(in_array($document['extension'],array('kml','kmz','gpx'))){ + $recuperer_info = charger_fonction('kml_infos','inc'); + $infos = $recuperer_info($document['id_document']); + if($infos){ + if(is_numeric($latitude = $infos['latitude']) && is_numeric($longitude = $infos['longitude'])){ + $c = array( + 'titre' => $infos['titre'] ? $infos['titre'] : basename($fichier), + 'descriptif' => $infos['descriptif'], + 'lat'=> $latitude, + 'lon' => $longitude, + 'zoom' => $config['zoom'] ? $config['zoom'] :'4' + ); + + include_spip('action/editer_gis'); + + if($id_gis = sql_getfetsel("G.id_gis","spip_gis AS G LEFT JOIN spip_gis_liens AS T ON T.id_gis=G.id_gis ","T.id_objet=" . intval($id_document) . " AND T.objet='document'")){ + // Des coordonnées sont déjà définies pour ce document => on les update + revisions_gis($id_gis,$c); + spip_log("GIS EXIFS : Update des coordonnées depuis EXIFS pour le document $id_document => id_gis = $id_gis","gis"); + } + else{ + // Aucune coordonnée n'est définie pour ce document => on les crées + $id_gis = insert_gis(); + revisions_gis($id_gis,$c); + lier_gis($id_gis, 'document', $id_document); + spip_log("GIS EXIFS : Création des coordonnées depuis EXIFS pour le document $id_document => id_gis = $id_gis","gis"); + } + } + unset($infos['longitude']); + unset($infos['latitude']); + if(count($infos) > 0){ + include_spip('action/editer_document'); + document_modifier($id_document, $infos); + } + } + } + } + if (($flux['args']['operation'] == 'supprimer_document') + AND ($id_document = intval($flux['args']['id_objet']) + AND ($id_gis = sql_getfetsel("G.id_gis","spip_gis AS G LEFT JOIN spip_gis_liens AS T ON T.id_gis=G.id_gis ","T.id_objet=" . intval($id_document) . " AND T.objet='document'"))) + ) { + include_spip('action/editer_gis'); + supprimer_gis($id_gis); + spip_log("GIS EXIFS : Suppression des coordonnées pour le document $id_document => id_gis = $id_gis","gis"); + } + + return $flux; +} + +function gis_taches_generales_cron($taches_generales){ + $taches_generales['gis_nettoyer_base'] = 3600*48; + return $taches_generales; +} + +function gis_saisies_autonomes($flux){ + $flux[] = 'carte'; + return $flux; +} + +/** + * Insertion dans le pipeline xmlrpc_methodes (xmlrpc) + * Ajout de méthodes xml-rpc spécifiques à GIS + * + * @param array $flux : un array des methodes déjà présentes, fonctionnant sous la forme : + * -* clé = nom de la méthode; + * -* valeur = le nom de la fonction à appeler; + * @return array $flux : l'array complété avec nos nouvelles méthodes + */ +function gis_xmlrpc_methodes($flux){ + $flux['spip.liste_gis'] = 'spip_liste_gis'; + $flux['spip.lire_gis'] = 'spip_lire_gis'; + return $flux; +} + +/** + * Insertion dans le pipeline xmlrpc_server_class (xmlrpc) + * Ajout de fonctions spécifiques utilisés par le serveur xml-rpc + */ +function gis_xmlrpc_server_class($flux){ + include_spip('inc/gis_xmlrpc'); + return $flux; +} + +?> diff --git a/www/plugins/gis/icones_barre/gis.png b/www/plugins/gis/icones_barre/gis.png new file mode 100644 index 00000000..b0e5a4cd Binary files /dev/null and b/www/plugins/gis/icones_barre/gis.png differ diff --git a/www/plugins/gis/images/gis-16.png b/www/plugins/gis/images/gis-16.png new file mode 100644 index 00000000..b0e5a4cd Binary files /dev/null and b/www/plugins/gis/images/gis-16.png differ diff --git a/www/plugins/gis/images/gis-24.png b/www/plugins/gis/images/gis-24.png new file mode 100755 index 00000000..6cb9f540 Binary files /dev/null and b/www/plugins/gis/images/gis-24.png differ diff --git a/www/plugins/gis/images/gis.png b/www/plugins/gis/images/gis.png new file mode 100755 index 00000000..8f867fc7 Binary files /dev/null and b/www/plugins/gis/images/gis.png differ diff --git a/www/plugins/gis/images/marker.png b/www/plugins/gis/images/marker.png new file mode 100644 index 00000000..c05d02cc Binary files /dev/null and b/www/plugins/gis/images/marker.png differ diff --git a/www/plugins/gis/images/openlayers/dark/blank.gif b/www/plugins/gis/images/openlayers/dark/blank.gif new file mode 100644 index 00000000..2799b45c Binary files /dev/null and b/www/plugins/gis/images/openlayers/dark/blank.gif differ diff --git a/www/plugins/gis/images/openlayers/dark/cloud-popup-relative.png b/www/plugins/gis/images/openlayers/dark/cloud-popup-relative.png new file mode 100644 index 00000000..9db138ab Binary files /dev/null and b/www/plugins/gis/images/openlayers/dark/cloud-popup-relative.png differ diff --git a/www/plugins/gis/images/openlayers/dark/east-mini.png b/www/plugins/gis/images/openlayers/dark/east-mini.png new file mode 100644 index 00000000..3f1f3d8e Binary files /dev/null and b/www/plugins/gis/images/openlayers/dark/east-mini.png differ diff --git a/www/plugins/gis/images/openlayers/dark/layer-switcher-maximize.png b/www/plugins/gis/images/openlayers/dark/layer-switcher-maximize.png new file mode 100644 index 00000000..20ad0b9a Binary files /dev/null and b/www/plugins/gis/images/openlayers/dark/layer-switcher-maximize.png differ diff --git a/www/plugins/gis/images/openlayers/dark/layer-switcher-minimize.png b/www/plugins/gis/images/openlayers/dark/layer-switcher-minimize.png new file mode 100644 index 00000000..3d27de34 Binary files /dev/null and b/www/plugins/gis/images/openlayers/dark/layer-switcher-minimize.png differ diff --git a/www/plugins/gis/images/openlayers/dark/north-mini.png b/www/plugins/gis/images/openlayers/dark/north-mini.png new file mode 100644 index 00000000..cfb9b7d5 Binary files /dev/null and b/www/plugins/gis/images/openlayers/dark/north-mini.png differ diff --git a/www/plugins/gis/images/openlayers/dark/slider.png b/www/plugins/gis/images/openlayers/dark/slider.png new file mode 100644 index 00000000..45622bcb Binary files /dev/null and b/www/plugins/gis/images/openlayers/dark/slider.png differ diff --git a/www/plugins/gis/images/openlayers/dark/south-mini.png b/www/plugins/gis/images/openlayers/dark/south-mini.png new file mode 100644 index 00000000..f8cac089 Binary files /dev/null and b/www/plugins/gis/images/openlayers/dark/south-mini.png differ diff --git a/www/plugins/gis/images/openlayers/dark/west-mini.png b/www/plugins/gis/images/openlayers/dark/west-mini.png new file mode 100644 index 00000000..34e97767 Binary files /dev/null and b/www/plugins/gis/images/openlayers/dark/west-mini.png differ diff --git a/www/plugins/gis/images/openlayers/dark/zoom-minus-mini.png b/www/plugins/gis/images/openlayers/dark/zoom-minus-mini.png new file mode 100644 index 00000000..abc125e1 Binary files /dev/null and b/www/plugins/gis/images/openlayers/dark/zoom-minus-mini.png differ diff --git a/www/plugins/gis/images/openlayers/dark/zoom-panel.png b/www/plugins/gis/images/openlayers/dark/zoom-panel.png new file mode 100644 index 00000000..f94fbb90 Binary files /dev/null and b/www/plugins/gis/images/openlayers/dark/zoom-panel.png differ diff --git a/www/plugins/gis/images/openlayers/dark/zoom-plus-mini.png b/www/plugins/gis/images/openlayers/dark/zoom-plus-mini.png new file mode 100644 index 00000000..f7a717c8 Binary files /dev/null and b/www/plugins/gis/images/openlayers/dark/zoom-plus-mini.png differ diff --git a/www/plugins/gis/images/openlayers/dark/zoom-world-mini.png b/www/plugins/gis/images/openlayers/dark/zoom-world-mini.png new file mode 100644 index 00000000..0dee7eea Binary files /dev/null and b/www/plugins/gis/images/openlayers/dark/zoom-world-mini.png differ diff --git a/www/plugins/gis/images/openlayers/dark/zoombar.png b/www/plugins/gis/images/openlayers/dark/zoombar.png new file mode 100644 index 00000000..4a13fe0f Binary files /dev/null and b/www/plugins/gis/images/openlayers/dark/zoombar.png differ diff --git a/www/plugins/gis/inc/gis_xmlrpc.php b/www/plugins/gis/inc/gis_xmlrpc.php new file mode 100644 index 00000000..fdc5291a --- /dev/null +++ b/www/plugins/gis/inc/gis_xmlrpc.php @@ -0,0 +1,125 @@ + 0) && $args['objet']){ + $where[] = 'lien.id_objet='.intval($args['id_objet']).' AND lien.objet='.sql_quote($args['objet']); + } + + if(in_array('distance',$order) OR in_array('!distance',$order)){ + $distance = true; + $lat = $args['lat']; + $lon = $args['lon']; + if(!is_numeric($lon) OR !is_numeric($lat)){ + $erreur = _T('gis:erreur_xmlrpc_lat_lon'); + return new IXR_Error(-32601, attribut_html($erreur)); + }else{ + $what[] = "(6371 * acos( cos( radians(\"$lat\") ) * cos( radians( gis.lat ) ) * cos( radians( gis.lon ) - radians(\"$lon\") ) + sin( radians(\"$lat\") ) * sin( radians( gis.lat ) ) ) ) AS distance"; + } + } + + /** + * Une recherche + */ + if(is_string($args['recherche']) AND strlen($args['recherche']) > 3){ + $prepare_recherche = charger_fonction('prepare_recherche', 'inc'); + list($rech_select, $rech_where) = $prepare_recherche($args['recherche'], $objet.'s', $where); + $what[] = $rech_select; + $from .= ' INNER JOIN spip_resultats AS resultats ON ( resultats.id = gis.id_gis ) '; + $where[] = 'resultats.'.$rech_where; + } + + $points_struct = array(); + + if($points = sql_select($what,$from,$where,'',$order,$args['limite'])){ + while($point = sql_fetch($points)){ + $struct=array(); + $args['id_gis'] = $point['id_gis']; + /** + * On utilise la fonction geodiv_lire_media pour éviter de dupliquer trop de code + */ + $struct = spip_lire_gis($args); + if($distance) + $struct['distance'] = $point['distance']; + $points_struct[] = $struct; + } + } + return $points_struct; +} + +/** + * Récupère le contenu d'un point géolocalisé + * + * Arguments possibles : + * -* login + * -* pass + * -* id_gis (Obligatoire) + * -* lat : si disponible avec lon, on ajoute la distance dans les infos + * -* lon : si disponible avec lat, on ajoute la distance dans les infos + */ +function spip_lire_gis($args){ + global $spip_xmlrpc_serveur; + + if(!$spip_xmlrpc_serveur) + return false; + + if(!intval($args['id_gis']) > 0){ + $erreur = _T('xmlrpc:erreur_identifiant',array('objet'=>'gis')); + return new IXR_Error(-32601, attribut_html($erreur)); + } + + $args_gis = array('objet'=>'gis','id_objet'=>$args['id_gis']); + $res = $spip_xmlrpc_serveur->read($args_gis); + if(!$res) + return $spip_xmlrpc_serveur->error; + + if(isset($args['lat']) && is_numeric($args['lat']) && isset($args['lon']) && is_numeric($args['lon'])){ + $lat = $args['lat']; + $lon = $args['lon']; + $what[] = 'gis.id_gis'; + $what[] = "(6371 * acos( cos( radians(\"$lat\") ) * cos( radians( gis.lat ) ) * cos( radians( gis.lon ) - radians(\"$lon\") ) + sin( radians(\"$lat\") ) * sin( radians( gis.lat ) ) ) ) AS distance"; + $distance = sql_fetsel($what,"spip_gis AS gis","gis.id_gis=".intval($args['id_gis'])); + $res['result'][0]['distance'] = $distance['distance']; + } + + if(autoriser('modifier','gis',$args['id_gis'],$GLOBALS['visiteur_session'])) + $res['result'][0]['modifiable'] = 1; + else + $res['result'][0]['modifiable'] = 0; + $logo = quete_logo('id_gis','on', $res['result'][0]['id_gis'], '', false); + if(is_array($logo)) + $res['result'][0]['logo'] = url_absolue($logo[0]); + + $gis_struct = $res['result'][0]; + $gis_struct = array_map('texte_backend',$gis_struct); + return $gis_struct; +} + +?> \ No newline at end of file diff --git a/www/plugins/gis/inc/iptc.php b/www/plugins/gis/inc/iptc.php new file mode 100644 index 00000000..9eff943a --- /dev/null +++ b/www/plugins/gis/inc/iptc.php @@ -0,0 +1,328 @@ + h_codesIptc = array("005" => "objectName", +"007" => "editStatus", +"010" => "priority", +"015" => "category", +"020" => "supplementalCategory", +"022" => "fixtureIdentifier", +"025" => "keywords", +"030" => "releaseDate", +"035" => "releaseTime", +"040" => "specialInstructions", +"045" => "referenceService", +"047" => "referenceDate", +"050" => "referenceNumber", +"055" => "createdDate", +"060" => "createdTime", +"065" => "originatingProgram", +"070" => "programVersion", +"075" => "objectCycle", +"080" => "byline", +"085" => "bylineTitle", +"090" => "city", +"095" => "provinceState", +"100" => "countryCode", +"101" => "country", +"103" => "originalTransmissionReference", +"105" => "headline", +"110" => "credit", +"115" => "source", +"116" => "copyright", +"120" => "caption", +"121" => "localCaption", +"122" => "captionWriter"); + + +// On enregistre le chemin de l'image à traiter +$this -> h_cheminImg = $cheminImg; + + +// On extrait les données encodées de l'iptc +// getimagesize($this -> h_cheminImg, &$info); //avant,marche pas sinon +getimagesize($this -> h_cheminImg, $info); //marche sans le & +$this -> h_iptcData = $info["APP13"]; + +} + +/* FIN FONCTION class_IPTC(); + + + + + + + + + +------------------------------------------------------------------------------------------------------- + + + + + + + + +INFOS SUR LA FONCTION + +ROLE : lit les IPTC d'une image et les renvoie dans un tableau associatif +FONCTION : fct_lireIPTC() +TYPE RETOURNE : chaine sous forme de tableau associatif + +FIN INFOS SUR LA FONCTION */ + +function fct_lireIPTC() +{ + $tblIPTC = iptcparse($this -> h_iptcData); + + while( (is_array($tblIPTC)) && (list($codeIPTC, $valeurIPTC) = each($tblIPTC)) ) + { + $codeIPTC = str_replace("2#", "", $codeIPTC); + + if( ($codeIPTC != "000") && ($codeIPTC != "140") && $this->h_codesIptc["$codeIPTC"]) + { + while(list($index, ) = each($valeurIPTC)) + { + if ($this->h_codesIptc["$codeIPTC"]) $codeIPTC = $this->h_codesIptc["$codeIPTC"]; + $lesIptc[$codeIPTC] .= $valeurIPTC[$index].$retourLigne; + $retourLigne = "\n"; + } + } + } + + if(is_array($lesIptc)) return $lesIptc; + else return false; +} + +/* FIN FONCTION fct_lireIPTC(); + + + + + + + + +------------------------------------------------------------------------------------------------------- + + + + + + + + +INFOS SUR LA FONCTION + +ROLE : écrit des IPTC dans le fichier image +FONCTION : fct_ecrireIPTC() +DESCRIPTION DES PARAMETRES : +- $tblIPTC_util = (tableau associatif) contient les codes des champs IPTC à modifier associés leur valeur +- $cheminImgAModifier = (chaine) stocke le chemin de l'image dont l'IPTC est à modifier ; s'il est null +le chemin sera celui contenu dans '$this -> h_cheminImg' +TYPE RETOURNE : booléen + +FIN INFOS SUR LA FONCTION */ + +function fct_ecrireIPTC($tblIPTC_util, $cheminImgAModifier = "") +{ + +// La tableau devant contenir des IPTC est vide ou n'est pas un tableau associatif +if( (empty($tblIPTC_util)) || (!is_array($tblIPTC_util)) ) return false; + + +// Si le chemin de l'image à modifier est vide alors on lui spécifie le chemin par défaut +if(empty($cheminImgAModifier)) $cheminImgAModifier = $this -> h_cheminImg; + + +// On récupère l'IPTC du fichier image courant +$tblIPTC_old = iptcparse($this -> h_iptcData); + + +// On prélève le tableau contenant les codes et les valeurs des IPTC de la photo +while(list($codeIPTC, $codeLibIPTC) = each($this -> h_codesIptc)) +{ + +// On teste si les données originelles correspondant au code en cours sont présents +if (is_array($tblIPTC_old["2#".$codeIPTC])) $valIPTC_new = $tblIPTC_old["2#".$codeIPTC]; +else $valIPTC_new = array(); + + +// On remplace les valeurs des IPTC demandées +if (is_array($tblIPTC_util[$codeIPTC])) +{ +if (count($tblIPTC_util[$codeIPTC])) $valIPTC_new = $tblIPTC_util[$codeIPTC]; + +}else{ + +$val = trim(strval($tblIPTC_util[$codeIPTC])); +if (strlen($val)) $valIPTC_new[0] = $val; +} + + +// On crée un nouveau iptcData à partir de '$tblIPTC_new' qui contient le code et la valeur de l'IPTC +foreach($valIPTC_new as $val) +{ +$iptcData_new .= $this -> fct_iptcMaketag(2, $codeIPTC, $val); +} + +} + + +/* A partir du nouveau iptcData contenu dans '$iptcData_new' on crée grâce à la fonction 'iptcembed()' +le contenu binaire du fichier image avec le nouveau IPTC inclu */ +$contenuImage = iptcembed($iptcData_new, $this -> h_cheminImg); + + +// Ecriture dans le fichier image +$idFichier = fopen($cheminImgAModifier, "wb"); +fwrite($idFichier, $contenuImage); +fclose($idFichier); + + +return true; + +} + +/* FIN FONCTION fct_ecrireIPTC(); + + + + + + + + +------------------------------------------------------------------------------------------------------- + + + + + + + + +INFOS SUR LA FONCTION + +ROLE : permet de transformer une valeur de d'IPTC (code + valeur) en iptcData +AUTEUR : Thies C. Arntzen +FONCTION : fct_iptcMaketag($rec, $dat, $val) +DESCRIPTION DES PARAMETRES : +- $rec = (entier) toujours à mettre à 2 +- $dat = (chaine) le code de l'IPTC (de type '110' et non '2#110') +- $val = (chaine) la valeur de l'IPTC +TYPE RETOURNE : booléen + +FIN INFOS SUR LA FONCTION */ + +function fct_iptcMaketag($rec, $dat, $val) +{ +$len = strlen($val); +if ($len < 0x8000) +return chr(0x1c).chr($rec).chr($dat). +chr($len >> 8). +chr($len & 0xff). +$val; +else +return chr(0x1c).chr($rec).chr($dat). +chr(0x80).chr(0x04). +chr(($len >> 24) & 0xff). +chr(($len >> 16) & 0xff). +chr(($len >> 8 ) & 0xff). +chr(($len ) & 0xff). +$val; +} + +// FIN FONCTION fct_iptcMaketag(); + + + + + +} + +/* Fin class_IPTC */ + +?> \ No newline at end of file diff --git a/www/plugins/gis/inc/kml_infos.php b/www/plugins/gis/inc/kml_infos.php new file mode 100644 index 00000000..484c03ee --- /dev/null +++ b/www/plugins/gis/inc/kml_infos.php @@ -0,0 +1,187 @@ +listContent(); + foreach($list as $fichier => $info_fichier){ + if(substr(basename($info_fichier['filename']),-3) == 'kml'){ + $zip->extractByIndex($info_fichier['index'],_DIR_TMP); + $chemin = _DIR_TMP.$info_fichier['filename']; + $supprimer_chemin = true; + break; + } + } + } + include_spip('inc/xml'); + $ret = lire_fichier($chemin,$donnees); + $arbre = spip_xml_parse($donnees); + spip_xml_match_nodes(",^Document,",$arbre, $documents); + foreach($documents as $document => $info){ + $infos['titre'] = $info[0]['name'][0]; + $infos['descriptif'] = $info[0]['description'][0]; + $infos['longitude'] = $info[0]['LookAt'][0]['longitude'][0] ? $info[0]['LookAt'][0]['longitude'][0] : false; + $infos['latitude'] = $info[0]['LookAt'][0]['latitude'][0] ? $info[0]['LookAt'][0]['latitude'][0] : false; + } + + /** + * Si on n'a pas de longitude ou de latitude, + * on essaie de faire une moyenne des placemarks + */ + if(!$infos['longitude'] OR !$infos['latitude']){ + spip_xml_match_nodes(",^Placemark,",$arbre, $placemarks); + $latitude = 0; + $longitude = 0; + $compte = 0; + foreach($placemarks as $places){ + foreach($places as $placemark => $lieu){ + if($compte > 500) + break; + if($lieu['LookAt'][0]['longitude'][0] && $latitude + $lieu['LookAt'][0]['latitude'][0]){ + if($compte > 500) + break; + $latitude = $latitude + $lieu['LookAt'][0]['latitude'][0]; + $longitude = $longitude + $lieu['LookAt'][0]['longitude'][0]; + $compte++; + }else if($lieu['Point'][0]['coordinates'][0]){ + if($compte > 500) + break; + $coordinates = explode(',',$lieu['Point'][0]['coordinates'][0]); + $latitude = $latitude + trim($coordinates[1]); + $longitude = $longitude + trim($coordinates[0]); + $compte++; + }else if($lieu['Polygon'][0]['outerBoundaryIs'][0]['LinearRing'][0]['coordinates'][0]){ + if($compte > 500) + break; + $coordinates = explode(' ',trim($lieu['Polygon'][0]['outerBoundaryIs'][0]['LinearRing'][0]['coordinates'][0])); + foreach($coordinates as $coordinate){ + if($compte > 500) + break; + $coordinate = explode(',',$coordinate); + $latitude = $latitude + trim($coordinate[1]); + $longitude = $longitude + trim($coordinate[0]); + $compte++; + } + } + } + } + if(($latitude != 0) && ($longitude != 0)){ + $infos['latitude'] = $latitude / $compte; + $infos['longitude'] = $longitude / $compte; + } + } + + /** + * Si pas de titre ou si le titre est égal au nom de fichier ou contient kml ou kmz : + * -* on regarde s'il n'y a qu'un seul Folder et on récupère son nom; + * -* on regarde s'il n'y a qu'un seul Placemark et on récupère son nom; + */ + if(!$infos['titre'] OR ($infos['titre'] == basename($chemin)) OR (preg_match(',\.km.,',$infos['titre']) > 0)){ + spip_xml_match_nodes(",^Folder,",$arbre, $folders); + if(count($folders['Folder']) == 1){ + foreach($folders['Folder'] as $folder => $dossier){ + if($dossier['name'][0]) + $infos['titre'] = $dossier['name'][0]; + if(!$infos['descriptif'] && $dossier['description'][0]) + $infos['descriptif'] = $dossier['description'][0]; + } + }else{ + if(!is_array($placemarks)){ + spip_xml_match_nodes(",^Placemark,",$arbre, $placemarks); + } + if(count($placemarks) == 1){ + foreach($placemarks as $places){ + if(count($places) == 1){ + foreach($places as $placemark => $lieu){ + if($lieu['name'][0]) + $infos['titre'] = $lieu['name'][0]; + if(!$infos['descriptif'] && $lieu['description'][0]) + $infos['descriptif'] = $lieu['description'][0]; + } + } + } + } + } + } + }else if(in_array($extension,array('gpx'))){ + $supprimer_chemin = false; + include_spip('inc/xml'); + $ret = lire_fichier($chemin,$donnees); + $arbre = spip_xml_parse($donnees); + spip_xml_match_nodes(",^metadata,",$arbre, $metadatas); + foreach($metadatas as $metadata => $info){ + $infos['titre'] = $info[0]['name'][0]; + //$infos['date'] = $info[0]['time'][0]; + $infos['descriptif'] = $info[0]['description'][0]; + foreach($info[0] as $meta => $data){ + if(preg_match(',^bounds ,',$meta)){ + $meta = '<'.$meta.'>'; + $maxlat = extraire_attribut($meta,'maxlat'); + $minlat = extraire_attribut($meta,'minlat'); + $maxlon = extraire_attribut($meta,'maxlon'); + $minlon = extraire_attribut($meta,'minlon'); + if($maxlat && $minlat) + $infos['latitude'] = (($maxlat+$minlat)/2); + if($maxlon && $minlon) + $infos['longitude'] = (($maxlon+$minlon)/2); + } + } + } + /** + * Si on n'a pas de longitude ou de latitude, + * on essaie de faire une moyenne des placemarks + */ + if(!$infos['longitude'] OR !$infos['latitude']){ + spip_xml_match_nodes(",^trkpt,",$arbre, $trackpoints); + $latitude = 0; + $longitude = 0; + $compte = 0; + foreach($trackpoints as $places => $place){ + foreach($place as $placemark => $lieu){ + if($compte > 10) + break; + } + } + if(($latitude != 0) && ($longitude != 0)){ + $infos['latitude'] = $latitude / $compte; + $infos['longitude'] = $longitude / $compte; + } + } + }else + return false; + + if(isset($infos['titre'])) + $infos['titre'] = preg_replace('//is', '$1',$infos['titre']); + if(isset($infos['descriptif'])) + $infos['descriptif'] = preg_replace('//is', '$1', $infos['descriptif']); + + if($supprimer_chemin){ + supprimer_fichier($chemin); + } + + return $infos; +} +?> \ No newline at end of file diff --git a/www/plugins/gis/inclure/download_gpx.html b/www/plugins/gis/inclure/download_gpx.html new file mode 100644 index 00000000..8191d492 --- /dev/null +++ b/www/plugins/gis/inclure/download_gpx.html @@ -0,0 +1,7 @@ + + + [(#INCLURE{fond=inclure/gpx-item,id_gis})] + \ No newline at end of file diff --git a/www/plugins/gis/inclure/download_kml.html b/www/plugins/gis/inclure/download_kml.html new file mode 100644 index 00000000..87d6aff7 --- /dev/null +++ b/www/plugins/gis/inclure/download_kml.html @@ -0,0 +1,9 @@ + + + +[(#NOM_SITE_SPIP|texte_backend)] +[(#DESCRIPTIF_SITE_SPIP|supprimer_tags|texte_backend)] + [(#INCLURE{fond=inclure/kml-item,id_gis})] + + \ No newline at end of file diff --git a/www/plugins/gis/inclure/gpx-item.html b/www/plugins/gis/inclure/gpx-item.html new file mode 100755 index 00000000..5264c657 --- /dev/null +++ b/www/plugins/gis/inclure/gpx-item.html @@ -0,0 +1,9 @@ + + + [(#TITRE|supprimer_numero|texte_backend)][ + (#DESCRIPTIF|texte_backend) + ] + [] + + + \ No newline at end of file diff --git a/www/plugins/gis/inclure/kml-item.html b/www/plugins/gis/inclure/kml-item.html new file mode 100755 index 00000000..ade8ba08 --- /dev/null +++ b/www/plugins/gis/inclure/kml-item.html @@ -0,0 +1,42 @@ + + + [(#TITRE|supprimer_numero|texte_backend)][ + + ] + + + [ + (#LON),[(#LAT)] + ] + [(#SET{logo_doc,''})] + [(#LOGO_GIS|oui) + [(#SET{logo_doc,#LOGO_GIS|image_passe_partout{28,28}|image_recadre{28,28}|image_recadre{32,32,center}})]] + [(#LOGO_GIS|non) + [(#CHEMIN{images/marker_defaut.png}|oui)[ + (#SET{logo_doc,#CHEMIN{images/marker_defaut.png}|image_passe_partout{28,28}|image_recadre{28,28}})] + ]] + [(#GET{logo_doc}|oui) + #SET{icon_w,#GET{logo_doc}|extraire_attribut{src}|largeur} + #SET{icon_h,#GET{logo_doc}|extraire_attribut{src}|hauteur} + #SET{icon_anchorPoint,''} + + + [ + (#GET{icon_w}),[(#GET{icon_h})] + ] + + 0.5,0.5 + + ] + + \ No newline at end of file diff --git a/www/plugins/gis/javascript/gis.js.html b/www/plugins/gis/javascript/gis.js.html new file mode 100644 index 00000000..6746daad --- /dev/null +++ b/www/plugins/gis/javascript/gis.js.html @@ -0,0 +1,47 @@ +#HTTP_HEADER{Content-type:text/javascript} + +[(#INCLURE{[(#VAL{[(#EVAL{_DIR_LIB_GIS})dist/[(#CONFIG{auto_compress_js}|=={oui}|?{'leaflet','leaflet-src'})].js]})]})] + +[L.Icon.Default.imagePath = "(#CHEMIN{#EVAL{_DIR_LIB_GIS}dist/images}|url_absolue)";] + +[(#INCLURE{javascript/gis_geocoder.js})] + +[(#INCLURE{javascript/gis_utils.js})] + +[(#INCLURE{[(#VAL{[(#EVAL{_DIR_LIB_GIS})plugins/KML.js]})]})] + +[(#INCLURE{[(#VAL{[(#EVAL{_DIR_LIB_GIS})plugins/GPX.js]})]})] + +[(#INCLURE{[(#VAL{[(#EVAL{_DIR_LIB_GIS})plugins/leaflet-providers.js]})]})] + +[(#INCLURE{[(#VAL{[(#EVAL{_DIR_LIB_GIS})plugins/Control.FullScreen.js]})]})] + +[(#INCLURE{[(#VAL{[(#EVAL{_DIR_LIB_GIS})plugins/Control.MiniMap.js]})]})] + +[(#REM) Tester suivant la config pour ces deux scripts ] + +#SET{layers,#CONFIG{gis/layers,#ARRAY{0,openstreetmap_mapnik}}} +[(#VAL|gis_layer_defaut|in_array{#GET{layers}}|non) + #SET{layers,#GET{layers}|push{#VAL|gis_layer_defaut}} +] + +[(#LISTE{google_roadmap,google_satellite,google_terrain}|array_intersect{#GET{layers}}|count|>{0}|oui) +[(#INCLURE{[(#VAL{[(#EVAL{_DIR_LIB_GIS})plugins/Google.js]})]})] +] + +[(#VAL{bing_aerial}|in_array{#GET{layers}}|oui) +[(#INCLURE{[(#VAL{[(#EVAL{_DIR_LIB_GIS})plugins/Bing.js]})]})] +] + +#INCLURE{javascript/gis_init_map.js} + +[(#REM) +Lib clustering si besoin +] +[(#ENV{cluster}|=={oui}|oui) +[(#INCLURE{[(#VAL{[(#EVAL{_DIR_LIB_GIS})plugins/leaflet.markercluster-src.js]})]})] +] + +[(#CONFIG{auto_compress_js}|=={oui}|oui) +#FILTRE{compacte} +] diff --git a/www/plugins/gis/javascript/gis_geocoder.js b/www/plugins/gis/javascript/gis_geocoder.js new file mode 100644 index 00000000..825b07df --- /dev/null +++ b/www/plugins/gis/javascript/gis_geocoder.js @@ -0,0 +1,115 @@ +/* + * L.Geocoder is used to make geocoding or reverse geocoding requests. + */ + +L.Geocoder = L.Class.extend({ + + includes: L.Mixin.Events, + + options: { + forwardUrl: 'http://open.mapquestapi.com/nominatim/v1/search', + reverseUrl: 'http://open.mapquestapi.com/nominatim/v1/reverse', + limit: 1, + addressdetails: 1 + }, + + initialize: function (callback, options) { + L.Util.setOptions(this, options); + this._user_callback = callback; + }, + + geocode: function (data) { + if (L.LatLng && (data instanceof L.LatLng)) { + this._reverse_geocode(data); + } else if (typeof(data) == 'string') { + this._geocode(data); + } + }, + + _geocode: function (text) { + this._request( + this.options.forwardUrl, + { + format: 'json', + q: text, + limit: this.options.limit, + addressdetails: this.options.addressdetails + } + ); + }, + + _reverse_geocode: function (latlng) { + this._request( + this.options.reverseUrl, + { + format: 'json', + lat: latlng.lat, + lon: latlng.lng + } + ); + }, + + _request: function (url, data) { + $.ajax({ + cache: true, + context: this, + data: data, + dataType: 'jsonp', + jsonp: 'json_callback', + success: this._callback, + url: url + }); + }, + + _callback: function (response) { + var return_location = {}; + if (response instanceof Array && !response.length) { + return false; + } else { + return_location.street = ''; + return_location.postcode = ''; + return_location.locality = ''; + return_location.region = ''; + return_location.country = ''; + + if (response.length > 0) { + place = response[0]; + } else { + place = response; + } + + var street_components = []; + + if (place.address.country) { + return_location.country = place.address.country; + } + if (place.address.state) { + return_location.region = place.address.state; + } + if (place.address.city) { + return_location.locality = place.address.city; + }else if(place.address.county){ + street_components.push(place.address.pedestrian); + } + if (place.address.postcode) { + return_location.postcode = place.address.postcode; + } + if (place.address.road) { + street_components.push(place.address.road); + }else if(place.address.pedestrian){ + street_components.push(place.address.pedestrian); + } + if (place.address.house_number) { + street_components.unshift(place.address.house_number); + } + + if (return_location.street === '' && street_components.length > 0) { + return_location.street = street_components.join(' '); + } + + return_location.point = new L.LatLng(place.lat, place.lon); + + this._user_callback(return_location); + } + } +}); \ No newline at end of file diff --git a/www/plugins/gis/javascript/gis_init_map.js b/www/plugins/gis/javascript/gis_init_map.js new file mode 100644 index 00000000..e99e7e1f --- /dev/null +++ b/www/plugins/gis/javascript/gis_init_map.js @@ -0,0 +1,252 @@ +var gis_init_map = function(mapcfg) { + var map_container = mapcfg["mapid"]; + + // Création de la carte Leafleat + var map = new L.Map(map_container,{ + scrollWheelZoom: mapcfg["scrollWheelZoom"], + zoomControl: mapcfg["zoomControl"], + maxZoom: mapcfg["maxZoom"] + }); + // affecter sur la globale homonyme a mapid/map_container (compat ascendante) + eval(map_container+"=map;"); + // affecter sur l'objet du DOM + jQuery("#"+map_container).get(0).map=map; + + // Appeler l'éventuelle fonction de callback et trigger "load" + map.on('load',function(e){ + if (mapcfg["callback"] && typeof(mapcfg["callback"]) === "function") { + var callback = mapcfg["callback"]; + callback(e.target); + } + jQuery("#"+map_container).trigger('load',e.target); + }); + + // Déterminer la position initiale de la carte + if (!mapcfg['utiliser_bb']){ + map.setView(new L.LatLng(mapcfg['lat'], mapcfg['lon']), mapcfg['zoom']); + } + else { + map.fitBounds( + new L.LatLngBounds( + new L.LatLng(mapcfg['sw_lat'], mapcfg['sw_lon']), + new L.LatLng(mapcfg['ne_lat'], mapcfg['ne_lon']) + ) + ); + } + + var get_layer=function(name){ + var layer; + if (typeof mapcfg['layers'][name]!=="undefined") + eval("layer=new "+ mapcfg['layers'][name]["layer"]+";"); + return layer; + } + + // Fond de carte par défaut (layer) + var default_layer = get_layer(mapcfg['default_layer']); + map.addLayer(default_layer); + + if (mapcfg['control_type'] && !mapcfg['no_control'] && mapcfg['affiche_layers'].length>1){ + var layers_control = new L.Control.Layers(); + layers_control.addBaseLayer(default_layer,mapcfg['layers'][mapcfg['default_layer']]["nom"]); + for(var l in mapcfg['affiche_layers']){ + if (mapcfg['affiche_layers'][l]!==mapcfg['default_layer']){ + var layer = get_layer(mapcfg['affiche_layers'][l]); + if (typeof layer!=="undefined") + layers_control.addBaseLayer(layer,mapcfg['layers'][mapcfg['affiche_layers'][l]]["nom"]); + } + } + map.addControl(layers_control); + // ajouter l'objet du controle de layers à la carte pour permettre d'y accéder depuis le callback + map.layersControl = layers_control; + // classe noajax sur le layer_control pour éviter l'ajout de hidden par SPIP + jQuery(layers_control._form).addClass('noajax'); + } + + + map.attributionControl.setPrefix(''); + + // Ajout des contrôles de la carte + if (!mapcfg['no_control']){ + if (mapcfg['scale']) + map.addControl(new L.Control.Scale()); + if (mapcfg['fullscreen']) + map.addControl(new L.Control.FullScreen()); + if (mapcfg['overview']){ + var minimap_layer = get_layer(mapcfg['default_layer']); + var miniMap = new L.Control.MiniMap(minimap_layer,{width: 100,height: 100, toggleDisplay: true}).addTo(map); + } + } + + // API setGeoJsonFeatureIcon : Pour Ajouter l'icone d'un point (feature = item d'un GeoJson) + map.setGeoJsonFeatureIcon = function (feature, layer) { + // Déclarer l'icone du points, si défini + if (feature.properties && feature.properties.icon){ + icon_options = { + 'iconUrl': feature.properties.icon, + 'iconSize': new L.Point( feature.properties.icon_size[0], feature.properties.icon_size[1] ), + 'iconAnchor': new L.Point( feature.properties.icon_anchor[0], feature.properties.icon_anchor[1] ), + 'popupAnchor': new L.Point( feature.properties.popup_anchor[0], feature.properties.popup_anchor[1] ) + }; + if (feature.properties.shadow) + icon_options.shadowUrl = feature.properties.shadow; + if (feature.properties.shadow_size) + icon_options.shadowSize = new L.Point( feature.properties.shadow_size[0], feature.properties.shadow_size[1] ); + layer.setIcon(new L.Icon(icon_options)); + } + } + + // API setGeoJsonFeaturePopup : Pour Ajouter le texte de popup d'un point (feature = item d'un GeoJson) + map.setGeoJsonFeaturePopup = function (feature, layer) { + // Déclarer le contenu de la popup s'il y en a + if (feature.properties && (feature.properties.title || feature.properties.description)){ + var popupContent = ''; + var popupOptions = ''; + if (feature.properties.title) + popupContent = '' + feature.properties.title + ''; + if (feature.properties.description) + popupContent = popupContent + feature.properties.description; + if (feature.properties.popup_options) + popupOptions = feature.properties.popup_options; + layer.bindPopup(popupContent,popupOptions); + } + } + + /* + Il y a pour le moment 2 façons d'analyser le GeoJson calculé + en fonction de si on veut faire du clustering (regrouper les points proches) + ou non. Il y a certainement moyen de regrouper en un seul élément + la plupart du code, en se passant du js L.geoJson même hors clustering. + À réfléchir. + */ + // API parseGeoJson + if (!mapcfg['cluster']){ + // Analyse des points et déclaration (sans regroupement des points en cluster) + map.parseGeoJson = function(data) { + if (data.features.length > 0) { + var geojson = new L.geoJson('', { + style: mapcfg['path_styles'], + onEachFeature: function (feature, layer) { + // Déclarer l'icone du point + map.setGeoJsonFeatureIcon(feature, layer); + // Déclarer le contenu de la popup s'il y en a + map.setGeoJsonFeaturePopup(feature, layer); + } + }).addTo(map); + geojson.addData(data); + if (mapcfg['autocenterandzoom']) + map.fitBounds(geojson.getBounds()); + if (mapcfg['open_id'].length) + gis_focus_marker(mapcfg['open_id'],map_container.substring(3)); + + if (typeof map.geojsons=="undefined") map.geojsons = []; + map.geojsons.push(geojson); + } + } + } + else { + // Analyse des points et déclaration (en regroupant les points en cluster) + map.parseGeoJson = function(data) { + var options = { + showCoverageOnHover:false + }; + if (mapcfg["clusterMaxZoom"]) + options.disableClusteringAtZoom = parseInt(mapcfg["clusterMaxZoom"]); + if (mapcfg["clusterShowCoverageOnHover"]) + options.showCoverageOnHover = Boolean(mapcfg["clusterShowCoverageOnHover"]); + + map.markers = new L.MarkerClusterGroup(options); + + /* Pour chaque points présents, on crée un marqueur */ + $.each(data.features, function(i, feature) { + if (feature.geometry.coordinates[0]) { + var latlng = new L.LatLng(feature.geometry.coordinates[1], feature.geometry.coordinates[0]); + var marker = new L.Marker(latlng); + + // Déclarer l'icone du point + map.setGeoJsonFeatureIcon(feature, marker); + // Déclarer le contenu de la popup s'il y en a + map.setGeoJsonFeaturePopup(feature, marker); + + marker.id = feature.id; + map.markers.addLayer(marker); + } + }); + + map.addLayer(map.markers); + + if (mapcfg['autocenterandzoom']) + map.fitBounds(map.markers.getBounds()); + } + } + + // API Compat Gis3 : addJSON et removeAllMarkers + map.addJSON = map.parseGeoJson + map.removeAllMarkers = function(){ + if (typeof map.geojsons=="undefined") map.geojsons = []; + for(i in map.geojsons){ + map.geojsons[i].clearLayers(); + map.removeLayer(map.geojsons[i]); + } + map.geojsons = []; + } + + if (mapcfg['affiche_points'] + && typeof(mapcfg['json_points'])!=="undefined" + && mapcfg['json_points']['url'].length){ + // Récupération des points à mettre sur la carte, via json externe + var args = {}; + jQuery.extend(true, args, mapcfg['json_points']['env']); + if (typeof mapcfg['json_points']['objets']!=="undefined"){ + args["objets"] = mapcfg['json_points']['objets']; + if (args["objets"]=="point_libre"){ + args["lat"]=mapcfg['lat']; + args["lon"]=mapcfg['lon']; + if (typeof mapcfg['json_points']['titre']!=="undefined") + args["titre"]= mapcfg['json_points']['titre']; + if (typeof mapcfg['json_points']['description']!=="undefined") + args["description"]=mapcfg['json_points']['description']; + if (typeof mapcfg['json_points']['icone']!=="undefined") + args["icone"]=mapcfg['json_points']['icone']; + } + } + if (typeof mapcfg['json_points']['limit']!=="undefined") + args["limit"] = mapcfg['json_points']['limit']; + jQuery.getJSON(mapcfg['json_points']['url'],args, + function(data) { + if (data){ + // Charger le json (data) et déclarer les points + map.parseGeoJson(data); + jQuery("#"+map_container).trigger('ready',map); + } + } + ); + } + + if (mapcfg['kml'] && mapcfg['kml'].length){ + map.kml = {}; + for(var i in mapcfg['kml']){ + map.kml[i] = new L.KML(mapcfg['kml'][i], {async: true}); + if (mapcfg['centrer_fichier']) { + map.kml[i].on("loaded", function(e) { map.fitBounds(e.target.getBounds()); }); + } + map.addLayer(map.kml[i]); + } + } + if (mapcfg['gpx'] && mapcfg['gpx'].length){ + map.gpx = {}; + for(var i in mapcfg['gpx']){ + map.gpx[i] = new L.GPX(mapcfg['gpx'][i], {async: true}); + if (mapcfg['centrer_fichier']) { + map.gpx[i].on("loaded", function(e) { map.fitBounds(e.target.getBounds()); }); + } + map.addLayer(map.gpx[i]); + } + } + + if (mapcfg['localize_visitor']) + map.locate({setView: true, maxZoom: mapcfg['zoom']}); + + // si pas de points trigger ici + if (!mapcfg['affiche_points'] || !mapcfg['json_points'].length) + jQuery("#"+map_container).trigger('ready',map); +} diff --git a/www/plugins/gis/javascript/gis_utils.js b/www/plugins/gis/javascript/gis_utils.js new file mode 100644 index 00000000..0faa8fd3 --- /dev/null +++ b/www/plugins/gis/javascript/gis_utils.js @@ -0,0 +1,11 @@ +function gis_focus_marker(id, map) { + var carte = eval('map'+ map); + var i, count = 0; + for(i in carte._layers) { + if ((carte._layers[i].feature) && (carte._layers[i].feature.id == id)) { + carte.panTo(carte._layers[i].getLatLng()); + carte._layers[i].openPopup(); + } + count++; + } +} \ No newline at end of file diff --git a/www/plugins/gis/json/gis.html b/www/plugins/gis/json/gis.html new file mode 100644 index 00000000..6ad03a8c --- /dev/null +++ b/www/plugins/gis/json/gis.html @@ -0,0 +1,21 @@ + + {"type": "Feature", + "geometry": {"type": "Point", "coordinates": [#LON, #LAT]}, + "id":"#ID_GIS", + "properties": { + "title":[(#TITRE*|supprimer_numero|json_encode)], + "description":[(#DESCRIPTIF|json_encode)][(#SET{logo_doc,''})] + [(#LOGO_GIS|oui) + [(#SET{logo_doc,#LOGO_GIS|image_passe_partout{32,32}|image_recadre{32,32}})]] + [(#LOGO_GIS|non) + [(#CHEMIN{images/marker_defaut.png}|oui)[ + (#SET{logo_doc,#CHEMIN{images/marker_defaut.png}|image_passe_partout{32,32}|image_recadre{32,32}})] + ]] + [(#GET{logo_doc}|oui) + #SET{icon_w,#GET{logo_doc}|extraire_attribut{src}|largeur} + #SET{icon_h,#GET{logo_doc}|extraire_attribut{src}|hauteur} + [,"icon": (#GET{logo_doc}|extraire_attribut{src}|url_absolue|json_encode)], + "icon_size": \[[(#GET{icon_w})],[(#GET{icon_h})]\], + "icon_anchor": \[[(#GET{icon_w}|div{2})],[(#GET{icon_h})]\], + "popup_anchor": \[1,[-(#GET{icon_h}|div{1.2})]\]] + }} \ No newline at end of file diff --git a/www/plugins/gis/json/gis_articles.html b/www/plugins/gis/json/gis_articles.html new file mode 100644 index 00000000..52a5ac57 --- /dev/null +++ b/www/plugins/gis/json/gis_articles.html @@ -0,0 +1,21 @@ + + {"type": "Feature", + "geometry": {"type": "Point", "coordinates": [#LON, #LAT]}, + "id":"#ID_GIS", + "properties": { + "title":[(#TITRE_GIS*|sinon{#TITRE*}|supprimer_numero|json_encode)], + "description":[(#DESCRIPTIF_GIS|sinon{#DESCRIPTIF}|json_encode)][(#SET{logo_doc,''})] + [(#LOGO_GIS|oui) + [(#SET{logo_doc,#LOGO_GIS|image_passe_partout{32,32}|image_recadre{32,32}})]] + [(#LOGO_GIS|non) + [(#CHEMIN{images/marker_defaut.png}|oui) + [(#SET{logo_doc,#CHEMIN{images/marker_defaut.png}|image_passe_partout{32,32}|image_recadre{32,32}})] + ]] + [(#GET{logo_doc}|oui) + #SET{icon_w,#GET{logo_doc}|extraire_attribut{src}|largeur} + #SET{icon_h,#GET{logo_doc}|extraire_attribut{src}|hauteur} + [,"icon": (#GET{logo_doc}|extraire_attribut{src}|url_absolue|json_encode)], + "icon_size": \[[(#GET{icon_w})],[(#GET{icon_h})]\], + "icon_anchor": \[[(#GET{icon_w}|div{2})],[(#GET{icon_h})]\], + "popup_anchor": \[1,[-(#GET{icon_h}|div{1.2})]\]] + }} \ No newline at end of file diff --git a/www/plugins/gis/json/gis_articles_branche.html b/www/plugins/gis/json/gis_articles_branche.html new file mode 100644 index 00000000..71fcbc8d --- /dev/null +++ b/www/plugins/gis/json/gis_articles_branche.html @@ -0,0 +1,21 @@ + + {"type": "Feature", + "geometry": {"type": "Point", "coordinates": [#LON, #LAT]}, + "id":"#ID_GIS", + "properties": { + "title":[(#TITRE_GIS*|sinon{#TITRE*}|supprimer_numero|json_encode)], + "description":[(#DESCRIPTIF_GIS|sinon{#DESCRIPTIF}|json_encode)][(#SET{logo_doc,''})] + [(#LOGO_GIS|oui) + [(#SET{logo_doc,#LOGO_GIS|image_passe_partout{32,32}|image_recadre{32,32}})]] + [(#LOGO_GIS|non) + [(#CHEMIN{images/marker_defaut.png}|oui) + [(#SET{logo_doc,#CHEMIN{images/marker_defaut.png}|image_passe_partout{32,32}|image_recadre{32,32}})] + ]] + [(#GET{logo_doc}|oui) + #SET{icon_w,#GET{logo_doc}|extraire_attribut{src}|largeur} + #SET{icon_h,#GET{logo_doc}|extraire_attribut{src}|hauteur} + [,"icon": (#GET{logo_doc}|extraire_attribut{src}|url_absolue|json_encode)], + "icon_size": \[[(#GET{icon_w})],[(#GET{icon_h})]\], + "icon_anchor": \[[(#GET{icon_w}|div{2})],[(#GET{icon_h})]\], + "popup_anchor": \[1,[-(#GET{icon_h}|div{1.2})]\]] + }} \ No newline at end of file diff --git a/www/plugins/gis/json/gis_articles_plus_sites.html b/www/plugins/gis/json/gis_articles_plus_sites.html new file mode 100644 index 00000000..8527953d --- /dev/null +++ b/www/plugins/gis/json/gis_articles_plus_sites.html @@ -0,0 +1,2 @@ +[(#INCLURE{fond=json/gis_articles,env})#SET{articlesvus,1}][[(#GET{articlesvus}|?{','})] + (#INCLURE{fond=json/gis_sites,env})] \ No newline at end of file diff --git a/www/plugins/gis/json/gis_auteurs.html b/www/plugins/gis/json/gis_auteurs.html new file mode 100644 index 00000000..c1c2edc4 --- /dev/null +++ b/www/plugins/gis/json/gis_auteurs.html @@ -0,0 +1,21 @@ + + {"type": "Feature", + "geometry": {"type": "Point", "coordinates": [#LON, #LAT]}, + "id":"#ID_GIS", + "properties": { + "title":[(#TITRE_GIS*|sinon{#NOM*}|supprimer_numero|json_encode)], + "description":[(#DESCRIPTIF_GIS|sinon{#BIO}|json_encode)][(#SET{logo_doc,''})] + [(#LOGO_GIS|oui) + [(#SET{logo_doc,#LOGO_GIS|image_passe_partout{32,32}|image_recadre{32,32}})]] + [(#LOGO_GIS|non) + [(#CHEMIN{images/marker_defaut.png}|oui) + [(#SET{logo_doc,#CHEMIN{images/marker_defaut.png}|image_passe_partout{32,32}|image_recadre{32,32}})] + ]] + [(#GET{logo_doc}|oui) + #SET{icon_w,#GET{logo_doc}|extraire_attribut{src}|largeur} + #SET{icon_h,#GET{logo_doc}|extraire_attribut{src}|hauteur} + [,"icon": (#GET{logo_doc}|extraire_attribut{src}|url_absolue|json_encode)], + "icon_size": \[[(#GET{icon_w})],[(#GET{icon_h})]\], + "icon_anchor": \[[(#GET{icon_w}|div{2})],[(#GET{icon_h})]\], + "popup_anchor": \[1,[-(#GET{icon_h}|div{1.2})]\]] + }} \ No newline at end of file diff --git a/www/plugins/gis/json/gis_documents.html b/www/plugins/gis/json/gis_documents.html new file mode 100644 index 00000000..7c738d0c --- /dev/null +++ b/www/plugins/gis/json/gis_documents.html @@ -0,0 +1,21 @@ + + {"type": "Feature", + "geometry": {"type": "Point", "coordinates": [#LON, #LAT]}, + "id":"#ID_GIS", + "properties": { + "title":[(#TITRE_GIS*|sinon{#TITRE*}|supprimer_numero|json_encode)], + "description":[(#DESCRIPTIF_GIS|sinon{#DESCRIPTIF}|json_encode)][(#SET{logo_doc,''})] + [(#LOGO_GIS|oui) + [(#SET{logo_doc,#LOGO_GIS|image_passe_partout{32,32}|image_recadre{32,32}})]] + [(#LOGO_GIS|non) + [(#CHEMIN{images/marker_defaut.png}|oui) + [(#SET{logo_doc,#CHEMIN{images/marker_defaut.png}|image_passe_partout{32,32}|image_recadre{32,32}})] + ]] + [(#GET{logo_doc}|oui) + #SET{icon_w,#GET{logo_doc}|extraire_attribut{src}|largeur} + #SET{icon_h,#GET{logo_doc}|extraire_attribut{src}|hauteur} + [,"icon": (#GET{logo_doc}|extraire_attribut{src}|url_absolue|json_encode)], + "icon_size": \[[(#GET{icon_w})],[(#GET{icon_h})]\], + "icon_anchor": \[[(#GET{icon_w}|div{2})],[(#GET{icon_h})]\], + "popup_anchor": \[1,[-(#GET{icon_h}|div{1.2})]\]] + }} \ No newline at end of file diff --git a/www/plugins/gis/json/gis_evenements.html b/www/plugins/gis/json/gis_evenements.html new file mode 100644 index 00000000..ff10c5be --- /dev/null +++ b/www/plugins/gis/json/gis_evenements.html @@ -0,0 +1,21 @@ + + {"type": "Feature", + "geometry": {"type": "Point", "coordinates": [#LON, #LAT]}, + "id":"#ID_GIS", + "properties": { + "title":[(#TITRE_GIS*|sinon{#TITRE*}|supprimer_numero|json_encode)], + "description":[(#DESCRIPTIF_GIS|sinon{#DESCRIPTIF}|json_encode)][(#SET{logo_doc,''})] + [(#LOGO_GIS|oui) + [(#SET{logo_doc,#LOGO_GIS|image_passe_partout{32,32}|image_recadre{32,32}})]] + [(#LOGO_GIS|non) + [(#CHEMIN{images/marker_defaut.png}|oui) + [(#SET{logo_doc,#CHEMIN{images/marker_defaut.png}|image_passe_partout{32,32}|image_recadre{32,32}})] + ]] + [(#GET{logo_doc}|oui) + #SET{icon_w,#GET{logo_doc}|extraire_attribut{src}|largeur} + #SET{icon_h,#GET{logo_doc}|extraire_attribut{src}|hauteur} + [,"icon": (#GET{logo_doc}|extraire_attribut{src}|url_absolue|json_encode)], + "icon_size": \[[(#GET{icon_w})],[(#GET{icon_h})]\], + "icon_anchor": \[[(#GET{icon_w}|div{2})],[(#GET{icon_h})]\], + "popup_anchor": \[1,[-(#GET{icon_h}|div{1.2})]\]] + }} diff --git a/www/plugins/gis/json/gis_mots.html b/www/plugins/gis/json/gis_mots.html new file mode 100644 index 00000000..18b308b2 --- /dev/null +++ b/www/plugins/gis/json/gis_mots.html @@ -0,0 +1,21 @@ + + {"type": "Feature", + "geometry": {"type": "Point", "coordinates": [#LON, #LAT]}, + "id":"#ID_GIS", + "properties": { + "title":[(#TITRE_GIS*|sinon{#TITRE*}|supprimer_numero|json_encode)], + "description":[(#DESCRIPTIF_GIS|sinon{#DESCRIPTIF}|json_encode)][(#SET{logo_doc,''})] + [(#LOGO_GIS|oui) + [(#SET{logo_doc,#LOGO_GIS|image_passe_partout{32,32}|image_recadre{32,32}})]] + [(#LOGO_GIS|non) + [(#CHEMIN{images/marker_defaut.png}|oui) + [(#SET{logo_doc,#CHEMIN{images/marker_defaut.png}|image_passe_partout{32,32}|image_recadre{32,32}})] + ]] + [(#GET{logo_doc}|oui) + #SET{icon_w,#GET{logo_doc}|extraire_attribut{src}|largeur} + #SET{icon_h,#GET{logo_doc}|extraire_attribut{src}|hauteur} + [,"icon": (#GET{logo_doc}|extraire_attribut{src}|url_absolue|json_encode)], + "icon_size": \[[(#GET{icon_w})],[(#GET{icon_h})]\], + "icon_anchor": \[[(#GET{icon_w}|div{2})],[(#GET{icon_h})]\], + "popup_anchor": \[1,[-(#GET{icon_h}|div{1.2})]\]] + }} \ No newline at end of file diff --git a/www/plugins/gis/json/gis_point_libre.html b/www/plugins/gis/json/gis_point_libre.html new file mode 100644 index 00000000..96edf867 --- /dev/null +++ b/www/plugins/gis/json/gis_point_libre.html @@ -0,0 +1,19 @@ +{ + "type": "Feature", + "geometry": {"type": "Point", "coordinates": [[(#ENV{lon})], [(#ENV{lat})]]}, + "id":"1", + "properties": { + "title":[(#ENV{titre}|json_encode)], + "description":[(#ENV{description}|wrap{

    }|json_encode)] + #SET{icone, #CHEMIN_IMAGE{#ENV*{icone,0}}|sinon{#CHEMIN{#ENV*{icone,0}}}} + #SET{icone_defaut, #CHEMIN{images/marker_defaut.png}} + #SET{logo_doc,#GET{icone}|sinon{#GET{icone_defaut}}|image_passe_partout{32,32}|image_recadre{32,32,center}|extraire_attribut{src}|url_absolue} + [(#GET{logo_doc}|oui) + #SET{icon_w,#GET{logo_doc}|extraire_attribut{src}|largeur} + #SET{icon_h,#GET{logo_doc}|extraire_attribut{src}|hauteur} + [,"icon": (#GET{logo_doc}|extraire_attribut{src}|url_absolue|json_encode)], + "icon_size": \[[(#GET{icon_w})],[(#GET{icon_h})]\], + "icon_anchor": \[[(#GET{icon_w}|div{2})],[(#GET{icon_h})]\], + "popup_anchor": \[1,[-(#GET{icon_h}|div{1.2})]\]] + } +} diff --git a/www/plugins/gis/json/gis_rubriques.html b/www/plugins/gis/json/gis_rubriques.html new file mode 100644 index 00000000..0c88fd1e --- /dev/null +++ b/www/plugins/gis/json/gis_rubriques.html @@ -0,0 +1,21 @@ + + {"type": "Feature", + "geometry": {"type": "Point", "coordinates": [#LON, #LAT]}, + "id":"#ID_GIS", + "properties": { + "title":[(#TITRE_GIS*|sinon{#TITRE*}|supprimer_numero|json_encode)], + "description":[(#DESCRIPTIF_GIS|sinon{#DESCRIPTIF}|json_encode)][(#SET{logo_doc,''})] + [(#LOGO_GIS|oui) + [(#SET{logo_doc,#LOGO_GIS|image_passe_partout{32,32}|image_recadre{32,32}})]] + [(#LOGO_GIS|non) + [(#CHEMIN{images/marker_defaut.png}|oui) + [(#SET{logo_doc,#CHEMIN{images/marker_defaut.png}|image_passe_partout{32,32}|image_recadre{32,32}})] + ]] + [(#GET{logo_doc}|oui) + #SET{icon_w,#GET{logo_doc}|extraire_attribut{src}|largeur} + #SET{icon_h,#GET{logo_doc}|extraire_attribut{src}|hauteur} + [,"icon": (#GET{logo_doc}|extraire_attribut{src}|url_absolue|json_encode)], + "icon_size": \[[(#GET{icon_w})],[(#GET{icon_h})]\], + "icon_anchor": \[[(#GET{icon_w}|div{2})],[(#GET{icon_h})]\], + "popup_anchor": \[1,[-(#GET{icon_h}|div{1.2})]\]] + }} \ No newline at end of file diff --git a/www/plugins/gis/json/gis_sites.html b/www/plugins/gis/json/gis_sites.html new file mode 100644 index 00000000..0de784f5 --- /dev/null +++ b/www/plugins/gis/json/gis_sites.html @@ -0,0 +1,21 @@ + + {"type": "Feature", + "geometry": {"type": "Point", "coordinates": [#LON, #LAT]}, + "id":"#ID_GIS", + "properties": { + "title":[(#TITRE_GIS*|sinon{#NOM_SITE*}|supprimer_numero|json_encode)], + "description":[(#DESCRIPTIF_GIS|sinon{#DESCRIPTIF}|json_encode)][(#SET{logo_doc,''})] + [(#LOGO_GIS|oui) + [(#SET{logo_doc,#LOGO_GIS|image_passe_partout{32,32}|image_recadre{32,32}})]] + [(#LOGO_GIS|non) + [(#CHEMIN{images/marker_defaut.png}|oui) + [(#SET{logo_doc,#CHEMIN{images/marker_defaut.png}|image_passe_partout{32,32}|image_recadre{32,32}})] + ]] + [(#GET{logo_doc}|oui) + #SET{icon_w,#GET{logo_doc}|extraire_attribut{src}|largeur} + #SET{icon_h,#GET{logo_doc}|extraire_attribut{src}|hauteur} + [,"icon": (#GET{logo_doc}|extraire_attribut{src}|url_absolue|json_encode)], + "icon_size": \[[(#GET{icon_w})],[(#GET{icon_h})]\], + "icon_anchor": \[[(#GET{icon_w}|div{2})],[(#GET{icon_h})]\], + "popup_anchor": \[1,[-(#GET{icon_h}|div{1.2})]\]] + }} \ No newline at end of file diff --git a/www/plugins/gis/json/gis_tous_avec_liens_espace_prive.html b/www/plugins/gis/json/gis_tous_avec_liens_espace_prive.html new file mode 100644 index 00000000..b9c3d507 --- /dev/null +++ b/www/plugins/gis/json/gis_tous_avec_liens_espace_prive.html @@ -0,0 +1,21 @@ + + {"type": "Feature", + "geometry": {"type": "Point", "coordinates": [#LON, #LAT]}, + "id":"#ID_GIS", + "properties": { + "title":[(#VAL{[(#TITRE*|supprimer_numero|sinon{----})]}|json_encode)], + "description":[(#DESCRIPTIF|json_encode)][(#SET{logo_doc,''})] + [(#LOGO_GIS|oui) + [(#SET{logo_doc,#LOGO_GIS|image_passe_partout{32,32}|image_recadre{32,32}})]] + [(#LOGO_GIS|non) + [(#CHEMIN{images/marker_defaut.png}|oui)[ + (#SET{logo_doc,#CHEMIN{images/marker_defaut.png}|image_passe_partout{32,32}|image_recadre{32,32}})] + ]] + [(#GET{logo_doc}|oui) + #SET{icon_w,#GET{logo_doc}|extraire_attribut{src}|largeur} + #SET{icon_h,#GET{logo_doc}|extraire_attribut{src}|hauteur} + [,"icon": (#GET{logo_doc}|extraire_attribut{src}|url_absolue|json_encode)], + "icon_size": \[[(#GET{icon_w})],[(#GET{icon_h})]\], + "icon_anchor": \[[(#GET{icon_w}|div{2})],[(#GET{icon_h})]\], + "popup_anchor": \[1,[-(#GET{icon_h}|div{1.2})]\]] + }} diff --git a/www/plugins/gis/lang/gis.xml b/www/plugins/gis/lang/gis.xml new file mode 100644 index 00000000..5ab9a607 --- /dev/null +++ b/www/plugins/gis/lang/gis.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/www/plugins/gis/lang/gis_en.php b/www/plugins/gis/lang/gis_en.php new file mode 100644 index 00000000..71c3699a --- /dev/null +++ b/www/plugins/gis/lang/gis_en.php @@ -0,0 +1,156 @@ + 'No point', + 'aucun_objet' => 'No object', + + // B + 'bouton_lier' => 'Link this point', + 'bouton_supprimer_gis' => 'Delete this point permanently', + 'bouton_supprimer_lien' => 'Remove this link', + + // C + 'cfg_descr_gis' => 'Geographic Information System.
    Link to the documentation.', + 'cfg_inf_adresse' => 'Displays additional address fields (country, city, state, address ...)', + 'cfg_inf_bing' => 'The Bing Aerial layer needs a key you can create on the Bing website.', + 'cfg_inf_cloudmade' => 'This API needs a key you can create on the CloudMade website.', + 'cfg_inf_geocoder' => 'Enable geocoder functions (search from an address, recovery of the address from the coordinates).', + 'cfg_inf_geolocaliser_user_html5' => 'If the user\'s browser allows it, its approximate geographic location is retrieved to give the default position when creating a new point.', + 'cfg_inf_google' => 'This API needs a key you can create on the GoogleMaps website.', + 'cfg_inf_yandex' => 'This API needs a key you can create on the yandex website.', + 'cfg_lbl_activer_objets' => 'Enable geotagging of content:', + 'cfg_lbl_adresse' => 'Show address fields', + 'cfg_lbl_api' => 'Geolocation API', + 'cfg_lbl_api_cloudmade' => 'CloudMade', + 'cfg_lbl_api_google' => 'Google Maps v2', + 'cfg_lbl_api_googlev3' => 'Google Maps v3', + 'cfg_lbl_api_key_bing' => 'Bing key', + 'cfg_lbl_api_key_cloudmade' => 'CloudMade API key', + 'cfg_lbl_api_key_google' => 'GoogleMaps API key', + 'cfg_lbl_api_key_yandex' => 'Yandex API key', + 'cfg_lbl_api_mapquest' => 'MapQuest', + 'cfg_lbl_api_microsoft' => 'Microsoft Bing', + 'cfg_lbl_api_openlayers' => 'OpenLayers', + 'cfg_lbl_api_ovi' => 'Ovi Nokia', + 'cfg_lbl_api_yandex' => 'Yandex', + 'cfg_lbl_geocoder' => 'Geocoder', + 'cfg_lbl_geolocaliser_user_html5' => 'Center the map on the location of the user at the creation step', + 'cfg_lbl_layer_defaut' => 'Default layer', + 'cfg_lbl_layers' => 'Proposed layers', + 'cfg_lbl_maptype' => 'Base map', + 'cfg_lbl_maptype_carte' => 'Map', + 'cfg_lbl_maptype_hybride' => 'Hybrid', + 'cfg_lbl_maptype_relief' => 'Relief', + 'cfg_lbl_maptype_satellite' => 'Satellite', + 'cfg_titre_gis' => 'GIS', + + // E + 'editer_gis_editer' => 'Edit this point', + 'editer_gis_explication' => 'This page lists the whole location-based points of the website.', + 'editer_gis_nouveau' => 'Create a new point', + 'editer_gis_titre' => 'The location-based points', + 'erreur_recherche_pas_resultats' => 'No point corresponds to the searched text.', + 'erreur_xmlrpc_lat_lon' => 'Latitude and longitude should be set as arguments', + 'explication_api_forcee' => 'The is imposed by another plugin or skeleton.', + 'explication_import' => 'Import a file in GPX or KML format.', + 'explication_layer_forcee' => 'The layer is imposed by another plugin or skeleton.', + 'explication_maptype_force' => 'The base map is imposed by another plugin or skeleton.', + + // F + 'formulaire_creer_gis' => 'Create a new location-based point :', + 'formulaire_modifier_gis' => 'Modify the location-based point :', + + // G + 'gis_pluriel' => 'Location-based points', + 'gis_singulier' => 'Location-based point', + + // I + 'icone_gis_tous' => 'Location-based points', + 'info_1_gis' => 'A location-based point', + 'info_1_objet_gis' => '1 object linked to that point', + 'info_aucun_gis' => 'No location-based point', + 'info_aucun_objet_gis' => 'No object linked to that point', + 'info_geolocalisation' => 'Geolocation', + 'info_id_objet' => 'N°', + 'info_liste_gis' => 'Location-based points', + 'info_nb_gis' => '@nb@ location-based points', + 'info_nb_objets_gis' => '@nb@ objects linked to that point', + 'info_numero_gis' => 'Point number', + 'info_objet' => 'Object', + 'info_recherche_gis_zero' => 'No result for « @cherche_gis@ ».', + 'info_supprimer_lien' => 'Unlink', + 'info_supprimer_liens' => 'Unlink all the points', + 'info_voir_fiche_objet' => 'Go to page', + + // L + 'label_adress' => 'Address', + 'label_code_postal' => 'Postal code', + 'label_import' => 'Import', + 'label_inserer_modele_articles' => 'linked to articles', + 'label_inserer_modele_articles_sites' => 'linked to articles + websites', + 'label_inserer_modele_auteurs' => 'linked to authors', + 'label_inserer_modele_centrer_auto' => 'No automatic centring', + 'label_inserer_modele_centrer_fichier' => 'Do not center the map on the KLM/GPX files', + 'label_inserer_modele_controle' => 'Hide controls', + 'label_inserer_modele_controle_type' => 'Hide types', + 'label_inserer_modele_description' => 'Description', + 'label_inserer_modele_documents' => 'linked to documents', + 'label_inserer_modele_echelle' => 'Scale', + 'label_inserer_modele_fullscreen' => 'Full screen button', + 'label_inserer_modele_gpx' => 'GPX file to overlay', + 'label_inserer_modele_hauteur_carte' => 'Map height', + 'label_inserer_modele_identifiant' => 'ID', + 'label_inserer_modele_identifiant_opt' => 'ID (optionnal)', + 'label_inserer_modele_identifiant_placeholder' => 'id_gis', + 'label_inserer_modele_kml' => 'KML files to overlay', + 'label_inserer_modele_kml_gpx' => 'id_document or url', + 'label_inserer_modele_largeur_carte' => 'Map width', + 'label_inserer_modele_limite' => 'Maximum number of points', + 'label_inserer_modele_localiser_visiteur' => 'Center on the visitor', + 'label_inserer_modele_mini_carte' => 'Mini situation map', + 'label_inserer_modele_molette' => 'Disable the scroll wheel', + 'label_inserer_modele_mots' => 'Linked to words', + 'label_inserer_modele_objets' => 'Point(s) category', + 'label_inserer_modele_point_gis' => 'single point recorded', + 'label_inserer_modele_point_libre' => 'free single point', + 'label_inserer_modele_points' => 'Hide points', + 'label_inserer_modele_rubriques' => 'linked to sections', + 'label_inserer_modele_sites' => 'linked to websites', + 'label_inserer_modele_titre_carte' => 'Map title', + 'label_pays' => 'Country', + 'label_rechercher_address' => 'Search for an address', + 'label_rechercher_point' => 'Search for a point', + 'label_region' => 'Region', + 'label_ville' => 'Town', + 'lat' => 'Latitude', + 'libelle_logo_gis' => 'POINT\\\'S LOGO', + 'lien_ajouter_gis' => 'Add this point', + 'lon' => 'Longitude', + + // T + 'telecharger_gis' => 'Download in @format@ format', + 'texte_ajouter_gis' => 'Add a location-based point', + 'texte_creer_associer_gis' => 'Create and link a location-based point', + 'texte_creer_gis' => 'Create a location-based point', + 'texte_modifier_gis' => 'Modify the location-based point', + 'texte_voir_gis' => 'Show the location-based point', + 'titre_bloc_creer_point' => 'Link a new point', + 'titre_bloc_points_lies' => 'Linked points', + 'titre_bloc_rechercher_point' => 'Search for a point', + 'titre_nombre_utilisation' => 'One use', + 'titre_nombre_utilisations' => '@nb@ uses', + 'titre_nouveau_point' => 'New point', + 'titre_objet' => 'Title', + + // Z + 'zoom' => 'Zoom' +); + +?> diff --git a/www/plugins/gis/lang/gis_es.php b/www/plugins/gis/lang/gis_es.php new file mode 100644 index 00000000..020bc3d7 --- /dev/null +++ b/www/plugins/gis/lang/gis_es.php @@ -0,0 +1,156 @@ + 'Ningún punto', + 'aucun_objet' => 'Ningún objeto', + + // B + 'bouton_lier' => 'Asociar este punto', + 'bouton_supprimer_gis' => 'Eliminar definitivamente este punto', + 'bouton_supprimer_lien' => 'Eliminar este enlace', + + // C + 'cfg_descr_gis' => 'Sistema de Información Geográfica.
    Ir a la documentación.', + 'cfg_inf_adresse' => 'Mostrar campos adicionales de dirección (país, ciudad, región, dirección...)', + 'cfg_inf_bing' => 'La capa Bing Aerial necesita crear una clave el sitio de Bing.', + 'cfg_inf_cloudmade' => 'Esta API necesita crear una clave en el sitio de CloudMade.', + 'cfg_inf_geocoder' => 'Activar las funciones del geocoder (búsqueda desde una dirección, recuperación de una dirección partiendo de coordenadas).', + 'cfg_inf_geolocaliser_user_html5' => 'Si el navegador del usuario lo permite, su ubicación geográfica aproximada se recupera para dar la posición por defecto durante la creación de un punto.', + 'cfg_inf_google' => 'Esta API necesita crear una clave en el sitio de GoogleMaps.', + 'cfg_inf_yandex' => 'Esta API necesita crear una clave en el sitio de Yandex.', + 'cfg_lbl_activer_objets' => 'Activar la geolocalización en los contenidos:', + 'cfg_lbl_adresse' => 'Mostrar los campos de dirección', + 'cfg_lbl_api' => 'API de cartografía', + 'cfg_lbl_api_cloudmade' => 'CloudMade', + 'cfg_lbl_api_google' => 'Google Maps v2', + 'cfg_lbl_api_googlev3' => 'Google Maps v3', + 'cfg_lbl_api_key_bing' => 'Clave Bing', + 'cfg_lbl_api_key_cloudmade' => 'Clave CloudMade', + 'cfg_lbl_api_key_google' => 'Clave GoogleMaps', + 'cfg_lbl_api_key_yandex' => 'Clave Yandex', + 'cfg_lbl_api_mapquest' => 'MapQuest', + 'cfg_lbl_api_microsoft' => 'Microsoft Bing', + 'cfg_lbl_api_openlayers' => 'OpenLayers', + 'cfg_lbl_api_ovi' => 'Ovi Nokia', + 'cfg_lbl_api_yandex' => 'Yandex', + 'cfg_lbl_geocoder' => 'Geocoder', + 'cfg_lbl_geolocaliser_user_html5' => 'Centrar el mapa en base a la ubicación del usuario durante la creación', + 'cfg_lbl_layer_defaut' => 'Capa por defecto', + 'cfg_lbl_layers' => 'Capas propuestas', + 'cfg_lbl_maptype' => 'Fondo cartográfico', + 'cfg_lbl_maptype_carte' => 'Mapa', + 'cfg_lbl_maptype_hybride' => 'Híbrido', + 'cfg_lbl_maptype_relief' => 'Relieve', + 'cfg_lbl_maptype_satellite' => 'Satélite', + 'cfg_titre_gis' => 'GIS', + + // E + 'editer_gis_editer' => 'Modificar este punto', + 'editer_gis_explication' => 'Esta página lista todos los puntos geolocalizados del sitio.', + 'editer_gis_nouveau' => 'Crear un nuevo punto', + 'editer_gis_titre' => 'Puntos geolocalizados', + 'erreur_recherche_pas_resultats' => 'Ningún punto corresponde a la búsqueda.', + 'erreur_xmlrpc_lat_lon' => 'La latitud y la longitud deben indicarse como parámetros', + 'explication_api_forcee' => 'La API esta impuesta por otro plugin o esqueleto.', + 'explication_import' => 'Importar un archivo en formato GPX o KML.', + 'explication_layer_forcee' => 'La capa se ha impuesto por otro plugin o esqueleto. ', + 'explication_maptype_force' => 'El fondo del mapa está impuesto por otro plugin o esqueleto.', + + // F + 'formulaire_creer_gis' => 'Crear un punto geolocalizado:', + 'formulaire_modifier_gis' => 'Modificar el punto geolocalizado:', + + // G + 'gis_pluriel' => 'Puntos geolocalizados', + 'gis_singulier' => 'Punto geolocalizado', + + // I + 'icone_gis_tous' => 'Puntos geolocalizados', + 'info_1_gis' => 'Un punto geolocalizado', + 'info_1_objet_gis' => '1 objeto asociado a este punto', + 'info_aucun_gis' => 'Ningún punto geolocalizado', + 'info_aucun_objet_gis' => 'Ningún objeto asociado a este punto', + 'info_geolocalisation' => 'Geolocalización', + 'info_id_objet' => 'N°', + 'info_liste_gis' => 'Puntos geolocalizados', + 'info_nb_gis' => '@nb@ puntos geolocalizados', + 'info_nb_objets_gis' => '@nb@ objetos asociados a este punto', + 'info_numero_gis' => 'Punto número', + 'info_objet' => 'Objeto', + 'info_recherche_gis_zero' => 'Ningún resultados para «@cherche_gis@».', + 'info_supprimer_lien' => 'Desunir', + 'info_supprimer_liens' => 'Desunir todos los puntos', + 'info_voir_fiche_objet' => 'Ver la ficha', + + // L + 'label_adress' => 'Dirección', + 'label_code_postal' => 'Código postal', + 'label_import' => 'Importar', + 'label_inserer_modele_articles' => 'asociados a los artículos', + 'label_inserer_modele_articles_sites' => 'asociados a los artículos + sitios', + 'label_inserer_modele_auteurs' => 'asociados a los autores', + 'label_inserer_modele_centrer_auto' => 'Ningún autocentrado', + 'label_inserer_modele_centrer_fichier' => 'No centrar el mapa en los archivos KLM/GPX', + 'label_inserer_modele_controle' => 'Esconder los controles', + 'label_inserer_modele_controle_type' => 'Esconder los tipos', + 'label_inserer_modele_description' => 'Descripción', + 'label_inserer_modele_documents' => 'asociados a los documentos', + 'label_inserer_modele_echelle' => 'Escala', + 'label_inserer_modele_fullscreen' => 'Botón de pantalla completa', + 'label_inserer_modele_gpx' => 'Archivo GPX para sobreponer', + 'label_inserer_modele_hauteur_carte' => 'Altura del mapa', + 'label_inserer_modele_identifiant' => 'Identificador', + 'label_inserer_modele_identifiant_opt' => 'Identificador (opcional)', + 'label_inserer_modele_identifiant_placeholder' => 'id_gis', + 'label_inserer_modele_kml' => 'Archivo KML para sobreponer', + 'label_inserer_modele_kml_gpx' => 'id_document o url', + 'label_inserer_modele_largeur_carte' => 'Anchura del mapa', + 'label_inserer_modele_limite' => 'Número máximo de puntos', + 'label_inserer_modele_localiser_visiteur' => 'Centrar en el visitante', + 'label_inserer_modele_mini_carte' => 'Mini mapa de situación', + 'label_inserer_modele_molette' => 'Desactivar la rueda', + 'label_inserer_modele_mots' => 'asociados a las palabras', + 'label_inserer_modele_objets' => 'Tipo de punto(s)', + 'label_inserer_modele_point_gis' => 'punto único registrado', + 'label_inserer_modele_point_libre' => 'punto único libre', + 'label_inserer_modele_points' => 'Esconder los puntos', + 'label_inserer_modele_rubriques' => 'asociados a las secciones', + 'label_inserer_modele_sites' => 'asociados a los sitios', + 'label_inserer_modele_titre_carte' => 'Título del mapa', + 'label_pays' => 'País', + 'label_rechercher_address' => 'Buscar una dirección', + 'label_rechercher_point' => 'Buscar un punto', + 'label_region' => 'Región', + 'label_ville' => 'Ciudad', + 'lat' => 'Latitud', + 'libelle_logo_gis' => 'LOGOTIPO DEL PUNTO', + 'lien_ajouter_gis' => 'Añadir este punto', + 'lon' => 'Longitud', + + // T + 'telecharger_gis' => 'Descargar en formato @format@', + 'texte_ajouter_gis' => 'Añadir un punto geolocalizado', + 'texte_creer_associer_gis' => 'Crear y asociar un punto geolocalizado', + 'texte_creer_gis' => 'Crear un punto geolocalizado', + 'texte_modifier_gis' => 'Modificar el punto geolocalizado', + 'texte_voir_gis' => 'Ver el punto geolocalizado', + 'titre_bloc_creer_point' => 'Asociar un nuevo punto', + 'titre_bloc_points_lies' => 'Puntos asociados', + 'titre_bloc_rechercher_point' => 'Buscar un punto', + 'titre_nombre_utilisation' => 'Una utilización', + 'titre_nombre_utilisations' => '@nb@ utilizaciones', + 'titre_nouveau_point' => 'Nuevo punto', + 'titre_objet' => 'Título', + + // Z + 'zoom' => 'Zoom' +); + +?> diff --git a/www/plugins/gis/lang/gis_fr.php b/www/plugins/gis/lang/gis_fr.php new file mode 100644 index 00000000..70e25c0d --- /dev/null +++ b/www/plugins/gis/lang/gis_fr.php @@ -0,0 +1,154 @@ + 'Aucun point', + 'aucun_objet' => 'Aucun objet', + + // B + 'bouton_lier' => 'Lier ce point', + 'bouton_supprimer_gis' => 'Supprimer définitivement ce point', + 'bouton_supprimer_lien' => 'Supprimer ce lien', + + // C + 'cfg_descr_gis' => 'Système d\'Information Géographique.
    Accéder la documentation.', + 'cfg_inf_adresse' => 'Affiche des champs supplémentaires d\'adresse (pays, ville, région, adresse...)', + 'cfg_inf_bing' => 'La couche Bing Aerial nécessite une clé à créer sur le site de Bing.', + 'cfg_inf_cloudmade' => 'Cette API nécessite une clé à créer sur le site de CloudMade.', + 'cfg_inf_geocoder' => 'Activer les fonctions du geocoder (recherche à partir d\'une adresse, récupération de l\'adresse à partir des coordonnées).', + 'cfg_inf_geolocaliser_user_html5' => 'Si le navigateur de l\'utilisateur le permet, son emplacement géographique approximatif est récupéré pour donner la position par défaut lors de la création d\'un point.', + 'cfg_inf_google' => 'Cette API nécessite une clé à créer sur le site de GoogleMaps.', + 'cfg_inf_yandex' => 'Cette API nécessite une clé à créer sur le site de Yandex.', + 'cfg_lbl_activer_objets' => 'Activer la géolocalisation sur les contenus :', + 'cfg_lbl_adresse' => 'Afficher les champs d\'adresse', + 'cfg_lbl_api' => 'API de cartographie', + 'cfg_lbl_api_cloudmade' => 'CloudMade', + 'cfg_lbl_api_google' => 'Google Maps v2', + 'cfg_lbl_api_googlev3' => 'Google Maps v3', + 'cfg_lbl_api_key_bing' => 'Clé Bing', + 'cfg_lbl_api_key_cloudmade' => 'Clé CloudMade', + 'cfg_lbl_api_key_google' => 'Clé GoogleMaps', + 'cfg_lbl_api_key_yandex' => 'Clé Yandex', + 'cfg_lbl_api_mapquest' => 'MapQuest', + 'cfg_lbl_api_microsoft' => 'Microsoft Bing', + 'cfg_lbl_api_openlayers' => 'OpenLayers', + 'cfg_lbl_api_ovi' => 'Ovi Nokia', + 'cfg_lbl_api_yandex' => 'Yandex', + 'cfg_lbl_geocoder' => 'Geocoder', + 'cfg_lbl_geolocaliser_user_html5' => 'Centrer la carte sur l\'emplacement de l\'utilisateur à la création', + 'cfg_lbl_layer_defaut' => 'Couche par défaut', + 'cfg_lbl_layers' => 'Couches proposées', + 'cfg_lbl_maptype' => 'Fond cartographique', + 'cfg_lbl_maptype_carte' => 'Carte', + 'cfg_lbl_maptype_hybride' => 'Hybride', + 'cfg_lbl_maptype_relief' => 'Relief', + 'cfg_lbl_maptype_satellite' => 'Satellite', + 'cfg_titre_gis' => 'GIS', + + // E + 'editer_gis_editer' => 'Modifier ce point', + 'editer_gis_explication' => 'Cette page liste l\'ensemble des points géolocalisés du site.', + 'editer_gis_nouveau' => 'Créer un nouveau point', + 'editer_gis_titre' => 'Les points géolocalisés', + 'erreur_recherche_pas_resultats' => 'Aucun point ne correspond à la recherche.', + 'erreur_xmlrpc_lat_lon' => 'La latitude et la longitude doivent être passées en argument', + 'explication_api_forcee' => 'L\'API est imposée par un autre plugin ou squelette.', + 'explication_import' => 'Importer un fichier au format GPX ou KML.', + 'explication_layer_forcee' => 'La couche est imposée par un autre plugin ou un squelette.', + 'explication_maptype_force' => 'Le fond cartographique est imposé par un autre plugin ou squelette.', + + // F + 'formulaire_creer_gis' => 'Créer un point géolocalisé :', + 'formulaire_modifier_gis' => 'Modifier le point géolocalisé :', + + // G + 'gis_pluriel' => 'Points géolocalisés', + 'gis_singulier' => 'Point géolocalisé', + + // I + 'icone_gis_tous' => 'Points géolocalisés', + 'info_1_gis' => 'Un point géolocalisé', + 'info_1_objet_gis' => '1 objet lié à ce point', + 'info_aucun_gis' => 'Aucun point géolocalisé', + 'info_aucun_objet_gis' => 'Aucun objet lié à ce point', + 'info_geolocalisation' => 'Géolocalisation', + 'info_id_objet' => 'N°', + 'info_liste_gis' => 'Points géolocalisés', + 'info_nb_gis' => '@nb@ points géolocalisés', + 'info_nb_objets_gis' => '@nb@ objets liés à ce point', + 'info_numero_gis' => 'Point numéro', + 'info_objet' => 'Objet', + 'info_recherche_gis_zero' => 'Aucun résultat pour « @cherche_gis@ ».', + 'info_supprimer_lien' => 'Détacher', + 'info_supprimer_liens' => 'Détacher tous les points', + 'info_voir_fiche_objet' => 'Voir la fiche', + + // L + 'label_adress' => 'Adresse', + 'label_code_postal' => 'Code postal', + 'label_import' => 'Importer', + 'label_inserer_modele_articles' => 'liés aux articles', + 'label_inserer_modele_articles_sites' => 'liés aux articles + sites', + 'label_inserer_modele_auteurs' => 'liés aux auteurs', + 'label_inserer_modele_centrer_auto' => 'Pas de centrage auto', + 'label_inserer_modele_centrer_fichier' => 'Ne pas centrer la carte sur les fichiers KLM/GPX', + 'label_inserer_modele_controle' => 'Cacher les contrôles', + 'label_inserer_modele_controle_type' => 'Cacher les types', + 'label_inserer_modele_description' => 'Description', + 'label_inserer_modele_documents' => 'liés aux documents', + 'label_inserer_modele_echelle' => 'Echelle', + 'label_inserer_modele_fullscreen' => 'Bouton plein écran', + 'label_inserer_modele_gpx' => 'Fichier GPX à superposer', + 'label_inserer_modele_hauteur_carte' => 'Hauteur de la carte', + 'label_inserer_modele_identifiant' => 'Identifiant', + 'label_inserer_modele_identifiant_opt' => 'Identifiant (optionnel)', + 'label_inserer_modele_identifiant_placeholder' => 'id_gis', + 'label_inserer_modele_kml' => 'Fichier KML à superposer', + 'label_inserer_modele_kml_gpx' => 'id_document ou url', + 'label_inserer_modele_largeur_carte' => 'Largeur de la carte', + 'label_inserer_modele_limite' => 'Nombre de points maximum', + 'label_inserer_modele_localiser_visiteur' => 'Centrer sur le visiteur', + 'label_inserer_modele_mini_carte' => 'Mini carte de situation', + 'label_inserer_modele_molette' => 'Désactiver la molette', + 'label_inserer_modele_mots' => 'liés aux mots', + 'label_inserer_modele_objets' => 'Type de point(s)', + 'label_inserer_modele_point_gis' => 'point unique enregistré', + 'label_inserer_modele_point_libre' => 'point unique libre', + 'label_inserer_modele_points' => 'Cacher les points', + 'label_inserer_modele_rubriques' => 'liés aux rubriques', + 'label_inserer_modele_sites' => 'liés aux sites', + 'label_inserer_modele_titre_carte' => 'Titre de la carte', + 'label_pays' => 'Pays', + 'label_rechercher_address' => 'Rechercher une adresse', + 'label_rechercher_point' => 'Rechercher un point', + 'label_region' => 'Région', + 'label_ville' => 'Ville', + 'lat' => 'Latitude', + 'libelle_logo_gis' => 'LOGO DU POINT', + 'lien_ajouter_gis' => 'Ajouter ce point', + 'lon' => 'Longitude', + + // T + 'telecharger_gis' => 'Télécharger au format @format@', + 'texte_ajouter_gis' => 'Ajouter un point géolocalisé', + 'texte_creer_associer_gis' => 'Créer et associer un point géolocalisé', + 'texte_creer_gis' => 'Créer un point géolocalisé', + 'texte_modifier_gis' => 'Modifier le point géolocalisé', + 'texte_voir_gis' => 'Voir le point géolocalisé', + 'titre_bloc_creer_point' => 'Lier un nouveau point', + 'titre_bloc_points_lies' => 'Points liés', + 'titre_bloc_rechercher_point' => 'Rechercher un point', + 'titre_nombre_utilisation' => 'Une utilisation', + 'titre_nombre_utilisations' => '@nb@ utilisations', + 'titre_nouveau_point' => 'Nouveau point', + 'titre_objet' => 'Titre', + + // Z + 'zoom' => 'Zoom' +); + +?> diff --git a/www/plugins/gis/lang/gis_ru.php b/www/plugins/gis/lang/gis_ru.php new file mode 100644 index 00000000..0a3c0960 --- /dev/null +++ b/www/plugins/gis/lang/gis_ru.php @@ -0,0 +1,156 @@ + 'Нет ни одной точки на карте', + 'aucun_objet' => 'Нет связанных объектов', + + // B + 'bouton_lier' => 'Связать точку', + 'bouton_supprimer_gis' => 'Удалить точку', + 'bouton_supprimer_lien' => 'Удалить связь', + + // C + 'cfg_descr_gis' => 'Географическая Информационная Система (GIS).
    Документация.', + 'cfg_inf_adresse' => 'Показываются дополнительные поля для ввода адреса (страна, город, область, адрес...)', + 'cfg_inf_bing' => 'Для использования карты Bing Aerial необходимо создать ключ на сайте Bing.', + 'cfg_inf_cloudmade' => 'Для использования карты необходимо создать ключ на сайте CloudMade.', + 'cfg_inf_geocoder' => 'Включить функцию геопоиска (поиск точки на карте по адресу).', + 'cfg_inf_geolocaliser_user_html5' => 'Новая карта центрируется по расположению пользователя ( если позволяет его браузер).', + 'cfg_inf_google' => 'Для работы с картой необходим API ключ, который можно создать на сайте GoogleMaps.', + 'cfg_inf_yandex' => 'Для работы с картой необходим API ключ. Получить на сайте Yandex.', + 'cfg_lbl_activer_objets' => 'Связывать карту с объектами:', + 'cfg_lbl_adresse' => 'Показать поля для адреса', + 'cfg_lbl_api' => 'Используемое API', + 'cfg_lbl_api_cloudmade' => 'CloudMade', + 'cfg_lbl_api_google' => 'Google Maps v2', + 'cfg_lbl_api_googlev3' => 'Google Maps v3', + 'cfg_lbl_api_key_bing' => 'API ключ Bing', + 'cfg_lbl_api_key_cloudmade' => 'API ключ CloudMade ', + 'cfg_lbl_api_key_google' => 'API ключ GoogleMaps', + 'cfg_lbl_api_key_yandex' => 'Yandex API ключ', + 'cfg_lbl_api_mapquest' => 'MapQuest', + 'cfg_lbl_api_microsoft' => 'Microsoft Bing', + 'cfg_lbl_api_openlayers' => 'OpenLayers', + 'cfg_lbl_api_ovi' => 'Ovi Nokia', + 'cfg_lbl_api_yandex' => 'Yandex', + 'cfg_lbl_geocoder' => 'Geocoder', + 'cfg_lbl_geolocaliser_user_html5' => 'Центрировать карту по месту расположения пользователя, создавшего карту', + 'cfg_lbl_layer_defaut' => 'Слой по умолчанию', + 'cfg_lbl_layers' => 'Предложенные слои', + 'cfg_lbl_maptype' => 'Тип карты', + 'cfg_lbl_maptype_carte' => 'Карта', + 'cfg_lbl_maptype_hybride' => 'Гибрид', + 'cfg_lbl_maptype_relief' => 'Рельеф', + 'cfg_lbl_maptype_satellite' => 'Спутник', + 'cfg_titre_gis' => 'GIS', + + // E + 'editer_gis_editer' => 'Изменить точку', + 'editer_gis_explication' => 'Список всех точек, используемых на вашем сайте.', + 'editer_gis_nouveau' => 'Создать точку', + 'editer_gis_titre' => 'Точки на карте', + 'erreur_recherche_pas_resultats' => 'Нет точек, соответствующих поисковому запросу.', + 'erreur_xmlrpc_lat_lon' => 'В качестве аргумента должна быть указанна долгота и широта', + 'explication_api_forcee' => 'На API накладывается другой плагин или шаблон.', + 'explication_import' => 'Импортировать GPX или KML файл.', + 'explication_layer_forcee' => 'На слой накладывается другой плагин или шаблон.', + 'explication_maptype_force' => 'На базовую карту накладывается другой плагин или шаблон.', + + // F + 'formulaire_creer_gis' => 'Создание новой точки :', + 'formulaire_modifier_gis' => 'Изменить точку :', + + // G + 'gis_pluriel' => 'Точки на карте', + 'gis_singulier' => 'Точка на карте', + + // I + 'icone_gis_tous' => 'Точки на карте', + 'info_1_gis' => 'Точка на карте', + 'info_1_objet_gis' => '1 материал связан с точкой', + 'info_aucun_gis' => 'Нет точек на карте', + 'info_aucun_objet_gis' => 'У точки нет связанных материалов', + 'info_geolocalisation' => 'Расположение (Geolocation)', + 'info_id_objet' => 'N°', + 'info_liste_gis' => 'Точки на карте', + 'info_nb_gis' => '@nb@ точек на карте', + 'info_nb_objets_gis' => '@nb@ объектов связано с точкой', + 'info_numero_gis' => 'ID точки', + 'info_objet' => 'Объект', + 'info_recherche_gis_zero' => 'Ничего не найдено по запросу « @cherche_gis@ ».', + 'info_supprimer_lien' => 'Убрать', + 'info_supprimer_liens' => 'Убрать все точки', + 'info_voir_fiche_objet' => 'Перейти на страницу', + + // L + 'label_adress' => 'Адрес', + 'label_code_postal' => 'Индекс', + 'label_import' => 'Импорт', + 'label_inserer_modele_articles' => 'связано со статьями', + 'label_inserer_modele_articles_sites' => 'связано с авторами и сайтами', + 'label_inserer_modele_auteurs' => 'связано с авторами', + 'label_inserer_modele_centrer_auto' => 'Без автоматического центрирования', + 'label_inserer_modele_centrer_fichier' => 'Не центрировать карту по KLM/GPX файлу.', + 'label_inserer_modele_controle' => 'Спрятать управление картой', + 'label_inserer_modele_controle_type' => 'Спрятать выбор типа карты', + 'label_inserer_modele_description' => 'Описание', + 'label_inserer_modele_documents' => 'связано с документами', + 'label_inserer_modele_echelle' => 'Масштаб', + 'label_inserer_modele_fullscreen' => 'Переход в полноэкранный режим', + 'label_inserer_modele_gpx' => 'GPX файл для наложения', + 'label_inserer_modele_hauteur_carte' => 'Высота карта', + 'label_inserer_modele_identifiant' => 'ID', + 'label_inserer_modele_identifiant_opt' => 'ID (не обязательно)', + 'label_inserer_modele_identifiant_placeholder' => 'id_gis', + 'label_inserer_modele_kml' => 'KML файл для наложения', + 'label_inserer_modele_kml_gpx' => 'id_document или url', + 'label_inserer_modele_largeur_carte' => 'Ширина карты', + 'label_inserer_modele_limite' => 'Максимальное количество точек', + 'label_inserer_modele_localiser_visiteur' => 'Центрировать по посетителю', + 'label_inserer_modele_mini_carte' => 'Мини карта', + 'label_inserer_modele_molette' => 'Отключить прокрутку колесиком мышки', + 'label_inserer_modele_mots' => 'связано с ключами', + 'label_inserer_modele_objets' => 'Виды точек', + 'label_inserer_modele_point_gis' => 'записана одиночная точка', + 'label_inserer_modele_point_libre' => 'свободная точка', + 'label_inserer_modele_points' => 'Спрятать точки', + 'label_inserer_modele_rubriques' => 'связано с разделами', + 'label_inserer_modele_sites' => 'связано с сайтами', + 'label_inserer_modele_titre_carte' => 'Название карты', + 'label_pays' => 'Страна', + 'label_rechercher_address' => 'Искать по адресу', + 'label_rechercher_point' => 'Найти точку', + 'label_region' => 'Область', + 'label_ville' => 'Город', + 'lat' => 'Широта', + 'libelle_logo_gis' => 'Лого точки', + 'lien_ajouter_gis' => 'Добавить точку', + 'lon' => 'Долгота', + + // T + 'telecharger_gis' => 'Скачать в @format@ формате', + 'texte_ajouter_gis' => 'Добавить точку на карте', + 'texte_creer_associer_gis' => 'Создать точку и связать ее', + 'texte_creer_gis' => 'Создать точку', + 'texte_modifier_gis' => 'Изменить точку', + 'texte_voir_gis' => 'Показать точку на карте', + 'titre_bloc_creer_point' => 'Новая точка на карте', + 'titre_bloc_points_lies' => 'Связанные точки', + 'titre_bloc_rechercher_point' => 'Найти существующую точку', + 'titre_nombre_utilisation' => 'Используется 1 раз', + 'titre_nombre_utilisations' => 'используется @nb@ раз', + 'titre_nouveau_point' => 'Новая точка', + 'titre_objet' => 'Название', + + // Z + 'zoom' => 'Zoom' +); + +?> diff --git a/www/plugins/gis/lang/gis_sk.php b/www/plugins/gis/lang/gis_sk.php new file mode 100644 index 00000000..c3b4b4cd --- /dev/null +++ b/www/plugins/gis/lang/gis_sk.php @@ -0,0 +1,156 @@ + 'Žiaden bod', + 'aucun_objet' => 'Žiaden objekt', + + // B + 'bouton_lier' => 'Prepojiť tento bod', + 'bouton_supprimer_gis' => 'Natrvalo odstrániť tento bod', + 'bouton_supprimer_lien' => 'Odstrániť tento odkaz', + + // C + 'cfg_descr_gis' => 'Geografický informačný systém.
    Prejsť na dokumentáciu.', + 'cfg_inf_adresse' => 'Zobrazí ďalšie polia adresy (krajinu, mesto, štát, adresu a pod.)', + 'cfg_inf_bing' => 'Vrstva Bing Aerial si vyžaduje, aby ste na stránke vyhľadávača Bing vytvorili kľúč.', + 'cfg_inf_cloudmade' => 'Táto aplikácia potrebuje kľúč na vytvorenie stránky v Cloude.', + 'cfg_inf_geocoder' => 'Aktivovať funkciu geokódera (vyhľadávanie z jednej adresy, zistenie adresy zo súradníc).', + 'cfg_inf_geolocaliser_user_html5' => 'Ak to povoľuje prehliadač používateľa, na určenie predvolenej polohy pri vytváraní nového bodu sa ukladá približná geografická poloha používateľa.', + 'cfg_inf_google' => 'Táto aplikácia potrebuje kľúč, ktorý si treba vytvoriť na stránke GoogleMaps.', + 'cfg_inf_yandex' => 'Táto aplikácia potrebuje kľúč na vytvorenie stránky v Yandexe.', + 'cfg_lbl_activer_objets' => 'Aktivovať geolokalizáciu obsahu:', + 'cfg_lbl_adresse' => 'Zobraziť polia adresy', + 'cfg_lbl_api' => 'Geolokačná API', + 'cfg_lbl_api_cloudmade' => 'CloudMade', + 'cfg_lbl_api_google' => 'Google Maps v2', + 'cfg_lbl_api_googlev3' => 'Google Maps v3', + 'cfg_lbl_api_key_bing' => 'Kľúč pre Bing', + 'cfg_lbl_api_key_cloudmade' => 'Kľúč CloudMade', + 'cfg_lbl_api_key_google' => 'Kľúč GoogleMaps', + 'cfg_lbl_api_key_yandex' => 'Kľúč Yandex', + 'cfg_lbl_api_mapquest' => 'MapQuest', + 'cfg_lbl_api_microsoft' => 'Microsoft Bing', + 'cfg_lbl_api_openlayers' => 'OpenLayers', + 'cfg_lbl_api_ovi' => 'Ovi Nokia', + 'cfg_lbl_api_yandex' => 'Yandex', + 'cfg_lbl_geocoder' => 'Geocoder', + 'cfg_lbl_geolocaliser_user_html5' => 'Pri vytváraní vycentrujte mapu na polohe používateľa', + 'cfg_lbl_layer_defaut' => 'Predvolená vrstva', + 'cfg_lbl_layers' => 'Navrhované vrstvy', + 'cfg_lbl_maptype' => 'Základná mapa', + 'cfg_lbl_maptype_carte' => 'Mapa', + 'cfg_lbl_maptype_hybride' => 'Zmiešaná', + 'cfg_lbl_maptype_relief' => 'Reliéf', + 'cfg_lbl_maptype_satellite' => 'Satelitná', + 'cfg_titre_gis' => 'GIS', + + // E + 'editer_gis_editer' => 'Upraviť tento bod', + 'editer_gis_explication' => 'Táto stránka uvádza všetky geolokalizované body na webe.', + 'editer_gis_nouveau' => 'Vytvoriť nový bod', + 'editer_gis_titre' => 'Geolokalizované body', + 'erreur_recherche_pas_resultats' => 'Vyhľadávania sa netýka žiaden bod.', + 'erreur_xmlrpc_lat_lon' => 'Zemepisná šírka a dĺžka musia byť odovzdané ako parameter', + 'explication_api_forcee' => 'Túto aplikáciu používa iný zásuvný modul alebo iná šablóna.', + 'explication_import' => 'Nahrá súbor vo formáte GPX alebo KML.', + 'explication_layer_forcee' => 'Vrstvu zaviedol iný zásuvný modul alebo iná šablóna.', + 'explication_maptype_force' => 'Základnú mapu si vyžaduje iný zásuvný modul alebo šablóna.', + + // F + 'formulaire_creer_gis' => 'Vytvoriť geolokalizovaný bod:', + 'formulaire_modifier_gis' => 'Upraviť geolokalizovaný bod:', + + // G + 'gis_pluriel' => 'Geolokalizované body', + 'gis_singulier' => 'Geolokalizovaný bod', + + // I + 'icone_gis_tous' => 'Geolokalizované body', + 'info_1_gis' => 'Jeden geolokalizovaný bod', + 'info_1_objet_gis' => '1 objekt prepojený s týmto bodom', + 'info_aucun_gis' => 'Žiaden geolokalizovaný bod', + 'info_aucun_objet_gis' => 'Žiaden objekt prepojený s týmto bodom', + 'info_geolocalisation' => 'Geolokalizácia', + 'info_id_objet' => 'Č.', + 'info_liste_gis' => 'Geolokalizované body', + 'info_nb_gis' => '@nb@ geolokalizovaných bodov', + 'info_nb_objets_gis' => '@nb@ objektov prepojených s týmto bodom', + 'info_numero_gis' => 'Bod číslo', + 'info_objet' => 'Objekt', + 'info_recherche_gis_zero' => 'Žiadne výsledky pre "@cherche_gis@".', + 'info_supprimer_lien' => 'Zrušiť prepojenie', + 'info_supprimer_liens' => 'Zrušiť všetky body', + 'info_voir_fiche_objet' => 'Prejsť na stránku', + + // L + 'label_adress' => 'Adresa', + 'label_code_postal' => 'PSČ', + 'label_import' => 'Nahrať', + 'label_inserer_modele_articles' => 'liés aux articles', # NEW + 'label_inserer_modele_articles_sites' => 'liés aux articles + sites', # NEW + 'label_inserer_modele_auteurs' => 'liés aux auteurs', # NEW + 'label_inserer_modele_centrer_auto' => 'Pas de centrage auto', # NEW + 'label_inserer_modele_centrer_fichier' => 'Ne pas centrer la carte sur les fichiers KLM/GPX', # NEW + 'label_inserer_modele_controle' => 'Cacher les contrôles', # NEW + 'label_inserer_modele_controle_type' => 'Cacher les types', # NEW + 'label_inserer_modele_description' => 'Description', # NEW + 'label_inserer_modele_documents' => 'liés aux documents', # NEW + 'label_inserer_modele_echelle' => 'Echelle', # NEW + 'label_inserer_modele_fullscreen' => 'Bouton plein écran', # NEW + 'label_inserer_modele_gpx' => 'Fichier GPX à superposer', # NEW + 'label_inserer_modele_hauteur_carte' => 'Hauteur de la carte', # NEW + 'label_inserer_modele_identifiant' => 'Identifiant', # NEW + 'label_inserer_modele_identifiant_opt' => 'Identifiant (optionnel)', # NEW + 'label_inserer_modele_identifiant_placeholder' => 'id_gis', # NEW + 'label_inserer_modele_kml' => 'Fichier KML à superposer', # NEW + 'label_inserer_modele_kml_gpx' => 'id_document ou url', # NEW + 'label_inserer_modele_largeur_carte' => 'Largeur de la carte', # NEW + 'label_inserer_modele_limite' => 'Nombre de points maximum', # NEW + 'label_inserer_modele_localiser_visiteur' => 'Centrer sur le visiteur', # NEW + 'label_inserer_modele_mini_carte' => 'Mini carte de situation', # NEW + 'label_inserer_modele_molette' => 'Désactiver la molette', # NEW + 'label_inserer_modele_mots' => 'liés aux mots', # NEW + 'label_inserer_modele_objets' => 'Type de point(s)', # NEW + 'label_inserer_modele_point_gis' => 'point unique enregistré', # NEW + 'label_inserer_modele_point_libre' => 'point unique libre', # NEW + 'label_inserer_modele_points' => 'Cacher les points', # NEW + 'label_inserer_modele_rubriques' => 'liés aux rubriques', # NEW + 'label_inserer_modele_sites' => 'liés aux sites', # NEW + 'label_inserer_modele_titre_carte' => 'Titre de la carte', # NEW + 'label_pays' => 'Krajina', + 'label_rechercher_address' => 'Vyhľadať adresu', + 'label_rechercher_point' => 'Vyhľadať bod', + 'label_region' => 'Región (kraj)', + 'label_ville' => 'Mesto', + 'lat' => 'Zemepisná šírka', + 'libelle_logo_gis' => 'LOGO BODU', + 'lien_ajouter_gis' => 'Pridať tento bod', + 'lon' => 'Zemepisná dĺžka', + + // T + 'telecharger_gis' => 'Stiahnuť vo formáte @format@', + 'texte_ajouter_gis' => 'Pridať geolokalizovaný bod', + 'texte_creer_associer_gis' => 'Vytvoriť a prepojiť geolokalizovaný bod', + 'texte_creer_gis' => 'Vytvoriť geolokalizovaný bod', + 'texte_modifier_gis' => 'Upraviť geolokalizovaný bod', + 'texte_voir_gis' => 'Zobraziť geolokalizovaný bod', + 'titre_bloc_creer_point' => 'Prepojiť nový bod', + 'titre_bloc_points_lies' => 'Prepojené body', + 'titre_bloc_rechercher_point' => 'Vyhľadať bod', + 'titre_nombre_utilisation' => 'Jedno použitie', + 'titre_nombre_utilisations' => '@nb@ použití', + 'titre_nouveau_point' => 'Nový bod', + 'titre_objet' => 'Názov', + + // Z + 'zoom' => 'Lupa' +); + +?> diff --git a/www/plugins/gis/lang/paquet-gis.xml b/www/plugins/gis/lang/paquet-gis.xml new file mode 100644 index 00000000..10e313f0 --- /dev/null +++ b/www/plugins/gis/lang/paquet-gis.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/www/plugins/gis/lang/paquet-gis_en.php b/www/plugins/gis/lang/paquet-gis_en.php new file mode 100644 index 00000000..9a870534 --- /dev/null +++ b/www/plugins/gis/lang/paquet-gis_en.php @@ -0,0 +1,15 @@ + 'This plugin allows you to create location-based points that can be attached to SPIP objects to display them on maps in the pages of your site. They can use the tiles from different maps vendors through the Leaflet library.', + 'gis_slogan' => 'Geographic Information System' +); + +?> diff --git a/www/plugins/gis/lang/paquet-gis_es.php b/www/plugins/gis/lang/paquet-gis_es.php new file mode 100644 index 00000000..c433e2f9 --- /dev/null +++ b/www/plugins/gis/lang/paquet-gis_es.php @@ -0,0 +1,15 @@ + 'Este plugin permite crear puntos geolocalizados que pueden adjuntarse a los objetos de SPIP a fin de mostrarlos en los mapas de las páginas de su sitio web. Éstos útlimos pueden utilizar las tejas de diferentes proveedores gracias a la librería Leaflet. ', + 'gis_slogan' => 'Sistema de información geográfica' +); + +?> diff --git a/www/plugins/gis/lang/paquet-gis_fr.php b/www/plugins/gis/lang/paquet-gis_fr.php new file mode 100644 index 00000000..8440ef54 --- /dev/null +++ b/www/plugins/gis/lang/paquet-gis_fr.php @@ -0,0 +1,13 @@ + 'Ce plugin permet de créer des points géolocalisés qui peuvent être attachés aux objets de SPIP afin de les afficher sur des cartes dans les pages de votre site. Ces dernières peuvent utiliser les tuiles de différents fournisseurs grâce à la librairie Leaflet.', + 'gis_slogan' => 'Système d\'information géographique' +); + +?> diff --git a/www/plugins/gis/lang/paquet-gis_ru.php b/www/plugins/gis/lang/paquet-gis_ru.php new file mode 100644 index 00000000..5a85d3b0 --- /dev/null +++ b/www/plugins/gis/lang/paquet-gis_ru.php @@ -0,0 +1,15 @@ + 'Плагин GIS позволяет создавать элементы на карте и привязвать их к существующим объектам SPIP. Вы можете использовать созданные карты на страницах своего сайта. Могут использовать разные карты, доступ к которым обеспечивается при помощи библиотеки Leaflet.', + 'gis_slogan' => 'Географическая Информационная Система (GIS)' +); + +?> diff --git a/www/plugins/gis/lang/paquet-gis_sk.php b/www/plugins/gis/lang/paquet-gis_sk.php new file mode 100644 index 00000000..50cfd090 --- /dev/null +++ b/www/plugins/gis/lang/paquet-gis_sk.php @@ -0,0 +1,15 @@ + 'Tento zásuvný modul umožňuje vytvárať zemepisné body, ktoré môžete pripojiť k objektom SPIPu, aby sa dali zobraziť na mapách na stránkach vášho webu. Vďaka knižnici Leaflet môžete používať rozhranie od rôznych výrobcov.', + 'gis_slogan' => 'Geografický informačný systém' +); + +?> diff --git a/www/plugins/gis/modeles/carte_gis.html b/www/plugins/gis/modeles/carte_gis.html new file mode 100644 index 00000000..a9cc0863 --- /dev/null +++ b/www/plugins/gis/modeles/carte_gis.html @@ -0,0 +1,131 @@ +[(#REM) + +Modele carte_gis +---------------- + +Parametres possibles : + +- id_map|id_carte_gis = 1 id de la carte +- lat|latit|latitude = 48.3 latitude du centre de la carte +- lon|lonxit|longitude = -4.7 longitude du centre de la carte +- zoom = 5 zoom de la carte +- maxZoom = 13 zoom maximum autorisé + +- sw_lat = lat - 10° latitude du sud-ouest de la bounding box +- sw_lon = lon - 10° longitude du sud-ouest de la bounding box +- ne_lat = lat + 10° latitude du nord-est de la bounding box +- ne_lon = lon + 10° longitude du nord-est de la bounding box + +- width|largeur = 100% largeur de la carte, 100% par defaut +- height|hauteur = 400px hauteur de la carte, 400px par defaut +- style = non ne pas styler la carte + +- fullscreen = oui afficher un bouton pour passer la carte en plein écran +- zoom_molette|zoom_wheel = non désactiver le zoom avec la molette de la souris, actif par defaut +- control_type|controle_type = non ne pas afficher les controles de changement de type +- no_control|aucun_controle = oui ne pas afficher les controles de la carte +- scale = oui afficher l'échelle de la carte +- overview = oui afficher une mini carte de situation + +- autocenterandzoom|centrer_auto = oui centrer et zoomer la carte automatiquement pour afficher tous les marqueurs +- localize_visitor|localiser_visiteur = oui centrer la carte sur la position du visiteur (API geolocation HTML5) +- id_a_ouvrir id_gis de l'infobulle à afficher au chargement(marqueur uniquement) + +- objets = gis type d'objets à afficher (fichier json/gis_xx qui génère la source de donnees) +- limit|limite = 500 nombre max de marqueurs à afficher, 500 par defaut +- kml = 12 kml à superposer à la carte (id_document ou url ou liste d'url) +- gpx = 12 gpx à superposer à la carte (id_document ou url ou liste d'url) +- centrer_fichier = non permet de ne pas centrer la carte automatiquement sur les fichiers kml/gpx surperposés +- point = non si elle vaut "non" cette option n'affichera pas de points du tout (utile pour n'afficher qu'un kml par exemple) + +- media = non permet de passer le critère 'media' (pour les documents) +- mots = #LISTE{1,4,7} plugin critere {mots} http://contrib.spip.net/Critere-mots +- path_styles=#ARRAY{color,#fff} options de style des éléments de la couche GeoJSON (voir http://leafletjs.com/reference.html#path-options) + +Uniquement si objets = point_libre : +- icone = chemin/vers/image image utilisée pour le marker +- titre titre du point +- description description du point + +Clustering (regroupement de points proches) : +- cluster = oui Active le clustering +- clusterMaxZoom = 11 Regroupe les points jusque à ce zoom, mais pas au delà +- clusterShowCoverageOnHover = 0 1 pour afficher un dessin au survol de la zone couvertes par les points regroupés +] + +[(#SET{width,#ENV{width,#ENV{largeur,100%}}})] +[(#SET{height,#ENV{height,#ENV{hauteur,400px}}})] +[(#SET{id,#ENV{id_carte_gis,#ENV{id_map,#ENV{id,1}}}})] +[(#REM) -- compat gis v1 -- ] +[(#SET{lat,#ENV{lat,#ENV{latit,#ENV{latitude,#CONFIG{gis/lat,0}}}}})] +[(#SET{lon,#ENV{lon,#ENV{lonxit,#ENV{longitude,#CONFIG{gis/lon,0}}}}})] +[(#REM) On utilise la bounding box seulement si le centre n'a pas été donné et si les quatre valeurs de la bounding box sont renseignées + les valeurs par defaut sont "centre +/- 10°", ce qui est naze, mais c'est un cas normalement impossible +] +[(#ENV{lat}|ou{#ENV{lon}}|non|et{#ENV{sw_lat}}|et{#ENV{sw_lon}}|et{#ENV{ne_lat}}|et{#ENV{ne_lon}}) + #SET{utiliser_bb, oui} + #SET{sw_lat,#ENV{sw_lat,#GET{lat}|moins{10}}} + #SET{sw_lon,#ENV{sw_lon,#GET{lon}|moins{10}}} + #SET{ne_lat,#ENV{ne_lat,#GET{lat}|plus{10}}} + #SET{ne_lon,#ENV{ne_lon,#GET{lon}|plus{10}}} +] + +

    + + diff --git a/www/plugins/gis/modeles/carte_gis.yaml b/www/plugins/gis/modeles/carte_gis.yaml new file mode 100644 index 00000000..7ccf0338 --- /dev/null +++ b/www/plugins/gis/modeles/carte_gis.yaml @@ -0,0 +1,278 @@ +nom: <:gis:info_1_gis:> +logo: 'prive/themes/spip/images/gis-24.png' +icone_barre: 'gis.png' +traiter: 'gis_inserer_modeles_traiter' +parametres: + - + saisie: 'hidden' + options: + nom: 'modele' + defaut: 'carte_gis' + - + saisie: 'selection' + options: + nom: 'objets' + label: <:gis:label_inserer_modele_objets:> + defaut: 'point_libre' #pas pris en compte ? + cacher_option_intro: 'oui' + datas: + '': <:gis:label_inserer_modele_point_gis:> + point_libre: <:gis:label_inserer_modele_point_libre:> + articles: <:gis:label_inserer_modele_articles:> + sites: <:gis:label_inserer_modele_sites:> + articles_plus_sites: <:gis:label_inserer_modele_articles_sites:> + rubriques: <:gis:label_inserer_modele_rubriques:> + documents: <:gis:label_inserer_modele_documents:> + mots: <:gis:label_inserer_modele_mots:> + auteurs: <:gis:label_inserer_modele_auteurs:> + # IDENTIFIANTS + - + saisie: 'input' + options: + nom: 'id_gis' + label: <:gis:label_inserer_modele_identifiant:> + placeholder: <:gis:label_inserer_modele_identifiant_placeholder:> + afficher_si: '@objets@ == ""' + - + saisie: 'input' + options: + nom: 'id_article' + label: <:gis:label_inserer_modele_identifiant_opt:> + placeholder: 'id_article' + afficher_si: '@objets@ == "articles" || @objets@ == "articles_plus_sites"' + - + saisie: 'input' + options: + nom: 'id_rubrique' + label: <:gis:label_inserer_modele_identifiant_opt:> + placeholder: 'id_rubrique' + afficher_si: '@objets@ == "rubriques"' + - + saisie: 'input' + options: + nom: 'id_document' + label: <:gis:label_inserer_modele_identifiant_opt:> + placeholder: 'id_document' + afficher_si: '@objets@ == "documents"' + - + saisie: 'input' + options: + nom: 'id_mot' + label: <:gis:label_inserer_modele_identifiant_opt:> + placeholder: 'id_mot' + afficher_si: '@objets@ == "mots"' + - + saisie: 'input' + options: + nom: 'id_site' + label: <:gis:label_inserer_modele_identifiant_opt:> + placeholder: 'id_site' + afficher_si: '@objets@ == "sites"' + - + saisie: 'input' + options: + nom: 'id_auteur' + label: <:gis:label_inserer_modele_identifiant_opt:> + placeholder: 'id_auteur' + afficher_si: '@objets@ == "auteurs"' +# +# === POINT LIBRE === +# + - + saisie: 'fieldset' + options: + nom: 'field_point_libre' + afficher_si: '@objets@ == "point_libre"' + saisies: + - + saisie: 'carte' + options: + nom: 'carte' + hauteur: '200px' + - + saisie: 'input' + options: + nom: 'titre' + label: <:gis:titre_objet:> + - + saisie: 'textarea' + options: + nom: 'description' + label: <:gis:label_inserer_modele_description:> + rows: '2' + - + saisie: 'hidden' + options: + nom: 'lat' + - + saisie: 'hidden' + options: + nom: 'lon' + - + saisie: 'hidden' + options: + nom: 'zoom' + - + saisie: 'input' + options: + nom: 'adresse' + placeholder: <:gis:label_adress:> + readonly: 'oui' + - + saisie: 'input' + options: + nom: 'code_postal' + placeholder: <:gis:label_code_postal:> + readonly: 'oui' + - + saisie: 'input' + options: + nom: 'ville' + placeholder: <:gis:label_ville:> + readonly: 'oui' + - + saisie: 'input' + options: + nom: 'pays' + placeholder: <:gis:label_pays:> + readonly: 'oui' +# +# === OPTIONS === +# + - + saisie: 'fieldset' + options: + nom: 'field_options' + pliable: 'oui' + plie: 'oui' + label: 'options' + saisies: + - + saisie: 'input' + options: + nom: 'titre_carte' + label: <:gis:label_inserer_modele_titre_carte:> + - + saisie: 'input' + options: + nom: 'largeur' + label: <:gis:label_inserer_modele_largeur_carte:> + placeholder: '100%' + - + saisie: 'input' + options: + nom: 'hauteur' + label: <:gis:label_inserer_modele_hauteur_carte:> + placeholder: '400px' +# - +# saisie: 'case' +# options: +# nom: 'style' +# label_case: 'ne pas styler la carte' +# defaut: '' +# valeur_oui: 'non' +# valeur_non: '' + - + saisie: 'input' + options: + nom: 'limit' + label: <:gis:label_inserer_modele_limite:> + afficher_si: '@objets@ != "gis" || @objets@ != "point_unique"' + placeholder: '500' + - + saisie: 'case' + options: + nom: 'scale' + label_case: <:gis:label_inserer_modele_echelle:> + defaut: '' + valeur_oui: 'oui' + valeur_non: '' + - + saisie: 'case' + options: + nom: 'fullscreen' + label_case: <:gis:label_inserer_modele_fullscreen:> + defaut: '' + valeur_oui: 'oui' + valeur_non: '' + - + saisie: 'case' + options: + nom: 'overview' + label_case: <:gis:label_inserer_modele_mini_carte:> + defaut: '' + valeur_oui: 'oui' + valeur_non: '' + - + saisie: 'case' + options: + nom: 'zoom_molette' + label_case: <:gis:label_inserer_modele_molette:> + defaut: '' + valeur_oui: 'non' + valeur_non: '' + - + saisie: 'case' + options: + nom: 'aucun_controle' + label_case: <:gis:label_inserer_modele_controle:> + defaut: '' + valeur_oui: 'oui' + valeur_non: '' + - + saisie: 'case' + options: + nom: 'controle_type' + label_case: <:gis:label_inserer_modele_controle_type:> + defaut: '' + valeur_oui: 'non' + valeur_non: '' + - + saisie: 'case' + options: + nom: 'localize_visitor' + label_case: <:gis:label_inserer_modele_localiser_visiteur:> + defaut: '' + valeur_oui: 'oui' + valeur_non: '' + - + saisie: 'case' + options: + nom: 'centrer_auto' + label_case: <:gis:label_inserer_modele_centrer_auto:> + defaut: 'oui' + valeur_oui: '' + valeur_non: 'oui' + afficher_si: '@objets@ != "gis" || @objets@ != "point_unique"' + - + saisie: 'input' + options: + nom: 'kml' + label: <:gis:label_inserer_modele_kml:> + placeholder: <:gis:label_inserer_modele_kml_gpx:> + afficher_si: '@objets@ != "gis" || @objets@ != "point_unique"' + - + saisie: 'input' + options: + nom: 'gpx' + label: <:gis:label_inserer_modele_gpx:> + placeholder: <:gis:label_inserer_modele_kml_gpx:> + afficher_si: '@objets@ != "gis" || @objets@ != "point_unique"' + - + saisie: 'case' + options: + nom: 'centrer_fichier' + label_case: <:gis:label_inserer_modele_centrer_fichier:> + valeur_oui: 'oui' + valeur_non: '' + afficher_si: '@objets@ != "gis" || @objets@ != "point_unique"' + - + saisie: 'case' + options: + nom: 'point' + label_case: <:gis:label_inserer_modele_points:> + #explication: "Utile pour n'afficher que les données kml/gpx" + defaut: '' + valeur_oui: 'non' + valeur_non: '' + afficher_si: '@objets@ != "gis" || @objets@ != "point_unique"' diff --git a/www/plugins/gis/modeles/carte_gis_preview.html b/www/plugins/gis/modeles/carte_gis_preview.html new file mode 100755 index 00000000..dac6e205 --- /dev/null +++ b/www/plugins/gis/modeles/carte_gis_preview.html @@ -0,0 +1,112 @@ + +
    + + + diff --git a/www/plugins/gis/paquet.xml b/www/plugins/gis/paquet.xml new file mode 100644 index 00000000..620ffd54 --- /dev/null +++ b/www/plugins/gis/paquet.xml @@ -0,0 +1,89 @@ + + + GIS + + + b_b + kent1 + Les Développements Durables + Leaflet + Leaflet plugins + Leaflet providers + Leaflet fullscreen + Leaflet minimap + 2011-2013 + GPL v3 + Icône de mattrich sous licence CC BY-NC-SA + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/www/plugins/gis/prive/contenu/gis_objet.html b/www/plugins/gis/prive/contenu/gis_objet.html new file mode 100644 index 00000000..74dbd338 --- /dev/null +++ b/www/plugins/gis/prive/contenu/gis_objet.html @@ -0,0 +1,6 @@ +[(#SET{titre, #VAL{gis:info_geolocalisation}|_T})] +[(#BOITE_OUVRIR{#CHEMIN_IMAGE{gis-24.png}|balise_img{'',cadre-icone}|concat{#GET{titre}}, 'simple'})] +
    + [(#INCLURE{fond=prive/inclure/gis_objet_formulaires,env,ajax})] +
    +#BOITE_FERMER \ No newline at end of file diff --git a/www/plugins/gis/prive/inclure/gis_objet_formulaires.html b/www/plugins/gis/prive/inclure/gis_objet_formulaires.html new file mode 100644 index 00000000..dc6ab9b8 --- /dev/null +++ b/www/plugins/gis/prive/inclure/gis_objet_formulaires.html @@ -0,0 +1,41 @@ +
    + +#SET{gis_defaut,nouveau} +#SET{gis_defaut,glop} + + +#SET{bloc_gis, #ENV{bloc_gis,#GET{gis_defaut}|=={nouveau}|?{editer,lier}}} + + + +[(#GET{bloc_gis}|=={editer}|oui) + #FORMULAIRE_EDITER_GIS{#ENV{id_gis,#GET{gis_defaut}},#ENV{objet},#ENV{id_objet},#SELF,'non',#ENV{options_formulaire_editer_gis}} +] + +[(#GET{bloc_gis}|=={lier}|oui) + [(#INCLURE{fond=prive/objets/liste/gis_lies,sinon=<:gis:aucun_gis:>,env})] +] + + [(#GET{bloc_gis}|=={rechercher}|oui) +
    + #FORMULAIRE_RECHERCHER_GIS{#ENV{objet},#ENV{id_objet},#SELF|parametre_url{bloc_gis,lier}} +
    ] +
    diff --git a/www/plugins/gis/prive/objets/contenu/gis.html b/www/plugins/gis/prive/objets/contenu/gis.html new file mode 100644 index 00000000..5fcdb969 --- /dev/null +++ b/www/plugins/gis/prive/objets/contenu/gis.html @@ -0,0 +1,20 @@ + +
    + #DESCRIPTIF +
    +
    + #ADRESSE +
    +
    + #REGION +
    +
    + #CODE_POSTAL +
    +
    + #VILLE +
    +
    + #PAYS [((#CODE_PAYS))] +
    + diff --git a/www/plugins/gis/prive/objets/infos/gis.html b/www/plugins/gis/prive/objets/infos/gis.html new file mode 100644 index 00000000..0a1a9826 --- /dev/null +++ b/www/plugins/gis/prive/objets/infos/gis.html @@ -0,0 +1,18 @@ + + +
    +
    <:gis:info_numero_gis:>

    #ID_GIS

    + + #INCLURE{fond=prive/objets/liste/objets_gis_simple, id_gis=#ID_GIS, env} + + [(#AUTORISER{supprimer,gis,#ID_GIS}|oui) + [(#URL_ACTION_AUTEUR{ + supprimer_gis, + #ID_GIS, + #URL_ECRIRE{gis_tous} + }|icone_horizontale{<:gis:bouton_supprimer_gis:>,gis-24,del} + )] + ] + +
    + diff --git a/www/plugins/gis/prive/objets/liste/gis.html b/www/plugins/gis/prive/objets/liste/gis.html new file mode 100644 index 00000000..a4f6e6c5 --- /dev/null +++ b/www/plugins/gis/prive/objets/liste/gis.html @@ -0,0 +1,40 @@ +[(#SET{defaut_tri,#ARRAY{ + multi titre,1, + multi pays,1, + multi ville,1, + id_gis,1, + points,-1 +}}) +] + +#ANCRE_PAGINATION +
    +
     
    [(#NOM_SITE_SPIP|textebrut)]
      diff --git a/www/plugins/facteur/emails/test_email_html.html b/www/plugins/facteur/emails/test_email_html.html new file mode 100755 index 00000000..481b417b --- /dev/null +++ b/www/plugins/facteur/emails/test_email_html.html @@ -0,0 +1,28 @@ +#HTTP_HEADER{Content-Type:text/html} +#INCLURE{fond=emails/inc-haut} + +

    <:facteur:corps_email_de_test:>

    + +

    <:facteur:version_html:>

    + + + [(#TEXTE|image_reduire{550,0})] +
    + [(#NOTES|image_reduire{550,0})] + + + [(#TEXTE|image_reduire{550,0})] +
    + [(#NOTES|image_reduire{550,0})] + + + + + [(#MODELE{img}|image_reduire{550,0})] + + + + [(#MODELE{doc}|image_reduire{550,0})] + + +#INCLURE{fond=emails/inc-bas} \ No newline at end of file diff --git a/www/plugins/facteur/emails/test_email_texte.html b/www/plugins/facteur/emails/test_email_texte.html new file mode 100755 index 00000000..e8953af1 --- /dev/null +++ b/www/plugins/facteur/emails/test_email_texte.html @@ -0,0 +1,12 @@ +<:facteur:corps_email_de_test:> +-------------------------------- + +<:facteur:version_texte:> + + + [(#TEXTE|textebrut)] + + + [(#TEXTE|textebrut)] + + diff --git a/www/plugins/facteur/emails/texte.html b/www/plugins/facteur/emails/texte.html new file mode 100644 index 00000000..cb7fccf4 --- /dev/null +++ b/www/plugins/facteur/emails/texte.html @@ -0,0 +1,111 @@ + + + + + [(#ENV*{sujet})] + + + + +
    + [
    (#ENV{intro,''})
    ] + + + + +
    + + + + + + + + +
    #NOM_SITE_SPIP
    + + + + + +
    + + + + + + + + + +
    +
    + [(#ENV*{html,#ENV*{texte}|replace{'<','<'}|facteur_nl2br_si_pas_autobr|propre|replace{'
    \s*
    (\s*
    )+?','

    '}|concat{'

    '}})] +
    +
    +
    +
    + — Envoyé par #NOM_SITE_SPIP +
    +
    + +
    + +
    +
    +
    +
    + + diff --git a/www/plugins/facteur/erreurs et exceptions.txt b/www/plugins/facteur/erreurs et exceptions.txt new file mode 100644 index 00000000..192c8a29 --- /dev/null +++ b/www/plugins/facteur/erreurs et exceptions.txt @@ -0,0 +1,42 @@ +Avril 2012 +Yffic + +Petit point sur la gestion des erreurs et les exceptions de phpMailer 5. "Parce que c'est pénible de ne pas savoir pourquoi ça ne marche pas" + +Constat : +- Les problèmes de connexion smtp ne sont pas affichées dans l'interface privée de SPIP après un test d'envoi via la page de config de Facteur. On a juste le message "Erreur: consultez le fichier log pour plus de détails" dans un cadre rouge. + +- Dans formulaires/configurer_facteur.php, facteur_envoyer_mail_test() renvoie true/false. Donc on n'a pas accès aux messages d'erreurs de phpMailer dans l'espace privé. + +- La gestion des exceptions via la classe phpmailerException n'est pas activée par défaut dans phpMailer (Cf le constructeur). Elle sert surtout à faire remonter les messages d'erreur. + +- Après avoir activé la gestion des exceptions et le mode debug de la classe smtp (qui ne fait que des echo), on peut remarquer que les messages d'erreurs affichés par les exceptions dans phpMailer ne reprennent pas les vraies causes d'erreurs relevées dans la classe smtp. Si par exemple, on n'active pas ssl dans php, le debug "echo" affiche "SMTP -> ERROR: Failed to connect to server: Unable to find the socket transport "ssl" - did you forget to enable it when you configured PHP?", mais l'exception se contente d'un "SMTP Error: Could not connect to SMTP host" dans le fichier log. C'est quand même dommage de ne pas avoir accès au premier message d'erreur. + +- Voir aussi : +http://code.google.com/a/apache-extras.org/p/phpmailer/issues/detail?id=50 +http://code.google.com/a/apache-extras.org/p/phpmailer/issues/detail?id=5 + +En attendant une éventuelle amélioration de phpMailer, on peut : + +- Upgrader phpMailer 5.2.1. J'ai testé, ca ne change rien au niveau de la gestion des messages d'erreur, mais ça corrige d'autres trucs. +05/04/12 : Un cas foireux avec la version 5.2.1 : Si comme hôte on met un serveur ssl (ssl0.ovh.net), mais qu'on ne coche pas ssl au dessous, lors d'un test d'envoi, la roue Ajax tourne en rond indéfiniment... Pas de retour, aucune trace meme avec de simples echo... Je pense que ca tourne en rond au niveau de la fonction feof de get_lines. Cf les Notes de http://php.net/manual/fr/function.feof.php... Il n'est pas donc pas si urgent d'upgrader... + +- Redéfinir dans la classe Facteur, les fonctions Send, AddAttachment, AddReplyTo, AddBCC, AddCC, de la classe PhpMailer de cette façon : +public function Send() { + ob_start(); + parent::Send(); + $error = ob_get_contents(); + ob_end_clean(); + if( !empty($error) ) { + spip_log("Erreur Facteur->Send : $error",'facteur.err'); + } +} +Avec une constante pour activer ce mode et rajouter au début du constructeur de Facteur : +if (defined('_FACTEUR_DEBUG_SMTP')) { + $this->SMTPDebug = _FACTEUR_DEBUG_SMTP ; +} +Ajouter la ligne qui suit dans mes_options.php permet donc de retrouver les erreurs dans le fichier facteur.err.log. +define('_FACTEUR_DEBUG_SMTP','5'); // Le niveau peut varier de 1 à 5, 5 affichant tout le dialogue lors de la connexion smtp avec le serveur + + + diff --git a/www/plugins/facteur/facteur_administrations.php b/www/plugins/facteur/facteur_administrations.php new file mode 100755 index 00000000..1b0467af --- /dev/null +++ b/www/plugins/facteur/facteur_administrations.php @@ -0,0 +1,83 @@ + diff --git a/www/plugins/facteur/facteur_fonctions.php b/www/plugins/facteur/facteur_fonctions.php new file mode 100755 index 00000000..3abf19a9 --- /dev/null +++ b/www/plugins/facteur/facteur_fonctions.php @@ -0,0 +1,289 @@ + + * le corps est entre + * une eventuelle intro peut etre fournie entre + * + * @param string $texte_ou_html + * @return string + */ +function facteur_email_wrap_to_html($texte_ou_html){ + $texte_ou_html = trim($texte_ou_html); + // attention : si pas de contenu on renvoi du vide aussi (mail vide = mail vide) + if (!strlen(trim($texte_ou_html))) + return $texte_ou_html; + + $contexte = array("sujet"=>"","texte"=>"","intro"=>""); + + // tester si le mail est en html (simplifie) + if (substr($texte_ou_html,0,1)=="<" + AND substr($texte_ou_html,-1,1)==">" + AND stripos($texte_ou_html,"")!==false){ + + // dans ce cas on ruse un peu : extraire le sujet du title + $sujet = ""; + if (preg_match(",(.*),Uims",$texte_ou_html,$m)){ + $contexte['sujet'] = $m[1]; + $texte_ou_html = preg_replace(",(.*),Uims","",$texte_ou_html,1); + $texte_ou_html = trim($texte_ou_html); + } + if (preg_match(",(.*),Uims",$texte_ou_html,$m)){ + $contexte['intro'] = $m[1]; + $texte_ou_html = preg_replace(",(.*),Uims","",$texte_ou_html,1); + $texte_ou_html = trim($texte_ou_html); + } + $contexte['html'] = preg_replace(",,ims","",$texte_ou_html); + } + else { + // la premiere ligne est toujours le sujet + $texte_ou_html = explode("\n",$texte_ou_html); + $contexte['sujet'] = trim(array_shift($texte_ou_html)); + $contexte['texte'] = trim(implode("\n",$texte_ou_html)); + } + + // attention : si pas de contenu on renvoi du vide aussi (mail vide = mail vide) + if (!strlen(trim(implode("",$contexte)))) + return ""; + + return recuperer_fond("emails/texte",$contexte); +} + + /* + + Written by Eric Dols - edols@auditavenue.com + + You may freely use or modify this, provided + you leave credits to the original coder. + Feedback about (un)successfull uses, bugs and improvements done + are much appreciated, but don't expect actual support. + + PURPOSE OF THIS FUNCTION + It is designed to process html emails relying + on a css stylesheet placed in the for layout in + order to enhance compatibility with email clients, + including webmail services. + Provided you use minimal css, you can keep styling separate + from the content in your email template, and let this function + "inject" those styles inline in your email html tags on-the-fly, + just before sending. + Technically, it grabs the style declarations found in the + section and inserts each declaration inline, + inside the corresponding html tags in the email message. + + Supports both HTML and XHTML markup seamlessly. Thus + tolerant to email message writers using non-xhtml tag, + even when template is xhtml compliant (e.g. they would + add instead of a xhtml compliant ). + + NEW 10 dec. 2003: + - code revised, including a few regexp bugs fixed. + - multiple class for a tag are now allowed

    + - all unsupported css styles are now moved to the body section (not just a:hover etc...) + + USE + Add this function to a function library include, like "inline.inc" + and include it near the beginning of your php page: + require ("inline.inc"); + + load the html source of message into a variable + like $html_source and process it using: + $html_source = sheet2inline($html_source) + + + STYLE DEFINITIONS SUPPORTED + TAG { ... } + TAG1, TAG2, ... { ... } + TAG.class { ... } + .class { ...) + TAG:pseudo { ... } + + + CSS definitions may be freely formatted (spaces, tabs, linefeeds...), + they are converted to oneliners before inserting them inline in the html tags. + + .class definitions are processed AFTER tag definitions, + thus appended inline after any existing tag styling to + preserve the normal css priority behavior. + + Existing style="..." attributes in tags are NOT stripped. However they MUST + be with double quotes. If not, an addtional style="..." attribute will be added + + + KNOWN LIMITATIONS + - style info should be placed in section. I believe + it shouldnt be too hard to modify to point to an external + stylesheet instead. + - no support (yet?): + * chains like P UL LI { .... } or P UL LI.class { .... } + * #divname p { ... } and + * a:hover, a:visited {...} multiple class:pseudo + They require a significantly more complicated processing likely + based on stylesheet and document trees parsing. + Many email clients don't handle more than what is supported + by this script anyway. + - pseudo-classes like a:hover {...} can't be inserted inline + in the html tags: they are moved to a \n", $body); + } + // append a copy of the pseudo-element declaration to that body style section + $styledefinition = trim($styles[5][$i]); + $styledefinition = preg_replace ("!\s+!mi", " ", $styledefinition ); // convert style definition to a one-liner (optional) + $declaration = $styles[1][$i].trim($styles[2][$i]).$styles[3][$i].trim($styles[4][$i])." { ".$styledefinition." }"; + $body = preg_replace ("!(]*>\s*]*>\s*<\!\-\-[^>]*)"."(\s*\-\->\s*)!si", "\$1".$declaration."\n\$2", $body); + $styles[6][$i]= 2; // mark as moved to (.*)!si", "\$1\$2" , $body); + + // check what styles have been injected +# print_r($styles); + + return $body; +} + +/** + * facteur_addstyle + * @author Eric Dols + * + * @param $matches + * @return string + */ +function facteur_addstyle($matches) { + + // $matches[1]=tag, $matches[2]=tag attributes (if any), $matches[3]=xhtml closing (if any) + + // variables values set in calling function + global $styledefinition, $styletag, $styleclass; + + // convert the style definition to a one-liner + $styledefinition = preg_replace ("!\s+!mi", " ", $styledefinition ); + // convert all double-quotes to single-quotes + $styledefinition = preg_replace ('/"/','\'', $styledefinition ); + + if (preg_match ("/style\=/i", $matches[2])) { + // add styles to existing style attribute if any already in the tag + $pattern = "!(.* style\=)[\"]([^\"]*)[\"](.*)!mi"; + $replacement = "\$1".'"'."\$2 ".$styledefinition.'"'."\$3"; + $attributes = preg_replace ($pattern, $replacement , $matches[2]); + } else { + // otherwise add new style attribute to tag (none was present) + $attributes = $matches[2].' style="'.$styledefinition.'"'; + } + + if ($styleclass!="") { + // if we were injecting a class style, remove the now useless class attribute from the html tag + + // Single class in tag case (class="classname"): remove class attribute altogether + $pattern = "!(.*) class\=['\"]".$styleclass."['\"](.*)!mi"; + $replacement = "\$1\$2"; + $attributes = preg_replace ( $pattern, $replacement, $attributes); + + // Multiple classes in tag case (class="classname anotherclass..."): remove class name from class attribute. + // classes are injected inline and removed by order of appearance in stylesheet + // exact same behavior as where last declared class attributes in + \ No newline at end of file diff --git a/www/plugins/formidable_1_0/modeles/formulaire_formidable.yaml b/www/plugins/formidable_1_0/modeles/formulaire_formidable.yaml new file mode 100644 index 00000000..79dc4e9d --- /dev/null +++ b/www/plugins/formidable_1_0/modeles/formulaire_formidable.yaml @@ -0,0 +1,20 @@ +nom: '<:formidable:modele_nom_formulaire:>' +logo: 'images/formulaire-24.png' +icone_barre: 'formulaire.png' +parametres: + - + saisie: 'hidden' + options: + nom: 'modele' + defaut: 'formulaire' + - + saisie: 'hidden' + options: + nom: 'variante' + defaut: 'formidable' + - + saisie: 'formulaire_formidable' + options: + nom: 'id' + label: '<:formidable:modele_label_formulaire_formidable:>' + cacher_option_intro: 'oui' \ No newline at end of file diff --git a/www/plugins/formidable_1_0/modeles/formulaires_reponse.html b/www/plugins/formidable_1_0/modeles/formulaires_reponse.html new file mode 100644 index 00000000..02d78a07 --- /dev/null +++ b/www/plugins/formidable_1_0/modeles/formulaires_reponse.html @@ -0,0 +1,12 @@ + + +#SET{valeurs,#ARRAY} + +#SET_MERGE{valeurs,#ARRAY{#NOM,#VALEUR|tenter_unserialize}} + + + +#VOIR_SAISIES{(#SAISIES|unserialize), #GET{valeurs}} + + + diff --git a/www/plugins/formidable_1_0/noisettes/formulaire_formidable.html b/www/plugins/formidable_1_0/noisettes/formulaire_formidable.html new file mode 100644 index 00000000..95f7a4c6 --- /dev/null +++ b/www/plugins/formidable_1_0/noisettes/formulaire_formidable.html @@ -0,0 +1,2 @@ +[(#ENV{afficher_titre_formulaire}|oui)[

    (#TITRE|typo)

    ]] +
    #FORMULAIRE_FORMIDABLE{#ENV{identifiant}}
    \ No newline at end of file diff --git a/www/plugins/formidable_1_0/noisettes/formulaire_formidable.yaml b/www/plugins/formidable_1_0/noisettes/formulaire_formidable.yaml new file mode 100644 index 00000000..dd6679c0 --- /dev/null +++ b/www/plugins/formidable_1_0/noisettes/formulaire_formidable.yaml @@ -0,0 +1,15 @@ +nom: '<:formidable:noisette_nom_noisette_formulaire:>' +icon: 'images/formulaire-24.png' +parametres: + - + saisie: 'formulaire_formidable' + options: + nom: 'identifiant' + label: '<:formidable:noisette_label_identifiant:>' + cacher_option_intro: 'oui' + - + saisie: 'oui_non' + options: + nom: 'afficher_titre_formulaire' + label: '<:formidable:noisette_label_afficher_titre_formulaire:>' + defaut: '' \ No newline at end of file diff --git a/www/plugins/formidable_1_0/notifications/formulaire_accuse.html b/www/plugins/formidable_1_0/notifications/formulaire_accuse.html new file mode 100644 index 00000000..559a130c --- /dev/null +++ b/www/plugins/formidable_1_0/notifications/formulaire_accuse.html @@ -0,0 +1,7 @@ + +[(#ENV*{message_retour}|propre)] + +#VOIR_SAISIES{#ENV*{saisies}, #ENV*{valeurs}} + +--- +

    <:envoi_via_le_site:> #NOM_SITE_SPIP

    diff --git a/www/plugins/formidable_1_0/notifications/formulaire_email.html b/www/plugins/formidable_1_0/notifications/formulaire_email.html new file mode 100644 index 00000000..9f3b5e93 --- /dev/null +++ b/www/plugins/formidable_1_0/notifications/formulaire_email.html @@ -0,0 +1,18 @@ + +

    + #SET{date, #VAL{d/m/Y}|date} + #SET{heure, #VAL{H:i:s}|date} + <:formidable:traiter_email_horodatage{formulaire=#ENV*{titre}, date=#GET{date}, heure=#GET{heure}}:> +
    + #SET{url, #SELF{&,true}|url_absolue} + <:formidable:traiter_email_page{url=#GET{url}}:> +

    + +#VOIR_SAISIES{#ENV*{saisies}, #ENV*{valeurs}} + +--- +

    <:envoi_via_le_site:> #NOM_SITE_SPIP

    +[(#ENV*{traitements}|table_valeur{enregistrement}|oui) +#SET{url, #URL_ECRIRE{formulaires_reponses}|parametre_url{id_formulaire, #ENV{id_formulaire}}|url_absolue} +

    <:formidable:traiter_email_url_enregistrement{url=#GET{url}}:>

    +] diff --git a/www/plugins/formidable_1_0/paquet.xml b/www/plugins/formidable_1_0/paquet.xml new file mode 100644 index 00000000..9dabcf10 --- /dev/null +++ b/www/plugins/formidable_1_0/paquet.xml @@ -0,0 +1,35 @@ + + + Formidable + + + RastaPopoulos + Les Développements Durables + + GPL 3 + + + + + + + + + + + + + + + + + diff --git a/www/plugins/formidable_1_0/prive/objets/contenu/formulaire.html b/www/plugins/formidable_1_0/prive/objets/contenu/formulaire.html new file mode 100644 index 00000000..e22434c6 --- /dev/null +++ b/www/plugins/formidable_1_0/prive/objets/contenu/formulaire.html @@ -0,0 +1,6 @@ + +
    +
    <:info_descriptif:>
    +
    [(#DESCRIPTIF|image_reduire{500,0})]
    +
    + diff --git a/www/plugins/formidable_1_0/prive/objets/contenu/formulaires_reponse.html b/www/plugins/formidable_1_0/prive/objets/contenu/formulaires_reponse.html new file mode 100644 index 00000000..30bccf4e --- /dev/null +++ b/www/plugins/formidable_1_0/prive/objets/contenu/formulaires_reponse.html @@ -0,0 +1,27 @@ + +
    +
    <:auteur:>
    +
    + [(#ID_AUTEUR|>{0}|oui) + [(#INFO_TITRE{auteur,#ID_AUTEUR})] + ] + [(#ID_AUTEUR|>{0}|non) + <:formidable:reponses_anonyme:> + ] +
    +
    +
    +
    <:formulaire:titre_formulaire:>
    + +
    +
    +
    <:date:>
    +
    + [(#DATE|affdate_jourcourt|concat{#DATE|affdate{", H:i"}})] +
    +
    + diff --git a/www/plugins/formidable_1_0/prive/objets/infos/formulaire.html b/www/plugins/formidable_1_0/prive/objets/infos/formulaire.html new file mode 100644 index 00000000..59afec02 --- /dev/null +++ b/www/plugins/formidable_1_0/prive/objets/infos/formulaire.html @@ -0,0 +1,6 @@ + +
    +
    <:formidable:voir_numero:>

    #ID_FORMULAIRE

    + +
    + \ No newline at end of file diff --git a/www/plugins/formidable_1_0/prive/objets/infos/formulaires_reponse.html b/www/plugins/formidable_1_0/prive/objets/infos/formulaires_reponse.html new file mode 100644 index 00000000..04908427 --- /dev/null +++ b/www/plugins/formidable_1_0/prive/objets/infos/formulaires_reponse.html @@ -0,0 +1,8 @@ + +
    +
    <:formidable:reponse_numero:>

    #ID_FORMULAIRES_REPONSE

    + +[(#FORMULAIRE_INSTITUER_OBJET{formulaires_reponses,#ID_FORMULAIRES_REPONSE})] + +
    + \ No newline at end of file diff --git a/www/plugins/formidable_1_0/prive/objets/liste/formulaires.html b/www/plugins/formidable_1_0/prive/objets/liste/formulaires.html new file mode 100644 index 00000000..f2a80983 --- /dev/null +++ b/www/plugins/formidable_1_0/prive/objets/liste/formulaires.html @@ -0,0 +1,45 @@ +[(#SET{defaut_tri,#ARRAY{ + date,-1, + titre,1, + id_formulaire,1 +}}) +] +#ANCRE_PAGINATION +
    + +[] + + + + + + + + + + + + + + + + + + +
    (#ENV*{titre})
    [(#TRI{id_formulaire,#,ajax})][(#TRI{titre,<:formidable:editer_titre:>,ajax})][(#TRI{identifiant,<:formidable:editer_identifiant:>,ajax})]
    <:info_numero_abbreviation:>#ID_FORMULAIRE#TITRE#IDENTIFIANT + [(#AUTORISER{editer, formulaire}|oui) + [(#BOUTON_ACTION{[(#CHEMIN_IMAGE{formulaire-dupliquer-24.png} + |balise_img{<:formidable:formulaires_dupliquer:>})], + #URL_ACTION_AUTEUR{dupliquer_formulaire, #ID_FORMULAIRE},link})] + ] + [(#AUTORISER{editer, formulaire, #ID_FORMULAIRE}|oui) + [(#BOUTON_ACTION{[(#CHEMIN_IMAGE{formulaire-supprimer-24.png} + |balise_img{<:formidable:formulaires_supprimer:>})], + #URL_ACTION_AUTEUR{supprimer_formulaire, #ID_FORMULAIRE},link,<:formidable:formulaires_supprimer_confirmation:>})] + ] +
    +[

    (#PAGINATION{prive})

    ] +
    +
    [ +
    (#ENV*{sinon,<:formidable:formulaires_aucun:>})
    +] diff --git a/www/plugins/formidable_1_0/prive/objets/liste/formulaires_reponses.html b/www/plugins/formidable_1_0/prive/objets/liste/formulaires_reponses.html new file mode 100644 index 00000000..9d310c09 --- /dev/null +++ b/www/plugins/formidable_1_0/prive/objets/liste/formulaires_reponses.html @@ -0,0 +1,48 @@ +[(#SET{defaut_tri,#ARRAY{ + date,-1, + titre,1, + id_formulaires_reponse,1 +}}) +] +[(#BOITE_OUVRIR{'','simple'})] +#ANCRE_PAGINATION +
    + +[] + + + + + + + + + + + + + + + + + + + + +
    (#ENV*{titre})
    [(#TRI{statut,#,ajax})][(#TRI{date,<:date:>,ajax})][(#TRI{id_auteur,<:formidable:reponses_auteur:>,ajax})][(#TRI{ip,<:formidable:reponses_ip:>,ajax})]
    [(#ID_FORMULAIRES_REPONSE|puce_changement_statut{#STATUT, #ID_FORMULAIRE, formulaires_reponse})][(#DATE|affdate_jourcourt|concat{#DATE|affdate{", H:i"}})] + + #NOM + + <:formidable:reponses_anonyme:> + + #IP + + <:formidable:reponses_voir_detail:> + +
    +[

    (#PAGINATION{prive})

    ] +
    +#BOITE_FERMER +
    [ +
    (#ENV*{sinon,''})
    +] diff --git a/www/plugins/formidable_1_0/prive/squelettes/contenu/configurer_formidable.html b/www/plugins/formidable_1_0/prive/squelettes/contenu/configurer_formidable.html new file mode 100644 index 00000000..df8aa011 --- /dev/null +++ b/www/plugins/formidable_1_0/prive/squelettes/contenu/configurer_formidable.html @@ -0,0 +1,7 @@ +[(#AUTORISER{configurer,_fsondage}|sinon_interdire_acces)] + +

    <:formidable:cfg_titre_page_configurer_formidable:>

    + +
    + #FORMULAIRE_CONFIGURER_FORMIDABLE_ANALYSE +
    diff --git a/www/plugins/formidable_1_0/prive/squelettes/contenu/formulaire.html b/www/plugins/formidable_1_0/prive/squelettes/contenu/formulaire.html new file mode 100644 index 00000000..6a19dc7d --- /dev/null +++ b/www/plugins/formidable_1_0/prive/squelettes/contenu/formulaire.html @@ -0,0 +1,35 @@ + +[(#BOITE_OUVRIR{ + [(#AUTORISER{editer, formulaire, #ID_FORMULAIRE}|oui) + [(#URL_ECRIRE{formulaire_edit,id_formulaire=#ID_FORMULAIRE} + |icone_verticale{<:formidable:editer_modifier_formulaire:>,formulaire,formulaire-editer-24,right})] + ] + [

    (#TITRE|sinon{<:info_sans_titre:>})[(#CHEMIN_IMAGE{formulaire-24.png}|balise_img{formulaire,cadre-icone})]

    ] +,simple fiche_objet})] + + + + +
    + +
    + + #SET{traitements_disponibles, #VAL|traitements_lister_disponibles} + [(#BOITE_OUVRIR{#CHEMIN_IMAGE{formulaire-config-traitements-24.png} + |balise_img{'',cadre-icone} + |concat{<:formidable:traitements_actives:>},'simple traitements'})] + +
      + +
    • [(#GET{traitements_disponibles}|table_valeur{#CLE}|table_valeur{titre})]
    • + +
    +
    +

    <:formidable:aucun_traitement:>

    + + #BOITE_FERMER + + #FORMULAIRE_FORMIDABLE{#ID_FORMULAIRE} + +#BOITE_FERMER + diff --git a/www/plugins/formidable_1_0/prive/squelettes/contenu/formulaire_edit.html b/www/plugins/formidable_1_0/prive/squelettes/contenu/formulaire_edit.html new file mode 100644 index 00000000..75a6ddbd --- /dev/null +++ b/www/plugins/formidable_1_0/prive/squelettes/contenu/formulaire_edit.html @@ -0,0 +1,41 @@ + +[(#BOITE_OUVRIR{'','info'})] + + + [(#URL_ECRIRE{formulaire}|parametre_url{id_formulaire,#ID_FORMULAIRE}|icone_verticale{<:retour:>,formulaire,formulaire-24,left})] + +

    <:formidable:editer_modifier_formulaire:>

    +

    #TITRE

    + + #SET{configurer,#ENV{configurer}|in_array{#ARRAY{0,formulaire,1,champs,2,traitements,3,auteurs}}|?{#ENV{configurer},champs}} + + [(#URL_ECRIRE{formulaires}|icone_verticale{<:retour:>,formulaire,formulaire-24,left})] + + <:formidable:editer_modifier_formulaire:> +

    + [(#ENV{nouveau}|=={oui}|?{<:formidable:editer_nouveau:>,#VAL{id_menu}|_request})] +

    + + #SET{configurer,formulaire} + + + [(#GET{configurer}|=={formulaire}|oui) + #FORMULAIRE_EDITER_FORMULAIRE{#VAL{id_formulaire}|_request|sinon{0}, #VAL{nouveau}|_request|sinon{''}} + ] + [(#GET{configurer}|=={auteurs}|oui) + #FORMULAIRE_EDITER_LIENS{formulaires,#VAL{id_formulaire}|_request|sinon{0},auteurs} + ] + [(#GET{configurer}|=={champs}|oui) + #FORMULAIRE_EDITER_FORMULAIRE_CHAMPS{#ENV{id_formulaire}} + ] + [(#GET{configurer}|=={traitements}|oui) + #FORMULAIRE_EDITER_FORMULAIRE_TRAITEMENTS{#ENV{id_formulaire}} + ] +#BOITE_FERMER + diff --git a/www/plugins/formidable_1_0/prive/squelettes/contenu/formulaires.html b/www/plugins/formidable_1_0/prive/squelettes/contenu/formulaires.html new file mode 100644 index 00000000..f655ed30 --- /dev/null +++ b/www/plugins/formidable_1_0/prive/squelettes/contenu/formulaires.html @@ -0,0 +1,13 @@ +[(#BOITE_OUVRIR{ +

    <:formidable:bouton_formulaires:>

    +

    <:formidable:formulaires_introduction:>

    +})] +#BOITE_FERMER + +, ajax} /> + +[(#AUTORISER{editer, formulaire}|oui) +[(#URL_ECRIRE{formulaire_edit} + |parametre_url{nouveau,oui} + |icone_verticale{<:formulaire:icone_creer_formulaire:>,formulaire,formulaire-nouveau-48,center})] +] diff --git a/www/plugins/formidable_1_0/prive/squelettes/contenu/formulaires_analyse.html b/www/plugins/formidable_1_0/prive/squelettes/contenu/formulaires_analyse.html new file mode 100644 index 00000000..bf48ec52 --- /dev/null +++ b/www/plugins/formidable_1_0/prive/squelettes/contenu/formulaires_analyse.html @@ -0,0 +1,24 @@ + + +[(#BOITE_OUVRIR{'','simple'})] + [(#URL_ECRIRE{formulaire}|parametre_url{id_formulaire,#ID_FORMULAIRE}|icone_verticale{<:retour:>,formulaire,formulaire-24,left})] + + [

    <:formidable:reponses_analyse:>

    +

    (#TITRE|sinon{<:info_sans_titre:>})

    ] + + [(#BOITE_OUVRIR{'','simple'})] + + + [(#_reponses:TOTAL_BOUCLE + |singulier_ou_pluriel{formidable:analyse_une_reponse_total,formidable:analyse_nb_reponses_total})] + + <:formidable:analyse_zero_reponse_total:> + + #BOITE_FERMER +#BOITE_FERMER + +[(#BOITE_OUVRIR{'','simple'})] +#INCLURE{fond=modeles/formulaire_analyse,id_formulaire} +#BOITE_FERMER + + diff --git a/www/plugins/formidable_1_0/prive/squelettes/contenu/formulaires_reponse.html b/www/plugins/formidable_1_0/prive/squelettes/contenu/formulaires_reponse.html new file mode 100644 index 00000000..0f8441be --- /dev/null +++ b/www/plugins/formidable_1_0/prive/squelettes/contenu/formulaires_reponse.html @@ -0,0 +1,24 @@ + + +[(#BOITE_OUVRIR{ +

    <:formulaires_reponse:formulaires_reponse_numero{nb=#ID_FORMULAIRES_REPONSE}:>

    +,simple fiche_objet})] + + + + +
    + +
    + +
    +[(#BOITE_OUVRIR{

    <:formulaires_reponse:reponses_donnees:>

    ,reponses})] +#INCLURE{fond=modeles/formulaires_reponse,id_formulaires_reponse} +#BOITE_FERMER + +#BOITE_FERMER + + diff --git a/www/plugins/formidable_1_0/prive/squelettes/contenu/formulaires_reponses.html b/www/plugins/formidable_1_0/prive/squelettes/contenu/formulaires_reponses.html new file mode 100644 index 00000000..78210d5b --- /dev/null +++ b/www/plugins/formidable_1_0/prive/squelettes/contenu/formulaires_reponses.html @@ -0,0 +1,15 @@ + + +[(#BOITE_OUVRIR{'','simple'})] + [(#URL_ECRIRE{formulaire}|parametre_url{id_formulaire,#ID_FORMULAIRE}|icone_verticale{<:retour:>,formulaire,formulaire-24,left})] + +

    <:formidable:voir_reponses:>

    +

    #TITRE

    +#BOITE_FERMER + +}{ajax}> + +}{ajax}> + + + diff --git a/www/plugins/formidable_1_0/prive/squelettes/extra/formulaire.html b/www/plugins/formidable_1_0/prive/squelettes/extra/formulaire.html new file mode 100644 index 00000000..4407c024 --- /dev/null +++ b/www/plugins/formidable_1_0/prive/squelettes/extra/formulaire.html @@ -0,0 +1,19 @@ + + +[(#BOITE_OUVRIR{<:formidable:titre_cadre_raccourcis:>,'simple','section'})] + [(#AUTORISER{editer, formulaire}|oui) + [(#URL_ACTION_AUTEUR{dupliquer_formulaire, #ID_FORMULAIRE}|icone_horizontale{<:formidable:formulaires_dupliquer:>,formulaire,formulaire-dupliquer-24})] + ] + [(#AUTORISER{editer, formulaire, #ID_FORMULAIRE}|oui) + [(#URL_ACTION_AUTEUR{supprimer_formulaire, #ID_FORMULAIRE}|inserer_attribut{'onclick','return confirm("<:formidable:formulaires_supprimer_confirmation:>");'} + |icone_horizontale{<:formidable:formulaires_supprimer:>,formulaire,formulaire-supprimer-24})] + ] +#BOITE_FERMER + +[(#BOITE_OUVRIR{<:formidable:voir_exporter:>,'simple','section'})] + + [(#URL_ACTION_AUTEUR{exporter_formulaire,#ID_FORMULAIRE-#CLE}|icone_horizontale{#CLE,formulaire,formulaire-exporter-24})] + +#BOITE_FERMER + + diff --git a/www/plugins/formidable_1_0/prive/squelettes/extra/formulaire_edit.html b/www/plugins/formidable_1_0/prive/squelettes/extra/formulaire_edit.html new file mode 100644 index 00000000..959b0ebe --- /dev/null +++ b/www/plugins/formidable_1_0/prive/squelettes/extra/formulaire_edit.html @@ -0,0 +1,9 @@ + + +[(#ENV{configurer}|=={traitements}|oui) +[(#BOITE_OUVRIR{'','info'})] + #INCLURE{fond=modeles/formulaire_aide_memoire, id_formulaire=#ID_FORMULAIRE} +#BOITE_FERMER +] + + \ No newline at end of file diff --git a/www/plugins/formidable_1_0/prive/squelettes/extra/formulaires_analyse.html b/www/plugins/formidable_1_0/prive/squelettes/extra/formulaires_analyse.html new file mode 100755 index 00000000..9810f757 --- /dev/null +++ b/www/plugins/formidable_1_0/prive/squelettes/extra/formulaires_analyse.html @@ -0,0 +1,8 @@ + + +[(#BOITE_OUVRIR{<:formidable:titre_cadre_raccourcis:>,'info'})] +[(#URL_ACTION_AUTEUR{exporter_analyse_reponses,#ID_FORMULAIRE} + |icone_horizontale{<:formidable:analyse_exporter:>,formulaire,formulaire-analyse-exporter-24,center})] +#BOITE_FERMER + + diff --git a/www/plugins/formidable_1_0/prive/squelettes/extra/formulaires_reponses.html b/www/plugins/formidable_1_0/prive/squelettes/extra/formulaires_reponses.html new file mode 100644 index 00000000..eece13ca --- /dev/null +++ b/www/plugins/formidable_1_0/prive/squelettes/extra/formulaires_reponses.html @@ -0,0 +1,8 @@ + + +[(#BOITE_OUVRIR{<:formidable:titre_cadre_raccourcis:>,'info'})] +[(#URL_ACTION_AUTEUR{exporter_formulaires_reponses,#ID_FORMULAIRE} + |icone_horizontale{<:formidable:reponses_exporter:>,formulaire,formulaire-reponses-exporter-24,center})] +#BOITE_FERMER + + diff --git a/www/plugins/formidable_1_0/prive/squelettes/hierarchie/formulaire.html b/www/plugins/formidable_1_0/prive/squelettes/hierarchie/formulaire.html new file mode 100644 index 00000000..2b7798d4 --- /dev/null +++ b/www/plugins/formidable_1_0/prive/squelettes/hierarchie/formulaire.html @@ -0,0 +1,5 @@ + + +<:formulaire:titre_formulaires:> > +#TITRE + diff --git a/www/plugins/formidable_1_0/prive/squelettes/hierarchie/formulaire_edit.html b/www/plugins/formidable_1_0/prive/squelettes/hierarchie/formulaire_edit.html new file mode 100644 index 00000000..a41dfd9d --- /dev/null +++ b/www/plugins/formidable_1_0/prive/squelettes/hierarchie/formulaire_edit.html @@ -0,0 +1,5 @@ + +<:formulaire:titre_formulaires:> > +#TITRE > +<:formulaire:modifier_formulaire:> + diff --git a/www/plugins/formidable_1_0/prive/squelettes/hierarchie/formulaires.html b/www/plugins/formidable_1_0/prive/squelettes/hierarchie/formulaires.html new file mode 100644 index 00000000..7fd040aa --- /dev/null +++ b/www/plugins/formidable_1_0/prive/squelettes/hierarchie/formulaires.html @@ -0,0 +1,2 @@ + +<:formulaire:titre_formulaires:> diff --git a/www/plugins/formidable_1_0/prive/squelettes/hierarchie/formulaires_analyse.html b/www/plugins/formidable_1_0/prive/squelettes/hierarchie/formulaires_analyse.html new file mode 100644 index 00000000..2b19ac6c --- /dev/null +++ b/www/plugins/formidable_1_0/prive/squelettes/hierarchie/formulaires_analyse.html @@ -0,0 +1,7 @@ + + +<:formulaire:titre_formulaires:> > +#TITRE > +<:formidable:reponses_analyse:> + + diff --git a/www/plugins/formidable_1_0/prive/squelettes/hierarchie/formulaires_reponse.html b/www/plugins/formidable_1_0/prive/squelettes/hierarchie/formulaires_reponse.html new file mode 100644 index 00000000..a4ebff64 --- /dev/null +++ b/www/plugins/formidable_1_0/prive/squelettes/hierarchie/formulaires_reponse.html @@ -0,0 +1,6 @@ + +<:formulaire:titre_formulaires:> > +#INFO_TITRE{formulaire,#ID_FORMULAIRE} > +<:formidable:voir_reponses:> > +<:formulaires_reponse:titre_formulaires_reponse:> + diff --git a/www/plugins/formidable_1_0/prive/squelettes/hierarchie/formulaires_reponses.html b/www/plugins/formidable_1_0/prive/squelettes/hierarchie/formulaires_reponses.html new file mode 100644 index 00000000..bfe35597 --- /dev/null +++ b/www/plugins/formidable_1_0/prive/squelettes/hierarchie/formulaires_reponses.html @@ -0,0 +1,5 @@ + +<:formulaire:titre_formulaires:> > +#INFO_TITRE{formulaire,#ID_FORMULAIRE} > +<:formidable:voir_reponses:> + diff --git a/www/plugins/formidable_1_0/prive/squelettes/navigation/formulaire.html b/www/plugins/formidable_1_0/prive/squelettes/navigation/formulaire.html new file mode 100644 index 00000000..f629fc37 --- /dev/null +++ b/www/plugins/formidable_1_0/prive/squelettes/navigation/formulaire.html @@ -0,0 +1,50 @@ + +#BOITE_OUVRIR{'','info'} +#PIPELINE{boite_infos,#ARRAY{data,'',args,#ARRAY{'type','formulaire','id',#ENV{id_formulaire}}}} + +[(#AUTORISER{editer, formulaire, #ID_FORMULAIRE}|oui) + +[(#URL_ECRIRE{formulaire_edit} + |parametre_url{id_formulaire, #ID_FORMULAIRE} + |parametre_url{configurer,formulaire} + |parametre_url{avertissement,''} + |icone_horizontale{<:formidable:editer_menu_formulaire:>,formulaire,formulaire-editer-24,center})] + +[(#CONFIG{formidable/analyse/auteur}|=={on}|oui)[(#URL_ECRIRE{formulaire_edit} + |parametre_url{id_formulaire, #ID_FORMULAIRE} + |parametre_url{configurer,auteurs} + |parametre_url{avertissement,''} + |icone_horizontale{<:formidable:editer_menu_auteurs:>,formulaire,formulaire-config-auteurs-24,center})] +] + +[(#URL_ECRIRE{formulaire_edit} + |parametre_url{id_formulaire, #ID_FORMULAIRE} + |parametre_url{configurer,champs} + |parametre_url{avertissement,''} + |icone_horizontale{<:formidable:editer_menu_champs:>,formulaire,formulaire-config-champs-24,center})] + +[(#URL_ECRIRE{formulaire_edit} + |parametre_url{id_formulaire, #ID_FORMULAIRE} + |parametre_url{configurer,traitements} + |parametre_url{avertissement,''} + |icone_horizontale{<:formidable:editer_menu_traitements:>,formulaire,formulaire-config-traitements-24,center})] + +] + + + + +[(#AUTORISER{voir,formulaires_reponse,#ID_FORMULAIRE}|oui) +] + + + +#BOITE_FERMER + diff --git a/www/plugins/formidable_1_0/prive/squelettes/navigation/formulaire_edit.html b/www/plugins/formidable_1_0/prive/squelettes/navigation/formulaire_edit.html new file mode 100644 index 00000000..fbc11c3f --- /dev/null +++ b/www/plugins/formidable_1_0/prive/squelettes/navigation/formulaire_edit.html @@ -0,0 +1,28 @@ + +#BOITE_OUVRIR{'','info'} +#PIPELINE{boite_infos,#ARRAY{data,'',args,#ARRAY{'type','formulaire','id',#ENV{id_formulaire}}}} + +[(#SELF + |parametre_url{configurer,formulaire} + |parametre_url{avertissement,''} + |icone_horizontale{<:formidable:editer_menu_formulaire:>,formulaire,formulaire-editer-24,center})] + +[(#CONFIG{formidable/analyse/auteur}|=={on}|oui)[(#SELF + |parametre_url{configurer,auteurs} + |parametre_url{avertissement,''} + |icone_horizontale{<:formidable:editer_menu_auteurs:>,formulaire,formulaire-config-auteurs-24,center})] +] + +[(#SELF + |parametre_url{configurer,champs} + |parametre_url{avertissement,''} + |icone_horizontale{<:formidable:editer_menu_champs:>,formulaire,formulaire-config-champs-24,center})] + +[(#SELF + |parametre_url{configurer,traitements} + |parametre_url{avertissement,''} + |icone_horizontale{<:formidable:editer_menu_traitements:>,formulaire,formulaire-config-traitements-24,center})] + +#BOITE_FERMER + + diff --git a/www/plugins/formidable_1_0/prive/squelettes/navigation/formulaires.html b/www/plugins/formidable_1_0/prive/squelettes/navigation/formulaires.html new file mode 100644 index 00000000..0ccb3626 --- /dev/null +++ b/www/plugins/formidable_1_0/prive/squelettes/navigation/formulaires.html @@ -0,0 +1,5 @@ +[(#AUTORISER{editer, formulaire}|oui) +[(#BOITE_OUVRIR{<:formidable:importer_formulaire:>,'info'})] + #FORMULAIRE_IMPORTER_FORMULAIRE +#BOITE_FERMER +] diff --git a/www/plugins/formidable_1_0/prive/squelettes/navigation/formulaires_analyse.html b/www/plugins/formidable_1_0/prive/squelettes/navigation/formulaires_analyse.html new file mode 100644 index 00000000..d588f7e8 --- /dev/null +++ b/www/plugins/formidable_1_0/prive/squelettes/navigation/formulaires_analyse.html @@ -0,0 +1,12 @@ + + +#BOITE_OUVRIR{'','info'} +#PIPELINE{boite_infos,#ARRAY{data,'',args,#ARRAY{'type','formulaire','id',#ENV{id_formulaire}}}} + +[(#URL_ECRIRE{formulaires_reponses}|parametre_url{id_formulaire,#ID_FORMULAIRE}|icone_horizontale{<:formidable:reponses_liste:>,formulaire,formulaire-reponses-24,left})] + +[(#SELF|icone_horizontale{<:formidable:reponses_analyse:>,formulaire,formulaire-analyse-24,left})] + +#BOITE_FERMER + + diff --git a/www/plugins/formidable_1_0/prive/squelettes/navigation/formulaires_reponse.html b/www/plugins/formidable_1_0/prive/squelettes/navigation/formulaires_reponse.html new file mode 100644 index 00000000..bc6188b7 --- /dev/null +++ b/www/plugins/formidable_1_0/prive/squelettes/navigation/formulaires_reponse.html @@ -0,0 +1,15 @@ + + +[(#BOITE_OUVRIR{'','info'})] + + [(#PIPELINE{boite_infos,#ARRAY{data,'', + args,#ARRAY{'type','formulaires_reponse','id',#ENV{id_formulaires_reponse}}}})] + + [(#URL_ECRIRE{formulaires_analyse} + |parametre_url{id_formulaire,#ID_FORMULAIRE} + |icone_horizontale{<:formidable:reponses_analyse:>,formulaire,formulaire-analyse-24,center})] + +#BOITE_FERMER + + + diff --git a/www/plugins/formidable_1_0/prive/squelettes/navigation/formulaires_reponses.html b/www/plugins/formidable_1_0/prive/squelettes/navigation/formulaires_reponses.html new file mode 100644 index 00000000..001ac205 --- /dev/null +++ b/www/plugins/formidable_1_0/prive/squelettes/navigation/formulaires_reponses.html @@ -0,0 +1,12 @@ + + +#BOITE_OUVRIR{'','info'} +#PIPELINE{boite_infos,#ARRAY{data,'',args,#ARRAY{'type','formulaire','id',#ENV{id_formulaire}}}} + +[(#SELF|icone_horizontale{<:formidable:reponses_liste:>,formulaire,formulaire-reponses-24,left})] + +[(#URL_ECRIRE{formulaires_analyse}|parametre_url{id_formulaire,#ID_FORMULAIRE}|icone_horizontale{<:formidable:reponses_analyse:>,formulaire,formulaire-analyse-24,left})] + +#BOITE_FERMER + + diff --git a/www/plugins/formidable_1_0/prive/style_prive_plugin_formidable.html b/www/plugins/formidable_1_0/prive/style_prive_plugin_formidable.html new file mode 100644 index 00000000..cbd1cf99 --- /dev/null +++ b/www/plugins/formidable_1_0/prive/style_prive_plugin_formidable.html @@ -0,0 +1,32 @@ +#SET{claire,#ENV{couleur_claire,edf3fe}} +#SET{foncee,#ENV{couleur_foncee,3874b0}} + +body .formidable_analyse .progress-bar span { + background-color: ##GET{claire}; + background-image: -webkit-gradient(linear, left top, left bottom, from(##GET{claire}), to(##GET{foncee})); + background-image: -webkit-linear-gradient(top, ##GET{claire}, ##GET{foncee}); + background-image: -moz-linear-gradient(top, ##GET{claire}, ##GET{foncee}); + background-image: -ms-linear-gradient(top, ##GET{claire}, ##GET{foncee}); + background-image: -o-linear-gradient(top, ##GET{claire}, ##GET{foncee}); + background-image: linear-gradient(top, ##GET{claire}, ##GET{foncee}); +} + +#navigation .navigation_resultats { + margin-top:1em; + padding-top:1em; + border-top:1px solid #eee; +} + +#contenu .box.traitements ul.spip {margin-bottom:0;} + +#contenu .liste-objets.formulaires_reponses tr > .date {width:auto;} +#contenu .liste-objets.formulaires_reponses tr > .auteur {width:auto;} + +.formulaires_reponse #contenu #wysiwyg {margin-top:1em;} +.formulaires_reponse #contenu #wysiwyg .label { + width:140px; float:left; display:block; +} +.formulaires_reponse #contenu .fiche_objet .reponses .inner { border:none; } +.formulaires_reponse #contenu .fiche_objet .reponses .hd { + padding-bottom: 3px; margin-bottom:10px; border-bottom:1px solid #ccc; +} diff --git a/www/plugins/formidable_1_0/prive/themes/basic/images/formulaire-16.png b/www/plugins/formidable_1_0/prive/themes/basic/images/formulaire-16.png new file mode 100644 index 00000000..8ca21eae Binary files /dev/null and b/www/plugins/formidable_1_0/prive/themes/basic/images/formulaire-16.png differ diff --git a/www/plugins/formidable_1_0/prive/themes/spip/images/formulaire-16.png b/www/plugins/formidable_1_0/prive/themes/spip/images/formulaire-16.png new file mode 100644 index 00000000..8ca21eae Binary files /dev/null and b/www/plugins/formidable_1_0/prive/themes/spip/images/formulaire-16.png differ diff --git a/www/plugins/formidable_1_0/prive/themes/spip/images/formulaire-24.png b/www/plugins/formidable_1_0/prive/themes/spip/images/formulaire-24.png new file mode 100644 index 00000000..ff847d08 Binary files /dev/null and b/www/plugins/formidable_1_0/prive/themes/spip/images/formulaire-24.png differ diff --git a/www/plugins/formidable_1_0/prive/themes/spip/images/formulaires_reponse-24.png b/www/plugins/formidable_1_0/prive/themes/spip/images/formulaires_reponse-24.png new file mode 100644 index 00000000..ec0a2b05 Binary files /dev/null and b/www/plugins/formidable_1_0/prive/themes/spip/images/formulaires_reponse-24.png differ diff --git a/www/plugins/formidable_1_0/public/formidable_criteres.php b/www/plugins/formidable_1_0/public/formidable_criteres.php new file mode 100644 index 00000000..ef2147a3 --- /dev/null +++ b/www/plugins/formidable_1_0/public/formidable_criteres.php @@ -0,0 +1,64 @@ + $crit + * + * Auteurs : + * Antoine Pitrou + * Cedric Morin + * Renato + * @ 2005,2006 - Distribue sous licence GNU/GPL + */ + +function critere_tri_selon_donnee_dist($idb, &$boucles, $crit) { // Garder cette fontion pour compatibilité + critere_tri_selon_reponse_dist($idb, $boucles, $crit) ; +} +function critere_tri_selon_reponse_dist($idb, &$boucles, $crit) { + + $boucle = &$boucles[$idb]; + $t = $boucle->id_table; + + if ($t=='formulaires_reponses'){ + $not = $crit->not; + $_quoi = calculer_liste($crit->param[0], array(), $boucles, $boucles[$idb]->id_parent); + $k = count($boucle->join)+1; + $boucle->join[$k]= array($t,'id_formulaires_reponse'); + $boucle->from["L$k"]= 'spip_formulaires_reponses_champs'; + $op = array("'='", "'L$k.nom'", "_q(".$_quoi.")"); + $boucle->where[]= array("'?'","!in_array($_quoi,array('date','id_formulaires_reponse'))",$op,"''"); + $boucle->order[]= "(in_array($_quoi,array('date','id_formulaires_reponse'))?'$t.'.$_quoi:(strncmp($_quoi,'date_',5)==0?'STR_TO_DATE(L$k.valeur,\'%d/%m/%Y\')':'L$k.valeur'))".($not?".' DESC'":""); + } +} + +// {recherche_donnee} ou {recherche_donnee susan} +// Intégralement pompé et adapté de Forms&Tables +function critere_recherche_reponse_dist($idb, &$boucles, $crit) { + global $table_des_tables; + $boucle = &$boucles[$idb]; + $t = $boucle->id_table; + if ($t=='formulaires_reponses'){ + if (isset($crit->param[0])) + $_quoi = calculer_liste($crit->param[0], array(), $boucles, $boucles[$idb]->id_parent); + else + $_quoi = '@$Pile[0]["recherche"]'; + + $k = count($boucle->join)+1; + $boucle->join[$k]= array($t,'id_formulaires_reponse'); + $boucle->from["L$k"]= 'spip_formulaires_reponses_champs'; + $op = array("'LIKE'","'L$k.valeur'","_q(strpos($_quoi,'%')===false?'%'.".$_quoi.".'%':$_quoi)"); + $boucle->where[]= array("'?'",$_quoi,$op,"''"); + } +} + + +?> diff --git a/www/plugins/formidable_1_0/puce_statut/formulaires_reponse.php b/www/plugins/formidable_1_0/puce_statut/formulaires_reponse.php new file mode 100644 index 00000000..0efc6f9e --- /dev/null +++ b/www/plugins/formidable_1_0/puce_statut/formulaires_reponse.php @@ -0,0 +1,92 @@ +" + . $inser_puce + . "" + . ""; + $i=0; + foreach($desc['statut_textes_instituer'] as $s=>$t){ + $out .= afficher_script_statut($id, $type, -$zero-$i++*$unit, statut_image($type,$s), $s, _T($t)); + } + $out .= ""; + return $out; + } + else { + + $nom = "puce_statut_"; + $action = generer_url_ecrire('puce_statut_formulaires',"",true); + $action = "if (!this.puce_loaded) { this.puce_loaded = true; prepare_selec_statut(this, '$nom', '$type', '$id', '$action'); }"; + $over = " onmouseover=\"$action\""; + + $lang_dir = lang_dir(isset($GLOBALS['lang_objet']) ? $GLOBALS['lang_objet'] : ""); + return "" + . $inser_puce + . ''; + } +} + + diff --git a/www/plugins/formidable_1_0/saisies-analyses/_base.html b/www/plugins/formidable_1_0/saisies-analyses/_base.html new file mode 100644 index 00000000..7c9a8ab3 --- /dev/null +++ b/www/plugins/formidable_1_0/saisies-analyses/_base.html @@ -0,0 +1,32 @@ +
    + +[] + + [(#CHEMIN{saisies-analyses/#ENV{type_saisie}.html}|oui) + #INCLURE{fond=saisies-analyses/#ENV{type_saisie},env} + ] + [(#CHEMIN{saisies-analyses/#ENV{type_saisie}.html}|non) + #SET{plein,#ENV{valeurs}|array_filter} + #SET{vide,#ENV{valeurs}|array_diff_key{#GET{plein}}} + [(#GET{plein}|count|>{0}|oui) + #SET{moyenne,#VAL{str_word_count}|array_map{#GET{plein}}|array_sum|div{#GET{plein}|count}} + ] + [(#GET{plein}|count|>{0}|non) + #SET{moyenne,0} + ] + + + + + + + + + + + + + ] + +
    (#ENV{label_case,#ENV{label,#ENV{nom}}})
    <:formidable:analyse_sans_reponse:>[(#GET{vide}|count)]
    <:formidable:analyse_avec_reponse:>[(#GET{plein}|count)]
    <:formidable:analyse_longueur_moyenne:>#GET{moyenne}
    +
    diff --git a/www/plugins/formidable_1_0/saisies-analyses/case.html b/www/plugins/formidable_1_0/saisies-analyses/case.html new file mode 100644 index 00000000..51a9faf9 --- /dev/null +++ b/www/plugins/formidable_1_0/saisies-analyses/case.html @@ -0,0 +1,27 @@ +#SET{oui,0} +#SET{non,0} + + [(#VALEUR|oui) + #SET{oui,#GET{oui}|plus{1}} + ] + [(#VALEUR|non) + #SET{non,#GET{non}|plus{1}} + ] + + +
    <:item_oui:>#GET{oui}
    <:item_non:>#GET{non}
    <:saisies:vue_sans_reponse:>#GET{diff}
    #VALEUR#GET{nb}
    <:saisies:vue_sans_reponse:>#GET{diff}
    #INFO_TITRE{auteur, #GET{id_auteur}}#VALEUR
    [

    (#ENV{texte})

    ]
    <:item_oui:>#GET{oui}
    <:item_non:>#GET{non}
    <:saisies:vue_sans_reponse:>#GET{diff}
    #VALEUR#GET{nb}
    <:saisies:vue_sans_reponse:>#GET{diff}
    <:formidable:analyse_sans_reponse:>[(#GET{vide}|count)]
    <:formidable:analyse_avec_reponse:>[(#GET{plein}|count)]
    <:formidable:analyse_sans_reponse:>[(#GET{vide}|count)]
    <:formidable:analyse_avec_reponse:>[(#GET{plein}|count)]
    <:formidable:analyse_sans_reponse:>[(#GET{vide}|count)]
    <:formidable:analyse_avec_reponse:>[(#GET{plein}|count)]
    #VALEUR[(#GET{stats}|table_valeur{choix-#CLE}|sinon{0})]
    <:saisies:vue_sans_reponse:>#GET{diff}
    #VALEUR[(#GET{stats}|table_valeur{choix-#CLE}|sinon{0})]
    <:saisies:vue_sans_reponse:>#GET{diff}
    +[] + + + + + + + + + + + + + + + + + + +
    (#ENV*{titre,#GRAND_TOTAL|singulier_ou_pluriel{gis:info_1_gis,gis:info_nb_gis}})
    [(#TRI{multi titre,<:info_titre:>,ajax})][(#TRI{multi pays,<:gis:label_pays:>,ajax})][(#TRI{multi ville,<:gis:label_ville:>,ajax})][(#TRI{id_gis,<:info_numero_abbreviation:>,ajax})]
    [(#LOGO_GIS|image_reduire{20,20})][(#TITRE|sinon{<:ecrire:info_sans_titre:>})]#PAYS#VILLE#ID_GIS
    +[

    (#PAGINATION{prive})

    ] +
    + +[ +
    (#ENV*{sinon,''})
    +] \ No newline at end of file diff --git a/www/plugins/gis/prive/objets/liste/gis_associer.html b/www/plugins/gis/prive/objets/liste/gis_associer.html new file mode 100644 index 00000000..ff8a6f75 --- /dev/null +++ b/www/plugins/gis/prive/objets/liste/gis_associer.html @@ -0,0 +1,55 @@ +[(#SET{defaut_tri,#ARRAY{ + multi titre,1, +}}) +] +#SET{exclus,#ENV{objet_source}|lister_objets_lies{#ENV{objet},#ENV{id_objet},#ENV{_objet_lien}}} +#SET{debut,#ENV{debutgisa,#EVAL{_request("debutgisa");}}} + + +[(#REM) En cas de pagination indirecte @32, il faut refaire le set car la boucle +a mis a jour la valeur avec la page reelle] +#SET{debut,#ENV{debutgisa,#EVAL{_request("debutgisa");}}} +#ANCRE_PAGINATION +[

    <:info_resultat_recherche:> «(#ENV{recherche})»

    ] +
    + +[] + + + + + + + + + + + + + + + + +
    (#ENV*{titre,#GRAND_TOTAL|singulier_ou_pluriel{gis:info_1_gis,gis:info_nb_gis}}) + + + + + + +
    [(#TRI{multi titre,<:info_titre:>,ajax})] 
    [(#CHEMIN_IMAGE{gis-16.png}|balise_img)][(#LOGO_GIS|image_reduire{20,20})][(#TITRE|sinon{<:ecrire:info_sans_titre:>})]
    +[

    (#PAGINATION{prive})

    ] +
    +
    +[(#ENV{recherche}|oui) +
    +[(#VAL{gis:info_recherche_gis_zero}|_T{#ARRAY{cherche_gis,#ENV{recherche}}})] + + + + + + +
    +] diff --git a/www/plugins/gis/prive/objets/liste/gis_associer_fonctions.php b/www/plugins/gis/prive/objets/liste/gis_associer_fonctions.php new file mode 100644 index 00000000..891b756d --- /dev/null +++ b/www/plugins/gis/prive/objets/liste/gis_associer_fonctions.php @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/www/plugins/gis/prive/objets/liste/gis_lies.html b/www/plugins/gis/prive/objets/liste/gis_lies.html new file mode 100644 index 00000000..e73d30ca --- /dev/null +++ b/www/plugins/gis/prive/objets/liste/gis_lies.html @@ -0,0 +1,44 @@ +[(#SET{defaut_tri,#ARRAY{ + multi titre,1, + id_gis,1 +}}) +] +#SET{selection,#VAL{gis}|lister_objets_lies{#ENV{objet},#ENV{id_objet},#ENV{_objet_lien}}} + + +#ANCRE_PAGINATION +
    + +[] + + + + + + + + + + + + + + + + +
    (#ENV*{titre,#GRAND_TOTAL|singulier_ou_pluriel{gis:info_1_gis,gis:info_nb_gis}})
    [(#TRI{multi titre,<:info_titre:>,ajax})] 
    [(#CHEMIN_IMAGE{gis-16.png}|balise_img)][(#LOGO_GIS|image_reduire{20,20})][(#TITRE|sinon{<:ecrire:info_sans_titre:>})] + [(#BOUTON_ACTION{ + <:gis:info_supprimer_lien:> [(#CHEMIN_IMAGE{supprimer-12.png}|balise_img{'X'})], + #URL_ACTION_AUTEUR{editer_lien_gis,delier/#ID_GIS/#OBJET/#ID_OBJET,#SELF}, + ajax})] +
    +[

    (#PAGINATION{prive})

    ] +[(#GRAND_TOTAL|>{3}|oui)
    ] +[(#INCLURE{fond=modeles/carte_gis_preview,id_objet,objet})] +
    +
    +
    +[(#ENV*{titre,<:gis:info_aucun_gis:>}) ] +
    + diff --git a/www/plugins/gis/prive/objets/liste/gis_lies_fonctions.php b/www/plugins/gis/prive/objets/liste/gis_lies_fonctions.php new file mode 100644 index 00000000..891b756d --- /dev/null +++ b/www/plugins/gis/prive/objets/liste/gis_lies_fonctions.php @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/www/plugins/gis/prive/objets/liste/gis_tous.html b/www/plugins/gis/prive/objets/liste/gis_tous.html new file mode 100644 index 00000000..c5eee52c --- /dev/null +++ b/www/plugins/gis/prive/objets/liste/gis_tous.html @@ -0,0 +1,39 @@ + +[(#ANCRE_PAGINATION)] + diff --git a/www/plugins/gis/prive/objets/liste/objets_gis.html b/www/plugins/gis/prive/objets/liste/objets_gis.html new file mode 100644 index 00000000..d0a22cb9 --- /dev/null +++ b/www/plugins/gis/prive/objets/liste/objets_gis.html @@ -0,0 +1,41 @@ +[(#SET{defaut_tri,#ARRAY{ + objet,#ENV{objet_sens,-1}, + id_objet,1 +}}) +] +#ANCRE_PAGINATION +
    + +[] + + + + + + + + + + + + + + + + + + + + +
    (#ENV*{titre,#GRAND_TOTAL|singulier_ou_pluriel{gis:info_1_objet_gis,gis:info_nb_objets_gis}})
    [(#TRI{objet,<:gis:info_objet:>,ajax})][(#TRI{id_objet,<:gis:info_id_objet:>,ajax})]<:gis:titre_objet:>
    [(#OBJET|objet_icone{16})][(#OBJET|objet_info{texte_objet}|_T)][(#ID_OBJET)]#INFO_TITRE{#OBJET,#ID_OBJET} + [(#BOUTON_ACTION{ + <:gis:info_supprimer_lien:> [(#CHEMIN_IMAGE{supprimer-12.png}|balise_img{'X'})], + #URL_ACTION_AUTEUR{editer_lien_gis,delier/#ID_GIS/#OBJET/#ID_OBJET,#SELF}, + ajax})] +
    +[

    (#PAGINATION{prive})

    ] +
    +
    [ +
    (#ENV*{sinon,''})
    +] diff --git a/www/plugins/gis/prive/objets/liste/objets_gis_simple.html b/www/plugins/gis/prive/objets/liste/objets_gis_simple.html new file mode 100644 index 00000000..688e540a --- /dev/null +++ b/www/plugins/gis/prive/objets/liste/objets_gis_simple.html @@ -0,0 +1,16 @@ + + +#ANCRE_PAGINATION +
    +#SET{total,#GRAND_TOTAL} +

    [(#GET{total}|singulier_ou_pluriel{gis:info_1_objet_gis,gis:info_nb_objets_gis})]

    + +[

    (#PAGINATION{prive})

    ] +
    +
    diff --git a/www/plugins/gis/prive/squelettes/contenu/configurer_gis.html b/www/plugins/gis/prive/squelettes/contenu/configurer_gis.html new file mode 100644 index 00000000..7c3b5c2a --- /dev/null +++ b/www/plugins/gis/prive/squelettes/contenu/configurer_gis.html @@ -0,0 +1,6 @@ +[(#AUTORISER{configurer,gis}|sinon_interdire_acces)] +

    <:gis:cfg_titre_gis:>

    + +
    +#FORMULAIRE_CONFIGURER_GIS +
    diff --git a/www/plugins/gis/prive/squelettes/contenu/gis.html b/www/plugins/gis/prive/squelettes/contenu/gis.html new file mode 100644 index 00000000..e6322cb4 --- /dev/null +++ b/www/plugins/gis/prive/squelettes/contenu/gis.html @@ -0,0 +1,23 @@ + +[(#BOITE_OUVRIR{[ + [(#AUTORISER{modifier,gis,#ID_GIS}) + [(#URL_ECRIRE{gis_edit,id_gis=#ID_GIS}|icone_verticale{<:gis:texte_modifier_gis:>,gis,edit,right ajax preload})] + ] +

    (#TITRE|sinon{<:info_sans_titre:>})[(#CHEMIN_IMAGE{gis-24.png}|balise_img{gis,cadre-icone})]

    +],simple fiche_objet})] + +[(#INCLURE{fond=modeles/carte_gis_preview,id_gis})] + +
    + +
    + +,env,ajax} /> + +#BOITE_FERMER + +#PIPELINE{afficher_complement_objet,#ARRAY{args,#ARRAY{type,gis,id,#ID_GIS},data,'
    '}} + + +[(#ENV**{exec}|=={gis_edit}|?{#INCLURE{fond=prive/squelettes/contenu/gis_edit,redirect='',env,retourajax=oui},#REM|sinon_interdire_acces})] + diff --git a/www/plugins/gis/prive/squelettes/contenu/gis_edit.html b/www/plugins/gis/prive/squelettes/contenu/gis_edit.html new file mode 100644 index 00000000..6f0c67fa --- /dev/null +++ b/www/plugins/gis/prive/squelettes/contenu/gis_edit.html @@ -0,0 +1,36 @@ +[(#ID_GIS|oui) + [(#AUTORISER{modifier,gis,#ID_GIS}|sinon_interdire_acces)] +][(#ID_GIS|non) + [(#AUTORISER{creer,gis,#ID_GIS,'','',#ARRAY{associer_objet,#ENV{associer_objet}}}|sinon_interdire_acces)] +] +#SET{redirect,#ENV{redirect,#ENV{id_gis}|?{#URL_ECRIRE{gis,id_gis=#ID_GIS},#URL_ECRIRE{gis_tout}}}} + +#SET{objet, #ENV{objet, ''}} +#SET{id_objet, #ENV{id_objet, 0}} +[(#ENV{associer_objet}|oui) + [(#SET{array_objet, #ENV{associer_objet}|explode{'|'}})] + #SET{objet, #GET{array_objet}|table_valeur{0}} + #SET{id_objet, #GET{array_objet}|table_valeur{1}} +] +
    +
    + [(#ID_GIS|oui) + [(#GET{redirect}|icone_verticale{<:icone_retour:>,gis,'',left retour[(#ENV{retourajax,''}|oui)ajax preload]})] + ] + [ + [(#ID_GIS|?{<:gis:texte_modifier_gis:>,<:gis:texte_creer_gis:>})] +

    (#ENV{titre,#INFO_TITRE{gis,#ID_GIS}|sinon{<:gis:titre_nouveau_point:>}})

    + ] +
    + +#SET{redirect,#ENV{redirect,#ID_GIS|generer_url_entite{gis}}} +[(#ENV{retourajax,''}|oui) + #SET{redirect,'javascript:if (window.jQuery) jQuery(".entete-formulaire .retour a").followLink();'} +
    +] + [(#FORMULAIRE_EDITER_GIS{#ENV{id_gis,oui},#GET{objet},#GET{id_objet},#GET{redirect},'',#ENV{associer_objet}})] +[(#ENV{retourajax,''}|oui) +
    + +] +
    \ No newline at end of file diff --git a/www/plugins/gis/prive/squelettes/contenu/gis_tous.html b/www/plugins/gis/prive/squelettes/contenu/gis_tous.html new file mode 100644 index 00000000..bb5621a2 --- /dev/null +++ b/www/plugins/gis/prive/squelettes/contenu/gis_tous.html @@ -0,0 +1,15 @@ +

    <:gis:editer_gis_titre:>

    + +[(#REM)

    <:gis:editer_gis_explication:>

    ] + +#FORMULAIRE_RECHERCHE_ECRIRE{#SELF,ajax} +
    + + +

    [(#GRAND_TOTAL|singulier_ou_pluriel{gis:info_1_gis,gis:info_nb_gis})]

    + +

    <:gis:info_aucun_gis:>

    + + + +[(#INCLURE{fond=modeles/carte_gis,id_carte_gis=_all,recherche,objets=tous_avec_liens_espace_prive})] diff --git a/www/plugins/gis/prive/squelettes/extra/gis.html b/www/plugins/gis/prive/squelettes/extra/gis.html new file mode 100644 index 00000000..74dad108 --- /dev/null +++ b/www/plugins/gis/prive/squelettes/extra/gis.html @@ -0,0 +1,4 @@ +#BOITE_OUVRIR{'','info'} +[(#URL_PAGE{gis_download}|parametre_url{id_gis,#ENV{id_gis}}|parametre_url{format,kml}|icone_horizontale{<:gis:telecharger_gis{format=KML}:>,telecharger-16})] +[(#URL_PAGE{gis_download}|parametre_url{id_gis,#ENV{id_gis}}|parametre_url{format,gpx}|icone_horizontale{<:gis:telecharger_gis{format=GPX}:>,telecharger-16})] +#BOITE_FERMER \ No newline at end of file diff --git a/www/plugins/gis/prive/squelettes/hierarchie/gis.html b/www/plugins/gis/prive/squelettes/hierarchie/gis.html new file mode 100644 index 00000000..ddd24d5e --- /dev/null +++ b/www/plugins/gis/prive/squelettes/hierarchie/gis.html @@ -0,0 +1,8 @@ + + <:gis:gis_pluriel:> + > + + #TITRE + + <:gis:titre_nouveau_point:> + diff --git a/www/plugins/gis/prive/squelettes/hierarchie/gis_edit.html b/www/plugins/gis/prive/squelettes/hierarchie/gis_edit.html new file mode 100644 index 00000000..f17f81dc --- /dev/null +++ b/www/plugins/gis/prive/squelettes/hierarchie/gis_edit.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/www/plugins/gis/prive/squelettes/navigation/gis_edit.html b/www/plugins/gis/prive/squelettes/navigation/gis_edit.html new file mode 100644 index 00000000..91a9d566 --- /dev/null +++ b/www/plugins/gis/prive/squelettes/navigation/gis_edit.html @@ -0,0 +1,9 @@ +[(#ID_GIS|oui) +#BOITE_OUVRIR{'','info'} +#PIPELINE{boite_infos,#ARRAY{data,'',args,#ARRAY{'type','gis','id',#ID_GIS}}} +#BOITE_FERMER + +
    +#FORMULAIRE_EDITER_LOGO{'gis',#ID_GIS,'',#ENV**} +
    +] diff --git a/www/plugins/gis/prive/squelettes/navigation/gis_tous.html b/www/plugins/gis/prive/squelettes/navigation/gis_tous.html new file mode 100644 index 00000000..66c8916a --- /dev/null +++ b/www/plugins/gis/prive/squelettes/navigation/gis_tous.html @@ -0,0 +1,5 @@ +#INCLURE{fond=prive/objets/liste/gis_tous,env} + +#BOITE_OUVRIR{'',raccourcis} +[(#URL_ECRIRE{gis_edit,nouveau=oui}|icone_horizontale{<:gis:editer_gis_nouveau:>,gis,new})] +#BOITE_FERMER diff --git a/www/plugins/gis/prive/style_prive_plugin_gis.html b/www/plugins/gis/prive/style_prive_plugin_gis.html new file mode 100644 index 00000000..130a35d7 --- /dev/null +++ b/www/plugins/gis/prive/style_prive_plugin_gis.html @@ -0,0 +1,20 @@ +#CACHE{3600*100,cache-client} +#HTTP_HEADER{Content-Type: text/css; charset=iso-8859-15} +#HTTP_HEADER{Vary: Accept-Encoding} + +#SET{claire,##ENV{couleur_claire,edf3fe}} +#SET{foncee,##ENV{couleur_foncee,3874b0}} +#SET{left,#ENV{ltr}|choixsiegal{left,left,right}} +#SET{right,#ENV{ltr}|choixsiegal{left,right,left}} + +/* liste des points exec=gis_tous */ + +.points .liste_items .titre { font-size: small; } +.points .liste_items .titre .numero { float: right; } +.points .liste_items .description, +.points .liste_items .geo { margin: 5px 0 0; color: #666; } +.points .liste_items .geo abbr { border: 0; } +.points .liste_items p.actions { font-size: 0.9em; margin: 5px 0 0; } + +/* Avec OpenLayer, le menu deroulant de spip passe dessous la carte... */ +.olMap .olMapViewport {z-index:0;} diff --git a/www/plugins/gis/prive/themes/spip/images/gis-16.png b/www/plugins/gis/prive/themes/spip/images/gis-16.png new file mode 100644 index 00000000..b0e5a4cd Binary files /dev/null and b/www/plugins/gis/prive/themes/spip/images/gis-16.png differ diff --git a/www/plugins/gis/prive/themes/spip/images/gis-24.png b/www/plugins/gis/prive/themes/spip/images/gis-24.png new file mode 100755 index 00000000..6cb9f540 Binary files /dev/null and b/www/plugins/gis/prive/themes/spip/images/gis-24.png differ diff --git a/www/plugins/gis/prive/themes/spip/images/gis-new-16.png b/www/plugins/gis/prive/themes/spip/images/gis-new-16.png new file mode 100644 index 00000000..e84098af Binary files /dev/null and b/www/plugins/gis/prive/themes/spip/images/gis-new-16.png differ diff --git a/www/plugins/gis/saisies/carte.html b/www/plugins/gis/saisies/carte.html new file mode 100644 index 00000000..e86d9ec1 --- /dev/null +++ b/www/plugins/gis/saisies/carte.html @@ -0,0 +1,250 @@ +[(#REM) + + Saisie carte + + Parametres optionnels: + + - lat = 48.3 latitude du centre de la carte + - lon = -4.7 longitude du centre de la carte + - zoom = 5 zoom de la carte + - sw_lat = lat - 10° latitude du sud-ouest de la bounding box + - sw_lon = lon - 10° longitude du sud-ouest de la bounding box + - ne_lat = lat + 10° latitude du nord-est de la bounding box + - ne_lon = lon + 10° longitude du nord-est de la bounding box + - largeur = 100% + - hauteur = 350px + +] + +[(#SET{init_lat,#ENV{lat,#CONFIG{gis/lat,0}}})] +[(#SET{init_lon,#ENV{lon,#CONFIG{gis/lon,0}}})] +[(#SET{init_zoom,#ENV{zoom,#CONFIG{gis/zoom,0}}})] +[(#REM) On utilise la bounding box seulement si le centre n'a pas été donné et si les quatre valeurs de la bounding box sont renseignées + Les valeurs par defaut sont "centre +/- 10°", ce qui est naze, mais c'est un cas normalement impossible +] +[(#ENV{lat}|ou{#ENV{lon}}|non|et{#ENV{sw_lat}}|et{#ENV{sw_lon}}|et{#ENV{ne_lat}}|et{#ENV{ne_lon}}) + #SET{utiliser_bb, oui} + #SET{init_sw_lat,#ENV{sw_lat,#GET{lat}|moins{10}}} + #SET{init_sw_lon,#ENV{sw_lon,#GET{lon}|moins{10}}} + #SET{init_ne_lat,#ENV{ne_lat,#GET{lat}|plus{10}}} + #SET{init_ne_lon,#ENV{ne_lon,#GET{lon}|plus{10}}} +] + +
  • +#ENV*{inserer_debut} +
    + +#ENV*{inserer_fin} +
  • +[(#GET{geocoder}|oui) +
  • + + + <:info_rechercher:> +
  • ] diff --git a/www/plugins/gis/svn.revision b/www/plugins/gis/svn.revision new file mode 100644 index 00000000..15e48914 --- /dev/null +++ b/www/plugins/gis/svn.revision @@ -0,0 +1,10 @@ + + +Origine: file:///home/svn/repository/spip-zone/_plugins_/gis/trunk +Revision: 73835 +Dernier commit: 2013-06-24 20:00:11 +0200 + +file:///home/svn/repository/spip-zone/_plugins_/gis/trunk +73835 +2013-06-24 20:00:11 +0200 + \ No newline at end of file diff --git a/www/plugins/gis/tests/gis_connect_sql.php b/www/plugins/gis/tests/gis_connect_sql.php new file mode 100644 index 00000000..b40ee7eb --- /dev/null +++ b/www/plugins/gis/tests/gis_connect_sql.php @@ -0,0 +1,46 @@ +$essai) + $err = array_merge(tester_fun($f, $essai),$err); + + // si le tableau $err est pas vide ca va pas + if ($err) { + echo ('
    ' . join('', $err) . '
    '); + } else { + echo "OK"; + } + +?> \ No newline at end of file diff --git a/www/plugins/menus_1/action/editer_menu.php b/www/plugins/menus_1/action/editer_menu.php new file mode 100644 index 00000000..b93b43e3 --- /dev/null +++ b/www/plugins/menus_1/action/editer_menu.php @@ -0,0 +1,144 @@ + 0) $err = menu_set($id_menu); + + // S'il y a un fichier on tente d'importer son contenu + if ($_FILES['import']){ + $fichier = $_FILES['import']['tmp_name']; + $yaml = ''; + lire_fichier($fichier, $yaml); + // Si on a bien recupere une chaine on tente de la decoder + if ($yaml){ + include_spip('inc/yaml'); + $entrees = yaml_decode($yaml); + // Si le decodage marche on importe alors le contenu + if (is_array($entrees)){ + menus_importer($entrees, $id_menu); + } + } + } + + if (_request('redirect')) { + $redirect = parametre_url(urldecode(_request('redirect')), + 'id_menu', $id_menu, '&') . $err; + + include_spip('inc/headers'); + redirige_par_entete($redirect); + } + else + return array($id_menu,$err); +} + +/** + * Appelle la fonction de modification d'un menu + * + * @param int $id_menu + * @param unknown_type $set + * @return $err + */ +function menu_set($id_menu, $set=null) { + $err = ''; + + $c = array(); + foreach (array( + 'titre', + 'identifiant', + 'css' + ) as $champ) + $c[$champ] = _request($champ,$set); + + include_spip('inc/modifier'); + revision_menu($id_menu, $c); + + return $err; +} + +/** + * Crée un nouveau menu et retourne son ID + * + * @return int id_menu + */ +function insert_menu() { + $champs = array('titre'=>''); // eviter le bug de req/sqlite < 2.1.3 + // Envoyer aux plugins + $champs = pipeline('pre_insertion', + array( + 'args' => array( + 'table' => 'spip_menus', + ), + 'data' => $champs + ) + ); + $id_menu = sql_insertq("spip_menus"); + + return $id_menu; +} + +/** + * Enregistre une révision de menu + * + * @param int $id_menu + * @param array $c + * @return + */ +function revision_menu ($id_menu, $c=false) { + $invalideur = "id='id_menu/$id_menu'"; + + modifier_contenu('menu', $id_menu, + array( + 'nonvide' => array('titre' => _T('info_sans_titre')), + 'invalideur' => $invalideur + ), + $c); + + return ''; // pas d'erreur +} + +function menus_importer($entrees, $id_menu){ + // On lit chaque entree de premier niveau + foreach ($entrees as $cle => $entree){ + // On ajoute cette entree + $id_menus_entree = sql_insertq( + 'spip_menus_entrees', + array( + 'id_menu' => $id_menu, + 'rang' => ($cle+1), // les entrees sont dans l'ordre des rangs + 'type_entree' => $entree['type_entree'], + 'parametres' => serialize($entree['parametres']) + ) + ); + + // S'il existe un sous-menu pour cette entree on le cree + if (is_array($entree['sous_menu'])){ + $id_sous_menu = sql_insertq( + 'spip_menus', + array( + 'id_menus_entree' => $id_menus_entree + ) + ); + // Puis dedans on importe les entrees correspondantes + menus_importer($entree['sous_menu'], $id_sous_menu); + } + } +} +?> \ No newline at end of file diff --git a/www/plugins/menus_1/action/editer_menus_entree.php b/www/plugins/menus_1/action/editer_menus_entree.php new file mode 100644 index 00000000..8219c83a --- /dev/null +++ b/www/plugins/menus_1/action/editer_menus_entree.php @@ -0,0 +1,110 @@ + 0) + $err = menus_entree_set($id_menus_entree); + + if (_request('redirect')) { + $redirect = parametre_url(urldecode(_request('redirect')), + 'id_menus_entree', $id_menus_entree, '&') . $err; + + include_spip('inc/headers'); + redirige_par_entete($redirect); + } + else + return array($id_menus_entree,$err); +} + +/** + * Crée une nouvelle entree de menu et retourne son ID + * + * @return int id_menus_entree + */ +function insert_menus_entree($id_menu) { + // Envoyer aux plugins + $champs = pipeline('pre_insertion', + array( + 'args' => array( + 'table' => 'spip_menus_entrees', + ), + 'data' => $champs + ) + ); + + $id_menus_entree = sql_insertq("spip_menus_entrees",array('id_menu'=>$id_menu)); + + return $id_menus_entree; +} + +/** + * Appelle la fonction de modification d'une entrée de menu + * + * @param int $id_menu_entree + * @param unknown_type $set + * @return $err + */ +function menus_entree_set($id_menus_entree, $set=null) { + $err = ''; + + $c = array(); + $c['id_menu'] = _request('id_menu_nouvelle_entree'); + + foreach (array( + 'rang', + 'type_entree', + 'parametres' + ) as $champ) + $c[$champ] = _request($champ, $set); + + $c['parametres'] = is_array($c['parametres']) ? $c['parametres'] : array(); + $c['parametres'] = serialize($c['parametres']); + + include_spip('inc/menus'); + $entrees = menus_lister_disponibles(); + $infos = $entrees[$c['type_entree']]; + + include_spip('inc/modifier'); + revision_menus_entree($id_menus_entree, $c); + + return $err; +} + +/** + * Enregistre une révision d'entree de menu + * + * @param int $id_menus_entree + * @param array $c + * @return + */ +function revision_menus_entree ($id_menus_entree, $c=false) { + $invalideur = "id='id_menus_entree/$id_menus_entree'"; + + modifier_contenu('menus_entree', $id_menus_entree, + array( + 'invalideur' => $invalideur + ), + $c); + + return ''; // pas d'erreur +} +?> \ No newline at end of file diff --git a/www/plugins/menus_1/action/exporter_menu.php b/www/plugins/menus_1/action/exporter_menu.php new file mode 100644 index 00000000..b24f21ac --- /dev/null +++ b/www/plugins/menus_1/action/exporter_menu.php @@ -0,0 +1,72 @@ + 0){ + include_spip('base/abstract_sql'); + include_spip('inc/yaml'); + + // On récupère l'identifiant du menu pour le nom de fichier + $identifiant = sql_getfetsel( + 'identifiant', + 'spip_menus', + 'id_menu = '.$id_menu + ); + + // On calcule le tableau des entrees + $entrees = exporter_menu_recursif($id_menu); + + // On envode en yaml + $export = yaml_encode($entrees); + } + + Header("Content-Type: text/x-yaml;"); + Header("Content-Disposition: attachment; filename=menu-$identifiant.yaml"); + Header("Content-Length: ".strlen($export)); + echo $export; + exit(); + +} + +function exporter_menu_recursif($id_menu){ + $entrees = sql_allfetsel( + 'id_menus_entree, type_entree, parametres', + 'spip_menus_entrees', + 'id_menu = '.$id_menu, + '', + 'rang' + ); + + // Pour chaque entree on nettoie et on ajoute le sous-menu eventuel + foreach ($entrees as $cle => $entree){ + // On remet au propre les parametres + $entrees[$cle]['parametres'] = unserialize($entree['parametres']); + + // On regarde s'il existe un sous-menu + $id_sous_menu = intval(sql_getfetsel( + 'id_menu', + 'spip_menus', + 'id_menus_entree = '.$entree['id_menus_entree'] + )); + + // Si le menu existe, il faut l'ajouter au tableau + if ($id_sous_menu > 0){ + $entrees[$cle]['sous_menu'] = exporter_menu_recursif($id_sous_menu); + } + + // On enleve id_menus_entree car on en a pas besoin + unset($entrees[$cle]['id_menus_entree']); + } + + return $entrees; +} + +?> diff --git a/www/plugins/menus_1/action/supprimer_menu.php b/www/plugins/menus_1/action/supprimer_menu.php new file mode 100644 index 00000000..086fea44 --- /dev/null +++ b/www/plugins/menus_1/action/supprimer_menu.php @@ -0,0 +1,19 @@ + 0){ + include_spip('inc/menus'); + menus_supprimer_menu($id_menu); + } + +} + +?> \ No newline at end of file diff --git a/www/plugins/menus_1/balise/menus_afficher_entree.php b/www/plugins/menus_1/balise/menus_afficher_entree.php new file mode 100644 index 00000000..81ac8575 --- /dev/null +++ b/www/plugins/menus_1/balise/menus_afficher_entree.php @@ -0,0 +1,26 @@ +code = "(!$id_menus_entree) ? _T('zbug_champ_hors_motif', array('champ'=>'AFFICHER_ENTREE', 'motif'=>'MENUS_ENTREES')) : recuperer_fond( + 'menus/'.$type_entree, + array_merge(unserialize($parametres), array($contexte=>true, env=>\$Pile[0])) + )"; + + return $p; + +} + +?> diff --git a/www/plugins/menus_1/base/menus_tables.php b/www/plugins/menus_1/base/menus_tables.php new file mode 100644 index 00000000..0bca5d47 --- /dev/null +++ b/www/plugins/menus_1/base/menus_tables.php @@ -0,0 +1,59 @@ + "bigint(21) NOT NULL", + "id_menus_entree" => "bigint(21) DEFAULT '0' NOT NULL", + "titre" => "text DEFAULT '' NOT NULL", + "identifiant" => "varchar(255) default '' not null", + "css" => "tinytext DEFAULT '' NOT NULL" + ); + + $menus_cles = array( + "PRIMARY KEY" => "id_menu", + "KEY id_menus_entree" => "id_menus_entree" + ); + + $tables_principales['spip_menus'] = array( + 'field' => &$menus, + 'key' => &$menus_cles + ); + + // Table menus_elements ---------------------------------------------------- + $menus_entrees = array( + "id_menus_entree" => "bigint(21) NOT NULL", + "id_menu" => "bigint(21) DEFAULT '0' NOT NULL", + "rang" => "smallint DEFAULT '1' NOT NULL", + "type_entree" => "tinytext DEFAULT '' NOT NULL", + "parametres" => "text DEFAULT '' NOT NULL" + ); + + $menus_entrees_cles = array( + "PRIMARY KEY" => "id_menus_entree", + "KEY id_menu" => "id_menu" + ); + + $tables_principales['spip_menus_entrees'] = array( + 'field' => &$menus_entrees, + 'key' => &$menus_entrees_cles + ); + + return $tables_principales; +} + +?> diff --git a/www/plugins/menus_1/css/menuspip.css b/www/plugins/menus_1/css/menuspip.css new file mode 100644 index 00000000..eeaa2853 --- /dev/null +++ b/www/plugins/menus_1/css/menuspip.css @@ -0,0 +1,58 @@ + +.formulaire_editer_menu_entrees{ + position:relative; +} +.formulaire_editer_menu_entrees .image_loading{ + position:absolute; + top:50%; + left:50%; +} + +.formulaire_spip ul.menus_entrees{ + clear:both; +} +.formulaire_spip ul.menus_entrees ul.menus_entrees{ + border-left:1px solid #ccc; + border-top:1px solid #ccc; +} + +.formulaire_spip ul.menus_entrees li.entree{ + clear:both; + padding-left : 34px; + padding-right:0; + padding-bottom:0; + background-position:5px 10px; + background-repeat:no-repeat; + border-bottom:1px solid #ccc; +} + +.formulaire_spip ul.menus_entrees .ligne{ + position:relative; +} + +.formulaire_spip ul.menus_entrees .actions{ + position:absolute; + right:5px; + top:5px; + text-align:right; +} + +.formulaire_spip ul.menus_entrees .titre{ + font-weight:bold; + line-height:29px; +} +.formulaire_spip ul.menus_entrees .infos{ + font-size:0.9em; + margin-bottom:5px; +} + +.formulaire_spip ul.menus_entrees .actions button{ + border:none; + padding:0; + margin:0; + cursor:pointer; + +} +.formulaire_spip ul.menus_entrees img{ + vertical-align:middle; +} diff --git a/www/plugins/menus_1/formulaires/configurer_menus.html b/www/plugins/menus_1/formulaires/configurer_menus.html new file mode 100644 index 00000000..e69de29b diff --git a/www/plugins/menus_1/formulaires/configurer_menus.php b/www/plugins/menus_1/formulaires/configurer_menus.php new file mode 100644 index 00000000..7c82054a --- /dev/null +++ b/www/plugins/menus_1/formulaires/configurer_menus.php @@ -0,0 +1,38 @@ +$entree){ + $data[$type_entree] = ' '.$entree['nom']; + } + + $saisies = array( + array( + 'saisie' => 'checkbox', + 'options' => array( + 'nom' => 'entrees_masquees', + 'explication' => 'Cochez les entrées que vous voulez masquer lors de la création d\'un menu.', + 'datas' => $data, + 'li_class' => 'pleine_largeur', + 'defaut' => lire_config('menus/entrees_masquees',array()) + ) + ) + ); + + return $saisies; +} + +?> diff --git a/www/plugins/menus_1/formulaires/editer_menu.html b/www/plugins/menus_1/formulaires/editer_menu.html new file mode 100644 index 00000000..55e1a0c4 --- /dev/null +++ b/www/plugins/menus_1/formulaires/editer_menu.html @@ -0,0 +1,74 @@ +
    + [

    (#ENV*{message_ok})

    ] + [

    (#ENV*{message_erreur})

    ] + + [(#ENV{editable}) +
    + [(#REM) declarer les hidden qui declencheront le service du formulaire + parametre : url d'action ] + #ACTION_FORMULAIRE{#ENV{action}} + +
      +
    • +
      +

      <:menus:formulaire_partie_identification:>

      +
        + #SET{obli,'obligatoire'} + #SET{name,titre} + #SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} +
      • + + [(#GET{erreurs})] + +
      • + + #SET{name,identifiant} + #SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} +
      • + +
        <:menus:formulaire_identifiant_explication:>
        + [(#GET{erreurs})] + +
      • + + #SET{name,css} + #SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} +
      • + +
        <:menus:formulaire_css_explication:>
        + [(#GET{erreurs})] + +
      • + + [(#REM) Seulement si c'est un nouveau et qu'il y a le plugin YAML)] + [(#ENV{nouveau}|oui) + [(#PLUGIN{yaml}|oui) + #SET{name,import} + #SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} +
      • + +
        <:menus:formulaire_importer_explication:>
        + [(#GET{erreurs})] + +
      • + ] + ] +
      + +

      + +

      +
      +
    • +
    +
    + ] +
    + \ No newline at end of file diff --git a/www/plugins/menus_1/formulaires/editer_menu.php b/www/plugins/menus_1/formulaires/editer_menu.php new file mode 100644 index 00000000..66e43b7c --- /dev/null +++ b/www/plugins/menus_1/formulaires/editer_menu.php @@ -0,0 +1,122 @@ +$id_menu)); + } + } + elseif (!$nouveau){ + $contexte['editable'] = false; + $contexte['message_erreur'] = _T('menus:erreur_parametres'); + } + + // Si on peut bien éditer le menu, on déclare ce qu'il faut + if ($contexte['editable']){ + $contexte['id_menu'] = $id_menu; + $contexte['nouveau'] = $nouveau; + + // Les champs du menu principal + $contexte['titre'] = ''; + $contexte['identifiant'] = ''; + $contexte['css'] = ''; + $contexte['import'] = ''; + + $valeurs = formulaires_editer_objet_charger('menu',$id_menu,0,0,'', '', '', ''); + + $contexte = array_merge($contexte, $valeurs); + + // Déclarer l'action pour SPIP 2.0 + $contexte['_action'] = array('editer_menu', $id_menu); + // On sait toujours si on est sur un menu déjà créé ou pas + $contexte['_hidden'] .= ''; + } + } + else{ + $contexte['editable'] = false; + $contexte['message_erreur'] = _T('menus:erreur_autorisation'); + } + + return $contexte; +} + +function formulaires_editer_menu_verifier($id_menu, $nouveau){ + include_spip('base/abstract_sql'); + $erreurs = array(); + + $oblis = array('titre','identifiant'); + $erreurs = formulaires_editer_objet_verifier('menu',$id_menu,$oblis); + + $identifiant = _request('identifiant'); + + // On vérifie que l'identifiant est bon + if (!$erreurs['identifiant'] and !preg_match('/^[\w]+$/', $identifiant)) + $erreurs['identifiant'] = _T('menus:erreur_identifiant_forme'); + // On vérifie que l'identifiant n'est pas déjà utilisé + if (!$erreurs['identifiant']){ + $deja = sql_getfetsel( + 'id_menu', + 'spip_menus', + array( + 'identifiant = '.sql_quote($identifiant), + 'id_menu > 0', + 'id_menu !='.intval(_request('id_menu')) + ) + ); + if ($deja) + $erreurs['identifiant'] = _T('menus:erreur_identifiant_deja'); + } + + return $erreurs; +} + +function formulaires_editer_menu_traiter($id_menu, $nouveau){ + $res = formulaires_editer_objet_traiter('menu', $id_menu, 0, 0, '', '', '', ''); + + // Si ça va pas on errorise + if (!$res['id_menu']){ + $res['message_erreur'] = _T('menus:erreur_mise_a_jour'); + } + else{ + // Si on est dans l'espace privé on force la redirection + if (_request('exec') == 'menus_editer') + $res['redirect'] = generer_url_ecrire('menus_editer', "id_menu=".$res['id_menu']); + } + // Dans tous les cas le formulaire est toujours éditable + $res['editable'] = true; + + return $res; +} + +?> diff --git a/www/plugins/menus_1/formulaires/editer_menus_entree.html b/www/plugins/menus_1/formulaires/editer_menus_entree.html new file mode 100644 index 00000000..5c5b3a1f --- /dev/null +++ b/www/plugins/menus_1/formulaires/editer_menus_entree.html @@ -0,0 +1,40 @@ +
    + [

    (#ENV*{message_ok})

    ] + [

    (#ENV*{message_erreur})

    ] + + [(#ENV{editable}) + +
    + [(#REM) declarer les hidden qui declencheront le service du formulaire + parametre : url d'action ] + #ACTION_FORMULAIRE{#ENV{action}} + +
      +
    • +
      +

      <:menus:formulaire_partie_construction:>

      + + + #INCLURE{fond=formulaires/inc-menus_entrees, env} +
      +
    • +
    +
    + + ] +
    + + \ No newline at end of file diff --git a/www/plugins/menus_1/formulaires/editer_menus_entree.php b/www/plugins/menus_1/formulaires/editer_menus_entree.php new file mode 100644 index 00000000..474976c1 --- /dev/null +++ b/www/plugins/menus_1/formulaires/editer_menus_entree.php @@ -0,0 +1,252 @@ +'; + + return $valeurs; +} + +function formulaires_editer_menus_entree_verifier($id_menu,$id_menus_entree='new'){ + $erreurs = formulaires_editer_objet_verifier('menus_entree',$id_menus_entree,array()); + + // Si on demande une nouvelle entree pour un menu -------------------------- + + if ($id_menu = intval(_request('demander_nouvelle_entree'))){ + // S'il n'y a pas encore de type d'entree de choisi + if (!($type_entree = _request('type_entree'))){ + include_spip('inc/config'); + $erreurs['id_menu_nouvelle_entree'] = $id_menu; + // On charge les différents types d'entrées disponibles + $masque = array_flip(lire_config('menus/entrees_masquees', array())); + $erreurs['entrees'] = array_diff_key(menus_lister_disponibles(), $masque); + if (_request('suivant')) + $erreurs['type'] = _T('menus:erreur_type_menu'); + } + // Si on a choisi un type d'entree + else{ + $erreurs['id_menu_nouvelle_entree'] = $id_menu; + $erreurs['type_entree'] = $type_entree; + // On charge les infos du type choisi + $entrees = menus_lister_disponibles(); + $erreurs['infos_'.$type_entree] = $entrees[$type_entree]; + } + } + + // Si on veut modifier une entrée ------------------------------------------ + + if ($id_menus_entree = intval(_request('modifier_entree'))){ + // On va chercher l'existant de cette entrée + $entree = sql_fetsel( + 'type_entree, parametres', + 'spip_menus_entrees', + 'id_menus_entree = '.$id_menus_entree + ); + $type_entree = $entree['type_entree']; + $parametres = unserialize($entree['parametres']); + + $erreurs = array_merge($erreurs, $parametres); + $erreurs['id_menus_entree'] = $id_menus_entree; + $erreurs['type_entree'] = $type_entree; + // On charge les infos du type choisi + $entrees = menus_lister_disponibles(); + $erreurs['infos_'.$type_entree] = $entrees[$type_entree]; + } + + // Si on valide une entree pour un menu ------------------------------------ + + if (($id_menu = intval(_request('id_menu_nouvelle_entree')) or $id_menus_entree = intval(_request('id_menus_entree'))) and _request('enregistrer')){ + $type_entree = _request('type_entree'); + $parametres_envoyes = _request('parametres'); + $entrees = menus_lister_disponibles(); + $infos = $entrees[$type_entree]; + // On teste que chaque paramètre obligatoire est bien renseigné + foreach ($infos['parametres'] as $nom=>$parametre){ + if ($parametre['obligatoire']){ + if (!$parametres_envoyes[$nom]){ + if ($id_menu) + $erreurs['id_menu_nouvelle_entree'] = $id_menu; + if ($id_menus_entree) + $erreurs['id_menus_entree'] = $id_menus_entree; + $erreurs['type_entree'] = $type_entree; + $erreurs['infos_'.$type_entree] = $infos; + $erreurs['parametres'][$nom] = _T('info_obligatoire'); + } + } + } + } + + return $erreurs; +} + +function formulaires_editer_menus_entree_traiter($id_menu,$id_menus_entree='new'){ + $retours = array(); + + // Si on valide une entree pour un menu ------------------------------------ + + if (($id_menu = intval(_request('id_menu_nouvelle_entree')) or $id_menus_entree = intval(_request('id_menus_entree'))) and _request('enregistrer')){ + $res = formulaires_editer_objet_traiter('menus_entree', $id_menus_entree, 0, 0, '', '', '', ''); + if (!$res['id_menus_entree']) + $retours['message_erreur'] = _T('menus:erreur_mise_a_jour'); + } + + // Si on demande la supression d'une entrée -------------------------------- + + if ($id_menus_entree = intval(_request('supprimer_entree'))){ + $ok = menus_supprimer_entree($id_menus_entree); + if (!$ok) + $retours['message_erreur'] = _T('menus:erreur_mise_a_jour'); + } + + // Si on demande à déplacer une entrée ------------------------------------- + + if ($params = _request('deplacer_entree')){ + preg_match('/^([\d]+)-(bas|haut)$/', $params, $params); + array_shift($params); + list($id_menus_entree, $sens) = $params; + $id_menus_entree = intval($id_menus_entree); + + // On récupère des infos sur le placement actuel + $entree = sql_fetsel( + 'id_menu, rang', + 'spip_menus_entrees', + 'id_menus_entree = '.$id_menus_entree + ); + $id_menu = intval($entree['id_menu']); + $rang_actuel = intval($entree['rang']); + + // On teste si ya une entrée suivante + $dernier_rang = intval(sql_getfetsel( + 'rang', + 'spip_menus_entrees', + 'id_menu = '.$id_menu, + '', + 'rang desc', + '0,1' + )); + + // Tant qu'on ne veut pas faire de tour complet + if (!($sens == 'bas' and $rang_actuel == $dernier_rang) and !($sens == 'haut' and $rang_actuel == 1)){ + // Alors on ne fait qu'échanger deux entrées + $rang_echange = ($sens == 'bas') ? ($rang_actuel + 1) : ($rang_actuel - 1); + $ok = sql_updateq( + 'spip_menus_entrees', + array( + 'rang' => $rang_actuel + ), + 'id_menu = '.$id_menu.' and rang = '.$rang_echange + ); + if ($ok) + $ok = sql_updateq( + 'spip_menus_entrees', + array( + 'rang' => $rang_echange + ), + 'id_menus_entree = '.$id_menus_entree + ); + } + // Sinon on fait un tour complet en déplaçant tout + else{ + if ($sens == 'bas'){ + // Tout le monde descend d'un rang + $ok = sql_update( + 'spip_menus_entrees', + array( + 'rang' => 'rang + 1' + ), + 'id_menu = '.$id_menu + ); + // L'entrée passe tout en haut + if ($ok) + $ok = sql_updateq( + 'spip_menus_entrees', + array( + 'rang' => 1 + ), + 'id_menus_entree = '.$id_menus_entree + ); + } + else{ + // Tout le monde monte d'un rang + $ok = sql_update( + 'spip_menus_entrees', + array( + 'rang' => 'rang - 1' + ), + 'id_menu = '.$id_menu + ); + // L'entrée passe tout en bas + if ($ok) + $ok = sql_updateq( + 'spip_menus_entrees', + array( + 'rang' => $dernier_rang + ), + 'id_menus_entree = '.$id_menus_entree + ); + } + } + if (!$ok) $retours['message_erreur'] = _T('menus:erreur_mise_a_jour'); + } + + // Si on veut faire un sous-menu ------------------------------------------- + + if ($id_menus_entree = intval(_request('demander_sous_menu'))){ + $id_menu = sql_insertq( + 'spip_menus', + array( + 'id_menus_entree' => $id_menus_entree + ) + ); + if (!$id_menu) $retours['message_erreur'] = _T('menus:erreur_mise_a_jour'); + } + + // Si on veut supprimer un menu -------------------------------------------- + + if ($id_menu = intval(_request('supprimer_menu'))){ + // Est-ce un menu ou un sous-menu ? + $sous_menu = intval(sql_getfetsel( + 'id_menus_entree', + 'spip_menus', + 'id_menu = '.$id_menu + )); + $ok = menus_supprimer_menu($id_menu); + if (!$ok) $retours['message_erreur'] = _T('menus:erreur_mise_a_jour'); + if ($ok and !$sous_menu) $retours['redirect'] = generer_url_ecrire('menus_tous'); + } + + $retours['editable'] = true; + + return $retours; +} + +?> diff --git a/www/plugins/menus_1/formulaires/inc-menus_entrees.html b/www/plugins/menus_1/formulaires/inc-menus_entrees.html new file mode 100644 index 00000000..c1a40081 --- /dev/null +++ b/www/plugins/menus_1/formulaires/inc-menus_entrees.html @@ -0,0 +1,83 @@ +#SET{rang_suivant,1} + diff --git a/www/plugins/menus_1/formulaires/inc-menus_entrees_inexistantes.html b/www/plugins/menus_1/formulaires/inc-menus_entrees_inexistantes.html new file mode 100644 index 00000000..a3aeac36 --- /dev/null +++ b/www/plugins/menus_1/formulaires/inc-menus_entrees_inexistantes.html @@ -0,0 +1,11 @@ +[(#SET{titre, <:menus:formulaire_supprimer_entree:>})] +[(#ENV{titre}|oui) + #SET{titre, #ENV*{titre}|typo} +] + +[(#ENV{appel_formulaire}|oui) +
    +
    #GET{titre}
    +
    <:menus:erreur_type_menu_inexistant:>
    +
    +] diff --git a/www/plugins/menus_1/formulaires/inc-nouvelle_entree-1.html b/www/plugins/menus_1/formulaires/inc-nouvelle_entree-1.html new file mode 100644 index 00000000..5e47a9f0 --- /dev/null +++ b/www/plugins/menus_1/formulaires/inc-nouvelle_entree-1.html @@ -0,0 +1,23 @@ + +
      +
    • + + [(#ENV**{erreurs}|table_valeur{type})] + + + + <:menus:erreur_aucun_type:> + +
    • +
    + +

    + + + + +

    diff --git a/www/plugins/menus_1/formulaires/inc-nouvelle_entree-2.html b/www/plugins/menus_1/formulaires/inc-nouvelle_entree-2.html new file mode 100644 index 00000000..5c209130 --- /dev/null +++ b/www/plugins/menus_1/formulaires/inc-nouvelle_entree-2.html @@ -0,0 +1,38 @@ + +#SET{type_entree, (#ENV{erreurs}|table_valeur{type_entree})} +#SET{infos, (#ENV{erreurs}|table_valeur{infos_#GET{type_entree}})} +
    + + [(#ENV{id_menus_entree}|non) + [(#GET{infos}|table_valeur{icone}|image_reduire{24})] + ] + [(#GET{infos}|table_valeur{nom})] + +
    [(#GET{infos}|table_valeur{description})]
    + +
      + + #SET{erreurs,(#ENV**{erreurs}|table_valeur{parametres}|table_valeur{#CLE})} +
    • + + [(#GET{erreurs})] + +
    • + +
    +
    + +

    + + [(#ENV{id_menu_nouvelle_entree}|oui) + + + ] + [(#ENV{id_menus_entree}|oui) + + ] + + + +

    +
    diff --git a/www/plugins/menus_1/images/export.png b/www/plugins/menus_1/images/export.png new file mode 100644 index 00000000..22b6ae34 Binary files /dev/null and b/www/plugins/menus_1/images/export.png differ diff --git a/www/plugins/menus_1/images/menus-16.png b/www/plugins/menus_1/images/menus-16.png new file mode 100644 index 00000000..5ead8f7b Binary files /dev/null and b/www/plugins/menus_1/images/menus-16.png differ diff --git a/www/plugins/menus_1/images/menus-24.png b/www/plugins/menus_1/images/menus-24.png new file mode 100644 index 00000000..563d388a Binary files /dev/null and b/www/plugins/menus_1/images/menus-24.png differ diff --git a/www/plugins/menus_1/images/menus-48.png b/www/plugins/menus_1/images/menus-48.png new file mode 100644 index 00000000..a1bc9f90 Binary files /dev/null and b/www/plugins/menus_1/images/menus-48.png differ diff --git a/www/plugins/menus_1/images/menus-nouveau-24.png b/www/plugins/menus_1/images/menus-nouveau-24.png new file mode 100644 index 00000000..544f4504 Binary files /dev/null and b/www/plugins/menus_1/images/menus-nouveau-24.png differ diff --git a/www/plugins/menus_1/images/menus-nouveau-48.png b/www/plugins/menus_1/images/menus-nouveau-48.png new file mode 100644 index 00000000..45cae0bf Binary files /dev/null and b/www/plugins/menus_1/images/menus-nouveau-48.png differ diff --git a/www/plugins/menus_1/images/menus_accueil.png b/www/plugins/menus_1/images/menus_accueil.png new file mode 100644 index 00000000..a2ecb169 Binary files /dev/null and b/www/plugins/menus_1/images/menus_accueil.png differ diff --git a/www/plugins/menus_1/images/menus_action_ajouter.png b/www/plugins/menus_1/images/menus_action_ajouter.png new file mode 100644 index 00000000..8aef2957 Binary files /dev/null and b/www/plugins/menus_1/images/menus_action_ajouter.png differ diff --git a/www/plugins/menus_1/images/menus_action_bas.png b/www/plugins/menus_1/images/menus_action_bas.png new file mode 100644 index 00000000..d6df4f6e Binary files /dev/null and b/www/plugins/menus_1/images/menus_action_bas.png differ diff --git a/www/plugins/menus_1/images/menus_action_haut.png b/www/plugins/menus_1/images/menus_action_haut.png new file mode 100644 index 00000000..cff387da Binary files /dev/null and b/www/plugins/menus_1/images/menus_action_haut.png differ diff --git a/www/plugins/menus_1/images/menus_action_modifier.png b/www/plugins/menus_1/images/menus_action_modifier.png new file mode 100644 index 00000000..a3bbd768 Binary files /dev/null and b/www/plugins/menus_1/images/menus_action_modifier.png differ diff --git a/www/plugins/menus_1/images/menus_action_supprimer.png b/www/plugins/menus_1/images/menus_action_supprimer.png new file mode 100644 index 00000000..cd92b1d3 Binary files /dev/null and b/www/plugins/menus_1/images/menus_action_supprimer.png differ diff --git a/www/plugins/menus_1/images/menus_articles_rubrique.png b/www/plugins/menus_1/images/menus_articles_rubrique.png new file mode 100644 index 00000000..c131e9b5 Binary files /dev/null and b/www/plugins/menus_1/images/menus_articles_rubrique.png differ diff --git a/www/plugins/menus_1/images/menus_groupes_mots.png b/www/plugins/menus_1/images/menus_groupes_mots.png new file mode 100644 index 00000000..f5388ccb Binary files /dev/null and b/www/plugins/menus_1/images/menus_groupes_mots.png differ diff --git a/www/plugins/menus_1/images/menus_lien.png b/www/plugins/menus_1/images/menus_lien.png new file mode 100755 index 00000000..60d0d02c Binary files /dev/null and b/www/plugins/menus_1/images/menus_lien.png differ diff --git a/www/plugins/menus_1/images/menus_logout.png b/www/plugins/menus_1/images/menus_logout.png new file mode 100644 index 00000000..4ee9cff2 Binary files /dev/null and b/www/plugins/menus_1/images/menus_logout.png differ diff --git a/www/plugins/menus_1/images/menus_mapage.png b/www/plugins/menus_1/images/menus_mapage.png new file mode 100644 index 00000000..5d836e6f Binary files /dev/null and b/www/plugins/menus_1/images/menus_mapage.png differ diff --git a/www/plugins/menus_1/images/menus_mots.png b/www/plugins/menus_1/images/menus_mots.png new file mode 100644 index 00000000..f7988df8 Binary files /dev/null and b/www/plugins/menus_1/images/menus_mots.png differ diff --git a/www/plugins/menus_1/images/menus_objet.png b/www/plugins/menus_1/images/menus_objet.png new file mode 100644 index 00000000..8b1f4327 Binary files /dev/null and b/www/plugins/menus_1/images/menus_objet.png differ diff --git a/www/plugins/menus_1/images/menus_page_speciale.png b/www/plugins/menus_1/images/menus_page_speciale.png new file mode 100644 index 00000000..74b109b5 Binary files /dev/null and b/www/plugins/menus_1/images/menus_page_speciale.png differ diff --git a/www/plugins/menus_1/images/menus_rubriques.png b/www/plugins/menus_1/images/menus_rubriques.png new file mode 100644 index 00000000..3033e6e0 Binary files /dev/null and b/www/plugins/menus_1/images/menus_rubriques.png differ diff --git a/www/plugins/menus_1/images/menus_secteurlangue.png b/www/plugins/menus_1/images/menus_secteurlangue.png new file mode 100644 index 00000000..90d1d85a Binary files /dev/null and b/www/plugins/menus_1/images/menus_secteurlangue.png differ diff --git a/www/plugins/menus_1/images/menus_texte_libre.png b/www/plugins/menus_1/images/menus_texte_libre.png new file mode 100644 index 00000000..59e60f74 Binary files /dev/null and b/www/plugins/menus_1/images/menus_texte_libre.png differ diff --git a/www/plugins/menus_1/inc/menus.php b/www/plugins/menus_1/inc/menus.php new file mode 100644 index 00000000..ac7e6ade --- /dev/null +++ b/www/plugins/menus_1/inc/menus.php @@ -0,0 +1,184 @@ +$chemin) { + $type = preg_replace(',[.]html$,i', '', $squelette); + $dossier = str_replace($squelette, '', $chemin); + // On ne garde que les squelettes ayant un XML de config + if (file_exists("$dossier$type.xml") + AND ( + $entree = !$informer OR ($entree = menus_charger_infos($dossier.$type)) + )){ + //on ne garde que les menus repondants aux necessites + $necessite = true; + if (! empty($entree['necessites']['plugin'])) { + /* la globale $plugins liste tout en majuscule */ + $entree['necessites']['plugin'] = array_map("strtoupper", $entree['necessites']['plugin']); + foreach($entree['necessites']['plugin'] as $plugin) { + if ( ! array_key_exists($plugin,$plugins_actifs) ) + $necessite = false; + } + } + if ($necessite) + $resultats[$informer][$type] = $entree; + } + } + } + $resultats[$informer] = pipeline('menus_lister_disponibles',array( + 'args' => array(), + 'data' => $resultats[$informer] + ) + ); + } + return $resultats[$informer]; +} + +/** + * Decrire un type de menu + * + * @staticvar array $infos + * @param string $type + * @return array + */ +function menus_informer($type){ + static $infos = array(); + if (!isset($infos[$type])){ + $fichier = find_in_path("menus/$type.html"); + $infos[$type] = menus_charger_infos($fichier); + } + return $infos[$type]; +} + +/** + * Charger les informations contenues dans le xml d'une entrée de menu + * + * @param string $type + * @param string $info + * @return array + */ +function menus_charger_infos($type, $info=""){ + // on peut appeler avec le nom du squelette + $fichier = preg_replace(',[.]html$,i','',$type).".xml"; + include_spip('inc/xml'); + include_spip('inc/texte'); + $entree = array(); + if ($xml = spip_xml_load($fichier, false)){ + if (count($xml['entree'])){ + $xml = reset($xml['entree']); + $entree['nom'] = _T_ou_typo(spip_xml_aplatit($xml['nom'])); + $entree['rang'] = intval(trim(spip_xml_aplatit($xml['rang']))); + $entree['rang'] = ($entree['rang'] ? $entree['rang'] : 1000); + $entree['description'] = isset($xml['description']) ? _T_ou_typo(spip_xml_aplatit($xml['description'])) : ''; + $entree['icone'] = isset($xml['icone']) ? find_in_path(reset($xml['icone'])) : ''; + $entree['refuser_sous_menu'] = isset($xml['refuser_sous_menu']); + // Décomposition des paramètres + $entree['parametres'] = array(); + if (spip_xml_match_nodes(',^parametre,', $xml, $parametres)){ + foreach (array_keys($parametres) as $parametre){ + list($balise, $attributs) = spip_xml_decompose_tag($parametre); + $entree['parametres'][$attributs['nom']] = array( + 'label' => (isset($attributs['label']) && $attributs['label']) ? _T($attributs['label']) : $attributs['nom'], + 'obligatoire' => (isset($attributs['obligatoire']) && $attributs['obligatoire'] == 'oui') ? true : false, + 'class' => (isset($attributs['class']) && $attributs['class']) ? $attributs['class'] : '' + ); + } + } + //Décomposition des necessites + if (spip_xml_match_nodes(',^necessite,', $xml, $necessites)){ + $entree['necessites']['plugin'] = array(); + foreach (array_keys($necessites) as $necessite){ + list($balise, $attributs) = spip_xml_decompose_tag($necessite); + array_push($entree['necessites'][$attributs['type']] , $attributs['nom']); + } + } + + } + } + if (!$info) + return $entree; + else + return isset($entree[$info]) ? $entree[$info] : ""; +} + +// Suprrimer une entrée (et les éventuels sous-menus en cascade) +function menus_supprimer_entree($id_menus_entree){ + include_spip('base/abstract_sql'); + $id_menus_entree = intval($id_menus_entree); + + // On regarde d'abord s'il y a un sous-menu + $id_menu = intval(sql_getfetsel( + 'id_menu', + 'spip_menus', + 'id_menus_entree = '.$id_menus_entree + )); + + // Dans ce cas on le supprime d'abord + $ok = true; + if ($id_menu) + $ok = menus_supprimer_menu($id_menu); + + // Si c'est bon, on peut alors supprimer l'entrée + if ($ok) + $ok = sql_delete( + 'spip_menus_entrees', + 'id_menus_entree = '.$id_menus_entree + ); + + return $ok; +} + +// Supprimer un menu (et donc toutes ses entrées aussi) +function menus_supprimer_menu($id_menu){ + include_spip('base/abstract_sql'); + $id_menu = intval($id_menu); + + // On récupère toutes les entrées + $entrees = sql_allfetsel( + 'id_menus_entree', + 'spip_menus_entrees', + 'id_menu = '.$id_menu + ); + if (is_array($entrees)) + $entrees = array_map('reset', $entrees); + + // On les supprime + $ok = true; + if (is_array($entrees)) + foreach ($entrees as $id_menus_entree){ + if ($ok) + $ok = menus_supprimer_entree($id_menus_entree); + } + + // Si tout s'est bien passé on peut enfin supprimer le menu + if ($ok) + $ok = sql_delete( + 'spip_menus', + 'id_menu = '.$id_menu + ); + + return $ok; +} + +?> diff --git a/www/plugins/menus_1/inc/menus_autoriser.php b/www/plugins/menus_1/inc/menus_autoriser.php new file mode 100644 index 00000000..93afbdd8 --- /dev/null +++ b/www/plugins/menus_1/inc/menus_autoriser.php @@ -0,0 +1,19 @@ + diff --git a/www/plugins/menus_1/inclure/barre-nav.html b/www/plugins/menus_1/inclure/barre-nav.html new file mode 100644 index 00000000..b1d83ab7 --- /dev/null +++ b/www/plugins/menus_1/inclure/barre-nav.html @@ -0,0 +1,7 @@ +[(#REM) + + ZPIP 1.x + +] diff --git a/www/plugins/menus_1/inclure/menu.html b/www/plugins/menus_1/inclure/menu.html new file mode 100644 index 00000000..47c755f4 --- /dev/null +++ b/www/plugins/menus_1/inclure/menu.html @@ -0,0 +1,21 @@ + + + + + + + + diff --git a/www/plugins/menus_1/inclure/nav.html b/www/plugins/menus_1/inclure/nav.html new file mode 100644 index 00000000..6d39144d --- /dev/null +++ b/www/plugins/menus_1/inclure/nav.html @@ -0,0 +1,7 @@ +[(#REM) + + ZPIP 2.x + +] diff --git a/www/plugins/menus_1/lang/menus.xml b/www/plugins/menus_1/lang/menus.xml new file mode 100644 index 00000000..a497978d --- /dev/null +++ b/www/plugins/menus_1/lang/menus.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/www/plugins/menus_1/lang/menus_ar.php b/www/plugins/menus_1/lang/menus_ar.php new file mode 100644 index 00000000..c278df2b --- /dev/null +++ b/www/plugins/menus_1/lang/menus_ar.php @@ -0,0 +1,174 @@ + 'هل تريد فعلاً حذف هذا البند؟', + + // D + 'description_menu_accueil' => 'رابط الى الصفحة الأساسية في الموقع.', + 'description_menu_articles_rubrique' => 'عرض لائحة المقالات في قسم.', + 'description_menu_deconnecter' => 'اذا كان هناك زائر متصل، يضيف بنداً يعرض عليه الخروج.', + 'description_menu_espace_prive' => 'Lien permettant de se connecter au site si on ne l\'est pas déjà, puis d\'aller dans l\'espace privé si l\'on y est autorisé.', # NEW + 'description_menu_groupes_mots' => 'Affiche automatiquement un menu listant les mots du groupe et les articles liés. Par défaut, affiche la liste des groupes de mots et les mots liés. Si un squelette groupes_mots.html existe, le lien vers le groupe est utilisé.', # NEW + 'description_menu_lien' => 'Ajoute un lien arbitraire, en interne (URL relative) ou externe (http://...).', # NEW + 'description_menu_mapage' => 'Si le visiteur est connecté, ajoute un lien vers sa page auteur.', # NEW + 'description_menu_mots' => 'Affiche automatiquement un menu listant les articles liés au mot clé.', # NEW + 'description_menu_objet' => 'Crée un lien vers un objet de SPIP : article, rubrique ou autre. Par défaut, l\'entrée aura le titre de l\'objet.', # NEW + 'description_menu_page_speciale' => 'Ajoute un lien vers un squelette page accessible par une url du type spip.php?page=nom¶m1=xx¶m2=yyy... Ces pages sont souvent fournies par des plugins.', # NEW + 'description_menu_page_speciale_zajax' => 'Ajoute un lien vers un bloc d\'une page accessible par une url du type spip.php?page=nom¶m1=xx¶m2=yyy... Ceci nécéssite une squelette de type Z et le plugin médiabox.', # NEW + 'description_menu_rubriques_articles' => 'Affiche une liste de rubriques et, si on veut, les sous-rubriques et les articles sur plusieurs niveaux. Par défaut, affiche toutes les rubriques depuis la racine, triées par titre (numériquement puis alphabétiquement). Les articles sont placés systématiquement après les rubriques.', # NEW + 'description_menu_rubriques_completes' => 'Affiche une liste de rubriques et, si on veut, les sous-rubriques sur plusieurs niveaux. Par défaut, affiche toutes les rubriques depuis la racine, triées par titre (numériquement puis alphabétiquement).', # NEW + 'description_menu_secteurlangue' => 'Cette entrée est spécifique aux sites utilisant un secteur par langue. Elle affiche automatiquement un menu listant les rubriques du secteur correspondant à la langue de la page et, si on veut, les sous-rubriques sur plusieurs niveaux. Par défaut, affiche toutes les rubriques depuis la racine, triées par titre (numériquement puis alphabétiquement).', # NEW + 'description_menu_texte_libre' => 'Simplement le texte que vous souhaitez, ou un code de langue SPIP (<:...:>)', # NEW + + // E + 'editer_menus_editer' => 'تعديل هذه القائمة', + 'editer_menus_explication' => 'إنشاء قوائم الموقع وإعدادها.', + 'editer_menus_exporter' => 'نقل هذه القائمة', + 'editer_menus_nouveau' => 'إنشاء قائمة جديدة', + 'editer_menus_titre' => 'قوائم الموقع', + 'entree_afficher_articles' => 'Inclure les articles dans le menu ? (mettre "oui" pour cela)', # NEW + 'entree_afficher_item_suite' => 'Inclure les articles dans le menu ? (mettre "oui" pour cela)', # NEW + 'entree_articles_max' => 'Si oui, afficher les articles seulement si la rubrique contient au maximum xx articles ? (mettre le nombre maximum d\'articles, laissez vide pour afficher tous les articles)', # NEW + 'entree_articles_max_affiches' => 'Si oui, limiter le nombre d\'articles listés à xx maximum (suivis d\'un item "... Tous les articles" comportant un lien vers la rubrique parente) ? (indiquer le nombre maximum d\'articles, laissez vide pour afficher tous les articles)', # NEW + 'entree_aucun' => 'بدون', + 'entree_bloc' => 'كتلة Zpip', + 'entree_choisir' => 'اختر نوع البند الذي تريد إضافته:', + 'entree_classe_parent' => 'Classe des liens des éléments parents. Cette classe sera rajoutée aux li>a ayant une suite ul/li. Par exemple, si vous saisissez "daddy", cela vous permet d\'utiliser le plugin menu deroulant 2 pour la mise en forme du menu.', # NEW + 'entree_connexion_objet' => 'Obliger à être connecté (mettre "session") ou déconnecté (mettre "nosession") pour voir l\'objet', # NEW + 'entree_contenu' => 'المحتوى', + 'entree_css' => 'Classes CSS de l\'entrée (du conteneur)', # NEW + 'entree_css_lien' => 'Classes CSS du lien', # NEW + 'entree_id_groupe' => 'رقم مجموعة المفاتيح', + 'entree_id_mot' => 'رقم المفتاح', + 'entree_id_objet' => 'رقم', + 'entree_id_rubrique' => 'رقم القسم الحاوي', + 'entree_id_rubrique_ou_courante' => 'Numéro de la rubrique parente ou "courante" si la rubrique parente est la rubrique courante du contexte', # NEW + 'entree_id_rubriques_exclues' => 'Numéros des rubriques à exclure, séparés par des virgules', # NEW + 'entree_id_secteur_exclus' => 'Numéros des secteurs à exclure, séparés par des virgules', # NEW + 'entree_infini' => 'الى ما لا نهاية', + 'entree_mapage' => 'صفحتي الشخصية', + 'entree_masquer_articles_uniques' => 'Si oui et si une rubrique contient un seul article, le masquer ? (mettre "oui" pour cela)', # NEW + 'entree_niveau' => 'مستوى القوائم الفرعية', + 'entree_nombre_articles' => 'العدد الأقصى للمقالات (صفر افتراضياً)', + 'entree_page' => 'اسم الصفحة', + 'entree_parametres' => 'لائحة المتغيرات', + 'entree_rubriques_max_affichees' => 'Si oui, limiter le nombre de rubriques listés à xx maximum (suivis d\'un item "... Toutes les rubriques" comportant un lien vers la rubrique parente) ? (indiquer le nombre maximum de rubriques, laissez vide pour afficher toutes les rubriques)', # NEW + 'entree_sousrub_cond' => 'N\'afficher que les sous-rubriques de la rubrique en cours (mettre "oui", sinon laisser vide)', # NEW + 'entree_suivant_connexion' => 'Restreindre cette entrée suivant la connexion (mettre "connecte" pour afficher seulement si le visiteur est connecté, "deconnecte" pour le cas contraire, ou laisser vide pour toujours afficher)', # NEW + 'entree_suivant_connexion_connecte' => 'اذا متصل فقط', + 'entree_suivant_connexion_deconnecte' => 'اذا غير متصل فقط', + 'entree_sur_n_articles' => '@n@ مقال معروض', + 'entree_sur_n_mots' => '@n@ مفتاح معروض', + 'entree_sur_n_niveaux' => 'على @n@ مستوى', + 'entree_titre' => 'العنوان', + 'entree_titre_connecter' => 'العنوان للوصول الى استمارة التعريف', + 'entree_titre_prive' => 'العنوان للدخول الى المجال الخاص', + 'entree_traduction_articles_rubriques' => 'Dans la mesure du possible, afficher les articles de la rubrique dans la langue du contexte (mettre "trad" pour cela)', # NEW + 'entree_traduction_objet' => 'Dans le cas d\'un article, choisir la traduction en fonction du contexte (mettre "trad" pour cela)', # NEW + 'entree_tri_alpha' => 'Critère de tri des rubriques (alphabétique). Si vous saisissez "date", le critère ajouté sera {par date} et les rubriques seront triées par date', # NEW + 'entree_tri_alpha_articles' => 'Critère de tri des articles (alphabétique). Si vous saisissez "date", le critère ajouté sera {par date} et les articles seront triés par date', # NEW + 'entree_tri_alpha_articles_inverse' => 'Inverser le critère de tri alphabétique ? (mettre "oui" pour cela)', # NEW + 'entree_tri_alpha_inverse' => 'Inverser le critère de tri alphabétique ? (mettre "oui" pour cela)', # NEW + 'entree_tri_num' => 'Critère de tri des rubriques (numérique). Si vous saisissez "titre", le critère ajouté sera {par num titre} et les rubriques seront triées par numéro de titre', # NEW + 'entree_tri_num_articles' => 'Critère de tri des articles (numérique). Si vous saisissez "titre", le critère ajouté sera {par num titre} et les articles seront triés par numéro de titre', # NEW + 'entree_tri_num_articles_inverse' => 'Inverser le critère de tri numérique ? (mettre "oui" pour cela)', # NEW + 'entree_tri_num_inverse' => 'Inverser le critère de tri numérique ? (mettre "oui" pour cela)', # NEW + 'entree_type_objet' => 'نوع العنصر', + 'entree_url' => 'العنوان', + 'entree_url_public' => 'Adresse de retour après la connexion', # NEW + 'erreur_aucun_type' => 'لم يتم العثور على اي نوع بنود.', + 'erreur_autorisation' => 'غير مسموح لك تعديل القوائم.', + 'erreur_identifiant_deja' => 'Cet identifiant est déjà utilisé par un menu.', # NEW + 'erreur_identifiant_forme' => 'L\'identifiant ne doit contenir que des lettres, des chiffres ou le caractère souligné.', # NEW + 'erreur_menu_inexistant' => 'لا وجود للقائمة رقم @id@ المطلوبة.', + 'erreur_mise_a_jour' => 'Une erreur s\'est produite pendant la mise à jour de la base de donnée.', # NEW + 'erreur_parametres' => 'Il y a une erreur dans les paramètres de la page', # NEW + 'erreur_type_menu' => 'يجب اختيار نوع قوائم', + 'erreur_type_menu_inexistant' => 'Ce type de menu n\'est pas/plus disponible', # NEW + + // F + 'formulaire_ajouter_entree' => 'إضافة بند', + 'formulaire_ajouter_sous_menu' => 'إنشاء قائمة فرعية', + 'formulaire_css' => 'Classes CSS', # NEW + 'formulaire_css_explication' => 'Vous pouvez ajouter au menu d\'éventuelles classes CSS supplémentaires.', # NEW + 'formulaire_deplacer_bas' => 'نقل الى الأسفل', + 'formulaire_deplacer_haut' => 'نقل الى الأعلى', + 'formulaire_facultatif' => 'اختياري', + 'formulaire_identifiant' => 'المعرف', + 'formulaire_identifiant_explication' => 'Donnez un mot-clé unique qui vous permettra d\'appeler votre menu facilement.', # NEW + 'formulaire_ieconfig_choisir_menus_a_importer' => 'Choisissez quel(s) menu(s) vous souhaitez importer.', # NEW + 'formulaire_ieconfig_importer' => 'جلب', + 'formulaire_ieconfig_menu_meme_identifiant' => 'ATTENTION : un menu avec le même identifiant existe déjà sur votre votre site !', # NEW + 'formulaire_ieconfig_menus_a_exporter' => 'قوائم للنقل:', + 'formulaire_ieconfig_ne_pas_importer' => 'عدم الجلب', + 'formulaire_ieconfig_remplacer' => 'Remplacer le menu actuel par le menu importé', # NEW + 'formulaire_ieconfig_renommer' => 'إعادة تسمية هذه القائمة قبل جلبها', + 'formulaire_importer' => 'جلب قائمة', + 'formulaire_importer_explication' => 'Si vous avez exporté un menu dans un fichier, vous pouvez l\'importer maintenant.', # NEW + 'formulaire_modifier_entree' => 'تعديل هذا البند', + 'formulaire_modifier_menu' => 'تعديل القائمة', + 'formulaire_nouveau' => 'قائمة جديدة', + 'formulaire_partie_construction' => 'بناء قائمة', + 'formulaire_partie_identification' => 'تعريف القائمة', + 'formulaire_supprimer_entree' => 'حذف هذا البند', + 'formulaire_supprimer_menu' => 'حذف القائمة', + 'formulaire_supprimer_sous_menu' => 'حذف هذه القائمة الفرعية', + 'formulaire_titre' => 'العنوان', + + // I + 'info_afficher_articles' => 'Les articles seront inclus dans le menu.', # NEW + 'info_articles_max' => 'Seulement si la rubrique contient au plus @max@ articles', # NEW + 'info_articles_max_affiches' => 'Affichage limité à @max@ articles', # NEW + 'info_classe_parent' => 'Classe des éléments parents : ', # NEW + 'info_connexion_obligatoire' => 'Connexion obligatoire', # NEW + 'info_deconnexion_obligatoire' => 'Uniquement déconnecté', # NEW + 'info_masquer_articles_uniques' => 'Articles uniques masqués', # NEW + 'info_numero_menu' => 'قائمة رقم:', + 'info_page_speciale' => 'Lien vers la page « @page@ »', # NEW + 'info_page_speciale_zajax' => 'Modalbox de la page « @page@ » pour le bloc « @bloc@ »', # NEW + 'info_rubrique_courante' => 'القسم الحالي', + 'info_rubriques_exclues' => ' / sauf rubrique(s) @id_rubriques@', # NEW + 'info_rubriques_max_affichees' => 'Affichage limité à @max@ rubriques', # NEW + 'info_secteur_exclus' => ' / sauf secteur(s) @id_secteur@', # NEW + 'info_sousrub_cond' => 'Seules les sous-rubriques de la rubriques en cours sont affichées.', # NEW + 'info_tous_groupes_mots' => 'Tous les groupes de mots', # NEW + 'info_traduction_recuperee' => 'Le contexte décidera de la traduction choisie', # NEW + 'info_tri' => 'فرز الأقسام:', + 'info_tri_alpha' => '(أبجدي)', + 'info_tri_articles' => 'فرز المقالات:', + 'info_tri_num' => '(رقمي)', + + // N + 'noisette_description' => 'Insère un menu défini avec le plugin Menus.', # NEW + 'noisette_label_afficher_titre_menu' => 'عرض عنوان القائمة؟', + 'noisette_label_identifiant' => 'Menu à afficher :', # NEW + 'noisette_nom_noisette' => 'القائمة', + 'nom_menu_accueil' => 'Accueil', # NEW + 'nom_menu_articles_rubrique' => 'مقالات قسم', + 'nom_menu_deconnecter' => 'خروج', + 'nom_menu_espace_prive' => 'Se connecter / lien vers espace privé', # NEW + 'nom_menu_groupes_mots' => 'Mots-clés et Articles d\'un Groupes de mots', # NEW + 'nom_menu_lien' => 'رابط اعتباطي', + 'nom_menu_mapage' => 'صفحتي', + 'nom_menu_mots' => 'مقالات مفتاح', + 'nom_menu_objet' => 'مقال، قسم او أحد عناصر SPIP الأخرى ', + 'nom_menu_page_speciale' => 'رابط الى صفحة نموذجية', + 'nom_menu_page_speciale_zajax' => 'Un bloc d\'une page Zpip', # NEW + 'nom_menu_rubriques_completes' => 'Liste ou arborescence de rubriques et d\'articles (avec beaucoup d\'options)', # NEW + 'nom_menu_rubriques_evenements' => 'Événements de rubriques', # NEW + 'nom_menu_secteurlangue' => 'أقسام اللغات', + 'nom_menu_texte_libre' => 'نص حرّ', + + // T + 'tous_les_articles' => 'كل المقالات', + 'toutes_les_rubriques' => 'كل الأقسام' +); + +?> diff --git a/www/plugins/menus_1/lang/menus_ca.php b/www/plugins/menus_1/lang/menus_ca.php new file mode 100644 index 00000000..53f44039 --- /dev/null +++ b/www/plugins/menus_1/lang/menus_ca.php @@ -0,0 +1,174 @@ + 'Voulez-vous vraiment supprimer cette entrée ?', # NEW + + // D + 'description_menu_accueil' => 'Enllaç cap a la pàgina d\'inici del lloc.', + 'description_menu_articles_rubrique' => 'Mostra la llista d\'articles d\'una secció.', + 'description_menu_deconnecter' => 'Si el visitant està connectat, afegeix una entrada proposant-li la desconnexió.', + 'description_menu_espace_prive' => 'Enllaç que permet connectar-se al lloc, si encara no ho estem, i després anar a l\'espai privat sempre i quan estiguem autoritzats a fer-ho.', + 'description_menu_groupes_mots' => 'Mostra automàticament un menú que llista les paraules del grup i els articles lligats. Per defecte, mostra la llista dels grups de paraules i les paraules lligades. Si un esquelet grups_paraules.html existeix, s\'utilitzarà l\'enllaç cap al grup.', + 'description_menu_lien' => 'Afegeix un enllaç arbitrari, intern (URL relativa) o extern (http://...).', + 'description_menu_mapage' => 'Si el visitant està connectat, afegeix un enllaç cap a la pàgina de l\'autor.', + 'description_menu_mots' => 'Mostra automàticament un menú que llista els articles lligats a la paraula clau.', + 'description_menu_objet' => 'Crea un enllaç cap a un objecte d\'SPIP: article, secció o un altre. Per defecte, l\'entrada tindrà el títol de l\'objecte.', + 'description_menu_page_speciale' => 'Afegeix un enllaç cap a un esquelet accessible per un URL del tipus spip.php?page=nom¶m1=xx¶m2=yyy... Aquestes pàgines sovint són subministrades per connectors.', + 'description_menu_page_speciale_zajax' => 'Ajoute un lien vers un bloc d\'une page accessible par une url du type spip.php?page=nom¶m1=xx¶m2=yyy... Ceci nécéssite une squelette de type Z et le plugin médiabox.', # NEW + 'description_menu_rubriques_articles' => 'Affiche une liste de rubriques et, si on veut, les sous-rubriques et les articles sur plusieurs niveaux. Par défaut, affiche toutes les rubriques depuis la racine, triées par titre (numériquement puis alphabétiquement). Les articles sont placés systématiquement après les rubriques.', # NEW + 'description_menu_rubriques_completes' => 'Affiche une liste de rubriques et, si on veut, les sous-rubriques sur plusieurs niveaux. Par défaut, affiche toutes les rubriques depuis la racine, triées par titre (numériquement puis alphabétiquement).', # NEW + 'description_menu_secteurlangue' => 'Aquesta entrada és específica pels llocs que utilitzen un sector per llengua. Mostra automàticament un menú que llista les seccions del sector corresponent a la llengua de la pàgina i, si es vol, les subseccions a diferents nivells. Per defecte, mostra totes les seccions des de l\'arrel, ordenades per títol (numèricament i després alfabèticament).', + 'description_menu_texte_libre' => 'Simplement le texte que vous souhaitez, ou un code de langue SPIP (<:...:>)', # NEW + + // E + 'editer_menus_editer' => 'Modificar aquest menú', + 'editer_menus_explication' => 'Creeu i configureu els menús del vostre lloc.', + 'editer_menus_exporter' => 'Exportar aquest menú', + 'editer_menus_nouveau' => 'Creeu un nou menú', + 'editer_menus_titre' => 'Menús del lloc', + 'entree_afficher_articles' => 'Inclure les articles dans le menu ? (mettre "oui" pour cela)', # NEW + 'entree_afficher_item_suite' => 'Inclure les articles dans le menu ? (mettre "oui" pour cela)', # NEW + 'entree_articles_max' => 'Si oui, afficher les articles seulement si la rubrique contient au maximum xx articles ? (mettre le nombre maximum d\'articles, laissez vide pour afficher tous les articles)', # NEW + 'entree_articles_max_affiches' => 'Si oui, limiter le nombre d\'articles listés à xx maximum (suivis d\'un item "... Tous les articles" comportant un lien vers la rubrique parente) ? (indiquer le nombre maximum d\'articles, laissez vide pour afficher tous les articles)', # NEW + 'entree_aucun' => 'Cap', + 'entree_bloc' => 'Bloc Zpip', # NEW + 'entree_choisir' => 'Escolliu el tipus d\'entrada que voleu afegir:', + 'entree_classe_parent' => 'Classe des liens des éléments parents. Cette classe sera rajoutée aux li>a ayant une suite ul/li. Par exemple, si vous saisissez "daddy", cela vous permet d\'utiliser le plugin menu deroulant 2 pour la mise en forme du menu.', # NEW + 'entree_connexion_objet' => 'Obliger à être connecté (mettre "session") ou déconnecté (mettre "nosession") pour voir l\'objet', # NEW + 'entree_contenu' => 'Contenu', # NEW + 'entree_css' => 'Classes CSS de l\'entrada', # MODIF + 'entree_css_lien' => 'Classes CSS du lien', # NEW + 'entree_id_groupe' => 'Número del grup de paraula clau', + 'entree_id_mot' => 'Número de la paraula clau', + 'entree_id_objet' => 'Número', + 'entree_id_rubrique' => 'Número de la secció pare', + 'entree_id_rubrique_ou_courante' => 'Numéro de la rubrique parente ou "courante" si la rubrique parente est la rubrique courante du contexte', # NEW + 'entree_id_rubriques_exclues' => 'Numéros des rubriques à exclure, séparés par des virgules', # NEW + 'entree_id_secteur_exclus' => 'Numéros des secteurs à exclure, séparés par des virgules', # NEW + 'entree_infini' => 'Fins l\'infinit', + 'entree_mapage' => 'La meva pàgina personal', + 'entree_masquer_articles_uniques' => 'Si oui et si une rubrique contient un seul article, le masquer ? (mettre "oui" pour cela)', # NEW + 'entree_niveau' => 'Nivell de les subseccions', + 'entree_nombre_articles' => 'Número d\'articles com a màxim (0 per defecte)', + 'entree_page' => 'Nom de la pàgina', + 'entree_parametres' => 'Llista dels paràmetres', + 'entree_rubriques_max_affichees' => 'Si oui, limiter le nombre de rubriques listés à xx maximum (suivis d\'un item "... Toutes les rubriques" comportant un lien vers la rubrique parente) ? (indiquer le nombre maximum de rubriques, laissez vide pour afficher toutes les rubriques)', # NEW + 'entree_sousrub_cond' => 'N\'afficher que les sous-rubriques de la rubrique en cours (mettre "oui", sinon laisser vide)', # NEW + 'entree_suivant_connexion' => 'Restreindre cette entrée suivant la connexion (mettre "connecte" pour afficher seulement si le visiteur est connecté, "deconnecte" pour le cas contraire, ou laisser vide pour toujours afficher)', # NEW + 'entree_suivant_connexion_connecte' => 'seulement si connecté', # NEW + 'entree_suivant_connexion_deconnecte' => 'seulement si déconnecté', # NEW + 'entree_sur_n_articles' => '@n@ articles mostrat(s)', + 'entree_sur_n_mots' => '@n@ paraules mostrada(es)', + 'entree_sur_n_niveaux' => 'A @n@ nivell(s)', + 'entree_titre' => 'Títol', + 'entree_titre_connecter' => 'Títol per l\'accés al formulari d\'identificació', + 'entree_titre_prive' => 'Títol per accedir a l\'espai privat', + 'entree_traduction_articles_rubriques' => 'Dans la mesure du possible, afficher les articles de la rubrique dans la langue du contexte (mettre "trad" pour cela)', # NEW + 'entree_traduction_objet' => 'Dans le cas d\'un article, choisir la traduction en fonction du contexte (mettre "trad" pour cela)', # NEW + 'entree_tri_alpha' => 'Criteri d\'ordenació (alfabètic)', # MODIF + 'entree_tri_alpha_articles' => 'Critère de tri des articles (alphabétique). Si vous saisissez "date", le critère ajouté sera {par date} et les articles seront triés par date', # NEW + 'entree_tri_alpha_articles_inverse' => 'Inverser le critère de tri alphabétique ? (mettre "oui" pour cela)', # NEW + 'entree_tri_alpha_inverse' => 'Inverser le critère de tri alphabétique ? (mettre "oui" pour cela)', # NEW + 'entree_tri_num' => 'Criteri d\'ordenació (numèric)', # MODIF + 'entree_tri_num_articles' => 'Critère de tri des articles (numérique). Si vous saisissez "titre", le critère ajouté sera {par num titre} et les articles seront triés par numéro de titre', # NEW + 'entree_tri_num_articles_inverse' => 'Inverser le critère de tri numérique ? (mettre "oui" pour cela)', # NEW + 'entree_tri_num_inverse' => 'Inverser le critère de tri numérique ? (mettre "oui" pour cela)', # NEW + 'entree_type_objet' => 'Tipus d\'objecte', + 'entree_url' => 'Adreça', + 'entree_url_public' => 'Adresse de retour après la connexion', # NEW + 'erreur_aucun_type' => 'No s\'ha trobat cap entrada.', + 'erreur_autorisation' => 'No estàs autoritzat per modificar els menús.', + 'erreur_identifiant_deja' => 'Aquest identificador ja es utilitzat per un menú.', + 'erreur_identifiant_forme' => 'L\'identificador només pot contenir lletres, xifres o el caràcter subratllat.', + 'erreur_menu_inexistant' => 'El menú demanat número @id@ no existeix.', + 'erreur_mise_a_jour' => 'S\'ha produït un error durant l\'actualització de la base de dades .', + 'erreur_parametres' => 'Hi ha un error en els paràmetres de la pàgina', + 'erreur_type_menu' => 'Has d\'escollir un tipus de menú', + 'erreur_type_menu_inexistant' => 'Ce type de menu n\'est pas/plus disponible', # NEW + + // F + 'formulaire_ajouter_entree' => 'Afegir una entrada', + 'formulaire_ajouter_sous_menu' => 'Crear un submenú', + 'formulaire_css' => 'Classes CSS', + 'formulaire_css_explication' => 'Podeu afegir al menú eventuals classes CSS suplementàries.', + 'formulaire_deplacer_bas' => 'Desplaçar avall', + 'formulaire_deplacer_haut' => 'Desplaçar amunt', + 'formulaire_facultatif' => 'Facultatiu', + 'formulaire_identifiant' => 'Identificador', + 'formulaire_identifiant_explication' => 'Doneu una paraula clau única que us permetrà cridar fàcilment el vostre menú.', + 'formulaire_ieconfig_choisir_menus_a_importer' => 'Choisissez quel(s) menu(s) vous souhaitez importer.', # NEW + 'formulaire_ieconfig_importer' => 'Importer', # NEW + 'formulaire_ieconfig_menu_meme_identifiant' => 'ATTENTION : un menu avec le même identifiant existe déjà sur votre votre site !', # NEW + 'formulaire_ieconfig_menus_a_exporter' => 'Menus à exporter :', # NEW + 'formulaire_ieconfig_ne_pas_importer' => 'Ne pas importer', # NEW + 'formulaire_ieconfig_remplacer' => 'Remplacer le menu actuel par le menu importé', # NEW + 'formulaire_ieconfig_renommer' => 'Renommer ce menu avant import', # NEW + 'formulaire_importer' => 'Importar un menú', + 'formulaire_importer_explication' => 'Si heu exportar un menú a dins d\'un fitxer, ara el podreu importar.', + 'formulaire_modifier_entree' => 'Modificar aquesta entrada', + 'formulaire_modifier_menu' => 'Modificar el menú:', + 'formulaire_nouveau' => 'Nou menú', + 'formulaire_partie_construction' => 'Construcció del menú', + 'formulaire_partie_identification' => 'Identificació del menú', + 'formulaire_supprimer_entree' => 'Suprimir aquesta entrada', + 'formulaire_supprimer_menu' => 'Suprimir el menú', + 'formulaire_supprimer_sous_menu' => 'Suprimir aquest submenú', + 'formulaire_titre' => 'Títol', + + // I + 'info_afficher_articles' => 'Les articles seront inclus dans le menu.', # NEW + 'info_articles_max' => 'Seulement si la rubrique contient au plus @max@ articles', # NEW + 'info_articles_max_affiches' => 'Affichage limité à @max@ articles', # NEW + 'info_classe_parent' => 'Classe des éléments parents : ', # NEW + 'info_connexion_obligatoire' => 'Connexion obligatoire', # NEW + 'info_deconnexion_obligatoire' => 'Uniquement déconnecté', # NEW + 'info_masquer_articles_uniques' => 'Articles uniques masqués', # NEW + 'info_numero_menu' => 'MENÚ NÚMERO:', + 'info_page_speciale' => 'Enllaç cap a la pàgina «@page@»', + 'info_page_speciale_zajax' => 'Modalbox de la page « @page@ » pour le bloc « @bloc@ »', # NEW + 'info_rubrique_courante' => 'Rubrique courante', # NEW + 'info_rubriques_exclues' => ' / sauf rubrique(s) @id_rubriques@', # NEW + 'info_rubriques_max_affichees' => 'Affichage limité à @max@ rubriques', # NEW + 'info_secteur_exclus' => ' / sauf secteur(s) @id_secteur@', # NEW + 'info_sousrub_cond' => 'Seules les sous-rubriques de la rubriques en cours sont affichées.', # NEW + 'info_tous_groupes_mots' => 'Tots els grups de paraules', + 'info_traduction_recuperee' => 'Le contexte décidera de la traduction choisie', # NEW + 'info_tri' => 'Ordena:', # MODIF + 'info_tri_alpha' => '(alfabètica)', + 'info_tri_articles' => 'Tri des articles :', # NEW + 'info_tri_num' => '(numèrica)', + + // N + 'noisette_description' => 'Insère un menu défini avec le plugin Menus.', # NEW + 'noisette_label_afficher_titre_menu' => 'Afficher le titre du menu ?', # NEW + 'noisette_label_identifiant' => 'Menu à afficher :', # NEW + 'noisette_nom_noisette' => 'Menu', # NEW + 'nom_menu_accueil' => 'Inici', + 'nom_menu_articles_rubrique' => 'Articles d\'una secció', + 'nom_menu_deconnecter' => 'Desconnectar-se', + 'nom_menu_espace_prive' => 'Connectar-se / enllaç cap a l\'espai privat', + 'nom_menu_groupes_mots' => 'Paraules clau i Articles d\'un Grup de paraules', + 'nom_menu_lien' => 'Enllaç arbitrari', + 'nom_menu_mapage' => 'La meva pàgina', + 'nom_menu_mots' => 'Articles d\'una Paraula clau', + 'nom_menu_objet' => 'Article, secció o un altre objecte SPIP', + 'nom_menu_page_speciale' => 'Enllaç cap a una pàgina esquelet', + 'nom_menu_page_speciale_zajax' => 'Un bloc d\'une page Zpip', # NEW + 'nom_menu_rubriques_completes' => 'Liste ou arborescence de rubriques et d\'articles (avec beaucoup d\'options)', # NEW + 'nom_menu_rubriques_evenements' => 'Esdeveniments de les seccions', + 'nom_menu_secteurlangue' => 'Sectors de llengua', + 'nom_menu_texte_libre' => 'Texte libre', # NEW + + // T + 'tous_les_articles' => '... Tous les articles', # NEW + 'toutes_les_rubriques' => '... Toutes les rubriques' # NEW +); + +?> diff --git a/www/plugins/menus_1/lang/menus_de.php b/www/plugins/menus_1/lang/menus_de.php new file mode 100644 index 00000000..2a21d00c --- /dev/null +++ b/www/plugins/menus_1/lang/menus_de.php @@ -0,0 +1,174 @@ + 'Wollen sie diesen Eintrag wirklich löschen?', + + // D + 'description_menu_accueil' => 'Link zur Startseite.', + 'description_menu_articles_rubrique' => 'Artikelliste einer Rubrik anzeigen', + 'description_menu_deconnecter' => 'Wenn eine Leser angemeldet ist, zeige ihm einen Abmelde-Link.', + 'description_menu_espace_prive' => 'Link zum Login und zum Redaktionssystem', + 'description_menu_groupes_mots' => 'Zeige automatisch ein Menü aus Schlagworten und zugehörigen Artikeln. In der Grundeinstellung werden die Schlagwortgruppen mit ihren Schlagworten angezeigt. Wenn ein Skelett mit der Bezeichnung groupes_mots.html existiert, wird der Link zur Schlagwortguppe verwendet.', + 'description_menu_lien' => 'Fügt eine beliebigen Link hinzu, der entweder intern (rekative URL)oder extern (http://...) sein kann.', + 'description_menu_mapage' => 'Wenn der Besucher angemeldet ist, füge einen Link zu seiner persönlichen Seite hinzu.', + 'description_menu_mots' => 'Zeigt automatisch ein Menü, das die Artikel zum Schlagwort anzeigt.', + 'description_menu_objet' => 'Link zu einem SPIP-Objekt anlegen: Artikel, Rubrik, usw. In der Grundeinstellung trägt der Eintrag den Namen des Objekts.', + 'description_menu_page_speciale' => 'Fügt einen URL zu einer Skelettseite im Format spip.php?page=nom¶m1=xx¶m2=yyy... hinzu. Diese Skelette werden von Plugins bereitgestellt', + 'description_menu_page_speciale_zajax' => 'Fügt einen Link zu einem Block auf einer Seite hinzu, die über einen URL mit der Syntax spip.php?page=nom¶m1=xx¶m2=yyy... erreichbar ist. Dazu sind ein Skelett des Typs Z und das Plugin médiabox Voraussetzung.', + 'description_menu_rubriques_articles' => 'Zeigt einen Liste der Rubriken und auf Wunsch der Unterrubriken und Artikel als Hierarchie an. In der Grundeinstellung werden alle Rubriken von der obersten Ebene an dargestellt. Sie werden nach Titeln (zuerst numerisch und dann alphabetisch) sortiert. Artikel werden immer hinter den Rubriken angezeigt.', + 'description_menu_rubriques_completes' => 'Zeigt eine Liste der Rubriken und, wenn gewünscht, der Unterrubriken auf mehreren Ebenen an. Die Standardeinstellung zeigt alle Rubriken sortiert nach Titel an (mit Ordnungszahl nummerierte zuerst).', + 'description_menu_secteurlangue' => 'Dieser Eintrag bezieht sich aud die Sites, welche pro Sprache ein Hauptrubrik verwenden. Er zeigt ein Menü mit allen Rubriken des Sektors, die mit der Sprache übereinstimmen, wenn erfordelich auf über mehrere Niveaus. In der Grundeinstelung werden alle Rubriken ab der obersten Ebene nach Titel (numerisch und anschließend alphanumerisch) sortiert angezeigt.', + 'description_menu_texte_libre' => 'Ein beliebiger Text oder ein Sprachcode von SPIP im Format <:...:>', + + // E + 'editer_menus_editer' => 'Menü bearbeiten', + 'editer_menus_explication' => 'Gestalten und konfigurieren sie hier die Menüs ihrer Website.', + 'editer_menus_exporter' => 'Menü exportieren', + 'editer_menus_nouveau' => 'Neues Menü anlegen', + 'editer_menus_titre' => 'Menüs der Website', + 'entree_afficher_articles' => 'Artikel in das Menü einbeziehen? ("oui" eintragen wenn gewünscht)', + 'entree_afficher_item_suite' => 'Artikel in das Menü einbeziehen? ("oui" eintragen wenn gewünscht)', + 'entree_articles_max' => 'Wenn ja, Artikel nur anzeigen, wenn die Rubrik maximal xx Artikel enthält. (Obergrenze eintragen, leer lassen um alle anzuzeigen)', + 'entree_articles_max_affiches' => 'Wenn ja, Anzahl der angezeigten Artikel auf xx begrenzen; weitere werden durch den Eintrag "... alle Artikel" ersetzt. (Obergrenze eintragen, leer lassen um alle anzuzeigen)', + 'entree_aucun' => 'Keiner', + 'entree_bloc' => 'ZPIP Block', + 'entree_choisir' => 'Wählen sie die Art EIntrag, die sie hinzufügen wollen:', + 'entree_classe_parent' => 'Klasse der Links zu übergeordneten Objekten. Diese Klasse wird den li>a hinzugefügt, die sich mit ul/li fortsetezn. Wenn Sie z.B. "daddy" erfassen, können Sie das Plugin menu deroulant 2 zur Formatierung des Menüs einsetzen.', + 'entree_connexion_objet' => 'Objekt wird nur angezeigt, wenn man entweder eingelogt ("session" eintragen) oder nicht eingelogt ist ("nosession" eintragen)', + 'entree_contenu' => 'Inhalt', + 'entree_css' => 'CSS-Klassen des Eintrags (des Containers)', + 'entree_css_lien' => 'CSS-Klassen des Links', + 'entree_id_groupe' => 'Nummer der Schlagwortgruppe', + 'entree_id_mot' => 'Nummer des Schlagworts', + 'entree_id_objet' => 'Nummer', + 'entree_id_rubrique' => 'Nummer der übergeordeneten Rubrik', + 'entree_id_rubrique_ou_courante' => 'Nummer der "Elternrubrik" oder der "aktuellen" Rubrik, wenn die Elternrubrik die aktuelle Rubrik des Kontext ist.', + 'entree_id_rubriques_exclues' => 'Nummern der auszuschließenden Rubriken, getrennt durch Semikolons.', + 'entree_id_secteur_exclus' => 'Nummern der auszuschließenden Sektoren, getrennt mit Kommata', + 'entree_infini' => 'Unendlich', + 'entree_mapage' => 'Meine eigene Seite', + 'entree_masquer_articles_uniques' => 'Wenn ja und falls die Rubrik nur einen Artikel enthält wird dieser maskiert ("oui" eintragen wenn gewünscht).', + 'entree_niveau' => 'Tiefe der Unterrubriken', + 'entree_nombre_articles' => 'Maximale Anzahl Artikel (Standardwert 0)', + 'entree_page' => 'Name der Seite', + 'entree_parametres' => 'Parameterliste', + 'entree_rubriques_max_affichees' => 'Wenn definiert, dann wird die Zahl der gelisteten Rubriken auf xx begrenzt und von einem Eintrag "... alle Rubriken" abgeschlossen. Obergrenze eintragen oder leer lassen, wenn alle angezeigt werden sollen.', + 'entree_sousrub_cond' => 'Nur Unterrubriken der aktuellen Rubrik anzeigen ("oui" eintragen, falls nicht gewünscht leer lassen)', + 'entree_suivant_connexion' => 'Verhalten des Eintrags in Abhängigkeit vom Verbindungsstatus: "Verbinden" wird nur angezeigt, wenn der Besucher nicht eingelogt ist, anderenfalls wird "Log-Out" angezeit. Freilassen, um den Eintrag immer anzuzeigen.', # MODIF + 'entree_suivant_connexion_connecte' => 'nur wenn verbunden', + 'entree_suivant_connexion_deconnecte' => 'nur wenn nicht verbunden', + 'entree_sur_n_articles' => '@n@ Artikel angezeigt', + 'entree_sur_n_mots' => '@n@ Worte angezeigt', + 'entree_sur_n_niveaux' => 'Auf @n@ Niveau(s)', + 'entree_titre' => 'Titel', + 'entree_titre_connecter' => 'Titel für den Zugang zum Anmeldeformular', + 'entree_titre_prive' => 'Titel für den Redaktionszugang', + 'entree_traduction_articles_rubriques' => 'Wenn möglich Artikel der Rubrik in der Sprache des Kontext anzeigen ("oui" eintragen wenn gewünscht)', + 'entree_traduction_objet' => 'Übersetzung von Artikeln in Abhängigkeit vom Sprachkontext auswählen (für diese EInstellung "trad" eintragen)', + 'entree_tri_alpha' => 'Sortierung der Rubriken (alphanumerisch). Wenn Sie ein Datum angeben, wird das Kriterium {par date} hinzugefügt. und die Rubriken weden nach Datum sortiert.', + 'entree_tri_alpha_articles' => 'Sortierung der Artikel (alphanumerisch). Wenn Sie ein Datum angeben, wird das Kriterium {par date} hinzugefügt. und die Artikel weden nach Datum sortiert.', + 'entree_tri_alpha_articles_inverse' => 'Aplphabetische Sortierung umkehren (dazu "oui" eingeben) ?', + 'entree_tri_alpha_inverse' => 'Aplphabetische Sortierung umkehren (dazu "oui" eingeben) ?', + 'entree_tri_num' => 'Sortierung der Rubriken (numerisch). Wenn Sie einen Titel angeben, wird das Kriterium {par titre} hinzugefügt und die Rubrieken werden nach Titel sortiert angezeigt.', + 'entree_tri_num_articles' => 'Sortierung der Rubriken (numerisch). Wenn Sie einen Titel angeben, wird das Kriterium {par titre} hinzugefügt und die Rubrieken werden nach Titel sortiert angezeigt.', + 'entree_tri_num_articles_inverse' => 'Numerische Reihenfolge umkehren (dazu "oui" eingeben) ?', + 'entree_tri_num_inverse' => 'Numerische Reihenfolge umkehren (dazu "oui" eingeben) ?', + 'entree_type_objet' => 'Objekttyp', + 'entree_url' => 'Adresse', + 'entree_url_public' => 'Zieladresse nach der Anmeldung', + 'erreur_aucun_type' => 'Kein Eintragstyp gefunden.', + 'erreur_autorisation' => 'Sie dürfen Menüs nicht ändern.', + 'erreur_identifiant_deja' => 'Deise Bezeichnung wird bereits von einem Menü verwendet.', + 'erreur_identifiant_forme' => 'Die Bezeichnung darf nur Buchstaben, Ziffern und den Unterstrich enthalten.', + 'erreur_menu_inexistant' => 'Das angeforderte Menü existiert nicht.', + 'erreur_mise_a_jour' => 'Beim Aktualisieren der Datenbank ist ein Fehler aufgetreten.', + 'erreur_parametres' => 'Fehler in den Seitenparametern', + 'erreur_type_menu' => 'Sie müssen einen Menütyp wählen', + 'erreur_type_menu_inexistant' => 'Dieser Menütyp ist nicht verfügbar.', + + // F + 'formulaire_ajouter_entree' => 'Eintrag hinzufügen', + 'formulaire_ajouter_sous_menu' => 'Untermenü hinzufügen', + 'formulaire_css' => 'CSS-Klassen', + 'formulaire_css_explication' => 'Sie können dem Menü eventuell vorhandene zusätzliche CSS-Klassen zuordnen.', + 'formulaire_deplacer_bas' => 'Nach unten verschieben', + 'formulaire_deplacer_haut' => 'Nach oben verschieben', + 'formulaire_facultatif' => 'Fakultatif', + 'formulaire_identifiant' => 'Bezeichnung', + 'formulaire_identifiant_explication' => 'Vergeben sie ein Schlagwort, mit dem sie das Menü leicht aufrufen können..', + 'formulaire_ieconfig_choisir_menus_a_importer' => 'Wählen Sie die die zu importierenden Menüs', + 'formulaire_ieconfig_importer' => 'Importieren', + 'formulaire_ieconfig_menu_meme_identifiant' => 'ACHTUNG: Ihre Website enthält bereits ein Menü mit der selben ID!', + 'formulaire_ieconfig_menus_a_exporter' => 'Zu exportierende Menüs:', + 'formulaire_ieconfig_ne_pas_importer' => 'Nicht importieren', + 'formulaire_ieconfig_remplacer' => 'Aktuelles Menü durch das zu importierende ersetzen', + 'formulaire_ieconfig_renommer' => 'Menü vor Import umbenennen', + 'formulaire_importer' => 'Menü importieren', + 'formulaire_importer_explication' => 'Wenn sie ein Menü in eine Datei exportiert haben, können sie es jetzt importieren.', + 'formulaire_modifier_entree' => 'Eintrag bearbeiten', + 'formulaire_modifier_menu' => 'Menü bearbeiten:', + 'formulaire_nouveau' => 'Neues Menü', + 'formulaire_partie_construction' => 'Aufbau des Menüs', + 'formulaire_partie_identification' => 'Bezeichnung des Menüs', + 'formulaire_supprimer_entree' => 'Eintrag löschen', + 'formulaire_supprimer_menu' => 'Menü löschen', + 'formulaire_supprimer_sous_menu' => 'Untermenü löschen', + 'formulaire_titre' => 'Titel', + + // I + 'info_afficher_articles' => 'Artikel werden im Menü angezeigt', + 'info_articles_max' => 'Nur wenn die Rubrik maximal @max@ Artikel enthält.', + 'info_articles_max_affiches' => 'Anzeige ist begrenst auf maximal @max@ Artikel.', + 'info_classe_parent' => 'Klasse der übergeordneten Objekte:', + 'info_connexion_obligatoire' => 'Login obligatorisch', + 'info_deconnexion_obligatoire' => 'Nur wenn nicht eingelogt', + 'info_masquer_articles_uniques' => 'Einzelne Artikel maskieren.', + 'info_numero_menu' => 'MENÜ NUMMER:', + 'info_page_speciale' => 'Link zu Seite « @page@ »', + 'info_page_speciale_zajax' => 'Modale Box der Seite « @page@ » für den Block « @bloc@ »', + 'info_rubrique_courante' => 'Aktuelle Rubrik', + 'info_rubriques_exclues' => ' / außer Rubrik(en) @id_rubriques@', + 'info_rubriques_max_affichees' => 'Auf @max@ Rubriken begrenzen', + 'info_secteur_exclus' => ' / außer Sektor(en) @id_secteur@', + 'info_sousrub_cond' => 'Nur die Unterrubriken der aktuellen Rubrik werden angezeigt', + 'info_tous_groupes_mots' => 'Alle Schlagwortgruppen', + 'info_traduction_recuperee' => 'Die angezeigte Übersetzung wird je nach Sprachkontext gewählt.', + 'info_tri' => 'Sortierung der Rubriken:', + 'info_tri_alpha' => '(alphabetisch)', + 'info_tri_articles' => 'Sortierung der Artikel', + 'info_tri_num' => '(numerische)', + + // N + 'noisette_description' => 'Fügt ein mit dem Plugin "Menus" generiertes Menü ein', + 'noisette_label_afficher_titre_menu' => 'Titel des Menüs anzeigen?', + 'noisette_label_identifiant' => 'Dieses Menü anzeigen:', + 'noisette_nom_noisette' => 'Menü', + 'nom_menu_accueil' => 'Startseite', + 'nom_menu_articles_rubrique' => 'Artikel einer Rubrik', + 'nom_menu_deconnecter' => 'Abmelden', + 'nom_menu_espace_prive' => 'Einloggen / zum Redaktionssystem', + 'nom_menu_groupes_mots' => 'Schlagworte und Artikel einer Schlagwortgruppe', + 'nom_menu_lien' => 'Beliebiger Link', + 'nom_menu_mapage' => 'Meine Seite', + 'nom_menu_mots' => 'Artikel eines Schlagworts', + 'nom_menu_objet' => 'Artikel, Rubrik oder anderes SPIP-Objekt', + 'nom_menu_page_speciale' => 'Link zu einer HTML-Vorlage', + 'nom_menu_page_speciale_zajax' => 'Block einer ZPIP-Seite', + 'nom_menu_rubriques_completes' => 'Listen- oder Baumansicht von Rubriken und Artikeln mit zahlreichen Optionen', + 'nom_menu_rubriques_evenements' => 'Ereignisse der Rubriken', + 'nom_menu_secteurlangue' => 'Hauptrubriken nach Sprache', + 'nom_menu_texte_libre' => 'Freitext', + + // T + 'tous_les_articles' => '... alle Artikel', + 'toutes_les_rubriques' => '... alle Rubriken' +); + +?> diff --git a/www/plugins/menus_1/lang/menus_en.php b/www/plugins/menus_1/lang/menus_en.php new file mode 100644 index 00000000..ee8adad9 --- /dev/null +++ b/www/plugins/menus_1/lang/menus_en.php @@ -0,0 +1,174 @@ + 'Do you really want delete this entry?', + + // D + 'description_menu_accueil' => 'Link to website\'s home page.', + 'description_menu_articles_rubrique' => 'Display the list of articles in a section.', + 'description_menu_deconnecter' => 'If the visitor is connected, add an entry offering disconnection.', + 'description_menu_espace_prive' => 'Link enabling the connection to the site if you aren\'t already connected, and then to enter the private space if you are authorised to do so.', + 'description_menu_groupes_mots' => 'Automatically show a menu listing the keyword of the group and the linked articles. By default it shows the list of keyword groups and the keywords within them. If a groupes_mots.html template exists, the link to the group is used.', + 'description_menu_lien' => 'Adds an individually specified link, either an internal one (relative URL), or an external one (http://...).', + 'description_menu_mapage' => 'If visitors are connected, add a link to their author page.', + 'description_menu_mots' => 'Automatically shows a menu listing the articles linked to a keyword.', + 'description_menu_objet' => 'Creates a link to s SPIP object: article, section or other. By default, the entry will bear the the title of the object.', + 'description_menu_page_speciale' => 'Adds a link to a page template using a URL of the form spip.php?page=name¶m1=xx¶m2=yyy... Such pages are often used by plugins.', + 'description_menu_page_speciale_zajax' => 'Add a link to a block in a page accessible by a URL of the type spip.php?page=name¶m1=xx¶m2=yyy... This requires a Z type template and the médiabox plugin.', + 'description_menu_rubriques_articles' => 'Display a list of sections, optionally including sub-sections and articles nested to several levels. By default, all sections will be displayed starting from the site root and sorted by title (numerically then alphabetically).Articles in a given section will always be listed after any sub-sections.', + 'description_menu_rubriques_completes' => 'Displays a list of topics and, if you want, sub-sections on many levels. By default, displays all entries from the root, sorted by title (alphabetically and numerically).', + 'description_menu_secteurlangue' => 'This entry can be used by sites which have one language per sector. It displays a menu which lists the sections of the sector corresponding to the language of the page, and if desired the subsections to several levels. By default, all sections are shown from the site root, sorted by title (numerically then alphabetically).', + 'description_menu_texte_libre' => 'Just the text that you would like, or a SPIP language code (<:...:>)', + + // E + 'editer_menus_editer' => 'Edit this menu', + 'editer_menus_explication' => 'Create and configure menus for your site.', + 'editer_menus_exporter' => 'Export this menu', + 'editer_menus_nouveau' => 'Create a new menu', + 'editer_menus_titre' => 'Site menus', + 'entree_afficher_articles' => 'Include articles in the menu? (put "oui" for this)', + 'entree_afficher_item_suite' => 'Include articles in the menu? (put "oui" for this)', + 'entree_articles_max' => 'If so, show the articles only if the section contains a maximum of xx articles? (put the maximum number of articles, leave blank to display all articles)', + 'entree_articles_max_affiches' => 'If so, limit the number of articles listed to a maximum of xx (followed by an item "... All the articles" with a link to the parent section)? (indicate the maximum number of articles, leave blank to display all of them)', + 'entree_aucun' => 'None', + 'entree_bloc' => 'Zpip block', + 'entree_choisir' => 'Choose the type of item you want to add:', + 'entree_classe_parent' => 'CSS class of the links of the parent elements. This class will be added to the li>a having a subsequent ul / li. For example, if you type "daddy", it allows you to use the plugin "menu deroulant 2" to format the menu.', + 'entree_connexion_objet' => 'Requires being connected (insert "session") or disconnected (insert "nosession") in order to see the object', + 'entree_contenu' => 'Content', + 'entree_css' => 'CSS classes of this (container) item', + 'entree_css_lien' => 'CSS classes of the link', + 'entree_id_groupe' => 'Number of the keyword group', + 'entree_id_mot' => 'Number of the keyword', + 'entree_id_objet' => 'Number', + 'entree_id_rubrique' => 'Number of the parent section', + 'entree_id_rubrique_ou_courante' => 'Parent or "current" section number if the parent section is the current section of the context', + 'entree_id_rubriques_exclues' => 'Numbers of the sections to be excluded, separated by commas', + 'entree_id_secteur_exclus' => 'Numbers of the sectors to be excluded, separated by commas', + 'entree_infini' => 'To infinity', + 'entree_mapage' => 'My page', + 'entree_masquer_articles_uniques' => 'If so and if a section contains a only one article, hide it? (put "oui" for this)', + 'entree_niveau' => 'Sub-sections level', + 'entree_nombre_articles' => 'Maximum number of articles (0 by default)', + 'entree_page' => 'Name of the page', + 'entree_parametres' => 'List of parameters', + 'entree_rubriques_max_affichees' => 'If so, limit the number of sections listed to a maximum of xx (followed by an item "... All sections" with a link to the parent section)? (indicate the maximum number of sections, leave blank to show all of them)', + 'entree_sousrub_cond' => 'Only display the subsections for the current section (enter "oui" (yes), otherwise leave it empty)', + 'entree_suivant_connexion' => 'Restrict this entry according to the connection (put "connecte" to display it only if the visitor is connected, "deconnecte" in the opposite case, put "admin" if the author is administrator or leave blank to always display it)', + 'entree_suivant_connexion_connecte' => 'only if connected', + 'entree_suivant_connexion_deconnecte' => 'only if disconnected', + 'entree_sur_n_articles' => '@n@ article(s) shown', + 'entree_sur_n_mots' => '@n@ keyword(s) shown', + 'entree_sur_n_niveaux' => 'On @n@ level(s)', + 'entree_titre' => 'Title', + 'entree_titre_connecter' => 'The title for accessing the identification form', + 'entree_titre_prive' => 'The title for accessing the private zone', + 'entree_traduction_articles_rubriques' => 'If possible, show the articles of the section in the language of the context (put "trad" for this)', + 'entree_traduction_objet' => 'For an article, select the translation depending on the context (insert "trad" to accomplish this)', + 'entree_tri_alpha' => 'Sort criterion of the sections (alphabetical). If you type "date", the added criterion will be {par date} (by date) and the sections will be sorted by date', + 'entree_tri_alpha_articles' => 'Sort criterion of the articles (alphabetical). If you type "date", the added criterion will be {par date} and the article will be sorted by date', + 'entree_tri_alpha_articles_inverse' => 'Reverse the sorting alphabetically? (put "oui" for this)', + 'entree_tri_alpha_inverse' => 'Reverse the alphabetical sorting? (put "oui" for this)', + 'entree_tri_num' => 'Sort criterion of the sections (digital). If you type "titre" (title), the added criterion will be {par num titre} and the sections will be number of the titles', + 'entree_tri_num_articles' => 'Sort criterion of the articles (digital). If you type "titre" (title), the added criterion will be {par num titre} and the articles will be sorted by number of title', + 'entree_tri_num_articles_inverse' => 'Reverse the digital sort order? (put "oui" for this)', + 'entree_tri_num_inverse' => 'Reverse the digital sort order? (put "oui" for this)', + 'entree_type_objet' => 'Object type', + 'entree_url' => 'URL', + 'entree_url_public' => 'Return address after logging in', + 'erreur_aucun_type' => 'No item type was found.', + 'erreur_autorisation' => 'You are not allowed to modify menus.', + 'erreur_identifiant_deja' => 'This identifier is already used by another menu.', + 'erreur_identifiant_forme' => 'Identifier must contain only letters, digits or underscores.', + 'erreur_menu_inexistant' => 'Menu number @id@ doesn\'t exist.', + 'erreur_mise_a_jour' => 'An error occured during database update.', + 'erreur_parametres' => 'There is an error in the parameters of the page', + 'erreur_type_menu' => 'You need to choose a type of menu', + 'erreur_type_menu_inexistant' => 'This kind of menu is not / no longer available', + + // F + 'formulaire_ajouter_entree' => 'Add a menu item', + 'formulaire_ajouter_sous_menu' => 'Create a sub-menu', + 'formulaire_css' => 'CSS classes', + 'formulaire_css_explication' => 'You can add to your menu additional CSS classes.', + 'formulaire_deplacer_bas' => 'Move down', + 'formulaire_deplacer_haut' => 'Move up', + 'formulaire_facultatif' => 'Optional', + 'formulaire_identifiant' => 'Identifier', + 'formulaire_identifiant_explication' => 'Give a unique keyword which let you call your menu easly.', + 'formulaire_ieconfig_choisir_menus_a_importer' => 'Select which menu(s) you would like to import.', + 'formulaire_ieconfig_importer' => 'Import', + 'formulaire_ieconfig_menu_meme_identifiant' => 'WARNING: there is already a menu with the same name on your site!', + 'formulaire_ieconfig_menus_a_exporter' => 'Menus to export:', + 'formulaire_ieconfig_ne_pas_importer' => 'Do not import', + 'formulaire_ieconfig_remplacer' => 'Overwrite the current menu with the imported menu', + 'formulaire_ieconfig_renommer' => 'Rename this menu before importing', + 'formulaire_importer' => 'Import menu', + 'formulaire_importer_explication' => 'If you exported a menu in a file, you can import now.', + 'formulaire_modifier_entree' => 'Modify this menu item', + 'formulaire_modifier_menu' => 'Modify menu:', + 'formulaire_nouveau' => 'New menu', + 'formulaire_partie_construction' => 'Menu construction', + 'formulaire_partie_identification' => 'Menu identification', + 'formulaire_supprimer_entree' => 'Delete this menu item', + 'formulaire_supprimer_menu' => 'Delete the menu', + 'formulaire_supprimer_sous_menu' => 'Delete this sub-menu', + 'formulaire_titre' => 'Title', + + // I + 'info_afficher_articles' => 'The articles will be included in the menu.', + 'info_articles_max' => 'Only if the section contains more than @max@ articles', + 'info_articles_max_affiches' => 'Display limited to @max@ articles', + 'info_classe_parent' => 'Class of the parent elements:', + 'info_connexion_obligatoire' => 'Connection required', + 'info_deconnexion_obligatoire' => 'Only when disconnected', + 'info_masquer_articles_uniques' => 'Unique articles hidden', + 'info_numero_menu' => 'MENU NUMBER:', + 'info_page_speciale' => 'Link to the page « @page@ »', + 'info_page_speciale_zajax' => 'Modalbox for the "@page@" page for the "@bloc@" block', + 'info_rubrique_courante' => 'Current section', + 'info_rubriques_exclues' => ' / except section(s) @id_rubriques@', + 'info_rubriques_max_affichees' => 'Display limited to @max@ sections', + 'info_secteur_exclus' => ' / except sector(s) @id_secteur@', + 'info_sousrub_cond' => 'Only the subsections of the current section are displayed.', + 'info_tous_groupes_mots' => 'All keyword groups', + 'info_traduction_recuperee' => 'The context will determine the selected translation', + 'info_tri' => 'Sort sections:', + 'info_tri_alpha' => '(alphabetical)', + 'info_tri_articles' => 'Sort articles:', + 'info_tri_num' => '(numerical)', + + // N + 'noisette_description' => 'Insert a menu defined with the Menus plugin.', + 'noisette_label_afficher_titre_menu' => 'Show the menu title?', + 'noisette_label_identifiant' => 'Menu to display:', + 'noisette_nom_noisette' => 'Menu', + 'nom_menu_accueil' => 'Home Page', + 'nom_menu_articles_rubrique' => 'Articles of a section', + 'nom_menu_deconnecter' => 'Disconnect', + 'nom_menu_espace_prive' => 'Login / link to the private zone', + 'nom_menu_groupes_mots' => 'Keywords and Articles of a group of keywords', + 'nom_menu_lien' => 'Individual link', + 'nom_menu_mapage' => 'My page', + 'nom_menu_mots' => 'Articles of a keyword', + 'nom_menu_objet' => 'Article, section or other SPIP object', + 'nom_menu_page_speciale' => 'Link to a page template', + 'nom_menu_page_speciale_zajax' => 'A block in a Zpip page', + 'nom_menu_rubriques_completes' => 'List or tree of sections and articles (with many options)', + 'nom_menu_rubriques_evenements' => 'Section-related events', + 'nom_menu_secteurlangue' => 'Language sectors', + 'nom_menu_texte_libre' => 'Free text', + + // T + 'tous_les_articles' => '... All articles', + 'toutes_les_rubriques' => '... All sections' +); + +?> diff --git a/www/plugins/menus_1/lang/menus_es.php b/www/plugins/menus_1/lang/menus_es.php new file mode 100644 index 00000000..dbcaca08 --- /dev/null +++ b/www/plugins/menus_1/lang/menus_es.php @@ -0,0 +1,174 @@ + '¿Quiere realmente eliminar esta entrada?', + + // D + 'description_menu_accueil' => 'Enlace a la portada del sitio.', + 'description_menu_articles_rubrique' => 'Muestra una lista de artículos de una sección.', + 'description_menu_deconnecter' => 'Si el visitante se conecta, se añade una entrada que propone la desconexión.', + 'description_menu_espace_prive' => 'Enlace para conectarse al sitio si no está ya conectado, y luego ir a la zona privada, si se tiene autorización.', + 'description_menu_groupes_mots' => 'Muestra automáticamente un menú con las palabras del grupo y artículos relacionados. De manera predeterminada, muestra la lista de frases y palabras. Si un esqueleto groupes_mots.html existe, el enlace con el grupo es utilizado.', + 'description_menu_lien' => 'Añade un enlace arbitrario interno (URL relativa) o externo (http://...).', + 'description_menu_mapage' => 'Si el visitante se conecta, añade un enlace a su página de autor.', + 'description_menu_mots' => 'Muestra automáticamente un menú que enumera los artículos relacionados con la palabra clave.', + 'description_menu_objet' => 'Crea un enlace a un objeto de SPIP: artículo, sección u otro. De manera predeterminada, la entrada será el título del objeto.', + 'description_menu_page_speciale' => 'Añade un enlace a un esqueleto página accesible para una url del tipo spip.php?page=nom¶m1=xx¶m2=yyy... Estas páginas se proporcionan a menudo por los plugins.', + 'description_menu_page_speciale_zajax' => 'Añadir un enlace a un bloque de una página accesible por una url del tipo spip.php?page=nom¶m1=xx¶m2=yyy... Esto requiere un esqueleto de tipo Z y el plugin Mediabox.', + 'description_menu_rubriques_articles' => 'Muestra una lista de secciones y, si se quiere, subsecciones y artículos en varios niveles. De manera predeterminada, muestra todas las secciones de la raíz, ordenados por título (en orden alfabético y numérico). Los artículos se colocan automáticamente después de las secciones.', + 'description_menu_rubriques_completes' => 'Muestra una lista de secciones y, si se quiere, las subsecciones en varios niveles. Por defecto, muestra todas las secciones desde la raíz, ordenadas por título (numéricamente, y luego alfabéticamente).', + 'description_menu_secteurlangue' => 'Esta entrada es específica de los sitios que utilizan un sector para cada idioma. Se muestra automáticamente un menú con las secciones de la zona correspondiente al idioma de la página y, si se quiere, las sub-secciones en varios niveles. De manera predeterminada, muestra todas las secciones de la raíz, ordenados por título (en orden alfabético y numérico).', + 'description_menu_texte_libre' => 'Simplemente el texto que deseas, o un código de idiomas SPIP (<:...:>)', + + // E + 'editer_menus_editer' => 'Modificar el menú', + 'editer_menus_explication' => 'Crear y configurar aquí los menús de su sitio', + 'editer_menus_exporter' => 'Exportar el menú', + 'editer_menus_nouveau' => 'Crear un nuevo menú', + 'editer_menus_titre' => 'Menús del sitio', + 'entree_afficher_articles' => 'Incluir los artículos en en el menú  ? (escribe "oui" para para que ocurra)', + 'entree_afficher_item_suite' => 'Incluir los artículos en el menu ? (escribe "oui" para esto)', + 'entree_articles_max' => 'Si es así, ¿ver los artículos sólo si la sección contiene como máximo xx artículos? (indicar el máximo número de artículos, o bien dejar en blanco para mostrar todos los artículos)', + 'entree_articles_max_affiches' => 'Si es así, ¿limitar el número de artículos listados en xx máximo (seguidos de un ítem "... Todos los artículos", con un enlace a la sección padre)? (Indique el número máximo de artículos, dejar en blanco para mostrar todos los artículos)', + 'entree_aucun' => 'Ninguno', + 'entree_bloc' => 'Bloquear Zpip', + 'entree_choisir' => 'Seleccione el tipo de entrada que desea añadir:', + 'entree_classe_parent' => 'Clase de vínculos de elementos primarios. Esta clase se añadirá a li>a asociados a ul/li. Por ejemplo, si escribe "papá", lo que le permite utilizar el plugin "menu deroulant 2" para este menú.', + 'entree_connexion_objet' => 'Obligar a estar conectado (poner "session") o desconectado (poner "nosession") para ver el objeto', + 'entree_contenu' => 'Contenido', + 'entree_css' => 'Clases css de la entrada (contenedor)', + 'entree_css_lien' => 'Clases CSS del link', + 'entree_id_groupe' => 'Número del grupo de palabras clave', + 'entree_id_mot' => 'Número de palabra clave', + 'entree_id_objet' => 'Número', + 'entree_id_rubrique' => 'Número de la sección padre', + 'entree_id_rubrique_ou_courante' => 'Número de la sección madre o "corriente" si la sección padre es la sección corriente del contexto', + 'entree_id_rubriques_exclues' => 'Números de secciones a excluir, separadas por coma', + 'entree_id_secteur_exclus' => 'Números de sectores a excluir, separados por coma', + 'entree_infini' => 'Al infinito', + 'entree_mapage' => 'Mi página personal', + 'entree_masquer_articles_uniques' => 'Si es así y si una sección contiene un solo elemento, se esconde? (Poner "oui" para esto)', + 'entree_niveau' => 'Niveles de sub-secciones', + 'entree_nombre_articles' => 'Número de artículos como máximo (0 por defecto)', + 'entree_page' => 'Nombre de la página', + 'entree_parametres' => 'Lista de parámetros', + 'entree_rubriques_max_affichees' => 'Si es así, limitar el número de secciones listadas a xx máximo (seguido por una entrada "... Todos las secciones" con un enlace a la sección padre)? (Especifique el número máximo de secciones, dejar en blanco para mostrarlas todas)', + 'entree_sousrub_cond' => 'Mostrar sólo subcategorías de la sección actual (poner "oui", de lo contrario dejar en blanco)', + 'entree_suivant_connexion' => 'Restringir esta entrada según el estado de conexión (poner "connecte" para mostrar sólo si el visitante está conectado, "deconnecte" para el caso contrario, poner "admin" si el autor es administrador o dejar en blanco para mostrar siempre)', + 'entree_suivant_connexion_connecte' => 'sólo si conectado', + 'entree_suivant_connexion_deconnecte' => 'sólo si desconectado', + 'entree_sur_n_articles' => '@n@ artículo(s) mostrado(s)', + 'entree_sur_n_mots' => '@n@ palabra(s) mostrada(s)', + 'entree_sur_n_niveaux' => 'En @n@ nivel(es)', + 'entree_titre' => 'Título', + 'entree_titre_connecter' => 'Título para acceder al formulario de identificación', + 'entree_titre_prive' => 'Título para acceder al espacio privado', + 'entree_traduction_articles_rubriques' => 'Siempre que sea posible, ver los artículos en la categoría en el idioma del contexto (poner "trad" para esto)', + 'entree_traduction_objet' => 'En el caso de un artículo, seleccione la traducción en función del contexto (poner "trad" para esto)', + 'entree_tri_alpha' => 'Criterio de orden de secciones (alfabético). Si escribe "date", el criterio será {par date} y los artículos serán ordenados por fecha', + 'entree_tri_alpha_articles' => 'Criterio de orden de los artículos (alfabético). Si escribe "date", el criterio será {par date} y los artículos serán ordenados por fecha', + 'entree_tri_alpha_articles_inverse' => 'Invertir el criterio de orden alfabético ? (poner "oui" para esto)', + 'entree_tri_alpha_inverse' => 'Invertir el criterio de orden alfabético? (poner "oui" para esto)', + 'entree_tri_num' => 'Criterio de orden de las secciones (numérico). Si escribe "titre", el criterio será {par num titre} y las secciones serán ordenados por fecha', + 'entree_tri_num_articles' => 'Criterio de orden de los artículos (numérico). Si escribe "titre", el criterio será {par num titre} y los artículos serán ordenados por fecha', + 'entree_tri_num_articles_inverse' => '¿Invertir el criterio de orden numérico ? (poner "oui" poara esto)', + 'entree_tri_num_inverse' => '¿Invertir el criterio de orden numérico ? (poner "oui" poara esto)', + 'entree_type_objet' => 'Tipo de objeto', + 'entree_url' => 'Dirección', + 'entree_url_public' => 'Dirección de retorno luego de la conexión', + 'erreur_aucun_type' => 'Ningún tipo de entrada se encontró.', + 'erreur_autorisation' => 'No estás autorizado a modificar los menús.', + 'erreur_identifiant_deja' => 'Este identificador ya es utilizado por un menú.', + 'erreur_identifiant_forme' => 'El identificador debe contener sólo letras, números o guión bajo.', + 'erreur_menu_inexistant' => 'El menú con numéro @id@ solicitado no existe.', + 'erreur_mise_a_jour' => 'Se produjo un error durante la actualización de la base de datos.', + 'erreur_parametres' => 'Hubo un error en los parámetros de la página', + 'erreur_type_menu' => 'Debes elegir un tipo de menú', + 'erreur_type_menu_inexistant' => 'Este tipo de menu no está, o ya no está disponible', + + // F + 'formulaire_ajouter_entree' => 'Añadir una entrada', + 'formulaire_ajouter_sous_menu' => 'Crear un submenú', + 'formulaire_css' => 'Clases CSS', + 'formulaire_css_explication' => 'Puedes agregar al menú eventuales clases CSS suplementarias.', + 'formulaire_deplacer_bas' => 'Bajar', + 'formulaire_deplacer_haut' => 'Subir', + 'formulaire_facultatif' => 'Opcional', + 'formulaire_identifiant' => 'Identificador', + 'formulaire_identifiant_explication' => 'Indique una palabra clave única que le permita nombrar a su menú fácilmente.', + 'formulaire_ieconfig_choisir_menus_a_importer' => 'Elija el(los) menú(s) que desea importar.', + 'formulaire_ieconfig_importer' => 'Importar', + 'formulaire_ieconfig_menu_meme_identifiant' => 'ATENCION : un menú con el mismo identificador ya existe en tu sitio !', + 'formulaire_ieconfig_menus_a_exporter' => 'Menús a exportar :', + 'formulaire_ieconfig_ne_pas_importer' => 'No importar', + 'formulaire_ieconfig_remplacer' => 'Reemplazar el menú actual por el menú importado', + 'formulaire_ieconfig_renommer' => 'Renombrar el menú antes de importar', + 'formulaire_importer' => 'Importar un menú', + 'formulaire_importer_explication' => 'Si ha exportado un menú en un archivo, puede importarlo ahora.', + 'formulaire_modifier_entree' => 'Modificar esta entrada', + 'formulaire_modifier_menu' => 'Modificar el menú :', + 'formulaire_nouveau' => 'Nuevo menú', + 'formulaire_partie_construction' => 'Construcción del menú', + 'formulaire_partie_identification' => 'Identificación del menú', + 'formulaire_supprimer_entree' => 'Eliminar esta entrada', + 'formulaire_supprimer_menu' => 'Eliminar el menú', + 'formulaire_supprimer_sous_menu' => 'Eliminar el submenú', + 'formulaire_titre' => 'Título', + + // I + 'info_afficher_articles' => 'Los artículos serán incluídos en el menú', + 'info_articles_max' => 'Sólo si la sección contiene como máximo @max@ artículos', + 'info_articles_max_affiches' => 'Visualización limitada a un máximo de @max@ artículos', + 'info_classe_parent' => 'Clase de elementos padre : ', + 'info_connexion_obligatoire' => 'Conexión obligatoria', + 'info_deconnexion_obligatoire' => 'Únicamente desconectado', + 'info_masquer_articles_uniques' => 'Artículos únicos ocultos', + 'info_numero_menu' => 'MENU NÚMERO :', + 'info_page_speciale' => 'Link a la página « @page@ »', + 'info_page_speciale_zajax' => 'Modalbox de la página «@page@» para el bloque «@bloc@» ', + 'info_rubrique_courante' => 'Sección en curso', + 'info_rubriques_exclues' => ' / salvo la(s) sección(es) @id_rubriques@', + 'info_rubriques_max_affichees' => 'Limitado a @max@ secciones', + 'info_secteur_exclus' => ' / salvo el/los sector(es) @id_secteur@', + 'info_sousrub_cond' => 'Sólo las subsecciones de las secciones que se muestran.', + 'info_tous_groupes_mots' => 'Todos los grupos de palabras', + 'info_traduction_recuperee' => 'El contexto decidirá la traducción elegida', + 'info_tri' => 'Orden de secciones:', + 'info_tri_alpha' => '(alfabético)', + 'info_tri_articles' => 'Orden de artículos :', + 'info_tri_num' => '(numérico)', + + // N + 'noisette_description' => 'Inserta un menú definido con el plugin Menús', + 'noisette_label_afficher_titre_menu' => 'Mostrar el título del menú ?', + 'noisette_label_identifiant' => 'Menú a mostrar  :', + 'noisette_nom_noisette' => 'Menú', + 'nom_menu_accueil' => 'Inicio', + 'nom_menu_articles_rubrique' => 'Artículos de una sección', + 'nom_menu_deconnecter' => 'Desconectarse', + 'nom_menu_espace_prive' => 'Conectarse / link al espacio privado', + 'nom_menu_groupes_mots' => 'Palabras claves y artículos de un grupo de palabras clave', + 'nom_menu_lien' => 'Link arbitrario', + 'nom_menu_mapage' => 'Mi página', + 'nom_menu_mots' => 'Artículos de una palabra clave', + 'nom_menu_objet' => 'Artículo, sección u otro objeto de SPIP', + 'nom_menu_page_speciale' => 'Link a un esqueleto de página', + 'nom_menu_page_speciale_zajax' => 'Un bloque de una página Zpip', + 'nom_menu_rubriques_completes' => 'Lista o arborescencia de secciones y de artículos (con varias opciones)', + 'nom_menu_rubriques_evenements' => 'Eventos de secciones', + 'nom_menu_secteurlangue' => 'Sectores de idioma', + 'nom_menu_texte_libre' => 'Texto libre', + + // T + 'tous_les_articles' => '... Todos los artículos', + 'toutes_les_rubriques' => '... Todas las secciones' +); + +?> diff --git a/www/plugins/menus_1/lang/menus_fa.php b/www/plugins/menus_1/lang/menus_fa.php new file mode 100644 index 00000000..6b9a8b5f --- /dev/null +++ b/www/plugins/menus_1/lang/menus_fa.php @@ -0,0 +1,190 @@ + 'واقعاً مي‌خواهيد اين مدخل را حذف كنيد؟', + + // D + 'description_menu_accueil' => 'پيوند به صفحه‌ي پذيرش سايت.', + 'description_menu_articles_rubrique' => 'نمايش فهرست مقالات يك بخش ', + 'description_menu_deconnecter' => 'اگر بازديد كننده وصل شد، يك مدخل اضافه كنيد تا قطع شدن را به او ارايه دهد.', + 'description_menu_espace_prive' => 'پيوندي كه ارتباط با سايت را فعال مي‌كند در صورتي كه قبلاً به سايت وصل نشده باشيد، و بعد وارد قسمت شخصي سايت شويد البته اگر مجاز باشيد. ', + 'description_menu_groupes_mots' => 'به طور خودكار گروه‌واژه‌ها و مقالات مرتبط با آن‌ها را فهرست مي‌كند. اين فهرست به صورت پيش‌ گزيده گروه‌‌واژه‌ها و كليدواژه‌هاي تحت آن‌ها را نشان مي‌دهد. اگر اسكلت يك groupes_mots.html وجود داشته باشد، پيوند به آن گروه‌واژه فعال مي‌شود. ', + 'description_menu_lien' => 'افزودن يك پيوند فرداً تعيين شده، هم دروني (يوآرال نسبي) و هم بروني (http://...)', + 'description_menu_mapage' => 'اگر بازديد‌كننده متصل است، يك پيوند به صفحه‌ي نويسنده‌‌‌اش اضافه كن.', + 'description_menu_mots' => 'خودكار يك منوي فهرست تمام مقالات مرتبط با كليدواژه را نشان بده.', + 'description_menu_objet' => 'ايجاد پيوند به چيزهاي اسپيپي: مقاله، بخش يا چيزهاي ديگر. پيش‌گزيده، هر مدخل تيتر آن چيز را داراست.', + 'description_menu_page_speciale' => 'افزودن پيوند به صفحه‌ي اسكلت با استفاده از يوآرال اين فرم spip.php?page=nom¶m1=xx¶m2=yyy.... چنين صفحه‌هايي اغلب توسط پلاگين‌ها استفاده مي‌شوند. ', + 'description_menu_page_speciale_zajax' => 'افزودن يك پيوند به يك بلوك در صفحه‌اي قابل دسترس به وسيله‌ي يك يوآرال از نوع spip.php?page=nom¶m1=xx¶m2=yyy.... اين مستلزم يك استكلت نوع z و يك پلاگين médiabox خواهد بود. ', + 'description_menu_rubriques_articles' => 'نمايش يك فهرست از بخش‌ها، و اگر مي‌خواهيد، زيربخش‌ها و مقاله‌ها در چندين سطح. +به صورت پيش‌گزيده، نمايش تمام بخش‌ها ريشه، مرتب شده بر اساس تيتر(شماره‌اي و بعد الفبايي). مقاله‌ها به طور نظام‌مند بعد از بخش‌ها قرار مي‌گيرند. +', + 'description_menu_rubriques_completes' => 'Affiche une liste de rubriques et, si on veut, les sous-rubriques sur plusieurs niveaux. Par défaut, affiche toutes les rubriques depuis la racine, triées par titre (numériquement puis alphabétiquement).', # NEW + 'description_menu_secteurlangue' => 'اين مدخل به سايت‌هايي اختصاص دارد كه يك بخش براي زبان دارند. اين مدخل به صورت خودكار منيويي را نشان مي‌دهد كه بخش‌ها آن قسمت منطبق با آن زبان و صفحه، و اگر بخواهند زيربخش‌ها را تا چندين سطح، را فهرست مي‌كنند. به صورت پيش‌گزيده، تمام بخش‌هاي عد از ريشه را، به ترتيب تيتر (طبق شماره و بعد طبق الفا) نشان مي‌دهد. +', + 'description_menu_texte_libre' => 'فقط متني كه دوست داريد، يا يك كد زباني اسپيپ (<:...:>)', + + // E + 'editer_menus_editer' => 'اصلاح اين منيو', + 'editer_menus_explication' => 'منيوهاي سايتتان را اينجا ايجاد و پيكربندي كنيد.', + 'editer_menus_exporter' => 'صادر سازي اين منيو', + 'editer_menus_nouveau' => 'ايجاد يك منيوي جديد', + 'editer_menus_titre' => 'منيوهاي سايت', + 'entree_afficher_articles' => 'مقاله‌ها در منيو‌ گنجانده شود؟ (براي اين بگذاريد «بله»)', + 'entree_afficher_item_suite' => 'گنجاندن مقاله‌ها در منيو؟ (براي اين بگذاريد «بله»)', + 'entree_articles_max' => 'اگر بله، نمايش مقاله‌ها فقط اگر بخش شامل حداكثر ايكس ايكس مقاله است؟ (عدد مربوط به حداكثر مقاله را بگذاريد، براي نمايش تمام مقاله‌ها، خالي بگذاريد) +', + 'entree_articles_max_affiches' => 'در اين صورت، تعداد مقاله‌هاي فهرست شده تا حداكثر xx محدود شود(بعد از يك فقره «...تمام مقاله‌ها» با يك لينك به بخش‌ والد)؟ (تعداد حداكثر مقاله‌ها را مشخص كنيد ، يا خالي بگذاريد تا تمام مقاله‌ها نشان داده شوند) +', + 'entree_aucun' => 'هيچي', + 'entree_bloc' => 'بلاك ازپيپ (Bloc Zpip)', + 'entree_choisir' => 'نوع مدخلي را كه مي‌خواهيد اضافه كنيد انتخاب نماييد.', + 'entree_classe_parent' => 'طبقه‌ي پيوند‌هاي عناصر والد. اين طبقه دو باره به li>داراي پيامد ul / lاضافه خواهد كرد. +به عنوان نمونه، اگر شما «ددي» را تايپ كنيد، اين به شما اجازه مي‌دهد تا پلاگين« منيو طوماري 2»» را براي فرمت بخشي به منيو مورد استفاده قرار دهيد. +', + 'entree_connexion_objet' => 'براي ديدن اوبژه وصل بودن («session»وارد كنيد) يا قطع بودن («nosession»وارد كنيد) لازم است', + 'entree_contenu' => 'محتوا', + 'entree_css' => 'كلاش‌هاي سي.اس.اس (حامل) مدخل', + 'entree_css_lien' => 'كلاس‌هاي سي.اس.اس پيوند', + 'entree_id_groupe' => 'تعداد گروه واژه‌ها', + 'entree_id_mot' => 'تعداد كليدواژه‌ها', + 'entree_id_objet' => 'تعداد', + 'entree_id_rubrique' => 'تعداد بخش‌هاي والد', + 'entree_id_rubrique_ou_courante' => 'تعداد بخش‌ والد يا «فعلي» اگر بخش‌ والد در متن بخش فعلي باشد.', + 'entree_id_rubriques_exclues' => 'تعداد بخش‌ها براي كنارگذاري، جداشده با ويرگول', + 'entree_id_secteur_exclus' => 'تعداد بخش‌ها براي داخل‌ گذاري، جداشده با ويرگول', + 'entree_infini' => 'تا بي‌نهايت', + 'entree_mapage' => 'صفحه‌ي شخصي من', + 'entree_masquer_articles_uniques' => 'در اين صورت و اگر يك بخش فقط يك مقاله دارد، آن را مخفي كند؟ (براي اين كار بگذاريد «بله»)', + 'entree_niveau' => 'سطح زيربخش‌ها', + 'entree_nombre_articles' => 'تعداد حداكثر مقاله‌ها (پيش گزيده صفر)', + 'entree_page' => 'نام صفحه', + 'entree_parametres' => 'فهرست پارامترها', + 'entree_rubriques_max_affichees' => 'در اين صورت، تعداد بخش‌هاي فهرست شده تا حداكثر xx محدود شئذ (در پي فقره‌‌ي . . . «تمام بخش‌ها» با پيوند به بخش والد)؟ +(حداكثر تعداد بخش‌ها را تعيين كنيد، براي نشان دادن تمام آن‌ها خالي بگذاريد) +', + 'entree_sousrub_cond' => 'فقط نمايش زيربخش‌هاي بخش فعلي (بگذاريد «بله»، در غيراينصورت خالي بگذاريد)', + 'entree_suivant_connexion' => 'منحصر سازي مدخل بعدي به اتصال (بگذاريد «اتصال» براي نمايش فقط اگر بازديد كننده متصل باشد، بگذاريد «قطع» براي مورد عكس، يا خالي بگذاريد تا هميشه نشان داده شود). +', # MODIF + 'entree_suivant_connexion_connecte' => 'فقط اگر متصل باشد', + 'entree_suivant_connexion_deconnecte' => 'فقط اگر قطع باشد', + 'entree_sur_n_articles' => '@n@ مقاله‌ي منتشره', + 'entree_sur_n_mots' => '@n@ كلمه‌هاي منتشره ', + 'entree_sur_n_niveaux' => 'تحت @n@ سطح', + 'entree_titre' => 'تيتر', + 'entree_titre_connecter' => 'تيتر براي دستيابي به فرم شناسايي', + 'entree_titre_prive' => 'تيتر براي دسترسي به قسمت شخصي', + 'entree_traduction_articles_rubriques' => 'در صورت امكان، نمايش مقاله‌هاي اين بخش به زبان متن («ترجمه» (trad) را براي اينكار بگذاريد)', + 'entree_traduction_objet' => 'در مور مقاله، ترجمه را در ارتباط با آن متن انتخاب كنيد (براي آن trad را بگذاريد)', + 'entree_tri_alpha' => ' معيار مرتب كردن بخش‌ها (الفبايي). اگر «تاريخ»"date" را تايپ كنيد، معيار اضافه شده (طبق تاريخ)‌ {par date}خواهد بدو بخش‌ها طبق ترايخ مرتب خواهند شد +', + 'entree_tri_alpha_articles' => 'مرتب‌ سازي معيارهاي مقاله‌ها (الفبايي). اگر «تاريخ» را تايپ كنيد، معيار افزوده شده {طبق تاريخ}خواهد بودو مقاله بر اساس تاريخ مرتب خواهد شد + +', + 'entree_tri_alpha_articles_inverse' => 'معكس سازي مرتب‌سازي الفبايي؟ («بله» را براي آن بگذاريد)', + 'entree_tri_alpha_inverse' => 'معكوس سازي مرتب‌سازي الفبايي؟ (براي آن «بله» بگذاريد)', + 'entree_tri_num' => 'معيار مرتب كردن بخش‌ها (رقم). اگر «تيتر» را تايپ كنيد، معيار افزوده شده (طبق تيتر) {par num titre}خواهد بود و بخش‌ها بر اساس شماره تيتر‌ها مرتب خواهند شد +', + 'entree_tri_num_articles' => 'مرتب‌سازي مقاله‌ها (شماره‌اي). اگر «تيتر» را تايپ كنيد، معيار افزوده شده {طبق تيتر} خواهد بود و مقاله‌ها طبق شماره‌ي تيتر مرتب خواهند شد', + 'entree_tri_num_articles_inverse' => 'معكوس سازي مرتب‌سازي بخش‌؟ (براي آن «بله» بگذاريد)', + 'entree_tri_num_inverse' => 'معكوس سازي مرتب‌سازي شماره‌اي؟ (براي آن «بله» بگذاريد)', + 'entree_type_objet' => 'نوع اوبژه', + 'entree_url' => 'نشاني (يو.آر.ال) سايت شما', + 'entree_url_public' => 'نشاني بازگشت بعد از اتصال ', + 'erreur_aucun_type' => 'هيچ نوع مدخلي يافت نشد.', + 'erreur_autorisation' => 'شما مجاز به اصلاح منيوي سايت نيستيد.', + 'erreur_identifiant_deja' => 'از اين شناسه يك منيوي ديگر استفاده مي‌كند', + 'erreur_identifiant_forme' => 'شناسه بايد فقط از حروف، رقم، و خط‌ زير تركيب شده باشد.', + 'erreur_menu_inexistant' => 'منيوي درخواستي شماره @id@ موجود نيست.', + 'erreur_mise_a_jour' => 'هنگام به هنگام سازي پايگاه داده‌ها خطايي رخ داده است.', + 'erreur_parametres' => 'در پارامتر‌هاي صفحه خطايي وجود دارد', + 'erreur_type_menu' => 'بايد نوعي از منيو را انتخاب كنيد', + 'erreur_type_menu_inexistant' => 'اين نوع مينو فعلا/ديگر در دسترس نيست', + + // F + 'formulaire_ajouter_entree' => 'يك مدخل اضافه كنيد', + 'formulaire_ajouter_sous_menu' => 'ايجاد يك زيرمنيو', + 'formulaire_css' => 'سي.اس.اس طبقات', + 'formulaire_css_explication' => 'مي‌توانيد به منيوي خود طبقات سي.اس.اس تكميلي اضافه كنيد.', + 'formulaire_deplacer_bas' => 'حركت به پائين', + 'formulaire_deplacer_haut' => 'حركت به بالا', + 'formulaire_facultatif' => 'دلبخواهي ', + 'formulaire_identifiant' => 'شناسه', + 'formulaire_identifiant_explication' => 'يك كليدواژه‌ي منحصر به فرد بدهيد تا بتوانيد منيوي خود را به راحتي فرابخوانيد.', + 'formulaire_ieconfig_choisir_menus_a_importer' => 'منيو‌هايي را كه مي‌خواهيد صادر كنيد انخاب كنيد', + 'formulaire_ieconfig_importer' => 'واردات', + 'formulaire_ieconfig_menu_meme_identifiant' => 'توجه: يك منيو با همين شناسه در سايت شما موجود است!', + 'formulaire_ieconfig_menus_a_exporter' => 'منيو‌هاي صادراتي:', + 'formulaire_ieconfig_ne_pas_importer' => 'وارد نكردن', + 'formulaire_ieconfig_remplacer' => 'جايگزين سازي منيوي موجود با منوي وارداتي', + 'formulaire_ieconfig_renommer' => 'تجديد نام اين منيو پيش از واردات', + 'formulaire_importer' => 'واردسازي يك منيو', + 'formulaire_importer_explication' => 'اگر يك منيو را داخل يك پرونده صادر كرده باشيد، مي‌توانيد آن را اكنون وارد كنيد.', + 'formulaire_modifier_entree' => 'اصلاح اين مدخل', + 'formulaire_modifier_menu' => 'اصلاح منيو:', + 'formulaire_nouveau' => 'منيوي جديد', + 'formulaire_partie_construction' => 'ساخت منيو', + 'formulaire_partie_identification' => 'شناسه‌ي منيو', + 'formulaire_supprimer_entree' => 'حذف اين مدخل + +', + 'formulaire_supprimer_menu' => 'حذف منيو', + 'formulaire_supprimer_sous_menu' => 'حذف اين زيرمنيو', + 'formulaire_titre' => 'تيتر', + + // I + 'info_afficher_articles' => 'مقاله‌ها در منيو گنجانده خواهند شد', + 'info_articles_max' => 'فقط اگر بخش بيش از @max@مقاله داشته باشد', + 'info_articles_max_affiches' => 'نمايش محدود به @max@ مقاله ', + 'info_classe_parent' => 'طبقه‌ي عناصر والد‌:', + 'info_connexion_obligatoire' => 'اتصال اجباري', + 'info_deconnexion_obligatoire' => 'فقط هنگام قطعي', + 'info_masquer_articles_uniques' => 'منحصراً مقاله‌هاي پنهان', + 'info_numero_menu' => 'منيوي شماره‌ي: ', + 'info_page_speciale' => 'پيوند به صفحه‌ي «@page@»', + 'info_page_speciale_zajax' => 'مدال باكس صفحه‌ي «@page@» براي بلوك «@bloc@» ', + 'info_rubrique_courante' => 'بخش فعلي', + 'info_rubriques_exclues' => '/به جز بخش‌(هاي)@id_rubriques@ ', + 'info_rubriques_max_affichees' => 'نمايش محدود به @max@ بخش‌ها', + 'info_secteur_exclus' => '/به جز بخ‌ش (هاي) @id_secteur@', + 'info_sousrub_cond' => 'فقط زيربخش‌هاي بخش‌هاي فعلي نمايش داده مي‌شوند.', + 'info_tous_groupes_mots' => 'تمام گروه‌ واژه‌ها', + 'info_traduction_recuperee' => 'متن ترجمه‌ي منتخب را تعيين خواهد كرد', + 'info_tri' => 'ترتيب بخش‌ها:‌', + 'info_tri_alpha' => '(الفبايي)', + 'info_tri_articles' => 'مرتب‌ سازي مقاله‌ها:', + 'info_tri_num' => '(شماره‌اي)', + + // N + 'noisette_description' => 'گنجاندن منيوي تعريف شده با پلاگين منو‌ها.', + 'noisette_label_afficher_titre_menu' => 'نمايش تيتر منيو؟', + 'noisette_label_identifiant' => 'منيو براي نمايش: ', + 'noisette_nom_noisette' => 'منيو', + 'nom_menu_accueil' => 'پذيرش', + 'nom_menu_articles_rubrique' => 'مقاله‌هاي يك بخش', + 'nom_menu_deconnecter' => 'قطع شدن', + 'nom_menu_espace_prive' => 'اتصال/ پيوند به قسمت شخصي', + 'nom_menu_groupes_mots' => 'كليدواژه‌ها و مقاله‌هاي يك گروه‌ واژه', + 'nom_menu_lien' => 'پيوند دلبخواهي', + 'nom_menu_mapage' => 'صفحه‌ من', + 'nom_menu_mots' => 'مقاله‌هاي يك كليد واژه', + 'nom_menu_objet' => 'مقاله، بخش يا ساير چيزهاي اسپيپي ', + 'nom_menu_page_speciale' => 'پيوند به يك صفحه‌ي اسكلت', + 'nom_menu_page_speciale_zajax' => 'يك بلوك از صفحه‌ي ازپيپ', + 'nom_menu_rubriques_completes' => 'Liste ou arborescence de rubriques et d\'articles (avec beaucoup d\'options)', # NEW + 'nom_menu_rubriques_evenements' => 'برنامه‌هاي مربوط به بخش‌ها', + 'nom_menu_secteurlangue' => 'بخش‌هاي زباني ', + 'nom_menu_texte_libre' => 'متن آزاد', + + // T + 'tous_les_articles' => '...تمام مقاله‌ها', + 'toutes_les_rubriques' => '...تمام بخش‌ها' +); + +?> diff --git a/www/plugins/menus_1/lang/menus_fr.php b/www/plugins/menus_1/lang/menus_fr.php new file mode 100644 index 00000000..66a59d23 --- /dev/null +++ b/www/plugins/menus_1/lang/menus_fr.php @@ -0,0 +1,172 @@ + 'Voulez-vous vraiment supprimer cette entrée ?', + + // D + 'description_menu_accueil' => 'Lien vers la page d\'accueil du site.', + 'description_menu_articles_rubrique' => 'Affiche la liste des articles d\'une rubrique.', + 'description_menu_deconnecter' => 'Si le visiteur est connecté, ajoute une entrée lui proposant la déconnexion.', + 'description_menu_espace_prive' => 'Lien permettant de se connecter au site si on ne l\'est pas déjà, puis d\'aller dans l\'espace privé si l\'on y est autorisé.', + 'description_menu_groupes_mots' => 'Affiche automatiquement un menu listant les mots du groupe et les articles liés. Par défaut, affiche la liste des groupes de mots et les mots liés. Si un squelette groupes_mots.html existe, le lien vers le groupe est utilisé.', + 'description_menu_lien' => 'Ajoute un lien arbitraire, en interne (URL relative) ou externe (http://...).', + 'description_menu_mapage' => 'Si le visiteur est connecté, ajoute un lien vers sa page auteur.', + 'description_menu_mots' => 'Affiche automatiquement un menu listant les articles liés au mot clé.', + 'description_menu_objet' => 'Crée un lien vers un objet de SPIP : article, rubrique ou autre. Par défaut, l\'entrée aura le titre de l\'objet.', + 'description_menu_page_speciale' => 'Ajoute un lien vers un squelette page accessible par une url du type spip.php?page=nom¶m1=xx¶m2=yyy... Ces pages sont souvent fournies par des plugins.', + 'description_menu_page_speciale_zajax' => 'Ajoute un lien vers un bloc d\'une page accessible par une url du type spip.php?page=nom¶m1=xx¶m2=yyy... Ceci nécéssite une squelette de type Z et le plugin médiabox.', + 'description_menu_rubriques_articles' => 'Affiche une liste de rubriques et, si on veut, les sous-rubriques et les articles sur plusieurs niveaux. Par défaut, affiche toutes les rubriques depuis la racine, triées par titre (numériquement puis alphabétiquement). Les articles sont placés systématiquement après les rubriques.', + 'description_menu_rubriques_completes' => 'Affiche une liste de rubriques et, si on veut, les sous-rubriques sur plusieurs niveaux. Par défaut, affiche toutes les rubriques depuis la racine, triées par titre (numériquement puis alphabétiquement).', + 'description_menu_secteurlangue' => 'Cette entrée est spécifique aux sites utilisant un secteur par langue. Elle affiche automatiquement un menu listant les rubriques du secteur correspondant à la langue de la page et, si on veut, les sous-rubriques sur plusieurs niveaux. Par défaut, affiche toutes les rubriques depuis la racine, triées par titre (numériquement puis alphabétiquement).', + 'description_menu_texte_libre' => 'Simplement le texte que vous souhaitez, ou un code de langue SPIP (<:...:>)', + + // E + 'editer_menus_editer' => 'Modifier ce menu', + 'editer_menus_explication' => 'Créez et configurez ici les menus de votre site.', + 'editer_menus_exporter' => 'Exporter ce menu', + 'editer_menus_nouveau' => 'Créer un nouveau menu', + 'editer_menus_titre' => 'Menus du site', + 'entree_afficher_articles' => 'Inclure les articles dans le menu ? (mettre "oui" pour cela)', + 'entree_afficher_item_suite' => 'Inclure les articles dans le menu ? (mettre "oui" pour cela)', + 'entree_articles_max' => 'Si oui, afficher les articles seulement si la rubrique contient au maximum xx articles ? (mettre le nombre maximum d\'articles, laissez vide pour afficher tous les articles)', + 'entree_articles_max_affiches' => 'Si oui, limiter le nombre d\'articles listés à xx maximum (suivis d\'un item "... Tous les articles" comportant un lien vers la rubrique parente) ? (indiquer le nombre maximum d\'articles, laissez vide pour afficher tous les articles)', + 'entree_aucun' => 'Aucun', + 'entree_bloc' => 'Bloc Zpip', + 'entree_choisir' => 'Choisissez le type d\'entrée que vous voulez ajouter :', + 'entree_classe_parent' => 'Classe des liens des éléments parents. Cette classe sera rajoutée aux li>a ayant une suite ul/li. Par exemple, si vous saisissez "daddy", cela vous permet d\'utiliser le plugin menu deroulant 2 pour la mise en forme du menu.', + 'entree_connexion_objet' => 'Obliger à être connecté (mettre "session") ou déconnecté (mettre "nosession") pour voir l\'objet', + 'entree_contenu' => 'Contenu', + 'entree_css' => 'Classes CSS de l\'entrée (du conteneur)', + 'entree_css_lien' => 'Classes CSS du lien', + 'entree_id_groupe' => 'Numéro du groupe de mot clé', + 'entree_id_mot' => 'Numéro du mot clé', + 'entree_id_objet' => 'Numéro', + 'entree_id_rubrique' => 'Numéro de la rubrique parente', + 'entree_id_rubrique_ou_courante' => 'Numéro de la rubrique parente ou "courante" si la rubrique parente est la rubrique courante du contexte', + 'entree_id_rubriques_exclues' => 'Numéros des rubriques à exclure, séparés par des virgules', + 'entree_id_secteur_exclus' => 'Numéros des secteurs à exclure, séparés par des virgules', + 'entree_infini' => 'À l\'infini', + 'entree_mapage' => 'Ma page perso', + 'entree_masquer_articles_uniques' => 'Si oui et si une rubrique contient un seul article, le masquer ? (mettre "oui" pour cela)', + 'entree_niveau' => 'Niveau des sous-rubriques', + 'entree_nombre_articles' => 'Nombre d\'articles au maximum (0 par défaut)', + 'entree_page' => 'Nom de la page', + 'entree_parametres' => 'Liste des paramètres', + 'entree_rubriques_max_affichees' => 'Si oui, limiter le nombre de rubriques listés à xx maximum (suivis d\'un item "... Toutes les rubriques" comportant un lien vers la rubrique parente) ? (indiquer le nombre maximum de rubriques, laissez vide pour afficher toutes les rubriques)', + 'entree_sousrub_cond' => 'N\'afficher que les sous-rubriques de la rubrique en cours (mettre "oui", sinon laisser vide)', + 'entree_suivant_connexion' => 'Restreindre cette entrée suivant la connexion (mettre "connecte" pour afficher seulement si le visiteur est connecté, "deconnecte" pour le cas contraire, mettre "admin" si l\'auteur est administrateur ou laisser vide pour toujours afficher)', + 'entree_suivant_connexion_connecte' => 'seulement si connecté', + 'entree_suivant_connexion_deconnecte' => 'seulement si déconnecté', + 'entree_sur_n_articles' => '@n@ articles affiché(s)', + 'entree_sur_n_mots' => '@n@ mots affiché(s)', + 'entree_sur_n_niveaux' => 'Sur @n@ niveau(x)', + 'entree_titre' => 'Titre', + 'entree_titre_connecter' => 'Titre pour l\'accès au formulaire d\'identification', + 'entree_titre_prive' => 'Titre pour accéder à l\'espace privé', + 'entree_traduction_articles_rubriques' => 'Dans la mesure du possible, afficher les articles de la rubrique dans la langue du contexte (mettre "trad" pour cela)', + 'entree_traduction_objet' => 'Dans le cas d\'un article, choisir la traduction en fonction du contexte (mettre "trad" pour cela)', + 'entree_tri_alpha' => 'Critère de tri des rubriques (alphabétique). Si vous saisissez "date", le critère ajouté sera {par date} et les rubriques seront triées par date', + 'entree_tri_alpha_articles' => 'Critère de tri des articles (alphabétique). Si vous saisissez "date", le critère ajouté sera {par date} et les articles seront triés par date', + 'entree_tri_alpha_articles_inverse' => 'Inverser le critère de tri alphabétique ? (mettre "oui" pour cela)', + 'entree_tri_alpha_inverse' => 'Inverser le critère de tri alphabétique ? (mettre "oui" pour cela)', + 'entree_tri_num' => 'Critère de tri des rubriques (numérique). Si vous saisissez "titre", le critère ajouté sera {par num titre} et les rubriques seront triées par numéro de titre', + 'entree_tri_num_articles' => 'Critère de tri des articles (numérique). Si vous saisissez "titre", le critère ajouté sera {par num titre} et les articles seront triés par numéro de titre', + 'entree_tri_num_articles_inverse' => 'Inverser le critère de tri numérique ? (mettre "oui" pour cela)', + 'entree_tri_num_inverse' => 'Inverser le critère de tri numérique ? (mettre "oui" pour cela)', + 'entree_type_objet' => 'Type de l\'objet', + 'entree_url' => 'Adresse', + 'entree_url_public' => 'Adresse de retour après la connexion', + 'erreur_aucun_type' => 'Aucun type d\'entrée n\'a été trouvé.', + 'erreur_autorisation' => 'Vous n\'êtes pas autorisé à modifier les menus.', + 'erreur_identifiant_deja' => 'Cet identifiant est déjà utilisé par un menu.', + 'erreur_identifiant_forme' => 'L\'identifiant ne doit contenir que des lettres, des chiffres ou le caractère souligné.', + 'erreur_menu_inexistant' => 'Le menu demandé numéro @id@ n\'existe pas.', + 'erreur_mise_a_jour' => 'Une erreur s\'est produite pendant la mise à jour de la base de donnée.', + 'erreur_parametres' => 'Il y a une erreur dans les paramètres de la page', + 'erreur_type_menu' => 'Vous devez choisir un type de menu', + 'erreur_type_menu_inexistant' => 'Ce type de menu n\'est pas/plus disponible', + + // F + 'formulaire_ajouter_entree' => 'Ajouter une entrée', + 'formulaire_ajouter_sous_menu' => 'Créer un sous-menu', + 'formulaire_css' => 'Classes CSS', + 'formulaire_css_explication' => 'Vous pouvez ajouter au menu d\'éventuelles classes CSS supplémentaires.', + 'formulaire_deplacer_bas' => 'Déplacer vers le bas', + 'formulaire_deplacer_haut' => 'Déplacer vers le haut', + 'formulaire_facultatif' => 'Facultatif', + 'formulaire_identifiant' => 'Identifiant', + 'formulaire_identifiant_explication' => 'Donnez un mot-clé unique qui vous permettra d\'appeler votre menu facilement.', + 'formulaire_ieconfig_choisir_menus_a_importer' => 'Choisissez quel(s) menu(s) vous souhaitez importer.', + 'formulaire_ieconfig_importer' => 'Importer', + 'formulaire_ieconfig_menu_meme_identifiant' => 'ATTENTION : un menu avec le même identifiant existe déjà sur votre votre site !', + 'formulaire_ieconfig_menus_a_exporter' => 'Menus à exporter :', + 'formulaire_ieconfig_ne_pas_importer' => 'Ne pas importer', + 'formulaire_ieconfig_remplacer' => 'Remplacer le menu actuel par le menu importé', + 'formulaire_ieconfig_renommer' => 'Renommer ce menu avant import', + 'formulaire_importer' => 'Importer un menu', + 'formulaire_importer_explication' => 'Si vous avez exporté un menu dans un fichier, vous pouvez l\'importer maintenant.', + 'formulaire_modifier_entree' => 'Modifier cette entrée', + 'formulaire_modifier_menu' => 'Modifier le menu :', + 'formulaire_nouveau' => 'Nouveau menu', + 'formulaire_partie_construction' => 'Construction du menu', + 'formulaire_partie_identification' => 'Identification du menu', + 'formulaire_supprimer_entree' => 'Supprimer cette entrée', + 'formulaire_supprimer_menu' => 'Supprimer le menu', + 'formulaire_supprimer_sous_menu' => 'Supprimer ce sous-menu', + 'formulaire_titre' => 'Titre', + + // I + 'info_afficher_articles' => 'Les articles seront inclus dans le menu.', + 'info_articles_max' => 'Seulement si la rubrique contient au plus @max@ articles', + 'info_articles_max_affiches' => 'Affichage limité à @max@ articles', + 'info_classe_parent' => 'Classe des éléments parents : ', + 'info_connexion_obligatoire' => 'Connexion obligatoire', + 'info_deconnexion_obligatoire' => 'Uniquement déconnecté', + 'info_masquer_articles_uniques' => 'Articles uniques masqués', + 'info_numero_menu' => 'MENU NUMÉRO :', + 'info_page_speciale' => 'Lien vers la page « @page@ »', + 'info_page_speciale_zajax' => 'Modalbox de la page « @page@ » pour le bloc « @bloc@ »', + 'info_rubrique_courante' => 'Rubrique courante', + 'info_rubriques_exclues' => ' / sauf rubrique(s) @id_rubriques@', + 'info_rubriques_max_affichees' => 'Affichage limité à @max@ rubriques', + 'info_secteur_exclus' => ' / sauf secteur(s) @id_secteur@', + 'info_sousrub_cond' => 'Seules les sous-rubriques de la rubriques en cours sont affichées.', + 'info_tous_groupes_mots' => 'Tous les groupes de mots', + 'info_traduction_recuperee' => 'Le contexte décidera de la traduction choisie', + 'info_tri' => 'Tri des rubriques :', + 'info_tri_alpha' => '(alphabétique)', + 'info_tri_articles' => 'Tri des articles :', + 'info_tri_num' => '(numérique)', + + // N + 'noisette_description' => 'Insère un menu défini avec le plugin Menus.', + 'noisette_label_afficher_titre_menu' => 'Afficher le titre du menu ?', + 'noisette_label_identifiant' => 'Menu à afficher :', + 'noisette_nom_noisette' => 'Menu', + 'nom_menu_accueil' => 'Accueil', + 'nom_menu_articles_rubrique' => 'Articles d\'une rubrique', + 'nom_menu_deconnecter' => 'Se déconnecter', + 'nom_menu_espace_prive' => 'Se connecter / lien vers espace privé', + 'nom_menu_groupes_mots' => 'Mots-clés et Articles d\'un Groupes de mots', + 'nom_menu_lien' => 'Lien arbitraire', + 'nom_menu_mapage' => 'Ma page', + 'nom_menu_mots' => 'Articles d\'un Mot-clé', + 'nom_menu_objet' => 'Article, rubrique ou autre objet SPIP', + 'nom_menu_page_speciale' => 'Lien vers un squelette page', + 'nom_menu_page_speciale_zajax' => 'Un bloc d\'une page Zpip', + 'nom_menu_rubriques_completes' => 'Liste ou arborescence de rubriques et d\'articles (avec beaucoup d\'options)', + 'nom_menu_rubriques_evenements' => 'Événements de rubriques', + 'nom_menu_secteurlangue' => 'Secteurs de langue', + 'nom_menu_texte_libre' => 'Texte libre', + + // T + 'tous_les_articles' => '... Tous les articles', + 'toutes_les_rubriques' => '... Toutes les rubriques' +); + +?> diff --git a/www/plugins/menus_1/lang/menus_it.php b/www/plugins/menus_1/lang/menus_it.php new file mode 100644 index 00000000..a317d1b5 --- /dev/null +++ b/www/plugins/menus_1/lang/menus_it.php @@ -0,0 +1,174 @@ + 'Voulez-vous vraiment supprimer cette entrée ?', # NEW + + // D + 'description_menu_accueil' => 'Link verso il pannello di controllo del sito.', + 'description_menu_articles_rubrique' => 'Mostra la lista degli articoli di una rubrica.', + 'description_menu_deconnecter' => 'Se il visitatore è connesso, aggiungi un link per proporgli la disconnessione.', + 'description_menu_espace_prive' => 'Link che permette di connettersi al sito se non lo si è già, e poi di andare in redazione se si è autorizzati.', + 'description_menu_groupes_mots' => 'Mostra automaticamente un menu che elenca le parole chiave di un gruppo e gli articoli collegati. Normalmente, mostra la lista dei gruppi di parole chiave e le parole collegate. Se un modello groupes_mots.html esiste, il link verso il gruppo verrà utilizzato', + 'description_menu_lien' => 'Aggiunge un link arbitrario, interno (URL relativo) o esterno (http://...).', + 'description_menu_mapage' => 'Se il visitatore è connesso, aggiunge un link verso la sua pagina autore.', + 'description_menu_mots' => 'Mostra automaticamente un menù che elenca gli articoli collegati alla parola chiave.', + 'description_menu_objet' => 'Crea un link verso un oggetto di SPIP: articolo, rubrica o altro. In maniera predefinita, il link avrà il titolo dell\'oggetto.', + 'description_menu_page_speciale' => 'Aggiunge un link verso un modello accessibile con un url del tipo spip.php?page=nome¶m1=xx¶m2=yyy... Queste pagina sono spesso fornite dai plugin.', + 'description_menu_page_speciale_zajax' => 'Ajoute un lien vers un bloc d\'une page accessible par une url du type spip.php?page=nom¶m1=xx¶m2=yyy... Ceci nécéssite une squelette de type Z et le plugin médiabox.', # NEW + 'description_menu_rubriques_articles' => 'Affiche une liste de rubriques et, si on veut, les sous-rubriques et les articles sur plusieurs niveaux. Par défaut, affiche toutes les rubriques depuis la racine, triées par titre (numériquement puis alphabétiquement). Les articles sont placés systématiquement après les rubriques.', # NEW + 'description_menu_rubriques_completes' => 'Affiche une liste de rubriques et, si on veut, les sous-rubriques sur plusieurs niveaux. Par défaut, affiche toutes les rubriques depuis la racine, triées par titre (numériquement puis alphabétiquement).', # NEW + 'description_menu_secteurlangue' => 'Questa voce è specifica per i siti che utilizzano un settore per lingua. Mostra automaticamente un menù che elenca le rubriche del settore corrispondente alla lingua della pagina e, se si vuole, le sotto rubriche su più livelli. Normalmente, mostra tutte le rubriche dalla radice, ordinate per titolo (numericamente e poi alfabeticamente).', + 'description_menu_texte_libre' => 'Simplement le texte que vous souhaitez, ou un code de langue SPIP (<:...:>)', # NEW + + // E + 'editer_menus_editer' => 'Modifica questo menù', + 'editer_menus_explication' => 'Crea e configura qui i menù del tuo sito', + 'editer_menus_exporter' => 'Esporta questo menù', + 'editer_menus_nouveau' => 'Crea un nuovo menù', + 'editer_menus_titre' => 'Menù del sito', + 'entree_afficher_articles' => 'Inclure les articles dans le menu ? (mettre "oui" pour cela)', # NEW + 'entree_afficher_item_suite' => 'Inclure les articles dans le menu ? (mettre "oui" pour cela)', # NEW + 'entree_articles_max' => 'Si oui, afficher les articles seulement si la rubrique contient au maximum xx articles ? (mettre le nombre maximum d\'articles, laissez vide pour afficher tous les articles)', # NEW + 'entree_articles_max_affiches' => 'Si oui, limiter le nombre d\'articles listés à xx maximum (suivis d\'un item "... Tous les articles" comportant un lien vers la rubrique parente) ? (indiquer le nombre maximum d\'articles, laissez vide pour afficher tous les articles)', # NEW + 'entree_aucun' => 'Nessun', + 'entree_bloc' => 'Bloc Zpip', # NEW + 'entree_choisir' => 'Scegli il tipo di voce che vuoi aggiungere:', + 'entree_classe_parent' => 'Classe des liens des éléments parents. Cette classe sera rajoutée aux li>a ayant une suite ul/li. Par exemple, si vous saisissez "daddy", cela vous permet d\'utiliser le plugin menu deroulant 2 pour la mise en forme du menu.', # NEW + 'entree_connexion_objet' => 'Obliger à être connecté (mettre "session") ou déconnecté (mettre "nosession") pour voir l\'objet', # NEW + 'entree_contenu' => 'Contenu', # NEW + 'entree_css' => 'Classi CSS della voce', # MODIF + 'entree_css_lien' => 'Classes CSS du lien', # NEW + 'entree_id_groupe' => 'Numero di gruppo della parola chiave', + 'entree_id_mot' => 'Numero della parola chiave', + 'entree_id_objet' => 'Numero', + 'entree_id_rubrique' => 'Numero della rubrica padre', + 'entree_id_rubrique_ou_courante' => 'Numéro de la rubrique parente ou "courante" si la rubrique parente est la rubrique courante du contexte', # NEW + 'entree_id_rubriques_exclues' => 'Numéros des rubriques à exclure, séparés par des virgules', # NEW + 'entree_id_secteur_exclus' => 'Numéros des secteurs à exclure, séparés par des virgules', # NEW + 'entree_infini' => 'All\'infinito', + 'entree_mapage' => 'La mia pagina personale', + 'entree_masquer_articles_uniques' => 'Si oui et si une rubrique contient un seul article, le masquer ? (mettre "oui" pour cela)', # NEW + 'entree_niveau' => 'Livelli di sotto rubriche', + 'entree_nombre_articles' => 'Numero massimo di articoli (0 predefinito)', + 'entree_page' => 'Nome della pagina', + 'entree_parametres' => 'Lista dei parametri', + 'entree_rubriques_max_affichees' => 'Si oui, limiter le nombre de rubriques listés à xx maximum (suivis d\'un item "... Toutes les rubriques" comportant un lien vers la rubrique parente) ? (indiquer le nombre maximum de rubriques, laissez vide pour afficher toutes les rubriques)', # NEW + 'entree_sousrub_cond' => 'N\'afficher que les sous-rubriques de la rubrique en cours (mettre "oui", sinon laisser vide)', # NEW + 'entree_suivant_connexion' => 'Restreindre cette entrée suivant la connexion (mettre "connecte" pour afficher seulement si le visiteur est connecté, "deconnecte" pour le cas contraire, ou laisser vide pour toujours afficher)', # NEW + 'entree_suivant_connexion_connecte' => 'seulement si connecté', # NEW + 'entree_suivant_connexion_deconnecte' => 'seulement si déconnecté', # NEW + 'entree_sur_n_articles' => '@n@ articoli mostrati', + 'entree_sur_n_mots' => '@n@ parole chiave mostrate', + 'entree_sur_n_niveaux' => 'Su @n@ livelli', + 'entree_titre' => 'Titolo', + 'entree_titre_connecter' => 'Titolo per l\'accesso al form di login', + 'entree_titre_prive' => 'Titolo per accedere alla redazione', + 'entree_traduction_articles_rubriques' => 'Dans la mesure du possible, afficher les articles de la rubrique dans la langue du contexte (mettre "trad" pour cela)', # NEW + 'entree_traduction_objet' => 'Dans le cas d\'un article, choisir la traduction en fonction du contexte (mettre "trad" pour cela)', # NEW + 'entree_tri_alpha' => 'Criterio di ordinamento (alfabetico)', # MODIF + 'entree_tri_alpha_articles' => 'Critère de tri des articles (alphabétique). Si vous saisissez "date", le critère ajouté sera {par date} et les articles seront triés par date', # NEW + 'entree_tri_alpha_articles_inverse' => 'Inverser le critère de tri alphabétique ? (mettre "oui" pour cela)', # NEW + 'entree_tri_alpha_inverse' => 'Inverser le critère de tri alphabétique ? (mettre "oui" pour cela)', # NEW + 'entree_tri_num' => 'Criterio di ordinamento (numerico)', # MODIF + 'entree_tri_num_articles' => 'Critère de tri des articles (numérique). Si vous saisissez "titre", le critère ajouté sera {par num titre} et les articles seront triés par numéro de titre', # NEW + 'entree_tri_num_articles_inverse' => 'Inverser le critère de tri numérique ? (mettre "oui" pour cela)', # NEW + 'entree_tri_num_inverse' => 'Inverser le critère de tri numérique ? (mettre "oui" pour cela)', # NEW + 'entree_type_objet' => 'Tipo di oggetto', + 'entree_url' => 'Indirizzo', + 'entree_url_public' => 'Adresse de retour après la connexion', # NEW + 'erreur_aucun_type' => 'Nessun tipo di voce trovata.', + 'erreur_autorisation' => 'Non sei autorizzato a modificare i menù.', + 'erreur_identifiant_deja' => 'Questo identificativo è già utilizzato da un menù.', + 'erreur_identifiant_forme' => 'L\'identificativo deve contenere solo lettere, cifre o il trattino basso.', + 'erreur_menu_inexistant' => 'Il menù richiesto numero @id@ non esiste.', + 'erreur_mise_a_jour' => 'Si è verificato un errore durante l\'aggiornamento del database.', + 'erreur_parametres' => 'C\'è un errore nei parametri della pagina', + 'erreur_type_menu' => 'Devi scegliere un tipo di menù', + 'erreur_type_menu_inexistant' => 'Ce type de menu n\'est pas/plus disponible', # NEW + + // F + 'formulaire_ajouter_entree' => 'Aggiungi una voce', + 'formulaire_ajouter_sous_menu' => 'Crea un sotto menù', + 'formulaire_css' => 'Classi CSS', + 'formulaire_css_explication' => 'Puoi aggiungere al menù delle eventuali classi CSS supplmentari.', + 'formulaire_deplacer_bas' => 'Sposta verso il basso', + 'formulaire_deplacer_haut' => 'Sposta verso l\'alto', + 'formulaire_facultatif' => 'Facoltativo', + 'formulaire_identifiant' => 'Identificativo', + 'formulaire_identifiant_explication' => 'Inserisci una parola chiave unica che ti permetterà di richiamare il tuo menù facilmente.', + 'formulaire_ieconfig_choisir_menus_a_importer' => 'Choisissez quel(s) menu(s) vous souhaitez importer.', # NEW + 'formulaire_ieconfig_importer' => 'Importer', # NEW + 'formulaire_ieconfig_menu_meme_identifiant' => 'ATTENTION : un menu avec le même identifiant existe déjà sur votre votre site !', # NEW + 'formulaire_ieconfig_menus_a_exporter' => 'Menus à exporter :', # NEW + 'formulaire_ieconfig_ne_pas_importer' => 'Ne pas importer', # NEW + 'formulaire_ieconfig_remplacer' => 'Remplacer le menu actuel par le menu importé', # NEW + 'formulaire_ieconfig_renommer' => 'Renommer ce menu avant import', # NEW + 'formulaire_importer' => 'Importa un menù', + 'formulaire_importer_explication' => 'Se hai esportato un menù in un file, ora lo puoi importare.', + 'formulaire_modifier_entree' => 'Modifica questa voce', + 'formulaire_modifier_menu' => 'Modifica il menù:', + 'formulaire_nouveau' => 'Nuovo menù', + 'formulaire_partie_construction' => 'Costruzione del menù', + 'formulaire_partie_identification' => 'Identificativo del menù', + 'formulaire_supprimer_entree' => 'Elimina questa voce', + 'formulaire_supprimer_menu' => 'Elimina il menù', + 'formulaire_supprimer_sous_menu' => 'Elimina il sotto menù', + 'formulaire_titre' => 'Titolo', + + // I + 'info_afficher_articles' => 'Les articles seront inclus dans le menu.', # NEW + 'info_articles_max' => 'Seulement si la rubrique contient au plus @max@ articles', # NEW + 'info_articles_max_affiches' => 'Affichage limité à @max@ articles', # NEW + 'info_classe_parent' => 'Classe des éléments parents : ', # NEW + 'info_connexion_obligatoire' => 'Connexion obligatoire', # NEW + 'info_deconnexion_obligatoire' => 'Uniquement déconnecté', # NEW + 'info_masquer_articles_uniques' => 'Articles uniques masqués', # NEW + 'info_numero_menu' => 'MENU NUMERO:', + 'info_page_speciale' => 'Link verso la pagina "@page@"', + 'info_page_speciale_zajax' => 'Modalbox de la page « @page@ » pour le bloc « @bloc@ »', # NEW + 'info_rubrique_courante' => 'Rubrique courante', # NEW + 'info_rubriques_exclues' => ' / sauf rubrique(s) @id_rubriques@', # NEW + 'info_rubriques_max_affichees' => 'Affichage limité à @max@ rubriques', # NEW + 'info_secteur_exclus' => ' / sauf secteur(s) @id_secteur@', # NEW + 'info_sousrub_cond' => 'Seules les sous-rubriques de la rubriques en cours sont affichées.', # NEW + 'info_tous_groupes_mots' => 'Tutti i gruppi di parole chiave', + 'info_traduction_recuperee' => 'Le contexte décidera de la traduction choisie', # NEW + 'info_tri' => 'Ordina:', # MODIF + 'info_tri_alpha' => '(alfabetico)', + 'info_tri_articles' => 'Tri des articles :', # NEW + 'info_tri_num' => '(numerico)', + + // N + 'noisette_description' => 'Insère un menu défini avec le plugin Menus.', # NEW + 'noisette_label_afficher_titre_menu' => 'Afficher le titre du menu ?', # NEW + 'noisette_label_identifiant' => 'Menu à afficher :', # NEW + 'noisette_nom_noisette' => 'Menu', # NEW + 'nom_menu_accueil' => 'Pannello di controllo', + 'nom_menu_articles_rubrique' => 'Articoli di una rubrica', + 'nom_menu_deconnecter' => 'Disconnettersi', + 'nom_menu_espace_prive' => 'Connettersi / link alla redazione', + 'nom_menu_groupes_mots' => 'Parole chiave e articoli di un gruppo di parole chiave', + 'nom_menu_lien' => 'Link arbitrario', + 'nom_menu_mapage' => 'La mia pagina', + 'nom_menu_mots' => 'Articoli di un a parola chiave', + 'nom_menu_objet' => 'Articolo, rubrica o altro oggetto SPIP', + 'nom_menu_page_speciale' => 'Link verso una pagina di modello', + 'nom_menu_page_speciale_zajax' => 'Un bloc d\'une page Zpip', # NEW + 'nom_menu_rubriques_completes' => 'Liste ou arborescence de rubriques et d\'articles (avec beaucoup d\'options)', # NEW + 'nom_menu_rubriques_evenements' => 'Eventi delle rubriche', + 'nom_menu_secteurlangue' => 'Settore di lingua', + 'nom_menu_texte_libre' => 'Texte libre', # NEW + + // T + 'tous_les_articles' => '... Tous les articles', # NEW + 'toutes_les_rubriques' => '... Toutes les rubriques' # NEW +); + +?> diff --git a/www/plugins/menus_1/lang/menus_ru.php b/www/plugins/menus_1/lang/menus_ru.php new file mode 100644 index 00000000..eb3441f9 --- /dev/null +++ b/www/plugins/menus_1/lang/menus_ru.php @@ -0,0 +1,171 @@ + 'Voulez-vous vraiment supprimer cette entrée ?', # NEW + + // D + 'description_menu_accueil' => 'Ссылка на главную страницу.', + 'description_menu_articles_rubrique' => 'Affiche la liste des articles d\'une rubrique.', # NEW + 'description_menu_deconnecter' => 'Si le visiteur est connecté, ajoute une entrée lui proposant la déconnexion.', # NEW + 'description_menu_espace_prive' => 'Lien permettant de se connecter au site si on ne l\'est pas déjà, puis d\'aller dans l\'espace privé si l\'on y est autorisé.', # NEW + 'description_menu_groupes_mots' => 'Affiche automatiquement un menu listant les mots du groupe et les articles liés. Par défaut, affiche la liste des groupes de mots et les mots liés. Si un squelette groupes_mots.html existe, le lien vers le groupe est utilisé.', # NEW + 'description_menu_lien' => 'Ajoute un lien arbitraire, en interne (URL relative) ou externe (http://...).', # NEW + 'description_menu_mapage' => 'Si le visiteur est connecté, ajoute un lien vers sa page auteur.', # NEW + 'description_menu_mots' => 'Affiche automatiquement un menu listant les articles liés au mot clé.', # NEW + 'description_menu_objet' => 'Crée un lien vers un objet de SPIP : article, rubrique ou autre. Par défaut, l\'entrée aura le titre de l\'objet.', # NEW + 'description_menu_page_speciale' => 'Ajoute un lien vers un squelette page accessible par une url du type spip.php?page=nom¶m1=xx¶m2=yyy... Ces pages sont souvent fournies par des plugins.', # NEW + 'description_menu_page_speciale_zajax' => 'Ajoute un lien vers un bloc d\'une page accessible par une url du type spip.php?page=nom¶m1=xx¶m2=yyy... Ceci nécéssite une squelette de type Z et le plugin médiabox.', # NEW + 'description_menu_rubriques' => 'Affiche une liste de rubriques et, si on veut, les sous-rubriques sur plusieurs niveaux. Par défaut, affiche toutes les rubriques depuis la racine, triées par titre (numériquement puis alphabétiquement).', # NEW + 'description_menu_rubriques_articles' => 'Affiche une liste de rubriques et, si on veut, les sous-rubriques et les articles sur plusieurs niveaux. Par défaut, affiche toutes les rubriques depuis la racine, triées par titre (numériquement puis alphabétiquement). Les articles sont placés systématiquement après les rubriques.', # NEW + 'description_menu_secteurlangue' => 'Cette entrée est spécifique aux sites utilisant un secteur par langue. Elle affiche automatiquement un menu listant les rubriques du secteur correspondant à la langue de la page et, si on veut, les sous-rubriques sur plusieurs niveaux. Par défaut, affiche toutes les rubriques depuis la racine, triées par titre (numériquement puis alphabétiquement).', # NEW + 'description_menu_texte_libre' => 'Simplement le texte que vous souhaitez, ou un code de langue SPIP (<:...:>)', # NEW + + // E + 'editer_menus_editer' => 'Редактировать это меню', + 'editer_menus_explication' => 'Создать и настроить меню для сайта', + 'editer_menus_exporter' => 'Экспортировать меню', + 'editer_menus_nouveau' => 'Создать новое меню', + 'editer_menus_titre' => 'Меню сайта', + 'entree_afficher_articles' => 'Inclure les articles dans le menu ? (mettre "oui" pour cela)', # NEW + 'entree_afficher_item_suite' => 'Inclure les articles dans le menu ? (mettre "oui" pour cela)', # NEW + 'entree_articles_max' => 'Si oui, afficher les articles seulement si la rubrique contient au maximum xx articles ? (mettre le nombre maximum d\'articles, laissez vide pour afficher tous les articles)', # NEW + 'entree_articles_max_affiches' => 'Si oui, limiter le nombre d\'articles listés à xx maximum (suivis d\'un item "... Tous les articles" comportant un lien vers la rubrique parente) ? (indiquer le nombre maximum d\'articles, laissez vide pour afficher tous les articles)', # NEW + 'entree_aucun' => 'Aucun', # NEW + 'entree_bloc' => 'Bloc Zpip', # NEW + 'entree_choisir' => 'Выбрать тип пункта меню:', + 'entree_classe_parent' => 'Classe des liens des éléments parents. Cette classe sera rajoutée aux li>a ayant une suite ul/li. Par exemple, si vous saisissez "daddy", cela vous permet d\'utiliser le plugin menu deroulant 2 pour la mise en forme du menu.', # NEW + 'entree_connexion_objet' => 'Obliger à être connecté (mettre "session") ou déconnecté (mettre "nosession") pour voir l\'objet', # NEW + 'entree_contenu' => 'Contenu', # NEW + 'entree_css' => 'CSS класс', # MODIF + 'entree_css_lien' => 'Classes CSS du lien', # NEW + 'entree_id_groupe' => 'Numéro du groupe de mot clé', # NEW + 'entree_id_mot' => 'Numéro du mot clé', # NEW + 'entree_id_objet' => 'Номер', + 'entree_id_rubrique' => 'Номер родительского раздела', + 'entree_id_rubrique_ou_courante' => 'Numéro de la rubrique parente ou "courante" si la rubrique parente est la rubrique courante du contexte', # NEW + 'entree_id_rubriques_exclues' => 'Numéros des rubriques à exclure, séparés par des virgules', # NEW + 'entree_id_secteur_exclus' => 'Numéros des secteurs à exclure, séparés par des virgules', # NEW + 'entree_infini' => 'Бесконечность', + 'entree_mapage' => 'Моя страница', + 'entree_masquer_articles_uniques' => 'Si oui et si une rubrique contient un seul article, le masquer ? (mettre "oui" pour cela)', # NEW + 'entree_niveau' => 'Уровень подразделов', + 'entree_nombre_articles' => 'Nombre d\'articles au maximum (0 par défaut)', # NEW + 'entree_page' => 'Nom de la page', # NEW + 'entree_parametres' => 'Liste des paramètres', # NEW + 'entree_rubriques_max_affichees' => 'Si oui, limiter le nombre de rubriques listés à xx maximum (suivis d\'un item "... Toutes les rubriques" comportant un lien vers la rubrique parente) ? (indiquer le nombre maximum de rubriques, laissez vide pour afficher toutes les rubriques)', # NEW + 'entree_sousrub_cond' => 'N\'afficher que les sous-rubriques de la rubrique en cours (mettre "oui", sinon laisser vide)', # NEW + 'entree_sur_n_articles' => '@n@ articles affiché(s)', # NEW + 'entree_sur_n_mots' => '@n@ mots affiché(s)', # NEW + 'entree_sur_n_niveaux' => 'На @n@ уровне', + 'entree_titre' => 'Название', + 'entree_titre_connecter' => 'Titre pour l\'accès au formulaire d\'identification', # NEW + 'entree_titre_prive' => 'Titre pour accéder à l\'espace privé', # NEW + 'entree_traduction_articles_rubriques' => 'Dans la mesure du possible, afficher les articles de la rubrique dans la langue du contexte (mettre "trad" pour cela)', # NEW + 'entree_traduction_objet' => 'Dans le cas d\'un article, choisir la traduction en fonction du contexte (mettre "trad" pour cela)', # NEW + 'entree_tri_alpha' => 'Critère de tri (alphabétique)', # MODIF + 'entree_tri_alpha_articles' => 'Critère de tri des articles (alphabétique). Si vous saisissez "date", le critère ajouté sera {par date} et les articles seront triés par date', # NEW + 'entree_tri_alpha_articles_inverse' => 'Inverser le critère de tri alphabétique ? (mettre "oui" pour cela)', # NEW + 'entree_tri_alpha_inverse' => 'Inverser le critère de tri alphabétique ? (mettre "oui" pour cela)', # NEW + 'entree_tri_num' => 'Critère de tri (numérique)', # MODIF + 'entree_tri_num_articles' => 'Critère de tri des articles (numérique). Si vous saisissez "titre", le critère ajouté sera {par num titre} et les articles seront triés par numéro de titre', # NEW + 'entree_tri_num_articles_inverse' => 'Inverser le critère de tri numérique ? (mettre "oui" pour cela)', # NEW + 'entree_tri_num_inverse' => 'Inverser le critère de tri numérique ? (mettre "oui" pour cela)', # NEW + 'entree_type_objet' => 'Тип объекта', + 'entree_url' => 'Ссылка (URL)', + 'entree_url_public' => 'Adresse de retour après la connexion', # NEW + 'erreur_aucun_type' => 'Ничего не найдено.', + 'erreur_autorisation' => 'У вас нет прав для редактирования этого меню.', + 'erreur_identifiant_deja' => 'Этот идентификатор уже используется в другом меню.', + 'erreur_identifiant_forme' => 'Идентификатор может состоять из латинских букв, цифр и подчеркиваний.', + 'erreur_menu_inexistant' => 'Меню номер @id@ не существует.', + 'erreur_mise_a_jour' => 'Произошла ошибка при обновлении базы.', + 'erreur_parametres' => 'Il y a une erreur dans les paramètres de la page', # NEW + 'erreur_type_menu' => 'Vous devez choisir un type de menu', # NEW + 'erreur_type_menu_inexistant' => 'Ce type de menu n\'est pas/plus disponible', # NEW + + // F + 'formulaire_ajouter_entree' => 'Добавить пункт меню', + 'formulaire_ajouter_sous_menu' => 'Создать подменю', + 'formulaire_css' => 'CSS классы', + 'formulaire_css_explication' => 'Вы можете добавить дополнительный классы CSS к вашему меню.', + 'formulaire_deplacer_bas' => 'Вниз', + 'formulaire_deplacer_haut' => 'Вверх', + 'formulaire_facultatif' => 'Не обязательно', + 'formulaire_identifiant' => 'Идентификатор', + 'formulaire_identifiant_explication' => 'Назначьте меню уникальное ключевое слово, которое позволит в дальнейшем легко его вызывать.', + 'formulaire_ieconfig_choisir_menus_a_importer' => 'Choisissez quel(s) menu(s) vous souhaitez importer.', # NEW + 'formulaire_ieconfig_importer' => 'Importer', # NEW + 'formulaire_ieconfig_menu_meme_identifiant' => 'ATTENTION : un menu avec le même identifiant existe déjà sur votre votre site !', # NEW + 'formulaire_ieconfig_menus_a_exporter' => 'Menus à exporter :', # NEW + 'formulaire_ieconfig_ne_pas_importer' => 'Ne pas importer', # NEW + 'formulaire_ieconfig_remplacer' => 'Remplacer le menu actuel par le menu importé', # NEW + 'formulaire_ieconfig_renommer' => 'Renommer ce menu avant import', # NEW + 'formulaire_importer' => 'Импортировать меню', + 'formulaire_importer_explication' => 'Если вы экспортировали меню в файл, вы можете импортировать его сейчас.', + 'formulaire_modifier_entree' => 'Редактировать этот пункт меню', + 'formulaire_modifier_menu' => 'Редактировать меню:', + 'formulaire_nouveau' => 'Новое меню', + 'formulaire_partie_construction' => 'Создание меню', + 'formulaire_partie_identification' => 'Идентификатор меню', + 'formulaire_supprimer_entree' => 'Удалить этот пункт меню', + 'formulaire_supprimer_menu' => 'Удалить меню', + 'formulaire_supprimer_sous_menu' => 'Удалить подменю', + 'formulaire_titre' => 'Название', + + // I + 'info_afficher_articles' => 'Les articles seront inclus dans le menu.', # NEW + 'info_articles_max' => 'Seulement si la rubrique contient au plus @max@ articles', # NEW + 'info_articles_max_affiches' => 'Affichage limité à @max@ articles', # NEW + 'info_classe_parent' => 'Classe des éléments parents : ', # NEW + 'info_connexion_obligatoire' => 'Connexion obligatoire', # NEW + 'info_deconnexion_obligatoire' => 'Uniquement déconnecté', # NEW + 'info_masquer_articles_uniques' => 'Articles uniques masqués', # NEW + 'info_numero_menu' => 'НОМЕР МЕНЮ:', + 'info_page_speciale' => 'Lien vers la page « @page@ »', # NEW + 'info_page_speciale_zajax' => 'Modalbox de la page « @page@ » pour le bloc « @bloc@ »', # NEW + 'info_rubrique_courante' => 'Rubrique courante', # NEW + 'info_rubriques_exclues' => ' / sauf rubrique(s) @id_rubriques@', # NEW + 'info_rubriques_max_affichees' => 'Affichage limité à @max@ rubriques', # NEW + 'info_secteur_exclus' => ' / sauf secteur(s) @id_secteur@', # NEW + 'info_sousrub_cond' => 'Seules les sous-rubriques de la rubriques en cours sont affichées.', # NEW + 'info_tous_groupes_mots' => 'Tous les groupes de mots', # NEW + 'info_traduction_recuperee' => 'Le contexte décidera de la traduction choisie', # NEW + 'info_tri' => 'Tri :', # MODIF + 'info_tri_alpha' => '(alphabétique)', # NEW + 'info_tri_articles' => 'Tri des articles :', # NEW + 'info_tri_num' => '(numérique)', # NEW + + // N + 'noisette_description' => 'Insère un menu défini avec le plugin Menus.', # NEW + 'noisette_label_afficher_titre_menu' => 'Afficher le titre du menu ?', # NEW + 'noisette_label_identifiant' => 'Menu à afficher :', # NEW + 'noisette_nom_noisette' => 'Menu', # NEW + 'nom_menu_accueil' => 'Главная страница', + 'nom_menu_articles_rubrique' => 'Articles d\'une rubrique', # NEW + 'nom_menu_deconnecter' => 'Se déconnecter', # NEW + 'nom_menu_espace_prive' => 'Se connecter / lien vers espace privé', # NEW + 'nom_menu_groupes_mots' => 'Mots-clés et Articles d\'un Groupes de mots', # NEW + 'nom_menu_lien' => 'Lien arbitraire', # NEW + 'nom_menu_mapage' => 'Ma page', # NEW + 'nom_menu_mots' => 'Articles d\'un Mot-clé', # NEW + 'nom_menu_objet' => 'Article, rubrique ou autre objet SPIP', # NEW + 'nom_menu_page_speciale' => 'Lien vers un squelette page', # NEW + 'nom_menu_page_speciale_zajax' => 'Un bloc d\'une page Zpip', # NEW + 'nom_menu_rubriques' => 'Liste ou arborescence de rubriques', # MODIF + 'nom_menu_rubriques_evenements' => 'Événements de rubriques', # NEW + 'nom_menu_secteurlangue' => 'Secteurs de langue', # NEW + 'nom_menu_texte_libre' => 'Texte libre', # NEW + + // T + 'tous_les_articles' => '... Tous les articles', # NEW + 'toutes_les_rubriques' => '... Toutes les rubriques' # NEW +); + +?> diff --git a/www/plugins/menus_1/lang/menus_sk.php b/www/plugins/menus_1/lang/menus_sk.php new file mode 100644 index 00000000..03a5e233 --- /dev/null +++ b/www/plugins/menus_1/lang/menus_sk.php @@ -0,0 +1,174 @@ + 'Chcete odstrániÅ¥ tento záznam?', + + // D + 'description_menu_accueil' => 'Odkaz na úvodnú stránku webu.', + 'description_menu_articles_rubrique' => 'ZobraziÅ¥ zoznam článkov v rubrike.', + 'description_menu_deconnecter' => 'Ak je návÅ¡tevník online, pridaÅ¥ možnosÅ¥ odpojenia.', + 'description_menu_espace_prive' => 'Odkaz umožňujúci prihlásenie na stránku, ak ste sa eÅ¡te neprihlásili a potom na vstup do súkromnej zóny, ak na to máte oprávnenie.', + 'description_menu_groupes_mots' => 'Automaticky vypíše skupiny kľúčových slov a články, ktoré sú k ním priradené. Podľa predvolených nastavení sa zobrazia skupiny kľúčových slov a kľúčové slová v rámci nich. Ak existuje súbor Å¡ablóny groupes_mots.html, použije sa odkaz na skupinu kľúčových slov.', + 'description_menu_lien' => 'Pridá samostatne zadaný odkaz, a to buď interný (relatívna adresa), alebo externý(http://...).', + 'description_menu_mapage' => 'Ak je návÅ¡tevník prihlásený, pridá odkaz na jeho autorskú stránku.', + 'description_menu_mots' => 'Automaticky zobrazí menu so zoznamom článkov prepojených s kľúčovým slovom.', + 'description_menu_objet' => 'Vytvorí odkaz na objekt SPIPu: článok, rubriku alebo iný. Podľa predvolených nastavení bude niesÅ¥ názov objektu.', + 'description_menu_page_speciale' => 'Pridá odkaz na stránku Å¡ablóny pomocou adresy formulára spip.php?page=name¶m1=xx¶m2=yyy... Takéto stránky často využívajú zásuvné moduly.', + 'description_menu_page_speciale_zajax' => 'PridaÅ¥ odkaz do bolu na stránke, na ktorú sa dá dostaÅ¥ progredníctvom adresy typu spip.php?page=name¶m1=xx¶m2=yyy... Na to treba Å¡ablónu typu Z a zásuvný modul médiabox.', + 'description_menu_rubriques_articles' => 'Zobrazí zoznam rubrík, v ktorom môžu byÅ¥ podrubriky a články včlenené do rôznych úrovní. Podľa predvolených nastavení sa zobrazia vÅ¡etky rubriky počnúc koreňovým adresárom stránky a budú zotriedené podľa názvu (najprv čísla, potom písmená). Články v danej rubrike budú vždy uvedené po jej podrubrikách.', + 'description_menu_rubriques_completes' => 'Zobrazí zoznam rubrík a ak existujú, aj podrubrík na mnohých úrovniach. Podľa predvolených nastavení zobrazí vÅ¡etky rubriky od koreňového adresára zotriedené podľa názvu (najprv podľa čísel potom podľa abecedy).', + 'description_menu_secteurlangue' => 'This entry can be used by sites which have one language per sector. It displays a menu which lists the sections of the sector corresponding to the language of the page, and if desired the subsections to several levels. By default, all sections are shown from the site root, sorted by title (numerically then alphabetically).', + 'description_menu_texte_libre' => 'Jednoducho text, ktorý chcete, alebo kód jazyka SPIP (<:...:>)', + + // E + 'editer_menus_editer' => 'UpraviÅ¥ toto menu', + 'editer_menus_explication' => 'Vytvorte a nastavte ponky menu pre svoju stránku.', + 'editer_menus_exporter' => 'ExportovaÅ¥ toto menu', + 'editer_menus_nouveau' => 'VytvoriÅ¥ nové menu', + 'editer_menus_titre' => 'Ponuky menu stránky', + 'entree_afficher_articles' => 'ZaradiÅ¥ články do menu? (na to využite možnosÅ¥ "áno")', + 'entree_afficher_item_suite' => 'ZaradiÅ¥ články do menu? (použite na to možnosÅ¥ "áno")', + 'entree_articles_max' => 'Ak áno, zobraziÅ¥ články, len ak je v rubrike maximálne xx článkov? (zadajte maximálny počet článkov; ak chcete zobraziÅ¥ vÅ¡etky články, nechajte toto pole prázdne)', + 'entree_articles_max_affiches' => 'Ak áno, obmedziÅ¥ počet článkov v zozname na maximálne xx (za položkou "...VÅ¡etky články" s odkazom na nadradenú rubriku)? (zadajte maximálny počet článkov; ak chcete zobraziÅ¥ vÅ¡etky články, nechajte toto pole prázdne)', + 'entree_aucun' => 'Žiadny', + 'entree_bloc' => 'Blok Zpipu', + 'entree_choisir' => 'Vyberte typ položky, ktorú chcete pridaÅ¥:', + 'entree_classe_parent' => 'Trieda odkazov nadradených prvkov. Táto trieda bude pridaná na li>v postupnosit ul/li. Napríklad, ak zadáte "daddy", umožní vám to využiÅ¥ na formátovanie menu rozbaľovacie menu zásuvného modulu 2.', + 'entree_connexion_objet' => 'Na zobrazenie objektu sa vyžaduje prihlásenie (vloženie "session") alebo odhlásenie (vloženie "nosession")', + 'entree_contenu' => 'Obsah', + 'entree_css' => 'CSS triedy tejto položky (objektu)', + 'entree_css_lien' => 'Triedy CSS pre odkazy', + 'entree_id_groupe' => 'Číslo skupiny kľúčových slov', + 'entree_id_mot' => 'Číslo kľúčového slova', + 'entree_id_objet' => 'Číslo', + 'entree_id_rubrique' => 'Číslo nadradenej rubriky', + 'entree_id_rubrique_ou_courante' => 'Číslo nadradenej alebo "aktuálnej" rubriky, ak nadradená rubrika je aktuálnou rubrikou kontextu', + 'entree_id_rubriques_exclues' => 'Čísla rubrík, ktoré majú byÅ¥ vylúčené, oddelené čiarkami', + 'entree_id_secteur_exclus' => 'Čísla sektorov, ktoré majú byÅ¥ vylúčené, oddelené čiarkami', + 'entree_infini' => 'Do nekonečna', + 'entree_mapage' => 'Moja stránka', + 'entree_masquer_articles_uniques' => 'Ak áno a ak je v rubrike jeden článok, schovaÅ¥ ju? (ak to tak chcete, označte možnosÅ¥ "áno")', + 'entree_niveau' => 'Úroveň podrubrík', + 'entree_nombre_articles' => 'Maximálny počet článkov (predvolené 0)', + 'entree_page' => 'Názov stránky', + 'entree_parametres' => 'Zoznam parametrov', + 'entree_rubriques_max_affichees' => 'Ak áno, obmedziÅ¥ počet rubrík v zozname na maximálne xx (po položke "...VÅ¡etky rubriky" s odkazom na nadradenú rubriku)? (zadajte maximálny počet rubrík; ak chcete zobraziÅ¥ vÅ¡etky rubriky, nechajte toto pole prázdne)', + 'entree_sousrub_cond' => 'ZobrazovaÅ¥ len podrubriky aktuálnej rubriky (zadajte "oui" (áno), v opačnom prípade nevypĺňajte)', + 'entree_suivant_connexion' => 'ObmedziÅ¥ toto pole podľa prihlásenia (nastavte "prihlásený" ak chcete zobraziÅ¥ len návÅ¡tevníka, ktorý je online; možnosÅ¥ "odhlásený" v opačnom prípade; ak autor riadi nejakú rubriku, nastavte pole "administrátor"; ak ho chcete zobraziÅ¥ v každom prípade, toto pole nevypĺňajte)', + 'entree_suivant_connexion_connecte' => 'len ak je online', + 'entree_suivant_connexion_deconnecte' => 'len ak je offline', + 'entree_sur_n_articles' => '@n@ zobrazených článkov', + 'entree_sur_n_mots' => '@n@ zobrazených kľúčových slov', + 'entree_sur_n_niveaux' => 'Na @n@ úrovni(ach)', + 'entree_titre' => 'Nadpis', + 'entree_titre_connecter' => 'Nadpis pre prístup do prihlasovacieho formulára', + 'entree_titre_prive' => 'Nadpis pre prístup do súkromnej zóny', + 'entree_traduction_articles_rubriques' => 'Ak je to možné, zobraziÅ¥ články rubriky v jazyku textu (na aktiváciu tejto možnosti zadajte "trad")', + 'entree_traduction_objet' => 'Pri článku vyberajte preklad v závislosti od kontextu (na to, aby se to dosiahli, vložte "trad")', + 'entree_tri_alpha' => 'Kritérium triedenia (abecedné)', + 'entree_tri_alpha_articles' => 'Kritérium triedenia článkov(abecedné). Ak zadáte "dátum", bude pridané kritérium {podľa dátumu} a články budú zotriedené podľa dátumu', + 'entree_tri_alpha_articles_inverse' => 'ObrátiÅ¥ poradie abecedného triedenia? (použite na to možnosÅ¥ "áno")', + 'entree_tri_alpha_inverse' => 'ObrátiÅ¥ poradie abecedného triedenia? (použite na to možnosÅ¥ "áno")', + 'entree_tri_num' => 'Kritérium triedenia (číselné)', + 'entree_tri_num_articles' => 'Kritérium triedenia článkov (číselné). Ak zadáte "nadpis", bude pridané kritérium {podľa čísla nadpisu} a články budú zotriedené podľa čísla nadpisu', + 'entree_tri_num_articles_inverse' => 'ObrátiÅ¥ poradie číselného triedenia? (použite na to možnosÅ¥ "áno")', + 'entree_tri_num_inverse' => 'ObrátiÅ¥ poradie číselného triedenia? (použite na to možnosÅ¥ "áno")', + 'entree_type_objet' => 'Typ objektu', + 'entree_url' => 'Internetová adresa', + 'entree_url_public' => 'Po prihlásení vypísaÅ¥ adresu', + 'erreur_aucun_type' => 'Žiaden typ položky sa nenaÅ¡iel.', + 'erreur_autorisation' => 'Nemáte povolené upravovaÅ¥ menu.', + 'erreur_identifiant_deja' => 'Tento identifikátor už využíva iné menu.', + 'erreur_identifiant_forme' => 'Identifikátor musí obsahovaÅ¥ len písmená, čísla alebo podčiarkovníky.', + 'erreur_menu_inexistant' => 'Menu číslo @id@ neexistuje.', + 'erreur_mise_a_jour' => 'Počas aktualizácie databázy doÅ¡lo k chybe.', + 'erreur_parametres' => 'V parametroch stránky je chyba', + 'erreur_type_menu' => 'Musíte si vybraÅ¥ typ menu', + 'erreur_type_menu_inexistant' => 'Tento typ menu (už viac) nie je dostupný', + + // F + 'formulaire_ajouter_entree' => 'PridaÅ¥ položku menu', + 'formulaire_ajouter_sous_menu' => 'VytvoriÅ¥ podmenu', + 'formulaire_css' => 'Triedy CSS', + 'formulaire_css_explication' => 'K svojmu menu môžete pridaÅ¥ ďalÅ¡ie triedy CSS.', + 'formulaire_deplacer_bas' => 'Posunúť nadol', + 'formulaire_deplacer_haut' => 'Posunúť nahor', + 'formulaire_facultatif' => 'Nepovinné', + 'formulaire_identifiant' => 'Identifikátor', + 'formulaire_identifiant_explication' => 'Priraďte mu unikátne kľúčové slovo, ktoré vám umožní ľahko zavolaÅ¥ svoje menu.', + 'formulaire_ieconfig_choisir_menus_a_importer' => 'Vyberte, ktoré menu chcete nahraÅ¥.', + 'formulaire_ieconfig_importer' => 'NahraÅ¥', + 'formulaire_ieconfig_menu_meme_identifiant' => 'UPOZORNENIE: na vaÅ¡ej stránke je už menu s rovnakým názvom!', + 'formulaire_ieconfig_menus_a_exporter' => 'Menu na export:', + 'formulaire_ieconfig_ne_pas_importer' => 'NenahrávaÅ¥', + 'formulaire_ieconfig_remplacer' => 'PrepísaÅ¥ súčasné menu nahratým menu', + 'formulaire_ieconfig_renommer' => 'PremenovaÅ¥ toto menu pred nahrávaním', + 'formulaire_importer' => 'NahraÅ¥ menu', + 'formulaire_importer_explication' => 'Ak ste exportovali menu do súboru, môžete ho teraz nahraÅ¥.', + 'formulaire_modifier_entree' => 'UpraviÅ¥ túto položku menu', + 'formulaire_modifier_menu' => 'UpraviÅ¥ menu:', + 'formulaire_nouveau' => 'Nové menu', + 'formulaire_partie_construction' => 'Vytvorenie menu', + 'formulaire_partie_identification' => 'Identifikácia menu', + 'formulaire_supprimer_entree' => 'OdstrániÅ¥ túto položku menu', + 'formulaire_supprimer_menu' => 'OdstrániÅ¥ menu', + 'formulaire_supprimer_sous_menu' => 'OdstrániÅ¥ toto podmenu', + 'formulaire_titre' => 'Nadpis', + + // I + 'info_afficher_articles' => 'Články budú zaradené do menu.', + 'info_articles_max' => 'Iba ak v rubrike nie je viac ako @max@ článkov', + 'info_articles_max_affiches' => 'Zobrazenie obmedzené na @max@ článkov', + 'info_classe_parent' => 'Trieda nadradených prvkov: ', + 'info_connexion_obligatoire' => 'Vyžaduje sa prihlásenie', + 'info_deconnexion_obligatoire' => 'Iba keď ste odhlásený', + 'info_masquer_articles_uniques' => 'Unikátne články skryté', + 'info_numero_menu' => 'MENU ČÍSLO:', + 'info_page_speciale' => 'Odkaz na stránku "@page@"', + 'info_page_speciale_zajax' => 'Modalbox pre stránku "@page@" bloku "@bloc@" ', + 'info_rubrique_courante' => 'Aktuálna rubrika', + 'info_rubriques_exclues' => ' /okrem rubriky (-ík) @id_rubriques@', + 'info_rubriques_max_affichees' => 'Zobrazenie obmedzené na @max@ rubrík', + 'info_secteur_exclus' => ' /okrem sektora (-ov) @id_secteur@', + 'info_sousrub_cond' => 'Sú zobrazené iba podrubriky aktuálnej rubriky.', + 'info_tous_groupes_mots' => 'VÅ¡etky skupiny kľúčových slov', + 'info_traduction_recuperee' => 'Kontext určí vybraný preklad', + 'info_tri' => 'Triedenie:', + 'info_tri_alpha' => '(abecedné)', + 'info_tri_articles' => 'RoztriediÅ¥ články:', + 'info_tri_num' => '(číselné)', + + // N + 'noisette_description' => 'Vkladanie menu definované v zásuvnom module Menus.', + 'noisette_label_afficher_titre_menu' => 'ZobraziÅ¥ názov menu?', + 'noisette_label_identifiant' => 'Menu, ktoré sa má zobraziÅ¥:', + 'noisette_nom_noisette' => 'Menu', + 'nom_menu_accueil' => 'Úvodná stránka', + 'nom_menu_articles_rubrique' => 'Články v rubrike', + 'nom_menu_deconnecter' => 'OdhlásiÅ¥ sa', + 'nom_menu_espace_prive' => 'Prihlásenie/odkaz na súkromnú zónu', + 'nom_menu_groupes_mots' => 'Kľúčové slová a články skupiny kľúčových slov', + 'nom_menu_lien' => 'Samostatný odkaz', + 'nom_menu_mapage' => 'Moja stránka', + 'nom_menu_mots' => 'Články s kľúčovým slovom', + 'nom_menu_objet' => 'Článok, rubrika alebo iný objekt SPIPU', + 'nom_menu_page_speciale' => 'Odkaz na Å¡ablónu stránky', + 'nom_menu_page_speciale_zajax' => 'Blok na stránke v SPIPe', + 'nom_menu_rubriques_completes' => 'Zoznam alebo stromová Å¡truktúra rubrík a článkov (s mnohými možnosÅ¥ami)', + 'nom_menu_rubriques_evenements' => 'Udalosti, ktoré sa týkajú rubriky', + 'nom_menu_secteurlangue' => 'Jazykové sektory', + 'nom_menu_texte_libre' => 'Potvrdený text', + + // T + 'tous_les_articles' => '... VÅ¡etky články', + 'toutes_les_rubriques' => '... VÅ¡etky rubriky' +); + +?> diff --git a/www/plugins/menus_1/lang/paquet-menus.xml b/www/plugins/menus_1/lang/paquet-menus.xml new file mode 100644 index 00000000..e74acae1 --- /dev/null +++ b/www/plugins/menus_1/lang/paquet-menus.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/www/plugins/menus_1/lang/paquet-menus_ar.php b/www/plugins/menus_1/lang/paquet-menus_ar.php new file mode 100644 index 00000000..9370c82c --- /dev/null +++ b/www/plugins/menus_1/lang/paquet-menus_ar.php @@ -0,0 +1,22 @@ + 'عندما لا نستخدم ملحق {{القوائم}}، نضطر لتعريف كل قوائم الموقع في الصفحات النموذجية، + مما يؤدي الى ان مدراء الموقع لا يمكنهم التحكم مباشرة بهذه القوائم، وعندما يرغبون في تعديل اي شيء فيها، يضطرون الى + الطلب من مطور الصفحات النموذجية إدخال التعديلات. إضافة الى ذلك، اذا اردنا وضع روابط ثابتة (مثلاً رابط الى مقال محدد او صفحة محددة او موقع آخر) يجب ادخال هذه الروابط كما هي في صفحة القوائم النموذجية. + + الهدف من ملحق {{القوائم}} هو السماح بإنشاء قوائم بسهولة من خلال واجهة تفاعلية في المجال الخاص. + {{تنبيه!}} لا يتحكم هذا الملحق بالطريقة التي ستعرض فيها هذه القوائم في الموقع العمومي. يكتفي بإنشاء القوائم بسهولة وإنتاج علامات html الخاصة بها. ', + 'menus_nom' => 'القوائم', + 'menus_slogan' => 'إنشاء قوائم شخصية', + 'menus_titre' => 'القوائم' +); + +?> diff --git a/www/plugins/menus_1/lang/paquet-menus_de.php b/www/plugins/menus_1/lang/paquet-menus_de.php new file mode 100644 index 00000000..87b6f956 --- /dev/null +++ b/www/plugins/menus_1/lang/paquet-menus_de.php @@ -0,0 +1,17 @@ + 'Menüs bequem im Redaktionssystem gestalten.', # MODIF + 'menus_nom' => 'Menus', # NEW + 'menus_slogan' => 'Menüs bequem im Redaktionssystem gestalten.', + 'menus_titre' => 'Menüs' +); + +?> diff --git a/www/plugins/menus_1/lang/paquet-menus_en.php b/www/plugins/menus_1/lang/paquet-menus_en.php new file mode 100644 index 00000000..e5cde92e --- /dev/null +++ b/www/plugins/menus_1/lang/paquet-menus_en.php @@ -0,0 +1,23 @@ + 'When you are not using the plugin {{menus}}, you have to define all the menus in your templates, so that site administrators do not have direct hands on it and when they want to change something in it, they are forced to make a request to the person in charge of the templates. + +In addition, when you want static links (a link to a specific article, to a specific page or to an external site) they should be hard written in the template of the menu. + +The purpose of the plugin {{Menus}} is to allow you to create easily menus using an intuitive interface, directly into the private area. + +{{Warning}} This plugin does not deal with the way menus are displayed. It allows their easy creation and to generate the HTML code.', + 'menus_nom' => 'Menus', + 'menus_slogan' => 'Create your own custom menus.', + 'menus_titre' => 'Menus' +); + +?> diff --git a/www/plugins/menus_1/lang/paquet-menus_es.php b/www/plugins/menus_1/lang/paquet-menus_es.php new file mode 100644 index 00000000..42a00c4e --- /dev/null +++ b/www/plugins/menus_1/lang/paquet-menus_es.php @@ -0,0 +1,19 @@ + 'Cuando no se usa el plugin {{Menús}}, es necesario definir todos los menús en los esqueletos, lo que hace los administradores del sitio no puedan cambiar algo a su antojo, sino que deban solicitar a la persona modificar los esqueletos. Además, cuando vea los enlaces estáticos (un enlace a un artículo específico, o a una página determinada, o a un sitio externo) deberá escribirlos en duro en el esqueleto del menú. + El propósito del plugin {{Menús}} es entonces permitir elaborar fácilmente menús mediante una interfaz sencilla directamente en la parte privada. + {{¡Atención!}} Este plugin no se ocupa de cómo se mostrarán los menús. Permite crearlos fácilmente y generar el código HTML.', + 'menus_nom' => 'Menús', + 'menus_slogan' => 'Cree sus menús personalizados.', + 'menus_titre' => 'Menús' +); + +?> diff --git a/www/plugins/menus_1/lang/paquet-menus_fr.php b/www/plugins/menus_1/lang/paquet-menus_fr.php new file mode 100644 index 00000000..46d3bccb --- /dev/null +++ b/www/plugins/menus_1/lang/paquet-menus_fr.php @@ -0,0 +1,21 @@ + 'Lorsqu\'on ne se sert pas du plugin {{Menus}}, on est obligé de définir tous ses menus dans les squelettes, + ce qui fait que les administrateurs du site n\'ont pas directement la main dessus et que lorsqu\'ils veulent y changer quelque chose, ils sont obligés + d\'en faire la demande à la personne en charge des squelettes. De plus, lorsqu\'on veut des liens statiques (un lien vers un article précis, + ou vers une page précise, ou vers un site externe) il faut les écrire en dur dans le squelette du menu. + + Le but du plugin {{Menus}} est donc de permettre de facilement élaborer des menus au moyen d\'une interface conviviale, directement dans la partie privée. + {{Attention !}} Ce plugin ne s\'occupe pas de la manière dont seront affichés les menus. Il permet de les créer facilement et d\'en générer le code HTML.', + 'menus_nom' => 'Menus', + 'menus_slogan' => 'Créez vos menus personnalisés.', + 'menus_titre' => 'Menus' +); + +?> diff --git a/www/plugins/menus_1/lang/paquet-menus_it.php b/www/plugins/menus_1/lang/paquet-menus_it.php new file mode 100644 index 00000000..9a6975fe --- /dev/null +++ b/www/plugins/menus_1/lang/paquet-menus_it.php @@ -0,0 +1,17 @@ + 'Crea i tuoi menù in redazione.', # MODIF + 'menus_nom' => 'Menus', # NEW + 'menus_slogan' => 'Crea i tuoi menù in redazione.', + 'menus_titre' => 'Menù' +); + +?> diff --git a/www/plugins/menus_1/lang/paquet-menus_sk.php b/www/plugins/menus_1/lang/paquet-menus_sk.php new file mode 100644 index 00000000..6a876780 --- /dev/null +++ b/www/plugins/menus_1/lang/paquet-menus_sk.php @@ -0,0 +1,23 @@ + 'Keď sa nepoužíva zásuvný modul{{Menus,}} vÅ¡etky Å¡ablóny musia byÅ¥ definované v ich menu, + čiže administrátori stránky to nemajú úplne pod kontrolou a ak chcú niečo zmeniÅ¥, musia sa obrátiÅ¥ + na človeka, ktorý je zodpovedný za šablóny. Okrem toho ak chcete pridaÅ¥ statické odkazy (odkaz na konkrétny článok + alebo na konkrétnu stránku, alebo na externú stránku), tie musia byÅ¥ zapísané do Å¡ablóny menu. + + Cieľom zásuvného modulu {{Menus}} je umožniÅ¥ vám ľahko vytváraÅ¥ menu pomocou intuitívneho rozhrania priamo do súkromnej zóny. + {{Pozor!}} Tento zásuvný modul sa nezaoberá tým, ako sa položky menu zobrazia. Umožňuje ľahké vytváranie menu a vygenerovanie kódu HTML.', + 'menus_nom' => 'Ponuky menu', + 'menus_slogan' => 'Vytvorte svoje vlastné ponuky menu.', + 'menus_titre' => 'Ponuky menu' +); + +?> diff --git a/www/plugins/menus_1/menu.html b/www/plugins/menus_1/menu.html new file mode 100644 index 00000000..b6581ebe --- /dev/null +++ b/www/plugins/menus_1/menu.html @@ -0,0 +1,11 @@ + + + + [(#TITRE|textebrut)] + + +

    #TITRE

    + #INCLURE{fond=inclure/menu, env} + + + diff --git a/www/plugins/menus_1/menus/accueil.html b/www/plugins/menus_1/menus/accueil.html new file mode 100644 index 00000000..95ae86ed --- /dev/null +++ b/www/plugins/menus_1/menus/accueil.html @@ -0,0 +1,9 @@ +[(#SET{titre,[(#ENV*{titre}|typo|sinon{<:accueil_site:>})]})] +[(#ENV{appel_formulaire}|oui) +
    #GET{titre}
    +
    <:info_racine_site:>
    +] +[(#ENV{appel_menu}|oui) + + + + + + + [(#GET{cpt}|>{#GET{articles_max_affiches}}|oui) +
  • <:menus:tous_les_articles:>
  • + ] + + + + #SET{cpt,0} + #SET{cpt,#TOTAL_BOUCLE} + + + + [(#GET{cpt}|>{#GET{articles_max_affiches}}|oui) +
  • <:menus:tous_les_articles:>
  • + ] + + + \ No newline at end of file diff --git a/www/plugins/menus_1/menus/articles_rubrique.xml b/www/plugins/menus_1/menus/articles_rubrique.xml new file mode 100644 index 00000000..3a185912 --- /dev/null +++ b/www/plugins/menus_1/menus/articles_rubrique.xml @@ -0,0 +1,12 @@ + + <:menus:nom_menu_articles_rubrique:> + 04 + <:menus:description_menu_articles_rubrique:> + images/menus_articles_rubrique.png + + + + + + + diff --git a/www/plugins/menus_1/menus/deconnecter.html b/www/plugins/menus_1/menus/deconnecter.html new file mode 100644 index 00000000..f045569c --- /dev/null +++ b/www/plugins/menus_1/menus/deconnecter.html @@ -0,0 +1,9 @@ +[(#SET{titre,[(#ENV*{titre}|typo|sinon{<:icone_deconnecter:>})]})] +[(#ENV{appel_formulaire}|oui) +
    #GET{titre}
    +
    +] +[(#ENV{appel_menu}|et{#SESSION{id_auteur}|>{0}|oui}|oui) + + + + + + + + \ No newline at end of file diff --git a/www/plugins/menus_1/menus/groupe_mots.xml b/www/plugins/menus_1/menus/groupe_mots.xml new file mode 100644 index 00000000..f43eabdb --- /dev/null +++ b/www/plugins/menus_1/menus/groupe_mots.xml @@ -0,0 +1,11 @@ + + <:menus:nom_menu_groupes_mots:> + 05 + <:menus:description_menu_groupes_mots:> + images/menus_groupes_mots.png + + + + + + diff --git a/www/plugins/menus_1/menus/lien.html b/www/plugins/menus_1/menus/lien.html new file mode 100644 index 00000000..ab348b8b --- /dev/null +++ b/www/plugins/menus_1/menus/lien.html @@ -0,0 +1,10 @@ +#SET{titre, #ENV*{titre}|typo} + +[(#ENV{appel_formulaire}|oui) +
    #GET{titre}
    +
    [(#ENV*{url}|extraire_multi)]
    +] +[(#ENV{appel_menu}|oui) + + + diff --git a/www/plugins/menus_1/menus/mots.xml b/www/plugins/menus_1/menus/mots.xml new file mode 100644 index 00000000..1d32e0ca --- /dev/null +++ b/www/plugins/menus_1/menus/mots.xml @@ -0,0 +1,11 @@ + + <:menus:nom_menu_mots:> + 04 + <:menus:description_menu_mots:> + images/menus_mots.png + + + + + + diff --git a/www/plugins/menus_1/menus/objet.html b/www/plugins/menus_1/menus/objet.html new file mode 100644 index 00000000..9301da65 --- /dev/null +++ b/www/plugins/menus_1/menus/objet.html @@ -0,0 +1,36 @@ +#SET{id_objet,#ENV{id_objet}} + + + +#SET{id_objet,#ID_ARTICLE} + +#SET{id_objet,#ID_ARTICLE} + + + + +[(#SET{titre, #ENV*{titre}|typo|sinon{#INFO_TITRE{#ENV{type_objet}, #GET{id_objet}}}|sinon{<:info_sans_titre:>}})] + +[(#ENV{trad}|=={trad}|et{#ENV{type_objet}|=={article}}|oui)#SET{info_trad,#VAL{menus:info_traduction_recuperee}|_T}] + +#SET{visible,oui} +[(#ENV{connexion}|=={session}|oui) + [(#SESSION{statut}|non) + #SET{visible,non}] + #SET{info_session,#VAL{menus:info_connexion_obligatoire}|_T} +] +[(#ENV{connexion}|=={nosession}|oui) + [(#SESSION{statut}|oui) + #SET{visible,non}] + #SET{info_session,#VAL{menus:info_deconnexion_obligatoire}|_T} +] + +[(#ENV{appel_formulaire}|oui) +
    #GET{titre}
    +
    #ENV{type_objet}-#GET{id_objet}[-(#GET{info_session})][-(#GET{info_trad})]
    +] + +[(#ENV{appel_menu}|et{#GET{visible}|=={oui}}|oui) + + + + [(#REM) ---------------------------------- + troisieme cas de gestion de l'affichage des articles : les articles de la rubriques de d�part ] + + [(#REM) On commence par compter le nombre d'articles de la rubrique (servira pour l'item "Tous les articles") ] + #SET{cpt,0} + #SET{cpt,#TOTAL_BOUCLE} + + [(#REM) On affiche les articles : + - S'il y en a moins que le max demand� + - ET - si on n'a pas demand� de masquage des articles uniques + - OU si le masquage des articles uniques est demand� et qu'il y en a plus d'un ] + #SET{afficher,non} + [(#GET{cpt}|<={#GET{articles_max}}|oui|et{#GET{cpt}|>{1}|ou{#GET{masquer_articles_uniques}|=={'on'}|non}}) + #SET{afficher,oui}] + + + + + + [(#GET{cpt}|>{#GET{articles_max_affiches}}|oui) + ] + + + + [(#REM) --------------------------- Fin troisieme cas ] + + diff --git a/www/plugins/menus_1/menus/rubriques_completes.xml b/www/plugins/menus_1/menus/rubriques_completes.xml new file mode 100644 index 00000000..60c185a7 --- /dev/null +++ b/www/plugins/menus_1/menus/rubriques_completes.xml @@ -0,0 +1,26 @@ + + <:menus:nom_menu_rubriques_completes:> + 04 + <:menus:description_menu_rubriques_completes:> + images/menus_rubriques.png + + + + + + + + + + + + + + + + + + + + + diff --git a/www/plugins/menus_1/menus/secteurlangue.html b/www/plugins/menus_1/menus/secteurlangue.html new file mode 100644 index 00000000..aa50e853 --- /dev/null +++ b/www/plugins/menus_1/menus/secteurlangue.html @@ -0,0 +1,2 @@ +#SET{id_rubrique,#ID_RUBRIQUE} +#INCLURE{fond=menus/rubriques_completes,id_rubrique=#GET{id_rubrique},secteurlangue=oui,env} diff --git a/www/plugins/menus_1/menus/secteurlangue.xml b/www/plugins/menus_1/menus/secteurlangue.xml new file mode 100644 index 00000000..3ae22997 --- /dev/null +++ b/www/plugins/menus_1/menus/secteurlangue.xml @@ -0,0 +1,21 @@ + + <:menus:nom_menu_secteurlangue:> + <:menus:description_menu_secteurlangue:> + images/menus_secteurlangue.png + + + + + + + + + + + + + + + + + diff --git a/www/plugins/menus_1/menus/texte_libre.html b/www/plugins/menus_1/menus/texte_libre.html new file mode 100644 index 00000000..596a6a27 --- /dev/null +++ b/www/plugins/menus_1/menus/texte_libre.html @@ -0,0 +1,10 @@ +#SET{contenu, #ENV*{contenu}|_T_ou_typo} + +[(#ENV{appel_formulaire}|oui) +
    [(#GET{contenu}|expanser_liens)]
    +
    +] +[(#ENV{appel_menu}|oui) +