'source', 'N'=>'nb', 'V'=>'mem_size', 'I'=>'num_hits']; $index = ($indexes[$tri] ?? $indexes['N']); usort ( $liste_squelettes, function ($s1, $s2) use ($index, $asc_or_desc) { return ($asc_or_desc=='A') ? ($s1[$index] <=> $s2[$index]) : ($s2[$index] <=> $s1[$index]); } ); return $liste_squelettes; } /** * @param string $type_liste * affiche l'entête du tableau des résultats du scanner */ function xray_scanner_head (string $type_liste) { echo '
'; if ($type_liste == 'squelettes') { echo ''; } else { echo '', '', '', '', '', ''; } } /** * @param string $search expression recherchée * @param string $where lieu de recherche * @return string expression recherchée préparée pour la recherche */ function xray_prepare_search (string $search, string $where) : string { if (!$search) { return ''; } // Don't use preg_quote because we want the user to be able to specify a // regular expression subpattern. // FIXME : certaines regexp ne sont pas comprises. Depuis la syntaxe simlifiée ? // Detection of a potential preg error : if (@preg_match ('~' . antislash ($search) . '~i', null) === false) { echo '
Error: search expression is not a valid regexp (it needs escaping parentheses etc)
'; $search = preg_quote ($search, '/'); echo "
Warning : search expression has been preg_quoted : $search
"; } // Syntaxe simplifiée pour la recherche dans les contextes // "id_truc=val" est compris comme le "[id_truc] = val" des fournitures de print_r if ( $where == 'CONTEXTE' and !preg_match ("/^\[.*\]/", $search) ) { $search = preg_replace ( "/^(.*)\s*=\s*(.*)$/", "\\[$1\\]\\s*=>\\s*$2", $search ); } else { if (substr($search, 0, 1) != '^') { $search = '^.*'.$search; } if (substr($search, -1, 1) != '$') { $search .= '.*$'; } } return '~' . $search . '~i'; } /** * Affiche les options de recherche, filtrage et affichage du scanner */ function xray_menu_scanner () { global $MYREQUEST, $MY_SELF; echo '

Lister :   '; $extra_visibility = 'visible'; if ($MYREQUEST['TYPELISTE'] == 'squelettes') { echo 'Caches | Squelettes'; $extra_visibility = 'hidden'; } else { echo 'Caches | Squelettes'; } echo ' Afficher : '; $xray_nepasafficher_autres_sites = true; if (!XRAY_NEPASAFFICHER_AUTRES_SITES) { $xray_nepasafficher_autres_sites = $_GET['xray_nepasafficher_autres_sites'] ?? XRAY_NEPASAFFICHER_AUTRES_SITES; echo ''; } else { echo 'Préfixe exigé : '._CACHE_NAMESPACE.''; } echo '

'; echo '

Filtrer caches : Types     avec dans     '; if (test_plugin_actif ('cachelab')) { echo ''; } else { echo ' X? '; } echo '

'; if (in_array ($MYREQUEST['TYPECACHE'], array('PAGES', 'INCLUSIONS')) and !function_exists ('xray_reconnaitre_si_cache_est_page') ) { echo 'Pour reconnaître si un cache correspond à une page ou à une inclusion, il faut définir une fonction xray_reconnaitre_si_cache_est_page($nomcache, $data) dans le fichier de _fonctions.php de votre plugin, avec un code adapté aux types d’urls de votre site.
À défaut, la sélection présentée ici est certainement erronée.'; } } /** * @param string $typecache type de cache affiché * @param string &$pattern_typecache regexp implémentant le filtrage des typecaches * @param string &$also_required fonction à appeler en plus * @param bool &$also_required_bool valeur requise pour le retour de $also_required * * Cette fonction prépare les paramètres permettant ensuite le filtrage */ function xray_prepare_filtrage (string $typecache ,string &$pattern_typecache, string &$also_required, bool &$also_required_bool) { switch ($typecache) { case 'ALL': $pattern_typecache = ''; break; case 'NON_SESSIONS': $pattern_typecache = XRAY_PATTERN_NON_SESSION; $also_required = 'cache_est_talon'; $also_required_bool = false; break; case 'SESSIONS': $pattern_typecache = XRAY_PATTERN_SESSION; break; case 'SESSIONS_AUTH': $pattern_typecache = XRAY_PATTERN_SESSION_AUTH; break; case 'SESSIONS_NONAUTH': $pattern_typecache = XRAY_PATTERN_SESSION_ANON; break; case 'SESSIONS_TALON': $pattern_typecache = XRAY_PATTERN_NON_SESSION; $also_required = 'cache_est_talon'; break; case 'FORMULAIRES': $pattern_typecache = '~formulaires/~i'; break; case 'DYNAMIQUES' : $also_required = 'cache_est_dynamique'; break; case 'STATIQUES' : $also_required = 'cache_est_statique'; break; case 'PAGES' : $also_required = 'cache_est_page'; break; case 'INCLUSIONS' : $also_required = 'cache_est_page'; $also_required_bool = false; break; } } /** * @param array|string $searched cache complet, dont on ne cherche qu'une partie, selon $where * @param string &$search chaine cherchée, modifiée dans le cas "INCLUSIONS" * @param string $where endroit où l'on cherche * @return string partie du cache qu est cherchée */ function xray_get_searched_part ($searched, string &$search, string $where) { if ($search and ($search != '~~i') and $where) { switch ($where) { case 'ALL' : return $searched; case 'HTML' : if (is_array ($searched)) { return $searched['texte'] ?? ''; } break; case 'CONTEXTE' : if (is_array ($searched)) {// !textwheel return $searched['contexte'] ?? ''; } break; case 'FICHIER_SOURCE' : if (is_array ($searched)) { // !textwheel return $searched['source'] ?? ''; } break; case 'FICHIER_SKEL' : if (is_array ($searched)) { // !textwheel return $searched['squelette'] ?? ''; } break; case 'META' : if (is_array ($searched)) { // !textwheel unset($searched['texte']); return $searched; } break; case 'INCLUSIONS' : if (is_array($searched)){ $search = '~recuperer_fond[^,]*' . ltrim($search,'~'); return $searched['texte'] ?? ''; } break; default : die("Mauvaise valeur pour where : '$where'"); } } return ''; } /** * @param $data le cache * @param string $type_extra le type d'extra demandé * @return string le texte de l'extra à afficher */ function prepare_extra($data, string $type_extra) : string { $extra = null; $jolif='xray_joli_cache'; if (is_array($data)) { switch ($type_extra) { case 'CONTEXTE': $jolif='joli_contexte'; $extra = $data['contexte'] ?? '(non défini)'; break; case 'CONTEXTES_SPECIAUX': if (isset($data['contexte'])) { $jolif='joli_contexte'; $extra = $data['contexte']; foreach (array( 'lang', 'date', 'date_default', 'date_redac', 'date_redac_default' ) as $ki) unset($extra[$ki]); } else $extra = '(non défini)'; break; case 'HTML_COURT' : if (isset($data['texte'])) { $extra = ajuste_longueur_html ($data['texte']); } else { $extra = '(non défini)'; } break; case 'SQUELETTE' : $extra = $data['source'] ?? '(aucune source spécifiée)'; break; case 'INFO_AUTEUR': $jolif='joli_contexte'; if (isset($data['contexte'])) { foreach (array( 'id_auteur', 'email', 'nom', 'statut', 'login' ) as $ki) { if (isset($data['contexte'][$ki])) { $extra[$ki] = $data['contexte'][$ki]; } } } break; case 'INFO_OBJET_SPECIAL': $jolif='joli_contexte'; if (isset($data['contexte'])) { $ki = 'id_'.XRAY_OBJET_SPECIAL; if (isset($data['contexte'][$ki])) { $extra[$ki] = $data['contexte'][$ki]; } } break; case 'INVALIDEURS': if (isset ($data['invalideurs'])) { $extra = $data['invalideurs']; } break; case 'INVALIDEURS_SPECIAUX': if (isset ($data['invalideurs'])) { $extra = $data['invalideurs']; foreach (array( 'cache', 'session' ) as $ki) { unset($extra[$ki]); } } break; case 'INCLUSIONS' : if (!isset ($data['texte'])) { $extra = '(html non défini)'; } elseif (preg_match_all("/<\?php\s+echo\s+recuperer_fond\s*\(\s*'([a-z0-9_\-\.\/]+)'/", $data['texte'], $matches)) { $extra = $matches[1]; } else { $extra = '(aucune )'; } break; case 'MACROSESSIONS' : if (!isset ($data['texte'])) { $extra = '(html non défini)'; } elseif (preg_match_all("/\bpipelined_session_get\s*\((['\"a-z0-9\s_\-\.\/,]+)\)/", $data['texte'], $matches)) { $extra = $matches[1]; } else { $extra = '(aucune balise #_SESSION ou #_SESSION_SI)'; } break; case 'MACROAUTORISER' : if (!isset ($data['texte'])) { $extra = '(html non défini)'; } elseif (preg_match_all("/if\s+\(autoriser\s*\((.+)\)\s*\)\s*{\s*\?>/", $data['texte'], $matches)) { $extra = $matches[1]; } else { $extra = '(aucune balise #_AUTORISER_SI)'; } break; } } if ($extra) { return $jolif($extra); } return '(rien)'; }
', sortheader ('Q', 'Squelette') . ' Compilé ', sortheader ('N', 'Nb Caches') . ' ', sortheader ('I', 'Hits') . ' ', sortheader ('V', 'Taille') . 'Caches - ', sortheader ('S', 'tri par Squelette') . '', sortheader ('H', 'Hits'), '', sortheader ('Z', 'Size'), '', sortheader ('C', 'Created at'), '', sortheader ('T', 'Timeout'), 'Del