1 package SL::Controller::EmailJournal;
5 use parent qw(SL::Controller::Base);
7 use SL::Controller::Helper::GetModels;
9 use SL::DB::EmailJournal;
10 use SL::DB::EmailJournalAttachment;
11 use SL::Helper::Flash;
12 use SL::Locale::String;
13 use SL::System::TaskServer;
15 use Rose::Object::MakeMethods::Generic
17 scalar => [ qw(entry) ],
18 'scalar --get_set_init' => [ qw(models can_view_all filter_summary) ],
21 __PACKAGE__->run_before('add_stylesheet');
30 $::auth->assert('email_journal');
32 if ( $::instance_conf->get_email_journal == 0 ) {
33 flash('info', $::locale->text('Storing the emails in the journal is currently disabled in the client configuration.'));
35 $self->setup_list_action_bar;
36 $self->render('email_journal/list',
37 title => $::locale->text('Email journal'),
38 ENTRIES => $self->models->get,
39 MODELS => $self->models);
45 $::auth->assert('email_journal');
47 my $back_to = $::form->{back_to} || $self->url_for(action => 'list');
49 $self->entry(SL::DB::EmailJournal->new(id => $::form->{id})->load);
51 if (!$self->can_view_all && ($self->entry->sender_id != SL::DB::Manager::Employee->current->id)) {
52 $::form->error(t8('You do not have permission to access this entry.'));
55 $self->setup_show_action_bar;
56 $self->render('email_journal/show',
57 title => $::locale->text('View sent email'),
61 sub action_download_attachment {
64 $::auth->assert('email_journal');
66 my $attachment = SL::DB::EmailJournalAttachment->new(id => $::form->{id})->load;
68 if (!$self->can_view_all && ($attachment->email_journal->sender_id != SL::DB::Manager::Employee->current->id)) {
69 $::form->error(t8('You do not have permission to access this entry.'));
71 my $ref = \$attachment->content;
72 if ( $attachment->file_id > 0 ) {
73 my $file = SL::File->get(id => $attachment->file_id );
74 $ref = $file->get_content if $file;
76 $self->send_file($ref, name => $attachment->name, type => $attachment->mime_type);
84 $::request->{layout}->use_stylesheet('email_journal.css');
91 sub init_can_view_all { $::auth->assert('email_employee_readall', 1) }
97 push @where, (sender_id => SL::DB::Manager::Employee->current->id) if !$self->can_view_all;
99 SL::Controller::Helper::GetModels->new(
102 with_objects => [ 'sender' ],
104 sender => t8('Sender'),
106 recipients => t8('Recipients'),
107 subject => t8('Subject'),
108 sent_on => t8('Sent on'),
109 status => t8('Status'),
110 extended_status => t8('Extended status'),
115 sub init_filter_summary {
118 my $filter = $::form->{filter} || {};
120 [ "from:substr::ilike", $::locale->text('From') ],
121 [ "recipients:substr::ilike", $::locale->text('Recipients') ],
122 [ "sent_on:date::ge", $::locale->text('Sent on') . " " . $::locale->text('From Date') ],
123 [ "sent_on:date::le", $::locale->text('Sent on') . " " . $::locale->text('To Date') ],
126 my @filter_strings = grep { $_ }
127 map { $filter->{ $_->[0] } ? $_->[1] . ' ' . $filter->{ $_->[0] } : undef }
131 failed => $::locale->text('failed'),
132 ok => $::locale->text('succeeded'),
134 push @filter_strings, $status{ $filter->{'status:eq_ignore_empty'} } if $filter->{'status:eq_ignore_empty'};
136 return join ', ', @filter_strings;
139 sub setup_list_action_bar {
142 for my $bar ($::request->layout->get('actionbar')) {
146 submit => [ '#filter_form', { action => 'EmailJournal/list' } ],
147 accesskey => 'enter',
153 sub setup_show_action_bar {
156 for my $bar ($::request->layout->get('actionbar')) {
160 call => [ 'kivi.history_back' ],