/** * @param $postId * @param \User $author * @return bool|void */ public static function minus($postId, \User $author) { $forum = \ForumTheme::find(intval($postId)); if (!$forum) { return false; } if ($forum->author_id == $author->id) { return $forum->author_id; } if ($forum->author->rate(-1)) { return $forum->author_id; } return false; }
public function subject_list($request, $matches) { $title = $this->lang->translate('forum.themes'); $root = \Forum::find($matches->get('id')); if (!$root) { return static::redirect_response('/control/forum/'); } $title .= ' "' . $root->title . '"'; // Delete topic if ($request->get('delete')) { $forum = \ForumTheme::find_by_id(intval($request->get('delete'))); if ($forum) { $forum->delete(); $this->view->assign('message', $this->lang->translate('form.deleted')); } } // Filter $filter = ['conditions' => ['forum_id = ?', $root->id]]; if ($request->get('author')) { $author = \User::find($request->get('author')); if ($author) { $this->view->assign('author', $author->id); $title .= ', ' . $author->username; $filter['conditions'] = ['author_id = ? AND forum_id = ?', $author->id, $root->id]; } } $filter['order'] = 'id DESC'; if ($request->order) { $filter['order'] = $request->order; } /** @var Listing $paginator */ $paginator = NCService::load('Paginator.Listing', [$request->page, \ForumTheme::count('all')]); $filter = array_merge($filter, $paginator->limit()); // Filter subjects $subjects = \ForumTheme::as_array(\ForumTheme::all($filter)); return $this->view->render('forum/list_subjects.twig', ['title' => $title, 'subjects_list' => $subjects, 'listing' => $paginator->pages(), 'page' => $paginator->cur_page]); }
/** * @return array */ public function to_array() { return array_merge(['author' => $this->author->to_array(), 'forum' => $this->forum_id ? $this->forum->to_array() : [], 'subjects' => $this->forum_id ? 0 : Forum::count(['conditions' => ['forum_id = ?', $this->id]]), 'topics' => $this->forum_id ? ForumTheme::count(['conditions' => ['forum_id = ?', $this->id]]) : 0], parent::to_array()); }
/** * Comments list * * @param $request * @param $matches * @return mixed */ public function posts_list($request, $matches) { $topic = $this->view->get('topic', $matches->get('topic')); $topic = $topic instanceof \ForumTheme ? $topic : \ForumTheme::find($topic); $filter = ['conditions' => ['theme_id = ?', $topic->id], 'order' => 'created_at DESC']; /** @var Listing $paginator */ $paginator = NCService::load('Paginator.Listing', [$request->page, \ForumPost::count($filter)]); $filter = array_merge($filter, $paginator->limit()); // Comments $comments = \ForumPost::find('all', $filter); $comments = \ForumPost::as_array($comments); // Context $context = ['topic' => $topic, 'posts_list' => $comments, 'page' => $paginator->cur_page, 'listing' => $paginator->pages()]; // Add comment status if ($status = $this->view->get('status', false)) { $context['status'] = $status; } // Build response if ($request->get('type', 'html') == 'json') { unset($context['listing']); $context['pages'] = $paginator->pages; $context['rows'] = $paginator->num_rows; return static::json_response($context); } return $this->view->render('forum/posts.twig', $context); }