]> wagnertech.de Git - mfinanz.git/blob - SL/BackgroundJob/SyncEmailFolder.pm
restart apache2 in postinst
[mfinanz.git] / SL / BackgroundJob / SyncEmailFolder.pm
1 package SL::BackgroundJob::SyncEmailFolder;
2
3 use strict;
4 use warnings;
5
6 use parent qw(SL::BackgroundJob::Base);
7
8 use Params::Validate qw(:all);
9
10 use SL::IMAPClient;
11 use SL::DB::Manager::EmailImport;
12
13 sub sync_email_folder {
14   my ($self) = @_;
15   my $folder = $self->{job_obj}->data_as_hash->{folder};
16
17   my $imap_client = SL::IMAPClient->new(%{$::lx_office_conf{imap_client}});
18
19   my $email_import = $imap_client->update_emails_from_folder(
20     folder => $folder
21   );
22   return unless $email_import;
23
24   return "Created email import: " . $email_import->id;
25 }
26
27 sub delete_email_imports {
28   my ($self) = @_;
29   my $job_obj = $self->{job_obj};
30
31   my $email_import_ids_to_delete =
32     $job_obj->data_as_hash->{email_import_ids_to_delete} || [];
33
34   my @deleted_email_imports_ids;
35   foreach my $email_import_id (@$email_import_ids_to_delete) {
36     my $email_import = SL::DB::Manager::EmailImport->find_by(id => $email_import_id);
37     next unless $email_import;
38     $email_import->delete(cascade => 1);
39     push @deleted_email_imports_ids, $email_import_id;
40   }
41   return unless @deleted_email_imports_ids;
42
43   return "Deleted email import(s): " . join(', ', @deleted_email_imports_ids);
44 }
45
46 sub run {
47   my ($self, $job_obj) = @_;
48   $self->{job_obj} = $job_obj;
49   my @bj_data = $job_obj->data_as_hash;
50   validate_with(
51     params => \@bj_data,
52     spec   => {
53       folder => {
54         type =>
55         SCALAR, optional => 1
56       },
57       email_import_ids_to_delete => {
58         type => ARRAYREF,
59         optional => 1,
60       }
61     },
62     called => "data filed in Background Job",
63   );
64
65   my @results;
66   push @results, $self->delete_email_imports();
67   push @results, $self->sync_email_folder();
68
69   return join(". ", grep { $_ ne ''} @results);
70 }
71
72 1;
73
74 __END__
75
76 =encoding utf8
77
78 =head1 NAME
79
80 SL::BackgroundJob::SyncEmailFolder - Background job for syncing emails from a folder
81
82 =head1 SYNOPSIS
83
84 This background job is used to sync emails from a folder. It can be used to sync
85 emails from a folder on a regular basis for multiple folders. The folder to sync
86 is specified in the data field 'folder' of the background job, by default the
87 folder 'base_folder' from IMAP client is used. Sub folders are separated by a
88 forward slash, e.g. 'INBOX/Archive'. Subfolders are not synced.
89
90 =head1 BUGS
91
92 Nothing here yet.
93
94 =head1 AUTHOR
95
96 Tamino Steinert E<lt>tamino.steinert@tamino.stE<gt>
97
98 =cut