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' ],