baz_april v2.0 rebasé sur zboot en entier
This commit is contained in:
parent
1628a0b5ab
commit
2335123b59
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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,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"> </span><input type="submit" class="submit" value="<:bouton_enregistrer:/>" /></p>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
|
|
@ -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,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',
|
||||
|
||||
|
|
|
@ -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
|
54
paquet.xml
54
paquet.xml
|
@ -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>
|
||||
|
|
|
@ -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 |
|
@ -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
|
||||
|
|
|
@ -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>
|
||||
<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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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"><:info_rechercher:> [« <strong class="on">(#RECHERCHE)</strong> »]</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>
|
||||
|
|
|
@ -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,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>
|
||||
|
|
|
@ -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>]
|
||||