Allow deleting a product
This commit is contained in:
parent
1b5b503651
commit
0a79d646cc
6 changed files with 177 additions and 171 deletions
|
@ -28,6 +28,18 @@ switch ($_SERVER['REQUEST_METHOD']) {
|
||||||
$response['success'] = true;
|
$response['success'] = true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'DELETE':
|
||||||
|
parse_str(file_get_contents("php://input"), $_DELETE);
|
||||||
|
|
||||||
|
if (isset($_DELETE['productID'])) {
|
||||||
|
$database->query('DELETE FROM `products`
|
||||||
|
WHERE `id` = ' . $_DELETE['productID'] . '
|
||||||
|
;');
|
||||||
|
|
||||||
|
$response['success'] = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
echo json_encode($response);
|
echo json_encode($response);
|
||||||
|
|
|
@ -6,13 +6,140 @@ $(function() {
|
||||||
'get wishlists' : '/includes/api/wishlists.php',
|
'get wishlists' : '/includes/api/wishlists.php',
|
||||||
'delete wishlist' : '/includes/api/wishlists.php',
|
'delete wishlist' : '/includes/api/wishlists.php',
|
||||||
'update product status': '/includes/api/products.php',
|
'update product status': '/includes/api/products.php',
|
||||||
|
'delete product' : '/includes/api/products.php',
|
||||||
};
|
};
|
||||||
|
|
||||||
$('.ui.dropdown.wishlists').dropdown({
|
$('.ui.dropdown.wishlists').dropdown({
|
||||||
filterRemoteData: true
|
filterRemoteData: true
|
||||||
});
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Refresh Wishlist
|
||||||
|
*/
|
||||||
wishlistRefresh();
|
wishlistRefresh();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Commit to Product
|
||||||
|
*/
|
||||||
|
$('.ui.button.commit').on('click', function() {
|
||||||
|
var button = $(this);
|
||||||
|
var card = button.closest('.ui.card');
|
||||||
|
var column = card.closest('.column');
|
||||||
|
|
||||||
|
$('body')
|
||||||
|
.modal({
|
||||||
|
title: 'Really commit?',
|
||||||
|
content: 'Would you really like to commit to this purchase? It will no longer appear in the wishlist anymore.',
|
||||||
|
class: 'tiny',
|
||||||
|
actions: [
|
||||||
|
{
|
||||||
|
text: 'Yes, commit',
|
||||||
|
class: 'approve primary'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: 'Cancel',
|
||||||
|
class: ''
|
||||||
|
}
|
||||||
|
],
|
||||||
|
onApprove: function() {
|
||||||
|
/**
|
||||||
|
* Update product status
|
||||||
|
*/
|
||||||
|
button.api({
|
||||||
|
action: 'update product status',
|
||||||
|
method: 'PUT',
|
||||||
|
data: {
|
||||||
|
productID: card.data('id'),
|
||||||
|
productStatus: 'unavailable'
|
||||||
|
},
|
||||||
|
on: 'now',
|
||||||
|
onResponse: function(response) {
|
||||||
|
return response;
|
||||||
|
},
|
||||||
|
successTest: function(response) {
|
||||||
|
return response.success || false;
|
||||||
|
},
|
||||||
|
onComplete: function(response, element, xhr) {
|
||||||
|
|
||||||
|
},
|
||||||
|
onSuccess: function(response, element, xhr) {
|
||||||
|
column.fadeOut();
|
||||||
|
},
|
||||||
|
onFailure: function(response, element, xhr) {
|
||||||
|
|
||||||
|
},
|
||||||
|
onError: function(errorMessage, element, xhr) {
|
||||||
|
|
||||||
|
},
|
||||||
|
onAbort: function(errorMessage, element, xhr) {
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.modal('show');
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete Product
|
||||||
|
*/
|
||||||
|
$('.ui.button.delete').on('click', function() {
|
||||||
|
var button = $(this);
|
||||||
|
var card = button.closest('.ui.card');
|
||||||
|
var column = card.closest('.column');
|
||||||
|
|
||||||
|
$('body')
|
||||||
|
.modal({
|
||||||
|
title: 'Really delete?',
|
||||||
|
content: 'Would you really like to delete to this product? It will be gone forever.',
|
||||||
|
class: 'tiny',
|
||||||
|
actions: [
|
||||||
|
{
|
||||||
|
text: 'Yes, delete',
|
||||||
|
class: 'approve primary'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: 'Cancel',
|
||||||
|
class: ''
|
||||||
|
}
|
||||||
|
],
|
||||||
|
onApprove: function() {
|
||||||
|
/**
|
||||||
|
* Delete product
|
||||||
|
*/
|
||||||
|
button.api({
|
||||||
|
action: 'delete product',
|
||||||
|
method: 'DELETE',
|
||||||
|
data: {
|
||||||
|
productID: card.data('id'),
|
||||||
|
},
|
||||||
|
on: 'now',
|
||||||
|
onResponse: function(response) {
|
||||||
|
return response;
|
||||||
|
},
|
||||||
|
successTest: function(response) {
|
||||||
|
return response.success || false;
|
||||||
|
},
|
||||||
|
onComplete: function(response, element, xhr) {
|
||||||
|
|
||||||
|
},
|
||||||
|
onSuccess: function(response, element, xhr) {
|
||||||
|
column.fadeOut();
|
||||||
|
},
|
||||||
|
onFailure: function(response, element, xhr) {
|
||||||
|
|
||||||
|
},
|
||||||
|
onError: function(errorMessage, element, xhr) {
|
||||||
|
|
||||||
|
},
|
||||||
|
onAbort: function(errorMessage, element, xhr) {
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.modal('show');
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
function wishlistRefresh() {
|
function wishlistRefresh() {
|
||||||
|
|
|
@ -22,66 +22,4 @@ $(function() {
|
||||||
})
|
})
|
||||||
.modal('show');
|
.modal('show');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Commit
|
|
||||||
*/
|
|
||||||
$('.ui.button.commit').on('click', function() {
|
|
||||||
var button = $(this);
|
|
||||||
var card = button.closest('.ui.card');
|
|
||||||
var column = card.closest('.column');
|
|
||||||
|
|
||||||
$('body')
|
|
||||||
.modal({
|
|
||||||
title: 'Really commit?',
|
|
||||||
content: 'Would you really like to commit to this purchase? It will no longer appear in the wishlist anymore.',
|
|
||||||
class: 'tiny',
|
|
||||||
actions: [
|
|
||||||
{
|
|
||||||
text: 'Yes, commit',
|
|
||||||
class: 'approve primary'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
text: 'Cancel',
|
|
||||||
class: ''
|
|
||||||
}
|
|
||||||
],
|
|
||||||
onApprove: function() {
|
|
||||||
/**
|
|
||||||
* Update product status
|
|
||||||
*/
|
|
||||||
button.api({
|
|
||||||
action: 'update product status',
|
|
||||||
method: 'PUT',
|
|
||||||
data: {
|
|
||||||
productID: card.data('id'),
|
|
||||||
productStatus: 'unavailable'
|
|
||||||
},
|
|
||||||
on: 'now',
|
|
||||||
onResponse: function(response) {
|
|
||||||
return response;
|
|
||||||
},
|
|
||||||
successTest: function(response) {
|
|
||||||
return response.success || false;
|
|
||||||
},
|
|
||||||
onComplete: function(response, element, xhr) {
|
|
||||||
|
|
||||||
},
|
|
||||||
onSuccess: function(response, element, xhr) {
|
|
||||||
column.fadeOut();
|
|
||||||
},
|
|
||||||
onFailure: function(response, element, xhr) {
|
|
||||||
|
|
||||||
},
|
|
||||||
onError: function(errorMessage, element, xhr) {
|
|
||||||
|
|
||||||
},
|
|
||||||
onAbort: function(errorMessage, element, xhr) {
|
|
||||||
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.modal('show');
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
|
@ -13,8 +13,8 @@ class Wishlist
|
||||||
private int $id;
|
private int $id;
|
||||||
private string $hash;
|
private string $hash;
|
||||||
|
|
||||||
public mixed $data;
|
public array $data;
|
||||||
public mixed $products;
|
public array $products = array();
|
||||||
|
|
||||||
public bool $exists = false;
|
public bool $exists = false;
|
||||||
|
|
||||||
|
@ -57,14 +57,24 @@ class Wishlist
|
||||||
->fetchAll();
|
->fetchAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getCards(): void
|
public function getCards($options = array()): void
|
||||||
{
|
{
|
||||||
$products = array_filter($this->products, function ($product) {
|
/**
|
||||||
if ('unavailable' !== $product['status']) {
|
* Exclude
|
||||||
return true;
|
*/
|
||||||
}
|
$exclude = isset($options['exclude']) ? $options['exclude'] : array();
|
||||||
});
|
|
||||||
|
|
||||||
|
if ($exclude) {
|
||||||
|
$products = array_filter($this->products, function ($product) use ($exclude) {
|
||||||
|
return !in_array($product['status'], $exclude);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
$products = $this->products;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cards
|
||||||
|
*/
|
||||||
if (!empty($products)) { ?>
|
if (!empty($products)) { ?>
|
||||||
<div class="ui three column stackable grid wishlist-cards">
|
<div class="ui three column stackable grid wishlist-cards">
|
||||||
|
|
||||||
|
@ -122,7 +132,11 @@ class Wishlist
|
||||||
<?php } ?>
|
<?php } ?>
|
||||||
</div>
|
</div>
|
||||||
<div class="extra content">
|
<div class="extra content">
|
||||||
|
<?php if ($this->data['user'] === $_SESSION['user']['id']) { ?>
|
||||||
|
<a class="ui tiny red button delete">Delete</a>
|
||||||
|
<?php } else { ?>
|
||||||
<a class="ui tiny button commit">Commit</a>
|
<a class="ui tiny button commit">Commit</a>
|
||||||
|
<?php } ?>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -6,23 +6,17 @@
|
||||||
* @author Jay Trees <github.jay@grandel.anonaddy.me>
|
* @author Jay Trees <github.jay@grandel.anonaddy.me>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
use wishthis\{Page, User};
|
use wishthis\{Page, User, Wishlist};
|
||||||
use Embed\Embed;
|
|
||||||
|
|
||||||
$page = new page(__FILE__, 'View wishlist');
|
$page = new page(__FILE__, 'View wishlist');
|
||||||
$page->header();
|
$page->header();
|
||||||
$page->navigation();
|
$page->navigation();
|
||||||
|
|
||||||
$products = array();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get wishlist products
|
* Get wishlist products
|
||||||
*/
|
*/
|
||||||
if (isset($_GET['wishlist'])) {
|
if (isset($_GET['wishlist'])) {
|
||||||
$wishlist = $database->query('SELECT * FROM `wishlists`
|
$wishlist = new Wishlist(intval($_GET['wishlist']));
|
||||||
WHERE `id` = "' . $_GET['wishlist'] . '"')
|
|
||||||
->fetch();
|
|
||||||
$products = $user->getProducts($_GET['wishlist']);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -60,7 +54,7 @@ if (isset($_POST['wishlist_delete_id'])) {
|
||||||
<h2 class="ui header">Options</h1>
|
<h2 class="ui header">Options</h1>
|
||||||
<p>Wishlist related options.</p>
|
<p>Wishlist related options.</p>
|
||||||
|
|
||||||
<a class="ui small labeled icon button wishlist-share <?= !isset($_GET['wishlist']) ? 'disabled' : '' ?>" href="/?wishlist=<?= $wishlist['hash'] ?? '' ?>" target="_blank">
|
<a class="ui small labeled icon button wishlist-share <?= !isset($_GET['wishlist']) ? 'disabled' : '' ?>" href="/?wishlist=<?= $wishlist->data['hash'] ?? '' ?>" target="_blank">
|
||||||
<i class="share icon"></i>
|
<i class="share icon"></i>
|
||||||
Share
|
Share
|
||||||
</a>
|
</a>
|
||||||
|
@ -76,96 +70,11 @@ if (isset($_POST['wishlist_delete_id'])) {
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<?php if (!empty($products)) { ?>
|
|
||||||
<div class="ui three column stackable grid">
|
|
||||||
|
|
||||||
<?php foreach ($products as $product) { ?>
|
|
||||||
<?php
|
<?php
|
||||||
/**
|
if (isset($_GET['wishlist'])) {
|
||||||
* @link https://github.com/oscarotero/Embed
|
$wishlist->getCards();
|
||||||
*/
|
}
|
||||||
$embed = new Embed();
|
|
||||||
$info = $embed->get($product['url']);
|
|
||||||
?>
|
?>
|
||||||
<div class="column">
|
|
||||||
<div class="ui fluid card">
|
|
||||||
|
|
||||||
<?php if ($info->image) { ?>
|
|
||||||
<div class="image">
|
|
||||||
<img src="<?= $info->image ?>" />
|
|
||||||
</div>
|
|
||||||
<?php } ?>
|
|
||||||
|
|
||||||
<div class="content">
|
|
||||||
<?php if ($info->title) { ?>
|
|
||||||
<div class="header">
|
|
||||||
<?php if ($info->url) { ?>
|
|
||||||
<a href="<?= $info->url ?>" target="_blank"><?= $info->title ?></a>
|
|
||||||
<?php } else { ?>
|
|
||||||
<?= $info->title ?>
|
|
||||||
<?php } ?>
|
|
||||||
</div>
|
|
||||||
<?php } ?>
|
|
||||||
|
|
||||||
<?php if ($info->keywords) { ?>
|
|
||||||
<div class="meta">
|
|
||||||
<?= $info->keywords ?>
|
|
||||||
</div>
|
|
||||||
<?php } ?>
|
|
||||||
|
|
||||||
<?php if ($info->description) { ?>
|
|
||||||
<div class="description">
|
|
||||||
<?= $info->description ?>
|
|
||||||
</div>
|
|
||||||
<?php } ?>
|
|
||||||
</div>
|
|
||||||
<div class="extra content">
|
|
||||||
<?php if ($info->publishedTime) { ?>
|
|
||||||
<span class="right floated">
|
|
||||||
<?= $info->publishedTime ?>
|
|
||||||
</span>
|
|
||||||
<?php } ?>
|
|
||||||
<?php if ($info->favicon) { ?>
|
|
||||||
<?php if ($info->providerName) { ?>
|
|
||||||
<img src="<?= $info->favicon ?>"
|
|
||||||
title="<?= $info->providerName ?>"
|
|
||||||
alt="<?= $info->providerName ?>"
|
|
||||||
/>
|
|
||||||
<?php } else { ?>
|
|
||||||
<img src="<?= $info->favicon ?>" />
|
|
||||||
<?php } ?>
|
|
||||||
<?php } ?>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<?php } ?>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<?php } else { ?>
|
|
||||||
<?php if (isset($_GET['wishlist'])) { ?>
|
|
||||||
<div class="ui icon message">
|
|
||||||
<i class="info circle icon"></i>
|
|
||||||
<div class="content">
|
|
||||||
<div class="header">
|
|
||||||
Empty
|
|
||||||
</div>
|
|
||||||
<p>The selected wishlist seems to be empty.</p>
|
|
||||||
<a class="ui mini button" href="/?page=wishlist-product-add">Add a product</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<?php } else { ?>
|
|
||||||
<div class="ui icon message">
|
|
||||||
<i class="info circle icon"></i>
|
|
||||||
<div class="content">
|
|
||||||
<div class="header">
|
|
||||||
No wishlist selected
|
|
||||||
</div>
|
|
||||||
<p>Select a wishlist to see it's products.</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<?php } ?>
|
|
||||||
<?php } ?>
|
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
|
|
|
@ -62,7 +62,13 @@ $page->navigation();
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<?php $wishlist->getCards() ?>
|
<?php
|
||||||
|
$wishlist->getCards(
|
||||||
|
array(
|
||||||
|
'exclude' => array('unavailable'),
|
||||||
|
)
|
||||||
|
);
|
||||||
|
?>
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue