45 lines
1.4 KiB
PHP
45 lines
1.4 KiB
PHP
<?php
|
|
/**
|
|
* Bookmark Partial Handler
|
|
*
|
|
* This will display a button which will either add or remove a bookmark for a given item.
|
|
*
|
|
* @author Daniel J. Summers <daniel@bitbadger.solutions>
|
|
* @license MIT
|
|
*/
|
|
|
|
declare(strict_types=1);
|
|
|
|
use BitBadger\InspiredByFSharp\Option;
|
|
use BitBadger\PDODocument\{DocumentException, Patch};
|
|
use FeedReaderCentral\{ItemWithFeed, Table};
|
|
|
|
include '../start.php';
|
|
|
|
FeedReaderCentral\Security::verifyUser();
|
|
|
|
$id = key_exists('id', $_GET) ? (int)$_GET['id'] : -1;
|
|
$item = Option::getOrCall(not_found(...), ItemWithFeed::retrieveById($id));
|
|
|
|
if (key_exists('action', $_GET)) {
|
|
Option::iter(function (int $flag) use ($id, &$item) {
|
|
try {
|
|
Patch::byId(Table::Item, $id, ['is_bookmarked' => $flag]);
|
|
$item->is_bookmarked = $flag;
|
|
} catch (DocumentException $ex) {
|
|
add_error("$ex");
|
|
}
|
|
}, match ($_GET['action']) {
|
|
'add' => Option::Some(1),
|
|
'remove' => Option::Some(0),
|
|
default => Option::None(),
|
|
});
|
|
}
|
|
|
|
$action = $item->isBookmarked() ? 'remove' : 'add';
|
|
$icon = $item->isBookmarked() ? 'added' : 'add'; ?>
|
|
<button class="bookmark <?=$action?>" type=button role=button hx-patch="/bookmark?id=<?=$id?>&action=<?=$action?>"
|
|
hx-target=this hx-swap=outerHTML hx-push-url=false title="<?=init_cap($action)?> Bookmark">
|
|
<img src=/assets/bookmark-<?=$icon?>.png alt="<?=$action?> bookmark">
|
|
</button><?php
|