Skip to content
Snippets Groups Projects
NewsFetch.php 1.92 KiB
Newer Older
  • Learn to ignore specific revisions
  • Silas Meister's avatar
    Silas Meister committed
    <?php declare(strict_types=1);
    
    require_once 'Page.php';
    require_once 'util/constants.php';
    
    class NewsFetch extends Page
    {
    
        private const ID = "id";
    
    Silas Meister's avatar
    Silas Meister committed
        private const TITLE = "title";
        private const SEARCH_WORD = "searchWord";
    
        private string $searchWord;
    
        protected function __construct()
        {
            parent::__construct();
    
            $this->searchWord = "";
        }
    
        public function __destruct()
        {
            parent::__destruct();
        }
    
        protected function getViewData():array
        {
            $data = array();
    
    
            if (empty(trim($this->searchWord)))
                return $data;
    
    
    Silas Meister's avatar
    Silas Meister committed
            $likeSearchWord = "%" . $this->searchWord . "%";
    
    
    		$stmt = $this->database->prepare("SELECT n.id, n.title FROM news n WHERE LOWER(n.title) LIKE LOWER(?) LIMIT 5");
    
    Silas Meister's avatar
    Silas Meister committed
            $stmt->bind_param("s", $likeSearchWord);
            $stmt->execute();
            $resultSet = $stmt->get_result();
    
            while($row = $resultSet->fetch_assoc()) {
    
                $id = $row[self::ID];
    
    Silas Meister's avatar
    Silas Meister committed
                $title = $row[self::TITLE];
    
    
                $data[] = array(self::ID => $id, self::TITLE => $title); 
    
    Silas Meister's avatar
    Silas Meister committed
            }
    
            return $data;
        }
    
        protected function generateView():void
        {
    		$data = $this->getViewData();
    
            header("Content-type: application/json");
            
            $json = json_encode($data);
            echo $json;
        }
    
        protected function processReceivedData():void
        {
            parent::processReceivedData();
    
            if ($_SERVER['REQUEST_METHOD'] === 'GET') {
                if (isset($_GET[self::SEARCH_WORD])) {
                    $this->searchWord = $_GET[self::SEARCH_WORD];    
                }
            }
        }
    
        public static function main():void
        {
            try {
                $page = new NewsFetch();
                $page->processReceivedData();
                $page->generateView();
            } catch (Exception $e) {
                header("Content-type: application/json");
                echo $e->getMessage();
            }
        }
    }
    
    NewsFetch::main();