"Löschen"-Knopf anzeigen in Mandantenkonfiguration einstellbar
[kivitendo-erp.git] / SL / Controller / Base.pm
index 4dace86..7fe1d36 100644 (file)
@@ -10,6 +10,11 @@ use List::Util qw(first);
 use SL::Request qw(flatten);
 use SL::MoreCommon qw(uri_encode);
 
+use Rose::Object::MakeMethods::Generic
+(
+  scalar => [ qw(action_name) ],
+);
+
 #
 # public/helper functions
 #
@@ -20,7 +25,7 @@ sub url_for {
   return $_[0] if (scalar(@_) == 1) && !ref($_[0]);
 
   my %params      = ref($_[0]) eq 'HASH' ? %{ $_[0] } : @_;
-  my $controller  = delete($params{controller}) || $self->_controller_name;
+  my $controller  = delete($params{controller}) || $self->controller_name;
   my $action      = $params{action}             || 'dispatch';
 
   my $script;
@@ -79,7 +84,7 @@ sub render {
 
     } else {
       $::form->{title} = $locals{title} if $locals{title};
-      $::form->header;
+      $::form->header(no_menu => $options->{no_menu});
     }
   }
 
@@ -124,6 +129,12 @@ sub send_file {
   $file->close;
 }
 
+sub controller_name {
+  my $class = ref($_[0]) || $_[0];
+  $class    =~ s/^SL::Controller:://;
+  return $class;
+}
+
 #
 # Before/after run hooks
 #
@@ -198,15 +209,12 @@ sub _run_action {
 
   $::form->error("Invalid action '${action}' for controller " . ref($self)) if !$self->can($sub);
 
+  $self->action_name($action);
   $self->_run_hooks('before', $action);
   $self->$sub(@_);
   $self->_run_hooks('after', $action);
 }
 
-sub _controller_name {
-  return (split(/::/, ref($_[0]) || $_[0]))[-1];
-}
-
 sub _dispatch {
   my $self    = shift;
 
@@ -216,6 +224,7 @@ sub _dispatch {
   my $sub     = "action_${action}";
 
   if ($self->can($sub)) {
+    $self->action_name($action);
     $self->_run_hooks('before', $action);
     $self->$sub(@_);
     $self->_run_hooks('after', $action);
@@ -236,6 +245,7 @@ sub _template_obj {
                     INCLUDE_PATH => '.:templates/webpages',
                     COMPILE_EXT  => '.tcc',
                     COMPILE_DIR  => $::lx_office_conf{paths}->{userspath} . '/templates-cache',
+                    ERROR        => 'templates/webpages/generic/exception.html',
                   }) || croak;
 
   return $self->{__basepriv_template_obj};
@@ -468,7 +478,7 @@ parameter or as a normal hash.
 
 The controller to call is given by C<$params{controller}>. It defaults
 to the current controller as returned by
-L</_controller_name>.
+L</controller_name>.
 
 The action to call is given by C<$params{action}>. It defaults to
 C<dispatch>.
@@ -541,6 +551,18 @@ variables whose name starts with C<{AUTH}> are removed before the
 request is routed. Only controllers that handle login requests
 themselves should return trueish for this function.
 
+=item C<controller_name>
+
+Returns the name of the curernt controller package without the
+C<SL::Controller::> prefix. This method can be called both as a class
+method and an instance method.
+
+=item C<action_name>
+
+Returns the name of the currently executing action. If the dispatcher
+mechanism was used then this is not C<dispatch> but the actual method
+name the dispatching resolved to.
+
 =back
 
 =head2 PRIVATE FUNCTIONS
@@ -549,11 +571,6 @@ These functions are supposed to be used from this base class only.
 
 =over 4
 
-=item C<_controller_name>
-
-Returns the name of the curernt controller package without the
-C<SL::Controller::> prefix.
-
 =item C<_dispatch>
 
 Implements the method lookup for indirect dispatching mentioned in the