mirror of https://github.com/sipwise/www_csc.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
242 lines
6.8 KiB
242 lines
6.8 KiB
package csc::Controller::addressbook;
|
|
|
|
use strict;
|
|
use warnings;
|
|
use base 'Catalyst::Controller';
|
|
use csc::Utils;
|
|
|
|
=head1 NAME
|
|
|
|
csc::Controller::addressbook - Catalyst Controller
|
|
|
|
=head1 DESCRIPTION
|
|
|
|
Catalyst Controller.
|
|
|
|
=head1 METHODS
|
|
|
|
=cut
|
|
|
|
|
|
=head2 index
|
|
|
|
Displays the subscriber's addressbook.
|
|
|
|
=cut
|
|
|
|
sub index : Private {
|
|
my ( $self, $c ) = @_;
|
|
|
|
$c->log->debug('***addressbook::index called');
|
|
$c->stash->{template} = 'tt/addressbook.tt';
|
|
|
|
return 1 unless $c->model('Provisioning')->get_usr_preferences($c);
|
|
|
|
$c->stash->{subscriber}{active_number} = csc::Utils::get_active_number_string($c);
|
|
if($c->session->{user}{extension}) {
|
|
my $ext = $c->session->{user}{preferences}{extension};
|
|
$c->stash->{subscriber}{active_number} =~ s/$ext$/ - $ext/;
|
|
}
|
|
|
|
unless($c->model('Provisioning')->get_formatted_contacts($c)) {
|
|
delete $c->session->{user}{contacts} if exists $c->session->{user}{contacts};
|
|
return 1;
|
|
}
|
|
|
|
my @display_contacts;
|
|
my $bg = '';
|
|
|
|
my $charsel = $c->request->params->{charsel};
|
|
|
|
my $detail = $c->request->params->{detail};
|
|
if(defined $detail and length $detail) {
|
|
$charsel = $c->session->{contact_charsel};
|
|
$c->stash->{detail} = $detail;
|
|
}
|
|
if(defined $charsel and length $charsel) {
|
|
$c->stash->{docharsel} = 1;
|
|
$c->stash->{charsel} = $charsel;
|
|
$c->session->{contact_charsel} = $charsel;
|
|
} else {
|
|
$c->session->{contact_charsel} = undef;
|
|
}
|
|
|
|
$c->session->{contact_sortsel} = 'firstname' unless $c->session->{contact_sortsel};
|
|
my $sortsel = $c->request->params->{sortsel};
|
|
$c->session->{contact_sortsel} = $sortsel if defined $sortsel;
|
|
$c->stash->{sortsel} = $c->session->{contact_sortsel};
|
|
|
|
my $filter = $c->request->params->{filter};
|
|
$c->session->{contact_filter} = $filter if defined $filter;
|
|
$c->stash->{filter} = $c->session->{contact_filter};
|
|
$filter = $c->session->{contact_filter};
|
|
|
|
foreach my $contact (sort {$a->{$c->session->{contact_sortsel}} cmp $b->{$c->session->{contact_sortsel}}}
|
|
values %{$c->session->{user}{contacts}})
|
|
{
|
|
if($c->session->{contact_filter}) {
|
|
next unless grep /$filter/i, @$contact{keys %$contact};
|
|
}
|
|
my $index = uc substr $$contact{$c->session->{contact_sortsel}}, 0, 1;
|
|
if(@display_contacts and $display_contacts[-1]{index} eq $index) {
|
|
$$contact{background} = $bg ? '' : 'alt';
|
|
push @{$display_contacts[-1]{contacts}}, $contact;
|
|
} else {
|
|
$$contact{background} = 'alt';
|
|
$bg = '';
|
|
push @display_contacts, { index => $index, contacts => [($contact)] };
|
|
}
|
|
$bg = !$bg;
|
|
}
|
|
|
|
$c->stash->{subscriber}{contacts} = \@display_contacts;
|
|
}
|
|
|
|
=head2 edit
|
|
|
|
Displays an edit form for existing or new addressbook entries.
|
|
|
|
=cut
|
|
|
|
sub edit : Local {
|
|
my ( $self, $c, $contact ) = @_;
|
|
|
|
$c->log->debug('***addressbook::edit called');
|
|
$c->stash->{template} = 'tt/addressedit.tt';
|
|
|
|
$c->stash->{subscriber}{active_number} = csc::Utils::get_active_number_string($c);
|
|
if($c->session->{user}{extension}) {
|
|
my $ext = $c->session->{user}{preferences}{extension};
|
|
$c->stash->{subscriber}{active_number} =~ s/$ext$/ - $ext/;
|
|
}
|
|
|
|
my $id = $c->request->params->{addrbook_id};
|
|
if($id) {
|
|
foreach my $tmpcontact (values %{$c->session->{user}{contacts}}) {
|
|
if($$tmpcontact{id} == $id) {
|
|
$contact = $tmpcontact;
|
|
last;
|
|
}
|
|
}
|
|
}
|
|
|
|
$c->stash->{contact} = $contact;
|
|
}
|
|
|
|
=head2 save
|
|
|
|
Creates or modifies an entry in the addressbook.
|
|
|
|
=cut
|
|
|
|
sub save : Local {
|
|
my ( $self, $c) = @_;
|
|
|
|
$c->log->debug('***addressbook::save called');
|
|
my (%contact, %refill, %messages);
|
|
|
|
$contact{firstname} = $c->request->params->{firstname};
|
|
$contact{lastname} = $c->request->params->{lastname};
|
|
unless(length $contact{firstname} or length $contact{lastname}) {
|
|
$messages{name} = 'Client.Voip.MissingName';
|
|
}
|
|
$contact{company} = $c->request->params->{company};
|
|
|
|
$contact{homephonenumber} = $c->request->params->{homephonenumber};
|
|
$contact{phonenumber} = $c->request->params->{phonenumber};
|
|
$contact{mobilenumber} = $c->request->params->{mobilenumber};
|
|
$contact{faxnumber} = $c->request->params->{faxnumber};
|
|
|
|
$contact{email} = $c->request->params->{email};
|
|
$contact{homepage} = $c->request->params->{homepage};
|
|
$contact{homepage} = 'http://'.$contact{homepage} if defined $contact{homepage} and length $contact{homepage}
|
|
and $contact{homepage} !~ m#^\w+://#i;
|
|
|
|
%refill = %contact;
|
|
|
|
my $user_cc = $c->session->{user}{data}{cc};
|
|
|
|
for(qw(homephonenumber phonenumber mobilenumber faxnumber)) {
|
|
if(defined $contact{$_} and length $contact{$_}) {
|
|
$contact{$_} = csc::Utils::get_qualified_number_for_subscriber($c, $contact{$_});
|
|
my $checkresult;
|
|
return unless $c->model('Provisioning')->call_prov( $c, 'voip', 'check_E164_number', $contact{$_}, \$checkresult);
|
|
$messages{$_} = 'Client.Voip.MalformedNumber'
|
|
unless $checkresult;
|
|
} else {
|
|
$contact{$_} = undef;
|
|
}
|
|
}
|
|
|
|
unless(keys %messages) {
|
|
if($c->request->params->{id}) {
|
|
if($c->model('Provisioning')->update_contact($c, $c->request->params->{id}, \%contact)) {
|
|
$messages{topmsg} = 'Server.Voip.SavedContact';
|
|
}
|
|
} else {
|
|
if($c->model('Provisioning')->create_contact($c, \%contact)) {
|
|
$messages{topmsg} = 'Server.Voip.SavedContact';
|
|
}
|
|
}
|
|
} else {
|
|
$messages{toperr} = 'Client.Voip.InputErrorFound';
|
|
$c->session->{messages} = \%messages;
|
|
$refill{id} = $c->request->params->{id};
|
|
$self->edit($c, \%refill);
|
|
return;
|
|
}
|
|
|
|
$c->session->{messages} = \%messages;
|
|
$c->response->redirect('/addressbook');
|
|
}
|
|
|
|
=head2 delete
|
|
|
|
Deletes an entry from the addressbook.
|
|
|
|
=cut
|
|
|
|
sub delete : Local {
|
|
my ( $self, $c ) = @_;
|
|
|
|
$c->log->debug('***addressbook::delete called');
|
|
my %messages;
|
|
|
|
my $id = $c->request->params->{addrbook_id};
|
|
if($id) {
|
|
if($c->model('Provisioning')->delete_contact($c, $id)) {
|
|
$messages{topmsg} = 'Server.Voip.RemovedContact';
|
|
}
|
|
}
|
|
|
|
$c->session->{messages} = \%messages;
|
|
$c->response->redirect('/addressbook');
|
|
}
|
|
|
|
=head1 BUGS AND LIMITATIONS
|
|
|
|
=over
|
|
|
|
=item none
|
|
|
|
=back
|
|
|
|
=head1 SEE ALSO
|
|
|
|
Provisioning model, Catalyst
|
|
|
|
=head1 AUTHORS
|
|
|
|
Daniel Tiefnig <dtiefnig@sipwise.com>
|
|
|
|
=head1 COPYRIGHT
|
|
|
|
The addressbook controller is Copyright (c) 2007-2010 Sipwise GmbH,
|
|
Austria. You should have received a copy of the licences terms together
|
|
with the software.
|
|
|
|
=cut
|
|
|
|
# over and out
|
|
1;
|