93 lines
2.4 KiB
Ruby
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
|