[dw-free] convert htdocs/invite.bml to TT
[commit: http://hg.dwscoalition.org/dw-free/rev/499ca7b84a26]
http://bugs.dwscoalition.org/show_bug.cgi?id=3954
BML file -> controller and .tt files.
Patch by
kareila.
Files modified:
http://bugs.dwscoalition.org/show_bug.cgi?id=3954
BML file -> controller and .tt files.
Patch by
![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Files modified:
- cgi-bin/DW/Controller/InviteCodes.pm
- cgi-bin/DW/Template/Plugin/FormHTML.pm
- htdocs/invite.bml
- htdocs/invite.bml.text
- views/invite/index.tt
- views/invite/index.tt.text
-------------------------------------------------------------------------------- diff -r 3c1dde8411c1 -r 499ca7b84a26 cgi-bin/DW/Controller/InviteCodes.pm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cgi-bin/DW/Controller/InviteCodes.pm Mon Oct 03 13:44:00 2011 +0800 @@ -0,0 +1,96 @@ +#!/usr/bin/perl +# +# DW::Controller::InviteCodes +# +# Tools for managing invite codes, including generating an image +# that shows the current status of a given invite code. +# +# Authors: +# Jen Griffin <kareila@livejournal.com> +# +# Copyright (c) 2011 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::InviteCodes; + +use strict; +use DW::Routing; +use DW::Template; +use DW::Controller; + +use DW::InviteCodes; +use DW::InviteCodeRequests; +use DW::BusinessRules::InviteCodeRequests; + +DW::Routing->register_string( '/invite/index', \&management_handler, app => 1 ); + +sub management_handler { + my $r = DW::Request->get; + my ( $ok, $rv ) = controller(); + return $rv unless $ok; + + my $remote = $rv->{remote}; + + # check whether we requested more invite codes + if ( LJ::did_post() ) { + my $args = $r->post_args; + return error_ml( 'error.invalidform' ) + unless LJ::check_form_auth( $args->{lj_form_auth} ); + + if ( DW::InviteCodeRequests->create( userid => $remote->id, reason => $args->{reason} ) ) { + $rv->{req_yes} = 1; + } else { + $rv->{req_no} = 1; + } + } + + $rv->{print_req_form} = DW::BusinessRules::InviteCodeRequests::can_request( user => $remote ); + $rv->{view_full} = $r->get_args->{full}; + + my @invitecodes = DW::InviteCodes->by_owner( userid => $remote->id ); + + my @recipient_ids; + foreach my $code ( @invitecodes ) { + push @recipient_ids, $code->recipient if $code->recipient; + } + + my $recipient_users = LJ::load_userids( @recipient_ids ); + + unless ( $rv->{view_full} ) { + # filter out codes that were used over two weeks ago + my $two_weeks_ago = time() - ( 14 * 24 * 60 * 60 ); + @invitecodes = grep { + my $u = $recipient_users->{$_->recipient}; + # if it's used, we should always have a recipient, but... + ! $_->is_used || ( $u && $u->timecreate ) > $two_weeks_ago + } @invitecodes; + } + + # sort so that invite codes end up in this order: + # - unsent and unused + # - sent but unused, with earliest sent first + # - used + @invitecodes = sort { + return $a->is_used <=> $b->is_used if $a->is_used != $b->is_used; + return $a->timesent <=> $b->timesent; + } @invitecodes; + + $rv->{has_codes} = scalar @invitecodes; + $rv->{invitecodes} = \@invitecodes; + $rv->{users} = $recipient_users; + + $rv->{create_link} = sub { + my ( $code ) = @_; + my $root = $LJ::USE_SSL ? $LJ::SSLROOT : $LJ::SITEROOT; + return "$root/create?from=$remote->{user}&code=$code"; + }; + $rv->{time_to_http} = sub { return $_[0] ? LJ::time_to_http( $_[0] ) : '' }; + + return DW::Template->render_template( 'invite/index.tt', $rv ); +} + +1; diff -r 3c1dde8411c1 -r 499ca7b84a26 cgi-bin/DW/Template/Plugin/FormHTML.pm --- a/cgi-bin/DW/Template/Plugin/FormHTML.pm Mon Oct 03 13:41:38 2011 +0800 +++ b/cgi-bin/DW/Template/Plugin/FormHTML.pm Mon Oct 03 13:44:00 2011 +0800 @@ -155,6 +155,19 @@ return $ret; } +=head2 [% form.submit( name =... ) %] + +Return a button for submitting a form. Values are prepopulated by the plugin's datasource. + +=cut + +sub submit { + my ( $self, $args ) = @_; + + $self->_process_value_and_label( $args ); + return LJ::html_submit( delete $args->{name}, delete $args->{value}, $args ); +} + =head2 [% form.textarea( label=... ) %] Return a textarea with a matching label, if provided. Values are prepopulated diff -r 3c1dde8411c1 -r 499ca7b84a26 htdocs/invite.bml --- a/htdocs/invite.bml Mon Oct 03 13:41:38 2011 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,138 +0,0 @@ -<?_c -# -# manage/invitecodes.bml -# -# Invite code management system (user-facing). -# -# Authors: -# Afuna <coder.dw@afunamatata.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 -title=>Invite Codes -body<= -<?_code -{ - use strict; - - return LJ::server_down_html() if ($LJ::SERVER_DOWN); - - my $remote = LJ::get_remote(); - return "<?needlogin?>" - unless $remote; - - my $ret; - - if ( LJ::did_post() ) { - return "<?h1 $ML{'Error'} ?h1> $ML{'error.invalidform'}" unless LJ::check_form_auth(); - if ( DW::InviteCodeRequests->create( userid => $remote->id, reason => $POST{reason} ) ) { - $ret .= "<div class='highlight-box'>$ML{'.msg.request.success'}</div>"; - } else { - $ret .= "<?errorbar $ML{'.msg.request.error'} errorbar?>"; - } - } - - if ( DW::BusinessRules::InviteCodeRequests::can_request( user => $remote ) ) { - $ret .= "<?h2 $ML{'.form.request.header'} h2?>"; - $ret .= "<?p $ML{'.form.request.intro'} p?>"; - $ret .= "<div><form method='POST'>"; - $ret .= LJ::form_auth(); - $ret .= LJ::labelfy( 'reason', $ML{'.form.request.reason'} ); - $ret .= LJ::html_text( { name => 'reason', id => 'reason', size => 75, maxlength => 255 } ); - $ret .= LJ::html_submit( value => $ML{'.form.request.submit'} ); - $ret .= "</form></div>"; - } - - if ( $GET{full} ) { - $ret .= "<p>" . LJ::Lang::ml( '.label.viewing.full', { aopts => "href='/invite'" } ) . "</p>"; - } else { - $ret .= "<p>" . LJ::Lang::ml( '.label.viewing.partial', { aopts => "href='/invite?full=1'" } ) . "</p>"; - } - - my @invitecodes = DW::InviteCodes->by_owner( userid => $remote->id ); - - my @recipient_ids; - foreach my $code ( @invitecodes ) { - push @recipient_ids, $code->recipient if $code->recipient; - } - - my $recipient_users = LJ::load_userids( @recipient_ids ); - - unless ( $GET{full} ) { - # filter out codes that were used over two weeks ago - my $two_weeks_ago = time() - ( 14 * 24 * 60 * 60 ); - @invitecodes = grep { - my $u = $recipient_users->{$_->recipient}; - # if it's used, we should always have a recipient, but... - ! $_->is_used || ( $u && $u->timecreate ) > $two_weeks_ago - } @invitecodes; - } - - if ( @invitecodes ) { - - $ret .= "<p>" . LJ::Lang::ml( '.label.send', { aopts => "href='/manage/circle/invite'" } ) . "</p>"; - - # sort so that invite codes end up in this order: - # - unsent and unused - # - sent but unused, with earliest sent first - # - used - @invitecodes = sort { - return $a->is_used <=> $b->is_used if $a->is_used != $b->is_used; - return $a->timesent <=> $b->timesent; - } @invitecodes; - - - $ret .= "<table class='invitecodes' id='invitecodes'><thead><tr><th>$ML{'.header.code'}</th><th>$ML{'.header.recipient'}</th><th width='200'>$ML{'.header.used'}</th><th width='200'>$ML{'.header.sent'}</th><th>$ML{'.header.email'}</th></tr></thead>"; - - foreach my $code ( @invitecodes ) { - $ret .= "<tr>"; - $ret .= "<td><tt>".$code->code."</tt></td>"; - $ret .= "<td>"; - - if( $code->is_used ) { - my $u = $recipient_users->{$code->recipient}; - $ret .= $u->ljuser_display; - } else { - my $create_link = ($LJ::USE_SSL ? $LJ::SSLROOT : $LJ::SITEROOT) - . "/create?from=$remote->{user}&code=".$code->code; - $ret .= BML::ml( '.code.use', { aopts => "href='$create_link'" } ); - } - - $ret .= "</td>"; - - $ret .= "<td>"; - if ( $code->is_used ) { - my $u = $recipient_users->{$code->recipient}; - my $timeused = $u->timecreate; - $ret .= LJ::time_to_http( $timeused ) if $timeused; - } - $ret .= "</td>"; - - $ret .= "<td>"; - $ret .= LJ::time_to_http( $code->timesent ) if $code->timesent; - $ret .= "</td>"; - - $ret .= "<td>"; - $ret .= $code->email; - $ret .= "</td>"; - - $ret .= "</tr>"; - } - - $ret .= "</table>"; - } elsif ( $GET{full} ) { - $ret .= "<?p $ML{'.noinvitecodes'} p?>"; - } else { - $ret .= "<?p $ML{'.noinvitecodes.partial'} p?>"; - } - - return $ret; -} _code?> -<=body -page?> diff -r 3c1dde8411c1 -r 499ca7b84a26 htdocs/invite.bml.text --- a/htdocs/invite.bml.text Mon Oct 03 13:41:38 2011 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,35 +0,0 @@ -;; -*- coding: utf-8 -*- -.code.use=<a [[aopts]]>Use this code</a> - -.form.request.header=Request More Invite Codes - -.form.request.intro=Are you out of invite codes but still know people you'd like to invite to our site? Enter a short message below to ask for an invite, and a site administrator will review your request. - -.form.request.reason=Reason: - -.form.request.submit=Request invites: - -.header.code=Code: - -.header.email=Sent to email: - -.header.recipient=Recipient: - -.header.sent=Sent on: - -.header.used=Used on: - -.label.send=You can <a [[aopts]]>email an invite code to a friend.</a> - -.label.viewing.full=Here is a full list of your invite codes. See only those which are <a [[aopts]]>unused, or used but recently sent</a>. - -.label.viewing.partial=Here are your unused and recently sent invite codes. See the <a [[aopts]]>full list of your invite codes</a>. - -.msg.request.error=Your request didn't go through. - -.msg.request.success=Your request for new invite codes has been forwarded to site administrators for review. - -.noinvitecodes=You don't have any invite codes. - -.noinvitecodes.partial=You have no unused or recently sent invite codes. - diff -r 3c1dde8411c1 -r 499ca7b84a26 views/invite/index.tt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/views/invite/index.tt Mon Oct 03 13:44:00 2011 +0800 @@ -0,0 +1,77 @@ +[%# TT conversion of manage/invitecodes.bml + # Invite code management system (user-facing). + # + # Authors: + # Jen Griffin <kareila@livejournal.com> + # + # Copyright (c) 2011 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'. + # +%] + +[%- sections.title='.title' | ml -%] + +[%- IF req_yes -%] + <div class='highlight-box'>[% '.msg.request.success' | ml %]</div> +[%- ELSIF req_no -%] + <div class='error-box'>[% '.msg.request.error' | ml %]</div> +[%- END -%] + +[%- IF print_req_form -%] + <h2>[% '.form.request.header' | ml %]</h2> + <p>[% '.form.request.intro' | ml %]</p> + <div><form method='POST'> + [% dw.form_auth; + reason_label = '.form.request.reason' | ml; + submit_label = '.form.request.submit' | ml; + form.textbox( label = reason_label, name = 'reason', id = 'reason', + size = 75, maxlength = 255 ); + form.submit( value = submit_label ) %] + </form></div> +[%- END -%] + +[%- IF view_full; + viewing_label = '.label.viewing.full' | ml(aopts = "href='/invite'"); + ELSE; + viewing_label = '.label.viewing.partial' | ml(aopts = "href='/invite?full=1'"); + END -%] +<p>[% viewing_label %]</p> + +[%- IF has_codes -%] + <p>[% '.label.send' | ml(aopts = "href='/manage/circle/invite'") %]</p> + <table class='invitecodes' id='invitecodes'> + <thead><tr> + <th>[% '.header.code' | ml %]</th> + <th>[% '.header.recipient' | ml %]</th> + <th width='200'>[% '.header.used' | ml %]</th> + <th width='200'>[% '.header.sent' | ml %]</th> + <th>[% '.header.email' | ml %]</th> + </tr></thead> + + [%- FOREACH code = invitecodes; + IF code.is_used; recuser = code.recipient; END -%] + <tr> + <td><tt>[% code.code %]</tt></td> + <td> + [%- IF code.is_used; + users.$recuser.ljuser_display; + ELSE; + link = create_link( code.code ); + '.code.use' | ml(aopts = "href='$link'"); + END -%] + </td><td> + [% IF code.is_used; time_to_http( users.$recuser.timecreate ); END %] + </td><td> + [% time_to_http( code.timesent ) %] + </td><td>[% code.email %]</td> + </tr> + [% END %] + </table> + +[%- ELSE -%] + <p>[% IF view_full; '.noinvitecodes' | ml; + ELSE; '.noinvitecodes.partial' | ml; END %]</p> +[%- END -%] diff -r 3c1dde8411c1 -r 499ca7b84a26 views/invite/index.tt.text --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/views/invite/index.tt.text Mon Oct 03 13:44:00 2011 +0800 @@ -0,0 +1,36 @@ +;; -*- coding: utf-8 -*- +.code.use=<a [[aopts]]>Use this code</a> + +.form.request.header=Request More Invite Codes + +.form.request.intro=Are you out of invite codes but still know people you'd like to invite to our site? Enter a short message below to ask for an invite, and a site administrator will review your request. + +.form.request.reason=Reason: + +.form.request.submit=Request invites: + +.header.code=Code: + +.header.email=Sent to email: + +.header.recipient=Recipient: + +.header.sent=Sent on: + +.header.used=Used on: + +.label.send=You can <a [[aopts]]>email an invite code to a friend.</a> + +.label.viewing.full=Here is a full list of your invite codes. See only those which are <a [[aopts]]>unused, or used but recently sent</a>. + +.label.viewing.partial=Here are your unused and recently sent invite codes. See the <a [[aopts]]>full list of your invite codes</a>. + +.msg.request.error=Your request didn't go through. + +.msg.request.success=Your request for new invite codes has been forwarded to site administrators for review. + +.noinvitecodes=You don't have any invite codes. + +.noinvitecodes.partial=You have no unused or recently sent invite codes. + +.title=Invite Codes --------------------------------------------------------------------------------