Remove _ prefixes in db column names
Mariadb does not accept _prefixed fields by spec, and these columns may give future issues. Migrate all fields in installer to remove this prefix (without data loss) and: Create new view sccplineconfig for chan-sccp where only accepted fields are shown Update sccpdeviceconfig to only show accepted fields Update extconfigs.conf to use sccplineconfig Remove references to _ prefixed fields
This commit is contained in:
parent
4e9dcb09f3
commit
b659f55170
|
@ -1315,7 +1315,7 @@ and open the template in the editor. Base Version before all crash :-)
|
||||||
<item type="IE" id="1" seq="99">
|
<item type="IE" id="1" seq="99">
|
||||||
<label>Device Label</label>
|
<label>Device Label</label>
|
||||||
<input>
|
<input>
|
||||||
<name>_description</name>
|
<name>description</name>
|
||||||
<default>000000000</default>
|
<default>000000000</default>
|
||||||
<class>sccp-custom</class>
|
<class>sccp-custom</class>
|
||||||
<options pattern="[0-9a-zA-Z]+"/>
|
<options pattern="[0-9a-zA-Z]+"/>
|
||||||
|
|
361
install.php
361
install.php
|
@ -64,6 +64,7 @@ cleanUpSccpSettings();
|
||||||
|
|
||||||
InstallDB_createButtonConfigTrigger();
|
InstallDB_createButtonConfigTrigger();
|
||||||
InstallDB_CreateSccpDeviceConfigView($sccp_compatible);
|
InstallDB_CreateSccpDeviceConfigView($sccp_compatible);
|
||||||
|
createViewSccplineconfig();
|
||||||
InstallDB_updateDBVer($sccp_compatible);
|
InstallDB_updateDBVer($sccp_compatible);
|
||||||
if ($chanSCCPWarning) {
|
if ($chanSCCPWarning) {
|
||||||
outn("<br>");
|
outn("<br>");
|
||||||
|
@ -99,7 +100,6 @@ function Get_DB_config($sccp_compatible)
|
||||||
'disallow' => array('drop' => "yes"),
|
'disallow' => array('drop' => "yes"),
|
||||||
'callhistory_answered_elsewhere' => array('create' => "enum('Ignore','Missed Calls','Received Calls', 'Placed Calls') NOT NULL default 'Ignore'",
|
'callhistory_answered_elsewhere' => array('create' => "enum('Ignore','Missed Calls','Received Calls', 'Placed Calls') NOT NULL default 'Ignore'",
|
||||||
'modify' => "enum('Ignore','Missed Calls','Received Calls','Placed Calls')"),
|
'modify' => "enum('Ignore','Missed Calls','Received Calls','Placed Calls')"),
|
||||||
'description' => array('rename' => "_description"),
|
|
||||||
'hwlang' => array('rename' => "_hwlang"),
|
'hwlang' => array('rename' => "_hwlang"),
|
||||||
'_hwlang' => array('create' => 'VARCHAR(12) NULL DEFAULT NULL'),
|
'_hwlang' => array('create' => 'VARCHAR(12) NULL DEFAULT NULL'),
|
||||||
'_loginname' => array('create' => 'VARCHAR(20) NULL DEFAULT NULL AFTER `_hwlang`'),
|
'_loginname' => array('create' => 'VARCHAR(20) NULL DEFAULT NULL AFTER `_hwlang`'),
|
||||||
|
@ -214,53 +214,98 @@ function Get_DB_config($sccp_compatible)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
// Below fields allow configuration of these settings on a per device basis
|
// Below fields allow configuration of these settings on a per device basis
|
||||||
// whereas previously they were all global.
|
// whereas previously they were all global.Some of these are not supported by chan-sccp;
|
||||||
// By prefixing with an underscore, these fields are ignored by chan-sccp
|
// The supported fields are listed in the view sccpdeviceconfig.
|
||||||
// which is not an issue as they are not "runtime"
|
|
||||||
$db_config_v5 = array(
|
$db_config_v5 = array(
|
||||||
'sccpdevice' => array(
|
'sccpdevice' => array(
|
||||||
'_logserver' => array('create' => "VARCHAR(100) NULL default null", 'modify' => "VARCHAR(20)"),
|
'logserver' => array('create' => "VARCHAR(100) NULL default null", 'modify' => "VARCHAR(20)"),
|
||||||
'_daysdisplaynotactive' => array('create' => "VARCHAR(20) NULL default null", 'modify' => "VARCHAR(20)"),
|
'daysdisplaynotactive' => array('create' => "VARCHAR(20) NULL default null", 'modify' => "VARCHAR(20)"),
|
||||||
'_displayontime' => array('create' => "VARCHAR(20) NULL default null", 'modify' => "VARCHAR(20)"),
|
'displayontime' => array('create' => "VARCHAR(20) NULL default null", 'modify' => "VARCHAR(20)"),
|
||||||
'_displayonduration' => array('create' => "VARCHAR(20) NULL default null", 'modify' => "VARCHAR(20)"),
|
'displayonduration' => array('create' => "VARCHAR(20) NULL default null", 'modify' => "VARCHAR(20)"),
|
||||||
'_displayidletimeout' => array('create' => "VARCHAR(20) NULL default null", 'modify' => "VARCHAR(20)"),
|
'displayidletimeout' => array('create' => "VARCHAR(20) NULL default null", 'modify' => "VARCHAR(20)"),
|
||||||
'_settingsaccess' => array('create' => "enum('on','off') NOT NULL default 'off'", 'modify' => "enum('on','off')"),
|
'settingsaccess' => array('create' => "enum('on','off') NOT NULL default 'off'", 'modify' => "enum('on','off')"),
|
||||||
'_videocapability' => array('create' => "enum('on','off') NOT NULL default 'off'", 'modify' => "enum('on','off')"),
|
'videocapability' => array('create' => "enum('on','off') NOT NULL default 'off'", 'modify' => "enum('on','off')"),
|
||||||
'_webaccess' => array('create' => "enum('on','off') NOT NULL default 'off'", 'modify' => "enum('on','off')"),
|
'webaccess' => array('create' => "enum('on','off') NOT NULL default 'off'", 'modify' => "enum('on','off')"),
|
||||||
'_webadmin' => array('create' => "enum('on','off') NOT NULL default 'off'", 'modify' => "enum('on','off')"),
|
'webadmin' => array('create' => "enum('on','off') NOT NULL default 'off'", 'modify' => "enum('on','off')"),
|
||||||
'_pcport' => array('create' => "enum('on','off') NOT NULL default 'on'", 'modify' => "enum('on','off')"),
|
'pcport' => array('create' => "enum('on','off') NOT NULL default 'on'", 'modify' => "enum('on','off')"),
|
||||||
'_spantopcport' => array('create' => "enum('on','off') NOT NULL default 'on'", 'modify' => "enum('on','off')"),
|
'spantopcport' => array('create' => "enum('on','off') NOT NULL default 'on'", 'modify' => "enum('on','off')"),
|
||||||
'_voicevlanaccess' => array('create' => "enum('on','off') NOT NULL default 'off'", 'modify' => "enum('on','off')"),
|
'voicevlanaccess' => array('create' => "enum('on','off') NOT NULL default 'off'", 'modify' => "enum('on','off')"),
|
||||||
'_enablecdpswport' => array('create' => "enum('on','off') NOT NULL default 'off'", 'modify' => "enum('on','off')"),
|
'enablecdpswport' => array('create' => "enum('on','off') NOT NULL default 'off'", 'modify' => "enum('on','off')"),
|
||||||
'_enablecdppcport' => array('create' => "enum('on','off') NOT NULL default 'off'", 'modify' => "enum('on','off')"),
|
'enablecdppcport' => array('create' => "enum('on','off') NOT NULL default 'off'", 'modify' => "enum('on','off')"),
|
||||||
'_enablelldpswport' => array('create' => "enum('on','off') NOT NULL default 'off'", 'modify' => "enum('on','off')"),
|
'enablelldpswport' => array('create' => "enum('on','off') NOT NULL default 'off'", 'modify' => "enum('on','off')"),
|
||||||
'_enablelldppcport' => array('create' => "enum('on','off') NOT NULL default 'off'", 'modify' => "enum('on','off')"),
|
'enablelldppcport' => array('create' => "enum('on','off') NOT NULL default 'off'", 'modify' => "enum('on','off')"),
|
||||||
'_firstdigittimeout' => array('create' => "VARCHAR(20) NULL default null", 'modify' => "VARCHAR(20)"),
|
'firstdigittimeout' => array('create' => "VARCHAR(20) NULL default null", 'modify' => "VARCHAR(20)"),
|
||||||
'_digittimeout' => array('create' => "VARCHAR(20) NULL default null", 'modify' => "VARCHAR(20)"),
|
'digittimeout' => array('create' => "VARCHAR(20) NULL default null", 'modify' => "VARCHAR(20)"),
|
||||||
'_cfwdnoanswer_timeout' => array('create' => "VARCHAR(20) NULL default null", 'modify' => "VARCHAR(20)"),
|
'cfwdnoanswer_timeout' => array('create' => "VARCHAR(20) NULL default null", 'modify' => "VARCHAR(20)"),
|
||||||
'_autoanswer_ring_time' => array('create' => "VARCHAR(20) NULL default null", 'modify' => "VARCHAR(20)"),
|
'autoanswer_ring_time' => array('create' => "VARCHAR(20) NULL default null", 'modify' => "VARCHAR(20)"),
|
||||||
'_autoanswer_tone' => array('create' => "VARCHAR(20) NULL default null", 'modify' => "VARCHAR(20)"),
|
'autoanswer_tone' => array('create' => "VARCHAR(20) NULL default null", 'modify' => "VARCHAR(20)"),
|
||||||
'_remotehangup_tone' => array('create' => "VARCHAR(20) NULL default null", 'modify' => "VARCHAR(20)"),
|
'remotehangup_tone' => array('create' => "VARCHAR(20) NULL default null", 'modify' => "VARCHAR(20)"),
|
||||||
'_transfer_tone' => array('create' => "VARCHAR(20) NULL default null", 'modify' => "VARCHAR(20)"),
|
'transfer_tone' => array('create' => "VARCHAR(20) NULL default null", 'modify' => "VARCHAR(20)"),
|
||||||
'_callwaiting_tone' => array('create' => "VARCHAR(20) NULL default null", 'modify' => "VARCHAR(20)"),
|
'callwaiting_tone' => array('create' => "VARCHAR(20) NULL default null", 'modify' => "VARCHAR(20)"),
|
||||||
'_callanswerorder' => array('create' => "enum('oldestfirst','latestfirst') NOT NULL default 'latestfirst'",
|
'callanswerorder' => array('create' => "enum('oldestfirst','latestfirst') NOT NULL default 'latestfirst'",
|
||||||
'modify' => "enum('oldestfirst','latestfirst')"),
|
'modify' => "enum('oldestfirst','latestfirst')"),
|
||||||
'_sccp_tos' => array('create' => "VARCHAR(11) NOT NULL default '0x68'", 'modify' => "VARCHAR(11)"),
|
'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_sshPassword' => array('create' => "VARCHAR(25) NOT NULL default 'cisco'"),
|
||||||
'_dev_sshUserId' => array('create' => "VARCHAR(25) NOT NULL default 'cisco'"),
|
'dev_sshUserId' => array('create' => "VARCHAR(25) NOT NULL default 'cisco'"),
|
||||||
'_phonepersonalization' => array('create' => "VARCHAR(25) NOT NULL default '0'", 'modify' => "VARCHAR(25)"),
|
'phonepersonalization' => array('create' => "VARCHAR(25) NOT NULL default '0'", 'modify' => "VARCHAR(25)"),
|
||||||
|
'loginname' => array('create' => 'VARCHAR(20) NULL DEFAULT NULL'),
|
||||||
|
'profileid' => array('create' => "INT(11) NOT NULL DEFAULT '0'"),
|
||||||
|
'dialrules' => array('create' => "VARCHAR(255) NULL DEFAULT NULL"),
|
||||||
|
'description' => array('create' => "VARCHAR(45) NULL DEFAULT NULL"),
|
||||||
'_hwlang' => array ('drop' => 'yes'),
|
'_hwlang' => array ('drop' => 'yes'),
|
||||||
'_devlang' => array('create' => "VARCHAR(25) NULL default NULL", 'modify' => "VARCHAR(25)"),
|
'devlang' => array('create' => "VARCHAR(25) NULL default NULL", 'modify' => "VARCHAR(25)"),
|
||||||
'_netlang' => array('create' => "VARCHAR(25) NULL default NULL", 'modify' => "VARCHAR(25)")
|
'netlang' => array('create' => "VARCHAR(25) NULL default NULL", 'modify' => "VARCHAR(25)"),
|
||||||
|
'_devlang' => array('rename' => "devlang"),
|
||||||
|
'_netlang' => array('rename' => "netlang"),
|
||||||
|
'_logserver' => array('rename' => 'logserver'),
|
||||||
|
'_daysdisplaynotactive' => array('rename' => 'daysdisplaynotactive'),
|
||||||
|
'_displayontime' => array('rename' => 'displayontime'),
|
||||||
|
'_displayonduration' => array('rename' => 'displayonduration'),
|
||||||
|
'_displayidletimeout' => array('rename' => 'displayidletimeout'),
|
||||||
|
'_settingsaccess' => array('rename' => 'settingsaccess'),
|
||||||
|
'_videocapability' => array('rename' => 'videocapability'),
|
||||||
|
'_webaccess' => array('rename' => 'webaccess'),
|
||||||
|
'_webadmin' => array('rename' => 'webadmin'),
|
||||||
|
'_pcport' => array('rename' => 'pcport'),
|
||||||
|
'_spantopcport' => array('rename' => 'spantopcport'),
|
||||||
|
'_voicevlanaccess' => array('rename' => 'voicevlanaccess'),
|
||||||
|
'_enablecdpswport' => array('rename' => 'enablecdpswport'),
|
||||||
|
'_enablecdppcport' => array('rename' => 'enablecdppcport'),
|
||||||
|
'_enablelldpswport' => array('rename' => 'enablelldpswport'),
|
||||||
|
'_enablelldppcport' => array('rename' => 'enablelldppcport'),
|
||||||
|
'_firstdigittimeout' => array('rename' => 'firstdigittimeout'),
|
||||||
|
'_digittimeout' => array('rename' => 'digittimeout'),
|
||||||
|
'_cfwdnoanswer_timeout' => array('rename' => 'cfwdnoanswer_timeout'),
|
||||||
|
'_autoanswer_ring_time' => array('rename' => 'autoanswer_ring_time'),
|
||||||
|
'_autoanswer_tone' => array('rename' => 'autoanswer_tone'),
|
||||||
|
'_remotehangup_tone' => array('rename' => 'remotehangup_tone'),
|
||||||
|
'_transfer_tone' => array('rename' => 'transfer_tone'),
|
||||||
|
'_callwaiting_tone' => array('rename' => 'callwaiting_tone'),
|
||||||
|
'_callanswerorder' => array('rename' => 'callanswerorder'),
|
||||||
|
'_sccp_tos' => array('rename' => 'sccp_tos'),
|
||||||
|
'_sccp_cos' => array('rename' => 'sccp_cos'),
|
||||||
|
'_dev_sshPassword' => array('rename' => 'dev_sshPassword'),
|
||||||
|
'_dev_sshUserId' => array('rename' => 'dev_sshUserId'),
|
||||||
|
'_phonepersonalization' => array('rename' => '_phonepersonalization'),
|
||||||
|
'_loginname' => array('rename' => 'loginname'),
|
||||||
|
'_profileid' => array('rename' => 'profileid'),
|
||||||
|
'_dialrules' => array('rename' => 'dialrules'),
|
||||||
|
'_description' => array('rename' => 'description')
|
||||||
),
|
),
|
||||||
'sccpline' => array (
|
'sccpline' => array (
|
||||||
'_regcontext' => array('create' => "VARCHAR(20) NULL default 'sccpregistration'", 'modify' => "VARCHAR(20)"),
|
'regcontext' => array('create' => "VARCHAR(20) NULL default 'sccpregistration'", 'modify' => "VARCHAR(20)"),
|
||||||
'_transfer_on_hangup' => array('create' => "enum('on','off') NOT NULL default 'off'", 'modify' => "enum('on','off')"),
|
'transfer_on_hangup' => array('create' => "enum('on','off') NOT NULL default 'off'", 'modify' => "enum('on','off')"),
|
||||||
'_autoselectline_enabled' => array('create' => "enum('on','off') NOT NULL default 'off'", 'modify' => "enum('on','off')"),
|
'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')"),
|
'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')"),
|
'backgroundImageAccess' => 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')")
|
'callLogBlfEnabled' => array('create' => "enum('3','2') NOT NULL default '2'", 'modify' => "enum('3','2')"),
|
||||||
|
'_regcontext' => array('rename' => 'regcontext'),
|
||||||
|
'_transfer_on_hangup' => array('rename' => 'transfer_on_hangup'),
|
||||||
|
'_autoselectline_enabled' => array('rename' => 'autoselectline_enabled'),
|
||||||
|
'_autocall_select' => array('rename' => 'autocall_select'),
|
||||||
|
'_backgroundImageAccess' => array('rename' => 'backgroundImageAccess'),
|
||||||
|
'_callLogBlfEnabled' => array('rename' => 'callLogBlfEnabled')
|
||||||
),
|
),
|
||||||
'sccpsettings' => array (
|
'sccpsettings' => array (
|
||||||
'systemdefault' => array('create' => "VARCHAR(255) NULL default ''")
|
'systemdefault' => array('create' => "VARCHAR(255) NULL default ''")
|
||||||
|
@ -338,111 +383,121 @@ function InstallDB_updateSchema($db_config)
|
||||||
}
|
}
|
||||||
$count_modify = 0;
|
$count_modify = 0;
|
||||||
outn("<li>" . _("Modify Database schema") . "</li>");
|
outn("<li>" . _("Modify Database schema") . "</li>");
|
||||||
foreach ($db_config as $tabl_name => &$tab_modif) {
|
foreach ($db_config as $tabl_name => $tab_modif) {
|
||||||
// 0 - name 1-type 4- default
|
|
||||||
$sql = "DESCRIBE {$tabl_name};";
|
|
||||||
$stmt = $db->prepare("DESCRIBE {$tabl_name}");
|
|
||||||
$stmt->execute();
|
|
||||||
$db_result = $stmt->fetchAll();
|
|
||||||
if (DB::IsError($db_result)) {
|
|
||||||
die_freepbx("Can not get information from " . $tabl_name . " table\n");
|
|
||||||
}
|
|
||||||
foreach ($db_result as $tabl_data) {
|
|
||||||
$fld_id = $tabl_data[0];
|
|
||||||
$db_config[$tabl_name][$fld_id]['fieldExists'] = FALSE;
|
|
||||||
// Filter commands to avoid applying unnecessary
|
|
||||||
if (!empty($tab_modif[$fld_id])) {
|
|
||||||
// Potentially have something to modify in schema
|
|
||||||
$db_config[$tabl_name][$fld_id]['fieldExists'] = TRUE;
|
|
||||||
if (!empty($tab_modif[$fld_id]['modify'])) {
|
|
||||||
if (strtoupper($tab_modif[$fld_id]['modify']) == strtoupper($tabl_data[1])) {
|
|
||||||
unset($db_config[$tabl_name][$fld_id]['modify']);
|
|
||||||
}
|
|
||||||
// Modifying field so do not then need to modify defaults as this should do that
|
|
||||||
if (!empty($tab_modif[$fld_id]['def_modify'])) {
|
|
||||||
unset($db_config[$tabl_name][$fld_id]['def_modify']);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!empty($tab_modif[$fld_id]['def_modify'])) {
|
|
||||||
if (strtoupper($tab_modif[$fld_id]['def_modify']) == strtoupper($tabl_data[4])) {
|
|
||||||
unset($db_config[$tabl_name][$fld_id]['def_modify']);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!empty($tab_modif[$fld_id]['rename'])) {
|
|
||||||
$fld_id_source = $tab_modif[$fld_id]['rename'];
|
|
||||||
$db_config[$tabl_name][$fld_id_source]['fieldExists'] = TRUE;
|
|
||||||
if (!empty($db_config[$tabl_name][$fld_id_source]['create'])) {
|
|
||||||
$db_config[$tabl_name][$fld_id]['create'] = $db_config[$tabl_name][$fld_id_source]['create'];
|
|
||||||
} else {
|
|
||||||
$db_config[$tabl_name][$fld_id]['create'] = strtoupper($tabl_data[1]).(($tabl_data[2] == 'NO') ?' NOT NULL': ' NULL');
|
|
||||||
$db_config[$tabl_name][$fld_id]['create'] .= ' DEFAULT '. ((empty($tabl_data[4]))?'NULL': "'". $tabl_data[4]."'" );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$sql_create = '';
|
$sql_create = '';
|
||||||
$sql_modify = '';
|
$sql_modify = '';
|
||||||
$sql_update = '';
|
$sql_rename = '';
|
||||||
|
|
||||||
foreach ($tab_modif as $row_fld => $row_data) {
|
$stmt = $db->prepare("DESCRIBE {$tabl_name}");
|
||||||
if (!$row_data['fieldExists']) {
|
$stmt->execute();
|
||||||
if (!empty($row_data['create'])) {
|
$db_result = $stmt->fetchAll(\PDO::FETCH_ASSOC|\PDO::FETCH_UNIQUE);
|
||||||
$sql_create .= "ADD COLUMN {$row_fld} {$row_data['create']}, ";
|
if (DB::IsError($db_result)) {
|
||||||
$count_modify ++;
|
die_freepbx("Can not get information for " . $tabl_name . " table\n");
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
if (!empty($row_data['rename'])) {
|
// filter modifications based on field existance and prepare sql
|
||||||
$sql_modify .= "RENAME COLUMN {$row_fld} TO {$row_data['rename']}, ";
|
foreach ($db_result as $fld_id => $tabl_data) {
|
||||||
$count_modify ++;
|
if (!empty($tab_modif[$fld_id])) {
|
||||||
}
|
// have column in table so potentially something to update
|
||||||
$row_data['fieldModified'] = FALSE;
|
// if dropping column, prepare sql and continue
|
||||||
if (!empty($row_data['modify'])) {
|
if (!empty($tab_modif[$fld_id]['drop'])) {
|
||||||
if (!empty($row_data['create'])) {
|
|
||||||
// Use values in create to set defaults
|
|
||||||
$sql_modify .= "MODIFY COLUMN {$row_fld} {$row_data['create']}, ";
|
|
||||||
} else {
|
|
||||||
$sql_modify .= "MODIFY COLUMN {$row_fld} {$row_data['modify']} DEFAULT {$row_data['def_modify']}, ";
|
|
||||||
}
|
|
||||||
if (strpos($row_data['modify'], 'enum') !== false) {
|
|
||||||
$sql_update .= "UPDATE " . $tabl_name . " set `" . $row_fld . "`=case when lower(`" . $row_fld . "`) in ('yes','true','1') then 'on' when lower(`" . $row_fld . "`) in ('no', 'false', '0') then 'off' else `" . $row_fld . "` end; ";
|
|
||||||
}
|
|
||||||
$count_modify ++;
|
|
||||||
}
|
|
||||||
if (!empty($row_data['def_modify'])) {
|
|
||||||
$sql_modify .= "ALTER COLUMN {$row_fld} SET DEFAULT '{$row_data['def_modify']}', ";
|
|
||||||
$count_modify ++;
|
|
||||||
}
|
|
||||||
if (!empty($row_data['drop'])) {
|
|
||||||
$sql_create .= "DROP COLUMN {$row_fld}, ";
|
$sql_create .= "DROP COLUMN {$row_fld}, ";
|
||||||
|
unset($tab_modif[$fld_id]['drop']);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($tab_modif[$fld_id]['modify'])) {
|
||||||
|
// Check if modify type is same as current type
|
||||||
|
if (strtoupper($tab_modif[$fld_id]['modify']) == strtoupper($tabl_data['Type'])) {
|
||||||
|
// Type has not changed so unset
|
||||||
|
unset($tab_modif[$fld_id]['modify']);
|
||||||
|
} else {
|
||||||
|
if (!empty($tab_modif[$fld_id]['def_modify'])) {
|
||||||
|
// if a default has been modified, use it here and unset
|
||||||
|
$sql_modify .= "MODIFY COLUMN {$fld_id} {$tab_modif[$fld_id]['modify']} DEFAULT {$tab_modif[$fld_id]['def_modify']}, ";
|
||||||
|
// def_modify has been used so unset
|
||||||
|
unset($tab_modif[$fld_id]['def_modify']);
|
||||||
|
} else if (!empty($tab_modif[$fld_id]['create'])) {
|
||||||
|
// use create attributes
|
||||||
|
$sql_modify .= "MODIFY COLUMN {$fld_id} {$tab_modif[$fld_id]['create']}, ";
|
||||||
|
} else {
|
||||||
|
// No default to modify so leave unchanged
|
||||||
|
$sql_modify .= "MODIFY COLUMN {$fld_id} {$tab_modif[$fld_id]['modify']}, ";
|
||||||
|
}
|
||||||
|
$count_modify ++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($tab_modif[$fld_id]['def_modify'])) {
|
||||||
|
// Check if def_modify value is same as current value
|
||||||
|
if (strtoupper($tab_modif[$fld_id]['def_modify']) == strtoupper($tabl_data['Default'])) {
|
||||||
|
// Defaults have not changed so unset
|
||||||
|
unset($tab_modif[$fld_id]['def_modify']);
|
||||||
|
} else {
|
||||||
|
$sql_modify .= "ALTER COLUMN {$row_fld} SET DEFAULT '{$tab_modif[$fld_id]['def_modify']}', ";
|
||||||
|
$count_modify ++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($tab_modif[$fld_id]['rename'])) {
|
||||||
|
// Field currently exists so need to rename (and keep data)
|
||||||
|
// for backward compatibility use CHANGE - REPLACE is only available in MariaDb > 10.5.
|
||||||
|
$fld_id_newName = $tab_modif[$fld_id]['rename'];
|
||||||
|
// Does a create exist for newName
|
||||||
|
if (!empty($tab_modif[$fld_id_newName]['create'])) {
|
||||||
|
//carry the attributes from the new create to the rename
|
||||||
|
$sql_rename .= "CHANGE COLUMN IF EXISTS {$fld_id} {$fld_id_newName} {$tab_modif[$fld_id_newName]['create']}, ";
|
||||||
|
// do not create newName as modifying existing
|
||||||
|
unset($tab_modif[$fld_id_newName]['create']);
|
||||||
|
} else {
|
||||||
|
// add current attributes to the new name.
|
||||||
|
$existingAttrs = strtoupper($tabl_data['Type']).(($tabl_data['Null'] == 'NO') ?' NOT NULL': ' NULL') .
|
||||||
|
((empty($tabl_data['Default']))?'': ' DEFAULT ' . "'" . $tabl_data['Default']."'");
|
||||||
|
$sql_rename .= "CHANGE COLUMN IF EXISTS {$fld_id} {$fld_id_newName} {$existingAttrs}, ";
|
||||||
|
}
|
||||||
|
unset($tab_modif[$fld_id]['rename']);
|
||||||
$count_modify ++;
|
$count_modify ++;
|
||||||
}
|
}
|
||||||
|
// is there a create for this field
|
||||||
|
if (!empty($tab_modif[$fld_id]['create'])) {
|
||||||
|
// unset as cannot create existing field
|
||||||
|
unset($tab_modif[$fld_id]['create']);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!empty($sql_update)) {
|
// only case left to handle is create as all others handled above
|
||||||
outn("<li>" . _("Updating table rows :") . $affected_rows . "</li>");
|
foreach ($tab_modif as $row_fld => $row_data) {
|
||||||
$sql_update = 'BEGIN; ' . $sql_update . ' COMMIT;';
|
if (!empty($row_data['create'])) {
|
||||||
sql($sql_update);
|
$sql_create .= "ADD COLUMN {$row_fld} {$row_data['create']}, ";
|
||||||
$affected_rows = $db->affectedRows();
|
$count_modify ++;
|
||||||
outn("<li>" . _("Updated table rows :") . $affected_rows . "</li>");
|
}
|
||||||
}
|
}
|
||||||
|
//Now execute sql statements
|
||||||
if (!empty($sql_create)) {
|
if (!empty($sql_create)) {
|
||||||
outn("<li>" . _("Adding new columns ...") . "</li>");
|
outn("<li>" . _("Adding/dropping columns ...") . "</li>");
|
||||||
$sql_create = "ALTER TABLE {$tabl_name} " .substr($sql_create, 0, -2);
|
$sql_create = "ALTER TABLE {$tabl_name} " .substr($sql_create, 0, -2);
|
||||||
try {
|
try {
|
||||||
$check = $db->query($sql_create);
|
$check = $db->query($sql_create);
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
die_freepbx("Can't add column to {$tabl_name}. SQL: {$sql_create} \n");
|
die_freepbx("Can't add/drop column in {$tabl_name}. SQL: {$sql_create} \n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!empty($sql_modify)) {
|
if (!empty($sql_modify)) {
|
||||||
outn("<li>" . _("Modifying table columns ") . $tabl_name ."</li>");
|
outn("<li>" . _("Modifying table columns ") . $tabl_name ."</li>");
|
||||||
|
|
||||||
$sql_modify = "ALTER TABLE {$tabl_name} " . substr($sql_modify, 0, -2);
|
$sql_modify = "ALTER TABLE {$tabl_name} " . substr($sql_modify, 0, -2);
|
||||||
try {
|
try {
|
||||||
$check = $db->query($sql_modify);
|
$check = $db->query($sql_modify);
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
die_freepbx("Can not modify {$tabl_name}. SQL: {$sql_create} \n");
|
die_freepbx("Can not modify {$tabl_name}. SQL: {$sql_modify} \n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!empty($sql_rename)) {
|
||||||
|
outn("<li>" . _("Renaming table columns ") . $tabl_name ."</li>");
|
||||||
|
$sql_rename = "ALTER TABLE {$tabl_name} " . substr($sql_rename, 0, -2);
|
||||||
|
try {
|
||||||
|
$check = $db->query($sql_rename);
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
die_freepbx("Can not modify {$tabl_name}. SQL: {$sql_rename} \n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -642,9 +697,9 @@ function InstallDB_CreateSccpDeviceConfigView($sccp_compatible)
|
||||||
{
|
{
|
||||||
global $db;
|
global $db;
|
||||||
outn("<li>" . _("(Re)Create sccpdeviceconfig view") . "</li>");
|
outn("<li>" . _("(Re)Create sccpdeviceconfig view") . "</li>");
|
||||||
$sql = "";
|
|
||||||
$sql = "DROP VIEW IF EXISTS sccpdeviceconfig;
|
$sql = "DROP VIEW IF EXISTS sccpdeviceconfig;
|
||||||
DROP VIEW IF EXISTS sccpuserconfig;";
|
DROP VIEW IF EXISTS sccpuserconfig;
|
||||||
|
";
|
||||||
/// global $hw_mobil;
|
/// global $hw_mobil;
|
||||||
// From logserver to end only applies to db ver > 433
|
// From logserver to end only applies to db ver > 433
|
||||||
|
|
||||||
|
@ -668,16 +723,23 @@ function InstallDB_CreateSccpDeviceConfigView($sccp_compatible)
|
||||||
$sql .= "CREATE OR REPLACE
|
$sql .= "CREATE OR REPLACE
|
||||||
ALGORITHM = MERGE
|
ALGORITHM = MERGE
|
||||||
VIEW sccpdeviceconfig AS
|
VIEW sccpdeviceconfig AS
|
||||||
SELECT case sccpdevice._profileid
|
SELECT CASE sccpdevice.profileid
|
||||||
when 0 then
|
WHEN 0 THEN
|
||||||
(select GROUP_CONCAT(CONCAT_WS( ',', defbutton.buttontype, defbutton.name, defbutton.options ) SEPARATOR ';') from sccpbuttonconfig as defbutton where defbutton.ref = sccpdevice.name ORDER BY defbutton.instance )
|
(SELECT GROUP_CONCAT(CONCAT_WS(',', defbutton.buttontype, defbutton.name, defbutton.options ) SEPARATOR ';') FROM sccpbuttonconfig AS defbutton WHERE defbutton.ref = sccpdevice.name ORDER BY defbutton.instance )
|
||||||
when 1 then
|
WHEN 1 THEN
|
||||||
(select GROUP_CONCAT(CONCAT_WS( ',', userbutton.buttontype, userbutton.name, userbutton.options ) SEPARATOR ';') from sccpbuttonconfig as userbutton where userbutton.ref = sccpdevice._loginname ORDER BY userbutton.instance )
|
(SELECT GROUP_CONCAT(CONCAT_WS(',', userbutton.buttontype, userbutton.name, userbutton.options ) SEPARATOR ';') FROM sccpbuttonconfig AS userbutton WHERE userbutton.ref = sccpdevice.loginname ORDER BY userbutton.instance )
|
||||||
when 2 then
|
WHEN 2 THEN
|
||||||
(select GROUP_CONCAT(CONCAT_WS( ',', homebutton.buttontype, homebutton.name, homebutton.options ) SEPARATOR ';') from sccpbuttonconfig as homebutton where homebutton.ref = sccpuser.homedevice ORDER BY homebutton.instance )
|
(SELECT GROUP_CONCAT(CONCAT_WS(',', homebutton.buttontype, homebutton.name, homebutton.options ) SEPARATOR ';') FROM sccpbuttonconfig AS homebutton WHERE homebutton.ref = sccpuser.homedevice ORDER BY homebutton.instance )
|
||||||
end as button, if(sccpdevice._profileid = 0, sccpdevice._description, sccpuser.description) as description, sccpdevice.*
|
END
|
||||||
|
AS button, if(sccpdevice.profileid = 0, sccpdevice.description, sccpuser.description) AS description, sccpdevice.name, sccpdevice.type,
|
||||||
|
sccpdevice.addon, sccpdevice.tzoffset, sccpdevice.imageversion, sccpdevice.deny, sccpdevice.permit, sccpdevice.earlyrtp, sccpdevice.mwilamp, sccpdevice.mwioncall,
|
||||||
|
sccpdevice.dndFeature, sccpdevice.transfer, sccpdevice.cfwdall, sccpdevice.cfwdbusy, sccpdevice.private, sccpdevice.privacy, sccpdevice.nat, sccpdevice.directrtp,
|
||||||
|
sccpdevice.softkeyset, sccpdevice.audio_tos, sccpdevice.audio_cos, sccpdevice.video_tos, sccpdevice.video_cos, sccpdevice.conf_allow,
|
||||||
|
sccpdevice.conf_play_general_announce, sccpdevice.conf_play_part_announce, sccpdevice.conf_mute_on_entry, sccpdevice.conf_music_on_hold_class,
|
||||||
|
sccpdevice.conf_show_conflist, sccpdevice.force_dtmfmode, sccpdevice.setvar, sccpdevice.backgroundImage, sccpdevice.backgroundThumbnail,
|
||||||
|
sccpdevice.ringtone, sccpdevice.callhistory_answered_elsewhere, sccpdevice.useRedialMenu, sccpdevice.cfwdnoanswer, sccpdevice.park, sccpdevice.monitor
|
||||||
FROM sccpdevice
|
FROM sccpdevice
|
||||||
LEFT JOIN sccpuser sccpuser ON ( sccpuser.name = sccpdevice._loginname )
|
LEFT JOIN sccpuser sccpuser ON ( sccpuser.name = sccpdevice.loginname )
|
||||||
GROUP BY sccpdevice.name;";
|
GROUP BY sccpdevice.name;";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -687,6 +749,29 @@ function InstallDB_CreateSccpDeviceConfigView($sccp_compatible)
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function createViewSccplineconfig() {
|
||||||
|
global $db;
|
||||||
|
outn("<li>" . _("(Re)Create sccplineconfig view") . "</li>");
|
||||||
|
|
||||||
|
$sql = "DROP VIEW IF EXISTS sccplineconfig;
|
||||||
|
";
|
||||||
|
$sql .= "CREATE OR REPLACE
|
||||||
|
VIEW sccplineconfig AS
|
||||||
|
SELECT sccpline.id, sccpline.pin ,sccpline.label, sccpline.description, sccpline.context, sccpline.incominglimit, sccpline.transfer, sccpline.mailbox,
|
||||||
|
sccpline.vmnum, sccpline.cid_name, sccpline.cid_num, sccpline.disallow, sccpline.allow, sccpline.trnsfvm, sccpline.secondary_dialtone_digits,
|
||||||
|
sccpline.secondary_dialtone_tone, sccpline.musicclass, sccpline.language, sccpline.accountcode, sccpline.echocancel, sccpline.silencesuppression,
|
||||||
|
sccpline.callgroup, sccpline.pickupgroup, sccpline.adhocNumber, sccpline.meetme, sccpline.meetmenum, sccpline.meetmeopts, sccpline.regexten,
|
||||||
|
sccpline.directed_pickup, sccpline.directed_pickup_context, sccpline.pickup_modeanswer, sccpline.amaflags, sccpline.dnd, sccpline.videomode,
|
||||||
|
sccpline.setvar, sccpline.namedcallgroup, sccpline.namedpickupgroup, sccpline.phonecodepage
|
||||||
|
FROM sccpline";
|
||||||
|
$results = $db->query($sql);
|
||||||
|
if (DB::IsError($results)) {
|
||||||
|
die_freepbx(sprintf(_("Error updating sccplineconfig view. Command was: %s; error was: %s "), $sql, $results->getMessage()));
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
function createBackUpConfig()
|
function createBackUpConfig()
|
||||||
{
|
{
|
||||||
global $amp_conf;
|
global $amp_conf;
|
||||||
|
@ -767,7 +852,7 @@ function Setup_RealTime()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$def_bd_section = $amp_conf['AMPDBNAME'];
|
$def_bd_section = $amp_conf['AMPDBNAME'];
|
||||||
$def_ext_config = array('sccpdevice' => "mysql,{$def_bd_section},sccpdeviceconfig",'sccpline' => "mysql,{$def_bd_section},sccpline");
|
$def_ext_config = array('sccpdevice' => "mysql,{$def_bd_section},sccpdeviceconfig",'sccpline' => "mysql,{$def_bd_section},sccplineconfig");
|
||||||
|
|
||||||
// Check extconfig file for correct connector values
|
// Check extconfig file for correct connector values
|
||||||
$ext_conf = '';
|
$ext_conf = '';
|
||||||
|
@ -970,7 +1055,7 @@ function cleanUpSccpSettings() {
|
||||||
}
|
}
|
||||||
$settingsFromDb = array_merge($settingsFromDb, array_diff_key($thisInstaller->sccpvalues, $settingsFromDb));
|
$settingsFromDb = array_merge($settingsFromDb, array_diff_key($thisInstaller->sccpvalues, $settingsFromDb));
|
||||||
unset($thisInstaller->sccpvalues);
|
unset($thisInstaller->sccpvalues);
|
||||||
|
|
||||||
// get chan-sccp defaults
|
// get chan-sccp defaults
|
||||||
|
|
||||||
$sysConfiguration = $aminterface->getSCCPConfigMetaData('general');
|
$sysConfiguration = $aminterface->getSCCPConfigMetaData('general');
|
||||||
|
|
|
@ -68,7 +68,7 @@ class dbinterface
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'phoneGrid':
|
case 'phoneGrid':
|
||||||
$fld = 'name, name as mac, type, button, addon, _description as description';
|
$fld = 'name, name as mac, type, button, addon, description';
|
||||||
switch ($data['type']) {
|
switch ($data['type']) {
|
||||||
case "cisco-sip":
|
case "cisco-sip":
|
||||||
$stmts = $this->db->prepare("SELECT {$fld} FROM sccpdeviceconfig WHERE type LIKE '%-sip' ORDER BY name");
|
$stmts = $this->db->prepare("SELECT {$fld} FROM sccpdeviceconfig WHERE type LIKE '%-sip' ORDER BY name");
|
||||||
|
@ -81,7 +81,7 @@ class dbinterface
|
||||||
break;
|
break;
|
||||||
case 'SccpDevice':
|
case 'SccpDevice':
|
||||||
if (empty($data['fields'])) {
|
if (empty($data['fields'])) {
|
||||||
$fld = 'name, name as mac, type, button, addon, _description as description';
|
$fld = 'name, name as mac, type, button, addon, description';
|
||||||
} else {
|
} else {
|
||||||
switch ($data['fields']) {
|
switch ($data['fields']) {
|
||||||
case "all":
|
case "all":
|
||||||
|
|
|
@ -170,8 +170,8 @@ class xmlinterface
|
||||||
'secureinformationurl' => 'dev_secureinformationURL', 'securemessagesurl'=>'dev_securemessagesURL',
|
'secureinformationurl' => 'dev_secureinformationURL', 'securemessagesurl'=>'dev_securemessagesURL',
|
||||||
'secureservicesurl'=>'dev_secureservicesURL', 'securedirectoryurl'=>'dev_securedirectoryURL', 'secureidleurl' => 'dev_secureidleURL',
|
'secureservicesurl'=>'dev_secureservicesURL', 'securedirectoryurl'=>'dev_securedirectoryURL', 'secureidleurl' => 'dev_secureidleURL',
|
||||||
'proxyserverurl' => 'dev_proxyServerURL', 'idletimeout' => 'dev_idleTimeout',
|
'proxyserverurl' => 'dev_proxyServerURL', 'idletimeout' => 'dev_idleTimeout',
|
||||||
'sshuserid' => '_dev_sshUserId', 'sshpassword' => '_dev_sshPassword', 'deviceprotocol' => 'dev_deviceProtocol',
|
'sshuserid' => 'dev_sshUserId', 'sshpassword' => 'dev_sshPassword', 'deviceprotocol' => 'dev_deviceProtocol',
|
||||||
'phonepersonalization' => '_phonepersonalization'
|
'phonepersonalization' => 'phonepersonalization'
|
||||||
);
|
);
|
||||||
$var_xml_general_vars = array('capfAuthMode' => 'null', 'capfList' => 'null', 'mobility' => 'null',
|
$var_xml_general_vars = array('capfAuthMode' => 'null', 'capfList' => 'null', 'mobility' => 'null',
|
||||||
'phoneServices' => 'null', 'certHash' => 'null',
|
'phoneServices' => 'null', 'certHash' => 'null',
|
||||||
|
@ -356,36 +356,36 @@ class xmlinterface
|
||||||
case 'userlocale':
|
case 'userlocale':
|
||||||
// Device language
|
// Device language
|
||||||
$lang = $data_values['devlang'];
|
$lang = $data_values['devlang'];
|
||||||
if (!empty($dev_config['_devlang'])) {
|
if (!empty($dev_config['devlang'])) {
|
||||||
$lang = $dev_config['_devlang'];
|
$lang = $dev_config['devlang'];
|
||||||
}
|
}
|
||||||
$xml_node->winCharSet = $dev_config['phonecodepage'];
|
$xml_node->winCharSet = $dev_config['phonecodepage'];
|
||||||
$xml_node->name = $dev_config['_devlang'];
|
$xml_node->name = $dev_config['devlang'];
|
||||||
$xml_node->langCode = 'en';
|
$xml_node->langCode = 'en';
|
||||||
if (isset($langCodeArray['_devlang'])) {
|
if (isset($langCodeArray['devlang'])) {
|
||||||
$xml_node->langCode = $langCodeArray['_devlang'];
|
$xml_node->langCode = $langCodeArray['devlang'];
|
||||||
}
|
}
|
||||||
$this->replaceSimpleXmlNode($xml_work->$key, $xml_node);
|
$this->replaceSimpleXmlNode($xml_work->$key, $xml_node);
|
||||||
break;
|
break;
|
||||||
case 'networklocale':
|
case 'networklocale':
|
||||||
$lang = $data_values['_netlang'];
|
$lang = $data_values['netlang'];
|
||||||
if (!empty($dev_config['_netlang'])) {
|
if (!empty($dev_config['netlang'])) {
|
||||||
$lang = $dev_config['_netlang'];
|
$lang = $dev_config['netlang'];
|
||||||
}
|
}
|
||||||
if (($lang != null) && (!empty($lang))) {
|
if (($lang != null) && (!empty($lang))) {
|
||||||
$xml_work->$key = $lang;
|
$xml_work->$key = $lang;
|
||||||
$this->replaceSimpleXmlNode($xml_work->$key, $xml_node);
|
$this->replaceSimpleXmlNode($xml_work->$key, $xml_node);
|
||||||
} else {
|
} else {
|
||||||
$xml_work->$key = '';
|
$xml_work->$key = '';
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'networklocaleinfo':
|
case 'networklocaleinfo':
|
||||||
$lang = $data_values['_netlang'];
|
$lang = $data_values['netlang'];
|
||||||
if (!empty($dev_config['_netlang'])) {
|
if (!empty($dev_config['netlang'])) {
|
||||||
$lang = $dev_config['_netlang'];
|
$lang = $dev_config['netlang'];
|
||||||
}
|
}
|
||||||
if (($lang != null) && (!empty($lang))) {
|
if (($lang != null) && (!empty($lang))) {
|
||||||
$xml_node->name = $dev_config['_netlang'];
|
$xml_node->name = $dev_config['netlang'];
|
||||||
$this->replaceSimpleXmlNode($xml_work->$key, $xml_node);
|
$this->replaceSimpleXmlNode($xml_work->$key, $xml_node);
|
||||||
} else {
|
} else {
|
||||||
$xml_work->$key = '';
|
$xml_work->$key = '';
|
||||||
|
|
|
@ -307,7 +307,6 @@ trait ajaxHelper {
|
||||||
break;
|
break;
|
||||||
case 'getPhoneGrid':
|
case 'getPhoneGrid':
|
||||||
$dbDevices = array();
|
$dbDevices = array();
|
||||||
|
|
||||||
// Find all devices defined in the database.
|
// Find all devices defined in the database.
|
||||||
$dbDevices = $this->dbinterface->getSccpDeviceTableData('phoneGrid', array('type' => $request['type']));
|
$dbDevices = $this->dbinterface->getSccpDeviceTableData('phoneGrid', array('type' => $request['type']));
|
||||||
// Return if only interested in SIP devices
|
// Return if only interested in SIP devices
|
||||||
|
|
Loading…
Reference in a new issue