Beispiel #1
0
 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]);
 }
Beispiel #2
0
 /**
  * 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]);
 }