Alter the way screened comments work. In addition to your own screened
comments, you can now see comments made by the journal owner or community
administrators that are direct replies to one of your comments. You may also
now reply to any screened comment you can see, and keep your reply screened.
Patch by yvi.
diffs (195 lines):
diff -r 18a840d5d368 -r b91dec6eeaab cgi-bin/LJ/Comment.pm
--- a/cgi-bin/LJ/Comment.pm Mon Apr 19 22:22:51 2010 -0700
+++ b/cgi-bin/LJ/Comment.pm Tue Apr 20 08:42:32 2010 +0000
@@ -929,9 +929,11 @@ sub visible_to {
# screened comment
return 0 if $self->is_screened &&
- !( LJ::can_manage($u, $self->journal) # owns the
journal
- || LJ::u_equals($u, $self->poster) # posted the
comment
- || LJ::u_equals($u, $self->entry->poster )); # posted the
entry
+ !( LJ::can_manage( $u, $self->journal ) # owns the
journal
+ || LJ::u_equals( $u, $self->poster ) # posted the
comment
+ || LJ::u_equals( $u, $self->entry->poster ) # posted the
entry
+ || ( $self->parent && LJ::u_equals( $u,
$self->parent->poster ) && LJ::can_manage( $self->poster, $self->journal ) ) );
+ # person this is in reply to, as long as this comment
was by a moderator
# comments from suspended users aren't visible
return 0 if $self->poster && $self->poster->is_suspended;
diff -r 18a840d5d368 -r b91dec6eeaab cgi-bin/LJ/S2/ReplyPage.pm
--- a/cgi-bin/LJ/S2/ReplyPage.pm Mon Apr 19 22:22:51 2010 -0700
+++ b/cgi-bin/LJ/S2/ReplyPage.pm Tue Apr 20 08:42:32 2010 +0000
@@ -75,6 +75,7 @@ sub ReplyPage
my $replyto = $s2entry;
my $editid = $get->{edit} ? $get->{edit} : 0;
my $parpost;
+ my $parentcomment;
my $comment;
my %comment_values;
@@ -129,13 +130,14 @@ sub ReplyPage
$parpost = $db->selectrow_hashref($sql);
last if $parpost;
}
+ my $parentcomment = LJ::Comment->new( $u, jtalkid => $re_talkid );
unless ($parpost and $parpost->{'state'} ne 'D') {
# FIXME: This is a hack. See below...
$opts->{status} = "404 Not Found";
return "<p>This comment has been deleted; you cannot reply to
it.</p>";
}
- if ($parpost->{'state'} eq 'S' && !LJ::Talk::can_unscreen($remote, $u,
$s2entry->{'poster'}->{'user'}, undef)) {
+ if ( $parpost->{state} eq 'S' && !$parentcomment->visible_to( $remote
) ) {
$opts->{'handler_return'} = 403;
return;
}
diff -r 18a840d5d368 -r b91dec6eeaab cgi-bin/LJ/Talk.pm
--- a/cgi-bin/LJ/Talk.pm Mon Apr 19 22:22:51 2010 -0700
+++ b/cgi-bin/LJ/Talk.pm Tue Apr 20 08:42:32 2010 +0000
@@ -331,10 +331,6 @@ sub can_screen {
sub can_unscreen {
return LJ::Talk::can_screen(@_);
-}
-
-sub can_view_screened {
- return LJ::Talk::can_delete(@_);
}
sub can_freeze {
@@ -962,11 +958,24 @@ sub load_comments
# see if we should ideally show it or not. even if it's
# zero, we'll still show it if it has any children (but we won't
show content)
my $should_show = $post->{'state'} eq 'D' ? 0 : 1;
+ my $parenttalkid = $post->{parenttalkid};
unless ($viewall) {
$should_show = 0 if
- $post->{'state'} eq "S" && ! ($remote &&
($remote->{'userid'} == $uposterid ||
-
$remote->{'userid'} == $post->{'posterid'} ||
-
LJ::can_manage($remote, $u) ));
+ # can view if not screened, or if screened and some
conditions apply
+ $post->{state} eq "S" &&
+ !( $remote &&
+ ( $remote->{userid} == $uposterid || # made in
remote's journal
+ $remote->{userid} == $post->{posterid} || # made
by remote
+ LJ::can_manage( $remote, $u ) || # made in a
journal remote manages
+ (
+ # remote authored the parent, and this comment
is by an admin
+ exists $posts->{$parenttalkid} &&
+ $posts->{$parenttalkid}->{posterid} &&
+ $posts->{$parenttalkid}->{posterid} ==
$remote->{userid} &&
+ LJ::can_manage( $post->{posterid}, $u )
+ )
+ )
+ );
}
$post->{'_show'} = $should_show;
$post_count += $should_show;
@@ -1189,6 +1198,7 @@ sub talkform {
}
my $pics = LJ::Talk::get_subjecticons();
+ my $entry = LJ::Entry->new( $journalu, ditemid => $opts->{ditemid} );
# once we clean out talkpost.bml, this will need to be changed.
BML::set_language_scope('/talkpost.bml');
@@ -1327,7 +1337,6 @@ sub talkform {
} else { # if not edit
if ($journalu->{'opt_whocanreply'} eq "all") {
- my $entry = LJ::Entry->new($journalu, ditemid => $opts->{ditemid});
if ($entry && $entry->security ne "public") {
$ret .= "<tr valign='middle'>";
@@ -1760,9 +1769,9 @@ QQ
$ret .= "</td><td style='width: 90%'>";
$ret .= "<textarea class='textbox' rows='10' cols='75' wrap='soft'
name='body' id='commenttext'>" . LJ::ehtml($form->{body}) . "</textarea><br />";
- # if parent comment is screened, give option to unscreen it
+ # if parent comment is screened, and user can unscreen, give option to
unscreen it
# default is not to unscreen
- if ( $parpost->{state} eq "S" ) {
+ if ( $parpost->{state} eq "S" && LJ::Talk::can_unscreen( $remote,
$journalu, $entry->poster ) ) {
$ret .= "<label
for='unscreen_parent'>$BML::ML{'.opt.unscreenparent'}</label>";
$ret .= LJ::html_check(
{
@@ -3142,8 +3151,6 @@ sub init {
}
# If the reply is to a comment, check that it exists.
- # if it's screened, check that the user has permission to
- # reply and unscreen it
my $parpost;
my $partid = $form->{'parenttalkid'}+0;
@@ -3152,15 +3159,6 @@ sub init {
$parpost = LJ::Talk::get_talk2_row($dbcr, $journalu->{userid},
$partid);
unless ($parpost) {
$bmlerr->("$SC.error.noparent");
- }
-
- # can't use $remote because we may get here
- # with a reply from email. so use $up instead of $remote
- # in the call below.
-
- if ($parpost && $parpost->{'state'} eq "S" &&
- !LJ::Talk::can_unscreen($up, $journalu, $init->{entryu},
$init->{entryu}{'user'})) {
- $bmlerr->("$SC.error.screened");
}
}
$init->{parpost} = $parpost;
diff -r 18a840d5d368 -r b91dec6eeaab htdocs/talkpost.bml
--- a/htdocs/talkpost.bml Mon Apr 19 22:22:51 2010 -0700
+++ b/htdocs/talkpost.bml Tue Apr 20 08:42:32 2010 +0000
@@ -90,7 +90,7 @@ body<=
{
my $qparentid = $init->{'replyto'};
- my $sql = "SELECT t.posterid, t.nodetype, t.nodeid AS 'itemid', ".
+ my $sql = "SELECT t.posterid, t.nodetype, t.jtalkid, t.nodeid AS
'itemid', ".
"UNIX_TIMESTAMP()-UNIX_TIMESTAMP(t.datepost) AS 'secondsold', ".
"t.state, l.anum FROM talk2 t, log2 l WHERE
l.journalid=$u->{'userid'} AND ".
"l.jitemid=t.nodeid AND t.journalid=$u->{'userid'} AND
t.jtalkid=$qparentid";
@@ -184,9 +184,9 @@ body<=
if $entry && $entry->is_suspended;
# checked screened post
+ my $parentcomment = LJ::Comment->new( $u, jtalkid => $parpost->{jtalkid} );
return "<?h1 $ML{'Error'} h1?><?p $ML{'.error.noreply_screened'} p?>"
- if $parpost->{'state'} eq "S"
- && ! LJ::Talk::can_unscreen($remote, $u, $up, ($ur ? $ur->{'user'}
: undef));
+ if $parpost->{'state'} eq "S" && !$parentcomment->visible_to( $remote
);
return "<?h1 $ML{'Error'} h1?><?p $ML{'.error.noreply_deleted'} p?>"
if $parpost->{'state'} eq "D";
diff -r 18a840d5d368 -r b91dec6eeaab htdocs/talkread.bml
--- a/htdocs/talkread.bml Mon Apr 19 22:22:51 2010 -0700
+++ b/htdocs/talkread.bml Tue Apr 20 08:42:32 2010 +0000
@@ -700,13 +700,10 @@ body<=
if ($bp) {
$ret .= "(<a href='$bp'>$T{'replythis'}</a>) ";
} else {
- if ($post->{state} eq 'S') {
- if ( LJ::Talk::can_unscreen( $remote,
LJ::load_userid( $item->{ownerid} ), $item, $u ) ) {
- # if user can unscreen, they can reply,
choosing whether to unscreen or not
- $ret .= "(" . LJ::make_qr_link($dtid,
$post->{subject}, $T{replythis}, $replyurl) . ") ";
- } else {
- $ret .= "($T{ 'screened' })";
- }
+ if ( $post->{state} eq 'S' ) {
+ # if the user can see the comment, they can also
reply
+ # if they can also unscreen, they are given the
option to reply and unscreen
+ $ret .= "(" . LJ::make_qr_link( $dtid,
$post->{subject}, $T{replythis}, $replyurl ) . ") ";
} else {
$ret .= "(" . LJ::make_qr_link($dtid,
$post->{'subject'}, $T{'replythis'}, $replyurl) . ") ";
}
@@ -745,9 +742,6 @@ body<=
$ret .= "<a name='$htmlid'></a><span id='$htmlid'><table
><tbody><tr>";
$ret .= "<td><img src='$LJ::IMGPREFIX/dot.gif' height='1'
width='" . ($opts->{'depth'} * 25) . "'></td>";
$ret .= "<td>";
- if ($post->{'state'} eq 'S') {
- $ret .= "($T{'screened'}) ";
- }
if ($post->{'state'} eq 'F') {
$ret .= "($T{'frozen'}) ";
}
_______________________________________________
dw-changelog mailing list
[email protected]
http://lists.dwscoalition.org/mailman/listinfo/dw-changelog