12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- <?php
- include '../connection.php';
- try {
- $params = json_decode(file_get_contents('php://input'));
- $db->beginTransaction();
- // get the left and right bounds of the node so we can delete it and all its descendants
- $statement = $db->prepare("select lft, rgt from list where id = $params->id");
- if(!$statement->execute()) {
- throw new Exception(implode(', ', $statement->errorInfo()));
- }
- $bounds = $statement->fetch(PDO::FETCH_ASSOC);
- $leftBound = $bounds['lft'];
- $rightBound = $bounds['rgt'];
- // delete the node and all its descendants
- $statement = $db->prepare("delete from list where lft >= $leftBound and rgt <= $rightBound");
- if(!$statement->execute()) {
- $db->rollBack();
- throw new Exception(implode(', ', $statement->errorInfo()));
- }
- // calculate the amount of empty space left after deleting the nodes.
- $emptySpace = $rightBound - $leftBound + 1;
- // decrement by the empty space amount the lft and rgt values for all nodes that come after the nodes that were deleted.
- $statement = $db->prepare("update list set lft = lft - $emptySpace where lft > $rightBound");
- if(!$statement->execute()) {
- $db->rollBack();
- throw new Exception(implode(', ', $statement->errorInfo()));
- }
- $statement = $db->prepare("update list set rgt = rgt - $emptySpace where rgt > $rightBound");
- if(!$statement->execute()) {
- $db->rollBack();
- throw new Exception(implode(', ', $statement->errorInfo()));
- }
- $jsonResult = array('success' => true);
- $db->commit();
- } catch(Exception $e) {
- $db->rollBack();
- $jsonResult = array(
- 'success' => false,
- 'message' => $e->getMessage()
- );
- }
- echo json_encode($jsonResult);
- ?>
|