CSV-Import Lieferadressen: Funktion gefixt
[kivitendo-erp.git] / SL / Controller / Base.pm
index f99b1e7..64ac328 100644 (file)
@@ -10,6 +10,11 @@ use List::Util qw(first);
 use SL::Request qw(flatten);
 use SL::MoreCommon qw(uri_encode);
 
 use SL::Request qw(flatten);
 use SL::MoreCommon qw(uri_encode);
 
+use Rose::Object::MakeMethods::Generic
+(
+  scalar => [ qw(action_name) ],
+);
+
 #
 # public/helper functions
 #
 #
 # public/helper functions
 #
@@ -20,7 +25,7 @@ sub url_for {
   return $_[0] if (scalar(@_) == 1) && !ref($_[0]);
 
   my %params      = ref($_[0]) eq 'HASH' ? %{ $_[0] } : @_;
   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;
   my $action      = $params{action}             || 'dispatch';
 
   my $script;
@@ -79,7 +84,7 @@ sub render {
 
     } else {
       $::form->{title} = $locals{title} if $locals{title};
 
     } 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;
 }
 
   $file->close;
 }
 
+sub controller_name {
+  my $class = ref($_[0]) || $_[0];
+  $class    =~ s/^SL::Controller:://;
+  return $class;
+}
+
 #
 # Before/after run hooks
 #
 #
 # Before/after run hooks
 #
@@ -160,10 +171,10 @@ sub _run_hooks {
          || ($hook->{except} &&  $hook->{except}->{$action});
 
     if (ref($hook->{code}) eq 'CODE') {
          || ($hook->{except} &&  $hook->{except}->{$action});
 
     if (ref($hook->{code}) eq 'CODE') {
-      $hook->{code}->($self);
+      $hook->{code}->($self, $action);
     } else {
       my $sub = $hook->{code};
     } else {
       my $sub = $hook->{code};
-      $self->$sub;
+      $self->$sub($action);
     }
   }
 }
     }
   }
 }
@@ -198,15 +209,12 @@ sub _run_action {
 
   $::form->error("Invalid action '${action}' for controller " . ref($self)) if !$self->can($sub);
 
 
   $::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);
 }
 
   $self->_run_hooks('before', $action);
   $self->$sub(@_);
   $self->_run_hooks('after', $action);
 }
 
-sub _controller_name {
-  return (split(/::/, ref($_[0])))[-1];
-}
-
 sub _dispatch {
   my $self    = shift;
 
 sub _dispatch {
   my $self    = shift;
 
@@ -216,11 +224,12 @@ sub _dispatch {
   my $sub     = "action_${action}";
 
   if ($self->can($sub)) {
   my $sub     = "action_${action}";
 
   if ($self->can($sub)) {
+    $self->action_name($action);
     $self->_run_hooks('before', $action);
     $self->$sub(@_);
     $self->_run_hooks('after', $action);
   } else {
     $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.'));
+    $::form->error($::locale->text('Oops. No valid action found to dispatch. Please report this case to the kivitendo team.'));
   }
 }
 
   }
 }
 
@@ -236,6 +245,7 @@ sub _template_obj {
                     INCLUDE_PATH => '.:templates/webpages',
                     COMPILE_EXT  => '.tcc',
                     COMPILE_DIR  => $::lx_office_conf{paths}->{userspath} . '/templates-cache',
                     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};
                   }) || croak;
 
   return $self->{__basepriv_template_obj};
@@ -328,6 +338,10 @@ hooks themselves are run as instance methods.
 
 Hooks are run in the order they're added.
 
 
 Hooks are run in the order they're added.
 
+The hooks receive a single parameter: the name of the action that is
+about to be called (for C<before> hooks) / was called (for C<after>
+hooks).
+
 The return value of the hooks is discarded.
 
 Hooks can be defined to run for all actions, for only specific actions
 The return value of the hooks is discarded.
 
 Hooks can be defined to run for all actions, for only specific actions
@@ -396,7 +410,7 @@ The template itself has access to the following variables:
 
 =item * C<LOCALE> -- C<$::locale>
 
 
 =item * C<LOCALE> -- C<$::locale>
 
-=item * C<LXCONFIG> -- all parameters from C<config/lx_office.conf>
+=item * C<LXCONFIG> -- all parameters from C<config/kivitendo.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)
 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)
@@ -464,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
 
 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>.
 
 The action to call is given by C<$params{action}>. It defaults to
 C<dispatch>.
@@ -537,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.
 
 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
 =back
 
 =head2 PRIVATE FUNCTIONS
@@ -545,11 +571,6 @@ These functions are supposed to be used from this base class only.
 
 =over 4
 
 
 =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
 =item C<_dispatch>
 
 Implements the method lookup for indirect dispatching mentioned in the