Den Confirm-Text unter SL::Template::Plugin::L::submit_tag escapen
[kivitendo-erp.git] / SL / Controller / Base.pm
index c871395..4dace86 100644 (file)
@@ -21,11 +21,20 @@ sub url_for {
 
   my %params      = ref($_[0]) eq 'HASH' ? %{ $_[0] } : @_;
   my $controller  = delete($params{controller}) || $self->_controller_name;
 
   my %params      = ref($_[0]) eq 'HASH' ? %{ $_[0] } : @_;
   my $controller  = delete($params{controller}) || $self->_controller_name;
-  my $action      = delete($params{action})     || 'dispatch';
-  $params{action} = "${controller}/${action}";
+  my $action      = $params{action}             || 'dispatch';
+
+  my $script;
+  if ($controller =~ m/\.pl$/) {
+    # Old-style controller
+    $script = $controller;
+  } else {
+    $params{action} = "${controller}/${action}";
+    $script         = "controller.pl";
+  }
+
   my $query       = join '&', map { uri_encode($_->[0]) . '=' . uri_encode($_->[1]) } @{ flatten(\%params) };
 
   my $query       = join '&', map { uri_encode($_->[0]) . '=' . uri_encode($_->[1]) } @{ flatten(\%params) };
 
-  return "controller.pl?${query}";
+  return "${script}?${query}";
 }
 
 sub redirect_to {
 }
 
 sub redirect_to {
@@ -151,10 +160,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);
     }
   }
 }
     }
   }
 }
@@ -172,6 +181,10 @@ sub get_auth_level {
   return 'user';
 }
 
   return 'user';
 }
 
+sub keep_auth_vars_in_form {
+  return 0;
+}
+
 #
 # private functions -- for use in Base only
 #
 #
 # private functions -- for use in Base only
 #
@@ -191,7 +204,7 @@ sub _run_action {
 }
 
 sub _controller_name {
 }
 
 sub _controller_name {
-  return (split(/::/, ref($_[0])))[-1];
+  return (split(/::/, ref($_[0]) || $_[0]))[-1];
 }
 
 sub _dispatch {
 }
 
 sub _dispatch {
@@ -315,6 +328,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
@@ -502,7 +519,7 @@ action.
 
 The hook's return values are discarded.
 
 
 The hook's return values are discarded.
 
-=item delay_flash_on_redirect
+=item C<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
 
 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
@@ -517,6 +534,13 @@ C<user> (authentication as a normal user suffices) with a possible
 future value C<none> (which would require no authentication but is not
 yet implemented).
 
 future value C<none> (which would require no authentication but is not
 yet implemented).
 
+=item C<keep_auth_vars_in_form>
+
+May be overridden by a controller. If falsish (the default) all form
+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.
+
 =back
 
 =head2 PRIVATE FUNCTIONS
 =back
 
 =head2 PRIVATE FUNCTIONS