diff --git a/Sccp_manager.class.php b/Sccp_manager.class.php
index 5c4af51..2d1defc 100644
--- a/Sccp_manager.class.php
+++ b/Sccp_manager.class.php
@@ -36,7 +36,7 @@
* + Make DB Acces from separate class
* + Make System Acces from separate class
* + Make Var elements from separate class
- * - To make creating XML files in a separate class
+ * + To make creating XML files in a separate class
* - Add Switch to select XML schema (display)
* - Bootstrap encodeURI(row['type']) ???????
* - Check Time zone ....
@@ -53,8 +53,8 @@
* - restore default Value on page
* - restore default Value on sccp.class
* - 'Device SEP ID.[XXXXXXXXXXXX]=MAC'
- * - ATA's start with ATAXXXXXXXXXXXX.
- * - Create ATADefault.cnf.xml
+ * + ATA's start with ATAXXXXXXXXXXXX.
+ * + Create ATADefault.cnf.xml
* - Create Second line Use MAC AABBCCDDEEFF rotation MAC BBCCDDEEFF01 (ATA 187 )
* + Add SEP, ATA, VG prefix.
* - VG248 ports start with VGXXXXXXXXXXXX0.
@@ -63,6 +63,14 @@
* * Processing parts -> Controller directory
* * Ajax Handler Parts -> Controller directory
* * Result parts -> View directory
+ * + Support TFTP rewrite :
+ * + dir "settings"
+ * + dir "templates"
+ * + dir "firmware"
+ * + dir "locales"
+ * - Create Simple User Interface
+ * - sccpsimple.xml
+ *
*/
namespace FreePBX\modules;
@@ -75,7 +83,7 @@ class Sccp_manager extends \FreePBX_Helpers implements \BMO {
// const General - sccp.conf[%keyset%] = '5'; NAME space
// const General - sccp.conf[%keyset%] = '6'; data
// const General - default.xml = '10';
-// const General - teplet.xml = '20';
+// const General - templet.xml = '20';
// const General - system_path = '2';
// const General - don't store = '99';
// private $SCCP_LANG_DICTIONARY = 'SCCP-dictionary.xml'; // CISCO LANG file search in /tftp-path
@@ -560,6 +568,7 @@ class Sccp_manager extends \FreePBX_Helpers implements \BMO {
$this->save_submit($request);
$this->sccp_db_save_setting();
// $this->sccp_create_sccp_init();
+ $this->sccp_create_tftp_XML();
$res = $this->srvinterface->sccp_core_commands(array('cmd' => 'sccp_reload'));
$msg = 'Config Saved: ' . $res['Response'] . '. Info :' . $res['data'];
@@ -619,6 +628,7 @@ class Sccp_manager extends \FreePBX_Helpers implements \BMO {
$this->sccp_create_tftp_XML();
$models = $this->dbinterface->get_db_SccpTableData("SccpDevice");
$ver_id = ' on found active model !';
+// return array('status' => false, 'message' => print_r($models));
foreach ($models as $data) {
$ver_id = $this->sccp_create_device_XML($data['name']);
};
@@ -1464,7 +1474,11 @@ class Sccp_manager extends \FreePBX_Helpers implements \BMO {
private function initTftpLang() {
$result = array();
- $dir = $this->sccppath["tftp_path"];
+ if (empty($this->sccppath["tftp_path"]) || empty($this->sccppath["tftp_lang_path"]) ) {
+ return;
+ }
+ $dir = $this->sccppath["tftp_lang_path"];
+
$cdir = scandir($dir);
foreach ($cdir as $key => $value) {
if (!in_array($value, array(".", ".."))) {
@@ -1490,7 +1504,7 @@ class Sccp_manager extends \FreePBX_Helpers implements \BMO {
*/
private function init_tftp_lang_path() {
- $dir = $this->sccppath["tftp_path"];
+ $dir = $this->sccppath["tftp_lang_path"];
foreach ($this->extconfigs->getextConfig('sccp_lang') as $lang_key => $lang_value) {
$filename = $dir . DIRECTORY_SEPARATOR . $lang_value['locale'];
if (!file_exists($filename)) {
@@ -1525,10 +1539,10 @@ class Sccp_manager extends \FreePBX_Helpers implements \BMO {
}
if (empty($this->sccppath["tftp_path"])) {
- if (!empty($sccpvalues["tftp_path"])) {
- if (file_exists($this->$sccpvalues["tftp_path"]["data"])) {
- $this->sccppath["tftp_path"] = $this->$sccpvalues["tftp_path"]["data"];
- }
+ if (!empty($this->sccpvalues["tftp_path"])) {
+ if (file_exists($this->sccpvalues["tftp_path"]["data"])) {
+ $this->sccppath["tftp_path"] = $this->sccpvalues["tftp_path"]["data"];
+ }
}
if (empty($this->sccppath["tftp_path"])) {
if (file_exists($this->extconfigs->getextConfig('sccpDefaults', "tftp_path"))) {
@@ -1543,8 +1557,49 @@ class Sccp_manager extends \FreePBX_Helpers implements \BMO {
die('Error creating template dir');
}
}
+ } else {
+ return;
}
- if (!empty($this->sccppath["tftp_path"])) {
+ $dst = $this->sccppath["tftp_path"];
+ $this->sccppath["tftp_path_store"] = $dst;
+ $this->sccppath["tftp_lang_path"] = $dst;
+ $this->sccppath["tftp_firmware_path"] = $dst;
+ // TFTP -REWrite
+ if (!empty($this->sccpvalues["tftp_rewrite"])) {
+ if ($this->sccpvalues["tftp_rewrite"]["data"]=='on') {
+ $dst = $this->sccppath["tftp_path"] . '/settings';
+ if (!file_exists($dst)) {
+ if (!mkdir($dst, 0777, true)) {
+ die('Error creating seting dir');
+ }
+ }
+ $this->sccppath["tftp_path_store"] = $dst;
+
+ $dst = $this->sccppath["tftp_path"] . '/locales';
+ if (!file_exists($dst)) {
+ if (!mkdir($dst, 0777, true)) {
+ die('Error creating seting dir');
+ }
+ }
+ $dst = $this->sccppath["tftp_path"] . '/locales/languages';
+ if (!file_exists($dst)) {
+ if (!mkdir($dst, 0777, true)) {
+ die('Error creating seting dir');
+ }
+ }
+ $this->sccppath["tftp_lang_path"] = $dst;
+
+ $dst = $this->sccppath["tftp_path"] . '/firmware';
+ if (!file_exists($dst)) {
+ if (!mkdir($dst, 0777, true)) {
+ die('Error creating seting dir');
+ }
+ }
+ $this->sccppath["tftp_firmware_path"] = $dst;
+ }
+ }
+
+/* if (!empty($this->sccppath["tftp_path"])) {
$this->sccppath["tftp_DP"] = $this->sccppath["tftp_path"] . '/Dialplan';
if (!file_exists($this->sccppath["tftp_DP"])) {
if (!mkdir($this->sccppath["tftp_DP"], 0777, true)) {
@@ -1552,11 +1607,11 @@ class Sccp_manager extends \FreePBX_Helpers implements \BMO {
}
}
}
-
+*/
if (empty($_SERVER['DOCUMENT_ROOT'])) {
return;
}
-
+
if (!file_exists($this->sccppath["tftp_templates"] . '/XMLDefault.cnf.xml_template')) {
$src_path = $_SERVER['DOCUMENT_ROOT'] . '/admin/modules/sccp_manager/conf/';
$dst_path = $this->sccppath["tftp_templates"] . '/';
@@ -1747,8 +1802,9 @@ class Sccp_manager extends \FreePBX_Helpers implements \BMO {
$model_information = $this->getSccp_model_information($get = "all", $validate = false); // Get All
$lang_data = $this->extconfigs->getextConfig('sccp_lang');
+ $data_value['tftp_path'] = $this->sccppath["tftp_path"];
- $this->xmlinterface->create_default_XML($this->sccppath["tftp_path"], $data_value, $model_information, $lang_data);
+ $this->xmlinterface->create_default_XML($this->sccppath["tftp_path_store"], $data_value, $model_information, $lang_data);
/*
$def_xml_fields = array('authenticationURL', 'informationURL', 'messagesURL', 'servicesURL', 'directoryURL', 'proxyServerURL', 'idleTimeout', 'idleURL');
@@ -1857,7 +1913,8 @@ class Sccp_manager extends \FreePBX_Helpers implements \BMO {
}
$data_value['ntp_timezone_id'] = $this->extconfigs->getextConfig('sccp_timezone', $data_value['ntp_timezone']);
$data_value['server_if_list'] = $this->getIP_information();
-
+ $dev_config['tftp_path'] = $this->sccppath["tftp_path"];
+
$dev_config['addon_info'] = array();
if (!empty($dev_config['addon'])) {
$hw_addon = explode(',', $dev_config['addon']);
@@ -1867,8 +1924,9 @@ class Sccp_manager extends \FreePBX_Helpers implements \BMO {
}
}
$lang_data = $this->extconfigs->getextConfig('sccp_lang');
-
- return $this->xmlinterface->create_SEP_XML($this->sccppath["tftp_path"], $data_value, $dev_config, $dev_id, $lang_data);
+// return $this->sccppath["tftp_path_store"];
+
+ return $this->xmlinterface->create_SEP_XML($this->sccppath["tftp_path_store"], $data_value, $dev_config, $dev_id, $lang_data);
/*
@@ -2090,17 +2148,17 @@ class Sccp_manager extends \FreePBX_Helpers implements \BMO {
return false;
}
if ($dev_id == 'all') {
- $xml_name = $this->sccppath["tftp_path"] . '/SEP*.cnf.xml';
+ $xml_name = $this->sccppath["tftp_path_store"] . '/SEP*.cnf.xml';
array_map("unlink", glob($xml_name));
- $xml_name = $this->sccppath["tftp_path"] . '/ATA*.cnf.xml';
+ $xml_name = $this->sccppath["tftp_path_store"] . '/ATA*.cnf.xml';
array_map("unlink", glob($xml_name));
- $xml_name = $this->sccppath["tftp_path"] . '/VG*.cnf.xml';
+ $xml_name = $this->sccppath["tftp_path_store"] . '/VG*.cnf.xml';
array_map("unlink", glob($xml_name));
} else {
if (!strpos($dev_id, 'SEP')) {
return false;
}
- $xml_name = $this->sccppath["tftp_path"] . '/' . $dev_id . '.cnf.xml';
+ $xml_name = $this->sccppath["tftp_path_store"] . '/' . $dev_id . '.cnf.xml';
if (file_exists($xml_name)) {
unlink($xml_name);
}
@@ -2138,16 +2196,28 @@ class Sccp_manager extends \FreePBX_Helpers implements \BMO {
}
function getSccp_model_information($get = "all", $validate = false, $format_list = "all", $filter = array()) {
- $file_ext = array('.loads', '.LOADS', '.sbn', '.SBN', '.bin', '.BIN','.zup','.ZUP');
- $dir = $this->sccppath["tftp_path"];
+// $file_ext = array('.loads', '.LOADS', '.sbn', '.SBN', '.bin', '.BIN','.zup','.ZUP');
+ $file_ext = array('.loads', '.sbn', '.bin', '.zup');
+// $dir = $this->sccppath["tftp_path"];
+ $dir = $this->sccppath["tftp_firmware_path"];
$dir_tepl = $this->sccppath["tftp_templates"];
-
+ $dir_list = $this->find_all_files($dir, $file_ext, 'fileonly');
+
$raw_settings = $this->dbinterface->getDb_model_info($get, $format_list, $filter);
if ($validate) {
for ($i = 0; $i < count($raw_settings); $i++) {
$raw_settings[$i]['validate'] = '-;-';
if (!empty($raw_settings[$i]['loadimage'])) {
+ $raw_settings[$i]['validate'] = 'no;';
+ if ((strtolower($raw_settings[$i]['vendor'] == 'cisco')) || !empty($dir_list)) {
+ foreach ($dir_list as $filek){
+ if (strpos(strtolower($filek), strtolower($raw_settings[$i]['loadimage'])) !== false) {
+ $raw_settings[$i]['validate'] = 'yes;';
+ }
+ }
+ }
+/* OLD search
$file = $dir . '/' . $raw_settings[$i]['loadimage'];
if (is_dir($file)) {
$file .= '/' . $raw_settings[$i]['loadimage'];
@@ -2165,6 +2235,8 @@ class Sccp_manager extends \FreePBX_Helpers implements \BMO {
$raw_settings[$i]['validate'] = 'yes;';
}
}
+ *
+ */
} else {
$raw_settings[$i]['validate'] = '-;';
}
@@ -2258,4 +2330,47 @@ private function strpos_array($haystack, $needles) {
}
return FALSE;
}
+
+private function find_all_files($dir, $file_mask=null, $mode='full'){
+
+ $result = NULL;
+ if (empty($dir) || (!file_exists($dir))) {
+ return $result;
+ }
+
+ $root = scandir($dir);
+ foreach($root as $value) {
+ if($value === '.' || $value === '..') {continue;}
+ if(is_file("$dir/$value")) {
+ $filter = false;
+ if (!empty($file_mask)) {
+ if (is_array($file_mask)) {
+ foreach ($file_mask as $k){
+ if (strpos(strtolower($value), strtolower($k)) !== false) {$filter = true;}
+ }
+ } else {
+ if (strpos(strtolower($value), strtolower($file_mask)) !== false) {$filter = true;}
+ }
+ } else {$filter = true;}
+ if ($filter) {
+ if ($mode=='fileonly'){
+ $result[]="$value";
+ } else {
+ $result[]="$dir/$value";
+ }
+ } else {$result[]=null;}
+ continue;
+ }
+ $sub_fiend = $this->find_all_files("$dir/$value",$file_mask,$mode);
+ if (!empty($sub_fiend)) {
+ foreach($sub_fiend as $sub_value) {
+ if (!empty($sub_value)) {
+ $result[]=$sub_value;
+ }
+ }
+ }
+ }
+ return $result;
+}
+
}
diff --git a/Sccp_manager.inc/extconfigs.class.php b/Sccp_manager.inc/extconfigs.class.php
index 31db7c6..38b3cd7 100644
--- a/Sccp_manager.inc/extconfigs.class.php
+++ b/Sccp_manager.inc/extconfigs.class.php
@@ -77,7 +77,7 @@ class extconfigs {
# permit:127.0.0.0/255.0.0.0,permit:10.0.0.0/255.0.0.0,permit:172.0.0.0/255.224.0.0,permit:192.168.0.0/255.255.0.0"
"dateformat" => 'D.M.Y', # This is the german default format. Should be "D/M/Y" or "D/M/YA" instead
"disallow" => 'all', "allow" => 'alaw;ulaw',
- "hotline_enabled" => 'no',
+ "hotline_enabled" => 'off',
"hotline_context" => 'default', # !TODO!: Should this not be from-internal on FreePBX ?
"hotline_extension" => '*60', # !TODO!: Is this a good default extension to dial for hotline ?
"hotline_label" => 'hotline',
diff --git a/Sccp_manager.inc/xmlinterface.class.php b/Sccp_manager.inc/xmlinterface.class.php
index 2fab683..62ec1b5 100644
--- a/Sccp_manager.inc/xmlinterface.class.php
+++ b/Sccp_manager.inc/xmlinterface.class.php
@@ -27,14 +27,15 @@ class xmlinterface {
'about' => 'Create XML data interface ver: ' . $Ver);
}
- function create_default_XML($data_path = '', $data_values = array(), $model_information = array(), $lang_info = array()) {
- if (empty($data_path) || empty($data_values)) {
+ function create_default_XML($store_path = '', $data_values = array(), $model_information = array(), $lang_info = array()) {
+ $data_path = $data_values['tftp_path'];
+ if (empty($store_path) || empty($data_path) || empty($data_values)) {
return;
}
$def_xml_fields = array('authenticationURL', 'informationURL', 'messagesURL', 'servicesURL', 'directoryURL', 'proxyServerURL', 'idleTimeout', 'idleURL');
$def_xml_locale = array('userLocale', 'networkLocaleInfo', 'networkLocale');
- $xml_name = $data_path . '/XMLDefault.cnf.xml';
- $xml_template = $data_path . '/templates/XMLDefault.cnf.xml_template';
+ $xml_name = $store_path . '/XMLDefault.cnf.xml';
+ $xml_template = $data_values['tftp_path'] . '/templates/XMLDefault.cnf.xml_template';
if (file_exists($xml_template)) {
$xml_work = simplexml_load_file($xml_template);
@@ -124,7 +125,7 @@ class xmlinterface {
}
}
- function create_SEP_XML($data_path = '', $data_values = array(), $dev_config = array(), $dev_id = '', $lang_info = array()) {
+ function create_SEP_XML($store_path = '', $data_values = array(), $dev_config = array(), $dev_id = '', $lang_info = array()) {
$var_xml_general_fields = array('authenticationURL' => 'dev_authenticationURL', 'informationURL' => 'dev_informationURL', 'messagesURL' => 'dev_messagesURL',
'servicesURL' => 'dev_servicesURL', 'directoryURL' => 'dev_directoryURL', 'proxyServerURL' => 'dev_proxyServerURL', 'idleTimeout' => 'dev_idleTimeout',
@@ -134,21 +135,23 @@ class xmlinterface {
'phoneServices' => 'null', 'certHash' => 'null',
'deviceSecurityMode' => '1');
- if (empty($dev_id)) {
- return false;
- }
// $var_hw_config = $this->dbinterface->get_db_SccpTableData("get_sccpdevice_byid", array('id' => $dev_id));
if (empty($dev_config)) {
return false;
}
+ $data_path = $dev_config['tftp_path'];
+
+ if (empty($store_path) || empty($data_path) || empty($data_values) || empty($dev_id)) {
+ return;
+ }
if (!empty($dev_config['nametemplate'])) {
$xml_template = $data_path . '/templates/' . $dev_config['nametemplate'];
} else {
$xml_template = $data_path . '/templates/SEP0000000000.cnf.xml_79df_template';
}
- $xml_name = $data_path . '/' . $dev_id . '.cnf.xml';
+ $xml_name = $store_path . '/' . $dev_id . '.cnf.xml';
if (file_exists($xml_template)) {
$xml_work = simplexml_load_file($xml_template);
diff --git a/conf/SEP0000000000.cnf.xml_7940_template b/conf/SEP0000000000.cnf.xml_7940_template
index e3ee035..666bcd9 100644
--- a/conf/SEP0000000000.cnf.xml_7940_template
+++ b/conf/SEP0000000000.cnf.xml_7940_template
@@ -27,17 +27,6 @@
-
- Enable
- Enable
- true
- x.x.x.x
- 2000
-
- 2000
-
- 2000
-
P00308010100
diff --git a/conf/sccpgeneral.xml b/conf/sccpgeneral.xml
index ed351a2..49bb835 100644
--- a/conf/sccpgeneral.xml
+++ b/conf/sccpgeneral.xml
@@ -445,9 +445,9 @@ and open the template in the editor. Base Version before all crash :-)
- hotline_enabled
- no
-
-
+ off
+
+
Hotline Enabled: This allows unregistered extensions to connect to the system and dial the number listed below.
-
@@ -552,6 +552,15 @@ and open the template in the editor. Base Version before all crash :-)
Path to tftp home directory
+ -
+ tftp_rewrite
+
+ off
+
+
+ Support the use of regular-expression-based filename remapping
+
+
-
devicetable
sccpdevice
@@ -957,7 +966,7 @@ and open the template in the editor. Base Version before all crash :-)
- srst_Option
- no
+ disable
diff --git a/conf/sccpgeneral.xml.v431 b/conf/sccpgeneral.xml.v431
index 03eb9ba..aec7f01 100644
--- a/conf/sccpgeneral.xml.v431
+++ b/conf/sccpgeneral.xml.v431
@@ -449,7 +449,7 @@ and open the template in the editor. Base Version before all crash :-)
-
srst_Option
- off
+ disable
@@ -816,6 +816,15 @@ and open the template in the editor. Base Version before all crash :-)
Path to tftp home directory
+ -
+ tftp_rewrite
+
+ off
+
+
+ Support the use of regular-expression-based filename remapping
+
+
-
devicetable
@@ -839,7 +848,7 @@ and open the template in the editor. Base Version before all crash :-)
-
createlangdir
- off
+ no
Say 'yes' if you need to create cisco default language directory in tftp path.
diff --git a/views/formShow.php b/views/formShow.php
index bebbbf0..31a64f1 100644
--- a/views/formShow.php
+++ b/views/formShow.php
@@ -344,7 +344,7 @@ foreach ($items as $child) {
/*
* Input element Select SLD - Date format
* SLZ - Time Zone
- * SLT - TFTP Lang
+ *
* SLM - Music on hold
* SLK - System KeySet
*/
diff --git a/views/server.info.php b/views/server.info.php
index a50adfc..f186d0f 100644
--- a/views/server.info.php
+++ b/views/server.info.php
@@ -21,8 +21,6 @@ $info['Core_sccp'] = array('Version' => $core['Version'], 'about'=> 'Sccp ver.'
$info['Asterisk'] = array('Version' => FreePBX::Config()->get('ASTVERSION'), 'about'=> 'Asterisk.');
$info['Сompatible'] = array('Version' => $this->srvinterface->get_compatible_sccp(), 'about'=> '');
-//print_r($this->srvinterface->info());
-//print_r($this->extconfigs->info());
//print_r($this->dbinterface->info());
// $lang_arr = $this->extconfigs->getextConfig('sccp_lang','sk_SK');