diff options
| author | Syndamia <kamen@syndamia.com> | 2025-02-02 15:04:59 +0200 |
|---|---|---|
| committer | Syndamia <kamen@syndamia.com> | 2025-02-02 15:05:05 +0200 |
| commit | d7c2e638a5ea39caeadd40406f840e9b90f893d5 (patch) | |
| tree | 3568f96aa508e01b9c7ee34cba261f4e16d186a2 | |
| parent | d6dcab722a4e4f3472d3e4128bd6f4a6d5661a31 (diff) | |
| download | nowayforward_human-d7c2e638a5ea39caeadd40406f840e9b90f893d5.tar nowayforward_human-d7c2e638a5ea39caeadd40406f840e9b90f893d5.tar.gz nowayforward_human-d7c2e638a5ea39caeadd40406f840e9b90f893d5.zip | |
feat(views/archive): Implement archive deletion
| -rw-r--r-- | controllers/archive.php | 34 | ||||
| -rw-r--r-- | migrations/00-initial.sql | 4 | ||||
| -rw-r--r-- | models/webpage.php | 7 | ||||
| -rw-r--r-- | views/archive/delete/index.php | 34 | ||||
| -rw-r--r-- | views/archive/delete/meta.php | 4 | ||||
| -rw-r--r-- | views/archive/index.php | 3 | ||||
| -rw-r--r-- | views/archive/item.php | 14 | ||||
| -rw-r--r-- | views/global/router.php | 1 | ||||
| -rw-r--r-- | views/list/index.php | 2 | ||||
| -rw-r--r-- | views/styles.css | 3 |
10 files changed, 103 insertions, 3 deletions
diff --git a/controllers/archive.php b/controllers/archive.php index fd278ff..367acc7 100644 --- a/controllers/archive.php +++ b/controllers/archive.php @@ -23,6 +23,40 @@ function on_post() { exit(); } +function on_delete() { + global $TOKEN; + global $METHOD; + global $page_status; + + $webpage = null; + try { + $webpage = Database\Webpage::fromDBwid($METHOD['wid']); + } + catch(Exception $e) { + $page_status = "This webpage doesn't exist!"; + return; + } + + $user = null; + try { + $user = Database\Cookie::fromDB($TOKEN); + } + catch(Exception $e) { + $list_status = "Invalid cookie!"; + return; + } + + if ($user->Role !== 'Admin') { + $list_status = "You're not authorized to delete archives!"; + return; + } + + $webpage->delete(); + + header('Location: /archive/?url=' . $webpage->URL); + exit(); +} + class DownloadPage { private $folder_location; private $folder_name; diff --git a/migrations/00-initial.sql b/migrations/00-initial.sql index a4b999f..776331f 100644 --- a/migrations/00-initial.sql +++ b/migrations/00-initial.sql @@ -44,5 +44,7 @@ CREATE TABLE IF NOT EXISTS ArchiveListsWebpages ( WID INT NOT NULL, LID INT NOT NULL, Position INT NOT NULL, - PRIMARY KEY (WID, LID) + PRIMARY KEY (WID, LID), + FOREIGN KEY (WID) REFERENCES Webpages(WID) ON DELETE CASCADE, + FOREIGN KEY (LID) REFERENCES ArchiveLists(LID) ON DELETE CASCADE ); diff --git a/models/webpage.php b/models/webpage.php index e85046f..2bcc265 100644 --- a/models/webpage.php +++ b/models/webpage.php @@ -107,4 +107,11 @@ class Webpage extends Table { "WID = \"{$this->WID}\"" ); } + + function delete() { + Table::_delete( + 'Webpages', + "WID = \"$this->WID\"" + ); + } } diff --git a/views/archive/delete/index.php b/views/archive/delete/index.php new file mode 100644 index 0000000..daad152 --- /dev/null +++ b/views/archive/delete/index.php @@ -0,0 +1,34 @@ +<?php + $user = require_login(); + $webpage = null; + + try { + $webpage = Database\Webpage::fromDBwid($_GET['wid']); + } + catch (Exception $e) {} +?> + +<?php if ($webpage !== null && $user->Role === 'Admin'): ?> + <h1>Are you sure you want to delete <?= $webpage->URL ?> from <?= $webpage->Date ?>?</h1> + + <form action="#" method="POST" class="font-115 flex-col-centered max-width-20 center-margin"> + <input type="hidden" name="method" value="DELETE"> + <?php if (isset($page_status)): ?> + <?php if ($page_status !== ""): ?> + <p class="item error"><span> + <strong>Error:</strong> <?= $page_status ?> + </span></p> + <?php endif; ?> + <?php endif; ?> + + <input type="hidden" name="wid" value="<?= $_GET['wid'] ?>"> + <input type="submit" value="Delete forever!"> + </form> + +<?php elseif ($webpage === null): ?> + <h2>No page with identifier <?= $_GET['wid'] ?> exists!</h2> + +<?php else: ?> + <h2>You have no permission to delete archives!</h2> + +<?php endif; ?> diff --git a/views/archive/delete/meta.php b/views/archive/delete/meta.php new file mode 100644 index 0000000..b9dc330 --- /dev/null +++ b/views/archive/delete/meta.php @@ -0,0 +1,4 @@ +<?php + +$title = 'Delete an archive'; +$controller = 'archive'; diff --git a/views/archive/index.php b/views/archive/index.php index 73e1017..7e5c818 100644 --- a/views/archive/index.php +++ b/views/archive/index.php @@ -1,6 +1,7 @@ <?php $exists = null; $page = null; + $user = null; try { list($exists, $url) = doesWebsiteExist($url); @@ -8,6 +9,8 @@ $page = Database\Webpage::fromDB($url); $page->incrementVisits(); + + $user = Database\Cookie::fromDB($TOKEN); } catch(Exception $e) { } diff --git a/views/archive/item.php b/views/archive/item.php index e6b9cf0..467fb2c 100644 --- a/views/archive/item.php +++ b/views/archive/item.php @@ -15,9 +15,19 @@ <input type="hidden" name="wid" value="<?= $page->WID ?>"> <button> <!-- Tabler icons https://tabler.io/icons --> - <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="list-icon"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M12 17l-6 4v-14a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4v5" /><path d="M16 19h6" /><path d="M19 16v6" /></svg> + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="list-icon"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M12 17l-6 4v-14a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4v5" /><path d="M16 19h6" /><path d="M19 16v6" /></svg> </button> </form> - <span><!-- Delete (when admin) button --></span> + <?php if ($user !== null && $user->Role === 'Admin'): ?> + <form action="/archive/delete" method="GET"> + <input type="hidden" name="wid" value="<?= $page->WID ?>"> + <button> + <!-- Tabler icons https://tabler.io/icons --> + <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="list-icon"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M4 7l16 0" /><path d="M10 11l0 6" /><path d="M14 11l0 6" /><path d="M5 7l1 12a2 2 0 0 0 2 2h8a2 2 0 0 0 2 -2l1 -12" /><path d="M9 7v-3a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v3" /></svg> + </button> + </form> + <?php else: ?> + <span></span> + <?php endif; ?> </section> </section> diff --git a/views/global/router.php b/views/global/router.php index c6718a7..5b0bd01 100644 --- a/views/global/router.php +++ b/views/global/router.php @@ -33,6 +33,7 @@ function route_view() { case '/list/delete': return '/list/delete'; case '/archive/create': return '/archive/create'; + case '/archive/delete': return '/archive/delete'; case '/user/delete': return '/user/delete'; case '/user/settings': return '/user/update'; diff --git a/views/list/index.php b/views/list/index.php index d422630..759ab04 100644 --- a/views/list/index.php +++ b/views/list/index.php @@ -1,10 +1,12 @@ <?php $list = null; $author = null; + $user = null; try { $list = Database\ArchiveList::fromDB($lid ?? -1); $author = Database\User::fromDBuid($list->AuthorUID); + $user = Database\Cookie::fromDB($TOKEN); } catch(Exception $e) {} ?> diff --git a/views/styles.css b/views/styles.css index 132d280..260f7ff 100644 --- a/views/styles.css +++ b/views/styles.css @@ -334,10 +334,12 @@ hr.new-section { padding: 0.5em 0 0.5em 0.5em; display: flex; flex-direction: column; + gap: 0.3em; } .item [name=itemButton] > * { display: flex; + align-items: end; flex: 1; } @@ -349,6 +351,7 @@ hr.new-section { .list-icon { color: var(--cherry); + height: 1.3em; } /* List item */ |
