diff --git a/endpoints/payments/sort.php b/endpoints/payments/sort.php new file mode 100644 index 0000000..14c5118 --- /dev/null +++ b/endpoints/payments/sort.php @@ -0,0 +1,34 @@ +prepare($sql); + $stmt->bindParam(':order', $order, SQLITE3_INTEGER); + $stmt->bindParam(':paymentMethodId', $paymentMethodId, SQLITE3_INTEGER); + $result = $stmt->execute(); + $order++; + } + + $response = [ + "success" => true, + "message" => translate("sort_order_saved", $i18n) + ]; + echo json_encode($response); +} else { + $response = [ + "success" => false, + "errorMessage" => translate("session_expired", $i18n) + ]; + echo json_encode($response); + die(); +} + +?> \ No newline at end of file diff --git a/includes/version.php b/includes/version.php index ac52646..91608ea 100644 --- a/includes/version.php +++ b/includes/version.php @@ -1,3 +1,3 @@ \ No newline at end of file diff --git a/migrations/000011.php b/migrations/000011.php new file mode 100644 index 0000000..743f476 --- /dev/null +++ b/migrations/000011.php @@ -0,0 +1,14 @@ +query("SELECT * FROM pragma_table_info('payment_methods') WHERE name='order'"); + $columnRequired = $columnQuery->fetchArray(SQLITE3_ASSOC) === false; + + if ($columnRequired) { + $db->exec('ALTER TABLE payment_methods ADD COLUMN `order` INTEGER DEFAULT 0'); + $db->exec('UPDATE payment_methods SET `order` = id'); + } + + +?> \ No newline at end of file diff --git a/scripts/settings.js b/scripts/settings.js index e6a50cb..44da72b 100644 --- a/scripts/settings.js +++ b/scripts/settings.js @@ -460,7 +460,7 @@ document.body.addEventListener('click', function(e) { if (targetElement.classList && targetElement.classList.contains('payments-payment')) { let targetChild = e.target; do { - if (targetChild.classList && targetChild.classList.contains('payment-name')) { + if (targetChild.classList && (targetChild.classList.contains('payment-name') || targetChild.classList.contains('drag-icon') )) { return; } targetChild = targetChild.parentNode; @@ -680,6 +680,44 @@ function deletePaymentMethod(paymentId) { }); } +function savePaymentMethodsSorting() { + console.log("should save"); + const paymentMethods = document.getElementById('payments-list'); + const paymentMethodIds = Array.from(paymentMethods.children).map(paymentMethod => paymentMethod.dataset.paymentid); + + const formData = new FormData(); + paymentMethodIds.forEach(paymentMethodId => { + formData.append('paymentMethodIds[]', paymentMethodId); + }); + + fetch('endpoints/payments/sort.php', { + method: 'POST', + body: formData + }) + .then(response => response.json()) + .then(data => { + if (data.success) { + showSuccessMessage(data.message); + } else { + showErrorMessage(data.errorMessage); + } + }) + .catch(error => { + showErrorMessage(translate('unknown_error')); + }); +} + +var el = document.getElementById('payments-list'); +var sortable = Sortable.create(el, { + handle: '.drag-icon', + ghostClass: 'sortable-ghost', + delay: 500, + delayOnTouchOnly: true, + touchStartThreshold: 5, + onEnd: function (evt) { + savePaymentMethodsSorting(); + }, +}); document.addEventListener('DOMContentLoaded', function() { @@ -948,4 +986,4 @@ var sortable = Sortable.create(el, { onEnd: function (evt) { saveCategorySorting(); }, -}); \ No newline at end of file +}); diff --git a/settings.php b/settings.php index c5a67fa..83f4731 100644 --- a/settings.php +++ b/settings.php @@ -357,7 +357,7 @@