Compare commits

...

82 Commits
master ... 5.2

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
frytimo 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

View File

@ -430,7 +430,7 @@ if (is_array($activity)) {
}
//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 .= " <tr>\n";
$block .= " <td class='op_ext_icon'>\n";

View File

@ -175,8 +175,8 @@
}
}
//if user doesn't have call block all then use the assigned extension_uuid
if (!permission_exists('call_block_all')) {
//if user doesn't have call block extension then use the assigned extension_uuid
if (!permission_exists('call_block_extension')) {
$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 "</tr>\n";
if (permission_exists('call_block_all')) {
if (permission_exists('call_block_extension')) {
echo "<tr>\n";
echo "<td width='30%' class='vncell' valign='top' align='left' nowrap='nowrap'>\n";
echo " ".$text['label-extension']."\n";

View File

@ -200,7 +200,7 @@
}
//method 1
$response = trim(event_socket::command($cmd));
$response = event_socket::command($cmd);
//method 2
//cmd_async($_SESSION['switch']['bin']['dir']."/fs_cli -x \"".$cmd."\";");

View File

@ -17,7 +17,7 @@
The Initial Developer of the Original Code is
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.
Contributor(s):
@ -55,18 +55,20 @@
//get http post variables and set them to php variables
if (!empty($_POST)) {
//set the variables
$attachment = $_FILES['attachment'];
$attachment_primary = $_POST['attachment_primary'];
$attachment_description = $_POST['attachment_description'];
//validate the token
$token = new token;
if (!$token->validate($_SERVER['PHP_SELF'])) {
message::add($text['message-invalid_token'],'negative');
header('Location: contacts.php');
exit;
}
$token = new token;
if (!$token->validate($_SERVER['PHP_SELF'])) {
message::add($text['message-invalid_token'],'negative');
header('Location: contacts.php');
exit;
}
//get the attachment type
if (empty($attachment) || sizeof($attachment) == 0) {
$attachment_type = strtolower(pathinfo($_POST['attachment_filename'], PATHINFO_EXTENSION));
}
@ -75,48 +77,82 @@
}
//unflag others as primary
$allowed_primary_attachment = false;
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 .= "where domain_uuid = :domain_uuid ";
$sql .= "and contact_uuid = :contact_uuid ";
$parameters['domain_uuid'] = $domain_uuid;
$parameters['contact_uuid'] = $contact_uuid;
$database = new database;
$database->execute($sql, $parameters ?? null);
unset($sql, $parameters);
$allowed_primary_attachment = false;
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 .= "where domain_uuid = :domain_uuid ";
$sql .= "and contact_uuid = :contact_uuid ";
$parameters['domain_uuid'] = $domain_uuid;
$parameters['contact_uuid'] = $contact_uuid;
$database = new database;
$database->execute($sql, $parameters ?? null);
unset($sql, $parameters);
$allowed_primary_attachment = true;
}
$allowed_primary_attachment = true;
}
//format array
$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'] ?? '';
$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(file_get_contents($attachment['tmp_name']));
}
$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'];
//get the allowed extensions
$allowed_extensions = array_keys(json_decode($_SESSION['contact']['allowed_attachment_types']['text'], true));
//get the attachment extension
$attachment_extension = strtolower(pathinfo($attachment['name'], PATHINFO_EXTENSION));
//check the allowed extensions
if ($attachment['error'] == '0' && in_array($attachment_extension, $allowed_extensions)) {
//get the attachment content
$attachment_content = file_get_contents($attachment['tmp_name']);
//list of image extensions
$image_extensions = array('png','jpg','jpeg','gif','bmp', 'webp');
//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
$database = new database;
$database->app_name = 'contacts';
$database->app_uuid = '04481e0e-a478-c559-adad-52bd4174574c';
$database->save($array);
unset($array);
$database = new database;
$database->app_name = 'contacts';
$database->app_uuid = '04481e0e-a478-c559-adad-52bd4174574c';
$database->save($array);
unset($array);
//redirect
message::add($text['message-'.($action == 'update' ? 'update' : 'uploaded')]);
header('Location: contact_edit.php?id='.$contact_uuid);
exit;
message::add($text['message-'.($action == 'update' ? 'update' : 'uploaded')]);
header('Location: contact_edit.php?id='.$contact_uuid);
exit;
}
//get form data
@ -240,4 +276,4 @@
//include the footer
require_once "resources/footer.php";
?>
?>

View File

@ -17,7 +17,7 @@
The Initial Developer of the Original Code is
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.
Contributor(s):
@ -462,13 +462,10 @@ if (!class_exists('destinations')) {
<?php
//get the destinations
$destination = new destinations;
if (!isset($_SESSION['destinations'][$this->domain_uuid]['array'][$destination_type])) {
$_SESSION['destinations'][$this->domain_uuid]['array'][$destination_type] = $destination->get($destination_type);
}
$destinations = $this->get($destination_type);
//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) {
if ($destination_value == $row['destination']) {
$destination_key = $key;
@ -484,7 +481,7 @@ if (!class_exists('destinations')) {
//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 .= " <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);
if (permission_exists("{$singular}_destinations")) {
//determine if selected
@ -505,7 +502,7 @@ if (!class_exists('destinations')) {
}
$response .= " </select>\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) {
foreach($value as $k => $row) {
$selected = ($row['destination'] == $destination_value) ? "selected='selected'" : '';
@ -547,6 +544,9 @@ if (!class_exists('destinations')) {
//set the global variables
global $db_type;
//connect to the database
$database = new database;
//set default values
$destination_name = '';
$destination_id = '';
@ -555,7 +555,6 @@ if (!class_exists('destinations')) {
$sql = "select domain_name from v_domains ";
$sql .= "where domain_uuid = :domain_uuid ";
$parameters['domain_uuid'] = $this->domain_uuid;
$database = new database;
$this->domain_name = $database->select($sql, $parameters, 'column');
//get the destinations
@ -566,10 +565,10 @@ if (!class_exists('destinations')) {
$x = 0;
foreach ($config_list as &$config_path) {
try {
include($config_path);
include($config_path);
}
catch (Exception $e) {
//echo 'Caught exception: ', $e->getMessage(), "\n";
//echo 'Caught exception: ', $e->getMessage(), "\n";
}
$x++;
}
@ -620,7 +619,6 @@ if (!class_exists('destinations')) {
}
$sql .= "order by ".trim($row['order_by']);
$sql = str_replace("\${domain_uuid}", $this->domain_uuid, $sql);
$database = new database;
$result = $database->select($sql, null, 'all');
$this->destinations[$x]['result']['sql'] = $sql;
@ -760,11 +758,13 @@ if (!class_exists('destinations')) {
//set the global variables
global $db_type;
//connect to the database
$database = new database;
//get the domain_name
$sql = "select domain_name from v_domains ";
$sql .= "where domain_uuid = :domain_uuid ";
$parameters['domain_uuid'] = $this->domain_uuid;
$database = new database;
$this->domain_name = $database->select($sql, $parameters, 'column');
//get the destinations
@ -830,7 +830,6 @@ if (!class_exists('destinations')) {
}
$sql .= "order by ".trim($row['order_by']);
$sql = str_replace("\${domain_uuid}", $this->domain_uuid, $sql);
$database = new database;
$result = $database->select($sql, null, 'all');
$this->destinations[$x]['result']['sql'] = $sql;
@ -892,7 +891,7 @@ if (!class_exists('destinations')) {
$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;
foreach ($row['result']['data'] as $data) {
$select_value = $row['select_value'][$destination_type];
@ -916,7 +915,6 @@ if (!class_exists('destinations')) {
$select_label = str_replace("\${".$key."}", $data[$k], $select_label);
}
else {
$label = $data['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);
}
else {
// $label = $data['label'];
$select_label = str_replace("\${".$key."}", $text2['option-'.$label], $select_label);
}
}
@ -966,9 +963,18 @@ if (!class_exists('destinations')) {
$i++;
}
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) {

View File

@ -851,7 +851,7 @@
$template = file_get_contents('/var/www/fusionpbx/resources/templates/provision/'.$device_template.'/template.csv');
}
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('{$password}', str_replace(';',';;',$row['password']), $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['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']; }
//add the primary key uuid

View File

@ -613,7 +613,6 @@
$array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_type'] = 'set';
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'] = 'call_date=${strftime(%d-%b-%Y %r)}';
}
else {
$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';
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++;
$array['dialplans'][$x]['dialplan_details'][$y]['dialplan_detail_uuid'] = uuid();
$array['dialplans'][$x]['dialplan_details'][$y]['domain_uuid'] = $_SESSION['domain_uuid'];

View File

@ -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">
<condition field="${user_exists}" expression="^true$" />
<condition field="username" expression="^${caller_id_number}$" />
<condition field="destination_number" expression="^${caller_id_number}$">
<condition field="username" expression="^\Q${caller_id_number}\E$" />
<condition field="destination_number" expression="^\Q${caller_id_number}\E$">
<action application="answer"/>
<action application="sleep" data="1000"/>
<action application="set" data="record_append=false"/>

View File

@ -19,78 +19,77 @@
$apps[$x]['description']['pt-pt'] = '';
$apps[$x]['description']['pt-br'] = '';
//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";
//default settings
$y=0;
$apps[$x]['default_settings'][$y]['default_setting_uuid'] = "9317ddfd-6cb1-4294-9c57-4061dde66fe4";
$apps[$x]['default_settings'][$y]['default_setting_category'] = "dialplan";
$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++;
$apps[$x]['permissions'][$y]['name'] = "emergency_logs_view_all";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$apps[$x]['permissions'][$y]['name'] = "emergency_logs_view_all";
$apps[$x]['permissions'][$y]['groups'][] = "superadmin";
$y++;
//schema details
$z=0;
$apps[$x]['db'][$y]['table']['name'] = "v_emergency_logs";
$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]['key']['type'] = 'primary';
$apps[$x]['db'][$y]['fields'][$z]['description'] = '';
$z++;
$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']['sqlite'] = 'text';
$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']['reference']['table'] = 'v_domains';
$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'] = '';
$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']['sqlite'] = 'text';
$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']['reference']['table'] = 'v_domains';
$apps[$x]['db'][$y]['fields'][$z]['key']['reference']['field'] = 'domain_uuid';
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = 'extension';
$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']['mysql'] = "char(36)";
$apps[$x]['db'][$y]['fields'][$z]['type']['mysql'] = "char(36)";
$apps[$x]['db'][$y]['fields'][$z]['description'] = '';
$z++;
$apps[$x]['db'][$y]['fields'][$z]['name'] = 'event';
$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]['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'] = "insert_date";
$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']['mysql'] = 'date';
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
$z++;
$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']['sqlite'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['type']['mysql'] = "char(36)";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
$z++;
$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']['sqlite'] = 'date';
$apps[$x]['db'][$y]['fields'][$z]['type']['mysql'] = 'date';
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
$z++;
$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']['sqlite'] = "text";
$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]['name'] = "insert_date";
$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']['mysql'] = 'date';
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
$z++;
$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']['sqlite'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['type']['mysql'] = "char(36)";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
$z++;
$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']['sqlite'] = 'date';
$apps[$x]['db'][$y]['fields'][$z]['type']['mysql'] = 'date';
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
$z++;
$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']['sqlite'] = "text";
$apps[$x]['db'][$y]['fields'][$z]['type']['mysql'] = "char(36)";
$apps[$x]['db'][$y]['fields'][$z]['description']['en-us'] = "";
?>

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'] = "이벤트";
?>

View File

@ -78,9 +78,8 @@ if (!empty($_GET["show"])) {
$show = $_GET["show"];
}
//get the count
$sql = "select count(log_uuid) ";
$sql = "select count(emergency_log_uuid) ";
$sql .= "from v_emergency_logs ";
if ($show == 'all') {
$sql .= "where true ";
@ -117,7 +116,13 @@ else {
}
//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 ";
if ($show == 'all') {
$sql .= "where true ";
@ -132,8 +137,9 @@ if (!empty($search)) {
$sql .= ") ";
$parameters['search'] = '%'.$search.'%';
}
$sql .= "order by insert_date desc ";
$sql .= limit_offset($rows_per_page, $offset);
$parameters['time_zone'] = $time_zone;
$database = new database;
$emergency_logs = $database->select($sql, $parameters ?? null, 'all');
unset($sql, $parameters);
@ -143,12 +149,12 @@ $object = new token;
$token = $object->create($_SERVER['PHP_SELF']);
//additional includes
$document['title'] = 'Emergency Logs';
$document['title'] = $text['title-emergency_logs'];
require_once "resources/header.php";
//show the content
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";
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');"]);
@ -181,18 +187,18 @@ echo "<br /><br />\n";
echo "<table class='list'>\n";
echo "<tr class='list-header'>\n";
echo "<th class='left'>Time</th>\n";
echo "<th class='left'>Date</th>\n";
echo "<th class='left'>Extension</th>\n";
echo "<th class='left'>Event</th>\n";
echo "<th class='left'>".$text['label-emergency_time']."</th>\n";
echo "<th class='left'>".$text['label-emergency_date']."</th>\n";
echo "<th class='left'>".$text['label-emergency_extension']."</th>\n";
echo "<th class='left'>".$text['label-emergency_event']."</th>\n";
echo "</tr>\n";
if (!empty($emergency_logs) && is_array($emergency_logs) && @sizeof($emergency_logs) != 0) {
$x = 0;
foreach ($emergency_logs as $row) {
echo "<tr class='list-row'>\n";
echo " <td>".escape($row['time'])."</td>\n";
echo " <td>".escape($row['date'])."</td>\n";
echo " <td>".escape($row['time_formatted'])."</td>\n";
echo " <td>".escape($row['date_formatted'])."</td>\n";
echo " <td>".escape($row['extension'])."</td>\n";
echo " <td>".escape($row['event'])."</td>\n";
echo "</tr>\n";
@ -210,4 +216,4 @@ echo "</form>\n";
//include the footer
require_once "resources/footer.php";
?>
?>

View File

@ -473,6 +473,7 @@ if (!function_exists('fax_split_dtmf')) {
//field labels
$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) {
$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
$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);
if ($fax_recipient != '') {
$pdf->Write(0.3, $fax_recipient);

View File

@ -98,43 +98,42 @@
//get the count
$sql = "select count(fax_queue_uuid) ";
$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')) {
//show faxes for all domains
$sql .= "where true ";
// show faxes for all domains
$sql .= "WHERE true ";
}
elseif (permission_exists('fax_queue_domain')) {
//show faxes for one domain
$sql .= "where q.domain_uuid = :domain_uuid ";
// show faxes for one domain
$sql .= "WHERE q.domain_uuid = :domain_uuid ";
$parameters['domain_uuid'] = $domain_uuid;
}
else {
//show only assigned fax extensions
$sql = trim($sql);
$sql .= "from v_fax_queue as q, v_domains as d, v_users as u \n";
$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";
// show only assigned fax extensions
$sql .= "WHERE q.domain_uuid = :domain_uuid ";
$sql .= "AND u.user_uuid = :user_uuid ";
$parameters['domain_uuid'] = $domain_uuid;
$parameters['user_uuid'] = $_SESSION['user_uuid'];
}
if (isset($search)) {
$sql .= "and (\n";
$sql .= " lower(q.hostname) like :search \n";
$sql .= " or lower(q.fax_caller_id_name) like :search \n";
$sql .= " or lower(q.fax_caller_id_number) like :search \n";
$sql .= " or lower(q.fax_number) like :search \n";
$sql .= " or lower(q.fax_email_address) like :search \n";
$sql .= " or lower(q.insert_user) like :search \n";
$sql .= " or lower(q.fax_file) like :search \n";
$sql .= " or lower(q.fax_status) like :search \n";
$sql .= " or lower(q.fax_accountcode) like :search \n";
$sql .= "AND (";
$sql .= " LOWER(q.hostname) LIKE :search ";
$sql .= " OR LOWER(q.fax_caller_id_name) LIKE :search ";
$sql .= " OR LOWER(q.fax_caller_id_number) LIKE :search ";
$sql .= " OR LOWER(q.fax_number) LIKE :search ";
$sql .= " OR LOWER(q.fax_email_address) LIKE :search ";
$sql .= " OR LOWER(u.username) LIKE :search ";
$sql .= " OR LOWER(q.fax_file) LIKE :search ";
$sql .= " OR LOWER(q.fax_status) LIKE :search ";
$sql .= " OR LOWER(q.fax_accountcode) LIKE :search ";
$sql .= ") ";
$parameters['search'] = '%'.$search.'%';
$parameters['search'] = '%' . $search . '%';
}
if (isset($_GET["fax_status"]) && !empty($_GET["fax_status"])) {
$sql .= "and q.fax_status = :fax_status \n";
$parameters['fax_status'] = $_GET["fax_status"];
$sql .= "AND q.fax_status = :fax_status ";
$parameters['fax_status'] = $_GET["fax_status"];
}
$database = new database;
$num_rows = $database->select($sql, $parameters ?? null, 'column');
@ -177,7 +176,7 @@
$sql .= "q.fax_accountcode, ";
$sql .= "q.fax_command ";
$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 ";
if (!empty($_GET['show']) && $_GET['show'] == "all" && permission_exists('fax_queue_all')) {

View File

@ -89,7 +89,7 @@
//check to see if the process is running
if (file_exists($file)) {
$pid = file_get_contents($file);
if (posix_getsid($pid) === false) {
if (posix_getsid($pid) === false) {
//process is not running
$exists = false;
}
@ -103,6 +103,16 @@
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
$pid_exists = process_exists($pid_file);
@ -177,10 +187,10 @@
//prepare the smtp from and from name variables
$email_from = $setting->get('fax','smtp_from');
$email_from_name = $setting->get('fax','smtp_from_name');
if (!empty($email_from)) {
if (empty($email_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');
}
@ -215,7 +225,7 @@
$esl = event_socket::create();
if (!$esl->is_connected()) {
echo "Could not connect to event socket.\n";
exit;
exit;
}
//fax options, first attempt use the fax variables from settings
@ -246,15 +256,15 @@
//define the fax file
$common_variables = '';
$common_variables = "accountcode='" . $fax_accountcode . "',";
$common_variables .= "sip_h_accountcode='" . $fax_accountcode . "',";
$common_variables .= "domain_uuid=" . $domain_uuid . ",";
$common_variables .= "domain_name=" . $domain_name . ",";
$common_variables .= "origination_caller_id_name='" . $fax_caller_id_name . "',";
$common_variables .= "origination_caller_id_number='" . $fax_caller_id_number . "',";
$common_variables .= "fax_ident='" . $fax_caller_id_number . "',";
$common_variables .= "fax_header='" . $fax_caller_id_name . "',";
$common_variables .= "fax_file='" . $fax_file . "',";
$common_variables = "accountcode='" . escape_quote($fax_accountcode) . "',";
$common_variables .= "sip_h_accountcode='" . escape_quote($fax_accountcode) . "',";
$common_variables .= "domain_uuid=" . $domain_uuid . ",";
$common_variables .= "domain_name=" . $domain_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 .= "fax_ident='" . escape_quote($fax_caller_id_number) . "',";
$common_variables .= "fax_header='" . escape_quote($fax_caller_id_name) . "',";
$common_variables .= "fax_file='" . escape_quote($fax_file) . "',";
//extract fax_dtmf from the fax number
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);
if (count($route_array) == 0) {
//send the internal call to the registered extension
$fax_uri = "user/".$fax_number."@".$domain_name;
}
else {
//send the external call
$fax_uri = $route_array[0];
//check for valid extension
$sql = "select count(extension_uuid) ";
$sql .= "from v_extensions ";
$sql .= "where extension = :fax_number ";
$sql .= "and domain_uuid = :domain_uuid ";
$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
@ -284,7 +304,7 @@
$dial_string .= "fax_queue_uuid=" . $fax_queue_uuid. ",";
$dial_string .= "mailto_address='" . $fax_email_address . "',";
$dial_string .= "mailfrom_address='" . $email_from_address . "',";
$dial_string .= "fax_retry_attempts=" . $fax_retry_count . ",";
$dial_string .= "fax_retry_attempts=" . $fax_retry_count . ",";
$dial_string .= "fax_retry_limit=" . $retry_limit . ",";
//$dial_string .= "fax_retry_sleep=180,";
$dial_string .= "fax_verbose=true,";
@ -316,7 +336,9 @@
$fax_instance_id = pathinfo($fax_file, PATHINFO_FILENAME);
//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
$array['fax_queue'][0]['fax_queue_uuid'] = $fax_queue_uuid;
@ -410,11 +432,11 @@
$fax_file_basename = $path_info['basename'];
$fax_file_filename = $path_info['filename'];
$fax_file_extension = $path_info['extension'];
//set the fax file pdf and tif files
$fax_file_tif = path_join($fax_file_dirname, $fax_file_filename . '.' . $fax_file_extension);
$fax_file_pdf = path_join($fax_file_dirname, $fax_file_filename . '.pdf');
if (file_exists($fax_file_pdf)) {
$fax_file_name = $fax_file_filename . '.pdf';
}
@ -457,7 +479,7 @@
$email_subject = str_replace('${fax_messages}', $fax_messages, $email_subject);
$email_subject = str_replace('${fax_file_warning}', $fax_file_warning, $email_subject);
$email_subject = str_replace('${fax_subject_tag}', $fax_email_inbound_subject_tag, $email_subject);
$email_subject = str_replace('${fax_success}', $fax_success, $email_subject);
$email_subject = str_replace('${fax_result_code}', $fax_result_code, $email_subject);
$email_subject = str_replace('${fax_result_text}', $fax_result_text, $email_subject);
@ -472,7 +494,7 @@
$email_subject = str_replace('${fax_date}', date('Y-m-d H:i:s', $fax_epoch), $email_subject);
$email_subject = str_replace('${fax_duration}', $fax_duration, $email_subject);
$email_subject = str_replace('${fax_duration_formatted}', $fax_duration_formatted, $email_subject);
//replace variables in email body
$email_body = str_replace('${domain_name}', $domain_uuid, $email_body);
$email_body = str_replace('${number_dialed}', $fax_number, $email_body);
@ -481,7 +503,7 @@
$email_body = str_replace('${fax_messages}', $fax_messages, $email_body);
$email_body = str_replace('${fax_file_warning}', $fax_file_warning, $email_body);
$email_body = str_replace('${fax_subject_tag}', $fax_email_inbound_subject_tag, $email_body);
$email_body = str_replace('${fax_success}', $fax_success, $email_body);
$email_body = str_replace('${fax_result_code}', $fax_result_code, $email_body);
$email_body = str_replace('${fax_result_text}', $fax_result_text, $email_body);

View File

@ -102,6 +102,14 @@
$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.";
$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_category'] = "provision";
$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_description'] = "Bluetooth Handsfree - 0 - Off, 1 - On";
$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_category'] = "provision";
$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_description'] = "Always Ring Speaker. 0 - No, 1 - Yes both, 2 - Yes Speaker Only. 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_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_category'] = "provision";
$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_subcategory'] = "grandstream_screensaver";
$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_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++;
$apps[$x]['default_settings'][$y]['default_setting_uuid'] = "eb96abe3-0225-4c75-adcf-982e7121d905";
$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_description'] = "Internet Protocol. 0 - Both, prefer IPv4, 1 - Both, prefer IPv6, 2 - IPv4 Only, 3 - IPv6 Only. Default is 0";
$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_category'] = "provision";
$apps[$x]['default_settings'][$y]['default_setting_subcategory'] = "grandstream_accept_sip_from_proxy_only";

View File

@ -127,7 +127,7 @@
echo "<div class='action_bar' id='action_bar'>\n";
echo " <div class='heading'><b>".$text['title-gswave']."</b></div>\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 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";

View File

@ -526,7 +526,7 @@
$sql = "select * from v_ivr_menu_options ";
$sql .= "where domain_uuid = :domain_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['ivr_menu_uuid'] = $ivr_menu_uuid;
$database = new database;
@ -1550,4 +1550,4 @@
//include the footer
require_once "resources/footer.php";
?>
?>

View File

@ -177,7 +177,7 @@
unset($sql, $parameters);
//get the domain_name and domain_uuid
if ($_SESSION['provision']['http_domain_filter']['boolean'] == "true") {
if (empty($domain_uuid)) {
//get the domain_name
$domain_array = explode(":", $_SERVER["HTTP_HOST"]);
$domain_name = $domain_array[0];
@ -452,6 +452,9 @@
$prov->file = $file;
$file_contents = $prov->render();
//clean the output buffer
ob_clean();
//deliver the customized config over HTTP/HTTPS
//need to make sure content-type is correct
if (!empty($_REQUEST['content_type']) && $_REQUEST['content_type'] == 'application/octet-stream') {
@ -531,5 +534,3 @@
}
?>

View File

@ -662,7 +662,7 @@
$view->engine = "smarty";
}
$view->template_dir = $template_dir ."/".$device_template."/";
$view->cache_dir = $_SESSION['server']['temp']['dir'];
$view->cache_dir = sys_get_temp_dir();
$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
@ -826,7 +826,7 @@
}
//convert seconds to minutes for grandstream
if ($device_vendor == 'grandstream') {
if ($device_vendor == 'grandstream' && $register_expires >= 60) {
$register_expires = round($register_expires / 60);
}

View File

@ -223,6 +223,14 @@
$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_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
$y=0;

View File

@ -84,6 +84,7 @@
<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-meddelanden.wav"/>
</match>
</input>
<input pattern="^(\d+):(.*)$">
<match>
@ -186,14 +187,14 @@
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*])$">
<match>
<!--<action function="play-file" data="voicemail/vm-press.wav"/>-->
<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-press.wav"/>-->
<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-press.wav"/>-->
<action function="say" data="$3" method="pronounced" type="name_spelled"/>-->
<action function="play-file" data="voicemail/vm-rerecord.wav"/>-->
<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-press.wav"/>
<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-press.wav"/>
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-rerecord.wav"/>
</match>
</input>
</macro>

View File

@ -310,11 +310,11 @@
<param name="force-register-db-domain" value="$${domain}" enabled="false"/>
<!-- 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 -->
<!-- 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"/>

View File

@ -36,25 +36,25 @@
--convert_ext (optional) to replace the file's extension
--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
local send_mail = require 'resources.functions.send_mail'
local Database = require "resources.functions.database"
local Settings = require "resources.functions.lazy_settings"
local Utils = require "resources.functions.channel_utils";
local send_mail = require 'resources.functions.send_mail'
local Database = require "resources.functions.database"
local Settings = require "resources.functions.lazy_settings"
local Utils = require "resources.functions.channel_utils";
--define a function to send email
local db = dbh or Database.new('system')
local settings = Settings.new(db, domain_name, domain_uuid)
local email_queue_enabled = settings:get('email_queue', 'enabled', 'boolean') or "false";
local db = dbh or Database.new('system')
local settings = Settings.new(db, domain_name, domain_uuid)
local email_queue_enabled = settings:get('email_queue', 'enabled', 'boolean') or "false";
--get the argv values
script_name = argv[0];
delete = argv[1];
script_name = argv[0];
delete = argv[1];
--prepare the api object
api = freeswitch.API();
api = freeswitch.API();
--get sessions info
if (session and session:ready()) then
@ -71,17 +71,17 @@ else
headers = {}
end
function escapeCSV(s)
function escape_csv(s)
if string.find(s, '[,"]') then
s = '"' .. string.gsub(s, '"', '""') .. '"'
end
return s
end
function toCSV(tt)
function to_csv(tt)
local s = ""
for _,p in ipairs(tt) do
s = s .. "," .. escapeCSV(p)
s = s .. "," .. escape_csv(p)
end
return string.sub(s, 2)
end
@ -100,9 +100,9 @@ local sql = "SELECT * FROM v_email_templates ";
body = row.template_body;
language = row.template_language;
end);
if (debug["sql"]) then
freeswitch.consoleLog("info", "[emergency] SQL: " .. sql .. "\n");
end
if (debug["sql"]) then
freeswitch.consoleLog("info", "[emergency] SQL: " .. sql .. "\n");
end
--freeswitch.consoleLog("info", "[template] SQL: " .. sql .. "body: " .. body .. "\n");
--get email from
@ -110,11 +110,9 @@ local sql = "SELECT * FROM v_default_settings ";
sql = sql .. "WHERE default_setting_category = 'email' ";
sql = sql .. "AND (default_setting_subcategory = 'smtp_from' ";
sql = sql .. "OR default_setting_subcategory = 'smtp_from_name') ";
if (debug["sql"]) then
freeswitch.consoleLog("notice", "[emergency] SQL: " .. sql .. "\n");
end
if (debug["sql"]) then
freeswitch.consoleLog("notice", "[emergency] SQL: " .. sql .. "\n");
end
dbh:query(sql, function(row)
if (row.default_setting_subcategory == "smtp_from") then
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
from_name = row.default_setting_value;
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);
dbh:release()
if (#to > 0) then
--set event
--get variables
if (session and session:ready()) then
domain_uuid = session:getVariable("domain_uuid");
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");
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
--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);
--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
if (body ~= nil) then
body = body:gsub("${caller_id_name}", caller_id_name);
@ -225,54 +232,30 @@ if (#to > 0) then
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
local dbh = Database.new('system');
--insert into emergency logs
local sql = "INSERT INTO v_emergency_logs ( ";
sql = sql .. " log_uuid, ";
sql = sql .. " domain_uuid, ";
sql = sql .. " date, ";
sql = sql .. " time, ";
sql = sql .. " extension, ";
sql = sql .. " event ";
sql = sql .. ") ";
sql = sql .. "VALUES ( ";
sql = sql .. " :emergency_logs_uuid, ";
sql = sql .. " :domain_uuid, ";
sql = sql .. " :date, ";
sql = sql .. " :time, ";
sql = sql .. " :extension, ";
sql = sql .. " :event ";
sql = sql .. ") ";
sql = sql .. " emergency_log_uuid, ";
sql = sql .. " domain_uuid, ";
sql = sql .. " insert_date, ";
sql = sql .. " extension, ";
sql = sql .. " event ";
sql = sql .. ") ";
sql = sql .. "VALUES ( ";
sql = sql .. " :emergency_log_uuid, ";
sql = sql .. " :domain_uuid, ";
sql = sql .. " now(), ";
sql = sql .. " :extension, ";
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
freeswitch.consoleLog("info", "[emergency] SQL: " .. sql .. "\n");
end
if (debug["sql"]) then
freeswitch.consoleLog("info", "[emergency] SQL: " .. sql .. "\n");
end
dbh:query(sql, params);
dbh:release();
dbh:query(sql, params);
dbh:release();

View File

@ -16,7 +16,7 @@
--
-- The Initial Developer of the Original Code is
-- Mark J Crane <markjcrane@fusionpbx.com>
-- Copyright (C) 2015-2023
-- Copyright (C) 2015-2024
-- the Initial Developer. All Rights Reserved.
--
-- Contributor(s):
@ -28,6 +28,9 @@
--create the api object
api = freeswitch.API();
--get the server hostname
hostname = api:executeString("hostname");
--include config.lua
require "resources.functions.config";
@ -312,7 +315,6 @@
end
sql = sql .. ":fax_time ";
sql = sql .. ")";
local params = {
uuid = uuid;
domain_uuid = domain_uuid;
@ -333,11 +335,9 @@
fax_date = os.date("%Y-%m-%d %X");
fax_time = os.time();
};
if (debug["sql"]) then
freeswitch.consoleLog("notice", "[fax] SQL: " .. sql .. "; params:" .. json.encode(params) .. "\n");
end
dbh:query(sql, params);
--add the fax files
@ -345,10 +345,10 @@
if (fax_success =="1") then
if (storage_type == "base64") then
--include the file io
local file = require "resources.functions.file"
local file = require "resources.functions.file"
--read file content as base64 string
fax_base64 = assert(file.read_base64(fax_file));
fax_base64 = assert(file.read_base64(fax_file));
end
local sql = {}
@ -421,6 +421,66 @@
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
if (fax_success ~= nil) then
freeswitch.consoleLog("INFO","fax_success: '" .. fax_success .. "'\n");

View File

@ -91,7 +91,7 @@
subject = subject:gsub("${caller_id_name}", caller_id_name);
subject = subject:gsub("${caller_id_number}", caller_id_number);
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 = '=?utf-8?B?'..base64.encode(subject)..'?=';
@ -99,7 +99,7 @@
body = body:gsub("${caller_id_name}", caller_id_name);
body = body:gsub("${caller_id_number}", caller_id_number);
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("%s+", "");
body = body:gsub("&nbsp;", " ");
@ -129,13 +129,12 @@
originate_disposition = env:getHeader("originate_disposition");
originate_causes = env:getHeader("originate_causes");
uuid = env:getHeader("uuid");
domain_uuid = env:getHeader("domain_uuid");
domain_name = env:getHeader("domain_name");
sip_to_user = env:getHeader("sip_to_user");
dialed_user = env:getHeader("dialed_user");
missed_call_app = env:getHeader("missed_call_app");
missed_call_data = env:getHeader("missed_call_data");
call_direction = env:getHeader("call_direction");
domain_uuid = env:getHeader("domain_uuid") or '';
domain_name = env:getHeader("domain_name") or '';
sip_to_user = env:getHeader("sip_to_user") or '';
missed_call_app = env:getHeader("missed_call_app") or '';
missed_call_data = env:getHeader("missed_call_data") or '';
call_direction = env:getHeader("call_direction") or '';
-- get the Caller ID
caller_id_name = env:getHeader("caller_id_name");

View File

@ -28,7 +28,7 @@
-- Gill Abada <gill.abada@gmail.com>
--include the log
log = require "resources.functions.log".ring_group
log = require "resources.functions.log".ring_group
--connect to the database
local Database = require "resources.functions.database";
@ -149,6 +149,7 @@
sip_to_user = session:getVariable("sip_to_user");
caller_id_name = session:getVariable("caller_id_name");
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_number = session:getVariable("outbound_caller_id_number");
effective_caller_id_name = session:getVariable("effective_caller_id_name");
@ -200,9 +201,9 @@
--set hold music
if (session:getVariable("hold_music") == nil) then
hold_music = '';
default_hold_music = '';
else
hold_music = ",hold_music="..session:getVariable("hold_music");
default_hold_music = session:getVariable("hold_music");
end
--prepare the api object
@ -244,6 +245,10 @@
missed_call_data = row["ring_group_missed_call_data"];
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
record_path = recordings_dir .. "/" .. domain_name .. "/archive/" .. os.date("%Y/%b/%d");
record_path = record_path:gsub("\\", "/");
@ -355,7 +360,7 @@
caller_id_name = caller_id_name:gsub([["]], "&#34;");
caller_id_number = caller_id_number:gsub("'", "&#39;");
caller_id_number = caller_id_number:gsub([["]], "&#34;");
--prepare the subject
subject = subject:gsub("${caller_id_name}", caller_id_name);
subject = subject:gsub("${caller_id_number}", caller_id_number);
@ -492,8 +497,8 @@
WHEN r.ring_group_strategy <> 'enterprise'
THEN d.destination_delay
END as destination_delay,
r.ring_group_caller_id_name, r.ring_group_caller_id_number,
r.ring_group_cid_name_prefix, r.ring_group_cid_number_prefix,
r.ring_group_caller_id_name, r.ring_group_caller_id_number,
r.ring_group_cid_name_prefix, r.ring_group_cid_number_prefix,
r.ring_group_timeout_data, r.ring_group_ringback
FROM
v_ring_groups as r, v_ring_group_destinations as d
@ -539,10 +544,16 @@
cmd = "user_exists id ".. destination_number .." "..domain_name;
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
--add user_exists true or false to the row array
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
cmd = "user_data ".. destination_number .."@" ..leg_domain_name.." var do_not_disturb";
if (api:executeString(cmd) ~= "true") then
@ -553,6 +564,7 @@
--set the values
external = "true";
row['user_exists'] = "false";
--add the row to the destinations array
destinations[x] = row;
end
@ -834,13 +846,25 @@
cmd = "user_data ".. destination_number .."@"..domain_name.." var extension_uuid";
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
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 .. delay_name.."="..destination_delay..",";
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 .. "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);
if (user_contact ~= "error/user_not_registered") then
dial_string = dial_string_user .. user_contact;
@ -853,7 +877,7 @@
dial_string = "[sip_invite_domain="..domain_name..",domain_name="..domain_name..",call_direction="..call_direction..","..group_confirm..""..timeout_name.."="..destination_timeout..","..delay_name.."="..destination_delay.."]" .. row.destination_number;
else
--external number
-- have to double destination_delay here due a FS bug requiring a 50% delay value for internal externsions, but not external calls.
-- have to double destination_delay here due a FS bug requiring a 50% delay value for internal externsions, but not external calls.
--destination_delay = destination_delay * 2;
route_bridge = 'loopback/'..destination_number;
@ -889,8 +913,16 @@
caller_id = caller_id .. ",origination_caller_id_number="..ring_group_caller_id_number..",";
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
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
--add a delimiter between destinations
@ -1021,9 +1053,9 @@
session:setVariable("presence_id", ring_group_extension.."@"..domain_name);
send_presence(uuid, ring_group_extension.."@"..domain_name, "early");
end
session:execute("bridge", app_data);
--set the presence to terminated and unset presence_id
if (session:getVariable("ring_group_send_presence") == "true") then
session:setVariable("presence_id", "");

View File

@ -286,13 +286,13 @@
--get the smtp from address and name
smtp_from = settings:get('voicemail', 'smtp_from', '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');
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');
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..">";
end

View File

@ -288,6 +288,8 @@
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, "{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) .. [["/>]]);
if (tonumber(ivr_menu_option_digits) and #ivr_menu_option_digits >= tonumber(direct_dial_digits_min)) then

View File

@ -1,6 +1,6 @@
-- xml_handler.lua
-- 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.
--
-- Redistribution and use in source and binary forms, with or without
@ -155,6 +155,12 @@
--exits the script if we didn't connect properly
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
hostname = trim(api:execute("hostname", ""));
@ -167,6 +173,7 @@
--get the dialplan xml
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 = 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 ";
@ -193,6 +200,7 @@
freeswitch.consoleLog("notice", "[dialplan] SQL: " .. sql .. "; params:" .. json.encode(params) .. "\n");
end
dbh:query(sql, params, function(row)
dialplan_found = true;
if (row.domain_uuid ~= nil) then
domain_name = row.domain_name;
else
@ -202,28 +210,41 @@
xml:append(row.dialplan_xml);
end
end);
if (xml == nil) then
--sanitize the destination if not numeric
if (type(destination_number) == "string") then
destination_number = destination_number:gsub("^%+", "");
destination_number = tonumber(destination_number);
if (type(tonumber(destination_number)) ~= "number") then
destination_number = 'not numeric';
--handle not found
if (dialplan_found == nil) then
--check if the sql query timed out
local current_time = os.time();
local elapsed_time = current_time - start_time;
if elapsed_time > timeout_seconds then
--sql query timed out - unset the xml object to prevent the xml not found
xml = nil;
end
if (xml ~= nil) then
--sanitize the destination if not numeric
if (type(destination_number) == "string") then
destination_number = destination_number:gsub("^%+", "");
destination_number = tonumber(destination_number);
if (type(tonumber(destination_number)) ~= "number") then
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
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
else
--get the domain diaplan xml from the database
sql = "select dialplan_xml from v_dialplans as p ";
if (context_name == "public" or string.match(context_name, "@")) then
sql = sql .. "where p.dialplan_context = :call_context ";
@ -238,26 +259,31 @@
freeswitch.consoleLog("notice", "[dialplan] SQL: " .. sql .. "; params:" .. json.encode(params) .. "\n");
end
dbh:query(sql, params, function(row)
dialplan_found = true;
xml:append(row.dialplan_xml);
end);
end
--set the xml array and then concatenate the array to a string
xml:append([[ </context>]]);
xml:append([[ </section>]]);
xml:append([[</document>]]);
XML_STRING = xml:build();
if (dialplan_found ~= nil and dialplan_found) then
xml:append([[ </context>]]);
xml:append([[ </section>]]);
xml:append([[</document>]]);
XML_STRING = xml:build();
end
--close the database connection
dbh:release();
--set the cache
local ok, err = cache.set(dialplan_cache_key, XML_STRING, expire["dialplan"]);
if debug["cache"] then
if ok then
freeswitch.consoleLog("notice", "[xml_handler] " .. dialplan_cache_key .. " stored in the cache\n");
else
freeswitch.consoleLog("warning", "[xml_handler] " .. dialplan_cache_key .. " can not be stored in the cache: " .. tostring(err) .. "\n");
if (XML_STRING ~= nil) then
local ok, err = cache.set(dialplan_cache_key, XML_STRING, expire["dialplan"]);
if debug["cache"] then
if ok then
freeswitch.consoleLog("notice", "[xml_handler] " .. dialplan_cache_key .. " stored in the cache\n");
else
freeswitch.consoleLog("warning", "[xml_handler] " .. dialplan_cache_key .. " can not be stored in the cache: " .. tostring(err) .. "\n");
end
end
end

View File

@ -54,7 +54,7 @@
end
--get the hostname
local hostname = trim(api:execute("switchname", ""));
local hostname = trim(api:execute("hostname", ""));
-- redirect call to another box
local function make_proxy_call(destination, call_hostname)
@ -286,7 +286,7 @@
params[param_name] = extension.."@"..domain_name;
end
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 ";
if (debug["sql"]) then
log.noticef("SQL: %s; params: %s", sql, json.encode(params));
@ -294,14 +294,17 @@
local is_child
dbh:query(sql, params, function(row)
--for key, val in pairs(row) do
-- log.notice("row "..key.." "..val);
-- log.notice("row "..key.." "..val);
--end
--log.notice("-----------------------");
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;
end);
--log.notice("uuid: "..uuid);
--log.notice("call_hostname: "..call_hostname);
if is_child then
-- we need intercept `parent` call e.g. call in FIFO/CallCenter Queue
@ -348,6 +351,7 @@
if (uuid ~= nil) then
if (session:getVariable("billmsec") == nil) then
if (hostname == call_hostname) then
log.noticef("intercept `%s`.", uuid)
session:execute("intercept", uuid);
else
session:execute("export", "sip_h_X-intercept_uuid="..uuid);
@ -385,3 +389,6 @@
--cmd = "originate user/1007@voip.example.com &intercept("..uuid..")";
--api = freeswitch.API();
--result = api:executeString(cmd);

View File

@ -25,18 +25,19 @@
--exits the script if we didn't connect properly
assert(dbh:connected());
--get the session variables
sounds_dir = session:getVariable("sounds_dir");
park_direction = session:getVariable("park_direction");
uuid = session:getVariable("uuid");
domain_name = session:getVariable("domain_name");
park_extension = session:getVariable("park_extension");
park_range = session:getVariable("park_range");
park_announce = session:getVariable("park_announce");
park_timeout_type = session:getVariable("park_timeout_type");
park_timeout_destination = session:getVariable("park_timeout_destination");
park_timeout_seconds = session:getVariable("park_timeout_seconds");
park_music = session:getVariable("park_music");
sounds_dir = session:getVariable("sounds_dir") or '';
park_direction = session:getVariable("park_direction") or '';
uuid = session:getVariable("uuid") or '';
domain_name = session:getVariable("domain_name") or '';
park_extension = session:getVariable("park_extension") or '';
park_range = session:getVariable("park_range") or '';
park_announce = session:getVariable("park_announce") or '';
park_timeout_type = session:getVariable("park_timeout_type") or '';
park_timeout_destination = session:getVariable("park_timeout_destination") or '';
park_timeout_seconds = session:getVariable("park_timeout_seconds") or '';
park_music = session:getVariable("park_music") or '';
--define the trim function
require "resources.functions.trim";
@ -188,9 +189,8 @@
result = api:executeString(cmd);
else
context = session:getVariable("context");
caller_id_number = session:getVariable("caller_id_number");
dialed_extension = session:getVariable("dialed_extension");
dialed_user = session:getVariable("dialed_user");
caller_id_number = session:getVariable("caller_id_number") or '';
dialed_extension = session:getVariable("dialed_extension") or '';
cmd = "user_exists id ".. caller_id_number .." "..domain_name;
if (api:executeString(cmd) == "true") then
--bridge the current call to the call that is parked
@ -221,7 +221,7 @@
result = trim(api:executeString(cmd));
else
--transfer the call back to the callee
session:execute("transfer", dialed_user .." XML "..context);
session:execute("transfer", dialed_extension .." XML "..context);
end
end

View File

@ -17,7 +17,7 @@
The Initial Developer of the Original Code is
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.
Contributor(s):
@ -744,10 +744,10 @@
$this->message_saved();
//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
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 .= "from ";
$sql .= "v_voicemail_messages as m, ";
@ -833,7 +833,7 @@
fpassthru($fd);
//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);
}

View File

@ -35,6 +35,19 @@
&& !empty($_REQUEST["uuid"]) && is_uuid($_REQUEST["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->domain_uuid = $_SESSION['domain_uuid'];
$voicemail->type = $_REQUEST['t'] ?? null;

View File

@ -413,19 +413,18 @@ if (!class_exists('xml_cdr')) {
if (isset($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)) {
$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
//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
@ -479,6 +478,15 @@ if (!class_exists('xml_cdr')) {
//marked as missed
$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)) {
//fax server
$missed_call = 'false';
@ -491,25 +499,21 @@ if (!class_exists('xml_cdr')) {
//ring group or multi destination bridge statement
$missed_call = 'false';
}
if (isset($xml->variables->destination_number) && substr($xml->variables->destination_number, 0, 3) == '*99') {
//voicemail
$missed_call = 'true';
}
if (isset($xml->variables->voicemail_message) && $xml->variables->voicemail_message == true) {
//voicemail
if (isset($xml->variables->cc_side) && $xml->variables->cc_side == 'member'
&& isset($xml->variables->cc_cause) && $xml->variables->cc_cause == 'cancel') {
//call center
$missed_call = 'true';
}
if (isset($xml->variables->billsec) && $xml->variables->billsec > 0) {
//answered call
$missed_call = 'false';
}
if (isset($xml->variables->cc_side) && $xml->variables->cc_side == 'agent') {
//call center
$missed_call = 'false';
if (isset($xml->variables->destination_number) && substr($xml->variables->destination_number, 0, 3) == '*99') {
//voicemail
$missed_call = 'true';
}
if (isset($xml->variables->cc_side) && $xml->variables->cc_side == 'member'
&& isset($xml->variables->cc_cause) && $xml->variables->cc_cause == 'cancel') {
//call center
if (isset($xml->variables->voicemail_answer_stamp) && !empty($xml->variables->voicemail_answer_stamp)) {
//voicemail
$missed_call = 'true';
}
@ -571,6 +575,9 @@ if (!class_exists('xml_cdr')) {
if (substr($destination_number, 0, 3) == '*99') {
$status = 'voicemail';
}
if (isset($xml->variables->voicemail_message_seconds) && $xml->variables->voicemail_message_seconds > 0) {
$status = 'voicemail';
}
if ($xml->variables->hangup_cause == 'ORIGINATOR_CANCEL') {
$status = 'cancelled';
}
@ -675,7 +682,7 @@ if (!class_exists('xml_cdr')) {
$this->array[$key]['last_arg'] = urldecode($xml->variables->last_arg);
//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";
}
else { //if ($xml->variables->voicemail_action == "save") {
@ -1221,7 +1228,7 @@ if (!class_exists('xml_cdr')) {
//voicemails
if ($app['application'] == 'voicemails') {
$app['status'] = 'answered';
$app['status'] = 'voicemail';
}
//debug - add the callee_id_number to the end of the status
@ -2001,4 +2008,3 @@ if (!class_exists('xml_cdr')) {
}
?>

View File

@ -28,10 +28,17 @@
//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;
//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
$sql = "select \n";
$sql .= " status, \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_number, \n";
$sql .= " answer_stamp \n";
@ -43,7 +50,7 @@
$sql .= " direction = 'inbound' \n";
$sql .= " or direction = 'local' \n";
$sql .= " ) \n";
$sql .= " and (missed_call = true or bridge_uuid is null) ";
$sql .= " and (status = 'missed') ";
$sql .= " and hangup_cause <> 'LOSE_RACE' ";
if (!permission_exists('xml_cdr_domain')) {
if (!empty($assigned_extensions)) {
@ -67,6 +74,8 @@
$sql .= "and start_epoch > ".(time() - 86400)." \n";
$sql .= "order by \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['domain_uuid'] = $_SESSION['domain_uuid'];
if (!isset($database)) { $database = new database; }
@ -145,7 +154,6 @@
) ? true : false;
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'));
if (!empty($_SESSION['domain']['time_format']) && $_SESSION['domain']['time_format']['text'] == '12h') {
$start_date_time = str_replace(' 0',' ', $start_date_time);
@ -168,7 +176,7 @@
echo "<tr ".$tr_link.">\n";
echo "<td valign='middle' class='".$row_style[$c]."' style='cursor: help; padding: 0 0 0 6px;'>\n";
if ($theme_cdr_images_exist) {
$call_result = ($row['answer_stamp'] != '') ? 'voicemail' : 'cancelled';
$call_result = $row['status'];
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";
}
@ -183,11 +191,11 @@
unset($sql, $parameters, $result, $num_rows, $index, $row);
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>";
//$n++;
echo "<span class='hud_expander' onclick=\"$('#hud_missed_calls_details').slideToggle('fast');\"><span class='fas fa-ellipsis-h'></span></span>";
echo "</div>\n";
?>
?>

View File

@ -28,12 +28,19 @@
//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;
//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
$sql = "
select
status,
direction,
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_number,
destination_number,
@ -49,13 +56,7 @@
$x = 0;
foreach ($assigned_extensions as $assigned_extension_uuid => $assigned_extension) {
$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['caller_id_number_'.$x] = $assigned_extension;
$parameters['destination_number_1_'.$x] = $assigned_extension;
$parameters['destination_number_2_'.$x] = '*99'.$assigned_extension;
$x++;
}
if (!empty($sql_where_array)) {
@ -67,10 +68,11 @@
$sql .= "and false \n";
}
}
$sql .= "
and start_epoch > ".(time() - 86400)."
order by
start_epoch desc";
$sql .= "and hangup_cause <> 'LOSE_RACE' ";
$sql .= "and start_epoch > ".(time() - 86400)." ";
$sql .= "order by 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['domain_uuid'] = $_SESSION['domain_uuid'];
if (!isset($database)) { $database = new database; }
@ -156,7 +158,6 @@
) ? true : false;
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'));
if (!empty($_SESSION['domain']['time_format']) && $_SESSION['domain']['time_format']['text'] == '12h') {
$start_date_time = str_replace(' 0',' ', $start_date_time);
@ -192,17 +193,7 @@
//determine call result and appropriate icon
echo "<td valign='middle' class='".$row_style[$c]."' style='cursor: help; padding: 0 0 0 6px;'>\n";
if ($theme_cdr_images_exist) {
if ($row['direction'] == 'inbound' || $row['direction'] == 'local') {
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'; }
}
$call_result = $row['status'];
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";
}
@ -221,9 +212,8 @@
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 "</div>";
//$n++;
echo "<span class='hud_expander' onclick=\"$('#hud_recent_calls_details').slideToggle('fast');\"><span class='fas fa-ellipsis-h'></span></span>";
echo "</div>\n";
?>
?>

View File

@ -751,8 +751,8 @@
$hangup_cause = strtolower($hangup_cause);
$hangup_cause = ucwords($hangup_cause);
//if call cancelled, show the ring time, not the bill time.
$seconds = $row['hangup_cause'] == "ORIGINATOR_CANCEL" ? $row['duration'] : round(($row['billmsec'] / 1000), 0, PHP_ROUND_HALF_UP);
//get the duration if null use 0
$duration = $row['duration'] ?? 0;
//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'))) {
@ -914,7 +914,7 @@
}
//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
if (permission_exists("xml_cdr_status")) {

View File

@ -229,7 +229,7 @@
//prepare to page the results
//$rows_per_page = ($_SESSION['domain']['paging']['numeric'] != '') ? $_SESSION['domain']['paging']['numeric'] : 50; //set on the page that includes this page
if (empty($_GET['page']) || (!empty($_GET['page']) && !is_numeric($_GET['page']))) {
if (empty($_GET['page']) || (!empty($_GET['page']) && !is_numeric($_GET['page']))) {
$_GET['page'] = 0;
}
//ensure page is within bounds of integer
@ -245,6 +245,12 @@
}
$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
$sql = "select \n";
$sql .= "c.domain_uuid, \n";
@ -253,7 +259,7 @@
$sql .= "c.start_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), '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.hangup_cause, \n";
$sql .= "c.billsec as duration, \n";
@ -476,7 +482,7 @@
$sql .= "and hangup_cause != 'LOSE_RACE' \n";
}
if (!empty($status)) {
$sql .= "and status >= :status \n";
$sql .= "and status = :status \n";
$parameters['status'] = $status;
}
if (!empty($xml_cdr_uuid)) {

View File

@ -75,9 +75,6 @@ class plugin_database {
$domain_array = explode(":", $_SERVER["HTTP_HOST"]);
$domain_name = $domain_array[0];
//temp directory
$_SESSION['server']['temp']['dir'] = '/tmp';
//create token
//$object = new token;
//$token = $object->create('login');
@ -90,7 +87,7 @@ class plugin_database {
$view = new template();
$view->engine = 'smarty';
$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();
//add translations

View File

@ -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']['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
$domain_array = explode(":", $_SERVER["HTTP_HOST"]);
$domain_name = $domain_array[0];
//temp directory
$_SESSION['server']['temp']['dir'] = '/tmp';
//use the session username
if (isset($_SESSION['username'])) {
$_POST['username'] = $_SESSION['username'];
@ -87,7 +79,7 @@ class plugin_email {
$view = new template();
$view->engine = 'smarty';
$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();
//assign default values to the template
@ -312,18 +304,10 @@ class plugin_email {
//echo $email_response."<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
$domain_array = explode(":", $_SERVER["HTTP_HOST"]);
$domain_name = $domain_array[0];
//temp directory
$_SESSION['server']['temp']['dir'] = '/tmp';
//create token
//$object = new token;
//$token = $object->create('login');
@ -336,7 +320,7 @@ class plugin_email {
$view = new template();
$view->engine = 'smarty';
$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();
//assign default values to the template

View File

@ -38,9 +38,6 @@ class plugin_ldap {
$domain_array = explode(":", $_SERVER["HTTP_HOST"]);
$domain_name = $domain_array[0];
//temp directory
$_SESSION['server']['temp']['dir'] = '/tmp';
//create token
//$object = new token;
//$token = $object->create('login');
@ -53,7 +50,7 @@ class plugin_ldap {
$view = new template();
$view->engine = 'smarty';
$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();
//add translations

View File

@ -70,18 +70,10 @@ class plugin_totp {
//request the username
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
$domain_array = explode(":", $_SERVER["HTTP_HOST"]);
$domain_name = $domain_array[0];
//temp directory
$_SESSION['server']['temp']['dir'] = '/tmp';
//create token
//$object = new token;
//$token = $object->create('login');
@ -94,7 +86,7 @@ class plugin_totp {
$view = new template();
$view->engine = 'smarty';
$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();
//assign default values to the template
@ -180,18 +172,10 @@ class plugin_totp {
$_SESSION["user_email"] = $row['user_email'];
$_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
$domain_array = explode(":", $_SERVER["HTTP_HOST"]);
$domain_name = $domain_array[0];
//temp directory
$_SESSION['server']['temp']['dir'] = '/tmp';
//create token
//$object = new token;
//$token = $object->create('login');
@ -204,7 +188,7 @@ class plugin_totp {
$view = new template();
$view->engine = 'smarty';
$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();
//assign values to the template

View File

@ -350,14 +350,11 @@
$domain_array = explode(":", $_SERVER["HTTP_HOST"]);
$domain_name = $domain_array[0];
//temp directory
$_SESSION['server']['temp']['dir'] = '/tmp';
//initialize a template object
$view = new template();
$view->engine = 'smarty';
$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();
//assign default values to the template

View File

@ -12,7 +12,7 @@ if (!class_exists('software')) {
* version
*/
public static function version() {
return '5.2.0';
return '5.2.4';
}
/**

View File

@ -2329,6 +2329,30 @@ $text['label-answered']['zh-cn'] = "回答";
$text['label-answered']['ja-jp'] = "答えた";
$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-gb'] = "Active Users";
$text['label-active_users']['ar-eg'] = "الأعضاء النشيطين";

View File

@ -44,12 +44,12 @@
}
//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();
if (!isset($_SESSION['session']['created'])) {
$_SESSION['session']['created'] = time();
} else if (time() - $_SESSION['session']['created'] > 28800) {
// session started more than 8 hours ago
} elseif (time() - $_SESSION['session']['created'] > 28800) {
//session started more than 8 hours ago
session_regenerate_id(true); // rotate the session id
$_SESSION['session']['created'] = time(); // update creation time
}

View File

@ -1,20 +1,42 @@
<?php
/**
* cache class provides an abstracted cache
*
* @method string set
* @method string get
* @method string delete
* @method string flush
* Provides an abstracted cache
*/
class cache {
private $settings;
private $syslog;
private $location;
private $method;
/**
* Called when the object is created
*/
public function __construct() {
//place holder
public function __construct(settings $settings = null) {
//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);
//save to memcache
if ($_SESSION['cache']['method']['text'] == "memcache") {
if ($this->method === "memcache") {
//connect to event socket
$esl = event_socket::create();
if ($esl === false) {
@ -42,8 +64,8 @@ class cache {
}
//save to the file cache
if ($_SESSION['cache']['method']['text'] == "file") {
$result = file_put_contents($_SESSION['cache']['location']['text'] . "/" . $key, $value);
if ($this->method === "file") {
$result = file_put_contents($this->location . "/" . $key, $value);
}
//return result
@ -59,8 +81,8 @@ class cache {
//change the delimiter
$key = str_replace(":", ".", $key);
//cache method memcache
if ($_SESSION['cache']['method']['text'] == "memcache") {
//cache method memcache
if ($this->method === "memcache") {
// connect to event socket
$esl = event_socket::create();
if (!$esl->is_connected()) {
@ -76,9 +98,9 @@ class cache {
}
//get the file cache
if ($_SESSION['cache']['method']['text'] == "file") {
if (file_exists($_SESSION['cache']['location']['text'] . "/" . $key)) {
$result = file_get_contents($_SESSION['cache']['location']['text'] . "/" . $key);
if ($this->method === "file") {
if (file_exists($this->location . "/" . $key)) {
$result = file_get_contents($this->location . "/" . $key);
}
}
@ -93,14 +115,14 @@ class cache {
public function delete($key) {
//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);
syslog(LOG_WARNING, "debug: cache: [key: ".$key.", script: ".$_SERVER['SCRIPT_NAME'].", line: ".__line__."]");
closelog();
}
//cache method memcache
if (!empty($_SESSION['cache']['method']['text']) && $_SESSION['cache']['method']['text'] == "memcache") {
//cache method memcache
if ($this->method === "memcache") {
//connect to event socket
$esl = event_socket::create();
if ($esl === false) {
@ -122,7 +144,7 @@ class cache {
}
//cache method file
if (!empty($_SESSION['cache']['method']['text']) && $_SESSION['cache']['method']['text'] == "file") {
if ($this->method === "file") {
//change the delimiter
$key = str_replace(":", ".", $key);
@ -141,7 +163,7 @@ class cache {
event_socket::command($event);
//remove the local files
foreach (glob($_SESSION['cache']['location']['text'] . "/" . $key) as $file) {
foreach (glob($this->location . "/" . $key) as $file) {
if (file_exists($file)) {
unlink($file);
}
@ -159,14 +181,14 @@ class cache {
public function flush() {
//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);
syslog(LOG_WARNING, "debug: cache: [flush: all, script: ".$_SERVER['SCRIPT_NAME'].", line: ".__line__."]");
closelog();
}
//cache method memcache
if ($_SESSION['cache']['method']['text'] == "memcache") {
//cache method memcache
if ($this->method === "memcache") {
// connect to event socket
$esl = event_socket::create();
if ($esl === false) {
@ -187,8 +209,8 @@ class cache {
}
//cache method file
if ($_SESSION['cache']['method']['text'] == "file") {
//cache method file
if ($this->method === "file") {
// connect to event socket
$esl = event_socket::create();
if ($esl === false) {
@ -204,7 +226,7 @@ class cache {
event_socket::command($event);
//remove the cache
recursive_delete($_SESSION['cache']['location']['text']);
recursive_delete($this->location);
//set message
$result = '+OK cache flushed';

View File

@ -894,6 +894,21 @@ if (!class_exists('schema')) {
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
//if ($output == "echo") {
// echo $response;
@ -914,4 +929,3 @@ if (!class_exists('schema')) {
//print_r($result_array);
?>

View File

@ -71,7 +71,7 @@
$view = new template();
$view->engine = 'smarty';
$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();
//add multi-lingual support

View File

@ -278,7 +278,7 @@
//set default false
$result = false;
//search for the permission
if (count($_SESSION["groups"]) > 0) {
if (isset($_SESSION["groups"]) && count($_SESSION["groups"]) > 0) {
foreach ($_SESSION["groups"] as $row) {
if ($row['group_name'] == $group) {
$result = true;

View File

@ -138,7 +138,11 @@
<!-- NAT Traversal -->
<!-- No, STUN, KeepAlive, UPnP, Auto, VPN -->
<!-- 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>
{/if}
<!-- Support Rport (RFC 3581) -->
<!-- Yes, No -->
@ -173,7 +177,7 @@
<!-- Register Expiration (m) -->
<!-- Number: 0 - 64800 -->
<!-- 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) -->
<!-- Number: 0 - 64800 -->
@ -784,7 +788,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Pvalue P1490 -->
@ -792,7 +796,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Pvalue P1492 -->
@ -800,7 +804,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Pvalue P6716 -->
@ -808,7 +812,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Pvalue P6718 -->
@ -816,7 +820,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Pvalue P6720 -->
@ -824,7 +828,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Pvalue P26064 -->
@ -832,7 +836,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Pvalue P26066 -->
@ -840,7 +844,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Pvalue P26068 -->
@ -848,7 +852,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Pvalue P26096 -->
@ -856,7 +860,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Number: 10 - 300 -->
@ -1201,13 +1205,13 @@
<!-- # Enable Manual VLAN Configuration. Yes or No. -->
<!-- # Mandatory -->
<!-- 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 (Ethernet) -->
<!-- Number: 0 - 4095 -->
<!-- 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) -->
<!-- Number: 0 - 7 -->
@ -1217,11 +1221,15 @@
<!-- PC Port Mode -->
<!-- Enabled, Disabled, Mirrored -->
<!-- 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 -->
<!-- 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 -->
<!-- Pvalue P230 -->
@ -2498,7 +2506,11 @@
<!-- STUN Server -->
<!-- Pvalue P76 -->
{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. -->
<!-- # Number: 0 - 90 -->
@ -3674,15 +3686,27 @@
<!-- # HEADSET Key Mode. DefaultMode, ToggleHeadsetOrSpeaker. -->
<!-- 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>
{/if}
<!-- # Headset Type. Normal, PlantronicsEHS. -->
<!-- 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>
{/if}
<!-- # EHS Headset Ringtone. Normal, PlantronicsEHS. -->
<!-- Pvalue P6779 -->
{if isset($grandstream_headset_type)}
<item name="audio.headset.type">{$grandstream_headset_type}</item>
{else}
<item name="audio.headset.type">Normal</item>
{/if}
<!-- # Always Ring Speaker. -->
<!-- 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 -->
<!-- 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 -->
<!-- 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>
{/if}
<!-- # Handset Noise Shield 2.0. -->
<!-- No - Disable, HighShielding - 1, SoftShielding - 2 -->
@ -3993,7 +4025,11 @@
<!-- # Screensaver Settings -->
<!-- # Screensaver. No, Yes, OnIfNoVPKIsActive. -->
<!-- Pvalue P2918 -->
{if isset($grandstream_screensaver_enable)}
<item name="lcd.screensaver.enable">{$grandstream_screensaver_enable}</item>
{else}
<item name="lcd.screensaver.enable">OnIfNoVPKIsActive</item>
{/if}
<!-- # Use Programmable Keys in Screensaver. 0 - No, 1 - Yes, 2 - LED only -->
<!-- Pvalue P22363 -->
@ -4001,7 +4037,7 @@
<!-- # Screensaver Source. Default, USB, Download. -->
<!-- Pvalue P6759 -->
<item name="lcd.screensaver.source"></item>
<item name="lcd.screensaver.source">{$grandstream_screensaver_source}</item>
<!-- # Show Date and Time. Yes or No -->
<!-- Pvalue P8441 -->

View File

@ -138,7 +138,11 @@
<!-- NAT Traversal -->
<!-- No, STUN, KeepAlive, UPnP, Auto, VPN -->
<!-- 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>
{/if}
<!-- Support Rport (RFC 3581) -->
<!-- Yes, No -->
@ -173,7 +177,7 @@
<!-- Register Expiration (m) -->
<!-- Number: 0 - 64800 -->
<!-- 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) -->
<!-- Number: 0 - 64800 -->
@ -784,7 +788,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Pvalue P1490 -->
@ -792,7 +796,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Pvalue P1492 -->
@ -800,7 +804,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Pvalue P6716 -->
@ -808,7 +812,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Pvalue P6718 -->
@ -816,7 +820,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Pvalue P6720 -->
@ -824,7 +828,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Pvalue P26064 -->
@ -832,7 +836,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Pvalue P26066 -->
@ -840,7 +844,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Pvalue P26068 -->
@ -848,7 +852,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Pvalue P26096 -->
@ -856,7 +860,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Number: 10 - 300 -->
@ -903,21 +907,21 @@
<!-- DND Call Feature On -->
<!-- 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 -->
<!-- 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 -->
<!-- # String -->
<!-- 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 -->
<!-- # String -->
<!-- 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 -->
<!-- # String -->
@ -1201,13 +1205,13 @@
<!-- # Enable Manual VLAN Configuration. Yes or No. -->
<!-- # Mandatory -->
<!-- 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 (Ethernet) -->
<!-- Number: 0 - 4095 -->
<!-- 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) -->
<!-- Number: 0 - 7 -->
@ -1217,11 +1221,15 @@
<!-- PC Port Mode -->
<!-- Enabled, Disabled, Mirrored -->
<!-- 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 -->
<!-- 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 -->
<!-- Pvalue P230 -->
@ -2498,7 +2506,11 @@
<!-- STUN Server -->
<!-- Pvalue P76 -->
{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. -->
<!-- # Number: 0 - 90 -->
@ -3674,15 +3686,27 @@
<!-- # HEADSET Key Mode. DefaultMode, ToggleHeadsetOrSpeaker. -->
<!-- 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>
{/if}
<!-- # Headset Type. Normal, PlantronicsEHS. -->
<!-- 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>
{/if}
<!-- # EHS Headset Ringtone. Normal, PlantronicsEHS. -->
<!-- Pvalue P6779 -->
{if isset($grandstream_headset_type)}
<item name="audio.headset.type">{$grandstream_headset_type}</item>
{else}
<item name="audio.headset.type">Normal</item>
{/if}
<!-- # Always Ring Speaker. -->
<!-- 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 -->
<!-- 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 -->
<!-- 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>
{/if}
<!-- # Handset Noise Shield 2.0. -->
<!-- No - Disable, HighShielding - 1, SoftShielding - 2 -->
@ -3993,7 +4025,11 @@
<!-- # Screensaver Settings -->
<!-- # Screensaver. No, Yes, OnIfNoVPKIsActive. -->
<!-- Pvalue P2918 -->
{if isset($grandstream_screensaver_enable)}
<item name="lcd.screensaver.enable">{$grandstream_screensaver_enable}</item>
{else}
<item name="lcd.screensaver.enable">OnIfNoVPKIsActive</item>
{/if}
<!-- # Use Programmable Keys in Screensaver. 0 - No, 1 - Yes, 2 - LED only -->
<!-- Pvalue P22363 -->
@ -4001,7 +4037,7 @@
<!-- # Screensaver Source. Default, USB, Download. -->
<!-- Pvalue P6759 -->
<item name="lcd.screensaver.source"></item>
<item name="lcd.screensaver.source">{$grandstream_screensaver_source}</item>
<!-- # Show Date and Time. Yes or No -->
<!-- Pvalue P8441 -->

View File

@ -138,7 +138,11 @@
<!-- NAT Traversal -->
<!-- No, STUN, KeepAlive, UPnP, Auto, VPN -->
<!-- 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>
{/if}
<!-- Support Rport (RFC 3581) -->
<!-- Yes, No -->
@ -173,7 +177,7 @@
<!-- Register Expiration (m) -->
<!-- Number: 0 - 64800 -->
<!-- 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) -->
<!-- Number: 0 - 64800 -->
@ -784,7 +788,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Pvalue P1490 -->
@ -792,7 +796,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Pvalue P1492 -->
@ -800,7 +804,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Pvalue P6716 -->
@ -808,7 +812,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Pvalue P6718 -->
@ -816,7 +820,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Pvalue P6720 -->
@ -824,7 +828,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Pvalue P26064 -->
@ -832,7 +836,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Pvalue P26066 -->
@ -840,7 +844,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Pvalue P26068 -->
@ -848,7 +852,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Pvalue P26096 -->
@ -856,7 +860,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Number: 10 - 300 -->
@ -1201,13 +1205,13 @@
<!-- # Enable Manual VLAN Configuration. Yes or No. -->
<!-- # Mandatory -->
<!-- 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 (Ethernet) -->
<!-- Number: 0 - 4095 -->
<!-- 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) -->
<!-- Number: 0 - 7 -->
@ -1217,11 +1221,15 @@
<!-- PC Port Mode -->
<!-- Enabled, Disabled, Mirrored -->
<!-- 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 -->
<!-- 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 -->
<!-- Pvalue P230 -->
@ -2498,7 +2506,11 @@
<!-- STUN Server -->
<!-- Pvalue P76 -->
{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. -->
<!-- # Number: 0 - 90 -->
@ -3674,15 +3686,27 @@
<!-- # HEADSET Key Mode. DefaultMode, ToggleHeadsetOrSpeaker. -->
<!-- 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>
{/if}
<!-- # Headset Type. Normal, PlantronicsEHS. -->
<!-- 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>
{/if}
<!-- # EHS Headset Ringtone. Normal, PlantronicsEHS. -->
<!-- Pvalue P6779 -->
{if isset($grandstream_headset_type)}
<item name="audio.headset.type">{$grandstream_headset_type}</item>
{else}
<item name="audio.headset.type">Normal</item>
{/if}
<!-- # Always Ring Speaker. -->
<!-- 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 -->
<!-- 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 -->
<!-- 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>
{/if}
<!-- # Handset Noise Shield 2.0. -->
<!-- No - Disable, HighShielding - 1, SoftShielding - 2 -->
@ -3993,7 +4025,11 @@
<!-- # Screensaver Settings -->
<!-- # Screensaver. No, Yes, OnIfNoVPKIsActive. -->
<!-- Pvalue P2918 -->
{if isset($grandstream_screensaver_enable)}
<item name="lcd.screensaver.enable">{$grandstream_screensaver_enable}</item>
{else}
<item name="lcd.screensaver.enable">OnIfNoVPKIsActive</item>
{/if}
<!-- # Use Programmable Keys in Screensaver. 0 - No, 1 - Yes, 2 - LED only -->
<!-- Pvalue P22363 -->
@ -4001,7 +4037,7 @@
<!-- # Screensaver Source. Default, USB, Download. -->
<!-- Pvalue P6759 -->
<item name="lcd.screensaver.source"></item>
<item name="lcd.screensaver.source">{$grandstream_screensaver_source}</item>
<!-- # Show Date and Time. Yes or No -->
<!-- Pvalue P8441 -->

View File

@ -138,7 +138,11 @@
<!-- NAT Traversal -->
<!-- No, STUN, KeepAlive, UPnP, Auto, VPN -->
<!-- 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>
{/if}
<!-- Support Rport (RFC 3581) -->
<!-- Yes, No -->
@ -173,7 +177,7 @@
<!-- Register Expiration (m) -->
<!-- Number: 0 - 64800 -->
<!-- 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) -->
<!-- Number: 0 - 64800 -->
@ -784,7 +788,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Pvalue P1490 -->
@ -792,7 +796,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Pvalue P1492 -->
@ -800,7 +804,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Pvalue P6716 -->
@ -808,7 +812,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Pvalue P6718 -->
@ -816,7 +820,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Pvalue P6720 -->
@ -824,7 +828,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Pvalue P26064 -->
@ -832,7 +836,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Pvalue P26066 -->
@ -840,7 +844,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Pvalue P26068 -->
@ -848,7 +852,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Pvalue P26096 -->
@ -856,7 +860,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Number: 10 - 300 -->
@ -1201,13 +1205,13 @@
<!-- # Enable Manual VLAN Configuration. Yes or No. -->
<!-- # Mandatory -->
<!-- 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 (Ethernet) -->
<!-- Number: 0 - 4095 -->
<!-- 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) -->
<!-- Number: 0 - 7 -->
@ -1217,11 +1221,15 @@
<!-- PC Port Mode -->
<!-- Enabled, Disabled, Mirrored -->
<!-- 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 -->
<!-- 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 -->
<!-- Pvalue P230 -->
@ -2498,7 +2506,11 @@
<!-- STUN Server -->
<!-- Pvalue P76 -->
{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. -->
<!-- # Number: 0 - 90 -->
@ -3674,15 +3686,27 @@
<!-- # HEADSET Key Mode. DefaultMode, ToggleHeadsetOrSpeaker. -->
<!-- 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>
{/if}
<!-- # Headset Type. Normal, PlantronicsEHS. -->
<!-- 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>
{/if}
<!-- # EHS Headset Ringtone. Normal, PlantronicsEHS. -->
<!-- Pvalue P6779 -->
{if isset($grandstream_headset_type)}
<item name="audio.headset.type">{$grandstream_headset_type}</item>
{else}
<item name="audio.headset.type">Normal</item>
{/if}
<!-- # Always Ring Speaker. -->
<!-- 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 -->
<!-- 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 -->
<!-- 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>
{/if}
<!-- # Handset Noise Shield 2.0. -->
<!-- No - Disable, HighShielding - 1, SoftShielding - 2 -->
@ -3993,7 +4025,11 @@
<!-- # Screensaver Settings -->
<!-- # Screensaver. No, Yes, OnIfNoVPKIsActive. -->
<!-- Pvalue P2918 -->
{if isset($grandstream_screensaver_enable)}
<item name="lcd.screensaver.enable">{$grandstream_screensaver_enable}</item>
{else}
<item name="lcd.screensaver.enable">OnIfNoVPKIsActive</item>
{/if}
<!-- # Use Programmable Keys in Screensaver. 0 - No, 1 - Yes, 2 - LED only -->
<!-- Pvalue P22363 -->
@ -4001,7 +4037,7 @@
<!-- # Screensaver Source. Default, USB, Download. -->
<!-- Pvalue P6759 -->
<item name="lcd.screensaver.source"></item>
<item name="lcd.screensaver.source">{$grandstream_screensaver_source}</item>
<!-- # Show Date and Time. Yes or No -->
<!-- Pvalue P8441 -->
@ -4510,7 +4546,7 @@
<!-- # MulticastListenAddress (25), KeypadLock (26), GDSOpenDoor (27), EventListPresence (28), Provision (29) -->
<!-- # Phonebook(30), Paging(33) -->
<!-- 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 -->
<!-- Pvalue P301 -->
@ -4699,7 +4735,7 @@
<!-- # MulticastListenAddress (25), KeypadLock (26), GDSOpenDoor (27), EventListPresence (28), Provision (29) -->
<!-- # Phonebook(30), Paging(33) -->
<!-- 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 -->
<!-- Pvalue P23001 -->

View File

@ -138,7 +138,11 @@
<!-- NAT Traversal -->
<!-- No, STUN, KeepAlive, UPnP, Auto, VPN -->
<!-- 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>
{/if}
<!-- Support Rport (RFC 3581) -->
<!-- Yes, No -->
@ -173,7 +177,7 @@
<!-- Register Expiration (m) -->
<!-- Number: 0 - 64800 -->
<!-- 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) -->
<!-- Number: 0 - 64800 -->
@ -784,7 +788,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Pvalue P1490 -->
@ -792,7 +796,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Pvalue P1492 -->
@ -800,7 +804,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Pvalue P6716 -->
@ -808,7 +812,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Pvalue P6718 -->
@ -816,7 +820,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Pvalue P6720 -->
@ -824,7 +828,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Pvalue P26064 -->
@ -832,7 +836,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Pvalue P26066 -->
@ -840,7 +844,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Pvalue P26068 -->
@ -848,7 +852,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Pvalue P26096 -->
@ -856,7 +860,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Number: 10 - 300 -->
@ -1201,13 +1205,13 @@
<!-- # Enable Manual VLAN Configuration. Yes or No. -->
<!-- # Mandatory -->
<!-- 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 (Ethernet) -->
<!-- Number: 0 - 4095 -->
<!-- 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) -->
<!-- Number: 0 - 7 -->
@ -1217,11 +1221,15 @@
<!-- PC Port Mode -->
<!-- Enabled, Disabled, Mirrored -->
<!-- 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 -->
<!-- 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 -->
<!-- Pvalue P230 -->
@ -2498,7 +2506,11 @@
<!-- STUN Server -->
<!-- Pvalue P76 -->
{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. -->
<!-- # Number: 0 - 90 -->
@ -3674,15 +3686,27 @@
<!-- # HEADSET Key Mode. DefaultMode, ToggleHeadsetOrSpeaker. -->
<!-- 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>
{/if}
<!-- # Headset Type. Normal, PlantronicsEHS. -->
<!-- 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>
{/if}
<!-- # EHS Headset Ringtone. Normal, PlantronicsEHS. -->
<!-- Pvalue P6779 -->
{if isset($grandstream_headset_type)}
<item name="audio.headset.type">{$grandstream_headset_type}</item>
{else}
<item name="audio.headset.type">Normal</item>
{/if}
<!-- # Always Ring Speaker. -->
<!-- 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 -->
<!-- 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 -->
<!-- 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>
{/if}
<!-- # Handset Noise Shield 2.0. -->
<!-- No - Disable, HighShielding - 1, SoftShielding - 2 -->
@ -3993,7 +4025,11 @@
<!-- # Screensaver Settings -->
<!-- # Screensaver. No, Yes, OnIfNoVPKIsActive. -->
<!-- Pvalue P2918 -->
{if isset($grandstream_screensaver_enable)}
<item name="lcd.screensaver.enable">{$grandstream_screensaver_enable}</item>
{else}
<item name="lcd.screensaver.enable">OnIfNoVPKIsActive</item>
{/if}
<!-- # Use Programmable Keys in Screensaver. 0 - No, 1 - Yes, 2 - LED only -->
<!-- Pvalue P22363 -->
@ -4001,7 +4037,7 @@
<!-- # Screensaver Source. Default, USB, Download. -->
<!-- Pvalue P6759 -->
<item name="lcd.screensaver.source"></item>
<item name="lcd.screensaver.source">{$grandstream_screensaver_source}</item>
<!-- # Show Date and Time. Yes or No -->
<!-- Pvalue P8441 -->

View File

@ -138,7 +138,11 @@
<!-- NAT Traversal -->
<!-- No, STUN, KeepAlive, UPnP, Auto, VPN -->
<!-- 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>
{/if}
<!-- Support Rport (RFC 3581) -->
<!-- Yes, No -->
@ -173,7 +177,7 @@
<!-- Register Expiration (m) -->
<!-- Number: 0 - 64800 -->
<!-- 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) -->
<!-- Number: 0 - 64800 -->
@ -784,7 +788,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Pvalue P1490 -->
@ -792,7 +796,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Pvalue P1492 -->
@ -800,7 +804,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Pvalue P6716 -->
@ -808,7 +812,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Pvalue P6718 -->
@ -816,7 +820,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Pvalue P6720 -->
@ -824,7 +828,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Pvalue P26064 -->
@ -832,7 +836,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Pvalue P26066 -->
@ -840,7 +844,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Pvalue P26068 -->
@ -848,7 +852,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Pvalue P26096 -->
@ -856,7 +860,7 @@
<!-- Distinctive Ring Tone -->
<!-- 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 -->
<!-- Number: 10 - 300 -->
@ -1201,13 +1205,13 @@
<!-- # Enable Manual VLAN Configuration. Yes or No. -->
<!-- # Mandatory -->
<!-- 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 (Ethernet) -->
<!-- Number: 0 - 4095 -->
<!-- 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) -->
<!-- Number: 0 - 7 -->
@ -1217,11 +1221,15 @@
<!-- PC Port Mode -->
<!-- Enabled, Disabled, Mirrored -->
<!-- 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 -->
<!-- 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 -->
<!-- Pvalue P230 -->
@ -2498,7 +2506,11 @@
<!-- STUN Server -->
<!-- Pvalue P76 -->
{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. -->
<!-- # Number: 0 - 90 -->
@ -3674,15 +3686,27 @@
<!-- # HEADSET Key Mode. DefaultMode, ToggleHeadsetOrSpeaker. -->
<!-- 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>
{/if}
<!-- # Headset Type. Normal, PlantronicsEHS. -->
<!-- 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>
{/if}
<!-- # EHS Headset Ringtone. Normal, PlantronicsEHS. -->
<!-- Pvalue P6779 -->
{if isset($grandstream_headset_type)}
<item name="audio.headset.type">{$grandstream_headset_type}</item>
{else}
<item name="audio.headset.type">Normal</item>
{/if}
<!-- # Always Ring Speaker. -->
<!-- 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 -->
<!-- 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 -->
<!-- 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>
{/if}
<!-- # Handset Noise Shield 2.0. -->
<!-- No - Disable, HighShielding - 1, SoftShielding - 2 -->
@ -3993,7 +4025,11 @@
<!-- # Screensaver Settings -->
<!-- # Screensaver. No, Yes, OnIfNoVPKIsActive. -->
<!-- Pvalue P2918 -->
{if isset($grandstream_screensaver_enable)}
<item name="lcd.screensaver.enable">{$grandstream_screensaver_enable}</item>
{else}
<item name="lcd.screensaver.enable">OnIfNoVPKIsActive</item>
{/if}
<!-- # Use Programmable Keys in Screensaver. 0 - No, 1 - Yes, 2 - LED only -->
<!-- Pvalue P22363 -->
@ -4001,7 +4037,7 @@
<!-- # Screensaver Source. Default, USB, Download. -->
<!-- Pvalue P6759 -->
<item name="lcd.screensaver.source"></item>
<item name="lcd.screensaver.source">{$grandstream_screensaver_source}</item>
<!-- # Show Date and Time. Yes or No -->
<!-- Pvalue P8441 -->

View File

@ -684,18 +684,18 @@
<item name="account.{$line}.featureCodes.callFeatures">No</item>
<!-- DND Call Feature On -->
<item name="account.{$line}.featureCodes.dndOn"></item>
<item name="account.{$line}.featureCodes.dndOn">*78</item>
<!-- DND Call Feature Off -->
<item name="account.{$line}.featureCodes.dndOff"></item>
<item name="account.{$line}.featureCodes.dndOff">*79</item>
<!-- #Call Forward Unconditionally (All) - On -->
<!-- # String -->
<item name="account.{$line}.featureCodes.callForwardUnconditionallyOn"></item>
<item name="account.{$line}.featureCodes.callForwardUnconditionallyOn">*72</item>
<!-- #Call Forward Unconditionally (All) - Off -->
<!-- # String -->
<item name="account.{$line}.featureCodes.callForwardUnconditionallyOff"></item>
<item name="account.{$line}.featureCodes.callForwardUnconditionallyOff">*73</item>
<!-- #Call Forward Unconditionally (All) - Target -->
<!-- # String -->

File diff suppressed because it is too large Load Diff

View File

@ -33,12 +33,12 @@
<!-- SIP Server -->
{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}
<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}
<!-- 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 -->
{if $row.sip_transport != 'dns srv' && isset($row.outbound_proxy_primary)}
@ -56,9 +56,9 @@
<!-- BLF Server -->
{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}
<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}
<!-- SIP User ID -->
@ -107,7 +107,11 @@
<!-- NAT Traversal -->
<!-- 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>
{/if}
<!-- Support Rport (RFC 3581) -->
<!-- Yes, No -->
@ -136,7 +140,7 @@
<!-- Register Expiration (m) -->
<!-- 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) -->
<!-- Number: 0 - 64800 -->
@ -572,64 +576,64 @@
<item name="account.{$row.line_number}.ring.ringtone">5</item>
<!-- 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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<!-- Number: 10 - 300 -->
@ -665,21 +669,21 @@
<!-- #Enable Local Call Features. Default is Yes -->
<!-- #Mandatory -->
<!-- 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 -->
<item name="account.{$row.line_number}.featureCodes.dndOn"/>
<item name="account.{$row.line_number}.featureCodes.dndOn">*78</item>
<!-- 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 -->
<!-- # String -->
<item name="account.{$row.line_number}.featureCodes.callForwardUnconditionallyOn"/>
<item name="account.{$row.line_number}.featureCodes.callForwardUnconditionallyOn">*72</item>
<!-- #Call Forward Always - Off -->
<!-- # String -->
<item name="account.{$row.line_number}.featureCodes.callForwardUnconditionallyOff"/>
<item name="account.{$row.line_number}.featureCodes.callForwardUnconditionallyOff">*73</item>
<!-- #Call Forward Always- Target -->
<!-- # String -->
@ -903,12 +907,12 @@
<!-- # Enable Manual VLAN Configuration. Yes or No. -->
<!-- # 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 (Ethernet) -->
<!-- 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) -->
<!-- Number: 0 - 7 -->
@ -916,10 +920,14 @@
<!-- PC Port Mode -->
<!-- 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 -->
<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 -->
<item name="network.port.pc.vlan.priority">0</item>
@ -1249,8 +1257,8 @@
<!-- TFTP, HTTP, HTTPS, FTP,FTPS -->
<item name="provisioning.firmware.protocol">HTTP</item>
<!-- Firmware Server Path -->
{if isset($grandstream_firmware_path) && isset($firmware_version)}
<item name="provisioning.firmware.serverPath">{$grandstream_firmware_path}/{$firmware_version}</item>
{if isset($grandstream_firmware_path) && isset($grandstream_firmware_version)}
<item name="provisioning.firmware.serverPath">{$grandstream_firmware_path}/{$grandstream_firmware_version}</item>
{elseif isset($grandstream_firmware_path)}
<item name="provisioning.firmware.serverPath">{$grandstream_firmware_path}</item>
{else}
@ -1614,7 +1622,11 @@
<item name="sip.userNatIp"/>
<!-- 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. -->
<!-- # Number: 0 - 90 -->
@ -2192,7 +2204,7 @@
<item name="sip.showError">Yes</item>
<!-- # 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 -->
<item name="call.dial.callComplete.enable"/>
@ -2424,13 +2436,25 @@
<!-- ## Settings/Preferences / Audio Control -->
<!-- ############################################################################## -->
<!-- # 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>
{/if}
<!-- # 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>
{/if}
<!-- # 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>
{/if}
<!-- # Always Ring Speaker. -->
<!-- No - 0, Yes,both - 1, Yes,speaker only - 2 -->
@ -2444,10 +2468,18 @@
<item name="audio.headset.txGain">0</item>
<!-- # 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>
{/if}
<!-- # 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>
{/if}
<!-- ############################################################################## -->
<!-- ## Settings/Preferences / Date and Time -->
@ -2620,10 +2652,14 @@
<!-- # Screensaver Settings -->
<!-- # 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>
{/if}
<!-- # 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 -->
<item name="lcd.screensaver.showDateTime">Yes</item>
@ -2943,7 +2979,6 @@
<!-- # Phonebook(30), Paging(33) -->
{/literal}
{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,
"transfer"=>18,"call park"=>19,"intercom"=>20,"ldap search"=>21,"conference"=>22,"multicast paging"=>23,
@ -2951,6 +2986,7 @@
{foreach $keys['line'] as $row}
{$line=$row.device_key_id}
{if $row.device_key_id < 4}
<!-- ###################################################################################### -->
<!-- # VPK {$row.device_key_id} -->
<!-- ###################################################################################### -->
@ -2971,7 +3007,39 @@
<!-- # Locked: uncheck, check. -->
<!--<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}
<!-- ############################################################################## -->
@ -3215,6 +3283,11 @@
<!-- # Phonebook(30), Paging(33) -->
{/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}
{$line=$row.device_key_id}
@ -3237,5 +3310,3 @@
</config>
</gs_provision>

View File

@ -33,12 +33,12 @@
<!-- SIP Server -->
{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}
<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}
<!-- 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 -->
{if $row.sip_transport != 'dns srv' && isset($row.outbound_proxy_primary)}
@ -56,9 +56,9 @@
<!-- BLF Server -->
{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}
<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}
<!-- SIP User ID -->
@ -107,7 +107,11 @@
<!-- NAT Traversal -->
<!-- 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>
{/if}
<!-- Support Rport (RFC 3581) -->
<!-- Yes, No -->
@ -136,7 +140,7 @@
<!-- Register Expiration (m) -->
<!-- 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) -->
<!-- Number: 0 - 64800 -->
@ -572,64 +576,64 @@
<item name="account.{$row.line_number}.ring.ringtone">5</item>
<!-- 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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<!-- Number: 10 - 300 -->
@ -665,21 +669,21 @@
<!-- #Enable Local Call Features. Default is Yes -->
<!-- #Mandatory -->
<!-- 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 -->
<item name="account.{$row.line_number}.featureCodes.dndOn"/>
<item name="account.{$row.line_number}.featureCodes.dndOn">*78</item>
<!-- 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 -->
<!-- # String -->
<item name="account.{$row.line_number}.featureCodes.callForwardUnconditionallyOn"/>
<item name="account.{$row.line_number}.featureCodes.callForwardUnconditionallyOn">*72</item>
<!-- #Call Forward Always - Off -->
<!-- # String -->
<item name="account.{$row.line_number}.featureCodes.callForwardUnconditionallyOff"/>
<item name="account.{$row.line_number}.featureCodes.callForwardUnconditionallyOff">*73</item>
<!-- #Call Forward Always- Target -->
<!-- # String -->
@ -903,12 +907,12 @@
<!-- # Enable Manual VLAN Configuration. Yes or No. -->
<!-- # 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 (Ethernet) -->
<!-- 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) -->
<!-- Number: 0 - 7 -->
@ -916,10 +920,14 @@
<!-- PC Port Mode -->
<!-- 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 -->
<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 -->
<item name="network.port.pc.vlan.priority">0</item>
@ -1249,8 +1257,8 @@
<!-- TFTP, HTTP, HTTPS, FTP,FTPS -->
<item name="provisioning.firmware.protocol">HTTP</item>
<!-- Firmware Server Path -->
{if isset($grandstream_firmware_path) && isset($firmware_version)}
<item name="provisioning.firmware.serverPath">{$grandstream_firmware_path}/{$firmware_version}</item>
{if isset($grandstream_firmware_path) && isset($grandstream_firmware_version)}
<item name="provisioning.firmware.serverPath">{$grandstream_firmware_path}/{$grandstream_firmware_version}</item>
{elseif isset($grandstream_firmware_path)}
<item name="provisioning.firmware.serverPath">{$grandstream_firmware_path}</item>
{else}
@ -1614,7 +1622,11 @@
<item name="sip.userNatIp"/>
<!-- 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. -->
<!-- # Number: 0 - 90 -->
@ -2192,7 +2204,7 @@
<item name="sip.showError">Yes</item>
<!-- # 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 -->
<item name="call.dial.callComplete.enable"/>
@ -2424,13 +2436,25 @@
<!-- ## Settings/Preferences / Audio Control -->
<!-- ############################################################################## -->
<!-- # 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>
{/if}
<!-- # 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>
{/if}
<!-- # 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>
{/if}
<!-- # Always Ring Speaker. -->
<!-- No - 0, Yes,both - 1, Yes,speaker only - 2 -->
@ -2444,10 +2468,18 @@
<item name="audio.headset.txGain">0</item>
<!-- # 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>
{/if}
<!-- # 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>
{/if}
<!-- ############################################################################## -->
<!-- ## Settings/Preferences / Date and Time -->
@ -2620,10 +2652,14 @@
<!-- # Screensaver Settings -->
<!-- # 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>
{/if}
<!-- # 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 -->
<item name="lcd.screensaver.showDateTime">Yes</item>
@ -2950,6 +2986,7 @@
{foreach $keys['line'] as $row}
{$line=$row.device_key_id}
{if $row.device_key_id < 9}
<!-- ###################################################################################### -->
<!-- # VPK {$row.device_key_id} -->
<!-- ###################################################################################### -->
@ -2970,7 +3007,39 @@
<!-- # Locked: uncheck, check. -->
<!--<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}
<!-- ############################################################################## -->

View File

@ -33,12 +33,12 @@
<!-- SIP Server -->
{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}
<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}
<!-- 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 -->
{if $row.sip_transport != 'dns srv' && isset($row.outbound_proxy_primary)}
@ -56,9 +56,9 @@
<!-- BLF Server -->
{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}
<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}
<!-- SIP User ID -->
@ -107,7 +107,11 @@
<!-- NAT Traversal -->
<!-- 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>
{/if}
<!-- Support Rport (RFC 3581) -->
<!-- Yes, No -->
@ -136,7 +140,7 @@
<!-- Register Expiration (m) -->
<!-- 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) -->
<!-- Number: 0 - 64800 -->
@ -572,64 +576,64 @@
<item name="account.{$row.line_number}.ring.ringtone">5</item>
<!-- 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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<!-- Number: 10 - 300 -->
@ -665,21 +669,21 @@
<!-- #Enable Local Call Features. Default is Yes -->
<!-- #Mandatory -->
<!-- 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 -->
<item name="account.{$row.line_number}.featureCodes.dndOn"/>
<item name="account.{$row.line_number}.featureCodes.dndOn">*78</item>
<!-- 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 -->
<!-- # String -->
<item name="account.{$row.line_number}.featureCodes.callForwardUnconditionallyOn"/>
<item name="account.{$row.line_number}.featureCodes.callForwardUnconditionallyOn">*72</item>
<!-- #Call Forward Always - Off -->
<!-- # String -->
<item name="account.{$row.line_number}.featureCodes.callForwardUnconditionallyOff"/>
<item name="account.{$row.line_number}.featureCodes.callForwardUnconditionallyOff">*73</item>
<!-- #Call Forward Always- Target -->
<!-- # String -->
@ -903,12 +907,13 @@
<!-- # Enable Manual VLAN Configuration. Yes or No. -->
<!-- # 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 (Ethernet) -->
<!-- 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) -->
<!-- Number: 0 - 7 -->
@ -916,10 +921,14 @@
<!-- PC Port Mode -->
<!-- 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 -->
<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 -->
<item name="network.port.pc.vlan.priority">0</item>
@ -1249,8 +1258,8 @@
<!-- TFTP, HTTP, HTTPS, FTP,FTPS -->
<item name="provisioning.firmware.protocol">HTTP</item>
<!-- Firmware Server Path -->
{if isset($grandstream_firmware_path) && isset($firmware_version)}
<item name="provisioning.firmware.serverPath">{$grandstream_firmware_path}/{$firmware_version}</item>
{if isset($grandstream_firmware_path) && isset($grandstream_firmware_version)}
<item name="provisioning.firmware.serverPath">{$grandstream_firmware_path}/{$grandstream_firmware_version}</item>
{elseif isset($grandstream_firmware_path)}
<item name="provisioning.firmware.serverPath">{$grandstream_firmware_path}</item>
{else}
@ -1614,7 +1623,11 @@
<item name="sip.userNatIp"/>
<!-- 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. -->
<!-- # Number: 0 - 90 -->
@ -2192,7 +2205,7 @@
<item name="sip.showError">Yes</item>
<!-- # 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 -->
<item name="call.dial.callComplete.enable"/>
@ -2424,13 +2437,25 @@
<!-- ## Settings/Preferences / Audio Control -->
<!-- ############################################################################## -->
<!-- # 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>
{/if}
<!-- # 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>
{/if}
<!-- # 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>
{/if}
<!-- # Always Ring Speaker. -->
<!-- No - 0, Yes,both - 1, Yes,speaker only - 2 -->
@ -2444,10 +2469,18 @@
<item name="audio.headset.txGain">0</item>
<!-- # 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>
{/if}
<!-- # 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>
{/if}
<!-- ############################################################################## -->
<!-- ## Settings/Preferences / Date and Time -->
@ -2620,10 +2653,14 @@
<!-- # Screensaver Settings -->
<!-- # 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>
{/if}
<!-- # 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 -->
<item name="lcd.screensaver.showDateTime">Yes</item>
@ -2950,6 +2987,7 @@
{foreach $keys['line'] as $row}
{$line=$row.device_key_id}
{if $row.device_key_id < 5}
<!-- ###################################################################################### -->
<!-- # VPK {$row.device_key_id} -->
<!-- ###################################################################################### -->
@ -2970,7 +3008,39 @@
<!-- # Locked: uncheck, check. -->
<!--<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}
<!-- ############################################################################## -->
@ -3240,4 +3310,4 @@
{/foreach}
</config>
</gs_provision>
</gs_provision>

View File

@ -33,12 +33,12 @@
<!-- SIP Server -->
{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}
<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}
<!-- 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 -->
{if $row.sip_transport != 'dns srv' && isset($row.outbound_proxy_primary)}
@ -56,9 +56,9 @@
<!-- BLF Server -->
{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}
<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}
<!-- SIP User ID -->
@ -107,7 +107,11 @@
<!-- NAT Traversal -->
<!-- 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>
{/if}
<!-- Support Rport (RFC 3581) -->
<!-- Yes, No -->
@ -136,7 +140,7 @@
<!-- Register Expiration (m) -->
<!-- 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) -->
<!-- Number: 0 - 64800 -->
@ -572,64 +576,64 @@
<item name="account.{$row.line_number}.ring.ringtone">5</item>
<!-- 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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<!-- Number: 10 - 300 -->
@ -665,21 +669,21 @@
<!-- #Enable Local Call Features. Default is Yes -->
<!-- #Mandatory -->
<!-- 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 -->
<item name="account.{$row.line_number}.featureCodes.dndOn"/>
<item name="account.{$row.line_number}.featureCodes.dndOn">*78</item>
<!-- 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 -->
<!-- # String -->
<item name="account.{$row.line_number}.featureCodes.callForwardUnconditionallyOn"/>
<item name="account.{$row.line_number}.featureCodes.callForwardUnconditionallyOn">*72</item>
<!-- #Call Forward Always - Off -->
<!-- # String -->
<item name="account.{$row.line_number}.featureCodes.callForwardUnconditionallyOff"/>
<item name="account.{$row.line_number}.featureCodes.callForwardUnconditionallyOff">*73</item>
<!-- #Call Forward Always- Target -->
<!-- # String -->
@ -903,12 +907,13 @@
<!-- # Enable Manual VLAN Configuration. Yes or No. -->
<!-- # 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 (Ethernet) -->
<!-- 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) -->
<!-- Number: 0 - 7 -->
@ -916,10 +921,14 @@
<!-- PC Port Mode -->
<!-- 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 -->
<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 -->
<item name="network.port.pc.vlan.priority">0</item>
@ -1249,8 +1258,8 @@
<!-- TFTP, HTTP, HTTPS, FTP,FTPS -->
<item name="provisioning.firmware.protocol">HTTP</item>
<!-- Firmware Server Path -->
{if isset($grandstream_firmware_path) && isset($firmware_version)}
<item name="provisioning.firmware.serverPath">{$grandstream_firmware_path}/{$firmware_version}</item>
{if isset($grandstream_firmware_path) && isset($grandstream_firmware_version)}
<item name="provisioning.firmware.serverPath">{$grandstream_firmware_path}/{$grandstream_firmware_version}</item>
{elseif isset($grandstream_firmware_path)}
<item name="provisioning.firmware.serverPath">{$grandstream_firmware_path}</item>
{else}
@ -1614,7 +1623,11 @@
<item name="sip.userNatIp"/>
<!-- 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. -->
<!-- # Number: 0 - 90 -->
@ -2192,7 +2205,7 @@
<item name="sip.showError">Yes</item>
<!-- # 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 -->
<item name="call.dial.callComplete.enable"/>
@ -2424,13 +2437,25 @@
<!-- ## Settings/Preferences / Audio Control -->
<!-- ############################################################################## -->
<!-- # 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>
{/if}
<!-- # 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>
{/if}
<!-- # 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>
{/if}
<!-- # Always Ring Speaker. -->
<!-- No - 0, Yes,both - 1, Yes,speaker only - 2 -->
@ -2444,10 +2469,18 @@
<item name="audio.headset.txGain">0</item>
<!-- # 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>
{/if}
<!-- # 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>
{/if}
<!-- ############################################################################## -->
<!-- ## Settings/Preferences / Date and Time -->
@ -2620,10 +2653,14 @@
<!-- # Screensaver Settings -->
<!-- # 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>
{/if}
<!-- # 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 -->
<item name="lcd.screensaver.showDateTime">Yes</item>
@ -2950,6 +2987,7 @@
{foreach $keys['line'] as $row}
{$line=$row.device_key_id}
{if $row.device_key_id < 7}
<!-- ###################################################################################### -->
<!-- # VPK {$row.device_key_id} -->
<!-- ###################################################################################### -->
@ -2970,7 +3008,39 @@
<!-- # Locked: uncheck, check. -->
<!--<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}
<!-- ############################################################################## -->
@ -3240,4 +3310,4 @@
{/foreach}
</config>
</gs_provision>
</gs_provision>

View File

@ -33,12 +33,12 @@
<!-- SIP Server -->
{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}
<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}
<!-- 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 -->
{if $row.sip_transport != 'dns srv' && isset($row.outbound_proxy_primary)}
@ -56,9 +56,9 @@
<!-- BLF Server -->
{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}
<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}
<!-- SIP User ID -->
@ -107,7 +107,11 @@
<!-- NAT Traversal -->
<!-- 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>
{/if}
<!-- Support Rport (RFC 3581) -->
<!-- Yes, No -->
@ -136,7 +140,7 @@
<!-- Register Expiration (m) -->
<!-- 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) -->
<!-- Number: 0 - 64800 -->
@ -572,64 +576,64 @@
<item name="account.{$row.line_number}.ring.ringtone">5</item>
<!-- 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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<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 -->
<!-- Number: 10 - 300 -->
@ -665,21 +669,21 @@
<!-- #Enable Local Call Features. Default is Yes -->
<!-- #Mandatory -->
<!-- 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 -->
<item name="account.{$row.line_number}.featureCodes.dndOn"/>
<item name="account.{$row.line_number}.featureCodes.dndOn">*78</item>
<!-- 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 -->
<!-- # String -->
<item name="account.{$row.line_number}.featureCodes.callForwardUnconditionallyOn"/>
<item name="account.{$row.line_number}.featureCodes.callForwardUnconditionallyOn">*72</item>
<!-- #Call Forward Always - Off -->
<!-- # String -->
<item name="account.{$row.line_number}.featureCodes.callForwardUnconditionallyOff"/>
<item name="account.{$row.line_number}.featureCodes.callForwardUnconditionallyOff">*73</item>
<!-- #Call Forward Always- Target -->
<!-- # String -->
@ -903,12 +907,13 @@
<!-- # Enable Manual VLAN Configuration. Yes or No. -->
<!-- # 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 (Ethernet) -->
<!-- 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) -->
<!-- Number: 0 - 7 -->
@ -916,10 +921,14 @@
<!-- PC Port Mode -->
<!-- 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 -->
<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 -->
<item name="network.port.pc.vlan.priority">0</item>
@ -1249,8 +1258,8 @@
<!-- TFTP, HTTP, HTTPS, FTP,FTPS -->
<item name="provisioning.firmware.protocol">HTTP</item>
<!-- Firmware Server Path -->
{if isset($grandstream_firmware_path) && isset($firmware_version)}
<item name="provisioning.firmware.serverPath">{$grandstream_firmware_path}/{$firmware_version}</item>
{if isset($grandstream_firmware_path) && isset($grandstream_firmware_version)}
<item name="provisioning.firmware.serverPath">{$grandstream_firmware_path}/{$grandstream_firmware_version}</item>
{elseif isset($grandstream_firmware_path)}
<item name="provisioning.firmware.serverPath">{$grandstream_firmware_path}</item>
{else}
@ -1614,7 +1623,11 @@
<item name="sip.userNatIp"/>
<!-- 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. -->
<!-- # Number: 0 - 90 -->
@ -2192,7 +2205,7 @@
<item name="sip.showError">Yes</item>
<!-- # 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 -->
<item name="call.dial.callComplete.enable"/>
@ -2424,13 +2437,25 @@
<!-- ## Settings/Preferences / Audio Control -->
<!-- ############################################################################## -->
<!-- # 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>
{/if}
<!-- # 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>
{/if}
<!-- # 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>
{/if}
<!-- # Always Ring Speaker. -->
<!-- No - 0, Yes,both - 1, Yes,speaker only - 2 -->
@ -2444,10 +2469,18 @@
<item name="audio.headset.txGain">0</item>
<!-- # 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>
{/if}
<!-- # 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>
{/if}
<!-- ############################################################################## -->
<!-- ## Settings/Preferences / Date and Time -->
@ -2620,10 +2653,14 @@
<!-- # Screensaver Settings -->
<!-- # 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>
{/if}
<!-- # 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 -->
<item name="lcd.screensaver.showDateTime">Yes</item>
@ -2950,6 +2987,7 @@
{foreach $keys['line'] as $row}
{$line=$row.device_key_id}
{if $row.device_key_id < 13}
<!-- ###################################################################################### -->
<!-- # VPK {$row.device_key_id} -->
<!-- ###################################################################################### -->
@ -2970,7 +3008,39 @@
<!-- # Locked: uncheck, check. -->
<!--<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}
<!-- ############################################################################## -->

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -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

View File

@ -2008,7 +2008,7 @@ features.doorphone.X.device_model=
#######################################################################################
app.install_url =
app.uninstall =
app.unavailable =
{foreach $yealink_app_unavailable as $value}app.unavailable = {$value}{"\n"}{/foreach}
app.autorun =

View File

@ -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
#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
#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
#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
#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
#Enable or disable the NAT Rport; 0-Disabled (default), 1-Enabled;
account.6.nat.rport = {$yealink_rport_6}
account.6.nat.rport = {$yealink_rport}
#######################################################################################

View File

@ -447,7 +447,7 @@ else { //default: white
}
body {
z-index: 1;
z-index: auto;
position: absolute;
margin: 0;
padding: 0;