Browse Source

Mise au point de la liste générique des caches et d'une balise #CACHE_LISTE.

Finalisation des renommages cache en ezcache.
svn/root/tags/v0.8.1
Eric Lupinacci 3 years ago
parent
commit
1a0da64d72
  1. 54
      action/telecharger_cache.php
  2. 6
      ezcache/ezcache.php
  3. 54
      ezcache_fonctions.php
  4. 0
      ezcache_logo-64.png
  5. 0
      ezcache_pipelines.php
  6. 3
      lang/cache_fr.php
  7. 8
      paquet.xml
  8. 74
      prive/squelettes/liste/caches.html
  9. 42
      prive/squelettes/liste/fichiers.html

54
action/telecharger_cache.php

@ -0,0 +1,54 @@
<?php
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Telecharger un fichier d'export JSON.
*
* @return void
*/
function action_telecharger_cache_dist() {
$securiser_action = charger_fonction('securiser_action', 'inc');
$fichier = $securiser_action();
// Verification des autorisations
include_spip('inc/autoriser');
if (!autoriser('cache')) {
include_spip('inc/minipres');
echo minipres();
exit();
}
if (file_exists($fichier)) {
// Vider tous les tampons pour ne pas provoquer de Fatal memory exhausted
$level = @ob_get_level();
while ($level--) {
@ob_end_clean();
}
// Header du stream
$nom = basename($fichier);
header('Content-Type: application/json');
header("Content-Disposition: attachment; filename=\"${nom}\";");
header('Content-Transfer-Encoding: binary');
// fix for IE catching or PHP bug issue
header('Pragma: public');
header('Expires: 0'); // set expiration time
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
if ($taille = filesize($fichier)) {
header('Content-Length: ' . $taille);
}
readfile($fichier);
} else {
http_status(404);
include_spip('inc/minipres');
echo minipres(_T('erreur') . ' 404', _T('info_acces_interdit'));
}
// et on finit comme ca d'un coup
exit;
}

6
ezcache/ezcache.php vendored

@ -259,10 +259,12 @@ function ezcache_cache_decomposer($plugin, $fichier_cache, $configuration) {
*/
function ezcache_cache_completer($plugin, $cache, $fichier_cache, $configuration) {
// Cache Factory complète la description avec le nom sans extension et l'extension du fichier cache avant
// de passer la main au plugin utilisateur.
// Cache Factory complète la description avec le nom sans extension, l'extension du fichier, la date
// et la taille du cache avant de passer la main au plugin utilisateur.
$cache['nom_cache'] = basename($fichier_cache, $configuration['extension']);
$cache['extension_cache'] = $configuration['extension'];
$cache['date_cache'] = date('Y-m-d H:i:s', filemtime($fichier_cache));
$cache['taille_cache'] = filesize($fichier_cache);
// Le plugin utilisateur peut fournir un service propre pour construire le chemin complet du fichier cache.
// Néanmoins, étant donné la généricité du mécanisme offert par le plugin Cache cela devrait être rare.

54
ezcache_fonctions.php

@ -0,0 +1,54 @@
<?php
/**
* Ce fichier contient les balises de Cache Factory.
*/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Compile la balise `#CACHE_LISTE` qui fournit la liste des caches pour un plugin utilisateur donné
* et conformes aux filtres éventuellement fournis.
* La signature de la balise est : `#CACHE_LISTE{plugin[, filtres]}`.
*
* @balise
*
* @example
* ```
* #CACHE_LISTE{ezcheck}, renvoie tous les caches du plugin ezcheck
* #CACHE_LISTE{ezcheck, #ARRAY{objet, repo}}, renvoie les caches du plugin ezcheck dont l'objet est 'repo'
* ```
*
* @param Champ $p Pile au niveau de la balise.
*
* @return Champ Pile complétée par le code à générer.
*/
function balise_CACHE_LISTE_dist($p) {
// Récupération des arguments.
// -- le plugin est toujours nécessaire
$plugin = interprete_argument_balise(1, $p);
$plugin = str_replace('\'', '"', $plugin);
// -- les filtres sont optionnels
$filtres = interprete_argument_balise(2, $p);
$filtres = isset($filtres) ? str_replace('\'', '"', $filtres) : 'array()';
// Appel de la fonction de listage (cache_repertorier).
$p->code = "calculer_liste_cache(${plugin}, ${filtres})";
return $p;
}
/**
* @internal
*
* @param string $plugin
* @param array $filtres
*
* @return array
*/
function calculer_liste_cache($plugin, $filtres = array()) {
include_spip('inc/ezcheck_cache');
return cache_repertorier($plugin, $filtres);
}

0
cache_logo-64.png → ezcache_logo-64.png

Before

Width:  |  Height:  |  Size: 4.5 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

0
cache_pipelines.php → ezcache_pipelines.php

3
lang/cache_fr.php

@ -14,6 +14,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'cache_vider_cocher_rien' => 'Tout décocher',
'cache_vider_cocher_tout' => 'Tout cocher',
// F
'fichier_label' => 'Nom sans extension',
// I
'info_1_cache' => 'Un cache',
'info_nb_cache' => '@nb@ caches',

8
paquet.xml

@ -1,10 +1,10 @@
<paquet
prefix="ezcache"
categorie="outil"
version="0.6.0"
etat="test"
version="0.7.0"
etat="stable"
compatibilite="[3.0.0;3.2.*]"
logo="cache_logo-64.png"
logo="ezcache_logo-64.png"
documentation="https://contrib.spip.net/Cache-Factory"
>
<nom>Cache Factory</nom>
@ -14,7 +14,7 @@
<licence lien="http://www.gnu.org/licenses/gpl-3.0.html">GPL 3</licence>
<pipeline nom="post_cache" action="" />
<pipeline nom="affiche_milieu" inclure="cache_pipelines.php" />
<pipeline nom="affiche_milieu" inclure="ezcache_pipelines.php" />
<menu nom="cache" titre="cache:cache_vider_titre_page" parent="menu_administration" icone="images/cache-del-16.png" action="cache_vider" />
</paquet>

74
prive/squelettes/liste/caches.html

@ -1,54 +1,60 @@
[(#REM) <!-- CACHES
Inclusion générique fournissant la liste des caches d'un plugin éventuellement filtrée.
@param string plugin
Identifiant du plugin utilisateur comme le Check Factory. Le plus pertinent est d'utiliser le préfixe.
@param string filtres
Liste des filtres basés sur le contenu du tableau retourné par la balise #CACHE_LISTE qui utilise la
fonction cache_repertorier().
@param string avec_telechargement
Indicateur oui/non permettant d'afficher ou pas un bouton de téléchargement des caches.
@param string titre
Titre du tableau (caption). Si vide on utilise les items de langue standards.
@param string sinon
Titre du tableau si aucun cache trouvé (caption). Si vide on utilise l'item de langue standard.
@param string par
Champ utilisé pour le tri : date ou nom_cache
@param int nb
Nombre de caches affichés sur la même page (pagination).
-->]
[(#SET{defaut_tri,#ARRAY{
date, -1,
type_controle, 1,
points, -1
nom_cache, 1,
date_cache, -1,
}})]
#SET{avec_telechargement, #ENV{avec_telechargement, non}}
<B_liste_caches>
#ANCRE_PAGINATION
<div class="liste-objets caches">
<table class="spip liste">
[<caption>
<strong class="caption">
(#ENV*{titre,#GRAND_TOTAL|singulier_ou_pluriel{cache:info_1_cache,pays:info_nb_cache}})
(#ENV*{titre,#GRAND_TOTAL|singulier_ou_pluriel{cache:info_1_cache,cache:info_nb_cache}})
</strong>
</caption>]
<thead>
<tr class="first_row">
[(#ENV{type_controle}|non)
<th class="titre" scope="col">[(#TRI{titre,<:controle:champ_type_controle_label:>,ajax})]</th>
]
<th class="id principale" scope="col">[(#TRI{id_controle,<:info_numero_abbreviation:>,ajax})]</th>
<th class="auteur" scope="col"><:auteur:></th>
<th class="nb" scope="col">[(#TRI{nb_anomalies,<:controle:champ_nb_anomalies_label:>,ajax})]</th>
<th class="date" scope="col">[(#TRI{date,<:controle:champ_date_label:>,ajax})]</th>
<th class="etat" scope="col">[(#TRI{date,<:controle:champ_etat_execution_label:>,ajax})]</th>
<th class="titre principale" scope="col">[(#TRI{nom_cache,<:cache:fichier_label:>,ajax})]</th>
<th class="taille" scope="col"><:label_poids_fichier:></th>
<th class="date" scope="col">[(#TRI{date_cache,<:date:>,ajax})]</th>
[(#ENV{avec_telechargement}|=={oui}|oui)<th class="action" scope="col"></th>]
</tr>
</thead>
<tbody>
<BOUCLE_liste_caches(DATA)
{id_controle?}
{type_controle?}
{id_auteur?}
{id_controle !IN #ENV{exclus, #ARRAY}}
{source table, #CACHE_LISTE{#ENV{plugin}, #ENV{filtres}}}
{where?}
{recherche?}
{tri #ENV{par, date}, #GET{defaut_tri}}
{pagination #ENV{nb,10}}>
{tri #ENV{par, nom_cache}, #GET{defaut_tri}}
{pagination #ENV{nb, 10}}>
<tr class="[(#COMPTEUR_BOUCLE|alterner{row_odd, row_even})]">
[(#ENV{type_controle}|non)
<td class="titre">#INFO_TITRE{controle, #ID_CONTROLE}</td>
]
<td class="id principale">#ID_CONTROLE</td>
<td class="auteur">
<div class="inner">
<BOUCLE_auteurs(AUTEURS){id_auteur}>
<a href="[(#ID_AUTEUR|generer_url_entite{auteur})]">#NOM</a>
</BOUCLE_auteurs>
</div>
</td>
<td class="nb">#NB_ANOMALIES</td>
<td class="date">[(#DATE|affdate_heure)]</td>
<td class="etat">#ETAT_EXECUTION</td>
<td class="titre principale">#NOM_CACHE</td>
<td class="taille">[(#TAILLE_CACHE|taille_en_octets)]</td>
<td class="date">[(#DATE_CACHE|affdate_heure)]</td>
[(#ENV{avec_telechargement}|=={oui}|oui)
<td class="action">[(#BOUTON_ACTION{<:bouton_telecharger:>, #URL_ACTION_AUTEUR{telecharger_cache, #CLE}})]</td>
]
</tr>
</BOUCLE_liste_caches>
</tbody>
@ -56,5 +62,5 @@
[<p class="pagination">(#PAGINATION{prive})</p>]
</div>
</B_liste_caches>[
<div class="liste-objets controles caption-wrap"><strong class="caption">(#ENV*{sinon, ''})</strong></div>
<div class="liste-objets controles caption-wrap"><strong class="caption">(#ENV*{sinon, <:cache:info_aucun_cache:>})</strong></div>
]<//B_liste_caches>

42
prive/squelettes/liste/fichiers.html

@ -1,42 +0,0 @@
[(#SET{defaut_tri,#ARRAY{
date, -1,
type_controle, 1,
points, -1
}})]
<B_telechager>
#ANCRE_PAGINATION
<div class="liste-objets caches">
<table class="spip liste">
<thead>
<caption><strong class="caption"><:mes_fichiers:titre_boite_telecharger:></strong></caption>
<tr class="first_row">
<th scope="col"><:mes_fichiers:colonne_nom:></th>
<th scope="col"><:label_poids_fichier:></th>
<th scope="col"><:date:></th>
<th scope="col"></th>
<th scope="col"></th>
</tr>
</thead>
<tbody>
<BOUCLE_telechager(DATA){source table, #GET{fichiers}}{pagination 10}>
<tr id="zip_#COMPTEUR_BOUCLE"[ class="(#COMPTEUR_BOUCLE|alterner{row_even, row_odd})"]>
<td class="fichier principale">[<label[ for="zip_(#CLE|plus{1})"]>(#VALEUR|basename)</label>]</td>
<td class="taille">[(#VALEUR|filesize|taille_en_octets)]</td>
<td class="date">[(#VAL{'Y-m-d H:i:s'}|date{#VALEUR|filemtime}|affdate_heure)]</td>
<td>[(#BOUTON_ACTION{<:bouton_telecharger:>, #URL_ACTION_AUTEUR{mes_fichiers_telecharger, #VALEUR}})]</td>
<td><a class="voir_zip" href="#info_zip_#COMPTEUR_BOUCLE" rel="info_zip_#COMPTEUR_BOUCLE" title="<:mes_fichiers:bulle_bouton_voir:>"><:mes_fichiers:bouton_voir:></a></td>
</tr>
<tr>
<td colspan="5" style="padding-top:0;padding-bottom:0;"><div id="info_zip_#COMPTEUR_BOUCLE" class="resume_zip" style="padding:10px 0;">[(#VALEUR|mes_fichiers_resumer_zip)]</div></td>
</tr>
</BOUCLE_telechager>
</tbody>
</table>
[<p class='pagination'>(#PAGINATION{#ENV{pagination,prive}})</p>]
</div>
</B_telechager>
#BOITE_OUVRIR{'', notice}
<:mes_fichiers:message_rien_a_telecharger:>
#BOITE_FERMER
<//B_telechager>
Loading…
Cancel
Save