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()); }
/** * Subject topics */ public function subject(Request $request, $matches) { $forum = \Forum::find($matches->get('id')); if (!$forum) { return $this->error404($request); } // Assign data $this->view->assign('author', $forum->author->to_array()); $this->view->assign('subject', $forum->to_array()); // Manage forum if ($this->user && $this->user->can('manage_forum')) { // Delete topic if ($request->get('delete')) { $delete = \ForumTheme::find($request->get('delete')); if ($delete->delete()) { $this->view->assign('success', $this->lang->translate('forum.post.deleted')); } else { $this->view->assign('error', $this->lang->translate('forum.post.delete_failed')); } } // Close if ($request->get('close')) { $close = \ForumTheme::find($request->get('close')); $close->close($this->user); } // Open if ($request->get('open')) { $open = \ForumTheme::find($request->get('open')); $open->open(); } // Pin if ($request->get('pin')) { $pin = \ForumTheme::find($request->get('pin')); $pin->pin(); } // Unpin if ($request->get('unpin')) { $unpin = \ForumTheme::find($request->get('unpin')); $unpin->unpin(); } // Redirect if ($request->get('next')) { return static::redirect_response($request->get('next')); } } // Send date headers Env::$response->headers->set('Last-Modified', date('D, d M Y H:i:s \\G\\M\\T', $forum->updated_at)); // Topics filter $filter = ['conditions' => ['forum_id = ?', $forum->id], 'order' => 'priority DESC, active ASC, updated_at DESC, created_at DESC']; // Paginator $total_rows = \ForumTheme::count(['conditions' => $filter['conditions']]); /** @var Listing $paginator */ $paginator = NCService::load('Paginator.Listing', [$request->page, $total_rows]); $filter = array_merge($filter, $paginator->limit()); // Subject topics $topics_list = \ForumTheme::as_array(\ForumTheme::find('all', $filter)); return $this->view->render('forum/topics.twig', ['title' => $forum->title, 'topics_list' => $topics_list, 'listing' => $paginator->pages(), 'page' => $request->page]); }