diff options
Diffstat (limited to 'cgi-bin/users')
| -rwxr-xr-x | cgi-bin/users | 228 |
1 files changed, 228 insertions, 0 deletions
diff --git a/cgi-bin/users b/cgi-bin/users new file mode 100755 index 0000000..b82a823 --- /dev/null +++ b/cgi-bin/users @@ -0,0 +1,228 @@ +#!/usr/bin/perl +######################################### +# display userlist +######################################### + +use localbucky; +use invite; + +$dbh = DBI->connect ($dsn); + +($USER, $lastlog) = checkin(); +logout() if ($USER == -1); + + my $users = get_all_users(); + my $keywords = get_keywords(); + + header( $BUCKY_CONFIG->{USERLIST_TITLE} ); + menu(); + + our $command = -1; + + print qq(<table width="100%" cellpadding=0 cellspacing=0 border=0>); + print qq(<tr><td align=center valign=top>\n); + + display_user_list($users); + + print qq(</td>\n<td width="200" align=right valign=top>\n); + + invite_result_box($command, $hash, $result) if ($command != -1); + invite_create_box() if ($USER->{'ulevel'} > 1); + grass_box($users); + + print qq(</td></tr></table>\n\n); + + footer(); + +sub grass_box + { + my ($users) = @_; + print qq(<div class="message">); + print qq(<b>newest users</b>\n); + my $i = 0; + print "<table border=0 cellpadding=0 cellspacing=3>"; + foreach my $duder (sort_by_firstseen(@$users)) + { + next if ($duder->{ulevel} < 1); + next if ($duder->{firstseen} == 0); + my $z_date = verbosedate($duder->{firstseen}); + my $z_user = $duder->{username}; + my $z_grass = $duder->{grass}; + print qq(<tr><td colspan=2><hr noshade color="$BUCKY_COLOR_HR">\n</td></tr>); + print qq(<tr>); + print qq(<td align="left"><b><a href="$BUCKY/profile/$z_user">$z_user</a></b></td>); + print qq(<td align="right"><small>$z_date</small></td>); + print qq(</tr>); + if (length($z_grass)) + { + print qq(<tr>); + print qq(<td align="left" colspan=2>); + print "$z_grass"; + print qq(</td>); + print qq(</tr>); + } + last if (++$i == 20); + } + print qq(</table>\n); + print qq(</div>\n); + } + +sub display_user_list + { + my ($users) = @_; + print qq[<table border=0 cellpadding=2 cellspacing=0>]; + print qq[<tr>\n]; + print qq(<td> </td>\n); +print <<userrows; +<td class="head"> </td> +<td class="head" style="padding-left: 4px; padding-right: 8px;"><b>username</b></td> +<td class="head" style="padding-left: 4px; padding-right: 8px;"><b>realname</b></td> +<td class="head" style="padding-left: 4px; padding-right: 2px; text-align: right;"><b>idle</b></td> +<td class="head" style="padding-left: 4px; padding-right: 8px;" colspan=3><b> </b></td> +userrows + # print qq(<td class="head" style="padding-left: 4px; padding-right: 8px;"> </td>\n) if ($USER->{ulevel} == 3); + print "</tr>\n"; + + my $r = 0; + my $i = 0; + my $today = 0; + my $neg = 0; + my $show_all = (exists($input->{showall})) ? 1 : 0; + + foreach my $duder (sort_by_username(@$users)) + { + next if ($duder->{ulevel} < 1); + my $vanished = + ( + $duder->{ccount} < 1 + && $duder->{fcount} < 1 + && (time - $duder->{lastseen}) > 14*24*3600 + ); + if ($vanished && !$show_all) + { + $neg++; + next; + } + print qq[<tr class="row$r">]; + print_blank_cell(qq(<small><a href="$BUCKY/profile/$$duder{username}">profile</a> · <a href="$BUCKY/message/$$duder{username}">send message</a> ·</small>), "right", "blank"); + + my $image = get_profile_image($duder->{username}, $AVATAR_MED_PREFIX); + if ($image != -1) + { + my $av .= + qq(<a href="$BUCKY/profile/$duder->{username}">). + qq(<img src="$image" width="$AVATAR_MED_WIDTH" border=1">). + qq(</a>); + print_user_cell($av); + } + else + { + print_user_cell(qq(<img src="/blank.gif" width="$AVATAR_MED_WIDTH" height="$AVATAR_MED_WIDTH">)); + } + + if ($duder->{ulevel} > 1 && $USER->{ulevel} == 3 && $show_all) + { + print_user_cell("· ".$duder->{username}); + } + elsif ($vanished) + { + print_user_cell("<small>".$duder->{username}."</small>"); + } + else + { + $duder->{username} =~ s/\n/<br>/g; + print_user_cell($duder->{username}); + } + + $duder->{realname} =~ s/\s/ /g; + if ($vanished) + { print_user_cell("<small>".$duder->{realname}."</small>"); } + else + { print_user_cell($duder->{realname}); } + + my $col = carbondate($duder->{lastseen}, 0); + $today++ if ($col eq "new"); + if ($vanished) + { + print_user_cell(qq!<span class="$col"><small>!.(get_age($duder->{lastseen})).qq! ago</small></span>!, "right"); + } + else + { + print_user_cell(qq!<small><span class="$col">!.(get_age($duder->{lastseen})).qq!</span></small>!, "right"); + } + + if ($USER->{ulevel} == 3) + { + if ($duder->{ccount} == 0) + { print_user_cell(" "); } + else + { print_user_cell(" <small>".hushnull($duder->{ccount}, "c", 1)."</small>", "right"); } + + if ($duder->{fcount} == 0) + { print_user_cell(" "); } + else + { print_user_cell(" <small>".hushnull($duder->{fcount}, "f", 1)."</small> ", "right"); } + } + + my $cell = ''; + foreach my $sticky (split_keys($duder->{stickies})) + { + my $key = $keywords->{$sticky}; + if ($key->{owner} eq $USER->{username} || check_op($key) || $USER->{ulevel} == 3) + { + $cell .= qq(<a href="$BUCKY/$BUCKY_LEXICON_KEYWORD/$sticky">$sticky</a>, ); + } + } + $cell =~ s/, $//; + print_user_cell($cell); + + print qq[</tr>]; + $r = $r ? 0 : 1; + $i++; + } + + print qq(<tr><td colspan=9 align=right><small>) . + qq(total: <b>$i</b> users \(<b>$today</b> seen today); + print qq(, $neg <a href="$BUCKY/users?showall=1">vanished</a>) if (!$show_all && $USER->{ulevel} > 2); + print qq(\)</small> </td></tr>\n); + print <<approvefoot; +</table></center> +approvefoot + } + +sub print_user_cell + { + my ($v, $align) = @_; + my ($lpx, $rpx) = ("4px", "2px"); + ($lpx, $rpx) = ("2px", "4px") if ($align eq "right"); + $align = "left" unless ($align); + print qq[<td nobreak style="padding: 3px; vertical-align: middle; text-align: $align;">$v</td>]; + } + +sub print_blank_cell + { + my ($v) = @_; + print qq[<td nobreak style="padding: 3px; background-color: #e6f0e6; vertical-align: middle; text-align: $align;">$v</td>]; + } + +sub print_sinks + { + $cell = ' '; + foreach my $sticky (split_keys($duder->{sink})) + { + my $key = $keywords->{$sticky}; + if ($key->{owner} eq $USER->{username} || check_op($key) || $USER->{ulevel} == 3) + { + $cell .= qq(<a href="$BUCKY/$BUCKY_LEXICON_KEYWORD/$sticky">$sticky</a>, ); + } + } + $cell =~ s/, $//; + print_user_cell($cell); + } + +sub sort_by_username { sort { uc($a->{username}) cmp uc($b->{username}) } @_; } +sub sort_by_firstseen { sort { uc($b->{firstseen}) <=> uc($a->{firstseen}) } @_; } + +$dbh->disconnect (); +print "Users: " . &report_time() . "\n" if $timer; + |
