253 lines
9.7 KiB
Plaintext
Executable File
253 lines
9.7 KiB
Plaintext
Executable File
<?page
|
|
title<=
|
|
<?_code
|
|
if ($GET{'mode'} eq 'create') {
|
|
return $ML{'.title.create'};
|
|
}
|
|
else {
|
|
return $ML{'.title.modify'};
|
|
}
|
|
_code?>
|
|
<=title
|
|
head<=
|
|
<style type='text/css'>
|
|
div.opts { margin: 10px 0 10px 30px; }
|
|
</style>
|
|
<=head
|
|
body<=
|
|
<?_code
|
|
|
|
use strict;
|
|
use vars qw(%GET %POST);
|
|
|
|
# always have links at top
|
|
my $ret = BML::ml('Backlink', {
|
|
'link' => '/community/manage.bml',
|
|
'text' => $ML{'/community/members.bml.manage2'},
|
|
});
|
|
my %errors;
|
|
|
|
my $remote = LJ::get_remote();
|
|
|
|
unless ($remote) {
|
|
$ret .= "<?h1 $ML{'Error'} h1?><?p $ML{'error.noremote'} p?>";
|
|
return $ret;
|
|
}
|
|
|
|
unless ($remote->{'journaltype'} eq 'P') {
|
|
$ret .= "<?h1 $ML{'Error'} h1?><?p $ML{'.error.maintainertype'} p?>";
|
|
return $ret;
|
|
}
|
|
|
|
my $mode = "modify";
|
|
$mode = "create" if $GET{'mode'} eq 'create';
|
|
|
|
if (LJ::did_post())
|
|
{
|
|
my $sth;
|
|
my $cuser = LJ::canonical_username($POST{'cuser'});
|
|
my $cu = LJ::load_user($cuser);
|
|
|
|
unless ($cu) {
|
|
$errors{'username'} = $ML{'.error.notfound'};
|
|
}
|
|
|
|
if ($cu && $cu->{'userid'} == $remote->{'userid'}) {
|
|
$errors{'username'} = $ML{'.error.samenames'};
|
|
}
|
|
|
|
# if we're changing rather than creating, check that we can
|
|
if ($mode eq 'modify' && !LJ::can_manage_other($remote, $cu)) {
|
|
$errors{'username'} = BML::ml('.error.noaccess', {'comm'=>$cuser});
|
|
}
|
|
|
|
# if we're creating, community password must match
|
|
if ($mode eq 'create' && $cu && !LJ::auth_okay($cu, $POST{'cpassword'})) {
|
|
$errors{'password'} = $ML{'.error.badpassword'};
|
|
}
|
|
|
|
# disallow changing the journal type if the journal has entries
|
|
if ($mode eq 'create' && !%errors && !LJ::check_priv($remote, "changejournaltype", "")) {
|
|
my $count;
|
|
my $userid=$cu->{'userid'}+0;
|
|
|
|
my $dbcr = LJ::get_cluster_reader($cu);
|
|
$count = $dbcr->selectrow_array("SELECT COUNT(*) FROM log2 WHERE journalid=$userid AND posterid=journalid");
|
|
|
|
$errors{'username'} = $ML{'.error.hasentries'} if $count;
|
|
}
|
|
|
|
# if it's already a community, don't let them turn it into a community
|
|
if ($mode eq 'create' && !%errors && $cu->{journaltype} eq 'C') {
|
|
$errors{'username'} = $ML{'.error.alreadycomm'};
|
|
}
|
|
|
|
# if we found errors, we'll redisplay the form below. otherwise,
|
|
# proceed.
|
|
unless (%errors) {
|
|
my $dbh = LJ::get_db_writer();
|
|
my $cid = $cu->{'userid'};
|
|
my $qmembership = $POST{membership};
|
|
$qmembership = 'closed' unless $qmembership =~ m/(?:open|moderated|closed)/;
|
|
$qmembership = $dbh->quote($qmembership);
|
|
my $qpostlevel = $dbh->quote($POST{'postlevel'} eq "members" ? "members" : "select");
|
|
|
|
LJ::update_user($cu, { journaltype => 'C' });
|
|
if ($mode eq 'create') {
|
|
$dbh->do("REPLACE INTO community (userid, membership, postlevel) VALUES ($cid, $qmembership, $qpostlevel)");
|
|
LJ::set_rel($cu, $remote, 'A');
|
|
|
|
# delete existing friends
|
|
my $friends = LJ::get_friends($cid, undef, undef, 'force') || {};
|
|
LJ::remove_friend($cid, [ keys %$friends ]);
|
|
|
|
} else {
|
|
$dbh->do("UPDATE community SET membership=$qmembership, postlevel=$qpostlevel WHERE userid=$cid");
|
|
}
|
|
|
|
my $nonmembers = $POST{'nonmember_posting'} + 0;
|
|
my $moderated = $POST{'moderated'} + 0;
|
|
|
|
LJ::set_userprop($cu, 'nonmember_posting', $nonmembers);
|
|
LJ::set_userprop($cu, 'moderated', $moderated);
|
|
|
|
if ($moderated && ! LJ::load_rel_user($cu->{'userid'}, 'M')->[0]) {
|
|
LJ::set_rel($cu->{'userid'}, $remote->{'userid'}, 'M');
|
|
}
|
|
|
|
$ret .= "<?h1 $ML{'.success'} h1?>";
|
|
if ($mode eq 'create') {
|
|
$ret .= "<?p $ML{'.label.commcreated'} p?>";
|
|
} else {
|
|
$ret .= "<?p $ML{'.label.commchanged'} p?>";
|
|
}
|
|
|
|
$ret .= "<?p $ML{'.label.rellinks'} <ul><li><a href='$LJ::SITEROOT/community/$cu->{'user'}/'>$ML{'.label.commsite'}</a></li>";
|
|
$ret .= "<li><a href='/userinfo.bml?user=$cu->{'user'}'>$ML{'.label.comminfo'}</a></li><li>"
|
|
. BML::ml('.label.managepage', { 'aopts' => 'href="/community/manage.bml"' }) . "</li></ul> p?>";
|
|
|
|
return $ret;
|
|
}
|
|
}
|
|
|
|
# we're either creating a new community or modifying settings of an existing one
|
|
# based on whether $mode is 'create' or 'modify'. Most of the page is the same in
|
|
# either case, and additionally we must preload existing settings when modifying.
|
|
|
|
my ($cname, $c);
|
|
|
|
$cname = $POST{'cuser'}; # if we're falling through with errors when creating
|
|
|
|
my %info = (
|
|
'membership'=>$POST{'membership'} || 'open',
|
|
'postlevel'=>$POST{'postlevel'} || 'members',
|
|
'nonmember_posting'=>$POST{'nonmember_posting'} || 0,
|
|
'moderated'=>$POST{'moderated'} || 0,
|
|
);
|
|
|
|
if ($mode eq 'modify') {
|
|
$cname = LJ::canonical_username($GET{'comm'});
|
|
$c = LJ::load_user($cname);
|
|
unless ($c) {
|
|
# if no community was specified, redirect to manage.bml
|
|
return BML::redirect("$LJ::SITEROOT/community/manage.bml");
|
|
}
|
|
unless ($c->{'journaltype'} eq 'C') {
|
|
$ret = "<?h1 $ML{'Error'} h1?><?p $ML{'.error.notcomm'} p?>";
|
|
return $ret;
|
|
}
|
|
my $dbr = LJ::get_db_reader();
|
|
($info{'membership'},$info{'postlevel'}) =
|
|
$dbr->selectrow_array("SELECT membership, postlevel FROM community WHERE userid=$c->{'userid'}");
|
|
LJ::load_user_props($c, "nonmember_posting", "moderated");
|
|
$info{'nonmember_posting'} = $c->{'nonmember_posting'} ? 1 : 0;
|
|
$info{'moderated'} = $c->{'moderated'} ? 1 : 0;
|
|
}
|
|
|
|
$ret .= "<form method='post' action='settings.bml?mode=$mode'>";
|
|
|
|
if ($mode eq 'modify') {
|
|
$ret .= "<?h1 $ML{'.label.changeheader'} h1?><?p $ML{'.label.changetext'} p?>";
|
|
} else {
|
|
$ret .= "<?h1 $ML{'.label.createheader'} h1?><?p $ML{'.label.createtext'} p?>";
|
|
}
|
|
|
|
if ($mode eq 'create') {
|
|
LJ::set_active_crumb('createcommunity');
|
|
$ret .= "<?h2 $ML{'.label.commheader'} h2?>" .
|
|
($mode eq 'modify' ? "<?p $ML{'.label.commchange'} p?>" : "<?p $ML{'.label.commcreate'} p?>");
|
|
$ret .= "<?standout <table width='350' cellpadding='7'><tr valign='top'><td><b>$ML{'.label.maintainer'}</b></td>";
|
|
$ret .= "<td><?ljuser $remote->{'user'} ljuser?><br />$ML{'.label.maintainer.login'}</td></tr>";
|
|
$ret .= "<tr valign='top'><td><b>$ML{'.label.community'}</b></td>";
|
|
$ret .= "<td>$ML{'.label.username'}<br /><input name='cuser' maxlength='15' value='$cname' /><br />";
|
|
$ret .= "<?inerr $errors{'username'} inerr?><br />";
|
|
$ret .= "$ML{'.label.password'}<br /><input name='cpassword' type='password' /><br />";
|
|
$ret .= "<?inerr $errors{'password'} inerr?></td></tr></table> standout?>";
|
|
} else {
|
|
LJ::set_active_crumb('commsettings');
|
|
$ret .= LJ::html_hidden('cuser', $cname);
|
|
$ret .= "<?p " . BML::ml('.name',{'name'=>"<?ljcomm $cname ljcomm?>"});
|
|
$ret .= " " . BML::ml('.members',{'link'=>"/community/members.bml?comm=$cname"}) . " p?>";
|
|
}
|
|
|
|
$ret .= "<?h1 $ML{'.label.commopts'} h1?><?p $ML{'.label.howoperates'} p?>";
|
|
$ret .= "<?h2 $ML{'.label.membership'} h2?><?p $ML{'.label.whocanjoin'} p?><div class='opts'>";
|
|
|
|
# membership levels
|
|
$ret .= "<p>";
|
|
$ret .= LJ::html_check({ type => 'radio', name => 'membership', id => 'memopen',
|
|
value => 'open', selected => ($info{membership} eq 'open' ? 1 : 0)});
|
|
$ret .= "<label for='memopen' $ML{'.label.openmemb'}</label></p><p>";
|
|
$ret .= LJ::html_check({ type => 'radio', name => 'membership', id => 'memmoderated',
|
|
value => 'moderated', selected => ($info{membership} eq 'moderated' ? 1 : 0)});
|
|
$ret .= "<label for='memmoderated' $ML{'.label.moderatedmemb'}</label></p><p>";
|
|
$ret .= LJ::html_check({ type => 'radio', name => 'membership', id => 'memclosed',
|
|
value => 'closed', selected => ($info{membership} eq 'closed' ? 1 : 0)});
|
|
$ret .= "<label for='memclosed' $ML{'.label.closedmemb2'}</label></p>";
|
|
$ret .= "</div>";
|
|
|
|
my ($optopen,$optclosed);
|
|
if ($info{'postlevel'} eq 'members') {
|
|
($optopen,$optclosed)=(" checked='checked'","");
|
|
} else {
|
|
($optopen,$optclosed)=("", " checked='checked'");
|
|
}
|
|
|
|
$ret .= "<?h2 $ML{'.label.postaccess'} h2?><?p $ML{'.label.whocanpost'} p?><div class='opts'>";
|
|
$ret .= "<input type='radio' id='postopen' name='postlevel' value='members'$optopen /><label for='postopen'> $ML{'.label.anybodycan'}</label>";
|
|
$ret .= "<p><input type='radio' id='postclosed' name='postlevel' value='select'$optclosed /><label for='postclosed'> $ML{'.label.selcan'}</label>";
|
|
$ret .= "</div>";
|
|
|
|
if ($info{'nonmember_posting'}) {
|
|
($optopen,$optclosed)=(" checked='checked'","");
|
|
} else {
|
|
($optopen,$optclosed)=("", " checked='checked'");
|
|
}
|
|
|
|
$ret .= "<?h2 $ML{'.label.nmheader'} h2?><?p $ML{'.label.nmtext'} p?><div class='opts'>";
|
|
$ret .= "<input type='radio' id='nonopen' name='nonmember_posting' value='0'$optclosed /><label for='nonopen'> $ML{'.label.nmcant'}</label>";
|
|
$ret .= "<p><input type='radio' id='nonclosed' name='nonmember_posting' value='1'$optopen /><label for='nonclosed'> $ML{'.label.nmcan'}</label>";
|
|
$ret .= "</div>";
|
|
|
|
if ($info{'moderated'}) {
|
|
($optopen,$optclosed)=(" checked='checked'","");
|
|
} else {
|
|
($optopen,$optclosed)=("", " checked='checked'");
|
|
}
|
|
|
|
$ret .= "<?h2 $ML{'.label.modheader'} h2?><?p $ML{'.label.modtext'} p?><div class='opts'>";
|
|
$ret .= "<input type='radio' id='radunmod' name='moderated' value='0'$optclosed /><label for='radunmod'> $ML{'.label.modisnt'}</label>";
|
|
$ret .= "<p><input type='radio' id='radmod' name='moderated' value='1'$optopen /><label for='radmod'> $ML{'.label.modis'}</label>";
|
|
$ret .= "</div>\n";
|
|
|
|
$ret .= "<center><input type='submit' value='" .
|
|
($mode eq 'create' ? "$ML{'.button.createcommunity'}" : "$ML{'.button.changecommunity'}") .
|
|
"' /></center></form>";
|
|
|
|
return $ret;
|
|
|
|
_code?>
|
|
|
|
<=body
|
|
page?>
|