class Admin::TagsController < OrbitBackendController include OrbitTag::Merging open_for_user only: [:index] open_for_manager 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, :status => 303 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