ensl.org/app/controllers/topics_controller.rb
2014-03-31 22:37:38 +01:00

80 lines
1.9 KiB
Ruby

class TopicsController < ApplicationController
before_filter :get_topic, only: [:show, :reply, :edit, :update, :destroy]
def index
render partial: true, locals: {page: params[:p].to_i}
end
def show
raise AccessError unless @topic.can_show? cuser
@posts = @topic.posts.basic.paginate(:page => params[:page],
:per_page => Topic::POSTS_PAGE)
return_here
@topic.record_view_count(request.remote_ip, cuser.nil?)
@topic.read_by! cuser if cuser
@topic.forum.read_by! cuser if cuser
@newpost = Post.new
@newpost.topic = @topic
@newpost.user = cuser
@lock = (@topic.lock ? @topic.lock : Lock.new(:lockable => @topic))
render layout: 'forums'
end
def reply
@post = @topic.posts.build
raise AccessError unless @post.can_create? cuser
if request.xhr?
render 'quickreply', layout: false
else
render layout: 'forums'
end
end
def new
@topic = Topic.new
@topic.forum = Forum.find(params[:id])
raise AccessError unless @topic.can_create? cuser
render layout: 'forums'
end
def edit
raise AccessError unless @topic.can_update? cuser
render layout: 'forums'
end
def create
@topic = Topic.new(params[:topic])
@topic.user = cuser
raise AccessError unless @topic.can_create? cuser
if @topic.save
flash[:notice] = t(:topics_create)
redirect_to(@topic)
else
render :new
end
end
def update
raise AccessError unless @topic.can_update? cuser
if @topic.update_attributes(params[:topic])
flash[:notice] = t(:topics_update)
redirect_to(@topic)
else
render :edit
end
end
def destroy
raise AccessError unless @topic.can_destroy? cuser
@topic.destroy
redirect_to(topics_url)
end
private
def get_topic
@topic = Topic.find(params[:id])
end
end