###############################################################################
# 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 =~ /\
~;
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;