1############################################################################### 2# ViewMembers.pm # 3# $Date: 12.02.14 $ # 4############################################################################### 5# YaBB: Yet another Bulletin Board # 6# Open-Source Community Software for Webmasters # 7# Version: YaBB 2.6.11 # 8# Packaged: December 2, 2014 # 9# Distributed by: http://www.yabbforum.com # 10# =========================================================================== # 11# Copyright (c) 2000-2014 YaBB (www.yabbforum.com) - All Rights Reserved. # 12# Software by: The YaBB Development Team # 13# with assistance from the YaBB community. # 14############################################################################### 15# use strict; 16our $VERSION = '2.6.11'; 17 18$viewmemberspmver = 'YaBB 2.6.11 $Revision: 1611 $'; 19if ( $action eq 'detailedversion' ) { return 1; } 20 21LoadLanguage('MemberList'); 22 23is_admin_or_gmod(); 24 25my ( $sortmode, $sortorder, $spages ); 26 27$MembersPerPage = $TopAmmount; 28$maxbar = 100; 29 30sub Ml { 31 32 # Decides how to sort memberlist, and gives default sort order 33 if ( !$barmaxnumb ) { $barmaxnumb = 500; } 34 if ( $barmaxdepend == 1 ) { 35 $barmax = 1; 36 ManageMemberinfo('load'); 37 while ( ( $key, $value ) = each %memberinf ) { 38 ( undef, undef, undef, $memposts ) = split /\|/xsm, $value; 39 if ( $memposts > $barmax ) { $barmax = $memposts; } 40 } 41 undef %memberinf; 42 } 43 else { 44 $barmax = $barmaxnumb; 45 } 46 47 $FORM{'sortform'} ||= $INFO{'sortform'}; 48 if ( !$INFO{'sort'} && !$FORM{'sortform'} ) { 49 $INFO{'sort'} = $defaultml; 50 $FORM{'sortform'} = $defaultml; 51 } 52 53 if ( $FORM{'sortform'} eq 'username' 54 || $INFO{'sort'} eq 'mlletter' 55 || $INFO{'sort'} eq 'username' ) 56 { 57 $page = 'a'; 58 $showpage = 'A'; 59 while ( $page ne 'z' ) { 60 $LetterLinks .= 61qq(<a href="$adminurl?action=ml;sort=mlletter;letter=$page" class="catbg a"><b>$showpage </b></a> ); 62 $page++; 63 $showpage++; 64 } 65 $LetterLinks .= 66qq(<a href="$adminurl?action=ml;sort=mlletter;letter=z" class="catbg a"><b>Z</b></a> <a href="$adminurl?action=ml;sort=mlletter;letter=other" class="catbg a"><b>$ml_txt{'800'}</b></a> ); 67 } 68 69 if ( $INFO{'start'} eq q{} ) { $start = 0; } 70 else { $start = $INFO{'start'}; $spages = ";start=$start"; } 71 72 if ( $INFO{'sort'} ne q{} ) { $sortmode = ';sort=' . $INFO{'sort'}; } 73 elsif ( $FORM{'sortform'} ne q{} ) { 74 $sortmode = ';sort=' . $FORM{'sortform'}; 75 } 76 if ( $INFO{'reversed'} || $FORM{'reversed'} ) { 77 $selReversed = q~ checked="checked"~; 78 $sortorder = ';reversed=1'; 79 } 80 81 $actualnum = 0; 82 $numshown = 0; 83 $selPost_a = q~windowbg2~; 84 $selReg_a = q~windowbg2~; 85 $selPos_a = q~windowbg2~; 86 $selLastOn_a = q~windowbg2~; 87 $selLastPost_a = q~windowbg2~; 88 $selLastIM_a = q~windowbg2~; 89 $selUser_a = q~windowbg2~; 90 if ( $FORM{'sortform'} eq 'posts' || $INFO{'sort'} eq 'posts' ) { 91 $selPost_a = q~windowbg~; 92 $selPost .= q~ selected="selected"~; 93 MLTop(); 94 } 95 if ( $FORM{'sortform'} eq 'regdate' || $INFO{'sort'} eq 'regdate' ) { 96 $selReg .= q~ selected="selected"~; 97 $selReg_a = q~windowbg~; 98 MLDate(); 99 } 100 if ( $FORM{'sortform'} eq 'position' || $INFO{'sort'} eq 'position' ) { 101 $selPos .= q~ selected="selected"~; 102 $selPos_a = q~windowbg~; 103 MLPosition(); 104 } 105 if ( $FORM{'sortform'} eq 'lastonline' || $INFO{'sort'} eq 'lastonline' ) { 106 $selLastOn .= q~ selected="selected"~; 107 $selLastOn_a = q~windowbg~; 108 MLLastOnline(); 109 } 110 if ( $FORM{'sortform'} eq 'lastpost' || $INFO{'sort'} eq 'lastpost' ) { 111 $selLastPost .= q~ selected="selected"~; 112 $selLastPost_a = q~windowbg~; 113 MLLastPost(); 114 } 115 if ( $FORM{'sortform'} eq 'lastim' || $INFO{'sort'} eq 'lastim' ) { 116 $selLastIm .= q~ selected="selected"~; 117 $selLastIM_a = q~windowbg~; 118 MLLastIm(); 119 } 120 if ( $FORM{'sortform'} eq 'memsearch' || $INFO{'sort'} eq 'memsearch' ) { 121 FindMembers(); 122 } 123 if ( $INFO{'sort'} eq q{} 124 || $INFO{'sort'} eq 'mlletter' 125 || $INFO{'sort'} eq 'username' ) 126 { 127 $selUser .= q~ selected="selected"~; 128 $selUser_a = q~windowbg~; 129 MLByLetter(); 130 } 131 return; 132} 133 134sub MLByLetter { 135 $letter = lc $INFO{'letter'}; 136 $i = 0; 137 ManageMemberinfo('load'); 138 foreach my $membername ( 139 sort { lc $memberinf{$a} cmp lc $memberinf{$b} } 140 keys %memberinf 141 ) 142 { 143 ( $memrealname, $mememail, undef, undef ) = 144 split /\|/xsm, $memberinf{$membername}; 145 if ($letter) { 146 $SearchName = lc( substr $memrealname, 0, 1 ); 147 if ( $SearchName eq $letter ) { $ToShow[$i] = $membername; $i++; } 148 elsif ( $letter eq 'other' 149 && ( ( $SearchName lt 'a' ) || ( $SearchName gt 'z' ) ) ) 150 { 151 $ToShow[$i] = $membername; 152 $i++; 153 } 154 } 155 else { 156 $ToShow[$i] = $membername; 157 $i++; 158 } 159 } 160 undef %memberinf; 161 162 $memcount = @ToShow; 163 if ( !$memcount && $letter ) { 164 $pageindex1 = 165qq~<span class="index-togl small">$admin_img{'index_togl'}</span>~; 166 $pageindex2 = 167qq~<span class="index-togl small">$admin_img{'index_togl'}</span>~; 168 } 169 else { 170 buildIndex(); 171 } 172 buildPages(1); 173 $bb = $start; 174 175 if ($memcount) { 176 while ( $numshown < $MembersPerPage ) { 177 showRows( $ToShow[$bb] ); 178 $numshown++; 179 $bb++; 180 } 181 } 182 else { 183 if ($letter) { 184 $yymain .= qq~<tr> 185 <td class="windowbg center" colspan="7"> 186 <div class="pad-more"><b>$ml_txt{'760'}</b></div> 187 </td> 188</tr>~; 189 } 190 } 191 192 undef @ToShow; 193 buildPages(0); 194 $yytitle = "$ml_txt{'312'} $numshow"; 195 $action_area = 'viewmembers'; 196 AdminTemplate(); 197 return; 198} 199 200sub MLTop { 201 %top_list = (); 202 203 ManageMemberinfo('load'); 204 while ( ( $membername, $value ) = each %memberinf ) { 205 ( $memrealname, undef, undef, $memposts ) = split /\|/xsm, $value; 206 $memposts = sprintf '%06d', ( 999_999 - $memposts ); 207 $top_list{$membername} = qq~$memposts|$memrealname~; 208 } 209 undef %memberinf; 210 my @toplist = sort { lc $top_list{$a} cmp lc $top_list{$b} } keys %top_list; 211 212 if ( $FORM{'reversed'} || $INFO{'reversed'} ) { 213 @toplist = reverse @toplist; 214 } 215 216 $memcount = @toplist; 217 buildIndex(); 218 buildPages(1); 219 $bb = $start; 220 221 while ( $numshown < $MembersPerPage ) { 222 showRows( $toplist[$bb] ); 223 $numshown++; 224 $bb++; 225 } 226 227 undef @toplist; 228 buildPages(0); 229 $yytitle = "$ml_txt{'313'} $ml_txt{'314'} $numshow"; 230 $action_area = 'viewmembers'; 231 AdminTemplate(); 232 return; 233} 234 235sub MLPosition { 236 %TopMembers = (); 237 238 ManageMemberinfo('load'); 239 while ( ( $membername, $value ) = each %memberinf ) { 240 ( $memberrealname, undef, $memposition, $memposts ) = 241 split /\|/xsm, $value; 242 $pstsort = 99_999_999 - $memposts; 243 $sortgroups = q{}; 244 foreach my $key ( keys %Group ) { 245 if ( $memposition eq $key ) { 246 if ( $key eq 'Administrator' ) { 247 $sortgroups = "aaa.$pstsort.$memberrealname"; 248 } 249 elsif ( $key eq 'Global Moderator' ) { 250 $sortgroups = "bbb.$pstsort.$memberrealname"; 251 } 252 elsif ( $key eq 'Mid Moderator' ) { 253 $sortgroups = "bcc.$pstsort.$memberrealname"; 254 } 255 } 256 } 257 if ( !$sortgroups ) { 258 foreach ( sort { $a <=> $b } keys %NoPost ) { 259 if ( $memposition eq $_ ) { 260 $sortgroups = "ddd.$memposition.$pstsort.$memberrealname"; 261 } 262 } 263 } 264 if ( !$sortgroups ) { 265 $sortgroups = "eee.$pstsort.$memposition.$memberrealname"; 266 } 267 $TopMembers{$membername} = $sortgroups; 268 } 269 my @toplist = 270 sort { lc $TopMembers{$a} cmp lc $TopMembers{$b} } keys %TopMembers; 271 272 if ( $FORM{'reversed'} || $INFO{'reversed'} ) { 273 @toplist = reverse @toplist; 274 } 275 276 $memcount = @toplist; 277 buildIndex(); 278 buildPages(1); 279 $bb = $start; 280 281 while ( $numshown < $MembersPerPage ) { 282 showRows( $toplist[$bb] ); 283 $numshown++; 284 $bb++; 285 } 286 287 undef @toplist; 288 undef %memberinf; 289 buildPages(0); 290 $yytitle = "$ml_txt{'313'} $ml_txt{'4'} $ml_txt{'87'} $numshow"; 291 $action_area = 'viewmembers'; 292 AdminTemplate(); 293 return; 294} 295 296sub MLDate { 297 fopen( MEMBERLISTREAD, "$memberdir/memberlist.txt" ); 298 @tempmemlist = <MEMBERLISTREAD>; 299 fclose(MEMBERLISTREAD); 300 if ( $FORM{'reversed'} || $INFO{'reversed'} ) { 301 @tempmemlist = reverse @tempmemlist; 302 } 303 304 $memcount = @tempmemlist; 305 buildIndex(); 306 buildPages(1); 307 $bb = $start; 308 309 while ( $numshown < $MembersPerPage ) { 310 ( $membername, undef ) = split /\t/xsm, $tempmemlist[$bb], 2; 311 showRows($membername); 312 $numshown++; 313 $bb++; 314 } 315 316 $yymain .= $TableFooter; 317 buildPages(0); 318 $yytitle = "$ml_txt{'313'} $ml_txt{'4'} $ml_txt{'233'}"; 319 $action_area = 'viewmembers'; 320 AdminTemplate(); 321 return; 322} 323 324sub showRows { 325 my ($user) = @_; 326 if ( $user ne q{} ) { 327 LoadUser($user); 328 $date2 = $date; 329 330 my $userlastonline = ${ $uid . $user }{'lastonline'}; 331 my $userlastpost = ${ $uid . $user }{'lastpost'}; 332 my $userlastim = ${ $uid . $user }{'lastim'}; 333 334 $date1 = stringtotime( ${ $uid . $user }{'regdate'} ); 335 calcdifference(); 336 $days_reg = $result; 337 338 my ( $tmpa, $tmpb, $tmpc ); 339 if ( $userlastonline eq q{} ) { $userlastonline = q{-}; 340 $date1 = stringtotime( ${ $uid . $user }{'regdate'} ); 341 calcdifference(); 342 $tmpa = $result; 343 } 344 else { 345 $date1 = $userlastonline; 346 calcdifference(); 347 $userlastonline = $result; 348 $tmpa = $userlastonline; 349 } 350 if ( $userlastpost eq q{} ) { $userlastpost = q{-}; 351 $date1 = stringtotime( ${ $uid . $user }{'regdate'} ); 352 calcdifference(); 353 $tmpb = $result; 354 } 355 else { 356 $date1 = $userlastpost; 357 calcdifference(); 358 $userlastpost = $result; 359 $tmpb = $userlastpost; 360 } 361 if ( $userlastim eq q{} ) { $userlastim = q{-}; 362 $date1 = stringtotime( ${ $uid . $user }{'regdate'} ); 363 calcdifference(); 364 $tmpc = $result; 365 } 366 else { 367 $date1 = $userlastim; 368 calcdifference(); 369 $userlastim = $result; 370 $tmpc = $userlastim; 371 } 372 $userlastonline = NumberFormat($userlastonline); 373 $userlastpost = NumberFormat($userlastpost); 374 $userlastim = NumberFormat($userlastim); 375 $userpostcount = NumberFormat( ${ $uid . $user }{'postcount'} ); 376 377 if ( $user ne 'admin' ) { 378 $CheckingAll .= 379qq~"$days_reg|${$uid.$user}{'postcount'}|$tmpa|$tmpb|$tmpc|$user", ~; 380 } 381 382 $barchart = ${ $uid . $user }{'postcount'}; 383 $bartemp = ( ${ $uid . $user }{'postcount'} * $maxbar ); 384 $barwidth = ( $bartemp / $barmax ); 385 $barwidth = ( $barwidth + 0.5 ); 386 $barwidth = int $barwidth; 387 if ( $barwidth > $maxbar ) { $barwidth = $maxbar } 388 if ( $barchart < 1 ) { $Bar = ' '; } 389 else { 390 $Bar = 391qq~<img src="$imagesdir/bar.gif" width="$barwidth" height="10" alt="" />~; 392 } 393 394 $dr_regdate = timeformat( ${ $uid . $user }{'regtime'} ); 395 $dr_regdate =~ s/(.*)(, 1?[0-9]):[0-9][0-9].*/$1/sm; 396 397 my $memberinfo = ' '; 398 if ( ${ $uid . $user }{'realname'} eq q{} ) { 399 ${ $uid . $user }{'realname'} = $user; 400 } 401 if ( ${ $uid . $user }{'position'} eq q{} && $showallgroups ) { 402 foreach my $postamount ( reverse sort { $a <=> $b } keys %Post ) { 403 if ( ${ $uid . $user }{'postcount'} > $postamount ) { 404 ( 405 $memberinfo, $stars, $starpic, $color, 406 $noshow, $viewperms, $topicperms, $replyperms, 407 $pollperms, $attachperms 408 ) = split /\|/xsm, $Post{$postamount}; 409 last; 410 } 411 } 412 } 413 elsif ( ${ $uid . $user }{'position'} ne q{} ) { 414 $tempgroups = 0; 415 foreach ( keys %Group ) { 416 if ( ${ $uid . $user }{'position'} eq $_ ) { 417 ( 418 $memberinfo, $stars, $starpic, $color, 419 $noshow, $viewperms, $topicperms, $replyperms, 420 $pollperms, $attachperms 421 ) = split /\|/xsm, $Group{$_}; 422 $tempgroups = 1; 423 last; 424 } 425 } 426 if ( !$tempgroups ) { 427 foreach ( sort { $a <=> $b } keys %NoPost ) { 428 if ( ${ $uid . $user }{'position'} eq $_ ) { 429 ( 430 $memberinfo, $stars, $starpic, 431 $color, $noshow, $viewperms, 432 $topicperms, $replyperms, $pollperms, 433 $attachperms 434 ) = split /\|/xsm, $NoPost{$_}; 435 $tempgroups = 1; 436 last; 437 } 438 } 439 } 440 if ( !$tempgroups ) { 441 $memberinfo = ${ $uid . $user }{'position'}; 442 } 443 } 444 445 $yymain .= qq~<tr> 446 <td class="windowbg">$link{$user}</td>~; 447 448 if ( $user eq 'admin' ) { 449 $addel = q~ ~; 450 } 451 else { 452 $addel = 453qq~<input type="checkbox" name="member$numshown" value="$user" class="windowbg" style="border: 0; vertical-align: middle;" />~; 454 $actualnum++; 455 } 456 457 $yymain .= qq~ 458 <td class="windowbg">$memberinfo</td> 459 <td class="windowbg2 center">$userpostcount</td> 460 <td class="windowbg">$Bar</td> 461 <td class="windowbg">$dr_regdate </td> 462 <td class="windowbg2 center">$userlastonline</td> 463 <td class="windowbg2 center">$userlastpost</td> 464 <td class="windowbg2 center">$userlastim</td> 465 <td class="windowbg center">$addel</td> 466 </tr>~; 467 } 468 return; 469} 470 471sub buildIndex { 472 if ( $memcount != 0 ) { 473 474 ( undef, undef, $usermemberpage ) = 475 split /\|/xsm, ${ $uid . $username }{'pageindex'}; 476 477 # Build the page links list. 478 my ( $pagetxtindex, $pagedropindex1, $pagedropindex2, $all, 479 $allselected ); 480 $indexdisplaynum = 3; 481 $dropdisplaynum = 10; 482 if ( $FORM{'sortform'} eq q{} ) { $FORM{'sortform'} = $INFO{'sort'}; } 483 $postdisplaynum = 3; 484 $startpage = 0; 485 $max = $memcount; 486 if ( $INFO{'start'} eq 'all' ) { 487 $MembersPerPage = $max; 488 $all = 1; 489 $allselected = q~ selected="selected"~; 490 $start = 0; 491 } 492 else { $start = $INFO{'start'} || 0; } 493 $start = $start > $memcount - 1 ? $memcount - 1 : $start; 494 $start = ( int( $start / $MembersPerPage ) ) * $MembersPerPage; 495 $tmpa = 1; 496 $pagenumb = int( ( $memcount - 1 ) / $MembersPerPage ) + 1; 497 498 if ( $start >= ( ( $postdisplaynum - 1 ) * $MembersPerPage ) ) { 499 $startpage = $start - ( ( $postdisplaynum - 1 ) * $MembersPerPage ); 500 $tmpa = int( $startpage / $MembersPerPage ) + 1; 501 } 502 if ( $memcount >= $start + ( $postdisplaynum * $MembersPerPage ) ) { 503 $endpage = $start + ( $postdisplaynum * $MembersPerPage ); 504 } 505 else { $endpage = $memcount } 506 $lastpn = int( ( $memcount - 1 ) / $MembersPerPage ) + 1; 507 $lastptn = ( $lastpn - 1 ) * $MembersPerPage; 508 $pageindex1 = 509qq~<span class="index-togl small">$admin_img{'index_togl'} $ml_txt{'139'}: $pagenumb</span>~; 510 $pageindex2 = 511qq~<span class="index-togl small">$admin_img{'index_togl'} $ml_txt{'139'}: $pagenumb</span>~; 512 if ( $pagenumb > 1 || $all ) { 513 514 if ( $usermemberpage == 1 ) { 515 $pagetxtindexst = 516qq~<span class="index-togl small"><a href="$scripturl?action=memberpagedrop;from=admin;sort=$INFO{'sort'};letter=$INFO{'letter'};start=$INFO{'start'}$sortorder"><img src="$imagesdir/index_togl.png" alt="$ml_txt{'19'}" title="$ml_txt{'19'}" /></a> $ml_txt{'139'}: ~; 517 if ( $startpage > 0 ) { 518 $pagetxtindex = 519qq~<a href="$adminurl?action=ml;sort=$FORM{'sortform'};letter=$letter$sortorder" class="norm">1</a> ... ~; 520 } 521 if ( $startpage == $MembersPerPage ) { 522 $pagetxtindex = 523qq~<a href="$adminurl?action=ml;sort=$FORM{'sortform'};letter=$letter$sortorder" class="norm">1</a> ~; 524 } 525 foreach my $counter ( $startpage .. ( $endpage - 1 ) ) { 526 if ( $counter % $MembersPerPage == 0 ) { 527 $pagetxtindex .= 528 $start == $counter 529 ? qq~<b>[$tmpa]</b> ~ 530 : qq~<a href="$adminurl?action=ml;sort=$FORM{'sortform'};letter=$letter;start=$counter$sortorder" class="norm">$tmpa</a> ~; 531 $tmpa++; 532 } 533 } 534 if ( $endpage < $memcount - $MembersPerPage ) { 535 $pageindexadd = q~... ~; 536 } 537 if ( $endpage != $memcount ) { 538 $pageindexadd .= 539qq~<a href="$adminurl?action=ml;sort=$FORM{'sortform'};letter=$letter;start=$lastptn$sortorder" class="norm">$lastpn</a>~; 540 } 541 $pagetxtindex .= qq~$pageindexadd~; 542 $pageindex1 = qq~$pagetxtindexst$pagetxtindex</span>~; 543 $pageindex2 = qq~$pagetxtindexst$pagetxtindex</span>~; 544 } 545 else { 546 $pagedropindex1 = 547q~<span style="float: left; width: 350px; margin: 2px 0 0 0; border: 0;">~; 548 $pagedropindex1 .= 549qq~<span style="float: left; height: 21px; margin: 0 4px 0 0;"><a href="$scripturl?action=memberpagetext;from=admin;sort=$INFO{'sort'};letter=$INFO{'letter'};start=$INFO{'start'}$sortorder"><img src="$imagesdir/index_togl.png" alt="$ml_txt{'19'}" title="$ml_txt{'19'}" /></a></span>~; 550 $pagedropindex2 = $pagedropindex1; 551 $tstart = $start; 552 if ( substr( $INFO{'start'}, 0, 3 ) eq 'all' ) { 553 ( $tstart, $start ) = split /\-/xsm, $INFO{'start'}; 554 } 555 $d_indexpages = $pagenumb / $dropdisplaynum; 556 $i_indexpages = int( $pagenumb / $dropdisplaynum ); 557 if ( $d_indexpages > $i_indexpages ) { 558 $indexpages = int( $pagenumb / $dropdisplaynum ) + 1; 559 } 560 else { $indexpages = int( $pagenumb / $dropdisplaynum ) } 561 $selectedindex = 562 int( ( $start / $MembersPerPage ) / $dropdisplaynum ); 563 564 if ( $pagenumb > $dropdisplaynum ) { 565 $pagedropindex1 .= 566qq~<span style="float: left; height: 21px; margin: 0;"><select size="1" name="decselector1" id="decselector1" onchange="if(this.options[this.selectedIndex].value) SelDec(this.options[this.selectedIndex].value, 'xx')">\n~; 567 $pagedropindex2 .= 568qq~<span style="float: left; height: 21px; margin: 0;"><select size="1" name="decselector2" id="decselector2" onchange="if(this.options[this.selectedIndex].value) SelDec(this.options[this.selectedIndex].value, 'xx')">\n~; 569 } 570 for my $i ( 0 .. ( $indexpages - 1 ) ) { 571 $indexpage = ( $i * $dropdisplaynum ) * $MembersPerPage; 572 $indexstart = ( $i * $dropdisplaynum ) + 1; 573 $indexend = $indexstart + ( $dropdisplaynum - 1 ); 574 if ( $indexend > $pagenumb ) { $indexend = $pagenumb; } 575 if ( $indexstart == $indexend ) { 576 $indxoption = qq~$indexstart~; 577 } 578 else { $indxoption = qq~$indexstart-$indexend~; } 579 $selected = q{}; 580 if ( $i == $selectedindex ) { 581 $selected = q~ selected="selected"~; 582 $pagejsindex = 583 qq~$indexstart|$indexend|$MembersPerPage|$indexpage~; 584 } 585 if ( $pagenumb > $dropdisplaynum ) { 586 $pagedropindex1 .= 587qq~<option value="$indexstart|$indexend|$MembersPerPage|$indexpage"$selected>$indxoption</option>\n~; 588 $pagedropindex2 .= 589qq~<option value="$indexstart|$indexend|$MembersPerPage|$indexpage"$selected>$indxoption</option>\n~; 590 } 591 } 592 if ( $pagenumb > $dropdisplaynum ) { 593 $pagedropindex1 .= qq~</select>\n</span>~; 594 $pagedropindex2 .= qq~</select>\n</span>~; 595 } 596 $pagedropindex1 .= 597q~<span id="ViewIndex1" class="droppageindex" style="height: 14px; visibility: hidden"> </span>~; 598 $pagedropindex2 .= 599q~<span id="ViewIndex2" class="droppageindex" style="height: 14px; visibility: hidden"> </span>~; 600 $tmpMembersPerPage = $MembersPerPage; 601 if ( substr( $INFO{'start'}, 0, 3 ) eq 'all' ) { 602 $MembersPerPage = $MembersPerPage * $dropdisplaynum; 603 } 604 $prevpage = $start - $tmpMembersPerPage; 605 $nextpage = $start + $MembersPerPage; 606 $pagedropindexpvbl = 607qq~<img src="$imagesdir/index_left0.png" height="14" width="13" alt="" style="vertical-align: top; margin-top:-1px" />~; 608 $pagedropindexnxbl = 609qq~<img src="$imagesdir/index_right0.png" height="14" width="13" alt="" style="vertical-align: top; margin-top:-1px;" />~; 610 if ( $start < $MembersPerPage ) { 611 $pagedropindexpv .= 612qq~<img src="$imagesdir/index_left0.png" height="14" width="13" alt="" style="vertical-align: top; margin-top:-1px" />~; 613 } 614 else { 615 $pagedropindexpv .= 616qq~<img src="$imagesdir/index_left.png" height="14" width="13" alt="$pidtxt{'02'}" title="$pidtxt{'02'}" style="vertical-align: top; cursor: pointer; margin-top:-1px;" onclick="location.href=\\'$adminurl?action=ml;sort=$FORM{'sortform'};letter=$letter;start=$prevpage$sortorder\\'" ondblclick="location.href=\\'$adminurl?action=ml;sort=$FORM{'sortform'};letter=$letter;start=0$sortorder\\'" />~; 617 } 618 if ( $nextpage > $lastptn ) { 619 $pagedropindexnx .= 620qq~<img src="$imagesdir/index_right0.png" height="14" width="13" alt="" style="vertical-align: top; margin-top:-1px;" />~; 621 } 622 else { 623 $pagedropindexnx .= 624qq~<img src="$imagesdir/index_right.png" height="14" width="13" alt="$pidtxt{'03'}" title="$pidtxt{'03'}" style="display: inline; vertical-align: top; margin-top:-1px; cursor: pointer;" onclick="location.href=\\'$adminurl?action=ml;sort=$FORM{'sortform'};letter=$letter;start=$nextpage$sortorder\\'" ondblclick="location.href=\\'$adminurl?action=ml;sort=$FORM{'sortform'};letter=$letter;start=$lastptn$sortorder\\'" />~; 625 } 626 $pageindex1 = qq~$pagedropindex1</span>~; 627 $pageindex2 = qq~$pagedropindex2</span>~; 628 629 $pageindexjs = qq~ 630<script type="text/javascript"> 631 function SelDec(decparam, visel) { 632 splitparam = decparam.split("|"); 633 var vistart = parseInt(splitparam[0]); 634 var viend = parseInt(splitparam[1]); 635 var maxpag = parseInt(splitparam[2]); 636 var pagstart = parseInt(splitparam[3]); 637 var allpagstart = parseInt(splitparam[3]); 638 if(visel == 'xx' && decparam == '$pagejsindex') visel = '$tstart'; 639 var pagedropindex = '<table><tr>'; 640 for(i=vistart; i<=viend; i++) { 641 if(visel == pagstart) pagedropindex += '<td class="titlebg" style="height: 14px; padding:0 1px; font-size: 9px; font-weight: bold">' + i + '</td>'; 642 else pagedropindex += '<td class="droppages" style="line-height:14px; padding:0 1px"><a href="$adminurl?action=ml;sort=$FORM{'sortform'};letter=$letter;start=' + pagstart + '$sortorder">' + i + '</a></td>'; 643 pagstart += maxpag; 644 } 645 ~; 646 if ($showpageall) { 647 $pageindexjs .= qq~ 648 if (vistart != viend) { 649 if(visel == 'all') pagedropindex += '<td class="titlebg" style="line-height: 14px; padding:0 1px; font-size: 9px; font-weight: normal;"><b>$pidtxt{"01"}</b></td>'; 650 else pagedropindex += '<td class="droppages" style="line-height:14px; padding:0 1px"><a href="$adminurl?action=ml;sort=$FORM{'sortform'};letter=$letter;start=all-' + allpagstart + '$sortorder">$pidtxt{"01"}</a></td>'; 651 } 652 ~; 653 } 654 $pageindexjs .= qq~ 655 if(visel != 'xx') pagedropindex += '<td class="small" style="line-height: 14px; padding:0 0 0 4px;">$pagedropindexpv$pagedropindexnx</td>'; 656 else pagedropindex += '<td class="small" style="line-height: 14px; padding:0 0 0 4px;">$pagedropindexpvbl$pagedropindexnxbl</td>'; 657 pagedropindex += '</tr></table>'; 658 document.getElementById("ViewIndex1").innerHTML=pagedropindex; 659 document.getElementById("ViewIndex1").style.visibility = "visible"; 660 document.getElementById("ViewIndex2").innerHTML=pagedropindex; 661 document.getElementById("ViewIndex2").style.visibility = "visible"; 662 ~; 663 if ( $pagenumb > $dropdisplaynum ) { 664 $pageindexjs .= q~ 665 document.getElementById("decselector1").value = decparam; 666 document.getElementById("decselector2").value = decparam; 667 ~; 668 } 669 $pageindexjs .= qq~ 670 } 671 document.onload = SelDec('$pagejsindex', '$tstart'); 672</script> 673~; 674 } 675 } 676 } 677 678 return; 679} 680 681sub buildPages { 682 my ($inp) = @_; 683 684 $FindForm .= qq~ 685 <script type="text/javascript"> 686 function txtInFields(thefield, defaulttxt) { 687 if (thefield.value == defaulttxt) thefield.value = ""; 688 else { if (thefield.value === "") thefield.value = defaulttxt; } 689 } 690 </script> 691 <form action="$adminurl?action=ml;sort=memsearch" method="post" id="form1" name="form1" enctype="application/x-www-form-urlencoded" style="display: inline;"> 692 <input type="text" name="member" id="member" value="$ml_txt{'801'}" style="font-size: 11px; width: 180px;" onfocus="txtInFields(this, '$ml_txt{'801'}');" onblur="txtInFields(this, '$ml_txt{'801'}')" /> 693 <input name="submit" type="submit" class="button" style="font-size: 10px;" value="$ml_txt{'2'}" /> 694 </form> 695 ~; 696 697 $TableHeader .= qq~ 698 <table class="bordercolor borderstyle border-space pad-cell"> 699 <tr> 700 <td class="titlebg right" style="font-size: 11px; text-shadow: none;"> 701 $FindForm 702 <form action="$adminurl?action=ml" method="post" name="selsort" style="display: inline"> 703 <label for="sortform"><b>$ml_txt{'1'}</b></label> 704 <select name="sortform" id="sortform" style="font-size: 9pt;" onchange="submit()"> 705 <option value="username"$selUser>$ml_txt{'35'}</option> 706 <option value="position"$selPos>$ml_txt{'87'}</option> 707 <option value="posts"$selPost>$ml_txt{'21'}</option> 708 <option value="regdate"$selReg>$ml_txt{'233'}</option> 709 <option value="lastonline"$selLastOn>$amv_txt{'9'}</option> 710 <option value="lastpost"$selLastPost>$amv_txt{'10'}</option> 711 <option value="lastim"$selLastIm>$amv_txt{'11'}</option> 712 </select> 713 <label for="reversed"><b>$admintxt{'37'}</b></label> 714 <input type="checkbox" onclick="submit()" name="reversed" id="reversed" class="titlebg" style="border: 0;"$selReversed /> 715 <input type="submit" style="display:none" /> 716 </form> 717 </td> 718 </tr> 719 </table> 720 </div> 721 <script src="$yyhtml_root/ubbc.js" type="text/javascript"></script> 722 <script type="text/javascript"> 723 if (document.selsort.sortform.options[document.selsort.sortform.selectedIndex].value == 'username') { 724 document.selsort.reversed.disabled = true; 725 } 726 </script> 727 <form name="adv_memberview" action="$adminurl?action=deletemultimembers$sortmode$sortorder$spages" method="post" style="display: inline" onsubmit="return submitproc()"> 728 <input type="hidden" name="button" value="0" /> 729 <div class="rightboxdiv"> 730 <table class="bordercolor borderstyle border-space pad-cell"> 731 <colgroup> 732 <col span="2" style="width:19%" /> 733 <col style="width:5%" /> 734 <col style="width:14%" /> 735 <col style="width:19%" /> 736 <col style="width:7%" /> 737 <col span="2" style="width:6%" /> 738 </colgroup> 739 <tr> 740 <td class="$selUser_a center"><a href="$adminurl?action=ml;sortform=username"><b>$ml_txt{'35'}</b></a></td> 741 <td class="$selPos_a center"><a href="$adminurl?action=ml;sortform=position"><b>$ml_txt{'87'}</b></a></td> 742 <td class="$selPost_a center" colspan="2"><a href="$adminurl?action=ml;sortform=posts"><b>$ml_txt{'21'}</b></a></td> 743 <td class="$selReg_a center"><a href="$adminurl?action=ml;sortform=regdate"><b>$ml_txt{'234'}</b></a></td> 744 <td class="windowbg2 center" colspan="3"><b>$amv_txt{'4'}</b> 745 <br /><span class="small $selLastOn_a" style="float: left; text-align: center; width: 34%;"><a href="$adminurl?action=ml;sortform=lastonline">$amv_txt{'5'}</a></span> 746 <span class="small $selLastPost_a" style="float: left; text-align: center; width: 33%;"><a href="$adminurl?action=ml;sortform=lastpost">$amv_txt{'6'}</a></span> 747 <span class="small $selLastIM_a" style="float: left; text-align: center; width: 33%;"><a href="$adminurl?action=ml;sortform=lastim">$amv_txt{'7'}</a></span></td> 748 <td class="windowbg2 center"><b>$admintxt{'38'}</b></td> 749 </tr> 750 ~; 751 752 if ( $LetterLinks ne q{} ) { 753 $TableHeader .= qq(<tr> 754 <td class="catbg" colspan="9"><span class="small">$LetterLinks</span></td> 755 </tr>); 756 } 757 758 $sel_box = qq~ 759 <table class="bordercolor borderstyle border-space pad-cell" style="margin-bottom: .5em;"> 760 <colgroup> 761 <col style="width: 95%" /> 762 <col style="width: 5%" /> 763 </colgroup> 764 <tr> 765 <td class="titlebg right" style="font-size: 11px; text-shadow: none;"> 766 <label for="check_all"><b>$amv_txt{'38'}</b></label> 767 <select name="field2" id="field2" onchange="document.adv_memberview.check_all.checked=true;checkAll(1);"> 768 <option value="0">$amv_txt{'35'}</option> 769 <option value="1">$amv_txt{'36'}</option> 770 <option value="2" selected="selected">$amv_txt{'37'}</option> 771 </select> 772 <input type="text" size="5" name="number" value="30" maxlength="5" onkeyup="document.adv_memberview.check_all.checked=true;checkAll(1);" /> 773 <select name="field1" onchange="document.adv_memberview.check_all.checked=true;checkAll(1);"> 774 <option value="0">$amv_txt{'30'}</option> 775 <option value="1">$amv_txt{'31'}</option> 776 <option value="2" selected="selected">$amv_txt{'32'}</option> 777 <option value="3">$amv_txt{'33'}</option> 778 <option value="4">$amv_txt{'34'}</option> 779 </select> 780 </td> 781 <td class="titlebg center"> 782 <input type="checkbox" name="check_all" id="check_all" value="1" class="titlebg" style="border: 0;" onclick="javascript:if(this.checked)checkAll(1);else checkAll(0);" /> 783 </td> 784 </tr> 785 </table> 786 <script type="text/javascript"> 787 mem_data = new Array ( "", $CheckingAll"" ); 788 function checkAll(ticked) { 789 if(navigator.appName == "Microsoft Internet Explorer") {var alt_pressed = self.event.altKey; var ctrl_pressed = self.event.ctrlKey;} 790 else {alt_pressed = false; ctrl_pressed = false;} 791 792 var limit = document.adv_memberview.number.value; 793 var field1 = document.adv_memberview.field1.value; 794 var field2 = document.adv_memberview.field2.value; 795 for (var i = 1; i <= $actualnum; i++) { 796 if (!ticked) { 797 document.adv_memberview.elements[i].checked = false; 798 } else { 799 var value1 = eval(mem_data[i].split("|")[field1]); 800 if (value1 != undefined) { 801 var check = 0; 802 if (field2 === 0 && value1 < limit) { check = 1; } 803 if (field2 == 1 && value1 == limit) { check = 1; } 804 if (field2 == 2 && value1 > limit) { check = 1; } 805 if (ctrl_pressed === true) { check = 0; } 806 if (alt_pressed === true) { check = 1; } 807 if (check == 1) document.adv_memberview.elements[i].checked = true; 808 else document.adv_memberview.elements[i].checked = false; 809 } 810 } 811 } 812 } 813 </script>~; 814 815 $numbegin = ( $start + 1 ); 816 $numend = ( $start + $MembersPerPage ); 817 if ( $numend > $memcount ) { $numend = $memcount; } 818 if ( $memcount == 0 ) { $numshow = q{}; } 819 else { $numshow = qq~($numbegin - $numend $ml_txt{'309'} $memcount)~; } 820 if ($inp) { 821 $yymain .= qq~ 822 <div class="rightboxdiv"> 823 <table class="bordercolor border-space pad-cell"> 824 <tr> 825 <td class="titlebg"> 826 <span style="float: left;">$admin_img{'register'} <b>$admintxt{'17'}</b></span> 827 </td> 828 </tr><tr> 829 <td class="catbg"> 830 <div style="float: left; width: 50%; text-align: left;">$pageindex1</div> 831 </td> 832 </tr> 833 </table> 834 $TableHeader~; 835 } 836 else { 837 $yymain .= qq~<tr> 838 <td class="catbg" colspan="9"> 839 <div style="float: left; width: 50%; text-align: left;">$pageindex2</div> 840 $pageindexjs 841 </td> 842 </tr> 843 </table> 844 $sel_box 845 </div> 846 <div class="bordercolor rightboxdiv"> 847 <table class="border-space pad-cell"> 848 <tr> 849 <th class="titlebg">$admin_img{'prefimg'} $admin_txt{'delete'}</th> 850 </tr><tr> 851 <td class="catbg center"> 852 <div class="small"><label for="del_mail">$amv_txt{'45'}:</label> <input type="checkbox" name="del_mail" id="del_mail" value="1" /></div> 853 <input type="submit" value="$amv_txt{'15'}" onclick="javascript:window.document.adv_memberview.button.value = '2'; return confirm('$amv_txt{'20'}')" class="button" /> 854 </td> 855 </tr> 856 </table> 857 </div> 858 </form>~; 859 } 860 return; 861} 862 863sub MLLastPost { 864 %TopMembers = (); 865 866 ManageMemberinfo('load'); 867 while ( ( $membername, $value ) = each %memberinf ) { 868 LoadUser($membername); 869 $TopMembers{$membername} = ${ $uid . $membername }{'lastpost'}; 870 undef %{ $uid . $membername }; 871 } 872 undef %memberinf; 873 874 my @toplist = 875 reverse sort { $TopMembers{$a} <=> $TopMembers{$b} } keys %TopMembers; 876 undef %TopMembers; 877 878 if ( $FORM{'reversed'} || $INFO{'reversed'} ) { 879 @toplist = reverse @toplist; 880 } 881 882 $memcount = @toplist; 883 buildIndex(); 884 buildPages(1); 885 $bb = $start; 886 887 while ( ( $numshown < $MembersPerPage ) ) { 888 showRows( $toplist[$bb] ); 889 $numshown++; 890 $bb++; 891 } 892 893 undef @toplist; 894 buildPages(0); 895 896 $yymain .= $TableFooter; 897 $yytitle = "$ml_txt{'313'} $TopAmmount $ml_txt{'314'}"; 898 $action_area = 'viewmembers'; 899 AdminTemplate(); 900 return; 901} 902 903sub MLLastIm { 904 %TopMembers = (); 905 906 ManageMemberinfo('load'); 907 while ( ( $membername, $value ) = each %memberinf ) { 908 LoadUser($membername); 909 $TopMembers{$membername} = ${ $uid . $membername }{'lastim'}; 910 undef %{ $uid . $membername }; 911 } 912 undef %memberinf; 913 914 my @toplist = 915 reverse sort { $TopMembers{$a} <=> $TopMembers{$b} } keys %TopMembers; 916 undef %TopMembers; 917 918 if ( $FORM{'reversed'} || $INFO{'reversed'} ) { 919 @toplist = reverse @toplist; 920 } 921 922 $memcount = @toplist; 923 buildIndex(); 924 buildPages(1); 925 $bb = $start; 926 927 while ( ( $numshown < $MembersPerPage ) ) { 928 showRows( $toplist[$bb] ); 929 $numshown++; 930 $bb++; 931 } 932 933 undef @toplist; 934 buildPages(0); 935 936 $yymain .= $TableFooter; 937 $yytitle = "$ml_txt{'313'} $TopAmmount $ml_txt{'314'}"; 938 $action_area = 'viewmembers'; 939 AdminTemplate(); 940 return; 941} 942 943sub MLLastOnline { 944 %TopMembers = (); 945 946 ManageMemberinfo('load'); 947 while ( ( $membername, $value ) = each %memberinf ) { 948 LoadUser($membername); 949 $TopMembers{$membername} = ${ $uid . $membername }{'lastonline'}; 950 undef %{ $uid . $membername }; 951 } 952 undef %memberinf; 953 954 my @toplist = 955 reverse sort { $TopMembers{$a} <=> $TopMembers{$b} } keys %TopMembers; 956 undef %TopMembers; 957 958 if ( $FORM{'reversed'} || $INFO{'reversed'} ) { 959 @toplist = reverse @toplist; 960 } 961 962 $memcount = @toplist; 963 buildIndex(); 964 buildPages(1); 965 $bb = $start; 966 967 while ( $numshown < $MembersPerPage ) { 968 showRows( $toplist[$bb] ); 969 $numshown++; 970 $bb++; 971 } 972 973 undef @toplist; 974 buildPages(0); 975 976 $yymain .= $TableFooter; 977 $yytitle = "$ml_txt{'313'} $TopAmmount $ml_txt{'314'}"; 978 $action_area = 'viewmembers'; 979 AdminTemplate(); 980 return; 981} 982 983sub FindMembers { 984 $SearchStr = $FORM{'member'} || $INFO{'member'}; 985 $LookFor = qq~^$SearchStr\$~; 986 $LookFor =~ s/\*+/.*?/gsm; 987 988 ManageMemberinfo('load'); 989 my %memberfind = (); 990 while ( ( $membername, $value ) = each %memberinf ) { 991 ( $memrealname, $mememail, undef ) = split /\|/xsm, $value, 3; 992 if ( $memrealname =~ /$LookFor/ism ) { 993 $memberfind{$membername} = $memrealname; 994 } 995 elsif ( $mememail =~ /$LookFor/ism ) { 996 if ( $iamadmin || $iamgmod ) 997 { 998 $memberfind{$membername} = $memrealname; 999 } 1000 } 1001 } 1002 @findmemlist = 1003 sort { lc $memberfind{$a} cmp lc $memberfind{$b} } keys %memberfind; 1004 undef %memberfind; 1005 $memcount = @findmemlist; 1006 buildIndex(); 1007 buildPages(1); 1008 if ( $memcount > 0 ) { 1009 my $i = $start; 1010 $numshown = 0; 1011 while ( $numshown < $MembersPerPage ) { 1012 chomp $findmemlist[$i]; 1013 showRows( $findmemlist[$i] ); 1014 $numshown++; 1015 $i++; 1016 } 1017 } 1018 else { 1019 $yymain .= qq~ 1020 <tr> 1021 <td class="windowbg2" colspan="7"><br />$ml_txt{'802'} <i>$FORM{'member'}</i><br /><br /></td> 1022 </tr>~; 1023 } 1024 undef @findmemlist; 1025 undef %memberinf; 1026 buildPages(0); 1027 $yytitle = "$ml_txt{'313'} $ml_txt{'4'} $ml_txt{'87'} $numshow"; 1028 AdminTemplate(); 1029 return; 1030} 1031 10321; 1033