htdocs/community/settings.bml
author mark
Wed Apr 15 04:44:57 2009 +0000
branchproduction
changeset 707 66c67e811173
parent 536 9fbd871d8aeb
child 729 994dc3820d95
permissions -rw-r--r--
http://bugs.dwscoalition.org/show_bug.cgi?id=295

Remove a heckuva lot of LJ blue still sitting around.

Patch by ursamajor.
mark@3
     1
<?page
mark@3
     2
title<=
mark@3
     3
<?_code
mark@3
     4
 if ($GET{'mode'} eq 'create') {
mark@3
     5
    return $ML{'.title.create'};
mark@3
     6
 }
mark@3
     7
 else {
mark@3
     8
    return $ML{'.title.modify'};
mark@3
     9
 }
mark@3
    10
_code?>
mark@3
    11
<=title
mark@3
    12
head<=
mark@3
    13
<style type='text/css'>
mark@84
    14
    fieldset { display: block; width: 320px; border: 1px solid #ccc; margin: 0 15px 15px 0; padding: 8px; }
mark@3
    15
    fieldset div { min-height: 170px; }
mark@3
    16
    * html fieldset div { height: 190px; }
mark@3
    17
    *:first-child+html fieldset div { min-height: 190px; }
mark@84
    18
    #left-column, #right-column { float: left; }
mark@707
    19
    legend { color: #c1272c; font-size: 1.2em; font-weight: bold; }
mark@3
    20
    p.input-wrapper { margin-left: 27px; text-indent: -27px; }
mark@3
    21
    label { color: #444; }
mark@3
    22
    label b { color: #000; }
mark@3
    23
    .standout { clear: left; max-width: 695px; }
mark@3
    24
    .standout table { margin: 0 auto; }
mark@3
    25
</style>
mark@3
    26
<=head
mark@3
    27
body<=
mark@3
    28
<?_code
mark@3
    29
{
mark@3
    30
    use strict;
mark@3
    31
    use vars qw(%GET %POST);
mark@3
    32
mark@3
    33
    my $ret; 
mark@3
    34
    my %errors;
mark@3
    35
mark@3
    36
mark@3
    37
    my $remote = LJ::get_remote();
mark@3
    38
mark@3
    39
    unless ($remote) {
mark@3
    40
        $ret .= "<?needlogin?>";
mark@291
    41
        return $ret;
mark@3
    42
    }
mark@3
    43
mark@3
    44
    unless ($remote->{'journaltype'} eq 'P') {
mark@3
    45
        $ret .= "<?h1 $ML{'Error'} h1?><?p $ML{'.error.maintainertype'} p?>";
mark@291
    46
        return $ret;
mark@3
    47
    }
mark@3
    48
mark@3
    49
    my $mode = "modify";
mark@3
    50
    $mode = "create" if $GET{'mode'} eq 'create';
mark@3
    51
mark@84
    52
    $ret .= "<form action='$LJ::SITEROOT/community/settings.bml' method='get'>";
mark@84
    53
    $ret .= LJ::make_authas_select($remote, { authas => $GET{authas}, type => "C" });
mark@84
    54
    $ret .= "</form>";
mark@84
    55
mark@3
    56
    if (LJ::did_post())
mark@3
    57
    {
mark@291
    58
        return "<?h1 $ML{'Error'} h1?><?p $ML{'error.invalidform'} p?>"
mark@3
    59
            unless LJ::check_form_auth();
mark@3
    60
mark@3
    61
        my $sth;
mark@3
    62
        my $cuser = LJ::canonical_username($POST{'cuser'});
mark@3
    63
        my $cu = LJ::load_user($cuser);
mark@3
    64
        
mark@3
    65
        unless ($cu) {
mark@3
    66
            $errors{'username'} = $ML{'.error.notfound'};
mark@3
    67
        }
mark@3
    68
mark@3
    69
        if ($cu && $cu->{'userid'} == $remote->{'userid'}) {
mark@3
    70
            $errors{'username'} = $ML{'.error.samenames'};
mark@3
    71
        }
mark@3
    72
mark@3
    73
        # if we're changing rather than creating, check that we can
mark@3
    74
        if ($mode eq 'modify' && !LJ::can_manage_other($remote, $cu)) {
mark@3
    75
            $errors{'username'} = BML::ml('.error.noaccess', {'comm'=>$cuser});
mark@3
    76
        }
mark@3
    77
mark@3
    78
        # if we're creating, community password must match
mark@3
    79
        if ($mode eq 'create' && $cu && !LJ::auth_okay($cu, $POST{'cpassword'})) {
mark@3
    80
            $errors{'password'} = $ML{'.error.badpassword'};
mark@3
    81
        }
mark@3
    82
mark@3
    83
        # disallow changing the journal type if the journal has entries
mark@3
    84
        if ($mode eq 'create' && !%errors && !LJ::check_priv($remote, "changejournaltype", "")) {
mark@3
    85
            my $count;
mark@3
    86
            my $userid=$cu->{'userid'}+0;
mark@3
    87
            
mark@3
    88
            my $dbcr = LJ::get_cluster_reader($cu);
mark@3
    89
            $count = $dbcr->selectrow_array("SELECT COUNT(*) FROM log2 WHERE journalid=$userid AND posterid=journalid");
mark@3
    90
            
mark@3
    91
            $errors{'username'} = $ML{'.error.hasentries'} if $count;
mark@3
    92
        }
mark@3
    93
mark@3
    94
        # if it's already a community, don't let them turn it into a community
mark@3
    95
        if ($mode eq 'create' && !%errors && $cu->{journaltype} eq 'C') {
mark@3
    96
            $errors{'username'} = $ML{'.error.alreadycomm'};
mark@3
    97
        }
mark@3
    98
        
mark@3
    99
        # if we found errors, we'll redisplay the form below.  otherwise,
mark@3
   100
        # proceed.
mark@3
   101
        unless (%errors) {
mark@3
   102
            my $dbh = LJ::get_db_writer();
mark@84
   103
            my $cid = $cu->id;
mark@84
   104
mark@3
   105
            my $qmembership = $POST{membership};
mark@84
   106
            $qmembership = "closed" unless $qmembership =~ /^(?:open|moderated|closed)$/;
mark@84
   107
            my $qpostlevel = $POST{postlevel};
mark@84
   108
            $qpostlevel = "select" unless $qpostlevel =~ /^(?:anybody|members|select)$/;
mark@84
   109
mark@84
   110
            # postlevel and nonmember_posting are a single setting in the UI, but separate options in the backend
mark@84
   111
            # split them out so we can save them properly
mark@84
   112
            my $nonmember_posting = 0;
mark@84
   113
            if ($qpostlevel eq "anybody") {
mark@84
   114
                $qpostlevel = "members";
mark@84
   115
                $nonmember_posting = 1;
mark@84
   116
            }
mark@3
   117
mark@3
   118
            LJ::update_user($cu, { journaltype => 'C', password => '' });
mark@3
   119
            if ($mode eq 'create') {
mark@3
   120
                LJ::set_rel($cu, $remote, 'A');
mark@3
   121
mark@3
   122
                # delete existing friends
mark@3
   123
                my $friends = LJ::get_friends($cid, undef, undef, 'force') || {};
mark@3
   124
                LJ::remove_friend($cid, [ keys %$friends ]);
mark@3
   125
mark@3
   126
                # log this to statushistory
mark@3
   127
                my $msg = "account '" . $cu->user . "' converted to community";
mark@3
   128
                $msg .= " (maintainer is '" . $remote->user . "')";
mark@3
   129
                LJ::statushistory_add($cu, $remote, "change_journal_type", $msg);
mark@84
   130
            }
mark@3
   131
mark@84
   132
            LJ::set_comm_settings($cu, $remote, { membership => $qmembership,
mark@84
   133
                                   postlevel => $qpostlevel });
mark@3
   134
mark@3
   135
            # lazy-cleanup: if a community has subscriptions (most likely
mark@3
   136
            # due to a personal->comm conversion), nuke those subs.
mark@3
   137
            # (since they can't manage them anyway!)
mark@3
   138
            $cu->delete_all_subscriptions;
mark@3
   139
mark@3
   140
            # ... and migrate their interests to the right table
mark@3
   141
            $cu->lazy_interests_cleanup;
mark@3
   142
            LJ::run_hook("change_journal_type", $cu);
mark@3
   143
mark@84
   144
            my $moderated = $POST{moderated} ? 1 : 0;
mark@3
   145
mark@84
   146
            LJ::set_userprop($cu, 'nonmember_posting', $nonmember_posting);
mark@3
   147
            LJ::set_userprop($cu, 'moderated', $moderated);
mark@3
   148
mark@536
   149
            if ( LJ::is_enabled( 'adult_content' ) ) {
mark@3
   150
                my $adult_content = $POST{'adult_content'};
mark@3
   151
                $adult_content eq "none"
mark@3
   152
                    unless $adult_content eq "explicit" || $adult_content eq "concepts";
mark@3
   153
                $cu->set_prop('adult_content', $adult_content);
mark@3
   154
            }
mark@3
   155
mark@3
   156
            if ($moderated && ! LJ::load_rel_user($cu->{'userid'}, 'M')->[0]) {
mark@3
   157
                LJ::set_rel($cu->{'userid'}, $remote->{'userid'}, 'M');
mark@3
   158
              }
mark@3
   159
mark@3
   160
            # since journaltype changed
mark@3
   161
            $cu->invalidate_directory_record;
mark@3
   162
mark@84
   163
            $ret .= LJ::maintainer_linkbar($cu, "settings");
mark@3
   164
            $ret .= "<?h1 $ML{'.success'} h1?>";
mark@3
   165
            if ($mode eq 'create') {
mark@3
   166
                $ret .= "<?p $ML{'.label.commcreated'} p?>";
mark@3
   167
            } else {
mark@3
   168
                $ret .= "<?p $ML{'.label.commchanged'} p?>";
mark@3
   169
            }
mark@3
   170
mark@3
   171
            $ret .= "<?p $ML{'.label.rellinks'} <ul><li><a href='" . $cu->journal_base . "'>$ML{'.label.commsite'}</a></li>";
mark@3
   172
            $ret .= "<li><a href='" . $cu->profile_url() . "'>$ML{'.label.comminfo'}</a></li><li>"
mark@3
   173
                . BML::ml('.label.managepage', { 'aopts' => 'href="/community/manage.bml"' }) . "</li></ul> p?>";
mark@3
   174
mark@3
   175
            return $ret;
mark@3
   176
        }
mark@3
   177
    }
mark@3
   178
mark@3
   179
    # we're either creating a new community or modifying settings of an existing one
mark@3
   180
    # based on whether $mode is 'create' or 'modify'. Most of the page is the same in
mark@3
   181
    # either case, and additionally we must preload existing settings when modifying.
mark@3
   182
mark@3
   183
    my ($cname, $c);
mark@3
   184
mark@3
   185
    $cname = $POST{'cuser'}; # if we're falling through with errors when creating
mark@3
   186
    
mark@3
   187
    my %info = (
mark@3
   188
                'membership'=>$POST{'membership'} || 'open',
mark@3
   189
                'postlevel'=>$POST{'postlevel'} || 'members',
mark@3
   190
                'nonmember_posting'=>$POST{'nonmember_posting'} || 0,
mark@3
   191
                'moderated'=>$POST{'moderated'} || 0,
mark@3
   192
                );
mark@3
   193
mark@3
   194
    if ($mode eq 'modify') {
mark@84
   195
        if ($GET{comm}) {
mark@84
   196
            # old GET arg
mark@84
   197
            return BML::redirect("$LJ::SITEROOT/community/settings.bml?authas=$GET{comm}");
mark@84
   198
        }
mark@84
   199
        $cname = LJ::canonical_username($GET{'authas'});
mark@3
   200
        $c = LJ::load_user($cname);
mark@3
   201
        unless ($c) {
mark@3
   202
            # if no community was specified, redirect to manage.bml
mark@3
   203
            return BML::redirect("$LJ::SITEROOT/community/manage.bml");
mark@84
   204
        }
mark@84
   205
mark@3
   206
        unless ($c->{'journaltype'} eq 'C') {
mark@84
   207
            $ret .= "<?h1 $ML{'Error'} h1?><?p $ML{'.error.notcomm'} p?>";
mark@291
   208
            return $ret;
mark@3
   209
        } 
mark@3
   210
        my $dbr = LJ::get_db_reader();
mark@3
   211
        ($info{'membership'},$info{'postlevel'}) = 
mark@3
   212
            $dbr->selectrow_array("SELECT membership, postlevel FROM community WHERE userid=$c->{'userid'}");
mark@3
   213
        LJ::load_user_props($c, "nonmember_posting", "moderated");
mark@3
   214
        $info{'nonmember_posting'} = $c->{'nonmember_posting'} ? 1 : 0;
mark@3
   215
        $info{'moderated'} = $c->{'moderated'} ? 1 : 0;
mark@3
   216
    }
mark@3
   217
mark@3
   218
    $ret .= "<form method='post' action='settings.bml?mode=$mode'>";
mark@3
   219
    $ret .= LJ::form_auth();
mark@3
   220
mark@3
   221
    if ($mode eq 'create') {
mark@3
   222
        LJ::set_active_crumb('createcommunity');
mark@3
   223
          $ret .= "<?h2 $ML{'.label.commheader'} h2?>" .
mark@3
   224
              ($mode eq 'modify' ? "<?p $ML{'.label.commchange'} p?>" : "<?p " . BML::ml('.label.commcreate2', {'aopts' => "href='$LJ::SITEROOT/create.bml'"}) . " p?>");
mark@3
   225
          $ret .= "<?standout <table width='350' cellpadding='7'><tr valign='top'><td><b>$ML{'.label.maintainer'}</b></td>";
mark@3
   226
          $ret .= "<td><?ljuser $remote->{'user'} ljuser?><br />" . BML::ml('.label.maintainer.login2', {'aopts' => "href='$LJ::SITEROOT/login.bml?ret=1'"}) . "</td></tr>";
mark@3
   227
          $ret .= "<tr valign='top'><td><b>$ML{'.label.community'}</b></td>";
mark@153
   228
          $ret .= "<td>$ML{'.label.username'}<br /><input name='cuser' maxlength='25' value='$cname' /><br />";
mark@3
   229
          $ret .= "<?inerr $errors{'username'} inerr?><br />";
mark@3
   230
          $ret .= "$ML{'.label.password'}<br /><input name='cpassword' type='password' /><br />";
mark@3
   231
          $ret .= "<?inerr $errors{'password'} inerr?></td></tr></table> standout?>";
mark@3
   232
      } else {
mark@3
   233
          LJ::set_active_crumb('commsettings');
mark@3
   234
            $ret .= LJ::html_hidden('cuser', $cname);
mark@84
   235
            $ret .= LJ::maintainer_linkbar($c, "settings");
mark@3
   236
        }
mark@3
   237
mark@84
   238
    $ret .= "<div id='left-column'>";
mark@84
   239
mark@3
   240
    # membership levels
mark@3
   241
    $ret .= "<fieldset id='membership'>";
mark@3
   242
    $ret .= "<legend>$ML{'.label.membership'}</legend><div><?p $ML{'.label.whocanjoin'} p?>";
mark@3
   243
    $ret .= "<p class='input-wrapper'>";
mark@3
   244
    $ret .= LJ::html_check({ type => 'radio', name => 'membership', id => 'memopen', 
mark@3
   245
                             value => 'open', selected => ($info{membership} eq 'open' ? 1 : 0)});
mark@3
   246
    $ret .= "<label for='memopen'> $ML{'.label.openmemb'}</label></p><p class='input-wrapper'>";
mark@3
   247
    $ret .= LJ::html_check({ type => 'radio', name => 'membership', id => 'memmoderated', 
mark@3
   248
                             value => 'moderated', selected => ($info{membership} eq 'moderated' ? 1 : 0)});
mark@3
   249
    $ret .= " <label for='memmoderated'>$ML{'.label.moderatedmemb'}</label></p><p class='input-wrapper'>";
mark@3
   250
    $ret .= LJ::html_check({ type => 'radio', name => 'membership', id => 'memclosed', 
mark@3
   251
                             value => 'closed', selected => ($info{membership} eq 'closed' ? 1 : 0)});
mark@3
   252
    $ret .= "<label for='memclosed'> $ML{'.label.closedmemb2'}</label></p>";
mark@3
   253
    $ret .= "</div></fieldset>";
mark@3
   254
mark@84
   255
    # adult content
mark@536
   256
    if ( LJ::is_enabled( 'adult_content' ) ) {
mark@84
   257
        my $adult_content = $c ? $c->adult_content : "none";
mark@3
   258
mark@84
   259
        $ret .= "<fieldset id='adult-content'>";
mark@84
   260
        $ret .= "<legend>$ML{'.label.adultcontentheader2'}</legend><div><?p $ML{'.label.adultcontenttext2'} " . LJ::help_icon('adult_content') . " p?>";
mark@84
   261
mark@84
   262
        $ret .= "<p class='input-wrapper'>";
mark@84
   263
        $ret .= LJ::html_check({
mark@84
   264
            type => 'radio', id => 'adultnone', name => 'adult_content',
mark@84
   265
            value => 'none', selected => $adult_content eq "none" ? 1 : 0,
mark@84
   266
        });
mark@84
   267
        $ret .= " <label for='adultnone'>$ML{'.label.adultcontentnone2'}</label></p>";
mark@84
   268
mark@84
   269
        $ret .= "<p class='input-wrapper'>";
mark@84
   270
        $ret .= LJ::html_check({
mark@84
   271
            type => 'radio', id => 'adultconcepts', name => 'adult_content',
mark@84
   272
            value => 'concepts', selected => $adult_content eq "concepts" ? 1 : 0,
mark@84
   273
        });
mark@84
   274
        $ret .= " <label for='adultconcepts'>" . BML::ml('.label.adultcontentconcepts2', { age => 14 }) . "</label></p>";
mark@84
   275
mark@84
   276
        $ret .= "<p class='input-wrapper'>";
mark@84
   277
        $ret .= LJ::html_check({
mark@84
   278
            type => 'radio', id => 'adultexplicit', name => 'adult_content',
mark@84
   279
            value => 'explicit', selected => $adult_content eq "explicit" ? 1 : 0,
mark@84
   280
        });
mark@84
   281
        $ret .= " <label for='adultexplicit'>" . BML::ml('.label.adultcontentexplicit2', { age => 18 }) . "</label></p>";
mark@84
   282
mark@84
   283
        $ret .= "</div></fieldset>";
mark@3
   284
    }
mark@3
   285
mark@84
   286
    $ret .= "</div><div id='right-column'>";
mark@3
   287
mark@84
   288
    my $posting_access = "members";
mark@84
   289
    if ($info{postlevel} eq "select") {
mark@84
   290
        $posting_access = "select";
mark@84
   291
    } elsif ($info{nonmember_posting}) {
mark@84
   292
        $posting_access = "anybody";
mark@3
   293
    }
mark@3
   294
mark@3
   295
    $ret .= "<fieldset id='member-restrictions'>";
mark@84
   296
    $ret .= "<legend>$ML{'.label.postingaccess'}</legend><div><?p $ML{'.label.whocanpost2'} p?>";
mark@84
   297
mark@84
   298
    $ret .= "<p class='input-wrapper'>";
mark@84
   299
    $ret .= LJ::html_check({
mark@84
   300
        type => 'radio', id => 'postanybody', name => 'postlevel',
mark@84
   301
        value => 'anybody', selected => $posting_access eq "anybody" ? 1 : 0,
mark@84
   302
    });
mark@84
   303
    $ret .= " <label for='postanybody'>$ML{'.label.postingaccessanybody'}</label></p>";
mark@84
   304
mark@84
   305
    $ret .= "<p class='input-wrapper'>";
mark@84
   306
    $ret .= LJ::html_check({
mark@84
   307
        type => 'radio', id => 'postmembers', name => 'postlevel',
mark@84
   308
        value => 'members', selected => $posting_access eq "members" ? 1 : 0,
mark@84
   309
    });
mark@84
   310
    $ret .= " <label for='postmembers'>$ML{'.label.postingaccessmembers'}</label></p>";
mark@84
   311
mark@84
   312
    $ret .= "<p class='input-wrapper'>";
mark@84
   313
    $ret .= LJ::html_check({
mark@84
   314
        type => 'radio', id => 'postselect', name => 'postlevel',
mark@84
   315
        value => 'select', selected => $posting_access eq "select" ? 1 : 0,
mark@84
   316
    });
mark@84
   317
    $ret .= " <label for='postselect'>$ML{'.label.postingaccessselect'}</label></p>";
mark@84
   318
mark@84
   319
    $ret .= "<?p $ML{'.label.moderation'} p?>";
mark@84
   320
    $ret .= "<p class='input-wrapper'>";
mark@84
   321
    $ret .= LJ::html_check({ id => 'moderate', name => 'moderated', selected => $info{moderated} ? 1 : 0 });
mark@84
   322
    $ret .= " <label for='moderate'>$ML{'.label.moderationyes'}</label></p>";
mark@84
   323
mark@3
   324
    $ret .= "</div></fieldset>";
mark@3
   325
mark@84
   326
    $ret .= "</div>";
mark@3
   327
mark@3
   328
    $ret .= "<div style='clear: left; max-width: 695px;'><?standout <input type='submit' value='" .
mark@84
   329
        ($mode eq 'create' ? "$ML{'.button.createcommunity'}" : "$ML{'.button.changecommunity2'}") .
mark@3
   330
        "' /> standout?></div></form>";
mark@3
   331
mark@291
   332
    return $ret;
mark@3
   333
}
mark@3
   334
_code?>
mark@3
   335
mark@3
   336
<=body
mark@3
   337
page?>