baz_april v2.0 rebasé sur zboot en entier

This commit is contained in:
chankalan 2020-05-16 12:21:49 +02:00
parent 1628a0b5ab
commit 2335123b59
153 changed files with 4026 additions and 4440 deletions

46
baz_april_administrations.php Executable file → Normal file
View File

@ -1,11 +1,30 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
/**
* Fichier gérant l'installation et désinstallation du plugin baz_april
*
* @plugin baz_april
* @copyright 2019
* @author Nicolas Dorigny
* @licence GNU/GPL
* @package SPIP\baz_april\Installation
*/
include_spip('inc/meta');
// Installation et mise à jour sur modele sjcycle
function baz_april_upgrade($nom_meta_version_base, $version_cible) {
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Fonction d'installation et de mise à jour du plugin baz_april.
*
* @param string $nom_meta_base_version
* Nom de la meta informant de la version du schéma de données du plugin installé dans SPIP
* @param string $version_cible
* Version du schéma de données dans ce plugin (déclaré dans paquet.xml)
*
* @return void
**/
function baz_april_upgrade($nom_meta_base_version, $version_cible) {
// Création du tableau des mises à jour.
$maj = array();
@ -20,9 +39,6 @@ function baz_april_upgrade($nom_meta_version_base, $version_cible) {
$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),
@ -37,8 +53,14 @@ function baz_april_upgrade($nom_meta_version_base, $version_cible) {
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);
/**
* Fonction de désinstallation du plugin baz_april.
*
* @param string $nom_meta_base_version
* Nom de la meta informant de la version du schéma de données du plugin installé dans SPIP
*
* @return void
**/
function baz_april_vider_tables($nom_meta_base_version) {
effacer_meta($nom_meta_base_version);
}

View File

@ -0,0 +1,22 @@
<?php
/**
* Définit les autorisations du plugin baz_april
*
* @plugin baz_april
* @copyright 2019
* @author Nicolas Dorigny
* @licence GNU/GPL
* @package SPIP\baz_april\Autorisations
*/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Fonction d'appel pour le pipeline
*
* @pipeline autoriser
*/
function baz_april_autoriser() {
}

44
baz_april_fonctions.php Executable file → Normal file
View File

@ -1,40 +1,14 @@
<?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
* Fonctions utiles au plugin baz_april
*
* @param string $date
* @param int $decalage
* @param string $format
* @return string
* @plugin baz_april
* @copyright 2019
* @author Nicolas Dorigny
* @licence GNU/GPL
* @package SPIP\baz_april\Fonctions
*/
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);
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}

58
baz_april_options.php Executable file → Normal file
View File

@ -1,44 +1,24 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
// les blocs de baz
if (!isset($GLOBALS['z_blocs'])) {
$GLOBALS['z_blocs'] = array('content','aside','extra','connex','head','head_js','header','footer','breadcrumb');
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
// 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";
// corriger les intertitres de SPIP
$GLOBALS['debut_intertitre'] = "\n<h2>";
$GLOBALS['fin_intertitre'] = "</h2>\n";
// Blocs Zcore
$GLOBALS['z_blocs'] = array(
'content',
'head',
'header',
'breadcrumb',
'extra',
'aside',
'connex',
'footer',
);
define('_CONTENT_WIDTH', 650);
define('_IMAGE_RATIO', '1.5:1');

21
baz_april_pipelines.php Executable file → Normal file
View File

@ -1,3 +1,22 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
/**
* Utilisations de pipelines par baz_april
*
* @plugin baz_april
* @copyright 2019
* @author Nicolas Dorigny
* @licence GNU/GPL
* @package SPIP\baz_april\Pipelines
*/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
function baz_april_pre_typo($texte) {
// belles puces
$texte = preg_replace('/^-\s?(?!\*|#|-)/m', '-* ', $texte);
return $texte;
}

View File

@ -0,0 +1 @@
<BOUCLE_premier_article(ARTICLES){id_rubrique} {tri_rubrique} {0,1}>#ID_ARTICLE</BOUCLE_premier_article>

13
formulaires/configurer_baz_april.html Executable file → Normal file
View File

@ -1,11 +1,12 @@
<div class="formulaire_spip formulaire_configurer formulaire_#FORM">
<h3 class="titrem"><:baz_april:configuration_baz_april:></h3>
<h3 class="titrem"><:baz_april:titre_page_configurer_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>
<form method="post" action="#ENV{action}">
<div>
#ACTION_FORMULAIRE{#ENV{action}}
<ul class="editer-groupe">
[(#SAISIE{case,afficherauteurs,
@ -13,9 +14,7 @@
explication=<:baz_april:afficherauteurs_explications:>,
defaut=non})]
</ul>
<p class="boutons">
<input type="submit" class="submit" value="<:bouton_valider:>" />
</p>
</div></form>
<p class="boutons"><span class="image_loading">&nbsp;</span><input type="submit" class="submit" value="<:bouton_enregistrer:/>" /></p>
</div>
</form>
</div>

View File

@ -1,57 +0,0 @@
#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>

View File

@ -1,333 +0,0 @@
<?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 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;
}

View File

@ -1,12 +0,0 @@
<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>

14
lang/baz_april_fr.php Executable file → Normal file
View File

@ -1,10 +1,18 @@
<?php
// Ceci est un fichier langue de SPIP -- This is a SPIP language file
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
if (!defined('_ECRIRE_INC_VERSION')) return;
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
$GLOBALS[$GLOBALS['idx_lang']] = array(
$GLOBALS[ $GLOBALS['idx_lang'] ] = array(
// C
'baz_april_titre' => 'baz april',
// T
'titre_page_configurer_baz_april' => 'Configuration',
'cfg_baz_april' => 'Configuration du jeu de squelettes<br />
APRIL - base',

View File

@ -1,12 +1,14 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
// Ceci est un fichier langue de SPIP -- This is a SPIP language file
//
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
if (!defined('_ECRIRE_INC_VERSION')) return;
$GLOBALS[ $GLOBALS['idx_lang'] ] = array(
$GLOBALS[$GLOBALS['idx_lang']] = array(
'baz_april_description' => 'squelettes HTML5 avec scss et Tiny Typo',
'baz_april_slogan' => 'squelettes de base pour les sites APRIL',
// C
'baz_april_description' => '',
'baz_april_nom' => 'baz april',
'baz_april_slogan' => 'Squelette de base Zcore + SCSS',
);

102
mes_options.php Normal file
View File

@ -0,0 +1,102 @@
<?php
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
if (substr(_request('recherche'), 0, 4) == 'http') {
$ecran_securite_raison = 'Recherche mal formee';
if ($GLOBALS['ip'] AND date('s') == 0) {
touch(_DIR_TMP . 'flood/' . $GLOBALS['ip']);
}
}
if (isset($ecran_securite_raison)) {
header("HTTP/1.0 403 Forbidden");
header("Expires: Wed, 11 Jan 1984 05:00:00 GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
header("Content-Type: text/html");
die("<html><title>Error 403: Forbidden</title><body><h1>Error 403</h1><p>You are not authorized to view this page ($ecran_securite_raison)</p></body></html>");
}
// ------------------------------------------------------------
// Définition de l'environnement : DEV / PREPROD / PROD
// ------------------------------------------------------------
if (in_array($_SERVER["SERVER_ADDR"], array(
"::1",
"127.0.0.1",
))) {
define('_SERVEUR_MODE', 'DEV');
} else {
if ($_SERVER["SERVER_NAME"] == 'dev.domain.tld') {
define('_SERVEUR_MODE', 'PREPROD');
} else {
define('_SERVEUR_MODE', 'PROD');
}
}
// ------------------------------------------------------------
// Config selon l'environnement
// ------------------------------------------------------------
switch (_SERVEUR_MODE) {
case 'DEV':
case 'PREPROD':
define('SPIP_ERREUR_REPORT', E_ALL & ~E_WARNING & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT);
error_reporting(SPIP_ERREUR_REPORT);
ini_set('display_errors', 1);
define('_DEBUG_AUTORISER', true);
define('_LOG_FILTRE_GRAVITE', 8);
define('_TEST_EMAIL_DEST', 'nd@dataetic.fr');
define('_SCSS_SOURCE_MAP', true);
break;
case 'PROD':
ini_set('display_errors', 0);
define('_LOG_FILTRE_GRAVITE', 8);
define('_SPIP_CHMOD', 0777);
break;
}
ini_set('memory_limit', '384M');
// ------------------------------------------------------------
// Débug et logs
// ------------------------------------------------------------
define('_LOG_FILELINE', true);
define('_DEBUG_SLOW_QUERIES', true);
define('_BOUCLE_PROFILER', 1000);
// Ne pas remlacer < par &lt; dans les logs
define('_LOG_BRUT', true);
ini_set("log_errors", 1);
ini_set("error_log", $_SERVER['DOCUMENT_ROOT'] . '/tmp/log/php.log');
$nombre_de_logs = 6;
$taille_des_logs = 1024; // 1Mo avant rotation
// ------------------------------------------------------------
// Configs spécifiques
// ------------------------------------------------------------
// crypter les noms des inputs dans les formulaires protégés par nospam
define('_SPAM_ENCRYPT_NAME', true);
define('_STATUT_AUTEUR_CREATION', '6forum');
define ('_SAISIES_AFFICHER_SI_JS_SHOW', 'slideDown(300)');
define ('_SAISIES_AFFICHER_SI_JS_HIDE', 'slideUp(300)');
//--------------------------------------------------------------------
// Taille et poids maxi des images et logos
define('_IMG_MAX_WIDTH', 3000);
define('_IMG_MAX_HEIGHT', 3000);
define('_IMG_MAX_SIZE', 1024*4); # poids en ko
define('_LOGO_MAX_WIDTH', 3000);
define('_LOGO_MAX_HEIGHT', 3000);
define('_LOGO_MAX_SIZE', 1024*4); # poids en ko
define('_FILE_MAX_SIZE', 1024*12); # poids en ko

View File

@ -1,47 +1,45 @@
<paquet
prefix="baz_april"
categorie="squelette"
version="0.2.0"
schema="0.0.1"
version="2.0.0"
etat="dev"
compatibilite="[3.2.7;3.3.*]"
compatibilite="[3.2.0;3.3.*]"
logo="prive/themes/spip/images/baz_april-64.png"
documentation=""
schema="1.0.0"
>
<nom>APRIL - base</nom>
<!-- Base de développement sur Z-core + SCSSPHP (SASS) + Tiny Typo + FontAwesome v5 -->
<nom>baz_april</nom>
<auteur>chankalan</auteur>
<auteur>Nicolas Dorigny</auteur>
<licence>GNU/GPL</licence>
<auteur>collectif APRIL</auteur>
<credit>nicod_ (astuces scss dans galactic)</credit>
<credit lien="https://sasscss.org/#license-faqs">Sass CSS</credit>
<credit lien="https://fontawesome.io/license/">Font Awesome</credit>
<necessite nom="bigup"/>
<necessite nom="crayons"/>
<necessite nom="rang"/>
<necessite nom="tri_par_rubrique"/>
<necessite nom="scssphp"/>
<necessite nom="zcore"/>
<licence lien="https://www.gnu.org/licenses/gpl-3.0.html">GPL 3 pour le squelette SPIP</licence>
<licence lien="http://scripts.sil.org">SIL pour les typographies</licence>
<necessite nom="Zcore" />
<necessite nom="scssphp" />
<necessite nom="noizetier" />
<necessite nom="pages" />
<necessite nom="crayons" />
<necessite nom="porte_plume_intertitres" />
<necessite nom="compositions" />
<necessite nom="mailcrypt" />
<necessite nom="bellespuces" />
<necessite nom="facteur" />
<necessite nom="ppp" />
<necessite nom="roles_documents" />
<necessite nom="feuillederoute" />
<necessite nom="tri_par_rubrique" />
<necessite nom="basicone" />
<necessite nom="menus" />
<necessite nom="prive_fluide_remix" />
<!-- <necessite nom="rang" /> -->
<utilise nom="compositions" />
<utilise nom="photoswipe" />
<utilise nom="sociaux" />
<chemin path="squelettes" />
<chemin path="squelettes/scss" />
<chemin path="" />
<utilise nom="prive_fluide_remix"/>
<utilise nom="courtcircuit"/>
<pipeline nom="autoriser" inclure="baz_april_autorisations.php"/>
<pipeline nom="pre_typo" inclure="baz_april_pipelines.php"/>
<chemin path="squelettes"/>
<chemin path="squelettes/scss"/>
<chemin path=""/>
</paquet>

11
prive/squelettes/contenu/configurer_baz_april.html Executable file → Normal file
View File

@ -1,6 +1,7 @@
[(#AUTORISER{configurer, baz_april}|sinon_interdire_acces)]
<h1 class="grostitre"><:baz_april:cfg_baz_april:></h1>
[(#AUTORISER{configurer,_baz_april}|sinon_interdire_acces)]
[<div class="ajax">
(#FORMULAIRE_CONFIGURER_BAZ_APRIL)
</div>]
<h1 class="grostitre"><:baz_april:titre_page_configurer_baz_april:/></h1>
<div class="ajax">
#FORMULAIRE_CONFIGURER_BAZ_APRIL
</div>

View File

@ -0,0 +1,7 @@
<svg enable-background="new 0 0 79.6 94.7" viewBox="0 0 79.6 94.7" xmlns="http://www.w3.org/2000/svg">
<path d="m79.6 40.9c0-23.7-16.7-40.9-39.8-40.9s-39.8 17.2-39.8 40.9c0 10.3 3.1 19.4 8.9 26.7-.1.3-.1.7-.1 1 0 3.2 2.6 5.9 5.9 5.9h.5c1.1 11.8 11.1 20.1 24.6 20.1s23.5-8.3 24.6-20.1h.6c3.2 0 5.9-2.6 5.9-5.9 0-.4 0-.7-.1-1.1 5.8-7.2 8.8-16.3 8.8-26.6z" fill="#fff"/>
<path d="m79.6 40.9c0-23.7-16.7-40.9-39.8-40.9s-39.8 17.2-39.8 40.9c0 10.3 3.1 19.4 8.9 26.7-.1.3-.1.7-.1 1 0 3.2 2.6 5.9 5.9 5.9h.5c1.1 11.8 11.1 20.1 24.6 20.1s23.5-8.3 24.6-20.1h.6c3.2 0 5.9-2.6 5.9-5.9 0-.4 0-.7-.1-1.1 5.8-7.2 8.8-16.3 8.8-26.6zm-39.8 49.6c-10.3 0-17.8-5.3-19.9-13.4 2 1.1 4 2 6.1 2.8v2.7c0 1.2.9 2.1 2.1 2.1s2.1-.9 2.1-2.1v-1.4c2.4.5 4.8.9 7.3 1v2.9c0 1.2.9 2.1 2.1 2.1s2.1-.9 2.1-2.1v-2.9c2.3-.1 4.6-.4 6.8-.9v1.3c0 1.2.9 2.1 2.1 2.1s2.1-.9 2.1-2.1v-2.5c2.3-.8 4.6-1.8 6.7-3-1.7 8-9.3 13.4-19.6 13.4zm25.1-20.1h-2.5c-.8 0-1.4.4-1.8 1.1-2.3 1.7-4.9 3-7.5 4v-.5c0-1.2-.9-2.1-2.1-2.1s-2.1.9-2.1 2.1v1.8c-2.2.5-4.5.9-6.8 1v-2.8c0-1.2-.9-2.1-2.1-2.1s-2.1.9-2.1 2.1v2.8c-2.5-.1-4.9-.5-7.3-1.1v-1.7c0-1.2-.9-2.1-2.1-2.1s-2.2.9-2.2 2.1v.3c-2.5-1-4.8-2.3-7-3.8-.4-.7-1-1.1-1.9-1.1h-2.5c-.9 0-1.6-.7-1.6-1.6s.7-1.6 1.6-1.6c1.2 0 2.1-.9 2.1-2.1s-.9-2.1-2.1-2.1-2.4.4-3.4 1.1c-4.7-6.3-7.1-14.3-7.1-22.9 0-21.3 15-36.7 35.6-36.7s35.7 15.3 35.7 36.5c0 8.6-2.4 16.6-7.1 22.9-.9-.6-2.1-1-3.3-1s-2.1.9-2.1 2.1.9 2.1 2.1 2.1c.9 0 1.6.7 1.6 1.6-.4.8-1.1 1.7-2 1.7z"/>
<path d="m24.7 40.2c-5.3 0-9.6 4.3-9.6 9.6s4.3 9.6 9.6 9.6 9.6-4.3 9.6-9.6c.1-5.3-4.2-9.6-9.6-9.6z"/>
<path d="m54.9 40.2c-5.3 0-9.6 4.3-9.6 9.6s4.3 9.6 9.6 9.6 9.6-4.3 9.6-9.6-4.3-9.6-9.6-9.6z"/>
<path d="m39.8 58.8c-.8 0-1.5.5-1.9 1.2l-3.2 6.5 2.1 1c.4-1.3 1.6-2.2 3.1-2.2 1.4 0 2.6.9 3.1 2.2l2.1-1-3.2-6.5c-.5-.7-1.3-1.2-2.1-1.2z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@ -41,5 +41,3 @@ git clone https://github.com/nd-/tri_par_rubrique.git
git clone https://git.spip.net/spip-contrib-extensions/role_documents.git
git clone https://git.spip.net/spip-contrib-extensions/menus.git
git clone https://git.spip.net/spip-contrib-extensions/prive_fluide_remix.git

View File

@ -1 +0,0 @@
.spip-admin-float { z-index: 100; position: fixed; right: 20%; top: auto; bottom:0; white-space: nowrap; }

View File

@ -1,4 +0,0 @@
#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}} />

2
squelettes/article.html Executable file → Normal file
View File

@ -1,3 +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} />
<INCLURE{fond=structure,env,id_rubrique,id_secteur,type-page=article,composition=#COMPOSITION} />
</BOUCLE_principale_article>

13
squelettes/aside/dist.html Executable file → Normal file
View File

@ -1,2 +1,11 @@
[(#REM) Menu de navigation par rubriques ]
<INCLURE{fond=inclure/rubriques,env,type-page,composition} />
[(#REM) Articles dans la meme rubrique ]
<B_articles_rubrique>
<ul>
<BOUCLE_articles_rubrique(ARTICLES) {id_rubrique} {tri_rubrique} {0,10}>
<li><a href="#URL_ARTICLE"[ class="(#EXPOSE)"]>#TITRE</a></li>
</BOUCLE_articles_rubrique>
</ul>
</B_articles_rubrique>

View File

View File

@ -1,10 +0,0 @@
[(#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}

View File

@ -1,40 +1,39 @@
<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 class="page__wrapper">
<header class="page__header">
<div class="page--container">
<INCLURE{fond=header/#ENV{type-page},env} />
<INCLURE{fond=inclure/nav-secteurs,env} />
</div>
[<div class="header__boussole" data-page="(#URL_PAGE{boussole}|parametre_url{var_zajax,content})"></div>]
</header>
<body class="body[__(#ENV{type-page})][--(#COMPOSITION)][ body--(#COMPOSITION)][ body--(#SITE_COURANT)]">
<div class="page_wrapper">
<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-->
[(#COMPOSITION|=={dossier}|et{#ENV{type-page}|=={article}}|non)
<aside class="contentAside">
<INCLURE{fond=aside/#ENV{type-page},env} />
</aside><!--.aside-->]
<header class="page_header">
<div class="page_container page_header_container">
<INCLURE{fond=header/#ENV{type-page},env}>
</div>
<INCLURE{fond=inclure/boussole} />
</header>
<div class="page_main">
<div class="page_container page_main__container">
<div class="page_main_content">
<div class="page_content">
<INCLURE{fond=breadcrumb/#ENV{type-page},env}>
<INCLURE{fond=content/#ENV{type-page},env}>
<div class="page_extra">
<INCLURE{fond=extra/#ENV{type-page},env}>
</div>
</div>[(#COMPOSITION|=={dossier}|et{#ENV{type-page}|=={article}}|non)
<aside class="page_aside">
<INCLURE{fond=aside/#ENV{type-page},env} />
</aside><!--.aside-->]
</div>
</div>
</div>
<aside class="connex">
<INCLURE{fond=connex/#ENV{type-page},env} />
</aside>
<footer class="page_footer">
<div class="page_container page_footer__container">
<INCLURE{fond=footer/#ENV{type-page},env}>
</div>
</footer>
</div>
<aside class="connex">
<INCLURE{fond=connex/#ENV{type-page},env} />
</aside>
<footer class="page__footer">
<div class="page--container">
<INCLURE{fond=footer/#ENV{type-page},env} />
</div>
</footer>
</div><!--.container-->
</body>

View File

@ -1,5 +0,0 @@
[(#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>

View File

@ -1,5 +0,0 @@
[(#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>

View File

@ -0,0 +1,13 @@
<B_breadcrumb>
<nav aria-label="breadcrumb" class="arbo">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="#URL_SITE_SPIP"><:accueil_site:/></a></li>
<BOUCLE_breadcrumb(ARTICLES){id_article}>
<BOUCLE_ariane(HIERARCHIE){id_article}>
<li class="breadcrumb-item"><a href="#URL_RUBRIQUE">[(#TITRE|couper{60})]</a></li>
</BOUCLE_ariane>
<li class="breadcrumb-item">[(#TITRE|couper{60})]</li>
</BOUCLE_breadcrumb>
</ol>
</nav>
</B_breadcrumb>

18
squelettes/breadcrumb/auteur.html Executable file → Normal file
View File

@ -1,8 +1,10 @@
<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>
<B_breadcrumb>
<nav aria-label="breadcrumb" class="arbo">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="#URL_SITE_SPIP"><:accueil_site:/></a></li>
<BOUCLE_breadcrumb(AUTEURS){id_auteur}{tout}>
<li class="breadcrumb-item">[(#NOM|couper{60})]</li>
</BOUCLE_breadcrumb>
</ol>
</nav>
</B_breadcrumb>

20
squelettes/breadcrumb/dist.html Executable file → Normal file
View File

@ -1,15 +1,5 @@
<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>
<nav aria-label="breadcrumb" class="arbo">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="#URL_SITE_SPIP"><:accueil_site:/></a></li>
</ol>
</nav>

View File

@ -1,7 +0,0 @@
<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>]

View File

@ -1,10 +0,0 @@
[(#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>

16
squelettes/breadcrumb/mot.html Executable file → Normal file
View File

@ -1,8 +1,10 @@
<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>
<B_breadcrumb>
<nav aria-label="breadcrumb" class="arbo">
<ol class="breadcrumb">
<BOUCLE_breadcrumb(MOTS){id_mot}>
<li><a href="#URL_SITE_SPIP"><:accueil_site:/></a></li>
[<li>(#TITRE|couper{60})</li>]
</BOUCLE_breadcrumb>
</ol>
</nav>
</BOUCLE_content>
</B_breadcrumb>

10
squelettes/breadcrumb/plan.html Executable file → Normal file
View File

@ -1,4 +1,6 @@
<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>
<nav aria-label="breadcrumb" class="arbo">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="#URL_SITE_SPIP"><:accueil_site:/></a></li>
<li class="breadcrumb-item"><:plan_site:/></li>
</ol>
</nav>

10
squelettes/breadcrumb/recherche.html Executable file → Normal file
View File

@ -1,4 +1,6 @@
<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>
<nav aria-label="breadcrumb" class="arbo">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="#URL_SITE_SPIP"><:accueil_site:/></a></li>
<li class="breadcrumb-item"><:resultats_recherche:/></li>
</ol>
</nav>

View File

@ -0,0 +1,13 @@
<B_breadcrumb>
<nav aria-label="breadcrumb" class="arbo">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="#URL_SITE_SPIP"><:accueil_site:/></a></li>
<BOUCLE_breadcrumb(RUBRIQUES){id_rubrique}>
<BOUCLE_ariane(HIERARCHIE){id_rubrique}>
<li class="breadcrumb-item"><a href="#URL_RUBRIQUE">[(#TITRE|couper{60})]</a></li>
</BOUCLE_ariane>
<li class="breadcrumb-item">[(#TITRE|couper{60})]</li>
</BOUCLE_breadcrumb>
</ol>
</nav>
</B_breadcrumb>

View File

View File

@ -1,10 +0,0 @@
[(#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>

11
squelettes/content/404.html Executable file → Normal file
View File

@ -1,10 +1 @@
[(#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>
<h1><:pass_erreur:/> 404</h1>

49
squelettes/content/article.html Executable file → Normal file
View File

@ -1,16 +1,19 @@
<BOUCLE_content(ARTICLES){id_article}>
<article class="content" id="content">
<BOUCLE_principale(ARTICLES){id_article}>
<article>
<header class="cartouche">
[<p class="#EDIT{surtitre} surtitre">(#SURTITRE)</p>]
<h1><span class="#EDIT{titre}">#TITRE</span>[
<h1><span class="#EDIT{titre} article__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>]]
<p class="article__infos">
[<span class="article__date">Publié le (#DATE|nom_jour) [(#DATE|affdate)] #SET{heure,#DATE|heures_minutes} [à (#GET{heure}|=={00h00min}|non)#GET{heure}]</span>]
[(#CONFIG{baz_april/afficherauteurs}|=={on}|oui)[<span class="article__auteurs"><:par_auteur:> (#LESAUTEURS)</span>]]
</p>
[(#REM) Inclure le modele des liens de traductions ]
<div class="postmeta">
#MODELE{article_traductions}
<B_tags>
@ -28,21 +31,29 @@
</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>]
[<div class="#EDIT{chapo} article__chapo">(#CHAPO)</div>]
[<div class="#EDIT{texte} article__texte">(#TEXTE|image_reduire{#CONST{_CONTENT_WIDTH},0})</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>
[<aside>
(#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>
[<p class="#EDIT{hyperlien} article__hyperlien"><:voir_en_ligne:/> : <a href="(#URL_SITE)" class="spip_out">[(#NOM_SITE|sinon{[(#URL_SITE|couper{80})]})]</a></p>]
[<div class="ps">
<div class="#EDIT{ps} article__ps">(#PS|image_reduire{#CONST{_CONTENT_WIDTH},0})</div>
</div>]
[<div class="article__notes">(#NOTES)</div>]
</footer>
</article>
</BOUCLE_content>
</BOUCLE_principale>

View File

@ -1,22 +0,0 @@
<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>]