my $self = shift;
my $url = $self->url_for(@_);
- print $::cgi->redirect($url);
+ if ($self->delay_flash_on_redirect) {
+ require SL::Helper::Flash;
+ SL::Helper::Flash::delay_flash();
+ }
+
+ print $::request->{cgi}->redirect($url);
}
sub render {
if ($options->{inline}) {
$source = \$template;
+ } elsif($options->{raw}) {
+ $source = $template;
+
} else {
$source = "templates/webpages/${template}." . $options->{type};
croak "Template file ${source} not found" unless -f $source;
}
my %params = ( %locals,
- AUTH => $::auth,
- FLASH => $::form->{FLASH},
- FORM => $::form,
- LOCALE => $::locale,
- LXCONFIG => \%::lx_office_conf,
- LXDEBUG => $::lxdebug,
- MYCONFIG => \%::myconfig,
- SELF => $self,
+ AUTH => $::auth,
+ FLASH => $::form->{FLASH},
+ FORM => $::form,
+ INSTANCE_CONF => $::instance_conf,
+ LOCALE => $::locale,
+ LXCONFIG => \%::lx_office_conf,
+ LXDEBUG => $::lxdebug,
+ MYCONFIG => \%::myconfig,
+ SELF => $self,
);
my $output;
- my $parser = $self->_template_obj;
- $parser->process($source, \%params, \$output) || croak $parser->error;
+ if (!$options->{raw}) {
+ my $parser = $self->_template_obj;
+ $parser->process($source, \%params, \$output) || croak $parser->error;
+ } else {
+ $output = $$source;
+ }
print $output unless $options->{inline} || $options->{no_output};
}
}
+#
+# behaviour. override these
+#
+
+sub delay_flash_on_redirect {
+ 0;
+}
+
#
# private functions -- for use in Base only
#
my $action = first { $::form->{"action_${_}"} } @actions;
my $sub = "action_${action}";
- $self->_run_hooks('before', $action);
- $self->$sub(@_);
- $self->_run_hooks('after', $action);
+ if ($self->can($sub)) {
+ $self->_run_hooks('before', $action);
+ $self->$sub(@_);
+ $self->_run_hooks('after', $action);
+ } else {
+ $::form->error($::locale->text('Oops. No valid action found to dispatch. Please report this case to the Lx-Office team.'));
+ }
}
sub _template_obj {
will not be sent to the browser. Instead it is only returned to the
caller.
+If C<< $options->{raw} >> is trueish, the function will treat the input as
+already parsed, and will not filter the input through Template. Unlike
+C<inline>, the input is taked as a reference.
+
If C<< $options->{inline} >> is falsish then C<$template> is
interpreted as the name of a template file. It is prefixed with
"templates/webpages/" and postfixed with a file extension based on
The hook's return values are discarded.
+=item delay_flash_on_redirect
+
+May be overridden by a controller. If this method returns true, redirect_to
+will delay all flash messages for the current request. Defaults to false for
+compatibility reasons.
+
=back
=head2 PRIVATE FUNCTIONS