Tag functionalities for new UI
This commit is contained in:
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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
@@ -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.
File renamed without changes.
File renamed without changes.
Reference in new issue
Block a user