Disable quick reply if you are not allowed to comment to this journal
(setting + not a member or not on the access list). Previously, you would only
find out once you had typed a comment and hit post; now, you will be redirected
to the full form with an error message if you click on the reply link. Also
some refactoring.
Patch from LiveJournal, with some tweaks by <user name="kareila">.
diffs (280 lines):
diff -r 2417a253fad1 -r c8d6107aa1b5 cgi-bin/LJ/S2.pm
--- a/cgi-bin/LJ/S2.pm Fri Jun 04 13:59:12 2010 +0800
+++ b/cgi-bin/LJ/S2.pm Fri Jun 04 23:33:03 2010 +0800
@@ -3277,6 +3277,7 @@ sub _print_quickreply_link
$onclick = "" unless $page->{'_type'} eq 'EntryPage';
$onclick = "" unless LJ::is_enabled('s2quickreply');
+ $onclick = "" if $page->{'_u'}->does_not_allow_comments_from( $remote );
# See if we want to force them to change their password
my $bp = LJ::bad_password_redirect({ 'returl' => 1 });
diff -r 2417a253fad1 -r c8d6107aa1b5 cgi-bin/LJ/Talk.pm
--- a/cgi-bin/LJ/Talk.pm Fri Jun 04 13:59:12 2010 +0800
+++ b/cgi-bin/LJ/Talk.pm Fri Jun 04 23:33:03 2010 +0800
@@ -1172,6 +1172,10 @@ sub load_comments
return map { $posts->{$_} } @top_replies;
}
+# XXX these strings should be in talk, but moving them means we have
+# to retranslate. so for now we're just gonna put it off.
+my $SC = '/talkpost_do.bml';
+
sub talkform {
# Takes a hashref with the following keys / values:
# remote: optional remote u object
@@ -1256,6 +1260,7 @@ sub talkform {
}
my $oid_identity = $remote ? $remote->openid_identity : undef;
+ my $logged_in = $remote ? LJ::ehtml( $remote->display_name ) : '';
# Default radio button
# 4 possible scenarios:
@@ -1299,6 +1304,21 @@ sub talkform {
return;
};
+ my $bantext = sub {
+ my ( $type, $other_user ) = @_;
+ $other_user = '' unless $other_user;
+ my $ml_loggedin =
+ BML::ml( ".opt.loggedin", { username =>
"<strong>$logged_in</strong>" } );
+ my $ml_bannedfrom =
+ BML::ml( ".opt.bannedfrom", { journal => $journalu->user } );
+ return qq{
+ <td align='center'><img src='$LJ::IMGPREFIX/silk/identity/$type.png'
/></td>
+ <td align='center'>( )</td>
+ <td align='left'><span class='ljdeem'>$ml_loggedin</span>
+ $ml_bannedfrom$other_user</td>
+ };
+ };
+
# special link to create an account
my $create_link;
if (!$remote || defined $oid_identity) {
@@ -1318,15 +1338,13 @@ sub talkform {
return "You cannot edit this comment." unless $remote && !defined
$oid_identity;
$ret .= "<tr valign='middle' id='ljuser_row'>";
- my $logged_in = LJ::ehtml($remote->display_name);
- if (LJ::is_banned($remote, $journalu)) {
- $ret .= "<td align='center'><img
src='$LJ::IMGPREFIX/silk/identity/user.png' /></td>";
- $ret .= "<td align='center'>( )</td>";
- $ret .= "<td align='left'><span class='ljdeem'>" .
BML::ml(".opt.loggedin", {'username'=>"<i>$logged_in</i>"}) . "</font>" .
BML::ml(".opt.bannedfrom", {'journal'=>$journalu->{'user'}}) . "</td>";
+ if ( LJ::is_banned( $remote, $journalu ) ) {
+ $ret .= $bantext->( 'user' );
} else {
$ret .= "<td align='center'><img
src='$LJ::IMGPREFIX/silk/identity/user.png' onclick='handleRadios(1);'
/></td>";
- $ret .= "<td align='left'><label for='talkpostfromremote'>" .
BML::ml(".opt.loggedin", {'username'=>"<i>$logged_in</i>"}) . "</label>\n";
+ $ret .= "<td align='left'><label for='talkpostfromremote'>";
+ $ret .= BML::ml( ".opt.loggedin", { username =>
"<strong>$logged_in</strong>" } ) . "</label>\n";
$ret .= "<input type='hidden' name='usertype' value='cookieuser'
/>";
$ret .= "<input type='hidden' name='cookieuser'
value='$remote->{'user'}' id='cookieuser' />\n";
@@ -1360,11 +1378,13 @@ sub talkform {
# Logged in
if (defined $oid_identity) {
$ret .= "<tr valign='middle' id='oidli' name='oidli'>";
- $ret .= "<td align='center'><img
src='$LJ::IMGPREFIX/silk/identity/openid.png' onclick='handleRadios(4);'
/></td><td align='center'><input type='radio' name='usertype'
value='openid_cookie' id='talkpostfromoidli'" .
- $whocheck->('openid_cookie') . "/>";
+ $ret .= "<td align='center'><img
src='$LJ::IMGPREFIX/silk/identity/openid.png' onclick='handleRadios(4);'
/></td>";
+ $ret .= "<td align='center'><input type='radio'
name='usertype' value='openid_cookie' id='talkpostfromoidli'";
+ $ret .= $whocheck->('openid_cookie') . "/>";
$ret .= "</td><td align='left'><b><label for='talkpostfromoid'
onclick='handleRadios(4);return false;'>OpenID identity:</label></b> ";
- $ret .= "<i>" . $remote->display_name . "</i>";
+ $ret .= "<strong>$logged_in</strong>";
+
# show willscreen if a) all comments are screened b) anonymous
is screened and OpenID user not validated, c) non-access is screened and OpenID
user
# is not on access list
$ret .= $BML::ML{'.opt.willscreen'} if $screening eq 'A' || (
$screening eq 'R' && !$remote->is_validated )
@@ -1414,18 +1434,16 @@ sub talkform {
if ( defined $oid_identity && ( $remote->is_validated ||
$journalu->trusts( $remote ) )
) {
- my $logged_in = LJ::ehtml($remote->display_name);
$ret .= "<tr valign='middle' id='oidli' name='oidli'>";
- if (LJ::is_banned($remote, $journalu)) {
- $ret .= "<td align='center'><img
src='$LJ::IMGPREFIX/silk/identity/openid.png' /></td>";
- $ret .= "<td align='center'>( )</td>";
- $ret .= "<td align='left'><span class='ljdeem'>" .
BML::ml(".opt.loggedin", {'username'=>"<i>$logged_in</i>"}) . "</font>" .
BML::ml(".opt.bannedfrom", {'journal'=>$journalu->{'user'}}) . "</td>";
+ if ( LJ::is_banned( $remote, $journalu ) ) {
+ $ret .= $bantext->( 'openid' );
} else {
- $ret .= "<td align='center'><img
src='$LJ::IMGPREFIX/silk/identity/openid.png' onclick='handleRadios(4);'
/></td><td align='center'><input type='radio' name='usertype'
value='openid_cookie' id='talkpostfromoidli'" .
- $whocheck->('openid_cookie') . "/>";
+ $ret .= "<td align='center'><img
src='$LJ::IMGPREFIX/silk/identity/openid.png' onclick='handleRadios(4);'
/></td>";
+ $ret .= "<td align='center'><input type='radio'
name='usertype' value='openid_cookie' id='talkpostfromoidli'";
+ $ret .= $whocheck->('openid_cookie') . "/>";
$ret .= "</td><td align='left'><b><label
for='talkpostfromoid' onclick='handleRadios(4);return false;'>OpenID
identity:</label></b> ";
- $ret .= "<i>" . $remote->display_name . "</i>";
+ $ret .= "<strong>$logged_in</strong>";
$ret .= $BML::ML{'.opt.willscreen'} if $screening;
}
@@ -1446,6 +1464,8 @@ sub talkform {
}
}
+ my $remote_can_comment = ! $journalu->does_not_allow_comments_from(
$remote );
+
if ($journalu->{'opt_whocanreply'} eq 'friends') {
$ret .= "<tr valign='middle'>";
$ret .= "<td align='center' width='20'><img
src='$LJ::IMGPREFIX/silk/identity/anonymous.png' /></td>";
@@ -1455,17 +1475,27 @@ sub talkform {
$ret .= " " . BML::ml($stringname,
{'username'=>"<b>$journalu->{'user'}</b>"});
$ret .= "</tr>\n";
- ## the if clause is a copy of code from
($journalu->{'opt_whocanreply'} eq 'all')`
+ ## the if clause was a copy of code from
($journalu->{'opt_whocanreply'} eq 'all')
if (LJ::OpenID->consumer_enabled) {
# OpenID!!
# Logged in
if (defined $oid_identity) {
$ret .= "<tr valign='middle' id='oidli' name='oidli'>";
- $ret .= "<td align='center'><img
src='$LJ::IMGPREFIX/silk/identity/openid.png' onclick='handleRadios(4);'
/></td><td align='center'><input type='radio' name='usertype'
value='openid_cookie' id='talkpostfromoidli'" .
- $whocheck->('openid_cookie') . "/>";
- $ret .= "</td><td align='left'><b><label for='talkpostfromoid'
onclick='handleRadios(4);return false;'>OpenID identity:</label></b> ";
+ $ret .= "<td align='center'><img
src='$LJ::IMGPREFIX/silk/identity/openid.png' onclick='handleRadios(4);'
/></td>";
+ if ( $remote_can_comment ) {
+ $ret .= "<td align='center'><input type='radio'
name='usertype' value='openid_cookie' id='talkpostfromoidli'";
+ $ret .= $whocheck->('openid_cookie') . "/>";
+ $ret .= "</td><td align='left'><b><label
for='talkpostfromoid' onclick='handleRadios(4);return false;'>OpenID
identity:</label></b> ";
+ } else {
+ $ret .= "<td align='center'>( )</td><td
align='left'><b><font color='#c0c0c0'>OpenID identity:</font></b> ";
+ }
- $ret .= "<i>" . $remote->display_name . "</i>";
+ $ret .= "<strong>$logged_in</strong>";
+ unless ( $remote_can_comment ) {
+ my $msg = $journalu->is_comm ? "notamember" : "notafriend";
+ $ret .= " - " . BML::ml( "$SC.error.$msg",
+ { user => $journalu->user }
);
+ }
$ret .= $BML::ML{'.opt.willscreen'} if $screening eq 'A';
$ret .= "</td></tr>\n";
@@ -1501,24 +1531,38 @@ sub talkform {
}
}
- if ($remote && !defined $oid_identity) {
- $ret .= "<tr valign='middle' id='ljuser_row'>";
- my $logged_in = LJ::ehtml($remote->display_name);
+ if ( $remote && ! defined $oid_identity ) {
+ $ret .= "<tr valign='middle' id='ljuser_row" . ($remote_can_comment ?
'' : '_cannot') . "'>";
# Don't worry about a real href since js hides the row anyway
my $other_user = "<script language='JavaScript'>if
(document.getElementById) {document.write(\" <a href='#'
onClick='otherLJUser();return false;'>[other]</a>\");}</script>";
- if (LJ::is_banned($remote, $journalu)) {
- $ret .= "<td align='center'><img
src='$LJ::IMGPREFIX/silk/identity/user.png' /></td>";
- $ret .= "<td align='center'>( )</td>";
- $ret .= "<td align='left'><span class='ljdeem'>" .
BML::ml(".opt.loggedin", {'username'=>"<i>$logged_in</i>"}) . "</font>" .
BML::ml(".opt.bannedfrom", {'journal'=>$journalu->{'user'}}) . $other_user .
"</td>";
+ if ( LJ::is_banned( $remote, $journalu ) ) {
+ $ret .= $bantext->( 'user', $other_user );
} else {
- $ret .= "<td align='center'><img
src='$LJ::IMGPREFIX/silk/identity/user.png' onclick='handleRadios(1);'
/></td><td align='center'><input type='radio' name='usertype'
value='cookieuser' id='talkpostfromremote'" .
- $whocheck->('remote') .
- " /></td>";
- $ret .= "<td align='left'><label for='talkpostfromremote'>" .
BML::ml(".opt.loggedin", {'username'=>"<i>$logged_in</i>"}) . "</label>\n";
+ $ret .= "<td align='center'><img
src='$LJ::IMGPREFIX/silk/identity/user.png' onclick='handleRadios(1);'
/></td>";
+ if ( $remote_can_comment ) {
+ $ret .= "<td align='center'><input type='radio'
name='usertype' value='cookieuser' id='talkpostfromremote'";
+ $ret .= $whocheck->('remote') . " /></td>";
+ } else {
+ $ret .= "<td align='center'>( )</td>";
+ }
+ $ret .= "<td align='left'>";
+ if ( $remote_can_comment ) {
+ $ret .= "<label for='talkpostfromremote'>";
+ $ret .= BML::ml( ".opt.loggedin", { username =>
"<strong>$logged_in</strong>" } );
+ $ret .= "</label>\n";
- $ret .= $other_user;
+ $ret .= $other_user;
+ } else {
+ $ret .= "<font color='#c0c0c0'>";
+ $ret .= BML::ml( ".opt.loggedin", { username =>
"</font><strong>$logged_in</strong><font color='#c0c0c0'>" } );
+ $ret .= "</font>\n";
+
+ my $msg = $journalu->is_comm ? "notamember" : "notafriend";
+ $ret .= " - " . BML::ml( "$SC.error.$msg",
+ { user => $journalu->user } );
+ }
$ret .= "<input type='hidden' name='cookieuser'
value='$remote->{'user'}' id='cookieuser' />\n";
if ($screening eq 'A' ||
@@ -1532,9 +1576,11 @@ sub talkform {
# ( ) Site user:
$ret .= "<tr valign='middle' id='otherljuser_row' name='otherljuser_row'>";
- $ret .= "<td align='center'><img
src='$LJ::IMGPREFIX/silk/identity/user.png' onclick='handleRadios(2);'
/></td><td align='center'><input type='radio' name='usertype' value='user'
id='talkpostfromlj'" .
- $whocheck->('ljuser') . "/>";
- $ret .= "</td><td align='left'><b><label for='talkpostfromlj'
onclick='handleRadios(2); return false;'>" . BML::ml( '.opt.siteuser', {
sitename => $LJ::SITENAMESHORT } ) . "</label></b> ";
+ $ret .= "<td align='center'><img
src='$LJ::IMGPREFIX/silk/identity/user.png' onclick='handleRadios(2);' /></td>";
+ $ret .= "<td align='center'><input type='radio' name='usertype'
value='user' id='talkpostfromlj'";
+ $ret .= $remote_can_comment ? $whocheck->('ljuser') : ' checked="checked"';
+ $ret .= " /></td><td align='left'><b><label for='talkpostfromlj'
onclick='handleRadios(2); return false;'>";
+ $ret .= BML::ml( '.opt.siteuser', { sitename => $LJ::SITENAMESHORT } ) .
"</label></b> ";
$ret .= $BML::ML{'.opt.willscreenfriend'} if $screening eq 'F';
$ret .= $BML::ML{'.opt.willscreen'} if $screening eq 'A';
$ret .= "</td></tr>\n";
@@ -1564,6 +1610,7 @@ sub talkform {
$ljuser_def = $remote->{user};
}
}
+ $ljuser_def = "" unless $remote_can_comment;
$ret .= "<table><tr><td>";
$ret .= "$BML::ML{'Username'}:</td><td>";
@@ -2848,10 +2895,6 @@ sub enter_imported_comment {
return $jtalkid;
}
-# XXX these strings should be in talk, but moving them means we have
-# to retranslate. so for now we're just gonna put it off.
-my $SC = '/talkpost_do.bml';
-
sub init {
my ($form, $remote, $need_captcha, $errret) = @_;
my $sth;
diff -r 2417a253fad1 -r c8d6107aa1b5 cgi-bin/LJ/User.pm
--- a/cgi-bin/LJ/User.pm Fri Jun 04 13:59:12 2010 +0800
+++ b/cgi-bin/LJ/User.pm Fri Jun 04 23:33:03 2010 +0800
@@ -3435,6 +3435,15 @@ sub usersearch_age_with_expire {
=head2 Comment-Related Functions
=cut
+# true if u1 restricts commenting to trusted and u2 is not trusted
+sub does_not_allow_comments_from {
+ my ( $u1, $u2 ) = @_;
+ return unless LJ::isu( $u1 ) && LJ::isu( $u2 );
+ return $u1->prop('opt_whocanreply') eq 'friends'
+ && ! $u1->trusts_or_has_member( $u2 );
+}
+
+
# get recent talkitems posted to this user
# args: maximum number of comments to retrieve
# returns: array of hashrefs with jtalkid, nodetype, nodeid, parenttalkid,
posterid, state
diff -r 2417a253fad1 -r c8d6107aa1b5 cgi-bin/weblib.pl
--- a/cgi-bin/weblib.pl Fri Jun 04 13:59:12 2010 +0800
+++ b/cgi-bin/weblib.pl Fri Jun 04 23:33:03 2010 +0800
@@ -944,6 +944,13 @@ sub make_qr_link
$basesubject = "Re: $basesubject" if $basesubject;
$basesubject = LJ::ehtml(LJ::ejs($basesubject));
my $onclick = "return quickreply(\"$dtid\", $pid, \"$basesubject\")";
+
+ my $r = DW::Request->get;
+ my $ju;
+ $ju = LJ::load_userid( $r->note( 'journalid' ) )
+ if $r and $r->note( 'journalid' );
+
+ $onclick = "" if $ju && $ju->does_not_allow_comments_from( $remote );
return "<a onclick='$onclick' href='$replyurl' >$linktext</a>";
} else { # QR Disabled
return "<a href='$replyurl' >$linktext</a>";
_______________________________________________
dw-changelog mailing list
[email protected]
http://lists.dwscoalition.org/mailman/listinfo/dw-changelog