2013-02-05 13:16:51 -06:00
|
|
|
require_dependency 'category_serializer'
|
|
|
|
|
|
|
|
class CategoriesController < ApplicationController
|
|
|
|
|
|
|
|
before_filter :ensure_logged_in, except: [:index, :show]
|
2013-04-18 16:07:06 -05:00
|
|
|
before_filter :fetch_category, only: [:show, :update, :destroy]
|
2013-04-26 12:10:41 -05:00
|
|
|
skip_before_filter :check_xhr, only: [:index]
|
2013-02-05 13:16:51 -06:00
|
|
|
|
|
|
|
def index
|
2013-09-11 14:33:05 -05:00
|
|
|
@description = SiteSetting.site_description
|
|
|
|
|
2013-10-17 01:44:56 -05:00
|
|
|
options = {}
|
2013-12-11 14:23:41 -06:00
|
|
|
options[:latest_posts] = params[:latest_posts] || SiteSetting.category_featured_topics
|
2013-10-17 01:44:56 -05:00
|
|
|
|
|
|
|
@list = CategoryList.new(guardian,options)
|
2013-05-28 20:15:30 -05:00
|
|
|
@list.draft_key = Draft::NEW_TOPIC
|
|
|
|
@list.draft_sequence = DraftSequence.current(current_user, Draft::NEW_TOPIC)
|
|
|
|
@list.draft = Draft.get(current_user, @list.draft_key, @list.draft_sequence) if current_user
|
|
|
|
|
2013-04-11 01:24:08 -05:00
|
|
|
discourse_expires_in 1.minute
|
2013-05-28 13:54:00 -05:00
|
|
|
|
|
|
|
store_preloaded("categories_list", MultiJson.dump(CategoryListSerializer.new(@list, scope: guardian)))
|
2013-04-26 12:10:41 -05:00
|
|
|
respond_to do |format|
|
|
|
|
format.html { render }
|
|
|
|
format.json { render_serialized(@list, CategoryListSerializer) }
|
|
|
|
end
|
2013-02-05 13:16:51 -06:00
|
|
|
end
|
2013-02-07 09:45:24 -06:00
|
|
|
|
2013-10-20 23:24:37 -05:00
|
|
|
def move
|
2013-10-20 23:33:42 -05:00
|
|
|
guardian.ensure_can_create!(Category)
|
|
|
|
|
2013-10-20 23:24:37 -05:00
|
|
|
params.require("category_id")
|
|
|
|
params.require("position")
|
|
|
|
|
|
|
|
if category = Category.find(params["category_id"])
|
|
|
|
category.move_to(params["position"].to_i)
|
|
|
|
render json: success_json
|
|
|
|
else
|
|
|
|
render status: 500, json: failed_json
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2013-02-05 13:16:51 -06:00
|
|
|
def show
|
|
|
|
render_serialized(@category, CategorySerializer)
|
|
|
|
end
|
|
|
|
|
|
|
|
def create
|
|
|
|
guardian.ensure_can_create!(Category)
|
|
|
|
|
|
|
|
@category = Category.create(category_params.merge(user: current_user))
|
|
|
|
return render_json_error(@category) unless @category.save
|
2013-02-07 09:45:24 -06:00
|
|
|
|
2013-10-21 01:17:40 -05:00
|
|
|
@category.move_to(category_params[:position].to_i) if category_params[:position]
|
2013-02-05 13:16:51 -06:00
|
|
|
render_serialized(@category, CategorySerializer)
|
|
|
|
end
|
|
|
|
|
|
|
|
def update
|
|
|
|
guardian.ensure_can_edit!(@category)
|
2013-10-21 01:17:40 -05:00
|
|
|
json_result(@category, serializer: CategorySerializer) { |cat|
|
2013-12-16 14:13:43 -06:00
|
|
|
if category_params[:position]
|
|
|
|
category_params[:position] == 'default' ? cat.use_default_position : cat.move_to(category_params[:position].to_i)
|
|
|
|
end
|
2013-10-21 01:21:16 -05:00
|
|
|
category_params.delete(:position)
|
|
|
|
cat.update_attributes(category_params)
|
2013-10-21 01:17:40 -05:00
|
|
|
}
|
2013-02-05 13:16:51 -06:00
|
|
|
end
|
|
|
|
|
|
|
|
def destroy
|
2013-04-18 16:07:06 -05:00
|
|
|
guardian.ensure_can_delete!(@category)
|
|
|
|
@category.destroy
|
2013-10-20 23:24:37 -05:00
|
|
|
|
|
|
|
render json: success_json
|
2013-02-05 13:16:51 -06:00
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
|
2013-03-26 17:06:21 -05:00
|
|
|
def required_param_keys
|
2013-03-14 08:16:57 -05:00
|
|
|
[:name, :color, :text_color]
|
2013-02-05 13:16:51 -06:00
|
|
|
end
|
|
|
|
|
|
|
|
def category_params
|
2013-10-21 01:17:40 -05:00
|
|
|
@category_params ||= begin
|
|
|
|
required_param_keys.each do |key|
|
|
|
|
params.require(key)
|
|
|
|
end
|
2013-06-05 01:45:25 -05:00
|
|
|
|
2013-10-21 01:17:40 -05:00
|
|
|
if p = params[:permissions]
|
|
|
|
p.each do |k,v|
|
|
|
|
p[k] = v.to_i
|
|
|
|
end
|
2013-07-16 00:44:07 -05:00
|
|
|
end
|
|
|
|
|
2014-01-29 10:54:34 -06:00
|
|
|
params.permit(*required_param_keys, :position, :parent_category_id, :auto_close_hours, :permissions => [*p.try(:keys)])
|
2013-10-21 01:17:40 -05:00
|
|
|
end
|
2013-02-05 13:16:51 -06:00
|
|
|
end
|
2013-04-18 16:07:06 -05:00
|
|
|
|
|
|
|
def fetch_category
|
|
|
|
@category = Category.where(slug: params[:id]).first || Category.where(id: params[:id].to_i).first
|
|
|
|
end
|
2013-02-05 13:16:51 -06:00
|
|
|
end
|