diff --git a/Sccp_manager.class.php b/Sccp_manager.class.php index 5007ea5..946691c 100644 --- a/Sccp_manager.class.php +++ b/Sccp_manager.class.php @@ -1102,7 +1102,6 @@ class Sccp_manager extends \FreePBX_Helpers implements \BMO { } } } - foreach ($this->sccpvalues as $key => $value) { $data_value[$key] = $value['data']; } @@ -1126,7 +1125,7 @@ class Sccp_manager extends \FreePBX_Helpers implements \BMO { if (!$sccp_native) { return $this->xmlinterface->create_SEP_SIP_XML($this->sccppath["tftp_path_store"], $data_value, $dev_config, $dev_id, $lang_data); } - return $this->xmlinterface->create_SEP_XML($this->sccppath["tftp_path_store"], $data_value, $dev_config, $dev_id, $lang_data); + return $this->xmlinterface->create_SEP_XML($this->sccppath["tftp_templates"], $data_value, $dev_config, $dev_id, $lang_data); } function deleteSccpDeviceXML($dev_id = '') { diff --git a/conf/sccpgeneral.xml.v433 b/conf/sccpgeneral.xml.v433 index 228972f..2c871f5 100644 --- a/conf/sccpgeneral.xml.v433 +++ b/conf/sccpgeneral.xml.v433 @@ -433,6 +433,14 @@ and open the template in the editor. Base Version before all crash :-) Use simulated enbloc dialing to speedup connection when dialing while onhook (older phones) + + phonepersonalization + + 0 + + + This needs to be enabled to allow the server to push background or ringtones to the phone in the SEPXXXXXXXXXX.cnf.xml of each phone: + @@ -1128,14 +1136,6 @@ and open the template in the editor. Base Version before all crash :-) I'm guessing on this one, but on some devices, the background image on the display can be modified at the device. I think this is the thing that allows that to happen. - - phonePersonalization - - 0 - - - This needs to be enabled to allow the server to push background or ringtones to the phone in the SEPXXXXXXXXXX.cnf.xml of each phone: - callLogBlfEnabled diff --git a/install.php b/install.php index db9cff0..bc01f43 100644 --- a/install.php +++ b/install.php @@ -281,7 +281,10 @@ function Get_DB_config($sccp_compatible) '_echocancel' => array('create' => "enum('on','off') NOT NULL default 'off'", 'modify' => "enum('on','off')"), '_silencesuppression' => array('create' => "VARCHAR(20) NULL default null", 'modify' => "VARCHAR(20)"), '_sccp_tos' => array('create' => "VARCHAR(11) NOT NULL default '0x68'", 'modify' => "VARCHAR(11)"), - '_sccp_cos' => array('create' => "VARCHAR(11) NOT NULL default '0x4'", 'modify' => "VARCHAR(11)") + '_sccp_cos' => array('create' => "VARCHAR(11) NOT NULL default '0x4'", 'modify' => "VARCHAR(11)"), + '_dev_sshPassword' => array('create' => "VARCHAR(25) NOT NULL default 'cisco'"), + '_dev_sshUserId' => array('create' => "VARCHAR(25) NOT NULL default 'cisco'"), + '_phonepersonalization' => array('create' => "enum('on','off') NOT NULL default 'off'", 'modify' => "enum('on','off')") ), 'sccpline' => array ( '_regcontext' => array('create' => "VARCHAR(20) NULL default 'sccpregistration'", 'modify' => "VARCHAR(20)"), @@ -289,7 +292,6 @@ function Get_DB_config($sccp_compatible) '_autoselectline_enabled' => array('create' => "enum('on','off') NOT NULL default 'off'", 'modify' => "enum('on','off')"), '_autocall_select' => array('create' => "enum('on','off') NOT NULL default 'off'", 'modify' => "enum('on','off')"), '_backgroundImageAccess' => array('create' => "enum('on','off') NOT NULL default 'off'", 'modify' => "enum('on','off')"), - '_phonePersonalization' => array('create' => "enum('on','off') NOT NULL default 'off'", 'modify' => "enum('on','off')"), '_callLogBlfEnabled' => array('create' => "enum('3','2') NOT NULL default '2'", 'modify' => "enum('3','2')") ) ); diff --git a/module.xml b/module.xml index 57723fe..cd5c29f 100644 --- a/module.xml +++ b/module.xml @@ -1,7 +1,7 @@ sccp_manager SCCP Manager - 14.3.0.1 + 14.3.0.0 setup SCCP Connectivity Steve Lad, Alex GP diff --git a/sccpManClasses/dbinterface.class.php b/sccpManClasses/dbinterface.class.php index 2427663..322115b 100644 --- a/sccpManClasses/dbinterface.class.php +++ b/sccpManClasses/dbinterface.class.php @@ -163,7 +163,7 @@ class dbinterface $dbh = \FreePBX::Database(); $stmt = $dbh->prepare('SELECT keyword, data, type, seq FROM sccpsettings ORDER BY type, seq'); $stmt->execute(); - foreach ($stmt->fetchAll() as $key => $rowArray) { + foreach ($stmt->fetchAll(\PDO::FETCH_ASSOC) as $key => $rowArray) { $settingsFromDb[$rowArray['keyword']] = $rowArray; unset($settingsFromDb[$key]); } @@ -254,10 +254,8 @@ class dbinterface $stmt = $dbh->prepare('REPLACE INTO sccpsettings (keyword, data, seq, type) VALUES (:keyword,:data,:seq,:type)'); } foreach ($save_value as $key => $dataArr) { - if (!empty($dataArr) && isset($dataArr['data'])) { - if (empty($dataArr['data'])) { + if (empty($dataArr)) { continue; - } } $stmt->bindParam(':keyword',$dataArr['keyword'],\PDO::PARAM_STR); $stmt->bindParam(':data',$dataArr['data'],\PDO::PARAM_STR); diff --git a/sccpManClasses/extconfigs.class.php b/sccpManClasses/extconfigs.class.php index 7214302..890619e 100644 --- a/sccpManClasses/extconfigs.class.php +++ b/sccpManClasses/extconfigs.class.php @@ -113,7 +113,28 @@ class extconfigs 'hotline_label' => 'hotline', 'devicetable' => 'sccpdevice', 'linetable' => 'sccpline', - 'displayconfig' => 'sccpgeneral' + 'displayconfig' => 'sccpgeneral', + '_dev_sshPassword' => 'cisco', + '_dev_sshUserId' => 'cisco', + 'dev_deviceProtocol' => 'SCCP', + 'dev_idleTimeout' => '60', + 'ntp_config_enabled' => 'off', + 'ntp_server' => 'pool.ntp.org', + 'ntp_server_mode' => 'unicast', + 'devlang' => 'English_United_States', + 'dev_authenticationURL' => '', + 'dev_informationURL' => '', + 'dev_messagesURL' => '', + 'dev_servicesURL' => '', + 'dev_directoryURL' => '', + 'dev_idleURL' => '', + 'dev_secureauthenticationURL' => '', + 'dev_secureinformationURL' => '', + 'dev_securemessagesURL' => '', + 'dev_secureservicesURL' => '', + 'dev_securedirectoryURL' => '', + 'dev_secureidleURL' => '', + 'dev_proxyServerURL' => '' ); private $keysetdefault = array('onhook' => 'redial,newcall,cfwdall,cfwdbusy,cfwdnoanswer,pickup,gpickup,dnd,private', 'connected' => 'hold,endcall,park,vidmode,select,cfwdall,cfwdbusy,idivert,monitor', diff --git a/sccpManClasses/xmlinterface.class.php b/sccpManClasses/xmlinterface.class.php index 0107c5e..d1ea593 100644 --- a/sccpManClasses/xmlinterface.class.php +++ b/sccpManClasses/xmlinterface.class.php @@ -116,235 +116,234 @@ class xmlinterface } } - function create_SEP_XML($store_path = '', $data_values = array(), $dev_config = array(), $dev_id = '', $lang_info = array()) + function create_SEP_XML($store_path, $data_values, $dev_config, $dev_id, $lang_info = array()) { + // TODO: $data_values are system wide defaults, $dev_config are specific defice values. + // Need to merge the two arrays so that device specific values override system values + // Values that cannot be sent to the device by chan-sccp are prefixed by an underscore + // so need to be sure that we apply the same convention to system wide defaults. + $data_values = array_merge($data_values, $dev_config); $var_xml_general_fields = array('authenticationurl' => 'dev_authenticationURL', 'informationurl' => 'dev_informationURL', 'messagesurl' => 'dev_messagesURL', 'servicesurl' => 'dev_servicesURL', 'directoryurl' => 'dev_directoryURL', 'idleurl' => 'dev_idleURL', 'secureauthenticationurl' => 'dev_secureauthenticationURL', 'secureinformationurl' => 'dev_secureinformationURL', 'securemessagesurl'=>'dev_securemessagesURL', 'secureservicesurl'=>'dev_secureservicesURL', 'securedirectoryurl'=>'dev_securedirectoryURL', 'secureidleurl' => 'dev_secureidleURL', 'proxyserverurl' => 'dev_proxyServerURL', 'idletimeout' => 'dev_idleTimeout', - 'sshuserid' => 'dev_sshUserId', 'sshpassword' => 'dev_sshPassword', 'deviceprotocol' => 'dev_deviceProtocol', - 'phonepersonalization' => 'phonePersonalization' + 'sshuserid' => '_dev_sshUserId', 'sshpassword' => '_dev_sshPassword', 'deviceprotocol' => 'dev_deviceProtocol', + 'phonepersonalization' => '_phonepersonalization' ); $var_xml_general_vars = array('capfAuthMode' => 'null', 'capfList' => 'null', 'mobility' => 'null', 'phoneServices' => 'null', 'certHash' => 'null', 'deviceSecurityMode' => '1'); - if (empty($dev_config)) { - return false; + $data_path = $dev_config['tftp_templates']; + if (empty($data_path)) { + die('Create_SEP_XML data_path not defined'); } - $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']; + $xml_template = "{$data_path}/{$dev_config['nametemplate']}"; } else { - $xml_template = $data_path . '/templates/SEP0000000000.cnf.xml_79df_template'; + $xml_template = "{$data_path}/templates/SEP0000000000.cnf.xml_79df_template"; } - $xml_name = $store_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 - $key_l = strtolower($key); - if (!empty($var_xml_general_fields[$key_l])) { - $xml_work->$key = $data_values[$var_xml_general_fields[$key_l]]; - } -// Set section Values - $xml_node = $xml_work->$key; - switch ($key_l) { - case 'devicepool': - $xml_node = $xml_work->$key; - foreach ($xml_work->$key->children() as $dkey => $ddata) { - switch (strtolower($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' => '', 'cisco_code' => 'Greenwich Standard Time'); - } - $xnode->name = $tz_id; - $xnode->dateTemplate = $data_values['dateformat']; - $xnode->timeZone = $TZdata['cisco_code']; -// $xnode->timeZone = $tz_id.' Standard'.((empty($TZdata['daylight']))? '': '/'.$TZdata['daylight']).' Time'; - - if ($data_values['ntp_config_enabled'] == 'on') { - $xnode->ntps->ntp->name = $data_values['ntp_server']; - $xnode->ntps->ntp->ntpMode = $data_values['ntp_server_mode']; - } else { - $xnode->ntps = null; - } - // 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')); - foreach ($srst_fld as $srst_pro => $srs_put) { - if (empty($data_values[$srst_pro]) || ($data_values['srst_Option'] == 'disable') ) { - $srst_data =array(); - } else { - $srst_data = explode(';', $data_values[$srst_pro]); - } - $si = 1; - 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 = ((empty($srs_val[1])) ? "2000": $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; - $bind_tmp = $this->get_server_sccp_bind($data_values); - $ifc = 0; - foreach ($bind_tmp as $bind_value) { - $xnode_obj = clone $xnode->member; - $xnode_obj['priority'] = $ifc; - $xnode_obj->callManager->name = $data_values['servername']; - if (!is_null($xnode_obj->callManager->description)) { - $xnode_obj->callManager->description = $data_values['servername']; - } - $xnode_obj->callManager->ports->ethernetPhonePort = $bind_value['port']; - $xnode_obj->callManager->processNodeName = $bind_value['ip']; - if (!empty($xnode_obj->callManager->ports->mgcpPorts)) { - unset($xnode_obj->callManager->ports->mgcpPorts); - } - - if ($ifc === 0) { - $this->replaceSimpleXmlNode($xnode->member, $xnode_obj); - } else { - $this->appendSimpleXmlNode($xnode->member, $xnode_obj); - } - $ifc++; - } - } - } - $this->replaceSimpleXmlNode($xml_work->$key, $xml_node); - break; - case 'vendorconfig': - $xml_node = $xml_work->$key; - foreach ($xml_work->$key->children() as $dkey => $ddata) { - $dkey_l = strtolower($dkey); - $vtmp_key = $key_l.'_'.$dkey_l; - if (isset($data_values[$vtmp_key])) { - $vtmp_data = $data_values[$vtmp_key]; - if ((!empty($vtmp_data)) || ($vtmp_data == "0")) { - $xml_node->$dkey = $vtmp_data; - } - } - } - $this->replaceSimpleXmlNode($xml_work->$key, $xml_node); - break; - - case 'versionstamp': - $xml_work->$key = time(); - break; - case 'loadinformation': -// Set Path Image ???? - if (isset($dev_config["tftp_firmware"])) { - $xml_work->$key = (isset($dev_config["loadimage"])) ? $dev_config["tftp_firmware"] . $dev_config["loadimage"] : ''; - } else { - $xml_work->$key = (isset($dev_config["loadimage"])) ? $dev_config["loadimage"] : ''; - } - if (!empty($dev_config['addon'])) { - $xnode = $xml_work->addChild('addOnModules'); - $ti = 1; - $hw_addon = explode(',', $dev_config['addon']); - foreach ($hw_addon as $add_key) { - if (!empty($dev_config['addon_info'][$add_key])) { - $add_val = $dev_config['addon_info'][$add_key]; - $xnode_obj = $xnode->addChild('addOnModule'); - $xnode_obj->addAttribute('idx', $ti); - $xnode_obj->addChild('loadInformation', $add_val); - $ti++; - } - } - } - break; - case 'commonprofile': - $xml_node->phonePassword = $data_values['dev_sshPassword']; - $xml_node->backgroundImageAccess = (($data_values['backgroundImageAccess'] == 'on') || ($data_values['backgroundImageAccess'] == 'true') ) ? 'true' : 'false'; - $xml_node->callLogBlfEnabled = $data_values['callLogBlfEnabled']; - break; - - case 'userlocale': - case 'networklocaleinfo': - case 'networklocale': - $hwlang = ''; - $lang = ''; - if (!empty($dev_config["_hwlang"])) { - $hwlang = explode(':', $dev_config["_hwlang"]); - } - if (($key_l == 'networklocaleinfo') || ($key_l == 'networklocale')) { - $lang = (empty($hwlang[0])) ? $data_values['netlang'] : $hwlang[0]; - } else { - $lang = (empty($hwlang[1])) ? $data_values['devlang'] : $hwlang[1]; - } - if (($lang != 'null') && (!empty($lang))) { - if ($key_l == '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']; - if ($key_l == 'userlocale') { - $xml_node->winCharSet = $lang_info[$lang]['codepage']; - } - $this->replaceSimpleXmlNode($xml_work->$key, $xml_node); - } - } - } else { - $xml_work->$key = ''; - } - break; - default: - break; - } - } - -// print_r($xml_work); - $xml_work->asXml($xml_name); // Save - } else { + $xml_name = "{$store_path}/{$dev_id}.cnf.xml"; + if (!file_exists($xml_template)) { die('Error Hardware template :' . $xml_template . ' not found'); } + $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 + $key_l = strtolower($key); + if (!empty($var_xml_general_fields[$key_l])) { + $xml_work->$key = $data_values[$var_xml_general_fields[$key_l]]; + } +// Set section Values + $xml_node = $xml_work->$key; + switch ($key_l) { + case 'devicepool': + $xml_node = $xml_work->$key; + foreach ($xml_work->$key->children() as $dkey => $ddata) { + switch (strtolower($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' => '', 'cisco_code' => 'Greenwich Standard Time'); + } + $xnode->name = $tz_id; + $xnode->dateTemplate = $data_values['dateformat']; + $xnode->timeZone = $TZdata['cisco_code']; +// $xnode->timeZone = $tz_id.' Standard'.((empty($TZdata['daylight']))? '': '/'.$TZdata['daylight']).' Time'; + + if ($data_values['ntp_config_enabled'] == 'on') { + $xnode->ntps->ntp->name = $data_values['ntp_server']; + $xnode->ntps->ntp->ntpMode = $data_values['ntp_server_mode']; + } else { + $xnode->ntps = null; + } + // 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')); + foreach ($srst_fld as $srst_pro => $srs_put) { + if (empty($data_values[$srst_pro]) || ($data_values['srst_Option'] == 'disable') ) { + $srst_data =array(); + } else { + $srst_data = explode(';', $data_values[$srst_pro]); + } + $si = 1; + 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 = ((empty($srs_val[1])) ? "2000": $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; + $bind_tmp = $this->get_server_sccp_bind($data_values); + $ifc = 0; + foreach ($bind_tmp as $bind_value) { + $xnode_obj = clone $xnode->member; + $xnode_obj['priority'] = $ifc; + $xnode_obj->callManager->name = $data_values['servername']; + if (!is_null($xnode_obj->callManager->description)) { + $xnode_obj->callManager->description = $data_values['servername']; + } + $xnode_obj->callManager->ports->ethernetPhonePort = $bind_value['port']; + $xnode_obj->callManager->processNodeName = $bind_value['ip']; + if (!empty($xnode_obj->callManager->ports->mgcpPorts)) { + unset($xnode_obj->callManager->ports->mgcpPorts); + } + + if ($ifc === 0) { + $this->replaceSimpleXmlNode($xnode->member, $xnode_obj); + } else { + $this->appendSimpleXmlNode($xnode->member, $xnode_obj); + } + $ifc++; + } + } + } + $this->replaceSimpleXmlNode($xml_work->$key, $xml_node); + break; + case 'vendorconfig': + $xml_node = $xml_work->$key; + foreach ($xml_work->$key->children() as $dkey => $ddata) { + $dkey_l = strtolower($dkey); + $vtmp_key = $key_l.'_'.$dkey_l; + if (isset($data_values[$vtmp_key])) { + $vtmp_data = $data_values[$vtmp_key]; + if ((!empty($vtmp_data)) || ($vtmp_data == "0")) { + $xml_node->$dkey = $vtmp_data; + } + } + } + $this->replaceSimpleXmlNode($xml_work->$key, $xml_node); + break; + + case 'versionstamp': + $xml_work->$key = time(); + break; + case 'loadinformation': +// Set Path Image ???? + if (isset($dev_config["tftp_firmware"])) { + $xml_work->$key = (isset($dev_config["loadimage"])) ? $dev_config["tftp_firmware"] . $dev_config["loadimage"] : ''; + } else { + $xml_work->$key = (isset($dev_config["loadimage"])) ? $dev_config["loadimage"] : ''; + } + if (!empty($dev_config['addon'])) { + $xnode = $xml_work->addChild('addOnModules'); + $ti = 1; + $hw_addon = explode(',', $dev_config['addon']); + foreach ($hw_addon as $add_key) { + if (!empty($dev_config['addon_info'][$add_key])) { + $add_val = $dev_config['addon_info'][$add_key]; + $xnode_obj = $xnode->addChild('addOnModule'); + $xnode_obj->addAttribute('idx', $ti); + $xnode_obj->addChild('loadInformation', $add_val); + $ti++; + } + } + } + break; + case 'commonprofile': + $xml_node->phonePassword = $data_values['dev_sshPassword']; + $xml_node->backgroundImageAccess = (($data_values['backgroundImageAccess'] == 'on') || ($data_values['backgroundImageAccess'] == 'true') ) ? 'true' : 'false'; + $xml_node->callLogBlfEnabled = $data_values['callLogBlfEnabled']; + break; + + case 'userlocale': + case 'networklocaleinfo': + case 'networklocale': + $hwlang = ''; + $lang = ''; + if (!empty($dev_config["_hwlang"])) { + $hwlang = explode(':', $dev_config["_hwlang"]); + } + if (($key_l == 'networklocaleinfo') || ($key_l == 'networklocale')) { + $lang = (empty($hwlang[0])) ? $data_values['netlang'] : $hwlang[0]; + } else { + $lang = (empty($hwlang[1])) ? $data_values['devlang'] : $hwlang[1]; + } + if (($lang != 'null') && (!empty($lang))) { + if ($key_l == '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']; + if ($key_l == 'userlocale') { + $xml_node->winCharSet = $lang_info[$lang]['codepage']; + } + $this->replaceSimpleXmlNode($xml_work->$key, $xml_node); + } + } + } else { + $xml_work->$key = ''; + } + break; + default: + break; + } + } + + $xml_work->asXml($xml_name); // Save + return time(); } diff --git a/sccpManTraits/ajaxHelper.php b/sccpManTraits/ajaxHelper.php index 39ddbeb..8e7befb 100644 --- a/sccpManTraits/ajaxHelper.php +++ b/sccpManTraits/ajaxHelper.php @@ -512,14 +512,12 @@ trait ajaxHelper { $TZdata = $this->extconfigs->getExtConfig('sccp_timezone', $tz_id); if (!empty($TZdata)) { $value = $TZdata['offset']/60; - if (!($this->sccpvalues['tzoffset']['data'] == $value)) { - $save_settings[] = array( - 'keyword' => 'tzoffset', - 'data' => $value, - 'seq' => '98', - 'type' => '2' - ); - } + $save_settings[] = array( + 'keyword' => 'tzoffset', + 'data' => $value, + 'seq' => '98', + 'type' => '2' + ); } break; }