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
+6 -1
View File
@@ -8,7 +8,7 @@ class ModuleApp
field :title
field :sidebar_order,type: Integer,default: 0
has_many :tags, as: :module_tag, dependent: :destroy
has_and_belongs_to_many :module_tags, dependent: :destroy
def refetch_setting!(reg)
# %w{module_label category base_url version organization author intro update_info create_date}.each do |field|
@@ -19,6 +19,7 @@ class ModuleApp
self[:get_widget_style] = reg.get_widgets
self[:using_default_widget] = !reg.get_default_widget.blank?
self[:widgets] = reg.get_widgets
self[:has_tag] = reg.get_has_tags
end
@@ -136,4 +137,8 @@ class ModuleApp
self.where(key: key)[0] rescue nil
end
def tags
self.module_tags.map{|t| t.tag }
end
end
+21
View File
@@ -0,0 +1,21 @@
class ModuleTag
include Mongoid::Document
include Mongoid::Timestamps
field :is_default, type: Boolean, deault: false
has_one :tag, as: :tag_lease, dependent: :destroy, autosave: true
has_and_belongs_to_many :module_apps
after_initialize :init_tag
private
def init_tag
if new_record?
self.build_tag(name_translations: self.name_translations, is_default: self.is_default)
self.remove_attribute(:name_translations)
end
end
end
+4 -5
View File
@@ -11,14 +11,13 @@ class Tag
is_impressionable :counter_cache => { :column_name => :view_count }
field :name, localize: true
field :view_count, :type => Integer, :default => 0
field :cloud_view_count, :type => Integer, :default => 0
field :cloud_view_count, type: Integer, default: 0
field :is_default, type: Boolean, deault: false
field :view_count, type: Integer, default: 0
belongs_to :module_tag, polymorphic: true
belongs_to :tag_lease, polymorphic: true, dependent: :destroy
has_many :taggings, dependent: :destroy
#field :cloud_amper,:type: Integer,:default=> 0
def self.sorted_for_cloud
tags = {}
self.all.each{ |tag|
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.