<=title head<= <=head body<= '/community/manage.bml', 'text' => $ML{'/community/members.bml.manage2'}, }); my %errors; my $remote = LJ::get_remote(); unless ($remote) { $ret .= ""; return $ret; } unless ($remote->{'journaltype'} eq 'P') { $ret .= ""; 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 .= ""; if ($mode eq 'create') { $ret .= ""; } else { $ret .= ""; } $ret .= "
  • $ML{'.label.commsite'}
  • "; $ret .= "
  • $ML{'.label.comminfo'}
  • " . BML::ml('.label.managepage', { 'aopts' => 'href="/community/manage.bml"' }) . "
  • 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 = ""; 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 .= "
    "; if ($mode eq 'modify') { $ret .= ""; } else { $ret .= ""; } if ($mode eq 'create') { LJ::set_active_crumb('createcommunity'); $ret .= "" . ($mode eq 'modify' ? "" : ""); $ret .= "$ML{'.label.maintainer'}"; $ret .= "{'user'} ljuser?>
    $ML{'.label.maintainer.login'}"; $ret .= "$ML{'.label.community'}"; $ret .= "$ML{'.label.username'}

    "; $ret .= "
    "; $ret .= "$ML{'.label.password'}

    "; $ret .= " standout?>"; } else { LJ::set_active_crumb('commsettings'); $ret .= LJ::html_hidden('cuser', $cname); $ret .= """}); $ret .= " " . BML::ml('.members',{'link'=>"/community/members.bml?comm=$cname"}) . " p?>"; } $ret .= ""; $ret .= "
    "; # membership levels $ret .= "

    "; $ret .= LJ::html_check({ type => 'radio', name => 'membership', id => 'memopen', value => 'open', selected => ($info{membership} eq 'open' ? 1 : 0)}); $ret .= "

    "; $ret .= LJ::html_check({ type => 'radio', name => 'membership', id => 'memmoderated', value => 'moderated', selected => ($info{membership} eq 'moderated' ? 1 : 0)}); $ret .= "

    "; $ret .= LJ::html_check({ type => 'radio', name => 'membership', id => 'memclosed', value => 'closed', selected => ($info{membership} eq 'closed' ? 1 : 0)}); $ret .= "

    "; $ret .= "
    "; my ($optopen,$optclosed); if ($info{'postlevel'} eq 'members') { ($optopen,$optclosed)=(" checked='checked'",""); } else { ($optopen,$optclosed)=("", " checked='checked'"); } $ret .= "
    "; $ret .= ""; $ret .= "

    "; $ret .= "

    "; if ($info{'nonmember_posting'}) { ($optopen,$optclosed)=(" checked='checked'",""); } else { ($optopen,$optclosed)=("", " checked='checked'"); } $ret .= "
    "; $ret .= ""; $ret .= "

    "; $ret .= "

    "; if ($info{'moderated'}) { ($optopen,$optclosed)=(" checked='checked'",""); } else { ($optopen,$optclosed)=("", " checked='checked'"); } $ret .= "
    "; $ret .= ""; $ret .= "

    "; $ret .= "

    \n"; $ret .= "
    "; return $ret; _code?> <=body page?>