-
Silas Meister authoredSilas Meister authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
Index.php 9.69 KiB
<?php declare(strict_types=1);
require_once 'Page.php';
require_once 'util/constants.php';
require_once 'data/News.php';
class Index extends Page {
private const TITLE = 'title';
private const IMGURL = 'imgurl';
private const CONTENT = 'content';
private array $news;
protected function __construct()
{
parent::__construct();
$this->news = array();
session_start();
}
public function __destruct()
{
parent::__destruct();
}
protected function getViewData():array
{
$news = array();
$resultSet = $this->database->query("SELECT n.title, n.imgurl, n.content FROM news n ORDER BY n.date DESC LIMIT 5");
while ($row = $resultSet->fetch_assoc()) {
$title = htmlspecialchars($row[self::TITLE]);
$imgurl = htmlspecialchars($row[self::IMGURL]);
$content = htmlspecialchars($row[self::CONTENT]);
$news[] = new News($title, $imgurl, $content);
}
$resultSet->free();
return $news;
}
protected function generateView():void
{
$this->news = $this->getViewData();
$this->generatePageHeader('NASA', '../functions.js');
echo <<<EOT
<body class="nasa-body">
<header class="nasa-header">
<img class="nasa-img" src="../img/nasa.png" alt="" />
<nav>
<ul class="top-nav">
<li><a href="#">Missions</a></li>
<li><a href="#">Galleries</a></li>
<li><a href="#">NASA TV</a></li>
<li><a href="#">Follow NASA</a></li>
<li><a href="#">Downloads</a></li>
<li><a href="#">About</a></li>
<li><a href="#">NASA Audiences</a></li>
<li>
<form id="search-form" class="search-form" method="post" accept-charset="UTF-8">
<input id="search-input" name="search-input" type="search" placeholder="Search" />
<input id="search-button" type="button" value="" />
</form>
<div id="search-results"></div>
</li>
<li><img src="../img/share_icon.png" alt="" /></li>
<li class="admin-button"><a href="Admin.php">Admin</a></li>
</ul>
<ul class="center-nav">
<li><a href="#">International Space Station</a></li>
<li><a href="#">Journey to Mars</a></li>
<li><a href="#">Earth</a></li>
<li><a href="#">Technology</a></li>
<li><a href="#">Aeronautics</a></li>
<li><a href="#">Solar System and Beyond</a></li>
<li><a href="#">Education</a></li>
<li><a href="#">History</a></li>
<li><a href="#">Benefits to You</a></li>
</ul>
</nav>
</header>
<main>
<article class="content-large">
<div>
<div class="article-content-container">
<a class="article-link" href="#"></a>
<img id="slide-image" class="article-image" src="../img/nasa_news_1.jpg" alt="" />
<div class="article-content">
<div id="slide-container" class="news-headline">
<h3>Space Station</h3>
<h2>Expedition 48 Crew Lands Safely on Earth</h2>
</div>
<div class="camera-triangle"></div>
<img class="camera-img" src="../img/camera.png" alt="" />
</div>
</div>
</div>
</article>
<article class="content-small">
<div>
<div class="article-content-container">
EOT;
$title = $this->news[0]->title();
$imgurl = $this->news[0]->imgurl();
$content = $this->news[0]->content();
echo <<<EOT
<div class="article-background"></div>
<a class="article-link" href="#"></a>
<img class="article-image" src="$imgurl" alt="" />
<div class="article-content">
<div class="nasa-events-container">
<div class="nasa-events-top">
<p class="nasa-events-title">$title</p>
<div class="line"></div>
<a class="nasa-event" href="#">$content</a>
</div>
<div class="nasa-events-bottom">
<div class="line"></div>
<div class="nasa-events-bottom-horizontal">
<a href="#">Calendar</a>
<a href="#">Launches and Landings</a>
</div>
</div>
</div>
</div>
</div>
</div>
</article>
<article class="content-small">
<div>
<div class="article-content-container">
EOT;
$title = $this->news[1]->title();
$imgurl = $this->news[1]->imgurl();
$content = $this->news[1]->content();
echo <<<EOT
<div class="article-background"></div>
<a class="article-link" href="#"></a>
<img class="article-image" src="$imgurl" alt="" />
<div class="article-content">
<div class="overlay">
<h4 class="overlay-title">$title</h4>
<h4 class="overlay-description">$content</h4>
</div>
</div>
</div>
</div>
</article>
<article class="content-medium">
<div>
<div class="article-content-container">
EOT;
$title = $this->news[2]->title();
$imgurl = $this->news[2]->imgurl();
$content = $this->news[2]->content();
echo <<<EOT
<div class="article-background"></div>
<a class="article-link" href="#"></a>
<img class="article-image" src="$imgurl" alt="" />
<div class="article-content">
<img class="article-half-image" src="$imgurl" alt="" />
<div class="article-triangle"></div>
<div class="nasa-launch">
<h4>$title</h4>
<p>$content</p>
<div class="nasa-launch-links">
<a href="#">Mission Site</a>
<a href="#">Briefing Schedule</a>
<a href="#">Launch Updates</a>
<a href="#">Video to Bennu and Back</a>
</div>
</div>
</div>
</div>
</div>
</article>
<article class="content-small">
<div>
<div class="article-content-container">
<div class="article-background"></div>
<a class="article-link" href="#"></a>
<img class="article-image" src="" alt="" />
<div class="article-content">
<iframe src="https://www.youtube.com/embed/XY6idnRlPsU?si=HnFL8-if6-zB6tU2" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
</div>
</div>
</div>
</article>
<article class="content-medium">
<div>
<div class="article-content-container">
<div class="article-background"></div>
<a class="article-link" href="#"></a>
<img class="article-image" src="../img/ocean_worlds.jpg" alt="" />
<div class="article-content"></div>
</div>
</div>
</article>
<article class="content-small">
<div>
<div class="article-content-container">
<div class="article-background"></div>
<a class="article-link" href="#"></a>
<img class="article-image" src="../img/tweet.png" alt="" />
<div class="article-content"></div>
</div>
</div>
</article>
EOT;
foreach ($this->news as $news) {
$this->createSmallContent($news);
}
echo <<<EOT
</main>
</body>
EOT;
$this->generatePageFooter();
}
private function createSmallContent(News $news):void {
$title = $news->title();
$imgurl = $news->imgurl();
$content = $news->content();
echo <<<EOT
<article class="content-small">
<div>
<div class="article-content-container">
<div class="article-background"></div>
<a class="article-link" href="#"></a>
<img class="article-image" src="$imgurl" alt="" />
<div class="article-content">
<div class="overlay">
<h4 class="overlay-title">$title</h4>
<h4 class="overlay-description">$content</h4>
</div>
</div>
</div>
</div>
</article>
EOT;
}
protected function processReceivedData():void
{
parent::processReceivedData();
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if (isset($_POST[self::FILE_NAME])) {
$_SESSION[NEWS_FILE] = $_POST[self::FILE_NAME];
header("Location: ../index.php");
die();
}
}
}
public static function main():void
{
try {
$page = new Index();
$page->processReceivedData();
$page->generateView();
} catch (Exception $e) {
header("Content-type: text/html; charset=UTF-8");
echo $e->getMessage();
}
}
}
Index::main();