summaryrefslogtreecommitdiffstats
path: root/Bugzilla/Quantum/Plugin
diff options
context:
space:
mode:
authorDylan William Hardison <dylan@hardison.net>2018-04-08 01:20:00 +0200
committerDylan William Hardison <dylan@hardison.net>2018-06-28 22:41:55 +0200
commit541e2b41af8cc44ad3eb0638618bc457c666d612 (patch)
tree121866bb37e4b06ffd7320679772d77271158661 /Bugzilla/Quantum/Plugin
parentcdc26a69674ea7a3413efce2f8d4e3225c6ab76e (diff)
downloadbugzilla-541e2b41af8cc44ad3eb0638618bc457c666d612.tar.gz
bugzilla-541e2b41af8cc44ad3eb0638618bc457c666d612.tar.xz
a bit of a quantum leap
It's now possible to load the CGIs into a mojolicious controller. Compatibility isn't 100% yet, but it should give a migration path for any random CGI to become a proper controller.
Diffstat (limited to 'Bugzilla/Quantum/Plugin')
-rw-r--r--Bugzilla/Quantum/Plugin/Glue.pm61
1 files changed, 61 insertions, 0 deletions
diff --git a/Bugzilla/Quantum/Plugin/Glue.pm b/Bugzilla/Quantum/Plugin/Glue.pm
new file mode 100644
index 000000000..d689f598a
--- /dev/null
+++ b/Bugzilla/Quantum/Plugin/Glue.pm
@@ -0,0 +1,61 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# This Source Code Form is "Incompatible With Secondary Licenses", as
+# defined by the Mozilla Public License, v. 2.0.
+
+package Bugzilla::Quantum::Plugin::Glue;
+use Mojo::Base 'Mojolicious::Plugin';
+
+use Try::Tiny;
+use Bugzilla::Constants;
+use Bugzilla::Quantum::CGI;
+use Bugzilla::Quantum::Template;
+
+sub register {
+ my ( $self, $app, $conf ) = @_;
+
+ my $template = Bugzilla::Template->create;
+ $template->{_is_main} = 1;
+
+ $app->renderer->add_handler(
+ 'bugzilla' => sub {
+ my ( $renderer, $c, $output, $options ) = @_;
+ my %params;
+
+ # Helpers
+ foreach my $method ( grep {m/^\w+\z/} keys %{ $renderer->helpers } ) {
+ my $sub = $renderer->helpers->{$method};
+ $params{$method} = sub { $c->$sub(@_) };
+ }
+
+ # Stash values
+ $params{$_} = $c->stash->{$_} for grep {m/^\w+\z/} keys %{ $c->stash };
+ $params{self} = $params{c} = $c;
+ my $name = $options->{template};
+ unless ($name =~ /\./) {
+ $name = sprintf '%s.%s.tmpl', $options->{template}, $options->{format};
+ }
+ $template->process( $name, \%params, $output )
+ or die $template->error;
+ }
+ );
+
+ $app->hook(
+ around_dispatch => sub {
+ my ($next, $c) = @_;
+ try {
+ local %{ Bugzilla->request_cache } = ();
+ Bugzilla->usage_mode(USAGE_MODE_QUANTUM);
+ Bugzilla->cgi( Bugzilla::Quantum::CGI->new(controller => $c) );
+ Bugzilla->template( Bugzilla::Quantum::Template->new( controller => $c, template => $template ) );
+ $next->();
+ } catch {
+ die $_ unless /\bModPerl::Util::exit\b/;
+ };
+ }
+ );
+}
+
+1; \ No newline at end of file