fu: Close-up of Fu, bringing a scoop of water to her mouth (Default)
fu ([personal profile] fu) wrote in [site community profile] changelog2012-04-16 10:54 am

[dw-free] Allow community posting guidelines to be in the profile

[commit: http://hg.dwscoalition.org/dw-free/rev/2887bcdd4c14]

http://bugs.dwscoalition.org/show_bug.cgi?id=2154

Let the administrator choose whether the community posting guidelines are in
the profile, or whether they're in an entry, and show in the appropriate
places.

Patch by [personal profile] purplecat.

Files modified:
  • bin/upgrading/proplists.dat
  • cgi-bin/LJ/Global/Defaults.pm
  • cgi-bin/LJ/User.pm
  • htdocs/community/join.bml
  • htdocs/community/settings.bml
  • htdocs/community/settings.bml.text
  • htdocs/manage/circle/add.bml
--------------------------------------------------------------------------------
diff -r 58805386121f -r 2887bcdd4c14 bin/upgrading/proplists.dat
--- a/bin/upgrading/proplists.dat	Mon Apr 16 17:46:10 2012 +0800
+++ b/bin/upgrading/proplists.dat	Mon Apr 16 18:56:41 2012 +0800
@@ -1046,6 +1046,14 @@
   multihomed: 0
   prettyname: Community posting guidelines entry ID
 
+userproplist.posting_guidelines_location:
+  cldversion: 4
+  datatype: char
+  des: Where are the community posting guidelines?  Blank=Nowhere, P=Profile, E=Entry
+  indexed: 0
+  multihomed: 0
+  prettyname: Where are the community posting guidelines?
+
 userproplist.profile_collapsed_headers:
   cldversion: 4
   datatype: char
diff -r 58805386121f -r 2887bcdd4c14 cgi-bin/LJ/Global/Defaults.pm
--- a/cgi-bin/LJ/Global/Defaults.pm	Mon Apr 16 17:46:10 2012 +0800
+++ b/cgi-bin/LJ/Global/Defaults.pm	Mon Apr 16 18:56:41 2012 +0800
@@ -366,6 +366,9 @@
     ) unless defined %CAPTCHA_TYPES;
     $DEFAULT_CAPTCHA_TYPE ||= "T";
 
+    # default location of community posting guidelines
+    $DEFAULT_POSTING_GUIDELINES_LOC ||= "N";
+
 }
 
 
diff -r 58805386121f -r 2887bcdd4c14 cgi-bin/LJ/User.pm
--- a/cgi-bin/LJ/User.pm	Mon Apr 16 17:46:10 2012 +0800
+++ b/cgi-bin/LJ/User.pm	Mon Apr 16 18:56:41 2012 +0800
@@ -2797,13 +2797,36 @@
     return "" unless $u->is_community;
 
     my $posting_guidelines = $u->posting_guidelines_entry;
+    if ( $u->posting_guidelines_location eq "P" ) {
+        return $u->profile_url;
+    } elsif ( $u->posting_guidelines_location eq "N") {
+        return "";
+    }
+
     return "" unless $posting_guidelines;
 
     return $u->journal_base . "/guidelines";
 }
 
+# Where are a community's posting guidelines held?  Blank=Nowhere, P=Profile, E=Entry
+sub posting_guidelines_location {
+    my ( $u,  $value ) = @_;
+    if ( defined $value && $value=~ /[PE]/ ) {
+        $u->set_prop( posting_guidelines_location => $value );
+        return $value;
+    }
+    # We store the "N=Nowhere" option in the database as a blank empty entry to
+    # reduce space.  N should be returned whenever a blank entry is encountered.
+    if ( defined $value && $value eq 'N' ) {
+        $u->set_prop( posting_guidelines_location => '' );
+        return $value;
+    }
+    $u->prop( 'posting_guidelines_location' ) || $LJ::DEFAULT_POSTING_GUIDELINES_LOC;
+}
+
+
 sub profile_url {
-    my ($u, %opts) = @_;
+    my ( $u, %opts ) = @_;
 
     my $url;
     if ( $u->is_identity ) {
@@ -4320,7 +4343,6 @@
     return sort { $a->{user} cmp $b->{user} } @res;
 }
 
-
 # gets the relevant communities that the user is a member of
 # used to suggest communities to a person who know the user
 sub relevant_communities {
@@ -4428,7 +4450,6 @@
     return $u->trusts( $target_u ) ? 1 : 0;
 }
 
-
 ########################################################################
 ### 14. Adult Content Functions
 
diff -r 58805386121f -r 2887bcdd4c14 htdocs/community/join.bml
--- a/htdocs/community/join.bml	Mon Apr 16 17:46:10 2012 +0800
+++ b/htdocs/community/join.bml	Mon Apr 16 18:56:41 2012 +0800
@@ -135,7 +135,13 @@
         my $post_url;
         $post_url = $LJ::SITEROOT . "/update?usejournal=" . $cu->user
             if $show_join_post_link && $remote->can_post_to( $cu );
-        my $posting_guidelines_entry_url = $cu->posting_guidelines_url;
+        my $posting_guidelines_entry_url;
+        if ( $cu->posting_guidelines_location eq "E" ) {
+           $posting_guidelines_entry_url = $cu->posting_guidelines_url;
+        }
+        if ( $cu->posting_guidelines_location eq "P" ) {
+           $posting_guidelines_entry_url = $cu->profile_url;
+        }
 
         $ret .= "<?h1 $ML{'.success'} h1?><?p " . BML::ml('.label.membernow6',
                                                           { 'commname' => LJ::ljuser($cu) }) . " p?>";
diff -r 58805386121f -r 2887bcdd4c14 htdocs/community/settings.bml
--- a/htdocs/community/settings.bml	Mon Apr 16 17:46:10 2012 +0800
+++ b/htdocs/community/settings.bml	Mon Apr 16 18:56:41 2012 +0800
@@ -32,6 +32,7 @@
     #left-column, #right-column { float: left; }
     legend { font-size: 1.2em; font-weight: bold; }
     p.input-wrapper { margin-left: 27px; text-indent: -27px; }
+    p.nested-input-wrapper { margin-left: 54px; text-indent: -27px; }
     .action-box { clear: both; }
 </style>
 <=head
@@ -105,9 +106,13 @@
             $errors{'username'} = $ML{'.error.alreadycomm'};
         }
 
-        # check the posting guidelines entry is valid
-        $errors{'postingguidelinesentry'} = $ML{'.error.postingguidelinesentryinvalid'}
-            unless $cu->posting_guidelines_entry( $POST{'postingguidelinesentry'} );
+        # check the posting guidelines entry is valid,
+        # but only check if entry is selected.
+        my $postingguidelines_loc = $cu->posting_guidelines_location( $POST{'postingguidelines'} );
+        if ( $postingguidelines_loc eq "E" ) {
+            $errors{'postingguidelinesentry'} = $ML{'.error.postingguidelinesentryinvalid'}
+                unless $cu->posting_guidelines_entry( $POST{'postingguidelinesentry'} );
+        }
 
         # if we found errors, we'll redisplay the form below.  otherwise,
         # proceed.
@@ -163,7 +168,9 @@
             $cu->set_prop( { nonmember_posting => $nonmember_posting,
                              moderated => $moderated } );
             $cu->hide_join_post_link( $hidejoinpostlink );
-            $cu->posting_guidelines_entry( $POST{'postingguidelinesentry'} );
+            if ( $postingguidelines_loc eq "E" ) {
+                $cu->posting_guidelines_entry( $POST{'postingguidelinesentry'} );
+            }
 
             if ( LJ::is_enabled( 'adult_content' ) ) {
                 my $adult_content = $POST{'adult_content'};
@@ -215,6 +222,7 @@
                 'moderated'=>$POST{'moderated'} || 0,
                 'hide_join_post_link'=>$POST{'showjoinpostlink'} ? 0 : 1,
                 'posting_guidelines_entry'=>$POST{'postingguidelinesentry'} || '',
+                'posting_guidelines_location'=>$POST{'postingguidelines'} || $LJ::DEFAULT_POSTING_GUIDELINES_LOC,
                 );
 
     if ($mode eq 'modify') {
@@ -244,6 +252,7 @@
             $info{'nonmember_posting'} = $c->{'nonmember_posting'} ? 1 : 0;
             $info{'moderated'} = $c->{'moderated'} ? 1 : 0;
             $info{'hide_join_post_link'} = $c->{'hide_join_post_link'} ? 1 : 0;
+            $info{'posting_guidelines_location'} = $c->posting_guidelines_location;
             my $e = $c->get_posting_guidelines_entry;
             $info{'posting_guidelines_entry'} = $e->url
                 if $e;
@@ -368,7 +377,31 @@
             } );
     $ret .= " <label for='showjoinpostlink'>$ML{'.label.showjoinpostlink'}</label></p>";
 
+    my $postingguidelines = $info{'posting_guidelines_location'};
+    $ret .= "<?p $ML{'.label.showwhatguidelines'} p?>";
     $ret .= "<p class='input-wrapper'>";
+    $ret .= LJ::html_check({
+        type => 'radio', id => 'nopostingguidelines', name => 'postingguidelines',
+        value => 'N', selected => $postingguidelines eq "N" ? 1 : 0,
+    });
+    $ret .= " <label for='nopostingguidelines'>$ML{'.label.nopostingguidelines'}</label></p>";
+
+    $ret .= "<p class='input-wrapper'>";
+    $ret .= LJ::html_check({
+        type => 'radio', id => 'profilepostingguidelines', name => 'postingguidelines',
+        value => 'P', selected => $postingguidelines eq "P" ? 1 : 0,
+    });
+    $ret .= " <label for='postmembers'>$ML{'.label.profilepostingguidelines'}</label></p>";
+
+    $ret .= "<p class='input-wrapper'>";
+    $ret .= LJ::html_check({
+        type => 'radio', id => 'entrypostingguidelines', name => 'postingguidelines',
+        value => 'E', selected => $postingguidelines eq "E" ? 1 : 0,
+    });
+
+    $ret .= " <label for='postselect'>$ML{'.label.entrypostingguidelines'}</label></p>";
+
+    $ret .= "<p class='nested-input-wrapper'>";
     $ret .= " <label for='postingguidelinesentry'>$ML{'.label.postingguidelinesentry'}</label> ";
     $ret .= LJ::html_text( {
                 id => 'postingguidelinesentry', name => 'postingguidelinesentry', value => $info{'posting_guidelines_entry'}
diff -r 58805386121f -r 2887bcdd4c14 htdocs/community/settings.bml.text
--- a/htdocs/community/settings.bml.text	Mon Apr 16 17:46:10 2012 +0800
+++ b/htdocs/community/settings.bml.text	Mon Apr 16 18:56:41 2012 +0800
@@ -57,6 +57,8 @@
 
 .label.community=Community:
 
+.label.entrypostingguidelines=<strong>In an entry:</strong><br />The community posting guidelines can be found in an entry (details below).
+
 .label.guidelines=<a [[aopts]]>Community guidelines</a> - consistent link to your community guidelines entry
 
 .label.howoperates=Choose the settings for your community journal.  You can make changes to these settings at any time you want.
@@ -89,12 +91,18 @@
 
 .label.postingaccessselect=<STRONG>Select Members</STRONG><br />Members' entries will only appear in the community if they're approved by the administrator or moderator.
 
-.label.postingguidelinesentry=URL or ID of your community's posting guidelines entry (leave blank if you don't want to link to an entry):
+.label.postingguidelinesentry=URL or ID of your community's posting guidelines entry (if used):
+
+.label.profilepostingguidelines=<strong>Community Profile</strong><br />The community profile contains the posting guidelines.
+
+.label.nopostingguidelines=<strong>Nowhere</strong><br />There should be no link to community posting guidelines.
 
 .label.rellinks=Relevant links:
 
 .label.showjoinpostlink=Post to community
 
+.label.showwhatguidelines=Where are the community posting guidelines?
+
 .label.showwhatlinks=What links should be displayed to users when they join your community?
 
 .label.successpagedisplay=Join Links
diff -r 58805386121f -r 2887bcdd4c14 htdocs/manage/circle/add.bml
--- a/htdocs/manage/circle/add.bml	Mon Apr 16 17:46:10 2012 +0800
+++ b/htdocs/manage/circle/add.bml	Mon Apr 16 18:56:41 2012 +0800
@@ -124,7 +124,12 @@
         my $posting_guidelines_entry_url;
         my $post_url;
         if ( $u->is_community ) {
-            $posting_guidelines_entry_url = $u->posting_guidelines_url;
+            if ( $u->posting_guidelines_location eq "E" ) {
+                $posting_guidelines_entry_url = $u->posting_guidelines_url;
+            }
+            if ( $u->posting_guidelines_location eq "P" ) {
+                $posting_guidelines_entry_url = $u->profile_url;
+            }
             my $show_join_post_link = $u->hide_join_post_link ? 0 : 1;
             $post_url = $LJ::SITEROOT . "/update?usejournal=" . $u->user
                 if $show_join_post_link && $remote->can_post_to( $u );
--------------------------------------------------------------------------------

Post a comment in response:

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org