diff --git a/scripts/pi-hole/js/network.js b/scripts/pi-hole/js/network.js index 03f38cc3..f68b16b3 100644 --- a/scripts/pi-hole/js/network.js +++ b/scripts/pi-hole/js/network.js @@ -8,6 +8,7 @@ /* global utils:false */ var tableApi; +var token = $("#token").text(); var API_STRING = "api_db.php?network"; @@ -59,7 +60,48 @@ function parseColor(input) { } } -function deleteNetworkEntry() {} +function deleteNetworkEntry() { + var tr = $(this).closest("tr"); + var id = tr.attr("data-id"); + + utils.disableAll(); + utils.showAlert("info", "", "Deleting network table entry with ID " + parseInt(id, 10), "..."); + $.ajax({ + url: "scripts/pi-hole/php/network.php", + method: "post", + dataType: "json", + data: { action: "delete_network_entry", id: id, token: token }, + success: function (response) { + utils.enableAll(); + if (response.success) { + utils.showAlert( + "success", + "far fa-trash-alt", + "Successfully deleted network table entry # ", + id + ); + tableApi.row(tr).remove().draw(false).ajax.reload(null, false); + } else { + utils.showAlert( + "error", + "", + "Error while network table entry with ID " + id, + response.message + ); + } + }, + error: function (jqXHR, exception) { + utils.enableAll(); + utils.showAlert( + "error", + "", + "Error while deleting network table entry with ID " + id, + jqXHR.responseText + ); + console.log(exception); // eslint-disable-line no-console + }, + }); +} $(function () { tableApi = $("#network-entries").DataTable({ diff --git a/scripts/pi-hole/php/network.php b/scripts/pi-hole/php/network.php new file mode 100644 index 00000000..4709d283 --- /dev/null +++ b/scripts/pi-hole/php/network.php @@ -0,0 +1,82 @@ + + true, 'message' => $message)); +} + +function JSON_error($message = null) +{ + header('Content-type: application/json'); + $response = array('success' => false, 'message' => $message); + if (isset($_POST['action'])) { + array_push($response, array('action' => $_POST['action'])); + } + echo json_encode($response); +} + +if ($_POST['action'] == 'delete_network_entry' && isset($_POST['id'])) { +// Delete netwwork and network_addresses table entry identified by ID + try { + + $stmt = $db->prepare('DELETE FROM network_addresses WHERE network_id=:id'); + if (!$stmt) { + throw new Exception('While preparing message statement: ' . $db->lastErrorMsg()); + } + + if (!$stmt->bindValue(':id', intval($_POST['id']), SQLITE3_INTEGER)) { + throw new Exception('While binding id to message statement: ' . $db->lastErrorMsg()); + } + + if (!$stmt->execute()) { + throw new Exception('While executing message statement: ' . $db->lastErrorMsg()); + } + + $stmt = $db->prepare('DELETE FROM network WHERE id=:id'); + if (!$stmt) { + throw new Exception('While preparing message statement: ' . $db->lastErrorMsg()); + } + + if (!$stmt->bindValue(':id', intval($_POST['id']), SQLITE3_INTEGER)) { + throw new Exception('While binding id to message statement: ' . $db->lastErrorMsg()); + } + + if (!$stmt->execute()) { + throw new Exception('While executing message statement: ' . $db->lastErrorMsg()); + } + + $reload = true; + JSON_success(); + } catch (\Exception $ex) { + JSON_error($ex->getMessage()); + } +} else { + log_and_die('Requested action not supported!'); +}