[livejournal] r21931: LJSUP-12151: New Repost feature (S1)
Committer: sbelyaev
LJSUP-12151: New Repost feature (S1)U trunk/cgi-bin/ljviews.pl U trunk/htdocs/view/index.bml
Modified: trunk/cgi-bin/ljviews.pl
===================================================================
--- trunk/cgi-bin/ljviews.pl 2012-05-12 09:40:58 UTC (rev 21930)
+++ trunk/cgi-bin/ljviews.pl 2012-05-12 09:43:18 UTC (rev 21931)
@@ -12,6 +12,7 @@
use Class::Autouse qw(LJ::LastFM);
use LJ::TimeUtil;
use LJ::Setting::Music;
+use LJ::Entry::Repost;
# this used to be in a table, but that was kinda useless
@themecoltypes = (
@@ -1276,6 +1277,8 @@
my ($posterid, $itemid, $security, $alldatepart) =
map { $item->{$_} } qw(posterid itemid security alldatepart);
+ my $journalu = $u;
+
my $ditemid = $itemid * 256 + $item->{'anum'};
my $entry_obj = LJ::Entry->new($u, ditemid => $ditemid);
@@ -1286,7 +1289,26 @@
my $replycount = $logprops{$itemid}->{'replycount'};
my $subject = $logtext->{$itemid}->[0];
my $event = $logtext->{$itemid}->[1];
-
+
+ my $username = $user;
+ my $repost_entry_obj;
+ my $content = { 'original_post_obj' => \$entry_obj,
+ 'repost_obj' => \$repost_entry_obj,
+ 'ditemid' => \$ditemid,
+ 'journalu' => \$journalu,
+ 'posterid' => \$posterid,
+ 'security' => \$security,
+ 'event' => \$event,
+ 'subject' => \$subject,
+ 'reply_count' => \$replycount };
+
+ if (LJ::Entry::Repost->substitute_content( $entry_obj, $content )) {
+ next ENTRY unless $entry_obj->visible_to($remote, {'viewall' => $viewall, 'viewsome' => $viewsome});
+ $username = $entry_obj->poster->username;
+ $posteru{$posterid} = $entry_obj->poster;
+ $logprops{$itemid} = $entry_obj->props;
+ }
+
if ($get->{'nohtml'}) {
# quote all non-LJ tags
$subject =~ s{<(?!/?lj)(.*?)>} {<$1>}gi;
@@ -1296,7 +1318,7 @@
if ( $LJ::UNICODE &&
( $entry_obj->prop("unknown8bit") ||
$logprops{$itemid}->{'unknown8bit'} ) ) {
- LJ::item_toutf8($u, \$subject, \$event, $logprops{$itemid});
+ LJ::item_toutf8($journalu, \$subject, \$event, $logprops{$itemid});
}
my %lastn_date_format = LJ::alldateparts_to_hash($alldatepart);
@@ -1332,7 +1354,7 @@
});
}
- my $itemargs = "journal=$user&itemid=$ditemid";
+ my $itemargs = "journal=$username&itemid=$ditemid";
$lastn_event{'itemargs'} = $itemargs;
my $suspend_msg = $entry_obj && $entry_obj->should_show_suspend_msg_to($remote) ? 1 : 0;
@@ -1353,7 +1375,7 @@
);
LJ::expand_embedded(
- $u,
+ $journalu,
$ditemid,
$remote,
\$event,
@@ -1362,14 +1384,14 @@
$event = LJ::ContentFlag->transform_post(
'post' => $event,
- 'journal' => $u,
+ 'journal' => $journalu,
'remote' => $remote,
'entry' => $entry_obj,
);
$lastn_event{'event'} = $event;
- my $permalink = "$journalbase/$ditemid.html";
+ my $permalink = $entry_obj->url;
$lastn_event{'permalink'} = $permalink;
if($subject !~ /[<>]/) {
@@ -1384,7 +1406,7 @@
my $readurl = LJ::Talk::talkargs($permalink, $nc);
my $dispreadlink = $replycount ||
- ($logprops{$itemid}->{'hasscreened'} && $remote && $remote->can_manage($u));
+ ($logprops{$itemid}->{'hasscreened'} && $remote && $remote->can_manage($journalu));
$lastn_event{'talklinks'} = LJ::fill_var_props($vars, 'LASTN_TALK_LINKS', {
'itemid' => $ditemid,
@@ -1409,18 +1431,18 @@
'vars' => $vars,
'prefix' => "LASTN",
'event' => \%lastn_event,
- 'user' => $u,
+ 'user' => $journalu,
'entry_obj' => $entry_obj,
});
- if ($u->{'userid'} != $posterid)
+ if ($journalu->userid != $posterid)
{
my %lastn_altposter = ();
my $pu = $posteru{$posterid};
my $poster = $pu->{'user'};
$lastn_altposter{'poster'} = $poster;
- $lastn_altposter{'owner'} = $user;
+ $lastn_altposter{'owner'} = $username;
if (my $picid = $item->{'_picid'}) {
my $pic = $userpics{$picid};
@@ -1453,7 +1475,7 @@
my $ads = LJ::get_ads({
location => 's1.ebox',
s1_view => 'lastn',
- journalu => $u,
+ journalu => $journalu,
current_post_number => $eventnum,
total_posts_number => scalar @items,
});
@@ -1846,6 +1868,27 @@
my $subject = $logtext->{$datakey}->[0];
my $event = $logtext->{$datakey}->[1];
+ my $repost_entry_obj;
+ my $journalu;
+
+ my $content = { 'original_post_obj' => \$entry_obj,
+ 'repost_obj' => \$repost_entry_obj,
+ 'ditemid' => \$ditemid,
+ 'journalu' => \$journalu,
+ 'posterid' => \$posterid,
+ 'security' => \$security,
+ 'event' => \$event,
+ 'subject' => \$subject,
+ 'reply_count' => \$replycount,
+ 'cluster_id' => \$clusterid, };
+
+ if (LJ::Entry::Repost->substitute_content( $entry_obj, $content )) {
+ $friendid = $journalu->userid;
+ $logprops{$itemid} = $entry_obj->props;
+ $friends{$friendid} = $journalu;
+ $pu = $entry_obj->poster;
+ }
+
if ( $logprops{$datakey}->{'repost'} && $remote && $remote->prop('hidefriendsreposts') && ! $remote->prop('opt_ljcut_disable_friends') ) {
$event = LJ::Lang::ml(
'friendsposts.reposted',
@@ -1870,8 +1913,8 @@
}
my ($friend, $poster);
- $friend = $poster = $friends{$friendid}->{'user'};
- $poster = $pu->{'user'};
+ $friend = $poster = $friends{$friendid}->user;
+ $poster = $pu->user;
my %friends_date_format = LJ::alldateparts_to_hash($alldatepart);
@@ -1909,7 +1952,7 @@
my %urlopts_style;
if ( $remote && $remote->{'opt_stylemine'}
- && $remote->{'userid'} != $friendid )
+ && $remote->userid != $friendid )
{
$urlopts_style{'style'} = 'mine';
}
@@ -1993,7 +2036,7 @@
$friends_event{'bgcolor'} = $friends{$friendid}->{'bgcolor'} || "#ffffff";
my $journalbase = LJ::journal_base($friends{$friendid});
- my $permalink = "$journalbase/$ditemid.html";
+ my $permalink = $entry_obj->url;
$friends_event{'permalink'} = $permalink;
$friends_event{'subject'} = "<a href='$permalink'>" . $friends_event{'subject'} . "</a>";
@@ -2628,6 +2671,9 @@
next ENTRY if $pu && $pu->{'statusvis'} eq 'S' && !$viewsome;
next ENTRY if $entry_obj && $entry_obj->is_suspended_for($remote);
+ my $username = $user;
+ my $journalu = $u;
+
if ( !$viewsome && $pu && $pu->is_deleted
&& !$LJ::JOURNALS_WITH_PROTECTED_CONTENT{$pu->username} )
{
@@ -2642,9 +2688,25 @@
my $subject = $logtext->{$itemid}->[0];
my $event = $logtext->{$itemid}->[1];
+ my $repost_entry_obj;
+ my $content = { 'original_post_obj' => \$entry_obj,
+ 'repost_obj' => \$repost_entry_obj,
+ 'ditemid' => \$ditemid,
+ 'journalu' => \$journalu,
+ 'posterid' => \$posterid,
+ 'security' => \$security,
+ 'event' => \$event,
+ 'subject' => \$subject,
+ 'reply_count' => \$replycount };
+
+ if (LJ::Entry::Repost->substitute_content( $entry_obj, $content )) {
+ $username = $entry_obj->poster->user;
+ $logprops{$itemid} = $entry_obj->props;
+ }
+
if ($LJ::UNICODE &&
( $entry_obj->prop("unknown8bit") || $logprops{$itemid}->{'unknown8bit'} )) {
- LJ::item_toutf8($u, \$subject, \$event, $logprops{$itemid});
+ LJ::item_toutf8($journalu, \$subject, \$event, $logprops{$itemid});
}
my %day_date_format = LJ::alldateparts_to_hash($alldatepart);
@@ -2666,7 +2728,7 @@
});
}
- my $itemargs = "journal=$user&itemid=$ditemid";
+ my $itemargs = "journal=$username&itemid=$ditemid";
$day_event{'itemargs'} = $itemargs;
@@ -2687,7 +2749,7 @@
});
LJ::expand_embedded(
- $u,
+ $journalu,
$ditemid,
$remote,
\$event,
@@ -2703,7 +2765,7 @@
$day_event{'event'} = $event;
- my $permalink = "$journalbase/$ditemid.html";
+ my $permalink = $entry_obj->url;
$day_event{'permalink'} = $permalink;
$day_event{'subject'} = "<a href='$permalink'>" . $day_event{'subject'} . "</a>";
@@ -2741,7 +2803,7 @@
'vars' => $vars,
'prefix' => "DAY",
'event' => \%day_event,
- 'user' => $u,
+ 'user' => $journalu,
'entry_obj' => $entry_obj,
});
@@ -2759,7 +2821,7 @@
my $ads = LJ::get_ads({
location => 's1.ebox',
s1_view => 'day',
- journalu => $u,
+ journalu => $journalu,
current_post_number => $eventnum,
total_posts_number => scalar @items,
});
Modified: trunk/htdocs/view/index.bml
===================================================================
--- trunk/htdocs/view/index.bml 2012-05-12 09:40:58 UTC (rev 21930)
+++ trunk/htdocs/view/index.bml 2012-05-12 09:43:18 UTC (rev 21931)
@@ -170,8 +170,8 @@
$need_userid{$it->[4]} = 1;
}
my $lt = LJ::get_logtext2($u, @itemids);
- my %u;
- LJ::load_userids_multiple([map { $_ => \$u{$_} } keys %need_userid], []);
+ my %apu;
+ LJ::load_userids_multiple([map { $_ => \$apu{$_} } keys %need_userid], []);
# sort on event time
my $lday = 0; # last day shown
@@ -180,7 +180,28 @@
my ($itemid, $anum, $day, $eventtime, $posterid, $replycount, $security, $allowmask) = @$it;
my $entry = LJ::Entry->new($u, jitemid => $itemid);
- my $pu = $u{$posterid};
+
+ warn "it1: $itemid";
+ my $journalu = $u;
+ my ($repost_entry_obj, $subject);
+ my $content = { 'original_post_obj' => \$entry,
+ 'repost_obj' => \$repost_entry_obj,
+ 'itemid' => \$itemid,
+ 'anum' => \$anum,
+ 'journalu' => \$journalu,
+ 'posterid' => \$posterid,
+ 'security' => \$security,
+ 'subject' => \$subject,
+ 'eventtime' => \$eventtime,
+ 'allowmask' => \$allowmask,
+ 'reply_count' => \$replycount, };
+
+ if (LJ::EntryReference->substitute_content( $entry, $content )) {
+ next unless $entry->visible_to($remote);
+ $apu{$posterid} = $entry->poster;
+ }
+
+ my $pu = $apu{$posterid};
next if $pu->is_suspended && !$viewsome;
next if $entry && $entry->is_suspended_for($remote);
if ( !$viewsome && $pu && $pu->is_deleted
@@ -192,10 +213,9 @@
next if $purge_community_entries;
}
+ $subject ||= $lt->{$itemid}->[0];
+ my $poster = $apu{$posterid}->user;
- my $subject = $lt->{$itemid}->[0];
- my $poster = $u{$posterid}->{user};
-
if ($day != $lday) {
if ($lday) { $body .= "</table></dd>"; }
$lday = $day;
@@ -212,7 +232,7 @@
# well here.
if ($LJ::UNICODE && !LJ::is_utf8($subject)) {
my $error;
- my $subj = LJ::text_convert($subject, $u, \$error);
+ my $subj = LJ::text_convert($subject, $journalu, \$error);
$subject = $subj unless $error;
LJ::text_out(\$subject);
}
@@ -226,7 +246,7 @@
} elsif ($security eq "usemask") {
if ($allowmask == 0) { # custom security with no group -- essentially private
$sec = " <?securityprivate?>";
- } elsif ($allowmask > 1 && $u && $u->equals($remote)) { # custom group -- only show to journal owner
+ } elsif ($allowmask > 1 && $journalu && $journalu->equals($remote)) { # custom group -- only show to journal owner
$sec = " <?securitygroups?>";
} else { # friends only or custom group showing to non journal owner
$sec = " <?securityprotected?>";
@@ -243,7 +263,8 @@
LJ::CleanHTML::clean_subject_all(\$subject);
- $body .= "<td><a href='" . LJ::item_link($u, $itemid, $anum) . "'>$subject</a>$sec$rep</td></tr>\n";
+ warn "it2: $itemid " . LJ::item_link($journalu, $itemid, $anum);
+ $body .= "<td><a href='" . LJ::item_link($journalu, $itemid, $anum) . "'>$subject</a>$sec$rep</td></tr>\n";
}
if ($lday) { $body .= "</table></dd>\n"; }
$body .= "</dl>";
