Begin resample Sccp_manager

Create seporated interface to Xml
This commit is contained in:
PhantomVl 2017-11-02 11:10:48 +03:00
parent 20ce9d0581
commit 4b6ebea984
5 changed files with 427 additions and 27 deletions

View file

@ -30,7 +30,17 @@
* + Change internal use Field to _Field (new feature in chan_sccp (added for Sccp_manager))
* + Delete phone XML
* + Change Installer ?? (test )
* + Installer Realtime config update
* + Installer Adaptive DB reconfig.
* + Add system info page
* + Change Cisco Language data
* + 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
* - Add Switch to select XML schema (display)
* - Bootstrap encodeURI(row['type']) ???????
* - Check Time zone ....
* + SRST Config
* - Failover config
* + Auto Addons!
@ -1637,6 +1647,21 @@ class Sccp_manager extends \FreePBX_Helpers implements \BMO {
*/
function sccp_create_tftp_XML() {
foreach ($this->sccpvalues as $key => $value) {
$data_value[$key] = $value['data'];
}
$data_value['server_if_list'] = $this->getIP_information();
$model_information = $this->getSccp_model_information($get = "enabled", $validate = false); // Get Active
if (empty($model_information))
$model_information = $this->getSccp_model_information($get = "all", $validate = false); // Get All
$lang_data = $this->extconfigs->getextConfig('sccp_lang');
$this->xmlinterface->create_default_XML($this->sccppath["tftp_path"], $data_value, $model_information, $lang_data);
/*
$def_xml_fields = array('authenticationURL', 'informationURL', 'messagesURL', 'servicesURL', 'directoryURL', 'proxyServerURL', 'idleTimeout', 'idleURL');
$def_xml_locale = array('userLocale', 'networkLocaleInfo', 'networkLocale');
$xml_name = $this->sccppath["tftp_path"] . '/XMLDefault.cnf.xml';
@ -1722,6 +1747,8 @@ class Sccp_manager extends \FreePBX_Helpers implements \BMO {
//
// die(print_r($xml_work));
}
*
*/
}
/*
@ -1729,6 +1756,34 @@ class Sccp_manager extends \FreePBX_Helpers implements \BMO {
*/
function sccp_create_device_XML($dev_id = '') {
if (empty($dev_id)) {
return false;
}
$dev_config = $this->dbinterface->get_db_SccpTableData("get_sccpdevice_byid", array('id' => $dev_id));
foreach ($this->sccpvalues as $key => $value) {
$data_value[$key] = $value['data'];
}
$data_value['ntp_timezone_id'] = $this-> extconfigs->getextConfig('sccp_timezone',$data_value['ntp_timezone']);
$data_value['server_if_list'] = $this->getIP_information();
$dev_config['addon_info'] = array();
if (!empty($dev_config['addon'])) {
$hw_addon = explode(',', $dev_config['addon']);
foreach ($hw_addon as $key) {
$hw_data = $this->getSccp_model_information('byid', false, "all", array('model' => $key));
$dev_config['addon_info'][$key] = $hw_data[0]['loadimage'];
}
}
$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);
/*
$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',
'idleURL' => 'dev_idleURL', 'sshUserId' => 'dev_sshUserId', 'sshPassword' => 'dev_sshPassword', 'deviceProtocol' => 'dev_deviceProtocol'
@ -1937,6 +1992,8 @@ class Sccp_manager extends \FreePBX_Helpers implements \BMO {
die('Error Hardware templatee :' . $xml_template . ' not found');
}
return time();
*
*/
}
function sccp_delete_device_XML($dev_id = '') {

View file

@ -134,35 +134,35 @@ class extconfigs {
'Dateline' => array('offset' => '-720', 'daylight' => ''),
'Samoa' => array('offset' => '-660', 'daylight' => ''),
'Hawaiian' => array('offset' => '-600', 'daylight' => ''),
'Alaskan' => array('offset' => '-540', 'daylight' => 'Daylight Time'),
'Pacific' => array('offset' => '-480', 'daylight' => 'Daylight Time'),
'Mountain' => array('offset' => '-420', 'daylight' => 'Daylight Time'),
'Alaskan' => array('offset' => '-540', 'daylight' => 'Daylight'),
'Pacific' => array('offset' => '-480', 'daylight' => 'Daylight'),
'Mountain' => array('offset' => '-420', 'daylight' => 'Daylight'),
'US Mountain' => array('offset' => '-420', 'daylight' => ''),
'Central' => array('offset' => '-360', 'daylight' => 'Daylight Time'),
'Mexico' => array('offset' => '-360', 'daylight' => 'Daylight Time'),
'Central' => array('offset' => '-360', 'daylight' => 'Daylight'),
'Mexico' => array('offset' => '-360', 'daylight' => 'Daylight'),
'Canada Central' => array('offset' => '-360', 'daylight' => ''),
'SA Pacific' => array('offset' => '-300', 'daylight' => ''),
'Eastern' => array('offset' => '-300', 'daylight' => 'Daylight Time'),
'Eastern' => array('offset' => '-300', 'daylight' => 'Daylight'),
'US Eastern' => array('offset' => '-300', 'daylight' => ''),
'Atlantic' => array('offset' => '-240', 'daylight' => 'Daylight Time'),
'Atlantic' => array('offset' => '-240', 'daylight' => 'Daylight'),
'SA Western' => array('offset' => '-240', 'daylight' => ''),
'Pacific SA' => array('offset' => '-240', 'daylight' => ''),
'Newfoundland' => array('offset' => '-210', 'daylight' => 'Daylight Time'),
'E. South America' => array('offset' => '-180', 'daylight' => 'Daylight Time'),
'Newfoundland' => array('offset' => '-210', 'daylight' => 'Daylight'),
'E. South America' => array('offset' => '-180', 'daylight' => 'Daylight'),
'SA Eastern' => array('offset' => '-180', 'daylight' => ''),
'Pacific SA' => array('offset' => '-180', 'daylight' => 'Daylight Time'),
'Mid-Atlantic' => array('offset' => '-120', 'daylight' => 'Daylight Time'),
'Azores' => array('offset' => '-060', 'daylight' => 'Daylight Time'),
'GMT' => array('offset' => '00', 'daylight' => 'Daylight Time'),
'Pacific SA' => array('offset' => '-180', 'daylight' => 'Daylight'),
'Mid-Atlantic' => array('offset' => '-120', 'daylight' => 'Daylight'),
'Azores' => array('offset' => '-060', 'daylight' => 'Daylight'),
'GMT' => array('offset' => '00', 'daylight' => 'Daylight'),
'Greenwich' => array('offset' => '00', 'daylight' => ''),
'W. Europe' => array('offset' => '60', 'daylight' => 'Daylight Time'),
'GTB' => array('offset' => '60', 'daylight' => 'Daylight Time'),
'Egypt' => array('offset' => '60', 'daylight' => 'Daylight Time'),
'E. Europe' => array('offset' => '60', 'daylight' => 'Daylight Time'),
'Romance' => array('offset' => '120', 'daylight' => 'Daylight Time'),
'Central Europe' => array('offset' => '120', 'daylight' => 'Daylight Time'),
'W. Europe' => array('offset' => '60', 'daylight' => 'Daylight'),
'GTB' => array('offset' => '60', 'daylight' => 'Daylight'),
'Egypt' => array('offset' => '60', 'daylight' => 'Daylight'),
'E. Europe' => array('offset' => '60', 'daylight' => 'Daylight'),
'Romance' => array('offset' => '120', 'daylight' => 'Daylight'),
'Central Europe' => array('offset' => '120', 'daylight' => 'Daylight'),
'South Africa' => array('offset' => '120', 'daylight' => ''),
'Jerusalem' => array('offset' => '120', 'daylight' => 'Daylight Time'),
'Jerusalem' => array('offset' => '120', 'daylight' => 'Daylight'),
'Saudi Arabia' => array('offset' => '180', 'daylight' => ''),
/* Russion Regions */
'Russian/Kaliningrad' => array('offset' => '120', 'daylight' => ''),
@ -180,8 +180,8 @@ class extconfigs {
'Russian/Kamchatka' => array('offset' => '720', 'daylight' => ''),
/* EnD - Russion Regions */
'Iran' => array('offset' => '210', 'daylight' => 'Daylight Time'),
'Caucasus' => array('offset' => '240', 'daylight' => 'Daylight Time'),
'Iran' => array('offset' => '210', 'daylight' => 'Daylight'),
'Caucasus' => array('offset' => '240', 'daylight' => 'Daylight'),
'Arabian' => array('offset' => '240', 'daylight' => ''),
'Afghanistan' => array('offset' => '270', 'daylight' => ''),
'West Asia' => array('offset' => '300', 'daylight' => ''),
@ -191,15 +191,15 @@ class extconfigs {
'China' => array('offset' => '480', 'daylight' => ''),
'Taipei' => array('offset' => '480', 'daylight' => ''),
'Tokyo' => array('offset' => '540', 'daylight' => ''),
'Cen. Australia' => array('offset' => '570', 'daylight' => 'Daylight Time'),
'Cen. Australia' => array('offset' => '570', 'daylight' => 'Daylight'),
'AUS Central' => array('offset' => '570', 'daylight' => ''),
'E. Australia' => array('offset' => '600', 'daylight' => ''),
'AUS Eastern' => array('offset' => '600', 'daylight' => 'Daylight Time'),
'AUS Eastern' => array('offset' => '600', 'daylight' => 'Daylight'),
'West Pacific' => array('offset' => '600', 'daylight' => ''),
'Tasmania' => array('offset' => '600', 'daylight' => 'Daylight Time'),
'Tasmania' => array('offset' => '600', 'daylight' => 'Daylight'),
'Central Pacific' => array('offset' => '660', 'daylight' => ''),
'Fiji' => array('offset' => '720', 'daylight' => ''),
'New Zealand' => array('offset' => '720', 'daylight' => 'Daylight Time')
'New Zealand' => array('offset' => '720', 'daylight' => 'Daylight')
);
}

View file

@ -0,0 +1,342 @@
<?php
/**
*
* Core Comsnd Interface
*
*
*/
namespace FreePBX\modules\Sccp_manager;
class xmlinterface {
private $val_null = 'NONE'; /// REPLACE to null Field
public function __construct() {
}
public function info() {
return Array('Version' => '13.0.2',
'about' =>'Create XML data interface v. 13.0.2');
}
function create_default_XML($data_path = '', $data_values= array(), $model_information =array(), $lang_info =array()) {
if (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';
if (file_exists($xml_template)) {
$xml_work = simplexml_load_file($xml_template);
$xnode = &$xml_work->callManagerGroup->members;
if ($data_values['bindaddr'] == '0.0.0.0') {
$ifc = 0;
foreach ($data_values['server_if_list'] as $value) {
if (!empty($value[0])) {
if (!in_array($value[0], array('0.0.0.0', '127.0.0.1'), true)) {
$xnode_obj = clone $xnode->member;
$xnode_obj['priority'] = $ifc;
//$xnode_obj = &$xnode -> member -> callManager;
$xnode_obj->callManager->name = $data_values['servername'];
$xnode_obj->callManager->ports->ethernetPhonePort = $data_values['port'];
$xnode_obj->callManager->processNodeName = $value[0];
if ($ifc === 0) {
$this->replaceSimpleXmlNode($xnode->member, $xnode_obj);
} else {
$this->appendSimpleXmlNode($xnode->member, $xnode_obj);
}
$ifc ++;
}
}
}
} else {
$xnode->member['priority'] = '0';
$xnode_obj = &$xnode->member->callManager;
$xnode_obj->name = $data_values['servername'];
$xnode_obj->ports->ethernetPhonePort = $data_values['port'];
$xnode_obj->processNodeName = $data_values['bindaddr'];
}
$this->replaceSimpleXmlNode($xml_work->callManagerGroup->members, $xnode);
foreach ($def_xml_fields as $value) {
if (!empty($data_values['dev_' . $value])) {
$xml_work->$value = trim($data_values['dev_' . $value]);
}
}
foreach ($def_xml_locale as $key) {
if (!empty($xml_work->$key)) {
$xnode = &$xml_work->$key;
switch ($key) {
case 'userLocale':
case 'networkLocaleInfo':
if ($key == 'networkLocaleInfo') {
$lang = $data_values['netlang'];
} else {
$lang = $data_values['devlang'];
}
// configs->getConfig('sccp_lang')
if (isset($lang_info[$lang])) {
$xnode->name = $lang_info[$lang]['locale'];
$xnode->langCode = $lang_info[$lang]['code'];
} else {
$xnode->name = '';
$xnode->langCode = '';
}
// $this -> replaceSimpleXmlNode($xml_work->$key,$xnode);
break;
case 'networkLocale':
$lang = $data_values['netlang'];
if (isset($lang_info[$lang])) {
$xnode = $lang_info[$lang]['language'];
} else {
$xnode = '';
}
break;
}
//$this-> replaceSimpleXmlNode($xml_work->$value, $xnode );
}
}
foreach ($model_information as $var) {
if (!empty($var['loadinformationid'])) {
$node = $xml_work->addChild($var['loadinformationid'], $var['loadimage']);
$node->addAttribute('model', $var['vendor'] . ' ' . $var['model']);
}
}
$xml_work->asXml($xml_name); // Save XMLDefault1.cnf.xml
}
}
function create_SEP_XML($data_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',
'idleURL' => 'dev_idleURL', 'sshUserId' => 'dev_sshUserId', 'sshPassword' => 'dev_sshPassword', 'deviceProtocol' => 'dev_deviceProtocol'
);
$var_xml_general_vars = array('capfAuthMode' => 'null', 'capfList'=> 'null', 'mobility' => 'null',
'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;
}
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';
if (file_exists($xml_template)) {
$xml_work = simplexml_load_file($xml_template);
foreach ($var_xml_general_vars as $key => $data) {
if (isset($xml_work->$key)) {
if ($data != 'null') {
$xml_work->$key = $data;
} else {
$node = $xml_work->$key;
unset($node[0][0]);
}
}
}
foreach ($xml_work as $key => $data) {
// Set System global Values
if (!empty($var_xml_general_fields[$key])) {
$xml_work->$key = $data_values[$var_xml_general_fields[$key]];
}
// Set section Values
$xml_node = $xml_work->$key;
switch ($key) {
case 'devicePool':
$xml_node = $xml_work->$key;
foreach ($xml_work->$key->children() as $dkey => $ddata) {
switch ($dkey) {
case 'dateTimeSetting':
$xnode = &$xml_node->$dkey;
$tz_id = $data_values['ntp_timezone'];
$TZdata = $data_values['ntp_timezone_id'];
if (empty($TZdata)){
$TZdata = array('offset' => '0', 'daylight' => '');
}
$xnode->name = $tz_id;
$xnode->dateTemplate = $data_values['dateformat'];
$xnode->timeZone = $tz_id.' Standard'.((empty($TZdata['daylight']))? '': '/'.$TZdata['daylight']).' Time';
if ($data_values['ntp_config_enabled'] == 'yes') {
$xnode->ntps->ntp->name = $data_values['ntp_server'];
$xnode->ntps->ntp->ntpMode = $data_values['ntp_server_mode'];
} else {
$xnode->ntps = '';
}
// Ntp Config
break;
case 'srstInfo':
if ($data_values['srst_Option'] == 'user') {
break;
}
$xnode = &$xml_node->$dkey;
$xnode -> name = $data_values['srst_Name'];
$xnode -> srstOption = $data_values['srst_Option'];
$xnode -> userModifiable = $data_values['srst_userModifiable'];
$xnode -> isSecure = $data_values['srst_isSecure'];
$srst_fld = array('srst_ip' => array('ipAddr','port') );
// $srst_fld = array('srst_ip' => array('ipAddr','port') , 'srst_sip' => array('sipIpAddr','sipPort') );
foreach ($srst_fld as $srst_pro => $srs_put){
$srst_data = explode(';', $data_values[$srst_pro]);
$si = 1;
// $xnode['test'] = $srst_data[0];
foreach ($srst_data as $value) {
$srs_val = explode('/',$value);
$nod = $srs_put[0].$si;
$xnode -> $nod = $srs_val[0];
$nod = $srs_put[1].$si;
$xnode -> $nod = $srs_val[1];
$si ++;
}
while ($si < 4) {
$nod = $srs_put[0].$si;
$xnode -> $nod = '';
$nod = $srs_put[1].$si;
$xnode -> $nod = '';
$si ++;
}
}
break;
case 'connectionMonitorDuration':
$xml_node->$dkey = strval(intval(intval($data_values['keepalive'])* 0.75));
break;
case 'callManagerGroup':
$xnode = &$xml_node->$dkey->members;
if ($data_values['bindaddr'] == '0.0.0.0') {
$ifc = 0;
foreach ($data_values['server_if_list'] as $value) {
if (!empty($value[0])) {
if (!in_array($value[0], array('0.0.0.0', '127.0.0.1'), true)) {
$xnode_obj = clone $xnode->member;
// $xnode_obj = $xnode -> member;
// $xnode_obj = $xnode -> addChild($xnode->member);
$xnode_obj['priority'] = $ifc;
//$xnode_obj = &$xnode -> member -> callManager;
$xnode_obj->callManager->name = $data_values['servername'];
$xnode_obj->callManager->ports->ethernetPhonePort = $data_values['port'];
$xnode_obj->callManager->processNodeName = $value[0];
if ($ifc === 0) {
$this->replaceSimpleXmlNode($xnode->member, $xnode_obj);
} else {
$this->appendSimpleXmlNode($xnode->member, $xnode_obj);
}
$ifc ++;
}
}
}
} else {
$xnode->member['priority'] = '0';
$xnode_obj = &$xnode->member->callManager;
$xnode_obj->name = $data_values['servername'];
$xnode_obj->ports->ethernetPhonePort = $data_values['port'];
$xnode_obj->processNodeName = $data_values['bindaddr'];
}
break;
}
}
$this->replaceSimpleXmlNode($xml_work->$key, $xml_node);
break;
case 'versionStamp':
$xml_work->$key = time();
break;
case 'loadInformation':
$xml_work->$key = $dev_config["loadimage"];
if (!empty($dev_config['addon'])) {
$xnode = $xml_work->addChild('addOnModules');
$ti = 1;
foreach ($dev_config['addon_info'] as $add_key => $add_val) {
$xnode_obj = $xnode->addChild('addOnModule');
$xnode_obj->addAttribute('idx', $ti);
$xnode_obj->addChild('loadInformation', $add_val);
$ti ++;
}
// $this->appendSimpleXmlNode($xml_work , $xnode_obj);
}
break;
case 'userLocale':
case 'networkLocaleInfo':
case 'networkLocale':
$hwlang = '';
$lang = '';
if (!empty($dev_config["_hwlang"])) {
$hwlang = explode(':', $dev_config["_hwlang"]);
}
if (($key == 'networkLocaleInfo') || ($key == 'networkLocale')) {
$lang = (empty($hwlang[0])) ? $data_values['netlang'] : $hwlang[0];
} else {
$lang = (empty($hwlang[1])) ? $data_values['devlang'] : $hwlang[1];
}
if (($lang !='null') && (!empty(trim($lang)))) {
if ($key == 'networkLocale') {
$xml_work->$key = $lang;
} else {
if (isset($lang_info[$lang])) {
$xml_node->name = $lang_info[$lang]['locale'];
$xml_node->langCode = $lang_info[$lang]['code'];
$this->replaceSimpleXmlNode($xml_work->$key, $xml_node);
}
}
} else {
$xml_work->$key ='';
}
break;
// Move all set to $var_xml_general_vars
// case 'mobility':
// case 'capfList':
// break;
// case 'phoneServices':
// break;
// $xml_work->$key = '';
default:
break;
}
}
// print_r($xml_work);
$xml_work->asXml($xml_name); // Save
} else {
die('Error Hardware templatee :' . $xml_template . ' not found');
}
return time();
}
private function replaceSimpleXmlNode($xml, $element = SimpleXMLElement) {
$dom = dom_import_simplexml($xml);
$import = $dom->ownerDocument->importNode(
dom_import_simplexml($element), TRUE
);
$dom->parentNode->replaceChild($import, $dom);
}
private function appendSimpleXmlNode($xml, $element = SimpleXMLElement) {
$dom = dom_import_simplexml($xml);
$import = $dom->ownerDocument->importNode(
dom_import_simplexml($element), TRUE
);
// $dom->parentNode->appendChild($import, $dom);
$dom->parentNode->appendChild($import->cloneNode(true));
}
}

View file

@ -47,7 +47,7 @@ and open the template in the editor. Base Version before all crash :-)
</page_group>
<page_group name="sccp_general">
<label>SCCP Server config v431</label>
<label>SCCP Server config</label>
<item type="IE" id="2"><label>SCCP Server Name</label>
<input>

View file

@ -17,6 +17,7 @@ $info = array();
$info['srvinterface'] = $this->srvinterface->info();
$info['extconfigs'] = $this->extconfigs->info();
$info['dbinterface'] = $this->dbinterface->info();
$info['XML'] = $this->xmlinterface->info();
$info['sccp_class'] = $driver['sccp'];
$info['Core_sccp'] = array('Version' => $core['Version'], 'about'=> 'Sccp ver.'. $core['Version'].' r'.$core['vCode']. ' Revision :'. $core['RevisionNum']);
$info['Asterisk'] = array('Version' => FreePBX::Config()->get('ASTVERSION'), 'about'=> 'Asterisk.');