mourningdove/cgi-bin/DW/Controller/Admin/EventOutput.pm
2026-05-24 01:03:05 +00:00

126 lines
3.6 KiB
Perl

#!/usr/bin/perl
#
# DW::Controller::Admin::EventOutput
#
# This controller is for getting a preview of the output for events, for easy debugging.
#
# Authors:
# Afuna <coder.dw@afunamatata.com>
#
# Copyright (c) 2010-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::Admin::EventOutput;
use strict;
use warnings;
use DW::Controller;
use DW::Routing;
use DW::Template;
use DW::Controller::Admin;
use LJ::Event;
use LJ::Subscription;
DW::Routing->register_string( '/admin/eventoutput', \&event_output, app => 1 );
DW::Controller::Admin->register_admin_page(
'/',
path => '/admin/eventoutput',
ml_scope => '/admin/eventoutput-select.tt',
privs => [
sub {
return ( $LJ::IS_DEV_SERVER, LJ::Lang::ml("/admin/index.tt.devserver") );
}
]
);
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( %{ $r->post_args } );
}
else {
my $get = $r->get_args;
my @event_classes = map { $_ => $_ } sort LJ::Event->all_classes;
my %event_map = @event_classes;
my $event = LJ::trim( $get->{event} );
$event = undef unless $event_map{$event};
my $vars = {
eventtypes => \@event_classes,
event => $event,
eventargs => $event ? [ $event->arg_list ] : undef,
};
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 $eventtype = LJ::Event->event_to_etypeid( $post{event} );
my $event = LJ::Event->new_from_raw_params( $eventtype, $ju ? $ju->userid : 0,
$post{arg1}, $post{arg2} );
my $u = LJ::load_user( $post{subscr_user} );
my $subscription_arg1 = int $post{sarg1};
my $subscription_arg2 = int $post{sarg2};
my $html_body = $event->as_email_html($u);
$html_body = LJ::html_newlines($html_body) unless $html_body =~ m!<br!i;
my $fake_subscr = LJ::Subscription->new_from_row(
{
userid => $u->id,
ntypeid => LJ::NotificationMethod::Email->ntypeid,
etypeid => $eventtype,
arg1 => $subscription_arg1,
arg2 => $subscription_arg2,
}
);
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),
send => $event->matches_filter($fake_subscr),
},
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;