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,12 +454,14 @@ 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);
if (!$result[0]['IsEmpty']) {
return;
} else {
outn("Populating sccpdevmodel...");
outn("<li>" . _("Fill sccpdevmodel") . "</li>"); outn("<li>" . _("Fill sccpdevmodel") . "</li>");
$sql = "REPLACE INTO sccpdevmodel (model, vendor, dns, buttons, loadimage, loadinformationid, enabled, nametemplate) VALUES $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),
@ -630,7 +595,8 @@ function InstallDB_fillsccpdevmodel()
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);