MT#55931 Add new speeddial, forward, transfer device buttons

Change-Id: I0b9c1f3ddb0d4cd3fe28995b170e9104c668a553
mr11.2
Marco Capetta 2 years ago committed by Kirill Solomko
parent e90ba9d517
commit 36ae8cedb9

@ -22,7 +22,7 @@ __PACKAGE__->set_config({
}
});
# curl -v -X POST --user $USER --insecure -F front_image=@sandbox/spa504g-front.png -F mac_image=@sandbox/spa504g-back.png -F front_thumbnail=@sandbox/spa504g-front-small.png -F json='{"reseller_id":1, "vendor":"Cisco", "model":"SPA999", "linerange":[{"name": "Phone Keys", "can_private":true, "can_shared":true, "can_blf":true, "keys":[{"labelpos":"top", "x":5110, "y":5120},{"labelpos":"top", "x":5310, "y":5320}]}]}' https://localhost:4443/api/pbxdevicemodels/
# curl -v -X POST --user $USER --insecure -F front_image=@sandbox/spa504g-front.png -F mac_image=@sandbox/spa504g-back.png -F front_thumbnail=@sandbox/spa504g-front-small.png -F json='{"reseller_id":1, "vendor":"Cisco", "model":"SPA999", "linerange":[{"name": "Phone Keys", "can_private":true, "can_shared":true, "can_blf":true, "can_speeddial":true, "can_forward":true, "can_transfer":true, "keys":[{"labelpos":"top", "x":5110, "y":5120},{"labelpos":"top", "x":5310, "y":5320}]}]}' https://localhost:4443/api/pbxdevicemodels/
sub api_description {
return 'Specifies a model to be set in <a href="#pbxdeviceconfigs">PbxDeviceConfigs</a>. Use a Content-Type "multipart/form-data", provide front_image, front_thumbnail and mac_image parts with the actual images, and an additional json part with the properties specified below, e.g.: <code>curl -X POST --user $USER -F front_image=@/path/to/front.png -F mac_image=@/path/to/mac.png -F front_thumbnail=@/path/to/front-small.png -F json=\'{"reseller_id":...}\' https://example.org:1443/api/pbxdevicemodels/</code> This resource is read-only to subscriberadmins.';
@ -62,6 +62,9 @@ sub documentation_sample {
can_private => 1,
can_shared => 1,
can_blf => 1,
can_speeddial => 1,
can_forward => 1,
can_transfer => 1,
keys => [
{
x => 100,

@ -1003,6 +1003,9 @@ sub devprof_get_lines :Chained('devprof_base') :PathPart('lines/ajax') :Args(0)
{ name => 'can_private', search => 1, title => $c->loc('Private Line') },
{ name => 'can_shared', search => 1, title => $c->loc('Shared Line') },
{ name => 'can_blf', search => 1, title => $c->loc('BLF Key') },
{ name => 'can_speeddial', search => 1, title => $c->loc('SpeedDial') },
{ name => 'can_forward', search => 1, title => $c->loc('Forward') },
{ name => 'can_transfer', search => 1, title => $c->loc('Transfer') },
]);
NGCP::Panel::Utils::Datatables::process($c, $resultset, $cols);
$c->detach( $c->view("JSON") );

@ -93,8 +93,11 @@ sub validate_line_type {
$field->clear_errors;
unless($field->value eq 'private' ||
$field->value eq 'shared' ||
$field->value eq 'blf') {
my $err_msg = 'Invalid line type, must be private, shared or blf';
$field->value eq 'blf' ||
$field->value eq 'speeddial' ||
$field->value eq 'forward' ||
$field->value eq 'transfer') {
my $err_msg = 'Invalid line type, must be private, shared, blf, speeddial, forward or transfer';
$field->add_error($err_msg);
}
return;

@ -47,7 +47,7 @@ has_field 'lines' => (
wrapper_class => [qw/hfh-rep-block/],
element_attr => {
rel => ['tooltip'],
title => ["The lines for this pbx device. Required keys are 'linerange' (name of range to use), 'key_num' (key number in line range, starting from 0), 'type' (one of 'private', 'shared', 'blf'), 'subscriber_id' (the subscriber mapped to this key)."],
title => ["The lines for this pbx device. Required keys are 'linerange' (name of range to use), 'key_num' (key number in line range, starting from 0), 'type' (one of 'private', 'shared', 'blf', 'speeddial', 'forward', 'transfer'), 'subscriber_id' (the subscriber mapped to this key)."],
},
);
@ -89,6 +89,9 @@ has_field 'lines.type' => (
{ label => "private", value => "private" },
{ label => "shared", value => "shared" },
{ label => "blf", value => "blf" },
{ label => "speeddial", value => "speeddial" },
{ label => "forward", value => "forward" },
{ label => "transfer", value => "transfer" },
],
element_attr => {
rel => ['tooltip'],

@ -111,7 +111,7 @@ has_field 'linerange' => (
wrapper_class => [qw/hfh-rep-block/],
element_attr => {
rel => ['tooltip'],
title => ['An array of line/key definitions for this device. Each element is a hash containing the keys name, can_private, can_shared, can_blf and keys (which in turn is an array of hashes having x, y and labelpos allowing top, bottom, left right).'],
title => ['An array of line/key definitions for this device. Each element is a hash containing the keys name, can_private, can_shared, can_blf, can_speeddial, can_forward, can_transfer and keys (which in turn is an array of hashes having x, y and labelpos allowing top, bottom, left right).'],
},
);
@ -159,6 +159,36 @@ has_field 'linerange.can_blf' => (
},
);
has_field 'linerange.can_speeddial' => (
type => 'Boolean',
label => 'Supports Speeddial',
default => 0,
element_attr => {
rel => ['tooltip'],
title => ['Lines/Keys in this range can be used as speeddial. Value is accessible in the config template via phone.lineranges[].lines[].can_speeddial'],
},
);
has_field 'linerange.can_forward' => (
type => 'Boolean',
label => 'Supports Forward',
default => 0,
element_attr => {
rel => ['tooltip'],
title => ['Lines/Keys in this range can be used as forward. Value is accessible in the config template via phone.lineranges[].lines[].can_forward'],
},
);
has_field 'linerange.can_transfer' => (
type => 'Boolean',
label => 'Supports Transfer',
default => 0,
element_attr => {
rel => ['tooltip'],
title => ['Lines/Keys in this range can be used as transfer. Value is accessible in the config template via phone.lineranges[].lines[].can_transfer'],
},
);
has_field 'linerange.keys' => (
type => 'Repeatable',
label => 'Key Definition',

@ -181,7 +181,7 @@ sub check_resource{
$self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Invalid range definition inside linerange parameter, all must be hash");
return;
}
foreach my $elem(qw/can_private can_shared can_blf keys/) {
foreach my $elem(qw/can_private can_shared can_blf can_speeddial can_forward can_transfer keys/) {
unless(exists $range->{$elem}) {
$c->log->error("missing mandatory attribute '$elem' in a linerange element");
$self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Invalid range definition inside linerange parameter, missing attribute '$elem'");
@ -237,7 +237,7 @@ sub process_range {
delete $r->{$f};
}
$r->{id} = int($r->{id});
foreach my $f(qw/can_private can_shared can_blf/) {
foreach my $f(qw/can_private can_shared can_blf can_speeddial can_forward can_transfer/) {
$r->{$f} = $r->{$f} ? JSON::true : JSON::false;
}
$r->{keys} = [];

@ -91,6 +91,9 @@ sub update_device_model_ranges {
$range->{can_private} //= 0;
$range->{can_shared} //= 0;
$range->{can_blf} //= 0;
$range->{can_speeddial} //= 0;
$range->{can_forward} //= 0;
$range->{can_transfer} //= 0;
$range_db->update($range);
}
} else {
@ -116,7 +119,10 @@ sub update_device_model_ranges {
if($fielddev_line->key_num >= $range_db->num_lines ||
($fielddev_line->line_type eq 'private' && !$range_db->can_private) ||
($fielddev_line->line_type eq 'shared' && !$range_db->can_shared) ||
($fielddev_line->line_type eq 'blf' && !$range_db->can_blf)) {
($fielddev_line->line_type eq 'blf' && !$range_db->can_blf) ||
($fielddev_line->line_type eq 'speeddial' && !$range_db->can_speeddial) ||
($fielddev_line->line_type eq 'forward' && !$range_db->can_forward) ||
($fielddev_line->line_type eq 'transfer' && !$range_db->can_transfer)) {
$fielddev_line->delete;
}

@ -76,6 +76,9 @@
<option value="private">private</option>
<option value="shared">shared</option>
<option value="blf">blf</option>
<option value="speeddial">speeddial</option>
<option value="forward">forward</option>
<option value="transfer">transfer</option>
</select>
</div>

@ -1029,7 +1029,7 @@ function create_ranges_annotations(id,type,ranges){
[% END -%]
'</select>' +
'<select class="modeselect" name="line.' + linecmt + '.type" id="line.' + linecmt + '.type">' +
[% FOR opt IN ["private", "shared", "blf"] -%]
[% FOR opt IN ["private", "shared", "blf", "speeddial", "forward", "transfer"] -%]
(range.can_[% opt %] == "1" ?
'<option value="[% opt %]"'+((linekeyCurrent && linekeyCurrent.mode == '[% opt %]' ) ? ' selected="selected"' : '')+'>[% opt %]</option>' : '') +
[% END -%]

@ -45,10 +45,13 @@ $fake_data->set_data_from_script({
{y => "390", labelpos => "left", x => "510"},
{y => "350", labelpos => "left", x => "510"}
],
can_private => "1",
can_shared => "0",
can_blf => "0",
name => "Phone Ports api_test",
can_private => "1",
can_shared => "0",
can_blf => "0",
can_speeddial => "0",
can_forward => "0",
can_transfer => "0",
name => "Phone Ports api_test",
#TODO: test duplicate creation #"id"=>1311,
},
{
@ -56,11 +59,14 @@ $fake_data->set_data_from_script({
{y => "390", labelpos => "left", x => "510"},
{y => "350", labelpos => "left", x => "510"}
],
can_private => "1",
can_shared => "0",
can_private => "1",
can_shared => "0",
#TODO: If I'm right - now we don't check field values against this, because test for pbxdevice xreation is OK
can_blf => "0",
name => "Extra Ports api_test",
can_blf => "0",
can_speeddial => "0",
can_forward => "0",
can_transfer => "0",
name => "Extra Ports api_test",
#TODO: test duplicate creation #"id"=>1311,
}
]

Loading…
Cancel
Save