From 06771f5bdcc8b4590cd4f0d215ad4d93eaacd2e4 Mon Sep 17 00:00:00 2001
From: Fil <fil@rezo.net>
Date: Wed, 2 Feb 2005 12:52:31 +0000
Subject: [PATCH] =?UTF-8?q?re-changement=20de=20r=C3=A9pertoires?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 dist/404.html                                 |  50 +++
 dist/404.php3                                 |   7 +
 dist/article.html                             | 290 ++++++++++++++
 dist/auteur.html                              |  92 +++++
 dist/backend-breves.html                      |  32 ++
 dist/backend.html                             |  46 +++
 dist/breve.html                               | 220 +++++++++++
 dist/distrib.html                             |   7 +
 dist/forum.html                               | 107 +++++
 dist/ical.html                                |  29 ++
 dist/login.html                               |  37 ++
 dist/mot.html                                 | 181 +++++++++
 dist/nouveautes.html                          |  35 ++
 dist/plan.html                                | 123 ++++++
 dist/recherche.html                           | 177 +++++++++
 dist/resume.html                              | 137 +++++++
 dist/rubrique.html                            | 225 +++++++++++
 dist/site.html                                |  90 +++++
 dist/sommaire.html                            | 169 ++++++++
 dist/sommaire_texte.html                      |  97 +++++
 ecrire/inc_version.php3                       |   2 +-
 formulaires/formulaire_admin.html             |  16 +
 formulaires/formulaire_ecrire_auteur.html     |  20 +
 formulaires/formulaire_forum.html             |  54 +++
 formulaires/formulaire_inscription.html       |  42 ++
 formulaires/formulaire_login.html             |  79 ++++
 formulaires/formulaire_menu_lang.html         |  14 +
 formulaires/formulaire_oubli.html             |  37 ++
 formulaires/formulaire_recherche.html         |   9 +
 formulaires/formulaire_signature.html         |  44 +++
 formulaires/formulaire_site.html              |  18 +
 formulaires/inc-formulaire_admin.php3         | 109 ++++++
 formulaires/inc-formulaire_ecrire_auteur.php3 |  59 +++
 formulaires/inc-formulaire_forum.php3         | 364 ++++++++++++++++++
 formulaires/inc-formulaire_inscription.php3   | 123 ++++++
 formulaires/inc-formulaire_recherche.php3     |  26 ++
 formulaires/inc-formulaire_signature.php3     | 248 ++++++++++++
 formulaires/inc-formulaire_site.php3          |  37 ++
 formulaires/inc-login_prive.php3              |  30 ++
 formulaires/inc-login_public.php3             | 147 +++++++
 formulaires/inc-menu_lang.php3                |  26 ++
 formulaires/inc-menu_lang_ecrire.php3         |  41 ++
 formulaires/inc-url_logout.php3               |  20 +
 43 files changed, 3715 insertions(+), 1 deletion(-)
 create mode 100644 dist/404.html
 create mode 100644 dist/404.php3
 create mode 100644 dist/article.html
 create mode 100644 dist/auteur.html
 create mode 100644 dist/backend-breves.html
 create mode 100644 dist/backend.html
 create mode 100644 dist/breve.html
 create mode 100644 dist/distrib.html
 create mode 100644 dist/forum.html
 create mode 100644 dist/ical.html
 create mode 100644 dist/login.html
 create mode 100644 dist/mot.html
 create mode 100644 dist/nouveautes.html
 create mode 100644 dist/plan.html
 create mode 100644 dist/recherche.html
 create mode 100644 dist/resume.html
 create mode 100644 dist/rubrique.html
 create mode 100644 dist/site.html
 create mode 100644 dist/sommaire.html
 create mode 100644 dist/sommaire_texte.html
 create mode 100644 formulaires/formulaire_admin.html
 create mode 100644 formulaires/formulaire_ecrire_auteur.html
 create mode 100644 formulaires/formulaire_forum.html
 create mode 100644 formulaires/formulaire_inscription.html
 create mode 100644 formulaires/formulaire_login.html
 create mode 100644 formulaires/formulaire_menu_lang.html
 create mode 100644 formulaires/formulaire_oubli.html
 create mode 100644 formulaires/formulaire_recherche.html
 create mode 100644 formulaires/formulaire_signature.html
 create mode 100644 formulaires/formulaire_site.html
 create mode 100644 formulaires/inc-formulaire_admin.php3
 create mode 100644 formulaires/inc-formulaire_ecrire_auteur.php3
 create mode 100644 formulaires/inc-formulaire_forum.php3
 create mode 100644 formulaires/inc-formulaire_inscription.php3
 create mode 100644 formulaires/inc-formulaire_recherche.php3
 create mode 100644 formulaires/inc-formulaire_signature.php3
 create mode 100644 formulaires/inc-formulaire_site.php3
 create mode 100644 formulaires/inc-login_prive.php3
 create mode 100644 formulaires/inc-login_public.php3
 create mode 100644 formulaires/inc-menu_lang.php3
 create mode 100644 formulaires/inc-menu_lang_ecrire.php3
 create mode 100644 formulaires/inc-url_logout.php3

diff --git a/dist/404.html b/dist/404.html
new file mode 100644
index 0000000000..2eedcf5949
--- /dev/null
+++ b/dist/404.html
@@ -0,0 +1,50 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="#LANG">
+<head>
+	<title>[#NOM_SITE_SPIP - <:pass_erreur:> 404]</title>
+	<meta http-equiv="Content-Type" content="text/html; charset=#CHARSET">
+
+	<!-- Ceci est la feuille de style par defaut pour les types internes a SPIP -->
+	<link rel="stylesheet" href="spip_style.css" type="text/css">
+
+	<!-- Les feuilles de style specifiques aux presents squelettes -->
+	<link rel="stylesheet" href="typographie.css" type="text/css">
+
+	<!-- media="..." permet de ne pas utiliser ce style sous Netscape 4 (sinon plantage) -->
+	<link rel="stylesheet" href="habillage.css" type="text/css" media="print, projection, screen, tv">
+
+</head>
+<body bgcolor="white" dir="#LANG_DIR">
+
+
+
+<div id="navigation">
+
+	<h1 class="structure"><:navigation:></h1>
+	
+	<!-- Menu de navigation general -->
+	<div class="menu">
+	<ul class="general">
+		<li class="menu-titre"><a href="#URL_SITE_SPIP" title="<:accueil_site:>"><b>#NOM_SITE_SPIP</b></a></li>
+		<li class="menu-item"><a href="plan.php3"><:plan_site:></a></li>
+		<li class="menu-item"><a href="resume.php3" title="<:articles_populaires:>"><:en_resume:></a></li>
+		<li class="menu-item"><a href="ecrire/"><:espace_prive:></a></li>
+	</ul>
+	</div>
+	
+	<!-- Formulaire de recherche -->
+	#FORMULAIRE_RECHERCHE
+
+</div>
+
+<div id="principal" class="contenu">
+
+<h1 class="titre-texte"><:pass_erreur:> 404</h1>
+	<p>#ERREUR_AUCUN</p>
+</div>
+
+
+#SPIP_CRON
+
+</body>
+</html>
\ No newline at end of file
diff --git a/dist/404.php3 b/dist/404.php3
new file mode 100644
index 0000000000..a55d59a070
--- /dev/null
+++ b/dist/404.php3
@@ -0,0 +1,7 @@
+<?php
+
+	$fond='404';
+	$delais = 12 * 3600;
+	include ('inc-public.php3');
+
+?>
\ No newline at end of file
diff --git a/dist/article.html b/dist/article.html
new file mode 100644
index 0000000000..509c89438a
--- /dev/null
+++ b/dist/article.html
@@ -0,0 +1,290 @@
+<BOUCLE_article_principal(ARTICLES) {id_article}
+><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="#LANG">
+<head>
+<title>[(#TITRE|textebrut)]</title>
+<meta http-equiv="Content-Type" content="text/html; charset=#CHARSET">
+<!-- Ceci est la feuille de style par defaut pour les types internes a SPIP -->
+<link rel="stylesheet" href="spip_style.css" type="text/css">
+
+<!-- Les feuilles de style specifiques aux presents squelettes -->
+<link rel="stylesheet" href="typographie.css" type="text/css">
+
+<!-- media="..." permet de ne pas utiliser ce style sous Netscape 4 (sinon plantage) -->
+<link rel="stylesheet" href="habillage.css" type="text/css" media="projection, screen, tv">
+<!-- media="print" permet d'utiliser cette feuille de style quand vous imprimez depuis votre navigateur -->
+<link rel="stylesheet" href="impression.css" type="text/css" media="print">
+</head>
+
+<body bgcolor="white" dir="#LANG_DIR">
+<div id="navigation">
+
+<h1 class="structure"><:navigation:></h1>
+
+<!-- Menu de navigation general -->
+
+<div class="menu">
+<ul class="general">
+	<li class="menu-titre">
+	[<a href="(#URL_SITE_SPIP)" title="<:accueil_site:>"><b>#NOM_SITE_SPIP</b></a>]
+	</li>
+	<li class="menu-item">
+	<a href="plan.php3"><:plan_site:></a>
+	</li>
+	<li class="menu-item">
+	<a href="resume.php3" title="<:articles_populaires:>"><:en_resume:></a>
+	</li>
+	<li class="menu-item">
+	<a href="ecrire/"><:espace_prive:></a>
+	</li>
+</ul>
+</div>
+
+<!-- Formulaire de recherche -->
+
+[(#FORMULAIRE_RECHERCHE)]
+
+
+<!-- Menu de navigation rubriques -->
+
+<B_rubriques>
+<div class="menu">
+<ol class="rubriques">
+<BOUCLE_rubriques(HIERARCHIE) {id_article}>
+<li>
+<div class="menu-titre"><a href="#URL_RUBRIQUE" [title="(#DESCRIPTIF|textebrut|entites_html)"]>#TITRE</a></div>
+<B_sous_rubriques>
+	<ul class="menu-liste">
+<BOUCLE_sous_rubriques(RUBRIQUES) {meme_parent} {exclus} {par date} {inverse} {0,3}>
+	<li class="menu-item"><a href="#URL_RUBRIQUE" [title="(#DESCRIPTIF|textebrut|entites_html)"]>#TITRE</a></li>
+</BOUCLE_sous_rubriques>
+	</ul>
+</B_sous_rubriques>
+</li>
+</BOUCLE_rubriques>
+</ol>
+</div>
+</B_rubriques>
+
+
+<!-- Menu de navigation mots-cles -->
+
+<B_mots>
+<div class="menu">
+
+<h1 class="structure"><:mots_clefs:></h1>
+
+<ul class="divers" title="<:mots_clefs:>">
+<BOUCLE_mots(MOTS) {id_article} {par titre}>
+<li>
+<div class="menu-titre"><a href="#URL_MOT" [title="(#DESCRIPTIF|textebrut|entites_html)"]>#TITRE</a></div>
+<B_articles_mots>
+	<ul class="menu-liste">
+<BOUCLE_articles_mots(ARTICLES) {id_mot} {par hasard} {0,4}>
+	<li class="menu-item"><a href="#URL_ARTICLE" title="[(#DESCRIPTIF|textebrut|entites_html)]">#TITRE</a></li>
+</BOUCLE_articles_mots>
+	</ul>
+</B_articles_mots>
+</li>
+</BOUCLE_mots>
+</ul>
+</div>
+</B_mots>
+
+
+<!-- Liens des forums -->
+<BOUCLE_forums_decompte(FORUMS){id_article}{plat}></BOUCLE_forums_decompte>
+[<div class="menu" title="<:derniers_commentaires:>">
+
+<h1 class="structure"><:derniers_commentaires:></h1>
+
+<ul class="forums">
+
+<li class="menu-titre"><:messages_forum:>: (#TOTAL_BOUCLE)</li>]
+<//B_forums_decompte>
+<BOUCLE_forums_liens(FORUMS){id_article}{par date}{inverse}{0,5}>
+    <li class="menu-item">[<i>(#DATE|affdate_court)</i>:]
+    <a href="#forum#ID_FORUM">#TITRE</a>
+    </li>
+</BOUCLE_forums_liens>
+</ul>
+</div>
+</B_forums_liens>
+
+
+</div>
+
+
+<!-- Une : derniers articles publies -->
+
+<div class="contenu" id="principal">
+
+<div class="cartouche">
+#DEBUT_SURLIGNE[
+(#LOGO_ARTICLE|left)][
+<div class="surtitre">(#SURTITRE)</div>
+]<h1 class="titre-texte">#TITRE</h1>[
+<div class="surtitre">(#SOUSTITRE)</div>
+]#FIN_SURLIGNE
+[(#DATE|nom_jour)] [(#DATE|affdate).]
+</div>
+<div style="line-height: 0em">&nbsp;</div><!-- Bug Mozilla http://bugzilla.mozilla.org/show_bug.cgi?id=200510 -->
+
+	<div class="encart">
+
+	<!-- Auteurs de l'article -->
+
+	<B_auteurs>
+
+	<div class="menu">
+	<h2 class="structure"><:memes_auteurs:></h2>
+	<ul class="divers">
+	<BOUCLE_auteurs(AUTEURS) {id_article} {par nom}>
+		<li>
+		<div class="menu-titre"><a href="#URL_AUTEUR">#NOM</a></div>
+		<ul>
+		[<li class="menu-item" style="text-align: center"><a href="(#URL_SITE)">#NOM_SITE</a></li>]
+		[<li class="menu-item" style="text-align: center">(#BIO)</li>]
+	<B_articles_auteur>
+	<BOUCLE_articles_auteur(ARTICLES) {id_auteur} {par popularite} {inverse} {0,5}>
+		<li class="menu-item"><a href="#URL_ARTICLE" [title="(#DESCRIPTIF|textebrut|entites_html)"]>#TITRE</a></li>
+	</BOUCLE_articles_auteur>
+		</ul>
+		</li>
+	</BOUCLE_auteurs>
+	</ul>
+	</div>
+
+	</B_auteurs>
+
+	<!-- Articles dans la meme rubrique -->
+
+	<B_articles_rubrique>
+
+	<div class="menu">
+	<div class="breves">
+		<h2 class="structure"><:meme_rubrique:></h2>
+		<div class="menu-titre">
+		<:meme_rubrique:>
+		</div>
+		<ul>
+	<BOUCLE_articles_rubrique(ARTICLES) {id_rubrique} {par hasard} {exclus} {0,8}>
+		<li class="menu-item">
+		<a href="#URL_ARTICLE" [title="(#DESCRIPTIF|textebrut|entites_html)"]>#TITRE</a>
+		</li>
+	</BOUCLE_articles_rubrique>
+		</ul>
+	</div>
+	</div>
+
+	</B_articles_rubrique>
+  [<div class='reponse_formulaire'>
+	<a name='sp#ID_ARTICLE' id='sp#ID_ARTICLE'></a>
+    (#FORMULAIRE_SIGNATURE)
+  </div>]
+	</div>
+
+#DEBUT_SURLIGNE[
+<div class="chapo">(#CHAPO)</div>
+][<div class="texte">(#TEXTE)</div>
+][<div class="ps">(#PS)</div>][
+<div class="notes">(#NOTES)</div>
+]#FIN_SURLIGNE
+
+<BOUCLE_documents_joints(DOCUMENTS) {id_article} {mode=document} {doublons} {"<br>"}>
+[(#LOGO_DOCUMENT|#URL_DOCUMENT)][<br>(#TITRE)][ - (#DESCRIPTIF)]
+</BOUCLE_documents_joints>
+<br>
+
+
+<!-- Signatures petition -->
+
+<BOUCLE_signatures_decompte(SIGNATURES) {id_article}></BOUCLE_signatures_decompte>
+[<div class="signatures-titre"><:signatures_petition:>: (#TOTAL_BOUCLE)</div>
+
+<table class="signatures">
+<thead class="structure">
+<tr>
+	<td><:date:></td>
+	<td><:nom:></td>
+	<td><:message:></td>
+</tr>
+</thead>
+<tbody>]
+<//B_signatures_decompte>
+<BOUCLE_signatures(SIGNATURES) {id_article} {par date} {inverse} {debut_signatures,30}>
+<tr>
+	<td class="signature-date">[(#DATE|affdate_court)]</td>
+	<td class="signature-nom">#NOM[<br><a href="#URL_SITE">(#NOM_SITE)</a>]</td>
+	[<td class="signature-message">(#MESSAGE)</td>]
+</tr>
+</BOUCLE_signatures>
+</tbody>
+</table>
+</B_signatures>
+
+
+<!-- Forums -->
+
+[<div class="forum-repondre"><B><A  HREF="forum.php3?(#PARAMETRES_FORUM)"><:repondre_article:></A></B></div>]
+<br>
+
+<h1 class="structure"><:Forum:></h1>
+
+<B_forums>
+<ul class="forum-total">
+
+<BOUCLE_forums(FORUMS){id_article}{par date}{inverse}>
+
+<li>
+<div class="forum-fil">
+
+<div class="forum">
+<div class="forum-chapo">
+<div class="forum-titre"><a name="forum#ID_FORUM"></a>#TITRE</div>
+[(#DATE|affdate)][, <:par_auteur:> <A HREF="mailto:#EMAIL">(#NOM)</A>]
+</div>
+<div class="forum-item">
+#TEXTE
+[<div class="forum-titre"><a href="(#URL_SITE)" class="spip_out">#NOM_SITE</a></div>]
+[<div class="forum-repondre-message"><a href="forum.php3?(#PARAMETRES_FORUM)"><:repondre_message:></a></div>]
+</div>
+</div>
+
+<B_forums_fils>
+	<ul>
+	<BOUCLE_forums_fils(FORUMS){id_parent}{par date}>
+
+	<li>
+	<div class="forum">
+	<div class="forum-chapo">
+	<div class="forum-titre"><a name="forum#ID_FORUM"></a>#TITRE</div>
+	[(#DATE|affdate)][, <:par_auteur:> <A HREF="mailto:#EMAIL">(#NOM)</A>]
+	</div>
+	<div class="forum-item">
+	#TEXTE
+	[<div class="forum-titre"><a href="(#URL_SITE)" class="spip_out">#NOM_SITE</a></div>]
+	[<div class="forum-repondre-message"><a href="forum.php3?(#PARAMETRES_FORUM)"><:repondre_message:></a></div>]
+	</div>
+
+	</div>
+
+	<BOUCLE_Forums_Boucle(boucle_forums_fils)></BOUCLE_Forums_Boucle>
+	</li>
+
+	</BOUCLE_forums_fils>
+	</ul>
+</B_forums_fils>
+
+</div>
+</li>
+</BOUCLE_forums>
+
+</ul>
+</B_forums>
+
+</div>
+
+</body>
+</html>
+</BOUCLE_article_principal>
\ No newline at end of file
diff --git a/dist/auteur.html b/dist/auteur.html
new file mode 100644
index 0000000000..40f3978d21
--- /dev/null
+++ b/dist/auteur.html
@@ -0,0 +1,92 @@
+<BOUCLE_auteur_principal(AUTEURS) {id_auteur}
+><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="#LANG">
+<head>
+<title>[(#NOM|textebrut)]</title>
+<meta http-equiv="Content-Type" content="text/html; charset=#CHARSET">
+
+<!-- Ceci est la feuille de style par defaut pour les types internes a SPIP -->
+<link rel="stylesheet" href="spip_style.css" type="text/css">
+
+<!-- Les feuilles de style specifiques aux presents squelettes -->
+<link rel="stylesheet" href="typographie.css" type="text/css">
+
+<!-- media="..." permet de ne pas utiliser ce style sous Netscape 4 (sinon plantage) -->
+<link rel="stylesheet" href="habillage.css" type="text/css" media="projection, screen, tv">
+<!-- media="print" permet d'utiliser cette feuille de style quand vous imprimez depuis votre navigateur -->
+<link rel="stylesheet" href="impression.css" type="text/css" media="print">
+</head>
+
+<body bgcolor="white">
+
+<div id="navigation">
+
+<h1 class="structure"><:navigation:></h1>
+
+<!-- Menu de navigation general -->
+
+<div class="menu">
+<ul class="general">
+	<li class="menu-titre">
+	[<a href="(#URL_SITE_SPIP)" title="<:accueil_site:>"><b>#NOM_SITE_SPIP</b></a>]
+	</li>
+	<li class="menu-item">
+	<a href="plan.php3"><:plan_site:></a>
+	</li>
+	<li class="menu-item">
+	<a href="resume.php3" title="<:articles_populaires:>"><:en_resume:></a>
+	</li>
+	<li class="menu-item">
+	<a href="ecrire/"><:espace_prive:></a>
+	</li>
+</ul>
+</div>
+
+
+<!-- Formulaire de recherche -->
+
+[(#FORMULAIRE_RECHERCHE)]
+
+
+</div>
+
+
+<!-- Une : affichage de l'auteur -->
+
+<div class="contenu" id="principal">
+
+<div class="cartouche">
+[(#LOGO_AUTEUR|left)]
+<h1 class="titre-texte">#NOM</h1>
+
+[<div class="chapo">(#BIO)</div>]
+[<br>#NOM_SITE : <a href="(#URL_SITE)">#URL_SITE</a><br>]
+[<div class="notes">(#NOTES)</div>]
+</div>
+
+[<p><b><:envoyer_message:></b></p>
+<div class='spip_encadrer'><b>(#FORMULAIRE_ECRIRE_AUTEUR)</b></div>]
+
+<!-- Articles de l'auteur -->
+
+<h1 class="structure"><:articles_auteur:></h1>
+
+<div class="liste-articles">
+
+<BOUCLE_articles(ARTICLES) {id_auteur} {par titre}>
+	<h2><a href="#URL_ARTICLE" [title="(#DESCRIPTIF|textebrut|entites_html)"]>#TITRE</a></h2>
+	<div class="detail">
+	[(#DATE|nom_jour)] [(#DATE|affdate)]
+	<B_auteurs><:par_auteur:> <BOUCLE_auteurs(AUTEURS) {id_article} {", "}>#NOM</BOUCLE_auteurs>
+	</div>
+	<br>
+</BOUCLE_articles>
+
+</div>
+
+</div>
+
+</body>
+</html>
+</BOUCLE_auteur_principal>
+
diff --git a/dist/backend-breves.html b/dist/backend-breves.html
new file mode 100644
index 0000000000..dcb6a830ff
--- /dev/null
+++ b/dist/backend-breves.html
@@ -0,0 +1,32 @@
+<?php echo '<'.'?xml version="1.0" encoding="#CHARSET"?'.">\n"; ?>
+<rss version="0.91" xmlns:dc="http://purl.org/dc/elements/1.1/">
+
+<channel>
+
+	<title>[(#NOM_SITE_SPIP|texte_backend)]</title>
+	<link>#URL_SITE_SPIP/</link>
+	<description></description>
+	<language>#LANG</language>
+
+	<image>
+		<title>[(#NOM_SITE_SPIP|texte_backend)]</title>
+		<url>#URL_SITE_SPIP[/(#LOGO_SITE_SPIP||extraire_attribut{src})]</url>
+		<link>#URL_SITE_SPIP/</link>
+		<description></description>
+	</image>
+
+	<BOUCLE_breves(BREVES){id_rubrique ?}{lang ?}{par date}{inverse}{0,10}>
+	<item>
+		<title>[(#TITRE|texte_backend)]</title>
+		<link>#URL_SITE_SPIP/#URL_BREVE</link>
+		<date>#DATE</date>
+		<description>[&lt;img src="#URL_SITE_SPIP/(#LOGO_BREVE||extraire_attribut{src})" align="left" hspace="4" vspace="4"&gt; ][(#TEXTE|texte_backend)]</description>
+		<dc:date>[(#DATE|date_iso)]</dc:date>
+		<dc:format>text/html</dc:format>
+		<dc:language>#LANG</dc:language>
+	</item>
+	</BOUCLE_breves>
+
+</channel>
+
+</rss>
diff --git a/dist/backend.html b/dist/backend.html
new file mode 100644
index 0000000000..46897d3a2f
--- /dev/null
+++ b/dist/backend.html
@@ -0,0 +1,46 @@
+<?php echo '<'.'?xml version="1.0" encoding="#CHARSET"?'.">\n"; ?>
+<rss version="0.91" xmlns:dc="http://purl.org/dc/elements/1.1/">
+
+<channel>
+	<title>[(#NOM_SITE_SPIP|texte_backend)]</title>
+	<link>#URL_SITE_SPIP/</link>
+	<description></description>
+	<language>#LANG</language>
+
+	<image>
+		<title>[(#NOM_SITE_SPIP|texte_backend)]</title>
+		<url>#URL_SITE_SPIP[/(#LOGO_SITE_SPIP||extraire_attribut{src})]</url>
+		<link>#URL_SITE_SPIP/</link>
+		<description></description>
+	</image>
+
+	<BOUCLE_10recents(ARTICLES){lang ?}{branche ?}{par date}{inverse}{0,10}{unique}>
+		<item>
+		<title>[(#TITRE|texte_backend)]</title>
+		<link>#URL_SITE_SPIP/#URL_ARTICLE</link>
+		<date>#DATE</date>
+		<description>[&lt;img src="#URL_SITE_SPIP/(#LOGO_ARTICLE||extraire_attribut{src})" align="left" hspace="4" vspace="4"&gt; ][(#INTRODUCTION|texte_backend)]</description>
+		<author><BOUCLE_auteurs(AUTEURS){id_article}{", "}>[(#NOM|texte_backend)]</BOUCLE_auteurs></author>
+		<dc:date>[(#DATE|date_iso)]</dc:date>
+		<dc:format>text/html</dc:format>
+		<dc:language>#LANG</dc:language>
+		<dc:creator><BOUCLE_auteursb(AUTEURS){id_article}{", "}>[(#NOM|texte_backend)]</BOUCLE_auteursb></dc:creator>
+		</item>
+	</BOUCLE_10recents>
+	<BOUCLE_tres_recents(ARTICLES){lang ?}{branche ?}{par date}{inverse}{age<3}{unique}>
+		<item>
+		<title>[(#TITRE|texte_backend)]</title>
+		<link>#URL_SITE_SPIP/#URL_ARTICLE</link>
+		<date>#DATE</date>
+		<description>[&lt;img src="#URL_SITE_SPIP/(#LOGO_ARTICLE||extraire_attribut{src})" align="left" hspace="4" vspace="4"&gt; ][(#INTRODUCTION|texte_backend)]</description>
+		<author><BOUCLE_auteurs_t(AUTEURS){id_article}{","}>[(#NOM|texte_backend)]</BOUCLE_auteurs_t></author>
+		<dc:date>[(#DATE|date_iso)]</dc:date>
+		<dc:format>text/html</dc:format>
+		<dc:language>#LANG</dc:language>
+		<dc:creator><BOUCLE_auteurs_tb(AUTEURS){id_article}{", "}>[(#NOM|texte_backend)]</BOUCLE_auteurs_tb></dc:creator>
+		</item>
+	</BOUCLE_tres_recents>
+
+</channel>
+
+</rss>
diff --git a/dist/breve.html b/dist/breve.html
new file mode 100644
index 0000000000..164a92e3b8
--- /dev/null
+++ b/dist/breve.html
@@ -0,0 +1,220 @@
+<BOUCLE_breve_principal(BREVES) {id_breve}
+><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="#LANG">
+<head>
+<title>#TITRE</title>
+<meta http-equiv="Content-Type" content="text/html; charset=#CHARSET">
+
+<!-- Ceci est la feuille de style par defaut pour les types internes a SPIP -->
+<link rel="stylesheet" href="spip_style.css" type="text/css">
+
+<!-- Les feuilles de style specifiques aux presents squelettes -->
+<link rel="stylesheet" href="typographie.css" type="text/css">
+
+<!-- media="..." permet de ne pas utiliser ce style sous Netscape 4 (sinon plantage) -->
+<link rel="stylesheet" href="habillage.css" type="text/css" media="projection, screen, tv">
+<!-- media="print" permet d'utiliser cette feuille de style quand vous imprimez depuis votre navigateur -->
+<link rel="stylesheet" href="impression.css" type="text/css" media="print">
+</head>
+
+<body bgcolor="white" dir="#LANG_DIR">
+
+
+<div id="navigation">
+
+<h1 class="structure"><:navigation:></h1>
+
+<!-- Menu de navigation general -->
+
+<div class="menu">
+<ul class="general">
+	<li class="menu-titre">
+	[<a href="(#URL_SITE_SPIP)" title="<:accueil_site:>"><b>#NOM_SITE_SPIP</b></a>]
+	</li>
+	<li class="menu-item">
+	<a href="plan.php3"><:plan_site:></a>
+	</li>
+	<li class="menu-item">
+	<a href="resume.php3" title="<:articles_populaires:>"><:en_resume:></a>
+	</li>
+	<li class="menu-item">
+	<a href="ecrire/"><:espace_prive:></a>
+	</li>
+</ul>
+</div>
+
+<!-- Formulaire de recherche -->
+
+[(#FORMULAIRE_RECHERCHE)]
+
+<!-- Menu de navigation rubriques -->
+
+<div class="menu">
+<ul class="rubriques">
+<BOUCLE_rubrique(RUBRIQUES) {id_rubrique}>
+<li>
+<div class="menu-titre"><a href="#URL_RUBRIQUE" [title="(#DESCRIPTIF|textebrut|entites_html)"]>#TITRE</a></div>
+</li>
+<BOUCLE_autres_rubriques(RUBRIQUES) {racine} {exclus} {par titre}>
+	<li class="menu-item"><a href="#URL_RUBRIQUE" [title="(#DESCRIPTIF|textebrut|entites_html)"]>#TITRE</a></li>
+</BOUCLE_autres_rubriques>
+</BOUCLE_rubrique>
+</ul>
+</div>
+
+
+<!-- Menu de navigation mots-cles -->
+
+<B_mots>
+<div class="menu">
+<ul class="divers" title="<:mots_clefs:>">
+<BOUCLE_mots(MOTS) {id_article} {par titre}>
+<li>
+<div class="menu-titre"><a href="#URL_MOT" [title="(#DESCRIPTIF|textebrut|entites_html)"]>#TITRE</a></div>
+<B_breves_mots>
+	<ul class="menu-liste">
+<BOUCLE_breves_mots(BREVES) {id_mot} {par hasard} {0,4}>
+	<li class="menu-item"><a href="#URL_BREVE">#TITRE</a></li>
+</BOUCLE_breves_mots>
+	</ul>
+</B_breves_mots>
+</li>
+</BOUCLE_mots>
+</ul>
+</div>
+</B_mots>
+
+
+<!-- Articles dans le meme secteur -->
+
+<B_articles_secteur>
+
+<div class="menu">
+<div class="breves" title="<:derniers_articles:>">
+	<div class="menu-titre">
+	<:derniers_articles:>
+	</div>
+	<ul>
+<BOUCLE_articles_secteur(ARTICLES) {id_secteur} {par date} {inverse} {0,5}>
+	<li class="menu-item">
+	<a href="#URL_ARTICLE" [title="(#DESCRIPTIF|textebrut|entites_html)"]>#TITRE</a>
+	</li>
+</BOUCLE_articles_secteur>
+	</ul>
+</div>
+</div>
+
+</B_articles_secteur>
+
+
+</div>
+
+<!-- Contenu : corps de la breve -->
+
+<div class="contenu" id="principal">
+
+<div id="cartouche">
+[(#LOGO_BREVE|left)]
+<h1 class="titre-texte">#TITRE</h1>
+[(#DATE|nom_jour)] [(#DATE|affdate).]
+</div>
+
+	<div class="encart">
+
+	<!-- Breves dans la meme rubrique -->
+
+	<B_breves_rubrique>
+
+	<div class="menu">
+	<div class="breves" title="<:meme_rubrique:>">
+		<h1 class="structure"><:meme_rubrique:></h1>
+		<div class="menu-titre">
+		<:autres_breves:>
+		</div>
+		<ul>
+	<BOUCLE_breves_rubrique(BREVES) {id_rubrique} {exclus} {par date} {inverse} {0,8}>
+		<li class="menu-item">
+		<i>[(#DATE|affdate_court)]</i>:
+		<a href="#URL_BREVE">#TITRE</a>
+		</li>
+	</BOUCLE_breves_rubrique>
+		</ul>
+	</div>
+	</div>
+
+	</B_breves_rubrique>
+
+	</div>
+
+
+[<div class="texte">(#TEXTE)</div>]
+[<div class="chapo"><:voir_en_ligne:>: <a href="(#URL_SITE)" class="spip_out">#NOM_SITE</a>.</div>]
+[<div class="notes">(#NOTES)</div>]
+
+<br>
+
+
+<!-- Forums -->
+
+[<div class="forum-repondre"><B><A  HREF="forum.php3?(#PARAMETRES_FORUM)"><:repondre_breve:></A></B></div>]
+<br>
+
+<h1 class="structure"><:forum:></h1>
+
+<B_forums>
+<ul class="forum-total">
+
+<BOUCLE_forums(FORUMS){id_breve}{par date}{inverse}>
+
+<li>
+<div class="forum-fil">
+<div class="forum">
+<a name="forum#ID_FORUM"></a>
+<div class="forum-chapo">
+<div class="forum-titre">#TITRE</div>
+[(#DATE|affdate)][, <:par_auteur:> <A HREF="mailto:#EMAIL">(#NOM)</A>]
+</div>
+<div class="forum-item">
+#TEXTE
+[<div class="forum-titre"><a href="(#URL_SITE)" class="spip_out">#NOM_SITE</a></div>]
+[<div class="forum-repondre-message"><a href="forum.php3?(#PARAMETRES_FORUM)"><:repondre_message:></a></div>]
+</div>
+</div>
+
+<B_forums_fils>
+	<ul>
+	<BOUCLE_forums_fils(FORUMS){id_parent}{par date}>
+
+	<li>
+	<div class="forum">
+	<a name="forum#ID_FORUM"></a>
+	<div class="forum-chapo">
+	<div class="forum-titre">#TITRE</div>
+	[(#DATE|affdate)][, par <A HREF="mailto:#EMAIL">(#NOM)</A>]
+	</div>
+	<div class="forum-item">
+	#TEXTE
+	[<div class="forum-titre"><a href="(#URL_SITE)" class="spip_out">#NOM_SITE</a></div>]
+	[<div class="forum-repondre-message"><a href="forum.php3?(#PARAMETRES_FORUM)"><:repondre_message:></a></div>]
+	</div>
+
+	</div>
+
+	<BOUCLE_Forums_Boucle(boucle_forums_fils)></BOUCLE_Forums_Boucle>
+	</li>
+
+	</BOUCLE_forums_fils>
+	</ul>
+</B_forums_fils>
+
+</div>
+</li>
+</BOUCLE_forums>
+
+</ul>
+</B_forums>
+
+</div>
+
+</body></html>
+</BOUCLE_breve_principal>
diff --git a/dist/distrib.html b/dist/distrib.html
new file mode 100644
index 0000000000..f1d0cff667
--- /dev/null
+++ b/dist/distrib.html
@@ -0,0 +1,7 @@
+document.write('<table border="0" bgcolor="#000000" cellspacing="0" cellpadding="0"><tr><td>');
+document.write('<table border="0" bgcolor="#ffffff" cellspacing="1" cellpadding="2"><tr><td bgcolor="#d0d0d0" align="center">');
+document.write('<a href="#URL_SITE_SPIP/"><b>[(#NOM_SITE_SPIP|addslashes)]</b></a>&nbsp;</td></tr><tr><td><ul><small>');
+<BOUCLE_articles(articles){tout}{par date}{inverse}{0,10}>
+document.write('<li><a href="#URL_SITE_SPIP/#URL_ARTICLE"><font color="#000000">[(#TITRE|addslashes)]</font></a></li>\n');
+</BOUCLE_articles>
+document.write('</small></ul></td></tr></table></td></tr></table>');
diff --git a/dist/forum.html b/dist/forum.html
new file mode 100644
index 0000000000..aff66db151
--- /dev/null
+++ b/dist/forum.html
@@ -0,0 +1,107 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="#LANG">
+<head>
+<title>[#NOM_SITE_SPIP] <:poster_message:></title>
+<meta http-equiv="Content-Type" content="text/html; charset=#CHARSET">
+
+<!-- Ceci est la feuille de style par defaut pour les types internes a SPIP -->
+<link rel="stylesheet" href="spip_style.css" type="text/css">
+
+<!-- Les feuilles de style specifiques aux presents squelettes -->
+<link rel="stylesheet" href="typographie.css" type="text/css">
+
+<!-- media="..." permet de ne pas utiliser ce style sous Netscape 4 (sinon plantage) -->
+<link rel="stylesheet" href="habillage.css" type="text/css" media="print, projection, screen, tv">
+</head>
+
+<body bgcolor="white" dir="#LANG_DIR">
+
+
+<div id="navigation">
+
+<h1 class="structure"><:navigation:></h1>
+
+<!-- Menu de navigation general -->
+
+<div class="menu">
+<ul class="general">
+	<li class="menu-titre">
+	[<a href="(#URL_SITE_SPIP)" title="<:accueil_site:>"><b>#NOM_SITE_SPIP</b></a>]
+	</li>
+	<li class="menu-item">
+	<a href="plan.php3"><:plan_site:></a>
+	</li>
+	<li class="menu-item">
+	<a href="resume.php3" title="<:articles_populaires:>"><:en_resume:></a>
+	</li>
+	<li class="menu-item">
+	<a href="ecrire/"><:espace_prive:></a>
+	</li>
+</ul>
+</div>
+
+</div>
+
+
+<!-- Contenu : poster un message dans le forum -->
+
+<div id="principal" class="contenu">
+
+<h1 class="structure"><:poster_message:></h1>
+
+<BOUCLE_article(ARTICLES) {id_article}>
+	<:en_reponse:>
+	[(#LOGO_ARTICLE|right)]
+	[<div class="surtitre">(#SURTITRE)</div>]
+	<h2 class="titre-extrait"><a href="#URL_ARTICLE">#TITRE</a></h2>
+	[<div class="surtitre">(#SOUSTITRE)</div>]
+	<div class="detail">
+	[(#DATE|nom_jour)] [(#DATE|affdate)]
+	<B_auteurs_un><:par_auteur:> <BOUCLE_auteurs_un(AUTEURS) {id_article} {", "}>#NOM</BOUCLE_auteurs_un>
+	</div>
+	[<div class="texte"><div class="extrait">(#INTRODUCTION)</div></div>]
+	<br>
+</BOUCLE_article>
+
+<BOUCLE_breve(BREVES) {id_breve}>
+	<:en_reponse:>
+	[(#LOGO_BREVE|right)]
+	<h2 class="titre-extrait"><a href="#URL_BREVE">#TITRE</a></h2>
+	<div class="detail">
+	[(#DATE|nom_jour)] [(#DATE|affdate)]
+	</div>
+	[<div class="texte"><div class="extrait">(#INTRODUCTION)</div></div>]
+	<br>
+</BOUCLE_breve>
+
+<BOUCLE_rubrique(RUBRIQUES) {id_rubrique}>
+	<:en_reponse:>
+	<h2 class="titre-extrait"><a href="#URL_RUBRIQUE">#TITRE</a></h2>
+	[<div class="texte"><div class="extrait">(#TEXTE)</div></div>]
+	<br>
+</BOUCLE_rubrique>
+
+<BOUCLE_syndic(SITES) {id_syndic}>
+	<:en_reponse:>
+	<h2 class="titre-extrait"><a href="#URL_SYNDIC">#TITRE</a></h2>
+	<br>
+</BOUCLE_syndic>
+
+<BOUCLE_forum_parent(FORUMS) {id_forum}>
+	<:en_reponse:>
+	<h2 class="titre-extrait"><a href="#URL_FORUM">#TITRE</a></h2>
+	<div class="detail">
+	[(#DATE|nom_jour)] [(#DATE|affdate)]
+	</div>
+	[<div class="texte"><div class="extrait">(#TEXTE)</div></div>]
+	<br>
+</BOUCLE_forum_parent>
+
+
+#FORMULAIRE_FORUM
+
+
+</div>
+
+</body>
+</html>
diff --git a/dist/ical.html b/dist/ical.html
new file mode 100644
index 0000000000..559ad07ef5
--- /dev/null
+++ b/dist/ical.html
@@ -0,0 +1,29 @@
+BEGIN:VCALENDAR
+CALSCALE:GREGORIAN
+X-WR-CALNAME;VALUE=TEXT:[(#NOM_SITE_SPIP|filtrer_ical)]
+X-WR-RELCALID:[(#URL_SITE_SPIP|filtrer_ical)]
+<BOUCLE_articles(ARTICLES){par date}{inverse}{0,100}>
+BEGIN:VEVENT
+SUMMARY:[(#TITRE|filtrer_ical)] [[(#NOM_SITE_SPIP|filtrer_ical)]]
+UID:article#ID_ARTICLE @ [(#URL_SITE_SPIP|filtrer_ical)]
+DTSTAMP:[(#DATE|date_ical)]
+DTSTART:[(#DATE|date_ical)]
+DTEND:[(#DATE|date_ical{60})]
+CATEGORIES:<:articles|filtrer_ical:>
+URL:#URL_SITE_SPIP/#URL_ARTICLE
+STATUS:CONFIRMED
+END:VEVENT
+</BOUCLE_articles>
+<BOUCLE_breves(BREVES){par date}{inverse}{0,100}>
+BEGIN:VEVENT
+SUMMARY:[(#TITRE|filtrer_ical)] [[(#NOM_SITE_SPIP|filtrer_ical)]]
+UID:breve#ID_BREVE @ [(#URL_SITE_SPIP|filtrer_ical)]
+DTSTAMP:[(#DATE|date_ical)]
+DTSTART:[(#DATE|date_ical)]
+DTEND:[(#DATE|date_ical{60})]
+CATEGORIES:<:breves|filtrer_ical:>
+URL:#URL_SITE_SPIP/#URL_BREVE
+STATUS:CONFIRMED
+END:VEVENT
+</BOUCLE_breves>
+END:VCALENDAR
diff --git a/dist/login.html b/dist/login.html
new file mode 100644
index 0000000000..a6a9f157b0
--- /dev/null
+++ b/dist/login.html
@@ -0,0 +1,37 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="#LANG">
+<head>
+	<title><:login_acces_prive:></title>
+	<meta http-equiv="Content-Type" content="text/html; charset=#CHARSET">
+	<link rel="stylesheet" href="spip_style.css" type="text/css">
+</head>
+<body dir="#LANG_DIR" bgcolor="#ffffff" text="#000000" link="#e86519" vlink="#6e003a" alink="#ff9900">
+
+<br><br><br><center><table width="400"><tr><td width="400">
+<div align="center">
+<h3 class="spip">#NOM_SITE_SPIP<br>
+<small><:login_acces_prive:></small></h3>
+<div align="#LANG_RIGHT">#MENU_LANG_ECRIRE</div>
+</div>
+
+#LOGIN_PRIVE
+
+<div align='center' style='font-family: Verdana,arial,helvetica,sans-serif; font-size: 12px;'>
+[&#91;<a
+	href='(#ENV{inscription})?mode=redac&amp;focus=nom_inscription'
+	target="spip_pass"
+	onclick="javascript:window.open(this.href, 'spip_pass', 'scrollbars=yes, resizable=yes, width=480, height=500'); return false;"><:login_sinscrire:></a>&#93;]
+
+&#91;<a
+	href="spip_pass.php3"
+	target="spip_pass" 
+	onclick="javascript:window.open(this.href, 'spip_pass', 'scrollbars=yes, resizable=yes, width=480, height=280'); return false;"><:login_motpasseoublie:></a>&#93;
+
+&#91;<a href='#URL_SITE_SPIP'><:login_retoursitepublic:></a>&#93
+
+</div>
+
+</td></tr></table></center>
+
+</body>
+</html>
diff --git a/dist/mot.html b/dist/mot.html
new file mode 100644
index 0000000000..87443b1188
--- /dev/null
+++ b/dist/mot.html
@@ -0,0 +1,181 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<BOUCLE_mot_principal(MOTS) {id_mot} {doublons}>
+
+<html lang="#LANG">
+<head>
+<title>[(#TITRE|textebrut)]</title>
+<meta http-equiv="Content-Type" content="text/html; charset=#CHARSET">
+
+<!-- Ceci est la feuille de style par defaut pour les types internes a SPIP -->
+<link rel="stylesheet" href="spip_style.css" type="text/css">
+
+<!-- Les feuilles de style specifiques aux presents squelettes -->
+<link rel="stylesheet" href="typographie.css" type="text/css">
+
+<!-- media="..." permet de ne pas utiliser ce style sous Netscape 4 (sinon plantage) -->
+<link rel="stylesheet" href="habillage.css" type="text/css" media="projection, screen, tv">
+<!-- media="print" permet d'utiliser cette feuille de style quand vous imprimez depuis votre navigateur -->
+<link rel="stylesheet" href="impression.css" type="text/css" media="print">
+</head>
+
+<body bgcolor="white" dir="#LANG_DIR">
+
+<div id="navigation">
+
+<h1 class="structure"><:navigation:></h1>
+
+<!-- Menu de navigation general -->
+
+<div class="menu">
+<ul class="general">
+	<li class="menu-titre">
+	[<a href="(#URL_SITE_SPIP)" title="<:accueil_site:>"><b>#NOM_SITE_SPIP</b></a>]
+	</li>
+	<li class="menu-item">
+	<a href="plan.php3"><:plan_site:></a>
+	</li>
+	<li class="menu-item">
+	<a href="resume.php3" title="<:articles_populaires:>"><:en_resume:></a>
+	</li>
+	<li class="menu-item">
+	<a href="ecrire/"><:espace_prive:></a>
+	</li>
+</ul>
+</div>
+
+
+<!-- Formulaire de recherche -->
+
+[(#FORMULAIRE_RECHERCHE)]
+
+
+<!-- Menu de navigation mots-cles : les autres mots cles du meme groupe-->
+
+<B_mots_freres>
+<h2 class="structure"><:mots_clefs_meme_groupe:></h2>
+
+<div class="menu">
+<div class="divers">
+<div class="menu-titre"><BOUCLE_groupe(GROUPES_MOTS) {id_groupe} {doublons}>#TITRE</BOUCLE_groupe></div>
+	<ul class="menu-liste">
+<BOUCLE_mots_freres(MOTS) {type} {doublons} {par titre}>
+	<li class="menu-item"><a href="#URL_MOT" title="[(#DESCRIPTIF|textebrut|entites_html)]">#TITRE</a></li>
+</BOUCLE_mots_freres>
+	</ul>
+</div>
+</div>
+</B_mots_freres>
+
+
+<!-- Menu de navigation mots-cles : les autres groupes avec un lien sur le premier mot du groupe -->
+
+<B_groupes_freres>
+<h2 class="structure"><:autres_groupes_mots_clefs:></h2>
+
+<div class="menu">
+<div class="divers">
+<div class="menu-titre"><:autres_groupes_mots_clefs:></div>
+	<ul class="menu-liste">
+<BOUCLE_groupes_freres(GROUPES_MOTS) {par titre} {doublons}>
+<BOUCLE_mot_cousin(MOTS) {id_groupe} {par titre} {0,1}>
+	<li class="menu-item"><a href="#URL_MOT">#TYPE</a></li>
+</BOUCLE_mot_cousin>
+</BOUCLE_groupes_freres>
+	</ul>
+</div>
+</div>
+</B_groupes_freres>
+
+
+</div>
+
+<!-- Une : contenu du mot-cle -->
+
+<div class="contenu" id="principal">
+
+<div class="cartouche">
+[(#LOGO_MOT|left)]
+<h1 class="titre-texte">#TITRE</h1>
+</div>
+
+	<div class="encart">
+
+	<!-- Rubriques liees au mot-cle -->
+
+	<B_rubriques>
+	<h2 class="structure"><:rubriques:></h2>
+
+	<div class="menu">
+	<div class="rubriques">
+	<div class="menu-titre"><:rubriques:></div>
+		<ul class="menu-liste">
+	<BOUCLE_rubriques(RUBRIQUES) {id_mot} {par titre}>
+		<li class="menu-item"><a href="#URL_RUBRIQUE" [title="(#DESCRIPTIF|textebrut|entites_html)"]>#TITRE</a></li>
+	</BOUCLE_rubriques>
+		</ul>
+	</div>
+	</div>
+	</B_rubriques>
+
+	<!-- Breves liees au mot-cle -->
+
+	<B_breves>
+	<h2 class="structure"><:breves:></h2>
+
+	<div class="menu">
+	<div class="breves">
+	<div class="menu-titre"><:breves:></div>
+		<ul class="menu-liste">
+	<BOUCLE_breves(BREVES) {id_mot} {par titre}>
+		<li class="menu-item"><a href="#URL_BREVE">#TITRE</a></li>
+	</BOUCLE_breves>
+		</ul>
+	</div>
+	</div>
+	</B_breves>
+
+	<!-- Sites Web lies au mot-cle -->
+
+	<B_sites>
+	<h2 class="structure"><:sites_web:></h2>
+
+	<div class="menu">
+	<div class="breves">
+	<div class="menu-titre"><:sites_web:></div>
+		<ul class="menu-liste">
+	<BOUCLE_sites(SITES) {id_mot} {par nom_site}>
+		<li class="menu-item"><a href="#URL_SITE">#TITRE</a></li>
+	</BOUCLE_sites>
+		</ul>
+	</div>
+	</div>
+	</B_sites>
+
+	</div>
+
+[<div class="chapo">(#TEXTE)</div>]
+[<div class="notes">(#NOTES)</div>]
+
+
+<!-- Articles lies au mot-cle -->
+
+<h1 class="structure"><:articles:></h1>
+
+<div class="liste-articles">
+
+<BOUCLE_articles(ARTICLES) {id_mot} {par titre}>
+	<h2><a href="#URL_ARTICLE" [title="(#DESCRIPTIF|textebrut|entites_html)"]>#TITRE</a></h2>
+	<div class="detail">
+	[(#DATE|nom_jour)] [(#DATE|affdate)]
+	<B_auteurs><:par_auteur:> <BOUCLE_auteurs(AUTEURS) {id_article} {", "}>#NOM</BOUCLE_auteurs>
+	</div>
+	<br>
+</BOUCLE_articles>
+
+</div>
+</div>
+
+</body>
+</html>
+</BOUCLE_mot_principal>
+<//B_mot_principal>
diff --git a/dist/nouveautes.html b/dist/nouveautes.html
new file mode 100644
index 0000000000..4317522d0c
--- /dev/null
+++ b/dist/nouveautes.html
@@ -0,0 +1,35 @@
+[[(#NOM_SITE_SPIP|textebrut|texte_script)]] <:nouveautes|texte_script:>
+
+<B0>
+<:bonjour|texte_script:>
+
+<:texte_lettre_information|texte_script:> "[(#NOM_SITE_SPIP|textebrut|texte_script)]" (#URL_SITE_SPIP).
+<:texte_lettre_information_2|texte_script:> [(#ENV{jours_neuf})] <:jours|texte_script:>.
+
+<BOUCLE0(AUTEURS){0,1}><B_nv1>
+          <:nouveaux_articles|texte_script:>
+          --------------------------
+
+<BOUCLE_nv1(ARTICLES){age_relatif<=0}{par date}{inverse}{0,30}>
+[** (#TITRE|textebrut|texte_script) **]
+[par (#LESAUTEURS|textebrut|texte_script)]
+[le (#DATE|affdate|texte_script)]
+
+[(#INTRODUCTION|textebrut|texte_script)]
+
+-> #URL_SITE_SPIP/#URL_ARTICLE
+
+</BOUCLE_nv1><B_nv2>
+          
+          <:nouvelles_breves|texte_script:>
+          --------------------------
+
+<BOUCLE_nv2(BREVES){age_relatif<=0}{par date}{inverse}{0,30}>
+[* (#TITRE|textebrut|texte_script) *]
+[ - (#DATE|affdate|texte_script)]
+
+[(#INTRODUCTION|textebrut|texte_script)]
+
+-> #URL_SITE_SPIP/#URL_BREVE
+
+</BOUCLE_nv2></BOUCLE0>
\ No newline at end of file
diff --git a/dist/plan.html b/dist/plan.html
new file mode 100644
index 0000000000..73462708c9
--- /dev/null
+++ b/dist/plan.html
@@ -0,0 +1,123 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="#LANG">
+<head>
+<title>[#NOM_SITE_SPIP] </title>
+<meta http-equiv="Content-Type" content="text/html; charset=#CHARSET">
+
+<!-- Ceci est la feuille de style par defaut pour les types internes a SPIP -->
+<link rel="stylesheet" href="spip_style.css" type="text/css">
+
+<!-- Les feuilles de style specifiques aux presents squelettes -->
+<link rel="stylesheet" href="typographie.css" type="text/css">
+
+<!-- media="..." permet de ne pas utiliser ce style sous Netscape 4 (sinon plantage) -->
+<link rel="stylesheet" href="habillage.css" type="text/css" media="print, projection, screen, tv">
+</head>
+
+<body bgcolor="white" dir="#LANG_DIR">
+
+
+<!-- Plan du site -->
+
+<div id="plan" class="contenu">
+
+<BOUCLE_secteurs(RUBRIQUES) {racine} {par titre}>
+
+<div class="plan-secteur">
+
+	[(#LOGO_RUBRIQUE|left)]<h1><a href="#URL_RUBRIQUE">#TITRE</a></h1>
+
+	<div class="encart">
+
+	<!-- Breves -->
+
+	<h2 class="structure"><:breves:></h2>
+
+	<B_breves>
+	<div class="menu">
+	<div class="breves">
+		<div class="menu-titre">
+		<:breves:>
+		</div>
+		<ul>
+	<BOUCLE_breves(BREVES) {id_secteur} {par date} {inverse} {0,15}>
+		<li class="menu-item">
+		<i>[(#DATE|affdate_court)]</i>:
+		<a href="#URL_BREVE">#TITRE</a>
+		</li>
+	</BOUCLE_breves>
+		</ul>
+	</div>
+	</div>
+	</B_breves>
+
+	<!-- Sur le Web -->
+
+	<h2 class="structure"><:sites_web:></h2>
+
+	<B_sites>
+	<div class="menu">
+	<div class="divers">
+		<div class="menu-titre">
+		<:sur_web:>
+		</div>
+		<ul>
+	<BOUCLE_sites(SITES) {id_secteur} {par nom_site}>
+		<li class="menu-item">
+		<a href="#URL_SITE">#NOM_SITE</a>
+		</li>
+	</BOUCLE_sites>
+		</ul>
+	</div>
+	</div>
+	</B_sites>
+
+	</div>
+
+<!-- Articles et sous-rubriques -->
+
+<h2 class="structure"><:articles:></h2>
+
+<B_articles_racine>
+<ul class="plan-articles">
+
+<BOUCLE_articles_racine(ARTICLES) {id_rubrique} {par titre}>
+<li class="plan-article"><a href="#URL_ARTICLE">#TITRE</a></li>
+</BOUCLE_articles_racine>
+
+</ul>
+</B_articles_racine>
+
+<B_rubriques>
+
+<ul class="plan-rubriques">
+
+<BOUCLE_rubriques(RUBRIQUES) {id_parent} {par titre}>
+<li>
+<div class="plan-rubrique"><a href="#URL_RUBRIQUE">#TITRE</a></div>
+
+	<B_articles>
+	<ul class="plan-articles">
+	<BOUCLE_articles(ARTICLES) {id_rubrique} {par titre}>
+	<li class="plan-article"><a href="#URL_ARTICLE">#TITRE</a></li>
+	</BOUCLE_articles>
+	</ul>
+	</B_articles>
+
+	<BOUCLE_sous_rubriques(BOUCLE_rubriques)></BOUCLE_sous_rubriques>
+
+</li>
+</BOUCLE_rubriques>
+
+</ul>
+</B_rubriques>
+
+
+</div>
+
+</BOUCLE_secteurs>
+
+</div>
+
+</body>
+</html>
diff --git a/dist/recherche.html b/dist/recherche.html
new file mode 100644
index 0000000000..394e178d0d
--- /dev/null
+++ b/dist/recherche.html
@@ -0,0 +1,177 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<html lang="#LANG">
+<head>
+<title><:resultats_recherche:></title>
+<meta http-equiv="Content-Type" content="text/html; charset=#CHARSET">
+
+<!-- Ceci est la feuille de style par defaut pour les types internes a SPIP -->
+<link rel="stylesheet" href="spip_style.css" type="text/css">
+
+<!-- Les feuilles de style specifiques aux presents squelettes -->
+<link rel="stylesheet" href="typographie.css" type="text/css">
+
+<!-- media="..." permet de ne pas utiliser ce style sous Netscape 4 (sinon plantage) -->
+<link rel="stylesheet" href="habillage.css" type="text/css" media="projection, screen, tv">
+<!-- media="print" permet d'utiliser cette feuille de style quand vous imprimez depuis votre navigateur -->
+<link rel="stylesheet" href="impression.css" type="text/css" media="print">
+</head>
+
+<body bgcolor="white" dir="#LANG_DIR">
+
+<div id="navigation">
+
+<!-- Menu de navigation general -->
+
+<div class="menu">
+<ul class="general">
+	<li class="menu-titre">
+	[<a href="(#URL_SITE_SPIP)" title="<:accueil_site:>"><b>#NOM_SITE_SPIP</b></a>]
+	</li>
+	<li class="menu-item">
+	<a href="plan.php3"><:plan_site:></a>
+	</li>
+	<li class="menu-item">
+	<a href="resume.php3" title="<:articles_populaires:>"><:en_resume:></a>
+	</li>
+	<li class="menu-item">
+	<a href="ecrire/"><:espace_prive:></a>
+	</li>
+</ul>
+</div>
+
+
+<!-- Formulaire de recherche -->
+
+[(#FORMULAIRE_RECHERCHE)]
+
+
+<!-- Rubriques trouvees -->
+
+<B_rubriques>
+<div class="menu">
+<ul class="rubriques" title="<:rubriques:>">
+<li class="menu-titre"><:rubriques:></li>
+<BOUCLE_rubriques(RUBRIQUES) {recherche} {par points} {inverse} {0,8}>
+<li class="menu-item"><a href="#URL_RUBRIQUE" [title="(#DESCRIPTIF|textebrut|entites_html)"]>#TITRE</a></li>
+</BOUCLE_rubriques>
+</ul>
+</div>
+</B_rubriques>
+
+
+<!-- Mots-cles trouves et articles associes-->
+
+<B_mots>
+<div class="menu">
+<ul class="divers" title="<:mots_clefs:>">
+<BOUCLE_mots(MOTS) {recherche} {par points} {inverse} {0,5}>
+<li>
+<div class="menu-titre"><a href="#URL_MOT" [title="(#DESCRIPTIF|textebrut|entites_html)"]>#TITRE</a></div>
+<B_articles_mots>
+	<ul class="menu-liste">
+<BOUCLE_articles_mots(ARTICLES) {id_mot} {par hasard} {0,8}>
+	<li class="menu-item"><a href="#URL_ARTICLE" title="[(#DESCRIPTIF|textebrut|entites_html)]">#TITRE</a></li>
+</BOUCLE_articles_mots>
+	</ul>
+</B_articles_mots>
+</li>
+</BOUCLE_mots>
+</ul>
+</div>
+</B_mots>
+
+</div>
+
+<!-- Une : articles trouves -->
+
+<div class="contenu" id="principal">
+
+<div class="cartouche">
+<h1 class="surtitre"><:resultats_recherche:></h1>
+[<h2 class="titre-texte">(#RECHERCHE)</h2>]
+</div>
+
+	<div class="encart">
+
+	<!-- Breves trouvees -->
+
+	<B_breves>
+
+	<div class="menu">
+	<div class="breves" title="Br&egrave;ves trouv&eacute;es">
+		<div class="menu-titre">
+		<:breves:>
+		</div>
+		<ul>
+	<BOUCLE_breves(BREVES) {recherche} {par points} {inverse} {0,8}>
+		<li class="menu-item">
+		<i>[(#DATE|affdate_court)]</i>:
+		<a href="#URL_BREVE">#TITRE</a>
+		</li>
+	</BOUCLE_breves>
+		</ul>
+	</div>
+	</div>
+
+	</B_breves>
+
+	<!-- Sites Web trouves -->
+
+	<B_sites>
+	<div class="menu">
+	<div class="divers" title="Sites Web trouv&eacute;s">
+		<div class="menu-titre">
+		<:sites_web:>
+		</div>
+		<ul>
+	<BOUCLE_sites(SITES) {recherche} {par points} {inverse} {0,8}>
+		<li class="menu-item">
+		<a href="#URL_SITE" title="[(#DESCRIPTIF|textebrut|entites_html)]">#NOM_SITE</a>
+		</li>
+	</BOUCLE_sites>
+		</ul>
+	</div>
+	</div>
+	</B_sites>
+
+	<!-- Messages trouves -->
+
+	<B_messages>
+	<div class="menu">
+	<div class="divers" title="<:messages_forum:>">
+		<div class="menu-titre">
+		<:messages_forum:>
+		</div>
+		<ul>
+	<BOUCLE_messages(FORUMS) {recherche} {par points} {inverse} {0,8}>
+		<li class="menu-item">
+		<a href="#URL_FORUM">#TITRE</a>
+		</li>
+	</BOUCLE_messages>
+		</ul>
+	</div>
+	</div>
+	</B_messages>
+
+	</div>
+
+
+<div class="liste-articles">
+
+<BOUCLE_articles(ARTICLES) {recherche} {par points} {inverse} {0,10}>
+	<h2><a href="#URL_ARTICLE" [title="(#DESCRIPTIF|textebrut|entites_html)"]>#TITRE</a></h2>
+	<div class="detail">
+	[(#DATE|nom_jour)] [(#DATE|affdate)]
+	<B_auteurs_articles><:par_auteur:> <BOUCLE_auteurs_articles(AUTEURS) {id_article} {", "}>#NOM</BOUCLE_auteurs_articles>
+	</div>
+	<br>
+</BOUCLE_articles>
+
+</div>
+
+</div>
+
+</body>
+</html>
+
diff --git a/dist/resume.html b/dist/resume.html
new file mode 100644
index 0000000000..d068902b74
--- /dev/null
+++ b/dist/resume.html
@@ -0,0 +1,137 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="#LANG">
+<head>
+<title>[#NOM_SITE_SPIP] </title>
+<meta http-equiv="Content-Type" content="text/html; charset=#CHARSET">
+
+<!-- Ceci est la feuille de style par defaut pour les types internes a SPIP -->
+<link rel="stylesheet" href="spip_style.css" type="text/css">
+
+<!-- Les feuilles de style specifiques aux presents squelettes -->
+<link rel="stylesheet" href="typographie.css" type="text/css">
+
+<!-- media="..." permet de ne pas utiliser ce style sous Netscape 4 (sinon plantage) -->
+<link rel="stylesheet" href="habillage.css" type="text/css" media="print, projection, screen, tv">
+</head>
+
+<body bgcolor="white" dir="#LANG_DIR">
+
+<div id="navigation">
+
+<h1 class="structure"><:navigation:></h1>
+
+<!-- Menu de navigation general -->
+
+<div class="menu">
+<ul class="general">
+	<li class="menu-titre">
+	[<a href="(#URL_SITE_SPIP)" title="<:accueil_site:>"><b>#NOM_SITE_SPIP</b></a>]
+	</li>
+	<li class="menu-item">
+	<a href="plan.php3"><:plan_site:></a>
+	</li>
+	<li class="menu-item">
+	<a href="resume.php3"><:en_resume:></a>
+	</li>
+	<li class="menu-item">
+	<a href="ecrire/"><:espace_prive:></a>
+	</li>
+</ul>
+</div>
+
+
+<!-- Formulaire de recherche -->
+
+[(#FORMULAIRE_RECHERCHE)]
+
+<!-- Liens des forums -->
+<B_forums_liens>
+<div class="menu" title="<:derniers_messages_forum:>">
+	<h1 class="structure"><:messages_recents:></h1>
+	<div class="forums">
+	<div class="menu-titre">
+	<:derniers_commentaires:>
+	</div>
+	<ul>
+<BOUCLE_forums_liens(FORUMS){plat}{par date}{inverse}{0,15}>
+        <li class="menu-item">[<i>(#DATE|affdate_court)</i>:]
+        <a href="#URL_FORUM">#TITRE</a>
+        </li>
+</BOUCLE_forums_liens>
+	</ul>
+	</div>
+</div>
+</B_forums_liens>
+
+
+</div>
+
+<!-- Une : articles les plus populaires -->
+
+<div id="principal" class="contenu">
+
+<h1 class="structure"><:articles_populaires:></h1>
+
+<BOUCLE_article_un(ARTICLES) {par popularite} {inverse} {0,2}>
+	[(#LOGO_ARTICLE_RUBRIQUE|right|#URL_ARTICLE)]
+	[<div class="surtitre">(#SURTITRE)</div>]
+	<h2 class="titre-extrait"><a href="#URL_ARTICLE">#TITRE</a></h2>
+	[<div class="surtitre">(#SOUSTITRE)</div>]
+	<div class="detail">
+	[(#DATE|nom_jour)] [(#DATE|affdate)]
+	<B_auteurs_un><:par_auteur:> <BOUCLE_auteurs_un(AUTEURS) {id_article} {", "}>#NOM</BOUCLE_auteurs_un>
+	[<br><:popularite:>&nbsp;: <span class="important">(#POPULARITE)</span> %]
+	</div>
+	[<div class="texte"><div class="extrait">(#INTRODUCTION)</div></div>]
+	<br>
+</BOUCLE_article_un>
+
+
+	<div class="encart">
+
+	<!-- <:sur_web:> -->
+
+	<h1 class="structure"><:nouveautes_web:></h1>
+
+	<B_syndic>
+	<div class="menu">
+	<div class="divers">
+		<div class="menu-titre">
+		<:sur_web:>
+		</div>
+		<ul>
+	<BOUCLE_syndic(SYNDIC_ARTICLES) {par date} {inverse} {0,15}>
+		<li class="menu-item">
+		[<i>(#DATE|affdate_court)</i>:]
+		<a href="#URL_ARTICLE">[(#TITRE*)]</a>
+		</li>
+	</BOUCLE_syndic>
+		</ul>
+	</div>
+	</div>
+	</B_syndic>
+
+	</div>
+
+
+<h1 class="structure"><:articles_populaires:> (<:suite:>)</h1>
+
+<!-- Articles les plus populaires (suite) -->
+
+<BOUCLE_articles_populaires(ARTICLES) {par popularite} {inverse} {2,8}>
+	<h2><a href="#URL_ARTICLE" [title="(#DESCRIPTIF|textebrut|entites_html)"]>#TITRE</a></h2>
+	<div class="detail">
+	[(#DATE|nom_jour)] [(#DATE|affdate)]
+	<B_auteurs_recents><:par_auteur:> <BOUCLE_auteurs_recents(AUTEURS) {id_article} {", "}>#NOM</BOUCLE_auteurs_recents><br>
+	<:popularite:>&nbsp;: <span class="important">#POPULARITE</span> %
+	</div>
+	<br>
+</BOUCLE_articles_populaires>
+
+
+</div>
+
+</body>
+</html>
+
+
diff --git a/dist/rubrique.html b/dist/rubrique.html
new file mode 100644
index 0000000000..3826066c2e
--- /dev/null
+++ b/dist/rubrique.html
@@ -0,0 +1,225 @@
+<BOUCLE_rubrique_principal(RUBRIQUES) {id_rubrique}
+><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="#LANG">
+<head>
+<title>[(#TITRE|textebrut)]</title>
+<meta http-equiv="Content-Type" content="text/html; charset=#CHARSET">
+
+<!-- Ceci est la feuille de style par defaut pour les types internes a SPIP -->
+<link rel="stylesheet" href="spip_style.css" type="text/css">
+
+<!-- Les feuilles de style specifiques aux presents squelettes -->
+<link rel="stylesheet" href="typographie.css" type="text/css">
+
+<!-- media="..." permet de ne pas utiliser ce style sous Netscape 4 (sinon plantage) -->
+<link rel="stylesheet" href="habillage.css" type="text/css" media="projection, screen, tv">
+<!-- media="print" permet d'utiliser cette feuille de style quand vous imprimez depuis votre navigateur -->
+<link rel="stylesheet" href="impression.css" type="text/css" media="print">
+
+<!-- Lien vers le backend pour navigateurs eclaires -->
+<link rel="alternate" type="application/rss+xml" title="<:syndiquer_rubrique:>" href="backend.php3?id_rubrique=#ID_RUBRIQUE">
+</head>
+
+<body bgcolor="white" dir="#LANG_DIR">
+
+<div id="navigation">
+
+<h1 class="structure"><:navigation:></h1>
+
+<!-- Menu de navigation general -->
+
+<div class="menu">
+<ul class="general">
+	<li class="menu-titre">
+	[<a href="(#URL_SITE_SPIP)" title="<:accueil_site:>"><b>#NOM_SITE_SPIP</b></a>]
+	</li>
+	<li class="menu-item">
+	<a href="plan.php3"><:plan_site:></a>
+	</li>
+	<li class="menu-item">
+	<a href="resume.php3" title="<:articles_populaires:>"><:en_resume:></a>
+	</li>
+	<li class="menu-item">
+	<a href="ecrire/"><:espace_prive:></a>
+	</li>
+</ul>
+</div>
+
+
+<!-- Formulaire de recherche -->
+
+[(#FORMULAIRE_RECHERCHE)]
+
+
+<!-- Menu de navigation rubriques -->
+
+<div class="menu">
+<ol class="rubriques" title="<:hierarchie_site:>">
+<BOUCLE_hierarchie(HIERARCHIE) {id_rubrique} {tout}>
+<li>
+<div class="menu-titre"><a href="#URL_RUBRIQUE" [title="(#DESCRIPTIF|textebrut|entites_html)"]>#TITRE</a></div>
+<B_rubriques_soeurs>
+	<ul class="menu-liste">
+<BOUCLE_rubriques_soeurs(RUBRIQUES) {meme_parent} {exclus} {par titre}>
+	<li class="menu-item"><a href="#URL_RUBRIQUE" [title="(#DESCRIPTIF|textebrut|entites_html)"]>#TITRE</a></li>
+</BOUCLE_rubriques_soeurs>
+	</ul>
+</B_rubriques_soeurs>
+</li>
+</BOUCLE_hierarchie>
+</ol>
+</div>
+
+
+<!-- Breves dans la rubrique -->
+
+<B_breves_rubrique>
+
+<div class="menu">
+<div class="breves" title="<:dernieres_breves:>">
+	<div class="menu-titre">
+	<:breves:>
+	</div>
+	<ul>
+<BOUCLE_breves_rubrique(BREVES) {id_secteur} {par date} {inverse} {0,5}>
+	<li class="menu-item">
+	<i>[(#DATE|affdate_court)]</i>:
+	<a href="#URL_BREVE">#TITRE</a>
+	</li>
+</BOUCLE_breves_rubrique>
+	</ul>
+</div>
+</div>
+
+</B_breves_rubrique>
+
+
+</div>
+
+
+<!-- Une : contenu de la rubrique -->
+
+<div class="contenu" id="principal">
+
+<div class="cartouche">
+[(#LOGO_RUBRIQUE|left)]
+<h1 class="titre-texte">#TITRE</h1>
+[<:dernier_ajout:> : (#DATE|nom_jour)] [(#DATE|affdate).]
+</div>
+
+	<div class="encart">
+
+	<!-- Menu de navigation mots-cles -->
+
+	<B_mots>
+	<h2 class="structure"><:mots_clefs:></h2>
+
+	<div class="menu">
+	<ul class="divers" title="<:mots_clefs:>">
+	<BOUCLE_mots(MOTS) {id_rubrique} {par titre}>
+	<li>
+	<div class="menu-titre"><a href="#URL_MOT" [title="(#DESCRIPTIF|textebrut|entites_html)"]>#TITRE</a></div>
+	<B_rubriques_mots>
+		<ul class="menu-liste">
+	<BOUCLE_rubriques_mots(RUBRIQUES) {id_mot} {par hasard} {0,4}>
+		<li class="menu-item"><a href="#URL_RUBRIQUE" title="[(#DESCRIPTIF|textebrut|entites_html)]">#TITRE</a></li>
+	</BOUCLE_rubriques_mots>
+		</ul>
+	</B_rubriques_mots>
+	</li>
+	</BOUCLE_mots>
+	</ul>
+	</div>
+	</B_mots>
+
+	<!-- Sous-rubriques -->
+
+	<B_sous_rubriques>
+	<h2 class="structure"><:sous_rubriques:></h2>
+
+	<div class="menu">
+	<ul class="rubriques" title="<:sous_rubriques:>">
+	<BOUCLE_sous_rubriques(RUBRIQUES) {id_parent} {par titre}>
+	<li>
+	<div class="menu-titre"><a href="#URL_RUBRIQUE" [title="(#DESCRIPTIF|textebrut|entites_html)"]>#TITRE</a></div>
+	<B_sous_sous_rubriques>
+		<ul class="menu-liste">
+	<BOUCLE_sous_sous_rubriques(RUBRIQUES) {id_parent} {par titre}>
+		<li class="menu-item"><a href="#URL_RUBRIQUE" [title="(#DESCRIPTIF|textebrut|entites_html)"]>#TITRE</a></li>
+	</BOUCLE_sous_sous_rubriques>
+		</ul>
+	</B_sous_sous_rubriques>
+	</li>
+	</BOUCLE_sous_rubriques>
+	</ul>
+	</div>
+	</B_sous_rubriques>
+	
+	<!-- Sites syndiques -->
+	
+	<B_sites>
+	<div class="menu">
+	<div class="divers">
+		<div class="menu-titre">
+		<:sur_web:>
+		</div>
+		<ul>
+	<BOUCLE_sites(SITES) {id_rubrique} {par nom_site}>
+		<li class="menu-item">
+		<a href="#URL_SITE">#NOM_SITE</a>
+		<B_syndic>
+		<ul class="menu-liste">
+		<BOUCLE_syndic(SYNDIC_ARTICLES) {id_syndic} {par date} {inverse} {0,3}>
+			<li class="menu-item"><small><a href="#URL_ARTICLE">#TITRE</a></small></li>
+		</BOUCLE_syndic>
+		</ul>
+		</B_syndic>
+		</li>
+	</BOUCLE_sites>
+		</ul>
+	</div>
+	</div>
+	</B_sites>
+	[
+<div class="menu">
+    <div class="divers">
+      <div class="menu-titre"><:proposer_site:>
+	<div class='reponse_formulaire'>(#FORMULAIRE_SITE)</div>
+      </div>
+    </div>
+</div>
+]
+	</div>
+
+[<div class="chapo">(#TEXTE)</div>]
+[<div class="notes">(#NOTES)</div>]
+
+<BOUCLE_documents_joints(DOCUMENTS) {id_rubrique} {mode=document} {doublons} {"<br>"}>
+[(#LOGO_DOCUMENT|#URL_DOCUMENT)][<br>(#TITRE)][ - (#DESCRIPTIF)]
+</BOUCLE_documents_joints>
+<br>
+
+<!-- Articles de la rubrique -->
+
+<h1 class="structure"><:articles_rubrique:></h1>
+
+<div class="liste-articles">
+
+<BOUCLE_articles_recents(ARTICLES) {id_rubrique} {par titre}>
+	<h2><a href="#URL_ARTICLE" [title="(#DESCRIPTIF|textebrut|entites_html)"]>#TITRE</a></h2>
+	<div class="detail">
+	[(#DATE|nom_jour)] [(#DATE|affdate)]
+	<B_auteurs_recents><:par_auteur:> <BOUCLE_auteurs_recents(AUTEURS) {id_article} {", "}>#NOM</BOUCLE_auteurs_recents>
+	</div>
+	<br>
+</BOUCLE_articles_recents>
+
+
+</div>
+
+
+</div>
+
+</body>
+</html>
+</BOUCLE_rubrique_principal>
diff --git a/dist/site.html b/dist/site.html
new file mode 100644
index 0000000000..aaa44b9c22
--- /dev/null
+++ b/dist/site.html
@@ -0,0 +1,90 @@
+<BOUCLE_site(SITES){id_syndic}
+><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+
+<html lang="#LANG">
+<head>
+<title>[(#NOM_SITE|textebrut)]</title>
+<meta http-equiv="Content-Type" content="text/html; charset=#CHARSET">
+
+<!-- Ceci est la feuille de style par defaut pour les types internes a SPIP -->
+<link rel="stylesheet" href="spip_style.css" type="text/css">
+
+<!-- Les feuilles de style specifiques aux presents squelettes -->
+<link rel="stylesheet" href="typographie.css" type="text/css">
+
+<!-- media="..." permet de ne pas utiliser ce style sous Netscape 4 (sinon plantage) -->
+<link rel="stylesheet" href="habillage.css" type="text/css" media="projection, screen, tv">
+<!-- media="print" permet d'utiliser cette feuille de style quand vous imprimez depuis votre navigateur -->
+<link rel="stylesheet" href="impression.css" type="text/css" media="print">
+</head>
+
+<body bgcolor="white">
+
+<div id="navigation">
+
+<h1 class="structure"><:navigation:></h1>
+
+<!-- Menu de navigation general -->
+
+<div class="menu">
+<ul class="general">
+	<li class="menu-titre">
+	[<a href="(#URL_SITE_SPIP)" title="<:accueil_site:>"><b>#NOM_SITE_SPIP</b></a>]
+	</li>
+	<li class="menu-item">
+	<a href="plan.php3"><:plan_site:></a>
+	</li>
+	<li class="menu-item">
+	<a href="resume.php3" title="<:articles_populaires:>"><:en_resume:></a>
+	</li>
+	<li class="menu-item">
+	<a href="ecrire/"><:espace_prive:></a>
+	</li>
+</ul>
+</div>
+
+
+<!-- Formulaire de recherche -->
+
+[(#FORMULAIRE_RECHERCHE)]
+
+
+</div>
+
+<!-- Une : affichage du site -->
+
+<div class="contenu" id="principal">
+
+<div class="cartouche">
+[(#LOGO_SITE|left)]
+<h1 class="titre-texte"><a href="#URL_SITE">#NOM_SITE</a></h1>
+
+[<div class="chapo">(#DESCRIPTIF)</div>]
+[<div class="notes">(#NOTES)</div>]
+</div>
+
+
+<!-- Articles du site -->
+
+<h1 class="structure"><:articles:></h1>
+
+<div class="liste-articles">
+
+<BOUCLE_articles(SYNDIC_ARTICLES) {id_syndic} {par date}{inverse}{0,10}>
+	<h2><a href="#URL_ARTICLE" [title="(#DESCRIPTIF|textebrut|entites_html)"]>#TITRE</a></h2>
+	<div class="detail">
+	[(#DATE|nom_jour)] [(#DATE|affdate)]
+	</div>
+	<br>
+</BOUCLE_articles>
+
+</div>
+
+</div>
+
+</body>
+</html>
+
+
+</BOUCLE_site>
diff --git a/dist/sommaire.html b/dist/sommaire.html
new file mode 100644
index 0000000000..0a249bf0b5
--- /dev/null
+++ b/dist/sommaire.html
@@ -0,0 +1,169 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="#LANG">
+<head>
+<title>[#NOM_SITE_SPIP] </title>
+<meta http-equiv="Content-Type" content="text/html; charset=#CHARSET">
+
+<!-- Ceci est la feuille de style par defaut pour les types internes a SPIP -->
+<link rel="stylesheet" href="spip_style.css" type="text/css">
+
+<!-- Les feuilles de style specifiques aux presents squelettes -->
+<link rel="stylesheet" href="typographie.css" type="text/css">
+
+<!-- media="..." permet de ne pas utiliser ce style sous Netscape 4 (sinon plantage) -->
+<link rel="stylesheet" href="habillage.css" type="text/css" media="print, projection, screen, tv">
+
+<!-- Lien vers le backend pour navigateurs eclaires -->
+<link rel="alternate" type="application/rss+xml" title="<:syndiquer_site:>" href="backend.php3">
+</head>
+
+<body bgcolor="white" dir="#LANG_DIR">
+
+<div id="navigation">
+
+<h1 class="structure"><:navigation:></h1>
+
+<!-- Menu de navigation general -->
+
+<div class="menu">
+<ul class="general">
+	<li class="menu-titre">
+	[<a href="(#URL_SITE_SPIP)" title="<:accueil_site:>"><b>#NOM_SITE_SPIP</b></a>]
+	</li>
+	<li class="menu-item">
+	<a href="plan.php3"><:plan_site:></a>
+	</li>
+	<li class="menu-item">
+	<a href="resume.php3" title="<:articles_populaires:>"><:en_resume:></a>
+	</li>
+	<li class="menu-item">
+	<a href="ecrire/"><:espace_prive:></a>
+	</li>
+</ul>
+</div>
+
+<!-- Formulaire de recherche -->
+
+[(#FORMULAIRE_RECHERCHE)]
+
+<!-- Menu de navigation rubriques -->
+
+<B_rubriques>
+<div class="menu">
+<ul class="rubriques">
+<BOUCLE_rubriques(RUBRIQUES) {racine} {par titre}>
+<li>
+<div class="menu-titre"><a href="#URL_RUBRIQUE" [title="(#DESCRIPTIF|textebrut|entites_html)"]>#TITRE</a></div>
+<B_sous_rubriques>
+	<ul class="menu-liste">
+<BOUCLE_sous_rubriques(RUBRIQUES) {id_parent} {par titre}>
+	<li class="menu-item"><a href="#URL_RUBRIQUE" [title="(#DESCRIPTIF|textebrut|entites_html)"]>#TITRE</a></li>
+</BOUCLE_sous_rubriques>
+	</ul>
+</B_sous_rubriques>
+</li>
+</BOUCLE_rubriques>
+</ul>
+</div>
+</B_rubriques>
+
+<!-- Logo SPIP -->
+
+<a href="http://www.spip.net"><img src="IMG/logo_spip.jpg" width="105" height="92" border="0" alt="<:site_realise_avec_spip:>"></a>
+
+</div>
+
+
+<div id="principal" class="contenu">
+
+	<!-- Une : derniers articles publies -->
+	
+	<h1 class="structure"><:derniers_articles:></h1>
+	
+	<BOUCLE_article_un(ARTICLES) {par date} {inverse} {0,2}>
+		[(#LOGO_ARTICLE_RUBRIQUE|right)]
+		[<div class="surtitre">(#SURTITRE)</div>]
+		<h2 class="titre-extrait"><a href="#URL_ARTICLE">#TITRE</a></h2>
+		[<div class="surtitre">(#SOUSTITRE)</div>]
+		<div class="detail">
+		[(#DATE|nom_jour)] [(#DATE|affdate)]
+		<B_auteurs_un><:par_auteur:> <BOUCLE_auteurs_un(AUTEURS) {id_article} {", "}>#NOM</BOUCLE_auteurs_un>
+		</div>
+		[<div class="texte"><div class="extrait">(#INTRODUCTION)</div></div>]
+		<br>
+	</BOUCLE_article_un>
+
+
+	<div class="encart">
+
+	<!-- Breves -->
+
+	<h1 class="structure"><:dernieres_breves:></h1>
+
+	<B_breves>
+	<div class="menu">
+	<div class="breves">
+		<div class="menu-titre">
+		<:breves:>
+		</div>
+		<ul>
+	<BOUCLE_breves(BREVES) {par date} {inverse} {0,8}>
+		<li class="menu-item">
+		<i>[(#DATE|affdate_court)]</i>:
+		<a href="#URL_BREVE">#TITRE</a>
+		</li>
+	</BOUCLE_breves>
+		</ul>
+	</div>
+	</div>
+	</B_breves>
+
+	<!-- Sur le Web -->
+
+	<h1 class="structure"><:nouveautes_web:></h1>
+
+	<B_syndic>
+	<div class="menu">
+	<div class="divers">
+		<div class="menu-titre">
+		<:sur_web:>
+		</div>
+		<ul>
+	<BOUCLE_syndic(SYNDIC_ARTICLES) {par date} {inverse} {0,8}>
+		<li class="menu-item">
+		<a href="#URL_ARTICLE">[(#TITRE*)]</a>
+		</li>
+	</BOUCLE_syndic>
+		</ul>
+	</div>
+	</div>
+	</B_syndic>
+
+	[<!-- Inscription au site -->
+
+		<div class="formulaire"><:participer_site:>
+			<br /><br />(#FORMULAIRE_INSCRIPTION)
+		</div>]
+
+	</div>
+
+
+<h1 class="structure"><:articles_recents:></h1>
+
+<!-- Articles recents -->
+
+<BOUCLE_articles_recents(ARTICLES) {par date} {inverse} {2,8}>
+	<h2><a href="#URL_ARTICLE" [title="(#DESCRIPTIF|textebrut|entites_html)"]>#TITRE</a></h2>
+	<div class="detail">
+	[(#DATE|nom_jour)] [(#DATE|affdate)]
+	<B_auteurs_recents><:par_auteur:> <BOUCLE_auteurs_recents(AUTEURS) {id_article} {", "}>#NOM</BOUCLE_auteurs_recents>
+	</div>
+	<br>
+</BOUCLE_articles_recents>
+
+
+</div>
+
+#SPIP_CRON
+</body>
+</html>
diff --git a/dist/sommaire_texte.html b/dist/sommaire_texte.html
new file mode 100644
index 0000000000..82b26d985a
--- /dev/null
+++ b/dist/sommaire_texte.html
@@ -0,0 +1,97 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="#LANG">
+<!--
+// ACCESSIBILITE
+// la page /oo offre une lecture en mode "texte seul"
+// des 3 articles les plus recents.
+-->
+<head>
+	<title>
+		#NOM_SITE_SPIP
+	</title>
+	<meta http-equiv="Content-Type" content="text/html; charset=#CHARSET">
+	<meta http-equiv="AUTHOR" content="#NOM_SITE_SPIP">
+	<meta http-equiv="DESCRIPTION" content="Edition en mode texte de #NOM_SITE_SPIP">
+</head>
+<body dir="#LANG_DIR">
+	<hr />
+	<:edition_mode_texte:> <a href="#URL_SITE_SPIP">{#NOM_SITE_SPIP}</a>
+	<hr />
+	<b><u>Sommaire de la page :</u></b>
+
+	<B_sarticles>
+	<h2>Articles</h2>
+	<ul>
+		<BOUCLE_sarticles(ARTICLES){0,3}{par date}{inverse}>
+			<li><a href="#ar#ID_ARTICLE">#TITRE</a>
+		</BOUCLE_sarticles>
+	</ul>
+	</B_sarticles>
+
+	<B_sbreves>
+	<h2>Br&egrave;ves</h2>
+	<ul>
+		<BOUCLE_sbreves(BREVES){0,5}{par date}{inverse}>
+			<li><a href="#br#ID_BREVE">#TITRE</a>
+		</BOUCLE_sbreves>
+	</ul>
+	</B_sbreves>
+
+
+	<B_articles>
+	<h1>Articles r&eacute;cents</h1>
+
+	<BOUCLE_articles(ARTICLES){0,3}{par date}{inverse}>
+		<a name="ar#ID_ARTICLE"></a>
+		<BOUCLE_RUB_AR(RUBRIQUES){ID_RUBRIQUE}>
+			Rubrique : <a href="#URL_RUBRIQUE">{#TITRE}</a>
+		</BOUCLE_RUB_AR>
+
+		[<h2>(#SURTITRE|majuscules)</h2>]
+		<h2>#TITRE</h2>
+		<h3>#SOUSTITRE</h3>
+		[Le (#DATE|nom_jour) ] [(#DATE|affdate)]
+		[par (#LESAUTEURS)]
+		<p>
+		[(#CHAPO)]
+		<p>
+		[(#TEXTE)]
+
+		
+		<p><a href="#URL_ARTICLE">{Consulter}</a> l'article avec son forum. 
+
+		
+		<hr />
+	</BOUCLE_articles>
+
+	<B_breves>
+	<h1>Derni&egrave;res br&egrave;ves</h1>
+
+	<BOUCLE_breves(BREVES){0,5}{par date}{inverse}>
+		<a name="br#ID_BREVE">
+		<BOUCLE_RUB_BR(RUBRIQUES){ID_RUBRIQUE}>
+			Rubrique : <a href="#URL_RUBRIQUE">{#TITRE}</a>
+		</BOUCLE_RUB_BR>
+		<h2>#TITRE</h2>
+		[Le (#DATE|nom_jour) ] [(#DATE|affdate)]
+		<p>
+		[(#TEXTE)]
+		[<p>Voir en ligne : <a href="(#URL_SITE)">#NOM_SITE</a>]
+		<p><a href="#URL_BREVE">{Consulter}</a> la br&egrave;ve avec son forum. 
+	<hr />
+	</BOUCLE_breves>
+	[<h1>NOTES :</h1>
+	<p class="spip_note">(#NOTES)]
+	
+	<hr />
+	<a name="about"></a>
+	
+	[<p>Rechercher sur ce site : (#FORMULAIRE_RECHERCHE|recherche.php3)</p>]
+	<table><tr>
+		<td><A href="http://www.uzine.net/spip">{Site r&eacute;alis&eacute; avec le logiciel SPIP}</td>
+		[<td><A href="#URL_SITE_SPIP">{(#NOM_SITE_SPIP|majuscules)}</a></td>]
+		<td><a href="#URL_SITE_SPIP/plan.php3">{<:plan_site:>}</a></td>
+	</tr></table>
+
+</body>
+</html>
diff --git a/ecrire/inc_version.php3 b/ecrire/inc_version.php3
index 380aeebce1..0e42556085 100644
--- a/ecrire/inc_version.php3
+++ b/ecrire/inc_version.php3
@@ -1113,7 +1113,7 @@ function debut_entete($title, $entete='') {
 //
 function find_in_path ($filename, $path='AUTO') {
 	if ($path == 'AUTO') {
-		$path = '.:squelettes:squelettes/dist:squelettes/dist/formulaires';
+		$path = '.:squelettes:dist:formulaires';
 		if ($GLOBALS['dossier_squelettes'])
 			$path = $GLOBALS['dossier_squelettes'].':'.$path;
 	}
diff --git a/formulaires/formulaire_admin.html b/formulaires/formulaire_admin.html
new file mode 100644
index 0000000000..52cea437aa
--- /dev/null
+++ b/formulaires/formulaire_admin.html
@@ -0,0 +1,16 @@
+[<(#ENV{floatdiv}) class="spip-admin-float">]
+<div class="spip-admin-bloc" dir='#LANG_DIR'>
+<div class="spip-admin">
+	<ul>[
+	<li><a href='ecrire/articles.php3?id_article=(#ENV{id_article})' class='spip-admin-boutons'><:admin_modifier_article:> ([(#ENV{id_article})])</a></li>][
+	<li><a href='ecrire/breves_voir.php3?id_breve=(#ENV{id_breve})' class='spip-admin-boutons'><:admin_modifier_breve:> ([(#ENV{id_breve})])</a></li>][
+	<li><a href='ecrire/naviguer.php3?id_rubrique=(#ENV{id_rubrique})' class='spip-admin-boutons'><:admin_modifier_rubrique:> ([(#ENV{id_rubrique})])</a></li>][
+	<li><a href='ecrire/mots_edit.php3?id_mot=(#ENV{id_mot})' class='spip-admin-boutons'><:admin_modifier_mot:> ([(#ENV{id_mot})])</a></li>][
+	<li><a href='ecrire/auteurs_edit.php3?id_auteur=(#ENV{id_auteur})' class='spip-admin-boutons'><:admin_modifier_auteur:> ([(#ENV{id_auteur})])</a></li>]
+	<li><a href='[(#ENV{action})]var_mode=recalcul' class='spip-admin-boutons'><:admin_recalculer:>[(#ENV{use_cache})]</a></li>[
+	<li><a href='ecrire/(#ENV{statistiques})[id_article=(#ENV{id_article})]' class='spip-admin-boutons'>[<:info_visites:>&nbsp;(#ENV{visites})][;&nbsp;<:info_popularite_5:>&nbsp;(#ENV{popularite})]</a></li>][
+	<li><a href='[(#ENV{action})]var_mode=(#ENV{debug})' class='spip-admin-boutons'><:admin_debug:></a></li>]
+	</ul>
+</div>
+</div>
+[</(#ENV{floatdiv})>]
diff --git a/formulaires/formulaire_ecrire_auteur.html b/formulaires/formulaire_ecrire_auteur.html
new file mode 100644
index 0000000000..ab2d05250f
--- /dev/null
+++ b/formulaires/formulaire_ecrire_auteur.html
@@ -0,0 +1,20 @@
+[<br />(#ENV*{sujetko})<:form_prop_indiquer_sujet:><br />&nbsp;][
+<br />(#ENV*{mailko})<:form_prop_indiquer_email:><br /><br />
+]<form action="[(#ENV{action})]" method='post'>
+<p><label><:form_pet_votre_email:>
+	<input type="text" class="forml" name="email_message_auteur"
+		 value="[(#ENV{mail})]" size="30" />
+</label></p>
+<p><label><:form_prop_sujet:><br />
+	<input type="text" class="forml" name="sujet_message_auteur"
+		 value="[(#ENV{sujet})]" size="30" />
+</label></p>
+<p>
+<textarea name='texte_message_auteur' rows='10' class='forml' cols='40'>[(#ENV{texte})]</textarea>
+</p>
+[<input type="hidden" name="id_auteur" value="(#ENV{id_auteur})" />]
+<div align="right">
+	<input type="submit"  class="spip_bouton" name="valide"
+		 value="[(#ENV{valide})]" />
+</div>
+</form>
diff --git a/formulaires/formulaire_forum.html b/formulaires/formulaire_forum.html
new file mode 100644
index 0000000000..ffebdf79f1
--- /dev/null
+++ b/formulaires/formulaire_forum.html
@@ -0,0 +1,54 @@
+<form action="[(#ENV{url})]" method="post" name="formulaire">[
+<input type="hidden" name="alea" value="(#ENV{alea})" />][
+<input type="hidden" name="hash" value="(#ENV{hash})" />][
+<input type="hidden" name="retour_forum" value="(#ENV{retour_forum})" />
+][<p>(#ENV*{modere})</p>
+][(#ENV*{afficher_texte_hidden})
+][(#ENV*{afficher_texte_input})
+	[(#ENV*{previsu})
+		<fieldset class="spip_encadrer">
+		<legend><b><:forum_titre:></b></legend>
+		<label><input type="text" name="titre" 
+			[value="(#ENV{titre})" ]class="forml" size="40" />
+		</label>
+		</fieldset>
+		<br />
+		<fieldset class="spip_encadrer">
+		<legend><b><:forum_texte:></b></legend>
+		<p><:info_creation_paragraphe:></p>
+		[(#ENV{texte}|barre_forum)]
+		</fieldset>
+		<br />
+		[<p>(#ENV*{table})</p>]
+		<fieldset class="spip_encadrer">
+			<legend><:forum_lien_hyper:></legend>
+			<p><:forum_page_url:></p>
+			<p><label><:forum_titre:>
+				<input type="text" name="nom_site_forum" class="forml" size="40"
+					value="[(#ENV{nom_site_forum})]" />
+			</label></p>
+			<p><label><:forum_url:>
+			<input type="text" name="url_site" class="forml" size="40"
+				value="[(#ENV{url_site})]" />
+			</label></p>
+		</fieldset>
+		<br />
+		<fieldset class="spip_encadrer">
+			<legend><:forum_qui_etes_vous:></legend>
+			<p><label><:forum_votre_nom:>
+				<input type="text" name="auteur" value="[(#ENV{auteur})]"
+					class="forml" size="40" [(#ENV{disabled})] />
+			</label></p>
+			<p><label><:forum_votre_email:>
+				<input type="text" name="email_auteur"
+				value="[(#ENV{email_auteur})]"
+				class="forml" size="40" [(#ENV{disabled})] />
+			</label></p>
+		</fieldset>
+		<br />
+		<div align="#LANG_RIGHT">
+		<input type="submit" value="<:forum_voir_avant:>"
+		class="spip_bouton" /></div>
+	]
+]</form>
+
diff --git a/formulaires/formulaire_inscription.html b/formulaires/formulaire_inscription.html
new file mode 100644
index 0000000000..0b276bff54
--- /dev/null
+++ b/formulaires/formulaire_inscription.html
@@ -0,0 +1,42 @@
+[
+(#ENV*{message})
+][
+(#ENV*{message}|?{'',' '})[
+ (#ENV{mode}|=={forum}|?{' ',''})
+	<:pass_forum_bla:><br /><br />
+][
+ (#ENV{mode}|=={redac}|?{' ',''})
+	<:pass_espace_prive_bla:><br /><br />
+]<:form_forum_indiquer_nom_email:>
+ <form	id="inscription" method='post' action='#SELF'
+	style='border: 0px; margin: 0px;'> 
+      <fieldset style="border: none; font-weight: bold"><legend></legend>
+	<label>
+	  <:form_pet_votre_nom:>
+	  <input type="text" class="forml" name="nom_inscription" value="" size="30" />
+	</label>
+	<label>
+	  <:form_pet_votre_email:>
+	  <input type="text" class="forml" name="mail_inscription" value="" size="30" />
+	</label>
+      </fieldset>
+      <div align="right"><input type="submit" class="spip_bouton" value="<:bouton_valider:>" />
+	</div> 
+ </form>[
+<script type="text/javascript"><!--
+document.inscription.(#ENV{focus}).focus()
+--></script>
+ ]
+][<br />
+<div align="right">
+(#ENV{target}|?{' ',''})
+<script type="text/javascript"><!--
+document.write("<a href='")
+document.write((window.opener) ? "javascript:close()" : "./")
+document.write("'><:pass_quitter_fenetre:><" + "/a>");
+//--></script>
+<noscript>
+        &#91;<a href='./'><:pass_retour_public:></a>&#93;
+</noscript>
+</div>
+]
diff --git a/formulaires/formulaire_login.html b/formulaires/formulaire_login.html
new file mode 100644
index 0000000000..cfd99499ee
--- /dev/null
+++ b/formulaires/formulaire_login.html
@@ -0,0 +1,79 @@
+[(#ENV{echec_cookie})
+	<h3 class="spip"><:erreur_probleme_cookie:></h3>
+		<b><:login_cookie_oblige:></b>
+		  <:login_cookie_accepte:><p />
+][
+(#ENV*{message})
+	<br />
+	 <:forum_vous_enregistrer:>
+	[<a 
+	href='(#ENV{inscription})?mode=forum&amp;focus=nom_inscription&amp;target=spip_pass'
+	target="spip_pass"
+	onclick="javascript:window.open(this.href, 'spip_inscription', 'scrollbars=yes, resizable=yes, width=480, height=450'); return false;"><:forum_vous_inscrire:></a>]&nbsp;&nbsp;&#91;<a
+		href="spip_pass.php3"
+		target="spip_pass" 
+		onclick="javascript:window.open(this.href, 'spip_pass', 'scrollbars=yes, resizable=yes, width=480, height=280'); return false;"><:login_motpasseoublie:></a>&#93;<br /><br />
+]<div style="font-family: Verdana,arial,helvetica,sans-serif; font-size: 12px;">
+	<script type="text/javascript" src="ecrire/md5.js"></script>
+	<form	id="login[_(#ENV{login})]"
+		action="[(#ENV{action2})]"
+		method="post"[(#ENV{source}|=={spip}|?{' ',''})
+		onSubmit='if (this.session_password.value) {
+			this.session_password_md5.value = calcMD5("[(#ENV{alea_actuel})]" + this.session_password.value);
+			this.next_session_password_md5.value = calcMD5("[(#ENV{alea_futur})]" + this.session_password.value);
+			this.session_password.value = "";
+			}']>
+		<div class="spip_encadrer" style="[(#URL_SITE_SPIP|style_align)]">[
+			<div class="reponse_formulaire">(#ENV*{erreur})<br /><br /></div>
+][
+			<label><b><:login_login2:></b><br /></label>(#ENV{login}|?{'',' '})
+			<input type="text" id='var_login' name="var_login" class="forml" value="" size="40" />
+][
+<div>
+			<input type="hidden" name="session_login_hidden" value="(#ENV{login})" />
+<script type="text/javascript"><!--
+document.write("<:login_login:>&nbsp;<b>[(#ENV{login})]<" + "/b><br />&#91;<a href='spip_cookie.php3?cookie_admin=non&amp;url=[(#ENV{url})][&amp;retour=(#SELF|urlencode)]'><font size='2'><:login_autre_identifiant:><" + "/font><" + "/a>&#93;")
+//--></script>
+<noscript>
+	<font face="Georgia, Garamond, Times, serif" size="3">
+		<:login_non_securise:>
+		<a href="[(#ENV{action})]"><:login_recharger:></a>
+	</font>
+	<label><b><:login_login2:></b><br /></label>
+	<input type='text' name='session_login' class='forml' [value="(#ENV{login})" ]size='40' />
+</noscript>
+[<img	src="(#ENV{id_auteur}|silogoauteur)"
+	width="75"
+	valign="top"
+	align="right"
+	alt="[(#ENV{login})]"><br /><br /><br />]
+</div>
+<p>
+		<label><b><:login_pass2:></b></label>&nbsp;<input type="password" name="session_password"[ id="var_login_(#ENV{login})]" class="forml" value="" size="40" />
+		<br />&nbsp;&nbsp;&nbsp;&nbsp;<input type="checkbox"
+			 name="session_remember"
+			 id="session[_(#ENV{login})]"
+			 value="oui"[(#ENV*{prefs}|filtre_rester_connecte)checked="checked"]/>
+		<label for="session[_(#ENV{login})]"><:login_rester_identifie:></label>
+</p>
+		<input type="hidden" name="session_password_md5" value="" />
+		<input type="hidden" name="next_session_password_md5" value="" />
+		<input type="hidden" name="essai_login" value="oui" />
+]		<input type="hidden" name="url" value="[(#ENV{url})]" />
+		<div align="right"><input type="submit" class="spip_bouton" value="<:bouton_valider:>" /></div>
+		</div>
+	</form>
+<script type="text/javascript"><!--
+document.getElementById('var_login[_(#ENV{login})]').focus();
+--></script>[
+	<form action="(#ENV{auth_http})" method="get">
+		<fieldset>
+		<p>
+		<:login_preferez_refuser:>
+		<input type="hidden" name="essai_auth_http" value="oui"/>
+		[<input type="hidden" name="url" value="(#ENV{url})"/>]
+		<div align="right"><input type="submit" class="spip_bouton" value="<:login_sans_cookiie:>"/></div>
+		</fieldset>
+	</form>
+]
+</div>
diff --git a/formulaires/formulaire_menu_lang.html b/formulaires/formulaire_menu_lang.html
new file mode 100644
index 0000000000..1434ab8e29
--- /dev/null
+++ b/formulaires/formulaire_menu_lang.html
@@ -0,0 +1,14 @@
+<form	action='[(#ENV{url})]'
+	method='post'
+	style='margin:0px; padding:0px;'>[
+	<input type='hidden' name='url' value='(#ENV{cible})' />
+]	<select	name='[(#ENV{nom})]' 
+		class='forml'
+		style='vertical-align: top; max-height: 24px; margin-bottom: 5px; width: 120px;'
+		onchange="document.location.href='[(#ENV{retour})]&amp;[(#ENV{nom})]='+this.options[this.selectedIndex].value">
+		[(#ENV*{langues})]
+      </select>
+      <noscript>
+	<input type='submit' value='&gt;&gt;' class='spip_bouton' />
+      </noscript>
+</form>
diff --git a/formulaires/formulaire_oubli.html b/formulaires/formulaire_oubli.html
new file mode 100644
index 0000000000..e233ab62e6
--- /dev/null
+++ b/formulaires/formulaire_oubli.html
@@ -0,0 +1,37 @@
+[
+(#ENV*{message})
+][
+(#ENV*{message}|?{'',' '})
+<form id="oubli_form" action='spip_pass.php3' method='post'>
+	<fieldset style="border: none;"><legend></legend>[
+	<:pass_nouveau_pass:>
+	<input type='hidden' name="p" value="(#ENV{p})">
+	<label>
+	    <:pass_choix_pass:>
+	    <input type="password" name="oubli">
+	</label>][
+	(#ENV{p}|?{'',' '})
+	<label>
+	  <:pass_indiquez_cidessous:>
+	  <input type="texte" name="oubli">
+	</label>]
+	<input type=submit class="fondl" value="<:pass_ok:>">
+      </fieldset>
+</form>
+]
+<br />
+<div align="right">
+<script type="text/javascript"><!--
+[
+(#ENV*{message}|?{'',' '})
+document.oubli_form.oubli.focus()
+]
+document.write("<a href='")
+document.write((window.opener) ? "javascript:close()" : "./")
+document.write("'><:pass_quitter_fenetre:><" + "/a>");
+//--></script>
+<noscript>
+	&#91;<a href='./'><:pass_retour_public:></a>&#93;
+</noscript>
+</div>
+<br />
diff --git a/formulaires/formulaire_recherche.html b/formulaires/formulaire_recherche.html
new file mode 100644
index 0000000000..355a8cecdb
--- /dev/null
+++ b/formulaires/formulaire_recherche.html
@@ -0,0 +1,9 @@
+<form action="[(#ENV{lien})]" method="get" class="formrecherche">
+	<div>
+		<input type="text"
+			id="formulaire_recherche"
+			class="formrecherche"
+			name="recherche"
+			value="[(#ENV*{recherche_securisee})]" />
+	</div>
+</form>
diff --git a/formulaires/formulaire_signature.html b/formulaires/formulaire_signature.html
new file mode 100644
index 0000000000..bc1da41ee5
--- /dev/null
+++ b/formulaires/formulaire_signature.html
@@ -0,0 +1,44 @@
+<form method='post'
+      action='#SELF#sp[(#ENV{id_article})]' >
+      <input type="hidden" name="url_page" value="#URL_SITE_SPIP/#SELF">
+      <div class='spip_encadrer' style='color: black; font-size: 80%; font-weight: normal;'>
+	[(#ENV*{texte}|propre)]
+	<fieldset style='font-size: 110%; font-weight: bold;'>
+	  <legend></legend>
+	  <label>
+	    <:form_pet_votre_nom:>
+	    <input type="text" class="forml" name="nom_email" value="" size="20" />
+	  </label>
+	  <label>
+	    <:form_pet_votre_email:><br />
+	    <input type="text" class="forml" name="adresse_email" value="" size="20" />
+	  </label>
+	</fieldset>
+	<br />
+	<p>[(#ENV{site_obli}|=={oui}|?{'',' '})<:form_pet_votre_site:><br />]
+	<fieldset style='font-size: 110%; font-weight: bold;'>
+	  <legend></legend>
+	  <label>
+	  <:form_pet_nom_site2:><br />
+	  <input type="text" class="forml" name="signature_nom_site" value="" size="20" />
+	  </label>
+	  <label>
+	    <:form_pet_adresse_site:><br />
+	    <input type="text" class="forml" name="signature_url_site" value="http://" size="20" />
+	  </label>
+	</fieldset>[
+	<br />
+	<fieldset style='font-weight: bold'>
+	  <legend></legend>
+	(#ENV{message}|=={oui}|?{' ',''})
+	  <label>
+	  <:form_pet_message_commentaire:><br />
+	    <textarea name="message" rows="3" class="forml" cols="20"></textarea>
+	  </label>
+	</fieldset>
+	]
+	<br />
+	<div align="right"><input type="submit" class="spip_bouton" value="<:bouton_valider:>" /></div>
+      </div>
+</form>
+
diff --git a/formulaires/formulaire_site.html b/formulaires/formulaire_site.html
new file mode 100644
index 0000000000..a43577a0de
--- /dev/null
+++ b/formulaires/formulaire_site.html
@@ -0,0 +1,18 @@
+<form action="#SELF" method="post">
+      <br />
+      <fieldset	class='spip_encadrer' style='color: black; font-size: 90%'>
+	<legend></legend>
+	<label>
+	  <:form_prop_nom_site:>
+	  <input type="text" class="forml" name="nom_site" value="" size="30">
+	</label>
+	<label>
+	  <:form_prop_url_site:>
+	  <input type="text" class="forml" name="url_site" value="" size="30">
+	</label>
+	<label><:form_prop_description:>
+	  <textarea name='description_site' rows='5' class='forml' cols='40'></textarea>
+	</label>
+	<div align="right"><input type="submit" class="spip_bouton" value="<:bouton_valider:>"></div>
+      </fieldset>
+</form>
diff --git a/formulaires/inc-formulaire_admin.php3 b/formulaires/inc-formulaire_admin.php3
new file mode 100644
index 0000000000..b43782c088
--- /dev/null
+++ b/formulaires/inc-formulaire_admin.php3
@@ -0,0 +1,109 @@
+<?php
+
+if (!defined("_ECRIRE_INC_VERSION")) return;	#securite
+
+global $balise_FORMULAIRE_ADMIN_collecte ;
+$balise_FORMULAIRE_ADMIN_collecte = array('id_article', 'id_breve', 'id_rubrique', 'id_mot', 'id_auteur');
+
+# on ne peut rien dire au moment de l'execution du squelette
+
+function balise_FORMULAIRE_ADMIN_stat($args, $filtres) {
+	return $args;
+}
+
+# les boutons admin sont mis d'autorite si absents
+# donc une variable statique controle si FORMULAIRE_ADMIN a ete vu.
+# Toutefois, si c'est le debuger qui appelle,
+# il peut avoir recopie le code dans ses donnees et il faut le lui refounir.
+# Pas question de recompiler: ca fait boucler !
+# Le debuger transmet donc ses donnees, et cette balise y retrouve son petit.
+
+function balise_FORMULAIRE_ADMIN_dyn($id_article, $id_breve, $id_rubrique, $id_mot, $id_auteur, $float='', $debug='') {
+	global $var_preview, $use_cache, $forcer_debug;
+	static $dejafait = false;
+
+	if ($GLOBALS['flag_preserver'] || !$GLOBALS['spip_admin'])
+		return '';
+
+	if (!is_array($debug)) {
+		if ($dejafait)
+			return '';
+	} else {
+		if ($dejafait) {
+			$res = '';
+			foreach($debug['sourcefile'] as $k => $v) {
+				if (strpos($v,'formulaire_admin.') !== false)
+					return $debug['resultat'][$k . 'tout'];
+			}
+			return '';
+		}
+	}
+	$dejafait = true;
+
+	// repartir de zero pour les boutons car clean_link a pu etre utilisee
+	$link = new Link();
+	$link->delVar('var_mode');
+	$link->delVar('var_mode_objet');
+	$link->delVar('var_mode_affiche');
+	$action = $link->getUrl();
+	$action = ($action . ((strpos($action, '?') === false) ? '?' : '&'));
+
+	// Ne pas afficher le bouton 'Modifier ce...' si l'objet n'existe pas
+	foreach (array('article', 'breve', 'rubrique', 'mot', 'auteur') as $type) {
+		$id_type = 'id_'.$type;
+		if (!($$id_type = intval($$id_type)
+		AND $s = spip_query(
+		"SELECT $id_type FROM spip_${type}s WHERE $id_type=".$$id_type)
+		AND spip_num_rows($s)))
+			$$id_type=0;
+	}
+
+	// Bouton statistiques
+	if (lire_meta("activer_statistiques") != "non" 
+	AND $id_article
+	AND !$var_preview
+	AND ($GLOBALS['auteur_session']['statut'] == '0minirezo')) {
+		if ($s = spip_query("SELECT id_article
+		FROM spip_articles WHERE statut='publie'
+		AND id_article = $id_article")
+		AND spip_fetch_array($s)) {
+			include_local ("inc-stats.php3");
+			$r = afficher_raccourci_stats($id_article);
+			$visites = $r['visites'];
+			$popularite = $r['popularite'];
+			$statistiques = 'statistiques_visites.php3?'; # lien si connecte
+		}
+	}
+
+	// Bouton de debug
+	$debug = (
+		($forcer_debug
+		OR $GLOBALS['bouton_admin_debug']
+		OR ($GLOBALS['var_mode'] == 'debug'
+			AND $GLOBALS['_COOKIE']['spip_debug']
+		)) AND ($GLOBALS['code_activation_debug'] == 'oui'
+			OR $GLOBALS['auteur_session']['statut'] == '0minirezo')
+		AND !$var_preview
+	) ? 'debug' : '';
+
+	// hack - ne pas avoir la rubrique si un autre bouton est deja present
+	if ($id_article OR $id_breve) unset ($id_rubrique);
+
+	return array('formulaire_admin', 0,
+			array(
+				'id_article' => $id_article,
+				'id_rubrique' => $id_rubrique,
+				'id_auteur' => $id_auteur,
+				'id_breve' => $id_breve,
+				'id_mot' => $id_mot,
+				'action' => $action,
+				'debug' => $debug,
+				'popularite' => ceil($popularite),
+				'statistiques' => $statistiques,
+				'visites' => intval($visites),
+				'use_cache' => ($use_cache ? ' *' : ''),
+				'floatdiv' => $float
+			)
+		);
+}
+?>
diff --git a/formulaires/inc-formulaire_ecrire_auteur.php3 b/formulaires/inc-formulaire_ecrire_auteur.php3
new file mode 100644
index 0000000000..e145f24129
--- /dev/null
+++ b/formulaires/inc-formulaire_ecrire_auteur.php3
@@ -0,0 +1,59 @@
+<?php
+
+if (!defined("_ECRIRE_INC_VERSION")) return;	#securite
+
+global $balise_FORMULAIRE_ECRIRE_AUTEUR_collecte ;
+$balise_FORMULAIRE_ECRIRE_AUTEUR_collecte = array('id_auteur',
+			     'email',
+			     'sujet_message_auteur',
+			     'texte_message_auteur',
+			     'email_message_auteur'
+);
+
+function balise_FORMULAIRE_ECRIRE_AUTEUR_stat($args, $filtres) {
+	list($id_auteur, $mail, $sujet, $texte, $adres) = $args;
+	return (!email_valide($mail) ? '' :
+		array($id_auteur, $mail,$sujet, $texte, $adres));
+}
+
+function balise_FORMULAIRE_ECRIRE_AUTEUR_dyn($id_auteur, $mail, $sujet, $texte, $adres) {
+	include_ecrire('inc_texte.php3');
+	$puce = $GLOBALS['puce'.$GLOBALS['spip_lang_rtl']];
+
+	$mailko = $texte && !email_valide($adres);
+	$validable = $texte && $sujet && (!$mailko);
+
+	if ($validable && ($GLOBALS['valide'] == _T('form_prop_confirmer_envoi'))) { 
+		$texte .= "\n\n-- "._T('envoi_via_le_site')." ".lire_meta('nom_site')." (".lire_meta('adresse_site')."/) --\n";
+		include_ecrire("inc_mail.php3");
+		envoyer_mail($mail, $sujet, $texte, $adres,
+				"X-Originating-IP: ".$GLOBALS['REMOTE_ADDR']);
+		return _T('form_prop_message_envoye');
+	    }
+
+
+	// repartir de zero pour les boutons car clean_link a pu etre utilisee
+
+	$link = new Link;
+
+	$link->delVar('sujet_message_auteur');
+	$link->delVar('texte_message_auteur');
+	$link->delVar('email_message_auteur');
+	$link->delVar('id_auteur');
+	return 
+		array('formulaire_ecrire_auteur', 0,
+			array(
+			'action' => $link->getUrl(),
+			'id_auteur' => $id_auteur,
+			'mailko' => $mailko ? $puce : '',
+			'mail' => $adres,
+			'sujetko' => ($texte && !$sujet) ? $puce : '',
+			'sujet' => $sujet,
+			'texte' => $texte,
+			'valide' => ($validable ?
+				_T('form_prop_confirmer_envoi') :
+				_T('form_prop_envoyer'))
+			)
+		);
+}
+?>
diff --git a/formulaires/inc-formulaire_forum.php3 b/formulaires/inc-formulaire_forum.php3
new file mode 100644
index 0000000000..40abf0ab07
--- /dev/null
+++ b/formulaires/inc-formulaire_forum.php3
@@ -0,0 +1,364 @@
+<?php
+
+if (!defined("_ECRIRE_INC_VERSION")) return;	#securite
+
+include_ecrire('inc_meta.php3');
+include_ecrire('inc_admin.php3');
+include_ecrire('inc_acces.php3');
+include_ecrire('inc_texte.php3');
+include_ecrire('inc_filtres.php3');
+include_ecrire('inc_lang.php3');
+include_ecrire('inc_mail.php3');
+include_ecrire('inc_forum.php3');
+include_ecrire("inc_abstract_sql.php3");
+include_local(_FILE_CONNECT);
+
+// Gestionnaire d'URLs
+if (@file_exists("inc-urls.php3"))
+	include_local("inc-urls.php3");
+else
+	include_local("inc-urls-".$GLOBALS['type_urls'].".php3");
+
+/*******************************/
+/* GESTION DU FORMULAIRE FORUM */
+/*******************************/
+global $balise_FORMULAIRE_FORUM_collecte;
+$balise_FORMULAIRE_FORUM_collecte = array('id_rubrique', 'id_forum', 'id_article', 'id_breve', 'id_syndic');
+
+function balise_FORMULAIRE_FORUM_stat($args, $filtres) {
+	list ($idr, $idf, $ida, $idb, $ids) = $args;
+
+	// recuperer les donnees du forum auquel on repond, false = forum interdit
+	if (!$r = sql_recherche_donnees_forum ($idr, $idf, $ida, $idb, $ids))
+		return '';
+
+	list($titre, $table, $forums_publics) = $r;
+	return
+		array($titre, $table, $forums_publics, $idr, $idf, $ida, $idb, $ids);
+}
+
+function balise_FORMULAIRE_FORUM_dyn($titre, $table, $forums_publics, $id_rubrique, $id_forum, $id_article, $id_breve, $id_syndic) {
+
+	global $REMOTE_ADDR, $id_message, $afficher_texte, $spip_forum_user;
+
+	// url de reference
+	if (!$url = rawurldecode($GLOBALS['url'])) 
+	    $url = $GLOBALS['REQUEST_URI'];
+	else {
+	// identifiants des parents
+	  $args = '';  
+	  if ($id_rubrique) $args .= "id_rubrique=$id_rubrique";
+	  if ($id_forum) $args .= "id_forum=$id_forum";
+	  if ($id_article) $args .= "id_article=$id_article";
+	  if ($id_breve) $args .= "id_breve=$id_breve";
+	  if ($id_syndic) $args .= "id_syndic=$id_syndic";
+	  if ($args && strpos($url,$args)===false) $url .= (strpos($url,'?') ? '&' : '?') . $args;
+	}
+
+	$url = ereg_replace("[?&]var_erreur=[^&]*", '', $url);
+	$url = ereg_replace("[?&]var_login=[^&]*", '', $url);
+	$url = ereg_replace("[?&]url=[^&]*", '', $url);
+
+	// verifier l'identite des posteurs pour les forums sur abo
+	if (($forums_publics == "abo") && (!$GLOBALS["auteur_session"]))
+	  {
+	    include_local(find_in_path('inc-login_public.php3'));
+	    return login_pour_tous($GLOBALS['var_login'], $url, true, $url, 'forum');
+	  }
+
+	$id_rubrique = intval($id_rubrique);
+	$id_forum = intval($id_forum);
+	$id_article = intval($id_article);
+	$id_breve = intval($id_breve);
+	$id_syndic = intval($id_syndic);
+
+	// ne pas mettre '', sinon le squelette n'affichera rien.
+
+	$previsu = ' ';
+
+	// au premier appel (pas de Post-var nommee "retour_forum")
+	// memoriser l'URL courante pour y revenir apres envoi du message
+	// aux appels suivants, reconduire la valeur.
+	// Initialiser aussi l'auteur
+
+	if (!$retour_forum = rawurldecode($GLOBALS['_POST']['retour_forum'])) {
+		if ($retour_forum = rawurldecode($GLOBALS['_GET']['retour']))
+			$retour_forum = ereg_replace('&var_mode=recalcul','',$retour_forum);
+		else $retour_forum = $url;
+
+		if ($spip_forum_user &&
+		is_array($cookie_user = unserialize($spip_forum_user))) {
+			$auteur = $cookie_user['nom'];
+			$email_auteur = $cookie_user['email'];
+		} else {
+			$auteur = $GLOBALS['auteur_session']['nom'];
+			$email_auteur = $GLOBALS['auteur_session']['email'];
+		}
+
+	} else {
+
+	// Recuperer le message a previsualiser
+		$titre = $GLOBALS['_POST']['titre'];
+		$texte = $GLOBALS['_POST']['texte'];
+		$auteur = $GLOBALS['_POST']['auteur'];
+		$email_auteur = $GLOBALS['_POST']['email_auteur'];
+		$nom_site_forum = $GLOBALS['_POST']['nom_site_forum'];
+		$url_site = $GLOBALS['_POST']['url_site'];
+		$ajouter_mot = $GLOBALS['_POST']['ajouter_mot']; // array
+
+		if ($afficher_texte != 'non') {
+			$previsu = 
+			  "<div style='font-size: 120%; font-weight: bold;'>"
+			  . interdire_scripts(typo($titre))
+			  . "</div><p /><b><a href=\"mailto:"
+			  . interdire_scripts(typo($email_auteur)) . "\">"
+			  . interdire_scripts(typo($auteur)) . "</a></b><p />"
+			  . propre($texte) . "<p /><a href=\""
+			  . interdire_scripts($url_site) . "\">"
+			  . interdire_scripts(typo($nom_site_forum)) . "</a>";
+
+			// Verifier mots associes au message
+			if (is_array($ajouter_mot))
+			$mots = preg_replace('/[^0-9,]/', '', join(',',$ajouter_mot));
+			else $mots = '0';
+
+			// affichage {par num type, type, num titre,titre}
+			$result_mots = spip_query("SELECT id_mot, titre, type
+				FROM spip_mots
+				WHERE id_mot IN ($mots)
+				ORDER BY 0+type,type,0+titre,titre");
+			if (spip_num_rows($result_mots)>0) {
+				$previsu .= "<p>"._T('forum_avez_selectionne')."</p><ul>";
+				while ($row = spip_fetch_array($result_mots)) {
+					$les_mots[$row['id_mot']] = "checked='checked'";
+					$presence_mots = true;
+					$previsu .= "<li style='font-size: 80%;'> "
+					. typo($row['type']) . "&nbsp;: <b>"
+					. typo($row['titre']) ."</b></li>";
+				}
+				$previsu .= '</ul>';
+			}
+
+			if (strlen($texte) < 10 AND !$presence_mots) {
+				$previsu .= "<p align='right' style='color: red;'>"._T('forum_attention_dix_caracteres')."</p>\n";
+			}
+			else if (strlen($titre) < 3 AND $afficher_texte <> "non") {
+				$previsu .= "<p align='right' style='color: red;'>"._T('forum_attention_trois_caracteres')."</p>";
+			}
+			else {
+				$previsu .= "<div align='right'><input type='submit' name='confirmer_forum' class='spip_bouton' value='"._T('forum_message_definitif')."' /></div>";
+			}
+			$previsu = "<div class='spip_encadrer'>$previsu</div>\n<br />";
+			// supprimer les <form> de la previsualisation
+			// (sinon on ne peut pas faire <cadre>...</cadre> dans les forums)
+			$previsu = preg_replace("@<(/?)f(orm[>[:space:]])@ism", "<\\1no-f\\2", $previsu);
+		}
+
+	// Une securite qui nous protege contre :
+	// - les doubles validations de forums (derapages humains ou des brouteurs)
+	// - les abus visant a mettre des forums malgre nous sur un article (??)
+	// On installe un fichier temporaire dans _DIR_SESSIONS (et pas _DIR_CACHE
+	// afin de ne pas bugguer quand on vide le cache)
+	// Le lock est leve au moment de l'insertion en base (inc-messforum.php3)
+
+		$alea = preg_replace('/[^0-9]/', '', $alea);
+		if(!$alea OR !@file_exists(_DIR_SESSIONS."forum_$alea.lck")) {
+			while (
+				# astuce : mt_rand pour autoriser les hits simultanes
+				$alea = time() + @mt_rand()
+				AND @file_exists($f = _DIR_SESSIONS."forum_$alea.lck")) {};
+			spip_touch ($f);
+		}
+
+		# et maintenant on purge les locks de forums ouverts depuis > 4 h
+		if ($dh = @opendir(_DIR_SESSIONS))
+			while (($file = @readdir($dh)) !== false)
+				if (preg_match('/^forum_([0-9]+)\.lck$/', $file)
+				AND (time()-@filemtime(_DIR_SESSIONS.$file) > 4*3600))
+					@unlink(_DIR_SESSIONS.$file);
+
+		$hash = calculer_action_auteur("ajout_forum $id_rubrique $id_forum $id_article $id_breve $id_syndic $alea");
+	}
+
+	// Faut-il ajouter des propositions de mots-cles
+	if ((lire_meta("mots_cles_forums") == "oui") && ($table != 'forum'))
+		$table = table_des_mots($table, $les_mots);
+	else
+		$table = '';
+
+	return array('formulaire_forum', 0,
+	array(
+		'alea' => $alea,
+		'auteur' => $auteur,
+		'disabled' => ($forums_publics == "abo")? " disabled='disabled'" : '',
+		'email_auteur' => $email_auteur,
+		'hash' => $hash,
+		'modere' => (($forums_publics != 'pri') ? '' : _T('forum_info_modere')),
+		'nom_site_forum' => $nom_site_forum,
+		'previsu' => $previsu,
+		'retour_forum' => $retour_forum,
+		'table' => $table,
+		'texte' => $texte,
+		'titre' => $titre,
+		'url' =>  $url,
+		'url_site' => ($url_site ? $url_site : "http://"),
+
+		## gestion des la variable de personnalisation $afficher_texte
+		# mode normal : afficher le texte en < input text >, cf. squelette
+		'afficher_texte_input' => (($afficher_texte <> 'non') ? '&nbsp;' : ''),
+		# mode 'non' : afficher les elements en < input hidden >
+		'afficher_texte_hidden' => (($afficher_texte <> 'non') ? '' :
+			(boutonne('hidden', 'titre', htmlspecialchars($titre)) .
+				$table .
+				"\n<br /><div align='right'>" .
+				boutonne('submit', '', _T('forum_valider'),
+				"class='spip_bouton'") .
+				"</div>"))
+
+		));
+}
+
+
+function barre_forum($texte)
+{
+	include_ecrire('inc_layer.php3');
+
+	if (!$GLOBALS['browser_barre'])
+		return "<textarea name='texte' rows='12' class='forml' cols='40'>$texte</textarea>";
+	static $num_formulaire = 0;
+	$num_formulaire++;
+	include_ecrire('inc_barre.php3');
+	return afficher_barre("document.getElementById('formulaire_$num_formulaire')", true) .
+	  "
+<textarea name='texte' rows='12' class='forml' cols='40'
+id='formulaire_$num_formulaire'
+onselect='storeCaret(this);'
+onclick='storeCaret(this);'
+onkeyup='storeCaret(this);'
+ondbclick='storeCaret(this);'>$texte</textarea>";
+}
+
+// Mots-cles dans les forums :
+// Si la variable de personnalisation $afficher_groupe[] est definie
+// dans le fichier d'appel, et si la table de reference est OK, proposer
+// la liste des mots-cles
+function table_des_mots($table, $les_mots) {
+	global $afficher_groupe;
+
+	if ($afficher_groupe)
+		$in_group = " AND id_groupe IN (" . join($afficher_groupe, ", ") .")";
+
+	$result_groupe = spip_query("SELECT * FROM spip_groupes_mots
+	WHERE 6forum = 'oui' AND $table = 'oui'". $in_group);
+
+	$ret = '';
+	while ($row_groupe = spip_fetch_array($result_groupe)) {
+		$id_groupe = $row_groupe['id_groupe'];
+		$titre_groupe = propre($row_groupe['titre']);
+		$unseul = ($row_groupe['unseul']== 'oui') ? 'radio' : 'checkbox';
+		$result =spip_query("SELECT * FROM spip_mots
+		WHERE id_groupe='$id_groupe'");
+		$total_rows = spip_num_rows($result);
+
+		if ($total_rows > 0) {
+			$ret .= "\n<p />"
+			  . "<div class='spip_encadrer' style='font-size: 80%;'>"
+			  . "<b>$titre_groupe&nbsp;:</b>"
+			  . "<table cellpadding='0' cellspacing='0' border='0' width='100%'>\n"
+			  ."<tr><td width='47%' valign='top'>";
+			$i = 0;
+      
+		while ($row = spip_fetch_array($result)) {
+			$id_mot = $row['id_mot'];
+			$titre_mot = propre($row['titre']);
+			$descriptif_mot = propre($row['descriptif']);
+
+			if ($i >= ($total_rows/2) AND $i < $total_rows) {
+				$i = $total_rows + 1;
+				$ret .= "</td><td width='6%'>&nbsp;</td>
+				<td width='47%' valign='top'>";
+			}
+
+			$ret .= boutonne($unseul, "ajouter_mot[]", $id_mot, "id='mot$id_mot' " . $les_mots[$id_mot]) .
+			  afficher_petits_logos_mots($id_mot)
+			. "<b><label for='mot$id_mot'>$titre_mot</label></b><br />";
+
+			if ($descriptif_mot)
+				$ret .= "$descriptif_mot<br />";
+			$i++;
+		}
+
+		$ret .= "</td></tr></table>";
+		$ret .= "</div>";
+		}
+	}
+
+	return $ret;
+}
+
+
+function afficher_petits_logos_mots($id_mot) {
+	include_ecrire('inc_logos.php3');
+	$on = cherche_image_nommee("moton$id_mot");
+	if ($on) {
+	  $image = ("$on[0]$on[1].$on[2]");
+		$taille = @getimagesize($image);
+		$largeur = $taille[0];
+		$hauteur = $taille[1];
+		if ($largeur < 100 AND $hauteur < 100)
+			return "<img src='$image' align='middle' width='$largeur'
+			height='$hauteur' hspace='1' vspace='1' alt=' ' border='0'
+			class='spip_image' /> ";
+	}
+}
+
+/*******************************************************/
+/* FONCTIONS DE CALCUL DES DONNEES DU FORMULAIRE FORUM */
+/*******************************************************/
+
+//
+// Chercher le titre et la configuration du forum de l'element auquel on repond
+//
+
+function sql_recherche_donnees_forum ($idr, $idf, $ida, $idb, $ids) {
+
+	// changer la table de reference s'il y a lieu (pour afficher_groupes[] !!)
+	if ($idr) {
+		$r = "SELECT titre FROM spip_rubriques WHERE id_rubrique = $idr";
+		$table = "rubriques";
+	} else if ($ida) {
+		$r = "SELECT titre FROM spip_articles WHERE id_article = $ida";
+		$table = "articles";
+	} else if ($idb) {
+		$r = "SELECT titre FROM spip_breves WHERE id_breve = $idb";
+		$table = "breves";
+	} else if ($ids) {
+		$r = "SELECT nom_site AS titre FROM spip_syndic WHERE id_syndic = $ids";
+		$table = "syndic";
+	}
+
+	if ($idf)
+		$r = "SELECT titre FROM spip_forum WHERE id_forum = $idf";
+
+	if ($r) {
+		list($titre) = spip_fetch_array(spip_query($r));
+		$titre = '> ' . supprimer_numero($titre);
+	} else {
+		$titre = _T('forum_titre_erreur');
+		$table = '';
+	}
+
+	// quelle est la configuration du forum ?
+	if ($ida)
+		list($accepter_forum) = spip_fetch_array(spip_query(
+		"SELECT accepter_forum FROM spip_articles WHERE id_article=$ida"));
+	if (!$accepter_forum)
+		$accepter_forum = substr(lire_meta("forums_publics"),0,3);
+	// valeurs possibles : 'pos'teriori, 'pri'ori, 'abo'nnement
+	if ($accepter_forum == "non")
+		return false;
+
+	return array ($titre, $table, $accepter_forum);
+}
+
+?>
diff --git a/formulaires/inc-formulaire_inscription.php3 b/formulaires/inc-formulaire_inscription.php3
new file mode 100644
index 0000000000..c90482535c
--- /dev/null
+++ b/formulaires/inc-formulaire_inscription.php3
@@ -0,0 +1,123 @@
+<?php
+
+if (!defined("_ECRIRE_INC_VERSION")) return;	#securite
+
+include_ecrire('inc_abstract_sql.php3');
+
+global $balise_FORMULAIRE_INSCRIPTION_collecte ;
+$balise_FORMULAIRE_INSCRIPTION_collecte = array('mail_inscription', 'nom_inscription');
+
+// args 0 et 1 sont mail et nom ci-dessus,
+// arg2 le parametre de la balise
+// arg3 toujours vide au premier appel (fenetre cible)
+
+function balise_FORMULAIRE_INSCRIPTION_stat($args, $filtres)
+{
+  return ((lire_meta('accepter_inscriptions') != 'oui') ? '' :
+	  array('redac', $args[0], $args[1], 
+		($args[2] == 'focus' ? 'nom_inscription' : ''),
+		''));
+}
+
+function balise_FORMULAIRE_INSCRIPTION_dyn($mode, $mail_inscription, $nom_inscription, $focus, $target) {
+	if (($mode == 'redac') AND (lire_meta("accepter_inscriptions") == "oui"))
+		$statut = "nouveau";
+	else if (($mode == 'forum') AND ((lire_meta('accepter_visiteurs') == 'oui') OR (lire_meta('forums_publics') == 'abo')))
+		$statut = "6forum";
+	else return _T('pass_rien_a_faire_ici');
+
+	if (test_mail_ins($mode, $mail_inscription) && $nom_inscription) {
+		include(_FILE_CONNECT);
+		// envoyer les identifiants si l'abonne n'existe pas déjà.
+		if (!$row = spip_fetch_array(spip_query("SELECT statut, id_auteur, login, pass FROM spip_auteurs WHERE email='".addslashes($mail_inscription)."' LIMIT 1")))
+		  {
+			include_ecrire("inc_acces.php3");
+			$pass = creer_pass_aleatoire(8, $mail_inscription);
+			$login = test_login($mail_inscription);
+			$mdpass = md5($pass);
+			$htpass = generer_htpass($pass);
+			$r = spip_abstract_insert('spip_auteurs', 
+					 '(nom, email, login, pass, statut, htpass)',
+					 "('".addslashes($nom_inscription)."',  '".addslashes($mail_inscription)."', '$login', '$mdpass', '$statut', '$htpass')");
+			ecrire_acces();
+			$message = envoyer_inscription($mail_inscription, $statut, $mode, $login, $pass);
+		  }
+
+		else {
+		  // existant mais encore muet, renvoyer les infos
+			if ($row['statut'] == 'nouveau') {
+			  $message = (envoyer_inscription($mail_inscription, $row['statut'], $mode, $row['login'], $row['pass']));
+			} else {
+				if ($row['statut'] == '5poubelle')
+		  // dead
+				  $message = _T('form_forum_access_refuse');
+				else  
+		  // deja inscrit
+				  $message = _T('form_forum_email_deja_enregistre');
+			}
+		}
+	}
+	// demande du formulaire
+	else {
+		if (!$nom_inscription) 
+		    $message = '';
+		else {
+		  spip_log("Mail incorrect: '$mail_inscription'");
+		  $message = _T('info_email_invalide');
+		}
+	}
+
+	return array("formulaire_inscription",0,
+		     array('focus' => $focus,
+			   'target' => $target,
+			   'message' => $message,
+			   'mode' => $mode));
+}
+
+// fonction qu'on peut redefinir pour filtrer selon l'adresse mail
+// cas general: controler juste que l'adresse n'est pas vide
+
+function test_mail_ins($mode, $mail_inscription) {
+  return trim($mail_inscription);
+}
+
+	// envoyer identifiants par mail
+function envoyer_inscription($mail, $statut, $type, $login, $pass) {
+	$nom_site_spip = lire_meta("nom_site");
+	$adresse_site = lire_meta("adresse_site");
+	
+	$message = _T('form_forum_message_auto')."\n\n"._T('form_forum_bonjour')."\n\n";
+	if ($type == 'forum') {
+		$message .= _T('form_forum_voici1', array('nom_site_spip' => $nom_site_spip, 'adresse_site' => $adresse_site)) . "\n\n";
+	} else {
+		$message .= _T('form_forum_voici2', array('nom_site_spip' => $nom_site_spip, 'adresse_site' => $adresse_site)) . "\n\n";
+	}
+	$message .= "- "._T('form_forum_login')." $login\n";
+	$message .= "- "._T('form_forum_pass')." $pass\n\n";
+
+	include_ecrire("inc_mail.php3");
+	if (envoyer_mail($mail, "[$nom_site_spip] "._T('form_forum_identifiants'), $message))
+	  return _T('form_forum_identifiant_mail');
+	else
+	  return _T('form_forum_probleme_mail');
+}
+
+function test_login($mail) {
+	if (strpos($mail, "@") > 0) $login_base = substr($mail, 0, strpos($mail, "@"));
+	else $login_base = $mail;
+
+	$login_base = strtolower($login_base);
+	$login_base = ereg_replace("[^a-zA-Z0-9]", "", $login_base);
+	if (!$login_base) $login_base = "user";
+	$login = $login_base;
+
+	for ($i = 1; ; $i++) {
+		$query = "SELECT id_auteur FROM spip_auteurs WHERE login='$login' LIMIT 1";
+		if (!spip_num_rows(spip_query($query))) return $login;
+		$login = $login_base.$i;
+	}
+
+
+}
+
+?>
diff --git a/formulaires/inc-formulaire_recherche.php3 b/formulaires/inc-formulaire_recherche.php3
new file mode 100644
index 0000000000..53c9f7c73a
--- /dev/null
+++ b/formulaires/inc-formulaire_recherche.php3
@@ -0,0 +1,26 @@
+<?php
+
+if (!defined("_ECRIRE_INC_VERSION")) return;	#securite
+
+global $balise_FORMULAIRE_RECHERCHE_collecte;
+$balise_FORMULAIRE_RECHERCHE_collecte = array();
+
+function balise_FORMULAIRE_RECHERCHE_stat($args, $filtres)
+{
+  return (lire_meta("activer_moteur") != "oui") ? '' : array($filtres[0]);
+}
+ 
+function balise_FORMULAIRE_RECHERCHE_dyn($lien) {
+	include_ecrire('inc_filtres.php3');
+	if (!$recherche_securisee = entites_html($GLOBALS['recherche'])) {
+		$recherche_securisee = _T('info_rechercher');
+	}
+
+	return array('formulaire_recherche', 3600, 
+		array(
+			'lien' => ($lien ? $lien : 'recherche.php3'),
+			'recherche_securisee' => $recherche_securisee
+		));
+}
+
+?>
\ No newline at end of file
diff --git a/formulaires/inc-formulaire_signature.php3 b/formulaires/inc-formulaire_signature.php3
new file mode 100644
index 0000000000..e687b4db7f
--- /dev/null
+++ b/formulaires/inc-formulaire_signature.php3
@@ -0,0 +1,248 @@
+<?php
+
+if (!defined("_ECRIRE_INC_VERSION")) return;	#securite
+
+//
+// Formulaire de signature d'une petition
+//
+
+global $balise_FORMULAIRE_SIGNATURE_collecte;
+$balise_FORMULAIRE_SIGNATURE_collecte = array('petition', 'id_article', 'nom_email', 'adresse_email', 'message', 'signature_nom_site', 'signature_url_site', 'url_page', 'val_confirm');
+
+function balise_FORMULAIRE_SIGNATURE_stat($args, $filtres)
+{
+  return ($args[0] ? $args : '');
+}
+
+function balise_FORMULAIRE_SIGNATURE_dyn($texte, $id_article, $nom_email, $adresse_email, $message, $nom_site, $url_site, $url_page, $val_confirm) {
+
+	include_local(_FILE_CONNECT);
+	if ($val_confirm)
+		return reponse_confirmation($id_article);
+	else if ($nom_email AND $adresse_email)
+		return  reponse_signature($id_article, $nom_email, $adresse_email, $message, $nom_site, $url_site, $url_page, $val_confirm);
+	else {
+		$row = spip_fetch_array(spip_query("SELECT * FROM spip_petitions WHERE id_article='$id_article'"));
+		return !$row ? '': array('formulaire_signature', 0, $row);
+	}
+}
+
+
+// Retour a l'ecran du lien de confirmation d'une signature de petition.
+// Si val_confirm est non vide, c'est l'appel en debut de inc-public
+// pour vider le cache au demarrage afin que la nouvelle signature apparaisse.
+// Sinon, c'est l'execution du formulaire et on retourne le message 
+// de confirmation ou d'erreur construit lors de l'appel par inc-public.
+
+function reponse_confirmation($id_article, $val_confirm = '') {
+	static $confirm = '';
+
+	if (!$val_confirm) return $confirm;
+	include_local(_FILE_CONNECT);
+	if ($GLOBALS['db_ok']) {
+		include_ecrire("inc_texte.php3");
+		include_ecrire("inc_filtres.php3");
+
+		// Eviter les doublons
+		$lock = "petition $id_article $val_confirm";
+		if (!spip_get_lock($lock, 5)) {
+			$confirm= _T('form_pet_probleme_technique');
+		}
+		else {
+			$query_sign = "SELECT * FROM spip_signatures WHERE statut='".addslashes($val_confirm)."'";
+			$result_sign = spip_query($query_sign);
+			if (spip_num_rows($result_sign) > 0) {
+				while($row = spip_fetch_array($result_sign)) {
+					$id_signature = $row['id_signature'];
+					$id_article = $row['id_article'];
+					$date_time = $row['date_time'];
+					$nom_email = $row['nom_email'];
+					$adresse_email = $row['ad_email'];
+					$nom_site = $row['nom_site'];
+					$url_site = $row['url_site'];
+					$message = $row['message'];
+					$statut = $row['statut'];
+				}
+	
+				$query_petition = "SELECT * FROM spip_petitions WHERE id_article=$id_article";
+				$result_petition = spip_query($query_petition);
+	
+				while ($row = spip_fetch_array($result_petition)) {
+					$id_article = $row['id_article'];
+					$email_unique = $row['email_unique'];
+					$site_obli = $row['site_obli'];
+					$site_unique = $row['site_unique'];
+					$message_petition = $row['message'];
+					$texte_petition = $row['texte'];
+				}
+	
+				if ($email_unique == "oui") {
+					$email = addslashes($adresse_email);
+					$query = "SELECT * FROM spip_signatures WHERE id_article=$id_article AND ad_email='$email' AND statut='publie'";
+					$result = spip_query($query);
+					if (spip_num_rows($result) > 0) {
+						$confirm= (_T('form_pet_deja_signe'));
+						$refus = "oui";
+					}
+				}
+	
+				if ($site_unique == "oui") {
+					$site = addslashes($url_site);
+					$query = "SELECT * FROM spip_signatures WHERE id_article=$id_article AND url_site='$site' AND statut='publie'";
+					$result = spip_query($query);
+					if (spip_num_rows($result) > 0) {
+						$confirm= (_T('form_pet_deja_enregistre'));
+						$refus = "oui";
+					}
+				}
+	
+				if ($refus == "oui") {
+					$confirm= (_T('form_deja_inscrit'));
+				}
+				else {
+					$query = "UPDATE spip_signatures
+					SET statut='publie', date_time=NOW()
+					WHERE id_signature='$id_signature'";
+					$result = spip_query($query);
+					// invalider les pages ayant des boucles signatures
+					include_ecrire('inc_invalideur.php3');
+					include_ecrire('inc_meta.php3');
+					suivre_invalideur("id='petition/petition'");
+	
+					$confirm= (_T('form_pet_signature_validee'));
+				}
+			}
+			else {
+				$confirm= (_T('form_pet_aucune_signature'));
+			}
+			spip_release_lock($lock);
+		}
+	}
+	else {
+		$confirm= _T('form_pet_probleme_technique');
+	}
+}
+
+//
+// Retour a l'ecran de la signature d'une petition
+//
+
+function reponse_signature($id_article, $nom_email, $adresse_email, $message, $nom_site, $url_site, $url_page, $val_confirm) {
+
+	if ($GLOBALS['db_ok']) {
+		include_ecrire("inc_texte.php3");
+		include_ecrire("inc_filtres.php3");
+		include_ecrire("inc_mail.php3");
+
+		// Eviter les doublons
+		$lock = "petition $id_article $adresse_email";
+		if (!spip_get_lock($lock, 5)) {
+			return _T('form_pet_probleme_technique');
+		} else {
+			$query_petition = "SELECT * FROM spip_petitions WHERE id_article=$id_article";
+			$result_petition = spip_query($query_petition);
+	
+			while ($row = spip_fetch_array($result_petition)) {
+				$id_article = $row['id_article'];
+				$email_unique = $row['email_unique'];
+				$site_obli = $row['site_obli'];
+				$site_unique = $row['site_unique'];
+				$message_petition = $row['message'];
+				$texte_petition = $row['texte'];
+			}
+	
+			if (strlen($nom_email) < 2) {
+				return (_T('form_indiquer_nom'));
+			}
+	
+			if ($adresse_email == _T('info_mail_fournisseur')) {
+				return (_T('form_indiquer_email'));
+			}
+	
+			if ($email_unique == "oui") {
+				$email = addslashes($adresse_email);
+				$query = "SELECT * FROM spip_signatures WHERE id_article=$id_article AND ad_email='$email' AND statut='publie'";
+				$result = spip_query($query);
+				if (spip_num_rows($result) > 0) {
+					return (_T('form_pet_deja_signe'));
+				}
+			}
+	
+			if (!email_valide($adresse_email)) {
+				return (_T('form_email_non_valide'));
+			}
+	
+			if ($site_obli == "oui") {
+				if (!$nom_site) {
+					return (_T('form_indiquer_nom_site'));
+				}
+				include_ecrire("inc_sites.php3");
+	
+				if (!recuperer_page($url_site)) {
+					return (_T('form_pet_url_invalide'));
+				}
+			}
+			if ($site_unique == "oui") {
+				$site = addslashes($url_site);
+				$query = "SELECT * FROM spip_signatures WHERE id_article=$id_article AND url_site='$site' AND (statut='publie' OR statut='poubelle')";
+				$result = spip_query($query);
+				if (spip_num_rows($result) > 0) {
+					return (_T('form_pet_site_deja_enregistre'));
+				}
+			}
+	
+			$passw = test_pass();
+	
+			if ($refus == "oui") {
+				return _T('form_pet_signature_pasprise');
+			}
+			else {
+				$query_site = "SELECT titre FROM spip_articles WHERE id_article=$id_article";
+				$result_site = spip_query($query_site);
+				while ($row = spip_fetch_array($result_site)) {
+					$titre = $row['titre'];
+				}
+
+				$link = new Link($url_page);
+				$link->addVar('val_confirm', $passw);
+				$url = $link->getUrl("sp$id_article");
+	
+				$messagex = _T('form_pet_mail_confirmation', array('titre' => $titre, 'nom_email' => $nom_email, 'nom_site' => $nom_site, 'url_site' => $url_site, 'url' => $url));
+
+				if (envoyer_mail($adresse_email, _T('form_pet_confirmation')." ".$titre, $messagex)) {
+
+					$nom_email = addslashes($nom_email);
+					$adresse_email = addslashes($adresse_email);
+					$nom_site = addslashes($nom_site);
+					$url_site = addslashes($url_site);
+					$message = addslashes($message);
+	
+					spip_query("INSERT INTO spip_signatures (id_article, date_time, nom_email, ad_email, nom_site, url_site, message, statut) VALUES ($id_article, NOW(), '$nom_email', '$adresse_email', '$nom_site', '$url_site', '$message', '$passw')");
+					return _T('form_pet_envoi_mail_confirmation');
+				}
+				else {
+					return _T('form_pet_probleme_technique');
+				}
+			}
+			spip_release_lock($lock);
+		}
+	}
+	else {
+		return _T('form_pet_probleme_technique');
+	}
+
+}
+
+
+function test_pass() {
+	include_ecrire("inc_acces.php3");
+	for (;;) {
+		$passw = creer_pass_aleatoire();
+		$query = "SELECT statut FROM spip_signatures WHERE statut='$passw'";
+		$result = spip_query($query);
+		if (!spip_num_rows($result)) break;
+	}
+	return $passw;
+}
+
+?>
diff --git a/formulaires/inc-formulaire_site.php3 b/formulaires/inc-formulaire_site.php3
new file mode 100644
index 0000000000..21576c0fac
--- /dev/null
+++ b/formulaires/inc-formulaire_site.php3
@@ -0,0 +1,37 @@
+<?php
+
+if (!defined("_ECRIRE_INC_VERSION")) return;	#securite
+
+global $balise_FORMULAIRE_SITE_collecte;
+$balise_FORMULAIRE_SITE_collecte = array('id_rubrique', 'nom_site', 'url_site', 'description_site');
+
+function balise_FORMULAIRE_SITE_stat($args, $filtres)
+{
+  return ((lire_meta("proposer_sites") != 2) ? '' : $args);
+}
+
+function balise_FORMULAIRE_SITE_dyn($id_rubrique, $nom_site, $url_site, $description_site) {
+
+	if (!$nom_site) return array('formulaire_site', 0);
+
+	// Tester le nom du site
+	if (strlen ($nom_site) < 2){
+		return _T('form_prop_indiquer_nom_site');
+	}
+
+	// Tester l'URL du site
+	include_ecrire("inc_sites.php3");
+	if (!recuperer_page($url_site)) {
+		return _T('form_pet_url_invalide');
+	}
+
+	// Integrer a la base de donnees
+		
+	$nom_site = addslashes($nom_site);
+	$url_site = addslashes($url_site);
+	$description_site = addslashes($description_site);
+			
+	spip_query("INSERT INTO spip_syndic (nom_site, url_site, id_rubrique, descriptif, date, date_syndic, statut, syndication) VALUES ('$nom_site', '$url_site', $id_rubrique, '$description_site', NOW(), NOW(), 'prop', 'non')");
+	return  _T('form_prop_enregistre');
+}
+?>
diff --git a/formulaires/inc-login_prive.php3 b/formulaires/inc-login_prive.php3
new file mode 100644
index 0000000000..cd7bdc7c56
--- /dev/null
+++ b/formulaires/inc-login_prive.php3
@@ -0,0 +1,30 @@
+<?php
+
+if (!defined("_ECRIRE_INC_VERSION")) return;	#securite
+
+include_local(find_in_path("inc-login_public.php3"));
+
+global $balise_LOGIN_PRIVE_collecte;
+$balise_LOGIN_PRIVE_collecte = array('url');
+
+# retourner:
+# 1. l'url collectee ci-dessus (args0) ou donnee en filtre (filtre0)
+# 2. l'eventuel parametre de la balise (args1) fournie par
+#    calculer_balise_dynamique, en l'occurence le #LOGIN courant si l'on
+#    programme une <boucle(AUTEURS)>[(#LOGIN_PUBLIC{#LOGIN})]
+
+function balise_LOGIN_PRIVE_stat ($args, $filtres) {
+
+	if (!$cible = $filtres[0])
+		$cible = $args[0];
+
+	$login = $args[1];
+
+	return array($cible, $login, $simple);
+}
+
+function balise_LOGIN_PRIVE_dyn($cible, $login) {
+	return login_explicite($login, $cible, 'redac');
+}
+
+?>
diff --git a/formulaires/inc-login_public.php3 b/formulaires/inc-login_public.php3
new file mode 100644
index 0000000000..c8e50852a7
--- /dev/null
+++ b/formulaires/inc-login_public.php3
@@ -0,0 +1,147 @@
+<?php
+
+if (!defined("_ECRIRE_INC_VERSION")) return;	#securite
+
+include(_FILE_CONNECT);
+include_ecrire("inc_meta.php3");
+include_ecrire("inc_session.php3");
+include_ecrire("inc_filtres.php3");
+
+global $balise_LOGIN_PUBLIC_collecte;
+$balise_LOGIN_PUBLIC_collecte = array('url');
+
+# retourner:
+# 1. l'url collectee ci-dessus (args0) ou donnee en filtre (filtre0)
+# 2. l'eventuel parametre de la balise (args1) fournie par calculer_balise_dynamique
+
+function balise_LOGIN_PUBLIC_stat ($args, $filtres)
+{
+	return array($filtres[0] ? $filtres[0] : $args[0], $args[1]);
+}
+
+function balise_LOGIN_PUBLIC_dyn($cible, $login)
+{
+	if (!$cible) {
+		global $clean_link;
+		$clean_link->delVar('var_erreur');
+		$clean_link->delVar('var_login');
+		$cible = $clean_link->getUrl();
+	}
+	return login_explicite($login, $cible, 'forum');
+}
+
+function login_explicite($login, $cible, $mode) {
+	global $auteur_session, $clean_link;
+
+	$clean_link->delVar('var_erreur');
+	$clean_link->delVar('var_login');
+	$action = $clean_link->getUrl();
+
+	if ($cible) {
+	  $cible = ereg_replace("[?&]var_erreur=[^&]*", '', $cible);
+	  $cible = ereg_replace("[?&]var_login=[^&]*", '', $cible);
+	} else {
+	  if (ereg("[?&]url=([^&]*)", $action, $m))
+	    $cible = urldecode($m[1]);
+	  else
+	    $cible = _DIR_RESTREINT ;
+	}
+	      
+	include_ecrire("inc_session.php3");
+	verifier_visiteur();
+
+	if ($auteur_session AND 
+	($auteur_session['statut']=='0minirezo' OR $auteur_session['statut']=='1comite')) {
+		if (($cible != $action) &&  !headers_sent())
+			redirige_par_entete($cible);
+		return http_href($cible, _T('login_par_ici'));
+	}
+	return login_pour_tous($login ? $login : $GLOBALS['var_login'], $cible, '', $action, $mode);
+}
+
+// fonction aussi pour les forums sur abonnement
+
+function login_pour_tous($login, $cible, $message, $action, $mode) {
+	global $ignore_auth_http, $spip_admin, $php_module, $_SERVER;
+
+	// en cas d'echec de cookie, inc_auth a renvoye vers spip_cookie qui
+	// a tente de poser un cookie ; s'il n'est pas la, c'est echec cookie
+	// s'il est la, c'est probablement un bookmark sur bonjour=oui,
+	// et pas un echec cookie.
+	if ($GLOBALS['var_echec_cookie'])
+		$echec_cookie = ($GLOBALS['spip_session'] != 'test_echec_cookie');
+	$auth_http = ($echec_cookie AND $php_module AND !$ignore_auth_http) ?
+		'spip_cookie.php3' : '';
+	// Attention dans le cas 'intranet' la proposition de se loger
+	// par auth_http peut conduire a l'echec.
+	if ($_SERVER['PHP_AUTH_USER'] AND $_SERVER['PHP_AUTH_PW'])
+		$auth_http = '';
+
+	// Le login est memorise dans le cookie d'admin eventuel
+	if (!$login) {
+		if (ereg("^@(.*)$", $spip_admin, $regs))
+			$login = $regs[1];
+	} else if ($login == '-1')
+	  $login = '';
+
+	$row = array();
+	$erreur = '';
+	if ($login) {
+		$row = spip_query("SELECT * FROM spip_auteurs WHERE login='" .addslashes($login) ."'");
+		$row =  spip_fetch_array($row);
+		if ((!$row AND !$GLOBALS['ldap_present']) OR
+		    ($row['statut'] == '5poubelle') OR 
+		    (($row['source'] == 'spip') AND $row['pass'] == '')) {
+			$erreur =  _T('login_identifiant_inconnu',
+				array('login' => htmlspecialchars($login)));
+ 			$row = array();
+			$login = '';
+			@spip_setcookie("spip_admin", "", time() - 3600);
+		} else {
+		  // on laisse le menu decide de la langue
+		  unset($row['lang']);
+		}
+	}
+
+	// afficher "erreur de mot de passe" si &var_erreur=pass
+	if ($GLOBALS['var_erreur'] == 'pass')
+		$erreur = _T('login_erreur_pass');
+
+	// url des inscriptions 
+	$inscription = ((lire_meta("accepter_inscriptions") == "oui") OR
+			(($mode == 'forum')
+			 AND (lire_meta("accepter_visiteurs") == "oui"
+			      OR lire_meta('forums_publics') == 'abo'))) ?
+			'spip_inscription.php3' : '';
+
+	return array('formulaire_login', 0, 
+		     array_merge(array_map('addslashes', $row),
+				 array(
+				       'action2' => ($login ? 'spip_cookie.php3' : $action),
+				       'erreur' => $erreur,
+				       'action' => $action,
+				       'url' => $cible,
+				       'auth_http' => $auth_http,
+				       'echec_cookie' => ($echec_cookie ? ' ' : ''),
+				       'message' => ($message ? ' ' : ''),
+				       'inscription'  => $inscription
+				       )
+				 )
+		     );
+
+}
+
+// Bouton duree de connexion
+
+function filtre_rester_connecte($prefs)
+{
+	$prefs = unserialize(stripslashes($prefs));
+	return $prefs['cnx'] == 'perma' ? ' ' : '';
+}
+
+function silogoauteur($id_auteur)
+{
+  $f = _DIR_IMG . 'auton' . $id_auteur . '.jpg';
+  return (@file_exists($f) ? $f : '');
+}
+?>
diff --git a/formulaires/inc-menu_lang.php3 b/formulaires/inc-menu_lang.php3
new file mode 100644
index 0000000000..2761df5a2c
--- /dev/null
+++ b/formulaires/inc-menu_lang.php3
@@ -0,0 +1,26 @@
+<?php
+
+if (!defined("_ECRIRE_INC_VERSION")) return;	#securite
+
+global $balise_MENU_LANG_collecte;
+$balise_MENU_LANG_collecte = array('menu_lang');
+
+// s'il n'y a qu'une langue eviter definitivement la balise ?php 
+
+function balise_MENU_LANG_stat ($args, $filtres)
+{
+  if (!strpos(lire_meta('langues_multilingue'),',')) return '';
+  return $args;
+}
+
+// normalement $opt sera toujours non vide suite au test ci-dessus
+
+function balise_MENU_LANG_dyn($default)
+{
+  include_ecrire("inc_lang.php3");
+  $opt = liste_options_langues('var_lang', $default);
+  if (!$opt) return '';
+  include_local("inc-menu_lang_ecrire.php3");
+  return menu_lang_pour_tous('var_lang', $opt);
+}
+?>
diff --git a/formulaires/inc-menu_lang_ecrire.php3 b/formulaires/inc-menu_lang_ecrire.php3
new file mode 100644
index 0000000000..f2fec55e4f
--- /dev/null
+++ b/formulaires/inc-menu_lang_ecrire.php3
@@ -0,0 +1,41 @@
+<?php
+
+if (!defined("_ECRIRE_INC_VERSION")) return;	#securite
+
+global $balise_MENU_LANG_ECRIRE_collecte;
+$balise_MENU_LANG_ECRIRE_collecte = array('menu_lang');
+
+// s'il n'y a qu'une langue proposee eviter definitivement la balise ?php 
+
+function balise_MENU_LANG_ECRIRE_stat ($args, $filtres)
+{
+  if (!strpos(lire_meta('langues_proposees'),',')) return '';
+  return $args;
+}
+
+// normalement $opt sera toujours non vide suite au test ci-dessus
+
+function balise_MENU_LANG_ECRIRE_dyn($default)
+{
+  include_ecrire("inc_lang.php3");
+  $opt = liste_options_langues('var_lang_ecrire', $default);
+  return (!$opt ? '' : menu_lang_pour_tous('var_lang_ecrire', $opt));
+}
+
+function menu_lang_pour_tous($nom, $opt)
+{
+  $site = lire_meta("adresse_site");
+  $post = ($site ? $site : '..') . "/spip_cookie.php3";
+  $cible = $GLOBALS['clean_link']->getUrl();
+  $postcomplet = new Link($post);
+  $postcomplet->addvar('url', $cible);
+
+  return array('formulaire_menu_lang',
+	       10, 
+	       array('nom' => $nom,
+		     'url' => $post,
+		     'cible' => $cible,
+		     'retour' => $postcomplet->getUrl(),
+		     'langues' => $opt));
+}
+?>
diff --git a/formulaires/inc-url_logout.php3 b/formulaires/inc-url_logout.php3
new file mode 100644
index 0000000000..4cc8f4ad40
--- /dev/null
+++ b/formulaires/inc-url_logout.php3
@@ -0,0 +1,20 @@
+<?php
+
+if (!defined("_ECRIRE_INC_VERSION")) return;	#securite
+
+global $balise_URL_LOGOUT_collecte;
+$balise_URL_LOGOUT_collecte = array();
+
+function balise_URL_LOGOUT_stat ($args, $filtres)
+{
+  return array($filtres[0]);
+}
+
+function balise_URL_LOGOUT_dyn($cible)
+{
+	if (!$login = $GLOBALS['auteur_session']['login'])
+	  return '';
+	if (!$cible) $cible = $GLOBALS['clean_link']->getUrl();
+	return 'spip_cookie.php3?logout_public=' . $login . '&amp;url=' . urlencode($cible);
+}
+?>
-- 
GitLab