* @license MIT */ declare(strict_types=1); use BitBadger\InspiredByFSharp\Result; use BitBadger\PDODocument\{Delete, DocumentException, Field}; use FeedReaderCentral\{Feed, Security, Table}; include '../../start.php'; Security::verifyUser(); $feedId = key_exists('id', $_GET) ? (int)$_GET['id'] : -1; switch ($_SERVER['REQUEST_METHOD']) { case 'DELETE': try { $feed = Feed::retrieveById($feedId)->getOrCall(not_found(...)); Delete::byFields(Table::Item, [Field::EQ('feed_id', $feed->id)]); Delete::byId(Table::Feed, $feed->id); add_info('Feed “' . htmlentities($feed->title) . '” deleted successfully'); frc_redirect('/feeds'); } catch (DocumentException $ex) { add_error("$ex"); } break; case 'POST': try { if ((int)$_POST['id'] === -1) { $result = Feed::add($_POST['url']); } else { $feedId = (int)$_POST['id']; $toEdit = Feed::retrieveById($feedId); $result = $toEdit->isSome() ? Feed::update($toEdit->get(), $_POST['url']) : Result::Error("Feed $feedId not found"); } $result->iter(function () { add_info('Feed saved successfully'); frc_redirect('/feeds'); }); add_error($result->getError()); $feedId = 'error'; } catch (DocumentException $ex) { add_error("$ex"); } break; } if ($feedId == -1) { $title = 'Add RSS Feed'; $feed = new Feed(id: -1); } else { $title = 'Edit RSS Feed'; $feed = $feedId == 'error' ? new Feed(id: (int)$_POST['id'], url: $_POST['url'] ?? '') : Feed::retrieveById((int)$feedId)->getOrCall(not_found(...)); } page_head($title); ?>