Browse Source

dépôt git initialisé

master
chankalan 2 years ago
commit
70678c8416
  1. 4
      401.html
  2. 3
      article.html
  3. 2
      aside/dist.html
  4. 10
      aside/z_apl.html
  5. 3
      auteur.html
  6. 43
      backend.html
  7. 44
      baz_april_administrations.php
  8. 40
      baz_april_fonctions.php
  9. 44
      baz_april_options.php
  10. 3
      baz_april_pipelines.php
  11. 37
      body.html
  12. 5
      breadcrumb/401.html
  13. 5
      breadcrumb/404.html
  14. 8
      breadcrumb/auteur.html
  15. 15
      breadcrumb/dist.html
  16. 7
      breadcrumb/inc-objet.html
  17. 10
      breadcrumb/login.html
  18. 8
      breadcrumb/mot.html
  19. 4
      breadcrumb/plan.html
  20. 4
      breadcrumb/recherche.html
  21. 10
      content/401.html
  22. 10
      content/404.html
  23. 48
      content/article.html
  24. 22
      content/auteur.html
  25. 17
      content/login.html
  26. 49
      content/mot.html
  27. 60
      content/plan.html
  28. 14
      content/recherche.html
  29. 75
      content/rubrique-blog.html
  30. 6
      content/rubrique-blog.xml
  31. 3
      content/rubrique-pagerubrique.html
  32. 5
      content/rubrique-pagerubrique.xml
  33. 54
      content/rubrique.html
  34. 23
      content/site.html
  35. 33
      content/sommaire.html
  36. 16
      content/spip_pass.html
  37. 10
      content/z_apl.html
  38. 7
      extra/article.html
  39. 15
      extra/auteur.html
  40. 2
      extra/dist.html
  41. 31
      extra/mot.html
  42. 17
      extra/rubrique.html
  43. 27
      extra/site.html
  44. 2
      extra/sommaire.html
  45. 10
      extra/z_apl.html
  46. 30
      footer/dist.html
  47. 22
      formulaires/configurer_baz_april.html
  48. 57
      formulaires/login.html
  49. 333
      formulaires/login.php
  50. 12
      formulaires/recherche.html
  51. 2
      head/404.html
  52. 5
      head/article.html
  53. 11
      head/auteur.html
  54. 26
      head/dist.html
  55. 6
      head/mot.html
  56. 3
      head/plan.html
  57. 2
      head/recherche.html
  58. 7
      head/rubrique.html
  59. 5
      head/site.html
  60. 23
      head/sommaire.html
  61. 0
      head_js/dist.html
  62. 6
      header/dist.html
  63. 9
      inclure/archives-mois.html
  64. 10
      inclure/article-hero.html
  65. 10
      inclure/articles-resume.html
  66. 16
      inclure/articles.html
  67. 5
      inclure/boussole.html
  68. 31
      inclure/documents.html
  69. 40
      inclure/head.html
  70. 10
      inclure/liste-articles.html
  71. 25
      inclure/liste-rubriques.html
  72. 17
      inclure/mots-articles-rubrique.html
  73. 10
      inclure/nav-secteurs.html
  74. 9
      inclure/periode-mois.html
  75. 45
      inclure/petition.html
  76. 13
      inclure/resume/article.html
  77. 13
      inclure/resume/rubrique.html
  78. 12
      inclure/resume/site.html
  79. 9
      inclure/resume/syndic_article.html
  80. 55
      inclure/rss-item.html
  81. 56
      inclure/rubriques.html
  82. 26
      js/baz_script.js
  83. 780
      js/css3-mediaqueries.js
  84. 8
      js/html5shiv.js
  85. 15
      lang/baz_april_fr.php
  86. 12
      lang/paquet-baz_april_fr.php
  87. 13
      liste/articles-auteur.html
  88. 13
      liste/articles-recherche.html
  89. 10
      liste/articles-resume.html
  90. 13
      liste/rubriques-recherche.html
  91. 18
      liste/syndicarticles.html
  92. 8
      modeles/icone.html
  93. 16
      modeles/iconebloc.html
  94. 51
      modeles/imagesenligne.html
  95. 9
      modeles/rubrique_articles.html
  96. 3
      modeles/rubrique_rubriques.html
  97. 3
      mot.html
  98. 40
      paquet.xml
  99. 6
      prive/squelettes/contenu/configurer_baz_april.html
  100. 27
      readme.md

4
401.html

@ -0,0 +1,4 @@
#HTTP_HEADER{#VAL{"HTTP/1.0 "}|concat{#ENV{code,"401 Not Found"}}}
#HTTP_HEADER{"Cache-Control: no-store, no-cache, must-revalidate"}
#HTTP_HEADER{Pragma: no-cache}
<INCLURE{fond=structure,env,type-page=#ENV{status,401}} />

3
article.html

@ -0,0 +1,3 @@
<BOUCLE_principale_article(ARTICLES){id_article}>
<INCLURE{fond=structure,env,id_rubrique=#ENV{id_rubrique,#ID_RUBRIQUE},id_secteur=#ID_SECTEUR,type-page=article,composition=#COMPOSITION} />
</BOUCLE_principale_article>

2
aside/dist.html

@ -0,0 +1,2 @@
[(#REM) Menu de navigation par rubriques ]
<INCLURE{fond=inclure/rubriques,env,type-page,composition} />

10
aside/z_apl.html

@ -0,0 +1,10 @@
[(#REM)
Squelette Big_Pipe
http://www.facebook.com/notes/facebook-engineering/bigpipe-pipelining-web-pages-for-high-performance/389414033919
(c) 2010 Cedric Morin
Distribue sous licence GPL
]#CACHE{0}
#INCLURE{fond=inclure/ajax_parallel_load,bloc=#SQUELETTE}

3
auteur.html

@ -0,0 +1,3 @@
<BOUCLE_principale_auteur(AUTEURS){id_auteur}>
<INCLURE{fond=structure,env,type-page=auteur,composition=#COMPOSITION} />
</BOUCLE_principale_auteur>

43
backend.html

@ -0,0 +1,43 @@
[(#REM)
Ce fichier sert à créer les flux RSS
qui permettent aux visiteurs de suivre l'actualité
de votre site depuis un lecteur de news.
Cette page génère un code XML/RSS adapté
][(#HTTP_HEADER{Content-type: text/xml[; charset=(#CHARSET)]})]<?xml
version="1.0"[ encoding="(#CHARSET)"]?>
<rss version="2.0" [(#REM) rss 2.0.9)]
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:atom="http://www.w3.org/2005/Atom"
>
<channel[ xml:lang="(#LANG)"]>
<title>[(#NOM_SITE_SPIP|textebrut|texte_backend)]</title>
<link>#URL_SITE_SPIP/</link>
[<description>(#DESCRIPTIF_SITE_SPIP|supprimer_tags|texte_backend)</description>]
<language>#LANG</language>
<generator>SPIP - www.spip.net</generator>
<atom:link href="[(#SELF|url_absolue)]" rel="self" type="application/rss+xml" />
[ <image>
<title>[(#NOM_SITE_SPIP|texte_backend)]</title>
<url>(#LOGO_SITE_SPIP|image_reduire{144,400}|extraire_attribut{src}|url_absolue|texte_backend)</url>
<link>#URL_SITE_SPIP/</link>
[<height>(#LOGO_SITE_SPIP|image_reduire{144,400}|extraire_attribut{height})</height>]
[<width>(#LOGO_SITE_SPIP|image_reduire{144,400}|extraire_attribut{width})</width>]
</image>
]
<BOUCLE_10recents(ARTICLES){id_rubrique>0}{lang ?}{branche ?}{id_mot ?}{id_auteur ?}{par date}{inverse}{0,10}{unique}>
<INCLURE{fond=inclure/rss-item,id_article} />
</BOUCLE_10recents>
<BOUCLE_tres_recents(ARTICLES){id_rubrique>0}{lang ?}{branche ?}{id_mot ?}{id_auteur ?}{par date}{inverse}{age<3}{unique}>
<INCLURE{fond=inclure/rss-item,id_article} />
</BOUCLE_tres_recents>
</channel>
</rss>

44
baz_april_administrations.php

@ -0,0 +1,44 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
include_spip('inc/meta');
// Installation et mise à jour sur modele sjcycle
function baz_april_upgrade($nom_meta_version_base, $version_cible) {
// Création du tableau des mises à jour.
$maj = array();
$config_fdr = array(
'titre' => 'Manuel du site'
);
$config_crayons = array (
'barretypo' => 'on',
'msgAbandon' => 'on',
'clickhide' => 'on'
);
$config_compositions = array(
'masquer_formulaire' => 'oui'
);
$config_baz_april = array(
'afficherauteurs' => 'non'
);
// Tableau de la configuration par défaut
$maj['create'] = array(
array('ecrire_config', 'feuillederoute', $config_fdr),
array('ecrire_config', 'crayons', $config_crayons),
array('ecrire_config', 'compositions', $config_compositions),
array('ecrire_config', 'baz_april', $config_baz_april),
array('ecrire_config', 'version_html_max', 'html5'),
);
// Maj du plugin.
include_spip('base/upgrade');
maj_plugin($nom_meta_version_base, $version_cible, $maj);
}
// Désinstallation
function baz_april_vider_tables($nom_meta_version_base) {
effacer_meta('baz');
effacer_meta($nom_meta_version_base);
}

40
baz_april_fonctions.php

@ -0,0 +1,40 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
/* reprise d'une fonction du plugin Agenda
* renommee pour eviter plantage
https://zone.spip.org/trac/spip-zone/browser/_plugins_/agenda/trunk/agenda_fonctions.php#L32
*/
/**
* decale les mois de la date.
* cette fonction peut raboter le jour si le nouveau mois ne les contient pas
* exemple 31/01/2007 + 1 mois => 28/02/2007
*
* @param string $date
* @param int $decalage
* @param string $format
* @return string
*/
function baz_moisdecal($date, $decalage, $format = 'Y-m-d H:i:s') {
include_spip('inc/filtres');
$date_array = recup_date($date);
if ($date_array) {
list($annee, $mois, $jour) = $date_array;
}
if (!$jour) {
$jour = 1;
}
if (!$mois) {
$mois = 1;
}
$mois2 = $mois + $decalage;
$date2 = mktime(1, 1, 1, $mois2, $jour, $annee);
// mois normalement attendu
$mois3 = date('m', mktime(1, 1, 1, $mois2, 1, $annee));
// et si le mois de la nouvelle date a moins de jours...
$mois2 = date('m', $date2);
if ($mois2 - $mois3) {
$date2 = mktime(1, 1, 1, $mois2, 0, $annee);
}
return date($format, $date2);
}

44
baz_april_options.php

@ -0,0 +1,44 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
// les blocs de baz
if (!isset($GLOBALS['z_blocs'])) {
$GLOBALS['z_blocs'] = array('content','aside','extra','head','head_js','header','footer','breadcrumb');
}
// les images de plus de 2000*1000 pixels de haut seront réduites en 2000x1000 maximum
// define('_IMG_MAX_WIDTH', 2000);
// define('_IMG_MAX_HEIGHT', 1000);
// surligner le terme de recherche
define('_SURLIGNE_RECHERCHE_REFERERS',true);
if (isset($_REQUEST['recherche'])) {
$_GET['var_recherche'] = $_REQUEST['recherche'];
}
// les images de plus de 2000*1000 pixels de haut seront réduites en 2000x1000 maximum
// define('_IMG_MAX_WIDTH', 2000);
// define('_IMG_MAX_HEIGHT', 1600);
// $GLOBALS['quota_cache'] = 200;
define('_DUREE_CACHE_DEFAUT', 24*3600*90);
// pour sauter une ligne en rédaction
// $GLOBALS['ligne_horizontale'] = '<br class="clear" />';
// afficher les erreurs
// define('_NO_CACHE', -1);
// define('_INTERDIRE_COMPACTE_HEAD_ECRIRE', true);
// error_reporting(E_ALL^E_NOTICE);
// ini_set ("display_errors", "On");
// define('SPIP_ERREUR_REPORT',E_ALL);
// $GLOBALS['taille_des_logs'] = 500;
// define('_MAX_LOG', 500000);
// define('_LOG_FILELINE',true);
// define('_LOG_FILTRE_GRAVITE',8);
// define('_DEBUG_SLOW_QUERIES', true);
// define('_BOUCLE_PROFILER', 5000);
$GLOBALS['debut_intertitre'] = "\n<h2 class=\"spip\">\n";
$GLOBALS['fin_intertitre'] = "</h2>\n";

3
baz_april_pipelines.php

@ -0,0 +1,3 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;

37
body.html

@ -0,0 +1,37 @@
<body class="body[--(#ENV{type-page})][ body--(#COMPOSITION)]">
<ul class="accesrapide accesrapide--main">
<li class="accesrapide"><a class="accesrapide__lien visuallyhidden focusable" href="#contenu"><:baz_april:evitement_contenu:></a></li>
<li class="accesrapide"><a class="accesrapide__lien visuallyhidden focusable" href="#navigation"><:baz_april:evitement_navigation:></a></li>
</ul>
<div id="boussole_spip">[(#REM) La boussole SPIP va s'insérer ici ]</div>
<div class="page__wrapper">
<header class="page__header">
<div class="page--container">
<INCLURE{fond=header/#ENV{type-page},env} />
<INCLURE{fond=inclure/nav-secteurs,env} />
<INCLURE{fond=inclure/boussole} />
</div>
</header>
<div class="page__content page--container">
<main class="contentMain">
<INCLURE{fond=content/#ENV{type-page},env,composition} />
<aside class="contentMain__extra">
<INCLURE{fond=extra/#ENV{type-page},env} />
</aside>
</main><!--.main-->
<aside class="contentAside">
<INCLURE{fond=aside/#ENV{type-page},env} />
</aside><!--.aside-->
</div>
<footer class="page__footer">
<div class="page--container">
<INCLURE{fond=footer/#ENV{type-page},env} />
</div>
</footer>
</div><!--.container-->
</body>

5
breadcrumb/401.html

@ -0,0 +1,5 @@
[(#REM) Fil d'Ariane ]
<nav class="arbo" aria-label="Fil d'Ariane">
<a href="#URL_SITE_SPIP/"><:accueil_site:></a> <span class="divider"> &gt; </span>
<span class="active"><:pass_erreur:>[ (#ENV{status})]</span>
</nav>

5
breadcrumb/404.html

@ -0,0 +1,5 @@
[(#REM) Fil d'Ariane ]
<nav class="arbo" aria-label="Fil d'Ariane">
<a href="#URL_SITE_SPIP/"><:accueil_site:></a> <span class="divider"> &gt; </span>
<span class="active"><:pass_erreur:> 404</span>
</nav>

8
breadcrumb/auteur.html

@ -0,0 +1,8 @@
<BOUCLE_content(AUTEURS){id_auteur}>
[(#REM) Fil d'Ariane ]
<nav class="arbo" aria-label="Fil d'Ariane">
<a href="#URL_SITE_SPIP/"><:accueil_site:></a><span class="divider"> &gt; </span>
<:info_auteurs:><span class="divider"> &gt; </span>
[<span class="active">(#NOM|couper{80})</span>]
</nav>
</BOUCLE_content>

15
breadcrumb/dist.html

@ -0,0 +1,15 @@
<nav class="arbo" aria-label="Fil d'Ariane">
#SET{objet,''}#SET{id_objet,''}
[(#ENV{id_rubrique}|oui)#SET{objet,rubrique}#SET{id_objet,#ENV{id_rubrique}}]
[(#ENV{id_syndic}|oui)#SET{objet,site}#SET{id_objet,#ENV{id_syndic}}]
[(#ENV{id_breve}|oui)#SET{objet,breve}#SET{id_objet,#ENV{id_breve}}]
[(#ENV{id_article}|oui)#SET{objet,article}#SET{id_objet,#ENV{id_article}}]
[(#ENV{id_objet}|oui)#SET{objet,#ENV{objet}}#SET{id_objet,#ENV{id_objet}}]
[(#GET{objet}|oui)
#INCLURE{fond=breadcrumb/inc-objet,id_objet=#GET{id_objet},objet=#GET{objet}}
][(#GET{objet}|non)
<a href="#URL_SITE_SPIP/"><:accueil_site:></a>
]
</nav>

7
breadcrumb/inc-objet.html

@ -0,0 +1,7 @@
<a href="#URL_SITE_SPIP/"><:accueil_site:></a><span class="divider"> &gt; </span>
<BOUCLE_contexte_rubrique(RUBRIQUES) {id_rubrique=(#OBJET|=={rubrique}|?{#INFO_ID_PARENT{#OBJET,#ID_OBJET},#INFO_ID_RUBRIQUE{#OBJET,#ID_OBJET}})}>
<BOUCLE_ariane_hier(HIERARCHIE) {id_rubrique}{tout}>
<a href="#URL_RUBRIQUE">[(#TITRE|couper{80})]</a><span class="divider"> &gt; </span>
</BOUCLE_ariane_hier>
</BOUCLE_contexte_rubrique>
<span[(#ENV{expose,' '}|oui)class="active"]>[(#ID_OBJET|generer_url_entite{#OBJET}|lien_ou_expose{#INFO_TITRE{#OBJET,#ID_OBJET}|sinon{?}|couper{80},#ENV{expose,' '}|?{span}})]</span>[<span class="divider">(#ENV{expose,' '}|non)&gt; </span>]

10
breadcrumb/login.html

@ -0,0 +1,10 @@
[(#REM)
Est-ce qu'on se connecte a l'espace prive ou pas ?
]#SET{prive,''}
[(#ENV{url}|=={''}|?{#SET{prive,' '}})]
[(#ENV{url}|match{^#EVAL{_DIR_RESTREINT_ABS}}|?{#SET{prive,' '}})]
[(#REM) Fil d'Ariane ]
<nav class="arbo" aria-label="Fil d'Ariane"><a href="#URL_SITE_SPIP/"><:accueil_site:></a>
[<span class="divider"> &gt; </span><strong class="on">(#GET{prive}|?{<:login_acces_prive:>,<:lien_connecter:>})</strong>]
</nav>

8
breadcrumb/mot.html

@ -0,0 +1,8 @@
<BOUCLE_content(MOTS) {id_mot} {doublons}>
<nav class="arbo" aria-label="Fil d'Ariane">
<a href="#URL_SITE_SPIP/"><:accueil_site:></a><span class="divider"> &gt; </span>
<span><:mots_clefs:></span><span class="divider"> &gt; </span>
<BOUCLE_ariane(GROUPES_MOTS){id_groupe}><span>[(#TITRE|couper{80})]</span><span class="divider"> &gt; </span></BOUCLE_ariane>
<span class="active">[(#TITRE|couper{80})]</span>
</nav>
</BOUCLE_content>

4
breadcrumb/plan.html

@ -0,0 +1,4 @@
<nav class="arbo" aria-label="Fil d'Ariane">
<a href="#URL_SITE_SPIP/"><:accueil_site:></a><span class="divider"> &gt; </span>
<span class="active"><:plan_site:></span>
</nav>

4
breadcrumb/recherche.html

@ -0,0 +1,4 @@
<nav class="arbo" aria-label="Fil d'Ariane">
<a href="#URL_SITE_SPIP/"><:accueil_site:></a><span class="divider"> &gt; </span>
<span class="active"><:info_rechercher:> [&laquo; <strong class="on">(#RECHERCHE)</strong> &raquo;]</span>
</nav>

10
content/401.html

@ -0,0 +1,10 @@
[(#REM) Fil d'Ariane ]
<section class="content">
<header class="cartouche">
<h1><:pass_erreur:>[ (#ENV{status})]</h1>
<INCLURE{fond=breadcrumb/#ENV{type-page},env} />
</header>
<div class="main">
[<div class="chapo">(#ENV{erreur})</div>]
</div>
</section>

10
content/404.html

@ -0,0 +1,10 @@
[(#REM) Fil d'Ariane ]
<section class="content">
<header class="cartouche">
<h1><:pass_erreur:> 404</h1>
<INCLURE{fond=breadcrumb/#ENV{type-page},env} />
</header>
<div class="main">
[<div class="chapo">(#ENV{erreur})</div>]
</div>
</section>

48
content/article.html

@ -0,0 +1,48 @@
<BOUCLE_content(ARTICLES){id_article}>
<article class="content" id="content">
<header class="cartouche">
[<p class="#EDIT{surtitre} surtitre">(#SURTITRE)</p>]
<h1><span class="#EDIT{titre}">#TITRE</span>[
<small class="#EDIT{soustitre} soustitre">(#SOUSTITRE)</small>
]</h1>
[(#ENV{composition}|=={blog}|oui)<INCLURE{fond=breadcrumb/rubrique-blog,env} />]
[(#ENV{composition}|=={blog}|non)<INCLURE{fond=breadcrumb/article,env} />]
[<p class="publication"><time datetime="[(#DATE|date_iso)]"><i class="icon-calendar"></i> (#DATE|affdate)</time></p>][(#CONFIG{baz_april/afficherauteurs}|=={on}|oui)[<p class="auteurs"><:par_auteur:> (#LESAUTEURS)</p>]]
[(#REM) Inclure le modele des liens de traductions ]
<div class="postmeta">
#MODELE{article_traductions}
<B_tags>
<span class="tags">
<span class="sep">|</span>
<ul class="inline">
<BOUCLE_tags(MOTS){id_article}>
<li><a class="label" href="#URL_MOT"><i class="icon-tag"></i> #TITRE</a></li>
</BOUCLE_tags>
</ul>
</span>
</B_tags>
</div>
</header>
<div class="main">
[<div class="#EDIT{chapo} chapo surlignable">(#CHAPO|image_reduire{700,*})</div>]
[<div class="#EDIT{texte} texte surlignable">(#TEXTE|image_reduire{700,*})</div>]
[<p class="#EDIT{hyperlien} hyperlien"><:voir_en_ligne:> : <a href="(#URL_SITE)" class="spip_out">[(#NOM_SITE|sinon{[(#URL_SITE|couper{80})]})]</a></p>]
</div>
<aside>
[(#REM) Gestion du portfolio et des documents ]
[(#INCLURE{fond=inclure/documents,id_article})]
</aside>
<footer>
[<div class="#EDIT{ps} ps surlignable"><h2><:info_ps:></h2>(#PS|image_reduire{700,*})</div>]
[<div class="notes"><h2><:info_notes:></h2>(#NOTES)</div>]
</footer>
</article>
</BOUCLE_content>

22
content/auteur.html

@ -0,0 +1,22 @@
<BOUCLE_content(AUTEURS){id_auteur}>
<section class="content vcard" id="content" itemscope itemtype="http://schema.org/Person"> [(#REM) microformat vcard]
<header class="cartouche">
<h1 class="#EDIT{qui} fn" itemprop="name">[(#LOGO_AUTEUR|image_reduire|inserer_attribut{itemprop,image})]#NOM</h1>
</header>
<div class="main">
[<div class="#EDIT{bio} texte bio">(#BIO|image_reduire{700,*})</div>]
[<p class="#EDIT{hyperlien} hyperlien"><:voir_en_ligne:> : <a href="(#URL_SITE)" class="url spip_out" itemprop="url">[(#NOM_SITE|sinon{[(#URL_SITE|couper{80})]})]</a></p>]
</div>
<aside>
<INCLURE{fond=liste/articles-auteur,id_auteur,env,ajax} />
#FORMULAIRE_ECRIRE_AUTEUR
</aside>
<footer>
[<div class="notes"><h2><:info_notes:></h2>(#NOTES)</div>]
</footer>
</section>
</BOUCLE_content>

17
content/login.html

@ -0,0 +1,17 @@
[(#REM)
Est-ce qu'on se connecte a l'espace prive ou pas ?
]#SET{prive,''}
[(#ENV{url}|=={''}|?{#SET{prive,' '}})]
[(#ENV{url}|match{^#EVAL{_DIR_RESTREINT_ABS}}|?{#SET{prive,' '}})]
<section class="content" id="content">
<header class="cartouche">
[<h1>(#GET{prive}|?{<:login_acces_prive:>,<:lien_connecter:>})
<small>#NOM_SITE_SPIP</small>
</h1>]
<INCLURE{fond=breadcrumb/#ENV{type-page},env} />
</header >
<div class="main">
[(#FORMULAIRE_LOGIN{#ENV{url}|sinon{#URL_ECRIRE{accueil}}})]
</div>
</section>

49
content/mot.html

@ -0,0 +1,49 @@
<BOUCLE_content(MOTS) {id_mot} {doublons}>
<section class="content" id="content">
<header class="cartouche">
<h1 class="#EDIT{titre}">[(#LOGO_MOT|image_reduire)]#TITRE</h1>
<INCLURE{fond=breadcrumb/#ENV{type-page},env} />
</header>
<div class="main">
[<div class="#EDIT{texte} chapo">(#TEXTE|image_reduire{700,*})</div>]
</div>
<aside>
[(#REM) Articles lies au mot-cle ]
<div class="liste articles">
<INCLURE{fond=liste/articles-resume,env,ajax,id_mot,titre=<:baz_april:articles_lies:>} />
</div>
[(#REM) Rubriques liees au mot-cle ]
<B_rubriques>
<div class="liste rubriques">
<h2 class="h2"><:rubriques:></h2>
<ul class="liste-items">
<BOUCLE_rubriques(RUBRIQUES) {id_mot} {par titre} {pagination 50}>
<li class="item"><a href="#URL_RUBRIQUE">#TITRE</a></li>
</BOUCLE_rubriques>
</ul>
[<div class="pagination">(#PAGINATION)</div>]
</div>
</B_rubriques>
[(#REM) Sites web lies au mot-cle ]
<B_sites>
<div class="liste sites">
<h2 class="h2"><:sites_web:></h2>
<ul class="liste-items">
<BOUCLE_sites(SITES) {id_mot} {par nom_site} {pagination 50}>
<li class="item"><a href="[(#ID_SYNDIC|generer_url_entite{site,'','',#CONNECT})]">#NOM_SITE</a></li>
</BOUCLE_sites>
</ul>
[<div class="pagination">(#PAGINATION)</div>]
</div>
</B_sites>
</aside>
[<footer>
<div class="notes"><hr />(#NOTES)</div>
</footer>]
</section>
</BOUCLE_content>

60
content/plan.html

@ -0,0 +1,60 @@
<section class="content" id="content">
<header class="cartouche">
<h1><:plan_site:></h1>
<INCLURE{fond=breadcrumb/#ENV{type-page},env} />
</header>
<div class="main">
[(#REM) Articles et sous-rubriques ]
<B_articles_pages>
<ul class="plan">
<BOUCLE_articles_pages(ARTICLES) {id_rubrique=-1} {page !IN accueil, mentions} {par titre}>
<li><a href="#URL_ARTICLE">#TITRE</a></li>
</BOUCLE_articles_pages>
</ul>
</B_articles_pages>
<BOUCLE_secteurs(RUBRIQUES) {racine} {par num titre, titre}>
<h2 class="h2"><a href="#URL_RUBRIQUE">#TITRE</a></h2>
[(#REM) Articles et sous-rubriques ]
<BOUCLE_test_article_r1(ARTICLES){id_rubrique}{1,2}>
</BOUCLE_test_article_r1>
<B_articles_racine>
<ul class="plan">
<BOUCLE_articles_racine(ARTICLES) {id_rubrique} {par titre}>
<li><a href="#URL_ARTICLE">#TITRE</a></li>
</BOUCLE_articles_racine>
</ul>
</B_articles_racine>
</B_test_article_r1>
<B_rubriques>
<ul class="plan">
<BOUCLE_rubriques(RUBRIQUES) {id_parent} {par titre}>
<li>
<strong><a href="#URL_RUBRIQUE">#TITRE</a></strong>
<BOUCLE_test_article_r2(ARTICLES){id_rubrique}{1,2}>
</BOUCLE_test_article_r2>
<B_articles>
<ul>
<BOUCLE_articles(ARTICLES) {id_rubrique} {par titre}>
[(#TOTAL_BOUCLE|>{1}|oui)<li><a href="#URL_ARTICLE">#TITRE</a></li>]
</BOUCLE_articles>
</ul>
</B_articles>
</B_test_article_r2>
<BOUCLE_sous_rubriques(BOUCLE_rubriques)></BOUCLE_sous_rubriques>
</li>
</BOUCLE_rubriques>
</ul>
</B_rubriques>
</BOUCLE_secteurs>
</div>
</section>

14
content/recherche.html

@ -0,0 +1,14 @@
<section class="content" id="content">
[<header class="cartouche">
<h1><:resultats_recherche:>
<small>&#171;&nbsp;(#RECHERCHE)&nbsp;&#187;</small>
</h1>
<INCLURE{fond=breadcrumb/#ENV{type-page},env} />
</header>]
<div class="main">
<INCLURE{fond=liste/articles-recherche,env,ajax} />
<INCLURE{fond=liste/rubriques-recherche,env,ajax} />
</div>
</section>

75
content/rubrique-blog.html

@ -0,0 +1,75 @@
<BOUCLE_content(RUBRIQUES){id_rubrique}>
<section class="content" id="content">
<header class="cartouche">
<h1 class="#EDIT{titre}">#TITRE</h1>
[<p class="publication"><time datetime="[(#DATE|date_iso)]"><:dernier_ajout:> : (#DATE|affdate_jourcourt).</time></p>]
<INCLURE{fond=breadcrumb/rubrique,id_rubrique} />
</header>
<div class="main">
[<div class="#EDIT{texte} chapo">(#TEXTE|image_reduire{700,*})</div>]
#SET{'debut_mois', (#ENV{datetri}|baz_moisdecal{0,'Y-m-d'})}
#SET{'fin_mois', (#ENV{datetri}|baz_moisdecal{1,'Y-m-d'})}
<B_articlesdate>
<div class="liste articles blog">
[<h2 class="h2[ (#ENV{datetri}|oui)date]">(#ENV{datetri}|affdate{nom_mois})[(#ENV{datetri}|affdate{Y}|!={[(#VAL{Y}|date)]}|oui)[ (#ENV{datetri}|affdate{Y})]]</h2>]
<ul class="liste-items">
<BOUCLE_articlesdate(ARTICLES){si #ENV{datetri}|?{' '}}{date < #GET{fin_mois}}{date >= #GET{debut_mois}}{id_rubrique}{!par date}>
<li class="item clearfix">#INCLURE{fond=inclure/resume/article,id_article,env,composition=blog}</li>
</BOUCLE_articlesdate>
</ul>
</div>
</B_articlesdate>
<div class="liste articles blog">
[<h2 class="h2[ (#ENV{datetri}|oui)date]"><:baz_april:aucun_article_dans_cette_periode:> : (#ENV{datetri}|affdate{nom_mois})[(#ENV{datetri}|affdate{Y}|!={[(#VAL{Y}|date)]}|oui)[ (#ENV{datetri}|affdate{Y})]]</h2>]
<B_articles>#ANCRE_PAGINATION
<ul class="liste-items">
<BOUCLE_articles(ARTICLES){id_rubrique}{lang}{!par date}{pagination 10}>
<li class="item clearfix">#INCLURE{fond=inclure/resume/article,id_article,env,composition=blog}</li>
</BOUCLE_articles>
</ul>
[<div class="pagination">(#PAGINATION)</div>]
</B_articles>
</div>
<//B_articlesdate>
[(#REM) pour les sous-rubriques, on utilise le modele <rubriqueXX|rubriques> dans le texte si on veut]
</div><!-- .main -->
<aside>
[(#REM) Gestion du portfolio et des documents ]
[(#INCLURE{fond=inclure/documents,id_rubrique})]
[(#REM) Sites de la rubrique ]
<B_sites>
<div class="liste sites">
<h2 class="h2"><:sur_web:></h2>
<ul class="liste-items">
<BOUCLE_sites(SITES) {id_rubrique} {par nom_site}>
<li class="item short">#INCLURE{fond=inclure/resume/site,id_syndic}
<B_syndic>
<ul class="spip">
<BOUCLE_syndic(SYNDIC_ARTICLES) {id_syndic} {age<180} {par date}{inverse} {0,3}>
<li class="short with-publication-inline">#INCLURE{fond=inclure/resume/syndic_article,id_syndic_article}</li>
</BOUCLE_syndic>
</ul>
</B_syndic>
</li>
</BOUCLE_sites>
</ul>
</div>
</B_sites>
[(#REM) Proposer un site ]
#FORMULAIRE_SITE
</aside>
<footer>
[<div class="notes"><h2><:info_notes:></h2>(#NOTES)</div>]
</footer>
</section>
</BOUCLE_content>

6
content/rubrique-blog.xml

@ -0,0 +1,6 @@
<composition>
<nom>Rubrique Blog</nom>
<description>Pour faire un blog complet</description>
<icon>images/rubrique-blog.png</icon>
<branche type="article" composition="blog" />
</composition>

3
content/rubrique-pagerubrique.html

@ -0,0 +1,3 @@
<BOUCLE_content(RUBRIQUES){id_rubrique}>
<INCLURE{fond=content/rubrique,id_rubrique,type-page=rubrique} />
</BOUCLE_content>

5
content/rubrique-pagerubrique.xml

@ -0,0 +1,5 @@
<composition>
<nom>Page Rubrique </nom>
<description>Pour passer par la page rubrique avec la liste des articles - en utilisant Court-circuit, les rubriques avec composition sont ignorées du court-circuit, donc attribuer une composition mais vers le squelette normal...</description>
<icon>images/rubrique-pagerubrique.png</icon>
</composition>

54
content/rubrique.html

@ -0,0 +1,54 @@
<BOUCLE_content(RUBRIQUES){id_rubrique}>
<section class="content" id="content">
<header class="cartouche">
<h1 class="#EDIT{titre}">#TITRE</h1>
[<p class="publication"><time datetime="[(#DATE|date_iso)]"><:dernier_ajout:> : (#DATE|affdate_jourcourt).</time></p>]
<INCLURE{fond=breadcrumb/rubrique,env} />
</header>
<div class="main">
[<div class="#EDIT{texte} texte">(#TEXTE|image_reduire{700,*})</div>]
<div class="liste articles">
<INCLURE{fond=liste/articles-resume,env,ajax,titre=<:articles_rubrique:>} />
</div>
[(#REM) Si aucun article, affiche un plan de la rubrique : en fait non, on a la liste en aside, on la garde là-bas et on se sert du texte si on veut en mettre en avant au cas par cas
ou éventuellement avec un modèle <rubriqueX|articles>
+ activer le plugin court-circuit pour aller directement dans larticle si un seul présent
]
</div>
<footer>
[(#REM) Gestion du portfolio et des documents ]
[(#INCLURE{fond=inclure/documents,id_rubrique})]
[<div class="notes"><h2><:info_notes:></h2>(#NOTES)</div>]
</footer>
<aside>
[(#REM) Sites de la rubrique ]
<B_sites>
<div class="liste sites">
<h2 class="h2"><:sur_web:></h2>
<ul class="liste-items">
<BOUCLE_sites(SITES) {id_rubrique} {par nom_site}>
<li class="item short">#INCLURE{fond=inclure/resume/site,id_syndic}
<B_syndic>
<ul class="spip">
<BOUCLE_syndic(SYNDIC_ARTICLES) {id_syndic} {age<180} {par date}{inverse} {0,3}>
<li class="short with-publication-inline">#INCLURE{fond=inclure/resume/syndic_article,id_syndic_article}</li>
</BOUCLE_syndic>
</ul>
</B_syndic>
</li>
</BOUCLE_sites>
</ul>
</div>
</B_sites>
</aside>
</section>
</BOUCLE_content>

23
content/site.html

@ -0,0 +1,23 @@
<BOUCLE_content(SITES){id_syndic}>
<section class="content" id="content">
<header class="cartouche">
<h1 class="#EDIT{nom_site}">[<a href="#URL_SITE">(#LOGO_SITE|image_reduire)</a>]#NOM_SITE</h1>
<INCLURE{fond=breadcrumb/#ENV{type-page},env} />
</header>
<div class="main">
[<div class="#EDIT{descriptif} chapo">(#DESCRIPTIF)</div>]
[<p class="#EDIT{url_site} hyperlien"><a href="#URL_SITE" class="spip_out">(#URL_SITE|couper{80})</a></p>]
</div>
<aside>
<INCLURE{fond=liste/syndicarticles,id_syndic,env,ajax} />
</aside>
<footer>
[<div class="notes"><hr />(#NOTES)</div>]
</footer>
</section>
</BOUCLE_content>

33
content/sommaire.html

@ -0,0 +1,33 @@
<section class="content" id="content">
<header class="cartouche visuallyhidden">
<h1>#NOM_SITE_SPIP</h1>
</header>
<div class="main">
<B_accueil>
<article class="texte_accueil">
<BOUCLE_accueil(ARTICLES){page=accueil}>
[<h2 class="h2 visuallyhidden">(#TITRE|sinon{<:accueil:>})</h2>]
<div class="main">
[<div class="#EDIT{chapo} chapo surlignable">(#CHAPO|image_reduire{700,*})</div>]
[<div class="#EDIT{texte} texte surlignable">(#TEXTE|image_reduire{700,*})</div>]
[<p class="#EDIT{hyperlien} hyperlien"><:voir_en_ligne:> : <a href="(#URL_SITE)" class="spip_out">[(#NOM_SITE|sinon{[(#URL_SITE|couper{80})]})]</a></p>]
</div>
<footer>
[<div class="#EDIT{ps} ps surlignable"><h2><:info_ps:></h2>(#PS|image_reduire{700,*})</div>]
[<div class="notes"><h2><:info_notes:></h2>(#NOTES)</div>]
</footer>
</BOUCLE_accueil>
</article>
</B_accueil>
[<div id="descriptif_site_spip" class="#EDIT{meta-descriptif_site} texte_accueil">(#DESCRIPTIF_SITE_SPIP)</div>]
<//B_accueil>
<div class="liste long articles">
<INCLURE{fond=liste/articles-resume,env,ajax} />
</div>
</div>
</section>

16
content/spip_pass.html

@ -0,0 +1,16 @@
<section class="content" id="content">
<header class="cartouche">
<h1>#NOM_SITE_SPIP</h1>
</header>
<div class="main">
<div class="pass">
[(#ENV{p}|non)
#FORMULAIRE_OUBLI
]
[(#ENV{p}|oui)
#FORMULAIRE_MOT_DE_PASSE
]
</div>
</div>
</section>

10
content/z_apl.html

@ -0,0 +1,10 @@
[(#REM)
Squelette Big_Pipe
http://www.facebook.com/notes/facebook-engineering/bigpipe-pipelining-web-pages-for-high-performance/389414033919
(c) 2010 Cedric Morin
Distribue sous licence GPL
]#CACHE{0}
#INCLURE{fond=inclure/ajax_parallel_load,bloc=#SQUELETTE}

7
extra/article.html

@ -0,0 +1,7 @@
<BOUCLE_article(ARTICLES){id_article}>
[(#COMPOSITION|=={blog}|oui)
<INCLURE{fond=inclure/mots-articles-rubrique,env} />
<INCLURE{fond=inclure/periode-mois,env} />]
</BOUCLE_article>

15
extra/auteur.html

@ -0,0 +1,15 @@
<BOUCLE_extra2_auteur(AUTEURS){id_auteur}>
[(#REM) Autres auteurs ]
<B_auteurs>
<div class="liste auteurs">
#ANCRE_PAGINATION
<h2 class="h2"><:info_auteurs:></h2>
<ul class="liste-items">
<BOUCLE_auteurs(AUTEURS) {par nom} {pagination 20}>
<li class="item"><a href="#URL_AUTEUR"[ class="(#EXPOSE)"]>[(#NOM|couper{80})]</a></li>
</BOUCLE_auteurs>
</ul>
[<div class="pagination">(#PAGINATION)</div>]
</div>
</B_auteurs>
</BOUCLE_extra2_auteur>

2
extra/dist.html

@ -0,0 +1,2 @@
[(#REM) Inscription au site ]
#FORMULAIRE_INSCRIPTION

31
extra/mot.html

@ -0,0 +1,31 @@
<BOUCLE_principale(MOTS) {id_mot} {doublons}>
[(#REM) Menu de navigation mots-cles : les autres mots cles du meme groupe ]
<B_mots_freres>
<div class="liste mots">
#ANCRE_PAGINATION
<h2 class="h2">#INFO_TITRE{groupes_mots,#ID_GROUPE}</h2>
<ul class="liste-items inline">
<BOUCLE_mots_freres(MOTS) {type} {par titre} {pagination 20}>
<li class="item"><a href="#URL_MOT"[ class="(#EXPOSE)"]>#TITRE</a></li>
</BOUCLE_mots_freres>
</ul>
[<div class="pagination">(#PAGINATION)</div>]
</div>
</B_mots_freres>
[(#REM) Menu de navigation mots-cles : les autres groupes ]
<B_groupes_freres>
<div class="liste groupes_mots">
<BOUCLE_groupes_freres(GROUPES_MOTS) {!id_groupe} {par titre} {doublons}>
<B_mot_cousin>#ANCRE_PAGINATION
<h2 class="h2">#INFO_TITRE{groupes_mots,#ID_GROUPE}</h2>
<ul class="liste-items inline">
<BOUCLE_mot_cousin(MOTS) {id_groupe} {par titre} {pagination 20}>
<li class="item"><a href="#URL_MOT">#TITRE</a></li>
</BOUCLE_mot_cousin>
</ul>
[<div class="pagination">(#PAGINATION)</div>]
</B_mot_cousin>
</BOUCLE_groupes_freres>
</div>
</B_groupes_freres>
</BOUCLE_principale>

17
extra/rubrique.html

@ -0,0 +1,17 @@
<BOUCLE_extra2_rubrique(RUBRIQUES){id_rubrique}>
[(#REM) Menu de navigation mots-cles ]
<B_mots>
<div class="liste mots">
<h2 class="h2"><:mots_clefs:></h2>
<ul class="liste-items">
<BOUCLE_mots(MOTS) {id_rubrique} {par titre}>
<li class="item"><a href="#URL_MOT" rel="tag">#TITRE</a></li>
</BOUCLE_mots>
</ul>
</div>
</B_mots>
[(#COMPOSITION|=={blog}|oui)
<INCLURE{fond=inclure/mots-articles-rubrique,env} />
<INCLURE{fond=inclure/periode-mois,env} />]
</BOUCLE_extra2_rubrique>

27
extra/site.html

@ -0,0 +1,27 @@
[(#REM) Autres sites web ]
<BOUCLE_testsites(SITES){id_rubrique}{1,2}>
</BOUCLE_testsites>
<B_sites>
<div class="liste sites">
#ANCRE_PAGINATION
<h2 class="h2"><:sites_web:></h2>
<ul class="liste-items">
<BOUCLE_sites(SITES){id_rubrique}{par nom_site} {pagination 20}>
<li class="item"><a href="[(#ID_SYNDIC|generer_url_entite{site,'','',#CONNECT})]"[ class="(#EXPOSE)"]>#NOM_SITE</a></li>
</BOUCLE_sites>
</ul>
[<div class="pagination">(#PAGINATION)</div>]
</div>
</B_sites>
</B_testsites>
[(#REM) Menu de navigation mots-cles ]
<B_mots>
<div class="liste mots">
<h2 class="h2"><:mots_clefs:></h2>
<ul class="liste-items">
<BOUCLE_mots(MOTS) {id_syndic} {par titre}>
<li class="item"><a href="#URL_MOT" rel="tag">#TITRE</a></li>
</BOUCLE_mots>
</ul>
</div>
</B_mots>

2
extra/sommaire.html

@ -0,0 +1,2 @@
[(#REM) Inscription au site ]
#FORMULAIRE_INSCRIPTION

10
extra/z_apl.html

@ -0,0 +1,10 @@
[(#REM)
Squelette Big_Pipe
http://www.facebook.com/notes/facebook-engineering/bigpipe-pipelining-web-pages-for-high-performance/389414033919
(c) 2010 Cedric Morin
Distribue sous licence GPL
]#CACHE{0}
#INCLURE{fond=inclure/ajax_parallel_load,bloc=#SQUELETTE}

30
footer/dist.html

@ -0,0 +1,30 @@
<p class="colophon">
<BOUCLE_annee(ARTICLES){par date}{0,1}>[(#DATE|annee|!={#VAL{Y}|date}|oui)[(#DATE|annee)]]</BOUCLE_annee>-</B_annee>[(#DATE|annee) ] &mdash; #NOM_SITE_SPIP<br />
<a rel="contents" href="#URL_PAGE{plan}"><:plan_site:></a><span class="sep"> |
</span><a href="#URL_PAGE{backend}" rel="alternate" title="<:syndiquer_site:>">RSS&nbsp;2.0</a>
<B_mentions>
<span class="sep"> |
</span><BOUCLE_mentions(ARTICLES){page=mentions}>
<a href="#URL_ARTICLE">#TITRE</a>
</BOUCLE_mentions>
<B_contact>
<span class="sep"> | </span>
<BOUCLE_contact(ARTICLES){page=contact}>
<a href="#URL_ARTICLE">#TITRE</a>
</BOUCLE_contact>
</p>
<p class="colophon"><?php
if (isset($GLOBALS['visiteur_session']['id_auteur']) AND $GLOBALS['visiteur_session']['id_auteur']) {
?><a href="#URL_LOGOUT" rel="nofollow"><:icone_deconnecter:></a><?php
if (include_spip('inc/autoriser') AND autoriser('ecrire')){
?><span class="sep"> | </span><a href="#EVAL{_DIR_RESTREINT_ABS}"><:espace_prive:></a>
<span class="sep"> | </span><?php
}
}
else {
?><a href="[(#URL_PAGE{login}|parametre_url{url,#SELF|parametre_url{url,''}})]" rel="nofollow" class='login_modal'><:lien_connecter:></a>
<span class="sep"> | </span><?php
}
?>
<span class="generator"><a href="http://www.spip.net/" title="<:site_realise_avec_spip:>" class="spip_out">SPIP</a></span>
</p>

22
formulaires/configurer_baz_april.html

@ -0,0 +1,22 @@
<div class="formulaire_spip formulaire_configurer formulaire_#FORM">
<h3 class="titrem"><:baz_april:configuration_baz_april:></h3>
[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
<form method="post" action="#ENV{action}"><div>
#ACTION_FORMULAIRE{#ENV{action}}
<ul class="editer-groupe">
[(#SAISIE{case,afficherauteurs,
label=<:baz_april:afficherauteurs_label:>,
explication=<:baz_april:afficherauteurs_explications:>,
defaut=non})]
</ul>
<p class="boutons">
<input type="submit" class="submit" value="<:bouton_valider:>" />
</p>
</div></form>
</div>

57
formulaires/login.html

@ -0,0 +1,57 @@
#HTTP_HEADER{"Cache-Control: no-store, no-cache, must-revalidate"}
#HTTP_HEADER{"Pragma: no-cache"}
<div class='formulaire_spip formulaire_login'>
[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{_deja_loge})</p>]
[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
[<p class='reponse_formulaire reponse_formulaire_erreur'>(#ENV*{message_erreur})</p>]
[(#ENV{echec_cookie})
<fieldset class='reponse_formulaire reponse_formulaire_erreur'>
<h2><:avis_erreur_cookie:></h2>
<p class="erreur_message"><:login_cookie_oblige:><br /><:login_cookie_accepte:></p>
</fieldset>]
[(#ENV{editable})
<form id='formulaire_login' method='post' action='#ENV{action}'>
[(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ]
#ACTION_FORMULAIRE
<fieldset>
<legend><:form_forum_identifiants:></legend>
<div class="form-group editer-groupe">
<div class="editer editer_login obligatoire[(#ENV**{erreurs}|table_valeur{var_login}|oui)erreur]">
<label for="var_login"><:login_login2:></label>[
<span class="erreur_message">(#ENV**{erreurs}|table_valeur{var_login})</span>
]<input type='text' class='form-control text [(#ENV*{_logo}|oui)avec_spip_logo_auteur]' name='var_login' id='var_login' value="[(#ENV**{var_login})]" size='40'[(#HTML5) required='required' autofocus='autofocus'] autocapitalize="off" autocorrect="off" />[
<span id="spip_logo_auteur">(#ENV*{_logo,''})</span>]
</div>
<div class="editer editer_password obligatoire[(#ENV**{erreurs}|table_valeur{password}|oui)erreur]">
<label for="password"><:login_pass2:></label>[
<span class="erreur_message">(#ENV**{erreurs}|table_valeur{password})</span>
]<input type='password' class='form-control text password' name='password' id='password' value="" size='40' autocapitalize="off" autocorrect="off" />
<p class='details'><a href="[(#URL_PAGE{spip_pass}|parametre_url{lang,#LANG})]" id='spip_pass'><:login_motpasseoublie:></a></p>
</div>
[(#ENV{rester_connecte})
<div class="editer editer_session"><div class='choix'>
<input type="checkbox" class="form-control checkbox" name="session_remember" id="session_remember" value="oui" [(#ENV**{cnx}|?{' '})checked="checked"] onchange="jQuery(this).addClass('modifie');" />
<label class='nofx' for="session_remember"><:login_rester_identifie:></label>
</div></div>]
</div>
</fieldset>
<p class="boutons"><input type="submit" class="submit" value="<:bouton_valider|attribut_html:>" /></p>
</form>
]
[(#REM) en cas d'absence de cookie, on represente le formulaire alternatif ]
[<form action="(#ENV{auth_http})" method="get">[
(#ENV{auth_http}|form_hidden)
]
<fieldset>
<legend><:login_sans_cookie:></legend>
<:login_preferez_refuser:>
<input type="hidden" name="essai_auth_http" value="oui"/>
[<input type="hidden" name="url" value="(#ENV{url})"/>]
<p class="boutons"><input type="submit" class="submit" value="<:login_sans_cookie|attribut_html:>"/></p>
</fieldset>
</form>
]
</div>

333
formulaires/login.php

@ -0,0 +1,333 @@
<?php
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2019 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
\***************************************************************************/
/**
* Gestion du formulaire d'identification / de connexion à SPIP
*
* @package SPIP\Core\Formulaires
**/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
include_spip('base/abstract_sql');
/**
* Teste si une URL est une URL de l'espace privé (administration de SPIP)
* ou de l'espace public
*
* @param string $cible URL
* @return bool
* true si espace privé, false sinon.
**/
function is_url_prive($cible) {
include_spip('inc/filtres_mini');
$path = parse_url(tester_url_absolue($cible) ? $cible : url_absolue($cible));
$path = (isset($path['path']) ? $path['path'] : '');
return strncmp(substr($path, -strlen(_DIR_RESTREINT_ABS)), _DIR_RESTREINT_ABS, strlen(_DIR_RESTREINT_ABS)) == 0;
}
/**
* Chargement du formulaire de login
*
* Si on est déjà connecté, on redirige directement sur l'URL cible !
*
* @uses auth_informer_login()
* @uses is_url_prive()
* @uses login_auth_http()
*
* @param string $cible
* URL de destination après identification.
* Cas spécifique : la valeur `@page_auteur` permet d'être redirigé
* après connexion sur le squelette public de l'auteur qui se connecte.
* @param string $login
* Login de la personne à identifier (si connu)
* @param null|bool $prive
* Identifier pour l'espace privé (true), public (false)
* ou automatiquement (null) en fonction de la destination de l'URL cible.
* @return array
* Environnement du formulaire
**/
function formulaires_login_charger_dist($cible = '', $login = '', $prive = null) {
$erreur = _request('var_erreur');
if (!$login) {
$login = strval(_request('var_login'));
}
// si on est deja identifie
if (!$login and isset($GLOBALS['visiteur_session']['login'])) {
$login = $GLOBALS['visiteur_session']['login'];
}
// ou si on a un cookie admin
// if (!$login) {
// if (isset($_COOKIE['spip_admin'])
// and preg_match(',^@(.*)$,', $_COOKIE['spip_admin'], $regs)
// ) {
// $login = $regs[1];
// }
// }
include_spip('inc/auth');
$row = auth_informer_login($login);
// Construire l'environnement du squelette
// Ne pas proposer de "rester connecte quelques jours"
// si la duree de l'alea est inferieure a 12 h (valeur par defaut)
$valeurs = array(
'var_login' => $login,
'editable' => !$row,
'cnx' => isset($row['cnx']) ? $row['cnx'] : '0',
'auth_http' => login_auth_http(),
'rester_connecte' => ((_RENOUVELLE_ALEA < 12 * 3600) ? '' : ' '),
'_logo' => isset($row['logo']) ? $row['logo'] : '',
'_alea_actuel' => isset($row['alea_actuel']) ? $row['alea_actuel'] : '',
'_alea_futur' => isset($row['alea_futur']) ? $row['alea_futur'] : '',
'_pipeline' => 'affiche_formulaire_login', // faire passer le formulaire dans un pipe dedie pour les methodes auth
);
if ($erreur or !isset($GLOBALS['visiteur_session']['id_auteur']) or !$GLOBALS['visiteur_session']['id_auteur']) {
$valeurs['editable'] = true;
}
if (is_null($prive) ? is_url_prive($cible) : $prive) {
include_spip('inc/autoriser');
$loge = autoriser('ecrire');
} else {
$loge = (isset($GLOBALS['visiteur_session']['auth']) and $GLOBALS['visiteur_session']['auth'] != '');
}
// Si on est connecte, appeler traiter()
// et lancer la redirection si besoin
if (!$valeurs['editable'] and $loge and _request('formulaire_action')!=='login') {
$traiter = charger_fonction('traiter', 'formulaires/login');
$res = $traiter($cible, $login, $prive);
$valeurs = array_merge($valeurs, $res);
if (isset($res['redirect']) and $res['redirect']) {
include_spip('inc/headers');
# preparer un lien pour quand redirige_formulaire ne fonctionne pas
$m = redirige_formulaire($res['redirect'], '', 'ajaxform');
$valeurs['_deja_loge'] = inserer_attribut(
'<a>' . _T('login_par_ici') . "</a>$m",
'href',
$res['redirect']
);
}
}
// en cas d'echec de cookie, inc_auth a renvoye vers le script de
// pose de 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 ($erreur == 'cookie') {
$valeurs['echec_cookie'] = ' ';
} elseif ($erreur) {
// une erreur d'un SSO indique dans la redirection vers ici
// mais il faut se proteger de toute tentative d'injection malveilante
include_spip('inc/texte');
$valeurs['message_erreur'] = safehtml($erreur);
}
return $valeurs;
}
/**
* Identification via HTTP (si pas de cookie)
*
* Gére le cas où un utilisateur ne souhaite pas de cookie :
* on propose alors un formulaire pour s'authentifier via http
*
* @return string
* - Si connection possible en HTTP : URL pour réaliser cette identification,
* - chaîne vide sinon.
**/
function login_auth_http() {
if (!$GLOBALS['ignore_auth_http']
and _request('var_erreur') == 'cookie'
and (!isset($_COOKIE['spip_session']) or $_COOKIE['spip_session'] != 'test_echec_cookie')
and (($GLOBALS['flag_sapi_name'] and preg_match(',apache,i', @php_sapi_name()))
or preg_match(',^Apache.* PHP,', $_SERVER['SERVER_SOFTWARE']))
// Attention dans le cas 'intranet' la proposition de se loger
// par auth_http peut conduire a l'echec.
and !(isset($_SERVER['PHP_AUTH_USER']) and isset($_SERVER['PHP_AUTH_PW']))
) {
return generer_url_action('cookie', '', false, true);
} else {
return '';
}
}
/**
* Vérifications du formulaire de login
*
* Connecte la personne si l'identification réussie.
*
* @uses auth_identifier_login()
* @uses auth_loger()
* @uses login_autoriser()
*
* @param string $cible
* URL de destination après identification.
* Cas spécifique : la valeur `@page_auteur` permet d'être redirigé
* après connexion sur le squelette public de l'auteur qui se connecte.
* @param string $login
* Login de la personne à identifier (si connu)
* @param null|bool $prive
* Identifier pour l'espace privé (true), public (false)
* ou automatiquement (null) en fonction de la destination de l'URL cible.
* @return array
* Erreurs du formulaire
**/
function formulaires_login_verifier_dist($cible = '', $login = '', $prive = null) {
$session_login = _request('var_login');
$session_password = _request('password');
$session_remember = _request('session_remember');
if (!$session_login) {
# pas de login saisi !
return array('var_login' => _T('info_obligatoire'));
}
// appeler auth_identifier_login qui va :
// - renvoyer un string si echec (message d'erreur)
// - un array decrivant l'auteur identifie si possible
// - rediriger vers un SSO qui renverra in fine sur action/auth qui finira l'authentification
include_spip('inc/auth');
$auteur = auth_identifier_login($session_login, $session_password);
// on arrive ici si on ne s'est pas identifie avec un SSO
if (!is_array($auteur)) {
$erreurs = array();
if (is_string($auteur) and strlen($auteur)) {
$erreurs['var_login'] = $auteur;
}
include_spip('inc/cookie');
spip_setcookie('spip_admin', '', time() - 3600);
if (strlen($session_password)) {
$erreurs['password'] = _T('login_erreur_pass');
} else {
// sinon c'est un login en deux passe old style (ou js en panne)
// pas de message d'erreur
$erreurs['password'] = ' ';
}
return
$erreurs;
}
// on a ete authentifie, construire la session
// en gerant la duree demandee pour son cookie
if ($session_remember !== null) {
$auteur['cookie'] = $session_remember;
}
// si la connexion est refusee on renvoi un message erreur de mot de passe
// car en donnant plus de detail on renseignerait un assaillant sur l'existence d'un compte
if (auth_loger($auteur) === false) {
$erreurs['message_erreur'] = _T('login_erreur_pass');
return $erreurs;
}
return (is_null($prive) ? is_url_prive($cible) : $prive)
? login_autoriser() : array();
}
/**
* Teste l'autorisation d'accéder à l'espace privé une fois une connexion
* réussie, si la cible est une URL privée.
*
* Dans le cas contraire, un message d'erreur est retourné avec un lien
* pour se déconnecter.
*
* @return array
* - Erreur si un connecté n'a pas le droit d'acceder à l'espace privé
* - tableau vide sinon.
**/
function login_autoriser() {
include_spip('inc/autoriser');
if (!autoriser('ecrire')) {
$h = generer_url_action('logout', 'logout=prive&url=' . urlencode(self()));
return array(
'message_erreur' => '<h1>'
. _T('avis_erreur_visiteur')
. '</h1><p>'
. _T('texte_erreur_visiteur')
. "</p><p class='retour'>[<a href='$h'>"
. _T('icone_deconnecter') . '</a>]</p>'
);
}
return array();
}
/**
* Traitements du formulaire de login
*
* On arrive ici une fois connecté.
* On redirige simplement sur l'URL cible désignée.
*
* @param string $cible
* URL de destination après identification.
* Cas spécifique : la valeur `@page_auteur` permet d'être redirigé
* après connexion sur le squelette public de l'auteur qui se connecte.
* @param string $login
* Login de la personne à identifier (si connu)
* @param null|bool $prive
* Identifier pour l'espace privé (true), public (false)
* ou automatiquement (null) en fonction de la destination de l'URL cible.
* @return array
* Retours du traitement
**/
function formulaires_login_traiter_dist($cible = '', $login = '', $prive = null) {
$res = array();
// Si on se connecte dans l'espace prive,
// ajouter "bonjour" (repere a peu pres les cookies desactives)
if (is_null($prive) ? is_url_prive($cible) : $prive) {
$cible = parametre_url($cible, 'bonjour', 'oui', '&');
}
if ($cible == '@page_auteur') {
$cible = generer_url_entite($GLOBALS['auteur_session']['id_auteur'], 'auteur');
}
if ($cible) {
$cible = parametre_url($cible, 'var_login', '', '&');
// transformer la cible absolue en cible relative
// pour pas echouer quand la meta adresse_site est foireuse
if (strncmp($cible, $u = url_de_base(), strlen($u)) == 0) {
$cible = './' . substr($cible, strlen($u));
} elseif (tester_url_absolue($cible) and !defined('_AUTORISER_LOGIN_ABS_REDIRECT')) {
// si c'est une url absolue, refuser la redirection
// sauf si cette securite est levee volontairement par le webmestre
$cible = '';
}
}
// Si on est connecte, envoyer vers la destination
if ($cible and ($cible != self('&')) and ($cible != self())) {
$res['redirect'] = $cible;
$res['message_ok'] = inserer_attribut(
'<a>' . _T('login_par_ici') . '</a>',
'href',
$cible
);
}
// avant de rediriger il faut mettre a jour les sessions sur le disque si on a charge une session
if (function_exists('terminer_actualiser_sessions')) {
terminer_actualiser_sessions();
}
return $res;
}

12
formulaires/recherche.html

@ -0,0 +1,12 @@
<div class="recherche"><form action="[(#ENV{action})]" method="get">
<div class="input-group flex">
[(#ENV{action}|form_hidden)]
[<input type="hidden" name="lang" value="(#ENV{lang})" />]
<div class="input-group-prepend">
<input class="form-control" type="search" placeholder="Rechercher" aria-label="Rechercher" name="recherche"[ value="(#ENV{recherche})"] />
</div>
<div class="input-group-append">
<button type="submit" class="input-group-text">ok</button>
</div>
</div>
</form></div>

2
head/404.html

@ -0,0 +1,2 @@
<title><:pass_erreur:> 404 - [(#NOM_SITE_SPIP|textebrut)]</title>
<meta name="robots" content="none" />

5
head/article.html

@ -0,0 +1,5 @@
<BOUCLE_article_head(ARTICLES) {id_article}>
<title>[(#TITRE|textebrut) - ][(#NOM_SITE_SPIP|textebrut)]</title>
[<meta name="description" content="(#INTRODUCTION{150}|attribut_html)" />]
[<link rel="canonical" href="(#URL_ARTICLE|url_absolue)" />]
</BOUCLE_article_head>

11
head/auteur.html

@ -0,0 +1,11 @@
<BOUCLE_auteur_head(AUTEURS) {id_auteur}>
<title>[(#NOM|textebrut) - ][(#NOM_SITE_SPIP|textebrut)]</title>
[<meta name="description" content="(#BIO|couper{150}|attribut_html)" />]
[<link rel="canonical" href="(#URL_AUTEUR|url_absolue)" />]
[(#REM) Favicon personnalisee a partir du logo (si filtres d'image) ]
[(#MODELE{favicon}{favicon=#LOGO_AUTEUR})]
[(#REM) Lien vers le flux RSS des articles de l'auteur ]
<link rel="alternate" type="application/rss+xml" title="[(#NOM|textebrut)]" href="[(#URL_PAGE{backend}|parametre_url{id_auteur,#ID_AUTEUR})]" />
</BOUCLE_auteur_head>

26
head/dist.html

@ -0,0 +1,26 @@
[(#REM)
Cette inclusion est celle utilisee par defaut lorsqu'un head/xxx demande
n'existe pas
Ces deux balises #NOM_SITE_SPIP et #DESCRIPTIF_SITE_SPIP
permettent de récupérer des informations de configuration de SPIP
que l'on renseigne dans l'espace privé.
Ces enregistrements sont stockés en base de donnée dans une
table appelée "spip_meta". Les champs de la table peuvent aussi
être récupérés en utilisant la balise #CONFIG{nom de la configuration}
ce qui donnerait ici : #CONFIG{nom_site_spip}
Les |mot suivants les #BALISE indique qu'on applique certains traitements
au texte retourné par la balise.
|textebrut supprime toute balise HTML, |couper{150} coupe le texte
retourné à 150 caractères. Ces "filtres" peuvent se chaîner
|filtreA|filtreB ...
Ces deux lignes permettent au bout du compte de renseigner le titre
de la page affiché tout en haut du navigateur ainsi que la description du site
(utile aux moteurs de recherche)
]
<title>[(#NOM_SITE_SPIP|textebrut)]</title>
[<meta name="description" content="(#DESCRIPTIF_SITE_SPIP|couper{150}|textebrut)" />]

6
head/mot.html

@ -0,0 +1,6 @@
<BOUCLE_principale(MOTS) {id_mot} >
<title>[(#TITRE|textebrut) - ][(#NOM_SITE_SPIP|textebrut)]</title>
[<meta name="description" content="(#DESCRIPTIF|couper{150}|attribut_html)" />]
[(#REM) Lien vers le flux RSS des articles du mot cle ]
<link rel="alternate" type="application/rss+xml"[ title="(#TITRE|attribut_html)"] href="[(#URL_PAGE{backend}|parametre_url{id_mot,#ID_MOT})]" />
</BOUCLE_principale>

3
head/plan.html

@ -0,0 +1,3 @@
<title><:plan_site:> - [(#NOM_SITE_SPIP|textebrut)]</title>
[<meta name="description" content="(#DESCRIPTIF_SITE_SPIP|couper{150}|attribut_html)" />]
<meta name="robots" content="none" />

2
head/recherche.html

@ -0,0 +1,2 @@
<title><:resultats_recherche:> - [(#NOM_SITE_SPIP|textebrut)]</title>
<meta name="robots" content="none" />

7
head/rubrique.html

@ -0,0 +1,7 @@
<BOUCLE_rubrique_head(RUBRIQUES){id_rubrique}>
[<title>(#TITREWEB|sinon{#TITRE}|textebrut)</title>]
[<meta name="description" content="(#INTRODUCTION{150}|textebrut)" />]
[<link rel="canonical" href="(#URL_RUBRIQUE|url_absolue)" />]
[(#REM) Lien vers le flux RSS de la rubrique ]
<link rel="alternate" type="application/rss+xml" title="<:syndiquer_rubrique:>" href="[(#URL_PAGE{backend}|parametre_url{id_rubrique,#ID_RUBRIQUE})]" />
</BOUCLE_rubrique_head>

5
head/site.html

@ -0,0 +1,5 @@
<BOUCLE_site(SITES){id_syndic}>
<title>[(#NOM_SITE|textebrut) - ][(#NOM_SITE_SPIP|textebrut)]</title>
[<meta name="description" content="(#DESCRIPTIF|couper{150}|textebrut)" />]
<meta name="robots" content="none" />
</BOUCLE_site>

23
head/sommaire.html

@ -0,0 +1,23 @@
[(#REM)
Ces deux balises #NOM_SITE_SPIP et #DESCRIPTIF_SITE_SPIP
permettent de récupérer des informations de configuration de SPIP