Add separate view for CF handling - WIP.

CFs will be managed in a separate view in the future. This
commit prepares the skeleton for the new view and implements
a first version for managing CF destination sets.

The current CF handling is not touched and the new stuff
won't show up unless you add the "cf_test" preference
manually to the db.
3.3
Andreas Granig 14 years ago
parent e6ff3f464c
commit 98afa1e7ef

@ -6,6 +6,8 @@ use base 'Catalyst::Controller';
use admin::Utils;
use HTML::Entities;
my @WEEKDAYS = qw(Monday Tuesday Wednesday Thursday Friday Saturday Sunday);
=head1 NAME
admin::Controller::subscriber - Catalyst Controller
@ -1206,6 +1208,188 @@ sub call_data : Local {
return;
}
sub edit_cf : Local {
my ( $self, $c ) = @_;
$c->stash->{template} = 'tt/subscriber_callforward.tt';
my $type = $c->request->params->{type};
$c->stash->{type} = $type;
$c->stash->{seditid} = $c->request->params->{seditid};
my %messages;
my $subscriber_id = $c->request->params->{subscriber_id};
$c->stash->{subscriber_id} = $subscriber_id;
return unless $c->model('Provisioning')->call_prov( $c, 'voip', 'get_subscriber_by_id',
{ subscriber_id => $subscriber_id },
\$c->session->{subscriber}
);
$c->stash->{subscriber} = $c->session->{subscriber};
my $dsets;
return unless $c->model('Provisioning')->call_prov( $c, 'voip', 'get_subscriber_cf_destination_sets',
{ username => $c->session->{subscriber}{username},
domain => $c->session->{subscriber}{domain},
},
\$dsets,
);
$c->stash->{dsets} = $dsets;
my $cftimes;
# return unless $c->model('Provisioning')->call_prov( $c, 'voip', 'get_callforward_data',
# { handle => $bilprof },
# \$peaktimes
# );
# $$peaktimes{weekdays} = [] unless defined eval { @{$$peaktimes{weekdays}} };
# foreach (sort { $$a{day} <=> $$b{day} } @{$$peaktimes{weekdays}}) {
# if(defined $c->session->{restore_peaktimes}
# and defined $edit_weekday and $$_{day} == $edit_weekday)
# {
# my $rpt = $c->session->{restore_peaktimes};
# if(defined $$rpt{startold} or defined $$rpt{endold}) {
# for(eval { @{$$_{ranges}} }) {
# if($$_{start} eq $$rpt{startold} and $$_{end} eq $$rpt{endold}) {
# $$_{restore_start} = $$rpt{start};
# $$_{restore_end} = $$rpt{end};
# }
# }
# } else {
# $c->stash->{newrange}{start} = $$rpt{start};
# $c->stash->{newrange}{end} = $$rpt{end};
# }
# }
# $weekdays[$$_{day}]{ranges} = $$_{ranges};
# }
my @weekdays;
for(0 .. 6) {
$weekdays[$_] = { name => $WEEKDAYS[$_] };
}
$c->stash->{cftimes}{weekdays} = \@weekdays;
# cf preference is a cf_id, which points to a table callforwards[id, cf_id, wday, start, end, target]
# 1. fetch rows from callforwards table matching subscriber and cf-type (we don't have the cf_id, have we?)
return 1;
}
sub edit_cf_saveset : Local {
my ( $self, $c ) = @_;
$c->stash->{template} = 'tt/subscriber_callforward.tt';
my $type = $c->request->params->{type};
$c->stash->{type} = $type;
my $dset_id = $c->request->params->{seditid};
$c->stash->{seditid} = $dset_id;
my $subscriber_id = $c->request->params->{subscriber_id};
$c->stash->{subscriber_id} = $subscriber_id;
my %messages;
my %dset;
$dset{name} = $c->request->params->{dsetname};
$dset{id} = $dset_id;
if($c->model('Provisioning')->call_prov( $c, 'voip', 'update_subscriber_cf_destination_set',
{ username => $c->session->{subscriber}{username},
domain => $c->session->{subscriber}{domain},
data => \%dset,
},
undef,
))
{
$messages{esetmsg} = 'Server.Voip.SavedSettings';
$c->session->{messages} = \%messages;
$c->response->redirect("/subscriber/edit_cf?subscriber_id=$subscriber_id&type=$type");
}
else
{
$c->session->{messages} = \%messages;
$messages{eseterr} = 'Client.Voip.InputErrorFound';
$c->response->redirect("/subscriber/edit_cf?subscriber_id=$subscriber_id&type=$type&seditid=$dset_id");
}
}
sub edit_cf_delset : Local {
my ( $self, $c ) = @_;
$c->stash->{template} = 'tt/subscriber_callforward.tt';
my $type = $c->request->params->{type};
$c->stash->{type} = $type;
my $dset_id = $c->request->params->{seditid};
my $subscriber_id = $c->request->params->{subscriber_id};
$c->stash->{subscriber_id} = $subscriber_id;
my %messages;
my %dset;
$dset{id} = $dset_id;
if($c->model('Provisioning')->call_prov( $c, 'voip', 'delete_subscriber_cf_destination_set',
{ username => $c->session->{subscriber}{username},
domain => $c->session->{subscriber}{domain},
data => \%dset,
},
undef,
))
{
$messages{esetmsg} = 'Server.Voip.SavedSettings';
}
else
{
$messages{eseterr} = 'Client.Voip.InputErrorFound';
}
$c->session->{messages} = \%messages;
$c->response->redirect("/subscriber/edit_cf?subscriber_id=$subscriber_id&type=$type");
}
sub edit_cf_createset : Local {
my ( $self, $c ) = @_;
$c->stash->{template} = 'tt/subscriber_callforward.tt';
my $type = $c->request->params->{type};
$c->stash->{type} = $type;
my $subscriber_id = $c->request->params->{subscriber_id};
$c->stash->{subscriber_id} = $subscriber_id;
my %messages;
my %dset;
$dset{name} = $c->request->params->{dsetname};
if($c->model('Provisioning')->call_prov( $c, 'voip', 'create_subscriber_cf_destination_set',
{ username => $c->session->{subscriber}{username},
domain => $c->session->{subscriber}{domain},
data => \%dset,
},
undef,
))
{
$messages{esetmsg} = 'Server.Voip.SavedSettings';
}
else
{
$messages{eseterr} = 'Client.Voip.InputErrorFound';
}
$c->session->{messages} = \%messages;
$c->response->redirect("/subscriber/edit_cf?subscriber_id=$subscriber_id&type=$type");
}
sub edit_list : Local {
my ( $self, $c ) = @_;

@ -69,7 +69,12 @@ a:hover {
}
.content li.ui-state-default.high {
height: 91px;
height: 85px;
}
.content li.ui-state-default.intend {
margin-left: 10px;
width: 624px;
}
.content li.ui-state-default div {

@ -0,0 +1,350 @@
<h3>Edit [% type %] for <a href="detail?subscriber_id=[% subscriber_id %]">[% subscriber.username %]@[% subscriber.domain %]</a></h3>
<a href="preferences?subscriber_id=[% subscriber_id %]&amp;#userprefs"><span class="button-back">Back</span></a>
<h3 id="weekdays">Destination Sets</h3>
[% IF messages.esetmsg %]<div class="success">[% messages.esetmsg %]</div>[% END %]
[% IF messages.eseterr %]<div class="error">[% messages.eseterr %]</div>[% END %]
<ul class="cleanlist">
<li class="ui-state-default">
<div class="span-4 last">Name</div>
</li>
[% FOREACH dset IN dsets %]
<li class="ui-state-default" id="dset[% dset.id %]">
[% IF seditid == dset.id %]
<form action="/subscriber/edit_cf_saveset" method="post">
<input type="hidden" name="subscriber_id" value="[% subscriber_id %]"/>
<input type="hidden" name="type" value="[% type %]"/>
<input type="hidden" name="seditid" value="[% dset.id %]"/>
<div class="span-4"><input type="text" size="20" name="dsetname" value="[% dset.name %]"/></div>
<div class="prepend-9 span-1"><button class="button-save">Save</button></div>
<div class="span-1">
<a href="/subscriber/edit_cf?subscriber_id=[% subscriber_id %]&type=[% type %]#dset[% dset.id %]"><span class="button-cancel">Cancel</span></a>
</div>
</form>
[% ELSIF Catalyst.session.admin.read_only %]
<div class="span-4 last">[% dset.name %]</div>
[% ELSE %]
<div class="span-4">[% dset.name %]</div>
<div class="prepend-9 span-1">
<a href="/subscriber/edit_cf?subscriber_id=[% subscriber_id %]&type=[% type %]&seditid=[% dset.id %]#dset[% dset.id %]"><span class="button-edit">Edit</span></a>
</div>
<div class="span-1">
<form action="/subscriber/edit_cf_delset" method="post">
<input type="hidden" name="subscriber_id" value="[% subscriber_id %]"/>
<input type="hidden" name="type" value="[% type %]"/>
<input type="hidden" name="seditid" value="[% dset.id %]"/>
<button class="button-delete">Delete</button>
</form>
</div>
[% END %]
[% FOREACH dest IN dset.destinations %]
</li> [% # closing previous entry to not make a list within a list %]
<li class="ui-state-default intend" id="dest_[% dest.id %]">
<div class="span-1"><span class='ui-icon ui-icon-arrowthick-2-n-s'></span></div>
<div class="span-5 last">[% dest.destination %]</div>
[% # </li> is inserted in next loop interation or at the very end %]
[% END %]
</li>
[% END %]
[% UNLESS Catalyst.session.admin.read_only %]
<li class="ui-state-default">
<form action="/subscriber/edit_cf_createset" method="post">
<input type="hidden" name="subscriber_id" value="[% subscriber_id %]"/>
<input type="hidden" name="type" value="[% type %]"/>
<div class="span-4"><input type="text" size="20" name="dsetname" value=""/></div>
<div class="prepend-9 span-1 last"><button class="button-add">Add</button></div>
</form>
</li>
[% END %]
</ul>
<!--
<li class="ui-state-default [% IF edit_preferences %]high[% END %]">
<div class="span-4">
[% IF edit_preferences %]
<input type="text" id="cfname" name="cfname" size="12" value="test"/>
[% ELSE %]
test
[% END %]
</div>
<div class="span-10 last">
[% IF edit_preferences %]
[% IF Catalyst.config.voicemail_features %]
<input type="radio" id="[% preference.key %]voicebox" value="voicebox" name="[% preference.key %]_target" class="radio"
[% IF preference.value == "voicebox" %]checked="checked"[% END %] />
<label for="[% preference.key %]voicebox">Voicebox</label>
<br clear="all" />
[% END %]
[% IF Catalyst.config.fax_features %]
<input type="radio" id="[% preference.key %]faxserver" value="fax2mail" name="[% preference.key %]_target" class="radio"
[% IF preference.value == "fax2mail" %]checked="checked"[% END %] />
<label for="[% preference.key %]faxserver">Fax2Mail</label>
<br clear="all" />
[% END %]
[% IF Catalyst.config.conference_features %]
<input type="radio" id="[% preference.key %]conference" value="conference" name="[% preference.key %]_target" class="radio"
[% IF preference.value == "conference" %]checked="checked"[% END %] />
<label for="[% preference.key %]conference">Conference room</label>
<br clear="all" />
[% END %]
<input type="radio" id="[% preference.key %]sipuri" value="sipuri" name="[% preference.key %]_target" class="radio"
[% IF (preference.value || preference.error)
&& preference.value != "voicebox" && preference.value != "fax2mail" && preference.value != "conference" %]checked="checked"[% END %] />
<label for="[% preference.key %]sipuri">Number or SIP-URI:</label>
<input type="text" id="[% preference.key %]sipuritxt" name="[% preference.key %]_sipuri" size="25"
value="[% preference.value UNLESS preference.value == "voicebox" OR preference.value == "fax2mail" OR preference.value == "conference" %]" />
[% ELSE %]
[% IF preference.value == "voicebox" %]
Voicebox
[% ELSIF preference.value == "fax2mail" %]
Fax2Mail
[% ELSIF preference.value == "conference" %]
Conference room
[% ELSE %]
<input type="text" size="25" value="[% preference.value %]"
class="disabled txtpreference" disabled="disabled" />
[% END %]
[% END %]
</div>
</li>
</ul>
-->
<div class="hspace-20"></div>
<h3 id="weekdays">Weekdays</h3>
[% IF messages.epeakmsg %]<div class="success">[% messages.epeakmsg %]</div>[% END %]
[% IF messages.epeakerr %]<div class="error">[% messages.epeakerr %]</div>[% END %]
<ul class="cleanlist">
<li class="ui-state-default">
<div class="span-4">Weekday</div>
<div class="span-5">Start - End</div>
<div class="span-5 last">Destination Set</div>
</li>
[% wd = 0 %]
[% FOREACH weekday = cftimes.weekdays %]
[% IF wd == edit_weekday %]
[% IF weekday.ranges %]
[% id = 0 %]
[% FOREACH range = weekday.ranges %]
<li class="ui-state-default">
<div class="span-4">[% IF id == 0 %][% weekday.name %][% END %]</div>
<form action="/billing/do_edit_peaktime" method="post" class="peakedit">
<input type="hidden" name="bilprof" value="[% bilprof.handle %]" />
<input type="hidden" name="weekday" value="[% wd %]" />
<input type="hidden" name="startold" value="[% range.start %]" />
<input type="hidden" name="endold" value="[% range.end %]" />
<div class="span-8">
<input type="text" size="14" name="start" title="hh:mm:ss"
value="[% range.restore_start || range.start %]" /> -
<input type="text" size="14" name="end" title="hh:mm:ss"
value="[% range.restore_end || range.end %]" />
</div>
<div class="span-1">
<button class="button-save" id="peaksave[% id %]">Save</button>
</div>
</form>
<form action="/billing/do_edit_peaktime" method="post">
<input type="hidden" name="bilprof" value="[% bilprof.handle %]" />
<input type="hidden" name="weekday" value="[% wd %]" />
<input type="hidden" name="startold" value="[% range.start %]" />
<input type="hidden" name="endold" value="[% range.end %]" />
<div class="span-1 last">
<button class="button-delete" id="peakdel[% id %]">Delete</button>
</div>
</form>
</li>
[% id = id + 1 %]
[% END %]
[% END %]
<li class="ui-state-default">
<div class="span-4">[% IF !weekday.ranges %][% weekday.name %][% END %]</div>
<form action="/billing/do_edit_peaktime" method="post">
<input type="hidden" name="weekday" value="[% wd %]" />
<input type="hidden" name="bilprof" value="[% bilprof.handle %]" />
<div class="span-8">
<input type="text" size="14" name="start" title="hh:mm:ss"
value="[% newrange.start %]" /> -
<input type="text" size="14" name="end" title="hh:mm:ss"
value="[% newrange.end %]" />
</div>
<div class="span-1">
<button class="button-add" id="peaksavenew">Add</button>
</div>
</form>
<div class="span-1 last">
<a href="/billing/show_peaktimes?bilprof=[% bilprof.handle %]"><span class="button-cancel">Cancel</span></a>
</div>
</li>
[% ELSE %]
[% IF weekday.ranges %]
[% j = 0 %]
[% FOREACH range = weekday.ranges %]
<li class="ui-state-default">
<div class="span-4">[% IF j == 0 %][% weekday.name %][% END %]</div>
<div class="span-8">[% range.start %] - [% range.end %]</div>
[% UNLESS Catalyst.session.admin.read_only %]
<div class="span-1 last">
<a href="/billing/show_peaktimes?bilprof=[% bilprof.handle %]&amp;edit_weekday=[% wd %]"><span class="button-edit">Edit</span></a>
</div>
[% END %]
</li>
[% j = j + 1 %]
[% END %]
[% ELSE %]
<li class="ui-state-default">
<div class="span-4">[% weekday.name %]</div>
<div class="span-8">No ranges defined.</div>
[% UNLESS Catalyst.session.admin.read_only %]
<div class="span-1 last">
<a href="/billing/show_peaktimes?bilprof=[% bilprof.handle %]&amp;edit_weekday=[% wd %]"><span class="button-edit">Edit</span></a>
</div>
[% END %]
</li>
[% END %]
[% END %]
[% wd = wd + 1 %]
[% END %]
</ul>
<div class="hspace-20"></div>
<h3 id="special">Dates</h3>
[% IF messages.epeakmsg %]<div class="success">[% messages.epeakmsg %]</div>[% END %]
[% IF messages.epeakerr %]<div class="error">[% messages.epeakerr %]</div>[% END %]
[% FOREACH year = years %]
[% IF year == show_year %]
[% year %]
[% ELSE %]
<a href="/billing/show_peaktimes?bilprof=[% bilprof.handle %]&amp;show_year=[% year %]#special">[% year %]</a>
[% END %]
[% UNLESS loop.count == years.size %]&nbsp;-&nbsp;[% END %]
[% END %]
<div class="hspace-20"></div>
<ul class="cleanlist">
<li class="ui-state-default">
<div class="span-4">Date</div>
<div class="span-8 last">Start - End</div>
</li>
[% dt = 0 %]
[% FOREACH date = dates %]
[% IF date.date == edit_date %]
[% IF date.ranges %]
[% id = 0 %]
[% FOREACH range = date.ranges %]
<li class="ui-state-default">
<div class="span-4">[% IF id == 0 %][% date.date %][% END %]</div>
<form action="/billing/do_edit_peaktime" method="post" class="peakedit">
<input type="hidden" name="bilprof" value="[% bilprof.handle %]" />
<input type="hidden" name="show_year" value="[% show_year %]" />
<input type="hidden" name="date" value="[% date.date %]" />
<input type="hidden" name="startold" value="[% range.start %]" />
<input type="hidden" name="endold" value="[% range.end %]" />
<div class="span-8">
<input type="text" size="14" name="start" title="hh:mm:ss"
value="[% range.restore_start || range.start %]" /> -
<input type="text" size="14" name="end" title="hh:mm:ss"
value="[% range.restore_end || range.end %]" />
</div>
<div class="span-1">
<button class="button-save" id="peaksave[% id %]">Save</button>
</div>
</form>
<form action="/billing/do_edit_peaktime" method="post">
<input type="hidden" name="bilprof" value="[% bilprof.handle %]" />
<input type="hidden" name="show_year" value="[% show_year %]" />
<input type="hidden" name="date" value="[% date.date %]" />
<input type="hidden" name="startold" value="[% range.start %]" />
<input type="hidden" name="endold" value="[% range.end %]" />
<div class="span-1 last">
<button class="button-delete" id="peakdel[% id %]">Delete</button>
</div>
</form>
</li>
[% id = id + 1 %]
[% END %]
[% END %]
<li class="ui-state-default">
<div class="span-4">[% IF !date.ranges %][% date.date %][% END %]</div>
<form action="/billing/do_edit_peaktime" method="post">
<input type="hidden" name="show_year" value="[% show_year %]" />
<input type="hidden" name="date" value="[% date.date %]" />
<input type="hidden" name="bilprof" value="[% bilprof.handle %]" />
<div class="span-8">
<input type="text" size="14" name="start" title="hh:mm:ss"
value="[% newrange.start %]" /> -
<input type="text" size="14" name="end" title="hh:mm:ss"
value="[% newrange.end %]" />
</div>
<div class="span-1">
<button class="button-add" id="peaksavenew">Add</button>
</div>
</form>
<div class="span-1 last">
<a href="/billing/show_peaktimes?bilprof=[% bilprof.handle %]&amp;show_year=[% show_year %]#special"><span class="button-cancel">Cancel</span></a>
</div>
</li>
[% ELSE %]
[% IF date.ranges %]
[% j = 0 %]
[% FOREACH range = date.ranges %]
<li class="ui-state-default">
<div class="span-4">[% IF j == 0 %][% date.date %][% END %]</div>
<div class="span-8">[% range.start %] - [% range.end %]</div>
<div class="span-1 last">
[% UNLESS Catalyst.session.admin.read_only %]
<a href="/billing/show_peaktimes?bilprof=[% bilprof.handle %]&amp;show_year=[% show_year %]&amp;edit_date=[% date.date %]#special"><span class="button-edit">Edit</span></a>
[% END %]
</div>
</li>
[% j = j + 1 %]
[% END %]
[% ELSE %]
<li class="ui-state-default">
<div class="span-4">[% date.date %]</div>
<div class="span-8">No ranges defined.</div>
<div class="span-1 last">
[% UNLESS Catalyst.session.admin.read_only %]
<a href="/billing/show_peaktimes?bilprof=[% bilprof.handle %]&amp;show_year=[% show_year %]&amp;edit_date=[% date.date %]#special"><span class="button-edit">Edit</span></a>
[% END %]
</div>
</li>
[% END %]
[% END %]
[% dt = dt + 1 %]
[% END %]
[% UNLESS Catalyst.session.admin.read_only %]
<form action="/billing/do_edit_peaktime" method="post">
<input type="hidden" name="show_year" value="[% show_year %]" />
<input type="hidden" name="bilprof" value="[% bilprof.handle %]" />
<input type="hidden" name="edit_date" value="new" />
<li class="ui-state-default">
<div class="span-4">
<input type="text" size="10" name="date" title="YYYY-MM-DD"
value="[% newrange.date %]" />
</div>
<div class="span-8">
<input type="text" size="14" name="start" title="hh:mm:ss"
value="[% newrange.start %]" /> -
<input type="text" size="14" name="end" title="hh:mm:ss"
value="[% newrange.end %]" />
</div>
<div class="span-1 last">
<button class="button-add" id="peaksavenew">Add</button>
</div>
</li>
</form>
[% END %]
</ul>

@ -184,6 +184,8 @@
[% IF ! edit_preferences && ! Catalyst.session.admin.read_only %]
[% IF preference.key == "allowed_ips" || preference.key == "man_allowed_ips" %]
<a href="edit_iplist?subscriber_id=[% subscriber.subscriber_id %]&amp;list_name=[% preference.key %]"><span class="button-edit">Edit List</span></a>
[% ELSIF preference.key == "cftest" || preference.key == "cftest_foo" %]
<a href="edit_cf?subscriber_id=[% subscriber.subscriber_id %]&amp;type=[% preference.key %]"><span class="button-edit">Edit List</span></a>
[% ELSE %]
<a href="edit_list?subscriber_id=[% subscriber.subscriber_id %]&amp;list_name=[% preference.key %]"><span class="button-edit">Edit List</span></a>
[% END %]

Loading…
Cancel
Save