From 523a84dd4b7cb611955e949fd6debc4a3c037b91 Mon Sep 17 00:00:00 2001 From: "David T. Sadler" Date: Mon, 11 Oct 2021 21:49:47 +0100 Subject: Implement very basic editing --- public/edit/index.php | 33 ++++++++++++++++++++ src/DTS/BookmarkRepository.php | 69 ++++++++++++++++++++++++++++++++++-------- src/templates/edit.php | 17 +++++++++++ src/templates/index.php | 2 +- 4 files changed, 107 insertions(+), 14 deletions(-) create mode 100644 public/edit/index.php create mode 100644 src/templates/edit.php diff --git a/public/edit/index.php b/public/edit/index.php new file mode 100644 index 0000000..0cc1c27 --- /dev/null +++ b/public/edit/index.php @@ -0,0 +1,33 @@ +load(); + +$bookmark = $bookmarks->find($id); + +if ('POST' === filter_input(INPUT_SERVER, 'REQUEST_METHOD')) { + $bookmark->url = $_POST['url']; + $bookmark->title = $_POST['title']; + $bookmark->tag = $_POST['tag']; + + $bookmarks->update($bookmark); +} + +$html = $template->render('edit', compact('bookmark')); + +respondAndExit(200, 'OK', $html); diff --git a/src/DTS/BookmarkRepository.php b/src/DTS/BookmarkRepository.php index ab54594..d673338 100644 --- a/src/DTS/BookmarkRepository.php +++ b/src/DTS/BookmarkRepository.php @@ -4,6 +4,8 @@ declare(strict_types=1); namespace DTS; +use DTS\Bookmark; + class BookmarkRepository implements \Iterator { private string $pathToRepository; @@ -61,24 +63,32 @@ class BookmarkRepository implements \Iterator return $this; } + public function find(string $id): ?Bookmark + { + $index = $this->findBookmarkIndex($id); + + return $this->repository[$index] ?? null; + } + public function add(Bookmark $bookmark): bool { - if (($fp = fopen($this->pathToRepository, 'a')) === FALSE) { - throw new \Exception("Unable to open repository {$this->pathToRepository}"); - } + $this->repository[] = $bookmark; - $saved = fputcsv($fp, [ - $bookmark->id, - $bookmark->url, - $bookmark->title, - $bookmark->tag, - $bookmark->addedAt, - (int)$bookmark->unread, - ]); + return $this->store(); + } - fclose($fp); + public function update(Bookmark $bookmark): bool + { + $index = $this->findBookmarkIndex($bookmark->id); + + if ($index !== null) { + $this->repository[$index] = $bookmark; + print_r($bookmark); - return $saved !== false; + return $this->store(); + } + + return false; } public function current(): mixed @@ -105,4 +115,37 @@ class BookmarkRepository implements \Iterator { return isset($this->repository[$this->position]); } + + private function findBookmarkIndex(string $id): ?int + { + foreach ($this->repository as $index => $bookmark) { + if ($bookmark->id == $id) { + return $index; + } + } + + return null; + } + + public function store(): bool + { + if (($fp = fopen($this->pathToRepository, 'w')) === FALSE) { + throw new \Exception("Unable to open repository {$this->pathToRepository}"); + } + + foreach ($this->repository as $bookmark) { + fputcsv($fp, [ + $bookmark->id, + $bookmark->url, + $bookmark->title, + $bookmark->tag, + $bookmark->addedAt, + (int)$bookmark->unread, + ]); + } + + fclose($fp); + + return true; + } } diff --git a/src/templates/edit.php b/src/templates/edit.php new file mode 100644 index 0000000..a3c6930 --- /dev/null +++ b/src/templates/edit.php @@ -0,0 +1,17 @@ + + + + + + Bookmarks + + +
+ +
+
+
+ +
+ + diff --git a/src/templates/index.php b/src/templates/index.php index 9656551..2703851 100644 --- a/src/templates/index.php +++ b/src/templates/index.php @@ -8,7 +8,7 @@ -- cgit v1.2.3-13-gbd6f