[postnuke] avatars personnalisés

18.12.2005, 22:30 avatar personnalisé

I. But



Par défaut, les avatars ne sont pas personnalisable sous Postnuke. Voila donc un plug in pour rajouter des options de personnalisation, en plus de la gallerie par défaut.

II. Explications



Nous allons modifier le module Your_account, et rajouter un champs pour personnaliser l'avatar. Ensuite, on modifie les options de validation et d'insertion dans la base en filtrant bien entendu les données pour éviter des failles de sécurites.

III. Implémentation



III. 1. Mise à jours de la base de donnée



On augmente le nombre de caractéres autorisé pour l'avatar
CodeALTER TABLE `pn_users` CHANGE `pn_user_avatar` `pn_user_avatar` VARCHAR( 255 ) CHARACTER SET latin1 COLLATE latin1_swedish_ci DEFAULT NULL
On met à jour l'avatar par défaut (attention ca reset tous les avatars existants dans les profils utilisateur)
CodeUPDATE `pn_users` SET `pn_user_avatar` = 'images/avatar/blank.gif'

III. 2. Changement dans le formulaire

Ouvrir le fichier modules\Your_Account\user\modules\changeinfo.php, Recherchez
Code$user_avatar = pnUserGetVar('user_avatar');
echo '<select name="user_avatar" onchange="showimage()">';
$handle = opendir('images/avatar');
while ($file = readdir($handle)) {
$filelist[] = $file;
}
asort($filelist);
while (list ($key, $file) = each ($filelist)) {
ereg('.gif|.jpg', $file);
if ($file != '.' && $file != '..' && $file != 'index.html' && $file != 'CVS') {
echo '<option value="'.pnVarPrepForDisplay($file).'"';
if ($file == $user_avatar) {
echo ' selected="selected"';
}
echo '>'.pnVarPrepForDisplay($file).'</option>';
}
}
echo '</select> <img src="images/avatar/' . pnVarPrepForDisplay(pnUserGetVar('user_avatar')) . '" name="avatar" width="32" height="32" alt="" /></td>';
break;
Remplacez par
Code?> <script type="text/javascript" >


function showimage()
{
if (!document.images )
return
target = document.getElementById('avatarperso');
if(document.Register.user_avatar.options[document.Register.user_avatar.selectedIndex].value!=1){
document.images.avatar.src= document.Register.user_avatar.options[document.Register.user_avatar.selectedIndex].value ;

target.style.display = "none";
} else {
target.style.display = "";
showavatarperso();

}
}

function showavatarperso(){
var avatarlink;
var ext;
avatarlink = Register.avatarperso.value;
ext= avatarlink.substring( avatarlink.length - 3, avatarlink.length);
if ( ext == "gif" || ext =="jpg" || ext =="php&quot ;) {
document.images.avatar.src=document.Register.avatarperso.value;
} else {
document.images.avatar.src = 'images/avatar/blank.gif';
}
} </script>
<?
$user_avatar = pnUserGetVar('user_avatar');
$ExistHTTP=strpos($user_avatar,"http&quot ;) ;

echo "<select name=\"user_avatar\" onChange=\"showimage()\" class=\"pn-normal\">";
$handle = opendir('images/avatar');
while ($file = readdir($handle)) {
$filelist[] = $file;
}
asort($filelist);

while (list ($key, $file) = each ($filelist)) {
ereg(".gif|.jpg", $file);
if ($file != "." && $file != ".." && $file != "index.html" && $file != "CVS&quot ;) {
echo "<option value=\"./images/avatar/$file\"";
if ($file == $user_avatar) {
echo " selected";
}
echo ">$file</option>";
}
}

echo "<option value=\"1\"";
if ($ExistHTTP === 0) echo " selected";
echo ">"._PERSONALISE."</option>"; echo "</select> <img src=\"" . pnVarPrepForDisplay($user_avatar) . "\" name=\"avatar\" align=\"top\">


";
echo "<div id=\"avatarperso\" style=\"display:";
if ($ExistHTTP === false)echo "none";
echo "\">"._AVATARPERSO." : <input type=\"text\" name=\"avatarperso\" size=\"40\" onchange=\"showavatarperso()\" onselect=\"showavatarperso()\" onunselect=\"showavatarperso()\" onclick=\"showavatarperso()\" onkeypress=\"showavatarperso()\" ";

if ($ExistHTTP === 0) {echo "value=\"$user_avatar\"";}
echo " class=\"post\">";
echo "</td>";
break;
recherchez
Codelist($name,
$email,
$femail,
$url,
$pass,
$vpass,
$bio,
$user_avatar,
$user_icq,
$user_occ,
$user_from,
$user_intrest,
$user_sig,
$user_aim,
$user_yim,
$user_msnm,
$timezoneoffset,
$dynadata) = pnVarCleanFromInput('realname',
'email',
'femail',
'url',
'pass',
'vpass',
'bio',
'user_avatar',
'user_icq',
'user_occ',
'user_from',
'user_intrest',
'user_sig',
'user_aim',
'user_yim',
'user_msnm',
'timezoneoffset',
'dynadata');
remplacez par
Codelist($name,
$email,
$femail,
$url,
$pass,
$vpass,
$bio,
$user_avatar,
$avatarperso,
$user_icq,
$user_occ,
$user_from,
$user_intrest,
$user_sig,
$user_aim,
$user_yim,
$user_msnm,
$timezoneoffset,
$dynadata) = pnVarCleanFromInput('name',
'email',
'femail',
'url',
'pass',
'vpass',
'bio',
'user_avatar',
'avatarperso',
'user_icq',
'user_occ',
'user_from',
'user_intrest',
'user_sig',
'user_aim',
'user_yim',
'user_msnm',
'timezoneoffset',
'dynadata');
aprés
Codeif( !empty($email) ) {
$email = (pnVarValidate($email,'email')==true) ? $email : pnUserGetVar('email');
} else {
$email = pnUserGetVar('email');
}
rajoutez
Codeif ($user_avatar==1)$user_avatar=$avatarperso;
// antihack pour attaque du style script.php?document.cookie
$pos = strpos($avatarperso, "?&quot ;) ;
if ($pos) $user_avatar = substr($user_avatar,0,$pos);
maintenant rajoutez dans le fichier de langue /temp/modules/Your_Account/lang/fra/global.php
Codedefine('_AVATARPERSO','Avatar personnalisé');
define('_PERSONALISE','-personalisé-');

III. 3. Valeur par défaut à l'inscription

A l'inscription, par défaut, on mettra pas d'avatars . Eventuellement, vous pouvez régler avec un avatar de base, si vous le voulez.Ouvrir /temp/modules/NewUser/user.phprecherchez
Codeif (empty($user_avatar)) $user_avatar = 'blank.gif';
remplacez par
Codeif (empty($user_avatar)) $user_avatar = 'images/avatar/blank.gif';


IV. Remarques



On ne vérifie pas la taille de l'avatar à la validation, faudra donc modérer si il y a des abus. Remarquez que même si ce type de vérification est disponible sur phpBB, c'est facilement contournable en changeant l'url de l'image sur le ftp ou elle est hébergé en mettant une plus grosse.

License GPL
License M1
mumuri cinemona.com
mumuri
mumuri
Messages : 14 368
18.12.2005, 22:32 On notera que ce module la façon dont est stocké l'avatar.
On stocke tout l'url au lieu de stocker seulement le nom de fichier, d'ou des problémes potentiels d'affichage sur certain module.

I. Affichage de l'avatar sur pnForum



ouvrir 'modules/pnForum/pnuserapi.php'

rechercher

Code$userdata['pn_user_avatar'] = "images/avatar/" . $userdata['pn_user_avatar'];
remplacer par
Code$userdata['pn_user_avatar'] = $userdata['pn_user_avatar'];
remarquez que vous pouvez filtrez la taille de l'image ici (regardez un peu le code et vous comprendrez).

II. Affichage de l'avatar dans le profil

ouvrir modules\User\user.php rechercher
Codeecho '<img src="images/avatar/'.pnVarPrepForDisplay($userinfo['user_avatar']).'" alt="" />
'."\n";
remplacer par
Codeecho '<img src="'.pnVarPrepForDisplay($userinfo['user_avatar']).'" alt="" />
'."\n";
mumuri cinemona.com
mumuri
mumuri
Messages : 14 368

  • allo ciné
  • forum
  • astuces de jeux vidéos
  • dessin animé
  • livres bds roman
  • avis livres
  • anime
  • smileys
  • avis films & streaming
  • bourse
  • séries télé
  • actualité de jeux vidéos
Tous droits réservés © 2002-2009 . Top flood. Crédits des logiciels tiers     .