summaryrefslogtreecommitdiff
path: root/cgi-bin/users
diff options
context:
space:
mode:
Diffstat (limited to 'cgi-bin/users')
-rwxr-xr-xcgi-bin/users228
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>&nbsp;</td>\n);
+print <<userrows;
+<td class="head">&nbsp;</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>&nbsp;</b></td>
+userrows
+ # print qq(<td class="head" style="padding-left: 4px; padding-right: 8px;">&nbsp;</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>&nbsp;&middot;&nbsp;<a href="$BUCKY/message/$$duder{username}">send&nbsp;message</a>&nbsp;&middot;</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("&middot;&nbsp;".$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/&nbsp;/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!&nbsp;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("&nbsp;"); }
+ else
+ { print_user_cell("&nbsp;<small>".hushnull($duder->{ccount}, "c", 1)."</small>", "right"); }
+
+ if ($duder->{fcount} == 0)
+ { print_user_cell("&nbsp;"); }
+ else
+ { print_user_cell("&nbsp;<small>".hushnull($duder->{fcount}, "f", 1)."</small>&nbsp;", "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>&nbsp;</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 = '&nbsp;';
+ 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;
+