Initialise all chan_sccp defaults in sccp_settings

Get default system settings from chan_sccp and add to sccpsettings
Remove legacy settings from sccpsettings
Change tftpReadTestFile to accept host as argument
Change sccpsettings structure to include systemdefaults
This commit is contained in:
steve-lad 2021-06-28 11:51:05 +02:00
parent f882a66eb4
commit 22d845ced3
4 changed files with 99 additions and 65 deletions

View file

@ -14,6 +14,7 @@ global $useAmiForSoftKeys;
global $settingsFromDb; global $settingsFromDb;
global $thisInstaller; global $thisInstaller;
global $cnf_int; global $cnf_int;
global $sccp_compatible;
$mobile_hw = '0'; $mobile_hw = '0';
$autoincrement = (($amp_conf["AMPDBENGINE"] == "sqlite") || ($amp_conf["AMPDBENGINE"] == "sqlite3")) ? "AUTOINCREMENT" : "AUTO_INCREMENT"; $autoincrement = (($amp_conf["AMPDBENGINE"] == "sqlite") || ($amp_conf["AMPDBENGINE"] == "sqlite3")) ? "AUTOINCREMENT" : "AUTO_INCREMENT";
$table_req = array('sccpdevice', 'sccpline', 'sccpsettings'); $table_req = array('sccpdevice', 'sccpline', 'sccpsettings');
@ -41,27 +42,6 @@ foreach ($requiredClasses as $className) {
} }
} }
// Get current default settings from db
$stmt = $db->prepare("SELECT * FROM sccpsettings");
$stmt->execute();
$settingsFromDb = $stmt->fetchAll(\PDO::FETCH_ASSOC);
foreach ($settingsFromDb as $key => $rowArray) {
$settingsFromDb[$rowArray['keyword']] = $rowArray;
unset($settingsFromDb[$key]);
}
// Check that required settings are initialised and update db and $settingsFromDb if not
foreach ($extconfigs->getExtConfig('sccpDefaults') as $key => $value) {
if (empty($settingsFromDb[$key])) {
$settingsFromDb[$key] = array('keyword' => $key, 'data' => $value, 'type' => 0, 'seq' => 0);
$sql = "REPLACE INTO sccpsettings (keyword, data, seq, type) VALUES ('{$key}', '{$value}', 0, 0)";
$results = $db->query($sql);
if (DB::IsError($results)) {
die_freepbx(_("Error updating sccpsettings: $key"));
}
}
}
CheckAsteriskVersion(); CheckAsteriskVersion();
$sccp_version = CheckChanSCCPCompatible(); $sccp_version = CheckChanSCCPCompatible();
$sccp_compatible = $sccp_version[0]; $sccp_compatible = $sccp_version[0];
@ -72,21 +52,15 @@ if ($sccp_compatible == 0) {
outn("<font color='red'>Chan Sccp not Found. Install it before continuing !</font>"); outn("<font color='red'>Chan Sccp not Found. Install it before continuing !</font>");
die(); die();
} }
$db_config = Get_DB_config($sccp_compatible);
$sccp_db_ver = CheckSCCPManagerDBVersion();
// BackUp Old config // BackUp Old config
createBackUpConfig(); createBackUpConfig();
RenameConfig(); RenameConfig();
$db_config = Get_DB_config($sccp_compatible);
InstallDB_updateSchema($db_config); InstallDB_updateSchema($db_config);
$stmt = $db->prepare('SELECT CASE WHEN EXISTS(SELECT 1 FROM sccpdevmodel) THEN 0 ELSE 1 END AS IsEmpty;');
$stmt->execute(); cleanUpSccpSettings();
$result = $stmt->fetchAll(\PDO::FETCH_ASSOC);
if ($result[0]['IsEmpty']) {
outn("Populating sccpdevmodel...");
InstallDB_fillsccpdevmodel();
}
InstallDB_createButtonConfigTrigger(); InstallDB_createButtonConfigTrigger();
InstallDB_CreateSccpDeviceConfigView($sccp_compatible); InstallDB_CreateSccpDeviceConfigView($sccp_compatible);
@ -98,7 +72,7 @@ if ($chanSCCPWarning) {
Setup_RealTime(); Setup_RealTime();
addDriver($sccp_compatible); addDriver($sccp_compatible);
checkTftpServer(); checkTftpServer();
getConfigMetaData('general');
outn("<br>"); outn("<br>");
outn("Install Complete !"); outn("Install Complete !");
outn("<br>"); outn("<br>");
@ -321,16 +295,7 @@ function Get_DB_config($sccp_compatible)
function CheckSCCPManagerDBVersion() function CheckSCCPManagerDBVersion()
{ {
global $db;
global $settingsFromDb;
outn("<li>" . _("Checking for previous version of Sccp_manager.") . "</li>");
if (!isset($settingsFromDb['sccp_compatible']['data'])) {
outn(_("No previous version found "));
return false;
}
outn(_("Found DB Schema : {$settingsFromDb['sccp_compatible']['data']}"));
return $settingsFromDb['sccp_compatible']['data'];
} }
/* notused */ /* notused */
@ -462,7 +427,6 @@ function InstallDB_updateSchema($db_config)
} }
if (!empty($sql_update)) { if (!empty($sql_update)) {
outn("<li>" . _("Updating table rows :") . $affected_rows . "</li>"); outn("<li>" . _("Updating table rows :") . $affected_rows . "</li>");
dbug('create', $sql_update);
$sql_update = 'BEGIN; ' . $sql_update . ' COMMIT;'; $sql_update = 'BEGIN; ' . $sql_update . ' COMMIT;';
sql($sql_update); sql($sql_update);
$affected_rows = $db->affectedRows(); $affected_rows = $db->affectedRows();
@ -472,7 +436,6 @@ function InstallDB_updateSchema($db_config)
if (!empty($sql_create)) { if (!empty($sql_create)) {
outn("<li>" . _("Adding new columns ...") . "</li>"); outn("<li>" . _("Adding new columns ...") . "</li>");
$sql_create = "ALTER TABLE {$tabl_name} " .substr($sql_create, 0, -2); $sql_create = "ALTER TABLE {$tabl_name} " .substr($sql_create, 0, -2);
dbug('create', $sql_create);
try { try {
$check = $db->query($sql_create); $check = $db->query($sql_create);
} catch (\Exception $e) { } catch (\Exception $e) {
@ -491,14 +454,16 @@ function InstallDB_updateSchema($db_config)
} }
} }
outn("<li>" . _("Total modify count :") . $count_modify . "</li>"); outn("<li>" . _("Total modify count :") . $count_modify . "</li>");
return true;
}
function InstallDB_fillsccpdevmodel() $stmt = $db->prepare('SELECT CASE WHEN EXISTS(SELECT 1 FROM sccpdevmodel) THEN 0 ELSE 1 END AS IsEmpty;');
{ $stmt->execute();
global $db; $result = $stmt->fetchAll(\PDO::FETCH_ASSOC);
outn("<li>" . _("Fill sccpdevmodel") . "</li>"); if (!$result[0]['IsEmpty']) {
$sql = "REPLACE INTO sccpdevmodel (model, vendor, dns, buttons, loadimage, loadinformationid, enabled, nametemplate) VALUES return;
} else {
outn("Populating sccpdevmodel...");
outn("<li>" . _("Fill sccpdevmodel") . "</li>");
$sql = "REPLACE INTO sccpdevmodel (model, vendor, dns, buttons, loadimage, loadinformationid, enabled, nametemplate) VALUES
('12 SP', 'CISCO', 1, 1, '', 'loadInformation3', 0, NULL), ('12 SP', 'CISCO', 1, 1, '', 'loadInformation3', 0, NULL),
('12 SP+', 'CISCO', 1, 1, '', 'loadInformation2', 0, NULL), ('12 SP+', 'CISCO', 1, 1, '', 'loadInformation2', 0, NULL),
('30 SP+', 'CISCO', 1, 1, '', 'loadInformation1', 0, NULL), ('30 SP+', 'CISCO', 1, 1, '', 'loadInformation1', 0, NULL),
@ -626,11 +591,12 @@ function InstallDB_fillsccpdevmodel()
('7911-sip', 'CISCO-SIP', 1, 1, 'SIP11.9-2-1S', 'loadInformation307', 1, 'SEP0000000000.cnf.xml_791x_sip_template'), ('7911-sip', 'CISCO-SIP', 1, 1, 'SIP11.9-2-1S', 'loadInformation307', 1, 'SEP0000000000.cnf.xml_791x_sip_template'),
('9951-sip', 'CISCO-SIP', 1, 1, 'sip9951.9-2-2SR1-9', 'loadinformation537', 1, 'SEP0000000000.cnf.xml_99xx_sip_template'), ('9951-sip', 'CISCO-SIP', 1, 1, 'sip9951.9-2-2SR1-9', 'loadinformation537', 1, 'SEP0000000000.cnf.xml_99xx_sip_template'),
('VGC Virtual', 'CISCO', 1, 1, '', 'loadInformation11', 0, NULL);"; ('VGC Virtual', 'CISCO', 1, 1, '', 'loadInformation11', 0, NULL);";
$check = $db->query($sql); $check = $db->query($sql);
if (DB::IsError($check)) { if (DB::IsError($check)) {
die_freepbx("Can not create sccpdevmodel table, error:$check\n"); die_freepbx("Can not create sccpdevmodel table, error:$check\n");
}
} }
return true; return;
} }
function InstallDB_createButtonConfigTrigger() function InstallDB_createButtonConfigTrigger()
@ -961,11 +927,62 @@ function checkTftpServer() {
return; return;
} }
function getConfigMetaData($segment) { function cleanUpSccpSettings() {
global $aminterface; global $thisInstaller;
global $db;
global $settingsFromDb; global $settingsFromDb;
$sysConfiguration = $aminterface->getSCCPConfigMetaData($segment); global $db;
global $aminterface;
global $sccp_compatible;
// Get current default settings from db
$stmt = $db->prepare("SELECT * FROM sccpsettings");
$stmt->execute();
$settingsFromDb = $stmt->fetchAll(\PDO::FETCH_ASSOC);
foreach ($settingsFromDb as $key => $rowArray) {
$settingsFromDb[$rowArray['keyword']] = $rowArray;
unset($settingsFromDb[$key]);
}
// See if a previous version was installed
outn("<li>" . _("Checking for previous version of Sccp_manager.") . "</li>");
if (!isset($settingsFromDb['sccp_compatible']['data'])) {
outn(_("No previous version found "));
} else {
outn(_("Found DB Schema : {$settingsFromDb['sccp_compatible']['data']}"));
}
// Check that required settings are initialised and update db and $settingsFromDb if not
/*
foreach ($extconfigs->getExtConfig('sccpDefaults') as $key => $value) {
if (empty($settingsFromDb[$key])) {
$settingsFromDb[$key] = array('keyword' => $key, 'data' => $value, 'type' => 0, 'seq' => 0);
$sql = "REPLACE INTO sccpsettings (keyword, data, seq, type) VALUES ('{$key}', '{$value}', 0, 0)";
$results = $db->query($sql);
if (DB::IsError($results)) {
die_freepbx(_("Error updating sccpsettings: $key"));
}
}
}
*/
// Clean up sccpsettings to remove legacy values.
$xml_vars = "{$_SERVER['DOCUMENT_ROOT']}/admin/modules/sccp_manager/conf/sccpgeneral.xml.v{$sccp_compatible}";
$thisInstaller->xml_data = simplexml_load_file($xml_vars);
$thisInstaller->initVarfromXml();
foreach ( array_diff_key($settingsFromDb,$thisInstaller->sccpvalues) as $key => $valueArray) {
// Remove legacy values
unset($settingsFromDb[$key]);
}
foreach ($settingsFromDb as $key => $valueArray) {
$settingsFromDb[$key]['seq'] = $thisInstaller->sccpvalues[$key]['seq'];
$settingsFromDb[$key]['type'] = $thisInstaller->sccpvalues[$key]['type'];
}
$settingsFromDb = array_merge($settingsFromDb, array_diff_key($thisInstaller->sccpvalues, $settingsFromDb));
unset($thisInstaller->sccpvalues);
// get chan-sccp defaults
$sysConfiguration = $aminterface->getSCCPConfigMetaData('general');
foreach ($sysConfiguration['Options'] as $key => $valueArray) { foreach ($sysConfiguration['Options'] as $key => $valueArray) {
if ($valueArray['Flags'][0] == 'Obsolete' || $valueArray['Flags'][0] == 'Deprecated') { if ($valueArray['Flags'][0] == 'Obsolete' || $valueArray['Flags'][0] == 'Deprecated') {
continue; continue;
@ -973,14 +990,29 @@ function getConfigMetaData($segment) {
$sysConfiguration[$valueArray['Name']] = $valueArray; $sysConfiguration[$valueArray['Name']] = $valueArray;
if (array_key_exists($valueArray['Name'],$settingsFromDb)) { if (array_key_exists($valueArray['Name'],$settingsFromDb)) {
if (!empty($sysConfiguration[$valueArray['Name']]['DefaultValue'])) { if (!empty($sysConfiguration[$valueArray['Name']]['DefaultValue'])) {
$sql = "UPDATE sccpsettings SET systemdefault = '{$valueArray['DefaultValue']}' WHERE keyword = '{$valueArray['Name']}'"; $settingsFromDb[$valueArray['Name']]['systemdefault'] = $sysConfiguration[$valueArray['Name']]['DefaultValue'];
$results = $db->query($sql);
} }
} else {
$settingsFromDb[$valueArray['Name']] = array('keyword' => $valueArray['Name'], 'seq' => 0, 'type' => 0, 'data' => '', 'systemdefault' => $sysConfiguration[$valueArray['Name']]['DefaultValue']);
} }
unset($sysConfiguration[$key]); unset($sysConfiguration[$key]);
} }
unset($sysConfiguration['Options']); unset($sysConfiguration['Options']);
dbug('sysconfig', $sysConfiguration);
}
// Write settings back to db
$sql = "TRUNCATE sccpsettings";
$results = $db->query($sql);
foreach ( $settingsFromDb as $key =>$valueArray ) {
$sql = "REPLACE INTO sccpsettings
(keyword, seq, type, data, systemdefault)
VALUES
( '{$settingsFromDb[$key]['keyword']}',
{$settingsFromDb[$key]['seq']},
{$settingsFromDb[$key]['type']},
'{$settingsFromDb[$key]['data']}',
'{$settingsFromDb[$key]['systemdefault']}'
)";
$results = $db->query($sql);
}
}
?> ?>

View file

@ -166,9 +166,10 @@
</table> </table>
<table name="sccpsettings"> <table name="sccpsettings">
<field name="keyword" type="string" length="50" primarykey="true"/> <field name="keyword" type="string" length="50" primarykey="true"/>
<field name="data" type="string" length="255"/> <field name="data" type="string" length="255" notnull="false"/>
<field name="seq" type="boolean" primarykey="true"/> <field name="seq" type="boolean" primarykey="true"/>
<field name="type" type="boolean" primarykey="true"/> <field name="type" type="boolean" primarykey="true"/>
<field name="systemdefault" type="string" length="255" notnull="false"/>
</table> </table>
</database> </database>
</module> </module>

View file

@ -249,9 +249,9 @@ class dbinterface
case 'sccpsettings': case 'sccpsettings':
if ($mode == 'replace') { // Change mode name to be more transparent if ($mode == 'replace') { // Change mode name to be more transparent
$dbh->prepare('TRUNCATE sccpsettings')->execute(); $dbh->prepare('TRUNCATE sccpsettings')->execute();
$stmt = $dbh->prepare('INSERT INTO sccpsettings (keyword, data, seq, type) VALUES (:keyword,:data,:seq,:type)'); $stmt = $dbh->prepare('INSERT INTO sccpsettings (keyword, data, seq, type, systemdefault) VALUES (:keyword,:data,:seq,:type,:systemdefault)');
} else { } else {
$stmt = $dbh->prepare('REPLACE INTO sccpsettings (keyword, data, seq, type) VALUES (:keyword,:data,:seq,:type)'); $stmt = $dbh->prepare('REPLACE INTO sccpsettings (keyword, data, seq, type, systemdefault) VALUES (:keyword,:data,:seq,:type, :systemdefault)');
} }
foreach ($save_value as $key => $dataArr) { foreach ($save_value as $key => $dataArr) {
if (empty($dataArr)) { if (empty($dataArr)) {
@ -261,6 +261,7 @@ class dbinterface
$stmt->bindParam(':data',$dataArr['data'],\PDO::PARAM_STR); $stmt->bindParam(':data',$dataArr['data'],\PDO::PARAM_STR);
$stmt->bindParam(':seq',$dataArr['seq'],\PDO::PARAM_INT); $stmt->bindParam(':seq',$dataArr['seq'],\PDO::PARAM_INT);
$stmt->bindParam(':type',$dataArr['type'],\PDO::PARAM_INT); $stmt->bindParam(':type',$dataArr['type'],\PDO::PARAM_INT);
$stmt->bindParam(':systemdefault',$dataArr['systemdefault'],\PDO::PARAM_STR);
$result = $stmt->execute(); $result = $stmt->execute();
} }
break; break;

View file

@ -161,7 +161,7 @@ trait helperfunctions {
return $result; return $result;
} }
function tftpReadTestFile($remoteFileName, $host = "127.0.0.1";) function tftpReadTestFile($remoteFileName, $host = "127.0.0.1")
{ {
// https://datatracker.ietf.org/doc/html/rfc1350 // https://datatracker.ietf.org/doc/html/rfc1350
$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);