82 Commits
Author SHA1 Message Date
FusionPBX 8cef54bacf Fix the permission for call block 2024-11-25 09:18:34 -07:00
FusionPBX 1b2acb1026 Fix a bug where logo was overridden 2024-09-05 10:18:56 -06:00
FusionPBX 69d9ac0819 Update session regenerate 2024-09-02 22:51:03 -06:00
FusionPBX 8c94548bfa Remove image meta data
- Reading the image and re-saving the image removes the metadata.
- This meta data is removed to protect privacy
2024-08-22 15:13:19 -06:00
FusionPBX 52352dec39 Fix intermittent issue with the Sub Menu 2024-08-02 11:22:40 -06:00
frytimoandTim Fry 16574221b1 Check if setting exists before trying to count (#7071)
Co-authored-by: Tim Fry <tim@fusionpbx.com>
2024-07-26 12:13:19 -06:00
FusionPBX ce26f227bf Changed the order of missed_call conditions
Move billsec condition near the end but before voicemail.

If a call center call was missed but answered by an extension with the exit action then the call wasn't technically missed.
2024-07-03 14:36:40 -06:00
FusionPBX cf005c7671 Template engine use sys_get_temp_dir
Used to get the operating system temp directory.
2024-06-26 07:43:23 -06:00
FusionPBX c5861e4170 Fix provisioning template engine.
Template engine must get the cache directory or it fails to provision. This affected polycom phone provisioning and maybe other phones.
2024-06-25 20:28:58 -06:00
FusionPBX eb64028bb1 Minor version update 5.2.4 2024-05-30 21:18:57 -06:00
FusionPBX 320f402d18 Ring group handle number alias 2024-05-30 00:12:08 -06:00
FusionPBX 14d69d6ca2 Update xml_cdr.php 2024-05-15 14:52:00 -06:00
FusionPBX b61f9375ff Update the caller ID when using intercept
When intercept is used then use the last_sent_callee_id_name and last_sent_callee_id_number for the caller ID information.
2024-05-15 14:41:44 -06:00
FusionPBX 93e1987754 Check for valid fax numbers
Validate the fax destination number
- Check outbound routes
- Check valid extension
- Set the status to failed for all other numbers
2024-05-14 12:49:51 -06:00
FusionPBX 6b2b842314 Skip the cache if the SQL query timed out 2024-05-06 14:08:53 -06:00
FusionPBX 17e82ed560 Bug fix for FAX forward 2024-05-03 13:16:44 -06:00
FusionPBX b0a0fa9ab1 Bug fixed to send fax to a local extension 2024-05-03 13:14:45 -06:00
FusionPBX 39b7ca7058 Update software.php 2024-04-24 22:00:57 -06:00
FusionPBX 2262ec7272 Recent Calls hide Lose Race 2024-04-22 12:18:00 -06:00
FusionPBX 8091252664 Show all messages in the fax queue
Including ones not assigned to a user
2024-04-11 16:05:25 -06:00
FusionPBX e1cd500d71 Bug fix replace dialed_user with dialed_extension 2024-04-03 11:22:42 -06:00
FusionPBX 172ed8392c Fix bug with extension missed call email
The dialed_user used to exist on all systems no longer the case. So using sip_to_user instead for backward compatibility.
2024-04-03 10:52:40 -06:00
FusionPBX 023f54c9ad Minor version update to 5.2.2 2024-04-01 11:23:52 -06:00
Zachary Kitchen 360cf73c79 Include Date on Fax Coversheet (#6919) 2024-03-21 10:36:09 -06:00
fusionate bed88ea5d0 Voicemail: Adjustment to restore emailed message Download link feature. 2024-03-14 16:57:03 -06:00
fusionate 6833705895 Voicemail: Class adjustment to restore emailed message Download link functionality. 2024-03-14 16:55:43 -06:00
FusionPBX a79a3275d3 Update GXP templates 2024-03-13 18:02:55 -06:00
FusionPBX c249e1c1a4 Support a 0 value
Used !isset to support a value of 0 as empty the empty function considers a value of 0 as empty.
2024-03-13 11:13:50 -06:00
FusionPBX fc21a1b2d3 Update intercept.lua 2024-03-07 16:21:06 -07:00
FusionPBX a0392f265e Fixed intercept
Remove from SQL where as the call_uuid is not always used
2024-03-07 14:41:25 -07:00
FusionPBX 7244cf5813 Add caller_destination to allowed variables 2024-03-05 18:29:11 -07:00
FusionPBX ffcf06b774 Update language/sv/vm/sounds.xml fix xml 2024-03-05 12:51:40 -07:00
FusionPBX 69a9e28081 Update the GXP Template
Add missing variables from version 1 p-code templates 

grandstream_nat_traversal
    options: No, STUN, KeepAlive, UPnP, Auto, VPN

grandstream_distinctive_ringtone_* (1-10)

grandstream_lan_port_vlan
    Number: 0 - 4095

grandstream_pc_port_vlan
    Number: 0 - 4095

grandstream_pc_mode
    options: Enabled, Disabled, Mirrored

grandstream_stun_server

grandstream_headset_key_mode
    options: DefaultMode, ToggleHeadsetOrSpeaker

grandstream_headset_ringtone
    options: Normal, PlantronicsEHS

grandstream_headset_type
    options: Normal, PlantronicsEHS

grandstream_headset_rx_gain
    Headset RX gain(dB). 1 - -6, 0 - 0, 2 - +6. Default is 0

grandstream_headset_tx_gain
    Handset TX gain(dB). 1 - -6, 0 - 0, 2 - +6. Default is 0

grandstream_screensaver_enable
    options: No, Yes,  OnIfNoVPKIsActive

grandstream_screensaver_source
    options: Default, USB, Download
2024-03-04 23:25:34 -07:00
FusionPBX 18d5f5fc4e Update the GXP Template
Add missing variables that were in the version 1 p-code templates

grandstream_nat_traversal
    options: No, STUN, KeepAlive, UPnP, Auto, VPN

grandstream_distinctive_ringtone_* (1-10)

grandstream_lan_port_vlan
    Number: 0 - 4095

grandstream_pc_port_vlan
    Number: 0 - 4095

grandstream_pc_mode
    options: Enabled, Disabled, Mirrored

grandstream_stun_server

grandstream_headset_key_mode
    options: DefaultMode, ToggleHeadsetOrSpeaker

grandstream_headset_ringtone
    options: Normal, PlantronicsEHS

grandstream_headset_type
    options: Normal, PlantronicsEHS

grandstream_headset_rx_gain
    Headset RX gain(dB). 1 - -6, 0 - 0, 2 - +6. Default is 0

grandstream_headset_tx_gain
    Handset TX gain(dB). 1 - -6, 0 - 0, 2 - +6. Default is 0

grandstream_screensaver_enable
    options: No, Yes,  OnIfNoVPKIsActive

grandstream_screensaver_source
    options: Default, USB, Download
2024-03-04 22:53:11 -07:00
FusionPBX d465e8ab39 Update index.lua
Use the original_caller_id_number in the diversion header.
2024-03-04 19:08:42 -07:00
FusionPBX ddc3befd60 Add required diversion header 2024-03-04 16:54:50 -07:00
FusionPBX 1f79e6dfb9 Grandstream GXP2135 fix register_expires, DND, and call forward 2024-03-04 13:54:45 -07:00
FusionPBX 2f3486e454 Remove self closing tag when a value is provided 2024-03-04 13:39:40 -07:00
FusionPBX f45d061ad3 GXP2170 fix register_expires, DND, and call forward 2024-03-04 13:32:41 -07:00
FusionPBX e6274fb6ac Remove self closing tag for *78 and *79 2024-03-04 13:28:52 -07:00
FusionPBX 58a8d35135 Grandstream 2160 Fix keys assignments over 6 2024-03-04 13:25:35 -07:00
FusionPBX 8a1194ec81 Grandstream 2140 Fix keys assignments over 4 2024-03-04 13:14:24 -07:00
FusionPBX 9a122d1c6c Grandstream 2135 Fix keys assignments over 3 2024-03-04 13:07:20 -07:00
FusionPBX fa7a6a52bc Grandstream 2135 Fix keys over 8 2024-03-04 12:51:12 -07:00
FusionPBX d05dfc660c Grandstream 2170 Fix keys over 12 2024-03-04 12:46:06 -07:00
FusionPBX 2820185274 Minor version update 5.2.1 2024-03-01 18:36:00 -07:00
FusionPBX cda2f530a7 Fix the order by for IVR Menu Options 2024-03-01 18:28:07 -07:00
FusionPBX c1e6f3e11d Include ORIGINATOR_CANCEL for missed calls 2024-03-01 14:10:19 -07:00
FusionPBX d7ac495b7e Refresh Publication
Needed to prevent issues with logical replication
2024-03-01 12:49:16 -07:00
FusionPBX b9ce1d2edf Add yealink_app_unavailable from another template 2024-02-29 09:53:11 -07:00
fusionate 84e71af649 Operator Panel: Restore drag/drop calling and transfer. 2024-02-27 11:29:07 -07:00
FusionPBX bc6582b908 Ring group destination adde per user music on hold
This was reported as a bug. Where the extension music on hold was not being used when the extension was called through a ring group.
2024-02-24 21:09:18 -07:00
FusionPBX 4ae3f99589 Fix fax from address when sending an outbound fax 2024-02-23 15:43:59 -07:00
Alex 9c4e38babc Update xml_cdr_inc.php (#6904) 2024-02-22 15:55:59 -07:00
FusionPBX 94e558f7b6 Fix duration if null set to 0
If gmdate gets a null it uses the system time. This affected canceled calls.
2024-02-22 09:22:29 -07:00
FusionPBX 4a6cc913bf Fix the Yealink Conference templates 2024-02-21 16:34:20 -07:00
FusionPBX fd94e585da Update destinations.php
- Use the database object more efficiently
- Access the get method with this->get
- Bypass cached destinations to avoid problems
2024-02-21 11:26:14 -07:00
FusionPBX b58ebffc07 Add time format for 12h or 24h 2024-02-20 14:52:46 -07:00
FusionPBX fc0d72c5fa Update missed_calls.php
- Simplify SQL time format
- Use SQL limit to be more efficient
- Use the call detail record status
- Fix the View all link to use statu=missed
2024-02-20 14:51:09 -07:00
FusionPBX d028b0ca84 Update recent_calls.php
- Simplify SQL time format
- Use SQL limit to be more efficient
- Use the call detail record status
2024-02-20 14:49:09 -07:00
FusionPBX 02a2c6c7c8 Update app_languages.php add no answer 2024-02-20 14:31:07 -07:00
FusionPBX ebadf2934d Replace voicemail_answer_stamp with voicemail_message_seconds
The voicemail_answer_stamp value exists if the call reaches voicemail. The voicemail_message_seconds is set if the caller leaves a voicemail message.
2024-02-20 12:49:06 -07:00
FusionPBX ee49410edb Don't use voicemail_id to determine call status
This is an unreliable way to detect if the call went to voicemail.
2024-02-20 12:30:20 -07:00
Zachary Kitchen 859f08fbb2 Grandstream Provisioning File Updates (#6899)
* Fixed issue with registration time for Grandstreams with registration expiration time set for less than 60 seconds
* Updated Grandstream GXP provisioning files to use values from registration expiration time
* Fixed physical key profile issues on GXP & GRP phones
2024-02-19 21:07:12 -07:00
FusionPBX 3fb475d67d Fix bug with sipnetic use server_address
The registration domain should use server_address not the outbound_proxy_primary address.
2024-02-19 14:58:02 -07:00
Alex e2205cb6b6 Update call_broadcast_send.php (#6897) 2024-02-19 11:37:23 -07:00
FusionPBX a4b054d97a Update 310_extension-to-voicemail.xml
Quote the interpolated part of the regexes between \Q and \E
2024-02-13 18:04:43 -07:00
FusionPBX 074d8a87dd Update app_config.php 2024-02-12 11:06:29 -07:00
FusionPBX 1e18ea3c8f Update app_config.php 2024-02-12 10:42:24 -07:00
FusionPBX a6ea0f2d04 Add emergency_email_address setting by default 2024-02-12 10:39:45 -07:00
FusionPBX e08b82c160 Bug fix for app/emergency logs 2024-02-12 10:26:33 -07:00
FusionPBX 2654c50fe8 frytimo Use the settings class in the cache class (#6891) 2024-02-09 12:13:29 -07:00
FusionPBX 0297eb5fad Use {$yealink_rport} variable 2024-02-08 16:18:53 -07:00
FusionPBX 9f52a2ea2c Disable ws and wss by default 2024-02-07 17:52:14 -07:00
FusionPBX 01aaebbb1c Fix the GSWave link 2024-02-06 21:31:29 -07:00
FusionPBX bdd0d26324 Bug Fix: missed_call handling and voicemail status
Call going to voicemail for an extension was showing status answered instead of voicemail and missed call
2024-02-06 15:25:36 -07:00
FusionPBX e3682cee6c Bug Fix: Clean buffer before sending the rendered template 2024-02-06 12:31:16 -07:00
FusionPBX 64fd1a5e54 Bug Fix: Use the HTTP_HOST if the domain_uuid is empty 2024-02-05 18:56:03 -07:00
FusionPBX d3c05bae43 Remove the single quote
Remove backslash as it didn't work
2024-02-05 17:23:26 -07:00
FusionPBX 441f2dfcf1 Add escape_quote quoted values 2024-02-05 17:11:20 -07:00
FusionPBX 0de12da8fa Fix a bug with emergency_outbound_caller_id_number
Set call_date moved so it didn't overwrite another variable
2024-02-02 20:00:52 -07:00
FusionPBX e22c972848 Fix issue where smtp from would send as <> 2024-01-29 13:21:28 -07:00
70 changed files with 7325 additions and 18036 deletions
@@ -430,7 +430,7 @@ if (is_array($activity)) {
} }
//build the list of extensions //build the list of extensions
$block = "<div id='".escape($extension)."' class='".$style."' ".(($_GET['vd_ext_from'] == $extension || $_GET['vd_ext_to'] == $extension) ? "style='border-style: dotted;'" : null)." ".((!empty($ext_state) && $ext_state != 'active' && $ext_state != 'ringing') ? "ondrop='drop(event, this.id);' ondragover='allowDrop(event, this.id);' ondragleave='discardDrop(event, this.id);'" : null).">"; // DRAG TO $block = "<div id='".escape($extension)."' class='".$style."' ".(($_GET['vd_ext_from'] == $extension || $_GET['vd_ext_to'] == $extension) ? "style='border-style: dotted;'" : null)." ".(((empty($ext_state) || $ext_state != 'active') && $ext_state != 'ringing') ? "ondrop='drop(event, this.id);' ondragover='allowDrop(event, this.id);' ondragleave='discardDrop(event, this.id);'" : null).">"; // DRAG TO
$block .= "<table class='".$style."'>\n"; $block .= "<table class='".$style."'>\n";
$block .= " <tr>\n"; $block .= " <tr>\n";
$block .= " <td class='op_ext_icon'>\n"; $block .= " <td class='op_ext_icon'>\n";
+3 -3
View File
@@ -175,8 +175,8 @@
} }
} }
//if user doesn't have call block all then use the assigned extension_uuid //if user doesn't have call block extension then use the assigned extension_uuid
if (!permission_exists('call_block_all')) { if (!permission_exists('call_block_extension')) {
$extension_uuid = $_SESSION['user']['extension'][0]['extension_uuid']; $extension_uuid = $_SESSION['user']['extension'][0]['extension_uuid'];
} }
@@ -422,7 +422,7 @@ if (permission_exists('call_block_all') || permission_exists('call_block_ring_gr
echo "</td>\n"; echo "</td>\n";
echo "</tr>\n"; echo "</tr>\n";
if (permission_exists('call_block_all')) { if (permission_exists('call_block_extension')) {
echo "<tr>\n"; echo "<tr>\n";
echo "<td width='30%' class='vncell' valign='top' align='left' nowrap='nowrap'>\n"; echo "<td width='30%' class='vncell' valign='top' align='left' nowrap='nowrap'>\n";
echo " ".$text['label-extension']."\n"; echo " ".$text['label-extension']."\n";
+1 -1
View File
@@ -200,7 +200,7 @@
} }
//method 1 //method 1
$response = trim(event_socket::command($cmd)); $response = event_socket::command($cmd);
//method 2 //method 2
//cmd_async($_SESSION['switch']['bin']['dir']."/fs_cli -x \"".$cmd."\";"); //cmd_async($_SESSION['switch']['bin']['dir']."/fs_cli -x \"".$cmd."\";");
+78 -42
View File
@@ -17,7 +17,7 @@
The Initial Developer of the Original Code is The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com> Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2008-2023 Portions created by the Initial Developer are Copyright (C) 2008-2024
the Initial Developer. All Rights Reserved. the Initial Developer. All Rights Reserved.
Contributor(s): Contributor(s):
@@ -55,18 +55,20 @@
//get http post variables and set them to php variables //get http post variables and set them to php variables
if (!empty($_POST)) { if (!empty($_POST)) {
//set the variables
$attachment = $_FILES['attachment']; $attachment = $_FILES['attachment'];
$attachment_primary = $_POST['attachment_primary']; $attachment_primary = $_POST['attachment_primary'];
$attachment_description = $_POST['attachment_description']; $attachment_description = $_POST['attachment_description'];
//validate the token //validate the token
$token = new token; $token = new token;
if (!$token->validate($_SERVER['PHP_SELF'])) { if (!$token->validate($_SERVER['PHP_SELF'])) {
message::add($text['message-invalid_token'],'negative'); message::add($text['message-invalid_token'],'negative');
header('Location: contacts.php'); header('Location: contacts.php');
exit; exit;
} }
//get the attachment type
if (empty($attachment) || sizeof($attachment) == 0) { if (empty($attachment) || sizeof($attachment) == 0) {
$attachment_type = strtolower(pathinfo($_POST['attachment_filename'], PATHINFO_EXTENSION)); $attachment_type = strtolower(pathinfo($_POST['attachment_filename'], PATHINFO_EXTENSION));
} }
@@ -75,48 +77,82 @@
} }
//unflag others as primary //unflag others as primary
$allowed_primary_attachment = false; $allowed_primary_attachment = false;
if ($attachment_primary && ($attachment_type == 'jpg' || $attachment_type == 'jpeg' || $attachment_type == 'gif' || $attachment_type == 'png')) { if ($attachment_primary && ($attachment_type == 'jpg' || $attachment_type == 'jpeg' || $attachment_type == 'gif' || $attachment_type == 'png')) {
$sql = "update v_contact_attachments set attachment_primary = 0 "; $sql = "update v_contact_attachments set attachment_primary = 0 ";
$sql .= "where domain_uuid = :domain_uuid "; $sql .= "where domain_uuid = :domain_uuid ";
$sql .= "and contact_uuid = :contact_uuid "; $sql .= "and contact_uuid = :contact_uuid ";
$parameters['domain_uuid'] = $domain_uuid; $parameters['domain_uuid'] = $domain_uuid;
$parameters['contact_uuid'] = $contact_uuid; $parameters['contact_uuid'] = $contact_uuid;
$database = new database; $database = new database;
$database->execute($sql, $parameters ?? null); $database->execute($sql, $parameters ?? null);
unset($sql, $parameters); unset($sql, $parameters);
$allowed_primary_attachment = true; $allowed_primary_attachment = true;
} }
//format array //get the allowed extensions
$allowed_extensions = array_keys(json_decode($_SESSION['contact']['allowed_attachment_types']['text'], true)); $allowed_extensions = array_keys(json_decode($_SESSION['contact']['allowed_attachment_types']['text'], true));
$array['contact_attachments'][0]['contact_attachment_uuid'] = $action == 'update' ? $contact_attachment_uuid : uuid();
$array['contact_attachments'][0]['domain_uuid'] = $_SESSION['domain_uuid'] ?? ''; //get the attachment extension
$array['contact_attachments'][0]['contact_uuid'] = $contact_uuid; $attachment_extension = strtolower(pathinfo($attachment['name'], PATHINFO_EXTENSION));
$array['contact_attachments'][0]['attachment_primary'] = $allowed_primary_attachment ? 1 : 0;
if ($attachment['error'] == '0' && in_array(strtolower(pathinfo($attachment['name'], PATHINFO_EXTENSION)), $allowed_extensions)) { //check the allowed extensions
$array['contact_attachments'][0]['attachment_filename'] = $attachment['name']; if ($attachment['error'] == '0' && in_array($attachment_extension, $allowed_extensions)) {
$array['contact_attachments'][0]['attachment_content'] = base64_encode(file_get_contents($attachment['tmp_name'])); //get the attachment content
} $attachment_content = file_get_contents($attachment['tmp_name']);
$array['contact_attachments'][0]['attachment_description'] = $attachment_description;
if ($action == 'add') { //list of image extensions
$array['contact_attachments'][0]['attachment_uploaded_date'] = 'now()'; $image_extensions = array('png','jpg','jpeg','gif','bmp', 'webp');
$array['contact_attachments'][0]['attachment_uploaded_user_uuid'] = $_SESSION['user_uuid'];
//read the image from the string then output the image without meta data
if (in_array($attachment_extension, $image_extensions)) {
//create the image object from the content string
$image = imagecreatefromstring($attachment_content);
//start output buffering to capture the image data
ob_start();
//output the image without the EXIF data
imagepng($image);
//get the image from the buffer
$attachment_content = ob_get_contents();
//end the buffering
ob_end_clean();
//free up the memory
imagedestroy($image);
} }
}
//prepare the array
$array['contact_attachments'][0]['contact_attachment_uuid'] = $action == 'update' ? $contact_attachment_uuid : uuid();
$array['contact_attachments'][0]['domain_uuid'] = $_SESSION['domain_uuid'] ?? '';
$array['contact_attachments'][0]['contact_uuid'] = $contact_uuid;
$array['contact_attachments'][0]['attachment_primary'] = $allowed_primary_attachment ? 1 : 0;
if ($attachment['error'] == '0' && in_array(strtolower(pathinfo($attachment['name'], PATHINFO_EXTENSION)), $allowed_extensions)) {
$array['contact_attachments'][0]['attachment_filename'] = $attachment['name'];
$array['contact_attachments'][0]['attachment_content'] = base64_encode($attachment_content);
}
$array['contact_attachments'][0]['attachment_description'] = $attachment_description;
if ($action == 'add') {
$array['contact_attachments'][0]['attachment_uploaded_date'] = 'now()';
$array['contact_attachments'][0]['attachment_uploaded_user_uuid'] = $_SESSION['user_uuid'];
}
//save data //save data
$database = new database; $database = new database;
$database->app_name = 'contacts'; $database->app_name = 'contacts';
$database->app_uuid = '04481e0e-a478-c559-adad-52bd4174574c'; $database->app_uuid = '04481e0e-a478-c559-adad-52bd4174574c';
$database->save($array); $database->save($array);
unset($array); unset($array);
//redirect //redirect
message::add($text['message-'.($action == 'update' ? 'update' : 'uploaded')]); message::add($text['message-'.($action == 'update' ? 'update' : 'uploaded')]);
header('Location: contact_edit.php?id='.$contact_uuid); header('Location: contact_edit.php?id='.$contact_uuid);
exit; exit;
} }
//get form data //get form data
@@ -17,7 +17,7 @@
The Initial Developer of the Original Code is The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com> Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2017 - 2022 Portions created by the Initial Developer are Copyright (C) 2017 - 2023
the Initial Developer. All Rights Reserved. the Initial Developer. All Rights Reserved.
Contributor(s): Contributor(s):
@@ -462,13 +462,10 @@ if (!class_exists('destinations')) {
<?php <?php
//get the destinations //get the destinations
$destination = new destinations; $destinations = $this->get($destination_type);
if (!isset($_SESSION['destinations'][$this->domain_uuid]['array'][$destination_type])) {
$_SESSION['destinations'][$this->domain_uuid]['array'][$destination_type] = $destination->get($destination_type);
}
//get the destination label //get the destination label
foreach($_SESSION['destinations'][$this->domain_uuid]['array'][$destination_type] as $key => $value) { foreach($destinations as $key => $value) {
foreach($value as $k => $row) { foreach($value as $k => $row) {
if ($destination_value == $row['destination']) { if ($destination_value == $row['destination']) {
$destination_key = $key; $destination_key = $key;
@@ -484,7 +481,7 @@ if (!class_exists('destinations')) {
//build the destination select list in html //build the destination select list in html
$response .= " <select id='{$destination_id}_type' class='formfld' style='".$select_style."' onchange=\"get_destinations('".$destination_id."', '".$destination_type."', this.value);\">\n"; $response .= " <select id='{$destination_id}_type' class='formfld' style='".$select_style."' onchange=\"get_destinations('".$destination_id."', '".$destination_type."', this.value);\">\n";
$response .= " <option value=''></option>\n"; $response .= " <option value=''></option>\n";
foreach($_SESSION['destinations'][$this->domain_uuid]['array'][$destination_type] as $key => $value) { foreach($destinations as $key => $value) {
$singular = $this->singular($key); $singular = $this->singular($key);
if (permission_exists("{$singular}_destinations")) { if (permission_exists("{$singular}_destinations")) {
//determine if selected //determine if selected
@@ -505,7 +502,7 @@ if (!class_exists('destinations')) {
} }
$response .= " </select>\n"; $response .= " </select>\n";
$response .= " <select id='".$destination_id."' name='".$destination_name."' class='formfld' style='".$select_style." min-width: 200px;'>\n"; $response .= " <select id='".$destination_id."' name='".$destination_name."' class='formfld' style='".$select_style." min-width: 200px;'>\n";
foreach($_SESSION['destinations'][$this->domain_uuid]['array'][$destination_type] as $key => $value) { foreach($destinations as $key => $value) {
if (isset($destination_key) && $key == $destination_key) { if (isset($destination_key) && $key == $destination_key) {
foreach($value as $k => $row) { foreach($value as $k => $row) {
$selected = ($row['destination'] == $destination_value) ? "selected='selected'" : ''; $selected = ($row['destination'] == $destination_value) ? "selected='selected'" : '';
@@ -547,6 +544,9 @@ if (!class_exists('destinations')) {
//set the global variables //set the global variables
global $db_type; global $db_type;
//connect to the database
$database = new database;
//set default values //set default values
$destination_name = ''; $destination_name = '';
$destination_id = ''; $destination_id = '';
@@ -555,7 +555,6 @@ if (!class_exists('destinations')) {
$sql = "select domain_name from v_domains "; $sql = "select domain_name from v_domains ";
$sql .= "where domain_uuid = :domain_uuid "; $sql .= "where domain_uuid = :domain_uuid ";
$parameters['domain_uuid'] = $this->domain_uuid; $parameters['domain_uuid'] = $this->domain_uuid;
$database = new database;
$this->domain_name = $database->select($sql, $parameters, 'column'); $this->domain_name = $database->select($sql, $parameters, 'column');
//get the destinations //get the destinations
@@ -566,10 +565,10 @@ if (!class_exists('destinations')) {
$x = 0; $x = 0;
foreach ($config_list as &$config_path) { foreach ($config_list as &$config_path) {
try { try {
include($config_path); include($config_path);
} }
catch (Exception $e) { catch (Exception $e) {
//echo 'Caught exception: ', $e->getMessage(), "\n"; //echo 'Caught exception: ', $e->getMessage(), "\n";
} }
$x++; $x++;
} }
@@ -620,7 +619,6 @@ if (!class_exists('destinations')) {
} }
$sql .= "order by ".trim($row['order_by']); $sql .= "order by ".trim($row['order_by']);
$sql = str_replace("\${domain_uuid}", $this->domain_uuid, $sql); $sql = str_replace("\${domain_uuid}", $this->domain_uuid, $sql);
$database = new database;
$result = $database->select($sql, null, 'all'); $result = $database->select($sql, null, 'all');
$this->destinations[$x]['result']['sql'] = $sql; $this->destinations[$x]['result']['sql'] = $sql;
@@ -760,11 +758,13 @@ if (!class_exists('destinations')) {
//set the global variables //set the global variables
global $db_type; global $db_type;
//connect to the database
$database = new database;
//get the domain_name //get the domain_name
$sql = "select domain_name from v_domains "; $sql = "select domain_name from v_domains ";
$sql .= "where domain_uuid = :domain_uuid "; $sql .= "where domain_uuid = :domain_uuid ";
$parameters['domain_uuid'] = $this->domain_uuid; $parameters['domain_uuid'] = $this->domain_uuid;
$database = new database;
$this->domain_name = $database->select($sql, $parameters, 'column'); $this->domain_name = $database->select($sql, $parameters, 'column');
//get the destinations //get the destinations
@@ -830,7 +830,6 @@ if (!class_exists('destinations')) {
} }
$sql .= "order by ".trim($row['order_by']); $sql .= "order by ".trim($row['order_by']);
$sql = str_replace("\${domain_uuid}", $this->domain_uuid, $sql); $sql = str_replace("\${domain_uuid}", $this->domain_uuid, $sql);
$database = new database;
$result = $database->select($sql, null, 'all'); $result = $database->select($sql, null, 'all');
$this->destinations[$x]['result']['sql'] = $sql; $this->destinations[$x]['result']['sql'] = $sql;
@@ -892,7 +891,7 @@ if (!class_exists('destinations')) {
$text2 = $language2->get($_SESSION['domain']['language']['code'], 'app/'.$name); $text2 = $language2->get($_SESSION['domain']['language']['code'], 'app/'.$name);
} }
if (isset($row['result']) && is_array($row['result']['data']) && !empty($row['select_value'][$destination_type])) { if (isset($row['result']) && isset($row['result']['data'][0]) && !empty($row['select_value'][$destination_type])) {
$label2 = $label; $label2 = $label;
foreach ($row['result']['data'] as $data) { foreach ($row['result']['data'] as $data) {
$select_value = $row['select_value'][$destination_type]; $select_value = $row['select_value'][$destination_type];
@@ -916,7 +915,6 @@ if (!class_exists('destinations')) {
$select_label = str_replace("\${".$key."}", $data[$k], $select_label); $select_label = str_replace("\${".$key."}", $data[$k], $select_label);
} }
else { else {
$label = $data['label'];
$select_label = str_replace("\${".$key."}", $text2['option-'.$label], $select_label); $select_label = str_replace("\${".$key."}", $text2['option-'.$label], $select_label);
} }
} }
@@ -928,7 +926,6 @@ if (!class_exists('destinations')) {
$select_label = str_replace("\${".$key."}", ($data[$key] ?? ''), $select_label); $select_label = str_replace("\${".$key."}", ($data[$key] ?? ''), $select_label);
} }
else { else {
// $label = $data['label'];
$select_label = str_replace("\${".$key."}", $text2['option-'.$label], $select_label); $select_label = str_replace("\${".$key."}", $text2['option-'.$label], $select_label);
} }
} }
@@ -966,9 +963,18 @@ if (!class_exists('destinations')) {
$i++; $i++;
} }
unset($text); unset($text);
} }
//else {
// //add all main destination categories to the array
// if (!empty($row['select_value']) && !empty($row['select_value'][$destination_type])) {
// //add to the destination array if a matching destination type is found
// $array[$name] = [];
// }
// else {
// $array[$name] = [];
// }
//}
} }
if (!$selected) { if (!$selected) {
+2 -2
View File
@@ -851,7 +851,7 @@
$template = file_get_contents('/var/www/fusionpbx/resources/templates/provision/'.$device_template.'/template.csv'); $template = file_get_contents('/var/www/fusionpbx/resources/templates/provision/'.$device_template.'/template.csv');
} }
if (!empty($template)) { if (!empty($template)) {
$template = str_replace('{$server_address}', $outbound_proxy_primary, $template); $template = str_replace('{$server_address}', $row['server_address'], $template);
$template = str_replace('{$user_id}', $row['user_id'], $template); $template = str_replace('{$user_id}', $row['user_id'], $template);
$template = str_replace('{$password}', str_replace(';',';;',$row['password']), $template); $template = str_replace('{$password}', str_replace(';',';;',$row['password']), $template);
$template = str_replace('{$display_name}', ($row['display_name'] ?? $row['user_id']), $template); $template = str_replace('{$display_name}', ($row['display_name'] ?? $row['user_id']), $template);
@@ -1239,7 +1239,7 @@
if (empty($row['server_address'])) { $row['server_address'] = $_SESSION['domain_name']; } if (empty($row['server_address'])) { $row['server_address'] = $_SESSION['domain_name']; }
} }
if (empty($row['sip_transport'])) { $row['sip_transport'] = $_SESSION['provision']['line_sip_transport']['text']; } if (empty($row['sip_transport'])) { $row['sip_transport'] = $_SESSION['provision']['line_sip_transport']['text']; }
if (empty($row['sip_port'])) { $row['sip_port'] = $_SESSION['provision']['line_sip_port']['numeric']; } if (!isset($row['sip_port'])) { $row['sip_port'] = $_SESSION['provision']['line_sip_port']['numeric']; } //used !isset to support a value of 0 as empty the empty function considers a value of 0 as empty.
if (empty($row['register_expires'])) { $row['register_expires'] = $_SESSION['provision']['line_register_expires']['numeric']; } if (empty($row['register_expires'])) { $row['register_expires'] = $_SESSION['provision']['line_register_expires']['numeric']; }
//add the primary key uuid //add the primary key uuid
@@ -613,7 +613,6 @@
$array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_type'] = 'set'; $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_type'] = 'set';
if ($dialplan_expression == '(^911$|^933$)') { if ($dialplan_expression == '(^911$|^933$)') {
$array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_data'] = 'effective_caller_id_number=${emergency_caller_id_number}'; $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_data'] = 'effective_caller_id_number=${emergency_caller_id_number}';
$array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_data'] = 'call_date=${strftime(%d-%b-%Y %r)}';
} }
else { else {
$array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_data'] = 'effective_caller_id_number=${outbound_caller_id_number}'; $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_data'] = 'effective_caller_id_number=${outbound_caller_id_number}';
@@ -623,6 +622,16 @@
$array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_enabled'] = 'true'; $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_enabled'] = 'true';
if ($dialplan_expression == '(^911$|^933$)') { if ($dialplan_expression == '(^911$|^933$)') {
$y++;
$array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_uuid'] = uuid();
$array['dialplans'][$x]['dialplan_details'][$y]['domain_uuid'] = $_SESSION['domain_uuid'];
$array['dialplans'][$x]['dialplan_details'][$y]['dialplan_uuid'] = $dialplan_uuid;
$array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_tag'] = 'action';
$array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_type'] = 'set';
$array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_data'] = 'call_date=${strftime(%d-%b-%Y %r)}';
$array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_order'] = $y * 10;
$array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_group'] = '0';
$array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_enabled'] = 'false';
$y++; $y++;
$array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_uuid'] = uuid(); $array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_uuid'] = uuid();
$array['dialplans'][$x]['dialplan_details'][$y]['domain_uuid'] = $_SESSION['domain_uuid']; $array['dialplans'][$x]['dialplan_details'][$y]['domain_uuid'] = $_SESSION['domain_uuid'];
@@ -1,7 +1,7 @@
<extension name="extension-to-voicemail" number="[ext]" context="global" continue="false" app_uuid="8a2e7b81-996c-4d6b-87df-b879b972a572" global="true" order="310"> <extension name="extension-to-voicemail" number="[ext]" context="global" continue="false" app_uuid="8a2e7b81-996c-4d6b-87df-b879b972a572" global="true" order="310">
<condition field="${user_exists}" expression="^true$" /> <condition field="${user_exists}" expression="^true$" />
<condition field="username" expression="^${caller_id_number}$" /> <condition field="username" expression="^\Q${caller_id_number}\E$" />
<condition field="destination_number" expression="^${caller_id_number}$"> <condition field="destination_number" expression="^\Q${caller_id_number}\E$">
<action application="answer"/> <action application="answer"/>
<action application="sleep" data="1000"/> <action application="sleep" data="1000"/>
<action application="set" data="record_append=false"/> <action application="set" data="record_append=false"/>
+52 -53
View File
@@ -19,78 +19,77 @@
$apps[$x]['description']['pt-pt'] = ''; $apps[$x]['description']['pt-pt'] = '';
$apps[$x]['description']['pt-br'] = ''; $apps[$x]['description']['pt-br'] = '';
//permission details //default settings
$y=0; $y=0;
$apps[$x]['permissions'][$y]['name'] = "emergency_logs_view"; $apps[$x]['default_settings'][$y]['default_setting_uuid'] = "9317ddfd-6cb1-4294-9c57-4061dde66fe4";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin"; $apps[$x]['default_settings'][$y]['default_setting_category'] = "dialplan";
$apps[$x]['permissions'][$y]['menu']['uuid'] = "23a6fc8a-77f1-11ee-88b0-005056a27559"; $apps[$x]['default_settings'][$y]['default_setting_subcategory'] = "emergency_email_address";
$apps[$x]['default_settings'][$y]['default_setting_name'] = "text";
$apps[$x]['default_settings'][$y]['default_setting_value'] = "";
$apps[$x]['default_settings'][$y]['default_setting_enabled'] = "false";
$apps[$x]['default_settings'][$y]['default_setting_description'] = "Email address used to send emergency call notifications.";
//permission details
$y=0;
$apps[$x]['permissions'][$y]['name'] = "emergency_logs_view";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$apps[$x]['permissions'][$y]['menu']['uuid'] = "23a6fc8a-77f1-11ee-88b0-005056a27559";
$y++; $y++;
$apps[$x]['permissions'][$y]['name'] = "emergency_logs_view_all"; $apps[$x]['permissions'][$y]['name'] = "emergency_logs_view_all";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin"; $apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$y++; $y++;
//schema details //schema details
$z=0; $z=0;
$apps[$x]['db'][$y]['table']['name'] = "v_emergency_logs"; $apps[$x]['db'][$y]['table']['name'] = "v_emergency_logs";
$apps[$x]['db'][$y]['table']['parent'] = ""; $apps[$x]['db'][$y]['table']['parent'] = "";
$apps[$x]['db'][$y]['fields'][$z]['name'] = 'log_uuid'; $apps[$x]['db'][$y]['fields'][$z]['name'] = 'emergency_log_uuid';
$apps[$x]['db'][$y]['fields'][$z]['type']['pgsql'] = 'uuid'; $apps[$x]['db'][$y]['fields'][$z]['type']['pgsql'] = 'uuid';
$apps[$x]['db'][$y]['fields'][$z]['key']['type'] = 'primary'; $apps[$x]['db'][$y]['fields'][$z]['key']['type'] = 'primary';
$apps[$x]['db'][$y]['fields'][$z]['description'] = ''; $apps[$x]['db'][$y]['fields'][$z]['description'] = '';
$z++; $z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = 'domain_uuid'; $apps[$x]['db'][$y]['fields'][$z]['name'] = 'domain_uuid';
$apps[$x]['db'][$y]['fields'][$z]['type']['pgsql'] = 'uuid'; $apps[$x]['db'][$y]['fields'][$z]['type']['pgsql'] = 'uuid';
$apps[$x]['db'][$y]['fields'][$z]['type']['sqlite'] = 'text'; $apps[$x]['db'][$y]['fields'][$z]['type']['sqlite'] = 'text';
$apps[$x]['db'][$y]['fields'][$z]['type']['mysql'] = 'char(36)'; $apps[$x]['db'][$y]['fields'][$z]['type']['mysql'] = 'char(36)';
$apps[$x]['db'][$y]['fields'][$z]['key']['type'] = 'foreign'; $apps[$x]['db'][$y]['fields'][$z]['key']['type'] = 'foreign';
$apps[$x]['db'][$y]['fields'][$z]['key']['reference']['table'] = 'v_domains'; $apps[$x]['db'][$y]['fields'][$z]['key']['reference']['table'] = 'v_domains';
$apps[$x]['db'][$y]['fields'][$z]['key']['reference']['field'] = 'domain_uuid'; $apps[$x]['db'][$y]['fields'][$z]['key']['reference']['field'] = 'domain_uuid';
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = 'date';
$apps[$x]['db'][$y]['fields'][$z]['type']['pgsql'] = 'text';
$apps[$x]['db'][$y]['fields'][$z]['type']['sqlite'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['type']['mysql'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['description'] = '';
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = 'time';
$apps[$x]['db'][$y]['fields'][$z]['type']['pgsql'] = 'text';
$apps[$x]['db'][$y]['fields'][$z]['type']['sqlite'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['type']['mysql'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['description'] = '';
$z++; $z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = 'extension'; $apps[$x]['db'][$y]['fields'][$z]['name'] = 'extension';
$apps[$x]['db'][$y]['fields'][$z]['type']['pgsql'] = 'numeric'; $apps[$x]['db'][$y]['fields'][$z]['type']['pgsql'] = 'numeric';
$apps[$x]['db'][$y]['fields'][$z]['type']['sqlite'] = "text"; $apps[$x]['db'][$y]['fields'][$z]['type']['sqlite'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['type']['mysql'] = "char(36)"; $apps[$x]['db'][$y]['fields'][$z]['type']['mysql'] = "char(36)";
$apps[$x]['db'][$y]['fields'][$z]['description'] = ''; $apps[$x]['db'][$y]['fields'][$z]['description'] = '';
$z++; $z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = 'event'; $apps[$x]['db'][$y]['fields'][$z]['name'] = 'event';
$apps[$x]['db'][$y]['fields'][$z]['type']['pgsql'] = "text"; $apps[$x]['db'][$y]['fields'][$z]['type']['pgsql'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['type']['sqlite'] = "text"; $apps[$x]['db'][$y]['fields'][$z]['type']['sqlite'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['type']['mysql'] = "text"; $apps[$x]['db'][$y]['fields'][$z]['type']['mysql'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['description'] = ''; $apps[$x]['db'][$y]['fields'][$z]['description'] = '';
$z++; $z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "insert_date"; $apps[$x]['db'][$y]['fields'][$z]['name'] = "insert_date";
$apps[$x]['db'][$y]['fields'][$z]['type']['pgsql'] = 'timestamptz'; $apps[$x]['db'][$y]['fields'][$z]['type']['pgsql'] = 'timestamptz';
$apps[$x]['db'][$y]['fields'][$z]['type']['sqlite'] = 'date'; $apps[$x]['db'][$y]['fields'][$z]['type']['sqlite'] = 'date';
$apps[$x]['db'][$y]['fields'][$z]['type']['mysql'] = 'date'; $apps[$x]['db'][$y]['fields'][$z]['type']['mysql'] = 'date';
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = ""; $apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
$z++; $z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "insert_user"; $apps[$x]['db'][$y]['fields'][$z]['name'] = "insert_user";
$apps[$x]['db'][$y]['fields'][$z]['type']['pgsql'] = "uuid"; $apps[$x]['db'][$y]['fields'][$z]['type']['pgsql'] = "uuid";
$apps[$x]['db'][$y]['fields'][$z]['type']['sqlite'] = "text"; $apps[$x]['db'][$y]['fields'][$z]['type']['sqlite'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['type']['mysql'] = "char(36)"; $apps[$x]['db'][$y]['fields'][$z]['type']['mysql'] = "char(36)";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = ""; $apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
$z++; $z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "update_date"; $apps[$x]['db'][$y]['fields'][$z]['name'] = "update_date";
$apps[$x]['db'][$y]['fields'][$z]['type']['pgsql'] = 'timestamptz'; $apps[$x]['db'][$y]['fields'][$z]['type']['pgsql'] = 'timestamptz';
$apps[$x]['db'][$y]['fields'][$z]['type']['sqlite'] = 'date'; $apps[$x]['db'][$y]['fields'][$z]['type']['sqlite'] = 'date';
$apps[$x]['db'][$y]['fields'][$z]['type']['mysql'] = 'date'; $apps[$x]['db'][$y]['fields'][$z]['type']['mysql'] = 'date';
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = ""; $apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
$z++; $z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = "update_user"; $apps[$x]['db'][$y]['fields'][$z]['name'] = "update_user";
$apps[$x]['db'][$y]['fields'][$z]['type']['pgsql'] = "uuid"; $apps[$x]['db'][$y]['fields'][$z]['type']['pgsql'] = "uuid";
$apps[$x]['db'][$y]['fields'][$z]['type']['sqlite'] = "text"; $apps[$x]['db'][$y]['fields'][$z]['type']['sqlite'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['type']['mysql'] = "char(36)"; $apps[$x]['db'][$y]['fields'][$z]['type']['mysql'] = "char(36)";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = ""; $apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
?> ?>
+133
View File
@@ -0,0 +1,133 @@
<?php
$text['title-emergency_logs']['en-us'] = "Emergency Logs";
$text['title-emergency_logs']['en-gb'] = "Emergency Logs";
$text['title-emergency_logs']['ar-eg'] = "سجلات الطوارئ";
$text['title-emergency_logs']['de-at'] = "Notfall-Protokolle";
$text['title-emergency_logs']['de-ch'] = "Notfall-Protokolle";
$text['title-emergency_logs']['de-de'] = "Notfall-Protokolle";
$text['title-emergency_logs']['el-gr'] = "Μητρώα Έκτακτης Ανάγκης";
$text['title-emergency_logs']['es-cl'] = "Registros de emergencia";
$text['title-emergency_logs']['es-mx'] = "Registros de emergencia";
$text['title-emergency_logs']['fr-ca'] = "Journaux d'urgence";
$text['title-emergency_logs']['fr-fr'] = "Journaux d'urgence";
$text['title-emergency_logs']['he-il'] = "יומני חירום";
$text['title-emergency_logs']['it-it'] = "Registri di emergenza";
$text['title-emergency_logs']['nl-nl'] = "Noodlogboeken";
$text['title-emergency_logs']['pl-pl'] = "Dzienniki awaryjne";
$text['title-emergency_logs']['pt-br'] = "Registros de emergência";
$text['title-emergency_logs']['pt-pt'] = "Registros de emergência";
$text['title-emergency_logs']['ro-ro'] = "Jurnalele de urgență";
$text['title-emergency_logs']['ru-ru'] = "Журналы аварийных ситуаций";
$text['title-emergency_logs']['sv-se'] = "Nödloggar";
$text['title-emergency_logs']['uk-ua'] = "Журнали надзвичайних ситуацій";
$text['title-emergency_logs']['tr-tr'] = "Acil Durum Günlükleri";
$text['title-emergency_logs']['zh-cn'] = "紧急日志";
$text['title-emergency_logs']['ja-jp'] = "緊急ログ";
$text['title-emergency_logs']['ko-kr'] = "비상 기록";
$text['label-emergency_time']['en-us'] = "Time";
$text['label-emergency_time']['en-gb'] = "Time";
$text['label-emergency_time']['ar-eg'] = "وقت";
$text['label-emergency_time']['de-at'] = "Zeitpunkt";
$text['label-emergency_time']['de-ch'] = "Zeitpunkt";
$text['label-emergency_time']['de-de'] = "Zeitpunkt";
$text['label-emergency_time']['el-gr'] = "χρόνος";
$text['label-emergency_time']['es-cl'] = "Tiempo";
$text['label-emergency_time']['es-mx'] = "Tiempo";
$text['label-emergency_time']['fr-ca'] = "Temps";
$text['label-emergency_time']['fr-fr'] = "Temps";
$text['label-emergency_time']['he-il'] = "זְמַן";
$text['label-emergency_time']['it-it'] = "Tempo";
$text['label-emergency_time']['nl-nl'] = "Tijd";
$text['label-emergency_time']['pl-pl'] = "Czas";
$text['label-emergency_time']['pt-br'] = "Tempo";
$text['label-emergency_time']['pt-pt'] = "Tempo";
$text['label-emergency_time']['ro-ro'] = "Timp";
$text['label-emergency_time']['ru-ru'] = "Время";
$text['label-emergency_time']['sv-se'] = "Tid";
$text['label-emergency_time']['uk-ua'] = "час";
$text['label-emergency_time']['tr-tr'] = "Zaman";
$text['label-emergency_time']['zh-cn'] = "时间";
$text['label-emergency_time']['ja-jp'] = "時間";
$text['label-emergency_time']['ko-kr'] = "시간";
$text['label-emergency_date']['en-us'] = "Date";
$text['label-emergency_date']['en-gb'] = "Date";
$text['label-emergency_date']['ar-eg'] = "تاريخ";
$text['label-emergency_date']['de-at'] = "Datum";
$text['label-emergency_date']['de-ch'] = "Datum";
$text['label-emergency_date']['de-de'] = "Datum";
$text['label-emergency_date']['el-gr'] = "Date";
$text['label-emergency_date']['es-cl'] = "Fecha";
$text['label-emergency_date']['es-mx'] = "Fecha";
$text['label-emergency_date']['fr-ca'] = "Date";
$text['label-emergency_date']['fr-fr'] = "Date";
$text['label-emergency_date']['he-il'] = "תַאֲרִיך";
$text['label-emergency_date']['it-it'] = "Data";
$text['label-emergency_date']['nl-nl'] = "Datum";
$text['label-emergency_date']['pl-pl'] = "Data";
$text['label-emergency_date']['pt-br'] = "Data";
$text['label-emergency_date']['pt-pt'] = "Data";
$text['label-emergency_date']['ro-ro'] = "Data";
$text['label-emergency_date']['ru-ru'] = "Дата";
$text['label-emergency_date']['sv-se'] = "Datum";
$text['label-emergency_date']['uk-ua'] = "Дата";
$text['label-emergency_date']['tr-tr'] = "Tarih";
$text['label-emergency_date']['zh-cn'] = "日期";
$text['label-emergency_date']['ja-jp'] = "日付";
$text['label-emergency_date']['ko-kr'] = "날짜";
$text['label-emergency_extension']['en-us'] = "Extension";
$text['label-emergency_extension']['en-gb'] = "Extension";
$text['label-emergency_extension']['ar-eg'] = "امتداد";
$text['label-emergency_extension']['de-at'] = "Nebenstelle";
$text['label-emergency_extension']['de-ch'] = "Nebenstelle";
$text['label-emergency_extension']['de-de'] = "Nebenstelle";
$text['label-emergency_extension']['el-gr'] = "Επέκταση";
$text['label-emergency_extension']['es-cl'] = "Extensión";
$text['label-emergency_extension']['es-mx'] = "Extensión";
$text['label-emergency_extension']['fr-ca'] = "Extension";
$text['label-emergency_extension']['fr-fr'] = "Extension";
$text['label-emergency_extension']['he-il'] = "סיומת";
$text['label-emergency_extension']['it-it'] = "Estensione";
$text['label-emergency_extension']['nl-nl'] = "Verlenging";
$text['label-emergency_extension']['pl-pl'] = "Rozszerzenie";
$text['label-emergency_extension']['pt-br'] = "Extensão";
$text['label-emergency_extension']['pt-pt'] = "Extensão";
$text['label-emergency_extension']['ro-ro'] = "Extensie";
$text['label-emergency_extension']['ru-ru'] = "Расширение";
$text['label-emergency_extension']['sv-se'] = "Förlängning";
$text['label-emergency_extension']['uk-ua'] = "Розширення";
$text['label-emergency_extension']['tr-tr'] = "Eklenti";
$text['label-emergency_extension']['zh-cn'] = "扩大";
$text['label-emergency_extension']['ja-jp'] = "拡大";
$text['label-emergency_extension']['ko-kr'] = "확대";
$text['label-emergency_event']['en-us'] = "Event";
$text['label-emergency_event']['en-gb'] = "Event";
$text['label-emergency_event']['ar-eg'] = "حدث";
$text['label-emergency_event']['de-at'] = "Ereignis";
$text['label-emergency_event']['de-ch'] = "Ereignis";
$text['label-emergency_event']['de-de'] = "Ereignis";
$text['label-emergency_event']['el-gr'] = "Εκδήλωση";
$text['label-emergency_event']['es-cl'] = "Evento";
$text['label-emergency_event']['es-mx'] = "Evento";
$text['label-emergency_event']['fr-ca'] = "Événement";
$text['label-emergency_event']['fr-fr'] = "Événement";
$text['label-emergency_event']['he-il'] = "מִקרֶה";
$text['label-emergency_event']['it-it'] = "Evento";
$text['label-emergency_event']['nl-nl'] = "Evenement";
$text['label-emergency_event']['pl-pl'] = "Wydarzenie";
$text['label-emergency_event']['pt-br'] = "Evento";
$text['label-emergency_event']['pt-pt'] = "Evento";
$text['label-emergency_event']['ro-ro'] = "Eveniment";
$text['label-emergency_event']['ru-ru'] = "Событие";
$text['label-emergency_event']['sv-se'] = "Händelse";
$text['label-emergency_event']['uk-ua'] = "Подія";
$text['label-emergency_event']['tr-tr'] = "Etkinlik";
$text['label-emergency_event']['zh-cn'] = "事件";
$text['label-emergency_event']['ja-jp'] = "イベント";
$text['label-emergency_event']['ko-kr'] = "이벤트";
?>
+18 -12
View File
@@ -78,9 +78,8 @@ if (!empty($_GET["show"])) {
$show = $_GET["show"]; $show = $_GET["show"];
} }
//get the count //get the count
$sql = "select count(log_uuid) "; $sql = "select count(emergency_log_uuid) ";
$sql .= "from v_emergency_logs "; $sql .= "from v_emergency_logs ";
if ($show == 'all') { if ($show == 'all') {
$sql .= "where true "; $sql .= "where true ";
@@ -117,7 +116,13 @@ else {
} }
//get the list //get the list
$sql = "select * "; $sql = "select emergency_log_uuid, ";
$sql .= "domain_uuid, ";
$sql .= "extension, ";
$sql .= "event, ";
$sql .= "to_char(timezone(:time_zone, insert_date), 'DD Mon YYYY') as date_formatted, ";
$sql .= "to_char(timezone(:time_zone, insert_date), 'HH12:MI:SS am') as time_formatted, ";
$sql .= "insert_date ";
$sql .= "from v_emergency_logs "; $sql .= "from v_emergency_logs ";
if ($show == 'all') { if ($show == 'all') {
$sql .= "where true "; $sql .= "where true ";
@@ -132,8 +137,9 @@ if (!empty($search)) {
$sql .= ") "; $sql .= ") ";
$parameters['search'] = '%'.$search.'%'; $parameters['search'] = '%'.$search.'%';
} }
$sql .= "order by insert_date desc ";
$sql .= limit_offset($rows_per_page, $offset); $sql .= limit_offset($rows_per_page, $offset);
$parameters['time_zone'] = $time_zone;
$database = new database; $database = new database;
$emergency_logs = $database->select($sql, $parameters ?? null, 'all'); $emergency_logs = $database->select($sql, $parameters ?? null, 'all');
unset($sql, $parameters); unset($sql, $parameters);
@@ -143,12 +149,12 @@ $object = new token;
$token = $object->create($_SERVER['PHP_SELF']); $token = $object->create($_SERVER['PHP_SELF']);
//additional includes //additional includes
$document['title'] = 'Emergency Logs'; $document['title'] = $text['title-emergency_logs'];
require_once "resources/header.php"; require_once "resources/header.php";
//show the content //show the content
echo "<div class='action_bar' id='action_bar'>\n"; echo "<div class='action_bar' id='action_bar'>\n";
echo " <div class='heading'><b>Emergency Logs (".$num_rows.")</b></div>\n"; echo " <div class='heading'><b>".$text['title-emergency_logs']." (".$num_rows.")</b></div>\n";
echo " <div class='actions'>\n"; echo " <div class='actions'>\n";
if ($emergency_logs) { if ($emergency_logs) {
echo button::create(['type'=>'button','label'=>$text['button-delete'],'icon'=>$_SESSION['theme']['button_icon_delete'],'id'=>'btn_delete','name'=>'btn_delete','style'=>'display:none;','onclick'=>"modal_open('modal-delete','btn_delete');"]); echo button::create(['type'=>'button','label'=>$text['button-delete'],'icon'=>$_SESSION['theme']['button_icon_delete'],'id'=>'btn_delete','name'=>'btn_delete','style'=>'display:none;','onclick'=>"modal_open('modal-delete','btn_delete');"]);
@@ -181,18 +187,18 @@ echo "<br /><br />\n";
echo "<table class='list'>\n"; echo "<table class='list'>\n";
echo "<tr class='list-header'>\n"; echo "<tr class='list-header'>\n";
echo "<th class='left'>Time</th>\n"; echo "<th class='left'>".$text['label-emergency_time']."</th>\n";
echo "<th class='left'>Date</th>\n"; echo "<th class='left'>".$text['label-emergency_date']."</th>\n";
echo "<th class='left'>Extension</th>\n"; echo "<th class='left'>".$text['label-emergency_extension']."</th>\n";
echo "<th class='left'>Event</th>\n"; echo "<th class='left'>".$text['label-emergency_event']."</th>\n";
echo "</tr>\n"; echo "</tr>\n";
if (!empty($emergency_logs) && is_array($emergency_logs) && @sizeof($emergency_logs) != 0) { if (!empty($emergency_logs) && is_array($emergency_logs) && @sizeof($emergency_logs) != 0) {
$x = 0; $x = 0;
foreach ($emergency_logs as $row) { foreach ($emergency_logs as $row) {
echo "<tr class='list-row'>\n"; echo "<tr class='list-row'>\n";
echo " <td>".escape($row['time'])."</td>\n"; echo " <td>".escape($row['time_formatted'])."</td>\n";
echo " <td>".escape($row['date'])."</td>\n"; echo " <td>".escape($row['date_formatted'])."</td>\n";
echo " <td>".escape($row['extension'])."</td>\n"; echo " <td>".escape($row['extension'])."</td>\n";
echo " <td>".escape($row['event'])."</td>\n"; echo " <td>".escape($row['event'])."</td>\n";
echo "</tr>\n"; echo "</tr>\n";
+3
View File
@@ -473,6 +473,7 @@ if (!function_exists('fax_split_dtmf')) {
//field labels //field labels
$pdf->SetFont($pdf_font, "B", 12); $pdf->SetFont($pdf_font, "B", 12);
$pdf->Text($x + 0.5, $y + 1.7, strtoupper($text['label-fax_date']).":");
if ($fax_recipient != '' || sizeof($fax_numbers) > 0) { if ($fax_recipient != '' || sizeof($fax_numbers) > 0) {
$pdf->Text($x + 0.5, $y + 2.0, strtoupper($text['label-fax-recipient']).":"); $pdf->Text($x + 0.5, $y + 2.0, strtoupper($text['label-fax-recipient']).":");
} }
@@ -488,6 +489,8 @@ if (!function_exists('fax_split_dtmf')) {
//field values //field values
$pdf->SetFont($pdf_font, "", 12); $pdf->SetFont($pdf_font, "", 12);
$pdf->SetXY($x + 2.0, $y + 1.65);
$pdf->Write(0.3, date("F j, Y g:i A"));
$pdf->SetXY($x + 2.0, $y + 1.95); $pdf->SetXY($x + 2.0, $y + 1.95);
if ($fax_recipient != '') { if ($fax_recipient != '') {
$pdf->Write(0.3, $fax_recipient); $pdf->Write(0.3, $fax_recipient);
+24 -25
View File
@@ -98,43 +98,42 @@
//get the count //get the count
$sql = "select count(fax_queue_uuid) "; $sql = "select count(fax_queue_uuid) ";
$sql .= "from v_fax_queue as q "; $sql .= "from v_fax_queue as q ";
$sql .= "LEFT JOIN v_users AS u ON q.insert_user = u.user_uuid ";
if (!empty($_GET['show']) && $_GET['show'] == "all" && permission_exists('fax_queue_all')) { if (!empty($_GET['show']) && $_GET['show'] == "all" && permission_exists('fax_queue_all')) {
//show faxes for all domains // show faxes for all domains
$sql .= "where true "; $sql .= "WHERE true ";
} }
elseif (permission_exists('fax_queue_domain')) { elseif (permission_exists('fax_queue_domain')) {
//show faxes for one domain // show faxes for one domain
$sql .= "where q.domain_uuid = :domain_uuid "; $sql .= "WHERE q.domain_uuid = :domain_uuid ";
$parameters['domain_uuid'] = $domain_uuid; $parameters['domain_uuid'] = $domain_uuid;
} }
else { else {
//show only assigned fax extensions // show only assigned fax extensions
$sql = trim($sql); $sql .= "WHERE q.domain_uuid = :domain_uuid ";
$sql .= "from v_fax_queue as q, v_domains as d, v_users as u \n"; $sql .= "AND u.user_uuid = :user_uuid ";
$sql .= "where q.domain_uuid = d.domain_uuid \n";
$sql .= "and q.insert_user = u.user_uuid \n";
$sql .= "and q.domain_uuid = :domain_uuid \n";
$sql .= "and u.user_uuid = :user_uuid \n";
$parameters['domain_uuid'] = $domain_uuid; $parameters['domain_uuid'] = $domain_uuid;
$parameters['user_uuid'] = $_SESSION['user_uuid']; $parameters['user_uuid'] = $_SESSION['user_uuid'];
} }
if (isset($search)) { if (isset($search)) {
$sql .= "and (\n"; $sql .= "AND (";
$sql .= " lower(q.hostname) like :search \n"; $sql .= " LOWER(q.hostname) LIKE :search ";
$sql .= " or lower(q.fax_caller_id_name) like :search \n"; $sql .= " OR LOWER(q.fax_caller_id_name) LIKE :search ";
$sql .= " or lower(q.fax_caller_id_number) like :search \n"; $sql .= " OR LOWER(q.fax_caller_id_number) LIKE :search ";
$sql .= " or lower(q.fax_number) like :search \n"; $sql .= " OR LOWER(q.fax_number) LIKE :search ";
$sql .= " or lower(q.fax_email_address) like :search \n"; $sql .= " OR LOWER(q.fax_email_address) LIKE :search ";
$sql .= " or lower(q.insert_user) like :search \n"; $sql .= " OR LOWER(u.username) LIKE :search ";
$sql .= " or lower(q.fax_file) like :search \n"; $sql .= " OR LOWER(q.fax_file) LIKE :search ";
$sql .= " or lower(q.fax_status) like :search \n"; $sql .= " OR LOWER(q.fax_status) LIKE :search ";
$sql .= " or lower(q.fax_accountcode) like :search \n"; $sql .= " OR LOWER(q.fax_accountcode) LIKE :search ";
$sql .= ") "; $sql .= ") ";
$parameters['search'] = '%'.$search.'%'; $parameters['search'] = '%' . $search . '%';
} }
if (isset($_GET["fax_status"]) && !empty($_GET["fax_status"])) { if (isset($_GET["fax_status"]) && !empty($_GET["fax_status"])) {
$sql .= "and q.fax_status = :fax_status \n"; $sql .= "AND q.fax_status = :fax_status ";
$parameters['fax_status'] = $_GET["fax_status"]; $parameters['fax_status'] = $_GET["fax_status"];
} }
$database = new database; $database = new database;
$num_rows = $database->select($sql, $parameters ?? null, 'column'); $num_rows = $database->select($sql, $parameters ?? null, 'column');
@@ -177,7 +176,7 @@
$sql .= "q.fax_accountcode, "; $sql .= "q.fax_accountcode, ";
$sql .= "q.fax_command "; $sql .= "q.fax_command ";
$sql .= "FROM v_fax_queue AS q "; $sql .= "FROM v_fax_queue AS q ";
$sql .= "JOIN v_users AS u ON q.insert_user = u.user_uuid "; $sql .= "LEFT JOIN v_users AS u ON q.insert_user = u.user_uuid ";
$sql .= "JOIN v_domains AS d ON q.domain_uuid = d.domain_uuid "; $sql .= "JOIN v_domains AS d ON q.domain_uuid = d.domain_uuid ";
if (!empty($_GET['show']) && $_GET['show'] == "all" && permission_exists('fax_queue_all')) { if (!empty($_GET['show']) && $_GET['show'] == "all" && permission_exists('fax_queue_all')) {
+40 -18
View File
@@ -103,6 +103,16 @@
return $exists; return $exists;
} }
//remove single quote
function escape_quote($value) {
if (!empty($value)) {
return str_replace("'", "", $value);
}
else {
return false;
}
}
//check to see if the process exists //check to see if the process exists
$pid_exists = process_exists($pid_file); $pid_exists = process_exists($pid_file);
@@ -177,10 +187,10 @@
//prepare the smtp from and from name variables //prepare the smtp from and from name variables
$email_from = $setting->get('fax','smtp_from'); $email_from = $setting->get('fax','smtp_from');
$email_from_name = $setting->get('fax','smtp_from_name'); $email_from_name = $setting->get('fax','smtp_from_name');
if (!empty($email_from)) { if (empty($email_from)) {
$email_from = $setting->get('email','smtp_from'); $email_from = $setting->get('email','smtp_from');
} }
if (!empty($email_from_name)) { if (empty($email_from_name)) {
$email_from_name = $setting->get('email','smtp_from_name'); $email_from_name = $setting->get('email','smtp_from_name');
} }
@@ -246,15 +256,15 @@
//define the fax file //define the fax file
$common_variables = ''; $common_variables = '';
$common_variables = "accountcode='" . $fax_accountcode . "',"; $common_variables = "accountcode='" . escape_quote($fax_accountcode) . "',";
$common_variables .= "sip_h_accountcode='" . $fax_accountcode . "',"; $common_variables .= "sip_h_accountcode='" . escape_quote($fax_accountcode) . "',";
$common_variables .= "domain_uuid=" . $domain_uuid . ","; $common_variables .= "domain_uuid=" . $domain_uuid . ",";
$common_variables .= "domain_name=" . $domain_name . ","; $common_variables .= "domain_name=" . $domain_name . ",";
$common_variables .= "origination_caller_id_name='" . $fax_caller_id_name . "',"; $common_variables .= "origination_caller_id_name='" . escape_quote($fax_caller_id_name) . "',";
$common_variables .= "origination_caller_id_number='" . $fax_caller_id_number . "',"; $common_variables .= "origination_caller_id_number=" . $fax_caller_id_number . ",";
$common_variables .= "fax_ident='" . $fax_caller_id_number . "',"; $common_variables .= "fax_ident='" . escape_quote($fax_caller_id_number) . "',";
$common_variables .= "fax_header='" . $fax_caller_id_name . "',"; $common_variables .= "fax_header='" . escape_quote($fax_caller_id_name) . "',";
$common_variables .= "fax_file='" . $fax_file . "',"; $common_variables .= "fax_file='" . escape_quote($fax_file) . "',";
//extract fax_dtmf from the fax number //extract fax_dtmf from the fax number
fax_split_dtmf($fax_number, $fax_dtmf); fax_split_dtmf($fax_number, $fax_dtmf);
@@ -265,12 +275,22 @@
} }
$route_array = outbound_route_to_bridge($domain_uuid, $fax_prefix . $fax_number, $channel_variables); $route_array = outbound_route_to_bridge($domain_uuid, $fax_prefix . $fax_number, $channel_variables);
if (count($route_array) == 0) { if (count($route_array) == 0) {
//send the internal call to the registered extension //check for valid extension
$fax_uri = "user/".$fax_number."@".$domain_name; $sql = "select count(extension_uuid) ";
} $sql .= "from v_extensions ";
else { $sql .= "where extension = :fax_number ";
//send the external call $sql .= "and domain_uuid = :domain_uuid ";
$fax_uri = $route_array[0]; $parameters['domain_uuid'] = $domain_uuid;
$parameters['fax_number'] = $fax_number;
$database = new database;
$extension_count = $database->select($sql, $parameters, 'column');
if ($extension_count > 0) {
//send the internal call to the registered extension
$route_array[] = "user/".$fax_number."@".$domain_name;
}
else {
$fax_status = 'failed';
}
} }
//set the origination uuid //set the origination uuid
@@ -316,7 +336,9 @@
$fax_instance_id = pathinfo($fax_file, PATHINFO_FILENAME); $fax_instance_id = pathinfo($fax_file, PATHINFO_FILENAME);
//set the fax status //set the fax status
$fax_status = 'sending'; if (empty($fax_status)) {
$fax_status = 'sending';
}
//update the database to say status to trying and set the command //update the database to say status to trying and set the command
$array['fax_queue'][0]['fax_queue_uuid'] = $fax_queue_uuid; $array['fax_queue'][0]['fax_queue_uuid'] = $fax_queue_uuid;
+51 -2
View File
@@ -102,6 +102,14 @@
$apps[$x]['default_settings'][$y]['default_setting_enabled'] = "true"; $apps[$x]['default_settings'][$y]['default_setting_enabled'] = "true";
$apps[$x]['default_settings'][$y]['default_setting_description'] = "Default VLAN for phone LAN port. Default 0 is disabled."; $apps[$x]['default_settings'][$y]['default_setting_description'] = "Default VLAN for phone LAN port. Default 0 is disabled.";
$y++; $y++;
$apps[$x]['default_settings'][$y]['default_setting_uuid'] = "8d424a07-921c-4549-a938-5457d51d47d2";
$apps[$x]['default_settings'][$y]['default_setting_category'] = "provision";
$apps[$x]['default_settings'][$y]['default_setting_subcategory'] = "grandstream_pc_mode";
$apps[$x]['default_settings'][$y]['default_setting_name'] = "text";
$apps[$x]['default_settings'][$y]['default_setting_value'] = "Enabled";
$apps[$x]['default_settings'][$y]['default_setting_enabled'] = "false";
$apps[$x]['default_settings'][$y]['default_setting_description'] = "Options: Enabled, Disabled, Mirrored. Default: Enabled";
$y++;
$apps[$x]['default_settings'][$y]['default_setting_uuid'] = "5200174e-b644-438f-a2f8-b721ee052cea"; $apps[$x]['default_settings'][$y]['default_setting_uuid'] = "5200174e-b644-438f-a2f8-b721ee052cea";
$apps[$x]['default_settings'][$y]['default_setting_category'] = "provision"; $apps[$x]['default_settings'][$y]['default_setting_category'] = "provision";
$apps[$x]['default_settings'][$y]['default_setting_subcategory'] = "grandstream_pc_port_vlan"; $apps[$x]['default_settings'][$y]['default_setting_subcategory'] = "grandstream_pc_port_vlan";
@@ -310,6 +318,14 @@
$apps[$x]['default_settings'][$y]['default_setting_enabled'] = "false"; $apps[$x]['default_settings'][$y]['default_setting_enabled'] = "false";
$apps[$x]['default_settings'][$y]['default_setting_description'] = "Bluetooth Handsfree - 0 - Off, 1 - On"; $apps[$x]['default_settings'][$y]['default_setting_description'] = "Bluetooth Handsfree - 0 - Off, 1 - On";
$y++; $y++;
$apps[$x]['default_settings'][$y]['default_setting_uuid'] = "e65ff82a-6ded-4cdd-8ba5-b45cb174c8fa";
$apps[$x]['default_settings'][$y]['default_setting_category'] = "provision";
$apps[$x]['default_settings'][$y]['default_setting_subcategory'] = "grandstream_headset_ringtone";
$apps[$x]['default_settings'][$y]['default_setting_name'] = "text";
$apps[$x]['default_settings'][$y]['default_setting_value'] = "Default";
$apps[$x]['default_settings'][$y]['default_setting_enabled'] = "false";
$apps[$x]['default_settings'][$y]['default_setting_description'] = "Options: Normal, PlantronicsEHS. Default: Normal";
$y++;
$apps[$x]['default_settings'][$y]['default_setting_uuid'] = "5bc527d0-6f83-403b-a6c0-574540cfa9a6"; $apps[$x]['default_settings'][$y]['default_setting_uuid'] = "5bc527d0-6f83-403b-a6c0-574540cfa9a6";
$apps[$x]['default_settings'][$y]['default_setting_category'] = "provision"; $apps[$x]['default_settings'][$y]['default_setting_category'] = "provision";
$apps[$x]['default_settings'][$y]['default_setting_subcategory'] = "grandstream_headset_type"; $apps[$x]['default_settings'][$y]['default_setting_subcategory'] = "grandstream_headset_type";
@@ -334,6 +350,23 @@
$apps[$x]['default_settings'][$y]['default_setting_enabled'] = "true"; $apps[$x]['default_settings'][$y]['default_setting_enabled'] = "true";
$apps[$x]['default_settings'][$y]['default_setting_description'] = "Always Ring Speaker. 0 - No, 1 - Yes both, 2 - Yes Speaker Only. Default is 0"; $apps[$x]['default_settings'][$y]['default_setting_description'] = "Always Ring Speaker. 0 - No, 1 - Yes both, 2 - Yes Speaker Only. Default is 0";
$y++; $y++;
$apps[$x]['default_settings'][$y]['default_setting_uuid'] = "a3ce83cb-609f-4189-a4cf-569ed36fb76d";
$apps[$x]['default_settings'][$y]['default_setting_category'] = "provision";
$apps[$x]['default_settings'][$y]['default_setting_subcategory'] = "grandstream_headset_rx_gain";
$apps[$x]['default_settings'][$y]['default_setting_name'] = "numeric";
$apps[$x]['default_settings'][$y]['default_setting_value'] = "0";
$apps[$x]['default_settings'][$y]['default_setting_enabled'] = "false";
$apps[$x]['default_settings'][$y]['default_setting_description'] = "Headset RX gain(dB). 1 - -6, 0 - 0, 2 - +6. Default is 0";
$y++;
$apps[$x]['default_settings'][$y]['default_setting_uuid'] = "a3ce83cb-609f-4189-a4cf-569ed36fb76d";
$apps[$x]['default_settings'][$y]['default_setting_category'] = "provision";
$apps[$x]['default_settings'][$y]['default_setting_subcategory'] = "grandstream_headset_tx_gain";
$apps[$x]['default_settings'][$y]['default_setting_name'] = "numeric";
$apps[$x]['default_settings'][$y]['default_setting_value'] = "0";
$apps[$x]['default_settings'][$y]['default_setting_enabled'] = "false";
$apps[$x]['default_settings'][$y]['default_setting_description'] = "Handset TX gain(dB). 1 - -6, 0 - 0, 2 - +6. Default is 0";
$y++;
$apps[$x]['default_settings'][$y]['default_setting_uuid'] = "453ec939-ef61-4ecd-ad0a-31905153efd8"; $apps[$x]['default_settings'][$y]['default_setting_uuid'] = "453ec939-ef61-4ecd-ad0a-31905153efd8";
$apps[$x]['default_settings'][$y]['default_setting_category'] = "provision"; $apps[$x]['default_settings'][$y]['default_setting_category'] = "provision";
$apps[$x]['default_settings'][$y]['default_setting_subcategory'] = "grandstream_auto_attended_transfer"; $apps[$x]['default_settings'][$y]['default_setting_subcategory'] = "grandstream_auto_attended_transfer";
@@ -378,9 +411,17 @@
$apps[$x]['default_settings'][$y]['default_setting_category'] = "provision"; $apps[$x]['default_settings'][$y]['default_setting_category'] = "provision";
$apps[$x]['default_settings'][$y]['default_setting_subcategory'] = "grandstream_screensaver"; $apps[$x]['default_settings'][$y]['default_setting_subcategory'] = "grandstream_screensaver";
$apps[$x]['default_settings'][$y]['default_setting_name'] = "numeric"; $apps[$x]['default_settings'][$y]['default_setting_name'] = "numeric";
$apps[$x]['default_settings'][$y]['default_setting_value'] = "1"; $apps[$x]['default_settings'][$y]['default_setting_value'] = "0";
$apps[$x]['default_settings'][$y]['default_setting_enabled'] = "true"; $apps[$x]['default_settings'][$y]['default_setting_enabled'] = "true";
$apps[$x]['default_settings'][$y]['default_setting_description'] = "Screensaver. 0 - No, 1 - Yes, 2 - On if no VPK is active. Default is 1"; $apps[$x]['default_settings'][$y]['default_setting_description'] = "Screensaver. 0 - No, 1 - Yes, 2 - On if no VPK is active. Default is 0";
$y++;
$apps[$x]['default_settings'][$y]['default_setting_uuid'] = "730eae5c-a413-45a4-ad64-725e21dd6ab5";
$apps[$x]['default_settings'][$y]['default_setting_category'] = "provision";
$apps[$x]['default_settings'][$y]['default_setting_subcategory'] = "grandstream_screensaver_enable";
$apps[$x]['default_settings'][$y]['default_setting_name'] = "numeric";
$apps[$x]['default_settings'][$y]['default_setting_value'] = "0";
$apps[$x]['default_settings'][$y]['default_setting_enabled'] = "true";
$apps[$x]['default_settings'][$y]['default_setting_description'] = "Screensaver. 0 - No, 1 - Yes, 2 - On if no VPK is active. Default is 0";
$y++; $y++;
$apps[$x]['default_settings'][$y]['default_setting_uuid'] = "eb96abe3-0225-4c75-adcf-982e7121d905"; $apps[$x]['default_settings'][$y]['default_setting_uuid'] = "eb96abe3-0225-4c75-adcf-982e7121d905";
$apps[$x]['default_settings'][$y]['default_setting_category'] = "provision"; $apps[$x]['default_settings'][$y]['default_setting_category'] = "provision";
@@ -774,6 +815,14 @@
$apps[$x]['default_settings'][$y]['default_setting_enabled'] = "false"; $apps[$x]['default_settings'][$y]['default_setting_enabled'] = "false";
$apps[$x]['default_settings'][$y]['default_setting_description'] = "Internet Protocol. 0 - Both, prefer IPv4, 1 - Both, prefer IPv6, 2 - IPv4 Only, 3 - IPv6 Only. Default is 0"; $apps[$x]['default_settings'][$y]['default_setting_description'] = "Internet Protocol. 0 - Both, prefer IPv4, 1 - Both, prefer IPv6, 2 - IPv4 Only, 3 - IPv6 Only. Default is 0";
$y++; $y++;
$apps[$x]['default_settings'][$y]['default_setting_uuid'] = "c2d071eb-1381-4acb-b094-857cd222fce0";
$apps[$x]['default_settings'][$y]['default_setting_category'] = "provision";
$apps[$x]['default_settings'][$y]['default_setting_subcategory'] = "grandstream_internet_protocol";
$apps[$x]['default_settings'][$y]['default_setting_name'] = "numeric";
$apps[$x]['default_settings'][$y]['default_setting_value'] = "0";
$apps[$x]['default_settings'][$y]['default_setting_enabled'] = "false";
$apps[$x]['default_settings'][$y]['default_setting_description'] = "Internet Protocol. BothAndPreferIPv4, BothAndPreferIPv6, IPv4Only, IPv6Only. Default: IPv4Only";
$y++;
$apps[$x]['default_settings'][$y]['default_setting_uuid'] = "3dd34197-e1e8-40bc-baf2-2e07c39d59b5"; $apps[$x]['default_settings'][$y]['default_setting_uuid'] = "3dd34197-e1e8-40bc-baf2-2e07c39d59b5";
$apps[$x]['default_settings'][$y]['default_setting_category'] = "provision"; $apps[$x]['default_settings'][$y]['default_setting_category'] = "provision";
$apps[$x]['default_settings'][$y]['default_setting_subcategory'] = "grandstream_accept_sip_from_proxy_only"; $apps[$x]['default_settings'][$y]['default_setting_subcategory'] = "grandstream_accept_sip_from_proxy_only";
+1 -1
View File
@@ -127,7 +127,7 @@
echo "<div class='action_bar' id='action_bar'>\n"; echo "<div class='action_bar' id='action_bar'>\n";
echo " <div class='heading'><b>".$text['title-gswave']."</b></div>\n"; echo " <div class='heading'><b>".$text['title-gswave']."</b></div>\n";
echo " <div class='actions'>\n"; echo " <div class='actions'>\n";
echo " <a href='https://play.google.com/store/apps/details?id=com.grandstream.wave' target='_blank'><img src='/app/gswave/resources/images/google_play.png' style='width: auto; height: 30px;' /></a>"; echo " <a href='https://play.google.com/store/apps/details?id=com.grandstream.ucm' target='_blank'><img src='/app/gswave/resources/images/google_play.png' style='width: auto; height: 30px;' /></a>";
echo " <a href='https://apps.apple.com/us/app/grandstream-wave/id1523254549' target='_blank'><img src='/app/gswave/resources/images/apple_app_store.png' style='width: auto; height: 30px;' /></a>"; echo " <a href='https://apps.apple.com/us/app/grandstream-wave/id1523254549' target='_blank'><img src='/app/gswave/resources/images/apple_app_store.png' style='width: auto; height: 30px;' /></a>";
//echo button::create(['type'=>'button','label'=>'Website','icon'=>'globe','style='margin-left: 15px;','link'=>'http://www.grandstream.com/products/ip-voice-telephony/softphone-app/product/grandstream-wave']); //echo button::create(['type'=>'button','label'=>'Website','icon'=>'globe','style='margin-left: 15px;','link'=>'http://www.grandstream.com/products/ip-voice-telephony/softphone-app/product/grandstream-wave']);
echo " </div>\n"; echo " </div>\n";
+1 -1
View File
@@ -526,7 +526,7 @@
$sql = "select * from v_ivr_menu_options "; $sql = "select * from v_ivr_menu_options ";
$sql .= "where domain_uuid = :domain_uuid "; $sql .= "where domain_uuid = :domain_uuid ";
$sql .= "and ivr_menu_uuid = :ivr_menu_uuid "; $sql .= "and ivr_menu_uuid = :ivr_menu_uuid ";
$sql .= "order by ivr_menu_option_order, ivr_menu_option_digits asc "; $sql .= "order by natural_sort(ivr_menu_option_digits::text) asc, ivr_menu_option_order asc; ";
$parameters['domain_uuid'] = $_SESSION['domain_uuid']; $parameters['domain_uuid'] = $_SESSION['domain_uuid'];
$parameters['ivr_menu_uuid'] = $ivr_menu_uuid; $parameters['ivr_menu_uuid'] = $ivr_menu_uuid;
$database = new database; $database = new database;
+4 -3
View File
@@ -177,7 +177,7 @@
unset($sql, $parameters); unset($sql, $parameters);
//get the domain_name and domain_uuid //get the domain_name and domain_uuid
if ($_SESSION['provision']['http_domain_filter']['boolean'] == "true") { if (empty($domain_uuid)) {
//get the domain_name //get the domain_name
$domain_array = explode(":", $_SERVER["HTTP_HOST"]); $domain_array = explode(":", $_SERVER["HTTP_HOST"]);
$domain_name = $domain_array[0]; $domain_name = $domain_array[0];
@@ -452,6 +452,9 @@
$prov->file = $file; $prov->file = $file;
$file_contents = $prov->render(); $file_contents = $prov->render();
//clean the output buffer
ob_clean();
//deliver the customized config over HTTP/HTTPS //deliver the customized config over HTTP/HTTPS
//need to make sure content-type is correct //need to make sure content-type is correct
if (!empty($_REQUEST['content_type']) && $_REQUEST['content_type'] == 'application/octet-stream') { if (!empty($_REQUEST['content_type']) && $_REQUEST['content_type'] == 'application/octet-stream') {
@@ -531,5 +534,3 @@
} }
?> ?>
@@ -662,7 +662,7 @@
$view->engine = "smarty"; $view->engine = "smarty";
} }
$view->template_dir = $template_dir ."/".$device_template."/"; $view->template_dir = $template_dir ."/".$device_template."/";
$view->cache_dir = $_SESSION['server']['temp']['dir']; $view->cache_dir = sys_get_temp_dir();
$view->init(); $view->init();
//replace the variables in the template in the future loop through all the line numbers to do a replace for each possible line number //replace the variables in the template in the future loop through all the line numbers to do a replace for each possible line number
@@ -826,7 +826,7 @@
} }
//convert seconds to minutes for grandstream //convert seconds to minutes for grandstream
if ($device_vendor == 'grandstream') { if ($device_vendor == 'grandstream' && $register_expires >= 60) {
$register_expires = round($register_expires / 60); $register_expires = round($register_expires / 60);
} }
+8
View File
@@ -223,6 +223,14 @@
$apps[$x]['default_settings'][$y]['default_setting_value'] = "true"; $apps[$x]['default_settings'][$y]['default_setting_value'] = "true";
$apps[$x]['default_settings'][$y]['default_setting_enabled'] = "false"; $apps[$x]['default_settings'][$y]['default_setting_enabled'] = "false";
$apps[$x]['default_settings'][$y]['default_setting_description'] = "Enable or disable the feature to add a range of extensions."; $apps[$x]['default_settings'][$y]['default_setting_description'] = "Enable or disable the feature to add a range of extensions.";
$y++;
$apps[$x]['default_settings'][$y]['default_setting_uuid'] = "d25c1e2b-4098-408e-959b-c789ba4691e1";
$apps[$x]['default_settings'][$y]['default_setting_category'] = "ring_group";
$apps[$x]['default_settings'][$y]['default_setting_subcategory'] = "diversion_enabled";
$apps[$x]['default_settings'][$y]['default_setting_name'] = "boolean";
$apps[$x]['default_settings'][$y]['default_setting_value'] = "false";
$apps[$x]['default_settings'][$y]['default_setting_enabled'] = "false";
$apps[$x]['default_settings'][$y]['default_setting_description'] = "Enable or disable the adding diversion header for external destinations.";
//schema details //schema details
$y=0; $y=0;
@@ -84,6 +84,7 @@
<action function="play-file" data="voicemail/vm-du_har.wav"/> <action function="play-file" data="voicemail/vm-du_har.wav"/>
<action function="play-file" data="voicemail/vm-inga.wav"/> <action function="play-file" data="voicemail/vm-inga.wav"/>
<action function="play-file" data="voicemail/vm-meddelanden.wav"/> <action function="play-file" data="voicemail/vm-meddelanden.wav"/>
</match>
</input> </input>
<input pattern="^(\d+):(.*)$"> <input pattern="^(\d+):(.*)$">
<match> <match>
@@ -186,14 +187,14 @@
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*])$"> <input pattern="^([0-9#*]):([0-9#*]):([0-9#*])$">
<match> <match>
<!--<action function="play-file" data="voicemail/vm-press.wav"/>--> <!--<action function="play-file" data="voicemail/vm-press.wav"/>-->
<action function="say" data="$1" method="pronounced" type="name_spelled"/>--> <action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-listen_to_recording.wav"/>--> <action function="play-file" data="voicemail/vm-listen_to_recording.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>--> <action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>--> <action function="say" data="$2" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-save_recording.wav"/>--> <action function="play-file" data="voicemail/vm-save_recording.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>--> <action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$3" method="pronounced" type="name_spelled"/>--> <action function="say" data="$3" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-rerecord.wav"/>--> <action function="play-file" data="voicemail/vm-rerecord.wav"/>
</match> </match>
</input> </input>
</macro> </macro>
@@ -310,11 +310,11 @@
<param name="force-register-db-domain" value="$${domain}" enabled="false"/> <param name="force-register-db-domain" value="$${domain}" enabled="false"/>
<!-- for sip over websocket support --> <!-- for sip over websocket support -->
<param name="ws-binding" value=":5066"/> <param name="ws-binding" value=":5066" enabled="false"/>
<!-- for sip over secure websocket support --> <!-- for sip over secure websocket support -->
<!-- You need wss.pem in $${certs_dir} for wss or one will be created for you --> <!-- You need wss.pem in $${certs_dir} for wss or one will be created for you -->
<param name="wss-binding" value=":7443"/> <param name="wss-binding" value=":7443" enabled="false"/>
<param name="delete-subs-on-register" value="false" enabled="false"/> <param name="delete-subs-on-register" value="false" enabled="false"/>
@@ -36,25 +36,25 @@
--convert_ext (optional) to replace the file's extension --convert_ext (optional) to replace the file's extension
--Example --Example
--luarun emergency.lua to@domain.com from@domain.com 'headers' 'subject' 'body' --luarun emergency.lua to@domain.com from@domain.com 'headers' 'subject' 'body'
--load libraries --load libraries
local send_mail = require 'resources.functions.send_mail' local send_mail = require 'resources.functions.send_mail'
local Database = require "resources.functions.database" local Database = require "resources.functions.database"
local Settings = require "resources.functions.lazy_settings" local Settings = require "resources.functions.lazy_settings"
local Utils = require "resources.functions.channel_utils"; local Utils = require "resources.functions.channel_utils";
--define a function to send email --define a function to send email
local db = dbh or Database.new('system') local db = dbh or Database.new('system')
local settings = Settings.new(db, domain_name, domain_uuid) local settings = Settings.new(db, domain_name, domain_uuid)
local email_queue_enabled = settings:get('email_queue', 'enabled', 'boolean') or "false"; local email_queue_enabled = settings:get('email_queue', 'enabled', 'boolean') or "false";
--get the argv values --get the argv values
script_name = argv[0]; script_name = argv[0];
delete = argv[1]; delete = argv[1];
--prepare the api object --prepare the api object
api = freeswitch.API(); api = freeswitch.API();
--get sessions info --get sessions info
if (session and session:ready()) then if (session and session:ready()) then
@@ -71,17 +71,17 @@ else
headers = {} headers = {}
end end
function escapeCSV(s) function escape_csv(s)
if string.find(s, '[,"]') then if string.find(s, '[,"]') then
s = '"' .. string.gsub(s, '"', '""') .. '"' s = '"' .. string.gsub(s, '"', '""') .. '"'
end end
return s return s
end end
function toCSV(tt) function to_csv(tt)
local s = "" local s = ""
for _,p in ipairs(tt) do for _,p in ipairs(tt) do
s = s .. "," .. escapeCSV(p) s = s .. "," .. escape_csv(p)
end end
return string.sub(s, 2) return string.sub(s, 2)
end end
@@ -100,9 +100,9 @@ local sql = "SELECT * FROM v_email_templates ";
body = row.template_body; body = row.template_body;
language = row.template_language; language = row.template_language;
end); end);
if (debug["sql"]) then if (debug["sql"]) then
freeswitch.consoleLog("info", "[emergency] SQL: " .. sql .. "\n"); freeswitch.consoleLog("info", "[emergency] SQL: " .. sql .. "\n");
end end
--freeswitch.consoleLog("info", "[template] SQL: " .. sql .. "body: " .. body .. "\n"); --freeswitch.consoleLog("info", "[template] SQL: " .. sql .. "body: " .. body .. "\n");
--get email from --get email from
@@ -110,11 +110,9 @@ local sql = "SELECT * FROM v_default_settings ";
sql = sql .. "WHERE default_setting_category = 'email' "; sql = sql .. "WHERE default_setting_category = 'email' ";
sql = sql .. "AND (default_setting_subcategory = 'smtp_from' "; sql = sql .. "AND (default_setting_subcategory = 'smtp_from' ";
sql = sql .. "OR default_setting_subcategory = 'smtp_from_name') "; sql = sql .. "OR default_setting_subcategory = 'smtp_from_name') ";
if (debug["sql"]) then
if (debug["sql"]) then freeswitch.consoleLog("notice", "[emergency] SQL: " .. sql .. "\n");
freeswitch.consoleLog("notice", "[emergency] SQL: " .. sql .. "\n"); end
end
dbh:query(sql, function(row) dbh:query(sql, function(row)
if (row.default_setting_subcategory == "smtp_from") then if (row.default_setting_subcategory == "smtp_from") then
from = row.default_setting_value; from = row.default_setting_value;
@@ -122,85 +120,94 @@ local sql = "SELECT * FROM v_default_settings ";
if (row.default_setting_subcategory == "smtp_from_name") then if (row.default_setting_subcategory == "smtp_from_name") then
from_name = row.default_setting_value; from_name = row.default_setting_value;
end end
end);
-- get vars
domain_uuid = session:getVariable("domain_uuid");
call_date = session:getVariable("call_date");
caller_id_name = session:getVariable("caller_id_name");
caller_id_number = session:getVariable("caller_id_number");
sip_from_user = session:getVariable("sip_from_user");
emergency_caller_id_name = session:getVariable("emergency_caller_id_name");
emergency_caller_id_number = session:getVariable("emergency_caller_id_number");
call_duration = session:getVariable("call_duration");
--domain level check
result = {}
local sql = "SELECT count(domain_setting_value) ";
sql = sql .. "AS total ";
sql = sql .. "FROM v_domain_settings ";
sql = sql .. "WHERE domain_uuid = :domain_uuid ";
sql = sql .. "AND domain_setting_subcategory = :emergency_email_address ";
sql = sql .. "AND domain_setting_enabled = :status ";
local params = {domain_uuid = domain_uuid, emergency_email_address = 'emergency_email_address', status = 't'}
dbh:query(sql, params, function(result)
total = result.total;
--no emergency emails found under domain, using default
if (total == 0 or total == nil) then
to = {}
local sql = "SELECT default_setting_value ";
sql = sql .. "FROM v_default_settings ";
sql = sql .. "WHERE default_setting_category = :category ";
sql = sql .. "AND default_setting_subcategory = :emergency_email_address ";
sql = sql .. "AND default_setting_enabled = :status ";
sql = sql .. "LIMIT 5 ";
local params = {category = 'dialplan', emergency_email_address = 'emergency_email_address', status = 't'}
dbh:query(sql, params, function(result)
for key,row in pairs(result) do
table.insert(to, row);
freeswitch.consoleLog("info", "[emergency] Inserted into table from default settings " .. row .. "\n");
end
--add some details
if (debug["sql"]) then
freeswitch.consoleLog("notice", "[emergency] SQL: " .. sql .. " result " .. result .. "\n");
end
end);
--domain level emails max 5
else if (tonumber(total) <= 5) then
to = {}
local sql = "SELECT domain_setting_value ";
sql = sql .. "FROM v_domain_settings ";
sql = sql .. "WHERE domain_uuid = :domain_uuid ";
sql = sql .. "AND domain_setting_subcategory = :emergency_email_address ";
sql = sql .. "AND domain_setting_enabled = :status ";
local params = {domain_uuid = domain_uuid, emergency_email_address = 'emergency_email_address', status = 't'}
dbh:query(sql, params, function(result)
for key,row in pairs(result) do
table.insert(to, row);
freeswitch.consoleLog("info", "[template] Inserted into table " .. row .. "\n");
end
end);
end
end
end); end);
dbh:release() --get variables
if (session and session:ready()) then
if (#to > 0) then domain_uuid = session:getVariable("domain_uuid");
--set event caller_id_name = session:getVariable("caller_id_name");
caller_id_number = session:getVariable("caller_id_number");
sip_from_user = session:getVariable("sip_from_user");
emergency_caller_id_name = session:getVariable("emergency_caller_id_name");
emergency_caller_id_number = session:getVariable("emergency_caller_id_number");
call_duration = session:getVariable("call_duration");
destination_number = session:getVariable("destination_number"); destination_number = session:getVariable("destination_number");
if (tonumber(destination_number) == 933) then end
event = '933 Emergency Address Validation Service';
else if (tonumber(destination_number) == 911) then --domain level check
event = '911 Emergency Call'; result = {}
end local sql = "SELECT count(domain_setting_value) ";
sql = sql .. "AS total ";
sql = sql .. "FROM v_domain_settings ";
sql = sql .. "WHERE domain_uuid = :domain_uuid ";
sql = sql .. "AND domain_setting_subcategory = :emergency_email_address ";
sql = sql .. "AND domain_setting_enabled = :status ";
local params = {domain_uuid = domain_uuid, emergency_email_address = 'emergency_email_address', status = 't'}
dbh:query(sql, params, function(result)
total = result.total;
--no emergency emails found under domain, using default
if (total == 0 or total == nil) then
to = {}
local sql = "SELECT default_setting_value ";
sql = sql .. "FROM v_default_settings ";
sql = sql .. "WHERE default_setting_category = :category ";
sql = sql .. "AND default_setting_subcategory = :emergency_email_address ";
sql = sql .. "AND default_setting_enabled = :status ";
sql = sql .. "LIMIT 5 ";
local params = {category = 'dialplan', emergency_email_address = 'emergency_email_address', status = 't'}
dbh:query(sql, params, function(result)
for key,row in pairs(result) do
table.insert(to, row);
freeswitch.consoleLog("info", "[emergency] Inserted into table from default settings " .. row .. "\n");
end
--add some details
if (debug["sql"]) then
freeswitch.consoleLog("notice", "[emergency] SQL: " .. sql .. " result " .. result .. "\n");
end
end);
--domain level emails max 5
else if (tonumber(total) <= 5) then
to = {}
local sql = "SELECT domain_setting_value ";
sql = sql .. "FROM v_domain_settings ";
sql = sql .. "WHERE domain_uuid = :domain_uuid ";
sql = sql .. "AND domain_setting_subcategory = :emergency_email_address ";
sql = sql .. "AND domain_setting_enabled = :status ";
local params = {domain_uuid = domain_uuid, emergency_email_address = 'emergency_email_address', status = 't'}
dbh:query(sql, params, function(result)
for key,row in pairs(result) do
table.insert(to, row);
freeswitch.consoleLog("info", "[template] Inserted into table " .. row .. "\n");
end
end);
end
end end
end);
--set event
if (tonumber(destination_number) == 933) then
event = '933 Emergency Address Validation Service';
else if (tonumber(destination_number) == 911) then
event = '911 Emergency Call';
end
end
--connect to the database
local dbh = Database.new('system');
--set the call date
sql = "SELECT now() as call_date ";
if (debug["sql"]) then
freeswitch.consoleLog("NOTICE", "[event] "..sql.."\n");
end
local t = dbh:first_row(sql);
call_date = t.call_date;
--send the email
if (#to > 0) then
--prepare the body --prepare the body
if (body ~= nil) then if (body ~= nil) then
body = body:gsub("${caller_id_name}", caller_id_name); body = body:gsub("${caller_id_name}", caller_id_name);
@@ -225,54 +232,30 @@ if (#to > 0) then
end end
end end
-- Insert into Emergency Logs
emergency_logs_uuid = api:executeString("create_uuid");
domain_uuid = session:getVariable("domain_uuid");
-- Set time and date
local delimiter = " ";
local y = 0;
local tab = {}
while true do
local endindex = call_date:find(delimiter,y);
if not endindex then
break
end
table.insert(tab,call_date:sub(y,endindex-1))
y = endindex + 1;
end
table.insert(tab,call_date:sub(y));
local time = tab[2] .. " " .. tab[3];
freeswitch.consoleLog("info", "[emergency] Getting Date " .. tab[1] .. " Time " .. tab[2] .. " Format " .. tab[3] .. "\n");
--connect to the database --connect to the database
local dbh = Database.new('system'); local dbh = Database.new('system');
--insert into emergency logs
local sql = "INSERT INTO v_emergency_logs ( "; local sql = "INSERT INTO v_emergency_logs ( ";
sql = sql .. " log_uuid, "; sql = sql .. " emergency_log_uuid, ";
sql = sql .. " domain_uuid, "; sql = sql .. " domain_uuid, ";
sql = sql .. " date, "; sql = sql .. " insert_date, ";
sql = sql .. " time, "; sql = sql .. " extension, ";
sql = sql .. " extension, "; sql = sql .. " event ";
sql = sql .. " event "; sql = sql .. ") ";
sql = sql .. ") "; sql = sql .. "VALUES ( ";
sql = sql .. "VALUES ( "; sql = sql .. " :emergency_log_uuid, ";
sql = sql .. " :emergency_logs_uuid, "; sql = sql .. " :domain_uuid, ";
sql = sql .. " :domain_uuid, "; sql = sql .. " now(), ";
sql = sql .. " :date, "; sql = sql .. " :extension, ";
sql = sql .. " :time, "; sql = sql .. " :event ";
sql = sql .. " :extension, "; sql = sql .. ") ";
sql = sql .. " :event ";
sql = sql .. ") ";
local params = {emergency_logs_uuid = emergency_logs_uuid,domain_uuid = domain_uuid, date = tab[1], time = time, extension = caller_id_number, event = event} local params = {emergency_log_uuid = call_uuid, domain_uuid = domain_uuid, extension = caller_id_number, event = event}
if (debug["sql"]) then if (debug["sql"]) then
freeswitch.consoleLog("info", "[emergency] SQL: " .. sql .. "\n"); freeswitch.consoleLog("info", "[emergency] SQL: " .. sql .. "\n");
end end
dbh:query(sql, params); dbh:query(sql, params);
dbh:release(); dbh:release();
@@ -16,7 +16,7 @@
-- --
-- The Initial Developer of the Original Code is -- The Initial Developer of the Original Code is
-- Mark J Crane <markjcrane@fusionpbx.com> -- Mark J Crane <markjcrane@fusionpbx.com>
-- Copyright (C) 2015-2023 -- Copyright (C) 2015-2024
-- the Initial Developer. All Rights Reserved. -- the Initial Developer. All Rights Reserved.
-- --
-- Contributor(s): -- Contributor(s):
@@ -28,6 +28,9 @@
--create the api object --create the api object
api = freeswitch.API(); api = freeswitch.API();
--get the server hostname
hostname = api:executeString("hostname");
--include config.lua --include config.lua
require "resources.functions.config"; require "resources.functions.config";
@@ -312,7 +315,6 @@
end end
sql = sql .. ":fax_time "; sql = sql .. ":fax_time ";
sql = sql .. ")"; sql = sql .. ")";
local params = { local params = {
uuid = uuid; uuid = uuid;
domain_uuid = domain_uuid; domain_uuid = domain_uuid;
@@ -333,11 +335,9 @@
fax_date = os.date("%Y-%m-%d %X"); fax_date = os.date("%Y-%m-%d %X");
fax_time = os.time(); fax_time = os.time();
}; };
if (debug["sql"]) then if (debug["sql"]) then
freeswitch.consoleLog("notice", "[fax] SQL: " .. sql .. "; params:" .. json.encode(params) .. "\n"); freeswitch.consoleLog("notice", "[fax] SQL: " .. sql .. "; params:" .. json.encode(params) .. "\n");
end end
dbh:query(sql, params); dbh:query(sql, params);
--add the fax files --add the fax files
@@ -345,10 +345,10 @@
if (fax_success =="1") then if (fax_success =="1") then
if (storage_type == "base64") then if (storage_type == "base64") then
--include the file io --include the file io
local file = require "resources.functions.file" local file = require "resources.functions.file"
--read file content as base64 string --read file content as base64 string
fax_base64 = assert(file.read_base64(fax_file)); fax_base64 = assert(file.read_base64(fax_file));
end end
local sql = {} local sql = {}
@@ -421,6 +421,66 @@
end end
end end
--add to the fax queue when the fax_forward_number is set
if (fax_forward_number ~= nil) then
sql = "insert into v_fax_queue ";
sql = sql .. "(";
sql = sql .. "fax_queue_uuid, ";
sql = sql .. "domain_uuid, ";
if (fax_uuid ~= nil) then
sql = sql .. "fax_uuid, ";
end
sql = sql .. "fax_date, ";
sql = sql .. "hostname, ";
sql = sql .. "fax_caller_id_name, ";
sql = sql .. "fax_caller_id_number, ";
sql = sql .. "fax_number, ";
sql = sql .. "fax_prefix, ";
sql = sql .. "fax_email_address, ";
sql = sql .. "fax_file, ";
sql = sql .. "fax_status, ";
sql = sql .. "fax_retry_count, ";
sql = sql .. "fax_accountcode, ";
sql = sql .. "fax_command ";
sql = sql .. ") ";
sql = sql .. "values ";
sql = sql .. "(";
sql = sql .. ":uuid, ";
sql = sql .. ":domain_uuid, ";
if (fax_uuid ~= nil) then
sql = sql .. ":fax_uuid, ";
end
sql = sql .. "now(), ";
sql = sql .. ":hostname, ";
sql = sql .. ":fax_caller_id_name, ";
sql = sql .. ":fax_caller_id_number, ";
sql = sql .. ":fax_number, ";
sql = sql .. ":fax_prefix, ";
sql = sql .. ":fax_email_address, ";
sql = sql .. ":fax_file, ";
sql = sql .. ":fax_status, ";
sql = sql .. ":fax_retry_count, ";
sql = sql .. ":fax_accountcode, ";
sql = sql .. ":fax_command ";
sql = sql .. ")";
local params = {
uuid = uuid;
domain_uuid = domain_uuid;
fax_uuid = fax_uuid;
hostname = hostname;
fax_caller_id_name = fax_caller_id_name;
fax_caller_id_number = fax_caller_id_number;
fax_number = fax_forward_number;
fax_prefix = fax_prefix;
fax_email_address = fax_email;
fax_file = fax_file;
fax_status = 'waiting';
fax_retry_count = '0';
fax_accountcode = fax_accountcode;
fax_command = '';
};
end
--send the selected variables to the console --send the selected variables to the console
if (fax_success ~= nil) then if (fax_success ~= nil) then
freeswitch.consoleLog("INFO","fax_success: '" .. fax_success .. "'\n"); freeswitch.consoleLog("INFO","fax_success: '" .. fax_success .. "'\n");
@@ -91,7 +91,7 @@
subject = subject:gsub("${caller_id_name}", caller_id_name); subject = subject:gsub("${caller_id_name}", caller_id_name);
subject = subject:gsub("${caller_id_number}", caller_id_number); subject = subject:gsub("${caller_id_number}", caller_id_number);
subject = subject:gsub("${sip_to_user}", sip_to_user); subject = subject:gsub("${sip_to_user}", sip_to_user);
subject = subject:gsub("${dialed_user}", dialed_user); subject = subject:gsub("${dialed_user}", sip_to_user);
subject = trim(subject); subject = trim(subject);
subject = '=?utf-8?B?'..base64.encode(subject)..'?='; subject = '=?utf-8?B?'..base64.encode(subject)..'?=';
@@ -99,7 +99,7 @@
body = body:gsub("${caller_id_name}", caller_id_name); body = body:gsub("${caller_id_name}", caller_id_name);
body = body:gsub("${caller_id_number}", caller_id_number); body = body:gsub("${caller_id_number}", caller_id_number);
body = body:gsub("${sip_to_user}", sip_to_user); body = body:gsub("${sip_to_user}", sip_to_user);
body = body:gsub("${dialed_user}", dialed_user); body = body:gsub("${dialed_user}", sip_to_user);
body = body:gsub(" ", "&nbsp;"); body = body:gsub(" ", "&nbsp;");
body = body:gsub("%s+", ""); body = body:gsub("%s+", "");
body = body:gsub("&nbsp;", " "); body = body:gsub("&nbsp;", " ");
@@ -129,13 +129,12 @@
originate_disposition = env:getHeader("originate_disposition"); originate_disposition = env:getHeader("originate_disposition");
originate_causes = env:getHeader("originate_causes"); originate_causes = env:getHeader("originate_causes");
uuid = env:getHeader("uuid"); uuid = env:getHeader("uuid");
domain_uuid = env:getHeader("domain_uuid"); domain_uuid = env:getHeader("domain_uuid") or '';
domain_name = env:getHeader("domain_name"); domain_name = env:getHeader("domain_name") or '';
sip_to_user = env:getHeader("sip_to_user"); sip_to_user = env:getHeader("sip_to_user") or '';
dialed_user = env:getHeader("dialed_user"); missed_call_app = env:getHeader("missed_call_app") or '';
missed_call_app = env:getHeader("missed_call_app"); missed_call_data = env:getHeader("missed_call_data") or '';
missed_call_data = env:getHeader("missed_call_data"); call_direction = env:getHeader("call_direction") or '';
call_direction = env:getHeader("call_direction");
-- get the Caller ID -- get the Caller ID
caller_id_name = env:getHeader("caller_id_name"); caller_id_name = env:getHeader("caller_id_name");
@@ -28,7 +28,7 @@
-- Gill Abada <gill.abada@gmail.com> -- Gill Abada <gill.abada@gmail.com>
--include the log --include the log
log = require "resources.functions.log".ring_group log = require "resources.functions.log".ring_group
--connect to the database --connect to the database
local Database = require "resources.functions.database"; local Database = require "resources.functions.database";
@@ -149,6 +149,7 @@
sip_to_user = session:getVariable("sip_to_user"); sip_to_user = session:getVariable("sip_to_user");
caller_id_name = session:getVariable("caller_id_name"); caller_id_name = session:getVariable("caller_id_name");
caller_id_number = session:getVariable("caller_id_number"); caller_id_number = session:getVariable("caller_id_number");
original_caller_id_number = session:getVariable("caller_id_number");
outbound_caller_id_name = session:getVariable("outbound_caller_id_name"); outbound_caller_id_name = session:getVariable("outbound_caller_id_name");
outbound_caller_id_number = session:getVariable("outbound_caller_id_number"); outbound_caller_id_number = session:getVariable("outbound_caller_id_number");
effective_caller_id_name = session:getVariable("effective_caller_id_name"); effective_caller_id_name = session:getVariable("effective_caller_id_name");
@@ -200,9 +201,9 @@
--set hold music --set hold music
if (session:getVariable("hold_music") == nil) then if (session:getVariable("hold_music") == nil) then
hold_music = ''; default_hold_music = '';
else else
hold_music = ",hold_music="..session:getVariable("hold_music"); default_hold_music = session:getVariable("hold_music");
end end
--prepare the api object --prepare the api object
@@ -244,6 +245,10 @@
missed_call_data = row["ring_group_missed_call_data"]; missed_call_data = row["ring_group_missed_call_data"];
end); end);
--create the settings object
local Settings = require "resources.functions.lazy_settings";
local settings = Settings.new(dbh, domain_name, domain_uuid);
--prepare the recording path --prepare the recording path
record_path = recordings_dir .. "/" .. domain_name .. "/archive/" .. os.date("%Y/%b/%d"); record_path = recordings_dir .. "/" .. domain_name .. "/archive/" .. os.date("%Y/%b/%d");
record_path = record_path:gsub("\\", "/"); record_path = record_path:gsub("\\", "/");
@@ -539,10 +544,16 @@
cmd = "user_exists id ".. destination_number .." "..domain_name; cmd = "user_exists id ".. destination_number .." "..domain_name;
user_exists = api:executeString(cmd); user_exists = api:executeString(cmd);
--cmd = "user_exists id ".. destination_number .." "..leg_domain_name; --cmd = "user_exists id ".. destination_number .." "..domain_name;
if (user_exists == "true") then if (user_exists == "true") then
--add user_exists true or false to the row array --add user_exists true or false to the row array
row['user_exists'] = "true"; row['user_exists'] = "true";
--handle number alias
cmd = "user_data ".. destination_number .."@" ..domain_name.." attr id";
destination_number = api:executeString(cmd);
row['destination_number'] = destination_number
--handle do_not_disturb --handle do_not_disturb
cmd = "user_data ".. destination_number .."@" ..leg_domain_name.." var do_not_disturb"; cmd = "user_data ".. destination_number .."@" ..leg_domain_name.." var do_not_disturb";
if (api:executeString(cmd) ~= "true") then if (api:executeString(cmd) ~= "true") then
@@ -553,6 +564,7 @@
--set the values --set the values
external = "true"; external = "true";
row['user_exists'] = "false"; row['user_exists'] = "false";
--add the row to the destinations array --add the row to the destinations array
destinations[x] = row; destinations[x] = row;
end end
@@ -834,13 +846,25 @@
cmd = "user_data ".. destination_number .."@"..domain_name.." var extension_uuid"; cmd = "user_data ".. destination_number .."@"..domain_name.." var extension_uuid";
extension_uuid = trim(api:executeString(cmd)); extension_uuid = trim(api:executeString(cmd));
--get the hold music
cmd = "user_data ".. destination_number .."@"..domain_name.." var hold_music";
user_hold_music = trim(api:executeString(cmd));
if (user_hold_music ~= nil) and (string.len(user_hold_music) > 0) then
hold_music = user_hold_music;
else
hold_music = default_hold_music
end
--send to user --send to user
local dial_string_user = "[sip_invite_domain="..domain_name..",call_direction="..call_direction..","; local dial_string_user = "[sip_invite_domain="..domain_name..",call_direction="..call_direction..",";
dial_string_user = dial_string_user .. group_confirm..","..timeout_name.."="..destination_timeout..","; dial_string_user = dial_string_user .. group_confirm..","..timeout_name.."="..destination_timeout..",";
dial_string_user = dial_string_user .. delay_name.."="..destination_delay..","; dial_string_user = dial_string_user .. delay_name.."="..destination_delay..",";
dial_string_user = dial_string_user .. "dialed_extension=" .. row.destination_number .. ","; dial_string_user = dial_string_user .. "dialed_extension=" .. row.destination_number .. ",";
if (hold_music ~= nil) and (string.len(hold_music) > 0) then
dial_string_user = dial_string_user .. "hold_music=" .. hold_music .. ",";
end
dial_string_user = dial_string_user .. "presence_id=" .. row.destination_number .. "@"..domain_name..","; dial_string_user = dial_string_user .. "presence_id=" .. row.destination_number .. "@"..domain_name..",";
dial_string_user = dial_string_user .. "extension_uuid="..extension_uuid..hold_music..record_session.."]"; dial_string_user = dial_string_user .. "extension_uuid="..extension_uuid..record_session.."]";
user_contact = api:executeString("sofia_contact */".. row.destination_number .."@" ..domain_name); user_contact = api:executeString("sofia_contact */".. row.destination_number .."@" ..domain_name);
if (user_contact ~= "error/user_not_registered") then if (user_contact ~= "error/user_not_registered") then
dial_string = dial_string_user .. user_contact; dial_string = dial_string_user .. user_contact;
@@ -889,8 +913,16 @@
caller_id = caller_id .. ",origination_caller_id_number="..ring_group_caller_id_number..","; caller_id = caller_id .. ",origination_caller_id_number="..ring_group_caller_id_number..",";
end end
--set the diversion header
local diversion_enabled = settings:get('ring_group', 'diversion_enabled', 'boolean') or 'false';
if (diversion_enabled == 'true' and original_caller_id_number ~= nil) then
diversion_header = "sip_h_Diversion=<sip:"..original_caller_id_number.."@"..domain_name..">;reason=unconditional,";
else
diversion_header = '';
end
--set the destination dial string --set the destination dial string
dial_string = "[toll_allow=".. toll_allow ..",".. caller_id ..",sip_invite_domain="..domain_name..",domain_name="..domain_name..",domain_uuid="..domain_uuid..",call_direction="..call_direction..","..group_confirm..""..timeout_name.."="..destination_timeout..","..delay_name.."="..destination_delay.."]"..route_bridge dial_string = "["..diversion_header.."toll_allow=".. toll_allow ..",".. caller_id ..",sip_invite_domain="..domain_name..",domain_name="..domain_name..",domain_uuid="..domain_uuid..",call_direction="..call_direction..","..group_confirm..""..timeout_name.."="..destination_timeout..","..delay_name.."="..destination_delay.."]"..route_bridge
end end
--add a delimiter between destinations --add a delimiter between destinations
@@ -286,13 +286,13 @@
--get the smtp from address and name --get the smtp from address and name
smtp_from = settings:get('voicemail', 'smtp_from', 'text'); smtp_from = settings:get('voicemail', 'smtp_from', 'text');
smtp_from_name = settings:get('voicemail', 'smtp_from_name', 'text'); smtp_from_name = settings:get('voicemail', 'smtp_from_name', 'text');
if (smtp_from == nil) then if (smtp_from and string.len(smtp_from) > 2) then
smtp_from = settings:get('email', 'smtp_from', 'text'); smtp_from = settings:get('email', 'smtp_from', 'text');
end end
if (smtp_from_name == nil) then if (smtp_from_name and string.len(smtp_from_name) > 0) then
smtp_from_name = settings:get('email', 'smtp_from_name', 'text'); smtp_from_name = settings:get('email', 'smtp_from_name', 'text');
end end
if (smtp_from_name ~= nil) then if (smtp_from_name and string.len(smtp_from_name) > 0 and smtp_from and string.len(smtp_from) > 2) then
smtp_from = smtp_from_name.."<"..smtp_from..">"; smtp_from = smtp_from_name.."<"..smtp_from..">";
end end
@@ -288,6 +288,8 @@
ivr_menu_option_param = xml.sanitize(ivr_menu_option_param); ivr_menu_option_param = xml.sanitize(ivr_menu_option_param);
ivr_menu_option_param = string.gsub(ivr_menu_option_param, "{accountcode}", "${accountcode}"); ivr_menu_option_param = string.gsub(ivr_menu_option_param, "{accountcode}", "${accountcode}");
ivr_menu_option_param = string.gsub(ivr_menu_option_param, "{uuid}", "${uuid}"); ivr_menu_option_param = string.gsub(ivr_menu_option_param, "{uuid}", "${uuid}");
ivr_menu_option_param = string.gsub(ivr_menu_option_param, "{caller_id_name}", "${caller_id_name}");
ivr_menu_option_param = string.gsub(ivr_menu_option_param, "{caller_id_number}", "${caller_id_number}");
xml:append([[ <entry action="]] .. xml.sanitize(ivr_menu_option_action) .. [[" digits="]] .. ivr_menu_option_digits .. [[" param="]] .. ivr_menu_option_param .. [[" description="]] .. xml.sanitize(ivr_menu_option_description) .. [["/>]]); xml:append([[ <entry action="]] .. xml.sanitize(ivr_menu_option_action) .. [[" digits="]] .. ivr_menu_option_digits .. [[" param="]] .. ivr_menu_option_param .. [[" description="]] .. xml.sanitize(ivr_menu_option_description) .. [["/>]]);
if (tonumber(ivr_menu_option_digits) and #ivr_menu_option_digits >= tonumber(direct_dial_digits_min)) then if (tonumber(ivr_menu_option_digits) and #ivr_menu_option_digits >= tonumber(direct_dial_digits_min)) then
@@ -1,6 +1,6 @@
-- xml_handler.lua -- xml_handler.lua
-- Part of FusionPBX -- Part of FusionPBX
-- Copyright (C) 2013-2023 Mark J Crane <markjcrane@fusionpbx.com> -- Copyright (C) 2013-2024 Mark J Crane <markjcrane@fusionpbx.com>
-- All rights reserved. -- All rights reserved.
-- --
-- Redistribution and use in source and binary forms, with or without -- Redistribution and use in source and binary forms, with or without
@@ -155,6 +155,12 @@
--exits the script if we didn't connect properly --exits the script if we didn't connect properly
assert(dbh:connected()); assert(dbh:connected());
-- set the start time of the query
local start_time = os.time();
-- set the timeout value as needed
local timeout_seconds = 10;
--get the hostname --get the hostname
hostname = trim(api:execute("hostname", "")); hostname = trim(api:execute("hostname", ""));
@@ -167,6 +173,7 @@
--get the dialplan xml --get the dialplan xml
if (context_name == 'public' and dialplan_mode == 'single') then if (context_name == 'public' and dialplan_mode == 'single') then
--get the single inbound destination dialplan xml from the database
sql = "SELECT (SELECT domain_name FROM v_domains WHERE domain_uuid = p.domain_uuid) as domain_name, " sql = "SELECT (SELECT domain_name FROM v_domains WHERE domain_uuid = p.domain_uuid) as domain_name, "
sql = sql .. "(SELECT domain_enabled FROM v_domains WHERE domain_uuid = p.domain_uuid) as domain_enabled, p.dialplan_xml "; sql = sql .. "(SELECT domain_enabled FROM v_domains WHERE domain_uuid = p.domain_uuid) as domain_enabled, p.dialplan_xml ";
sql = sql .. "FROM v_dialplans AS p "; sql = sql .. "FROM v_dialplans AS p ";
@@ -193,6 +200,7 @@
freeswitch.consoleLog("notice", "[dialplan] SQL: " .. sql .. "; params:" .. json.encode(params) .. "\n"); freeswitch.consoleLog("notice", "[dialplan] SQL: " .. sql .. "; params:" .. json.encode(params) .. "\n");
end end
dbh:query(sql, params, function(row) dbh:query(sql, params, function(row)
dialplan_found = true;
if (row.domain_uuid ~= nil) then if (row.domain_uuid ~= nil) then
domain_name = row.domain_name; domain_name = row.domain_name;
else else
@@ -202,28 +210,41 @@
xml:append(row.dialplan_xml); xml:append(row.dialplan_xml);
end end
end); end);
if (xml == nil) then
--sanitize the destination if not numeric --handle not found
if (type(destination_number) == "string") then if (dialplan_found == nil) then
destination_number = destination_number:gsub("^%+", ""); --check if the sql query timed out
destination_number = tonumber(destination_number); local current_time = os.time();
if (type(tonumber(destination_number)) ~= "number") then local elapsed_time = current_time - start_time;
destination_number = 'not numeric'; if elapsed_time > timeout_seconds then
end --sql query timed out - unset the xml object to prevent the xml not found
end xml = nil;
if (type(destination_number) == "numeric") then
destination_number = tostring(destination_number);
end end
--build 404 not found XML if (xml ~= nil) then
xml:append([[ <extension name="not-found" continue="false" uuid="9913df49-0757-414b-8cf9-bcae2fd81ae7">]]); --sanitize the destination if not numeric
xml:append([[ <condition field="" expression="">]]); if (type(destination_number) == "string") then
xml:append([[ <action application="set" data="call_direction=inbound" inline="true"/>]]); destination_number = destination_number:gsub("^%+", "");
xml:append([[ <action application="log" data="WARNING [inbound routes] 404 not found ${sip_network_ip} ]]..destination_number..[[" inline="true"/>]]); destination_number = tonumber(destination_number);
xml:append([[ </condition>]]); if (type(tonumber(destination_number)) ~= "number") then
xml:append([[ </extension>]]); destination_number = 'not numeric';
end
end
if (type(destination_number) == "numeric") then
destination_number = tostring(destination_number);
end
--build 404 not found XML
xml:append([[ <extension name="not-found" continue="false" uuid="9913df49-0757-414b-8cf9-bcae2fd81ae7">]]);
xml:append([[ <condition field="" expression="">]]);
xml:append([[ <action application="set" data="call_direction=inbound" inline="true"/>]]);
xml:append([[ <action application="log" data="WARNING [inbound routes] 404 not found ${sip_network_ip} ]]..destination_number..[[" inline="true"/>]]);
xml:append([[ </condition>]]);
xml:append([[ </extension>]]);
end
end end
else else
--get the domain diaplan xml from the database
sql = "select dialplan_xml from v_dialplans as p "; sql = "select dialplan_xml from v_dialplans as p ";
if (context_name == "public" or string.match(context_name, "@")) then if (context_name == "public" or string.match(context_name, "@")) then
sql = sql .. "where p.dialplan_context = :call_context "; sql = sql .. "where p.dialplan_context = :call_context ";
@@ -238,26 +259,31 @@
freeswitch.consoleLog("notice", "[dialplan] SQL: " .. sql .. "; params:" .. json.encode(params) .. "\n"); freeswitch.consoleLog("notice", "[dialplan] SQL: " .. sql .. "; params:" .. json.encode(params) .. "\n");
end end
dbh:query(sql, params, function(row) dbh:query(sql, params, function(row)
dialplan_found = true;
xml:append(row.dialplan_xml); xml:append(row.dialplan_xml);
end); end);
end end
--set the xml array and then concatenate the array to a string --set the xml array and then concatenate the array to a string
xml:append([[ </context>]]); if (dialplan_found ~= nil and dialplan_found) then
xml:append([[ </section>]]); xml:append([[ </context>]]);
xml:append([[</document>]]); xml:append([[ </section>]]);
XML_STRING = xml:build(); xml:append([[</document>]]);
XML_STRING = xml:build();
end
--close the database connection --close the database connection
dbh:release(); dbh:release();
--set the cache --set the cache
local ok, err = cache.set(dialplan_cache_key, XML_STRING, expire["dialplan"]); if (XML_STRING ~= nil) then
if debug["cache"] then local ok, err = cache.set(dialplan_cache_key, XML_STRING, expire["dialplan"]);
if ok then if debug["cache"] then
freeswitch.consoleLog("notice", "[xml_handler] " .. dialplan_cache_key .. " stored in the cache\n"); if ok then
else freeswitch.consoleLog("notice", "[xml_handler] " .. dialplan_cache_key .. " stored in the cache\n");
freeswitch.consoleLog("warning", "[xml_handler] " .. dialplan_cache_key .. " can not be stored in the cache: " .. tostring(err) .. "\n"); else
freeswitch.consoleLog("warning", "[xml_handler] " .. dialplan_cache_key .. " can not be stored in the cache: " .. tostring(err) .. "\n");
end
end end
end end
+12 -5
View File
@@ -54,7 +54,7 @@
end end
--get the hostname --get the hostname
local hostname = trim(api:execute("switchname", "")); local hostname = trim(api:execute("hostname", ""));
-- redirect call to another box -- redirect call to another box
local function make_proxy_call(destination, call_hostname) local function make_proxy_call(destination, call_hostname)
@@ -286,7 +286,7 @@
params[param_name] = extension.."@"..domain_name; params[param_name] = extension.."@"..domain_name;
end end
sql = sql .. ") "; sql = sql .. ") ";
sql = sql .. "AND call_uuid IS NOT NULL "; --sql = sql .. "AND call_uuid IS NOT NULL ";
sql = sql .. "ORDER BY created_epoch DESC LIMIT 1 "; sql = sql .. "ORDER BY created_epoch DESC LIMIT 1 ";
if (debug["sql"]) then if (debug["sql"]) then
log.noticef("SQL: %s; params: %s", sql, json.encode(params)); log.noticef("SQL: %s; params: %s", sql, json.encode(params));
@@ -294,14 +294,17 @@
local is_child local is_child
dbh:query(sql, params, function(row) dbh:query(sql, params, function(row)
--for key, val in pairs(row) do --for key, val in pairs(row) do
-- log.notice("row "..key.." "..val); -- log.notice("row "..key.." "..val);
--end --end
--log.notice("-----------------------"); --log.notice("-----------------------");
is_child = (row.uuid == row.call_uuid) is_child = (row.uuid == row.call_uuid)
uuid = row.call_uuid; uuid = row.uuid;
if (row.call_uuid ~= nil) then
uuid = row.call_uuid;
end
call_hostname = row.hostname; call_hostname = row.hostname;
end); end);
--log.notice("uuid: "..uuid);
--log.notice("call_hostname: "..call_hostname); --log.notice("call_hostname: "..call_hostname);
if is_child then if is_child then
-- we need intercept `parent` call e.g. call in FIFO/CallCenter Queue -- we need intercept `parent` call e.g. call in FIFO/CallCenter Queue
@@ -348,6 +351,7 @@
if (uuid ~= nil) then if (uuid ~= nil) then
if (session:getVariable("billmsec") == nil) then if (session:getVariable("billmsec") == nil) then
if (hostname == call_hostname) then if (hostname == call_hostname) then
log.noticef("intercept `%s`.", uuid)
session:execute("intercept", uuid); session:execute("intercept", uuid);
else else
session:execute("export", "sip_h_X-intercept_uuid="..uuid); session:execute("export", "sip_h_X-intercept_uuid="..uuid);
@@ -385,3 +389,6 @@
--cmd = "originate user/1007@voip.example.com &intercept("..uuid..")"; --cmd = "originate user/1007@voip.example.com &intercept("..uuid..")";
--api = freeswitch.API(); --api = freeswitch.API();
--result = api:executeString(cmd); --result = api:executeString(cmd);
+15 -15
View File
@@ -25,18 +25,19 @@
--exits the script if we didn't connect properly --exits the script if we didn't connect properly
assert(dbh:connected()); assert(dbh:connected());
--get the session variables --get the session variables
sounds_dir = session:getVariable("sounds_dir"); sounds_dir = session:getVariable("sounds_dir") or '';
park_direction = session:getVariable("park_direction"); park_direction = session:getVariable("park_direction") or '';
uuid = session:getVariable("uuid"); uuid = session:getVariable("uuid") or '';
domain_name = session:getVariable("domain_name"); domain_name = session:getVariable("domain_name") or '';
park_extension = session:getVariable("park_extension"); park_extension = session:getVariable("park_extension") or '';
park_range = session:getVariable("park_range"); park_range = session:getVariable("park_range") or '';
park_announce = session:getVariable("park_announce"); park_announce = session:getVariable("park_announce") or '';
park_timeout_type = session:getVariable("park_timeout_type"); park_timeout_type = session:getVariable("park_timeout_type") or '';
park_timeout_destination = session:getVariable("park_timeout_destination"); park_timeout_destination = session:getVariable("park_timeout_destination") or '';
park_timeout_seconds = session:getVariable("park_timeout_seconds"); park_timeout_seconds = session:getVariable("park_timeout_seconds") or '';
park_music = session:getVariable("park_music"); park_music = session:getVariable("park_music") or '';
--define the trim function --define the trim function
require "resources.functions.trim"; require "resources.functions.trim";
@@ -188,9 +189,8 @@
result = api:executeString(cmd); result = api:executeString(cmd);
else else
context = session:getVariable("context"); context = session:getVariable("context");
caller_id_number = session:getVariable("caller_id_number"); caller_id_number = session:getVariable("caller_id_number") or '';
dialed_extension = session:getVariable("dialed_extension"); dialed_extension = session:getVariable("dialed_extension") or '';
dialed_user = session:getVariable("dialed_user");
cmd = "user_exists id ".. caller_id_number .." "..domain_name; cmd = "user_exists id ".. caller_id_number .." "..domain_name;
if (api:executeString(cmd) == "true") then if (api:executeString(cmd) == "true") then
--bridge the current call to the call that is parked --bridge the current call to the call that is parked
@@ -221,7 +221,7 @@
result = trim(api:executeString(cmd)); result = trim(api:executeString(cmd));
else else
--transfer the call back to the callee --transfer the call back to the callee
session:execute("transfer", dialed_user .." XML "..context); session:execute("transfer", dialed_extension .." XML "..context);
end end
end end
@@ -17,7 +17,7 @@
The Initial Developer of the Original Code is The Initial Developer of the Original Code is
Mark J Crane <markjcrane@fusionpbx.com> Mark J Crane <markjcrane@fusionpbx.com>
Portions created by the Initial Developer are Copyright (C) 2008-2023 Portions created by the Initial Developer are Copyright (C) 2008-2024
the Initial Developer. All Rights Reserved. the Initial Developer. All Rights Reserved.
Contributor(s): Contributor(s):
@@ -744,10 +744,10 @@
$this->message_saved(); $this->message_saved();
//set source folder path //set source folder path
$path = $_SESSION['switch']['voicemail']['dir'].'/default/'.$_SESSION['domain_name'].'/'.$this->voicemail_id; $path = ($_SESSION['switch']['voicemail']['dir'] ?? $_SESSION['switch']['voicemail']).'/default/'.$_SESSION['domain_name'].'/'.$this->voicemail_id;
//prepare base64 content from db, if enabled //prepare base64 content from db, if enabled
if (!empty($_SESSION['voicemail']['storage_type']['text']) && $_SESSION['voicemail']['storage_type']['text'] == 'base64') { if ((!empty($_SESSION['voicemail']['storage_type']['text']) && $_SESSION['voicemail']['storage_type']['text'] == 'base64') || (!empty($_SESSION['voicemail']['storage_type']) && $_SESSION['voicemail']['storage_type'] == 'base64')) {
$sql = "select message_base64 "; $sql = "select message_base64 ";
$sql .= "from "; $sql .= "from ";
$sql .= "v_voicemail_messages as m, "; $sql .= "v_voicemail_messages as m, ";
@@ -833,7 +833,7 @@
fpassthru($fd); fpassthru($fd);
//if base64, remove temp file //if base64, remove temp file
if (!empty($_SESSION['voicemail']['storage_type']['text']) && $_SESSION['voicemail']['storage_type']['text'] == 'base64') { if ((!empty($_SESSION['voicemail']['storage_type']['text']) && $_SESSION['voicemail']['storage_type']['text'] == 'base64') || (!empty($_SESSION['voicemail']['storage_type']) && $_SESSION['voicemail']['storage_type'] == 'base64')) {
@unlink($path.'/msg_'.$this->voicemail_message_uuid.'.'.$file_ext); @unlink($path.'/msg_'.$this->voicemail_message_uuid.'.'.$file_ext);
} }
+13
View File
@@ -35,6 +35,19 @@
&& !empty($_REQUEST["uuid"]) && is_uuid($_REQUEST["uuid"]) && !empty($_REQUEST["uuid"]) && is_uuid($_REQUEST["uuid"])
&& !empty($_REQUEST["voicemail_uuid"]) && is_uuid($_REQUEST["voicemail_uuid"]) && !empty($_REQUEST["voicemail_uuid"]) && is_uuid($_REQUEST["voicemail_uuid"])
) { ) {
//if domain uuid not set (due to direct vm download using emailed link, etc), load settings into session based on domain in url
if ((empty($_SESSION['domain_uuid']) || !is_uuid($_SESSION['domain_uuid'])) && !empty($_SERVER['HTTP_HOST'])) {
$sql = 'select domain_uuid from v_domains where domain_name = :domain_name';
$parameters['domain_name'] = $_SERVER['HTTP_HOST'];
$database = new database;
$domain_uuid = $database->select($sql, $parameters, 'column');
if (is_uuid($domain_uuid)) {
$settings = new settings(['domain_uuid'=>$domain_uuid]);
$_SESSION = $settings->get();
$_SESSION['domain_uuid'] = $domain_uuid;
$_SESSION['domain_name'] = $_SERVER['HTTP_HOST'];
}
}
$voicemail = new voicemail; $voicemail = new voicemail;
$voicemail->domain_uuid = $_SESSION['domain_uuid']; $voicemail->domain_uuid = $_SESSION['domain_uuid'];
$voicemail->type = $_REQUEST['t'] ?? null; $voicemail->type = $_REQUEST['t'] ?? null;
+30 -24
View File
@@ -413,19 +413,18 @@ if (!class_exists('xml_cdr')) {
if (isset($xml->variables->effective_caller_id_name)) { if (isset($xml->variables->effective_caller_id_name)) {
$caller_id_name = urldecode($xml->variables->effective_caller_id_name); $caller_id_name = urldecode($xml->variables->effective_caller_id_name);
} }
if (isset($xml->variables->origination_caller_id_name)) {
$caller_id_name = urldecode($xml->variables->origination_caller_id_name);
}
if (isset($xml->variables->origination_caller_id_number)) {
$caller_id_number = urldecode($xml->variables->origination_caller_id_number);
}
if (urldecode($call_direction) == 'outbound' && isset($xml->variables->effective_caller_id_number)) { if (urldecode($call_direction) == 'outbound' && isset($xml->variables->effective_caller_id_number)) {
$caller_id_number = urldecode($xml->variables->effective_caller_id_number); $caller_id_number = urldecode($xml->variables->effective_caller_id_number);
} }
//if intercept is used then update use the last sent callee id name and number
if (isset($xml->variables->last_app) && $xml->variables->last_app == 'intercept' && !empty($xml->variables->last_sent_callee_id_name)) {
$caller_id_name = urldecode($xml->variables->last_sent_callee_id_name);
}
if (isset($xml->variables->last_app) && $xml->variables->last_app == 'intercept' && !empty($xml->variables->last_sent_callee_id_number)) {
$caller_id_number = urldecode($xml->variables->last_sent_callee_id_number);
}
//if the sip_from_domain and domain_name are not the same then original call direction was inbound //if the sip_from_domain and domain_name are not the same then original call direction was inbound
//when an inbound call is forward the call_direction is set to inbound and then updated to outbound //when an inbound call is forward the call_direction is set to inbound and then updated to outbound
//use sip_from_display and sip_from_user to get the original caller ID instead of the updated caller ID info from the forward //use sip_from_display and sip_from_user to get the original caller ID instead of the updated caller ID info from the forward
@@ -479,6 +478,15 @@ if (!class_exists('xml_cdr')) {
//marked as missed //marked as missed
$missed_call = $xml->variables->missed_call; $missed_call = $xml->variables->missed_call;
} }
if (isset($call_direction) && $call_direction == 'inbound'
&& isset($xml->variables->hangup_cause)
&& $xml->variables->hangup_cause == 'ORIGINATOR_CANCEL') {
$missed_call = 'true';
}
if (isset($xml->variables->cc_side) && $xml->variables->cc_side == 'agent') {
//call center
$missed_call = 'false';
}
if (isset($xml->variables->fax_success)) { if (isset($xml->variables->fax_success)) {
//fax server //fax server
$missed_call = 'false'; $missed_call = 'false';
@@ -491,25 +499,21 @@ if (!class_exists('xml_cdr')) {
//ring group or multi destination bridge statement //ring group or multi destination bridge statement
$missed_call = 'false'; $missed_call = 'false';
} }
if (isset($xml->variables->destination_number) && substr($xml->variables->destination_number, 0, 3) == '*99') { if (isset($xml->variables->cc_side) && $xml->variables->cc_side == 'member'
//voicemail && isset($xml->variables->cc_cause) && $xml->variables->cc_cause == 'cancel') {
$missed_call = 'true'; //call center
}
if (isset($xml->variables->voicemail_message) && $xml->variables->voicemail_message == true) {
//voicemail
$missed_call = 'true'; $missed_call = 'true';
} }
if (isset($xml->variables->billsec) && $xml->variables->billsec > 0) { if (isset($xml->variables->billsec) && $xml->variables->billsec > 0) {
//answered call //answered call
$missed_call = 'false'; $missed_call = 'false';
} }
if (isset($xml->variables->cc_side) && $xml->variables->cc_side == 'agent') { if (isset($xml->variables->destination_number) && substr($xml->variables->destination_number, 0, 3) == '*99') {
//call center //voicemail
$missed_call = 'false'; $missed_call = 'true';
} }
if (isset($xml->variables->cc_side) && $xml->variables->cc_side == 'member' if (isset($xml->variables->voicemail_answer_stamp) && !empty($xml->variables->voicemail_answer_stamp)) {
&& isset($xml->variables->cc_cause) && $xml->variables->cc_cause == 'cancel') { //voicemail
//call center
$missed_call = 'true'; $missed_call = 'true';
} }
@@ -571,6 +575,9 @@ if (!class_exists('xml_cdr')) {
if (substr($destination_number, 0, 3) == '*99') { if (substr($destination_number, 0, 3) == '*99') {
$status = 'voicemail'; $status = 'voicemail';
} }
if (isset($xml->variables->voicemail_message_seconds) && $xml->variables->voicemail_message_seconds > 0) {
$status = 'voicemail';
}
if ($xml->variables->hangup_cause == 'ORIGINATOR_CANCEL') { if ($xml->variables->hangup_cause == 'ORIGINATOR_CANCEL') {
$status = 'cancelled'; $status = 'cancelled';
} }
@@ -675,7 +682,7 @@ if (!class_exists('xml_cdr')) {
$this->array[$key]['last_arg'] = urldecode($xml->variables->last_arg); $this->array[$key]['last_arg'] = urldecode($xml->variables->last_arg);
//voicemail message success //voicemail message success
if ($xml->variables->voicemail_action == "save" && $xml->variables->voicemail_message_seconds > 0){ if (!empty($xml->variables->voicemail_answer_stamp) && $xml->variables->voicemail_message_seconds > 0){
$this->array[$key]['voicemail_message'] = "true"; $this->array[$key]['voicemail_message'] = "true";
} }
else { //if ($xml->variables->voicemail_action == "save") { else { //if ($xml->variables->voicemail_action == "save") {
@@ -1221,7 +1228,7 @@ if (!class_exists('xml_cdr')) {
//voicemails //voicemails
if ($app['application'] == 'voicemails') { if ($app['application'] == 'voicemails') {
$app['status'] = 'answered'; $app['status'] = 'voicemail';
} }
//debug - add the callee_id_number to the end of the status //debug - add the callee_id_number to the end of the status
@@ -2001,4 +2008,3 @@ if (!class_exists('xml_cdr')) {
} }
?> ?>
@@ -28,10 +28,17 @@
//if also viewing system status, show more recent calls (more room avaialble) //if also viewing system status, show more recent calls (more room avaialble)
$missed_limit = !empty($selected_blocks) && (is_array($selected_blocks) && in_array('counts', $selected_blocks)) ? 10 : 5; $missed_limit = !empty($selected_blocks) && (is_array($selected_blocks) && in_array('counts', $selected_blocks)) ? 10 : 5;
//set the sql time format
$sql_time_format = 'DD Mon HH12:MI am';
if (!empty($_SESSION['domain']['time_format']['text'])) {
$sql_time_format = $_SESSION['domain']['time_format']['text'] == '12h' ? "DD Mon HH12:MI am" : "DD Mon HH24:MI";
}
//get the missed calls from call detail records //get the missed calls from call detail records
$sql = "select \n"; $sql = "select \n";
$sql .= " status, \n";
$sql .= " direction, \n"; $sql .= " direction, \n";
$sql .= " to_char(timezone(:time_zone, start_stamp), '".(!empty($_SESSION['domain']['time_format']) && $_SESSION['domain']['time_format']['text'] == '12h' ? "DD Mon HH12:MI am" : "DD Mon HH24:MI")."') as start_date_time, \n"; $sql .= " to_char(timezone(:time_zone, start_stamp), '".$sql_time_format."') as start_date_time, \n";
$sql .= " caller_id_name, \n"; $sql .= " caller_id_name, \n";
$sql .= " caller_id_number, \n"; $sql .= " caller_id_number, \n";
$sql .= " answer_stamp \n"; $sql .= " answer_stamp \n";
@@ -43,7 +50,7 @@
$sql .= " direction = 'inbound' \n"; $sql .= " direction = 'inbound' \n";
$sql .= " or direction = 'local' \n"; $sql .= " or direction = 'local' \n";
$sql .= " ) \n"; $sql .= " ) \n";
$sql .= " and (missed_call = true or bridge_uuid is null) "; $sql .= " and (status = 'missed') ";
$sql .= " and hangup_cause <> 'LOSE_RACE' "; $sql .= " and hangup_cause <> 'LOSE_RACE' ";
if (!permission_exists('xml_cdr_domain')) { if (!permission_exists('xml_cdr_domain')) {
if (!empty($assigned_extensions)) { if (!empty($assigned_extensions)) {
@@ -67,6 +74,8 @@
$sql .= "and start_epoch > ".(time() - 86400)." \n"; $sql .= "and start_epoch > ".(time() - 86400)." \n";
$sql .= "order by \n"; $sql .= "order by \n";
$sql .= "start_epoch desc \n"; $sql .= "start_epoch desc \n";
$sql .= "limit :missed_limit \n";
$parameters['missed_limit'] = $missed_limit;
$parameters['time_zone'] = isset($_SESSION['domain']['time_zone']['name']) ? $_SESSION['domain']['time_zone']['name'] : date_default_timezone_get(); $parameters['time_zone'] = isset($_SESSION['domain']['time_zone']['name']) ? $_SESSION['domain']['time_zone']['name'] : date_default_timezone_get();
$parameters['domain_uuid'] = $_SESSION['domain_uuid']; $parameters['domain_uuid'] = $_SESSION['domain_uuid'];
if (!isset($database)) { $database = new database; } if (!isset($database)) { $database = new database; }
@@ -145,7 +154,6 @@
) ? true : false; ) ? true : false;
foreach ($result as $index => $row) { foreach ($result as $index => $row) {
if ($index + 1 > $missed_limit) { break; } //only show limit
$start_date_time = str_replace('/0','/', ltrim($row['start_date_time'], '0')); $start_date_time = str_replace('/0','/', ltrim($row['start_date_time'], '0'));
if (!empty($_SESSION['domain']['time_format']) && $_SESSION['domain']['time_format']['text'] == '12h') { if (!empty($_SESSION['domain']['time_format']) && $_SESSION['domain']['time_format']['text'] == '12h') {
$start_date_time = str_replace(' 0',' ', $start_date_time); $start_date_time = str_replace(' 0',' ', $start_date_time);
@@ -168,7 +176,7 @@
echo "<tr ".$tr_link.">\n"; echo "<tr ".$tr_link.">\n";
echo "<td valign='middle' class='".$row_style[$c]."' style='cursor: help; padding: 0 0 0 6px;'>\n"; echo "<td valign='middle' class='".$row_style[$c]."' style='cursor: help; padding: 0 0 0 6px;'>\n";
if ($theme_cdr_images_exist) { if ($theme_cdr_images_exist) {
$call_result = ($row['answer_stamp'] != '') ? 'voicemail' : 'cancelled'; $call_result = $row['status'];
if (isset($row['direction'])) { if (isset($row['direction'])) {
echo " <img src='".PROJECT_PATH."/themes/".$_SESSION['domain']['template']['name']."/images/icon_cdr_".$row['direction']."_".$call_result.".png' width='16' style='border: none;' title='".$text['label-'.$row['direction']].": ".$text['label-'.$call_result]."'>\n"; echo " <img src='".PROJECT_PATH."/themes/".$_SESSION['domain']['template']['name']."/images/icon_cdr_".$row['direction']."_".$call_result.".png' width='16' style='border: none;' title='".$text['label-'.$row['direction']].": ".$text['label-'.$call_result]."'>\n";
} }
@@ -183,7 +191,7 @@
unset($sql, $parameters, $result, $num_rows, $index, $row); unset($sql, $parameters, $result, $num_rows, $index, $row);
echo "</table>\n"; echo "</table>\n";
echo "<span style='display: block; margin: 6px 0 7px 0;'><a href='".PROJECT_PATH."/app/xml_cdr/xml_cdr.php?call_result=missed'>".$text['label-view_all']."</a></span>\n"; echo "<span style='display: block; margin: 6px 0 7px 0;'><a href='".PROJECT_PATH."/app/xml_cdr/xml_cdr.php?status=missed'>".$text['label-view_all']."</a></span>\n";
echo "</div>"; echo "</div>";
//$n++; //$n++;
@@ -28,12 +28,19 @@
//if also viewing system status, show more recent calls (more room avaialble) //if also viewing system status, show more recent calls (more room avaialble)
$recent_limit = isset($selected_blocks) && is_array($selected_blocks) && in_array('counts', $selected_blocks) ? 10 : 5; $recent_limit = isset($selected_blocks) && is_array($selected_blocks) && in_array('counts', $selected_blocks) ? 10 : 5;
//set the sql time format
$sql_time_format = 'DD Mon HH12:MI am';
if (!empty($_SESSION['domain']['time_format']['text'])) {
$sql_time_format = $_SESSION['domain']['time_format']['text'] == '12h' ? "DD Mon HH12:MI am" : "DD Mon HH24:MI";
}
//get the recent calls from call detail records //get the recent calls from call detail records
$sql = " $sql = "
select select
status,
direction, direction,
start_stamp, start_stamp,
to_char(timezone(:time_zone, start_stamp), '".(!empty($_SESSION['domain']['time_format']) && $_SESSION['domain']['time_format']['text'] == '12h' ? "DD Mon HH12:MI am" : "DD Mon HH24:MI")."') as start_date_time, to_char(timezone(:time_zone, start_stamp), '".$sql_time_format."') as start_date_time,
caller_id_name, caller_id_name,
caller_id_number, caller_id_number,
destination_number, destination_number,
@@ -49,13 +56,7 @@
$x = 0; $x = 0;
foreach ($assigned_extensions as $assigned_extension_uuid => $assigned_extension) { foreach ($assigned_extensions as $assigned_extension_uuid => $assigned_extension) {
$sql_where_array[] = "extension_uuid = :extension_uuid_".$x; $sql_where_array[] = "extension_uuid = :extension_uuid_".$x;
$sql_where_array[] = "caller_id_number = :caller_id_number_".$x;
$sql_where_array[] = "destination_number = :destination_number_1_".$x;
$sql_where_array[] = "destination_number = :destination_number_2_".$x;
$parameters['extension_uuid_'.$x] = $assigned_extension_uuid; $parameters['extension_uuid_'.$x] = $assigned_extension_uuid;
$parameters['caller_id_number_'.$x] = $assigned_extension;
$parameters['destination_number_1_'.$x] = $assigned_extension;
$parameters['destination_number_2_'.$x] = '*99'.$assigned_extension;
$x++; $x++;
} }
if (!empty($sql_where_array)) { if (!empty($sql_where_array)) {
@@ -67,10 +68,11 @@
$sql .= "and false \n"; $sql .= "and false \n";
} }
} }
$sql .= " $sql .= "and hangup_cause <> 'LOSE_RACE' ";
and start_epoch > ".(time() - 86400)." $sql .= "and start_epoch > ".(time() - 86400)." ";
order by $sql .= "order by start_epoch desc ";
start_epoch desc"; $sql .= "limit :recent_limit ";
$parameters['recent_limit'] = $recent_limit;
$parameters['time_zone'] = isset($_SESSION['domain']['time_zone']['name']) ? $_SESSION['domain']['time_zone']['name'] : date_default_timezone_get(); $parameters['time_zone'] = isset($_SESSION['domain']['time_zone']['name']) ? $_SESSION['domain']['time_zone']['name'] : date_default_timezone_get();
$parameters['domain_uuid'] = $_SESSION['domain_uuid']; $parameters['domain_uuid'] = $_SESSION['domain_uuid'];
if (!isset($database)) { $database = new database; } if (!isset($database)) { $database = new database; }
@@ -156,7 +158,6 @@
) ? true : false; ) ? true : false;
foreach ($result as $index => $row) { foreach ($result as $index => $row) {
if ($index + 1 > $recent_limit) { break; } //only show limit
$start_date_time = str_replace('/0','/', ltrim($row['start_date_time'], '0')); $start_date_time = str_replace('/0','/', ltrim($row['start_date_time'], '0'));
if (!empty($_SESSION['domain']['time_format']) && $_SESSION['domain']['time_format']['text'] == '12h') { if (!empty($_SESSION['domain']['time_format']) && $_SESSION['domain']['time_format']['text'] == '12h') {
$start_date_time = str_replace(' 0',' ', $start_date_time); $start_date_time = str_replace(' 0',' ', $start_date_time);
@@ -192,17 +193,7 @@
//determine call result and appropriate icon //determine call result and appropriate icon
echo "<td valign='middle' class='".$row_style[$c]."' style='cursor: help; padding: 0 0 0 6px;'>\n"; echo "<td valign='middle' class='".$row_style[$c]."' style='cursor: help; padding: 0 0 0 6px;'>\n";
if ($theme_cdr_images_exist) { if ($theme_cdr_images_exist) {
if ($row['direction'] == 'inbound' || $row['direction'] == 'local') { $call_result = $row['status'];
if ($row['answer_stamp'] != '' && $row['bridge_uuid'] != '') { $call_result = 'answered'; }
else if ($row['answer_stamp'] != '' && $row['bridge_uuid'] == '') { $call_result = 'voicemail'; }
else if ($row['answer_stamp'] == '' && $row['bridge_uuid'] == '' && $row['sip_hangup_disposition'] != 'send_refuse') { $call_result = 'cancelled'; }
else { $call_result = 'failed'; }
}
else if ($row['direction'] == 'outbound') {
if ($row['answer_stamp'] != '' && $row['bridge_uuid'] != '') { $call_result = 'answered'; }
else if ($row['answer_stamp'] == '' && $row['bridge_uuid'] != '') { $call_result = 'cancelled'; }
else { $call_result = 'failed'; }
}
if (isset($row['direction'])) { if (isset($row['direction'])) {
echo "<img src='".PROJECT_PATH."/themes/".$_SESSION['domain']['template']['name']."/images/icon_cdr_".$row['direction']."_".$call_result.".png' width='16' style='border: none;' title='".$text['label-'.$row['direction']].": ".$text['label-'.$call_result]."'>\n"; echo "<img src='".PROJECT_PATH."/themes/".$_SESSION['domain']['template']['name']."/images/icon_cdr_".$row['direction']."_".$call_result.".png' width='16' style='border: none;' title='".$text['label-'.$row['direction']].": ".$text['label-'.$call_result]."'>\n";
} }
@@ -221,7 +212,6 @@
echo "</table>\n"; echo "</table>\n";
echo "<span style='display: block; margin: 6px 0 7px 0;'><a href='".PROJECT_PATH."/app/xml_cdr/xml_cdr.php'>".$text['label-view_all']."</a></span>\n"; echo "<span style='display: block; margin: 6px 0 7px 0;'><a href='".PROJECT_PATH."/app/xml_cdr/xml_cdr.php'>".$text['label-view_all']."</a></span>\n";
echo "</div>"; echo "</div>";
//$n++;
echo "<span class='hud_expander' onclick=\"$('#hud_recent_calls_details').slideToggle('fast');\"><span class='fas fa-ellipsis-h'></span></span>"; echo "<span class='hud_expander' onclick=\"$('#hud_recent_calls_details').slideToggle('fast');\"><span class='fas fa-ellipsis-h'></span></span>";
echo "</div>\n"; echo "</div>\n";
+3 -3
View File
@@ -751,8 +751,8 @@
$hangup_cause = strtolower($hangup_cause); $hangup_cause = strtolower($hangup_cause);
$hangup_cause = ucwords($hangup_cause); $hangup_cause = ucwords($hangup_cause);
//if call cancelled, show the ring time, not the bill time. //get the duration if null use 0
$seconds = $row['hangup_cause'] == "ORIGINATOR_CANCEL" ? $row['duration'] : round(($row['billmsec'] / 1000), 0, PHP_ROUND_HALF_UP); $duration = $row['duration'] ?? 0;
//determine recording properties //determine recording properties
if (!empty($row['record_path']) && !empty($row['record_name']) && permission_exists('xml_cdr_recording') && (permission_exists('xml_cdr_recording_play') || permission_exists('xml_cdr_recording_download'))) { if (!empty($row['record_path']) && !empty($row['record_name']) && permission_exists('xml_cdr_recording') && (permission_exists('xml_cdr_recording_play') || permission_exists('xml_cdr_recording_download'))) {
@@ -914,7 +914,7 @@
} }
//duration //duration
if (permission_exists('xml_cdr_duration')) { if (permission_exists('xml_cdr_duration')) {
$content .= " <td class='middle center hide-sm-dn'>".gmdate("G:i:s", $seconds)."</td>\n"; $content .= " <td class='middle center hide-sm-dn'>".gmdate("G:i:s", $duration)."</td>\n";
} }
//call result/status //call result/status
if (permission_exists("xml_cdr_status")) { if (permission_exists("xml_cdr_status")) {
+8 -2
View File
@@ -245,6 +245,12 @@
} }
$parameters['time_zone'] = $time_zone; $parameters['time_zone'] = $time_zone;
//set the sql time format
$sql_time_format = 'HH12:MI am';
if (!empty($_SESSION['domain']['time_format']['text'])) {
$sql_time_format = $_SESSION['domain']['time_format']['text'] == '12h' ? "HH12:MI am" : "HH24:MI";
}
//get the results from the db //get the results from the db
$sql = "select \n"; $sql = "select \n";
$sql .= "c.domain_uuid, \n"; $sql .= "c.domain_uuid, \n";
@@ -253,7 +259,7 @@
$sql .= "c.start_stamp, \n"; $sql .= "c.start_stamp, \n";
$sql .= "c.end_stamp, \n"; $sql .= "c.end_stamp, \n";
$sql .= "to_char(timezone(:time_zone, start_stamp), 'DD Mon YYYY') as start_date_formatted, \n"; $sql .= "to_char(timezone(:time_zone, start_stamp), 'DD Mon YYYY') as start_date_formatted, \n";
$sql .= "to_char(timezone(:time_zone, start_stamp), 'HH12:MI:SS am') as start_time_formatted, \n"; $sql .= "to_char(timezone(:time_zone, start_stamp), '".$sql_time_format."') as start_time_formatted, \n";
$sql .= "c.start_epoch, \n"; $sql .= "c.start_epoch, \n";
$sql .= "c.hangup_cause, \n"; $sql .= "c.hangup_cause, \n";
$sql .= "c.billsec as duration, \n"; $sql .= "c.billsec as duration, \n";
@@ -476,7 +482,7 @@
$sql .= "and hangup_cause != 'LOSE_RACE' \n"; $sql .= "and hangup_cause != 'LOSE_RACE' \n";
} }
if (!empty($status)) { if (!empty($status)) {
$sql .= "and status >= :status \n"; $sql .= "and status = :status \n";
$parameters['status'] = $status; $parameters['status'] = $status;
} }
if (!empty($xml_cdr_uuid)) { if (!empty($xml_cdr_uuid)) {
@@ -75,9 +75,6 @@ class plugin_database {
$domain_array = explode(":", $_SERVER["HTTP_HOST"]); $domain_array = explode(":", $_SERVER["HTTP_HOST"]);
$domain_name = $domain_array[0]; $domain_name = $domain_array[0];
//temp directory
$_SESSION['server']['temp']['dir'] = '/tmp';
//create token //create token
//$object = new token; //$object = new token;
//$token = $object->create('login'); //$token = $object->create('login');
@@ -90,7 +87,7 @@ class plugin_database {
$view = new template(); $view = new template();
$view->engine = 'smarty'; $view->engine = 'smarty';
$view->template_dir = $_SERVER["DOCUMENT_ROOT"].PROJECT_PATH.'/core/authentication/resources/views/'; $view->template_dir = $_SERVER["DOCUMENT_ROOT"].PROJECT_PATH.'/core/authentication/resources/views/';
$view->cache_dir = $_SESSION['server']['temp']['dir']; $view->cache_dir = sys_get_temp_dir();
$view->init(); $view->init();
//add translations //add translations
@@ -58,18 +58,10 @@ class plugin_email {
$settings['theme']['login_logo_height'] = !empty($_SESSION['theme']['login_logo_height']['text']) ? $_SESSION['theme']['login_logo_height']['text'] : 'auto; max-height: 300px'; $settings['theme']['login_logo_height'] = !empty($_SESSION['theme']['login_logo_height']['text']) ? $_SESSION['theme']['login_logo_height']['text'] : 'auto; max-height: 300px';
$settings['theme']['message_delay'] = isset($_SESSION['theme']['message_delay']) ? 1000 * (float) $_SESSION['theme']['message_delay'] : 3000; $settings['theme']['message_delay'] = isset($_SESSION['theme']['message_delay']) ? 1000 * (float) $_SESSION['theme']['message_delay'] : 3000;
//set a default template
$_SESSION['domain']['template']['name'] = 'default';
$_SESSION['theme']['menu_brand_image']['text'] = PROJECT_PATH.'/themes/default/images/logo.png';
$_SESSION['theme']['menu_brand_type']['text'] = 'image';
//get the domain //get the domain
$domain_array = explode(":", $_SERVER["HTTP_HOST"]); $domain_array = explode(":", $_SERVER["HTTP_HOST"]);
$domain_name = $domain_array[0]; $domain_name = $domain_array[0];
//temp directory
$_SESSION['server']['temp']['dir'] = '/tmp';
//use the session username //use the session username
if (isset($_SESSION['username'])) { if (isset($_SESSION['username'])) {
$_POST['username'] = $_SESSION['username']; $_POST['username'] = $_SESSION['username'];
@@ -87,7 +79,7 @@ class plugin_email {
$view = new template(); $view = new template();
$view->engine = 'smarty'; $view->engine = 'smarty';
$view->template_dir = $_SERVER["DOCUMENT_ROOT"].PROJECT_PATH.'/core/authentication/resources/views/'; $view->template_dir = $_SERVER["DOCUMENT_ROOT"].PROJECT_PATH.'/core/authentication/resources/views/';
$view->cache_dir = $_SESSION['server']['temp']['dir']; $view->cache_dir = sys_get_temp_dir();
$view->init(); $view->init();
//assign default values to the template //assign default values to the template
@@ -312,18 +304,10 @@ class plugin_email {
//echo $email_response."<br />\n"; //echo $email_response."<br />\n";
//echo $email_error."<br />\n"; //echo $email_error."<br />\n";
//set a default template
$_SESSION['domain']['template']['name'] = 'default';
$_SESSION['theme']['menu_brand_image']['text'] = PROJECT_PATH.'/themes/default/images/logo.png';
$_SESSION['theme']['menu_brand_type']['text'] = 'image';
//get the domain //get the domain
$domain_array = explode(":", $_SERVER["HTTP_HOST"]); $domain_array = explode(":", $_SERVER["HTTP_HOST"]);
$domain_name = $domain_array[0]; $domain_name = $domain_array[0];
//temp directory
$_SESSION['server']['temp']['dir'] = '/tmp';
//create token //create token
//$object = new token; //$object = new token;
//$token = $object->create('login'); //$token = $object->create('login');
@@ -336,7 +320,7 @@ class plugin_email {
$view = new template(); $view = new template();
$view->engine = 'smarty'; $view->engine = 'smarty';
$view->template_dir = $_SERVER["DOCUMENT_ROOT"].PROJECT_PATH.'/core/authentication/resources/views/'; $view->template_dir = $_SERVER["DOCUMENT_ROOT"].PROJECT_PATH.'/core/authentication/resources/views/';
$view->cache_dir = $_SESSION['server']['temp']['dir']; $view->cache_dir = sys_get_temp_dir();
$view->init(); $view->init();
//assign default values to the template //assign default values to the template
@@ -38,9 +38,6 @@ class plugin_ldap {
$domain_array = explode(":", $_SERVER["HTTP_HOST"]); $domain_array = explode(":", $_SERVER["HTTP_HOST"]);
$domain_name = $domain_array[0]; $domain_name = $domain_array[0];
//temp directory
$_SESSION['server']['temp']['dir'] = '/tmp';
//create token //create token
//$object = new token; //$object = new token;
//$token = $object->create('login'); //$token = $object->create('login');
@@ -53,7 +50,7 @@ class plugin_ldap {
$view = new template(); $view = new template();
$view->engine = 'smarty'; $view->engine = 'smarty';
$view->template_dir = $_SERVER["DOCUMENT_ROOT"].PROJECT_PATH.'/core/authentication/resources/views/'; $view->template_dir = $_SERVER["DOCUMENT_ROOT"].PROJECT_PATH.'/core/authentication/resources/views/';
$view->cache_dir = $_SESSION['server']['temp']['dir']; $view->cache_dir = sys_get_temp_dir();
$view->init(); $view->init();
//add translations //add translations
@@ -70,18 +70,10 @@ class plugin_totp {
//request the username //request the username
if (!$this->username && !isset($_POST['authentication_code'])) { if (!$this->username && !isset($_POST['authentication_code'])) {
//set a default template
$_SESSION['domain']['template']['name'] = 'default';
$_SESSION['theme']['menu_brand_image']['text'] = PROJECT_PATH.'/themes/default/images/logo.png';
$_SESSION['theme']['menu_brand_type']['text'] = 'image';
//get the domain //get the domain
$domain_array = explode(":", $_SERVER["HTTP_HOST"]); $domain_array = explode(":", $_SERVER["HTTP_HOST"]);
$domain_name = $domain_array[0]; $domain_name = $domain_array[0];
//temp directory
$_SESSION['server']['temp']['dir'] = '/tmp';
//create token //create token
//$object = new token; //$object = new token;
//$token = $object->create('login'); //$token = $object->create('login');
@@ -94,7 +86,7 @@ class plugin_totp {
$view = new template(); $view = new template();
$view->engine = 'smarty'; $view->engine = 'smarty';
$view->template_dir = $_SERVER["DOCUMENT_ROOT"].PROJECT_PATH.'/core/authentication/resources/views/'; $view->template_dir = $_SERVER["DOCUMENT_ROOT"].PROJECT_PATH.'/core/authentication/resources/views/';
$view->cache_dir = $_SESSION['server']['temp']['dir']; $view->cache_dir = sys_get_temp_dir();
$view->init(); $view->init();
//assign default values to the template //assign default values to the template
@@ -180,18 +172,10 @@ class plugin_totp {
$_SESSION["user_email"] = $row['user_email']; $_SESSION["user_email"] = $row['user_email'];
$_SESSION["contact_uuid"] = $row["contact_uuid"]; $_SESSION["contact_uuid"] = $row["contact_uuid"];
//set a default template
$_SESSION['domain']['template']['name'] = 'default';
$_SESSION['theme']['menu_brand_image']['text'] = PROJECT_PATH.'/themes/default/images/logo.png';
$_SESSION['theme']['menu_brand_type']['text'] = 'image';
//get the domain //get the domain
$domain_array = explode(":", $_SERVER["HTTP_HOST"]); $domain_array = explode(":", $_SERVER["HTTP_HOST"]);
$domain_name = $domain_array[0]; $domain_name = $domain_array[0];
//temp directory
$_SESSION['server']['temp']['dir'] = '/tmp';
//create token //create token
//$object = new token; //$object = new token;
//$token = $object->create('login'); //$token = $object->create('login');
@@ -204,7 +188,7 @@ class plugin_totp {
$view = new template(); $view = new template();
$view->engine = 'smarty'; $view->engine = 'smarty';
$view->template_dir = $_SERVER["DOCUMENT_ROOT"].PROJECT_PATH.'/core/authentication/resources/views/'; $view->template_dir = $_SERVER["DOCUMENT_ROOT"].PROJECT_PATH.'/core/authentication/resources/views/';
$view->cache_dir = $_SESSION['server']['temp']['dir']; $view->cache_dir = sys_get_temp_dir();
$view->init(); $view->init();
//assign values to the template //assign values to the template
+1 -4
View File
@@ -350,14 +350,11 @@
$domain_array = explode(":", $_SERVER["HTTP_HOST"]); $domain_array = explode(":", $_SERVER["HTTP_HOST"]);
$domain_name = $domain_array[0]; $domain_name = $domain_array[0];
//temp directory
$_SESSION['server']['temp']['dir'] = '/tmp';
//initialize a template object //initialize a template object
$view = new template(); $view = new template();
$view->engine = 'smarty'; $view->engine = 'smarty';
$view->template_dir = $_SERVER["DOCUMENT_ROOT"].PROJECT_PATH.'/core/install/resources/views/'; $view->template_dir = $_SERVER["DOCUMENT_ROOT"].PROJECT_PATH.'/core/install/resources/views/';
$view->cache_dir = $_SESSION['server']['temp']['dir']; $view->cache_dir = sys_get_temp_dir();
$view->init(); $view->init();
//assign default values to the template //assign default values to the template
+1 -1
View File
@@ -12,7 +12,7 @@ if (!class_exists('software')) {
* version * version
*/ */
public static function version() { public static function version() {
return '5.2.0'; return '5.2.4';
} }
/** /**
+24
View File
@@ -2329,6 +2329,30 @@ $text['label-answered']['zh-cn'] = "回答";
$text['label-answered']['ja-jp'] = "答えた"; $text['label-answered']['ja-jp'] = "答えた";
$text['label-answered']['ko-kr'] = "대답했다"; $text['label-answered']['ko-kr'] = "대답했다";
$text['label-no_answer']['en-us'] = "No Answer";
$text['label-no_answer']['en-gb'] = "No Answer";
$text['label-no_answer']['ar-eg'] = "لا اجابة";
$text['label-no_answer']['de-at'] = "Keine Antwort";
$text['label-no_answer']['de-ch'] = "Keine Antwort";
$text['label-no_answer']['de-de'] = "Keine Antwort";
$text['label-no_answer']['es-cl'] = "Sin respuesta";
$text['label-no_answer']['es-mx'] = "Sin respuesta";
$text['label-no_answer']['fr-ca'] = "Pas de réponse";
$text['label-no_answer']['fr-fr'] = "Pas de réponse";
$text['label-no_answer']['he-il'] = "אין תשובה";
$text['label-no_answer']['it-it'] = "Nessuna risposta";
$text['label-no_answer']['nl-nl'] = "Geen antwoord";
$text['label-no_answer']['pl-pl'] = "Brak odpowiedzi";
$text['label-no_answer']['pt-br'] = "Sem resposta";
$text['label-no_answer']['pt-pt'] = "Sem resposta";
$text['label-no_answer']['ro-ro'] = "Nici un raspuns";
$text['label-no_answer']['ru-ru'] = "Нет ответа";
$text['label-no_answer']['sv-se'] = "Inget svar";
$text['label-no_answer']['uk-ua'] = "Без відповіді";
$text['label-no_answer']['zh-cn'] = "没有答案";
$text['label-no_answer']['ja-jp'] = "答えはありません";
$text['label-no_answer']['ko-kr'] = "답변 없음";
$text['label-active_users']['en-us'] = "Active Users"; $text['label-active_users']['en-us'] = "Active Users";
$text['label-active_users']['en-gb'] = "Active Users"; $text['label-active_users']['en-gb'] = "Active Users";
$text['label-active_users']['ar-eg'] = "الأعضاء النشيطين"; $text['label-active_users']['ar-eg'] = "الأعضاء النشيطين";
+3 -3
View File
@@ -44,12 +44,12 @@
} }
//regenerate sessions to avoid session id attacks such as session fixation //regenerate sessions to avoid session id attacks such as session fixation
if (array_key_exists('security',$_SESSION) && $_SESSION['security']['session_rotate']['boolean'] == "true") { if (isset($_SESSION['authorized']) && $_SESSION['authorized']) {
$_SESSION['session']['last_activity'] = time(); $_SESSION['session']['last_activity'] = time();
if (!isset($_SESSION['session']['created'])) { if (!isset($_SESSION['session']['created'])) {
$_SESSION['session']['created'] = time(); $_SESSION['session']['created'] = time();
} else if (time() - $_SESSION['session']['created'] > 28800) { } elseif (time() - $_SESSION['session']['created'] > 28800) {
// session started more than 8 hours ago //session started more than 8 hours ago
session_regenerate_id(true); // rotate the session id session_regenerate_id(true); // rotate the session id
$_SESSION['session']['created'] = time(); // update creation time $_SESSION['session']['created'] = time(); // update creation time
} }
+45 -23
View File
@@ -1,20 +1,42 @@
<?php <?php
/** /**
* cache class provides an abstracted cache * Provides an abstracted cache
*
* @method string set
* @method string get
* @method string delete
* @method string flush
*/ */
class cache { class cache {
private $settings;
private $syslog;
private $location;
private $method;
/** /**
* Called when the object is created * Called when the object is created
*/ */
public function __construct() { public function __construct(settings $settings = null) {
//place holder //set defaults
if ($settings === null) {
$settings = new settings();
}
//get the settings
$this->settings = $settings;
$this->method = $this->setting('method');
$this->syslog = $this->setting('syslog');
$this->location = $this->setting('location');
if (empty($this->method)) {
$this->method = 'file';
}
if (empty($this->syslog)) {
$this->syslog = 'false';
}
if (empty($this->location)) {
$this->location = '/var/cache/fusionpbx';
}
}
private function setting($subcategory) {
return $this->settings->get('cache', $subcategory);
} }
/** /**
@@ -28,7 +50,7 @@ class cache {
$key = str_replace(":", ".", $key); $key = str_replace(":", ".", $key);
//save to memcache //save to memcache
if ($_SESSION['cache']['method']['text'] == "memcache") { if ($this->method === "memcache") {
//connect to event socket //connect to event socket
$esl = event_socket::create(); $esl = event_socket::create();
if ($esl === false) { if ($esl === false) {
@@ -42,8 +64,8 @@ class cache {
} }
//save to the file cache //save to the file cache
if ($_SESSION['cache']['method']['text'] == "file") { if ($this->method === "file") {
$result = file_put_contents($_SESSION['cache']['location']['text'] . "/" . $key, $value); $result = file_put_contents($this->location . "/" . $key, $value);
} }
//return result //return result
@@ -60,7 +82,7 @@ class cache {
$key = str_replace(":", ".", $key); $key = str_replace(":", ".", $key);
//cache method memcache //cache method memcache
if ($_SESSION['cache']['method']['text'] == "memcache") { if ($this->method === "memcache") {
// connect to event socket // connect to event socket
$esl = event_socket::create(); $esl = event_socket::create();
if (!$esl->is_connected()) { if (!$esl->is_connected()) {
@@ -76,9 +98,9 @@ class cache {
} }
//get the file cache //get the file cache
if ($_SESSION['cache']['method']['text'] == "file") { if ($this->method === "file") {
if (file_exists($_SESSION['cache']['location']['text'] . "/" . $key)) { if (file_exists($this->location . "/" . $key)) {
$result = file_get_contents($_SESSION['cache']['location']['text'] . "/" . $key); $result = file_get_contents($this->location . "/" . $key);
} }
} }
@@ -93,14 +115,14 @@ class cache {
public function delete($key) { public function delete($key) {
//debug information //debug information
if (isset($_SESSION['cache']['syslog']['boolean']) && $_SESSION['cache']['syslog']['boolean'] == "true") { if ($this->syslog === "true") {
openlog("fusionpbx", LOG_PID | LOG_PERROR, LOG_USER); openlog("fusionpbx", LOG_PID | LOG_PERROR, LOG_USER);
syslog(LOG_WARNING, "debug: cache: [key: ".$key.", script: ".$_SERVER['SCRIPT_NAME'].", line: ".__line__."]"); syslog(LOG_WARNING, "debug: cache: [key: ".$key.", script: ".$_SERVER['SCRIPT_NAME'].", line: ".__line__."]");
closelog(); closelog();
} }
//cache method memcache //cache method memcache
if (!empty($_SESSION['cache']['method']['text']) && $_SESSION['cache']['method']['text'] == "memcache") { if ($this->method === "memcache") {
//connect to event socket //connect to event socket
$esl = event_socket::create(); $esl = event_socket::create();
if ($esl === false) { if ($esl === false) {
@@ -122,7 +144,7 @@ class cache {
} }
//cache method file //cache method file
if (!empty($_SESSION['cache']['method']['text']) && $_SESSION['cache']['method']['text'] == "file") { if ($this->method === "file") {
//change the delimiter //change the delimiter
$key = str_replace(":", ".", $key); $key = str_replace(":", ".", $key);
@@ -141,7 +163,7 @@ class cache {
event_socket::command($event); event_socket::command($event);
//remove the local files //remove the local files
foreach (glob($_SESSION['cache']['location']['text'] . "/" . $key) as $file) { foreach (glob($this->location . "/" . $key) as $file) {
if (file_exists($file)) { if (file_exists($file)) {
unlink($file); unlink($file);
} }
@@ -159,14 +181,14 @@ class cache {
public function flush() { public function flush() {
//debug information //debug information
if (isset($_SESSION['cache']['syslog']['boolean']) && $_SESSION['cache']['syslog']['boolean'] == "true") { if ($this->syslog === "true") {
openlog("fusionpbx", LOG_PID | LOG_PERROR, LOG_USER); openlog("fusionpbx", LOG_PID | LOG_PERROR, LOG_USER);
syslog(LOG_WARNING, "debug: cache: [flush: all, script: ".$_SERVER['SCRIPT_NAME'].", line: ".__line__."]"); syslog(LOG_WARNING, "debug: cache: [flush: all, script: ".$_SERVER['SCRIPT_NAME'].", line: ".__line__."]");
closelog(); closelog();
} }
//cache method memcache //cache method memcache
if ($_SESSION['cache']['method']['text'] == "memcache") { if ($this->method === "memcache") {
// connect to event socket // connect to event socket
$esl = event_socket::create(); $esl = event_socket::create();
if ($esl === false) { if ($esl === false) {
@@ -188,7 +210,7 @@ class cache {
} }
//cache method file //cache method file
if ($_SESSION['cache']['method']['text'] == "file") { if ($this->method === "file") {
// connect to event socket // connect to event socket
$esl = event_socket::create(); $esl = event_socket::create();
if ($esl === false) { if ($esl === false) {
@@ -204,7 +226,7 @@ class cache {
event_socket::command($event); event_socket::command($event);
//remove the cache //remove the cache
recursive_delete($_SESSION['cache']['location']['text']); recursive_delete($this->location);
//set message //set message
$result = '+OK cache flushed'; $result = '+OK cache flushed';
+15 -1
View File
@@ -894,6 +894,21 @@ if (!class_exists('schema')) {
unset ($sql_update, $sql); unset ($sql_update, $sql);
} }
//refresh each postgresql subscription with its publication
if ($db_type == "pgsql") {
//get the list of postgresql subscriptions
$sql = "select subname from pg_subscription; ";
$pg_subscriptions = $this->database->select($sql, null, 'all');
unset($sql, $parameters);
//refresh each subscription publication
foreach ($pg_subscriptions as $row) {
$sql = "ALTER SUBSCRIPTION ".$row['subname']." REFRESH PUBLICATION;";
$response .= $sql;
$this->database->execute($sql);
}
}
//handle response //handle response
//if ($output == "echo") { //if ($output == "echo") {
// echo $response; // echo $response;
@@ -914,4 +929,3 @@ if (!class_exists('schema')) {
//print_r($result_array); //print_r($result_array);
?> ?>
+1 -1
View File
@@ -71,7 +71,7 @@
$view = new template(); $view = new template();
$view->engine = 'smarty'; $view->engine = 'smarty';
$view->template_dir = $_SERVER['DOCUMENT_ROOT'].PROJECT_PATH.'/themes/'.$_SESSION['domain']['template']['name'].'/'; $view->template_dir = $_SERVER['DOCUMENT_ROOT'].PROJECT_PATH.'/themes/'.$_SESSION['domain']['template']['name'].'/';
$view->cache_dir = $_SESSION['server']['temp']['dir'] ?: sys_get_temp_dir(); $view->cache_dir = sys_get_temp_dir();
$view->init(); $view->init();
//add multi-lingual support //add multi-lingual support
+1 -1
View File
@@ -278,7 +278,7 @@
//set default false //set default false
$result = false; $result = false;
//search for the permission //search for the permission
if (count($_SESSION["groups"]) > 0) { if (isset($_SESSION["groups"]) && count($_SESSION["groups"]) > 0) {
foreach ($_SESSION["groups"] as $row) { foreach ($_SESSION["groups"] as $row) {
if ($row['group_name'] == $group) { if ($row['group_name'] == $group) {
$result = true; $result = true;
@@ -138,7 +138,11 @@
<!-- NAT Traversal --> <!-- NAT Traversal -->
<!-- No, STUN, KeepAlive, UPnP, Auto, VPN --> <!-- No, STUN, KeepAlive, UPnP, Auto, VPN -->
<!-- Pvalue P52 --> <!-- Pvalue P52 -->
{if isset($grandstream_nat_traversal)}
<item name="account.{$row.line_number}.network.natTraversal">{$grandstream_nat_traversal}</item>
{else}
<item name="account.{$row.line_number}.network.natTraversal">Auto</item> <item name="account.{$row.line_number}.network.natTraversal">Auto</item>
{/if}
<!-- Support Rport (RFC 3581) --> <!-- Support Rport (RFC 3581) -->
<!-- Yes, No --> <!-- Yes, No -->
@@ -173,7 +177,7 @@
<!-- Register Expiration (m) --> <!-- Register Expiration (m) -->
<!-- Number: 0 - 64800 --> <!-- Number: 0 - 64800 -->
<!-- Pvalue P32 --> <!-- Pvalue P32 -->
<item name="account.{$row.line_number}.sip.registerExpiration">15</item> <item name="account.{$row.line_number}.sip.registerExpiration">{$row.register_expires}</item>
<!-- Subscribe Expiration (m) --> <!-- Subscribe Expiration (m) -->
<!-- Number: 0 - 64800 --> <!-- Number: 0 - 64800 -->
@@ -784,7 +788,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P1489 --> <!-- Pvalue P1489 -->
<item name="account.{$row.line_number}.ring.match.1.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.1.ringtone">{$grandstream_distinctive_ringtone_1}</item>
<!-- Match Incoming Caller ID. Matching Rule 2 --> <!-- Match Incoming Caller ID. Matching Rule 2 -->
<!-- Pvalue P1490 --> <!-- Pvalue P1490 -->
@@ -792,7 +796,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P1491 --> <!-- Pvalue P1491 -->
<item name="account.{$row.line_number}.ring.match.2.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.2.ringtone">{$grandstream_distinctive_ringtone_2}</item>
<!-- Match Incoming Caller ID. Matching Rule 3 --> <!-- Match Incoming Caller ID. Matching Rule 3 -->
<!-- Pvalue P1492 --> <!-- Pvalue P1492 -->
@@ -800,7 +804,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P1493 --> <!-- Pvalue P1493 -->
<item name="account.{$row.line_number}.ring.match.3.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.3.ringtone">{$grandstream_distinctive_ringtone_3}</item>
<!-- Match Incoming Caller ID. Matching Rule 4 --> <!-- Match Incoming Caller ID. Matching Rule 4 -->
<!-- Pvalue P6716 --> <!-- Pvalue P6716 -->
@@ -808,7 +812,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P6717 --> <!-- Pvalue P6717 -->
<item name="account.{$row.line_number}.ring.match.4.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.4.ringtone">{$grandstream_distinctive_ringtone_4}</item>
<!-- Match Incoming Caller ID. Matching Rule 5 --> <!-- Match Incoming Caller ID. Matching Rule 5 -->
<!-- Pvalue P6718 --> <!-- Pvalue P6718 -->
@@ -816,7 +820,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P6719 --> <!-- Pvalue P6719 -->
<item name="account.{$row.line_number}.ring.match.5.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.5.ringtone">{$grandstream_distinctive_ringtone_5}</item>
<!-- Match Incoming Caller ID. Matching Rule 6 --> <!-- Match Incoming Caller ID. Matching Rule 6 -->
<!-- Pvalue P6720 --> <!-- Pvalue P6720 -->
@@ -824,7 +828,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P6721 --> <!-- Pvalue P6721 -->
<item name="account.{$row.line_number}.ring.match.6.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.6.ringtone">{$grandstream_distinctive_ringtone_6}</item>
<!-- Match Incoming Caller ID. Matching Rule 7 --> <!-- Match Incoming Caller ID. Matching Rule 7 -->
<!-- Pvalue P26064 --> <!-- Pvalue P26064 -->
@@ -832,7 +836,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P26065 --> <!-- Pvalue P26065 -->
<item name="account.{$row.line_number}.ring.match.7.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.7.ringtone">{$grandstream_distinctive_ringtone_7}</item>
<!-- Match Incoming Caller ID. Matching Rule 8 --> <!-- Match Incoming Caller ID. Matching Rule 8 -->
<!-- Pvalue P26066 --> <!-- Pvalue P26066 -->
@@ -840,7 +844,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P26067 --> <!-- Pvalue P26067 -->
<item name="account.{$row.line_number}.ring.match.8.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.8.ringtone">{$grandstream_distinctive_ringtone_8}</item>
<!-- Match Incoming Caller ID. Matching Rule 9 --> <!-- Match Incoming Caller ID. Matching Rule 9 -->
<!-- Pvalue P26068 --> <!-- Pvalue P26068 -->
@@ -848,7 +852,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P26069 --> <!-- Pvalue P26069 -->
<item name="account.{$row.line_number}.ring.match.9.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.9.ringtone">{$grandstream_distinctive_ringtone_9}</item>
<!-- Match Incoming Caller ID. Matching Rule 10 --> <!-- Match Incoming Caller ID. Matching Rule 10 -->
<!-- Pvalue P26096 --> <!-- Pvalue P26096 -->
@@ -856,7 +860,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P26097 --> <!-- Pvalue P26097 -->
<item name="account.{$row.line_number}.ring.match.10.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.10.ringtone">{$grandstream_distinctive_ringtone_10}</item>
<!-- Ring Timeout --> <!-- Ring Timeout -->
<!-- Number: 10 - 300 --> <!-- Number: 10 - 300 -->
@@ -1201,13 +1205,13 @@
<!-- # Enable Manual VLAN Configuration. Yes or No. --> <!-- # Enable Manual VLAN Configuration. Yes or No. -->
<!-- # Mandatory --> <!-- # Mandatory -->
<!-- Pvalue P22174 --> <!-- Pvalue P22174 -->
<item name="network.port.eth.1.vlan.enable">Yes</item> <item name="network.port.eth.1.vlan.enable">{if isset($grandstream_lan_port_vlan)}Yes{else}No{/if}</item>
<!-- # Layer 2 QoS. 802.1Q/VLAN Tag (VLAN classification for RTP). Default is 0 --> <!-- # Layer 2 QoS. 802.1Q/VLAN Tag (VLAN classification for RTP). Default is 0 -->
<!-- Layer 2 QoS 802.1Q/VLAN Tag (Ethernet) --> <!-- Layer 2 QoS 802.1Q/VLAN Tag (Ethernet) -->
<!-- Number: 0 - 4095 --> <!-- Number: 0 - 4095 -->
<!-- Pvalue P51 --> <!-- Pvalue P51 -->
<item name="network.port.eth.1.vlan.tag">0</item> <item name="network.port.eth.1.vlan.tag">{$grandstream_lan_port_vlan}</item>
<!-- 802.1p Priority Value (Ethernet) --> <!-- 802.1p Priority Value (Ethernet) -->
<!-- Number: 0 - 7 --> <!-- Number: 0 - 7 -->
@@ -1217,11 +1221,15 @@
<!-- PC Port Mode --> <!-- PC Port Mode -->
<!-- Enabled, Disabled, Mirrored --> <!-- Enabled, Disabled, Mirrored -->
<!-- Pvalue P1348 --> <!-- Pvalue P1348 -->
<item name="network.port.pc.mode">Enabled</item> {if isset($grandstream_pc_mode)}
<item name="network.port.pc.mode">{if isset($grandstream_pc_mode)}{$grandstream_pc_mode}{/if}</item>
{else}
<item name="network.port.pc.mode">{if isset($grandstream_pc_port_vlan)}Enabled{else}Disabled{/if}</item>
{/if}
<!-- PC Port VLAN Tag --> <!-- PC Port VLAN Tag -->
<!-- Pvalue P229 --> <!-- Pvalue P229 -->
<item name="network.port.pc.vlan.tag">0</item> <item name="network.port.pc.vlan.tag">{$grandstream_pc_port_vlan}</item>
<!-- PC Port Priority Value --> <!-- PC Port Priority Value -->
<!-- Pvalue P230 --> <!-- Pvalue P230 -->
@@ -2498,7 +2506,11 @@
<!-- STUN Server --> <!-- STUN Server -->
<!-- Pvalue P76 --> <!-- Pvalue P76 -->
{if isset($grandstream_stun_server) }
<item name="network.stunServer">{$grandstream_stun_server}</item>
{else}
<item name="network.stunServer"></item> <item name="network.stunServer"></item>
{/if}
<!-- # Delay Registration. Default is 0. --> <!-- # Delay Registration. Default is 0. -->
<!-- # Number: 0 - 90 --> <!-- # Number: 0 - 90 -->
@@ -3674,15 +3686,27 @@
<!-- # HEADSET Key Mode. DefaultMode, ToggleHeadsetOrSpeaker. --> <!-- # HEADSET Key Mode. DefaultMode, ToggleHeadsetOrSpeaker. -->
<!-- Pvalue P1312 --> <!-- Pvalue P1312 -->
{if isset($grandstream_headset_key_mode)}
<item name="audio.headset.keyMode">{$grandstream_headset_key_mode}</item>
{else}
<item name="audio.headset.keyMode">DefaultMode</item> <item name="audio.headset.keyMode">DefaultMode</item>
{/if}
<!-- # Headset Type. Normal, PlantronicsEHS. --> <!-- # Headset Type. Normal, PlantronicsEHS. -->
<!-- Pvalue P1487 --> <!-- Pvalue P1487 -->
{if isset($grandstream_headset_ringtone)}
<item name="audio.headset.ehs.ringtone">{$grandstream_headset_ringtone}</item>
{else}
<item name="audio.headset.ehs.ringtone">Normal</item> <item name="audio.headset.ehs.ringtone">Normal</item>
{/if}
<!-- # EHS Headset Ringtone. Normal, PlantronicsEHS. --> <!-- # EHS Headset Ringtone. Normal, PlantronicsEHS. -->
<!-- Pvalue P6779 --> <!-- Pvalue P6779 -->
{if isset($grandstream_headset_type)}
<item name="audio.headset.type">{$grandstream_headset_type}</item>
{else}
<item name="audio.headset.type">Normal</item> <item name="audio.headset.type">Normal</item>
{/if}
<!-- # Always Ring Speaker. --> <!-- # Always Ring Speaker. -->
<!-- No - 0, Yes,both - 1, Yes,speaker only - 2 --> <!-- No - 0, Yes,both - 1, Yes,speaker only - 2 -->
@@ -3701,11 +3725,19 @@
<!-- # Headset TX gain(dB). 1 - -6, 0 - 0, 2 - +6. Default is 0 --> <!-- # Headset TX gain(dB). 1 - -6, 0 - 0, 2 - +6. Default is 0 -->
<!-- Pvalue P1301 --> <!-- Pvalue P1301 -->
<item name="audio.headset.txGain">0</item> {if isset($grandstream_headset_tx_gain)}
<item name="audio.handset.txGain">{$grandstream_headset_tx_gain}</item>
{else}
<item name="audio.handset.txGain">0</item>
{/if}
<!-- # Headset RX gain(dB). 1 - -6, 0 - 0, 2 - +6. Default is 0 --> <!-- # Headset RX gain(dB). 1 - -6, 0 - 0, 2 - +6. Default is 0 -->
<!-- Pvalue P1302 --> <!-- Pvalue P1302 -->
{if isset($grandstream_headset_rx_gain)}
<item name="audio.headset.rxGain">{$grandstream_headset_rx_gain}</item>
{else}
<item name="audio.headset.rxGain">0</item> <item name="audio.headset.rxGain">0</item>
{/if}
<!-- # Handset Noise Shield 2.0. --> <!-- # Handset Noise Shield 2.0. -->
<!-- No - Disable, HighShielding - 1, SoftShielding - 2 --> <!-- No - Disable, HighShielding - 1, SoftShielding - 2 -->
@@ -3993,7 +4025,11 @@
<!-- # Screensaver Settings --> <!-- # Screensaver Settings -->
<!-- # Screensaver. No, Yes, OnIfNoVPKIsActive. --> <!-- # Screensaver. No, Yes, OnIfNoVPKIsActive. -->
<!-- Pvalue P2918 --> <!-- Pvalue P2918 -->
{if isset($grandstream_screensaver_enable)}
<item name="lcd.screensaver.enable">{$grandstream_screensaver_enable}</item>
{else}
<item name="lcd.screensaver.enable">OnIfNoVPKIsActive</item> <item name="lcd.screensaver.enable">OnIfNoVPKIsActive</item>
{/if}
<!-- # Use Programmable Keys in Screensaver. 0 - No, 1 - Yes, 2 - LED only --> <!-- # Use Programmable Keys in Screensaver. 0 - No, 1 - Yes, 2 - LED only -->
<!-- Pvalue P22363 --> <!-- Pvalue P22363 -->
@@ -4001,7 +4037,7 @@
<!-- # Screensaver Source. Default, USB, Download. --> <!-- # Screensaver Source. Default, USB, Download. -->
<!-- Pvalue P6759 --> <!-- Pvalue P6759 -->
<item name="lcd.screensaver.source"></item> <item name="lcd.screensaver.source">{$grandstream_screensaver_source}</item>
<!-- # Show Date and Time. Yes or No --> <!-- # Show Date and Time. Yes or No -->
<!-- Pvalue P8441 --> <!-- Pvalue P8441 -->
@@ -138,7 +138,11 @@
<!-- NAT Traversal --> <!-- NAT Traversal -->
<!-- No, STUN, KeepAlive, UPnP, Auto, VPN --> <!-- No, STUN, KeepAlive, UPnP, Auto, VPN -->
<!-- Pvalue P52 --> <!-- Pvalue P52 -->
{if isset($grandstream_nat_traversal)}
<item name="account.{$row.line_number}.network.natTraversal">{$grandstream_nat_traversal}</item>
{else}
<item name="account.{$row.line_number}.network.natTraversal">Auto</item> <item name="account.{$row.line_number}.network.natTraversal">Auto</item>
{/if}
<!-- Support Rport (RFC 3581) --> <!-- Support Rport (RFC 3581) -->
<!-- Yes, No --> <!-- Yes, No -->
@@ -173,7 +177,7 @@
<!-- Register Expiration (m) --> <!-- Register Expiration (m) -->
<!-- Number: 0 - 64800 --> <!-- Number: 0 - 64800 -->
<!-- Pvalue P32 --> <!-- Pvalue P32 -->
<item name="account.{$row.line_number}.sip.registerExpiration">15</item> <item name="account.{$row.line_number}.sip.registerExpiration">{$row.register_expires}</item>
<!-- Subscribe Expiration (m) --> <!-- Subscribe Expiration (m) -->
<!-- Number: 0 - 64800 --> <!-- Number: 0 - 64800 -->
@@ -784,7 +788,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P1489 --> <!-- Pvalue P1489 -->
<item name="account.{$row.line_number}.ring.match.1.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.1.ringtone">{$grandstream_distinctive_ringtone_1}</item>
<!-- Match Incoming Caller ID. Matching Rule 2 --> <!-- Match Incoming Caller ID. Matching Rule 2 -->
<!-- Pvalue P1490 --> <!-- Pvalue P1490 -->
@@ -792,7 +796,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P1491 --> <!-- Pvalue P1491 -->
<item name="account.{$row.line_number}.ring.match.2.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.2.ringtone">{$grandstream_distinctive_ringtone_2}</item>
<!-- Match Incoming Caller ID. Matching Rule 3 --> <!-- Match Incoming Caller ID. Matching Rule 3 -->
<!-- Pvalue P1492 --> <!-- Pvalue P1492 -->
@@ -800,7 +804,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P1493 --> <!-- Pvalue P1493 -->
<item name="account.{$row.line_number}.ring.match.3.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.3.ringtone">{$grandstream_distinctive_ringtone_3}</item>
<!-- Match Incoming Caller ID. Matching Rule 4 --> <!-- Match Incoming Caller ID. Matching Rule 4 -->
<!-- Pvalue P6716 --> <!-- Pvalue P6716 -->
@@ -808,7 +812,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P6717 --> <!-- Pvalue P6717 -->
<item name="account.{$row.line_number}.ring.match.4.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.4.ringtone">{$grandstream_distinctive_ringtone_4}</item>
<!-- Match Incoming Caller ID. Matching Rule 5 --> <!-- Match Incoming Caller ID. Matching Rule 5 -->
<!-- Pvalue P6718 --> <!-- Pvalue P6718 -->
@@ -816,7 +820,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P6719 --> <!-- Pvalue P6719 -->
<item name="account.{$row.line_number}.ring.match.5.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.5.ringtone">{$grandstream_distinctive_ringtone_5}</item>
<!-- Match Incoming Caller ID. Matching Rule 6 --> <!-- Match Incoming Caller ID. Matching Rule 6 -->
<!-- Pvalue P6720 --> <!-- Pvalue P6720 -->
@@ -824,7 +828,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P6721 --> <!-- Pvalue P6721 -->
<item name="account.{$row.line_number}.ring.match.6.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.6.ringtone">{$grandstream_distinctive_ringtone_6}</item>
<!-- Match Incoming Caller ID. Matching Rule 7 --> <!-- Match Incoming Caller ID. Matching Rule 7 -->
<!-- Pvalue P26064 --> <!-- Pvalue P26064 -->
@@ -832,7 +836,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P26065 --> <!-- Pvalue P26065 -->
<item name="account.{$row.line_number}.ring.match.7.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.7.ringtone">{$grandstream_distinctive_ringtone_7}</item>
<!-- Match Incoming Caller ID. Matching Rule 8 --> <!-- Match Incoming Caller ID. Matching Rule 8 -->
<!-- Pvalue P26066 --> <!-- Pvalue P26066 -->
@@ -840,7 +844,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P26067 --> <!-- Pvalue P26067 -->
<item name="account.{$row.line_number}.ring.match.8.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.8.ringtone">{$grandstream_distinctive_ringtone_8}</item>
<!-- Match Incoming Caller ID. Matching Rule 9 --> <!-- Match Incoming Caller ID. Matching Rule 9 -->
<!-- Pvalue P26068 --> <!-- Pvalue P26068 -->
@@ -848,7 +852,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P26069 --> <!-- Pvalue P26069 -->
<item name="account.{$row.line_number}.ring.match.9.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.9.ringtone">{$grandstream_distinctive_ringtone_9}</item>
<!-- Match Incoming Caller ID. Matching Rule 10 --> <!-- Match Incoming Caller ID. Matching Rule 10 -->
<!-- Pvalue P26096 --> <!-- Pvalue P26096 -->
@@ -856,7 +860,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P26097 --> <!-- Pvalue P26097 -->
<item name="account.{$row.line_number}.ring.match.10.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.10.ringtone">{$grandstream_distinctive_ringtone_10}</item>
<!-- Ring Timeout --> <!-- Ring Timeout -->
<!-- Number: 10 - 300 --> <!-- Number: 10 - 300 -->
@@ -903,21 +907,21 @@
<!-- DND Call Feature On --> <!-- DND Call Feature On -->
<!-- Pvalue P2344 --> <!-- Pvalue P2344 -->
<item name="account.{$row.line_number}.featureCodes.dndOn"></item> <item name="account.{$row.line_number}.featureCodes.dndOn">*78</item>
<!-- DND Call Feature Off --> <!-- DND Call Feature Off -->
<!-- Pvalue P2345 --> <!-- Pvalue P2345 -->
<item name="account.{$row.line_number}.featureCodes.dndOff"></item> <item name="account.{$row.line_number}.featureCodes.dndOff">*79</item>
<!-- #Call Forward Unconditionally (All) - On --> <!-- #Call Forward Unconditionally (All) - On -->
<!-- # String --> <!-- # String -->
<!-- Pvalue P26013 --> <!-- Pvalue P26013 -->
<item name="account.{$row.line_number}.featureCodes.callForwardUnconditionallyOn"></item> <item name="account.{$row.line_number}.featureCodes.callForwardUnconditionallyOn">*72</item>
<!-- #Call Forward Unconditionally (All) - Off --> <!-- #Call Forward Unconditionally (All) - Off -->
<!-- # String --> <!-- # String -->
<!-- Pvalue P26014 --> <!-- Pvalue P26014 -->
<item name="account.{$row.line_number}.featureCodes.callForwardUnconditionallyOff"></item> <item name="account.{$row.line_number}.featureCodes.callForwardUnconditionallyOff">*73</item>
<!-- #Call Forward Unconditionally (All) - Target --> <!-- #Call Forward Unconditionally (All) - Target -->
<!-- # String --> <!-- # String -->
@@ -1201,13 +1205,13 @@
<!-- # Enable Manual VLAN Configuration. Yes or No. --> <!-- # Enable Manual VLAN Configuration. Yes or No. -->
<!-- # Mandatory --> <!-- # Mandatory -->
<!-- Pvalue P22174 --> <!-- Pvalue P22174 -->
<item name="network.port.eth.1.vlan.enable">Yes</item> <item name="network.port.eth.1.vlan.enable">{if isset($grandstream_lan_port_vlan)}Yes{else}No{/if}</item>
<!-- # Layer 2 QoS. 802.1Q/VLAN Tag (VLAN classification for RTP). Default is 0 --> <!-- # Layer 2 QoS. 802.1Q/VLAN Tag (VLAN classification for RTP). Default is 0 -->
<!-- Layer 2 QoS 802.1Q/VLAN Tag (Ethernet) --> <!-- Layer 2 QoS 802.1Q/VLAN Tag (Ethernet) -->
<!-- Number: 0 - 4095 --> <!-- Number: 0 - 4095 -->
<!-- Pvalue P51 --> <!-- Pvalue P51 -->
<item name="network.port.eth.1.vlan.tag">0</item> <item name="network.port.eth.1.vlan.tag">{$grandstream_lan_port_vlan}</item>
<!-- 802.1p Priority Value (Ethernet) --> <!-- 802.1p Priority Value (Ethernet) -->
<!-- Number: 0 - 7 --> <!-- Number: 0 - 7 -->
@@ -1217,11 +1221,15 @@
<!-- PC Port Mode --> <!-- PC Port Mode -->
<!-- Enabled, Disabled, Mirrored --> <!-- Enabled, Disabled, Mirrored -->
<!-- Pvalue P1348 --> <!-- Pvalue P1348 -->
<item name="network.port.pc.mode">Enabled</item> {if isset($grandstream_pc_mode)}
<item name="network.port.pc.mode">{if isset($grandstream_pc_mode)}{$grandstream_pc_mode}{/if}</item>
{else}
<item name="network.port.pc.mode">{if isset($grandstream_pc_port_vlan)}Enabled{else}Disabled{/if}</item>
{/if}
<!-- PC Port VLAN Tag --> <!-- PC Port VLAN Tag -->
<!-- Pvalue P229 --> <!-- Pvalue P229 -->
<item name="network.port.pc.vlan.tag">0</item> <item name="network.port.pc.vlan.tag">{$grandstream_pc_port_vlan}</item>
<!-- PC Port Priority Value --> <!-- PC Port Priority Value -->
<!-- Pvalue P230 --> <!-- Pvalue P230 -->
@@ -2498,7 +2506,11 @@
<!-- STUN Server --> <!-- STUN Server -->
<!-- Pvalue P76 --> <!-- Pvalue P76 -->
{if isset($grandstream_stun_server) }
<item name="network.stunServer">{$grandstream_stun_server}</item>
{else}
<item name="network.stunServer"></item> <item name="network.stunServer"></item>
{/if}
<!-- # Delay Registration. Default is 0. --> <!-- # Delay Registration. Default is 0. -->
<!-- # Number: 0 - 90 --> <!-- # Number: 0 - 90 -->
@@ -3674,15 +3686,27 @@
<!-- # HEADSET Key Mode. DefaultMode, ToggleHeadsetOrSpeaker. --> <!-- # HEADSET Key Mode. DefaultMode, ToggleHeadsetOrSpeaker. -->
<!-- Pvalue P1312 --> <!-- Pvalue P1312 -->
{if isset($grandstream_headset_key_mode)}
<item name="audio.headset.keyMode">{$grandstream_headset_key_mode}</item>
{else}
<item name="audio.headset.keyMode">DefaultMode</item> <item name="audio.headset.keyMode">DefaultMode</item>
{/if}
<!-- # Headset Type. Normal, PlantronicsEHS. --> <!-- # Headset Type. Normal, PlantronicsEHS. -->
<!-- Pvalue P1487 --> <!-- Pvalue P1487 -->
{if isset($grandstream_headset_ringtone)}
<item name="audio.headset.ehs.ringtone">{$grandstream_headset_ringtone}</item>
{else}
<item name="audio.headset.ehs.ringtone">Normal</item> <item name="audio.headset.ehs.ringtone">Normal</item>
{/if}
<!-- # EHS Headset Ringtone. Normal, PlantronicsEHS. --> <!-- # EHS Headset Ringtone. Normal, PlantronicsEHS. -->
<!-- Pvalue P6779 --> <!-- Pvalue P6779 -->
{if isset($grandstream_headset_type)}
<item name="audio.headset.type">{$grandstream_headset_type}</item>
{else}
<item name="audio.headset.type">Normal</item> <item name="audio.headset.type">Normal</item>
{/if}
<!-- # Always Ring Speaker. --> <!-- # Always Ring Speaker. -->
<!-- No - 0, Yes,both - 1, Yes,speaker only - 2 --> <!-- No - 0, Yes,both - 1, Yes,speaker only - 2 -->
@@ -3701,11 +3725,19 @@
<!-- # Headset TX gain(dB). 1 - -6, 0 - 0, 2 - +6. Default is 0 --> <!-- # Headset TX gain(dB). 1 - -6, 0 - 0, 2 - +6. Default is 0 -->
<!-- Pvalue P1301 --> <!-- Pvalue P1301 -->
<item name="audio.headset.txGain">0</item> {if isset($grandstream_headset_tx_gain)}
<item name="audio.handset.txGain">{$grandstream_headset_tx_gain}</item>
{else}
<item name="audio.handset.txGain">0</item>
{/if}
<!-- # Headset RX gain(dB). 1 - -6, 0 - 0, 2 - +6. Default is 0 --> <!-- # Headset RX gain(dB). 1 - -6, 0 - 0, 2 - +6. Default is 0 -->
<!-- Pvalue P1302 --> <!-- Pvalue P1302 -->
{if isset($grandstream_headset_rx_gain)}
<item name="audio.headset.rxGain">{$grandstream_headset_rx_gain}</item>
{else}
<item name="audio.headset.rxGain">0</item> <item name="audio.headset.rxGain">0</item>
{/if}
<!-- # Handset Noise Shield 2.0. --> <!-- # Handset Noise Shield 2.0. -->
<!-- No - Disable, HighShielding - 1, SoftShielding - 2 --> <!-- No - Disable, HighShielding - 1, SoftShielding - 2 -->
@@ -3993,7 +4025,11 @@
<!-- # Screensaver Settings --> <!-- # Screensaver Settings -->
<!-- # Screensaver. No, Yes, OnIfNoVPKIsActive. --> <!-- # Screensaver. No, Yes, OnIfNoVPKIsActive. -->
<!-- Pvalue P2918 --> <!-- Pvalue P2918 -->
{if isset($grandstream_screensaver_enable)}
<item name="lcd.screensaver.enable">{$grandstream_screensaver_enable}</item>
{else}
<item name="lcd.screensaver.enable">OnIfNoVPKIsActive</item> <item name="lcd.screensaver.enable">OnIfNoVPKIsActive</item>
{/if}
<!-- # Use Programmable Keys in Screensaver. 0 - No, 1 - Yes, 2 - LED only --> <!-- # Use Programmable Keys in Screensaver. 0 - No, 1 - Yes, 2 - LED only -->
<!-- Pvalue P22363 --> <!-- Pvalue P22363 -->
@@ -4001,7 +4037,7 @@
<!-- # Screensaver Source. Default, USB, Download. --> <!-- # Screensaver Source. Default, USB, Download. -->
<!-- Pvalue P6759 --> <!-- Pvalue P6759 -->
<item name="lcd.screensaver.source"></item> <item name="lcd.screensaver.source">{$grandstream_screensaver_source}</item>
<!-- # Show Date and Time. Yes or No --> <!-- # Show Date and Time. Yes or No -->
<!-- Pvalue P8441 --> <!-- Pvalue P8441 -->
@@ -138,7 +138,11 @@
<!-- NAT Traversal --> <!-- NAT Traversal -->
<!-- No, STUN, KeepAlive, UPnP, Auto, VPN --> <!-- No, STUN, KeepAlive, UPnP, Auto, VPN -->
<!-- Pvalue P52 --> <!-- Pvalue P52 -->
{if isset($grandstream_nat_traversal)}
<item name="account.{$row.line_number}.network.natTraversal">{$grandstream_nat_traversal}</item>
{else}
<item name="account.{$row.line_number}.network.natTraversal">Auto</item> <item name="account.{$row.line_number}.network.natTraversal">Auto</item>
{/if}
<!-- Support Rport (RFC 3581) --> <!-- Support Rport (RFC 3581) -->
<!-- Yes, No --> <!-- Yes, No -->
@@ -173,7 +177,7 @@
<!-- Register Expiration (m) --> <!-- Register Expiration (m) -->
<!-- Number: 0 - 64800 --> <!-- Number: 0 - 64800 -->
<!-- Pvalue P32 --> <!-- Pvalue P32 -->
<item name="account.{$row.line_number}.sip.registerExpiration">15</item> <item name="account.{$row.line_number}.sip.registerExpiration">{$row.register_expires}</item>
<!-- Subscribe Expiration (m) --> <!-- Subscribe Expiration (m) -->
<!-- Number: 0 - 64800 --> <!-- Number: 0 - 64800 -->
@@ -784,7 +788,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P1489 --> <!-- Pvalue P1489 -->
<item name="account.{$row.line_number}.ring.match.1.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.1.ringtone">{$grandstream_distinctive_ringtone_1}</item>
<!-- Match Incoming Caller ID. Matching Rule 2 --> <!-- Match Incoming Caller ID. Matching Rule 2 -->
<!-- Pvalue P1490 --> <!-- Pvalue P1490 -->
@@ -792,7 +796,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P1491 --> <!-- Pvalue P1491 -->
<item name="account.{$row.line_number}.ring.match.2.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.2.ringtone">{$grandstream_distinctive_ringtone_2}</item>
<!-- Match Incoming Caller ID. Matching Rule 3 --> <!-- Match Incoming Caller ID. Matching Rule 3 -->
<!-- Pvalue P1492 --> <!-- Pvalue P1492 -->
@@ -800,7 +804,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P1493 --> <!-- Pvalue P1493 -->
<item name="account.{$row.line_number}.ring.match.3.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.3.ringtone">{$grandstream_distinctive_ringtone_3}</item>
<!-- Match Incoming Caller ID. Matching Rule 4 --> <!-- Match Incoming Caller ID. Matching Rule 4 -->
<!-- Pvalue P6716 --> <!-- Pvalue P6716 -->
@@ -808,7 +812,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P6717 --> <!-- Pvalue P6717 -->
<item name="account.{$row.line_number}.ring.match.4.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.4.ringtone">{$grandstream_distinctive_ringtone_4}</item>
<!-- Match Incoming Caller ID. Matching Rule 5 --> <!-- Match Incoming Caller ID. Matching Rule 5 -->
<!-- Pvalue P6718 --> <!-- Pvalue P6718 -->
@@ -816,7 +820,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P6719 --> <!-- Pvalue P6719 -->
<item name="account.{$row.line_number}.ring.match.5.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.5.ringtone">{$grandstream_distinctive_ringtone_5}</item>
<!-- Match Incoming Caller ID. Matching Rule 6 --> <!-- Match Incoming Caller ID. Matching Rule 6 -->
<!-- Pvalue P6720 --> <!-- Pvalue P6720 -->
@@ -824,7 +828,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P6721 --> <!-- Pvalue P6721 -->
<item name="account.{$row.line_number}.ring.match.6.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.6.ringtone">{$grandstream_distinctive_ringtone_6}</item>
<!-- Match Incoming Caller ID. Matching Rule 7 --> <!-- Match Incoming Caller ID. Matching Rule 7 -->
<!-- Pvalue P26064 --> <!-- Pvalue P26064 -->
@@ -832,7 +836,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P26065 --> <!-- Pvalue P26065 -->
<item name="account.{$row.line_number}.ring.match.7.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.7.ringtone">{$grandstream_distinctive_ringtone_7}</item>
<!-- Match Incoming Caller ID. Matching Rule 8 --> <!-- Match Incoming Caller ID. Matching Rule 8 -->
<!-- Pvalue P26066 --> <!-- Pvalue P26066 -->
@@ -840,7 +844,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P26067 --> <!-- Pvalue P26067 -->
<item name="account.{$row.line_number}.ring.match.8.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.8.ringtone">{$grandstream_distinctive_ringtone_8}</item>
<!-- Match Incoming Caller ID. Matching Rule 9 --> <!-- Match Incoming Caller ID. Matching Rule 9 -->
<!-- Pvalue P26068 --> <!-- Pvalue P26068 -->
@@ -848,7 +852,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P26069 --> <!-- Pvalue P26069 -->
<item name="account.{$row.line_number}.ring.match.9.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.9.ringtone">{$grandstream_distinctive_ringtone_9}</item>
<!-- Match Incoming Caller ID. Matching Rule 10 --> <!-- Match Incoming Caller ID. Matching Rule 10 -->
<!-- Pvalue P26096 --> <!-- Pvalue P26096 -->
@@ -856,7 +860,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P26097 --> <!-- Pvalue P26097 -->
<item name="account.{$row.line_number}.ring.match.10.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.10.ringtone">{$grandstream_distinctive_ringtone_10}</item>
<!-- Ring Timeout --> <!-- Ring Timeout -->
<!-- Number: 10 - 300 --> <!-- Number: 10 - 300 -->
@@ -1201,13 +1205,13 @@
<!-- # Enable Manual VLAN Configuration. Yes or No. --> <!-- # Enable Manual VLAN Configuration. Yes or No. -->
<!-- # Mandatory --> <!-- # Mandatory -->
<!-- Pvalue P22174 --> <!-- Pvalue P22174 -->
<item name="network.port.eth.1.vlan.enable">Yes</item> <item name="network.port.eth.1.vlan.enable">{if isset($grandstream_lan_port_vlan)}Yes{else}No{/if}</item>
<!-- # Layer 2 QoS. 802.1Q/VLAN Tag (VLAN classification for RTP). Default is 0 --> <!-- # Layer 2 QoS. 802.1Q/VLAN Tag (VLAN classification for RTP). Default is 0 -->
<!-- Layer 2 QoS 802.1Q/VLAN Tag (Ethernet) --> <!-- Layer 2 QoS 802.1Q/VLAN Tag (Ethernet) -->
<!-- Number: 0 - 4095 --> <!-- Number: 0 - 4095 -->
<!-- Pvalue P51 --> <!-- Pvalue P51 -->
<item name="network.port.eth.1.vlan.tag">0</item> <item name="network.port.eth.1.vlan.tag">{$grandstream_lan_port_vlan}</item>
<!-- 802.1p Priority Value (Ethernet) --> <!-- 802.1p Priority Value (Ethernet) -->
<!-- Number: 0 - 7 --> <!-- Number: 0 - 7 -->
@@ -1217,11 +1221,15 @@
<!-- PC Port Mode --> <!-- PC Port Mode -->
<!-- Enabled, Disabled, Mirrored --> <!-- Enabled, Disabled, Mirrored -->
<!-- Pvalue P1348 --> <!-- Pvalue P1348 -->
<item name="network.port.pc.mode">Enabled</item> {if isset($grandstream_pc_mode)}
<item name="network.port.pc.mode">{if isset($grandstream_pc_mode)}{$grandstream_pc_mode}{/if}</item>
{else}
<item name="network.port.pc.mode">{if isset($grandstream_pc_port_vlan)}Enabled{else}Disabled{/if}</item>
{/if}
<!-- PC Port VLAN Tag --> <!-- PC Port VLAN Tag -->
<!-- Pvalue P229 --> <!-- Pvalue P229 -->
<item name="network.port.pc.vlan.tag">0</item> <item name="network.port.pc.vlan.tag">{$grandstream_pc_port_vlan}</item>
<!-- PC Port Priority Value --> <!-- PC Port Priority Value -->
<!-- Pvalue P230 --> <!-- Pvalue P230 -->
@@ -2498,7 +2506,11 @@
<!-- STUN Server --> <!-- STUN Server -->
<!-- Pvalue P76 --> <!-- Pvalue P76 -->
{if isset($grandstream_stun_server) }
<item name="network.stunServer">{$grandstream_stun_server}</item>
{else}
<item name="network.stunServer"></item> <item name="network.stunServer"></item>
{/if}
<!-- # Delay Registration. Default is 0. --> <!-- # Delay Registration. Default is 0. -->
<!-- # Number: 0 - 90 --> <!-- # Number: 0 - 90 -->
@@ -3674,15 +3686,27 @@
<!-- # HEADSET Key Mode. DefaultMode, ToggleHeadsetOrSpeaker. --> <!-- # HEADSET Key Mode. DefaultMode, ToggleHeadsetOrSpeaker. -->
<!-- Pvalue P1312 --> <!-- Pvalue P1312 -->
{if isset($grandstream_headset_key_mode)}
<item name="audio.headset.keyMode">{$grandstream_headset_key_mode}</item>
{else}
<item name="audio.headset.keyMode">DefaultMode</item> <item name="audio.headset.keyMode">DefaultMode</item>
{/if}
<!-- # Headset Type. Normal, PlantronicsEHS. --> <!-- # Headset Type. Normal, PlantronicsEHS. -->
<!-- Pvalue P1487 --> <!-- Pvalue P1487 -->
{if isset($grandstream_headset_ringtone)}
<item name="audio.headset.ehs.ringtone">{$grandstream_headset_ringtone}</item>
{else}
<item name="audio.headset.ehs.ringtone">Normal</item> <item name="audio.headset.ehs.ringtone">Normal</item>
{/if}
<!-- # EHS Headset Ringtone. Normal, PlantronicsEHS. --> <!-- # EHS Headset Ringtone. Normal, PlantronicsEHS. -->
<!-- Pvalue P6779 --> <!-- Pvalue P6779 -->
{if isset($grandstream_headset_type)}
<item name="audio.headset.type">{$grandstream_headset_type}</item>
{else}
<item name="audio.headset.type">Normal</item> <item name="audio.headset.type">Normal</item>
{/if}
<!-- # Always Ring Speaker. --> <!-- # Always Ring Speaker. -->
<!-- No - 0, Yes,both - 1, Yes,speaker only - 2 --> <!-- No - 0, Yes,both - 1, Yes,speaker only - 2 -->
@@ -3701,11 +3725,19 @@
<!-- # Headset TX gain(dB). 1 - -6, 0 - 0, 2 - +6. Default is 0 --> <!-- # Headset TX gain(dB). 1 - -6, 0 - 0, 2 - +6. Default is 0 -->
<!-- Pvalue P1301 --> <!-- Pvalue P1301 -->
<item name="audio.headset.txGain">0</item> {if isset($grandstream_headset_tx_gain)}
<item name="audio.handset.txGain">{$grandstream_headset_tx_gain}</item>
{else}
<item name="audio.handset.txGain">0</item>
{/if}
<!-- # Headset RX gain(dB). 1 - -6, 0 - 0, 2 - +6. Default is 0 --> <!-- # Headset RX gain(dB). 1 - -6, 0 - 0, 2 - +6. Default is 0 -->
<!-- Pvalue P1302 --> <!-- Pvalue P1302 -->
{if isset($grandstream_headset_rx_gain)}
<item name="audio.headset.rxGain">{$grandstream_headset_rx_gain}</item>
{else}
<item name="audio.headset.rxGain">0</item> <item name="audio.headset.rxGain">0</item>
{/if}
<!-- # Handset Noise Shield 2.0. --> <!-- # Handset Noise Shield 2.0. -->
<!-- No - Disable, HighShielding - 1, SoftShielding - 2 --> <!-- No - Disable, HighShielding - 1, SoftShielding - 2 -->
@@ -3993,7 +4025,11 @@
<!-- # Screensaver Settings --> <!-- # Screensaver Settings -->
<!-- # Screensaver. No, Yes, OnIfNoVPKIsActive. --> <!-- # Screensaver. No, Yes, OnIfNoVPKIsActive. -->
<!-- Pvalue P2918 --> <!-- Pvalue P2918 -->
{if isset($grandstream_screensaver_enable)}
<item name="lcd.screensaver.enable">{$grandstream_screensaver_enable}</item>
{else}
<item name="lcd.screensaver.enable">OnIfNoVPKIsActive</item> <item name="lcd.screensaver.enable">OnIfNoVPKIsActive</item>
{/if}
<!-- # Use Programmable Keys in Screensaver. 0 - No, 1 - Yes, 2 - LED only --> <!-- # Use Programmable Keys in Screensaver. 0 - No, 1 - Yes, 2 - LED only -->
<!-- Pvalue P22363 --> <!-- Pvalue P22363 -->
@@ -4001,7 +4037,7 @@
<!-- # Screensaver Source. Default, USB, Download. --> <!-- # Screensaver Source. Default, USB, Download. -->
<!-- Pvalue P6759 --> <!-- Pvalue P6759 -->
<item name="lcd.screensaver.source"></item> <item name="lcd.screensaver.source">{$grandstream_screensaver_source}</item>
<!-- # Show Date and Time. Yes or No --> <!-- # Show Date and Time. Yes or No -->
<!-- Pvalue P8441 --> <!-- Pvalue P8441 -->
@@ -138,7 +138,11 @@
<!-- NAT Traversal --> <!-- NAT Traversal -->
<!-- No, STUN, KeepAlive, UPnP, Auto, VPN --> <!-- No, STUN, KeepAlive, UPnP, Auto, VPN -->
<!-- Pvalue P52 --> <!-- Pvalue P52 -->
{if isset($grandstream_nat_traversal)}
<item name="account.{$row.line_number}.network.natTraversal">{$grandstream_nat_traversal}</item>
{else}
<item name="account.{$row.line_number}.network.natTraversal">Auto</item> <item name="account.{$row.line_number}.network.natTraversal">Auto</item>
{/if}
<!-- Support Rport (RFC 3581) --> <!-- Support Rport (RFC 3581) -->
<!-- Yes, No --> <!-- Yes, No -->
@@ -173,7 +177,7 @@
<!-- Register Expiration (m) --> <!-- Register Expiration (m) -->
<!-- Number: 0 - 64800 --> <!-- Number: 0 - 64800 -->
<!-- Pvalue P32 --> <!-- Pvalue P32 -->
<item name="account.{$row.line_number}.sip.registerExpiration">15</item> <item name="account.{$row.line_number}.sip.registerExpiration">{$row.register_expires}</item>
<!-- Subscribe Expiration (m) --> <!-- Subscribe Expiration (m) -->
<!-- Number: 0 - 64800 --> <!-- Number: 0 - 64800 -->
@@ -784,7 +788,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P1489 --> <!-- Pvalue P1489 -->
<item name="account.{$row.line_number}.ring.match.1.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.1.ringtone">{$grandstream_distinctive_ringtone_1}</item>
<!-- Match Incoming Caller ID. Matching Rule 2 --> <!-- Match Incoming Caller ID. Matching Rule 2 -->
<!-- Pvalue P1490 --> <!-- Pvalue P1490 -->
@@ -792,7 +796,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P1491 --> <!-- Pvalue P1491 -->
<item name="account.{$row.line_number}.ring.match.2.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.2.ringtone">{$grandstream_distinctive_ringtone_2}</item>
<!-- Match Incoming Caller ID. Matching Rule 3 --> <!-- Match Incoming Caller ID. Matching Rule 3 -->
<!-- Pvalue P1492 --> <!-- Pvalue P1492 -->
@@ -800,7 +804,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P1493 --> <!-- Pvalue P1493 -->
<item name="account.{$row.line_number}.ring.match.3.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.3.ringtone">{$grandstream_distinctive_ringtone_3}</item>
<!-- Match Incoming Caller ID. Matching Rule 4 --> <!-- Match Incoming Caller ID. Matching Rule 4 -->
<!-- Pvalue P6716 --> <!-- Pvalue P6716 -->
@@ -808,7 +812,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P6717 --> <!-- Pvalue P6717 -->
<item name="account.{$row.line_number}.ring.match.4.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.4.ringtone">{$grandstream_distinctive_ringtone_4}</item>
<!-- Match Incoming Caller ID. Matching Rule 5 --> <!-- Match Incoming Caller ID. Matching Rule 5 -->
<!-- Pvalue P6718 --> <!-- Pvalue P6718 -->
@@ -816,7 +820,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P6719 --> <!-- Pvalue P6719 -->
<item name="account.{$row.line_number}.ring.match.5.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.5.ringtone">{$grandstream_distinctive_ringtone_5}</item>
<!-- Match Incoming Caller ID. Matching Rule 6 --> <!-- Match Incoming Caller ID. Matching Rule 6 -->
<!-- Pvalue P6720 --> <!-- Pvalue P6720 -->
@@ -824,7 +828,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P6721 --> <!-- Pvalue P6721 -->
<item name="account.{$row.line_number}.ring.match.6.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.6.ringtone">{$grandstream_distinctive_ringtone_6}</item>
<!-- Match Incoming Caller ID. Matching Rule 7 --> <!-- Match Incoming Caller ID. Matching Rule 7 -->
<!-- Pvalue P26064 --> <!-- Pvalue P26064 -->
@@ -832,7 +836,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P26065 --> <!-- Pvalue P26065 -->
<item name="account.{$row.line_number}.ring.match.7.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.7.ringtone">{$grandstream_distinctive_ringtone_7}</item>
<!-- Match Incoming Caller ID. Matching Rule 8 --> <!-- Match Incoming Caller ID. Matching Rule 8 -->
<!-- Pvalue P26066 --> <!-- Pvalue P26066 -->
@@ -840,7 +844,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P26067 --> <!-- Pvalue P26067 -->
<item name="account.{$row.line_number}.ring.match.8.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.8.ringtone">{$grandstream_distinctive_ringtone_8}</item>
<!-- Match Incoming Caller ID. Matching Rule 9 --> <!-- Match Incoming Caller ID. Matching Rule 9 -->
<!-- Pvalue P26068 --> <!-- Pvalue P26068 -->
@@ -848,7 +852,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P26069 --> <!-- Pvalue P26069 -->
<item name="account.{$row.line_number}.ring.match.9.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.9.ringtone">{$grandstream_distinctive_ringtone_9}</item>
<!-- Match Incoming Caller ID. Matching Rule 10 --> <!-- Match Incoming Caller ID. Matching Rule 10 -->
<!-- Pvalue P26096 --> <!-- Pvalue P26096 -->
@@ -856,7 +860,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P26097 --> <!-- Pvalue P26097 -->
<item name="account.{$row.line_number}.ring.match.10.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.10.ringtone">{$grandstream_distinctive_ringtone_10}</item>
<!-- Ring Timeout --> <!-- Ring Timeout -->
<!-- Number: 10 - 300 --> <!-- Number: 10 - 300 -->
@@ -1201,13 +1205,13 @@
<!-- # Enable Manual VLAN Configuration. Yes or No. --> <!-- # Enable Manual VLAN Configuration. Yes or No. -->
<!-- # Mandatory --> <!-- # Mandatory -->
<!-- Pvalue P22174 --> <!-- Pvalue P22174 -->
<item name="network.port.eth.1.vlan.enable">Yes</item> <item name="network.port.eth.1.vlan.enable">{if isset($grandstream_lan_port_vlan)}Yes{else}No{/if}</item>
<!-- # Layer 2 QoS. 802.1Q/VLAN Tag (VLAN classification for RTP). Default is 0 --> <!-- # Layer 2 QoS. 802.1Q/VLAN Tag (VLAN classification for RTP). Default is 0 -->
<!-- Layer 2 QoS 802.1Q/VLAN Tag (Ethernet) --> <!-- Layer 2 QoS 802.1Q/VLAN Tag (Ethernet) -->
<!-- Number: 0 - 4095 --> <!-- Number: 0 - 4095 -->
<!-- Pvalue P51 --> <!-- Pvalue P51 -->
<item name="network.port.eth.1.vlan.tag">0</item> <item name="network.port.eth.1.vlan.tag">{$grandstream_lan_port_vlan}</item>
<!-- 802.1p Priority Value (Ethernet) --> <!-- 802.1p Priority Value (Ethernet) -->
<!-- Number: 0 - 7 --> <!-- Number: 0 - 7 -->
@@ -1217,11 +1221,15 @@
<!-- PC Port Mode --> <!-- PC Port Mode -->
<!-- Enabled, Disabled, Mirrored --> <!-- Enabled, Disabled, Mirrored -->
<!-- Pvalue P1348 --> <!-- Pvalue P1348 -->
<item name="network.port.pc.mode">Enabled</item> {if isset($grandstream_pc_mode)}
<item name="network.port.pc.mode">{if isset($grandstream_pc_mode)}{$grandstream_pc_mode}{/if}</item>
{else}
<item name="network.port.pc.mode">{if isset($grandstream_pc_port_vlan)}Enabled{else}Disabled{/if}</item>
{/if}
<!-- PC Port VLAN Tag --> <!-- PC Port VLAN Tag -->
<!-- Pvalue P229 --> <!-- Pvalue P229 -->
<item name="network.port.pc.vlan.tag">0</item> <item name="network.port.pc.vlan.tag">{$grandstream_pc_port_vlan}</item>
<!-- PC Port Priority Value --> <!-- PC Port Priority Value -->
<!-- Pvalue P230 --> <!-- Pvalue P230 -->
@@ -2498,7 +2506,11 @@
<!-- STUN Server --> <!-- STUN Server -->
<!-- Pvalue P76 --> <!-- Pvalue P76 -->
{if isset($grandstream_stun_server) }
<item name="network.stunServer">{$grandstream_stun_server}</item>
{else}
<item name="network.stunServer"></item> <item name="network.stunServer"></item>
{/if}
<!-- # Delay Registration. Default is 0. --> <!-- # Delay Registration. Default is 0. -->
<!-- # Number: 0 - 90 --> <!-- # Number: 0 - 90 -->
@@ -3674,15 +3686,27 @@
<!-- # HEADSET Key Mode. DefaultMode, ToggleHeadsetOrSpeaker. --> <!-- # HEADSET Key Mode. DefaultMode, ToggleHeadsetOrSpeaker. -->
<!-- Pvalue P1312 --> <!-- Pvalue P1312 -->
{if isset($grandstream_headset_key_mode)}
<item name="audio.headset.keyMode">{$grandstream_headset_key_mode}</item>
{else}
<item name="audio.headset.keyMode">DefaultMode</item> <item name="audio.headset.keyMode">DefaultMode</item>
{/if}
<!-- # Headset Type. Normal, PlantronicsEHS. --> <!-- # Headset Type. Normal, PlantronicsEHS. -->
<!-- Pvalue P1487 --> <!-- Pvalue P1487 -->
{if isset($grandstream_headset_ringtone)}
<item name="audio.headset.ehs.ringtone">{$grandstream_headset_ringtone}</item>
{else}
<item name="audio.headset.ehs.ringtone">Normal</item> <item name="audio.headset.ehs.ringtone">Normal</item>
{/if}
<!-- # EHS Headset Ringtone. Normal, PlantronicsEHS. --> <!-- # EHS Headset Ringtone. Normal, PlantronicsEHS. -->
<!-- Pvalue P6779 --> <!-- Pvalue P6779 -->
{if isset($grandstream_headset_type)}
<item name="audio.headset.type">{$grandstream_headset_type}</item>
{else}
<item name="audio.headset.type">Normal</item> <item name="audio.headset.type">Normal</item>
{/if}
<!-- # Always Ring Speaker. --> <!-- # Always Ring Speaker. -->
<!-- No - 0, Yes,both - 1, Yes,speaker only - 2 --> <!-- No - 0, Yes,both - 1, Yes,speaker only - 2 -->
@@ -3701,11 +3725,19 @@
<!-- # Headset TX gain(dB). 1 - -6, 0 - 0, 2 - +6. Default is 0 --> <!-- # Headset TX gain(dB). 1 - -6, 0 - 0, 2 - +6. Default is 0 -->
<!-- Pvalue P1301 --> <!-- Pvalue P1301 -->
<item name="audio.headset.txGain">0</item> {if isset($grandstream_headset_tx_gain)}
<item name="audio.handset.txGain">{$grandstream_headset_tx_gain}</item>
{else}
<item name="audio.handset.txGain">0</item>
{/if}
<!-- # Headset RX gain(dB). 1 - -6, 0 - 0, 2 - +6. Default is 0 --> <!-- # Headset RX gain(dB). 1 - -6, 0 - 0, 2 - +6. Default is 0 -->
<!-- Pvalue P1302 --> <!-- Pvalue P1302 -->
{if isset($grandstream_headset_rx_gain)}
<item name="audio.headset.rxGain">{$grandstream_headset_rx_gain}</item>
{else}
<item name="audio.headset.rxGain">0</item> <item name="audio.headset.rxGain">0</item>
{/if}
<!-- # Handset Noise Shield 2.0. --> <!-- # Handset Noise Shield 2.0. -->
<!-- No - Disable, HighShielding - 1, SoftShielding - 2 --> <!-- No - Disable, HighShielding - 1, SoftShielding - 2 -->
@@ -3993,7 +4025,11 @@
<!-- # Screensaver Settings --> <!-- # Screensaver Settings -->
<!-- # Screensaver. No, Yes, OnIfNoVPKIsActive. --> <!-- # Screensaver. No, Yes, OnIfNoVPKIsActive. -->
<!-- Pvalue P2918 --> <!-- Pvalue P2918 -->
{if isset($grandstream_screensaver_enable)}
<item name="lcd.screensaver.enable">{$grandstream_screensaver_enable}</item>
{else}
<item name="lcd.screensaver.enable">OnIfNoVPKIsActive</item> <item name="lcd.screensaver.enable">OnIfNoVPKIsActive</item>
{/if}
<!-- # Use Programmable Keys in Screensaver. 0 - No, 1 - Yes, 2 - LED only --> <!-- # Use Programmable Keys in Screensaver. 0 - No, 1 - Yes, 2 - LED only -->
<!-- Pvalue P22363 --> <!-- Pvalue P22363 -->
@@ -4001,7 +4037,7 @@
<!-- # Screensaver Source. Default, USB, Download. --> <!-- # Screensaver Source. Default, USB, Download. -->
<!-- Pvalue P6759 --> <!-- Pvalue P6759 -->
<item name="lcd.screensaver.source"></item> <item name="lcd.screensaver.source">{$grandstream_screensaver_source}</item>
<!-- # Show Date and Time. Yes or No --> <!-- # Show Date and Time. Yes or No -->
<!-- Pvalue P8441 --> <!-- Pvalue P8441 -->
@@ -4510,7 +4546,7 @@
<!-- # MulticastListenAddress (25), KeypadLock (26), GDSOpenDoor (27), EventListPresence (28), Provision (29) --> <!-- # MulticastListenAddress (25), KeypadLock (26), GDSOpenDoor (27), EventListPresence (28), Provision (29) -->
<!-- # Phonebook(30), Paging(33) --> <!-- # Phonebook(30), Paging(33) -->
<!-- Pvalue P323 --> <!-- Pvalue P323 -->
<item name="pks.mpk.{$row.device_key_id}.keyMode">{$key_types[$keys.line.$line.device_key_type]}</item> <item name="pks.mpk.{$row.device_key_id}.keyMode">{$key_types[$keys.memory.$line.device_key_type]}</item>
<!-- # Account. Account1, Account2, Account3, Account4 --> <!-- # Account. Account1, Account2, Account3, Account4 -->
<!-- Pvalue P301 --> <!-- Pvalue P301 -->
@@ -4699,7 +4735,7 @@
<!-- # MulticastListenAddress (25), KeypadLock (26), GDSOpenDoor (27), EventListPresence (28), Provision (29) --> <!-- # MulticastListenAddress (25), KeypadLock (26), GDSOpenDoor (27), EventListPresence (28), Provision (29) -->
<!-- # Phonebook(30), Paging(33) --> <!-- # Phonebook(30), Paging(33) -->
<!-- Pvalue P23000 --> <!-- Pvalue P23000 -->
<item name="pks.ext.{$row.device_key_id}.keyMode">{$key_types[$keys.line.$line.device_key_type]}</item> <item name="pks.ext.{$row.device_key_id}.keyMode">{$key_types[$keys.expansion.$line.device_key_type]}</item>
<!-- # Account. Account1, Account2, Account3, Account4, Account5, Account6 --> <!-- # Account. Account1, Account2, Account3, Account4, Account5, Account6 -->
<!-- Pvalue P23001 --> <!-- Pvalue P23001 -->
@@ -138,7 +138,11 @@
<!-- NAT Traversal --> <!-- NAT Traversal -->
<!-- No, STUN, KeepAlive, UPnP, Auto, VPN --> <!-- No, STUN, KeepAlive, UPnP, Auto, VPN -->
<!-- Pvalue P52 --> <!-- Pvalue P52 -->
{if isset($grandstream_nat_traversal)}
<item name="account.{$row.line_number}.network.natTraversal">{$grandstream_nat_traversal}</item>
{else}
<item name="account.{$row.line_number}.network.natTraversal">Auto</item> <item name="account.{$row.line_number}.network.natTraversal">Auto</item>
{/if}
<!-- Support Rport (RFC 3581) --> <!-- Support Rport (RFC 3581) -->
<!-- Yes, No --> <!-- Yes, No -->
@@ -173,7 +177,7 @@
<!-- Register Expiration (m) --> <!-- Register Expiration (m) -->
<!-- Number: 0 - 64800 --> <!-- Number: 0 - 64800 -->
<!-- Pvalue P32 --> <!-- Pvalue P32 -->
<item name="account.{$row.line_number}.sip.registerExpiration">15</item> <item name="account.{$row.line_number}.sip.registerExpiration">{$row.register_expires}</item>
<!-- Subscribe Expiration (m) --> <!-- Subscribe Expiration (m) -->
<!-- Number: 0 - 64800 --> <!-- Number: 0 - 64800 -->
@@ -784,7 +788,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P1489 --> <!-- Pvalue P1489 -->
<item name="account.{$row.line_number}.ring.match.1.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.1.ringtone">{$grandstream_distinctive_ringtone_1}</item>
<!-- Match Incoming Caller ID. Matching Rule 2 --> <!-- Match Incoming Caller ID. Matching Rule 2 -->
<!-- Pvalue P1490 --> <!-- Pvalue P1490 -->
@@ -792,7 +796,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P1491 --> <!-- Pvalue P1491 -->
<item name="account.{$row.line_number}.ring.match.2.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.2.ringtone">{$grandstream_distinctive_ringtone_2}</item>
<!-- Match Incoming Caller ID. Matching Rule 3 --> <!-- Match Incoming Caller ID. Matching Rule 3 -->
<!-- Pvalue P1492 --> <!-- Pvalue P1492 -->
@@ -800,7 +804,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P1493 --> <!-- Pvalue P1493 -->
<item name="account.{$row.line_number}.ring.match.3.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.3.ringtone">{$grandstream_distinctive_ringtone_3}</item>
<!-- Match Incoming Caller ID. Matching Rule 4 --> <!-- Match Incoming Caller ID. Matching Rule 4 -->
<!-- Pvalue P6716 --> <!-- Pvalue P6716 -->
@@ -808,7 +812,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P6717 --> <!-- Pvalue P6717 -->
<item name="account.{$row.line_number}.ring.match.4.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.4.ringtone">{$grandstream_distinctive_ringtone_4}</item>
<!-- Match Incoming Caller ID. Matching Rule 5 --> <!-- Match Incoming Caller ID. Matching Rule 5 -->
<!-- Pvalue P6718 --> <!-- Pvalue P6718 -->
@@ -816,7 +820,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P6719 --> <!-- Pvalue P6719 -->
<item name="account.{$row.line_number}.ring.match.5.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.5.ringtone">{$grandstream_distinctive_ringtone_5}</item>
<!-- Match Incoming Caller ID. Matching Rule 6 --> <!-- Match Incoming Caller ID. Matching Rule 6 -->
<!-- Pvalue P6720 --> <!-- Pvalue P6720 -->
@@ -824,7 +828,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P6721 --> <!-- Pvalue P6721 -->
<item name="account.{$row.line_number}.ring.match.6.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.6.ringtone">{$grandstream_distinctive_ringtone_6}</item>
<!-- Match Incoming Caller ID. Matching Rule 7 --> <!-- Match Incoming Caller ID. Matching Rule 7 -->
<!-- Pvalue P26064 --> <!-- Pvalue P26064 -->
@@ -832,7 +836,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P26065 --> <!-- Pvalue P26065 -->
<item name="account.{$row.line_number}.ring.match.7.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.7.ringtone">{$grandstream_distinctive_ringtone_7}</item>
<!-- Match Incoming Caller ID. Matching Rule 8 --> <!-- Match Incoming Caller ID. Matching Rule 8 -->
<!-- Pvalue P26066 --> <!-- Pvalue P26066 -->
@@ -840,7 +844,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P26067 --> <!-- Pvalue P26067 -->
<item name="account.{$row.line_number}.ring.match.8.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.8.ringtone">{$grandstream_distinctive_ringtone_8}</item>
<!-- Match Incoming Caller ID. Matching Rule 9 --> <!-- Match Incoming Caller ID. Matching Rule 9 -->
<!-- Pvalue P26068 --> <!-- Pvalue P26068 -->
@@ -848,7 +852,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P26069 --> <!-- Pvalue P26069 -->
<item name="account.{$row.line_number}.ring.match.9.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.9.ringtone">{$grandstream_distinctive_ringtone_9}</item>
<!-- Match Incoming Caller ID. Matching Rule 10 --> <!-- Match Incoming Caller ID. Matching Rule 10 -->
<!-- Pvalue P26096 --> <!-- Pvalue P26096 -->
@@ -856,7 +860,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P26097 --> <!-- Pvalue P26097 -->
<item name="account.{$row.line_number}.ring.match.10.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.10.ringtone">{$grandstream_distinctive_ringtone_10}</item>
<!-- Ring Timeout --> <!-- Ring Timeout -->
<!-- Number: 10 - 300 --> <!-- Number: 10 - 300 -->
@@ -1201,13 +1205,13 @@
<!-- # Enable Manual VLAN Configuration. Yes or No. --> <!-- # Enable Manual VLAN Configuration. Yes or No. -->
<!-- # Mandatory --> <!-- # Mandatory -->
<!-- Pvalue P22174 --> <!-- Pvalue P22174 -->
<item name="network.port.eth.1.vlan.enable">Yes</item> <item name="network.port.eth.1.vlan.enable">{if isset($grandstream_lan_port_vlan)}Yes{else}No{/if}</item>
<!-- # Layer 2 QoS. 802.1Q/VLAN Tag (VLAN classification for RTP). Default is 0 --> <!-- # Layer 2 QoS. 802.1Q/VLAN Tag (VLAN classification for RTP). Default is 0 -->
<!-- Layer 2 QoS 802.1Q/VLAN Tag (Ethernet) --> <!-- Layer 2 QoS 802.1Q/VLAN Tag (Ethernet) -->
<!-- Number: 0 - 4095 --> <!-- Number: 0 - 4095 -->
<!-- Pvalue P51 --> <!-- Pvalue P51 -->
<item name="network.port.eth.1.vlan.tag">0</item> <item name="network.port.eth.1.vlan.tag">{$grandstream_lan_port_vlan}</item>
<!-- 802.1p Priority Value (Ethernet) --> <!-- 802.1p Priority Value (Ethernet) -->
<!-- Number: 0 - 7 --> <!-- Number: 0 - 7 -->
@@ -1217,11 +1221,15 @@
<!-- PC Port Mode --> <!-- PC Port Mode -->
<!-- Enabled, Disabled, Mirrored --> <!-- Enabled, Disabled, Mirrored -->
<!-- Pvalue P1348 --> <!-- Pvalue P1348 -->
<item name="network.port.pc.mode">Enabled</item> {if isset($grandstream_pc_mode)}
<item name="network.port.pc.mode">{if isset($grandstream_pc_mode)}{$grandstream_pc_mode}{/if}</item>
{else}
<item name="network.port.pc.mode">{if isset($grandstream_pc_port_vlan)}Enabled{else}Disabled{/if}</item>
{/if}
<!-- PC Port VLAN Tag --> <!-- PC Port VLAN Tag -->
<!-- Pvalue P229 --> <!-- Pvalue P229 -->
<item name="network.port.pc.vlan.tag">0</item> <item name="network.port.pc.vlan.tag">{$grandstream_pc_port_vlan}</item>
<!-- PC Port Priority Value --> <!-- PC Port Priority Value -->
<!-- Pvalue P230 --> <!-- Pvalue P230 -->
@@ -2498,7 +2506,11 @@
<!-- STUN Server --> <!-- STUN Server -->
<!-- Pvalue P76 --> <!-- Pvalue P76 -->
{if isset($grandstream_stun_server) }
<item name="network.stunServer">{$grandstream_stun_server}</item>
{else}
<item name="network.stunServer"></item> <item name="network.stunServer"></item>
{/if}
<!-- # Delay Registration. Default is 0. --> <!-- # Delay Registration. Default is 0. -->
<!-- # Number: 0 - 90 --> <!-- # Number: 0 - 90 -->
@@ -3674,15 +3686,27 @@
<!-- # HEADSET Key Mode. DefaultMode, ToggleHeadsetOrSpeaker. --> <!-- # HEADSET Key Mode. DefaultMode, ToggleHeadsetOrSpeaker. -->
<!-- Pvalue P1312 --> <!-- Pvalue P1312 -->
{if isset($grandstream_headset_key_mode)}
<item name="audio.headset.keyMode">{$grandstream_headset_key_mode}</item>
{else}
<item name="audio.headset.keyMode">DefaultMode</item> <item name="audio.headset.keyMode">DefaultMode</item>
{/if}
<!-- # Headset Type. Normal, PlantronicsEHS. --> <!-- # Headset Type. Normal, PlantronicsEHS. -->
<!-- Pvalue P1487 --> <!-- Pvalue P1487 -->
{if isset($grandstream_headset_ringtone)}
<item name="audio.headset.ehs.ringtone">{$grandstream_headset_ringtone}</item>
{else}
<item name="audio.headset.ehs.ringtone">Normal</item> <item name="audio.headset.ehs.ringtone">Normal</item>
{/if}
<!-- # EHS Headset Ringtone. Normal, PlantronicsEHS. --> <!-- # EHS Headset Ringtone. Normal, PlantronicsEHS. -->
<!-- Pvalue P6779 --> <!-- Pvalue P6779 -->
{if isset($grandstream_headset_type)}
<item name="audio.headset.type">{$grandstream_headset_type}</item>
{else}
<item name="audio.headset.type">Normal</item> <item name="audio.headset.type">Normal</item>
{/if}
<!-- # Always Ring Speaker. --> <!-- # Always Ring Speaker. -->
<!-- No - 0, Yes,both - 1, Yes,speaker only - 2 --> <!-- No - 0, Yes,both - 1, Yes,speaker only - 2 -->
@@ -3701,11 +3725,19 @@
<!-- # Headset TX gain(dB). 1 - -6, 0 - 0, 2 - +6. Default is 0 --> <!-- # Headset TX gain(dB). 1 - -6, 0 - 0, 2 - +6. Default is 0 -->
<!-- Pvalue P1301 --> <!-- Pvalue P1301 -->
<item name="audio.headset.txGain">0</item> {if isset($grandstream_headset_tx_gain)}
<item name="audio.handset.txGain">{$grandstream_headset_tx_gain}</item>
{else}
<item name="audio.handset.txGain">0</item>
{/if}
<!-- # Headset RX gain(dB). 1 - -6, 0 - 0, 2 - +6. Default is 0 --> <!-- # Headset RX gain(dB). 1 - -6, 0 - 0, 2 - +6. Default is 0 -->
<!-- Pvalue P1302 --> <!-- Pvalue P1302 -->
{if isset($grandstream_headset_rx_gain)}
<item name="audio.headset.rxGain">{$grandstream_headset_rx_gain}</item>
{else}
<item name="audio.headset.rxGain">0</item> <item name="audio.headset.rxGain">0</item>
{/if}
<!-- # Handset Noise Shield 2.0. --> <!-- # Handset Noise Shield 2.0. -->
<!-- No - Disable, HighShielding - 1, SoftShielding - 2 --> <!-- No - Disable, HighShielding - 1, SoftShielding - 2 -->
@@ -3993,7 +4025,11 @@
<!-- # Screensaver Settings --> <!-- # Screensaver Settings -->
<!-- # Screensaver. No, Yes, OnIfNoVPKIsActive. --> <!-- # Screensaver. No, Yes, OnIfNoVPKIsActive. -->
<!-- Pvalue P2918 --> <!-- Pvalue P2918 -->
{if isset($grandstream_screensaver_enable)}
<item name="lcd.screensaver.enable">{$grandstream_screensaver_enable}</item>
{else}
<item name="lcd.screensaver.enable">OnIfNoVPKIsActive</item> <item name="lcd.screensaver.enable">OnIfNoVPKIsActive</item>
{/if}
<!-- # Use Programmable Keys in Screensaver. 0 - No, 1 - Yes, 2 - LED only --> <!-- # Use Programmable Keys in Screensaver. 0 - No, 1 - Yes, 2 - LED only -->
<!-- Pvalue P22363 --> <!-- Pvalue P22363 -->
@@ -4001,7 +4037,7 @@
<!-- # Screensaver Source. Default, USB, Download. --> <!-- # Screensaver Source. Default, USB, Download. -->
<!-- Pvalue P6759 --> <!-- Pvalue P6759 -->
<item name="lcd.screensaver.source"></item> <item name="lcd.screensaver.source">{$grandstream_screensaver_source}</item>
<!-- # Show Date and Time. Yes or No --> <!-- # Show Date and Time. Yes or No -->
<!-- Pvalue P8441 --> <!-- Pvalue P8441 -->
@@ -138,7 +138,11 @@
<!-- NAT Traversal --> <!-- NAT Traversal -->
<!-- No, STUN, KeepAlive, UPnP, Auto, VPN --> <!-- No, STUN, KeepAlive, UPnP, Auto, VPN -->
<!-- Pvalue P52 --> <!-- Pvalue P52 -->
{if isset($grandstream_nat_traversal)}
<item name="account.{$row.line_number}.network.natTraversal">{$grandstream_nat_traversal}</item>
{else}
<item name="account.{$row.line_number}.network.natTraversal">Auto</item> <item name="account.{$row.line_number}.network.natTraversal">Auto</item>
{/if}
<!-- Support Rport (RFC 3581) --> <!-- Support Rport (RFC 3581) -->
<!-- Yes, No --> <!-- Yes, No -->
@@ -173,7 +177,7 @@
<!-- Register Expiration (m) --> <!-- Register Expiration (m) -->
<!-- Number: 0 - 64800 --> <!-- Number: 0 - 64800 -->
<!-- Pvalue P32 --> <!-- Pvalue P32 -->
<item name="account.{$row.line_number}.sip.registerExpiration">15</item> <item name="account.{$row.line_number}.sip.registerExpiration">{$row.register_expires}</item>
<!-- Subscribe Expiration (m) --> <!-- Subscribe Expiration (m) -->
<!-- Number: 0 - 64800 --> <!-- Number: 0 - 64800 -->
@@ -784,7 +788,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P1489 --> <!-- Pvalue P1489 -->
<item name="account.{$row.line_number}.ring.match.1.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.1.ringtone">{$grandstream_distinctive_ringtone_1}</item>
<!-- Match Incoming Caller ID. Matching Rule 2 --> <!-- Match Incoming Caller ID. Matching Rule 2 -->
<!-- Pvalue P1490 --> <!-- Pvalue P1490 -->
@@ -792,7 +796,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P1491 --> <!-- Pvalue P1491 -->
<item name="account.{$row.line_number}.ring.match.2.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.2.ringtone">{$grandstream_distinctive_ringtone_2}</item>
<!-- Match Incoming Caller ID. Matching Rule 3 --> <!-- Match Incoming Caller ID. Matching Rule 3 -->
<!-- Pvalue P1492 --> <!-- Pvalue P1492 -->
@@ -800,7 +804,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P1493 --> <!-- Pvalue P1493 -->
<item name="account.{$row.line_number}.ring.match.3.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.3.ringtone">{$grandstream_distinctive_ringtone_3}</item>
<!-- Match Incoming Caller ID. Matching Rule 4 --> <!-- Match Incoming Caller ID. Matching Rule 4 -->
<!-- Pvalue P6716 --> <!-- Pvalue P6716 -->
@@ -808,7 +812,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P6717 --> <!-- Pvalue P6717 -->
<item name="account.{$row.line_number}.ring.match.4.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.4.ringtone">{$grandstream_distinctive_ringtone_4}</item>
<!-- Match Incoming Caller ID. Matching Rule 5 --> <!-- Match Incoming Caller ID. Matching Rule 5 -->
<!-- Pvalue P6718 --> <!-- Pvalue P6718 -->
@@ -816,7 +820,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P6719 --> <!-- Pvalue P6719 -->
<item name="account.{$row.line_number}.ring.match.5.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.5.ringtone">{$grandstream_distinctive_ringtone_5}</item>
<!-- Match Incoming Caller ID. Matching Rule 6 --> <!-- Match Incoming Caller ID. Matching Rule 6 -->
<!-- Pvalue P6720 --> <!-- Pvalue P6720 -->
@@ -824,7 +828,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P6721 --> <!-- Pvalue P6721 -->
<item name="account.{$row.line_number}.ring.match.6.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.6.ringtone">{$grandstream_distinctive_ringtone_6}</item>
<!-- Match Incoming Caller ID. Matching Rule 7 --> <!-- Match Incoming Caller ID. Matching Rule 7 -->
<!-- Pvalue P26064 --> <!-- Pvalue P26064 -->
@@ -832,7 +836,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P26065 --> <!-- Pvalue P26065 -->
<item name="account.{$row.line_number}.ring.match.7.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.7.ringtone">{$grandstream_distinctive_ringtone_7}</item>
<!-- Match Incoming Caller ID. Matching Rule 8 --> <!-- Match Incoming Caller ID. Matching Rule 8 -->
<!-- Pvalue P26066 --> <!-- Pvalue P26066 -->
@@ -840,7 +844,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P26067 --> <!-- Pvalue P26067 -->
<item name="account.{$row.line_number}.ring.match.8.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.8.ringtone">{$grandstream_distinctive_ringtone_8}</item>
<!-- Match Incoming Caller ID. Matching Rule 9 --> <!-- Match Incoming Caller ID. Matching Rule 9 -->
<!-- Pvalue P26068 --> <!-- Pvalue P26068 -->
@@ -848,7 +852,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P26069 --> <!-- Pvalue P26069 -->
<item name="account.{$row.line_number}.ring.match.9.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.9.ringtone">{$grandstream_distinctive_ringtone_9}</item>
<!-- Match Incoming Caller ID. Matching Rule 10 --> <!-- Match Incoming Caller ID. Matching Rule 10 -->
<!-- Pvalue P26096 --> <!-- Pvalue P26096 -->
@@ -856,7 +860,7 @@
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<!-- Pvalue P26097 --> <!-- Pvalue P26097 -->
<item name="account.{$row.line_number}.ring.match.10.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.10.ringtone">{$grandstream_distinctive_ringtone_10}</item>
<!-- Ring Timeout --> <!-- Ring Timeout -->
<!-- Number: 10 - 300 --> <!-- Number: 10 - 300 -->
@@ -1201,13 +1205,13 @@
<!-- # Enable Manual VLAN Configuration. Yes or No. --> <!-- # Enable Manual VLAN Configuration. Yes or No. -->
<!-- # Mandatory --> <!-- # Mandatory -->
<!-- Pvalue P22174 --> <!-- Pvalue P22174 -->
<item name="network.port.eth.1.vlan.enable">Yes</item> <item name="network.port.eth.1.vlan.enable">{if isset($grandstream_lan_port_vlan)}Yes{else}No{/if}</item>
<!-- # Layer 2 QoS. 802.1Q/VLAN Tag (VLAN classification for RTP). Default is 0 --> <!-- # Layer 2 QoS. 802.1Q/VLAN Tag (VLAN classification for RTP). Default is 0 -->
<!-- Layer 2 QoS 802.1Q/VLAN Tag (Ethernet) --> <!-- Layer 2 QoS 802.1Q/VLAN Tag (Ethernet) -->
<!-- Number: 0 - 4095 --> <!-- Number: 0 - 4095 -->
<!-- Pvalue P51 --> <!-- Pvalue P51 -->
<item name="network.port.eth.1.vlan.tag">0</item> <item name="network.port.eth.1.vlan.tag">{$grandstream_lan_port_vlan}</item>
<!-- 802.1p Priority Value (Ethernet) --> <!-- 802.1p Priority Value (Ethernet) -->
<!-- Number: 0 - 7 --> <!-- Number: 0 - 7 -->
@@ -1217,11 +1221,15 @@
<!-- PC Port Mode --> <!-- PC Port Mode -->
<!-- Enabled, Disabled, Mirrored --> <!-- Enabled, Disabled, Mirrored -->
<!-- Pvalue P1348 --> <!-- Pvalue P1348 -->
<item name="network.port.pc.mode">Enabled</item> {if isset($grandstream_pc_mode)}
<item name="network.port.pc.mode">{if isset($grandstream_pc_mode)}{$grandstream_pc_mode}{/if}</item>
{else}
<item name="network.port.pc.mode">{if isset($grandstream_pc_port_vlan)}Enabled{else}Disabled{/if}</item>
{/if}
<!-- PC Port VLAN Tag --> <!-- PC Port VLAN Tag -->
<!-- Pvalue P229 --> <!-- Pvalue P229 -->
<item name="network.port.pc.vlan.tag">0</item> <item name="network.port.pc.vlan.tag">{$grandstream_pc_port_vlan}</item>
<!-- PC Port Priority Value --> <!-- PC Port Priority Value -->
<!-- Pvalue P230 --> <!-- Pvalue P230 -->
@@ -2498,7 +2506,11 @@
<!-- STUN Server --> <!-- STUN Server -->
<!-- Pvalue P76 --> <!-- Pvalue P76 -->
{if isset($grandstream_stun_server) }
<item name="network.stunServer">{$grandstream_stun_server}</item>
{else}
<item name="network.stunServer"></item> <item name="network.stunServer"></item>
{/if}
<!-- # Delay Registration. Default is 0. --> <!-- # Delay Registration. Default is 0. -->
<!-- # Number: 0 - 90 --> <!-- # Number: 0 - 90 -->
@@ -3674,15 +3686,27 @@
<!-- # HEADSET Key Mode. DefaultMode, ToggleHeadsetOrSpeaker. --> <!-- # HEADSET Key Mode. DefaultMode, ToggleHeadsetOrSpeaker. -->
<!-- Pvalue P1312 --> <!-- Pvalue P1312 -->
{if isset($grandstream_headset_key_mode)}
<item name="audio.headset.keyMode">{$grandstream_headset_key_mode}</item>
{else}
<item name="audio.headset.keyMode">DefaultMode</item> <item name="audio.headset.keyMode">DefaultMode</item>
{/if}
<!-- # Headset Type. Normal, PlantronicsEHS. --> <!-- # Headset Type. Normal, PlantronicsEHS. -->
<!-- Pvalue P1487 --> <!-- Pvalue P1487 -->
{if isset($grandstream_headset_ringtone)}
<item name="audio.headset.ehs.ringtone">{$grandstream_headset_ringtone}</item>
{else}
<item name="audio.headset.ehs.ringtone">Normal</item> <item name="audio.headset.ehs.ringtone">Normal</item>
{/if}
<!-- # EHS Headset Ringtone. Normal, PlantronicsEHS. --> <!-- # EHS Headset Ringtone. Normal, PlantronicsEHS. -->
<!-- Pvalue P6779 --> <!-- Pvalue P6779 -->
{if isset($grandstream_headset_type)}
<item name="audio.headset.type">{$grandstream_headset_type}</item>
{else}
<item name="audio.headset.type">Normal</item> <item name="audio.headset.type">Normal</item>
{/if}
<!-- # Always Ring Speaker. --> <!-- # Always Ring Speaker. -->
<!-- No - 0, Yes,both - 1, Yes,speaker only - 2 --> <!-- No - 0, Yes,both - 1, Yes,speaker only - 2 -->
@@ -3701,11 +3725,19 @@
<!-- # Headset TX gain(dB). 1 - -6, 0 - 0, 2 - +6. Default is 0 --> <!-- # Headset TX gain(dB). 1 - -6, 0 - 0, 2 - +6. Default is 0 -->
<!-- Pvalue P1301 --> <!-- Pvalue P1301 -->
<item name="audio.headset.txGain">0</item> {if isset($grandstream_headset_tx_gain)}
<item name="audio.handset.txGain">{$grandstream_headset_tx_gain}</item>
{else}
<item name="audio.handset.txGain">0</item>
{/if}
<!-- # Headset RX gain(dB). 1 - -6, 0 - 0, 2 - +6. Default is 0 --> <!-- # Headset RX gain(dB). 1 - -6, 0 - 0, 2 - +6. Default is 0 -->
<!-- Pvalue P1302 --> <!-- Pvalue P1302 -->
{if isset($grandstream_headset_rx_gain)}
<item name="audio.headset.rxGain">{$grandstream_headset_rx_gain}</item>
{else}
<item name="audio.headset.rxGain">0</item> <item name="audio.headset.rxGain">0</item>
{/if}
<!-- # Handset Noise Shield 2.0. --> <!-- # Handset Noise Shield 2.0. -->
<!-- No - Disable, HighShielding - 1, SoftShielding - 2 --> <!-- No - Disable, HighShielding - 1, SoftShielding - 2 -->
@@ -3993,7 +4025,11 @@
<!-- # Screensaver Settings --> <!-- # Screensaver Settings -->
<!-- # Screensaver. No, Yes, OnIfNoVPKIsActive. --> <!-- # Screensaver. No, Yes, OnIfNoVPKIsActive. -->
<!-- Pvalue P2918 --> <!-- Pvalue P2918 -->
{if isset($grandstream_screensaver_enable)}
<item name="lcd.screensaver.enable">{$grandstream_screensaver_enable}</item>
{else}
<item name="lcd.screensaver.enable">OnIfNoVPKIsActive</item> <item name="lcd.screensaver.enable">OnIfNoVPKIsActive</item>
{/if}
<!-- # Use Programmable Keys in Screensaver. 0 - No, 1 - Yes, 2 - LED only --> <!-- # Use Programmable Keys in Screensaver. 0 - No, 1 - Yes, 2 - LED only -->
<!-- Pvalue P22363 --> <!-- Pvalue P22363 -->
@@ -4001,7 +4037,7 @@
<!-- # Screensaver Source. Default, USB, Download. --> <!-- # Screensaver Source. Default, USB, Download. -->
<!-- Pvalue P6759 --> <!-- Pvalue P6759 -->
<item name="lcd.screensaver.source"></item> <item name="lcd.screensaver.source">{$grandstream_screensaver_source}</item>
<!-- # Show Date and Time. Yes or No --> <!-- # Show Date and Time. Yes or No -->
<!-- Pvalue P8441 --> <!-- Pvalue P8441 -->
@@ -684,18 +684,18 @@
<item name="account.{$line}.featureCodes.callFeatures">No</item> <item name="account.{$line}.featureCodes.callFeatures">No</item>
<!-- DND Call Feature On --> <!-- DND Call Feature On -->
<item name="account.{$line}.featureCodes.dndOn"></item> <item name="account.{$line}.featureCodes.dndOn">*78</item>
<!-- DND Call Feature Off --> <!-- DND Call Feature Off -->
<item name="account.{$line}.featureCodes.dndOff"></item> <item name="account.{$line}.featureCodes.dndOff">*79</item>
<!-- #Call Forward Unconditionally (All) - On --> <!-- #Call Forward Unconditionally (All) - On -->
<!-- # String --> <!-- # String -->
<item name="account.{$line}.featureCodes.callForwardUnconditionallyOn"></item> <item name="account.{$line}.featureCodes.callForwardUnconditionallyOn">*72</item>
<!-- #Call Forward Unconditionally (All) - Off --> <!-- #Call Forward Unconditionally (All) - Off -->
<!-- # String --> <!-- # String -->
<item name="account.{$line}.featureCodes.callForwardUnconditionallyOff"></item> <item name="account.{$line}.featureCodes.callForwardUnconditionallyOff">*73</item>
<!-- #Call Forward Unconditionally (All) - Target --> <!-- #Call Forward Unconditionally (All) - Target -->
<!-- # String --> <!-- # String -->
File diff suppressed because it is too large Load Diff
@@ -33,12 +33,12 @@
<!-- SIP Server --> <!-- SIP Server -->
{if isset($row.server_address_primary)} {if isset($row.server_address_primary)}
<item name="account.{$row.line_number}.sip.server.1.address">{$row.server_address_primary}</item> <item name="account.{$row.line_number}.sip.server.1.address">{$row.server_address_primary}:{$row.sip_port}</item>
{else} {else}
<item name="account.{$row.line_number}.sip.server.1.address">{$row.server_address}</item> <item name="account.{$row.line_number}.sip.server.1.address">{$row.server_address}:{$row.sip_port}</item>
{/if} {/if}
<!-- Secondary SIP Server --> <!-- Secondary SIP Server -->
<item name="account.{$row.line_number}.sip.server.2.address">{$row.server_address_secondary}</item> <item name="account.{$row.line_number}.sip.server.2.address">{$row.server_address_secondary}:{$row.sip_port}</item>
<!-- Outbound Proxy --> <!-- Outbound Proxy -->
{if $row.sip_transport != 'dns srv' && isset($row.outbound_proxy_primary)} {if $row.sip_transport != 'dns srv' && isset($row.outbound_proxy_primary)}
@@ -56,9 +56,9 @@
<!-- BLF Server --> <!-- BLF Server -->
{if isset($row.server_address_primary)} {if isset($row.server_address_primary)}
<item name="account.{$row.line_number}.sip.blf.server">{$row.server_address_primary}</item> <item name="account.{$row.line_number}.sip.blf.server">{$row.server_address_primary}:{$row.sip_port}</item>
{else} {else}
<item name="account.{$row.line_number}.sip.blf.server">{$row.server_address}</item> <item name="account.{$row.line_number}.sip.blf.server">{$row.server_address}:{$row.sip_port}</item>
{/if} {/if}
<!-- SIP User ID --> <!-- SIP User ID -->
@@ -107,7 +107,11 @@
<!-- NAT Traversal --> <!-- NAT Traversal -->
<!-- No, STUN, KeepAlive, UPnP, Auto, VPN --> <!-- No, STUN, KeepAlive, UPnP, Auto, VPN -->
{if isset($grandstream_nat_traversal)}
<item name="account.{$row.line_number}.network.natTraversal">{$grandstream_nat_traversal}</item>
{else}
<item name="account.{$row.line_number}.network.natTraversal">Auto</item> <item name="account.{$row.line_number}.network.natTraversal">Auto</item>
{/if}
<!-- Support Rport (RFC 3581) --> <!-- Support Rport (RFC 3581) -->
<!-- Yes, No --> <!-- Yes, No -->
@@ -136,7 +140,7 @@
<!-- Register Expiration (m) --> <!-- Register Expiration (m) -->
<!-- Number: 0 - 64800 --> <!-- Number: 0 - 64800 -->
<item name="account.{$row.line_number}.sip.registerExpiration">15</item> <item name="account.{$row.line_number}.sip.registerExpiration">{$row.register_expires}</item>
<!-- Subscribe Expiration (m) --> <!-- Subscribe Expiration (m) -->
<!-- Number: 0 - 64800 --> <!-- Number: 0 - 64800 -->
@@ -572,64 +576,64 @@
<item name="account.{$row.line_number}.ring.ringtone">5</item> <item name="account.{$row.line_number}.ring.ringtone">5</item>
<!-- Matching Incoming Caller ID. Matching Rule 1 --> <!-- Matching Incoming Caller ID. Matching Rule 1 -->
<item name="account.{$row.line_number}.ring.match.1.callerId"/> <item name="account.{$row.line_number}.ring.match.1.callerId">{$grandstream_distinctive_ringtone_name_1}</item>
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<item name="account.{$row.line_number}.ring.match.1.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.1.ringtone">{$grandstream_distinctive_ringtone_1}</item>
<!-- Match Incoming Caller ID. Matching Rule 2 --> <!-- Match Incoming Caller ID. Matching Rule 2 -->
<item name="account.{$row.line_number}.ring.match.2.callerId"/> <item name="account.{$row.line_number}.ring.match.2.callerId">{$grandstream_distinctive_ringtone_name_2}</item>
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<item name="account.{$row.line_number}.ring.match.2.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.2.ringtone">{$grandstream_distinctive_ringtone_2}</item>
<!-- Match Incoming Caller ID. Matching Rule 3 --> <!-- Match Incoming Caller ID. Matching Rule 3 -->
<item name="account.{$row.line_number}.ring.match.3.callerId"/> <item name="account.{$row.line_number}.ring.match.3.callerId">{$grandstream_distinctive_ringtone_name_3}</item>
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<item name="account.{$row.line_number}.ring.match.3.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.3.ringtone">{$grandstream_distinctive_ringtone_3}</item>
<!-- Match Incoming Caller ID. Matching Rule 4 --> <!-- Match Incoming Caller ID. Matching Rule 4 -->
<item name="account.{$row.line_number}.ring.match.4.callerId"/> <item name="account.{$row.line_number}.ring.match.4.callerId">{$grandstream_distinctive_ringtone_name_4}</item>
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<item name="account.{$row.line_number}.ring.match.4.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.4.ringtone">{$grandstream_distinctive_ringtone_4}</item>
<!-- Match Incoming Caller ID. Matching Rule 5 --> <!-- Match Incoming Caller ID. Matching Rule 5 -->
<item name="account.{$row.line_number}.ring.match.5.callerId"/> <item name="account.{$row.line_number}.ring.match.5.callerId">{$grandstream_distinctive_ringtone_name_5}</item>
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<item name="account.{$row.line_number}.ring.match.5.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.5.ringtone">{$grandstream_distinctive_ringtone_5}</item>
<!-- Match Incoming Caller ID. Matching Rule 6 --> <!-- Match Incoming Caller ID. Matching Rule 6 -->
<item name="account.{$row.line_number}.ring.match.6.callerId"/> <item name="account.{$row.line_number}.ring.match.6.callerId">{$grandstream_distinctive_ringtone_name_6}</item>
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<item name="account.{$row.line_number}.ring.match.6.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.6.ringtone">{$grandstream_distinctive_ringtone_6}</item>
<!-- Match Incoming Caller ID. Matching Rule 7 --> <!-- Match Incoming Caller ID. Matching Rule 7 -->
<item name="account.{$row.line_number}.ring.match.7.callerId"/> <item name="account.{$row.line_number}.ring.match.7.callerId">{$grandstream_distinctive_ringtone_name_7}</item>
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<item name="account.{$row.line_number}.ring.match.7.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.7.ringtone">{$grandstream_distinctive_ringtone_7}</item>
<!-- Match Incoming Caller ID. Matching Rule 8 --> <!-- Match Incoming Caller ID. Matching Rule 8 -->
<item name="account.{$row.line_number}.ring.match.8.callerId"/> <item name="account.{$row.line_number}.ring.match.8.callerId">{$grandstream_distinctive_ringtone_name_8}</item>
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<item name="account.{$row.line_number}.ring.match.8.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.8.ringtone">{$grandstream_distinctive_ringtone_8}</item>
<!-- Match Incoming Caller ID. Matching Rule 9 --> <!-- Match Incoming Caller ID. Matching Rule 9 -->
<item name="account.{$row.line_number}.ring.match.9.callerId"/> <item name="account.{$row.line_number}.ring.match.9.callerId">{$grandstream_distinctive_ringtone_name_9}</item>
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<item name="account.{$row.line_number}.ring.match.9.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.9.ringtone">{$grandstream_distinctive_ringtone_9}</item>
<!-- Match Incoming Caller ID. Matching Rule 10 --> <!-- Match Incoming Caller ID. Matching Rule 10 -->
<item name="account.{$row.line_number}.ring.match.10.callerId"/> <item name="account.{$row.line_number}.ring.match.10.callerId">{$grandstream_distinctive_ringtone_name_10}</item>
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<item name="account.{$row.line_number}.ring.match.10.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.10.ringtone">{$grandstream_distinctive_ringtone_10}</item>
<!-- Ring Timeout --> <!-- Ring Timeout -->
<!-- Number: 10 - 300 --> <!-- Number: 10 - 300 -->
@@ -665,21 +669,21 @@
<!-- #Enable Local Call Features. Default is Yes --> <!-- #Enable Local Call Features. Default is Yes -->
<!-- #Mandatory --> <!-- #Mandatory -->
<!-- No, Yes --> <!-- No, Yes -->
<item name="account.{$row.line_number}.featureCodes.callFeatures">Yes</item> <item name="account.{$row.line_number}.featureCodes.callFeatures">No</item>
<!-- DND Call Feature On --> <!-- DND Call Feature On -->
<item name="account.{$row.line_number}.featureCodes.dndOn"/> <item name="account.{$row.line_number}.featureCodes.dndOn">*78</item>
<!-- DND Call Feature Off --> <!-- DND Call Feature Off -->
<item name="account.{$row.line_number}.featureCodes.dndOff"/> <item name="account.{$row.line_number}.featureCodes.dndOff">*79</item>
<!-- #Call Forward Always - On --> <!-- #Call Forward Always - On -->
<!-- # String --> <!-- # String -->
<item name="account.{$row.line_number}.featureCodes.callForwardUnconditionallyOn"/> <item name="account.{$row.line_number}.featureCodes.callForwardUnconditionallyOn">*72</item>
<!-- #Call Forward Always - Off --> <!-- #Call Forward Always - Off -->
<!-- # String --> <!-- # String -->
<item name="account.{$row.line_number}.featureCodes.callForwardUnconditionallyOff"/> <item name="account.{$row.line_number}.featureCodes.callForwardUnconditionallyOff">*73</item>
<!-- #Call Forward Always- Target --> <!-- #Call Forward Always- Target -->
<!-- # String --> <!-- # String -->
@@ -903,12 +907,12 @@
<!-- # Enable Manual VLAN Configuration. Yes or No. --> <!-- # Enable Manual VLAN Configuration. Yes or No. -->
<!-- # Mandatory --> <!-- # Mandatory -->
<item name="network.port.eth.1.vlan.enable">Yes</item> <item name="network.port.eth.1.vlan.enable">{if $grandstream_lan_port_vlan == '0'}No{else}Yes{/if}</item>
<!-- # Layer 2 QoS. 802.1Q/VLAN Tag (VLAN classification for RTP). Default is 0 --> <!-- # Layer 2 QoS. 802.1Q/VLAN Tag (VLAN classification for RTP). Default is 0 -->
<!-- Layer 2 QoS 802.1Q/VLAN Tag (Ethernet) --> <!-- Layer 2 QoS 802.1Q/VLAN Tag (Ethernet) -->
<!-- Number: 0 - 4095 --> <!-- Number: 0 - 4095 -->
<item name="network.port.eth.1.vlan.tag">0</item> <item name="network.port.eth.1.vlan.tag">{$grandstream_lan_port_vlan}</item>
<!-- 802.1p Priority Value (Ethernet) --> <!-- 802.1p Priority Value (Ethernet) -->
<!-- Number: 0 - 7 --> <!-- Number: 0 - 7 -->
@@ -916,10 +920,14 @@
<!-- PC Port Mode --> <!-- PC Port Mode -->
<!-- Enabled, Disabled, Mirrored --> <!-- Enabled, Disabled, Mirrored -->
<item name="network.port.pc.mode">Enabled</item> {if isset($grandstream_pc_mode)}
<item name="network.port.pc.mode">{if isset($grandstream_pc_mode)}{$grandstream_pc_mode}{else}Enabled{/if}</item>
{else}
<item name="network.port.pc.mode">{if isset($grandstream_pc_port_vlan)}Enabled{else}Disabled{/if}</item>
{/if}
<!-- PC Port VLAN Tag --> <!-- PC Port VLAN Tag -->
<item name="network.port.pc.vlan.tag">0</item> <item name="network.port.pc.vlan.tag">{$grandstream_pc_port_vlan}</item>
<!-- PC Port Priority Value --> <!-- PC Port Priority Value -->
<item name="network.port.pc.vlan.priority">0</item> <item name="network.port.pc.vlan.priority">0</item>
@@ -1249,8 +1257,8 @@
<!-- TFTP, HTTP, HTTPS, FTP,FTPS --> <!-- TFTP, HTTP, HTTPS, FTP,FTPS -->
<item name="provisioning.firmware.protocol">HTTP</item> <item name="provisioning.firmware.protocol">HTTP</item>
<!-- Firmware Server Path --> <!-- Firmware Server Path -->
{if isset($grandstream_firmware_path) && isset($firmware_version)} {if isset($grandstream_firmware_path) && isset($grandstream_firmware_version)}
<item name="provisioning.firmware.serverPath">{$grandstream_firmware_path}/{$firmware_version}</item> <item name="provisioning.firmware.serverPath">{$grandstream_firmware_path}/{$grandstream_firmware_version}</item>
{elseif isset($grandstream_firmware_path)} {elseif isset($grandstream_firmware_path)}
<item name="provisioning.firmware.serverPath">{$grandstream_firmware_path}</item> <item name="provisioning.firmware.serverPath">{$grandstream_firmware_path}</item>
{else} {else}
@@ -1614,7 +1622,11 @@
<item name="sip.userNatIp"/> <item name="sip.userNatIp"/>
<!-- STUN Server --> <!-- STUN Server -->
<item name="network.stunServer"/> {if isset($grandstream_stun_server) }
<item name="network.stunServer">{$grandstream_stun_server}</item>
{else}
<item name="network.stunServer"></item>
{/if}
<!-- # Delay Registration. Default is 0. --> <!-- # Delay Registration. Default is 0. -->
<!-- # Number: 0 - 90 --> <!-- # Number: 0 - 90 -->
@@ -2192,7 +2204,7 @@
<item name="sip.showError">Yes</item> <item name="sip.showError">Yes</item>
<!-- # Enable Missed Call Notification. Yes or No --> <!-- # Enable Missed Call Notification. Yes or No -->
<item name="features.history.missedCallNotification">Yes</item> <item name="features.history.missedCallNotification">{$grandstream_missed_call_notification}</item>
<!-- # Enable Call Completion Service. Yes or No --> <!-- # Enable Call Completion Service. Yes or No -->
<item name="call.dial.callComplete.enable"/> <item name="call.dial.callComplete.enable"/>
@@ -2424,13 +2436,25 @@
<!-- ## Settings/Preferences / Audio Control --> <!-- ## Settings/Preferences / Audio Control -->
<!-- ############################################################################## --> <!-- ############################################################################## -->
<!-- # HEADSET Key Mode. DefaultMode, ToggleHeadsetOrSpeaker. --> <!-- # HEADSET Key Mode. DefaultMode, ToggleHeadsetOrSpeaker. -->
{if isset($grandstream_headset_key_mode)}
<item name="audio.headset.keyMode">{$grandstream_headset_key_mode}</item>
{else}
<item name="audio.headset.keyMode">DefaultMode</item> <item name="audio.headset.keyMode">DefaultMode</item>
{/if}
<!-- # Headset Type. Normal, PlantronicsEHS. --> <!-- # Headset Type. Normal, PlantronicsEHS. -->
{if isset($grandstream_headset_ringtone)}
<item name="audio.headset.ehs.ringtone">{$grandstream_headset_ringtone}</item>
{else}
<item name="audio.headset.ehs.ringtone">Normal</item> <item name="audio.headset.ehs.ringtone">Normal</item>
{/if}
<!-- # EHS Headset Ringtone. Normal, PlantronicsEHS. --> <!-- # EHS Headset Ringtone. Normal, PlantronicsEHS. -->
{if isset($grandstream_headset_type)}
<item name="audio.headset.type">{$grandstream_headset_type}</item>
{else}
<item name="audio.headset.type">Normal</item> <item name="audio.headset.type">Normal</item>
{/if}
<!-- # Always Ring Speaker. --> <!-- # Always Ring Speaker. -->
<!-- No - 0, Yes,both - 1, Yes,speaker only - 2 --> <!-- No - 0, Yes,both - 1, Yes,speaker only - 2 -->
@@ -2444,10 +2468,18 @@
<item name="audio.headset.txGain">0</item> <item name="audio.headset.txGain">0</item>
<!-- # Headset RX gain(dB). 1 - -6, 0 - 0, 2 - +6. Default is 0 --> <!-- # Headset RX gain(dB). 1 - -6, 0 - 0, 2 - +6. Default is 0 -->
{if isset($grandstream_headset_rx_gain)}
<item name="audio.headset.rxGain">{$grandstream_headset_rx_gain}</item>
{else}
<item name="audio.headset.rxGain">0</item> <item name="audio.headset.rxGain">0</item>
{/if}
<!-- # Handset TX gain(dB). 1 - -6, 0 - 0, 2 - +6. Default is 0 --> <!-- # Handset TX gain(dB). 1 - -6, 0 - 0, 2 - +6. Default is 0 -->
{if isset($grandstream_headset_tx_gain)}
<item name="audio.handset.txGain">{$grandstream_headset_tx_gain}</item>
{else}
<item name="audio.handset.txGain">0</item> <item name="audio.handset.txGain">0</item>
{/if}
<!-- ############################################################################## --> <!-- ############################################################################## -->
<!-- ## Settings/Preferences / Date and Time --> <!-- ## Settings/Preferences / Date and Time -->
@@ -2620,10 +2652,14 @@
<!-- # Screensaver Settings --> <!-- # Screensaver Settings -->
<!-- # Screensaver. No, Yes, OnIfNoVPKIsActive. --> <!-- # Screensaver. No, Yes, OnIfNoVPKIsActive. -->
{if isset($grandstream_screensaver_enable)}
<item name="lcd.screensaver.enable">{$grandstream_screensaver_enable}</item>
{else}
<item name="lcd.screensaver.enable">OnIfNoVPKIsActive</item> <item name="lcd.screensaver.enable">OnIfNoVPKIsActive</item>
{/if}
<!-- # Screensaver Source. Default, USB, Download. --> <!-- # Screensaver Source. Default, USB, Download. -->
<item name="lcd.screensaver.source"/> <item name="lcd.screensaver.source">{$grandstream_screensaver_source}</item>
<!-- # Show Date and Time. Yes or No --> <!-- # Show Date and Time. Yes or No -->
<item name="lcd.screensaver.showDateTime">Yes</item> <item name="lcd.screensaver.showDateTime">Yes</item>
@@ -2943,7 +2979,6 @@
<!-- # Phonebook(30), Paging(33) --> <!-- # Phonebook(30), Paging(33) -->
{/literal} {/literal}
{assign var=key_types value=["none"=>-1,"line"=>0,"shared"=>1,"speed dial"=>10, "blf"=>11, "presence watcher"=>12, {assign var=key_types value=["none"=>-1,"line"=>0,"shared"=>1,"speed dial"=>10, "blf"=>11, "presence watcher"=>12,
"eventlist blf"=>13,"speed dial active"=>14,"dial dtmf"=>15,"voicemail"=>16,"call return"=>17, "eventlist blf"=>13,"speed dial active"=>14,"dial dtmf"=>15,"voicemail"=>16,"call return"=>17,
"transfer"=>18,"call park"=>19,"intercom"=>20,"ldap search"=>21,"conference"=>22,"multicast paging"=>23, "transfer"=>18,"call park"=>19,"intercom"=>20,"ldap search"=>21,"conference"=>22,"multicast paging"=>23,
@@ -2951,6 +2986,7 @@
{foreach $keys['line'] as $row} {foreach $keys['line'] as $row}
{$line=$row.device_key_id} {$line=$row.device_key_id}
{if $row.device_key_id < 4}
<!-- ###################################################################################### --> <!-- ###################################################################################### -->
<!-- # VPK {$row.device_key_id} --> <!-- # VPK {$row.device_key_id} -->
<!-- ###################################################################################### --> <!-- ###################################################################################### -->
@@ -2971,7 +3007,39 @@
<!-- # Locked: uncheck, check. --> <!-- # Locked: uncheck, check. -->
<!--<item name="pks.vpk.{$row.device_key_id}.lockMode"></item>--> <!--<item name="pks.vpk.{$row.device_key_id}.lockMode"></item>-->
{/if}
{/foreach}
<!-- # Key Mode for dynamic VPK. -->
{assign var=key_types value=["none"=>-1,"speed dial"=>0, "blf"=>1, "presence watcher"=>2,
"eventlist blf"=>3,"speed dial active"=>4,"dial dtmf"=>5,"voicemail"=>6,"call return"=>7,
"transfer"=>8,"call park"=>9,"intercom"=>10,"ldap search"=>11,"conference"=>12,"multicast paging"=>13,
"record"=>14,"call log"=>15,"monitored call park"=>16,"menu"=>17]}
{foreach $keys['line'] as $row}
{$line=$row.device_key_id}
{if $row.device_key_id > 3}
<!-- ###################################################################################### -->
<!-- # VPK {$row.device_key_id} -->
<!-- ###################################################################################### -->
<!-- # Key Mode -->
<item name="pks.vpk.{$row.device_key_id}.keyMode">{$key_types[$keys.line.$line.device_key_type]}</item>
<!--<item name="pks.vpk.{$row.device_key_id}.keyMode">-1</item>-->
<!-- # Account. 0 - Account1, 1 - Account2, 2 - Account3, 3 - Account 4, 4 - Account 5, 5 - Account 6 -->
<item name="pks.vpk.{$row.device_key_id}.account">{$row.device_key_line}</item>
<!-- # Description. Max length allowed is 32 characters. -->
<!-- # String -->
<item name="pks.vpk.{$row.device_key_id}.description">{$row.device_key_label}</item>
<!-- # Value. Max length allowed is 64 characters. -->
<!-- # String -->
<item name="pks.vpk.{$row.device_key_id}.value">{$row.device_key_value}</item>
<!-- # Locked: uncheck, check. -->
<!--<item name="pks.vpk.{$row.device_key_id}.lockMode"></item>-->
{/if}
{/foreach} {/foreach}
<!-- ############################################################################## --> <!-- ############################################################################## -->
@@ -3215,6 +3283,11 @@
<!-- # Phonebook(30), Paging(33) --> <!-- # Phonebook(30), Paging(33) -->
{/literal} {/literal}
{assign var=key_types value=["none"=>-1,"speed dial"=>0, "blf"=>1, "presence watcher"=>2,
"eventlist blf"=>3,"speed dial active"=>4,"dial dtmf"=>5,"voicemail"=>6,"call return"=>7,
"transfer"=>8,"call park"=>9,"intercom"=>10,"ldap search"=>11,"conference"=>12,"multicast paging"=>13,
"record"=>14,"call log"=>15,"monitored call park"=>16,"menu"=>17]}
{foreach $keys['expansion'] as $row} {foreach $keys['expansion'] as $row}
{$line=$row.device_key_id} {$line=$row.device_key_id}
@@ -3237,5 +3310,3 @@
</config> </config>
</gs_provision> </gs_provision>
@@ -33,12 +33,12 @@
<!-- SIP Server --> <!-- SIP Server -->
{if isset($row.server_address_primary)} {if isset($row.server_address_primary)}
<item name="account.{$row.line_number}.sip.server.1.address">{$row.server_address_primary}</item> <item name="account.{$row.line_number}.sip.server.1.address">{$row.server_address_primary}:{$row.sip_port}</item>
{else} {else}
<item name="account.{$row.line_number}.sip.server.1.address">{$row.server_address}</item> <item name="account.{$row.line_number}.sip.server.1.address">{$row.server_address}:{$row.sip_port}</item>
{/if} {/if}
<!-- Secondary SIP Server --> <!-- Secondary SIP Server -->
<item name="account.{$row.line_number}.sip.server.2.address">{$row.server_address_secondary}</item> <item name="account.{$row.line_number}.sip.server.2.address">{$row.server_address_secondary}:{$row.sip_port}</item>
<!-- Outbound Proxy --> <!-- Outbound Proxy -->
{if $row.sip_transport != 'dns srv' && isset($row.outbound_proxy_primary)} {if $row.sip_transport != 'dns srv' && isset($row.outbound_proxy_primary)}
@@ -56,9 +56,9 @@
<!-- BLF Server --> <!-- BLF Server -->
{if isset($row.server_address_primary)} {if isset($row.server_address_primary)}
<item name="account.{$row.line_number}.sip.blf.server">{$row.server_address_primary}</item> <item name="account.{$row.line_number}.sip.blf.server">{$row.server_address_primary}:{$row.sip_port}</item>
{else} {else}
<item name="account.{$row.line_number}.sip.blf.server">{$row.server_address}</item> <item name="account.{$row.line_number}.sip.blf.server">{$row.server_address}:{$row.sip_port}</item>
{/if} {/if}
<!-- SIP User ID --> <!-- SIP User ID -->
@@ -107,7 +107,11 @@
<!-- NAT Traversal --> <!-- NAT Traversal -->
<!-- No, STUN, KeepAlive, UPnP, Auto, VPN --> <!-- No, STUN, KeepAlive, UPnP, Auto, VPN -->
{if isset($grandstream_nat_traversal)}
<item name="account.{$row.line_number}.network.natTraversal">{$grandstream_nat_traversal}</item>
{else}
<item name="account.{$row.line_number}.network.natTraversal">Auto</item> <item name="account.{$row.line_number}.network.natTraversal">Auto</item>
{/if}
<!-- Support Rport (RFC 3581) --> <!-- Support Rport (RFC 3581) -->
<!-- Yes, No --> <!-- Yes, No -->
@@ -136,7 +140,7 @@
<!-- Register Expiration (m) --> <!-- Register Expiration (m) -->
<!-- Number: 0 - 64800 --> <!-- Number: 0 - 64800 -->
<item name="account.{$row.line_number}.sip.registerExpiration">15</item> <item name="account.{$row.line_number}.sip.registerExpiration">{$row.register_expires}</item>
<!-- Subscribe Expiration (m) --> <!-- Subscribe Expiration (m) -->
<!-- Number: 0 - 64800 --> <!-- Number: 0 - 64800 -->
@@ -572,64 +576,64 @@
<item name="account.{$row.line_number}.ring.ringtone">5</item> <item name="account.{$row.line_number}.ring.ringtone">5</item>
<!-- Matching Incoming Caller ID. Matching Rule 1 --> <!-- Matching Incoming Caller ID. Matching Rule 1 -->
<item name="account.{$row.line_number}.ring.match.1.callerId"/> <item name="account.{$row.line_number}.ring.match.1.callerId">{$grandstream_distinctive_ringtone_name_1}</item>
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<item name="account.{$row.line_number}.ring.match.1.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.1.ringtone">{$grandstream_distinctive_ringtone_1}</item>
<!-- Match Incoming Caller ID. Matching Rule 2 --> <!-- Match Incoming Caller ID. Matching Rule 2 -->
<item name="account.{$row.line_number}.ring.match.2.callerId"/> <item name="account.{$row.line_number}.ring.match.2.callerId">{$grandstream_distinctive_ringtone_name_2}</item>
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<item name="account.{$row.line_number}.ring.match.2.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.2.ringtone">{$grandstream_distinctive_ringtone_2}</item>
<!-- Match Incoming Caller ID. Matching Rule 3 --> <!-- Match Incoming Caller ID. Matching Rule 3 -->
<item name="account.{$row.line_number}.ring.match.3.callerId"/> <item name="account.{$row.line_number}.ring.match.3.callerId">{$grandstream_distinctive_ringtone_name_3}</item>
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<item name="account.{$row.line_number}.ring.match.3.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.3.ringtone">{$grandstream_distinctive_ringtone_3}</item>
<!-- Match Incoming Caller ID. Matching Rule 4 --> <!-- Match Incoming Caller ID. Matching Rule 4 -->
<item name="account.{$row.line_number}.ring.match.4.callerId"/> <item name="account.{$row.line_number}.ring.match.4.callerId">{$grandstream_distinctive_ringtone_name_4}</item>
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<item name="account.{$row.line_number}.ring.match.4.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.4.ringtone">{$grandstream_distinctive_ringtone_4}</item>
<!-- Match Incoming Caller ID. Matching Rule 5 --> <!-- Match Incoming Caller ID. Matching Rule 5 -->
<item name="account.{$row.line_number}.ring.match.5.callerId"/> <item name="account.{$row.line_number}.ring.match.5.callerId">{$grandstream_distinctive_ringtone_name_5}</item>
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<item name="account.{$row.line_number}.ring.match.5.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.5.ringtone">{$grandstream_distinctive_ringtone_5}</item>
<!-- Match Incoming Caller ID. Matching Rule 6 --> <!-- Match Incoming Caller ID. Matching Rule 6 -->
<item name="account.{$row.line_number}.ring.match.6.callerId"/> <item name="account.{$row.line_number}.ring.match.6.callerId">{$grandstream_distinctive_ringtone_name_6}</item>
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<item name="account.{$row.line_number}.ring.match.6.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.6.ringtone">{$grandstream_distinctive_ringtone_6}</item>
<!-- Match Incoming Caller ID. Matching Rule 7 --> <!-- Match Incoming Caller ID. Matching Rule 7 -->
<item name="account.{$row.line_number}.ring.match.7.callerId"/> <item name="account.{$row.line_number}.ring.match.7.callerId">{$grandstream_distinctive_ringtone_name_7}</item>
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<item name="account.{$row.line_number}.ring.match.7.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.7.ringtone">{$grandstream_distinctive_ringtone_7}</item>
<!-- Match Incoming Caller ID. Matching Rule 8 --> <!-- Match Incoming Caller ID. Matching Rule 8 -->
<item name="account.{$row.line_number}.ring.match.8.callerId"/> <item name="account.{$row.line_number}.ring.match.8.callerId">{$grandstream_distinctive_ringtone_name_8}</item>
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<item name="account.{$row.line_number}.ring.match.8.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.8.ringtone">{$grandstream_distinctive_ringtone_8}</item>
<!-- Match Incoming Caller ID. Matching Rule 9 --> <!-- Match Incoming Caller ID. Matching Rule 9 -->
<item name="account.{$row.line_number}.ring.match.9.callerId"/> <item name="account.{$row.line_number}.ring.match.9.callerId">{$grandstream_distinctive_ringtone_name_9}</item>
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<item name="account.{$row.line_number}.ring.match.9.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.9.ringtone">{$grandstream_distinctive_ringtone_9}</item>
<!-- Match Incoming Caller ID. Matching Rule 10 --> <!-- Match Incoming Caller ID. Matching Rule 10 -->
<item name="account.{$row.line_number}.ring.match.10.callerId"/> <item name="account.{$row.line_number}.ring.match.10.callerId">{$grandstream_distinctive_ringtone_name_10}</item>
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<item name="account.{$row.line_number}.ring.match.10.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.10.ringtone">{$grandstream_distinctive_ringtone_10}</item>
<!-- Ring Timeout --> <!-- Ring Timeout -->
<!-- Number: 10 - 300 --> <!-- Number: 10 - 300 -->
@@ -665,21 +669,21 @@
<!-- #Enable Local Call Features. Default is Yes --> <!-- #Enable Local Call Features. Default is Yes -->
<!-- #Mandatory --> <!-- #Mandatory -->
<!-- No, Yes --> <!-- No, Yes -->
<item name="account.{$row.line_number}.featureCodes.callFeatures">Yes</item> <item name="account.{$row.line_number}.featureCodes.callFeatures">No</item>
<!-- DND Call Feature On --> <!-- DND Call Feature On -->
<item name="account.{$row.line_number}.featureCodes.dndOn"/> <item name="account.{$row.line_number}.featureCodes.dndOn">*78</item>
<!-- DND Call Feature Off --> <!-- DND Call Feature Off -->
<item name="account.{$row.line_number}.featureCodes.dndOff"/> <item name="account.{$row.line_number}.featureCodes.dndOff">*79</item>
<!-- #Call Forward Always - On --> <!-- #Call Forward Always - On -->
<!-- # String --> <!-- # String -->
<item name="account.{$row.line_number}.featureCodes.callForwardUnconditionallyOn"/> <item name="account.{$row.line_number}.featureCodes.callForwardUnconditionallyOn">*72</item>
<!-- #Call Forward Always - Off --> <!-- #Call Forward Always - Off -->
<!-- # String --> <!-- # String -->
<item name="account.{$row.line_number}.featureCodes.callForwardUnconditionallyOff"/> <item name="account.{$row.line_number}.featureCodes.callForwardUnconditionallyOff">*73</item>
<!-- #Call Forward Always- Target --> <!-- #Call Forward Always- Target -->
<!-- # String --> <!-- # String -->
@@ -903,12 +907,12 @@
<!-- # Enable Manual VLAN Configuration. Yes or No. --> <!-- # Enable Manual VLAN Configuration. Yes or No. -->
<!-- # Mandatory --> <!-- # Mandatory -->
<item name="network.port.eth.1.vlan.enable">Yes</item> <item name="network.port.eth.1.vlan.enable">{if $grandstream_lan_port_vlan == '0'}No{else}Yes{/if}</item>
<!-- # Layer 2 QoS. 802.1Q/VLAN Tag (VLAN classification for RTP). Default is 0 --> <!-- # Layer 2 QoS. 802.1Q/VLAN Tag (VLAN classification for RTP). Default is 0 -->
<!-- Layer 2 QoS 802.1Q/VLAN Tag (Ethernet) --> <!-- Layer 2 QoS 802.1Q/VLAN Tag (Ethernet) -->
<!-- Number: 0 - 4095 --> <!-- Number: 0 - 4095 -->
<item name="network.port.eth.1.vlan.tag">0</item> <item name="network.port.eth.1.vlan.tag">{$grandstream_lan_port_vlan}</item>
<!-- 802.1p Priority Value (Ethernet) --> <!-- 802.1p Priority Value (Ethernet) -->
<!-- Number: 0 - 7 --> <!-- Number: 0 - 7 -->
@@ -916,10 +920,14 @@
<!-- PC Port Mode --> <!-- PC Port Mode -->
<!-- Enabled, Disabled, Mirrored --> <!-- Enabled, Disabled, Mirrored -->
<item name="network.port.pc.mode">Enabled</item> {if isset($grandstream_pc_mode)}
<item name="network.port.pc.mode">{if isset($grandstream_pc_mode)}{$grandstream_pc_mode}{else}Enabled{/if}</item>
{else}
<item name="network.port.pc.mode">{if isset($grandstream_pc_port_vlan)}Enabled{else}Disabled{/if}</item>
{/if}
<!-- PC Port VLAN Tag --> <!-- PC Port VLAN Tag -->
<item name="network.port.pc.vlan.tag">0</item> <item name="network.port.pc.vlan.tag">{$grandstream_pc_port_vlan}</item>
<!-- PC Port Priority Value --> <!-- PC Port Priority Value -->
<item name="network.port.pc.vlan.priority">0</item> <item name="network.port.pc.vlan.priority">0</item>
@@ -1249,8 +1257,8 @@
<!-- TFTP, HTTP, HTTPS, FTP,FTPS --> <!-- TFTP, HTTP, HTTPS, FTP,FTPS -->
<item name="provisioning.firmware.protocol">HTTP</item> <item name="provisioning.firmware.protocol">HTTP</item>
<!-- Firmware Server Path --> <!-- Firmware Server Path -->
{if isset($grandstream_firmware_path) && isset($firmware_version)} {if isset($grandstream_firmware_path) && isset($grandstream_firmware_version)}
<item name="provisioning.firmware.serverPath">{$grandstream_firmware_path}/{$firmware_version}</item> <item name="provisioning.firmware.serverPath">{$grandstream_firmware_path}/{$grandstream_firmware_version}</item>
{elseif isset($grandstream_firmware_path)} {elseif isset($grandstream_firmware_path)}
<item name="provisioning.firmware.serverPath">{$grandstream_firmware_path}</item> <item name="provisioning.firmware.serverPath">{$grandstream_firmware_path}</item>
{else} {else}
@@ -1614,7 +1622,11 @@
<item name="sip.userNatIp"/> <item name="sip.userNatIp"/>
<!-- STUN Server --> <!-- STUN Server -->
<item name="network.stunServer"/> {if isset($grandstream_stun_server) }
<item name="network.stunServer">{$grandstream_stun_server}</item>
{else}
<item name="network.stunServer"></item>
{/if}
<!-- # Delay Registration. Default is 0. --> <!-- # Delay Registration. Default is 0. -->
<!-- # Number: 0 - 90 --> <!-- # Number: 0 - 90 -->
@@ -2192,7 +2204,7 @@
<item name="sip.showError">Yes</item> <item name="sip.showError">Yes</item>
<!-- # Enable Missed Call Notification. Yes or No --> <!-- # Enable Missed Call Notification. Yes or No -->
<item name="features.history.missedCallNotification">Yes</item> <item name="features.history.missedCallNotification">{$grandstream_missed_call_notification}</item>
<!-- # Enable Call Completion Service. Yes or No --> <!-- # Enable Call Completion Service. Yes or No -->
<item name="call.dial.callComplete.enable"/> <item name="call.dial.callComplete.enable"/>
@@ -2424,13 +2436,25 @@
<!-- ## Settings/Preferences / Audio Control --> <!-- ## Settings/Preferences / Audio Control -->
<!-- ############################################################################## --> <!-- ############################################################################## -->
<!-- # HEADSET Key Mode. DefaultMode, ToggleHeadsetOrSpeaker. --> <!-- # HEADSET Key Mode. DefaultMode, ToggleHeadsetOrSpeaker. -->
{if isset($grandstream_headset_key_mode)}
<item name="audio.headset.keyMode">{$grandstream_headset_key_mode}</item>
{else}
<item name="audio.headset.keyMode">DefaultMode</item> <item name="audio.headset.keyMode">DefaultMode</item>
{/if}
<!-- # Headset Type. Normal, PlantronicsEHS. --> <!-- # Headset Type. Normal, PlantronicsEHS. -->
{if isset($grandstream_headset_ringtone)}
<item name="audio.headset.ehs.ringtone">{$grandstream_headset_ringtone}</item>
{else}
<item name="audio.headset.ehs.ringtone">Normal</item> <item name="audio.headset.ehs.ringtone">Normal</item>
{/if}
<!-- # EHS Headset Ringtone. Normal, PlantronicsEHS. --> <!-- # EHS Headset Ringtone. Normal, PlantronicsEHS. -->
{if isset($grandstream_headset_type)}
<item name="audio.headset.type">{$grandstream_headset_type}</item>
{else}
<item name="audio.headset.type">Normal</item> <item name="audio.headset.type">Normal</item>
{/if}
<!-- # Always Ring Speaker. --> <!-- # Always Ring Speaker. -->
<!-- No - 0, Yes,both - 1, Yes,speaker only - 2 --> <!-- No - 0, Yes,both - 1, Yes,speaker only - 2 -->
@@ -2444,10 +2468,18 @@
<item name="audio.headset.txGain">0</item> <item name="audio.headset.txGain">0</item>
<!-- # Headset RX gain(dB). 1 - -6, 0 - 0, 2 - +6. Default is 0 --> <!-- # Headset RX gain(dB). 1 - -6, 0 - 0, 2 - +6. Default is 0 -->
{if isset($grandstream_headset_rx_gain)}
<item name="audio.headset.rxGain">{$grandstream_headset_rx_gain}</item>
{else}
<item name="audio.headset.rxGain">0</item> <item name="audio.headset.rxGain">0</item>
{/if}
<!-- # Handset TX gain(dB). 1 - -6, 0 - 0, 2 - +6. Default is 0 --> <!-- # Handset TX gain(dB). 1 - -6, 0 - 0, 2 - +6. Default is 0 -->
{if isset($grandstream_headset_tx_gain)}
<item name="audio.handset.txGain">{$grandstream_headset_tx_gain}</item>
{else}
<item name="audio.handset.txGain">0</item> <item name="audio.handset.txGain">0</item>
{/if}
<!-- ############################################################################## --> <!-- ############################################################################## -->
<!-- ## Settings/Preferences / Date and Time --> <!-- ## Settings/Preferences / Date and Time -->
@@ -2620,10 +2652,14 @@
<!-- # Screensaver Settings --> <!-- # Screensaver Settings -->
<!-- # Screensaver. No, Yes, OnIfNoVPKIsActive. --> <!-- # Screensaver. No, Yes, OnIfNoVPKIsActive. -->
{if isset($grandstream_screensaver_enable)}
<item name="lcd.screensaver.enable">{$grandstream_screensaver_enable}</item>
{else}
<item name="lcd.screensaver.enable">OnIfNoVPKIsActive</item> <item name="lcd.screensaver.enable">OnIfNoVPKIsActive</item>
{/if}
<!-- # Screensaver Source. Default, USB, Download. --> <!-- # Screensaver Source. Default, USB, Download. -->
<item name="lcd.screensaver.source"/> <item name="lcd.screensaver.source">{$grandstream_screensaver_source}</item>
<!-- # Show Date and Time. Yes or No --> <!-- # Show Date and Time. Yes or No -->
<item name="lcd.screensaver.showDateTime">Yes</item> <item name="lcd.screensaver.showDateTime">Yes</item>
@@ -2950,6 +2986,7 @@
{foreach $keys['line'] as $row} {foreach $keys['line'] as $row}
{$line=$row.device_key_id} {$line=$row.device_key_id}
{if $row.device_key_id < 9}
<!-- ###################################################################################### --> <!-- ###################################################################################### -->
<!-- # VPK {$row.device_key_id} --> <!-- # VPK {$row.device_key_id} -->
<!-- ###################################################################################### --> <!-- ###################################################################################### -->
@@ -2970,7 +3007,39 @@
<!-- # Locked: uncheck, check. --> <!-- # Locked: uncheck, check. -->
<!--<item name="pks.vpk.{$row.device_key_id}.lockMode"></item>--> <!--<item name="pks.vpk.{$row.device_key_id}.lockMode"></item>-->
{/if}
{/foreach}
<!-- # Key Mode for dynamic VPK. -->
{assign var=key_types value=["none"=>-1,"speed dial"=>0, "blf"=>1, "presence watcher"=>2,
"eventlist blf"=>3,"speed dial active"=>4,"dial dtmf"=>5,"voicemail"=>6,"call return"=>7,
"transfer"=>8,"call park"=>9,"intercom"=>10,"ldap search"=>11,"conference"=>12,"multicast paging"=>13,
"record"=>14,"call log"=>15,"monitored call park"=>16,"menu"=>17]}
{foreach $keys['line'] as $row}
{$line=$row.device_key_id}
{if $row.device_key_id > 8}
<!-- ###################################################################################### -->
<!-- # VPK {$row.device_key_id} -->
<!-- ###################################################################################### -->
<!-- # Key Mode -->
<item name="pks.vpk.{$row.device_key_id}.keyMode">{$key_types[$keys.line.$line.device_key_type]}</item>
<!--<item name="pks.vpk.{$row.device_key_id}.keyMode">-1</item>-->
<!-- # Account. 0 - Account1, 1 - Account2, 2 - Account3, 3 - Account 4, 4 - Account 5, 5 - Account 6 -->
<item name="pks.vpk.{$row.device_key_id}.account">{$row.device_key_line}</item>
<!-- # Description. Max length allowed is 32 characters. -->
<!-- # String -->
<item name="pks.vpk.{$row.device_key_id}.description">{$row.device_key_label}</item>
<!-- # Value. Max length allowed is 64 characters. -->
<!-- # String -->
<item name="pks.vpk.{$row.device_key_id}.value">{$row.device_key_value}</item>
<!-- # Locked: uncheck, check. -->
<!--<item name="pks.vpk.{$row.device_key_id}.lockMode"></item>-->
{/if}
{/foreach} {/foreach}
<!-- ############################################################################## --> <!-- ############################################################################## -->
@@ -33,12 +33,12 @@
<!-- SIP Server --> <!-- SIP Server -->
{if isset($row.server_address_primary)} {if isset($row.server_address_primary)}
<item name="account.{$row.line_number}.sip.server.1.address">{$row.server_address_primary}</item> <item name="account.{$row.line_number}.sip.server.1.address">{$row.server_address_primary}:{$row.sip_port}</item>
{else} {else}
<item name="account.{$row.line_number}.sip.server.1.address">{$row.server_address}</item> <item name="account.{$row.line_number}.sip.server.1.address">{$row.server_address}:{$row.sip_port}</item>
{/if} {/if}
<!-- Secondary SIP Server --> <!-- Secondary SIP Server -->
<item name="account.{$row.line_number}.sip.server.2.address">{$row.server_address_secondary}</item> <item name="account.{$row.line_number}.sip.server.2.address">{$row.server_address_secondary}:{$row.sip_port}</item>
<!-- Outbound Proxy --> <!-- Outbound Proxy -->
{if $row.sip_transport != 'dns srv' && isset($row.outbound_proxy_primary)} {if $row.sip_transport != 'dns srv' && isset($row.outbound_proxy_primary)}
@@ -56,9 +56,9 @@
<!-- BLF Server --> <!-- BLF Server -->
{if isset($row.server_address_primary)} {if isset($row.server_address_primary)}
<item name="account.{$row.line_number}.sip.blf.server">{$row.server_address_primary}</item> <item name="account.{$row.line_number}.sip.blf.server">{$row.server_address_primary}:{$row.sip_port}</item>
{else} {else}
<item name="account.{$row.line_number}.sip.blf.server">{$row.server_address}</item> <item name="account.{$row.line_number}.sip.blf.server">{$row.server_address}:{$row.sip_port}</item>
{/if} {/if}
<!-- SIP User ID --> <!-- SIP User ID -->
@@ -107,7 +107,11 @@
<!-- NAT Traversal --> <!-- NAT Traversal -->
<!-- No, STUN, KeepAlive, UPnP, Auto, VPN --> <!-- No, STUN, KeepAlive, UPnP, Auto, VPN -->
{if isset($grandstream_nat_traversal)}
<item name="account.{$row.line_number}.network.natTraversal">{$grandstream_nat_traversal}</item>
{else}
<item name="account.{$row.line_number}.network.natTraversal">Auto</item> <item name="account.{$row.line_number}.network.natTraversal">Auto</item>
{/if}
<!-- Support Rport (RFC 3581) --> <!-- Support Rport (RFC 3581) -->
<!-- Yes, No --> <!-- Yes, No -->
@@ -136,7 +140,7 @@
<!-- Register Expiration (m) --> <!-- Register Expiration (m) -->
<!-- Number: 0 - 64800 --> <!-- Number: 0 - 64800 -->
<item name="account.{$row.line_number}.sip.registerExpiration">15</item> <item name="account.{$row.line_number}.sip.registerExpiration">{$row.register_expires}</item>
<!-- Subscribe Expiration (m) --> <!-- Subscribe Expiration (m) -->
<!-- Number: 0 - 64800 --> <!-- Number: 0 - 64800 -->
@@ -572,64 +576,64 @@
<item name="account.{$row.line_number}.ring.ringtone">5</item> <item name="account.{$row.line_number}.ring.ringtone">5</item>
<!-- Matching Incoming Caller ID. Matching Rule 1 --> <!-- Matching Incoming Caller ID. Matching Rule 1 -->
<item name="account.{$row.line_number}.ring.match.1.callerId"/> <item name="account.{$row.line_number}.ring.match.1.callerId">{$grandstream_distinctive_ringtone_name_1}</item>
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<item name="account.{$row.line_number}.ring.match.1.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.1.ringtone">{$grandstream_distinctive_ringtone_1}</item>
<!-- Match Incoming Caller ID. Matching Rule 2 --> <!-- Match Incoming Caller ID. Matching Rule 2 -->
<item name="account.{$row.line_number}.ring.match.2.callerId"/> <item name="account.{$row.line_number}.ring.match.2.callerId">{$grandstream_distinctive_ringtone_name_2}</item>
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<item name="account.{$row.line_number}.ring.match.2.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.2.ringtone">{$grandstream_distinctive_ringtone_2}</item>
<!-- Match Incoming Caller ID. Matching Rule 3 --> <!-- Match Incoming Caller ID. Matching Rule 3 -->
<item name="account.{$row.line_number}.ring.match.3.callerId"/> <item name="account.{$row.line_number}.ring.match.3.callerId">{$grandstream_distinctive_ringtone_name_3}</item>
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<item name="account.{$row.line_number}.ring.match.3.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.3.ringtone">{$grandstream_distinctive_ringtone_3}</item>
<!-- Match Incoming Caller ID. Matching Rule 4 --> <!-- Match Incoming Caller ID. Matching Rule 4 -->
<item name="account.{$row.line_number}.ring.match.4.callerId"/> <item name="account.{$row.line_number}.ring.match.4.callerId">{$grandstream_distinctive_ringtone_name_4}</item>
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<item name="account.{$row.line_number}.ring.match.4.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.4.ringtone">{$grandstream_distinctive_ringtone_4}</item>
<!-- Match Incoming Caller ID. Matching Rule 5 --> <!-- Match Incoming Caller ID. Matching Rule 5 -->
<item name="account.{$row.line_number}.ring.match.5.callerId"/> <item name="account.{$row.line_number}.ring.match.5.callerId">{$grandstream_distinctive_ringtone_name_5}</item>
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<item name="account.{$row.line_number}.ring.match.5.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.5.ringtone">{$grandstream_distinctive_ringtone_5}</item>
<!-- Match Incoming Caller ID. Matching Rule 6 --> <!-- Match Incoming Caller ID. Matching Rule 6 -->
<item name="account.{$row.line_number}.ring.match.6.callerId"/> <item name="account.{$row.line_number}.ring.match.6.callerId">{$grandstream_distinctive_ringtone_name_6}</item>
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<item name="account.{$row.line_number}.ring.match.6.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.6.ringtone">{$grandstream_distinctive_ringtone_6}</item>
<!-- Match Incoming Caller ID. Matching Rule 7 --> <!-- Match Incoming Caller ID. Matching Rule 7 -->
<item name="account.{$row.line_number}.ring.match.7.callerId"/> <item name="account.{$row.line_number}.ring.match.7.callerId">{$grandstream_distinctive_ringtone_name_7}</item>
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<item name="account.{$row.line_number}.ring.match.7.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.7.ringtone">{$grandstream_distinctive_ringtone_7}</item>
<!-- Match Incoming Caller ID. Matching Rule 8 --> <!-- Match Incoming Caller ID. Matching Rule 8 -->
<item name="account.{$row.line_number}.ring.match.8.callerId"/> <item name="account.{$row.line_number}.ring.match.8.callerId">{$grandstream_distinctive_ringtone_name_8}</item>
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<item name="account.{$row.line_number}.ring.match.8.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.8.ringtone">{$grandstream_distinctive_ringtone_8}</item>
<!-- Match Incoming Caller ID. Matching Rule 9 --> <!-- Match Incoming Caller ID. Matching Rule 9 -->
<item name="account.{$row.line_number}.ring.match.9.callerId"/> <item name="account.{$row.line_number}.ring.match.9.callerId">{$grandstream_distinctive_ringtone_name_9}</item>
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<item name="account.{$row.line_number}.ring.match.9.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.9.ringtone">{$grandstream_distinctive_ringtone_9}</item>
<!-- Match Incoming Caller ID. Matching Rule 10 --> <!-- Match Incoming Caller ID. Matching Rule 10 -->
<item name="account.{$row.line_number}.ring.match.10.callerId"/> <item name="account.{$row.line_number}.ring.match.10.callerId">{$grandstream_distinctive_ringtone_name_10}</item>
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<item name="account.{$row.line_number}.ring.match.10.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.10.ringtone">{$grandstream_distinctive_ringtone_10}</item>
<!-- Ring Timeout --> <!-- Ring Timeout -->
<!-- Number: 10 - 300 --> <!-- Number: 10 - 300 -->
@@ -665,21 +669,21 @@
<!-- #Enable Local Call Features. Default is Yes --> <!-- #Enable Local Call Features. Default is Yes -->
<!-- #Mandatory --> <!-- #Mandatory -->
<!-- No, Yes --> <!-- No, Yes -->
<item name="account.{$row.line_number}.featureCodes.callFeatures">Yes</item> <item name="account.{$row.line_number}.featureCodes.callFeatures">No</item>
<!-- DND Call Feature On --> <!-- DND Call Feature On -->
<item name="account.{$row.line_number}.featureCodes.dndOn"/> <item name="account.{$row.line_number}.featureCodes.dndOn">*78</item>
<!-- DND Call Feature Off --> <!-- DND Call Feature Off -->
<item name="account.{$row.line_number}.featureCodes.dndOff"/> <item name="account.{$row.line_number}.featureCodes.dndOff">*79</item>
<!-- #Call Forward Always - On --> <!-- #Call Forward Always - On -->
<!-- # String --> <!-- # String -->
<item name="account.{$row.line_number}.featureCodes.callForwardUnconditionallyOn"/> <item name="account.{$row.line_number}.featureCodes.callForwardUnconditionallyOn">*72</item>
<!-- #Call Forward Always - Off --> <!-- #Call Forward Always - Off -->
<!-- # String --> <!-- # String -->
<item name="account.{$row.line_number}.featureCodes.callForwardUnconditionallyOff"/> <item name="account.{$row.line_number}.featureCodes.callForwardUnconditionallyOff">*73</item>
<!-- #Call Forward Always- Target --> <!-- #Call Forward Always- Target -->
<!-- # String --> <!-- # String -->
@@ -903,12 +907,13 @@
<!-- # Enable Manual VLAN Configuration. Yes or No. --> <!-- # Enable Manual VLAN Configuration. Yes or No. -->
<!-- # Mandatory --> <!-- # Mandatory -->
<item name="network.port.eth.1.vlan.enable">Yes</item> <item name="network.port.eth.1.vlan.enable">{if $grandstream_lan_port_vlan == '0'}No{else}Yes{/if}</item>
<!-- # Layer 2 QoS. 802.1Q/VLAN Tag (VLAN classification for RTP). Default is 0 --> <!-- # Layer 2 QoS. 802.1Q/VLAN Tag (VLAN classification for RTP). Default is 0 -->
<!-- Layer 2 QoS 802.1Q/VLAN Tag (Ethernet) --> <!-- Layer 2 QoS 802.1Q/VLAN Tag (Ethernet) -->
<!-- Number: 0 - 4095 --> <!-- Number: 0 - 4095 -->
<item name="network.port.eth.1.vlan.tag">0</item> <item name="network.port.eth.1.vlan.tag">{$grandstream_lan_port_vlan}</item>
<!-- 802.1p Priority Value (Ethernet) --> <!-- 802.1p Priority Value (Ethernet) -->
<!-- Number: 0 - 7 --> <!-- Number: 0 - 7 -->
@@ -916,10 +921,14 @@
<!-- PC Port Mode --> <!-- PC Port Mode -->
<!-- Enabled, Disabled, Mirrored --> <!-- Enabled, Disabled, Mirrored -->
<item name="network.port.pc.mode">Enabled</item> {if isset($grandstream_pc_mode)}
<item name="network.port.pc.mode">{if isset($grandstream_pc_mode)}{$grandstream_pc_mode}{else}Enabled{/if}</item>
{else}
<item name="network.port.pc.mode">{if isset($grandstream_pc_port_vlan)}Enabled{else}Disabled{/if}</item>
{/if}
<!-- PC Port VLAN Tag --> <!-- PC Port VLAN Tag -->
<item name="network.port.pc.vlan.tag">0</item> <item name="network.port.pc.vlan.tag">{$grandstream_pc_port_vlan}</item>
<!-- PC Port Priority Value --> <!-- PC Port Priority Value -->
<item name="network.port.pc.vlan.priority">0</item> <item name="network.port.pc.vlan.priority">0</item>
@@ -1249,8 +1258,8 @@
<!-- TFTP, HTTP, HTTPS, FTP,FTPS --> <!-- TFTP, HTTP, HTTPS, FTP,FTPS -->
<item name="provisioning.firmware.protocol">HTTP</item> <item name="provisioning.firmware.protocol">HTTP</item>
<!-- Firmware Server Path --> <!-- Firmware Server Path -->
{if isset($grandstream_firmware_path) && isset($firmware_version)} {if isset($grandstream_firmware_path) && isset($grandstream_firmware_version)}
<item name="provisioning.firmware.serverPath">{$grandstream_firmware_path}/{$firmware_version}</item> <item name="provisioning.firmware.serverPath">{$grandstream_firmware_path}/{$grandstream_firmware_version}</item>
{elseif isset($grandstream_firmware_path)} {elseif isset($grandstream_firmware_path)}
<item name="provisioning.firmware.serverPath">{$grandstream_firmware_path}</item> <item name="provisioning.firmware.serverPath">{$grandstream_firmware_path}</item>
{else} {else}
@@ -1614,7 +1623,11 @@
<item name="sip.userNatIp"/> <item name="sip.userNatIp"/>
<!-- STUN Server --> <!-- STUN Server -->
<item name="network.stunServer"/> {if isset($grandstream_stun_server) }
<item name="network.stunServer">{$grandstream_stun_server}</item>
{else}
<item name="network.stunServer"></item>
{/if}
<!-- # Delay Registration. Default is 0. --> <!-- # Delay Registration. Default is 0. -->
<!-- # Number: 0 - 90 --> <!-- # Number: 0 - 90 -->
@@ -2192,7 +2205,7 @@
<item name="sip.showError">Yes</item> <item name="sip.showError">Yes</item>
<!-- # Enable Missed Call Notification. Yes or No --> <!-- # Enable Missed Call Notification. Yes or No -->
<item name="features.history.missedCallNotification">Yes</item> <item name="features.history.missedCallNotification">{$grandstream_missed_call_notification}</item>
<!-- # Enable Call Completion Service. Yes or No --> <!-- # Enable Call Completion Service. Yes or No -->
<item name="call.dial.callComplete.enable"/> <item name="call.dial.callComplete.enable"/>
@@ -2424,13 +2437,25 @@
<!-- ## Settings/Preferences / Audio Control --> <!-- ## Settings/Preferences / Audio Control -->
<!-- ############################################################################## --> <!-- ############################################################################## -->
<!-- # HEADSET Key Mode. DefaultMode, ToggleHeadsetOrSpeaker. --> <!-- # HEADSET Key Mode. DefaultMode, ToggleHeadsetOrSpeaker. -->
{if isset($grandstream_headset_key_mode)}
<item name="audio.headset.keyMode">{$grandstream_headset_key_mode}</item>
{else}
<item name="audio.headset.keyMode">DefaultMode</item> <item name="audio.headset.keyMode">DefaultMode</item>
{/if}
<!-- # Headset Type. Normal, PlantronicsEHS. --> <!-- # Headset Type. Normal, PlantronicsEHS. -->
{if isset($grandstream_headset_ringtone)}
<item name="audio.headset.ehs.ringtone">{$grandstream_headset_ringtone}</item>
{else}
<item name="audio.headset.ehs.ringtone">Normal</item> <item name="audio.headset.ehs.ringtone">Normal</item>
{/if}
<!-- # EHS Headset Ringtone. Normal, PlantronicsEHS. --> <!-- # EHS Headset Ringtone. Normal, PlantronicsEHS. -->
{if isset($grandstream_headset_type)}
<item name="audio.headset.type">{$grandstream_headset_type}</item>
{else}
<item name="audio.headset.type">Normal</item> <item name="audio.headset.type">Normal</item>
{/if}
<!-- # Always Ring Speaker. --> <!-- # Always Ring Speaker. -->
<!-- No - 0, Yes,both - 1, Yes,speaker only - 2 --> <!-- No - 0, Yes,both - 1, Yes,speaker only - 2 -->
@@ -2444,10 +2469,18 @@
<item name="audio.headset.txGain">0</item> <item name="audio.headset.txGain">0</item>
<!-- # Headset RX gain(dB). 1 - -6, 0 - 0, 2 - +6. Default is 0 --> <!-- # Headset RX gain(dB). 1 - -6, 0 - 0, 2 - +6. Default is 0 -->
{if isset($grandstream_headset_rx_gain)}
<item name="audio.headset.rxGain">{$grandstream_headset_rx_gain}</item>
{else}
<item name="audio.headset.rxGain">0</item> <item name="audio.headset.rxGain">0</item>
{/if}
<!-- # Handset TX gain(dB). 1 - -6, 0 - 0, 2 - +6. Default is 0 --> <!-- # Handset TX gain(dB). 1 - -6, 0 - 0, 2 - +6. Default is 0 -->
{if isset($grandstream_headset_tx_gain)}
<item name="audio.handset.txGain">{$grandstream_headset_tx_gain}</item>
{else}
<item name="audio.handset.txGain">0</item> <item name="audio.handset.txGain">0</item>
{/if}
<!-- ############################################################################## --> <!-- ############################################################################## -->
<!-- ## Settings/Preferences / Date and Time --> <!-- ## Settings/Preferences / Date and Time -->
@@ -2620,10 +2653,14 @@
<!-- # Screensaver Settings --> <!-- # Screensaver Settings -->
<!-- # Screensaver. No, Yes, OnIfNoVPKIsActive. --> <!-- # Screensaver. No, Yes, OnIfNoVPKIsActive. -->
{if isset($grandstream_screensaver_enable)}
<item name="lcd.screensaver.enable">{$grandstream_screensaver_enable}</item>
{else}
<item name="lcd.screensaver.enable">OnIfNoVPKIsActive</item> <item name="lcd.screensaver.enable">OnIfNoVPKIsActive</item>
{/if}
<!-- # Screensaver Source. Default, USB, Download. --> <!-- # Screensaver Source. Default, USB, Download. -->
<item name="lcd.screensaver.source"/> <item name="lcd.screensaver.source">{$grandstream_screensaver_source}</item>
<!-- # Show Date and Time. Yes or No --> <!-- # Show Date and Time. Yes or No -->
<item name="lcd.screensaver.showDateTime">Yes</item> <item name="lcd.screensaver.showDateTime">Yes</item>
@@ -2950,6 +2987,7 @@
{foreach $keys['line'] as $row} {foreach $keys['line'] as $row}
{$line=$row.device_key_id} {$line=$row.device_key_id}
{if $row.device_key_id < 5}
<!-- ###################################################################################### --> <!-- ###################################################################################### -->
<!-- # VPK {$row.device_key_id} --> <!-- # VPK {$row.device_key_id} -->
<!-- ###################################################################################### --> <!-- ###################################################################################### -->
@@ -2970,7 +3008,39 @@
<!-- # Locked: uncheck, check. --> <!-- # Locked: uncheck, check. -->
<!--<item name="pks.vpk.{$row.device_key_id}.lockMode"></item>--> <!--<item name="pks.vpk.{$row.device_key_id}.lockMode"></item>-->
{/if}
{/foreach}
<!-- # Key Mode for dynamic VPK. -->
{assign var=key_types value=["none"=>-1,"speed dial"=>0, "blf"=>1, "presence watcher"=>2,
"eventlist blf"=>3,"speed dial active"=>4,"dial dtmf"=>5,"voicemail"=>6,"call return"=>7,
"transfer"=>8,"call park"=>9,"intercom"=>10,"ldap search"=>11,"conference"=>12,"multicast paging"=>13,
"record"=>14,"call log"=>15,"monitored call park"=>16,"menu"=>17]}
{foreach $keys['line'] as $row}
{$line=$row.device_key_id}
{if $row.device_key_id > 4}
<!-- ###################################################################################### -->
<!-- # VPK {$row.device_key_id} -->
<!-- ###################################################################################### -->
<!-- # Key Mode -->
<item name="pks.vpk.{$row.device_key_id}.keyMode">{$key_types[$keys.line.$line.device_key_type]}</item>
<!--<item name="pks.vpk.{$row.device_key_id}.keyMode">-1</item>-->
<!-- # Account. 0 - Account1, 1 - Account2, 2 - Account3, 3 - Account 4, 4 - Account 5, 5 - Account 6 -->
<item name="pks.vpk.{$row.device_key_id}.account">{$row.device_key_line}</item>
<!-- # Description. Max length allowed is 32 characters. -->
<!-- # String -->
<item name="pks.vpk.{$row.device_key_id}.description">{$row.device_key_label}</item>
<!-- # Value. Max length allowed is 64 characters. -->
<!-- # String -->
<item name="pks.vpk.{$row.device_key_id}.value">{$row.device_key_value}</item>
<!-- # Locked: uncheck, check. -->
<!--<item name="pks.vpk.{$row.device_key_id}.lockMode"></item>-->
{/if}
{/foreach} {/foreach}
<!-- ############################################################################## --> <!-- ############################################################################## -->
@@ -33,12 +33,12 @@
<!-- SIP Server --> <!-- SIP Server -->
{if isset($row.server_address_primary)} {if isset($row.server_address_primary)}
<item name="account.{$row.line_number}.sip.server.1.address">{$row.server_address_primary}</item> <item name="account.{$row.line_number}.sip.server.1.address">{$row.server_address_primary}:{$row.sip_port}</item>
{else} {else}
<item name="account.{$row.line_number}.sip.server.1.address">{$row.server_address}</item> <item name="account.{$row.line_number}.sip.server.1.address">{$row.server_address}:{$row.sip_port}</item>
{/if} {/if}
<!-- Secondary SIP Server --> <!-- Secondary SIP Server -->
<item name="account.{$row.line_number}.sip.server.2.address">{$row.server_address_secondary}</item> <item name="account.{$row.line_number}.sip.server.2.address">{$row.server_address_secondary}:{$row.sip_port}</item>
<!-- Outbound Proxy --> <!-- Outbound Proxy -->
{if $row.sip_transport != 'dns srv' && isset($row.outbound_proxy_primary)} {if $row.sip_transport != 'dns srv' && isset($row.outbound_proxy_primary)}
@@ -56,9 +56,9 @@
<!-- BLF Server --> <!-- BLF Server -->
{if isset($row.server_address_primary)} {if isset($row.server_address_primary)}
<item name="account.{$row.line_number}.sip.blf.server">{$row.server_address_primary}</item> <item name="account.{$row.line_number}.sip.blf.server">{$row.server_address_primary}:{$row.sip_port}</item>
{else} {else}
<item name="account.{$row.line_number}.sip.blf.server">{$row.server_address}</item> <item name="account.{$row.line_number}.sip.blf.server">{$row.server_address}:{$row.sip_port}</item>
{/if} {/if}
<!-- SIP User ID --> <!-- SIP User ID -->
@@ -107,7 +107,11 @@
<!-- NAT Traversal --> <!-- NAT Traversal -->
<!-- No, STUN, KeepAlive, UPnP, Auto, VPN --> <!-- No, STUN, KeepAlive, UPnP, Auto, VPN -->
{if isset($grandstream_nat_traversal)}
<item name="account.{$row.line_number}.network.natTraversal">{$grandstream_nat_traversal}</item>
{else}
<item name="account.{$row.line_number}.network.natTraversal">Auto</item> <item name="account.{$row.line_number}.network.natTraversal">Auto</item>
{/if}
<!-- Support Rport (RFC 3581) --> <!-- Support Rport (RFC 3581) -->
<!-- Yes, No --> <!-- Yes, No -->
@@ -136,7 +140,7 @@
<!-- Register Expiration (m) --> <!-- Register Expiration (m) -->
<!-- Number: 0 - 64800 --> <!-- Number: 0 - 64800 -->
<item name="account.{$row.line_number}.sip.registerExpiration">15</item> <item name="account.{$row.line_number}.sip.registerExpiration">{$row.register_expires}</item>
<!-- Subscribe Expiration (m) --> <!-- Subscribe Expiration (m) -->
<!-- Number: 0 - 64800 --> <!-- Number: 0 - 64800 -->
@@ -572,64 +576,64 @@
<item name="account.{$row.line_number}.ring.ringtone">5</item> <item name="account.{$row.line_number}.ring.ringtone">5</item>
<!-- Matching Incoming Caller ID. Matching Rule 1 --> <!-- Matching Incoming Caller ID. Matching Rule 1 -->
<item name="account.{$row.line_number}.ring.match.1.callerId"/> <item name="account.{$row.line_number}.ring.match.1.callerId">{$grandstream_distinctive_ringtone_name_1}</item>
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<item name="account.{$row.line_number}.ring.match.1.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.1.ringtone">{$grandstream_distinctive_ringtone_1}</item>
<!-- Match Incoming Caller ID. Matching Rule 2 --> <!-- Match Incoming Caller ID. Matching Rule 2 -->
<item name="account.{$row.line_number}.ring.match.2.callerId"/> <item name="account.{$row.line_number}.ring.match.2.callerId">{$grandstream_distinctive_ringtone_name_2}</item>
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<item name="account.{$row.line_number}.ring.match.2.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.2.ringtone">{$grandstream_distinctive_ringtone_2}</item>
<!-- Match Incoming Caller ID. Matching Rule 3 --> <!-- Match Incoming Caller ID. Matching Rule 3 -->
<item name="account.{$row.line_number}.ring.match.3.callerId"/> <item name="account.{$row.line_number}.ring.match.3.callerId">{$grandstream_distinctive_ringtone_name_3}</item>
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<item name="account.{$row.line_number}.ring.match.3.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.3.ringtone">{$grandstream_distinctive_ringtone_3}</item>
<!-- Match Incoming Caller ID. Matching Rule 4 --> <!-- Match Incoming Caller ID. Matching Rule 4 -->
<item name="account.{$row.line_number}.ring.match.4.callerId"/> <item name="account.{$row.line_number}.ring.match.4.callerId">{$grandstream_distinctive_ringtone_name_4}</item>
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<item name="account.{$row.line_number}.ring.match.4.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.4.ringtone">{$grandstream_distinctive_ringtone_4}</item>
<!-- Match Incoming Caller ID. Matching Rule 5 --> <!-- Match Incoming Caller ID. Matching Rule 5 -->
<item name="account.{$row.line_number}.ring.match.5.callerId"/> <item name="account.{$row.line_number}.ring.match.5.callerId">{$grandstream_distinctive_ringtone_name_5}</item>
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<item name="account.{$row.line_number}.ring.match.5.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.5.ringtone">{$grandstream_distinctive_ringtone_5}</item>
<!-- Match Incoming Caller ID. Matching Rule 6 --> <!-- Match Incoming Caller ID. Matching Rule 6 -->
<item name="account.{$row.line_number}.ring.match.6.callerId"/> <item name="account.{$row.line_number}.ring.match.6.callerId">{$grandstream_distinctive_ringtone_name_6}</item>
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<item name="account.{$row.line_number}.ring.match.6.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.6.ringtone">{$grandstream_distinctive_ringtone_6}</item>
<!-- Match Incoming Caller ID. Matching Rule 7 --> <!-- Match Incoming Caller ID. Matching Rule 7 -->
<item name="account.{$row.line_number}.ring.match.7.callerId"/> <item name="account.{$row.line_number}.ring.match.7.callerId">{$grandstream_distinctive_ringtone_name_7}</item>
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<item name="account.{$row.line_number}.ring.match.7.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.7.ringtone">{$grandstream_distinctive_ringtone_7}</item>
<!-- Match Incoming Caller ID. Matching Rule 8 --> <!-- Match Incoming Caller ID. Matching Rule 8 -->
<item name="account.{$row.line_number}.ring.match.8.callerId"/> <item name="account.{$row.line_number}.ring.match.8.callerId">{$grandstream_distinctive_ringtone_name_8}</item>
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<item name="account.{$row.line_number}.ring.match.8.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.8.ringtone">{$grandstream_distinctive_ringtone_8}</item>
<!-- Match Incoming Caller ID. Matching Rule 9 --> <!-- Match Incoming Caller ID. Matching Rule 9 -->
<item name="account.{$row.line_number}.ring.match.9.callerId"/> <item name="account.{$row.line_number}.ring.match.9.callerId">{$grandstream_distinctive_ringtone_name_9}</item>
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<item name="account.{$row.line_number}.ring.match.9.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.9.ringtone">{$grandstream_distinctive_ringtone_9}</item>
<!-- Match Incoming Caller ID. Matching Rule 10 --> <!-- Match Incoming Caller ID. Matching Rule 10 -->
<item name="account.{$row.line_number}.ring.match.10.callerId"/> <item name="account.{$row.line_number}.ring.match.10.callerId">{$grandstream_distinctive_ringtone_name_10}</item>
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<item name="account.{$row.line_number}.ring.match.10.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.10.ringtone">{$grandstream_distinctive_ringtone_10}</item>
<!-- Ring Timeout --> <!-- Ring Timeout -->
<!-- Number: 10 - 300 --> <!-- Number: 10 - 300 -->
@@ -665,21 +669,21 @@
<!-- #Enable Local Call Features. Default is Yes --> <!-- #Enable Local Call Features. Default is Yes -->
<!-- #Mandatory --> <!-- #Mandatory -->
<!-- No, Yes --> <!-- No, Yes -->
<item name="account.{$row.line_number}.featureCodes.callFeatures">Yes</item> <item name="account.{$row.line_number}.featureCodes.callFeatures">No</item>
<!-- DND Call Feature On --> <!-- DND Call Feature On -->
<item name="account.{$row.line_number}.featureCodes.dndOn"/> <item name="account.{$row.line_number}.featureCodes.dndOn">*78</item>
<!-- DND Call Feature Off --> <!-- DND Call Feature Off -->
<item name="account.{$row.line_number}.featureCodes.dndOff"/> <item name="account.{$row.line_number}.featureCodes.dndOff">*79</item>
<!-- #Call Forward Always - On --> <!-- #Call Forward Always - On -->
<!-- # String --> <!-- # String -->
<item name="account.{$row.line_number}.featureCodes.callForwardUnconditionallyOn"/> <item name="account.{$row.line_number}.featureCodes.callForwardUnconditionallyOn">*72</item>
<!-- #Call Forward Always - Off --> <!-- #Call Forward Always - Off -->
<!-- # String --> <!-- # String -->
<item name="account.{$row.line_number}.featureCodes.callForwardUnconditionallyOff"/> <item name="account.{$row.line_number}.featureCodes.callForwardUnconditionallyOff">*73</item>
<!-- #Call Forward Always- Target --> <!-- #Call Forward Always- Target -->
<!-- # String --> <!-- # String -->
@@ -903,12 +907,13 @@
<!-- # Enable Manual VLAN Configuration. Yes or No. --> <!-- # Enable Manual VLAN Configuration. Yes or No. -->
<!-- # Mandatory --> <!-- # Mandatory -->
<item name="network.port.eth.1.vlan.enable">Yes</item> <item name="network.port.eth.1.vlan.enable">{if $grandstream_lan_port_vlan == '0'}No{else}Yes{/if}</item>
<!-- # Layer 2 QoS. 802.1Q/VLAN Tag (VLAN classification for RTP). Default is 0 --> <!-- # Layer 2 QoS. 802.1Q/VLAN Tag (VLAN classification for RTP). Default is 0 -->
<!-- Layer 2 QoS 802.1Q/VLAN Tag (Ethernet) --> <!-- Layer 2 QoS 802.1Q/VLAN Tag (Ethernet) -->
<!-- Number: 0 - 4095 --> <!-- Number: 0 - 4095 -->
<item name="network.port.eth.1.vlan.tag">0</item> <item name="network.port.eth.1.vlan.tag">{$grandstream_lan_port_vlan}</item>
<!-- 802.1p Priority Value (Ethernet) --> <!-- 802.1p Priority Value (Ethernet) -->
<!-- Number: 0 - 7 --> <!-- Number: 0 - 7 -->
@@ -916,10 +921,14 @@
<!-- PC Port Mode --> <!-- PC Port Mode -->
<!-- Enabled, Disabled, Mirrored --> <!-- Enabled, Disabled, Mirrored -->
<item name="network.port.pc.mode">Enabled</item> {if isset($grandstream_pc_mode)}
<item name="network.port.pc.mode">{if isset($grandstream_pc_mode)}{$grandstream_pc_mode}{else}Enabled{/if}</item>
{else}
<item name="network.port.pc.mode">{if isset($grandstream_pc_port_vlan)}Enabled{else}Disabled{/if}</item>
{/if}
<!-- PC Port VLAN Tag --> <!-- PC Port VLAN Tag -->
<item name="network.port.pc.vlan.tag">0</item> <item name="network.port.pc.vlan.tag">{$grandstream_pc_port_vlan}</item>
<!-- PC Port Priority Value --> <!-- PC Port Priority Value -->
<item name="network.port.pc.vlan.priority">0</item> <item name="network.port.pc.vlan.priority">0</item>
@@ -1249,8 +1258,8 @@
<!-- TFTP, HTTP, HTTPS, FTP,FTPS --> <!-- TFTP, HTTP, HTTPS, FTP,FTPS -->
<item name="provisioning.firmware.protocol">HTTP</item> <item name="provisioning.firmware.protocol">HTTP</item>
<!-- Firmware Server Path --> <!-- Firmware Server Path -->
{if isset($grandstream_firmware_path) && isset($firmware_version)} {if isset($grandstream_firmware_path) && isset($grandstream_firmware_version)}
<item name="provisioning.firmware.serverPath">{$grandstream_firmware_path}/{$firmware_version}</item> <item name="provisioning.firmware.serverPath">{$grandstream_firmware_path}/{$grandstream_firmware_version}</item>
{elseif isset($grandstream_firmware_path)} {elseif isset($grandstream_firmware_path)}
<item name="provisioning.firmware.serverPath">{$grandstream_firmware_path}</item> <item name="provisioning.firmware.serverPath">{$grandstream_firmware_path}</item>
{else} {else}
@@ -1614,7 +1623,11 @@
<item name="sip.userNatIp"/> <item name="sip.userNatIp"/>
<!-- STUN Server --> <!-- STUN Server -->
<item name="network.stunServer"/> {if isset($grandstream_stun_server) }
<item name="network.stunServer">{$grandstream_stun_server}</item>
{else}
<item name="network.stunServer"></item>
{/if}
<!-- # Delay Registration. Default is 0. --> <!-- # Delay Registration. Default is 0. -->
<!-- # Number: 0 - 90 --> <!-- # Number: 0 - 90 -->
@@ -2192,7 +2205,7 @@
<item name="sip.showError">Yes</item> <item name="sip.showError">Yes</item>
<!-- # Enable Missed Call Notification. Yes or No --> <!-- # Enable Missed Call Notification. Yes or No -->
<item name="features.history.missedCallNotification">Yes</item> <item name="features.history.missedCallNotification">{$grandstream_missed_call_notification}</item>
<!-- # Enable Call Completion Service. Yes or No --> <!-- # Enable Call Completion Service. Yes or No -->
<item name="call.dial.callComplete.enable"/> <item name="call.dial.callComplete.enable"/>
@@ -2424,13 +2437,25 @@
<!-- ## Settings/Preferences / Audio Control --> <!-- ## Settings/Preferences / Audio Control -->
<!-- ############################################################################## --> <!-- ############################################################################## -->
<!-- # HEADSET Key Mode. DefaultMode, ToggleHeadsetOrSpeaker. --> <!-- # HEADSET Key Mode. DefaultMode, ToggleHeadsetOrSpeaker. -->
{if isset($grandstream_headset_key_mode)}
<item name="audio.headset.keyMode">{$grandstream_headset_key_mode}</item>
{else}
<item name="audio.headset.keyMode">DefaultMode</item> <item name="audio.headset.keyMode">DefaultMode</item>
{/if}
<!-- # Headset Type. Normal, PlantronicsEHS. --> <!-- # Headset Type. Normal, PlantronicsEHS. -->
{if isset($grandstream_headset_ringtone)}
<item name="audio.headset.ehs.ringtone">{$grandstream_headset_ringtone}</item>
{else}
<item name="audio.headset.ehs.ringtone">Normal</item> <item name="audio.headset.ehs.ringtone">Normal</item>
{/if}
<!-- # EHS Headset Ringtone. Normal, PlantronicsEHS. --> <!-- # EHS Headset Ringtone. Normal, PlantronicsEHS. -->
{if isset($grandstream_headset_type)}
<item name="audio.headset.type">{$grandstream_headset_type}</item>
{else}
<item name="audio.headset.type">Normal</item> <item name="audio.headset.type">Normal</item>
{/if}
<!-- # Always Ring Speaker. --> <!-- # Always Ring Speaker. -->
<!-- No - 0, Yes,both - 1, Yes,speaker only - 2 --> <!-- No - 0, Yes,both - 1, Yes,speaker only - 2 -->
@@ -2444,10 +2469,18 @@
<item name="audio.headset.txGain">0</item> <item name="audio.headset.txGain">0</item>
<!-- # Headset RX gain(dB). 1 - -6, 0 - 0, 2 - +6. Default is 0 --> <!-- # Headset RX gain(dB). 1 - -6, 0 - 0, 2 - +6. Default is 0 -->
{if isset($grandstream_headset_rx_gain)}
<item name="audio.headset.rxGain">{$grandstream_headset_rx_gain}</item>
{else}
<item name="audio.headset.rxGain">0</item> <item name="audio.headset.rxGain">0</item>
{/if}
<!-- # Handset TX gain(dB). 1 - -6, 0 - 0, 2 - +6. Default is 0 --> <!-- # Handset TX gain(dB). 1 - -6, 0 - 0, 2 - +6. Default is 0 -->
{if isset($grandstream_headset_tx_gain)}
<item name="audio.handset.txGain">{$grandstream_headset_tx_gain}</item>
{else}
<item name="audio.handset.txGain">0</item> <item name="audio.handset.txGain">0</item>
{/if}
<!-- ############################################################################## --> <!-- ############################################################################## -->
<!-- ## Settings/Preferences / Date and Time --> <!-- ## Settings/Preferences / Date and Time -->
@@ -2620,10 +2653,14 @@
<!-- # Screensaver Settings --> <!-- # Screensaver Settings -->
<!-- # Screensaver. No, Yes, OnIfNoVPKIsActive. --> <!-- # Screensaver. No, Yes, OnIfNoVPKIsActive. -->
{if isset($grandstream_screensaver_enable)}
<item name="lcd.screensaver.enable">{$grandstream_screensaver_enable}</item>
{else}
<item name="lcd.screensaver.enable">OnIfNoVPKIsActive</item> <item name="lcd.screensaver.enable">OnIfNoVPKIsActive</item>
{/if}
<!-- # Screensaver Source. Default, USB, Download. --> <!-- # Screensaver Source. Default, USB, Download. -->
<item name="lcd.screensaver.source"/> <item name="lcd.screensaver.source">{$grandstream_screensaver_source}</item>
<!-- # Show Date and Time. Yes or No --> <!-- # Show Date and Time. Yes or No -->
<item name="lcd.screensaver.showDateTime">Yes</item> <item name="lcd.screensaver.showDateTime">Yes</item>
@@ -2950,6 +2987,7 @@
{foreach $keys['line'] as $row} {foreach $keys['line'] as $row}
{$line=$row.device_key_id} {$line=$row.device_key_id}
{if $row.device_key_id < 7}
<!-- ###################################################################################### --> <!-- ###################################################################################### -->
<!-- # VPK {$row.device_key_id} --> <!-- # VPK {$row.device_key_id} -->
<!-- ###################################################################################### --> <!-- ###################################################################################### -->
@@ -2970,7 +3008,39 @@
<!-- # Locked: uncheck, check. --> <!-- # Locked: uncheck, check. -->
<!--<item name="pks.vpk.{$row.device_key_id}.lockMode"></item>--> <!--<item name="pks.vpk.{$row.device_key_id}.lockMode"></item>-->
{/if}
{/foreach}
<!-- # Key Mode for dynamic VPK. -->
{assign var=key_types value=["none"=>-1,"speed dial"=>0, "blf"=>1, "presence watcher"=>2,
"eventlist blf"=>3,"speed dial active"=>4,"dial dtmf"=>5,"voicemail"=>6,"call return"=>7,
"transfer"=>8,"call park"=>9,"intercom"=>10,"ldap search"=>11,"conference"=>12,"multicast paging"=>13,
"record"=>14,"call log"=>15,"monitored call park"=>16,"menu"=>17]}
{foreach $keys['line'] as $row}
{$line=$row.device_key_id}
{if $row.device_key_id > 6}
<!-- ###################################################################################### -->
<!-- # VPK {$row.device_key_id} -->
<!-- ###################################################################################### -->
<!-- # Key Mode -->
<item name="pks.vpk.{$row.device_key_id}.keyMode">{$key_types[$keys.line.$line.device_key_type]}</item>
<!--<item name="pks.vpk.{$row.device_key_id}.keyMode">-1</item>-->
<!-- # Account. 0 - Account1, 1 - Account2, 2 - Account3, 3 - Account 4, 4 - Account 5, 5 - Account 6 -->
<item name="pks.vpk.{$row.device_key_id}.account">{$row.device_key_line}</item>
<!-- # Description. Max length allowed is 32 characters. -->
<!-- # String -->
<item name="pks.vpk.{$row.device_key_id}.description">{$row.device_key_label}</item>
<!-- # Value. Max length allowed is 64 characters. -->
<!-- # String -->
<item name="pks.vpk.{$row.device_key_id}.value">{$row.device_key_value}</item>
<!-- # Locked: uncheck, check. -->
<!--<item name="pks.vpk.{$row.device_key_id}.lockMode"></item>-->
{/if}
{/foreach} {/foreach}
<!-- ############################################################################## --> <!-- ############################################################################## -->
@@ -33,12 +33,12 @@
<!-- SIP Server --> <!-- SIP Server -->
{if isset($row.server_address_primary)} {if isset($row.server_address_primary)}
<item name="account.{$row.line_number}.sip.server.1.address">{$row.server_address_primary}</item> <item name="account.{$row.line_number}.sip.server.1.address">{$row.server_address_primary}:{$row.sip_port}</item>
{else} {else}
<item name="account.{$row.line_number}.sip.server.1.address">{$row.server_address}</item> <item name="account.{$row.line_number}.sip.server.1.address">{$row.server_address}:{$row.sip_port}</item>
{/if} {/if}
<!-- Secondary SIP Server --> <!-- Secondary SIP Server -->
<item name="account.{$row.line_number}.sip.server.2.address">{$row.server_address_secondary}</item> <item name="account.{$row.line_number}.sip.server.2.address">{$row.server_address_secondary}:{$row.sip_port}</item>
<!-- Outbound Proxy --> <!-- Outbound Proxy -->
{if $row.sip_transport != 'dns srv' && isset($row.outbound_proxy_primary)} {if $row.sip_transport != 'dns srv' && isset($row.outbound_proxy_primary)}
@@ -56,9 +56,9 @@
<!-- BLF Server --> <!-- BLF Server -->
{if isset($row.server_address_primary)} {if isset($row.server_address_primary)}
<item name="account.{$row.line_number}.sip.blf.server">{$row.server_address_primary}</item> <item name="account.{$row.line_number}.sip.blf.server">{$row.server_address_primary}:{$row.sip_port}</item>
{else} {else}
<item name="account.{$row.line_number}.sip.blf.server">{$row.server_address}</item> <item name="account.{$row.line_number}.sip.blf.server">{$row.server_address}:{$row.sip_port}</item>
{/if} {/if}
<!-- SIP User ID --> <!-- SIP User ID -->
@@ -107,7 +107,11 @@
<!-- NAT Traversal --> <!-- NAT Traversal -->
<!-- No, STUN, KeepAlive, UPnP, Auto, VPN --> <!-- No, STUN, KeepAlive, UPnP, Auto, VPN -->
{if isset($grandstream_nat_traversal)}
<item name="account.{$row.line_number}.network.natTraversal">{$grandstream_nat_traversal}</item>
{else}
<item name="account.{$row.line_number}.network.natTraversal">Auto</item> <item name="account.{$row.line_number}.network.natTraversal">Auto</item>
{/if}
<!-- Support Rport (RFC 3581) --> <!-- Support Rport (RFC 3581) -->
<!-- Yes, No --> <!-- Yes, No -->
@@ -136,7 +140,7 @@
<!-- Register Expiration (m) --> <!-- Register Expiration (m) -->
<!-- Number: 0 - 64800 --> <!-- Number: 0 - 64800 -->
<item name="account.{$row.line_number}.sip.registerExpiration">15</item> <item name="account.{$row.line_number}.sip.registerExpiration">{$row.register_expires}</item>
<!-- Subscribe Expiration (m) --> <!-- Subscribe Expiration (m) -->
<!-- Number: 0 - 64800 --> <!-- Number: 0 - 64800 -->
@@ -572,64 +576,64 @@
<item name="account.{$row.line_number}.ring.ringtone">5</item> <item name="account.{$row.line_number}.ring.ringtone">5</item>
<!-- Matching Incoming Caller ID. Matching Rule 1 --> <!-- Matching Incoming Caller ID. Matching Rule 1 -->
<item name="account.{$row.line_number}.ring.match.1.callerId"/> <item name="account.{$row.line_number}.ring.match.1.callerId">{$grandstream_distinctive_ringtone_name_1}</item>
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<item name="account.{$row.line_number}.ring.match.1.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.1.ringtone">{$grandstream_distinctive_ringtone_1}</item>
<!-- Match Incoming Caller ID. Matching Rule 2 --> <!-- Match Incoming Caller ID. Matching Rule 2 -->
<item name="account.{$row.line_number}.ring.match.2.callerId"/> <item name="account.{$row.line_number}.ring.match.2.callerId">{$grandstream_distinctive_ringtone_name_2}</item>
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<item name="account.{$row.line_number}.ring.match.2.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.2.ringtone">{$grandstream_distinctive_ringtone_2}</item>
<!-- Match Incoming Caller ID. Matching Rule 3 --> <!-- Match Incoming Caller ID. Matching Rule 3 -->
<item name="account.{$row.line_number}.ring.match.3.callerId"/> <item name="account.{$row.line_number}.ring.match.3.callerId">{$grandstream_distinctive_ringtone_name_3}</item>
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<item name="account.{$row.line_number}.ring.match.3.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.3.ringtone">{$grandstream_distinctive_ringtone_3}</item>
<!-- Match Incoming Caller ID. Matching Rule 4 --> <!-- Match Incoming Caller ID. Matching Rule 4 -->
<item name="account.{$row.line_number}.ring.match.4.callerId"/> <item name="account.{$row.line_number}.ring.match.4.callerId">{$grandstream_distinctive_ringtone_name_4}</item>
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<item name="account.{$row.line_number}.ring.match.4.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.4.ringtone">{$grandstream_distinctive_ringtone_4}</item>
<!-- Match Incoming Caller ID. Matching Rule 5 --> <!-- Match Incoming Caller ID. Matching Rule 5 -->
<item name="account.{$row.line_number}.ring.match.5.callerId"/> <item name="account.{$row.line_number}.ring.match.5.callerId">{$grandstream_distinctive_ringtone_name_5}</item>
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<item name="account.{$row.line_number}.ring.match.5.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.5.ringtone">{$grandstream_distinctive_ringtone_5}</item>
<!-- Match Incoming Caller ID. Matching Rule 6 --> <!-- Match Incoming Caller ID. Matching Rule 6 -->
<item name="account.{$row.line_number}.ring.match.6.callerId"/> <item name="account.{$row.line_number}.ring.match.6.callerId">{$grandstream_distinctive_ringtone_name_6}</item>
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<item name="account.{$row.line_number}.ring.match.6.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.6.ringtone">{$grandstream_distinctive_ringtone_6}</item>
<!-- Match Incoming Caller ID. Matching Rule 7 --> <!-- Match Incoming Caller ID. Matching Rule 7 -->
<item name="account.{$row.line_number}.ring.match.7.callerId"/> <item name="account.{$row.line_number}.ring.match.7.callerId">{$grandstream_distinctive_ringtone_name_7}</item>
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<item name="account.{$row.line_number}.ring.match.7.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.7.ringtone">{$grandstream_distinctive_ringtone_7}</item>
<!-- Match Incoming Caller ID. Matching Rule 8 --> <!-- Match Incoming Caller ID. Matching Rule 8 -->
<item name="account.{$row.line_number}.ring.match.8.callerId"/> <item name="account.{$row.line_number}.ring.match.8.callerId">{$grandstream_distinctive_ringtone_name_8}</item>
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<item name="account.{$row.line_number}.ring.match.8.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.8.ringtone">{$grandstream_distinctive_ringtone_8}</item>
<!-- Match Incoming Caller ID. Matching Rule 9 --> <!-- Match Incoming Caller ID. Matching Rule 9 -->
<item name="account.{$row.line_number}.ring.match.9.callerId"/> <item name="account.{$row.line_number}.ring.match.9.callerId">{$grandstream_distinctive_ringtone_name_9}</item>
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<item name="account.{$row.line_number}.ring.match.9.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.9.ringtone">{$grandstream_distinctive_ringtone_9}</item>
<!-- Match Incoming Caller ID. Matching Rule 10 --> <!-- Match Incoming Caller ID. Matching Rule 10 -->
<item name="account.{$row.line_number}.ring.match.10.callerId"/> <item name="account.{$row.line_number}.ring.match.10.callerId">{$grandstream_distinctive_ringtone_name_10}</item>
<!-- Distinctive Ring Tone --> <!-- Distinctive Ring Tone -->
<item name="account.{$row.line_number}.ring.match.10.ringtone">5</item> <item name="account.{$row.line_number}.ring.match.10.ringtone">{$grandstream_distinctive_ringtone_10}</item>
<!-- Ring Timeout --> <!-- Ring Timeout -->
<!-- Number: 10 - 300 --> <!-- Number: 10 - 300 -->
@@ -665,21 +669,21 @@
<!-- #Enable Local Call Features. Default is Yes --> <!-- #Enable Local Call Features. Default is Yes -->
<!-- #Mandatory --> <!-- #Mandatory -->
<!-- No, Yes --> <!-- No, Yes -->
<item name="account.{$row.line_number}.featureCodes.callFeatures">Yes</item> <item name="account.{$row.line_number}.featureCodes.callFeatures">No</item>
<!-- DND Call Feature On --> <!-- DND Call Feature On -->
<item name="account.{$row.line_number}.featureCodes.dndOn"/> <item name="account.{$row.line_number}.featureCodes.dndOn">*78</item>
<!-- DND Call Feature Off --> <!-- DND Call Feature Off -->
<item name="account.{$row.line_number}.featureCodes.dndOff"/> <item name="account.{$row.line_number}.featureCodes.dndOff">*79</item>
<!-- #Call Forward Always - On --> <!-- #Call Forward Always - On -->
<!-- # String --> <!-- # String -->
<item name="account.{$row.line_number}.featureCodes.callForwardUnconditionallyOn"/> <item name="account.{$row.line_number}.featureCodes.callForwardUnconditionallyOn">*72</item>
<!-- #Call Forward Always - Off --> <!-- #Call Forward Always - Off -->
<!-- # String --> <!-- # String -->
<item name="account.{$row.line_number}.featureCodes.callForwardUnconditionallyOff"/> <item name="account.{$row.line_number}.featureCodes.callForwardUnconditionallyOff">*73</item>
<!-- #Call Forward Always- Target --> <!-- #Call Forward Always- Target -->
<!-- # String --> <!-- # String -->
@@ -903,12 +907,13 @@
<!-- # Enable Manual VLAN Configuration. Yes or No. --> <!-- # Enable Manual VLAN Configuration. Yes or No. -->
<!-- # Mandatory --> <!-- # Mandatory -->
<item name="network.port.eth.1.vlan.enable">Yes</item> <item name="network.port.eth.1.vlan.enable">{if $grandstream_lan_port_vlan == '0'}No{else}Yes{/if}</item>
<!-- # Layer 2 QoS. 802.1Q/VLAN Tag (VLAN classification for RTP). Default is 0 --> <!-- # Layer 2 QoS. 802.1Q/VLAN Tag (VLAN classification for RTP). Default is 0 -->
<!-- Layer 2 QoS 802.1Q/VLAN Tag (Ethernet) --> <!-- Layer 2 QoS 802.1Q/VLAN Tag (Ethernet) -->
<!-- Number: 0 - 4095 --> <!-- Number: 0 - 4095 -->
<item name="network.port.eth.1.vlan.tag">0</item> <item name="network.port.eth.1.vlan.tag">{$grandstream_lan_port_vlan}</item>
<!-- 802.1p Priority Value (Ethernet) --> <!-- 802.1p Priority Value (Ethernet) -->
<!-- Number: 0 - 7 --> <!-- Number: 0 - 7 -->
@@ -916,10 +921,14 @@
<!-- PC Port Mode --> <!-- PC Port Mode -->
<!-- Enabled, Disabled, Mirrored --> <!-- Enabled, Disabled, Mirrored -->
<item name="network.port.pc.mode">Enabled</item> {if isset($grandstream_pc_mode)}
<item name="network.port.pc.mode">{if isset($grandstream_pc_mode)}{$grandstream_pc_mode}{else}Enabled{/if}</item>
{else}
<item name="network.port.pc.mode">{if isset($grandstream_pc_port_vlan)}Enabled{else}Disabled{/if}</item>
{/if}
<!-- PC Port VLAN Tag --> <!-- PC Port VLAN Tag -->
<item name="network.port.pc.vlan.tag">0</item> <item name="network.port.pc.vlan.tag">{$grandstream_pc_port_vlan}</item>
<!-- PC Port Priority Value --> <!-- PC Port Priority Value -->
<item name="network.port.pc.vlan.priority">0</item> <item name="network.port.pc.vlan.priority">0</item>
@@ -1249,8 +1258,8 @@
<!-- TFTP, HTTP, HTTPS, FTP,FTPS --> <!-- TFTP, HTTP, HTTPS, FTP,FTPS -->
<item name="provisioning.firmware.protocol">HTTP</item> <item name="provisioning.firmware.protocol">HTTP</item>
<!-- Firmware Server Path --> <!-- Firmware Server Path -->
{if isset($grandstream_firmware_path) && isset($firmware_version)} {if isset($grandstream_firmware_path) && isset($grandstream_firmware_version)}
<item name="provisioning.firmware.serverPath">{$grandstream_firmware_path}/{$firmware_version}</item> <item name="provisioning.firmware.serverPath">{$grandstream_firmware_path}/{$grandstream_firmware_version}</item>
{elseif isset($grandstream_firmware_path)} {elseif isset($grandstream_firmware_path)}
<item name="provisioning.firmware.serverPath">{$grandstream_firmware_path}</item> <item name="provisioning.firmware.serverPath">{$grandstream_firmware_path}</item>
{else} {else}
@@ -1614,7 +1623,11 @@
<item name="sip.userNatIp"/> <item name="sip.userNatIp"/>
<!-- STUN Server --> <!-- STUN Server -->
<item name="network.stunServer"/> {if isset($grandstream_stun_server) }
<item name="network.stunServer">{$grandstream_stun_server}</item>
{else}
<item name="network.stunServer"></item>
{/if}
<!-- # Delay Registration. Default is 0. --> <!-- # Delay Registration. Default is 0. -->
<!-- # Number: 0 - 90 --> <!-- # Number: 0 - 90 -->
@@ -2192,7 +2205,7 @@
<item name="sip.showError">Yes</item> <item name="sip.showError">Yes</item>
<!-- # Enable Missed Call Notification. Yes or No --> <!-- # Enable Missed Call Notification. Yes or No -->
<item name="features.history.missedCallNotification">Yes</item> <item name="features.history.missedCallNotification">{$grandstream_missed_call_notification}</item>
<!-- # Enable Call Completion Service. Yes or No --> <!-- # Enable Call Completion Service. Yes or No -->
<item name="call.dial.callComplete.enable"/> <item name="call.dial.callComplete.enable"/>
@@ -2424,13 +2437,25 @@
<!-- ## Settings/Preferences / Audio Control --> <!-- ## Settings/Preferences / Audio Control -->
<!-- ############################################################################## --> <!-- ############################################################################## -->
<!-- # HEADSET Key Mode. DefaultMode, ToggleHeadsetOrSpeaker. --> <!-- # HEADSET Key Mode. DefaultMode, ToggleHeadsetOrSpeaker. -->
{if isset($grandstream_headset_key_mode)}
<item name="audio.headset.keyMode">{$grandstream_headset_key_mode}</item>
{else}
<item name="audio.headset.keyMode">DefaultMode</item> <item name="audio.headset.keyMode">DefaultMode</item>
{/if}
<!-- # Headset Type. Normal, PlantronicsEHS. --> <!-- # Headset Type. Normal, PlantronicsEHS. -->
{if isset($grandstream_headset_ringtone)}
<item name="audio.headset.ehs.ringtone">{$grandstream_headset_ringtone}</item>
{else}
<item name="audio.headset.ehs.ringtone">Normal</item> <item name="audio.headset.ehs.ringtone">Normal</item>
{/if}
<!-- # EHS Headset Ringtone. Normal, PlantronicsEHS. --> <!-- # EHS Headset Ringtone. Normal, PlantronicsEHS. -->
{if isset($grandstream_headset_type)}
<item name="audio.headset.type">{$grandstream_headset_type}</item>
{else}
<item name="audio.headset.type">Normal</item> <item name="audio.headset.type">Normal</item>
{/if}
<!-- # Always Ring Speaker. --> <!-- # Always Ring Speaker. -->
<!-- No - 0, Yes,both - 1, Yes,speaker only - 2 --> <!-- No - 0, Yes,both - 1, Yes,speaker only - 2 -->
@@ -2444,10 +2469,18 @@
<item name="audio.headset.txGain">0</item> <item name="audio.headset.txGain">0</item>
<!-- # Headset RX gain(dB). 1 - -6, 0 - 0, 2 - +6. Default is 0 --> <!-- # Headset RX gain(dB). 1 - -6, 0 - 0, 2 - +6. Default is 0 -->
{if isset($grandstream_headset_rx_gain)}
<item name="audio.headset.rxGain">{$grandstream_headset_rx_gain}</item>
{else}
<item name="audio.headset.rxGain">0</item> <item name="audio.headset.rxGain">0</item>
{/if}
<!-- # Handset TX gain(dB). 1 - -6, 0 - 0, 2 - +6. Default is 0 --> <!-- # Handset TX gain(dB). 1 - -6, 0 - 0, 2 - +6. Default is 0 -->
{if isset($grandstream_headset_tx_gain)}
<item name="audio.handset.txGain">{$grandstream_headset_tx_gain}</item>
{else}
<item name="audio.handset.txGain">0</item> <item name="audio.handset.txGain">0</item>
{/if}
<!-- ############################################################################## --> <!-- ############################################################################## -->
<!-- ## Settings/Preferences / Date and Time --> <!-- ## Settings/Preferences / Date and Time -->
@@ -2620,10 +2653,14 @@
<!-- # Screensaver Settings --> <!-- # Screensaver Settings -->
<!-- # Screensaver. No, Yes, OnIfNoVPKIsActive. --> <!-- # Screensaver. No, Yes, OnIfNoVPKIsActive. -->
{if isset($grandstream_screensaver_enable)}
<item name="lcd.screensaver.enable">{$grandstream_screensaver_enable}</item>
{else}
<item name="lcd.screensaver.enable">OnIfNoVPKIsActive</item> <item name="lcd.screensaver.enable">OnIfNoVPKIsActive</item>
{/if}
<!-- # Screensaver Source. Default, USB, Download. --> <!-- # Screensaver Source. Default, USB, Download. -->
<item name="lcd.screensaver.source"/> <item name="lcd.screensaver.source">{$grandstream_screensaver_source}</item>
<!-- # Show Date and Time. Yes or No --> <!-- # Show Date and Time. Yes or No -->
<item name="lcd.screensaver.showDateTime">Yes</item> <item name="lcd.screensaver.showDateTime">Yes</item>
@@ -2950,6 +2987,7 @@
{foreach $keys['line'] as $row} {foreach $keys['line'] as $row}
{$line=$row.device_key_id} {$line=$row.device_key_id}
{if $row.device_key_id < 13}
<!-- ###################################################################################### --> <!-- ###################################################################################### -->
<!-- # VPK {$row.device_key_id} --> <!-- # VPK {$row.device_key_id} -->
<!-- ###################################################################################### --> <!-- ###################################################################################### -->
@@ -2970,7 +3008,39 @@
<!-- # Locked: uncheck, check. --> <!-- # Locked: uncheck, check. -->
<!--<item name="pks.vpk.{$row.device_key_id}.lockMode"></item>--> <!--<item name="pks.vpk.{$row.device_key_id}.lockMode"></item>-->
{/if}
{/foreach}
<!-- # Key Mode for dynamic VPK. -->
{assign var=key_types value=["none"=>-1,"speed dial"=>0, "blf"=>1, "presence watcher"=>2,
"eventlist blf"=>3,"speed dial active"=>4,"dial dtmf"=>5,"voicemail"=>6,"call return"=>7,
"transfer"=>8,"call park"=>9,"intercom"=>10,"ldap search"=>11,"conference"=>12,"multicast paging"=>13,
"record"=>14,"call log"=>15,"monitored call park"=>16,"menu"=>17]}
{foreach $keys['line'] as $row}
{$line=$row.device_key_id}
{if $row.device_key_id > 12}
<!-- ###################################################################################### -->
<!-- # VPK {$row.device_key_id} -->
<!-- ###################################################################################### -->
<!-- # Key Mode -->
<item name="pks.vpk.{$row.device_key_id}.keyMode">{$key_types[$keys.line.$line.device_key_type]}</item>
<!--<item name="pks.vpk.{$row.device_key_id}.keyMode">-1</item>-->
<!-- # Account. 0 - Account1, 1 - Account2, 2 - Account3, 3 - Account 4, 4 - Account 5, 5 - Account 6 -->
<item name="pks.vpk.{$row.device_key_id}.account">{$row.device_key_line}</item>
<!-- # Description. Max length allowed is 32 characters. -->
<!-- # String -->
<item name="pks.vpk.{$row.device_key_id}.description">{$row.device_key_label}</item>
<!-- # Value. Max length allowed is 64 characters. -->
<!-- # String -->
<item name="pks.vpk.{$row.device_key_id}.value">{$row.device_key_value}</item>
<!-- # Locked: uncheck, check. -->
<!--<item name="pks.vpk.{$row.device_key_id}.lockMode"></item>-->
{/if}
{/foreach} {/foreach}
<!-- ############################################################################## --> <!-- ############################################################################## -->
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -1,594 +0,0 @@
#!version:1.0.0.1
##File header "#!version:1.0.0.1" can not be edited or deleted, and must be placed in the first line.##
##account.X.*:(T5XW/T54S/T48G/T48S/T46G/T46S/T29G/T46U/T48U: X ranges from 1 to 16. T52S/T42G/T42S/T43U: X ranges from 1 to 12. T41P/T41S/T27P/T27G/T41U/T42U: X ranges from 1 to 6. T40P/T40G/T23P/T23G: X ranges from 1 to 3. T21(P) E2: X ranges from 1 to 2.)##
#Firmware v86
{foreach $lines as $row}
#######################################################################################
## Transfer ##
#######################################################################################
account.{$row.line_number}.phone_setting.call_appearance.transfer_via_new_linekey=
#######################################################################################
## Conference ##
#######################################################################################
account.{$row.line_number}.phone_setting.call_appearance.conference_via_new_linekey=
#######################################################################################
## Anonymous ##
#######################################################################################
account.{$row.line_number}.anonymous_call.server_base_only =
account.{$row.line_number}.send_anonymous_rejection_code =
account.{$row.line_number}.anonymous_reject_offcode =
account.{$row.line_number}.anonymous_reject_oncode =
account.{$row.line_number}.reject_anonymous_call=
account.{$row.line_number}.anonymous_call_offcode =
account.{$row.line_number}.anonymous_call_oncode =
account.{$row.line_number}.anonymous_call =
account.{$row.line_number}.send_anonymous_code =
#######################################################################################
## Call Configuration ##
#######################################################################################
account.{$row.line_number}.music_server_uri=
account.{$row.line_number}.music_on_hold_type=
account.{$row.line_number}.auto_label.rule=
account.{$row.line_number}.auto_label.enable=
account.{$row.line_number}.number_of_linekey=
account.{$row.line_number}.phone_setting.call_appearance.calls_per_linekey=
#######################################################################################
## Anonymous ##
#######################################################################################
account.1.anonymous_call.server_base_only =
account.1.send_anonymous_rejection_code =
account.1.anonymous_reject_offcode =
account.1.anonymous_reject_oncode =
account.1.reject_anonymous_call=
account.1.anonymous_call_offcode =
account.1.anonymous_call_oncode =
account.1.anonymous_call =
account.1.send_anonymous_code =
#######################################################################################
## Call Configuration ##
#######################################################################################
account.1.music_server_uri=
account.1.music_on_hold_type=
account.1.auto_label.rule=
account.1.auto_label.enable=
account.1.number_of_linekey=
account.1.phone_setting.call_appearance.calls_per_linekey=
#######################################################################################
## Codec ##
#######################################################################################
account.{$row.line_number}.codec.ilbc_15_2kbps.priority= 0
account.{$row.line_number}.codec.ilbc_15_2kbps.enable= 0
account.{$row.line_number}.codec.ilbc_13_33kbps.priority= {if isset($yealink_codec_iLBC_priority)}{$yealink_codec_iLBC_priority}{else}0{/if}
account.{$row.line_number}.codec.ilbc_13_33kbps.enable = {if isset($yealink_codec_iLBC_enable)}1{else}0{/if}
account.{$row.line_number}.codec.pcma.enable= {if isset($yealink_codec_pcma_enable)}1{else}0{/if}
account.{$row.line_number}.codec.pcma.priority= {if isset($yealink_codec_pcma_priority)}{$yealink_codec_pcma_priority}{else}0{/if}
account.{$row.line_number}.codec.pcmu.enable= {if isset($yealink_codec_pcmu_enable)}1{else}0{/if}
account.{$row.line_number}.codec.pcmu.priority= {if isset($yealink_codec_pcmu_priority)}{$yealink_codec_pcmu_priority}{else}0{/if}
account.{$row.line_number}.codec.opus.priority = {if isset($yealink_codec_opus_priority)}{$yealink_codec_opus_priority}{else}0{/if}
account.{$row.line_number}.codec.opus.enable= {if isset($yealink_codec_opus_enable)}1{else}0{/if}
account.{$row.line_number}.codec.opus.para=
account.{$row.line_number}.codec.g726_40.enable= {if isset($yealink_codec_g726_40_enable)}1{else}0{/if}
account.{$row.line_number}.codec.g726_40.priority= {if isset($yealink_codec_g726_40_priority)}{$yealink_codec_g726_40_priority}{else}0{/if}
account.{$row.line_number}.codec.g726_32.enable= {if isset($yealink_codec_g726_32_enable)}1{else}0{/if}
account.{$row.line_number}.codec.g726_32.priority= {if isset($yealink_codec_g726_32_priority)}{$yealink_codec_g726_32_priority}{else}0{/if}
account.{$row.line_number}.codec.g726_24.enable= {if isset($yealink_codec_g726_24_enable)}1{else}0{/if}
account.{$row.line_number}.codec.g726_24.priority= {if isset($yealink_codec_g726_24_priority)}{$yealink_codec_g726_24_priority}{else}0{/if}
account.{$row.line_number}.codec.g726_16.enable= {if isset($yealink_codec_g726_16_enable)}1{else}0{/if}
account.{$row.line_number}.codec.g726_16.priority= {if isset($yealink_codec_g726_16_priority)}{$yealink_codec_g726_16_priority}{else}0{/if}
account.{$row.line_number}.codec.g723_63.priority= {if isset($yealink_codec_g723_63_priority)}{$yealink_codec_g723_63_priority}{else}0{/if}
account.{$row.line_number}.codec.g723_63.enable= {if isset($yealink_codec_g723_63_enable)}1{else}0{/if}
account.{$row.line_number}.codec.g723_53.priority= {if isset($yealink_codec_g723_53_priority)}{$yealink_codec_g723_53_priority}{else}0{/if}
account.{$row.line_number}.codec.g723_53.enable= {if isset($yealink_codec_g723_53_enable)}1{else}0{/if}
account.{$row.line_number}.codec.g729.priority= {if isset($yealink_codec_g729_priority)}{$yealink_codec_g729_priority}{else}0{/if}
account.{$row.line_number}.codec.g729.enable= {if isset($yealink_codec_g729_enable)}1{else}0{/if}
account.{$row.line_number}.codec.g722.priority= {if isset($yealink_codec_g722_priority)}{$yealink_codec_g722_priority}{else}0{/if}
account.{$row.line_number}.codec.g722.enable= {if isset($yealink_codec_g722_enable)}{$yealink_codec_g722_enable}{else}0{/if}
account.{$row.line_number}.codec.G722_1_24kpbs.priority=
account.{$row.line_number}.codec.G722_1_24kpbs.enable=
account.{$row.line_number}.codec.G722_1c_24kpbs.priority=
account.{$row.line_number}.codec.G722_1c_24kpbs.enable=
account.{$row.line_number}.codec.G722_1c_32kpbs.priority=
account.{$row.line_number}.codec.G722_1c_32kpbs.enable=
account.{$row.line_number}.codec.G722_1c_48kpbs.priority=
account.{$row.line_number}.codec.G722_1c_48kpbs.enable=
################################################################
# Account Register ##
################################################################
{if isset($row.password) }
account.{$row.line_number}.enable = 1
{else}
account.{$row.line_number}.enable = 0
{/if}
account.{$row.line_number}.label = {$row.label}
account.{$row.line_number}.display_name = {$row.display_name}
account.{$row.line_number}.auth_name = {$row.auth_id}
account.{$row.line_number}.password = {$row.password}
{if isset($row.server.1.address)}
account.{$row.line_number}.user_name = {$row.user_id}@{$row.server_address}
{else}
account.{$row.line_number}.user_name = {$row.user_id}
{/if}
{if isset($row.server.1.address)}
account.{$row.line_number}.sip_server.1.address = {$row.server.1.address}
{else}
account.{$row.line_number}.sip_server.1.address = {$row.server_address}
{/if}
account.{$row.line_number}.sip_server.1.port = {$row.sip_port}
{if $account.{$row.line_number}.sip_transport == 'udp'}account.{$row.line_number}.sip_server.1.transport_type = 0{/if}
{if $account.{$row.line_number}.sip_transport == 'tcp'}account.{$row.line_number}.sip_server.1.transport_type = 1{/if}
{if $account.{$row.line_number}.sip_transport == 'tls'}account.{$row.line_number}.sip_server.1.transport_type = 2{/if}
{if $account.{$row.line_number}.sip_transport == 'dns srv'}account.{$row.line_number}.sip_server.1.transport_type = 3{/if}
account.{$row.line_number}.sip_server.1.expires= {$row.register_expires}
account.{$row.line_number}.sip_server.1.retry_counts= 3
account.{$row.line_number}.sip_server.2.address= {$row.server.2.address}
account.{$row.line_number}.sip_server.2.port= {$row.sip_port}
{if $account.{$row.line_number}.sip_transport == 'udp'}account.{$row.line_number}.sip_server.2.transport_type = 0{/if}
{if $account.{$row.line_number}.sip_transport == 'tcp'}account.{$row.line_number}.sip_server.2.transport_type = 1{/if}
{if $account.{$row.line_number}.sip_transport == 'tls'}account.{$row.line_number}.sip_server.2.transport_type = 2{/if}
{if $account.{$row.line_number}.sip_transport == 'dns srv'}account.{$row.line_number}.sip_server.2.transport_type = 3{/if}
account.{$row.line_number}.sip_server.2.expires= {$row.register_expires}
account.{$row.line_number}.sip_server.2.retry_counts= 3
account.{$row.line_number}.outbound_proxy_enable= {if isset($row.outbound_proxy_primary)}1{else}0{/if}
account.{$row.line_number}.outbound_proxy.1.address= {$row.outbound_proxy_primary}
{if isset($outbound_proxy_1_port)}
account.{$row.line_number}.outbound_proxy.1.port = {$outbound_proxy_1_port}
{else}
account.{$row.line_number}.outbound_proxy.1.port = {$row.sip_port}
{/if}
account.{$row.line_number}.outbound_proxy.2.address= {$row.outbound_proxy_secondary}
{if isset($outbound_proxy_1_port)}
account.{$row.line_number}.outbound_proxy.2.port = {$outbound_proxy_2_port}
{else}
account.{$row.line_number}.outbound_proxy.2.port = {$row.sip_port}
{/if}
{if isset($outbound_proxy_fallback_interval)}
account.{$row.line_number}.outbound_proxy_fallback_interval = {$outbound_proxy_fallback_interval}
{else}
account.{$row.line_number}.outbound_proxy_fallback_interval = 120
{/if}
account.{$row.line_number}.nat.nat_traversal=
################################################################
# Account Basic ##
################################################################
account.{$row.line_number}.auto_answer=
################################################################
# Account Advanced ##
################################################################
account.{$row.line_number}.nat.udp_update_enable= 3
account.{$row.line_number}.nat.udp_update_time= 30
account.{$row.line_number}.nat.rport= {$yealink_rport}
account.{$row.line_number}.dtmf.type= {$yealink_dtmf_type}
account.{$row.line_number}.dtmf.info_type=
account.{$row.line_number}.dtmf.dtmf_payload=
account.{$row.line_number}.100rel_enable= {$yealink_retransmission}
account.{$row.line_number}.subscribe_register=
account.{$row.line_number}.cid_source= {$yealink_cid_source}
account.{$row.line_number}.enable_user_equal_phone=
account.{$row.line_number}.srtp_encryption= {$yealink_srtp_encryption}
account.{$row.line_number}.ptime= 20
account.{$row.line_number}.register_line=
account.{$row.line_number}.register_mac=
account.{$row.line_number}.reg_fail_retry_interval=
account.{$row.line_number}.unregister_on_reboot=1
account.{$row.line_number}.session_timer.refresher=
account.{$row.line_number}.session_timer.expires=
account.{$row.line_number}.session_timer.enable= {$yealink_session_timer}
account.{$row.line_number}.conf_type = {if $nway_conference == 'true'}2{elseif $nway_conference == 'false'}0{/if}
account.{$row.line_number}.sip_server_type=
##V83 Add
account.{$row.line_number}.srtp.unencrypted_rtcp.enable =
account.{$row.line_number}.srtp.unencrypted_rtp.enable =
account.{$row.line_number}.sip_server_mode =
################################################################
# SIP Backup Server ##
################################################################
account.{$row.line_number}.outbound_proxy.1.register_on_enable=
account.{$row.line_number}.outbound_proxy.1.failback_timeout=
account.{$row.line_number}.outbound_proxy.1.failback_mode=
account.{$row.line_number}.outbound_proxy.1.retry_counts=
account.{$row.line_number}.outbound_proxy.1.only_signal_with_registered=
account.{$row.line_number}.outbound_proxy.1.failback_subscribe.enable=
account.{$row.line_number}.outbound_proxy.1.invite_retry_counts=
account.{$row.line_number}.sip_server.1.register_on_enable= 0
account.{$row.line_number}.sip_server.1.failback_timeout= 3600
account.{$row.line_number}.sip_server.1.failback_mode= 0
account.{$row.line_number}.sip_server.1.failback_subscribe.enable=
account.{$row.line_number}.sip_server.1.only_signal_with_registered=
account.{$row.line_number}.sip_server.1.invite_retry_counts=
account.{$row.line_number}.outbound_proxy.2.register_on_enable=
account.{$row.line_number}.outbound_proxy.2.failback_timeout=
account.{$row.line_number}.outbound_proxy.2.failback_mode=
account.{$row.line_number}.outbound_proxy.2.retry_counts=
account.{$row.line_number}.outbound_proxy.2.only_signal_with_registered=
account.{$row.line_number}.outbound_proxy.2.failback_subscribe.enable=
account.{$row.line_number}.outbound_proxy.2.invite_retry_counts=
account.{$row.line_number}.sip_server.2.register_on_enable=
account.{$row.line_number}.sip_server.2.failback_timeout=
account.{$row.line_number}.sip_server.2.failback_mode=
account.{$row.line_number}.sip_server.2.failback_subscribe.enable=
account.{$row.line_number}.sip_server.2.only_signal_with_registered=
account.{$row.line_number}.sip_server.2.invite_retry_counts=
account.{$row.line_number}.static_cache_pri=
account.{$row.line_number}.dns_cache_type=
account.{$row.line_number}.naptr_build=
account.{$row.line_number}.fallback.timeout = {$yealink_outbound_proxy_fallback_interval}
account.{$row.line_number}.fallback.redundancy_type=
account.{$row.line_number}.reg_failed_retry_max_time=
account.{$row.line_number}.reg_failed_retry_min_time=
account.{$row.line_number}.redundancy_with_reg_fail.enable =
##V83 Add
account.{$row.line_number}.sip_server.1.outbound_proxy_enable =
account.{$row.line_number}.sip_server.2.outbound_proxy_enable =
################################################################
# SIP Basic config ##
################################################################
account.{$row.line_number}.contact_take_line_param=
account.{$row.line_number}.update_ack_while_dialing=
account.{$row.line_number}.srtp_lifetime=
account.{$row.line_number}.third_part_request_with_route.enable=
account.{$row.line_number}.insert_outbound_in_route.enable=
account.{$row.line_number}.path.enable=
account.{$row.line_number}.sub_fail_retry_interval=
account.{$row.line_number}.transfer_refer_to_contact_header.enable=
account.{$row.line_number}.hold_use_inactive=
account.{$row.line_number}.gruu.enable=
account.{$row.line_number}.dial_tone=
account.{$row.line_number}.call_id_mode=
account.{$row.line_number}.subscribe_expires_overlap=
account.{$row.line_number}.register_expires_overlap=
account.{$row.line_number}.call_info=
account.{$row.line_number}.custom_ua=
account.{$row.line_number}.mwi_parse_terminated=
account.{$row.line_number}.check_cseq.enable=
account.{$row.line_number}.check_to_tag.enable=
account.{$row.line_number}.vq_rtcpxr.collector_server_port=
account.{$row.line_number}.vq_rtcpxr.collector_server_host=
account.{$row.line_number}.vq_rtcpxr.collector_name=
account.{$row.line_number}.compact_header_enable=
account.{$row.line_number}.cp_source = {$yealink_cp_source}
account.{$row.line_number}.cid_source_ppi=
account.{$row.line_number}.cid_source_privacy=
account.{$row.line_number}.reg_with_pani_header.enable =
account.{$row.line_number}.alert_info=
account.{$row.line_number}.picture_info_enable=
##V83 Add
account.{$row.line_number}.invite_with_pani_header.enable =
##V84 Add
account.{$row.line_number}.invite_with_rpid_header.enable=
account.{$row.line_number}.auto_answer_mute_enable
##V84 SP4 Add
account.1.share_line.enable_private_code =
account.1.share_line.cancel_private_code =
#######################################################################################
## History ##
#######################################################################################
account.{$row.line_number}.missed_calllog = {$yealink_missed_calllog}
#######################################################################################
## Forward ##
#######################################################################################
account.{$row.line_number}.timeout_fwd.off_code=
account.{$row.line_number}.timeout_fwd.on_code=
account.{$row.line_number}.timeout_fwd.timeout=
account.{$row.line_number}.timeout_fwd.target=
account.{$row.line_number}.timeout_fwd.enable=
account.{$row.line_number}.busy_fwd.off_code=
account.{$row.line_number}.busy_fwd.on_code=
account.{$row.line_number}.busy_fwd.target=
account.{$row.line_number}.busy_fwd.enable=
account.{$row.line_number}.always_fwd.off_code=
account.{$row.line_number}.always_fwd.on_code=
account.{$row.line_number}.always_fwd.target=
account.{$row.line_number}.always_fwd.enable=
#######################################################################################
## DND ##
#######################################################################################
account.{$row.line_number}.dnd.enable=
account.{$row.line_number}.dnd.off_code=
account.{$row.line_number}.dnd.on_code=
#######################################################################################
## Voice Mail ##
#######################################################################################
voice_mail.number.1= {$voicemail_number}
account.{$row.line_number}.subscribe_mwi=
account.{$row.line_number}.subscribe_mwi_to_vm=
account.{$row.line_number}.subscribe_mwi_expires=
account.{$row.line_number}.display_mwi.enable=
#######################################################################################
## Auto Dial ##
#######################################################################################
account.{$row.line_number}.auto_dial_enable=
account.{$row.line_number}.auto_dial_num=
#######################################################################################
## Preference&Status ##
#######################################################################################
account.{$row.line_number}.ringtone.ring_type=
#######################################################################################
## Digitmap ##
#######################################################################################
account.{$row.line_number}.dialplan.digitmap.enable=
account.{$row.line_number}.dialplan.digitmap.string=
account.{$row.line_number}.dialplan.digitmap.no_match_action=
account.{$row.line_number}.dialplan.digitmap.interdigit_short_timer=
account.{$row.line_number}.dialplan.digitmap.interdigit_long_timer=
account.{$row.line_number}.dialplan.digitmap.apply_to.press_send=
account.{$row.line_number}.dialplan.digitmap.apply_to.forward=
account.{$row.line_number}.dialplan.digitmap.apply_to.history_dial=
account.{$row.line_number}.dialplan.digitmap.apply_to.directory_dial=
account.{$row.line_number}.dialplan.digitmap.apply_to.on_hook_dial=
account.{$row.line_number}.dialplan.digitmap.active.on_hook_dialing=
#######################################################################################
## Rings Settings ##
#######################################################################################
account.{$row.line_number}.alert_info_url_enable=
#######################################################################################
## BLF/BLF List ##
#######################################################################################
account.{$row.line_number}.blf.blf_list_uri=
account.{$row.line_number}.blf_list_barge_in_code=
account.{$row.line_number}.blf_list_code=
account.{$row.line_number}.blf_list_retrieve_call_parked_code =
account.{$row.line_number}.blf.subscribe_period =
account.{$row.line_number}.blf.match_host.enable =
account.{$row.line_number}.out_dialog_blf_enable =
account.{$row.line_number}.blf.subscribe_event =
##V84 Add
account.{$row.line_number}.blf_list_call_parked_code=
account.{$row.line_number}.blf_list_call_parked_list=
##V84 SP4 ADD
account.{$row.line_number}.blf_list_whisper_code=
account.{$row.line_number}.blf_list_listen_in_code=
#######################################################################################
## SCA ##
#######################################################################################
account.{$row.line_number}.shared_line = {$shared_line_1}
account.{$row.line_number}.line_seize.expires =
account.{$row.line_number}.shared_line_one_touch_bargein.enable =
account.{$row.line_number}.shared_line_one_touch_retrieve.enable =
account.{$row.line_number}.sca_manage_interface_display_time =
account.{$row.line_number}.shared_line_callpull_code =
##V83 Add
account.x.share_line.barge_in.enable
###V85 add
account.X.shared_line.idle_details=
#######################################################################################
## BLA ##
#######################################################################################
account.{$row.line_number}.bla_number =
account.{$row.line_number}.bla_subscribe_period =
account.{$row.line_number}.bla.notify_with_expire.enable =
account.{$row.line_number}.bla.subscribe_uri_build_type =
#######################################################################################
## Call Park ##
#######################################################################################
account.{$row.line_number}.callpark_enable =
#######################################################################################
## Broadsoft ACD ##
#######################################################################################
account.{$row.line_number}.acd.enable =
account.{$row.line_number}.acd.available =
account.{$row.line_number}.acd.unavailable_reason_enable =
account.{$row.line_number}.acd.initial_state =
account.{$row.line_number}.subscribe_acd_expires =
#######################################################################################
## Broadsoft ACD Call Center ##
#######################################################################################
##account.X.reason_code.Y =
##account.X.reason_code_name.Y =
##account.X.bw_disp_code.Y =
##account.X.bw_disp_code_name.Y =
##account.X.supervisor_info_code.Y =
##account.X.supervisor_info_code_name.Y =
##The value Y must be continuous.
account.{$row.line_number}.reason_code.1 =
account.{$row.line_number}.reason_code_name.1 =
account.{$row.line_number}.bw_disp_code.1 =
account.{$row.line_number}.bw_disp_code_name.1 =
account.{$row.line_number}.supervisor_info_code.1 =
account.{$row.line_number}.supervisor_info_code_name.1 =
#######################################################################################
## Broadsoft Call Center ##
#######################################################################################
account.{$row.line_number}.call_center.call_info_enable =
account.{$row.line_number}.call_center.show_call_info_time =
account.{$row.line_number}.call_center.disp_code_enable =
account.{$row.line_number}.call_center.trace_enable =
account.{$row.line_number}.call_center.emergency_enable =
account.{$row.line_number}.call_center.queue_status_enable =
account.{$row.line_number}.call_center.queue_status_light_enable =
#######################################################################################
## Broadsoft Hoteling ##
#######################################################################################
account.{$row.line_number}.hoteling.enable =
account.{$row.line_number}.hoteling.user_id =
account.{$row.line_number}.hoteling.password =
account.{$row.line_number}.hoteling.expires =
account.{$row.line_number}.hoteling.auto_login_enable =
#######################################################################################
## Broadsoft XSI ##
#######################################################################################
account.{$row.line_number}.xsi.user =
account.{$row.line_number}.xsi.password =
account.{$row.line_number}.xsi.host =
account.{$row.line_number}.xsi.server_type =
account.{$row.line_number}.xsi.port =
#######################################################################################
## Call Pickup ##
#######################################################################################
account.{$row.line_number}.direct_pickup_code =
account.{$row.line_number}.group_pickup_code =
account.{$row.line_number}.dialoginfo_callpickup =
account.{$row.line_number}.refresh_remote_id.enable =
#######################################################################################
## Broadsoft Call Recording ##
#######################################################################################
account.{$row.line_number}.call_recording.enable =
#######################################################################################
## Network Conferene ##
#######################################################################################
account.{$row.line_number}.conf_uri = {if $nway_conference == 'true'}nway{$row.auth_id}@{$row.server_address}{/if}
#######################################################################################
## Broadsoft Call Decline ##
#######################################################################################
account.{$row.line_number}.features.call_decline.enable =
#######################################################################################
## Broadsoft Security Classification ##
#######################################################################################
account.{$row.line_number}.security_classification.enable =
#######################################################################################
## Broadsoft Flexible Seating ##
#######################################################################################
account.{$row.line_number}.flexible_seating.enable =
account.{$row.line_number}.hoteling.pin =
account.{$row.line_number}.hoteling.mode =
#######################################################################################
## Features Sync ##
#######################################################################################
account.{$row.line_number}.features.forward.feature_key_sync.local_processing.enable =
account.{$row.line_number}.features.dnd.feature_key_sync.local_processing.enable =
##V84 Add
account.{$row.line_number}.dnd.feature_key_sync.enable =
account.{$row.line_number}.feature_key_sync.enable =
account.{$row.line_number}.forward.feature_key_sync.enable =
#######################################################################################
## ACD ##
#######################################################################################
account.{$row.line_number}.acd.available_url =
account.{$row.line_number}.acd.away_url =
account.{$row.line_number}.acd.refresh_url =
account.{$row.line_number}.acd.call_information =
#######################################################################################
## virtual_user ##
#######################################################################################
##V84 Add
bw.virtual_user.1.enable =
bw.virtual_user.1.label =
bw.virtual_user.1.xsi.dnd.enable =
bw.virtual_user.1.xsi.host =
bw.virtual_user.1.xsi.password =
bw.virtual_user.1.xsi.port =
bw.virtual_user.1.xsi.server_type =
bw.virtual_user.1.xsi.user =
##V86 Add
pstn.account.x.enable =
pstn.account.x.label =
pstn.account.x.missed_calllog =
pstn.account.x.auto_answer =
pstn.account.x.auto_answer_mute_enable =
pstn.account.x.ring_type =
account.x.ume.manual_record.enable =
account.1.codec.x.enable =
account.1.codec.x.payload_type =
account.1.codec.x.priority =
account.1.codec.x.rtpmap =
account.x.tls.srtp_encryption_compulsorily =
account.x.codec.g729ab.enable =
{/foreach}
File diff suppressed because it is too large Load Diff
@@ -2008,7 +2008,7 @@ features.doorphone.X.device_model=
####################################################################################### #######################################################################################
app.install_url = app.install_url =
app.uninstall = app.uninstall =
app.unavailable = {foreach $yealink_app_unavailable as $value}app.unavailable = {$value}{"\n"}{/foreach}
app.autorun = app.autorun =
@@ -652,7 +652,7 @@ account.2.nat.udp_update_enable = {if isset($account.2.password)}{if isset($yeal
account.2.nat.udp_update_time = 30 account.2.nat.udp_update_time = 30
#Enable or disable the NAT Rport; 0-Disabled (default), 1-Enabled; #Enable or disable the NAT Rport; 0-Disabled (default), 1-Enabled;
account.2.nat.rport = {$yealink_rport_2} account.2.nat.rport = {$yealink_rport}
####################################################################################### #######################################################################################
@@ -1161,7 +1161,7 @@ account.3.nat.udp_update_enable = {if isset($account.3.password)}{if isset($yeal
account.3.nat.udp_update_time = 30 account.3.nat.udp_update_time = 30
#Enable or disable the NAT Rport; 0-Disabled (default), 1-Enabled; #Enable or disable the NAT Rport; 0-Disabled (default), 1-Enabled;
account.3.nat.rport = {$yealink_rport_3} account.3.nat.rport = {$yealink_rport}
####################################################################################### #######################################################################################
@@ -1653,7 +1653,7 @@ account.4.nat.udp_update_enable = {if isset($account.4.password)}{if isset($yeal
account.4.nat.udp_update_time = 30 account.4.nat.udp_update_time = 30
#Enable or disable the NAT Rport; 0-Disabled (default), 1-Enabled; #Enable or disable the NAT Rport; 0-Disabled (default), 1-Enabled;
account.4.nat.rport = {$yealink_rport_4} account.4.nat.rport = {$yealink_rport}
####################################################################################### #######################################################################################
@@ -2145,7 +2145,7 @@ account.5.nat.udp_update_enable = {if isset($account.5.password)}{if isset($yeal
account.5.nat.udp_update_time = 30 account.5.nat.udp_update_time = 30
#Enable or disable the NAT Rport; 0-Disabled (default), 1-Enabled; #Enable or disable the NAT Rport; 0-Disabled (default), 1-Enabled;
account.5.nat.rport = {$yealink_rport_5} account.5.nat.rport = {$yealink_rport}
####################################################################################### #######################################################################################
@@ -2636,7 +2636,7 @@ account.6.nat.udp_update_enable = {if isset($account.6.password)}{if isset($yeal
account.6.nat.udp_update_time = 30 account.6.nat.udp_update_time = 30
#Enable or disable the NAT Rport; 0-Disabled (default), 1-Enabled; #Enable or disable the NAT Rport; 0-Disabled (default), 1-Enabled;
account.6.nat.rport = {$yealink_rport_6} account.6.nat.rport = {$yealink_rport}
####################################################################################### #######################################################################################
+1 -1
View File
@@ -447,7 +447,7 @@ else { //default: white
} }
body { body {
z-index: 1; z-index: auto;
position: absolute; position: absolute;
margin: 0; margin: 0;
padding: 0; padding: 0;