orbit-basic/app/controllers/admin/tags_controller.rb

93 lines
2.4 KiB
Ruby

class Admin::TagsController < OrbitBackendController
include OrbitTag::Merging
before_filter :force_order_for_visitor, only: [:index]
before_filter :force_order_for_user, except: [:index]
def index
@tags = @module_app.module_tags
@module_apps = ModuleApp.where(has_tag: true)
end
def new
@tag = ModuleTag.new
render layout: false
end
def edit
@tag = ModuleTag.find(params[:id])
render layout: false
end
def create
@tag = @module_app.module_tags.build(params[:module_tag].merge(is_default: true))
if @tag.save
redirect_to admin_tags_url
else
@tag = Tag.new(params[:module_tag])
flash.now[:error] = t('create.error.tag')
render :action => "new"
end
end
def update
@tag = ModuleTag.find(params[:id])
if @tag.update_attributes(params[:module_tag])
redirect_to action: :index
else
flash.now[:error] = t('update.error.tag')
render :action => "edit"
end
end
def add_to_default
module_tags = ModuleTag.find(params[:ids].split(',')) rescue nil
if module_tags
module_tags.each do |module_tag|
module_tag.update_attribute(:is_default, true)
clone_tag_to_default(module_tag)
end
end
redirect_to admin_tags_url
end
def delete_tags
tags = ModuleTag.find(params[:ids].split(',')) rescue nil
if tags
tags.each(&:destroy)
end
redirect_to admin_tags_url
end
def merge
module_tags = ModuleTag.find(params[:ids])
tags = module_tags.map{|t| t.tag}
taggings, is_default = tags.inject([[], []]) do |values, tag|
values[0] << tag.taggings
values[1] << tag.is_default
values
end
taggings.flatten!
is_default.uniq!
name = params[:name]
module_app_ids = module_tags.map{|t| t.module_app_id}.flatten.uniq
if is_default.size == 1 && is_default[0] == true
merge_default_tags(name, module_tags)
elsif is_default.include?(true) || module_app_ids.count > 1
merge_with_default_tags(name, module_tags)
else
merge_tags(name, taggings, module_app_ids[0])
module_tags.each(&:destroy)
end
redirect_to admin_tags_url
end
protected
def setup_vars
@app_title ||= controller_path.split('/')[1].singularize
@module_app ||= ModuleApp.first(conditions: {:key => @app_title} )
raise ModuleAppError, 'Can not find ModuleApp' if @module_app.nil?
end
end