Fork me on GitHub




(1) 2 »


avatar conservé ou pas
Régulier
Inscrit: 26/05/2005 12:43
Messages: 303
Bonjour,

Concernant un site de +eurs années, j'ai besoin de faire du nettoyage.

Une question simple: lorsqu'un compte membre est supprimé, son avatar stocké dans le dossier 'uploads' est-il bien effacé ?

Je compte environ 2800 fichiers dans ce dossier ... j'aimerai bien viré le futile !

Merci de votre réponse,
G.

Posté le : 30/01 12:13
Partager Twitter Partagez cette article sur GG+
Re: avatar conservé ou pas
Admin Frxoops
Inscrit: 16/05/2003 18:10
De Rhone-Alpes
Messages: 3128
Salut,

bon,
si tu comptes 20k par avatar,
tu as donc 20*2800 soit 56 Mo d'avatar,
ce n'est pas là ou tu vas vraiment gagner de la place.

Maintenant, si tu veux vraiment faire le tri pour gagner 56 Mo,
c'est possible,
mais un peu hardu.

Je n'ai pas de solution miracle, mais c'est possible qu'il existe une solution meilleure (comme l'installation du module de gestion des avatars peut-être mais j'en doute pour ce que tu recherches).

Voilà une méthode :

- Va dans ta base de donnée
- Affiche la table avatar
- Lance la requête suivante :
SELECT  `avatar_file`   FROM  `xxx_avatar`   WHERE  `avatar_fileIS NOT NULL

tu auras la liste de tout les fichiers utilisés.

- Maintenant, sauvegarde ton dossier /uploads/avatar
- Copie en local ce dossier
- Déplace tout les fichiers trouvés dans un autre dossier (avatar_ok)
- Enfin copie sur ton serveur le dossier /uploads/avatar en uploads/avatar.old
- efface le contenu de /uploads/avatar
- pousse les fichiers de avatar_ok vers le dossier /uploads/avatar vide.




Posté le : 31/01 14:17

Open in new window
Partager Twitter Partagez cette article sur GG+
Re: avatar conservé ou pas
Régulier
Inscrit: 26/05/2005 12:43
Messages: 303
Merci de ta réponse,

Je voulais savoir si cela était géré lors des suppressions de compte. A priori non, si j'ai bien compris.

Ce n'est évidemment pas une question de place, juste une question de principe.

Je suis de la vieille école (à l'époque des dinosaures où chaque octet était compté) et de savoir qu'il y aurait des fichiers inutiles peut me réveiller en pleine nuit !!

Bon, je vais bricoler une moulinette php pour les virer.

G.

Posté le : 31/01 19:13
Partager Twitter Partagez cette article sur GG+
Re: avatar conservé ou pas
Admin Frxoops
Inscrit: 16/05/2003 18:10
De Rhone-Alpes
Messages: 3128
Citation :
Skype-Fr a écrit :
Je voulais savoir si cela était géré lors des suppressions de compte. A priori non, si j'ai bien compris.


Mais la question est intéressante,
c'est vrai qu'il n'y a aucun workflow dans la cas de suppression de comptes.

Reviens nous proposer ta solutions...

Posté le : 31/01 20:30

Open in new window
Partager Twitter Partagez cette article sur GG+
Re: avatar conservé ou pas
Admin Frxoops
Inscrit: 05/03/2005 05:20
De Vaucluse
Messages: 662
Bonjour à tous,

Citation :
Mais la question est intéressante,
c'est vrai qu'il n'y a aucun workflow dans la cas de suppression de comptes.

En effet, après avoir testé, il s'avère que les avatars restent bien malgré la suppression des comptes utilisateur. De plus, les tables avatar et avatar_user_link ne sont pas nettoyées des enregistrements devenus inutiles

Je vous propose donc un petit hack afin de remédier à ce problème en ajoutant une option dans la section maintenance de la partie administration de Xoops.

(Attention testé uniquement sur Xoops 2.5.6)

Dans /modules/system/admin/maintenance/main.php:
Insérer ligne 50
$form_maintenance->addElement(new XoopsFormRadioYN(_AM_SYSTEM_MAINTENANCE_AVATAR'avatar'''_YES_NO));//hack purge unused avatars

Insérer ligne 116:
$avatar system_CleanVars $_REQUEST'avatar'1'int' );//hack unused avatars

Insérer ligne 122:
$verif_avatar false//hack purge unused avatars

Insérer ligne 126
$result_avatar false//hack purge unused avatars

Rajouter ligne 146:
//hack purge unused avatars
if ( $avatar == ) {
    
$verif_avatar true;
    if(
$maintenance->CleanAvatar()) {
            
$result_avatar true;
    }
}
//end hack

Remplacer la ligne 162 par:
if( $result_cache == false && $result_session == false && $result_maintenance == false && $result_avatar == false) {

Insérer ligne 168:
$xoopsTpl->assign('verif_avatar'$verif_avatar);// hack purge unused avatars

Insérer ligne 172:
$xoopsTpl->assign('result_avatar'$result_avatar); // hack purge unused avatars

Dans /module/system/class/maintenance.php rajouter la fonction suivante (vers ligne 71):
//hack purge unused avatars
function CleanAvatar() {
$result $this->db->queryF('SELECT avatar_id,avatar_file FROM '.$this->db->prefix('avatar').' WHERE avatar_id IN (SELECT t1.avatar_id FROM '.$this->db->prefix('avatar_user_link').' AS t1 LEFT JOIN '.$this->db->prefix('users').' AS t2 ON t2.uid=t1.user_id WHERE t2.uid IS NULL)');

while (
$myrow $this->db->fetchArray($result)) {
    
//delete file
    
@unlink(XOOPS_UPLOAD_PATH.'/'.$myrow['avatar_file']);
    
//clean avatar table
    
$result1 $this->db->queryF('DELETE FROM '.$this->db->prefix('avatar').' WHERE avatar_id='.$myrow['avatar_id']);
    
//clean avatar_user_link table
    
$result2 $this->db->queryF('DELETE FROM '.$this->db->prefix('avatar_user_link').' WHERE avatar_id='.$myrow['avatar_id']);
    }
return 
true;
}
//end hack

Dans /modules/system/language/french/admin/maintenance.php:
Insérer ligne 16:
define('_AM_SYSTEM_MAINTENANCE_AVATAR',"Purger les avatars inutilisés");//hack purge unused avatars
define('_AM_SYSTEM_MAINTENANCE_RESULT_AVATAR',"Tâche de purge des avatars inutilisés");//hack purge unused avatars

Modifier /module/system/templates/admin/system_maintenance.html (faire un copier/coller):
<!--maintenance-->
<{
includeq file="db:system_header.html"}>
<!-- 
Display mailusers form  -->
<
br />
<{if 
$form_maintenance}>
    <
div class="spacer"><{$form_maintenance}></div><br />
    <
div class="spacer"><{$form_dump}></div>
<{elseif 
$maintenance}>
    <{if 
$verif_cache || $verif_session || $verif_avatar}>
        <
table class="outer ui-corner-all" cellspacing="1">
            <
tr>
                <
th><{$smarty.const._AM_SYSTEM_MAINTENANCE}></th>
                <
th><{$smarty.const._AM_SYSTEM_MAINTENANCE_RESULT}></th>
            </
tr>
            <{if 
$verif_cache}>
                <
tr>
                    <
td class="aligntop txtcenter"><{$smarty.const._AM_SYSTEM_MAINTENANCE_RESULT_CACHE}></td>
                    <
td class="aligntop txtcenter"><{if $result_cache}><img width="16" src="<{xoAdminIcons success.png}>" /><{else}><img style="width:16px;" src="<{xoAdminIcons cancel.png}>" alt="Cancel"/><{/if}></td>
                </
tr>
            <{/if}>
            
            <{if 
$verif_session}>
                <
tr>
                    <
td class="aligntop" align="center"><{$smarty.const._AM_SYSTEM_MAINTENANCE_RESULT_SESSION}></td>
                    <
td class="aligntop" align="center"><{if $result_session}><img style="width:16px;" src="<{xoAdminIcons success.png}>" alt="Success"/><{else}><img style="width:16px;" src="<{xoAdminIcons cancel.png}>" alt="Cancel"/><{/if}></td>
                </
tr>
            <{/if}>

            <{if 
$verif_avatar}>
                <
tr>
                    <
td class="aligntop" align="center"><{$smarty.const._AM_SYSTEM_MAINTENANCE_RESULT_AVATAR}></td>
                    <
td class="aligntop" align="center"><{if $result_avatar}><img style="width:16px;" src="<{xoAdminIcons success.png}>" alt="Success"/><{else}><img style="width:16px;" src="<{xoAdminIcons cancel.png}>" alt="Cancel"/><{/if}></td>
                </
tr>
            <{/if}>

        </
table><br />
    <{/if}>
    <{if 
$verif_maintenance}>
        <{
$result_maintenance}>
    <{/if}>
<{else}>
    <{
$result_dump}>
<{/if}>

Si tout s'est bien passé, vous devriez maintenant trouver la nouvelle option en haut de la section maintenance.
Open in new windowPlus qu'à cliquer sur le bouton pour faire un peu de nettoyage
Open in new window
Merci de vos retours et commentaires si jamais vous testez ce hack (Malgré tous les tests que j'ai pu réaliser, évitez quant même de le faire directement sur un site en production).

En bonus, la requête (utilisée dans ce hack) pour voir si vous avez des avatars non utilisés :
SELECT avatar_id,avatar_file FROM xxxx_avatar
WHERE avatar_id 
IN 
(
SELECT t1.avatar_id 
FROM xxxx_avatar_user_link 
AS t1 
LEFT JOIN 
xxxx_users 
AS t2
ON t2
.uid=t1.user_id
WHERE t2
.uid IS NULL 
)

Pour ceux qui ont lu jusqu'au bout, j'ai joint les fichiers modifiés de la version 2.5.6 à ce post

Attacher un fichier:


zip unused_avatars.zip Taille: 9.09 KB; Hits: 53

Posté le : 01/02 15:15

Open in new window

Xoops 2.5.7 - Debian 7.6 - Apache 2.2.22 - MySQL 5.5.38 - Php 5.4.4
Partager Twitter Partagez cette article sur GG+
Re: avatar conservé ou pas
Admin Frxoops
Inscrit: 16/05/2003 18:10
De Rhone-Alpes
Messages: 3128
Slide, !!!

Pourrais-tu proposer l'idée sur https://github.com/XOOPS/XoopsCore.

Dans la version 2.6, ce plugin est externalisé mais il ne propose pas la suppression d'avatars orphelins.

Posté le : 01/02 19:23

Open in new window
Partager Twitter Partagez cette article sur GG+
Re: avatar conservé ou pas
Admin Frxoops
Inscrit: 16/03/2009 16:40
De Tende (06)
Messages: 2390
Merci Slider !

Au cas où, je fais suivre l'information. Espérons qu'ils l'appliquent pour Xoops 2.5.7 qui arrive bientôt.

Posté le : 02/02 06:06

Open in new window

Xoopseuse Mai 2012 | Responsable équipe internationale | Recherche avancée en bas de page !
Partager Twitter Partagez cette article sur GG+
Re: avatar conservé ou pas
Admin Frxoops
Inscrit: 16/03/2009 16:40
De Tende (06)
Messages: 2390
Voilà, modification en cours :
https://sourceforge.net/p/xoops/bugs/1292/

Il est rapide ce Richard, 30 minutes après mon mail, j'adore !

Posté le : 02/02 06:45

Open in new window

Xoopseuse Mai 2012 | Responsable équipe internationale | Recherche avancée en bas de page !
Partager Twitter Partagez cette article sur GG+
Re: avatar conservé ou pas
Admin Frxoops
Inscrit: 05/03/2005 05:20
De Vaucluse
Messages: 662
@ Cesag, Alain: Merci à vous deux.

Posté le : 03/02 19:04

Open in new window

Xoops 2.5.7 - Debian 7.6 - Apache 2.2.22 - MySQL 5.5.38 - Php 5.4.4
Partager Twitter Partagez cette article sur GG+
Re: avatar conservé ou pas
Admin Frxoops
Inscrit: 16/03/2009 16:40
De Tende (06)
Messages: 2390
Correction appliquée pour la future version Xoops 2.5.7.

Posté le : 14/02 12:49

Open in new window

Xoopseuse Mai 2012 | Responsable équipe internationale | Recherche avancée en bas de page !
Partager Twitter Partagez cette article sur GG+

 Haut   Précédent   Suivant
(1) 2 »




Propulsé avec XOOPS | Graphisme adapté par Tatane, Grosdunord, Montuy337513

25 Personne(s) en ligne (17 Personne(s) connectée(s) sur Forum) | Utilisateur(s): 1 | Invité(s): 24 | patz, Plus ...