Fix Sccp Button Save

Correct PDO statements and implimentation concept
This commit is contained in:
steve-lad 2021-03-29 16:22:15 +02:00 committed by Diederik de Groot
parent 9f5459f7c5
commit ef4fc4fe12
No known key found for this signature in database
GPG key ID: AFA728250A1BECD6
2 changed files with 29 additions and 14 deletions

View file

@ -742,7 +742,7 @@ class Sccp_manager extends \FreePBX_Helpers implements \BMO {
foreach ($request['idn'] as $idv) {
if ($this->strpos_array($idv, array('SEP', 'ATA', 'VG')) !== false) {
$this->dbinterface->write('sccpdevice', array('name' => $idv), 'delete', "name");
$this->dbinterface->write("sccpbuttons", array(), 'delete', '', $idv);
$this->dbinterface->write('sccpbuttons', array(), 'delete', '', $idv);
$this->deleteSccpDeviceXML($idv); // Концы в вводу !!
$this->srvinterface->sccpDeviceReset($idv);
}
@ -1289,9 +1289,9 @@ class Sccp_manager extends \FreePBX_Helpers implements \BMO {
$save_settings[$key] = $value;
}
}
$this->dbinterface->write("sccpdevice", $save_settings, 'replace');
$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, 'add', $name_dev); //was empty so would fall through to INSERT
$this->dbinterface->write('sccpbuttons', $save_buttons, $update_hw, '', $name_dev);
$this->createSccpDeviceXML($name_dev);
if ($hw_id == 'new') {
$this->srvinterface->sccpDeviceReset($name_dev);
@ -1482,8 +1482,8 @@ class Sccp_manager extends \FreePBX_Helpers implements \BMO {
$save_settings[$key] = $value;
}
}
$this->dbinterface->write("sccpuser", $save_settings, 'replace', 'name');
$this->dbinterface->write("sccpbuttons", $save_buttons, 'delete', '', $name_dev); //standardise to delete
$this->dbinterface->write('sccpuser', $save_settings, 'replace', 'name');
$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;
@ -1856,7 +1856,7 @@ class Sccp_manager extends \FreePBX_Helpers implements \BMO {
if (empty($save_buttons)) {
return array('Response' => 'No update required', 'data' => ' 0 - records ');
}
$res = $this->dbinterface->write("sccpbuttons", $save_buttons, 'replace', '', '');
$res = $this->dbinterface->write('sccpbuttons', $save_buttons, 'replace', '', '');
return array('Response' => 'Update records :' . count($save_buttons), 'data' => $res);
}

View file

@ -147,7 +147,6 @@ class dbinterface
$stmt->execute();
$raw_settings = $stmt->fetch(\PDO::FETCH_ASSOC);
} elseif (!empty($stmts)) {
dbug('statement is before execute', $stmts);
$stmts->execute();
$raw_settings = $stmts->fetchAll(\PDO::FETCH_ASSOC);
}
@ -331,17 +330,33 @@ dbug('statement is before execute', $stmts);
$result = $stmt->execute();
break;
case 'replace':
if (!empty($save_value)) {
$stmt = $dbh->prepare('UPDATE sccpbuttonconfig SET name =? WHERE ref = ? AND reftype =? AND instance =? AND buttontype =?');
$result= $dbh->executeMultiple($stmt, $save_value);
foreach ($save_value as $button_array) {
$stmt = $dbh->prepare('UPDATE sccpbuttonconfig SET name =:name WHERE ref = :ref AND reftype =:reftype AND instance = :instance AND buttontype = :buttontype');
$stmt->bindParam(':ref', $button_array['ref'],\PDO::PARAM_STR);
$stmt->bindParam(':reftype', $button_array['reftype'],\PDO::PARAM_STR);
$stmt->bindParam(':instance', $button_array['instance'],\PDO::PARAM_INT);
$stmt->bindParam(':buttontype', $button_array['type'],\PDO::PARAM_STR);
$stmt->bindParam(':name', $button_array['name'],\PDO::PARAM_STR);
$result= $dbh->execute();
}
break;
case 'add':
if (!empty($save_value)) {
$stmt = $dbh->prepare('INSERT INTO sccpbuttonconfig (ref, reftype, instance, buttontype, name, options) VALUES (?,?,?,?,?,?)');
$result = $dbh->executeMultiple($stmt, $save_value);
foreach ($save_value as $button_array) {
$stmt = $dbh->prepare('INSERT INTO sccpbuttonconfig (ref, reftype, instance, buttontype, name, options) VALUES (:ref, :reftype, :instance, :buttontype, :name, :options)');
$stmt->bindParam(':ref', $button_array['ref'],\PDO::PARAM_STR);
$stmt->bindParam(':reftype', $button_array['reftype'],\PDO::PARAM_STR);
$stmt->bindParam(':instance', $button_array['instance'],\PDO::PARAM_INT);
$stmt->bindParam(':buttontype', $button_array['type'],\PDO::PARAM_STR);
$stmt->bindParam(':name', $button_array['name'],\PDO::PARAM_STR);
$stmt->bindParam(':options', $button_array['options'],\PDO::PARAM_STR);
$result = $stmt->execute();
}
break;
case 'clear';
// Clear is equivalent of delete + insert.
$this->write('sccpbuttons', '', $mode = 'delete','', $hwid);
$this->write('sccpbuttons', $save_value, $mode = 'add','', $hwid);
break;
// No default case - must be specific in request.
}
}