############################################################################### # UsersAvatars.pl 1.0 # ############################################################################### # YaBB: Yet another Bulletin Board # # Open-Source Community Software for Webmasters # # Version: YaBB 2 # # Released: December 27, 2004 # # Distributed by: http://www.yabbforum.com # # =========================================================================== # # Copyright (c) 2000-2005 YaBB (www.yabbforum.com) - All Rights Reserved. # # Software by: The YaBB Development Team # # with assistance from the YaBB community. # # Sponsored by: Xnull Internet Media, Inc. - http://www.ximinc.com # # Your source for web hosting, web design, and domains. # ############################################################################### # Users Avatars Upload YaBB2.1 # # Add a function for upload Users Avatars on you YaBB forum. # # Version: 1.0 (YaBB 2.1) # # Released: April 20th, 2006 # # =========================================================================== # # Written by Boris Tjuvanov (MF-B) for the YaBB community # ############################################################################### if($action eq 'detailedversion') { return 1; } &LoadLanguage("UsersAvatars"); require "$vardir/membergroups.txt"; if (!-e("$vardir/UsersAvatars.txt")) { &UsersAvatarsSET2; } require "$vardir/UsersAvatars.txt"; sub UsersAvatarsHTML { my $uaavposition = $_[0]; my $uaavposition2 = $_[1]; my $uaavposition3 = $_[2]; my $userav = $_[3]; my $userpic = $_[4]; $memgrupuavok = 0; if ($en_useravatars == 1) { unless ($memgrupuav eq "") { @memgrupuav = split(/\, /, $memgrupuav); foreach $memgrupuav2 (@memgrupuav) { if ($memgrupuav2 eq $uaavposition || $memgrupuav2 eq $uaavposition2 || $memgrupuav2 eq $uaavposition3) { $memgrupuavok = 1; last; } } } else { $memgrupuavok = 1; } } if ($memgrupuavok) { $yymain .= qq~ $profile_txt{'475'}
$lang_uapav{'37'}
$lang_uapav{'35'} $userpic_width $lang_uapav{'34'} $userpic_height $lang_uapav{'33'}
$lang_uapav{'36'}

$lang_uapav{'03'}


$lang_uapav{'24'}


$lang_uapav{'27'} ~; if ($sizef_useravatars > 0) { $yymain .= qq~ $lang_uapav{'29'} $sizef_useravatars $lang_uapav{'30'} ~; } $yymain .= qq~ ~; &UsersAvatarsDMN($userav,$userpic); if ($userpic =~ m~\Ahttp://~) { $avstyleupic = ""; if ($ENV{'HTTP_USER_AGENT'} !~ /MSIE/ || $ENV{'HTTP_USER_AGENT'} =~ /Opera/) { if ($userpic_width > 0 || $userpic_height > 0) { $avstyleupic = qq~style="~; if ($userpic_width > 0) { $avstyleupic .= qq~max-width: $userpic_width\px\; ~; } if ($userpic_height > 0) { $avstyleupic .= qq~max-height: $userpic_height\px\;~; } if (($userpic_height == 0 && $userpic_width > 0) && $ENV{'HTTP_USER_AGENT'} =~ /Safari/) { $avstyleupic .= qq~max-height: $userpic_width\px\;~; } if (($userpic_width == 0 && $userpic_height > 0) && $ENV{'HTTP_USER_AGENT'} =~ /Safari/) { $avstyleupic .= qq~max-width: $userpic_height\px\;~; } $avstyleupic .= qq~"~; } $avatarupic = qq~
~; } else { $avatarupic = qq~ ~; } if (!$useravurl) { $avtext = qq~$lang_uapav{'42'}~; $avtext2 = qq~
$lang_uapav{'41'}~; } else { $avtext = $lang_uapav{'43'}; $avtext2 = ""; } $yymain .= qq~ $lang_uapav{'28'}
$avtext $avatarupic $avtext2 ~; } } else { $yymain .= qq~ $profile_txt{'475'}  
$lang_uapav{'24'} ~; } } sub UsersAvatarsUP { my $useravname = $_[0]; if ($FORM{'userpicpersonaldel'} && !$FORM{'file'}) { &UsersAvatarsDEL($useravname); $okdelatt = 1; } else { $OS = $^O; # operating system name if ($OS =~ /darwin/i) { $isUNIX = 1; } elsif ($OS =~ /win/i) { $isWIN = 1; } else { $isUNIX = 1; } $mylimit = 1024 * $sizef_useravatars; $mydirlimit = 1024 * $sizef_dirlimit; $fixfile = $filename; $fixfile =~ s/.+\\([^\\]+)$|.+\/([^\/]+)$/$1/; $fixfile =~ s/[\(\)\$#%+,\/:?"<>'\*\;|@^!]//g; # edit in between [ ] to include characters you dont want to allow in filenames (dont put a . there or you wont be able to get any file extensions). $fixfile =~ s/ /_/g; # replaces spaces in filenames with a "_" character. $fixfile =~ s/&//g; # replaces ampersands with nothing. $fixfile =~ s/\+//g; # replaces + with nothing # ADDED BY TIMPPA timo.heimonen@gmail.com $fixfile =~ s/J/j/g; # ADMININ MUUTOKSIA J $fixfile =~ s/P/p/g; # ADMININ MUUTOKSIA P $fixfile =~ s/E/g/g; # ADMININ MUUTOKSIA E $fixfile =~ s/G/g/g; # ADMININ MUUTOKSIA G $fixfile =~ s/I/i/g; # ADMININ MUUTOKSIA G(IF) $fixfile =~ s/F/f/g; # ADMININ MUUTOKSIA $fixfile =~ s/N/n/g; # ADMININ MUUTOKSIA P(N)G # TIMPPA ENDS HERE $fixfile =~ s~[^/\\0-9A-Za-z#%+\,\-\ \.\:@^_]~~g; # Remove all inappropriate characters. # replace . with _ in the filename except for the extension $fixname = $fixfile; $fixname =~ s/(\S+)(\.\S+\Z)/$1/gi; $fixext = $2; $fixext =~ s/(pl|cgi|php|phtml|html|htm|asp)/_$1/gi; $fixname =~ s/\./\_/g; $fixfile = qq~$useravname$fixext~; foreach $extupic (@extupic) { chomp($extupic); if (grep /$extupic$/i, $fixfile) { $match = 1; last; } } if (!$match) { &clear_temp; &fatal_error("$lang_uapav{'20'} @extupic ($fixfile)"); } if ($mydirlimit > 0) { use File::Find; my ($size, $used_space, $free_space) = 0; &find(sub { $dirsize += -s }, $uploaddirupic); $used_space = int($dirsize / 1024); $spaceleft = ($mydirlimit - $dirsize); $kbspaceleft = ($sizef_dirlimit - $used_space); } $filesize = $ENV{'CONTENT_LENGTH'} - $postsize; $filesizekb = int($filesize / 1024); if ($filesize > $mylimit && $mylimit != 0) { $filesizediff = $filesizekb - $sizef_useravatars; if ($filesizediff == 1) { $sizevar = "kilobyte"; } else { $sizevar = "kilobytes"; } &clear_temp; &fatal_error("$lang_uapav{'21'} $filesizediff $sizevar $lang_uapav{'21b'}"); } elsif ($filesize > $spaceleft && $mydirlimit != 0) { $filesizediff = $filesizekb - $kbspaceleft; if ($filesizediff == 1) { $sizevar = "kilobyte"; } else { $sizevar = "kilobytes"; } &clear_temp; &fatal_error("$lang_uapav{'22'} $filesizediff $sizevar $lang_uapav{'22b'}"); } if (fopen(NEWFILE, ">$uploaddirupic/$fixfile")) { if ($isWIN) { binmode NEWFILE; } while (<$filename>) { print NEWFILE; } fclose(NEWFILE); } else { &clear_temp; &fatal_error("$lang_uapav{'32'} $uploaddirupic"); } if (-s "$uploaddirupic/$fixfile") { $upload_ok = 1; } else { unlink("$uploaddirupic/$fixfile"); &clear_temp; &fatal_error("$lang_uapav{'31'} $fixfile"); } if ($fixfile =~ /(jpg|gif|png|jpeg)$/i) { $okatt = 1; if ($fixfile =~ /(gif)$/i) { fopen(ATTFILE, "$uploaddirupic/$fixfile"); read(ATTFILE, $header, 10); ($giftest, undef, undef, undef, undef, undef) = unpack("a3a3C4", $header); fclose(ATTFILE); if ($giftest ne "GIF") { $okatt = 0; } } fopen(ATTFILE, "$uploaddirupic/$fixfile"); while ( read(ATTFILE, $buffer, 1024) ) { if ($buffer =~ /\
$lang_uapav{'05'}
$lang_uapav{'06'} $lang_uapav{'07'}
$lang_uapav{'40'}
$lang_uapav{'39'}
$lang_uapav{'39a'}
$lang_uapav{'10'}
$lang_uapav{'14'}
$lang_uapav{'11'}
$lang_uapav{'14'}
$lang_uapav{'08'}
$lang_uapav{'15'} $facesdir$lang_uapav{'16'}
$lang_uapav{'09'}
$lang_uapav{'15'} $facesurl$lang_uapav{'16'}
~; my (@uaupattachments,$totaluaupattach,$fline,$uavsize,$uavsizelog,$kbspaceleft,$used_kb,$myuaupdirlimit,$diruavpsize,$used_space); fopen(UAUP, "$vardir/UsersAvatars_Log.txt"); @uaupattachments = ; fclose(UAUP); $totaluaupattach = @uaupattachments; foreach $fline (@uaupattachments) { chomp $fline; my ($usernm, $uaupurl,$uavsize) = split(/\|/, $fline); $used_kb += $uavsize; } $kbspaceleft = $sizef_dirlimit - $used_kb; if ($sizef_dirlimit != 0) { $uaupremaining_space = "$kbspaceleft $lang_uapav{'30'}"; } else { $uaupremaining_space = "$lang_uapav{'23'}"; } if ($used_kb >0) { $used_kb = qq~$used_kb $lang_uapav{'30'}~; } else { $used_kb = 0; } $yymain .= qq~

$lang_uapav{'44'}
$lang_uapav{'45'}
$lang_uapav{'46'}
$totaluaupattach
$lang_uapav{'47'} $used_kb
$lang_uapav{'48'} $uaupremaining_space
~; $yytitle = $admin_txt{'222'}; $action_area = "usersavatars"; &AdminTemplate; exit; } sub UsersAvatarsSET2 { &is_admin_or_gmod; $en_useravatars = $FORM{'en_useravatars'} || 0; $sizef_useravatars = $FORM{'sizef_useravatars'} || 0; $sizef_dirlimit = $FORM{'sizef_dirlimit'} || 0; $uploaddirupic = $FORM{'uploaddirupic'} || ""; $uploadurlupic = $FORM{'uploadurlupic'} || ""; $memgrupuav = $FORM{"memgrupuav"} || ""; my $setfile = << "EOF"; ############################################################################### # UsersAvatars.txt (UsersAvatars configurations) # ############################################################################### \$en_useravatars = "$en_useravatars"; # Set to enable upload UsersAvatars \$memgrupuav = "$memgrupuav"; # MemberGroups to enable upload UsersAvatars \$sizef_useravatars = "$sizef_useravatars"; # Set to the maximum number of kilobytes an attachment UsersAvatars can be. \$sizef_dirlimit = "$sizef_dirlimit"; # Set to the maximum number of kilobytes the attachment directory for UsersAvatars can hold. \$uploaddirupic = "$uploaddirupic"; # Base Path for all attachment files \$uploadurlupic = "$uploadurlupic"; # Base URL for all attachment files \@extupic = qw(jpg jpeg gif png); # The allowed file extensions for UsersAvatars file attachements. Variable should be set in the form of "jpg bmp gif" and so on. 1; EOF fopen(USERSAVATARSVARS, ">$vardir/UsersAvatars.txt"); print USERSAVATARSVARS $setfile; fclose(USERSAVATARSVARS); if ($action eq "usersavatars2") { $yySetLocation = qq~$adminurl~; &redirectexit; } } sub UsersAvatarsDEL { # delete the user avatar file my $userdel = $_[0]; my $fixdel; foreach $extupic (@extupic) { chomp($extupic); $fixdel = qq~$uploaddirupic/$userdel.$extupic~; if (-e $fixdel && $fixdel ne '') { unlink("$fixdel"); } } &UsersAvatarsLOG($userdel,0,0,0); } sub UsersAvatarsDMN { # check User domain and file name for Avatar my ($chkuser) = $_[0]; my ($chkuser2) = $_[1]; $useravurl2 = 1; my $referencedomain = substr($boardurl, 7, (index($boardurl, "/", 7)) - 7); my $userdomain = qq~$chkuser2~; $userdomain = substr($userdomain, 7, (index($userdomain, "/", 7)) - 7); if ($referencedomain ne $userdomain) { &UsersAvatarsDEL($chkuser); $useravurl = 1; } if (!$useravurl) { $useravurl2 = 0; my $chkuser3 = qq~$chkuser2~; my $chkuser4 = qq~$uploadurlupic/$chkuser~; foreach $extupic (@extupic) { chomp($extupic); $fixyesdel2 = qq~$chkuser4.$extupic~; if ($chkuser3 eq $fixyesdel2) { $useravurl2 = 1; last; } } if (!$useravurl2) { &UsersAvatarsDEL($chkuser); } } return ($useravurl2, $useravurl); } sub UsersAvatarsLOG { # operation with Users Avatars Log File my ($useravlgnchk) = $_[0]; my ($useravpic) = $_[1]; my ($avsubwork) = $_[2]; my ($ufilesize) = $filesizekb; my(@useravposts,$useravpost, $useravlgn, $useravpic2,$ufilesize2); if($avsubwork) { fopen(FILEAV, "$vardir/UsersAvatars_Log.txt"); @useravposts = ; fclose(FILEAV); $editedav = 0; fopen(FILEAV, ">$vardir/UsersAvatars_Log.txt", 1); foreach $useravpost (@useravposts) { chomp $useravpost; ($useravlgn, $useravpic2,$ufilesize2) = split(/\|/,$useravpost); if($useravlgn eq $useravlgnchk) { print FILEAV qq~$useravlgnchk|$useravpic|$ufilesize\n~; $editedav = 1; } else { print FILEAV "$useravpost\n"; } } unless($editedav) { print FILEAV qq~$useravlgnchk|$useravpic|$ufilesize\n~; } fclose(FILEAV); } else { fopen(FILEAV, "$vardir/UsersAvatars_Log.txt"); @useravposts = ; fclose(FILEAV); fopen(FILEAV, ">$vardir/UsersAvatars_Log.txt", 1); foreach $useravpost (@useravposts) { chomp $useravpost; ($useravlgn, $useravpic2) = split(/\|/,$useravpost); if($useravlgn eq $useravlgnchk) { next; } print FILEAV "$useravpost\n"; } fclose(FILEAV); } } 1;