ljr/livejournal/htdocs/community/sentinvites.bml

209 lines
7.6 KiB
Plaintext
Executable File

<?page
title=><?_ml .title _ml?>
body<=
<?_code
{
use strict;
use vars qw(%GET %POST);
LJ::set_active_crumb('commsentinvites');
return LJ::server_down_html() if $LJ::SERVER_DOWN;
# always have links at top
my $ret = BML::ml('Backlink', {
'link' => '/community/manage.bml',
'text' => $ML{'/community/members.bml.manage2'},
});
# get remote
my $remote = LJ::get_remote();
unless ($remote) {
$ret .= "<?h1 $ML{'Error'} h1?><?p $ML{'error.noremote'} p?>";
return $ret;
}
my $cname = $GET{comm};
return BML::redirect("$LJ::SITEROOT/community/manage.bml") unless $cname;
# get $c object
my $c = LJ::load_user($cname);
unless ($c) {
$ret .= "<?h1 $ML{'Error'} h1?><?p $ML{'/community/members.bml.error.nocomm'} p?>";
return $ret;
}
my $cid = $c->{'userid'};
# is $remote an admin?
unless (LJ::can_manage_other($remote, $c)) {
$ret .= "<?h1 $ML{'Error'} h1?><?p ";
$ret .= BML::ml('/community/members.bml.error.noaccess',
{ 'comm' => LJ::ljuser($cname, { 'type' => 'C' }) });
$ret .= " p?>";
return $ret;
}
# columns of our table, excluding username
my @attribs = ('post');
my @titleattribs = ('P');
LJ::load_user_props($c, 'moderated');
if ($c->{moderated}) {
push @attribs, ('preapprove', 'moderate');
push @titleattribs, ('U', 'M');
}
push @attribs, 'admin';
push @titleattribs, 'A';
# now get sent invites and the users involved
my $sent = LJ::get_sent_invites($c) || [];
my @ids;
push @ids, ($_->{userid}, $_->{maintid}) foreach @$sent;
my $us = LJ::load_userids(@ids);
# populate %users hash
my %users = ();
foreach my $invite (@$sent) {
my $id = $invite->{userid};
next if $GET{show} && $GET{show} ne 'all' && $invite->{status} ne $GET{show};
$users{$id}{userid} = $id;
$users{$id}{maintainer} = $us->{$invite->{maintid}}{user};
$users{$id}{user} = $us->{$id}{user};
$users{$id}{$_} = 1 foreach keys %{$invite->{args}};
$users{$id}{status} = $invite->{status};
$users{$id}{date} = LJ::mysql_time($invite->{recvtime});
$users{$id}{date} =~ s/\s.+$//; # we just want the date, ignore time
}
# hop out if there were no invites
unless (%users) {
return "$ret<?h1 $ML{'.none.title'} h1?><?p " .
BML::ml('.none.body', { aopts => "href='/community/members.bml?comm=$c->{user}'" }) .
" p?>";
}
# sorting method;
my $method = $GET{'sort'};
my $cmp = sub {$a->{'user'} cmp $b->{'user'}};
$cmp = sub {$b->{'admin'} <=> $a->{'admin'}} if $method eq 'A';
$cmp = sub {$b->{'post'} <=> $a->{'post'}} if $method eq 'P';
$cmp = sub {$b->{'moderate'} <=> $a->{'moderate'}} if $method eq 'M';
$cmp = sub {$b->{'preapprove'} <=> $a->{'preapprove'}} if $method eq 'U';
$cmp = sub {$a->{'status'} cmp $b->{'status'}} if $method eq 'status';
$cmp = sub {$b->{'date'} cmp $a->{'date'}} if $method eq 'date';
$cmp = sub {$b->{'maintainer'} cmp $a->{'maintainer'}} if $method eq 'maint';
my @users = sort $cmp values %users;
my $page_size = 100; # change to adjust page size
# are we going to jump to a specific user ?
my $jumppage;
my $jumpuser;
if (@users > $page_size && $POST{'jumpto'} =~ /^\w+$/) {
my $ct;
foreach (@users) {
$jumppage++ if $ct % $page_size == 0;
if ($POST{'jumpto'} eq $_->{'name'}) {
$jumpuser = $_->{'name'};
last;
}
$ct++;
}
undef $jumppage unless $jumpuser;
}
# how to make links back to this page
my $self_link = sub {
my $sort = "&sort=$GET{'sort'}" if $GET{'sort'};
my $filter = "&show=$GET{'show'}" if $GET{'show'};
return "sentinvites.bml?comm=$cname&page=$_[0]$sort$filter";
};
my %items = BML::paging(\@users, $jumppage || $GET{'page'}, $page_size);
my $navbar = LJ::paging_bar($items{'page'}, $items{'pages'},
{ 'self_link' => $self_link });
@users = @{$items{'items'}};
# output starts here
$ret .= "<?p " . BML::ml('/community/members.bml.name', { 'name' => LJ::ljuser($cname, { 'type' => 'C' }) });
$ret .= " " . BML::ml('/community/members.bml.settings', { 'link' => "settings.bml?comm=$cname"}) . " p?>";
# jump to user
if ($items{'pages'} > 1) {
$ret .= "<form method='post' action='sentinvites.bml?comm=$cname'>";
$ret .= "<div style='margin-left: 30px;'>Jump to user: ";
$ret .= LJ::html_text({ 'name' => 'jumpto', 'value' => $POST{'jumpto'},
'size' => '10', 'maxlength' => '15' }) . " ";
$ret .= LJ::html_submit(undef, 'Go') . "</div>";
$ret .= "</form>";
$ret .= $navbar;
}
# setup showlinks
my $showlinks = "<form method='get' action='/community/sentinvites.bml'>";
$showlinks .= LJ::html_hidden('comm', $c->{user});
$showlinks .= "Filter to: ";
$showlinks .= LJ::html_select({ name => 'show', selected => $GET{show} }, map { $_, $_ } qw(all accepted outstanding rejected));
$showlinks .= LJ::html_submit(undef, 'Refresh');
$showlinks .= "</form>";
my $filter = "&show=$GET{show}" if $GET{show};
my $sortlink = BML::get_uri() . "?comm=$cname$filter&sort=";
$ret .= "<br /><div align='center'>$showlinks";
$ret .= <<END;
<table class='borderedtable' cellpadding='2' cellspacing='0'>
<tr style="background-color: <?altcolor1?>; border-bottom: solid 1px black;">
<th style='border-right: solid 1px black;'>P</th>
<td style='border-bottom: solid 1px black; border-right: solid 1px black;'>Posting Access</td>
<th style='border-right: solid 1px black;'>U</th>
<td style='border-bottom: solid 1px black;'>Unmoderated</td>
</tr>
<tr style="background-color: <?altcolor2?>; border-bottom: solid 1px black;">
<th style='border-right: solid 1px black; border-bottom: none;'>M</th>
<td style='border-right: solid 1px black;'>Moderator</td>
<th style='border-right: solid 1px black; border-bottom: none;'>A</th>
<td>Maintainer</td>
</tr>
</table>
<br />
END
$ret .= "<table class='borderedtable' cellpadding='2' cellspacing='0'>\n<tr>" .
"<th><a href='${sortlink}name'>$ML{'/community/members.bml.key.user'}</a></th>";
$ret .= "<th><a href='${sortlink}$_'>$_</a></th>" foreach @titleattribs;
$ret .= "<th><a href='${sortlink}maint'>$ML{'.key.sentby'}</a></th>";
$ret .= "<th><a href='${sortlink}date'>$ML{'.key.date'}</a></th>";
$ret .= "<th><a href='${sortlink}status'>$ML{'.key.status'}</a></th>";
$ret .= "</tr>\n";
# checkboxes and such
my $yes = '<img src="/img/blue_check.gif" width="15" height="15" border="0">';
my $no = '-';
# rows for existing users
my $rc = 0;
foreach(@users) {
my $rstyle = ($rc++ & 1) ? "<?altcolor1?>" : "<?altcolor2?>";
$ret .= "<tr style='background-color: $rstyle;'><td>" . LJ::ljuser($_->{user}) . "</td>";
foreach my $key (@attribs) {
$ret .= "<td align='center'>";
$ret .= $_->{$key} ? $yes : $no;
$ret .= "</td>";
}
$ret .= "<td>" . LJ::ljuser($_->{maintainer}, { type => 'P' }) . "</td>";
$ret .= "<td>$_->{date}</td>";
$ret .= "<td>$_->{status}</td>";
$ret .= "</tr>\n";
}
$ret .= "</table>\n";
$ret .= "<br /><a href='/community/members.bml?comm=$c->{user}'>$ML{'.send'}</a>";
$ret .= "</div>\n\n";
$ret .= $navbar;
return $ret;
}
_code?>
<=body
page?>