From 646fb076469c5d03f52cf8a774e10950a8be4cc6 Mon Sep 17 00:00:00 2001 From: Eirik Th S Date: Fri, 23 Apr 2021 02:25:03 +0200 Subject: [PATCH] Drag and drop items, fix stability for managing items --- css/index.css | 16 ++- plan/do.php | 80 +++++++++++--- plan/plan.js | 273 +++++++++++++++++++++++++--------------------- webdata/setup.php | 25 +++-- 4 files changed, 240 insertions(+), 154 deletions(-) diff --git a/css/index.css b/css/index.css index 0e5a3b3..cae62fe 100644 --- a/css/index.css +++ b/css/index.css @@ -75,15 +75,21 @@ span.price { } -.addItemForm input { +.addItemForm div.form-control { transition: width 0.5s; } -.addItemForm input:not([type="submit"],[type="image"]):focus { +/* .addItemForm div.form-control:not([type="submit"],[type="image"]):focus-within { */ +.addItemForm div.form-control:focus-within { width: 40%; } +.addItemForm div.form-control input { + border: none; +} + .addItemForm input[type="image"] { padding-left: 5px; padding-right: 5px; + height: 100%; } .remItem { @@ -99,6 +105,8 @@ span.price { /* filter color source: https://codepen.io/sosuke/full/Pjoqqp */ } -.addItemForm3 div:focus-within { - width: 80%; + +.drag-over { + border-bottom: dashed 3px red; + border-bottom-width: 1px; } \ No newline at end of file diff --git a/plan/do.php b/plan/do.php index 3c29edd..290ad62 100644 --- a/plan/do.php +++ b/plan/do.php @@ -72,8 +72,8 @@ if(!empty($data) && isset($user_id)){ returns("Missing a value: $temp", 1); } - if( addItem($data['storeID'], $data['name'], $data['price']) ){ - returns(); + if( ($itemID = addItem($data['storeID'], $data['name'], $data['price'])) !== false ){ + returns($itemID); } else { returns($db->error,1); @@ -82,11 +82,11 @@ if(!empty($data) && isset($user_id)){ else if($data['plan'] == "remItem"){ - if(($temp = checkArgs(array("storeID"=>@$data['storeID'], "position"=>@$data['position'], "price"=>@$data['price']))) !== true){ + if(($temp = checkArgs(array("storeID"=>@$data['storeID'], "itemID"=>@$data['itemID'], "price"=>@$data['price']))) !== true){ returns("Missing a value: $temp", 1); } - if( remItem($data['storeID'], $data['position'], $data['price']) ){ + if( remItem($data['storeID'], $data['itemID'], $data['price']) ){ returns(); } else { @@ -96,13 +96,30 @@ if(!empty($data) && isset($user_id)){ } } + // UPDATE ITEM AMOUNT + + + // UPDATE ITEM POSITION + else if($data['plan'] == 'moveItem'){ + + if(($temp = checkArgs(array("storeID"=>@$data['storeID'], "itemID"=>@$data['itemID'], "afterID"=>@$data['afterID']))) !== true){ + returns("Missing a value: $temp", 1); + } + + if( moveItem($data['storeID'], $data['itemID'], $data['afterID']) ){ + returns(); + } + + returns($db->error,1); + } + else { - $sql = "SELECT * FROM plan_store WHERE `user_id` = '$user_id'"; + $sql = "SELECT `plan_store_id`, `name`, `created` FROM plan_store WHERE `user_id` = '$user_id'"; $result = $db->query($sql); while($stores = $result->fetch_assoc()){ - if($result2 = $db->query("SELECT * FROM plan_store_item WHERE `plan_store_id` = '$stores[plan_store_id]'")){ + if($result2 = $db->query("SELECT `plan_item_id`, `name`, `price`, `amount` FROM plan_store_item WHERE `plan_store_id` = '$stores[plan_store_id]' ORDER BY pos")){ $stores['items'] = []; if($result2->num_rows > 0){ @@ -252,24 +269,61 @@ function deleteStore($storeID, $storeName, $itemsLength){ function addItem($storeID, $name, $price){ global $db, $user_id; - $insertItemSQL = "INSERT INTO plan_store_item (`plan_store_id`, `name`, `price`) VALUES ((SELECT plan_store_id FROM plan_store WHERE `user_id` = '$user_id' AND `plan_store_id` = '$storeID'), '$name', $price);"; + $verifyUserOwnershipSQL = "SELECT plan_store_id FROM plan_store WHERE `user_id` = '$user_id' AND plan_store_id = '$storeID'"; + + $insertItemSQL = "INSERT INTO plan_store_item (`plan_store_id`, `pos`, `name`, `price`) + SELECT ($verifyUserOwnershipSQL), count(0)+1, '$name', $price FROM plan_store_item WHERE plan_store_id = '$storeID';"; + if($db->query($insertItemSQL)){ + return $db->insert_id; + } + return false; +} + +function remItem($storeID, $itemID, $price){ + global $db, $user_id; + + $verifyUserOwnershipSQL = "SELECT `plan_store_id` FROM plan_store WHERE `user_id` = '$user_id' AND `plan_store_id` = '$storeID'"; + $findRowSql = "SELECT `plan_item_id` FROM plan_store_item WHERE `plan_store_id` = ($verifyUserOwnershipSQL) AND `plan_item_id` = '$itemID'"; + $removeItemsql = "DELETE FROM plan_store_item WHERE `plan_item_id` = ($findRowSql) AND `price` = '$price';"; + if($db->query($removeItemsql) && mysqli_affected_rows($db) > 0){ return true; } return false; } -function remItem($storeID, $pos, $price){ +function moveItem($storeID, $itemID, $afterID){ global $db, $user_id; $verifyUserOwnershipSQL = "SELECT `plan_store_id` FROM plan_store WHERE `user_id` = '$user_id' AND `plan_store_id` = '$storeID'"; - $findRowSql = "SELECT `plan_item_id` FROM plan_store_item WHERE `plan_store_id` = ($verifyUserOwnershipSQL) LIMIT $pos, 1"; - $removeItemsql = "DELETE FROM plan_store_item WHERE `plan_item_id` = ($findRowSql) AND `price` = '$price';"; - if($db->query($removeItemsql)){ - if(mysqli_affected_rows($db) > 0){ + $getStoreItemsSQL = "SELECT plan_item_id FROM plan_store_item WHERE `plan_store_id` = ($verifyUserOwnershipSQL) ORDER BY if(pos is \N,1,0), pos;"; + + if($getStoreItems = $db->query($getStoreItemsSQL)){ + + $position = 1; + $newQuery = ""; + + if($afterID == 0){ + $newQuery .= "UPDATE plan_store_item SET pos = $position WHERE plan_item_id = $itemID;"; + $position++; + } + + while($row = $getStoreItems->fetch_assoc()){ + + if($row['plan_item_id'] != $itemID){ + $newQuery .= "UPDATE plan_store_item SET pos = $position WHERE plan_item_id = $row[plan_item_id];"; + $position++; + } + + if($row['plan_item_id'] == $afterID){ + $newQuery .= "UPDATE plan_store_item SET pos = $position WHERE plan_item_id = $itemID;"; + $position++; + } + } + + if($newQuery != "" && $db->multi_query($newQuery)){ return true; } - return false; } return false; } diff --git a/plan/plan.js b/plan/plan.js index 19ca946..149e6b9 100644 --- a/plan/plan.js +++ b/plan/plan.js @@ -17,13 +17,21 @@ class Store { html += " remove store"; html += " "; html += "
"; - html += "