<?php /** * * @package phpBB Extension - eparsons/restapi * @copyright (c) 2018 Eric Parsons, (copyleft) 2023 Tomáš Valenta * @license https://opensource.org/licenses/GPL-2.0 GNU General Public License v2 * */ namespace eparsons\restapi\controller\forums; use eparsons\restapi\ErrorResponse; use eparsons\restapi\Validation; use phpbb\config\config; use phpbb\user; use phpbb\auth; use Symfony\Component\HttpFoundation\JsonResponse; if (!defined('IN_PHPBB')) { exit(); } class Forums { /** * phpBB user * * @var user */ private $user; /** * REST API validator * * @var Validation */ private $validation; /** * Constructor * * @param user $user * @param Validation $validation */ public function __construct(user $user, Validation $validation) { $this->user = $user; $this->validation = $validation; } /** * Handler for /api/forums/{forumId}/threads GET requests * * @return JsonResponse A Symfony Response object */ public function viewThreads($forumId) { $errorResponse = $this->validation->ValidateRequest('GET'); if ($errorResponse != null) { return $errorResponse; } global $db, $phpbb_container, $auth; if ( !$auth->acl_gets('f_list', 'f_list_topics', 'f_read', $forumId) || ( $forum_data['forum_type'] == FORUM_LINK && $forum_data['forum_link'] && !$auth->acl_get('f_read', $forumId) ) ) { return new ErrorResponse( "NotFound", "This forum does not exist.", 404 ); } $phpbb_content_visibility = $phpbb_container->get('content.visibility'); $threads_query = $db->sql_query( 'SELECT * FROM ' . TOPICS_TABLE . ' WHERE forum_id = ' . $forumId . ' AND ' . $phpbb_content_visibility->get_visibility_sql('topic', $forumId) . ' ORDER BY topic_id DESC' ); $topics = array(); while ($row = $db->sql_fetchrow($threads_query)) { $topic = array(); $topic["id"] = $row["topic_id"]; $topic["title"] = $row["topic_title"]; $topic["time"] = (int)$row["topic_time"]; $first_post_query = $db->sql_query( 'SELECT * FROM ' . POSTS_TABLE . ' WHERE topic_id = ' . $row["topic_id"] . ' AND ' . $phpbb_content_visibility->get_visibility_sql('post', $forumId) . ' ORDER BY post_id DESC' ); while ($first_post_row = $db->sql_fetchrow($first_post_query)) { $topic["content"] = $first_post_row["post_text"]; } array_push($topics, $topic); } return new JsonResponse($topics, 200); } }