<?php
/*
 * The news page backend
 */

namespace Sakura;

class News {

    private $posts      = []; // Posts array
    private $posters    = []; // Posters array (so we don't create a new user object every time)

    // Initialise the news object
    function __construct($category, $comments = true) {

        // Get the news posts and assign them to $posts
        $posts = Database::fetch('news', true, ['category' => [$category, '=']], ['id', true]);

        // Attach poster data
        foreach($posts as $post) {

            // Check if we already have an object for this user
            if(!array_key_exists($post['uid'], $this->posters)) {

               // Create new object
               $this->posters[$post['uid']] = new User($post['uid']);

            }

            // Parse the news post
            $post['content_parsed'] = Main::mdParse($post['content']);

            // Attach the poster
            $post['poster'] = $this->posters[$post['uid']];

            // Add post to posts array
            $this->posts[$post['id']] = $post;

        }

    }

    // Get the amount of posts
    public function getCount() {

        return count($this->posts);

    }

    // Get the amount of posts
    public function postExists($id) {

        return array_key_exists($id, $this->posts) ? $id : 0;

    }

    // Get a single post
    public function getPost($id) {

        return array_key_exists($id, $this->posts) ? $this->posts[$id] : 0;

    }

    // Getting posts
    public function getPosts($start = null, $end = null) {

        // Get posts
        $posts = $this->posts;

        // Only return requested posts
        if($start !== null && $end !== null) {

            // Slice the array
            $posts = array_slice($posts, $start, $end, true);

        } elseif($start !== null) {

            // Devide the array in parts (pages)
            $posts = array_chunk($posts, $start, true);

        }

        return $posts;

    }

}