[dw-free] Convert /misc/whereami to TT
[commit: http://hg.dwscoalition.org/dw-free/rev/515eb2dc34a6]
http://bugs.dwscoalition.org/show_bug.cgi?id=2236
Convert /misc/whereami to use Template Toolkit. Includes some fixes/changes
to the DW::Template infrastructure.
Patch by
mark.
Files modified:
http://bugs.dwscoalition.org/show_bug.cgi?id=2236
Convert /misc/whereami to use Template Toolkit. Includes some fixes/changes
to the DW::Template infrastructure.
Patch by
Files modified:
- cgi-bin/DW/Controller/Misc.pm
- cgi-bin/DW/Request/Apache2.pm
- cgi-bin/DW/Template/Apache2.pm
- cgi-bin/LJ/Lang.pm
- htdocs/misc/render_sitescheme.bml
- htdocs/misc/whereami.bml
- htdocs/misc/whereami.bml.text
- views/error.tt
- views/misc/whereami.tt
- views/misc/whereami.tt.text
--------------------------------------------------------------------------------
diff -r 1b0b57545725 -r 515eb2dc34a6 cgi-bin/DW/Controller/Misc.pm
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/cgi-bin/DW/Controller/Misc.pm Wed Dec 16 03:23:02 2009 +0000
@@ -0,0 +1,70 @@
+#!/usr/bin/perl
+#
+# DW::Controller::Misc
+#
+# This controller is for miscellaneous, tiny pages that don't have much in the
+# way of actions. Things that aren't hard to do and can be done in 10-20 lines.
+# If the page you want to create is bigger, please consider creating its own
+# file to house it.
+#
+# Authors:
+# Mark Smith <mark@dreamwidth.org>
+#
+# Copyright (c) 2009 by Dreamwidth Studios, LLC.
+#
+# This program is free software; you may redistribute it and/or modify it under
+# the same terms as Perl itself. For a copy of the license, please reference
+# 'perldoc perlartistic' or 'perldoc perlgpl'.
+#
+
+package DW::Controller::Misc;
+
+use strict;
+use warnings;
+use DW::Routing::Apache2;
+use DW::Template::Apache2;
+
+DW::Routing::Apache2->register_string( '/misc/whereami', \&whereami_handler, app => 1 );
+
+# redirects the user to the login page to handle that eventuality
+sub needlogin {
+ my $r = DW::Request->get;
+
+ my $uri = $r->uri;
+ if ( my $qs = $r->query_string ) {
+ $uri .= '?' . $qs;
+ }
+ $uri = LJ::eurl( $uri );
+
+ $r->header_out( Location => "$LJ::SITEROOT/?returnto=$uri" );
+ return $r->REDIRECT;
+}
+
+# returns an error page using a language string
+sub error_ml {
+ return DW::Template::Apache2->render_template(
+ DW::Request->get->r, 'error.tt', { message => LJ::Lang::ml( $_[0] ) }
+ );
+}
+
+# handles the /misc/whereami page
+sub whereami_handler {
+ my $r = DW::Request->get;
+
+ my $remote = LJ::get_remote()
+ or return needlogin();
+ my $u = LJ::get_authas_user( $r->get_args->{authas} || $remote->user )
+ or return error_ml( 'error.invalidauth' );
+
+ my $vars = {
+ user => $u,
+ cluster_name => $LJ::CLUSTER_NAME{$u->clusterid} || LJ::Lang::ml( '.cluster.unknown' ),
+ authas_html => LJ::make_authas_select( $remote, { authas => $u->user } ),
+ };
+
+ return DW::Template::Apache2->render_template(
+ $r->r, 'misc/whereami.tt', $vars, {}
+ );
+}
+
+1;
diff -r 1b0b57545725 -r 515eb2dc34a6 cgi-bin/DW/Request/Apache2.pm
--- a/cgi-bin/DW/Request/Apache2.pm Tue Dec 15 05:49:51 2009 +0000
+++ b/cgi-bin/DW/Request/Apache2.pm Wed Dec 16 03:23:02 2009 +0000
@@ -212,6 +212,12 @@ sub read {
return $ret;
}
+# return the internal Apache2 request object
+sub r {
+ my DW::Request::Apache2 $self = $_[0];
+ return $self->{r};
+}
+
# constants
sub OK {
my DW::Request::Apache2 $self = $_[0];
diff -r 1b0b57545725 -r 515eb2dc34a6 cgi-bin/DW/Template/Apache2.pm
--- a/cgi-bin/DW/Template/Apache2.pm Tue Dec 15 05:49:51 2009 +0000
+++ b/cgi-bin/DW/Template/Apache2.pm Wed Dec 16 03:23:02 2009 +0000
@@ -56,7 +56,7 @@ my $view_engine = Template->new({
roots => $roots_constants,
},
FILTERS => {
- ml => [ \&ml, 0 ],
+ ml => [ \&ml, 1 ],
},
CACHE_SIZE => $LJ::TEMPLATE_CACHE_SIZE, # this can be undef, and that means cache everything.
STAT_TTL => $LJ::IS_DEV_SERVER ? 1 : 3600,
@@ -82,7 +82,8 @@ sub template_string {
$r->note('ml_scope',"/$filename") unless $r->note('ml_scope');
my $out;
- $view_engine->process( $filename, $opts, \$out ) or die $view_engine->error();
+ $view_engine->process( $filename, $opts, \$out )
+ or die Template->error();
return $out;
}
@@ -248,12 +249,21 @@ sub ml_scope {
=cut
sub ml {
- my ( $code, $vars ) = @_;
- my $r = DW::Request->get;
- $code = $r->note( 'ml_scope' ) . $code if rindex($code, '.', 0) == 0;
- my $lang = decide_language();
- return $code if $lang eq 'debug';
- LJ::Lang::get_text( $lang, $code, undef, $vars );
+ # save the last argument as the hashref, hopefully
+ my $args = $_[-1];
+ $args = {} unless $args && ref $args eq 'HASH';
+
+ # we have to return a sub here since we are a dynamic filter
+ return sub {
+ my ( $code ) = @_;
+
+ $code = DW::Request->get->note( 'ml_scope' ) . $code
+ if rindex( $code, '.', 0 ) == 0;
+
+ my $lang = decide_language();
+ return $code if $lang eq 'debug';
+ return LJ::Lang::get_text( $lang, $code, undef, $args );
+ };
}
sub decide_language {
diff -r 1b0b57545725 -r 515eb2dc34a6 cgi-bin/LJ/Lang.pm
--- a/cgi-bin/LJ/Lang.pm Tue Dec 15 05:49:51 2009 +0000
+++ b/cgi-bin/LJ/Lang.pm Wed Dec 16 03:23:02 2009 +0000
@@ -547,6 +547,10 @@ sub get_text
my $file;
($file, $localcode) = ("$LJ::HTDOCS$1", $2);
@files = ("$file.text.local", "$file.text");
+ } elsif ( $code =~ m!^(/.+\.tt)(\..+)! ) {
+ my $file;
+ ( $file, $localcode ) = ( "$LJ::HOME/views$1", $2 );
+ @files = ( "$file.text.local", "$file.text" );
} else {
$localcode = $code;
@files = ("$LJ::HOME/bin/upgrading/$LJ::DEFAULT_LANG.dat",
diff -r 1b0b57545725 -r 515eb2dc34a6 htdocs/misc/render_sitescheme.bml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/htdocs/misc/render_sitescheme.bml Wed Dec 16 03:23:02 2009 +0000
@@ -0,0 +1,42 @@
+<?_c
+#
+# misc/render_sitescheme.bml
+#
+# Internal page to run bml code from a pnote through the BML parser
+# without having to duplicate a fair bit of code.
+#
+# Authors:
+# Andrea Nall <anall@andreanall.com>
+#
+# Copyright (c) 2009 by Dreamwidth Studios, LLC.
+#
+# This program is free software; you may redistribute it and/or modify it under
+# the same terms as Perl itself. For a copy of the license, please reference
+# 'perldoc perlartistic' or 'perldoc perlgpl'.
+#
+_c?>
+<?page
+body<=
+<?_code
+{
+ use strict;
+ use DW::Request;
+ use vars qw/ $title $windowtitle $headextra /;
+
+ my $r = DW::Request->get;
+ my $code = $r->pnote( 'render_sitescheme_code' );
+ my $extras = $r->pnote( 'render_sitescheme_extra' );
+ return BML::redirect($LJ::SITEROOT) unless $code;
+
+ $headextra = $extras->{headextra} || "";
+ $title = $extras->{title} || "";
+ $windowtitle = $extras->{windowtitle} || "";
+
+ return BML::ebml($code);
+}
+_code?>
+<=body
+headextra=><?_code return BML::ebml( $headextra ); _code?>
+title=><?_code return BML::ebml( $title ); _code?>
+windowtitle=><?_code return BML::ebml( $windowtitle ); _code?>
+page?>
diff -r 1b0b57545725 -r 515eb2dc34a6 htdocs/misc/whereami.bml
--- a/htdocs/misc/whereami.bml Tue Dec 15 05:49:51 2009 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,46 +0,0 @@
-<?_c
-#
-# misc/whereami.bml
-#
-# User facing "nifty" page to let users see what cluster they're on.
-#
-# Authors:
-# Mark Smith <mark@dreamwidth.org>
-#
-# Copyright (c) 2009 by Dreamwidth Studios, LLC.
-#
-# This program is free software; you may redistribute it and/or modify it under
-# the same terms as Perl itself. For a copy of the license, please reference
-# 'perldoc perlartistic' or 'perldoc perlgpl'.
-#
-_c?><?page
-body<=
-<?_code
-{
- use strict;
-
- # for pages that require authentication
- my $remote = LJ::get_remote()
- or return '<?needlogin?>';
-
- # allow the remote user to authenticate as another account (community, etc)
- my $authas = $GET{authas} || $remote->user;
- my $u = LJ::get_authas_user( $authas );
- return LJ::bad_input( $ML{'error.invalidauth'} )
- unless $u;
-
- # okay, now print out the useful information
- my $cname = $LJ::CLUSTER_NAME{$u->clusterid} || $ML{'.cluster.unknown'};
-
- my $ret = '<?p <?_ml .intro _ml?> p?>';
- $ret .= "<form method='get' id='userpic_authas' action='$LJ::SITEROOT/misc/whereami'>\n";
- $ret .= LJ::make_authas_select($remote, { authas => $GET{authas} }) . "\n";
- $ret .= "</form><br /><?p ";
- $ret .= BML::ml( '.cluster', { cluster => $cname, user => $u->ljuser_display } );
- $ret .= ' p?>';
- return $ret;
-}
-_code?>
-<=body
-title=><?_ml .title _ml?>
-page?>
diff -r 1b0b57545725 -r 515eb2dc34a6 htdocs/misc/whereami.bml.text
--- a/htdocs/misc/whereami.bml.text Tue Dec 15 05:49:51 2009 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,9 +0,0 @@
-;; -*- coding: utf-8 -*-
-
-.cluster=[[user]] is located on the <strong>[[cluster]]</strong>.
-
-.cluster.unknown=Unnamed Cluster
-
-.intro=This site is made up of clusters of servers that store user data. Each of these clusters can contain many tens or hundreds of thousands of different users and communities.
-
-.title=Cluster Locator
diff -r 1b0b57545725 -r 515eb2dc34a6 views/error.tt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/views/error.tt Wed Dec 16 03:23:02 2009 +0000
@@ -0,0 +1,3 @@
+<h1>[% 'Error' | ml %]</h1>
+
+<p><strong>[% message %]</strong></p>
diff -r 1b0b57545725 -r 515eb2dc34a6 views/misc/whereami.tt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/views/misc/whereami.tt Wed Dec 16 03:23:02 2009 +0000
@@ -0,0 +1,9 @@
+<h1>[% '.title' | ml %]</h1>
+
+<p>[% '.intro' | ml %]</p>
+
+<form action='[% roots.site %]/misc/whereami'>
+ [% authas_html %]
+</form><br />
+
+<p>[% '.cluster' | ml(user = user.ljuser_display, cluster = cluster_name) %]</p>
diff -r 1b0b57545725 -r 515eb2dc34a6 views/misc/whereami.tt.text
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/views/misc/whereami.tt.text Wed Dec 16 03:23:02 2009 +0000
@@ -0,0 +1,9 @@
+;; -*- coding: utf-8 -*-
+
+.cluster=[[user]] is located on the <strong>[[cluster]]</strong>.
+
+.cluster.unknown=Unnamed Cluster
+
+.intro=This site is made up of clusters of servers that store user data. Each of these clusters can contain many tens or hundreds of thousands of different users and communities.
+
+.title=Cluster Locator
--------------------------------------------------------------------------------
