spip_nursit/plugins-dist/dist/nursit/en_travaux/entravaux_options.php

187 lines
5.8 KiB
PHP
Raw Permalink Normal View History

2023-06-01 15:30:12 +00:00
<?php
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Autoriser a voir le site en travaux : par defaut tous les webmestre,
* mais c'est configurable
* @return mixed
*/
function autoriser_travaux_dist($faire, $type, $id, $qui, $opt){
include_spip('inc/config');
$statut = lire_config('entravaux/autoriser_travaux');
if (!$statut) {
$statut = 'webmestre';
}
if ($statut == 'webmestre') {
return autoriser('webmestre');
} elseif ($statut == '0minirezo') {
return $qui['statut'] == '0minirezo';
} elseif ($statut == '1comite') {
return $qui['statut'] == '1comite' or $qui['statut'] == '0minirezo';
}
return false;
}
/**
* Verifier un verrou fichier pose dans local/entravaux_xxx.lock
* pour ne pas qu'il saute si on importe une base
* La meta n'est qu'un cache qu'on met a jour si pas dispo.
* @param string $nom
* @param bool $force
* @return bool
*/
function entravaux_check_verrou($nom, $force=false){
if (!isset($GLOBALS['meta'][$m='entravaux_'.$nom]) OR $force){
ecrire_meta($m,file_exists(_DIR_VAR.$m.".lock")?"oui":"non",'non');
}
return $GLOBALS['meta'][$m]=="oui"; // si oui : verrou pose
}
/**
* A-t-on active les travaux oui ou non ?
* @return bool
*/
function is_entravaux(){
// upgrade sauvage ?
include_spip('entravaux_administrations');
if (isset($GLOBALS['meta']['entravaux_id_auteur'])){include_spip('entravaux_install');entravaux_poser_verrou("accesferme");effacer_meta('entravaux_id_auteur');}
if (defined('_ENTRAVAUX_IP_EXCEPTIONS') AND in_array($GLOBALS['ip'],explode(',',_ENTRAVAUX_IP_EXCEPTIONS))) return false;
return entravaux_check_verrou("accesferme");
}
if (is_entravaux()){
include_spip('inc/autoriser');
// dans le site public
// si auteur pas autorise : placer sur un cache dedie
// si auteur autorise, desactiver le cache :
// il voit le site, mais pas de cache car il travaille dessus !
if (!test_espace_prive()){
if (!autoriser('travaux')){
if (isset($GLOBALS['marqueur'])) {
$GLOBALS['marqueur'].= ':en_travaux';
} else {
$GLOBALS['marqueur'] = ':en_travaux';
}
}
else {
// desactiver le cache sauf si inhibe par define
if (!defined('_ENTRAVAUX_GARDER_CACHE'))
if (!defined('_NO_CACHE')) define('_NO_CACHE',1);
}
}
// si espace prive : die avec page travaux
// sauf si pas loge => redirection
else {
if (_FILE_CONNECT
and !in_array(_request('action'),array('logout'))
and !in_array(_request('exec'),array('install', 'mutualisation'))
){
if (!autoriser('travaux')){
spip_initialisation_suite();
// si on est loge : die() avec travaux
if (isset($GLOBALS['visiteur_session']['id_auteur']) AND $GLOBALS['visiteur_session']['id_auteur'] != ''){
$travaux = recuperer_fond("inclure/entravaux",array());
// fallback : le fond renvoie parfois du vide ...
if (!strlen($travaux)){
@define('_SPIP_SCRIPT','spip.php');
echo "Acces interdit (en travaux) <a href='"
.generer_url_action('logout',"logout=public",false,true)
."'>Deconnexion</a>";
}
else
echo $travaux;
die();
}
// sinon retour sur login_sos
else {
$redirect = parametre_url(generer_url_public('login_sos'),'url',self(),'&');
include_spip('inc/headers');
redirige_par_entete($redirect);
}
}
}
}
}
/**
* Pipeline styliser pour rerouter tous les fonds vers en_travaux
* sauf si l'auteur connecte est celui qui a active le plugin
*
* @param array $flux
* @return array
*/
function entravaux_styliser($flux){
if (is_entravaux()){
include_spip('inc/autoriser');
// les pages exceptions
$pages_ok = array('login_sos','robots.txt','spip_pass','favicon.ico','informer_auteur');
// des squelettes autorisés configurables via mes_options
if (defined('_SKEL_HORS_TRAVAUX')) $skels_ok = explode(',',_SKEL_HORS_TRAVAUX);
else $skels_ok = array();
if (!autoriser('travaux')
AND !in_array($flux['args']['fond'], $pages_ok)
AND !in_array($flux['args']['fond'], $skels_ok)
AND !(isset($flux['args']['contexte'][_SPIP_PAGE]) and in_array($flux['args']['contexte'][_SPIP_PAGE], $pages_ok))
AND !((_request('var_mode') === 'preview') AND (_request('var_previewtoken') != '') AND autoriser('previsualiser'))
// et on laisse passer modeles et formulaires,
// qui ne peuvent etre inclus ou appeles que legitimement
AND strpos($flux['args']['fond'],'/')===false){
$fond = trouver_fond('inclure/entravaux','',true);
$flux['data'] = $fond['fond'];
}
}
return $flux;
}
/**
* Afficher une icone de travaux sur tout le site public pour que le webmestre n'oublie pas
* de retablir le site
*
* @param string $flux
* @return string
*/
function entravaux_affichage_final($flux){
if (is_entravaux()
AND !test_espace_prive()
AND $GLOBALS['html']
AND !_AJAX){
include_spip('inc/filtres'); // pour http_img_pack
$x = '<div id="icone_travaux" style="
position: fixed;
left: 40px;
top: 40px;
z-index: 10000;
">'
. http_img_pack(chemin_image('entravaux-64.png'), _T('entravaux:en_travaux'), '', _T('entravaux:en_travaux'))
. '</div>';
if (!$pos = strpos($flux, '</body>'))
$pos = strlen($flux);
$flux = substr_replace($flux, $x, $pos, 0);
}
return $flux;
}
/**
* Afficher une notice sur l'accueil de ecrire
* @param array $flux
* @return array
*/
function entravaux_affiche_milieu($flux){
if (is_entravaux()){
if ($flux['args']['exec']=='accueil'){
$notice = recuperer_fond('inclure/entravaux_notice_ecrire',array());
if (strlen(trim($notice)))
$flux['data'] = $notice . $flux['data'];
}
}
if ($flux['args']['exec']=='configurer_identite'){
$flux['data'] .= recuperer_fond('prive/squelettes/contenu/configurer_entravaux',array());
}
return $flux;
}