Now default tags can be removed from module
This commit is contained in:
parent
19405cf006
commit
3714403f85
|
@ -64,16 +64,16 @@ function checkedLength() {
|
||||||
if($defaultTags.length > 0 && $moduleTags.length > 0) {
|
if($defaultTags.length > 0 && $moduleTags.length > 0) {
|
||||||
$('#deleteTags').attr('rel', "");
|
$('#deleteTags').attr('rel', "");
|
||||||
$('#deleteTags').addClass('hide');
|
$('#deleteTags').addClass('hide');
|
||||||
$('#removeDefault').attr('rel', "");
|
$('#removeDefaults').attr('rel', "");
|
||||||
$('#removeDefault').addClass('hide');
|
$('#removeDefaults').addClass('hide');
|
||||||
$('#mergerTags').addClass('hide');
|
$('#mergerTags').addClass('hide');
|
||||||
} else if ($defaultTags.length > 0) {
|
} else if ($defaultTags.length > 0) {
|
||||||
var ids = new Array();
|
var ids = new Array();
|
||||||
$defaultTags.each(function(i) {
|
$defaultTags.each(function(i) {
|
||||||
ids.push($defaultTags.eq(i).parent().siblings('.tag_id').val());
|
ids.push($defaultTags.eq(i).parent().siblings('.tag_id').val());
|
||||||
});
|
});
|
||||||
$('#removeDefault').attr('rel', "<%= Rails.application.routes.url_helpers.remove_default_admin_module_tags_path %>" + "?module_app_id=" + $('#module_app_id').val() + "&ids=" + ids);
|
$('#removeDefaults').attr('rel', "<%= Rails.application.routes.url_helpers.remove_default_admin_module_tags_path %>" + "?module_app_id=" + $('#module_app_id').val() + "&ids=" + ids);
|
||||||
$('#removeDefault').removeClass('hide');
|
$('#removeDefaults').removeClass('hide');
|
||||||
} else {
|
} else {
|
||||||
var ids = new Array();
|
var ids = new Array();
|
||||||
$moduleTags.each(function(i) {
|
$moduleTags.each(function(i) {
|
||||||
|
@ -91,8 +91,8 @@ function checkedLength() {
|
||||||
$('#deselect').addClass('hide');
|
$('#deselect').addClass('hide');
|
||||||
$('#deleteTags').attr('rel', "");
|
$('#deleteTags').attr('rel', "");
|
||||||
$('#deleteTags').addClass('hide');
|
$('#deleteTags').addClass('hide');
|
||||||
$('#removeDefault').attr('rel', "");
|
$('#removeDefaults').attr('rel', "");
|
||||||
$('#removeDefault').addClass('hide');
|
$('#removeDefaults').addClass('hide');
|
||||||
$('#mergerTags').addClass('hide');
|
$('#mergerTags').addClass('hide');
|
||||||
$('#deselect').off('click', deselect);
|
$('#deselect').off('click', deselect);
|
||||||
};
|
};
|
||||||
|
@ -120,8 +120,23 @@ function checkedLength() {
|
||||||
});
|
});
|
||||||
$('#delete_tags').modal('show', cleanTagInputs());
|
$('#delete_tags').modal('show', cleanTagInputs());
|
||||||
function cleanTagInputs(){
|
function cleanTagInputs(){
|
||||||
var $tagsMerger = $('#delete_tags'),
|
var $tagsDelete = $('#delete_tags'),
|
||||||
$filterItem = $tagsMerger.find('.filter-item');
|
$filterItem = $tagsDelete.find('.filter-item');
|
||||||
|
$filterItem.find('.card, .amount').remove();
|
||||||
|
$filterItem.find('a').removeAttr('class');
|
||||||
|
$filterItem.find('a').removeAttr('href');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
$('#removeDefaults').on('click', function() {
|
||||||
|
$('#remove_defaults .tags-groups').empty();
|
||||||
|
$('#remove_defaults a.remove-defaults').attr("href", $(this).attr("rel"));
|
||||||
|
$defaultTags.each(function(i) {
|
||||||
|
$defaultTags.eq(i).parents('.filter-item').clone().appendTo('#remove_defaults .tags-groups');
|
||||||
|
});
|
||||||
|
$('#remove_defaults').modal('show', cleanTagInputs());
|
||||||
|
function cleanTagInputs(){
|
||||||
|
var $removeDefaults = $('#remove_defaults'),
|
||||||
|
$filterItem = $removeDefaults.find('.filter-item');
|
||||||
$filterItem.find('.card, .amount').remove();
|
$filterItem.find('.card, .amount').remove();
|
||||||
$filterItem.find('a').removeAttr('class');
|
$filterItem.find('a').removeAttr('class');
|
||||||
$filterItem.find('a').removeAttr('href');
|
$filterItem.find('a').removeAttr('href');
|
||||||
|
|
|
@ -7,44 +7,42 @@ class Admin::ModuleTagsController < OrbitBackendController
|
||||||
helper 'admin/tags'
|
helper 'admin/tags'
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@tags = get_tags
|
|
||||||
@included_tags = @module_app.module_tags.where(is_default: true)
|
@included_tags = @module_app.module_tags.where(is_default: true)
|
||||||
|
@tags = @module_app.module_tags
|
||||||
@default_tags = get_default_tags
|
@default_tags = get_default_tags
|
||||||
end
|
end
|
||||||
|
|
||||||
def new
|
def new
|
||||||
@tag = Tag.new
|
@tag = ModuleTag.new
|
||||||
render layout: false
|
render layout: false
|
||||||
end
|
end
|
||||||
|
|
||||||
def edit
|
def edit
|
||||||
@tag = Tag.find(params[:id])
|
@tag = ModuleTag.find(params[:id])
|
||||||
render layout: false
|
render layout: false
|
||||||
end
|
end
|
||||||
|
|
||||||
def create
|
def create
|
||||||
@tag = @module_app.module_tags.build(params[:tag])
|
@tag = @module_app.module_tags.build(params[:module_tag])
|
||||||
if @tag.save
|
if @tag.save
|
||||||
redirect_to admin_module_tags_url(module_app_id: @module_app_id)
|
redirect_to admin_module_tags_url(module_app_id: @module_app_id)
|
||||||
else
|
else
|
||||||
@tag = Tag.new(params[:tag])
|
@tag = ModuleTag.new(params[:module_tag])
|
||||||
flash.now[:error] = t('create.error.tag')
|
|
||||||
render :action => "new"
|
render :action => "new"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def update
|
def update
|
||||||
@tag = Tag.find(params[:id])
|
@tag = ModuleTag.find(params[:id])
|
||||||
if @tag.update_attributes(params[:tag])
|
if @tag.update_attributes(params[:module_tag])
|
||||||
redirect_to admin_module_tags_url(module_app_id: @module_app_id)
|
redirect_to admin_module_tags_url(module_app_id: @module_app_id)
|
||||||
else
|
else
|
||||||
flash.now[:error] = t('update.error.link')
|
|
||||||
render :action => "edit"
|
render :action => "edit"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def delete_tags
|
def delete_tags
|
||||||
tags = Tag.find(params[:ids].split(',')) rescue nil
|
tags = ModuleTag.find(params[:ids].split(',')) rescue nil
|
||||||
if tags
|
if tags
|
||||||
tags.each{|t|t.destroy}
|
tags.each{|t|t.destroy}
|
||||||
end
|
end
|
||||||
|
@ -52,23 +50,20 @@ class Admin::ModuleTagsController < OrbitBackendController
|
||||||
end
|
end
|
||||||
|
|
||||||
def merge
|
def merge
|
||||||
tags = Tag.find(params[:ids])
|
module_tags = ModuleTag.find(params[:ids])
|
||||||
taggings = tags.map{|t| t.taggings}.flatten
|
taggings = module_tags.map{|t| t.tag.taggings}.flatten
|
||||||
tag_leases = tags.map{|t| t.tag_lease}
|
module_tags
|
||||||
name = params[:name]
|
name = params[:name]
|
||||||
merge_tags(name, taggings, @module_app_id)
|
merge_tags(name, taggings, @module_app_id)
|
||||||
tag_leases.each(&:destroy)
|
module_tags.each(&:destroy)
|
||||||
redirect_to admin_module_tags_url(module_app_id: @module_app_id)
|
redirect_to admin_module_tags_url(module_app_id: @module_app_id)
|
||||||
end
|
end
|
||||||
|
|
||||||
def remove_default
|
def remove_default
|
||||||
debugger
|
module_tags = ModuleTag.find(params[:ids].split(',')) rescue nil
|
||||||
# tags = Tag.find(params[:ids].split(',')) rescue nil
|
if module_tags
|
||||||
# if tags
|
module_tags.each(&:destroy)
|
||||||
# tag_leases = tags.map{|t| t.tag_lease}.flatten
|
end
|
||||||
# tag_leases.each {|t| t.update_attribute(:module_app_ids, t.module_app_ids - [@module_app.id])}
|
|
||||||
# tags.each {|t| t.update_attribute(:is_default, true)}
|
|
||||||
# end
|
|
||||||
redirect_to admin_module_tags_url(module_app_id: @module_app_id)
|
redirect_to admin_module_tags_url(module_app_id: @module_app_id)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -5,34 +5,34 @@ class Admin::TagsController < OrbitBackendController
|
||||||
before_filter :for_app_sub_manager, except: [:index]
|
before_filter :for_app_sub_manager, except: [:index]
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@tags = get_tags
|
@tags = @module_app.module_tags
|
||||||
@module_apps = ModuleApp.where(has_tag: true)
|
@module_apps = ModuleApp.where(has_tag: true)
|
||||||
end
|
end
|
||||||
|
|
||||||
def new
|
def new
|
||||||
@tag = Tag.new
|
@tag = ModuleTag.new
|
||||||
render layout: false
|
render layout: false
|
||||||
end
|
end
|
||||||
|
|
||||||
def edit
|
def edit
|
||||||
@tag = Tag.find(params[:id])
|
@tag = ModuleTag.find(params[:id])
|
||||||
render layout: false
|
render layout: false
|
||||||
end
|
end
|
||||||
|
|
||||||
def create
|
def create
|
||||||
@tag = @module_app.module_tags.build(params[:tag].merge(is_default: true))
|
@tag = @module_app.module_tags.build(params[:module_tag].merge(is_default: true))
|
||||||
if @tag.save
|
if @tag.save
|
||||||
redirect_to admin_tags_url
|
redirect_to admin_tags_url
|
||||||
else
|
else
|
||||||
@tag = Tag.new(params[:tag])
|
@tag = Tag.new(params[:module_tag])
|
||||||
flash.now[:error] = t('create.error.tag')
|
flash.now[:error] = t('create.error.tag')
|
||||||
render :action => "new"
|
render :action => "new"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def update
|
def update
|
||||||
@tag = Tag.find(params[:id])
|
@tag = ModuleTag.find(params[:id])
|
||||||
if @tag.update_attributes(params[:tag])
|
if @tag.update_attributes(params[:module_tag])
|
||||||
redirect_to action: :index
|
redirect_to action: :index
|
||||||
else
|
else
|
||||||
flash.now[:error] = t('update.error.link')
|
flash.now[:error] = t('update.error.link')
|
||||||
|
@ -41,35 +41,48 @@ class Admin::TagsController < OrbitBackendController
|
||||||
end
|
end
|
||||||
|
|
||||||
def add_to_default
|
def add_to_default
|
||||||
tags = Tag.find(params[:ids].split(',')) rescue nil
|
module_tags = ModuleTag.find(params[:ids].split(',')) rescue nil
|
||||||
if tags
|
if module_tags
|
||||||
tag_leases = tags.map{|t| t.tag_lease}.flatten
|
module_tags.each do |module_tag|
|
||||||
tags.each {|t| t.update_attribute(:is_default, true)}
|
module_tag.update_attribute(:is_default, true)
|
||||||
tag_leases.each {|t| t.update_attribute(:module_app_ids, t.module_app_ids << @module_app.id)}
|
new_tag = module_tag.clone
|
||||||
|
new_tag['_id'] = BSON::ObjectId.new
|
||||||
|
new_tag['module_app_id'] = @module_app.id
|
||||||
|
new_tag.save
|
||||||
|
module_tag.update_attribute(:parent_id, new_tag.id)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
redirect_to admin_tags_url
|
redirect_to admin_tags_url
|
||||||
end
|
end
|
||||||
|
|
||||||
def delete_tags
|
def delete_tags
|
||||||
tags = Tag.find(params[:ids].split(',')) rescue nil
|
tags = ModuleTag.find(params[:ids].split(',')) rescue nil
|
||||||
if tags
|
if tags
|
||||||
tags.each{|t|t.destroy}
|
tags.each(&:destroy)
|
||||||
end
|
end
|
||||||
redirect_to admin_tags_url
|
redirect_to admin_tags_url
|
||||||
end
|
end
|
||||||
|
|
||||||
def merge
|
def merge
|
||||||
tags = Tag.find(params[:ids])
|
module_tags = ModuleTag.find(params[:ids])
|
||||||
taggings = tags.map{|t| t.taggings}.flatten
|
tags = module_tags.map{|t| t.tag}
|
||||||
tag_leases = tags.map{|t| t.tag_lease}
|
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]
|
name = params[:name]
|
||||||
module_app_ids = tag_leases.map{|t| t.module_app_ids}.flatten.uniq
|
module_app_ids = module_tags.map{|t| t.module_app_id}.flatten.uniq
|
||||||
if tags.detect{|t| t.is_default == true} || module_app_ids.count > 1
|
if is_default.size == 1 && is_default[0] == true
|
||||||
merge_default_tags(name, taggings, module_app_ids)
|
merge_default_tags(name, module_tags)
|
||||||
|
elsif is_default.include?(true) || module_app_ids.count > 1
|
||||||
|
merge_with_default_tags(name, module_tags)
|
||||||
else
|
else
|
||||||
merge_tags(name, taggings, module_app_ids[0])
|
merge_tags(name, taggings, module_app_ids[0])
|
||||||
|
module_tags.each(&:destroy)
|
||||||
end
|
end
|
||||||
tag_leases.each(&:destroy)
|
|
||||||
redirect_to admin_tags_url
|
redirect_to admin_tags_url
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -7,4 +7,16 @@ module Admin::TagsHelper
|
||||||
span_names.join(" / ").html_safe
|
span_names.join(" / ").html_safe
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def get_tagging_count(module_tag)
|
||||||
|
if module_tag.is_default && module_tag.parent.blank?
|
||||||
|
count = module_tag.children.inject(0) do |count, child|
|
||||||
|
count += child.tag.taggings.count
|
||||||
|
count
|
||||||
|
end
|
||||||
|
else
|
||||||
|
count = module_tag.tag.taggings.count
|
||||||
|
end
|
||||||
|
count
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -8,7 +8,7 @@ class ModuleApp
|
||||||
field :title
|
field :title
|
||||||
field :sidebar_order,type: Integer,default: 0
|
field :sidebar_order,type: Integer,default: 0
|
||||||
|
|
||||||
has_and_belongs_to_many :module_tags, dependent: :destroy
|
has_many :module_tags, dependent: :destroy
|
||||||
|
|
||||||
def refetch_setting!(reg)
|
def refetch_setting!(reg)
|
||||||
# %w{module_label category base_url version organization author intro update_info create_date}.each do |field|
|
# %w{module_label category base_url version organization author intro update_info create_date}.each do |field|
|
||||||
|
|
|
@ -3,20 +3,22 @@ class ModuleTag
|
||||||
include Mongoid::Timestamps
|
include Mongoid::Timestamps
|
||||||
|
|
||||||
field :is_default, type: Boolean, default: false
|
field :is_default, type: Boolean, default: false
|
||||||
|
field :name, localize: true
|
||||||
|
|
||||||
has_one :tag, as: :tag_lease, autosave: true
|
has_one :tag, as: :tag_lease, autosave: true
|
||||||
has_and_belongs_to_many :module_apps
|
belongs_to :module_app
|
||||||
|
|
||||||
after_initialize :init_tag
|
belongs_to :parent, :class_name => 'ModuleTag', :inverse_of => :children
|
||||||
|
has_many :children, :class_name => 'ModuleTag', :inverse_of => :parent, autosave: true, dependent: :destroy
|
||||||
|
|
||||||
|
validates :name, :at_least_one => true
|
||||||
|
|
||||||
|
before_save :init_update_tag
|
||||||
before_destroy :destroy_tag
|
before_destroy :destroy_tag
|
||||||
|
|
||||||
private
|
after_save :update_children
|
||||||
|
|
||||||
def init_tag
|
private
|
||||||
if new_record?
|
|
||||||
self.build_tag(name_translations: self.name_translations, is_default: self.is_default)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def destroy_tag
|
def destroy_tag
|
||||||
Tag.without_callback(:destroy, :before, :destroy_module_tag) do
|
Tag.without_callback(:destroy, :before, :destroy_module_tag) do
|
||||||
|
@ -24,4 +26,20 @@ class ModuleTag
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def init_update_tag
|
||||||
|
if self.new_record?
|
||||||
|
self.build_tag(name_translations: self.name_translations)
|
||||||
|
else
|
||||||
|
self.tag.name_translations = self.name_translations
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def update_children
|
||||||
|
unless self.children.blank?
|
||||||
|
self.children.each do |child|
|
||||||
|
child.update_attributes(name_translations: self.name_translations)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
|
@ -6,7 +6,7 @@
|
||||||
<button id="deselect" class="btn btn-inverse toggable hide"><%= t(:deselect) %></button>
|
<button id="deselect" class="btn btn-inverse toggable hide"><%= t(:deselect) %></button>
|
||||||
<%= link_to t(:delete), '#', id: "deleteTags", class: "btn btn-danger toggable hide", rel: '' %>
|
<%= link_to t(:delete), '#', id: "deleteTags", class: "btn btn-danger toggable hide", rel: '' %>
|
||||||
<%= link_to t(:merge), '#', id: "mergerTags", class: "btn btn-success toggable hide", rel: merge_admin_module_tags_path(module_app_id: @module_app_id) %>
|
<%= link_to t(:merge), '#', id: "mergerTags", class: "btn btn-success toggable hide", rel: merge_admin_module_tags_path(module_app_id: @module_app_id) %>
|
||||||
<%= link_to t(:remove_default), remove_default_admin_module_tags_path(module_app_id: @module_app_id), id: "removeDefault", class: "btn btn-info toggable hide", method: :post %>
|
<%= link_to t(:remove_default), '#', id: "removeDefaults", class: "btn btn-info toggable hide", rel: '' %>
|
||||||
<%= link_to content_tag(:i, nil, class: "icons-plus") + " " + t(:add), new_admin_module_tag_path(module_app_id: @module_app_id), class: "btn btn-primary open-slide" %>
|
<%= link_to content_tag(:i, nil, class: "icons-plus") + " " + t(:add), new_admin_module_tag_path(module_app_id: @module_app_id), class: "btn btn-primary open-slide" %>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -16,7 +16,7 @@
|
||||||
<div class="tags">
|
<div class="tags">
|
||||||
<div id="tags-list">
|
<div id="tags-list">
|
||||||
<ul class="tags-groups checkbox-card module-tags">
|
<ul class="tags-groups checkbox-card module-tags">
|
||||||
<%= render partial: "tag", collection: @tags %>
|
<%= render partial: "module_tag", collection: @tags %>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -29,3 +29,22 @@
|
||||||
<!-- delete -->
|
<!-- delete -->
|
||||||
<%= render 'admin/tags/delete_modal' %>
|
<%= render 'admin/tags/delete_modal' %>
|
||||||
<!-- delete:end -->
|
<!-- delete:end -->
|
||||||
|
|
||||||
|
<!-- remove_default -->
|
||||||
|
<div id="remove_defaults" class="modal hide" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
|
||||||
|
<div class="modal-header">
|
||||||
|
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
||||||
|
<h3 id="myModalLabel"><%= t('tag.remove_default') %></h3>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body tags">
|
||||||
|
<span class="text-warning text-center"><%= t('tag.warning.remove_default') %></span>
|
||||||
|
<hr>
|
||||||
|
<ul class="tags-groups checkbox-card">
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
|
||||||
|
<%= link_to t(:remove_default), nil, class: "remove-defaults btn btn-danger", method: :post, remote: true %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- remove_default:end -->
|
|
@ -0,0 +1,17 @@
|
||||||
|
<li class="filter-item <%= module_tag.is_default ? 'default' : 'module' %>">
|
||||||
|
<p class="card pull-left">
|
||||||
|
<input type="checkbox">
|
||||||
|
</p>
|
||||||
|
<%= hidden_field_tag "ids[]", module_tag.id, class: "tag_id" %>
|
||||||
|
<% if module_tag.is_default %>
|
||||||
|
<a>
|
||||||
|
<span class="amount"><%= get_tagging_count(module_tag) %></span>
|
||||||
|
<%= show_names_slash(module_tag) %>
|
||||||
|
</a>
|
||||||
|
<% else %>
|
||||||
|
<%= link_to edit_admin_module_tag_path(module_tag, module_app_id: @module_app_id), class: "open-slide" do %>
|
||||||
|
<span class="amount"><%= get_tagging_count(module_tag) %></span>
|
||||||
|
<%= show_names_slash(module_tag) %>
|
||||||
|
<% end %>
|
||||||
|
<% end %>
|
||||||
|
</li>
|
|
@ -1,17 +0,0 @@
|
||||||
<li class="filter-item <%= tag.is_default ? 'default' : 'module' %>">
|
|
||||||
<p class="card pull-left">
|
|
||||||
<input type="checkbox">
|
|
||||||
</p>
|
|
||||||
<%= hidden_field_tag "ids[]", tag.id, class: "tag_id" %>
|
|
||||||
<% if tag.is_default %>
|
|
||||||
<a>
|
|
||||||
<span class="amount"><%= tag.taggings.count %></span>
|
|
||||||
<%= show_names_slash(tag) %>
|
|
||||||
</a>
|
|
||||||
<% else %>
|
|
||||||
<%= link_to edit_admin_module_tag_path(tag, module_app_id: @module_app_id), class: "open-slide" do %>
|
|
||||||
<span class="amount"><%= tag.taggings.count %></span>
|
|
||||||
<%= show_names_slash(tag) %>
|
|
||||||
<% end %>
|
|
||||||
<% end %>
|
|
||||||
</li>
|
|
|
@ -1,5 +1,6 @@
|
||||||
$("#delete_tags").modal('hide');
|
$("#delete_tags").modal('hide');
|
||||||
$("#tags-merger").modal('hide');
|
$("#tags-merger").modal('hide');
|
||||||
|
$("#remove_defaults").modal('hide');
|
||||||
$("#tags_index").html("<%= j render 'index' %>")
|
$("#tags_index").html("<%= j render 'index' %>")
|
||||||
$.pageslide.close();
|
$.pageslide.close();
|
||||||
openSlide();
|
openSlide();
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
<h3 id="myModalLabel"><%= t('tag.delete') %></h3>
|
<h3 id="myModalLabel"><%= t('tag.delete') %></h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body tags">
|
<div class="modal-body tags">
|
||||||
<span class="text-warning text-center"><%= t('tag.warning') %></span>
|
<span class="text-warning text-center"><%= t('tag.warning.delete') %></span>
|
||||||
<hr>
|
<hr>
|
||||||
<ul class="tags-groups checkbox-card">
|
<ul class="tags-groups checkbox-card">
|
||||||
</ul>
|
</ul>
|
||||||
|
|
|
@ -15,14 +15,14 @@
|
||||||
<div id="tags-list">
|
<div id="tags-list">
|
||||||
<p class="tag-lead lead muted"><i class="icons-tag"></i> <%= t(:default) %> <span class="badge pull-right"><%= @tags.count %></span></p>
|
<p class="tag-lead lead muted"><i class="icons-tag"></i> <%= t(:default) %> <span class="badge pull-right"><%= @tags.count %></span></p>
|
||||||
<ul class="tags-groups checkbox-card default-tags">
|
<ul class="tags-groups checkbox-card default-tags">
|
||||||
<%= render partial: "tag", collection: @tags %>
|
<%= render partial: "module_tag", collection: @tags %>
|
||||||
</ul>
|
</ul>
|
||||||
<% @module_apps.each do |module_app| %>
|
<% @module_apps.each do |module_app| %>
|
||||||
<% tags = module_app.tags %>
|
<% tags = module_app.module_tags %>
|
||||||
<% icon_name = get_module_app_icon(module_app) %>
|
<% icon_name = get_module_app_icon(module_app) %>
|
||||||
<p class="tag-lead lead muted"><i class="<%= icon_name %>"></i> <%= module_app.title %> <span class="badge pull-right"><%= tags.count %></span></p>
|
<p class="tag-lead lead muted"><i class="<%= icon_name %>"></i> <%= module_app.title %> <span class="badge pull-right"><%= tags.count %></span></p>
|
||||||
<ul class="tags-groups checkbox-card module-tags">
|
<ul class="tags-groups checkbox-card module-tags">
|
||||||
<%= render partial: "tag", collection: tags, locals: {in_module: true} %>
|
<%= render partial: "module_tag", collection: tags, locals: {in_module: true} %>
|
||||||
</ul>
|
</ul>
|
||||||
<% end %>
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
<li class="filter-item <%= module_tag.is_default ? 'default' : '' %>">
|
||||||
|
<% unless defined?(in_module) && module_tag.is_default %>
|
||||||
|
<p class="card pull-left">
|
||||||
|
<input type="checkbox">
|
||||||
|
</p>
|
||||||
|
<%= hidden_field_tag "ids[]", module_tag.id, class: "tag_id" %>
|
||||||
|
<% end %>
|
||||||
|
<% if defined?(in_module) && module_tag.is_default %>
|
||||||
|
<a>
|
||||||
|
<span class="amount"><%= get_tagging_count(module_tag) %></span>
|
||||||
|
<%= show_names_slash(module_tag) %>
|
||||||
|
</a>
|
||||||
|
<% else %>
|
||||||
|
<%= link_to edit_admin_tag_path(module_tag), class: "open-slide" do %>
|
||||||
|
<span class="amount"><%= get_tagging_count(module_tag) %></span>
|
||||||
|
<%= show_names_slash(module_tag) %>
|
||||||
|
<% end %>
|
||||||
|
<% end %>
|
||||||
|
</li>
|
|
@ -1,12 +0,0 @@
|
||||||
<li class="filter-item <%= tag.is_default ? 'default' : '' %>">
|
|
||||||
<% unless defined?(in_module) && tag.is_default %>
|
|
||||||
<p class="card pull-left">
|
|
||||||
<input type="checkbox">
|
|
||||||
</p>
|
|
||||||
<%= hidden_field_tag "ids[]", tag.id, class: "tag_id" %>
|
|
||||||
<% end %>
|
|
||||||
<%= link_to edit_admin_tag_path(tag), class: "open-slide" do %>
|
|
||||||
<span class="amount"><%= tag.taggings.count %></span>
|
|
||||||
<%= show_names_slash(tag) %>
|
|
||||||
<% end %>
|
|
||||||
</li>
|
|
|
@ -13,13 +13,17 @@ en:
|
||||||
new:
|
new:
|
||||||
tag: New tag
|
tag: New tag
|
||||||
no_app: No module
|
no_app: No module
|
||||||
|
remove_default: Remove default
|
||||||
tag:
|
tag:
|
||||||
add: Add tag
|
add: Add tag
|
||||||
delete: Delete tags
|
delete: Delete tags
|
||||||
new_name: New tag name
|
new_name: New tag name
|
||||||
merge_help: Select the name you want to use or own defined
|
merge_help: Select the name you want to use or own defined
|
||||||
merger: Tag Merger
|
merger: Tag Merger
|
||||||
warning: This action can not be restored, are you sure you want to delete these tags?
|
remove_default: Remove default tags
|
||||||
|
warning:
|
||||||
|
delete: This action can not be restored, are you sure you want to delete these tags?
|
||||||
|
remove_default: Are you sure you want to remove the default tags?
|
||||||
update:
|
update:
|
||||||
error:
|
error:
|
||||||
tag: Error when updating tag.
|
tag: Error when updating tag.
|
|
@ -74,31 +74,86 @@ module OrbitTag
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_default_tags
|
def get_default_tags
|
||||||
Tag.where(default: true)
|
Tag.where(is_default: true)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
module Merging
|
module Merging
|
||||||
protected
|
protected
|
||||||
|
|
||||||
def create_default_tag(name, taggings, module_app_ids)
|
def create_tag(name, taggings, module_app, default=false)
|
||||||
create_tag(@module_app, name, taggings, module_app_ids, true)
|
new_tag = module_app.module_tags.create(name_translations: name, module_app_id: module_app.id, is_default: default)
|
||||||
end
|
|
||||||
|
|
||||||
def create_tag(module_app, name, taggings, module_app_ids=[module_app.id], default=false)
|
|
||||||
new_tag = module_app.module_tags.create(name_translations: name, module_app_ids: module_app_ids - [module_app.id], is_default: default)
|
|
||||||
taggings.each do |tagging|
|
taggings.each do |tagging|
|
||||||
tagging.taggable.taggings.create(tag_id: new_tag.tag.id) unless tagging.taggable.taggings.detect{|t| t.tag_id.eql?(new_tag.tag.id)}
|
tagging.taggable.taggings.create(tag_id: new_tag.tag.id) unless tagging.taggable.taggings.detect{|t| t.tag_id.eql?(new_tag.tag.id)}
|
||||||
end
|
end
|
||||||
|
new_tag
|
||||||
end
|
end
|
||||||
|
|
||||||
def merge_default_tags(name, taggings, module_app_ids)
|
def merge_default_tags(name, tag_leases)
|
||||||
create_default_tag(name, taggings, module_app_ids)
|
parent = @module_app.module_tags.create(name_translations: name, is_default: true)
|
||||||
|
lease_by_module_app_id = tag_leases.inject({}) do |sorted, parent|
|
||||||
|
sorted = parent.children.inject(sorted) do |children, lease|
|
||||||
|
module_app_id = lease.module_app_id.to_s
|
||||||
|
if children[module_app_id]
|
||||||
|
children[module_app_id] += [lease]
|
||||||
|
else
|
||||||
|
children[module_app_id] = [lease]
|
||||||
|
end
|
||||||
|
children
|
||||||
|
end
|
||||||
|
sorted
|
||||||
|
end
|
||||||
|
merge_duplicates_in_module(parent, lease_by_module_app_id)
|
||||||
|
tag_leases.each(&:destroy)
|
||||||
|
parent
|
||||||
end
|
end
|
||||||
|
|
||||||
def merge_tags(name, taggings, module_app_id)
|
def merge_duplicates_in_module(parent, lease_by_module_app_id)
|
||||||
|
lease_by_module_app_id.each do |module_app_id, leases|
|
||||||
|
if leases.count > 0
|
||||||
|
taggings = leases.map { |l| l.tag.taggings }.flatten
|
||||||
|
module_tag = merge_tags(parent.name_translations, taggings, module_app_id, true)
|
||||||
|
module_tag.update_attribute(:parent_id, parent.id)
|
||||||
|
leases.each(&:destroy)
|
||||||
|
else
|
||||||
|
leases[0].update_attributes(name_translations: parent.name_translations, is_default: true, parent_id: parent.id) unless leases[0].is_default
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def merge_tags(name, taggings, module_app_id, default=nil)
|
||||||
module_app = ModuleApp.find(module_app_id)
|
module_app = ModuleApp.find(module_app_id)
|
||||||
create_tag(module_app, name, taggings)
|
new_tag = create_tag(name, taggings, module_app, default)
|
||||||
|
new_tag
|
||||||
|
end
|
||||||
|
|
||||||
|
def merge_with_default_tags(name, tag_leases)
|
||||||
|
lease_by_module_app_id = tag_leases.inject({}) do |sorted, lease|
|
||||||
|
module_app_id = lease.is_default ? 'default' : lease.module_app_id.to_s
|
||||||
|
if sorted[module_app_id]
|
||||||
|
sorted[module_app_id] += [lease]
|
||||||
|
else
|
||||||
|
sorted[module_app_id] = [lease]
|
||||||
|
end
|
||||||
|
sorted
|
||||||
|
end
|
||||||
|
if lease_by_module_app_id['default'].count > 1
|
||||||
|
parent = merge_default_tags(name, lease_by_module_app_id['default'])
|
||||||
|
else
|
||||||
|
parent = lease_by_module_app_id['default'][0]
|
||||||
|
parent.update_attributes(name_translations: name)
|
||||||
|
end
|
||||||
|
lease_by_module_app_id.delete('default')
|
||||||
|
lease_by_module_app_id = parent.children.inject(lease_by_module_app_id) do |sorted, lease|
|
||||||
|
module_app_id = lease.module_app_id.to_s
|
||||||
|
if sorted[module_app_id]
|
||||||
|
sorted[module_app_id] += [lease]
|
||||||
|
else
|
||||||
|
sorted[module_app_id] = [lease]
|
||||||
|
end
|
||||||
|
sorted
|
||||||
|
end
|
||||||
|
merge_duplicates_in_module(parent, lease_by_module_app_id)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -5,5 +5,5 @@
|
||||||
// the compiled file.
|
// the compiled file.
|
||||||
//
|
//
|
||||||
//= require jquery-ui
|
//= require jquery-ui
|
||||||
//= require bootstrap
|
//= require basic/bootstrap
|
||||||
//= require calendarAPI
|
//= require calendarAPI
|
Loading…
Reference in New Issue