class ForumController < ApplicationController helper :forum #caches_page :index, :forum # Use HubSsoLib for permissions management, as a layer on top of # the provision within RForum. @@hubssolib_permissions = HubSsoLib::Permissions.new({ :new => [ :admin, :webmaster ], :edit => [ :admin, :webmaster ], :move => [ :admin, :webmaster ] }) def ForumController.hubssolib_permissions @@hubssolib_permissions end # Display the list of topics in a forum. def forum begin @forum = Forum.find(@params['id']) return if redirect_if_site_doesnt_match rescue ActiveRecord::RecordNotFound render_text "Forum not found", 404 return end @title = @forum.name @page = @params['page'].to_i @page = 1 if @page == 0 @topics_per_page = RForum::CONFIG[:topics_per_page] range = ((@page - 1) * @topics_per_page)..(@page * @topics_per_page) tag = @params['tag'] @topics = @forum.get_topics_for_list(range, tag, @user.can_view_deleted_posts?) if @topics.size < @topics_per_page @last_page = true end if @topics.empty? render 'forum/forum', 200 end if not @user.guest? topic_read_times = @user.topic_read_times @topics.each do |topic| topic['last_read_time'] = topic_read_times[topic.id] end end end # List all forums. def list @title = l(:forum_list_title) @forums.each{|f| f['last_post'] = f.get_last_post} end def index redirect_to :controller => 'forum', :action => 'list' end def search @title = l(:search_title) if @params['forums'] @selected_forums = @params['forums'].collect {|id| id.to_i} else @selected_forums = (@forums.collect {|f| f.id}) end if @params['query'] @query = @params['query'] @page_params = {'query' => @query} @page = @params['page'].to_i @page = 1 if @page == 0 @posts_per_page = RForum::CONFIG[:search_results_per_page] @results = Post.search(@query, @selected_forums, @posts_per_page, (@page - 1) * @posts_per_page) if @results.size < @posts_per_page @last_page = true end end end def new raise RForum::SecurityError unless @user.admin? @title = l(:create_forum_title) @forum = Forum.new(@params['forum']) if @params['save'] @forum.save redirect_to :action => 'list' else render_action 'edit' end end def edit raise RForum::SecurityError unless @user.admin? @title = l(:create_forum_title) @forum = Forum.find(@params['id']) if @params['save'] Forum.update(@params['id'], @params['forum']) redirect_to :action => 'list' elsif @params['delete'] # TODO: javascript confirmation is not sufficient because this operation # is pretty dangerous Forum.find(@params['id']).destroy redirect_to :action => 'list' end end def move raise RForum::SecurityError unless @user.admin? @forum = Forum.find(@params['id']) if @params['direction'] == 'up' @forum.move_higher elsif @params['direction'] == 'down' @forum.move_lower end redirect_to :action => 'list' end end