
153 changed files with 4032 additions and 4446 deletions
@ -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() { |
||||
} |
@ -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; |
||||
} |
||||
|
@ -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'); |
||||
|
@ -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; |
||||
} |
||||
|
@ -0,0 +1 @@
|
||||
<BOUCLE_premier_article(ARTICLES){id_rubrique} {tri_rubrique} {0,1}>#ID_ARTICLE</BOUCLE_premier_article> |
@ -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> |
@ -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 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; |
||||
} |
@ -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> |
@ -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', |
||||
); |
||||
|
@ -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 < 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 |
@ -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> |
||||
|
@ -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> |
||||
|
After Width: | Height: | Size: 1.7 KiB |
@ -1 +0,0 @@
|
||||
.spip-admin-float { z-index: 100; position: fixed; right: 20%; top: auto; bottom:0; white-space: nowrap; } |
@ -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}} /> |
@ -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> |
||||
|
@ -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> |
||||
|
@ -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} |
@ -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> |
||||
|
||||
<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-->] |
||||
</div> |
||||
<body class="body[__(#ENV{type-page})][--(#COMPOSITION)][ body--(#COMPOSITION)][ body--(#SITE_COURANT)]"> |
||||
<div class="page_wrapper"> |
||||
|
||||
<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} /> |
||||
<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> |
||||
</footer> |
||||
|
||||
</div><!--.container--> |
||||
|
||||
<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> |
||||
</body> |
||||
|
@ -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"> > </span> |
||||
<span class="active"><:pass_erreur:>[ (#ENV{status})]</span> |
||||
</nav> |
@ -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"> > </span> |
||||
<span class="active"><:pass_erreur:> 404</span> |
||||
</nav> |
@ -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> |
@ -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"> > </span> |
||||
<:info_auteurs:><span class="divider"> > </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> |
||||
|
@ -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> |
||||
|
@ -1,7 +0,0 @@
|
||||
<a href="#URL_SITE_SPIP/"><:accueil_site:></a><span class="divider"> > </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"> > </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)> </span>] |
@ -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"> > </span><strong class="on">(#GET{prive}|?{<:login_acces_prive:>,<:lien_connecter:>})</strong>] |
||||
</nav> |
@ -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"> > </span> |
||||
<span><:mots_clefs:></span><span class="divider"> > </span> |
||||
<BOUCLE_ariane(GROUPES_MOTS){id_groupe}><span>[(#TITRE|couper{80})]</span><span class="divider"> > </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> |
||||
|
@ -1,4 +1,6 @@
|
||||
<nav class="arbo" aria-label="Fil d'Ariane"> |
||||
<a href="#URL_SITE_SPIP/"><:accueil_site:></a><span class="divider"> > </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> |
||||
|
@ -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> |
@ -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> |
@ -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> |
@ -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>] |
||||
</footer> |
||||
</section> |
||||
</BOUCLE_content> |
@ -1,18 +0,0 @@
|
||||
<div class="page--container"> |
||||
<span class="initiatives"><:baz_april:des_initiatives_april:></span> |
||||
<button type="button" class="btn-boussole"><:baz_april:site_april:></button> |
||||
<nav class="nav"><BOUCLE_csv(DATA){source csv, #CHEMIN{csv/boussole.csv}}> |
||||
<a href="#VALEUR{1}">#VALEUR{0}</a></BOUCLE_csv> |
||||
</nav> |
||||
</div> |
||||
<script type="text/javascript"> |
||||
jQuery(function($){ |
||||
|
||||
// afficher/masquer la boussole < medium |
||||
$('.btn-boussole').on('click', function(){ |
||||
$(this).toggleClass('actif').siblings('.nav').toggleClass('ouvert'); |
||||
$('.principale .btn-nav').removeClass('actif').siblings('.nav-list').removeClass('ouvert'); |
||||
}); |
||||
|
||||
}); |
||||
</script> |