/** * displays the topics on a forums * @return [type] [description] */ public function action_list() { //in case performing a search if (strlen($search = core::get('search')) >= 3) { return $this->action_search($search); } $this->template->styles = array('css/forums.css' => 'screen'); $this->template->scripts['footer'][] = 'js/forums.js'; $forum = new Model_Forum(); $forum->where('seoname', '=', $this->request->param('forum', NULL))->cached()->limit(1)->find(); if ($forum->loaded()) { //template header $this->template->title = $forum->name . ' - ' . __('Forum'); $this->template->meta_description = $forum->description; Breadcrumbs::add(Breadcrumb::factory()->set_title($forum->name)); //count all topics $count = DB::select(array(DB::expr('COUNT("id_post")'), 'count'))->from(array('posts', 'p'))->where('id_post_parent', 'IS', NULL)->where('id_forum', '=', $forum->id_forum)->cached()->execute(); $count = array_keys($count->as_array('count')); $pagination = Pagination::factory(array('view' => 'pagination', 'total_items' => isset($count[0]) ? $count[0] : 0))->route_params(array('controller' => $this->request->controller(), 'action' => $this->request->action(), 'forum' => $this->request->param('forum'))); $pagination->title($this->template->title); //getting all the topic for the forum $topics = DB::select('p.*')->select(array(DB::select(DB::expr('COUNT("id_post")'))->from(array('posts', 'pc'))->where('pc.id_post_parent', '=', DB::expr(Database::instance('default')->table_prefix() . 'p.id_post'))->where('pc.id_forum', '=', $forum->id_forum)->where('pc.status', '=', Model_Post::STATUS_ACTIVE)->group_by('pc.id_post_parent'), 'count_replies'))->select(array(DB::select('ps.created')->from(array('posts', 'ps'))->where('ps.id_post', '=', DB::expr(Database::instance('default')->table_prefix() . 'p.id_post'))->or_where('ps.id_post_parent', '=', DB::expr(Database::instance('default')->table_prefix() . 'p.id_post'))->where('ps.id_forum', '=', $forum->id_forum)->where('ps.status', '=', Model_Post::STATUS_ACTIVE)->order_by('ps.created', 'DESC')->limit(1), 'last_message'))->from(array('posts', 'p'))->where('id_post_parent', 'IS', NULL)->where('id_forum', '=', $forum->id_forum)->where('status', '=', Model_Post::STATUS_ACTIVE)->order_by('last_message', 'DESC')->limit($pagination->items_per_page)->offset($pagination->offset)->as_object()->execute(); $pagination = $pagination->render(); $this->template->bind('content', $content); $this->template->content = View::factory('pages/forum/list', array('topics' => $topics, 'forum' => $forum, 'pagination' => $pagination)); } else { //throw 404 throw HTTP_Exception::factory(404, __('Page not found')); } }
/** * CRUD controller: DELETE */ public function action_delete() { $this->auto_render = FALSE; $forum = new Model_Forum($this->request->param('id')); //update the elements related to that ad if ($forum->loaded()) { try { $forum->delete(); $this->template->content = 'OK'; Core::delete_cache(); Alert::set(Alert::SUCCESS, __('Forum deleted')); } catch (Exception $e) { Alert::set(Alert::ERROR, $e->getMessage()); } } else { Alert::set(Alert::ERROR, __('Forum not deleted')); } HTTP::redirect(Route::url('oc-panel', array('controller' => 'forum', 'action' => 'index'))); }