Tag functionalities for new UI

This commit is contained in:
chris committed 2013-04-23 20:18:03 +08:00
1 parent ff03d66439
commit bf3d20ea46
25 files changed
+212 -30

No files matched your search

@@ -0,0 +1,57 @@
class Admin::ModuleTagsController < OrbitBackendController
before_filter :force_order_for_visitor, only: [:index]
before_filter :force_order_for_user, except: [:index]
before_filter :for_app_sub_manager, except: [:index]
def index
@tags = get_tags
@included_tags = @module_app.module_tags.where(is_default: true)
@default_tags = get_default_tags
end
def new
end
def edit
@tag = Tag.find(params[:id])
end
def create
@tag = @module_app ? @module_app.module_tags.create(params[:tag])
end
def update
@tag = Tag.find(params[:id])
@tag.update_attributes(params[:tag])
end
def destroy
@tag = Tag.find(params[:id])
@tag.destroy
respond_to do |format|
format.js { render 'js/remove_element', :locals => {:id => "#{dom_id @tag}"} }
end
end
def update_included_default
@module_app.update_attribute(:module_tag_ids, (@module_app.module_tag_ids - get_default_tag_ids) << params[:ids])
end
protected
def setup_vars
@module_app = ModuleApp.find(params[:module_app_id]) rescue nil
raise ModuleAppError, 'Can not find ModuleApp' if @module_app.nil?
@module_app_id = @module_app.id rescue nil
end
def get_default_tags
ModuleTag.where(is_default: true)
end
def get_default_tag_ids
get_default_tags.map{|t| t.id}
end
end
+48 -13
View File
@@ -1,11 +1,11 @@
class Admin::TagsController < OrbitBackendController
before_filter :force_order_for_visitor,:only=>[:index]
before_filter :force_order_for_user,:except => [:index]
before_filter :for_app_sub_manager,:except => [:index]
before_filter :set_module_app
before_filter :force_order_for_visitor, only: [:index]
before_filter :force_order_for_user, except: [:index]
before_filter :for_app_sub_manager, except: [:index]
def index
@tags = get_tags
@module_apps = ModuleApp.where(has_tag: true)
end
def new
@@ -17,7 +17,7 @@ class Admin::TagsController < OrbitBackendController
end
def create
@tag = @module_app ? @module_app.tags.create(params[:tag]) : Tag.create(params[:tag])
@tag = @module_app.module_tags.create(params[:tag].merge(is_default: true))
end
def update
@@ -32,16 +32,51 @@ class Admin::TagsController < OrbitBackendController
format.js { render 'js/remove_element', :locals => {:id => "#{dom_id @tag}"} }
end
end
protected
def get_tags
@tags = @module_app.blank? ? Tag.all : @module_app.tags
def add_to_default
tags = Tag.find(params[:ids])
tag_leases = tags.map{|t| t.tag_lease}
tags.each {|t| t.update_attribute(:is_default, true)}
tag_leases.each {|t| t.update_attribute(:module_app_ids, module_app_ids << @module_app.id)}
end
def set_module_app
@module_app = ModuleApp.find(params[:module_app_id]) if params[:module_app_id]
@module_app_id = @module_app.id rescue nil
def merge
tags = Tag.find(params[:ids])
taggings = tags.map{|t| t.taggings}
tag_leases = tags.map{|t| t.tag_lease}
name = params[:name]
module_app_ids = tag_leases.map{|t| t.module_app_ids}.flatten.uniq
if tags.detect{|t| t.is_default == true} || module_app_ids.count > 1
merge_default_tags(name, taggings, module_app_ids)
else
merge_tags(name, tags, module_app_ids[0])
end
taggings.each(&:destroy)
tag_leases.each(&:destroy)
end
protected
def create_default_tag(name, taggings, module_app_ids)
create_tag(@module_app, name, taggings, module_app_ids, true)
end
def create_tag(module_app, name, taggings, module_app_ids=[module_app], default=false)
new_tag = module_app.tags.create(name_translations: name, is_default: default)
taggings.each do |tagging|
tagging.tag = new_tag
tagging.save
end
tag_lease = new_tag.create_tag_lease(module_app_ids: (module_app_ids << module_app).uniq, is_default: default)
end
def merge_default_tags(name, taggings, module_app_ids)
create_default_tag(name, taggings, module_app_ids)
end
def merge_tags(name, taggings, module_app_id)
module_app = ModuleApp.find(module_app_id)
create_tag(module_app, name, taggings)
end
end