fu: Close-up of Fu, bringing a scoop of water to her mouth (Default)
fu ([personal profile] fu) wrote in [site community profile] changelog2010-10-15 11:03 am

[dw-free] Make it easy to look up what the notification will look like (dev servers only)

[commit: http://hg.dwscoalition.org/dw-free/rev/c2eb4fe429bd]

http://bugs.dwscoalition.org/show_bug.cgi?id=3136

New admin page for dev work.

Patch by [personal profile] fu.

Files modified:
  • cgi-bin/DW/Controller/EventOutput.pm
  • views/admin/eventoutput-select.tt
  • views/admin/eventoutput-select.tt.text
  • views/admin/eventoutput.tt
--------------------------------------------------------------------------------
diff -r bdeb70714459 -r c2eb4fe429bd cgi-bin/DW/Controller/EventOutput.pm
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cgi-bin/DW/Controller/EventOutput.pm	Fri Oct 15 19:02:41 2010 +0800
@@ -0,0 +1,89 @@
+#!/usr/bin/perl
+#
+# DW::Controller::EventPreview
+#
+# This controller is for getting a preview of the output for events, for easy debugging.
+#
+# Authors:
+#      Afuna <coder.dw@afunamatata.com>
+#
+# Copyright (c) 2010 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::EventOutput;
+
+use strict;
+use warnings;
+use DW::Controller;
+use DW::Routing;
+use DW::Template;
+
+use LJ::Event;
+
+DW::Routing->register_string( '/admin/eventoutput', \&event_output, app => 1 );
+
+sub event_output {
+    my $r = DW::Request->get;
+
+    # we have no security-checks past this point, so we never want to run this
+    # on a site with actual user data.
+    return $r->NOT_FOUND unless $LJ::IS_DEV_SERVER;
+
+    my ( $ok, $rv ) = controller( authas => 1 );
+    return $rv unless $ok;
+
+    if ( $r->method eq "POST" ) {
+        return handle_post( %{ DW::Request->get->post_args || {} } );
+    } else {
+        my @event_classes = map { 
+                { id    => LJ::Event->event_to_etypeid( $_ ),
+                  name => $_ 
+                }
+            } sort LJ::Event->all_classes;
+        my $vars = {
+            eventtypes => \@event_classes,
+        };
+        return DW::Template->render_template( 'admin/eventoutput-select.tt', $vars );
+    }
+}
+
+sub handle_post {
+    my ( %post ) = @_;
+
+    return error_ml( "error.invalidform" ) unless LJ::check_form_auth( $post{lj_form_auth} );
+
+    my $ju = LJ::load_user( $post{eventuser} );
+    my $event = LJ::Event->new_from_raw_params( $post{eventtype}, $ju ? $ju->userid : 0, $post{arg1}, $post{arg2} );
+
+    my $u = LJ::load_user( $post{subscr_user} );
+
+    my $html_body = $event->as_email_html( $u );
+    $html_body = LJ::html_newlines( $html_body ) unless $html_body =~ m!<br!i;
+    my $vars = {
+        event => {
+            email   => {
+                from        => $event->as_email_from_name( $u ) . " <$LJ::BOGUS_EMAIL>",
+                to          => $u->email_raw,
+                headers     => $event->as_email_headers( $u ),
+                subject     => $event->as_email_subject( $u ),
+                body_html   => $html_body,
+                body_text   => $event->as_email_string( $u ),
+            },
+
+            inbox   => {
+                subject => $event->as_html( $u ),
+                body    => $event->content( $u ),
+                summary => $event->content_summary( $u ),
+            }
+        },
+        su    => $u,
+    };
+
+    return DW::Template->render_template( 'admin/eventoutput.tt', $vars );
+}
+
+1;
diff -r bdeb70714459 -r c2eb4fe429bd views/admin/eventoutput-select.tt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/views/admin/eventoutput-select.tt	Fri Oct 15 19:02:41 2010 +0800
@@ -0,0 +1,49 @@
+[%# eventpreview-select.tt
+
+Page where you can select a particular event to see the format of
+
+Authors:
+    Afuna <coder.dw@afunamatata.com>
+
+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 -%]
+[%- sections.head  = BLOCK %]
+    <style type="text/css">
+    #event label { float: left; width: 10em; clear: left;}
+    #event input, #event select, #event p { float: left; }
+    #event input.submit { clear: left; width: 30em; }
+    #event { overflow: auto;}
+    </style>
+[% END %]
+<form method="POST" id="event">
+    [%- dw.form_auth -%]
+    <div class="formfield">
+        <label for="eventtype">[% ".form.label.eventtype" | ml %]:</label> <select id="eventtype" name="eventtype">
+            [% FOREACH eventtype = eventtypes %]
+                <option value="[% eventtype.id %]">[%eventtype.name %]</option>
+            [% END %]
+        </select>
+    </div>
+
+    <div class="formfield">
+        <label for="eventuser">[% ".form.label.eventuser" | ml %]:</label> <input type="text" name="eventuser" id="eventuser" />
+    </div>
+
+    <div class="formfield">
+        <label for="subscr_user">[% ".form.label.subscr_user" | ml %]:</label> <input type="text" name="subscr_user" id="subscr_user" />
+    </div>
+
+    <div class="formfield">
+        <label for="arg1">[% ".form.label.arg1" | ml %]:</label> <input type="text" name="arg1" id="arg1" /> <p class='note'>[% ".form.optional" | ml %]</p>
+    </div>
+
+    <div class="formfield">
+        <label for="arg2">[% ".form.label.arg2" | ml %]:</label> <input type="text" name="arg2" id="arg2" /> <p class='note'>[% ".form.optional" | ml %]</p>
+    </div>
+
+    <input type="submit" class='submit' />
+</form>
diff -r bdeb70714459 -r c2eb4fe429bd views/admin/eventoutput-select.tt.text
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/views/admin/eventoutput-select.tt.text	Fri Oct 15 19:02:41 2010 +0800
@@ -0,0 +1,13 @@
+.form.label.arg1=First Argument
+
+.form.label.arg2=Second Argument
+
+.form.label.eventtype=Event Type
+
+.form.label.eventuser=Event Journal
+
+.form.label.subscr_user=Subscriber
+
+.form.optional=(optional)
+
+.title=Select Event to Preview
diff -r bdeb70714459 -r c2eb4fe429bd views/admin/eventoutput.tt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/views/admin/eventoutput.tt	Fri Oct 15 19:02:41 2010 +0800
@@ -0,0 +1,36 @@
+[%# eventpreview.tt
+
+Page where you can select a particular event to see the format of
+
+Authors:
+    Afuna <coder.dw@afunamatata.com>
+
+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 = "Event Preview Output" -%]
+[%- sections.head = BLOCK %]
+    <style type="text/css">
+        #content div.field {
+            padding: 0.2em 0.5em 0.2em 1em;
+            margin-bottom: 1em;
+        }
+        #content label { font-weight: bold; }
+    </style>
+[% END %]
+
+<h2>Inbox</h2>
+<label>Subject:</label><div class='field'>[% event.inbox.subject %]</div>
+<label>Body:</label><div class='field'>[% event.inbox.body %]</div>
+<label>Summary:</label><div class='field'>[% event.inbox.summary %]</div>
+
+<h2>Email</h2>
+<label>From:</label><div class='field'>[% event.email.from | html %]</div>
+<label>To:</label><div class='field'>[% event.email.to | html %]</div>
+<label>Headers:</label><div class='field'>[% event.email.headers | html %]</div>
+<label>Subject:</label><div class='field'>[% event.email.subject | html %]</div>
+<label>Body (HTML):</label><div class='field'>[% event.email.body_html %]</div>
+<label>Body (Plain text):</label><div class='field'><textarea rows="20" cols="50">[% event.email.body_text %]</textarea></div>
+
--------------------------------------------------------------------------------
kareila: (Default)

[personal profile] kareila 2010-10-28 02:47 am (UTC)(link)
I just noticed, I don't think this got added to the /admin index?