+
@@ -214,7 +215,7 @@
// function DispayInputFormatter(value, row, index) {
// return (value == null) ? '' : '';
// }
-
+
function DispayActionsModelFormatter(value, row, index) {
var exp_model = '';
// exp_model += '';
@@ -236,12 +237,12 @@
return value;
}
-
+
function SetRowColor(row, index) {
var tclass = "active";
if (row['enabled'] === 1) {
tclass = (index % 2 === 0) ? "info" : "info";
- }
+ }
if ((row['validate'] === 'yes;yes') || (row['validate'] === 'yes;-')) {
// tclass = (row['enabled'] === '1') ? "danger" : "warning";
} else {
@@ -249,7 +250,7 @@
}
return {classes: tclass};
}
-
+
function load_model(elmnt,clr) {
// $("#edit_devmodel").text(clr);
var drow = $("#table-models").bootstrapTable('getRowByUniqueId',clr);
From 7d7b8cdd05da5dcc19597c848d842adb82db0a8e Mon Sep 17 00:00:00 2001
From: steve-lad <72376554+steve-lad@users.noreply.github.com>
Date: Mon, 8 Feb 2021 17:41:19 +0100
Subject: [PATCH 13/19] Update Transactions and fix errors
Reduce quoting level, and fix errors introduced by prior commits
---
Sccp_manager.class.php | 4 +-
Sccp_manager.inc/dbinterface.class.php | 63 ++++++++++++++------------
2 files changed, 36 insertions(+), 31 deletions(-)
diff --git a/Sccp_manager.class.php b/Sccp_manager.class.php
index 12254fb..6f63211 100644
--- a/Sccp_manager.class.php
+++ b/Sccp_manager.class.php
@@ -1165,7 +1165,7 @@ dbug('getting Phone Grid');
$save_settings = array();
$save_codec = array();
$name_dev = '';
- $db_field = $this->dbinterface->HWextension_db_SccpTableData("get_colums_sccpdevice");
+ $db_field = $this->dbinterface->HWextension_db_SccpTableData("get_columns_sccpdevice");
$hw_id = (empty($get_settings['sccp_deviceid'])) ? 'new' : $get_settings['sccp_deviceid'];
$hw_type = (empty($get_settings['sccp_device_typeid'])) ? 'sccpdevice' : $get_settings['sccp_device_typeid'];
$update_hw = ($hw_id == 'new') ? 'update' : 'clear';
@@ -1407,7 +1407,7 @@ dbug('getting Phone Grid');
);
*/
$name_dev = '';
- $db_field = $this->dbinterface->HWextension_db_SccpTableData("get_colums_sccpuser");
+ $db_field = $this->dbinterface->HWextension_db_SccpTableData("get_columns_sccpuser");
// $hw_id = (empty($get_settings['sccp_deviceid'])) ? 'new' : $get_settings['sccp_deviceid'];
// $update_hw = ($hw_id == 'new') ? 'update' : 'clear';
$hw_prefix = 'SEP';
diff --git a/Sccp_manager.inc/dbinterface.class.php b/Sccp_manager.inc/dbinterface.class.php
index a4bd67e..0d3ee83 100644
--- a/Sccp_manager.inc/dbinterface.class.php
+++ b/Sccp_manager.inc/dbinterface.class.php
@@ -113,19 +113,19 @@ class dbinterface
case 'HWextension':
$raw_settings = $this->getDb_model_info($get = "extension", $format_list = "model");
break;
- case 'get_colums_sccpdevice':
- $sql = "DESCRIBE sccpdevice";
+ case 'get_columns_sccpdevice':
+ $sql = 'DESCRIBE sccpdevice';
$stmt = $db->prepare($sql);
break;
- case 'get_colums_sccpuser':
- $sql = "DESCRIBE sccpuser";
+ case 'get_columns_sccpuser':
+ $sql = 'DESCRIBE sccpuser';
$stmts = $db->prepare($sql);
break;
case 'get_sccpdevice_byid':
- $sql = 'SELECT t1.*, types.dns, types.buttons, types.loadimage, types.nametemplate as nametemplate, '
- . 'addon.buttons as addon_buttons FROM sccpdevice AS t1 '
- . 'LEFT JOIN sccpdevmodel as types ON t1.type=types.model '
- . 'LEFT JOIN sccpdevmodel as addon ON t1.addon=addon.model WHERE name="' . $data['id'] . '';
+ $sql = 'SELECT t1.*, types.dns, types.buttons, types.loadimage, types.nametemplate as nametemplate,
+ addon.buttons as addon_buttons FROM sccpdevice AS t1
+ LEFT JOIN sccpdevmodel as types ON t1.type=types.model
+ LEFT JOIN sccpdevmodel as addon ON t1.addon=addon.model WHERE name =\'' . $data['id'] . '\'';
$stmt = $db->prepare($sql);
break;
case 'get_sccpuser':
@@ -246,6 +246,13 @@ class dbinterface
function write($table_name = "", $save_value = array(), $mode = 'update', $key_fld = "", $hwid = "")
{
+//dbug('entering write for table', $table_name);
+if ($table_name === 'sccpdevmodel'){
+dbug('entering write with save_value', $save_value);
+dbug('entering write with mode', $mode);
+dbug('entering write with key_fld', $key_fld);
+dbug('entering write with hwid', $hwid);
+}
// mode clear - Empty table before update
// mode update - update / replace record
global $db;
@@ -271,25 +278,22 @@ class dbinterface
if ($mode == 'clear') {
// $sql = 'truncate `sccpsettings`';
$db->prepare('TRUNCATE sccpsettings')->execute();
- $stmt = $db->prepare('INSERT INTO sccpsettings (`keyword`, `data`, `seq`, `type`) VALUES (?,?,?,?)');
+ $stmt = $db->prepare('INSERT INTO sccpsettings (keyword, data, seq, type) VALUES (?,?,?,?)');
$result = $db->executeMultiple($stmt, $save_value);
} else {
if (!empty($delete_value)) {
- $stmt = $db->prepare('DELETE FROM sccpsettings WHERE `keyword`=?');
+ $stmt = $db->prepare('DELETE FROM sccpsettings WHERE keyword = ?');
$result = $db->executeMultiple($stmt, $delete_value);
}
if (!empty($save_value)) {
- $stmt = $db->prepare('REPLACE INTO sccpsettings (`keyword`, `data`, `seq`, `type`) VALUES (?,?,?,?)');
+ $stmt = $db->prepare('REPLACE INTO sccpsettings (keyword, data, seq, type) VALUES (?,?,?,?)');
$result = $db->executeMultiple($stmt, $save_value);
}
}
break;
- case 'sccpdevmodel':
- break;
- case 'sccpdevice':
- break;
+ case 'sccpdevmodel': // Fall through to next intentionally
+ case 'sccpdevice': // Fall through to next intentionally
case 'sccpuser':
- $sql_db = $table_name;
$sql_key = "";
$sql_var = "";
foreach ($save_value as $key_v => $data) {
@@ -297,23 +301,24 @@ class dbinterface
$sql_var .= ', ';
}
if ($data === $this->val_null) {
- $sql_var .= '`' . $key_v . '`=NULL';
+ $sql_var .= $key_v . '= NULL';
} else {
- $sql_var .= '`' . $key_v . '`="' . $data . '"';
+ $sql_var .= $key_v . ' = \'' . $data . '\'';
}
if ($key_fld == $key_v) {
- $sql_key = '`' . $key_v . '`="' . $data . '"';
+ $sql_key = $key_v . ' = \'' . $data . '\'';
}
}
if (!empty($sql_var)) {
- if ($mode == 'delete') {
- $req = 'DELETE FROM sccpuser WHERE ' . $sql_key . '';
- } else {
- if ($mode == 'update') {
- $req = 'UPDATE sccpuser SET ' . $sql_var . 'WHERE ' . $sql_key . '';
- } else {
- $req = 'REPLACE INTO sccpuser SET ' . $sql_var . '';
- }
+ switch ($mode) {
+ case 'delete':
+ $req = 'DELETE FROM '. $table_name . ' WHERE ' . $sql_key;
+ break;
+ case 'update':
+ $req = 'UPDATE ' . $table_name . ' SET ' . $sql_var . ' WHERE ' . $sql_key;
+ break;
+ default:
+ $req = 'REPLACE INTO ' . $table_name . ' SET ' . $sql_var;
}
}
$result = $db->prepare($req)->execute();
@@ -327,14 +332,14 @@ class dbinterface
break;
case 'replace':
if (!empty($save_value)) {
- $sql = 'UPDATE sccpbuttonconfig SET `name`=? WHERE `ref`= ? AND `reftype`=? AND `instance`=? AND `buttontype`=?';
+ $sql = 'UPDATE sccpbuttonconfig SET name =? WHERE ref = ? AND reftype =? AND instance =? AND buttontype =?';
$stmt = $db->prepare($sql);
$result= $db->executeMultiple($stmt, $save_value);
}
break;
default:
if (!empty($save_value)) {
- $sql = 'INSERT INTO sccpbuttonconfig (`ref`, `reftype`,`instance`, `buttontype`, `name`, `options`) VALUES (?,?,?,?,?,?)';
+ $sql = 'INSERT INTO sccpbuttonconfig (ref, reftype, instance, buttontype, name, options) VALUES (?,?,?,?,?,?)';
$stmt = $db->prepare($sql);
$result = $db->executeMultiple($stmt, $save_value);
}
From 73ea3023eb1dea7b27f60418b9da18d9b08389d0 Mon Sep 17 00:00:00 2001
From: steve-lad <72376554+steve-lad@users.noreply.github.com>
Date: Tue, 9 Feb 2021 12:31:06 +0100
Subject: [PATCH 14/19] Use bindParam on db executes
Use bind param to have stricter typing
Fix bug in Sccp-Manager where key and keyword were not the same
---
Sccp_manager.class.php | 8 ++--
Sccp_manager.inc/dbinterface.class.php | 52 +++++++++++---------------
2 files changed, 25 insertions(+), 35 deletions(-)
diff --git a/Sccp_manager.class.php b/Sccp_manager.class.php
index 6f63211..9e170ed 100644
--- a/Sccp_manager.class.php
+++ b/Sccp_manager.class.php
@@ -869,7 +869,7 @@ class Sccp_manager extends \FreePBX_Helpers implements \BMO {
}
break;
case 'getDeviceModel':
-dbug('getting Device model');
+//dbug('getting Device model');
switch ($request['type']) {
case 'all':
case 'extension':
@@ -930,7 +930,7 @@ dbug('getting Device model');
return $result;
break;
case 'getExtensionGrid':
-dbug('getting Extension Grid');
+//dbug('getting Extension Grid');
$result = $this->dbinterface->HWextension_db_SccpTableData('SccpExtension');
if (empty($result)) {
return array();
@@ -954,7 +954,7 @@ dbug('getting Extension Grid');
return $result;
break;
case 'getPhoneGrid':
-dbug('getting Phone Grid');
+//dbug('getting Phone Grid');
$cmd_type = !empty($request['type']) ? $request['type'] : '';
$result = $this->dbinterface->HWextension_db_SccpTableData('SccpDevice', array('type' => $cmd_type));
@@ -2132,7 +2132,7 @@ dbug('getting Phone Grid');
$dir_list = $this->findAllFiles($dir, $file_ext, 'fileonly');
}
$raw_settings = $this->dbinterface->getDb_model_info($get, $format_list, $filter);
-dbug('reloading table');
+//dbug('reloading table');
if ($validate) {
for ($i = 0; $i < count($raw_settings); $i++) {
$raw_settings[$i]['validate'] = '-;-';
diff --git a/Sccp_manager.inc/dbinterface.class.php b/Sccp_manager.inc/dbinterface.class.php
index 0d3ee83..b57c116 100644
--- a/Sccp_manager.inc/dbinterface.class.php
+++ b/Sccp_manager.inc/dbinterface.class.php
@@ -246,48 +246,38 @@ class dbinterface
function write($table_name = "", $save_value = array(), $mode = 'update', $key_fld = "", $hwid = "")
{
-//dbug('entering write for table', $table_name);
-if ($table_name === 'sccpdevmodel'){
-dbug('entering write with save_value', $save_value);
-dbug('entering write with mode', $mode);
-dbug('entering write with key_fld', $key_fld);
-dbug('entering write with hwid', $hwid);
-}
// mode clear - Empty table before update
// mode update - update / replace record
global $db;
-// global $amp_conf;
$result = false;
$delete_value = array();
switch ($table_name) {
case 'sccpsettings':
- foreach ($save_value as $key_v => $data) {
- if (!empty($data) && isset($data['data'])) {
- if ($data['data'] == $this->val_null) {
- $delete_value[] = $save_value[$key_v]['keyword'];
- unset($save_value[$key_v]);
- }
-/* if (isset($data['data'])) {
- if ($data['data'] == $this->val_null) {
- $delete_value[] = $save_value[$key_v]['keyword'];
- unset($save_value[$key_v]);
- }
- }
-*/ }
- }
+ $time = -microtime(true);
if ($mode == 'clear') {
-// $sql = 'truncate `sccpsettings`';
$db->prepare('TRUNCATE sccpsettings')->execute();
- $stmt = $db->prepare('INSERT INTO sccpsettings (keyword, data, seq, type) VALUES (?,?,?,?)');
- $result = $db->executeMultiple($stmt, $save_value);
+ $stmt = $db->prepare('INSERT INTO sccpsettings (keyword, data, seq, type) VALUES (:keyword,:data,:seq,:type)');
} else {
- if (!empty($delete_value)) {
- $stmt = $db->prepare('DELETE FROM sccpsettings WHERE keyword = ?');
- $result = $db->executeMultiple($stmt, $delete_value);
+ $stmt = $db->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 ($dataArr['data'] == $this->val_null) {
+ $delete_value[] = $save_value[$key]['keyword'];
+ break;
+ }
}
- if (!empty($save_value)) {
- $stmt = $db->prepare('REPLACE INTO sccpsettings (keyword, data, seq, type) VALUES (?,?,?,?)');
- $result = $db->executeMultiple($stmt, $save_value);
+ $stmt->bindParam(':keyword',$dataArr['keyword'],\PDO::PARAM_STR);
+ $stmt->bindParam(':data',$dataArr['data'],\PDO::PARAM_STR);
+ $stmt->bindParam(':seq',$dataArr['seq'],\PDO::PARAM_INT);
+ $stmt->bindParam(':type',$dataArr['type'],\PDO::PARAM_INT);
+ $result = $stmt->execute();
+ }
+ if (!empty($delete_value)) {
+ $stmt = $db->prepare('DELETE FROM sccpsettings WHERE keyword = :keyword');
+ foreach ($delete_value as $del_key) {
+ $stmt->bindParam(':keyword',$del_key,\PDO::PARAM_STR);
+ $result = $stmt->execute();
}
}
break;
From 6bfa3112812b55531607c5096431edde458c79ad Mon Sep 17 00:00:00 2001
From: steve-lad <72376554+steve-lad@users.noreply.github.com>
Date: Thu, 11 Feb 2021 12:46:37 +0100
Subject: [PATCH 15/19] Final version
Standardise some calls and add notes
---
Sccp_manager.class.php | 26 +++--
Sccp_manager.inc/dbinterface.class.php | 129 +++++++++++--------------
2 files changed, 73 insertions(+), 82 deletions(-)
diff --git a/Sccp_manager.class.php b/Sccp_manager.class.php
index 9e170ed..2475a63 100644
--- a/Sccp_manager.class.php
+++ b/Sccp_manager.class.php
@@ -169,7 +169,11 @@ class Sccp_manager extends \FreePBX_Helpers implements \BMO {
$this->xml_data = simplexml_load_file($xml_vars);
$this->initVarfromXml(); // Overwrite Exist
}
- $this->saveSccpSettings();
+
+ if (get_class($freepbx) === 'FreePBX') {
+ // only save settings when building a new FreePBX object
+ $this->saveSccpSettings();
+ }
}
/*
@@ -643,6 +647,8 @@ class Sccp_manager extends \FreePBX_Helpers implements \BMO {
}
public function ajaxRequest($req, &$setting) {
+ // Called first by BMO. Must return true or request will be aborted.
+ // See https://wiki.freepbx.org/display/FOP/BMO+Ajax+Calls
switch ($req) {
case 'backupsettings':
case 'savesettings':
@@ -671,11 +677,13 @@ class Sccp_manager extends \FreePBX_Helpers implements \BMO {
case 'delete_dialplan':
return true;
break;
+ default:
+ return false;
}
- return false;
}
- // !TODO!: this should go into it's only ajam.html.php file (see: dahdiconfig)
+ // !TODO!: this should go into it's only ajax.html.php file (see: dahdiconfig)
+ // ajaxHandler is called after ajaxRequest returns true
public function ajaxHandler() {
$request = $_REQUEST;
$msg = array();
@@ -823,7 +831,6 @@ class Sccp_manager extends \FreePBX_Helpers implements \BMO {
$res = $this->updateSccpButtons($hw_list);
$msg .= $res['Response'] . ' raw: ' . $res['data'] . ' ';
return array('status' => true, 'message' => 'Update Butons Labels Complite ' . $msg, 'reload' => true);
-
case 'model_add':
$save_settings = array();
$key_name = array('model', 'vendor', 'dns', 'buttons', 'loadimage', 'loadinformationid', 'nametemplate');
@@ -847,7 +854,7 @@ class Sccp_manager extends \FreePBX_Helpers implements \BMO {
return $save_settings;
break;
case 'model_enabled':
- $model_set = '1';
+ $model_set = '1'; // fall through intentionally
case 'model_disabled':
if ($request['command'] == 'model_disabled') {
$model_set = '0';
@@ -860,7 +867,6 @@ class Sccp_manager extends \FreePBX_Helpers implements \BMO {
}
}
return array('status' => true, 'table_reload' => true);
-
break;
case 'model_delete':
if (!empty($request['model'])) {
@@ -1288,7 +1294,7 @@ class Sccp_manager extends \FreePBX_Helpers implements \BMO {
}
$this->dbinterface->write("sccpdevice", $save_settings, 'replace');
$save_buttons = $this->getPhoneButtons($get_settings, $name_dev, $hw_type);
- $this->dbinterface->write("sccpbuttons", $save_buttons, $update_hw, '', $name_dev);
+ $this->dbinterface->write("sccpbuttons", $save_buttons, $update_hw, 'add', $name_dev); //was empty so would fall through to INSERT
$this->createSccpDeviceXML($name_dev);
if ($hw_id == 'new') {
$this->srvinterface->sccpDeviceReset($name_dev);
@@ -1480,9 +1486,9 @@ class Sccp_manager extends \FreePBX_Helpers implements \BMO {
}
}
$this->dbinterface->write("sccpuser", $save_settings, 'replace', 'name');
- $this->dbinterface->write("sccpbuttons", $save_buttons, 'clear', '', $name_dev);
+ $this->dbinterface->write("sccpbuttons", $save_buttons, 'delete', '', $name_dev); //standardise to delete
return $save_buttons;
-
+ // Why is there a second return here???????
return $save_settings;
}
@@ -1867,7 +1873,7 @@ class Sccp_manager extends \FreePBX_Helpers implements \BMO {
// $save_settings = array();
if (empty($save_value)) {
- $this->dbinterface->write('sccpsettings', $this->sccpvalues, 'clear');
+ $this->dbinterface->write('sccpsettings', $this->sccpvalues, 'replace');
} else {
$this->dbinterface->write('sccpsettings', $save_value, 'update');
}
diff --git a/Sccp_manager.inc/dbinterface.class.php b/Sccp_manager.inc/dbinterface.class.php
index b57c116..692f3ab 100644
--- a/Sccp_manager.inc/dbinterface.class.php
+++ b/Sccp_manager.inc/dbinterface.class.php
@@ -57,12 +57,11 @@ class dbinterface
if (empty($data['name'])) {
$stmts = $db->prepare('SELECT * FROM sccpline ORDER BY name');
} else {
- $stmts = $db->prepare('SELECT * FROM sccpline WHERE name = $data[name]');
+ $stmts = $db->prepare('SELECT * FROM sccpline WHERE name = :name');
+ $stmt->bindParam(':name', $data['name'],\PDO::PARAM_STR);
}
break;
case 'SccpDevice':
- $filtered ='';
- $singlerow = false;
if (empty($data['fields'])) {
$fld = 'name, name as mac, type, button, addon, _description as description';
} else {
@@ -78,30 +77,21 @@ class dbinterface
break;
}
}
- if (!empty($data['name'])) {
- $filtered = 'name =' . $data['name']. '';
- $singlerow = true;
- }
- if (!empty($data['type'])) {
+ if (!empty($data['name'])) { //either filter by name or by type
+ $stmt = $db->prepare('SELECT ' . $fld . ' FROM sccpdeviceconfig WHERE name = :name ORDER BY name');
+ $stmt->bindParam(':name', $data['name'],\PDO::PARAM_STR);
+ } elseif (!empty($data['type'])) {
switch ($data['type']) {
case "cisco-sip":
- $filtered = 'TYPE LIKE \'%-sip\'';
+ $stmts = $db->prepare('SELECT ' . $fld . ' FROM sccpdeviceconfig WHERE TYPE LIKE \'%-sip\' ORDER BY name');
break;
- case "cisco":
+ case "cisco": // Fall through to default intentionally
default:
- $filtered = 'TYPE not LIKE \'%-sip\'';
+ $stmts = $db->prepare('SELECT ' . $fld . ' FROM sccpdeviceconfig WHERE TYPE not LIKE \'%-sip\' ORDER BY name');
break;
}
- }
- if (empty($filtered)) {
- $sql = 'SELECT ' . $fld . ' FROM sccpdeviceconfig ORDER BY name';
- } else {
- $sql = 'SELECT ' . $fld . ' FROM sccpdeviceconfig WHERE '. $filtered . ' ORDER BY name';
- }
- if ($singlerow) {
- $stmt = $db->prepare($sql);
- } else {
- $stmts = $db->prepare($sql);
+ } else { //no filter and no name provided - return all
+ $stmts = $db->prepare('SELECT ' . $fld . ' FROM sccpdeviceconfig WHERE ORDER BY name');
}
break;
case 'HWSipDevice':
@@ -114,39 +104,34 @@ class dbinterface
$raw_settings = $this->getDb_model_info($get = "extension", $format_list = "model");
break;
case 'get_columns_sccpdevice':
- $sql = 'DESCRIBE sccpdevice';
- $stmt = $db->prepare($sql);
+ $stmts = $db->prepare('DESCRIBE sccpdevice');
break;
case 'get_columns_sccpuser':
- $sql = 'DESCRIBE sccpuser';
- $stmts = $db->prepare($sql);
+ $stmts = $db->prepare('DESCRIBE sccpuser');
break;
case 'get_sccpdevice_byid':
- $sql = 'SELECT t1.*, types.dns, types.buttons, types.loadimage, types.nametemplate as nametemplate,
+ $stmt = $db->prepare('SELECT t1.*, types.dns, types.buttons, types.loadimage, types.nametemplate as nametemplate,
addon.buttons as addon_buttons FROM sccpdevice AS t1
LEFT JOIN sccpdevmodel as types ON t1.type=types.model
- LEFT JOIN sccpdevmodel as addon ON t1.addon=addon.model WHERE name =\'' . $data['id'] . '\'';
- $stmt = $db->prepare($sql);
+ LEFT JOIN sccpdevmodel as addon ON t1.addon=addon.model WHERE name = :name');
+ $stmt->bindParam(':name', $data['id'],\PDO::PARAM_STR);
break;
case 'get_sccpuser':
- $sql = 'SELECT * FROM sccpuser ';
- if (!empty($data['id'])) {
- $sql .= 'WHERE name= ' . $data['id'] . '';
- }
- $sql .= ' ORDER BY name';
- $stmt = $db->prepare($sql);
+ $stmt = $db->prepare('SELECT * FROM sccpuser WHERE name = :name');
+ $stmt->bindParam(':name', $data['id'],\PDO::PARAM_STR);
break;
case 'get_sccpdevice_buttons':
$sql = '';
if (!empty($data['buttontype'])) {
- $sql .= 'buttontype="' . $data['buttontype'] . '" ';
+ $sql .= 'buttontype = :buttontype';
}
if (!empty($data['id'])) {
- $sql .= (empty($sql)) ? 'ref="' . $data['id'] . '" ' : 'and ref="' . $data['id'] . '';
+ $sql .= (empty($sql)) ? 'ref = :ref' : ' and ref = :ref';
}
if (!empty($sql)) {
- $sql = 'SELECT * FROM sccpbuttonconfig WHERE ' .$sql. ' ORDER BY `instance`;';
- $stmts = $db->prepare($sql);
+ $stmts = $db->prepare('SELECT * FROM sccpbuttonconfig WHERE ' .$sql. ' ORDER BY instance');
+ $stmts->bindParam(':buttontype', $data['buttontype'],\PDO::PARAM_STR);
+ $stmts->bindParam(':ref', $data['id'],\PDO::PARAM_STR);
} else {
$raw_settings = array();
}
@@ -197,13 +182,12 @@ class dbinterface
if (!empty($filter)) {
if (!empty($filter['model'])) {
if (strpos($filter['model'], 'loadInformation')) {
- $sql = 'SELECT ' . $sel_inf . ' FROM sccpdevmodel WHERE (loadinformationid =' . $filter['model'] . ') ORDER BY model';
+ $stmt = $db->prepare('SELECT ' . $sel_inf . ' FROM sccpdevmodel WHERE (loadinformationid =' . $filter['model'] . ') ORDER BY model');
} else {
- $sql = 'SELECT ' . $sel_inf . ' FROM sccpdevmodel WHERE (loadinformationid = loadInformation' . $filter['model'] . ') ORDER BY model';
+ $stmt = $db->prepare('SELECT ' . $sel_inf . ' FROM sccpdevmodel WHERE (loadinformationid = loadInformation' . $filter['model'] . ') ORDER BY model');
}
} else {
-// $sql = "SELECT ".$filter['model'];
- $sql = 'SELECT ' . $sel_inf . ' FROM sccpdevmodel ORDER BY model';
+ $stmt = $db->prepare('SELECT ' . $sel_inf . ' FROM sccpdevmodel ORDER BY model');
}
break;
}
@@ -211,35 +195,34 @@ class dbinterface
case 'byid':
if (!empty($filter)) {
if (!empty($filter['model'])) {
- $sql = 'SELECT ' . $sel_inf . ' FROM sccpdevmodel WHERE (model =' . $filter['model'] . ') ORDER BY model';
+ $stmt = $db->prepare('SELECT ' . $sel_inf . ' FROM sccpdevmodel WHERE model = :model ORDER BY model');
+ $stmt->bindParam(':model', $filter['model'],\PDO::PARAM_STR);
} else {
-// $sql = "SELECT ".$filter['model'];
- $sql = 'SELECT ' . $sel_inf . ' FROM sccpdevmodel ORDER BY model';
+ $stmt = $db->prepare('SELECT ' . $sel_inf . ' FROM sccpdevmodel ORDER BY model');
}
break;
}
break;
case 'extension':
- $sql = 'SELECT ' . $sel_inf . ' FROM sccpdevmodel WHERE (dns = 0) and (enabled > 0) ORDER BY model'; //check table
+ $stmt = $db->prepare('SELECT ' . $sel_inf . ' FROM sccpdevmodel WHERE (dns = 0) and (enabled = 1) ORDER BY model');
break;
case 'enabled':
- $sql = 'SELECT ' . $sel_inf . ' FROM sccpdevmodel WHERE enabled > 0 ORDER BY model '; //previously this fell through to phones.
- break;
+ //$stmt = $db->prepare('SELECT ' . $sel_inf . ' FROM sccpdevmodel WHERE enabled = 1 ORDER BY model'); //previously this fell through to phones.
+ //break; // above includes expansion modules but was not original behaviour so commented out. Falls through to phones.
case 'phones':
- $sql = 'SELECT ' . $sel_inf . ' FROM sccpdevmodel WHERE (dns > 0) and (enabled > 0) ORDER BY model '; //check table
+ $stmt = $db->prepare('SELECT ' . $sel_inf . ' FROM sccpdevmodel WHERE (dns > 0) and (enabled = 1) ORDER BY model ');
break;
case 'ciscophones':
- $sql = 'SELECT ' . $sel_inf . ' FROM sccpdevmodel WHERE (dns > 0) and (enabled > 0) AND vendor NOT LIKE \'%-sip\' ORDER BY model';
+ $stmt = $db->prepare('SELECT ' . $sel_inf . ' FROM sccpdevmodel WHERE (dns > 0) and (enabled = 1) AND vendor NOT LIKE \'%-sip\' ORDER BY model');
break;
case 'sipphones':
- $sql = 'SELECT ' . $sel_inf . ' FROM sccpdevmodel WHERE (dns > 0) and (enabled > 0) AND `vendor` LIKE \'%-sip\' ORDER BY model';
+ $stmt = $db->prepare('SELECT ' . $sel_inf . ' FROM sccpdevmodel WHERE (dns > 0) and (enabled = 1) AND `vendor` LIKE \'%-sip\' ORDER BY model');
break;
case 'all': // Fall through to default
default:
- $sql = 'SELECT ' . $sel_inf . ' FROM sccpdevmodel ORDER BY model';
+ $stmt = $db->prepare('SELECT ' . $sel_inf . ' FROM sccpdevmodel ORDER BY model');
break;
}
- $stmt = $db->prepare($sql);
$stmt->execute();
return $stmt->fetchAll(\PDO::FETCH_ASSOC);
}
@@ -253,8 +236,7 @@ class dbinterface
$delete_value = array();
switch ($table_name) {
case 'sccpsettings':
- $time = -microtime(true);
- if ($mode == 'clear') {
+ if ($mode == 'replace') { // Change mode name to be more transparent
$db->prepare('TRUNCATE sccpsettings')->execute();
$stmt = $db->prepare('INSERT INTO sccpsettings (keyword, data, seq, type) VALUES (:keyword,:data,:seq,:type)');
} else {
@@ -282,7 +264,7 @@ class dbinterface
}
break;
case 'sccpdevmodel': // Fall through to next intentionally
- case 'sccpdevice': // Fall through to next intentionally
+ case 'sccpdevice': // Fall through to next intentionally
case 'sccpuser':
$sql_key = "";
$sql_var = "";
@@ -293,46 +275,49 @@ class dbinterface
if ($data === $this->val_null) {
$sql_var .= $key_v . '= NULL';
} else {
- $sql_var .= $key_v . ' = \'' . $data . '\'';
+ $sql_var .= $key_v . ' = \'' . $data . '\''; //quote data as normally is string
}
- if ($key_fld == $key_v) {
- $sql_key = $key_v . ' = \'' . $data . '\'';
+ if ($key_v === $key_fld) {
+ $sql_key = $key_v . ' = \'' . $data . '\''; //quote data as normally is string
}
}
if (!empty($sql_var)) {
switch ($mode) {
case 'delete':
- $req = 'DELETE FROM '. $table_name . ' WHERE ' . $sql_key;
+ $stmt = $db->prepare('DELETE FROM '. $table_name . ' WHERE ' . $sql_key);
break;
case 'update':
- $req = 'UPDATE ' . $table_name . ' SET ' . $sql_var . ' WHERE ' . $sql_key;
+ $stmt = $db->prepare('UPDATE ' . $table_name . ' SET ' . $sql_var . ' WHERE ' . $sql_key);
break;
- default:
- $req = 'REPLACE INTO ' . $table_name . ' SET ' . $sql_var;
+ case 'replace':
+ $stmt = $db->prepare('REPLACE INTO ' . $table_name . ' VALUES ' . $sql_var);
+ break;
+ // no default mode - must be explicit.
}
}
- $result = $db->prepare($req)->execute();
+ $result = $stmt->execute();
break;
case 'sccpbuttons':
switch ($mode) {
- case 'clear': // no break here as clear is same as delete
case 'delete':
- $sql = 'DELETE FROM sccpbuttonconfig WHERE ref=' . $hwid . '';
- $result = $db->prepare($sql)->execute();
+ $sql = 'DELETE FROM sccpbuttonconfig WHERE ref = :hwid';
+ $stmt = $db->prepare($sql);
+ $stmt->bindParam(':hwid', $hwid,\PDO::PARAM_STR);
+ $result = $stmt->execute();
break;
case 'replace':
if (!empty($save_value)) {
- $sql = 'UPDATE sccpbuttonconfig SET name =? WHERE ref = ? AND reftype =? AND instance =? AND buttontype =?';
- $stmt = $db->prepare($sql);
+ $stmt = $db->prepare('UPDATE sccpbuttonconfig SET name =? WHERE ref = ? AND reftype =? AND instance =? AND buttontype =?');
$result= $db->executeMultiple($stmt, $save_value);
}
break;
- default:
+ case 'add':
if (!empty($save_value)) {
- $sql = 'INSERT INTO sccpbuttonconfig (ref, reftype, instance, buttontype, name, options) VALUES (?,?,?,?,?,?)';
- $stmt = $db->prepare($sql);
+ $stmt = $db->prepare('INSERT INTO sccpbuttonconfig (ref, reftype, instance, buttontype, name, options) VALUES (?,?,?,?,?,?)');
$result = $db->executeMultiple($stmt, $save_value);
}
+ break;
+ // No default case - must be specific in request.
}
}
return $result;
From 80923f5ce1abde5aaa6eeab630379c06cf0abede Mon Sep 17 00:00:00 2001
From: steve-lad <72376554+steve-lad@users.noreply.github.com>
Date: Thu, 11 Feb 2021 12:52:08 +0100
Subject: [PATCH 16/19] Remove dbugs
---
Sccp_manager.class.php | 6 +-----
install.php | 1 -
2 files changed, 1 insertion(+), 6 deletions(-)
diff --git a/Sccp_manager.class.php b/Sccp_manager.class.php
index 2475a63..f1e69a4 100644
--- a/Sccp_manager.class.php
+++ b/Sccp_manager.class.php
@@ -875,7 +875,6 @@ class Sccp_manager extends \FreePBX_Helpers implements \BMO {
}
break;
case 'getDeviceModel':
-//dbug('getting Device model');
switch ($request['type']) {
case 'all':
case 'extension':
@@ -936,7 +935,6 @@ class Sccp_manager extends \FreePBX_Helpers implements \BMO {
return $result;
break;
case 'getExtensionGrid':
-//dbug('getting Extension Grid');
$result = $this->dbinterface->HWextension_db_SccpTableData('SccpExtension');
if (empty($result)) {
return array();
@@ -960,7 +958,6 @@ class Sccp_manager extends \FreePBX_Helpers implements \BMO {
return $result;
break;
case 'getPhoneGrid':
-//dbug('getting Phone Grid');
$cmd_type = !empty($request['type']) ? $request['type'] : '';
$result = $this->dbinterface->HWextension_db_SccpTableData('SccpDevice', array('type' => $cmd_type));
@@ -1873,7 +1870,7 @@ class Sccp_manager extends \FreePBX_Helpers implements \BMO {
// $save_settings = array();
if (empty($save_value)) {
- $this->dbinterface->write('sccpsettings', $this->sccpvalues, 'replace');
+ $this->dbinterface->write('sccpsettings', $this->sccpvalues, 'replace'); //Change to replace as clearer
} else {
$this->dbinterface->write('sccpsettings', $save_value, 'update');
}
@@ -2138,7 +2135,6 @@ class Sccp_manager extends \FreePBX_Helpers implements \BMO {
$dir_list = $this->findAllFiles($dir, $file_ext, 'fileonly');
}
$raw_settings = $this->dbinterface->getDb_model_info($get, $format_list, $filter);
-//dbug('reloading table');
if ($validate) {
for ($i = 0; $i < count($raw_settings); $i++) {
$raw_settings[$i]['validate'] = '-;-';
diff --git a/install.php b/install.php
index 6e5c510..70fdc3f 100644
--- a/install.php
+++ b/install.php
@@ -1001,7 +1001,6 @@ if (!$sccp_db_ver) {
InstallDB_createButtonConfigTrigger();
InstallDB_CreateSccpDeviceConfigView($sccp_compatible);
InstallDB_updateDBVer($sccp_compatible);
-dbug('chanSCCPWarning',$chanSCCPWarning);
if ($chanSCCPWarning) {
outn(" ");
outn("Warning: Upgrade chan_sccp_b to use full ami functionality");
From 3362f5a7cfe8a30edcfdfd8de5c37631562242b3 Mon Sep 17 00:00:00 2001
From: steve-lad <72376554+steve-lad@users.noreply.github.com>
Date: Thu, 11 Feb 2021 15:01:57 +0100
Subject: [PATCH 17/19] Update dbinterface.class.php
---
Sccp_manager.inc/dbinterface.class.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Sccp_manager.inc/dbinterface.class.php b/Sccp_manager.inc/dbinterface.class.php
index 692f3ab..8571569 100644
--- a/Sccp_manager.inc/dbinterface.class.php
+++ b/Sccp_manager.inc/dbinterface.class.php
@@ -40,7 +40,7 @@ class dbinterface
$id = $value[$indexField];
$result[$id] = $value;
}
- return $resut;
+ return $result;
}
public function HWextension_db_SccpTableData($dataid, $data = array())
From cc8eb549d09655090ba096dba4f7ad3f08161e9c Mon Sep 17 00:00:00 2001
From: steve-lad <72376554+steve-lad@users.noreply.github.com>
Date: Sat, 13 Mar 2021 11:21:12 +0100
Subject: [PATCH 18/19] Fix exception if sccpsettings table does not exist
Before the installer can create sccpsettings, FreePBX instantiates an SCCP_Manager object which requires sccpsettings.
Catch the exception and create the table
---
Sccp_manager.inc/dbinterface.class.php | 28 +++++++++++++++++++++-----
install.php | 19 +++++++++--------
uninstall.php | 8 ++++++++
3 files changed, 40 insertions(+), 15 deletions(-)
diff --git a/Sccp_manager.inc/dbinterface.class.php b/Sccp_manager.inc/dbinterface.class.php
index 8571569..9f3cc5f 100644
--- a/Sccp_manager.inc/dbinterface.class.php
+++ b/Sccp_manager.inc/dbinterface.class.php
@@ -150,12 +150,30 @@ class dbinterface
public function get_db_SccpSetting()
{
global $db;
- $stmt = $db->prepare('SELECT keyword, data, type, seq FROM sccpsettings ORDER BY type, seq');
- $stmt->execute();
- foreach ($stmt->fetchAll() as $var) {
- $mysccpvalues[$var['keyword']] = array('keyword' => $var['keyword'], 'data' => $var['data'], 'seq' => $var['seq'], 'type' => $var['type']);
+ try {
+ $stmt = $db->prepare('SELECT keyword, data, type, seq FROM sccpsettings ORDER BY type, seq');
+ $stmt->execute();
+ foreach ($stmt->fetchAll() as $var) {
+ $mysccpvalues[$var['keyword']] = array('keyword' => $var['keyword'], 'data' => $var['data'], 'seq' => $var['seq'], 'type' => $var['type']);
+ }
+ return $mysccpvalues;
+ } catch(\PDOException $e) {
+ // sccpsettings table does not yet exist. FreePBX is instantiating
+ // a SCCP_Manager object from the Installer before the installer can
+ // create the table so will create here.
+ $stmt = $db-> prepare('CREATE TABLE IF NOT EXISTS sccpsettings (
+ keyword VARCHAR (50) NOT NULL,
+ data VARCHAR (255) NOT NULL,
+ seq TINYINT (1),
+ type TINYINT (1) NOT NULL default 0,
+ PRIMARY KEY (keyword, seq, type )
+ );');
+ $check = $stmt->execute();
+ if (\DB::IsError($check)) {
+ die_freepbx("Can not create sccpsettings table, error: $check\n");
+ }
+ return array();
}
- return $mysccpvalues;
}
public function get_db_sysvalues()
diff --git a/install.php b/install.php
index 70fdc3f..ebdd734 100644
--- a/install.php
+++ b/install.php
@@ -27,7 +27,6 @@ if (!class_exists($class, false)) {
if (class_exists($class, false)) {
$srvinterface = new $class();
}
-
function Get_DB_config($sccp_compatible)
{
global $mobile_hw;
@@ -484,16 +483,16 @@ function InstallDB_sccpsettings()
{
global $db;
outn("
" . _("Creating sccpsettings table...") . "
");
- $sql = "CREATE TABLE IF NOT EXISTS `sccpsettings` (
- `keyword` VARCHAR (50) NOT NULL default '',
- `data` VARCHAR (255) NOT NULL default '',
- `seq` TINYINT (1),
- `type` TINYINT (1) NOT NULL default '0',
- PRIMARY KEY (`keyword`,`seq`,`type`)
- );";
- $check = $db->query($sql);
+ $stmt = $db-> prepare('CREATE TABLE IF NOT EXISTS sccpsettings (
+ keyword VARCHAR (50) NOT NULL,
+ data VARCHAR (255) NOT NULL,
+ seq TINYINT (1),
+ type TINYINT (1) NOT NULL,
+ PRIMARY KEY (keyword, seq, type )
+ );');
+ $check = $stmt->execute();
if (DB::IsError($check)) {
- die_freepbx("Can not create sccpsettings table, error:$check\n");
+ die_freepbx("Can not create sccpsettings table, error: $check\n");
}
return true;
}
diff --git a/uninstall.php b/uninstall.php
index 0a58e13..6974b3b 100644
--- a/uninstall.php
+++ b/uninstall.php
@@ -56,6 +56,14 @@ if (!empty($version)) {
sql("DELETE FROM kvstore WHERE module = 'sccpsettings'");
sql("DELETE FROM kvstore WHERE module = 'Sccp_manager'");
}
+ // By accessing the database, we have recreated sccpsettings table so now delete
+ // Need to rewrite this uninstaller.
+ $sql = "DROP TABLE IF EXISTS sccpsettings";
+ $result = $db->query($sql);
+ if (DB::IsError($result)) {
+ die_freepbx($result->getDebugInfo());
+ }
+ unset($result);
/* Comment: Maybe save in sccpsettings, if the chan_sccp tables already existed in the database or if they were created by install.php */
/* So that you know if it is safe to drop/delete them */
From 7030ec2bb5393be4a85616bcf920d8c1ce31e7b1 Mon Sep 17 00:00:00 2001
From: steve-lad <72376554+steve-lad@users.noreply.github.com>
Date: Sat, 13 Mar 2021 14:58:30 +0100
Subject: [PATCH 19/19] Migrate from global db object
As per FreePBX BMO, no longer use global db object
---
Sccp_manager.inc/dbinterface.class.php | 94 +++++++++++++-------------
1 file changed, 47 insertions(+), 47 deletions(-)
diff --git a/Sccp_manager.inc/dbinterface.class.php b/Sccp_manager.inc/dbinterface.class.php
index 9f3cc5f..5192647 100644
--- a/Sccp_manager.inc/dbinterface.class.php
+++ b/Sccp_manager.inc/dbinterface.class.php
@@ -46,7 +46,7 @@ class dbinterface
public function HWextension_db_SccpTableData($dataid, $data = array())
{
// $stmt is a single row fetch, $stmts is a fetchAll.
- global $db;
+ $dbh = \FreePBX::Database();
$stmt = '';
$stmts = '';
if ($dataid == '') {
@@ -55,9 +55,9 @@ class dbinterface
switch ($dataid) {
case 'SccpExtension':
if (empty($data['name'])) {
- $stmts = $db->prepare('SELECT * FROM sccpline ORDER BY name');
+ $stmts = $dbh->prepare('SELECT * FROM sccpline ORDER BY name');
} else {
- $stmts = $db->prepare('SELECT * FROM sccpline WHERE name = :name');
+ $stmts = $dbh->prepare('SELECT * FROM sccpline WHERE name = :name');
$stmt->bindParam(':name', $data['name'],\PDO::PARAM_STR);
}
break;
@@ -78,20 +78,20 @@ class dbinterface
}
}
if (!empty($data['name'])) { //either filter by name or by type
- $stmt = $db->prepare('SELECT ' . $fld . ' FROM sccpdeviceconfig WHERE name = :name ORDER BY name');
+ $stmt = $dbh->prepare('SELECT ' . $fld . ' FROM sccpdeviceconfig WHERE name = :name ORDER BY name');
$stmt->bindParam(':name', $data['name'],\PDO::PARAM_STR);
} elseif (!empty($data['type'])) {
switch ($data['type']) {
case "cisco-sip":
- $stmts = $db->prepare('SELECT ' . $fld . ' FROM sccpdeviceconfig WHERE TYPE LIKE \'%-sip\' ORDER BY name');
+ $stmts = $dbh->prepare('SELECT ' . $fld . ' FROM sccpdeviceconfig WHERE TYPE LIKE \'%-sip\' ORDER BY name');
break;
case "cisco": // Fall through to default intentionally
default:
- $stmts = $db->prepare('SELECT ' . $fld . ' FROM sccpdeviceconfig WHERE TYPE not LIKE \'%-sip\' ORDER BY name');
+ $stmts = $dbh->prepare('SELECT ' . $fld . ' FROM sccpdeviceconfig WHERE TYPE not LIKE \'%-sip\' ORDER BY name');
break;
}
} else { //no filter and no name provided - return all
- $stmts = $db->prepare('SELECT ' . $fld . ' FROM sccpdeviceconfig WHERE ORDER BY name');
+ $stmts = $dbh->prepare('SELECT ' . $fld . ' FROM sccpdeviceconfig WHERE ORDER BY name');
}
break;
case 'HWSipDevice':
@@ -104,20 +104,20 @@ class dbinterface
$raw_settings = $this->getDb_model_info($get = "extension", $format_list = "model");
break;
case 'get_columns_sccpdevice':
- $stmts = $db->prepare('DESCRIBE sccpdevice');
+ $stmts = $dbh->prepare('DESCRIBE sccpdevice');
break;
case 'get_columns_sccpuser':
- $stmts = $db->prepare('DESCRIBE sccpuser');
+ $stmts = $dbh->prepare('DESCRIBE sccpuser');
break;
case 'get_sccpdevice_byid':
- $stmt = $db->prepare('SELECT t1.*, types.dns, types.buttons, types.loadimage, types.nametemplate as nametemplate,
+ $stmt = $dbh->prepare('SELECT t1.*, types.dns, types.buttons, types.loadimage, types.nametemplate as nametemplate,
addon.buttons as addon_buttons FROM sccpdevice AS t1
LEFT JOIN sccpdevmodel as types ON t1.type=types.model
LEFT JOIN sccpdevmodel as addon ON t1.addon=addon.model WHERE name = :name');
$stmt->bindParam(':name', $data['id'],\PDO::PARAM_STR);
break;
case 'get_sccpuser':
- $stmt = $db->prepare('SELECT * FROM sccpuser WHERE name = :name');
+ $stmt = $dbh->prepare('SELECT * FROM sccpuser WHERE name = :name');
$stmt->bindParam(':name', $data['id'],\PDO::PARAM_STR);
break;
case 'get_sccpdevice_buttons':
@@ -129,7 +129,7 @@ class dbinterface
$sql .= (empty($sql)) ? 'ref = :ref' : ' and ref = :ref';
}
if (!empty($sql)) {
- $stmts = $db->prepare('SELECT * FROM sccpbuttonconfig WHERE ' .$sql. ' ORDER BY instance');
+ $stmts = $dbh->prepare('SELECT * FROM sccpbuttonconfig WHERE ' .$sql. ' ORDER BY instance');
$stmts->bindParam(':buttontype', $data['buttontype'],\PDO::PARAM_STR);
$stmts->bindParam(':ref', $data['id'],\PDO::PARAM_STR);
} else {
@@ -149,9 +149,9 @@ class dbinterface
public function get_db_SccpSetting()
{
- global $db;
+ $dbh = \FreePBX::Database();
try {
- $stmt = $db->prepare('SELECT keyword, data, type, seq FROM sccpsettings ORDER BY type, seq');
+ $stmt = $dbh->prepare('SELECT keyword, data, type, seq FROM sccpsettings ORDER BY type, seq');
$stmt->execute();
foreach ($stmt->fetchAll() as $var) {
$mysccpvalues[$var['keyword']] = array('keyword' => $var['keyword'], 'data' => $var['data'], 'seq' => $var['seq'], 'type' => $var['type']);
@@ -161,25 +161,25 @@ class dbinterface
// sccpsettings table does not yet exist. FreePBX is instantiating
// a SCCP_Manager object from the Installer before the installer can
// create the table so will create here.
- $stmt = $db-> prepare('CREATE TABLE IF NOT EXISTS sccpsettings (
+ $stmt = $dbh-> prepare('CREATE TABLE IF NOT EXISTS sccpsettings (
keyword VARCHAR (50) NOT NULL,
data VARCHAR (255) NOT NULL,
seq TINYINT (1),
type TINYINT (1) NOT NULL default 0,
PRIMARY KEY (keyword, seq, type )
);');
- $check = $stmt->execute();
- if (\DB::IsError($check)) {
- die_freepbx("Can not create sccpsettings table, error: $check\n");
- }
+ $stmt->execute();
+ //if ($dbh::IsError($check)) {
+ // die_freepbx("Can not create sccpsettings table, error: $check\n");
+ //}
return array();
}
}
public function get_db_sysvalues()
{
- global $db;
- $stmt = $db->prepare('SHOW VARIABLES LIKE \'%group_concat%\'');
+ $dbh = \FreePBX::Database();
+ $stmt = $dbh->prepare('SHOW VARIABLES LIKE \'%group_concat%\'');
$stmt->execute();
return $stmt->fetch(\PDO::FETCH_ASSOC);
}
@@ -190,7 +190,7 @@ class dbinterface
function getDb_model_info($get = 'all', $format_list = 'all', $filter = array())
{
- global $db;
+ $dbh = \FreePBX::Database();
$sel_inf = '*, 0 as validate';
if ($format_list === 'model') {
$sel_inf = 'model, vendor, dns, buttons, 0 as validate';
@@ -200,12 +200,12 @@ class dbinterface
if (!empty($filter)) {
if (!empty($filter['model'])) {
if (strpos($filter['model'], 'loadInformation')) {
- $stmt = $db->prepare('SELECT ' . $sel_inf . ' FROM sccpdevmodel WHERE (loadinformationid =' . $filter['model'] . ') ORDER BY model');
+ $stmt = $dbh->prepare('SELECT ' . $sel_inf . ' FROM sccpdevmodel WHERE (loadinformationid =' . $filter['model'] . ') ORDER BY model');
} else {
- $stmt = $db->prepare('SELECT ' . $sel_inf . ' FROM sccpdevmodel WHERE (loadinformationid = loadInformation' . $filter['model'] . ') ORDER BY model');
+ $stmt = $dbh->prepare('SELECT ' . $sel_inf . ' FROM sccpdevmodel WHERE (loadinformationid = loadInformation' . $filter['model'] . ') ORDER BY model');
}
} else {
- $stmt = $db->prepare('SELECT ' . $sel_inf . ' FROM sccpdevmodel ORDER BY model');
+ $stmt = $dbh->prepare('SELECT ' . $sel_inf . ' FROM sccpdevmodel ORDER BY model');
}
break;
}
@@ -213,32 +213,32 @@ class dbinterface
case 'byid':
if (!empty($filter)) {
if (!empty($filter['model'])) {
- $stmt = $db->prepare('SELECT ' . $sel_inf . ' FROM sccpdevmodel WHERE model = :model ORDER BY model');
+ $stmt = $dbh->prepare('SELECT ' . $sel_inf . ' FROM sccpdevmodel WHERE model = :model ORDER BY model');
$stmt->bindParam(':model', $filter['model'],\PDO::PARAM_STR);
} else {
- $stmt = $db->prepare('SELECT ' . $sel_inf . ' FROM sccpdevmodel ORDER BY model');
+ $stmt = $dbh->prepare('SELECT ' . $sel_inf . ' FROM sccpdevmodel ORDER BY model');
}
break;
}
break;
case 'extension':
- $stmt = $db->prepare('SELECT ' . $sel_inf . ' FROM sccpdevmodel WHERE (dns = 0) and (enabled = 1) ORDER BY model');
+ $stmt = $dbh->prepare('SELECT ' . $sel_inf . ' FROM sccpdevmodel WHERE (dns = 0) and (enabled = 1) ORDER BY model');
break;
case 'enabled':
//$stmt = $db->prepare('SELECT ' . $sel_inf . ' FROM sccpdevmodel WHERE enabled = 1 ORDER BY model'); //previously this fell through to phones.
//break; // above includes expansion modules but was not original behaviour so commented out. Falls through to phones.
case 'phones':
- $stmt = $db->prepare('SELECT ' . $sel_inf . ' FROM sccpdevmodel WHERE (dns > 0) and (enabled = 1) ORDER BY model ');
+ $stmt = $dbh->prepare('SELECT ' . $sel_inf . ' FROM sccpdevmodel WHERE (dns > 0) and (enabled = 1) ORDER BY model ');
break;
case 'ciscophones':
- $stmt = $db->prepare('SELECT ' . $sel_inf . ' FROM sccpdevmodel WHERE (dns > 0) and (enabled = 1) AND vendor NOT LIKE \'%-sip\' ORDER BY model');
+ $stmt = $dbh->prepare('SELECT ' . $sel_inf . ' FROM sccpdevmodel WHERE (dns > 0) and (enabled = 1) AND vendor NOT LIKE \'%-sip\' ORDER BY model');
break;
case 'sipphones':
- $stmt = $db->prepare('SELECT ' . $sel_inf . ' FROM sccpdevmodel WHERE (dns > 0) and (enabled = 1) AND `vendor` LIKE \'%-sip\' ORDER BY model');
+ $stmt = $dbh->prepare('SELECT ' . $sel_inf . ' FROM sccpdevmodel WHERE (dns > 0) and (enabled = 1) AND `vendor` LIKE \'%-sip\' ORDER BY model');
break;
case 'all': // Fall through to default
default:
- $stmt = $db->prepare('SELECT ' . $sel_inf . ' FROM sccpdevmodel ORDER BY model');
+ $stmt = $dbh->prepare('SELECT ' . $sel_inf . ' FROM sccpdevmodel ORDER BY model');
break;
}
$stmt->execute();
@@ -249,16 +249,16 @@ class dbinterface
{
// mode clear - Empty table before update
// mode update - update / replace record
- global $db;
+ $dbh = \FreePBX::Database();
$result = false;
$delete_value = array();
switch ($table_name) {
case 'sccpsettings':
if ($mode == 'replace') { // Change mode name to be more transparent
- $db->prepare('TRUNCATE sccpsettings')->execute();
- $stmt = $db->prepare('INSERT INTO sccpsettings (keyword, data, seq, type) VALUES (:keyword,:data,:seq,:type)');
+ $dbh->prepare('TRUNCATE sccpsettings')->execute();
+ $stmt = $dbh->prepare('INSERT INTO sccpsettings (keyword, data, seq, type) VALUES (:keyword,:data,:seq,:type)');
} else {
- $stmt = $db->prepare('REPLACE INTO sccpsettings (keyword, data, seq, type) VALUES (:keyword,:data,:seq,:type)');
+ $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'])) {
@@ -274,7 +274,7 @@ class dbinterface
$result = $stmt->execute();
}
if (!empty($delete_value)) {
- $stmt = $db->prepare('DELETE FROM sccpsettings WHERE keyword = :keyword');
+ $stmt = $dbh->prepare('DELETE FROM sccpsettings WHERE keyword = :keyword');
foreach ($delete_value as $del_key) {
$stmt->bindParam(':keyword',$del_key,\PDO::PARAM_STR);
$result = $stmt->execute();
@@ -302,13 +302,13 @@ class dbinterface
if (!empty($sql_var)) {
switch ($mode) {
case 'delete':
- $stmt = $db->prepare('DELETE FROM '. $table_name . ' WHERE ' . $sql_key);
+ $stmt = $dbh->prepare('DELETE FROM '. $table_name . ' WHERE ' . $sql_key);
break;
case 'update':
- $stmt = $db->prepare('UPDATE ' . $table_name . ' SET ' . $sql_var . ' WHERE ' . $sql_key);
+ $stmt = $dbh->prepare('UPDATE ' . $table_name . ' SET ' . $sql_var . ' WHERE ' . $sql_key);
break;
case 'replace':
- $stmt = $db->prepare('REPLACE INTO ' . $table_name . ' VALUES ' . $sql_var);
+ $stmt = $dbh->prepare('REPLACE INTO ' . $table_name . ' VALUES ' . $sql_var);
break;
// no default mode - must be explicit.
}
@@ -319,20 +319,20 @@ class dbinterface
switch ($mode) {
case 'delete':
$sql = 'DELETE FROM sccpbuttonconfig WHERE ref = :hwid';
- $stmt = $db->prepare($sql);
+ $stmt = $dbh->prepare($sql);
$stmt->bindParam(':hwid', $hwid,\PDO::PARAM_STR);
$result = $stmt->execute();
break;
case 'replace':
if (!empty($save_value)) {
- $stmt = $db->prepare('UPDATE sccpbuttonconfig SET name =? WHERE ref = ? AND reftype =? AND instance =? AND buttontype =?');
- $result= $db->executeMultiple($stmt, $save_value);
+ $stmt = $dbh->prepare('UPDATE sccpbuttonconfig SET name =? WHERE ref = ? AND reftype =? AND instance =? AND buttontype =?');
+ $result= $dbh->executeMultiple($stmt, $save_value);
}
break;
case 'add':
if (!empty($save_value)) {
- $stmt = $db->prepare('INSERT INTO sccpbuttonconfig (ref, reftype, instance, buttontype, name, options) VALUES (?,?,?,?,?,?)');
- $result = $db->executeMultiple($stmt, $save_value);
+ $stmt = $dbh->prepare('INSERT INTO sccpbuttonconfig (ref, reftype, instance, buttontype, name, options) VALUES (?,?,?,?,?,?)');
+ $result = $dbh->executeMultiple($stmt, $save_value);
}
break;
// No default case - must be specific in request.
@@ -357,14 +357,14 @@ class dbinterface
*/
public function validate()
{
- global $db;
+ $dbh = \FreePBX::Database();
$result = 0;
$check_fields = [
'430' => ['_hwlang' => "varchar(12)"],
'431' => ['private'=> "enum('on','off')"],
'433' => ['directed_pickup'=>'']
];
- $stmt = $db->prepare('DESCRIBE sccpdevice');
+ $stmt = $dbh->prepare('DESCRIBE sccpdevice');
$stmt->execute();
foreach ($stmt->fetchAll(\PDO::FETCH_ASSOC) as $value) {
$id_result[$value['Field']] = $value['Type'];