Add request more wishes button

This commit is contained in:
grandeljay 2022-06-16 19:23:48 +02:00
parent 6ab27e3cd0
commit 5c6b5a0b72
6 changed files with 203 additions and 7 deletions

View file

@ -17,10 +17,10 @@ require '../../index.php';
switch ($_SERVER['REQUEST_METHOD']) {
case 'POST':
/**
* Create
*/
if (isset($_POST['wishlist-name'], $_SESSION['user']['id'])) {
/**
* Create
*/
$database->query('INSERT INTO `wishlists`
(
`user`,
@ -36,6 +36,68 @@ switch ($_SERVER['REQUEST_METHOD']) {
$response['data'] = array(
'lastInsertId' => $database->lastInsertId(),
);
} elseif (isset($_POST['wishlist-id'])) {
/**
* Request more wishes
*/
$wishlistID = $_POST['wishlist-id'];
/** Get last notification time */
$wishlistQuery = $database
->query(
'SELECT *
FROM `wishlists`
WHERE `id` = ' . $wishlistID . '
AND (`notification_sent` < UNIX_TIMESTAMP(CURRENT_TIMESTAMP - INTERVAL 1 DAY) OR `notification_sent` IS NULL);'
);
$wishlist = $wishlistQuery->fetch();
/** Set notification time */
if (false !== $wishlist) {
/** Send email */
$mjml = file_get_contents(ROOT . '/src/mjml/wishlist-request-wishes.mjml');
$mjml = str_replace(
'TEXT_HELLO',
__('Hello,'),
$mjml
);
$mjml = str_replace(
'TEXT_WISHLIST_REQUEST_WISHES',
sprintf(
/** TRANSLATORS: %s: Wishlist name */
__('somebody has requested that you add more wishes to your wishlist %s.'),
'<a href="https://wishthis.online/?page=wishlists&id=' . $wishlist['id'] . '">' . $wishlist['name'] . '</a>'
),
$mjml
);
$mjml = str_replace(
'TEXT_WISH_ADD',
__('Add wish'),
$mjml
);
$mjml = str_replace(
'LINK_WISH_ADD',
$_SERVER['REQUEST_SCHEME'] . '://' .
$_SERVER['HTTP_HOST'] .
Page::PAGE_WISHLISTS . '&id=' . $wishlist['id'] . '&wish_add=true',
$mjml
);
$emailRequest = new Email($user->email, __('Wish request'), $mjml);
$emailRequest->send();
/** Save date to database */
$database
->query(
'UPDATE `wishlists`
SET `notification_sent` = CURRENT_TIMESTAMP
WHERE `id` = ' . $wishlist['id'] . ';'
);
}
$response['success'] = true;
$response['email_was_sent'] = false !== $wishlist;
}
break;

View file

@ -140,4 +140,36 @@ $(function() {
buttonSave.find('span').text(text.button_wishlist_saved);
}
/**
* Request more wishes
*/
$(document).on('click', '.ui.button.wishlist-request-wishes', function() {
var buttonRequest = $(this);
var wishlist_id = $('.wishlist-cards[data-wishlist]').attr('data-wishlist');
var formData = new URLSearchParams({
'wishlist-id' : wishlist_id,
});
buttonRequest.addClass('disabled loading');
fetch('/src/api/wishlists.php', {
method : 'POST',
body : formData
})
.then(handleFetchError)
.then(handleFetchResponse)
.then(function(response) {
if (response.email_was_sent) {
$('.modal.wishlist-request-wishes-notification-sent').modal('show');
} else {
$('.modal.wishlist-request-wishes-notification-notsent').modal('show');
}
})
.catch(handleFetchCatch)
.finally(function() {
buttonRequest.removeClass('loading');
});;
});
});

View file

@ -0,0 +1,58 @@
<mjml>
<mj-head>
<mj-attributes>
<mj-all font-family="Raleway, sans-serif"
font-size="12pt"
/>
<mj-body background-color="#f4f4f4" />
<mj-text line-height="1.6" />
<mj-button align="left"
background-color="#6435c9"
font-weight="700"
/>
<mj-class name="segment"
background-color="#fff"
border="1px solid rgba(34,36,38,.15)"
/>
</mj-attributes>
<mj-font name="Raleway" href="https://fonts.googleapis.com/css?family=Raleway" />
<mj-style>
a {
color: #6435c9;
}
.segment {
box-shadow: 0 1px 2px 0 rgba(34,36,38,.15);
}
</mj-style>
</mj-head>
<mj-body>
<mj-section><mj-column></mj-column></mj-section>
<mj-section>
<mj-column>
<mj-image src="https://wishthis.online/src/assets/img/logo.svg"
alt="wishthis"
height="28px"
align="left"
/>
</mj-column>
</mj-section>
<mj-section mj-class="segment" css-class="segment">
<mj-column>
<mj-text>TEXT_HELLO</mj-text>
<mj-text>TEXT_WISHLIST_REQUEST_WISHES</mj-text>
<mj-button href="LINK_WISH_ADD">TEXT_WISH_ADD</mj-button>
</mj-column>
</mj-section>
<mj-section><mj-column></mj-column></mj-section>
</mj-body>
</mjml>

View file

@ -150,10 +150,11 @@ switch ($step) {
$database->query('DROP TABLE IF EXISTS `wishlists`;');
$database->query(
'CREATE TABLE `wishlists` (
`id` INT PRIMARY KEY AUTO_INCREMENT,
`user` INT NOT NULL,
`name` VARCHAR(128) NOT NULL,
`hash` VARCHAR(128) NOT NULL,
`id` INT PRIMARY KEY AUTO_INCREMENT,
`user` INT NOT NULL,
`name` VARCHAR(128) NOT NULL,
`hash` VARCHAR(128) NOT NULL,
`notification_sent` TIMESTAMP NULL DEFAULT NULL,
INDEX `idx_hash` (`hash`),
CONSTRAINT `FK_wishlists_user` FOREIGN KEY (`user`) REFERENCES `users` (`id`) ON DELETE CASCADE

View file

@ -86,9 +86,47 @@ $page->navigation();
?>
</div>
<div class="ui basic center aligned segment">
<button class="ui primary button wishlist-request-wishes">
<?= __('Request more wishes') ?>
</button>
</div>
</div>
</main>
<?php
$page->bodyEnd();
?>
<!-- Wishlist: Request wishes -->
<div class="ui tiny modal wishlist-request-wishes-notification-sent">
<div class="header">
<?= __('Request more wishes') ?>
</div>
<div class="content">
<div class="description">
<p><?= __('A notification has just been sent to the owner of this wishlist.') ?></p>
</div>
</div>
<div class="actions">
<div class="ui approve primary button" title="<?= __('Ok') ?>">
<?= __('Ok') ?>
</div>
</div>
</div>
<div class="ui tiny modal wishlist-request-wishes-notification-notsent">
<div class="header">
<?= __('Request more wishes') ?>
</div>
<div class="content">
<div class="description">
<p><?= __('The wishlist owner has already received a notification recently and has not been notified again.') ?></p>
</div>
</div>
<div class="actions">
<div class="ui approve primary button" title="<?= __('Ok') ?>">
<?= __('Ok') ?>
</div>
</div>
</div>

View file

@ -1,3 +1,8 @@
/**
* Wishlists
*/
ALTER TABLE `wishlists` ADD COLUMN `notification_sent` TIMESTAMP NULL DEFAULT NULL;
/**
* Wishes
*/