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 == 1 ) {
$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. Plus qu'à cliquer sur le bouton pour faire un peu de nettoyage
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
|