Skip to content
Snippets Groups Projects
Index.php 9.69 KiB
Newer Older
  • Learn to ignore specific revisions
  • Silas Meister's avatar
    Silas Meister committed
    <?php declare(strict_types=1);
    
    require_once 'Page.php';
    
    Silas Meister's avatar
    Silas Meister committed
    require_once 'util/constants.php';
    
    require_once 'data/News.php';
    
    Silas Meister's avatar
    Silas Meister committed
    
    class Index extends Page {
    
    
        private const TITLE = 'title';
        private const IMGURL = 'imgurl';
        private const CONTENT = 'content';
    
    
    Silas Meister's avatar
    Silas Meister committed
        private array $news;
    
    
    Silas Meister's avatar
    Silas Meister committed
        protected function __construct()
        {
            parent::__construct();
    
    
    Silas Meister's avatar
    Silas Meister committed
            $this->news = array();
    
    
    Silas Meister's avatar
    Silas Meister committed
            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);  
            } 
    
            return $news;
    
    Silas Meister's avatar
    Silas Meister committed
        }
    
        protected function generateView():void
        {
    
    Silas Meister's avatar
    Silas Meister committed
    		$this->news = $this->getViewData();
    
            $this->generatePageHeader('NASA', '../functions.js');
    
    Silas Meister's avatar
    Silas Meister committed
            
            echo <<<EOT
    
    
    <body class="nasa-body">
    
    Silas Meister's avatar
    Silas Meister committed
    <header class="nasa-header">
    
    <img class="nasa-img" src="../img/nasa.png" alt="" />
    
    Silas Meister's avatar
    Silas Meister committed
    
    <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>
    
    Silas Meister's avatar
    Silas Meister committed
                <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="" />
    
    Silas Meister's avatar
    Silas Meister committed
                </form>
    
                <div id="search-results"></div>
    
    Silas Meister's avatar
    Silas Meister committed
            </li>
    
    Silas Meister's avatar
    Silas Meister committed
            <li><img src="../img/share_icon.png" alt="" /></li>
    
            <li class="admin-button"><a href="Admin.php">Admin</a></li>
    
    Silas Meister's avatar
    Silas Meister committed
        </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="" />
    
    Silas Meister's avatar
    Silas Meister committed
    
                    <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="" />
    
    Silas Meister's avatar
    Silas Meister committed
                    </div>
                </div>
            </div>
        </article>
        <article class="content-small">
    
    Silas Meister's avatar
    Silas Meister committed
             <div>
    
    Silas Meister's avatar
    Silas Meister committed
                <div class="article-content-container">
    EOT;
    
    Silas Meister's avatar
    Silas Meister committed
            $title = $this->news[0]->title();
            $imgurl = $this->news[0]->imgurl();
            $content = $this->news[0]->content();
    
    Silas Meister's avatar
    Silas Meister committed
            
            echo <<<EOT
    
    Silas Meister's avatar
    Silas Meister committed
            
                    <div class="article-background"></div>
    
    
                    <a class="article-link" href="#"></a>
    
    
                    <img class="article-image" src="$imgurl" alt="" />
    
    Silas Meister's avatar
    Silas Meister committed
                    <div class="article-content">
                        <div class="nasa-events-container">
                            <div class="nasa-events-top">
                                <p class="nasa-events-title">$title</p>
    
    Silas Meister's avatar
    Silas Meister committed
                                <div class="line"></div>
    
    Silas Meister's avatar
    Silas Meister committed
                                <a class="nasa-event" href="#">$content</a>
                            </div>
    
    Silas Meister's avatar
    Silas Meister committed
                            <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>
    
    Silas Meister's avatar
    Silas Meister committed
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </article>
    
        <article class="content-small">
            <div>
                <div class="article-content-container">
    EOT;
    
    Silas Meister's avatar
    Silas Meister committed
            $title = $this->news[1]->title();
            $imgurl = $this->news[1]->imgurl();
            $content = $this->news[1]->content();
    
    Silas Meister's avatar
    Silas Meister committed
            
            echo <<<EOT
    
    
    Silas Meister's avatar
    Silas Meister committed
                    <div class="article-background"></div>
    
    
    Silas Meister's avatar
    Silas Meister committed
                    <a class="article-link" href="#"></a>  
    
    
                    <img class="article-image" src="$imgurl" alt="" />
    
    Silas Meister's avatar
    Silas Meister committed
                    <div class="article-content">
                        <div class="overlay">
                            <h4 class="overlay-title">$title</h4>
                            <h4 class="overlay-description">$content</h4>
                        </div>
    
    Silas Meister's avatar
    Silas Meister committed
                    </div>
                </div>
            </div>
        </article>
        <article class="content-medium">
            <div>
                <div class="article-content-container">
    EOT;
    
    Silas Meister's avatar
    Silas Meister committed
            $title = $this->news[2]->title();
            $imgurl = $this->news[2]->imgurl();
            $content = $this->news[2]->content();
    
    Silas Meister's avatar
    Silas Meister committed
            
            echo <<<EOT
    
    Silas Meister's avatar
    Silas Meister committed
                    <div class="article-background"></div>
    
    Silas Meister's avatar
    Silas Meister committed
                    <a class="article-link" href="#"></a>
    
    Silas Meister's avatar
    Silas Meister committed
                    <img class="article-image" src="$imgurl" alt="" />
    
                    <div class="article-content">
                        <img class="article-half-image" src="$imgurl" alt="" />
    
    Silas Meister's avatar
    Silas Meister committed
                        <div class="article-triangle"></div>
    
    Silas Meister's avatar
    Silas Meister committed
                        <div class="nasa-launch">
                            <h4>$title</h4>
    
    Silas Meister's avatar
    Silas Meister committed
                            <p>$content</p>
    
    Silas Meister's avatar
    Silas Meister committed
                            <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>
    
    Silas Meister's avatar
    Silas Meister committed
                        </div>
                    </div>
                </div>
            </div>
        </article>
        <article class="content-small">
            <div>
                <div class="article-content-container">
    
    Silas Meister's avatar
    Silas Meister committed
                    <div class="article-background"></div>
    
    
    Silas Meister's avatar
    Silas Meister committed
                    <a class="article-link" href="#"></a>
    
    
    Silas Meister's avatar
    Silas Meister committed
                    <img class="article-image" src="" alt="" />
    
    
    Silas Meister's avatar
    Silas Meister committed
                    <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">
    
    Silas Meister's avatar
    Silas Meister committed
                    <div class="article-background"></div>
    
    
    Silas Meister's avatar
    Silas Meister committed
                    <a class="article-link" href="#"></a>  
    
    
                    <img class="article-image" src="../img/ocean_worlds.jpg" alt="" />
    
    Silas Meister's avatar
    Silas Meister committed
    
                    <div class="article-content"></div>
    
    Silas Meister's avatar
    Silas Meister committed
                </div>
            </div>
        </article>
        <article class="content-small">
            <div>
                <div class="article-content-container">
    
    Silas Meister's avatar
    Silas Meister committed
                    <div class="article-background"></div>
    
    
    Silas Meister's avatar
    Silas Meister committed
                    <a class="article-link" href="#"></a> 
    
    
    Silas Meister's avatar
    Silas Meister committed
                    <img class="article-image" src="../img/tweet.png" alt="" />
    
                    <div class="article-content"></div>
    
    Silas Meister's avatar
    Silas Meister committed
                </div>
            </div>
        </article>
    
    Silas Meister's avatar
    Silas Meister committed
    
    EOT;    
            foreach ($this->news as $news) {
                $this->createSmallContent($news);
            }
    
            echo <<<EOT
    
    Silas Meister's avatar
    Silas Meister committed
    </main>
    
    Silas Meister's avatar
    Silas Meister committed
    EOT;
    
            $this->generatePageFooter();
        }
    
    
    Silas Meister's avatar
    Silas Meister committed
        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;
        }
    
    
    Silas Meister's avatar
    Silas Meister committed
        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();