Fork me on GitHub

Rapport de message :*
 

Re: avatar conservé ou pas

Titre du sujet : Re: avatar conservé ou pas
par slider84 sur 01/02/2014 15:15:48

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
Propulsé avec XOOPS | Graphisme adapté par Tatane, Grosdunord, Montuy337513

50 Personne(s) en ligne (41 Personne(s) connectée(s) sur Forum) | Utilisateur(s): 0 | Invité(s): 50 | Plus ...