Committer: ailyin
LJSUP-10888 (exception in S2: Method called on null User object)U trunk/cgi-bin/LJ/S2.pm
Modified: trunk/cgi-bin/LJ/S2.pm =================================================================== --- trunk/cgi-bin/LJ/S2.pm 2011-12-28 11:48:51 UTC (rev 20868) +++ trunk/cgi-bin/LJ/S2.pm 2011-12-28 12:28:21 UTC (rev 20869) @@ -134,8 +134,13 @@ $page = $cv->($u, $remote, $opts); } + return if $opts->{'badfriendgroup'}; + return if $opts->{'handler_return'}; + return if $opts->{'readonlyremote'}; + return if $opts->{'readonlyjournal'}; + return if $opts->{'redir'}; return if $opts->{'suspendeduser'}; - return if $opts->{'handler_return'}; + return if $opts->{'suspendedentry'}; # the friends mode=live returns raw HTML in $page, in which case there's # nothing to "run" with s2_run. so $page isn't runnable, return it now. @@ -143,6 +148,20 @@ # like print_stylesheet() won't run, which don't have an method invocant return $page if $page && ref $page ne 'HASH'; + if ( $entry =~ /::/ && !$page ) { + # object methods + my $url = 'http://' . LJ::Request->hostname . LJ::Request->uri; + if ( my $args = LJ::Request->args ) { + $url .= '?' . $args; + } + + my $opts_keys = join( q{, }, sort keys %$opts ); + + die "no page object for $entry, url=$url, opts keys=$opts_keys " . + '(check Perl constructor in the relevant LJ::S2::*Page ' . + 'class first)'; + } + s2_run($r, $ctx, $opts, $entry, $page); if (ref $opts->{'errors'} eq "ARRAY" && @{$opts->{'errors'}}) { @@ -2081,10 +2100,10 @@ 'views_order' => [ 'recent', 'archive', 'friends', 'userinfo' ], 'global_title' => LJ::ehtml($u->{'journaltitle'} || $u->{'name'}), 'global_subtitle' => LJ::ehtml($u->{'journalsubtitle'}), - 'head_content' => LJ::S2::HeadContent::->new({ u => $u, - remote => $remote, - type => 'Page', - opts => $opts, }), + 'head_content' => LJ::S2::HeadContent->new({ u => $u, + remote => $remote, + type => 'Page', + opts => $opts, }), 'data_link' => {}, 'data_links_order' => [], 'showspam' => $get->{mode} eq 'showspam' && LJ::is_enabled('spam_button')