Generische Unterstützung für CTI: Click-to-dial
[kivitendo-erp.git] / SL / Controller / CTI.pm
1 package SL::Controller::CTI;
2
3 use strict;
4
5 use SL::CTI;
6 use SL::DB::AuthUserConfig;
7 use SL::Helper::Flash;
8 use SL::Locale::String;
9
10 use parent qw(SL::Controller::Base);
11
12 use Rose::Object::MakeMethods::Generic (
13   'scalar --get_set_init' => [ qw(internal_extensions) ],
14 );
15
16 sub action_call {
17   my ($self) = @_;
18
19   eval {
20     my $res = SL::CTI->call(number => $::form->{number}, internal => $::form->{internal});
21     flash('info', t8('Calling #1 now', $::form->{number}));
22     1;
23   } or do {
24     flash('error', $@);
25   };
26
27   $self->render('cti/calling');
28 }
29
30 sub action_list_internal_extensions {
31   my ($self) = @_;
32
33   $self->render('cti/list_internal_extensions', title => t8('Internal Phone List'));
34 }
35
36 #
37 # filters
38 #
39
40 sub init_internal_extensions {
41   my ($self) = @_;
42
43   my $user_configs = SL::DB::Manager::AuthUserConfig->get_all(
44     where => [
45       cfg_key      => 'phone_extension',
46       '!cfg_value' => undef,
47       '!cfg_value' => '',
48     ],
49     with_objects => [ qw(user) ],
50   );
51
52   my %users;
53   foreach my $config (@{ $user_configs }) {
54     $users{$config->user_id} ||= {
55       name            => $config->user->get_config_value('name') || $config->user->login,
56       phone_extension => $config->cfg_value,
57       call_link       => SL::CTI->call_link(number => $config->cfg_value, internal => 1),
58     };
59   }
60
61   return [
62     sort { lc($a->{name}) cmp lc($b->{name}) } values %users
63   ];
64 }
65
66 1;