############################################################################### # Memberlist.pl # ############################################################################### # YaBB: Yet another Bulletin Board # # Open-Source Community Software for Webmasters # # Version: YaBB 2.4 # # Packaged: April 12, 2009 # # Distributed by: http://www.yabbforum.com # # =========================================================================== # # Copyright (c) 2000-2009 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. # ############################################################################### $memberlistplver = 'YaBB 2.4 $Revision: 1.23 $'; if ($action eq 'detailedversion') { return 1; } if ($iamguest && $ML_Allowed) { &fatal_error('no_access'); } if ($ML_Allowed == 2 && !$iamadmin && !$iamgmod && !$iammod) { &fatal_error('no_access'); } if ($ML_Allowed == 3 && !$iamadmin && !$iamgmod) { &fatal_error('no_access'); } &LoadLanguage('MemberList'); $MembersPerPage = $TopAmmount; $maxbar = 100; sub Ml { # Decides how to sort memberlist, and gives default sort order if (!$barmaxnumb) { $barmaxnumb = 500; } if ($barmaxdepend == 1) { $barmax = 1; &ManageMemberinfo("load"); while (($key, $value) = each(%memberinf)) { (undef, undef, undef, $memposts) = split(/\|/, $value); if ($memposts > $barmax) { $barmax = $memposts; } } undef %memberinf; } else { $barmax = $barmaxnumb; } $FORM{'sortform'} ||= $INFO{'sortform'}; # Fix for Javascript disabled if ($INFO{'sort'} eq "" && $FORM{'sortform'} eq "") { $INFO{'sort'} = $defaultml; $FORM{'sortform'} = $defaultml; } if ($FORM{'sortform'} eq "username" || $INFO{'sort'} eq "mlletter" || $INFO{'sort'} eq "username") { $page = "a"; $showpage = "A"; while ($page ne "z") { $LetterLinks .= qq($showpage  ); $page++; $showpage++; } $LetterLinks .= qq(Z $ml_txt{'800'} ); } if ($INFO{'start'} eq "") { $start = 0; } else { $start = "$INFO{'start'}"; } if ($FORM{'sortform'} eq "posts" || $INFO{'sort'} eq "posts") { $selcPost .= qq( selected="selected"); $selPost .= qq(class="windowbg"); } else { $selPost .= qq(class="windowbg2"); } if ($FORM{'sortform'} eq "regdate" || $INFO{'sort'} eq "regdate") { $selcReg .= qq( selected="selected"); $selReg .= qq(class="windowbg"); } else { $selReg .= qq(class="windowbg2"); } if ($FORM{'sortform'} eq "userlastlogin" || $INFO{'sort'} eq "userlastlogin") { $selcLastlogin .= qq( selected="selected"); $selLastlogin .= qq(class="windowbg"); } else { $selLastlogin .= qq(class="windowbg2"); } if ($FORM{'sortform'} eq "position" || $INFO{'sort'} eq "position") { $selcPos .= qq( selected="selected"); $selPos .= qq(class="windowbg"); } else { $selPos .= qq(class="windowbg2"); } if ($FORM{'sortform'} eq "username" || $INFO{'sort'} eq "mlletter" || $INFO{'sort'} eq "username") { $selcUser .= qq( selected="selected"); $selUser .= qq(class="windowbg"); } else { $selUser .= qq(class="windowbg2"); } if ($FORM{'sortform'} eq "posts" || $INFO{'sort'} eq "posts") { &MLTop; } if ($FORM{'sortform'} eq "regdate" || $INFO{'sort'} eq "regdate") { &MLDate; } if ($FORM{'sortform'} eq "userlastlogin" || $INFO{'sort'} eq "userlastlogin") { &MLLastlogin; } if ($FORM{'sortform'} eq "position" || $INFO{'sort'} eq "position") { &MLPosition; } if ($FORM{'sortform'} eq "memsearch" || $INFO{'sort'} eq "memsearch") { &FindMembers; } if ($INFO{'sort'} eq "" || $INFO{'sort'} eq "mlletter" || $INFO{'sort'} eq "username") { &MLByLetter; } } sub MLByLetter { $letter = lc($INFO{'letter'}); $i = 0; &ManageMemberinfo("load"); foreach $membername (sort { lc $memberinf{$a} cmp lc $memberinf{$b} } keys %memberinf) { ($memrealname, $mememail, undef, undef) = split(/\|/, $memberinf{$membername}); if ($letter) { $SearchName = lc(substr($memrealname, 0, 1)); if ($SearchName eq $letter) { $ToShow[$i] = $membername; $i++; } elsif ($letter eq "other" && (($SearchName lt "a") || ($SearchName gt "z"))) { $ToShow[$i] = $membername; $i++; } } else { $ToShow[$i] = $membername; $i++; } } undef %memberinf; $memcount = @ToShow; if (!$memcount && $letter) { $pageindex1 = qq~~; $pageindex2 = qq~~; } else { &buildIndex; } &buildPages(1); $b = $start; $numshown = 0; if ($memcount) { while ($numshown < $MembersPerPage) { &showRows($ToShow[$b]); $numshown++; $b++; } } else { if ($letter) { $yymain .= qq~
$ml_txt{'760'}

~; } } undef @ToShow; &buildPages(0); $yytitle = "$ml_txt{'312'} $numshow"; &template; } sub MLTop { %top_list = (); &ManageMemberinfo("load"); while (($membername, $value) = each(%memberinf)) { ($memrealname, undef, undef, $memposts) = split(/\|/, $value); $memposts = sprintf("%06d", (999999 - $memposts)); $top_list{$membername} = qq~$memposts|$memrealname~; } undef %memberinf; my @toplist = sort { lc $top_list{$a} cmp lc $top_list{$b} } keys %top_list; $memcount = @toplist; &buildIndex; &buildPages(1); $b = $start; $numshown = 0; while ($numshown < $MembersPerPage) { &showRows($toplist[$b]); $numshown++; $b++; } undef @toplist; &buildPages(0); $yytitle = "$ml_txt{'313'} $ml_txt{'314'} $numshow"; &template; } sub MLPosition { %TopMembers = (); &ManageMemberinfo("load"); my %nopostorder; for (my $i = 0; $i < @nopostorder; $i++) { $nopostorder{$nopostorder[$i]} = $i;} memberposition: while (($membername, $value) = each(%memberinf)) { ($memberrealname, undef, $memposition, $memposts) = split(/\|/, $value); $memposts = 9999999999 - $memposts; foreach (keys %Group) { if ($memposition eq $_) { if ($_ eq "Administrator") { $TopMembers{$membername} = "a$memposts$memberrealname"; next memberposition; } elsif ($_ eq "Global Moderator") { $TopMembers{$membername} = "b$memposts$memberrealname"; next memberposition; } } } foreach (keys %NoPost) { if ($_ == $memposition) { $memposition = sprintf("%06d", $nopostorder{$_}); $TopMembers{$membername} = "d$memposition$memposts$memberrealname"; next memberposition; } } $TopMembers{$membername} = "e$memposts$memberrealname"; } my @toplist = sort { lc($TopMembers{$a}) cmp lc($TopMembers{$b})} keys %TopMembers; $memcount = @toplist; &buildIndex; &buildPages(1); $b = $start; $numshown = 0; while ($numshown < $MembersPerPage) { &showRows($toplist[$b]); $numshown++; $b++; } undef @toplist; undef %memberinf; &buildPages(0); $yytitle = "$ml_txt{'313'} $ml_txt{'4'} $ml_txt{'87'} $numshow"; &template; } sub MLDate { ($memcount, undef) = &MembershipGet; &buildIndex; &buildPages(1); fopen(MEMBERLISTREAD, "$memberdir/memberlist.txt"); $counter = 0; while ($counter < $start && ($buffer = )) { $counter++; } for ($counter = 0; $counter < $MembersPerPage && ($buffer = ); $counter++) { chomp $buffer; if ($buffer) { ($membername, undef) = split(/\t/, $buffer, 2); &showRows($membername); } } fclose(MEMBERLISTREAD); &buildPages(0); $yytitle = "$ml_txt{'313'} $ml_txt{'4'} $ml_txt{'233'} $numshow"; &template; } sub MLLastlogin { ( $memcount, undef ) = &MembershipGet; &buildIndex; &buildPages( 1 ); my ( @memberlist, @x ); ManageMemberlist( "load" ); foreach ( keys %memberlist ) { push( @memberlist, $_ ) if &LoadUser( $_ ) } undef %memberlist; # sort numerically descending if ( $INFO{'sortdesc'} ) { @x = sort { ${$uid.$a}{'lastonline'} <=> ${$uid.$b}{'lastonline'} } @memberlist; } # sort numerically ascending else { @x = sort { ${$uid.$b}{'lastonline'} <=> ${$uid.$a}{'lastonline'} } @memberlist; } foreach ( splice( @x, $start, $MembersPerPage ) ) { &showRows( $_ ) } &buildPages( 0 ); $yytitle = "$ml_txt{'313'} $ml_txt{'4'} $ml_txt{'233'} $numshow"; &template; } sub showRows { my ($user) = $_[0]; my ($wwwshow); if ($user ne "") { &LoadUser($user); &LoadMiniUser($user) if $user eq $username; if (${$uid.$user}{'realname'} eq "") { ${$uid.$user}{'realname'} = $user; } if (${$uid.$user}{'weburl'}) { $wwwshow = qq~${$uid.$user}{'webtitle'}~; } $barchart = ${$uid.$user}{'postcount'}; $bartemp = (${$uid.$user}{'postcount'} * $maxbar); $barwidth = ($bartemp / $barmax); $barwidth = ($barwidth + 0.5); $barwidth = int($barwidth); if ($barwidth > $maxbar) { $barwidth = $maxbar } if ($barchart < 1) { $Bar = ""; } else { $Bar = qq~~; } if ($Bar eq "") { $Bar = " "; } $tmppostcount = &NumberFormat(${$uid.$user}{'postcount'}); my $additional_tds = $extendedprofiles ? &ext_memberlist_tds($user) : ''; $dr_regdate = ''; if (${$uid.$user}{'regtime'}) { #my $curtimeformat = ${$uid.$username}{'timeformat'}; #${$uid.$username}{'timeselect'} = 1; $dr_regdate = &timeformat(${$uid.$user}{'regtime'}); #${$uid.$username}{'timeselect'} = $curtimeformat; } $dr_regdate =~ s~(.*)(, 1?[0-9]):[0-9][0-9].*~$1~; if ($showuserpicml && $allowpics) { $userpic = qq~~; } else { $userpic = ''; } if ($showmoodml && $allowselectmood && ${$uid.$user}{'mood'} ne 'NoMood.gif') { if ($username eq $user) { $moodlinkjavascript = qq~ ~; $mood = ${$uid.$user}{'mood'} ? qq~
$moodlinkjavascript~ : ''; } elsif ($username ne $user) { $mood = ${$uid.$user}{'mood'} ? qq~
~ : ''; } } else { $mood = ''; } $userlastlogin = &timeformat(${$uid.$user}{'lastonline'}); if ($userlastlogin eq "") { $userlastlogin = "$ml_txt{'235a'}"; } $yymain .= qq~ $userpic $link{$user}$mood ~; ### Email Via Forum Mod Edit Start ### &SendEmailPerms; if ((!${$uid.$user}{'hidemail'} && $send_email && $allow_send_email && ${$uid.$username}{'en_send_email'}) || (${$uid.$user}{'hidemail'} && ${$uid.$user}{'en_re_email'} && $send_email && $allow_send_email && ${$uid.$username}{'en_send_email'}) || ($iamadmin && $send_email && $allow_send_email && ${$uid.$username}{'en_send_email'})) { $yymain .= qq~ $img_txt{'69'} ~; } elsif (${$uid.$user}{'hidemail'} && !$iamadmin && $allow_hide_email == 1) { $yymain .= qq~ Hidden Email ~; ### Email Via Forum Mod Edit End ### } else { if (!$iamguest){ $yymain .= qq~ ~ . &enc_eMail(qq~$img_txt{'69'}~,${$uid.$user}{'email'},'','') . qq~ ~; } else { $yymain .= qq~ Hidden Email ~; } } $yymain .= qq~ $wwwshow $memberinfo{$user}
$memberstar{$user} $tmppostcount $Bar $dr_regdate   $userlastlogin   $additional_tds ~; } } sub buildIndex { unless ($memcount == 0) { if (!$iamguest) { (undef, undef, $usermemberpage,undef ) = split(/\|/, ${$uid.$username}{'pageindex'}); } # Build the page links list. my ($pagetxtindex, $pagetextindex, $pagedropindex1, $pagedropindex2, $all, $allselected); $indexdisplaynum = 3; $dropdisplaynum = 10; if ($FORM{'sortform'} eq "") { $FORM{'sortform'} = $INFO{'sort'}; } $postdisplaynum = 3; $startpage = 0; $max = $memcount; if ($SearchStr ne '') { $findmember = qq~;member=$SearchStr~; } if ($INFO{'start'} eq "all") { $MembersPerPage = $max; $all = 1; $allselected = qq~ selected="selected"~; $start = 0 } else { $start = $INFO{'start'} || 0; } $start = $start > $memcount - 1 ? $memcount - 1 : $start; $start = (int($start / $MembersPerPage)) * $MembersPerPage; $tmpa = 1; $pagenumb = int(($memcount - 1) / $MembersPerPage) + 1; if ($start >= (($postdisplaynum - 1) * $MembersPerPage)) { $startpage = $start - (($postdisplaynum - 1) * $MembersPerPage); $tmpa = int($startpage / $MembersPerPage) + 1; } if ($memcount >= $start + ($postdisplaynum * $MembersPerPage)) { $endpage = $start + ($postdisplaynum * $MembersPerPage); } else { $endpage = $memcount } $lastpn = int(($memcount - 1) / $MembersPerPage) + 1; $lastptn = ($lastpn - 1) * $MembersPerPage; $pageindex1 = qq~ $ml_txt{'139'}: $pagenumb~; $pageindex2 = qq~ $ml_txt{'139'}: $pagenumb~; if ($pagenumb > 1 || $all) { if ($usermemberpage == 1 || $iamguest) { $pagetxtindexst = qq~~; if (!$iamguest) { $pagetxtindexst .= qq~$ml_txt{'19'} $ml_txt{'139'}: ~; } else { $pagetxtindexst .= qq~ $ml_txt{'139'}: ~; } if ($startpage > 0) { $pagetxtindex = qq~1 ... ~; } if ($startpage == $MembersPerPage) { $pagetxtindex = qq~1 ~; } for ($counter = $startpage; $counter < $endpage; $counter += $MembersPerPage) { $pagetxtindex .= $start == $counter ? qq~$tmpa ~ : qq~$tmpa ~; $tmpa++; } if ($endpage < $memcount - $MembersPerPage) { $pageindexadd = qq~... ~; } if ($endpage != $memcount) { $pageindexadd .= qq~$lastpn~; } $pagetxtindex .= qq~$pageindexadd~; $pageindex1 = qq~$pagetxtindexst$pagetxtindex~; $pageindex2 = qq~$pagetxtindexst$pagetxtindex~; } else { $pagedropindex1 = qq~~; $pagedropindex1 .= qq~$ml_txt{'19'}~; $pagedropindex2 = $pagedropindex1; $tstart = $start; if (substr($INFO{'start'}, 0, 3) eq "all") { ($tstart, $start) = split(/\-/, $INFO{'start'}); } $d_indexpages = $pagenumb / $dropdisplaynum; $i_indexpages = int($pagenumb / $dropdisplaynum); if ($d_indexpages > $i_indexpages) { $indexpages = int($pagenumb / $dropdisplaynum) + 1; } else { $indexpages = int($pagenumb / $dropdisplaynum) } $selectedindex = int(($start / $MembersPerPage) / $dropdisplaynum); if ($pagenumb > $dropdisplaynum) { $pagedropindex1 .= qq~\n~; } for ($i = 0; $i < $indexpages; $i++) { $indexpage = ($i * $dropdisplaynum) * $MembersPerPage; $indexstart = ($i * $dropdisplaynum) + 1; $indexend = $indexstart + ($dropdisplaynum - 1); if ($indexend > $pagenumb) { $indexend = $pagenumb; } if ($indexstart == $indexend) { $indxoption = qq~$indexstart~; } else { $indxoption = qq~$indexstart-$indexend~; } $selected = ""; if ($i == $selectedindex) { $selected = qq~ selected="selected"~; $pagejsindex = qq~$indexstart|$indexend|$MembersPerPage|$indexpage~; } if ($pagenumb > $dropdisplaynum) { $pagedropindex1 .= qq~\n~; $pagedropindex2 .= qq~\n~; } } if ($pagenumb > $dropdisplaynum) { $pagedropindex1 .= qq~\n~; $pagedropindex2 .= qq~\n~; } $pagedropindex1 .= qq~~; $pagedropindex2 .= qq~~; $tmpMembersPerPage = $MembersPerPage; if (substr($INFO{'start'}, 0, 3) eq "all") { $MembersPerPage = $MembersPerPage * $dropdisplaynum; } $prevpage = $start - $tmpMembersPerPage; $nextpage = $start + $MembersPerPage; $pagedropindexpvbl = qq~~; $pagedropindexnxbl = qq~~; if ($start < $MembersPerPage) { $pagedropindexpv .= qq~~; } else { $pagedropindexpv .= qq~$pidtxt{'02'}~; } if ($nextpage > $lastptn) { $pagedropindexnx .= qq~~; } else { $pagedropindexnx .= qq~$pidtxt{'03'}~; } $pageindex1 = qq~$pagedropindex1~; $pageindex2 = qq~$pagedropindex2~; $pageindexjs = qq~ ~; } } } sub buildPages { $FindForm .= qq~
:
~; $SortJump .= qq(
); if ($showuserpicml && $allowpics) { $headertop = 8; } else { $headertop = 7; } my $additional_headers; $headercount = $headertop; if ($extendedprofiles) { require "$sourcedir/ExtendedProfiles.pl"; $additional_headers = &ext_memberlist_tableheader(); $headercount += &ext_memberlist_get_headercount($additional_headers); } if ($showuserpicml && $allowpics) { $row_userpic = qq~$ml_txt{'34'}~; } else { $row_userpic = ''; } $TableHeader .= qq( $row_userpic $ml_txt{'35'} $ml_txt{'307'} $ml_txt{'96'} $ml_txt{'87'} $ml_txt{'21'} $ml_txt{'234'} $ml_txt{'235'}
$ml_txt{'235b'} $additional_headers ); if ($LetterLinks ne "") { $TableHeader .= qq( $LetterLinks ); } $numbegin = ($start + 1); $numend = ($start + $MembersPerPage); if ($numend > $memcount) { $numend = $memcount; } if ($memcount == 0) { $numshow = ""; } else { $numshow = qq~($numbegin - $numend $ml_txt{'309'} $memcount)~; } if ($_[0]) { $yynavigation = qq~› $ml_txt{'331'} $numshow~; $yymain .= qq~
$TableHeader ~; } else { $yymain .= qq~
$pageindex1
$FindForm   $SortJump
$pageindex2
$pageindexjs
~; } } } sub FindMembers { $SearchStr = $FORM{'member'} || $INFO{'member'}; $LookFor = qq~^$SearchStr\$~; $LookFor =~ s/\*+/.*?/g; &ManageMemberinfo("load"); my %memberfind = (); while (($membername, $value) = each(%memberinf)) { ($memrealname, $mememail, undef) = split(/\|/, $value, 3); if ($memrealname =~ /$LookFor/i) { $memberfind{$membername} = $memrealname; } elsif ($mememail =~ /$LookFor/i) { &LoadUser($membername) if !$iamadmin && !$iamgmod; $memberfind{$membername} = $memrealname if $iamadmin || $iamgmod || !${$uid.$membername}{'hidemail'}; } } @findmemlist = sort { lc $memberfind{$a} cmp lc $memberfind{$b} } keys %memberfind; undef (%memberfind); $memcount = @findmemlist; &buildIndex; &buildPages(1); if ($memcount > 0) { my $i = $start; $numshown = 0; while ($numshown < $MembersPerPage) { chomp $findmemlist[$i]; &showRows($findmemlist[$i]); $numshown++; $i++; } } else { $yymain .= qq~
$ml_txt{'802'} $FORM{'member'}

~; } undef @findmemlist; undef %memberinf; &buildPages(0); $yytitle = "$ml_txt{'313'} $ml_txt{'4'} $ml_txt{'87'} $numshow"; &template; } 1;