X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FController%2FBackgroundJob.pm;h=27a1c69a62f45d0c7d0d7e93ef36838a2af63755;hb=f15f5e4321df31d2279edb480e9c7fc15c3af31c;hp=272e5cba0a2bb55db34f8701adffc794799c591a;hpb=f751112d45469757aa6eac8a540c5e298b001845;p=kivitendo-erp.git diff --git a/SL/Controller/BackgroundJob.pm b/SL/Controller/BackgroundJob.pm index 272e5cba0..27a1c69a6 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; @@ -36,7 +37,7 @@ sub action_list { sub action_new { my ($self) = @_; - $self->background_job(SL::DB::BackgroundJob->new(cron_spec => '* * * * *', package_name => 'Test')); + $self->background_job(SL::DB::BackgroundJob->new(cron_spec => '* * * * *', package_name => 'Test')) unless $self->background_job; $self->setup_form_action_bar; $self->render('background_job/form', title => $::locale->text('Create a new background job'), @@ -52,6 +53,14 @@ sub action_edit { JOB_CLASSES => [ SL::BackgroundJob::Base->get_known_job_classes ]); } +sub action_edit_as_new { + my ($self) = @_; + + delete $::form->{background_job}->{id}; + $self->background_job(SL::DB::BackgroundJob->new(%{ $::form->{background_job} })); + $self->action_new; +} + sub action_show { my ($self) = @_; @@ -110,6 +119,33 @@ 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 $@; + my $job = SL::DB::BackgroundJob->new(data => $::form->{data}); + $job->data(decode_json($::form->{json_data})) if $::form->{json_data}; + $result = $package->new->run($job); + + 1; + }; + + my $reply = { + status => $ok ? 'succeeded' : 'failed', + result => $ok ? $result : $@, + }; + + $self->render(\to_json($reply), { type => 'json' }); +} + # # filters # @@ -222,6 +258,11 @@ sub setup_form_action_bar { t8('Save and execute'), submit => [ '#form', { action => 'BackgroundJob/save_and_execute' } ], ], + action => [ + t8('Use as new'), + submit => [ '#form', { action => 'BackgroundJob/edit_as_new' } ], + disabled => $is_new ? t8('The object has not been saved yet.') : undef, + ], ], # end of combobox "Save" action => [