From 3f8156939e137e3c254785400e5c55888a9e47ce Mon Sep 17 00:00:00 2001 From: Lukas Metzger Date: Sat, 23 Jan 2016 20:38:01 +0100 Subject: [PATCH] Added function to delete a complete domain --- api/domains.php | 152 +++++++++++++++++++++++++++++------------------- domains.php | 13 +++++ js/domains.js | 43 +++++++++++++- 3 files changed, 146 insertions(+), 62 deletions(-) diff --git a/api/domains.php b/api/domains.php index 7c698dc..25546d6 100644 --- a/api/domains.php +++ b/api/domains.php @@ -22,72 +22,102 @@ require_once '../lib/session.php'; $input = json_decode(file_get_contents('php://input')); -$sql = " - SELECT D.id,D.name,D.type,count(R.domain_id) AS records - FROM domains D - LEFT OUTER JOIN records R ON D.id = R.domain_id - LEFT OUTER JOIN permissions P ON D.id = P.domain - WHERE (P.user=? OR ?) - GROUP BY D.id - HAVING - (D.name LIKE ? OR ?) AND - (D.type=? OR ?) -"; +if(isset($input->action) && $input->action == "getDomains") { -if(isset($input->sort->field) && $input->sort->field != "") { - if($input->sort->field == "id") { - $sql .= "ORDER BY id"; - } else if($input->sort->field == "name") { - $sql .= "ORDER BY name"; - } else if($input->sort->field == "type") { - $sql .= "ORDER BY type"; - } else if($input->sort->field == "records") { - $sql .= "ORDER BY records"; - } - - if(isset($input->sort->order)) { - if($input->sort->order == 0) { - $sql .= " DESC"; - } else if($input->sort->order == 1) { - $sql .= " ASC"; + $sql = " + SELECT D.id,D.name,D.type,count(R.domain_id) AS records + FROM domains D + LEFT OUTER JOIN records R ON D.id = R.domain_id + LEFT OUTER JOIN permissions P ON D.id = P.domain + WHERE (P.user=? OR ?) + GROUP BY D.id + HAVING + (D.name LIKE ? OR ?) AND + (D.type=? OR ?) + "; + + if(isset($input->sort->field) && $input->sort->field != "") { + if($input->sort->field == "id") { + $sql .= "ORDER BY id"; + } else if($input->sort->field == "name") { + $sql .= "ORDER BY name"; + } else if($input->sort->field == "type") { + $sql .= "ORDER BY type"; + } else if($input->sort->field == "records") { + $sql .= "ORDER BY records"; + } + + if(isset($input->sort->order)) { + if($input->sort->order == 0) { + $sql .= " DESC"; + } else if($input->sort->order == 1) { + $sql .= " ASC"; + } } } + + $stmt = $db->prepare($sql); + + if(isset($input->name)) { + $name_filter = "%" . $input->name . "%"; + $name_filter_used = 0; + } else { + $name_filter = ""; + $name_filter_used = 1; + } + + $id_filter = $_SESSION['id']; + $id_filter_used = (int)($_SESSION['type'] == "admin" ? 1 : 0); + + if(isset($input->type)) { + $type_filter = $input->type; + $type_filter_used = 0; + } else { + $type_filter = ""; + $type_filter_used = 1; + } + + $stmt->bind_param("sisiii", + $id_filter, $id_filter_used, + $name_filter, $name_filter_used, + $type_filter, $type_filter_used + ); + $stmt->execute(); + + $result = $stmt->get_result(); + + $retval = Array(); + + while($obj = $result->fetch_object()) { + $retval[] = $obj; + } } -$stmt = $db->prepare($sql); +if(isset($input->action) && $input->action == "deleteDomain") { + $domainId = $input->id; + + $db->autocommit(false); + + $stmt = $db->prepare("DELETE FROM permissions WHERE domain=?"); + $stmt->bind_param("i", $domainId); + $stmt->execute(); + $stmt->close(); + + $stmt = $db->prepare("DELETE FROM records WHERE domain_id=?"); + $stmt->bind_param("i", $domainId); + $stmt->execute(); + $stmt->close(); + + $stmt = $db->prepare("DELETE FROM domains WHERE id=?"); + $stmt->bind_param("i", $domainId); + $stmt->execute(); + $stmt->close(); + + $db->commit(); +} -if(isset($input->name)) { - $name_filter = "%" . $input->name . "%"; - $name_filter_used = 0; +if(isset($retval)) { + echo json_encode($retval); } else { - $name_filter = ""; - $name_filter_used = 1; + echo "{}"; } - -$id_filter = $_SESSION['id']; -$id_filter_used = (int)($_SESSION['type'] == "admin" ? 1 : 0); - -if(isset($input->type)) { - $type_filter = $input->type; - $type_filter_used = 0; -} else { - $type_filter = ""; - $type_filter_used = 1; -} - -$stmt->bind_param("sisiii", - $id_filter, $id_filter_used, - $name_filter, $name_filter_used, - $type_filter, $type_filter_used -); -$stmt->execute(); - -$result = $stmt->get_result(); - -$retval = Array(); - -while($obj = $result->fetch_object()) { - $retval[] = $obj; -} - -echo json_encode($retval); diff --git a/domains.php b/domains.php index b356cd9..dab1764 100644 --- a/domains.php +++ b/domains.php @@ -83,5 +83,18 @@ limitations under the License. + diff --git a/js/domains.js b/js/domains.js index d7d32c5..39b3d4e 100644 --- a/js/domains.js +++ b/js/domains.js @@ -68,6 +68,8 @@ function requestData() { restrictions.type = searchType; } + restrictions.action = "getDomains"; + $.post( "api/domains.php", JSON.stringify(restrictions), @@ -86,7 +88,8 @@ function recreateTable(data) { .append('' + item.id + '') .append('' + item.name + '') .append('' + item.type + '') - .append('' + item.records + ''); + .append('' + item.records + '') + .append(''); }); @@ -98,4 +101,42 @@ function recreateTable(data) { location.assign('edit-master.php#' + id); } }); + + $('#table-domains>tbody>tr>td>span.glyphicon-trash').click(function() { + $(this).parent().parent().unbind(); + deleteDomain.call(this); + }); +} + +function deleteDomain() { + var deleteId = $(this).parent().parent().children('td').eq(0).text(); + var deleteZone = $(this).parent().parent().children('td').eq(1).text(); + var rowToRemove = $(this).parent().parent(); + + $('#zoneToDelete').text(deleteZone); + + $('#deleteConfirm #buttonDelete').click(function() { + deleteDomainWithId(deleteId, function() { + $('#deleteConfirm').modal("hide"); + $(rowToRemove).remove(); + }); + }); + + $('#deleteConfirm').modal(); +} + +function deleteDomainWithId(id, callback) { + var data = { + action: "deleteDomain", + id: id + }; + + $.post( + "api/domains.php", + JSON.stringify(data), + function() { + callback(); + }, + "json" + ); } \ No newline at end of file