use parent qw(Rose::Object);
use Carp;
+use IO::File;
use List::Util qw(first);
#
my $content_type = $options->{type} eq 'js' ? 'text/javascript' : 'text/html';
print $::form->create_http_response(content_type => $content_type,
- charset => $::dbcharset || Common::DEFAULT_CHARSET());
+ charset => $::lx_office_conf{system}->{dbcharset} || Common::DEFAULT_CHARSET());
} else {
$::form->{title} = $locals{title} if $locals{title};
my %params = ( %locals,
AUTH => $::auth,
+ FLASH => $::form->{FLASH},
FORM => $::form,
LOCALE => $::locale,
- LXCONFIG => { dbcharset => $::dbcharset,
- webdav => $::webdav,
- lizenzen => $::lizenzen,
- latex_templates => $::latex,
- opendocument_templates => $::opendocument_templates,
- vertreter => $::vertreter,
- show_best_before => $::show_best_before,
- },
+ LXCONFIG => \%::lx_office_conf,
LXDEBUG => $::lxdebug,
MYCONFIG => \%::myconfig,
SELF => $self,
return $output;
}
+sub send_file {
+ my ($self, $file_name, %params) = @_;
+
+ my $file = IO::File->new($file_name, 'r') || croak("Cannot open file '${file_name}'");
+ my $content_type = $params{type} || 'application/octet_stream';
+ my $attachment_name = $params{name} || $file_name;
+ $attachment_name =~ s:.*//::g;
+
+ print $::form->create_http_response(content_type => $content_type,
+ content_disposition => 'attachment; filename="' . $attachment_name . '"',
+ content_length => -s $file);
+
+ $::locale->with_raw_io(\*STDOUT, sub { print while <$file> });
+ $file->close;
+}
+
#
# Before/after run hooks
#
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 {
=item * C<LOCALE> -- C<$::locale>
-=item * C<LXCONFIG> -- all parameters from C<config/lx-erp.conf> with
-the same name they appear in the file (e.g. C<dbcharset>, C<webdav>
-etc)
+=item * C<LXCONFIG> -- all parameters from C<config/lx_office.conf>
+with the same name they appear in the file (first level is the
+section, second the actual variable, e.g. C<system.dbcharset>,
+C<features.webdav> etc)
=item * C<LXDEBUG> -- C<$::lxdebug>
$self->render('todo/single_item', { type => 'js' },
item => $employee->most_important_todo_item);
+=item C<send_file $file_name, [%params]>
+
+Sends the file C<$file_name> to the browser including appropriate HTTP
+headers for a download. C<%params> can include the following:
+
+=over 2
+
+=item * C<type> -- the file's content type; defaults to
+'application/octet_stream'
+
+=item * C<name> -- the name presented to the browser; defaults to
+C<$file_name>
+
+=back
+
=item C<url_for $url>
=item C<url_for $params>