You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

97 lines
3.2 KiB

<?php
// fichier d'options SPIP principal du plugin xray
// xray/xray_options.php
//
if (!defined('_ECRIRE_INC_VERSION')) return;
if (!defined('_ECRIRE_INC_VERSION')) return;
// Les fonctions et inclusions ne sont pas bien rangées ni optimisées
include_spip('inc/xray_options'); // éventuelle définition des options par un autre plugin
include_spip('inc/xray_options_default');
/**
* @param string $motif_connu motif du vidage ou vide
*
* La fonction peut être utilisée avec un motif_connu pour enregistrer le motif dans le marqueur quand on vide le cache
* ou sans motif_connu pour détecter un éventuel vidage involontaire par exemple suite à saturation de la mémoire allouée au cache
* Doit donc être accessible partout.
*
* Peut-on l'appeler dans xray pour détecter un var_mode=recalcul ? non il semble que ce soit appelé AVANT le vidage de cache
*/
function xray_detecte_vidage(string $motif_connu='Flush système ?') { // détecter les vidages de caches yc par saturation de l'espace dispo
$Memoization = memoization();
if (!$Memoization) {
return;
}
if (!$Memoization->exists('xray_detecte_vidage')) {
spip_log ("xray détecte qu'un vidage du cache a eu lieu", 'xray_detecte_vidage');
$Memoization->set('xray_detecte_vidage', date ('d/m/Y H:i:s')." $motif_connu // re-création du marqueur car il n’existait plus");
}
}
if (isset($_GET['var_mode']) and ($_GET['var_mode'] == 'recalcul')) {
xray_detecte_vidage('var_mode=recalcul // Détecté par XRay');
}
if (!isset($_GET['exec']) or ($_GET['exec']!='xray')) {
return;
}
/**
* @param $faire
* @param string $type
* @param int $id
* @param null $qui
* @param null $opt
* @return bool
*/
function autoriser_xray_dist($faire, $type='', $id=0, $qui = NULL, $opt = NULL) : bool {
return autoriser('webmestre')
or (defined ('ID_AUTEUR_AUTORISER_XRAY')
and isset($GLOBALS['visiteur_session']['id_auteur'])
and ($GLOBALS['visiteur_session']['id_auteur']==intval(ID_AUTEUR_AUTORISER_XRAY)));
}
/**
* @param string $t
* @return string
* Le filtre xray_marqueur_invisible met ce qu'il reçoit dans un cache APC 'xray_marqueur_visible'
* et renvoie une chaine vide pour le html, si bien que ce qui est caché... reste invisible
*/
function xray_marqueur_invisible(string $t) : string {
// souriez :
recuperer_fond('inclure/xray_marqueur_visible', array('what'=>'session','texte'=>$t));
// circulez :
return '';
}
$methode = $fexists = '';
$cfg = @unserialize($GLOBALS['meta']['memoization']);
$err = '';
if (!memoization() or !$cfg or !function_exists('memoization_methode')) {
$err = "<a href='?exec=configurer_memoization'>Pour XRay, activez memoization par apc ou apcu</a>";
}
elseif (!memoization_methode('apc') and !memoization_methode('apcu')) {
$err = "Le plugin XRay nécessite d'activer le plugin memoization avec APC ou APCu";
}
else {
$methode = memoization_methode('apcu') ? 'apcu' : 'apc';
$fexists = $methode.'_exists';
if (!function_exists($fexists)) {
$err = "Memoization est activée avec $methode, mais il manque la fonction $fexists";
}
}
if ($err) {
if (isset($_GET['exec']) and ($_GET['exec']=='xray')) {
echo "<h1>$err</h1>";
exit;
}
spip_log($err, 'xray');
return;
}
include_once ('xray_apc.php');
exit;