Skip to content
Snippets Groups Projects
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();