From d83769ecaa47a005082efd22607458cae8ab87a6 Mon Sep 17 00:00:00 2001 From: Moritz Bunkus Date: Thu, 18 Jul 2019 13:46:36 +0200 Subject: [PATCH] =?utf8?q?Hintergrundjobs:=20Controller-Action=20zur=20ein?= =?utf8?q?maligen=20Ausf=C3=BChrung=20eines=20Jobs?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Gedacht für Aufruf von extern, gibt JSON zurück. Beispiel: curl --silent --user ":" \ 'https:///kivitendo/controller.pl?action=BackgroundJob/execute_class&class=CleanAuthSessions' --- SL/Controller/BackgroundJob.pm | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/SL/Controller/BackgroundJob.pm b/SL/Controller/BackgroundJob.pm index 7e16a1772..e97b36970 100644 --- a/SL/Controller/BackgroundJob.pm +++ b/SL/Controller/BackgroundJob.pm @@ -8,6 +8,7 @@ use SL::BackgroundJob::Base; use SL::Controller::Helper::GetModels; use SL::DB::BackgroundJob; use SL::Helper::Flash; +use SL::JSON; use SL::Locale::String; use SL::System::TaskServer; @@ -118,6 +119,31 @@ sub action_execute { back_to => $self->url_for(action => 'edit', id => $self->background_job->id)); } +sub action_execute_class { + my ($self) = @_; + + my $result; + + my $ok = eval { + die "no class name given in parameter 'class'" if !$::form->{class} || ($::form->{class} =~ m{[^a-z0-9]}i); + die "invalid class" if ! -f "SL/BackgroundJob/" . $::form->{class} . ".pm"; + + my $package = "SL::BackgroundJob::" . $::form->{class}; + + eval "require $package" or die $@; + $result = $package->new->run(SL::DB::BackgroundJob->new); + + 1; + }; + + my $reply = { + status => $ok ? 'succeeded' : 'failed', + result => $ok ? $result : $@, + }; + + $self->render(\to_json($reply), { type => 'json' }); +} + # # filters # -- 2.20.1