diff options
| -rw-r--r-- | controllers/archive.php | 102 | ||||
| -rw-r--r-- | models/webpage.php | 33 | ||||
| -rw-r--r-- | views/archive/index.php | 4 |
3 files changed, 136 insertions, 3 deletions
diff --git a/controllers/archive.php b/controllers/archive.php index 6057a4a..c0dee10 100644 --- a/controllers/archive.php +++ b/controllers/archive.php @@ -339,6 +339,95 @@ class DownloadPage { } } + function getArchiveTop() : array { + $content = '<?php + require_once "../../models/database.php"; + require_once "../../models/webpage.php"; + require_once "../../models/user.php"; + + function debugPrintToConsole($data) : void { + $output = $data; + if (is_array($output)) + $output = implode(",", $output); + + echo "<script>console.log(\"Debug Objects: " . $output . "\" );</script>"; + } + debugPrintToConsole("This is necessary for some reason, without it the content is not actually shown!"); + + $currentPageId = basename(__DIR__); + $currentPage = Database\Webpage::getPageById($currentPageId); + $requesterUsername = Database\User::fromDBuid($currentPage->RequesterUID); + + $previousPageId = Database\Webpage::getPreviousPageId($currentPage->URL, $currentPage->Date); + $nextPageId = Database\Webpage::getNextPageId($currentPage->URL, $currentPage->Date); + + echo "<div class=\"navbar\">"; + echo "<div class=\"navbar-info\">"; + echo "<span>Title: $currentPage->Title</span>"; + echo "<span>Url: $currentPage->URL</span>"; + echo "<span>Date of archival: $currentPage->Date</span>"; + echo "<span>Visits: $currentPage->Visits</span>"; + echo "<span>Requested by: $requesterUsername->Username</span>"; + + echo "<div class=\"navbar-links\">"; + if ($previousPageId != 0) { + echo "<a href=\"../$previousPageId/index.php\">Previous version</a>"; + } + if ($nextPageId != 0) { + echo "<a href=\"../$nextPageId/index.php\">Next version</a>"; + } + echo "</div>"; + echo "</div>"; + ?>'; + + $style = ' + .navbar { + display: flex; + justify-content: space-between; + align-items: center; + background-color: #343a40; + color: #ffffff; + padding: 10px; + border-bottom: 1px solid #ccc; + width: 100%; + position: fixed; + top: 0; + left: 0; + z-index: 1000; + } + + .navbar-info { + display: flex; + justify-content: center; + flex-grow: 1; + } + + .navbar-info span { + margin-right: 15px; + } + + .navbar-links { + display: flex; + gap: 20px; + } + + .navbar a { + text-decoration: none; + color: #007bff; + } + + .navbar a:hover { + text-decoration: underline; + color: #66b3ff; + } + + /* Add some margin to the body to prevent content from being hidden behind the navbar */ + body { + margin-top: 60px; + } + '; + return array($content, $style); + } function createArchive($simular_pages) : void { // Creates the folder with the correct resources and the main html page in a index.html tag @@ -360,8 +449,19 @@ class DownloadPage { $this->changeHyperlinkToLocal($dom, 'a', 'href'); + // Add the header for the archives + list($archive_top, $archive_top_style) = $this->getArchiveTop(); + $phpTag = $dom->createElement('script', $archive_top); + $phpTag->setAttribute('type', 'text/php'); // Set the type to PHP + $body = $dom->getElementsByTagName('body')->item(0); + $body->appendChild($phpTag); + + $styleTag = $dom->createElement('style', $archive_top_style); + $head = $dom->getElementsByTagName('head')->item(0); + $head->appendChild($styleTag); + $this->page_contents = $dom->saveHTML(); - $indexFile = fopen($folder_path . '/index.html', "w"); + $indexFile = fopen($folder_path . '/index.php', "a"); fwrite($indexFile, $this->page_contents); fclose($indexFile); } diff --git a/models/webpage.php b/models/webpage.php index 3445f62..e6d964f 100644 --- a/models/webpage.php +++ b/models/webpage.php @@ -27,6 +27,39 @@ class Webpage extends Table { ); } + static function getPageById(int $id) : Webpage { + return Table::_fromDB( + "SELECT * FROM Webpages WHERE WID = \"$id\"", + "Database\Webpage" + ); + } + + static function getPreviousPageId(string $url, string $date) : int { + $foundId = Table::_get_all( + "Webpages", + "Database\Webpage", + "WHERE URL = \"$url\" && Date < \"$date\" ORDER BY Date DESC LIMIT 1", + "WID" + ); + if (count($foundId) > 0) { + return $foundId[0]->WID; + } + return 0; + } + + static function getNextPageId(string $url, string $date) : int { + $foundId = Table::_get_all( + "Webpages", + "Database\Webpage", + "WHERE URL = \"$url\" && Date > \"$date\" ORDER BY Date ASC LIMIT 1", + "WID" + ); + if (count($foundId) > 0) { + return $foundId[0]->WID; + } + return 0; + } + static function getPagesCount() : int { return Table::_get_entries_count("Webpages"); } diff --git a/views/archive/index.php b/views/archive/index.php index 7d41890..500238a 100644 --- a/views/archive/index.php +++ b/views/archive/index.php @@ -12,7 +12,7 @@ ?> <?php if ($page !== null): ?> - <iframe src="<?= "/archives/{$page->WID}" ?>" scrolling="no"></iframe> + <iframe src="<?= "/archives/{$page->WID}/index.php" ?>" scrolling="no"></iframe> <form action="#" method="POST"> <input type="hidden" name="page_url" value="<?= $url ?>"> @@ -32,7 +32,7 @@ <section> <div> <img src="<?= '/archives/' . $page->FaviconPath ?>" class="favicon"> - <a href="<?= '/archives/' . $page->WID ?>"><?= $page->URL ?></a> + <a href="<?= '/archives/' . $page->WID . '/index.php' ?>"><?= $page->URL ?></a> <span class="float-right"><?= $page->Date ?></span> </div> <div class="details"> |
