Merge branch 'develop' into stable
This commit is contained in:
commit
698df19d3e
20 changed files with 296 additions and 69 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1,4 +1,5 @@
|
||||||
/vendor/*
|
/vendor/*
|
||||||
|
!/vendor/autoload.php
|
||||||
!/vendor/embed
|
!/vendor/embed
|
||||||
!/vendor/embed/embed
|
!/vendor/embed/embed
|
||||||
!/vendor/laminas
|
!/vendor/laminas
|
||||||
|
|
|
@ -17,8 +17,8 @@ require '../../index.php';
|
||||||
|
|
||||||
switch ($_SERVER['REQUEST_METHOD']) {
|
switch ($_SERVER['REQUEST_METHOD']) {
|
||||||
case 'GET':
|
case 'GET':
|
||||||
if (isset($_GET['userid'])) {
|
if (isset($_GET['userid']) || isset($_SESSION['user']['id'])) {
|
||||||
$user = new User($_GET['userid']);
|
$user = isset($_GET['userid']) ? new User($_GET['userid']) : new User();
|
||||||
$wishlists = $user->getWishlists();
|
$wishlists = $user->getWishlists();
|
||||||
$wishlists = array_map(function ($wishlist) {
|
$wishlists = array_map(function ($wishlist) {
|
||||||
return array(
|
return array(
|
||||||
|
@ -32,6 +32,16 @@ switch ($_SERVER['REQUEST_METHOD']) {
|
||||||
$response['success'] = true;
|
$response['success'] = true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'DELETE':
|
||||||
|
parse_str(file_get_contents("php://input"), $_DELETE);
|
||||||
|
|
||||||
|
$database->query('DELETE FROM `wishlists`
|
||||||
|
WHERE `id` = ' . $_DELETE['wishlistID'] . '
|
||||||
|
;');
|
||||||
|
|
||||||
|
$response['success'] = true;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
echo json_encode($response);
|
echo json_encode($response);
|
||||||
|
|
|
@ -1,4 +1,14 @@
|
||||||
|
/**
|
||||||
|
* Footer
|
||||||
|
*/
|
||||||
.ui.footer {
|
.ui.footer {
|
||||||
position: sticky;
|
position: sticky;
|
||||||
top: 100%;
|
top: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Modal
|
||||||
|
*/
|
||||||
|
.ui.modal > .actions {
|
||||||
|
text-align: inherit;
|
||||||
|
}
|
||||||
|
|
|
@ -1,38 +1,47 @@
|
||||||
$(function() {
|
$(function() {
|
||||||
|
/**
|
||||||
|
* URL Parameter
|
||||||
|
*/
|
||||||
|
const urlParams = new URLSearchParams(window.location.search);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fomantic UI
|
||||||
|
*/
|
||||||
$.fn.api.settings.api = {
|
$.fn.api.settings.api = {
|
||||||
'get wishlists' : '/includes/api/wishlists.php'
|
'get wishlists' : '/includes/api/wishlists.php',
|
||||||
|
'delete wishlist' : '/includes/api/wishlists.php'
|
||||||
};
|
};
|
||||||
|
|
||||||
$('.ui.dropdown.wishlists').dropdown({
|
$('.ui.dropdown.wishlists').dropdown({
|
||||||
filterRemoteData: true
|
filterRemoteData: true
|
||||||
});
|
});
|
||||||
|
|
||||||
|
wishlistRefresh();
|
||||||
|
});
|
||||||
|
|
||||||
|
function wishlistRefresh() {
|
||||||
$('.ui.dropdown.wishlists').api({
|
$('.ui.dropdown.wishlists').api({
|
||||||
action: 'get wishlists',
|
action: 'get wishlists',
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
data : {
|
|
||||||
userid: 1
|
|
||||||
},
|
|
||||||
on: 'now',
|
on: 'now',
|
||||||
onResponse: function(response) {
|
onResponse: function(response) {
|
||||||
console.log('onResponse');
|
|
||||||
// make some adjustments to response
|
|
||||||
return response;
|
return response;
|
||||||
},
|
},
|
||||||
successTest: function(response) {
|
successTest: function(response) {
|
||||||
console.log('successTest');
|
|
||||||
// test whether a JSON response is valid
|
|
||||||
return response.success || false;
|
return response.success || false;
|
||||||
},
|
},
|
||||||
onComplete: function(response, element, xhr) {
|
onComplete: function(response, element, xhr) {
|
||||||
$('.ui.dropdown.wishlists').removeClass('loading');
|
$('.ui.dropdown.wishlists').removeClass('loading');
|
||||||
},
|
},
|
||||||
onSuccess: function(response, element, xhr) {
|
onSuccess: function(response, element, xhr) {
|
||||||
$('.ui.dropdown.wishlists')
|
$('.ui.dropdown.wishlists').dropdown({
|
||||||
.dropdown({
|
values: response.results,
|
||||||
values: response.results
|
placeholder: 'No wishlist selected.'
|
||||||
})
|
})
|
||||||
.dropdown('set selected', response.results[0].value);
|
|
||||||
|
if (urlParams.has('wishlist')) {
|
||||||
|
$('.ui.dropdown.wishlists').dropdown('set selected', urlParams.get('wishlist'));
|
||||||
|
}
|
||||||
},
|
},
|
||||||
onFailure: function(response, element, xhr) {
|
onFailure: function(response, element, xhr) {
|
||||||
console.log('onFailure');
|
console.log('onFailure');
|
||||||
|
@ -47,4 +56,4 @@ $(function() {
|
||||||
// navigated to a new page, CORS issue, or user canceled request
|
// navigated to a new page, CORS issue, or user canceled request
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
}
|
||||||
|
|
9
includes/assets/js/register.js
Normal file
9
includes/assets/js/register.js
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
$(function() {
|
||||||
|
$('.ui.form').form({
|
||||||
|
on: 'blur',
|
||||||
|
fields: {
|
||||||
|
email: 'email',
|
||||||
|
password: ['minLength[6]', 'empty'],
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
75
includes/assets/js/wishlist-view.js
Normal file
75
includes/assets/js/wishlist-view.js
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
$(function() {
|
||||||
|
/**
|
||||||
|
* Delete Wishlist
|
||||||
|
*/
|
||||||
|
$('.ui.dropdown.wishlists').on('change', function() {
|
||||||
|
var wishlistValue = $('.ui.dropdown.wishlists').dropdown('get value');
|
||||||
|
|
||||||
|
$('[name="wishlist_delete_id"]').val(wishlistValue);
|
||||||
|
|
||||||
|
if (wishlistValue) {
|
||||||
|
$('.wishlist-view').removeClass('disabled');
|
||||||
|
$('.wishlist-delete button').removeClass('disabled');
|
||||||
|
} else {
|
||||||
|
$('.wishlist-view').addClass('disabled');
|
||||||
|
$('.wishlist-delete button').addClass('disabled');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$('.wishlist-delete').on('submit', function(event) {
|
||||||
|
var wishlistValue = $('.ui.dropdown.wishlists').dropdown('get value');
|
||||||
|
|
||||||
|
if (wishlistValue) {
|
||||||
|
$('body')
|
||||||
|
.modal({
|
||||||
|
title: 'Really delete?',
|
||||||
|
class: 'tiny',
|
||||||
|
content: 'Do you really want to delete the wishlist <strong>' + $('.ui.dropdown.wishlists').dropdown('get text') + '</strong>?',
|
||||||
|
actions: [
|
||||||
|
{
|
||||||
|
text: 'Yes, delete',
|
||||||
|
class: 'approve red'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: 'No, keep',
|
||||||
|
class: 'deny'
|
||||||
|
},
|
||||||
|
],
|
||||||
|
onApprove: function() {
|
||||||
|
$('.ui.dropdown.wishlists').api({
|
||||||
|
action: 'delete wishlist',
|
||||||
|
method: 'DELETE',
|
||||||
|
data: {
|
||||||
|
wishlistID: wishlistValue
|
||||||
|
},
|
||||||
|
on: 'now',
|
||||||
|
onResponse: function(response) {
|
||||||
|
return response;
|
||||||
|
},
|
||||||
|
successTest: function(response) {
|
||||||
|
return response.success || false;
|
||||||
|
},
|
||||||
|
onComplete: function(response, element, xhr) {
|
||||||
|
|
||||||
|
},
|
||||||
|
onSuccess: function(response, element, xhr) {
|
||||||
|
wishlistRefresh();
|
||||||
|
},
|
||||||
|
onFailure: function(response, element, xhr) {
|
||||||
|
|
||||||
|
},
|
||||||
|
onError: function(errorMessage, element, xhr) {
|
||||||
|
|
||||||
|
},
|
||||||
|
onAbort: function(errorMessage, element, xhr) {
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.modal('show');
|
||||||
|
}
|
||||||
|
|
||||||
|
event.preventDefault();
|
||||||
|
});
|
||||||
|
});
|
|
@ -14,8 +14,13 @@ class Options
|
||||||
{
|
{
|
||||||
public bool $updateAvailable = false;
|
public bool $updateAvailable = false;
|
||||||
|
|
||||||
|
public string $version;
|
||||||
|
|
||||||
public function __construct(private Database $database)
|
public function __construct(private Database $database)
|
||||||
{
|
{
|
||||||
|
$this->version = $this->getOption('version')
|
||||||
|
? $this->getOption('version')
|
||||||
|
: '0.1.0';
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getOption(string $key): string
|
public function getOption(string $key): string
|
||||||
|
|
|
@ -89,6 +89,15 @@ class Page
|
||||||
$scriptDefault = 'includes/assets/js/default.js';
|
$scriptDefault = 'includes/assets/js/default.js';
|
||||||
$scriptDefaultModified = filemtime($scriptDefault);
|
$scriptDefaultModified = filemtime($scriptDefault);
|
||||||
echo '<script defer src="' . $scriptDefault . '?m=' . $scriptDefaultModified . '"></script>';
|
echo '<script defer src="' . $scriptDefault . '?m=' . $scriptDefaultModified . '"></script>';
|
||||||
|
|
||||||
|
/** Page */
|
||||||
|
$scriptPage = 'includes/assets/js/' . $this->name . '.js';
|
||||||
|
|
||||||
|
if (file_exists($scriptPage)) {
|
||||||
|
$scriptPageModified = filemtime($scriptPage);
|
||||||
|
|
||||||
|
echo '<script defer src="' . $scriptPage . '?m=' . $scriptPageModified . '"></script>';
|
||||||
|
}
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<title><?= $this->title ?> - wishthis</title>
|
<title><?= $this->title ?> - wishthis</title>
|
||||||
|
@ -177,6 +186,14 @@ class Page
|
||||||
<div class="sixteen wide column">
|
<div class="sixteen wide column">
|
||||||
<h4 class="ui inverted header">wishthis</h4>
|
<h4 class="ui inverted header">wishthis</h4>
|
||||||
|
|
||||||
|
<div class="ui inverted link list">
|
||||||
|
<?php
|
||||||
|
global $options;
|
||||||
|
|
||||||
|
echo 'v' . $options->version;
|
||||||
|
?>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="ui inverted link list">
|
<div class="ui inverted link list">
|
||||||
<a class="item" href="https://github.com/grandeljay/wishthis" target="_blank"><i class="big github icon"></i></a>
|
<a class="item" href="https://github.com/grandeljay/wishthis" target="_blank"><i class="big github icon"></i></a>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -66,7 +66,7 @@ class User
|
||||||
$products = $database->query(
|
$products = $database->query(
|
||||||
'SELECT *
|
'SELECT *
|
||||||
FROM products
|
FROM products
|
||||||
WHERE wishlist = ' . $this->id . ';'
|
WHERE wishlist = ' . $wishlist . ';'
|
||||||
)->fetchAll();
|
)->fetchAll();
|
||||||
|
|
||||||
return $products;
|
return $products;
|
||||||
|
|
|
@ -15,8 +15,10 @@ $page->navigation();
|
||||||
|
|
||||||
<main>
|
<main>
|
||||||
<div class="ui container">
|
<div class="ui container">
|
||||||
|
<h1 class="ui header"><?= $page->title ?></h1>
|
||||||
|
|
||||||
<div class="ui segment">
|
<div class="ui segment">
|
||||||
<h1 class="ui header">Welcome to wishthis</h1>
|
<h2 class="ui header">Welcome to wishthis</h2>
|
||||||
<p>
|
<p>
|
||||||
wishthis is a simple, intuitive and modern plattform to create,
|
wishthis is a simple, intuitive and modern plattform to create,
|
||||||
manage and view your wishes for any kind of occasion.
|
manage and view your wishes for any kind of occasion.
|
||||||
|
|
|
@ -99,40 +99,42 @@ switch ($step) {
|
||||||
* Users
|
* Users
|
||||||
*/
|
*/
|
||||||
$database->query('CREATE TABLE `users` (
|
$database->query('CREATE TABLE `users` (
|
||||||
`id` int AUTO_INCREMENT,
|
`id` int PRIMARY KEY AUTO_INCREMENT,
|
||||||
`email` varchar(64) NOT NULL UNIQUE,
|
`email` varchar(64) NOT NULL UNIQUE,
|
||||||
`password` varchar(128) NOT NULL,
|
`password` varchar(128) NOT NULL
|
||||||
PRIMARY KEY (id)
|
|
||||||
);');
|
);');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Wishlists
|
* Wishlists
|
||||||
*/
|
*/
|
||||||
$database->query('CREATE TABLE `wishlists` (
|
$database->query('CREATE TABLE `wishlists` (
|
||||||
`id` int AUTO_INCREMENT,
|
`id` int PRIMARY KEY AUTO_INCREMENT,
|
||||||
`user` int NOT NULL,
|
`user` int NOT NULL,
|
||||||
`name` varchar(128) NOT NULL,
|
`name` varchar(128) NOT NULL,
|
||||||
PRIMARY KEY (id)
|
FOREIGN KEY (`user`)
|
||||||
|
REFERENCES `users` (`id`)
|
||||||
|
ON DELETE CASCADE
|
||||||
);');
|
);');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Products
|
* Products
|
||||||
*/
|
*/
|
||||||
$database->query('CREATE TABLE `products` (
|
$database->query('CREATE TABLE `products` (
|
||||||
`id` int NOT NULL AUTO_INCREMENT,
|
`id` int NOT NULL PRIMARY KEY AUTO_INCREMENT,
|
||||||
`wishlist` int NOT NULL,
|
`wishlist` int NOT NULL,
|
||||||
`url` VARCHAR(255) NOT NULL,
|
`url` VARCHAR(255) NOT NULL,
|
||||||
PRIMARY KEY (id)
|
FOREIGN KEY (`wishlist`)
|
||||||
|
REFERENCES `wishlists` (`id`)
|
||||||
|
ON DELETE CASCADE
|
||||||
);');
|
);');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Options
|
* Options
|
||||||
*/
|
*/
|
||||||
$database->query('CREATE TABLE `options` (
|
$database->query('CREATE TABLE `options` (
|
||||||
`id` int AUTO_INCREMENT,
|
`id` int PRIMARY KEY AUTO_INCREMENT,
|
||||||
`key` varchar(64) NOT NULL UNIQUE,
|
`key` varchar(64) NOT NULL UNIQUE,
|
||||||
`value` varchar(128) NOT NULL,
|
`value` varchar(128) NOT NULL
|
||||||
PRIMARY KEY (id)
|
|
||||||
);');
|
);');
|
||||||
|
|
||||||
$database->query('INSERT INTO `options`
|
$database->query('INSERT INTO `options`
|
||||||
|
@ -152,5 +154,3 @@ switch ($step) {
|
||||||
<?php
|
<?php
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
$page->footer();
|
|
||||||
|
|
|
@ -30,9 +30,9 @@ $page->navigation();
|
||||||
?>
|
?>
|
||||||
<main>
|
<main>
|
||||||
<div class="ui container">
|
<div class="ui container">
|
||||||
<div class="ui segment">
|
<h1 class="ui header"><?= $page->title ?></h1>
|
||||||
<h1 class="ui header">Login</h1>
|
|
||||||
|
|
||||||
|
<div class="ui segment">
|
||||||
<form class="ui form" method="post">
|
<form class="ui form" method="post">
|
||||||
<div class="field">
|
<div class="field">
|
||||||
<label>Email</label>
|
<label>Email</label>
|
||||||
|
|
30
includes/pages/logout.php
Normal file
30
includes/pages/logout.php
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* logout.php
|
||||||
|
*
|
||||||
|
* @author Jay Trees <github.jay@grandel.anonaddy.me>
|
||||||
|
*/
|
||||||
|
|
||||||
|
use wishthis\Page;
|
||||||
|
|
||||||
|
$page = new page(__FILE__, 'Logout');
|
||||||
|
|
||||||
|
session_destroy();
|
||||||
|
|
||||||
|
$page->header();
|
||||||
|
$page->navigation();
|
||||||
|
?>
|
||||||
|
<main>
|
||||||
|
<div class="ui container">
|
||||||
|
<h1 class="ui header"><?= $page->title ?></h1>
|
||||||
|
|
||||||
|
<div class="ui segment">
|
||||||
|
<h2 class="ui header">Goodbye</h2>
|
||||||
|
<p>You have been logged out.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
$page->footer();
|
|
@ -16,7 +16,7 @@ if (isset($_POST['email'], $_POST['password'])) {
|
||||||
("' . $_POST['email'] . '", "' . sha1($_POST['password']) . '")
|
("' . $_POST['email'] . '", "' . sha1($_POST['password']) . '")
|
||||||
;');
|
;');
|
||||||
|
|
||||||
header('Location: ?page=login');
|
header('Location: /?page=login');
|
||||||
die();
|
die();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ $page->navigation();
|
||||||
<main>
|
<main>
|
||||||
<div class="ui container">
|
<div class="ui container">
|
||||||
<div class="ui segment">
|
<div class="ui segment">
|
||||||
<h1 class="ui header">Register</h1>
|
<h1 class="ui header"><?= $page->title ?></h1>
|
||||||
|
|
||||||
<form class="ui form" method="post">
|
<form class="ui form" method="post">
|
||||||
<div class="field">
|
<div class="field">
|
||||||
|
@ -38,6 +38,8 @@ $page->navigation();
|
||||||
<input type="password" name="password" />
|
<input type="password" name="password" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="ui error message"></div>
|
||||||
|
|
||||||
<input class="ui primary button" type="submit" value="Register" />
|
<input class="ui primary button" type="submit" value="Register" />
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -16,9 +16,7 @@ if (isset($_POST['name'])) {
|
||||||
(' . $_SESSION['user']['id'] . ', "' . $_POST['name'] . '")
|
(' . $_SESSION['user']['id'] . ', "' . $_POST['name'] . '")
|
||||||
;');
|
;');
|
||||||
|
|
||||||
$_SESSION['user'] = $user;
|
header('Location: /?page=wishlist-product-add');
|
||||||
|
|
||||||
header('Location: ?page=home');
|
|
||||||
die();
|
die();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,8 +25,9 @@ $page->navigation();
|
||||||
?>
|
?>
|
||||||
<main>
|
<main>
|
||||||
<div class="ui container">
|
<div class="ui container">
|
||||||
|
<h1 class="ui header"><?= $page->title ?></h1>
|
||||||
|
|
||||||
<div class="ui segment">
|
<div class="ui segment">
|
||||||
<h1 class="ui header">Create a wishlist</h1>
|
|
||||||
<form class="ui form" method="post">
|
<form class="ui form" method="post">
|
||||||
<div class="field">
|
<div class="field">
|
||||||
<label>Name</label>
|
<label>Name</label>
|
||||||
|
|
|
@ -23,7 +23,7 @@ $user = new User();
|
||||||
<main>
|
<main>
|
||||||
<div class="ui container">
|
<div class="ui container">
|
||||||
<div class="ui segment">
|
<div class="ui segment">
|
||||||
<h1 class="ui header">Add a product</h1>
|
<h1 class="ui header"><?= $page->title ?></h1>
|
||||||
|
|
||||||
<form class="ui form" method="post">
|
<form class="ui form" method="post">
|
||||||
<div class="field">
|
<div class="field">
|
||||||
|
|
|
@ -15,17 +15,31 @@ $page->navigation();
|
||||||
|
|
||||||
$products = array();
|
$products = array();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get wishlist products
|
||||||
|
*/
|
||||||
if (isset($_GET['wishlist'])) {
|
if (isset($_GET['wishlist'])) {
|
||||||
$user = new User();
|
$user = new User();
|
||||||
$wishlist = $_GET['wishlist'];
|
$wishlist = $_GET['wishlist'];
|
||||||
$products = $user->getProducts($wishlist);
|
$products = $user->getProducts($wishlist);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete wishlist
|
||||||
|
*/
|
||||||
|
if (isset($_POST['wishlist_delete_id'])) {
|
||||||
|
$database->query('DELETE FROM `wishlists`
|
||||||
|
WHERE id = ' . $_POST['wishlist_delete_id'] . '
|
||||||
|
;');
|
||||||
|
}
|
||||||
?>
|
?>
|
||||||
<main>
|
<main>
|
||||||
<div class="ui container">
|
<div class="ui container">
|
||||||
|
<h1 class="ui header"><?= $page->title ?></h1>
|
||||||
|
|
||||||
<div class="ui horizontal segments">
|
<div class="ui horizontal segments">
|
||||||
<div class="ui segment">
|
<div class="ui segment">
|
||||||
<h1 class="ui header">View wishlist</h1>
|
<h2 class="ui header">Wishlists</h2>
|
||||||
<p>Please select a wishlist to view.</p>
|
<p>Please select a wishlist to view.</p>
|
||||||
|
|
||||||
<form class="ui form" method="get">
|
<form class="ui form" method="get">
|
||||||
|
@ -37,7 +51,7 @@ if (isset($_GET['wishlist'])) {
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<input class="ui primary button" type="submit" value="View" />
|
<input class="ui primary button wishlist-view disabled" type="submit" value="View" />
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -45,10 +59,19 @@ if (isset($_GET['wishlist'])) {
|
||||||
<h2 class="ui header">Options</h1>
|
<h2 class="ui header">Options</h1>
|
||||||
<p>Wishlist related options.</p>
|
<p>Wishlist related options.</p>
|
||||||
|
|
||||||
<button class="ui labeled icon button">
|
<button class="ui small labeled icon button disabled">
|
||||||
<i class="share icon"></i>
|
<i class="share icon"></i>
|
||||||
Share
|
Share
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
|
<form class="ui form wishlist-delete" method="post" style="display: inline-block;">
|
||||||
|
<input type="hidden" name="wishlist_delete_id" />
|
||||||
|
|
||||||
|
<button class="ui small labeled red icon button disabled" type="submit">
|
||||||
|
<i class="trash icon"></i>
|
||||||
|
Delete
|
||||||
|
</button>
|
||||||
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -118,8 +141,30 @@ if (isset($_GET['wishlist'])) {
|
||||||
<?php } ?>
|
<?php } ?>
|
||||||
|
|
||||||
</div>
|
</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 } ?>
|
<?php } ?>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
|
|
|
@ -73,9 +73,7 @@ if (!$options) {
|
||||||
* Update
|
* Update
|
||||||
*/
|
*/
|
||||||
if ($options) {
|
if ($options) {
|
||||||
$version_current = $options->getOption('version') ?? '0.0.0';
|
if (-1 === version_compare($options->version, $version_new)) {
|
||||||
|
|
||||||
if (-1 === version_compare($version_current, $version_new)) {
|
|
||||||
$options->updateAvailable = true;
|
$options->updateAvailable = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
56
package-lock.json
generated
56
package-lock.json
generated
|
@ -220,9 +220,9 @@
|
||||||
"integrity": "sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg=="
|
"integrity": "sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg=="
|
||||||
},
|
},
|
||||||
"node_modules/@types/node": {
|
"node_modules/@types/node": {
|
||||||
"version": "14.18.5",
|
"version": "14.18.6",
|
||||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.5.tgz",
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.6.tgz",
|
||||||
"integrity": "sha512-LMy+vDDcQR48EZdEx5wRX1q/sEl6NdGuHXPnfeL8ixkwCOSZ2qnIyIZmcCbdX0MeRqHhAcHmX+haCbrS8Run+A=="
|
"integrity": "sha512-lrCEyAVs0sJ+uq5uPn2j1NkAHryhBA8Q1fP2hC2zRiOPyJBMB53ZsdmNX3yPo/sj29EH/3452h1DsIoPTiGELg=="
|
||||||
},
|
},
|
||||||
"node_modules/@types/vinyl": {
|
"node_modules/@types/vinyl": {
|
||||||
"version": "2.0.6",
|
"version": "2.0.6",
|
||||||
|
@ -808,9 +808,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/caniuse-lite": {
|
"node_modules/caniuse-lite": {
|
||||||
"version": "1.0.30001299",
|
"version": "1.0.30001300",
|
||||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001299.tgz",
|
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001300.tgz",
|
||||||
"integrity": "sha512-iujN4+x7QzqA2NCSrS5VUy+4gLmRd4xv6vbBBsmfVqTx8bLAD8097euLqQgKxSVLvxjSDcvF1T/i9ocgnUFexw==",
|
"integrity": "sha512-cVjiJHWGcNlJi8TZVKNMnvMid3Z3TTdDHmLDzlOdIiZq138Exvo0G+G0wTdVYolxKb4AYwC+38pxodiInVtJSA==",
|
||||||
"funding": {
|
"funding": {
|
||||||
"type": "opencollective",
|
"type": "opencollective",
|
||||||
"url": "https://opencollective.com/browserslist"
|
"url": "https://opencollective.com/browserslist"
|
||||||
|
@ -1434,9 +1434,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/electron-to-chromium": {
|
"node_modules/electron-to-chromium": {
|
||||||
"version": "1.4.44",
|
"version": "1.4.46",
|
||||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.44.tgz",
|
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.46.tgz",
|
||||||
"integrity": "sha512-tHGWiUUmY7GABK8+DNcr474cnZDTzD8x1736SlDosVH8+/vRJeqfaIBAEHFtMjddz/0T4rKKYsxEc8BwQRdBpw=="
|
"integrity": "sha512-UtV0xUA/dibCKKP2JMxOpDtXR74zABevuUEH4K0tvduFSIoxRVcYmQsbB51kXsFTX8MmOyWMt8tuZAlmDOqkrQ=="
|
||||||
},
|
},
|
||||||
"node_modules/end-of-stream": {
|
"node_modules/end-of-stream": {
|
||||||
"version": "1.4.4",
|
"version": "1.4.4",
|
||||||
|
@ -4732,14 +4732,22 @@
|
||||||
"integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="
|
"integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="
|
||||||
},
|
},
|
||||||
"node_modules/node-fetch": {
|
"node_modules/node-fetch": {
|
||||||
"version": "2.6.6",
|
"version": "2.6.7",
|
||||||
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz",
|
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
|
||||||
"integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==",
|
"integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"whatwg-url": "^5.0.0"
|
"whatwg-url": "^5.0.0"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "4.x || >=6.0.0"
|
"node": "4.x || >=6.0.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"encoding": "^0.1.0"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"encoding": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/node-notifier": {
|
"node_modules/node-notifier": {
|
||||||
|
@ -7451,9 +7459,9 @@
|
||||||
"integrity": "sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg=="
|
"integrity": "sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg=="
|
||||||
},
|
},
|
||||||
"@types/node": {
|
"@types/node": {
|
||||||
"version": "14.18.5",
|
"version": "14.18.6",
|
||||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.5.tgz",
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.6.tgz",
|
||||||
"integrity": "sha512-LMy+vDDcQR48EZdEx5wRX1q/sEl6NdGuHXPnfeL8ixkwCOSZ2qnIyIZmcCbdX0MeRqHhAcHmX+haCbrS8Run+A=="
|
"integrity": "sha512-lrCEyAVs0sJ+uq5uPn2j1NkAHryhBA8Q1fP2hC2zRiOPyJBMB53ZsdmNX3yPo/sj29EH/3452h1DsIoPTiGELg=="
|
||||||
},
|
},
|
||||||
"@types/vinyl": {
|
"@types/vinyl": {
|
||||||
"version": "2.0.6",
|
"version": "2.0.6",
|
||||||
|
@ -7903,9 +7911,9 @@
|
||||||
"integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo="
|
"integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo="
|
||||||
},
|
},
|
||||||
"caniuse-lite": {
|
"caniuse-lite": {
|
||||||
"version": "1.0.30001299",
|
"version": "1.0.30001300",
|
||||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001299.tgz",
|
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001300.tgz",
|
||||||
"integrity": "sha512-iujN4+x7QzqA2NCSrS5VUy+4gLmRd4xv6vbBBsmfVqTx8bLAD8097euLqQgKxSVLvxjSDcvF1T/i9ocgnUFexw=="
|
"integrity": "sha512-cVjiJHWGcNlJi8TZVKNMnvMid3Z3TTdDHmLDzlOdIiZq138Exvo0G+G0wTdVYolxKb4AYwC+38pxodiInVtJSA=="
|
||||||
},
|
},
|
||||||
"chalk": {
|
"chalk": {
|
||||||
"version": "1.1.3",
|
"version": "1.1.3",
|
||||||
|
@ -8420,9 +8428,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"electron-to-chromium": {
|
"electron-to-chromium": {
|
||||||
"version": "1.4.44",
|
"version": "1.4.46",
|
||||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.44.tgz",
|
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.46.tgz",
|
||||||
"integrity": "sha512-tHGWiUUmY7GABK8+DNcr474cnZDTzD8x1736SlDosVH8+/vRJeqfaIBAEHFtMjddz/0T4rKKYsxEc8BwQRdBpw=="
|
"integrity": "sha512-UtV0xUA/dibCKKP2JMxOpDtXR74zABevuUEH4K0tvduFSIoxRVcYmQsbB51kXsFTX8MmOyWMt8tuZAlmDOqkrQ=="
|
||||||
},
|
},
|
||||||
"end-of-stream": {
|
"end-of-stream": {
|
||||||
"version": "1.4.4",
|
"version": "1.4.4",
|
||||||
|
@ -11142,9 +11150,9 @@
|
||||||
"integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="
|
"integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="
|
||||||
},
|
},
|
||||||
"node-fetch": {
|
"node-fetch": {
|
||||||
"version": "2.6.6",
|
"version": "2.6.7",
|
||||||
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz",
|
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
|
||||||
"integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==",
|
"integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"whatwg-url": "^5.0.0"
|
"whatwg-url": "^5.0.0"
|
||||||
}
|
}
|
||||||
|
|
7
vendor/autoload.php
vendored
Normal file
7
vendor/autoload.php
vendored
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
// autoload.php @generated by Composer
|
||||||
|
|
||||||
|
require_once __DIR__ . '/composer/autoload_real.php';
|
||||||
|
|
||||||
|
return ComposerAutoloaderInit5f3db9fc1d0cf1dd6a77a1d84501b4b1::getLoader();
|
Loading…
Reference in a new issue