[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
![[staff profile]](https://www.dreamwidth.org/img/silk/identity/user_staff.png)
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 --------------------------------------------------------------------------------