Browse Source

Version compatible Spip 3

svn/root/tags/v2.0.5
yffic@cousumain.info 9 years ago
parent
commit
255669edaf
  1. 17
      .gitattributes
  2. 5
      action/hash_404.php
  3. 87
      exec/hash_documents.php
  4. 38
      formulaires/hasher.html
  5. 57
      formulaires/hasher.php
  6. 35
      hasher_fonctions.php
  7. 0
      hasher_tests.php
  8. 33
      lang/hasher_fr.php
  9. 19
      lang/paquet-hasher_en.php
  10. 19
      lang/paquet-hasher_fr.php
  11. 19
      paquet.xml
  12. 29
      plugin.xml
  13. 27
      prive/squelettes/contenu/hash_documents.html
  14. 1
      prive/squelettes/navigation/hash_documents.html
  15. 0
      prive/themes/spip/images/hasher-128.png
  16. BIN
      prive/themes/spip/images/hasher-32.png
  17. BIN
      prive/themes/spip/images/hasher-64.png

17
.gitattributes

@ -1,8 +1,15 @@
* text=auto !eol
action/hash_404.php -text
exec/hash_documents.php -text
/hash_documents.png -text
/hash_fonctions.php -text
/hash_tests.php -text
formulaires/hasher.html -text
formulaires/hasher.php -text
/hasher_fonctions.php -text
/hasher_tests.php -text
lang/hasher_fr.php -text
/plugin.xml -text
lang/paquet-hasher_en.php -text
lang/paquet-hasher_fr.php -text
/paquet.xml -text
prive/squelettes/contenu/hash_documents.html -text
prive/squelettes/navigation/hash_documents.html -text
prive/themes/spip/images/hasher-128.png -text
prive/themes/spip/images/hasher-32.png -text
prive/themes/spip/images/hasher-64.png -text

5
action/hash_404.php

@ -7,10 +7,7 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
# Si spip est range a la racine du domaine
RewriteRule .* ../index.php?action=hash_404 [L]
# Pour un mutualise, vaut mieux travailler en url absolue
#RewriteRule .* /index.php?action=hash_404 [L]
RewriteRule .* ../index.php?action=hash_404 [L]
*/
function action_hash_404_dist(){

87
exec/hash_documents.php

@ -1,87 +0,0 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
function exec_hash_documents_dist($class = null)
{
include_spip('hash_fonctions');
//
// affichages
//
include_spip("inc/presentation");
pipeline('exec_init',array('args'=>array('exec'=>'hash_documents'),'data'=>''));
$commencer_page = charger_fonction('commencer_page', 'inc');
echo $commencer_page(_T('hasher:titre'), 'hash_documents');
echo "<br /><br /><br />\n";
echo gros_titre(_T('hasher:titre'), '', false);
// colonne gauche
echo debut_gauche('', true);
echo pipeline('affiche_gauche',array('args'=>array('exec'=>'hash_documents'),'data'=>''));
echo creer_colonne_droite('', true);
echo pipeline('affiche_droite',array('args'=>array('exec'=>'hash_documents'),'data'=>''));
echo debut_droite("", true);
echo debut_cadre_trait_couleur('', true, '', _T('hasher:documents_site'));
$corriger = intval(_request('corriger')) ;
if (($hasher = intval(_request('hasher'))) > 0)
$modif = hasher_deplacer_n_documents($hasher, $corriger);
if (($hasher = intval(_request('hasher'))) < 0)
$modif = hasher_deplacer_n_documents(-$hasher, $corriger, true);
if ($modif) {
echo "<p>"._T('hasher:documents_modifies').join(', ', $modif)."</p>";
}
// centre de la page
list($oui, $non) = hasher_compter_documents();
echo _T('hasher:bilan',array('oui'=>$oui,'non'=>$non)) ;
if (intval($non) > 0) {
$n = min(intval($non), 100);
echo "<p><a href='".parametre_url(parametre_url(self(), 'hasher', $n), 'corriger', '')."'>"._T('hasher:action_hasher',array('n'=>$n))."</a></p>";
echo "<p>"._T('hasher:action_corriger_explication')."<a href='".parametre_url(parametre_url(self(), 'hasher', $n), 'corriger', '1')."'>"._T('hasher:action_corriger',array('n'=>$n))."</a></p>";
}
if (intval($oui) > 0) {
$n = min(intval($oui), 100);
echo "<p><a href='".parametre_url(self(), 'hasher', -$n)."'>"._T('hasher:action_dehasher',array('n'=>$n))."</a></p>";
}
echo fin_cadre_trait_couleur(true);
echo "<br /><br />\n";
echo debut_cadre_trait_couleur('', true, '', _T('hasher:redirections'));
$htaccess = _DIR_IMG.'.htaccess';
if (!lire_fichier($htaccess, $contenu)
OR !preg_match(',hash_404,', $contenu)) {
echo "<p>"._T('hasher:htaccess_a_installer',array('htaccess'=>$htaccess))."</p>";
} else {
echo "<p>"._T('hasher:htaccess_installe',array('htaccess'=>$htaccess))."</p>";
}
echo propre('<cadre>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* ../index.php?action=hash_404 [L]
</cadre>');
echo fin_cadre_trait_couleur(true);
// pied
echo fin_gauche() . fin_page();
}
?>

38
formulaires/hasher.html

@ -0,0 +1,38 @@
<div class="ajax formulaire_spip formulaire_hasher">
<h3 class="titrem"><:hasher:bilan_titre:></h3>
[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV**{message_ok})</p>]
[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV**{message_erreur})</p>]
<p><:hasher:bilan{oui=#ENV{oui},non=#ENV{non}}:></p>
<form method='post' action='#ENV{action}'><div>
#ACTION_FORMULAIRE{#ENV{action}}
#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
<li class="editer editer_choix_action[ (#GET{erreurs}|oui)erreur]">
<label><:hasher:choix_action:></label>
[<span class='erreur_message'>(#GET{erreurs})</span>]
[(#ENV{nb_oui}|oui)
<input type='hidden' name='nb_a_hasher' value='#ENV{nb_oui}' />
<div class="choix">
<input type="radio" name="choix_action" class="radio" id="choix_action_hasher" value="hasher" />
<label for="choix_action_hasher"><:hasher:action_hasher{n=#ENV{nb_oui}}:></label>
</div>
<div class="choix">
<input type="radio" name="choix_action" class="radio" id="choix_action_corriger" value="corriger" />
<label for="choix_action_hasher"><:hasher:action_corriger{n=#ENV{nb_oui}}:></label>
</div>
]
[(#ENV{nb_non}|oui)
<input type='hidden' name='nb_a_dehasher' value='-#ENV{nb_non}' />
<div class="choix">
<input type="radio" name="choix_action" class="radio" id="choix_action_dehasher" value="dehasher" />
<label for="choix_action_hasher"><:hasher:action_dehasher{n=#ENV{nb_non}}:></label>
</div>
]
</li>
<p class='boutons'><span class='image_loading'>&nbsp;</span>
<input type='submit' class='submit' value='<:bouton_valider:>' /></p>
</div></form>
</div>

57
formulaires/hasher.php

@ -0,0 +1,57 @@
<?php
if (!defined('_ECRIRE_INC_VERSION')) return;
/**
* Chargement des valeurs
* @return array
*/
function formulaires_hasher_charger_dist(){
list($oui, $non) = hasher_compter_documents();
if (intval($non) > 0) {
$nb_oui = min(intval($non), 100);
}
if (intval($oui) > 0) {
$nb_non = min(intval($oui), 100);
}
$valeurs = array(
'oui'=>$oui,
'non'=>$non,
'nb_oui'=>$nb_oui,
'nb_non'=>$nb_non
);
return $valeurs;
}
function formulaires_hasher_traiter_dist(){
$message = array();
switch(_request('choix_action')) {
case 'hasher' :
$docs = hasher_deplacer_n_documents(_request('nb_a_hasher'), false);
break;
case 'corriger' :
$docs = hasher_deplacer_n_documents(_request('nb_a_hasher'), true);
break;
case 'dehasher' :
$docs = hasher_deplacer_n_documents(-_request('nb_a_dehasher'), false, true);
break;
}
if(isset($docs))
if(is_array($docs))
return array('message_ok'=>(_T('hasher:documents_modifies').join(', ', $docs)));
else
return array('message_erreur'=>(_T('hasher:erreur_traitement')));
else
return array('message_erreur'=>(_T('hasher:erreur_action')));
}
?>

35
hash_fonctions.php → hasher_fonctions.php

@ -37,13 +37,13 @@ function hasher_adresser_document($doc, $rev=false) {
*/
function hasher_deplacer_document($id_document, $corriger=false, $rev=false) {
// 1. recuperer les donnees du document
// 1. recuperer les donnees du document
// et verifier qu'on peut le hasher
if (!$id_document = intval($id_document))
return false;
if (!$s = spip_query('SELECT fichier FROM spip_documents WHERE id_document='.$id_document)
OR !$t = spip_fetch_array($s)) {
spip_log("Erreur hasher_deplacer_document select doc=$id_document ".var_export($s, true), 'hash');
spip_log("Erreur hasher_deplacer_document select doc=$id_document ".var_export($s, true), 'hash'. _LOG_ERREUR);
return false;
}
$src = $t['fichier'];
@ -56,13 +56,13 @@ function hasher_deplacer_document($id_document, $corriger=false, $rev=false) {
// On fabrique le nom du fichier dest
if (!$dest = hasher_adresser_document($src, $rev)) {
spip_log("Erreur hasher_adresser_document($src) rev : $rev", 'hash');
spip_log("Erreur hasher_adresser_document($src) rev : $rev", 'hash'. _LOG_ERREUR);
return false;
}
// si le src n'existe pas, ciao, enfin presque
if (!file_exists($dir_ref.$src)) {
spip_log("Erreur hasher_deplacer_document fichier $dir_ref $src n'existe pas", 'hash');
spip_log("Erreur hasher_deplacer_document fichier $dir_ref $src n'existe pas", 'hash'. _LOG_ERREUR);
// si le src n'existe pas, on verifie qu'il n'a pas deja ete déplace (ie le dest existe),
// et si oui, on modifie juste le chemin en base...
@ -70,14 +70,14 @@ function hasher_deplacer_document($id_document, $corriger=false, $rev=false) {
if(file_exists(_DIR_IMG.$dest)){
// on note la destination finale
if (!spip_query('UPDATE spip_documents SET fichier="'.$img.$dest.'" WHERE id_document='.$id_document)) {
spip_log("erreur update correction $img $dest doc $id_document", 'hash');
spip_log("Erreur update correction $img $dest doc $id_document", 'hash'. _LOG_ERREUR);
return false;
} else {
spip_log("hasher_deplacer_document fichier "._DIR_IMG."$dest existe deja, Table corrigee", 'hash');
spip_log("hasher_deplacer_document fichier "._DIR_IMG."$dest existe deja, Table corrigee", 'hash'._LOG_INFO);
return true ;
}
} else {
spip_log("hasher_deplacer_document fichier "._DIR_IMG."$dest n'existe pas", 'hash');
spip_log("hasher_deplacer_document fichier "._DIR_IMG."$dest n'existe pas", 'hash'._LOG_INFO);
}
}
return false ;
@ -93,7 +93,7 @@ function hasher_deplacer_document($id_document, $corriger=false, $rev=false) {
// 2. creer au besoin les sous-repertoires
if (!is_dir(_DIR_IMG.$dir = dirname($dest))
AND !mkdir(_DIR_IMG.$dir, _SPIP_CHMOD, /* recursive, php5 */ true)) {
spip_log("erreur hasher_deplacer_document mkdir($dir)", 'hash');
spip_log("Erreur hasher_deplacer_document mkdir($dir)", 'hash'. _LOG_ERREUR);
return false;
}
@ -101,18 +101,18 @@ function hasher_deplacer_document($id_document, $corriger=false, $rev=false) {
// on note les fichiers en cours de deplacement avec un - devant ; si
// ca casse on saura reparer
if (!spip_query('UPDATE spip_documents SET fichier=CONCAT("-", fichier) WHERE id_document='.$id_document)) {
spip_log("erreur update 1", 'hash');
spip_log("Erreur update 1", 'hash'. _LOG_ERREUR);
return false;
}
// on deplace
if (!rename($dir_ref.$src, _DIR_IMG.$dest)) {
spip_log("erreur rename", 'hash');
spip_log("Erreur rename", 'hash'. _LOG_ERREUR);
spip_query('UPDATE spip_documents SET fichier="'.$src.'" WHERE id_document='.$id_document);
return false;
}
// on note la destination finale
if (!spip_query('UPDATE spip_documents SET fichier="'.$img.$dest.'" WHERE id_document='.$id_document)) {
spip_log("erreur update 2", 'hash');
spip_log("Erreur update 2", 'hash'. _LOG_ERREUR);
return false;
}
@ -130,11 +130,12 @@ function hasher_deplacer_document($id_document, $corriger=false, $rev=false) {
* @return bool
*/
function hasher_deplacer_n_documents($n, $corriger=false, $rev=false) {
spip_log("hasher_deplacer_n_documents n $n corriger $corriger", 'hash'. _LOG_INFO);
if (!$n = intval($n)
OR !$s = spip_query($q = "SELECT id_document FROM spip_documents WHERE fichier REGEXP '^(IMG/)?[^/]+/"
. ($rev ? "./././" : "")
."[^/]+$' AND distant='non' ORDER BY date DESC LIMIT $n")) {
spip_log("erreur requete $q", 'hash');
spip_log("Erreur requete $q", 'hash'. _LOG_ERREUR);
return false;
}
@ -176,4 +177,12 @@ function hasher_post_edition($flux) {
return $flux;
}
?>
function htaccess_est_installe($htaccess){
if (!lire_fichier($htaccess, $contenu)
OR !preg_match(',hash_404,', $contenu)) {
return false ;
} else {
return true ;
}
}
?>

0
hash_tests.php → hasher_tests.php

33
lang/hasher_fr.php

@ -1,20 +1,37 @@
<?php
<?php
// S&eacute;curit&eacute;
if (!defined("_ECRIRE_INC_VERSION")) return;
$GLOBALS[$GLOBALS['idx_lang']] = array(
// A
'action_hasher' => 'hasher @n@ documents' ,
'action_dehasher' => 'd&eacute;hasher @n@ documents' ,
'action_dehasher' => 'déhasher @n@ documents' ,
'action_corriger' => 'Corriger le chemin en base pour @n@ documents' ,
'action_corriger_explication' => 'Il peut arriver que des documents aient &eacute;t&eacute; d&eacute;plac&eacute;s mais que leur chemin en base n\'ai pas &eacute;t&eacute; corrig&eacute;. Ils apparaissent alors comme &laquo;&nbsp;ne pouvant pas &ecirc;tre hach&eacute;s&nbsp;&raquo;&nbsp;:&nbsp;' ,
'documents_modifies' => 'Documents modifi&eacute;s : ' ,
'action_corriger_explication' => 'Il peut arriver que des documents aient été déplacés mais que leur chemin en base n\'ai pas été corrigé. Ils apparaissent alors comme « ne pouvant pas être hachés » : ' ,
// B
'bilan_titre' => 'Bilan' ,
'bilan' => 'Ce site comporte @oui@ documents hashés, et @non@ qui ne le sont pas encore (ou ne peuvent pas l\'être).' ,
// C
'choix_action' => 'Choisir l\'action à effectuer :',
// D
'documents_modifies' => 'Documents modifiés : ' ,
'documents_site' => 'Documents du site' ,
'bilan' => 'Ce site comporte @oui@ documents hash&eacute;s, et @non@ qui ne le sont pas encore (ou ne peuvent pas l\'&ecirc;tre).' ,
// E
'erreur_traitement' => 'Erreur dans le traitement de la requête',
'erreur_action' => 'Action erronée',
// H
'htaccess_a_installer' => 'Veuillez installer dans @htaccess@ un fichier contenant les codes suivants :' ,
'htaccess_installe' => 'Le fichier @htaccess@ semble correctement install&eacute; ; pour m&eacute;moire, il doit contenir les codes suivants :' ,
'htaccess_installe' => 'Le fichier @htaccess@ semble correctement installé ; pour mémoire, il doit contenir les codes suivants :' ,
// R
'redirections' => 'Redirections' ,
// T
'titre' => 'Hash documents' ,
);

19
lang/paquet-hasher_en.php

@ -0,0 +1,19 @@
<?php
// Ceci est un fichier langue de SPIP -- This is a SPIP language file
/// Fichier produit par PlugOnet
// Module: paquet-hasher
// Langue: en
// Date: 01-07-2012 21:49:08
// Items: 2
if (!defined('_ECRIRE_INC_VERSION')) return;
$GLOBALS[$GLOBALS['idx_lang']] = array(
// H
'hasher_description' => 'The number of documents in the directory IMG/extension/ site can become too important and affect the performance of the server\'s file system. The solution proposed by this plugin is to "hash" directory IMG/.',
'hasher_slogan' => 'Save documents in <code>IMG/mp3/a/b/c/file.mp3</code>',
);
?>

19
lang/paquet-hasher_fr.php

@ -0,0 +1,19 @@
<?php
// Ceci est un fichier langue de SPIP -- This is a SPIP language file
/// Fichier produit par PlugOnet
// Module: paquet-hasher
// Langue: fr
// Date: 01-07-2012 21:49:08
// Items: 2
if (!defined('_ECRIRE_INC_VERSION')) return;
$GLOBALS[$GLOBALS['idx_lang']] = array(
// H
'hasher_description' => 'Le nombre de documents dans le répertoire IMG/extension/ du site peut devenir beaucoup trop important et avoir un impact sur les performances du système de fichiers du serveur. La solution proposée par ce plugin est de « hasher » le répertoire IMG/.',
'hasher_slogan' => 'Enregistrer les documents dans <code>IMG/mp3/a/b/c/fichier.mp3</code>',
);
?>

19
paquet.xml

@ -0,0 +1,19 @@
<paquet
prefix="hasher"
categorie="performance"
version="1.3.0"
etat="stable"
compatibilite="[3.0.0;3.0.99]"
logo="prive/themes/spip/images/hasher-32.png"
documentation="http://www.spip-contrib.net/Le-plugin-hash_documents"
>
<nom>Hash documents</nom>
<!-- Enregistrer les documents dans <code>IMG/mp3/a/b/c/fichier.mp3</code> -->
<auteur>Fil</auteur>
<licence lien="http://www.gnu.org/licenses/gpl-3.0.html">GPL 3</licence>
<pipeline nom="post_edition" inclure="hash_fonctions.php" />
</paquet>

29
plugin.xml

@ -1,29 +0,0 @@
<plugin>
<nom>Hash documents</nom>
<slogan>
<multi>
[fr]Enregistrer les documents dans <code>IMG/mp3/a/b/c/fichier.mp3</code>
[en]Save documents in <code>IMG/mp3/a/b/c/file.mp3</code>
</multi>
</slogan>
<auteur>Fil</auteur>
<licence>GNU/GPL</licence>
<version>1.2.3</version>
<etat>stable</etat>
<description>
<multi>
[fr]Le nombre de documents dans le r&#233;pertoire IMG/extension/ du site peut devenir beaucoup trop important et avoir un impact sur les performances du syst&#232;me de fichiers du serveur. La solution propos&#233;e par ce plugin est de &#171; hasher &#187; le r&#233;pertoire IMG/.
[en]The number of documents in the directory IMG/extension/ site can become too important and affect the performance of the server's file system. The solution proposed by this plugin is to "hash" directory IMG/.
</multi>
</description>
<lien>http://www.spip-contrib.net/Le-plugin-hash_documents</lien>
<prefix>hasher</prefix>
<icon>hash_documents.png</icon>
<pipeline>
<nom>post_edition</nom>
<inclure>hash_fonctions.php</inclure>
</pipeline>
<chemin dir='' />
<necessite id="SPIP" version="[1.9.2;2.1.99]" />
<categorie>performance</categorie>
</plugin>

27
prive/squelettes/contenu/hash_documents.html

@ -0,0 +1,27 @@
[(#AUTORISER{webmestre}|sinon_interdire_acces)]
<h1 class="grostitre"><:hasher:titre:></h1>
<div class="ajax">
#FORMULAIRE_HASHER
</div>
#SET{chemin,#CHEMIN{IMG/.htaccess}}
#SET{htaccess_est_installe,#GET{chemin}|htaccess_est_installe}
[(#GET{htaccess_est_installe}|non)
[(#BOITE_OUVRIR{[(#VAL{hasher:redirections}|_T)],'error'})]
<:hasher:htaccess_a_installer{htaccess=#GET{chemin}}:>
]
[(#GET{htaccess_est_installe}|oui)
[(#BOITE_OUVRIR{[(#VAL{hasher:redirections}|_T)],'notice'})]
<:hasher:htaccess_installe{htaccess=#GET{chemin}}:>
]
[(#VAL{<cadre>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* ../index.php?action=hash_404 #EVAL{chr(91)}L#EVAL{chr(93)}
</cadre>}|propre)]
#BOITE_FERMER

1
prive/squelettes/navigation/hash_documents.html

@ -0,0 +1 @@
[(#CHEMIN{prive/themes/spip/images/hasher-64.png}|balise_img)]

0
hash_documents.png → prive/themes/spip/images/hasher-128.png

Before

Width: 128  |  Height: 128  |  Size: 10 KiB

After

Width: 128  |  Height: 128  |  Size: 10 KiB

BIN
prive/themes/spip/images/hasher-32.png

After

Width: 32  |  Height: 32  |  Size: 1.7 KiB

BIN
prive/themes/spip/images/hasher-64.png

After

Width: 64  |  Height: 64  |  Size: 2.9 KiB

Loading…
Cancel
Save