Migrate form old ui to new ui (categories, tags and authorizations)
This commit is contained in:
1 parent
11b880752d
commit
279ac774d4
9 files changed
+196
-131
No files matched your search
@@ -7,6 +7,7 @@ module OrbitModel
|
||||
has_one :auth_approval, as: :approval_authorizable, dependent: :destroy
|
||||
has_one :auth_sub_manager, as: :sub_manager_authorizable, dependent: :destroy
|
||||
delegate :authorized_users, to: :auth_approval, prefix: true, allow_nil: true
|
||||
delegate :authorized_users, to: :auth_manager, prefix: true, allow_nil: true
|
||||
delegate :authorized_users, to: :auth_sub_manager, prefix: true, allow_nil: true
|
||||
send :include, InstanceMethods
|
||||
end
|
||||
|
||||
+177
-80
@@ -1,96 +1,193 @@
|
||||
namespace :new_ui do
|
||||
|
||||
MODULE_APPS = [ %w(announcement bulletin),
|
||||
%w(archive archive_file),
|
||||
%w(ask ask_question ask_category),
|
||||
%w(asset asset),
|
||||
%w(faq qa),
|
||||
%w(gallery gallery_album gallery_category),
|
||||
%w(location location),
|
||||
%w(personal_book writing_book),
|
||||
%w(personal_conference writing_conference),
|
||||
%w(personal_experience experience),
|
||||
%w(personal_honor honor),
|
||||
%w(personal_journal writing_journal),
|
||||
%w(personal_patent writing_patent),
|
||||
%w(personal_project project),
|
||||
%w(web_resource web_link)
|
||||
] # app_key, model_name, category_name
|
||||
|
||||
task :migrate => :environment do
|
||||
@db = Mongoid.database
|
||||
migrate_tags
|
||||
migrate_categories
|
||||
migrate_approval_on_object
|
||||
migrate_managers
|
||||
end
|
||||
|
||||
# :category_name is optional, depends on the naming of the category model: if no conventional, specify it
|
||||
task :migrate_categories, [:app_key, :model_name, :category_name] => :environment do |t, args|
|
||||
@db = Mongoid.database
|
||||
if args[:app_key] && args[:model_name]
|
||||
migrate_category(args[:app_key], args[:model_name], args[:category_name])
|
||||
else
|
||||
module_apps = [ %w(announcement bulletin),
|
||||
%w(archive archive_file),
|
||||
%w(ask ask_question ask),
|
||||
%w(asset asset),
|
||||
%w(faq qa),
|
||||
%w(gallery gallery_album gallery),
|
||||
%w(personal_book writing_book),
|
||||
%w(personal_conference writing_conference),
|
||||
%w(personal_experience experience),
|
||||
%w(personal_honor honor),
|
||||
%w(personal_journal writing_journal),
|
||||
%w(personal_patent writing_patent),
|
||||
%w(personal_project project),
|
||||
%w(web_resource web_link)
|
||||
]
|
||||
module_apps.each{|value_array| migrate_category(value_array[0], value_array[1], value_array[2])}
|
||||
end
|
||||
end
|
||||
|
||||
def migrate_category(app_key, model_name, category_name=nil)
|
||||
category_name = model_name unless category_name
|
||||
# # coll_cat = @db["#{category_name}_categories"]
|
||||
# # categories = coll_cat.find if coll_cat
|
||||
module_app = ModuleApp.where(key: app_key)[0]
|
||||
if module_app.has_category
|
||||
categories = "#{category_name}_categories".classify.constantize.admin_manager_all rescue nil
|
||||
categories = "#{category_name}_categories".classify.constantize.all if categories.blank?
|
||||
categories.each do |category|
|
||||
new_category = module_app.categories.build
|
||||
new_category.title_translations = category['title']
|
||||
new_category.disable = category['disable']
|
||||
new_category.save
|
||||
model_name.classify.constantize.where("#{category_name}_category_id" => category['_id']).each do |object|
|
||||
if object.id.is_a?(String)
|
||||
object.destroy
|
||||
else
|
||||
object.category = new_category.id
|
||||
object.remove_attribute("#{category_name}_category_id")
|
||||
object.save
|
||||
end
|
||||
end
|
||||
if object_auths = ObjectAuth.where(obj_authable_type: "#{category_name.classify}Category")
|
||||
object_auths.each do |object_auth|
|
||||
case object_auth.title
|
||||
when 'fact_check'
|
||||
new_object_auth = new_category.get_object_auth_by_title("approval_#{module_app.key}")
|
||||
else
|
||||
new_object_auth = new_category.get_object_auth_by_title("category_#{module_app.key}")
|
||||
end
|
||||
object_auth.auth_users.each do |user|
|
||||
new_object_auth.add_user_to_privilege_list(user)
|
||||
end
|
||||
object_auth.destroy
|
||||
end
|
||||
end
|
||||
category.destroy
|
||||
end
|
||||
end
|
||||
migrate_categories(args)
|
||||
end
|
||||
|
||||
task :migrate_tags => :environment do
|
||||
tags = Tag.where(_type: 'Tag')
|
||||
tags.each do |tag|
|
||||
module_app = ModuleApp.find(tag.module_tag_id)
|
||||
new_tag = module_app.module_tags.build
|
||||
new_tag.name_translations = tag['name']
|
||||
new_tag.is_default = tag['is_default']
|
||||
new_tag.save
|
||||
n_tag = new_tag.tag
|
||||
n_tag.cloud_view_count = tag['cloud_view_count']
|
||||
n_tag.view_count = tag['view_count']
|
||||
n_tag.save
|
||||
tag.taggings.each do |tagging|
|
||||
tagging.taggable.taggings.create(tag_id: n_tag.id)
|
||||
end
|
||||
tag.destroy
|
||||
migrate_tags
|
||||
end
|
||||
|
||||
task :fix_tagged_ids => :environment do
|
||||
fix_tagged_ids
|
||||
end
|
||||
|
||||
def migrate_categories(args = nil)
|
||||
if args && args[:app_key] && args[:model_name]
|
||||
migrate_category(args[:app_key], args[:model_name], args[:category_name])
|
||||
else
|
||||
MODULE_APPS.each{|value_array| migrate_category(value_array[0], value_array[1], value_array[2])}
|
||||
end
|
||||
end
|
||||
|
||||
task :change_auth_naming => :environment do
|
||||
ObjectAuth.where(title: /submit_/).each do |auth|
|
||||
auth.update_attribute(:title, auth.title.gsub('submit_', 'category_'))
|
||||
def migrate_category(app_key, model_name, category_name = nil)
|
||||
@db ||= Mongoid.database
|
||||
category_name = "#{model_name}_category" unless category_name
|
||||
collection_category = @db[category_name.pluralize]
|
||||
categories = collection_category.find.entries if collection_category
|
||||
collection_model = @db[model_name.pluralize]
|
||||
collection_buffer_category = @db['buffer_categories']
|
||||
collection_prototype_auth = @db['prototype_auths']
|
||||
if categories.present?
|
||||
module_app = ModuleApp.where(key: app_key).first
|
||||
if module_app.try(:has_category)
|
||||
categories.each do |category|
|
||||
new_category = module_app.categories.build
|
||||
new_category.title_translations = category['title']
|
||||
new_category.disable = category['disable']
|
||||
new_category.save
|
||||
collection_model.find("#{category_name}_id" => category['_id']).each do |object|
|
||||
object['category_id'] = new_category.id
|
||||
object.delete("#{category_name}_id")
|
||||
collection_model.save object
|
||||
collection_buffer_category.save ({ '_type' => 'BufferCategory', 'category_id' => new_category.id, 'categorizable_type' => model_name.camelize, 'categorizable_id' => object['_id'] })
|
||||
end
|
||||
object_auths = collection_prototype_auth.find(_type: 'ObjectAuth', obj_authable_id: category['_id'], '$or' => [{privilege_user_ids: {'$not' => {'$size' => 0}}}, {role_ids: {'$not' => {'$size' => 0}}}, {sub_role_ids: {'$not' => {'$size' => 0}}}]).entries
|
||||
if object_auths.present?
|
||||
object_auths.each do |object_auth|
|
||||
if object_auth['title'].eql?('fact_check')
|
||||
authorization = new_category.auth_approval || new_category.create_auth_approval(module_app_id: module_app.id, title: "category_approval_#{module_app.key}")
|
||||
else
|
||||
authorization = new_category.auth_sub_manager || new_category.create_auth_sub_manager(module_app_id: module_app.id, title: "category_authorization_#{module_app.key}")
|
||||
end
|
||||
add_users(object_auth, authorization)
|
||||
collection_prototype_auth.remove(object_auth)
|
||||
end
|
||||
end
|
||||
end
|
||||
collection_category.drop
|
||||
collection_prototype_auth.remove(obj_authable_type: category_name.classify)
|
||||
end
|
||||
else
|
||||
collection_category.drop
|
||||
collection_prototype_auth.remove(obj_authable_type: category_name.classify)
|
||||
end
|
||||
end
|
||||
|
||||
def fix_tagged_ids
|
||||
Tag.all.each do |tag|
|
||||
tag.taggings.each do |tagging|
|
||||
tagged_ids = tagging.taggable.tagged_ids
|
||||
unless tagged_ids.include?(tag.id.to_s)
|
||||
tagged_ids << tag.id.to_s
|
||||
tagging.taggable.update_attribute(:tagged_ids, tagged_ids)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def migrate_tags
|
||||
@db ||= Mongoid.database
|
||||
tags = Tag.where(_type: 'Tag').entries
|
||||
tags.each_with_index do |tag, i|
|
||||
unless tag.tag_lease
|
||||
if module_app = ModuleApp.find(tag[:module_tag_id])
|
||||
new_tag = module_app.module_tags.build
|
||||
new_tag.name_translations = tag['name']
|
||||
new_tag.is_default = tag['is_default']
|
||||
new_tag.save
|
||||
n_tag = new_tag.tag
|
||||
n_tag.cloud_view_count = tag['cloud_view_count']
|
||||
n_tag.view_count = tag['view_count']
|
||||
n_tag.save
|
||||
tag.taggings.each do |tagging|
|
||||
tagged_ids = tagging.taggable.tagged_ids
|
||||
unless tagged_ids.include?(tag.id.to_s)
|
||||
tagged_ids << tag.id.to_s
|
||||
tagging.taggable.update_attribute(:tagged_ids, tagged_ids)
|
||||
end
|
||||
tagging.taggable.taggings.create(tag_id: n_tag.id)
|
||||
end
|
||||
end
|
||||
tag.destroy
|
||||
end
|
||||
end
|
||||
old_tags = Tag.where(_type: {'$ne' => 'Tag'}).delete
|
||||
@db = Mongoid.database
|
||||
@db['proto_tags'].drop
|
||||
end
|
||||
|
||||
def migrate_approval_on_object
|
||||
@db ||= Mongoid.database
|
||||
collection_prototype_auth = @db['prototype_auths']
|
||||
object_auths = collection_prototype_auth.find({_type: 'ObjectAuth', obj_authable_type: {'$in' => ["AdBanner", "PageContext"]}, '$or' => [{privilege_user_ids: {'$not' => {'$size' => 0}}}, {role_ids: {'$not' => {'$size' => 0}}}, {sub_role_ids: {'$not' => {'$size' => 0}}}]}).entries
|
||||
object_auths.each do |object_auth|
|
||||
case object_auth['obj_authable_type']
|
||||
when 'AdBanner'
|
||||
module_app = ModuleApp.where(key: 'ad_banner').first
|
||||
when 'PageContext'
|
||||
module_app = ModuleApp.where(key: 'page_content').first
|
||||
end
|
||||
if module_app
|
||||
object = object_auth['obj_authable_type'].constantize.find(object_auth['obj_authable_id']) rescue nil
|
||||
if object
|
||||
authorization = object.create_auth_sub_manager(module_app_id: module_app.id, title: "#{object_auth['obj_authable_type'].underscore}_authorization_#{module_app.key}")
|
||||
add_users(object_auth, authorization) if authorization
|
||||
end
|
||||
end
|
||||
collection_prototype_auth.remove(object_auth)
|
||||
end
|
||||
collection_prototype_auth.remove(obj_authable_type: {'$in' => ["AdBanner", "PageContext"]})
|
||||
end
|
||||
|
||||
def add_users(object_auth, authorization)
|
||||
if authorization
|
||||
if object_auth['role_ids'].present?
|
||||
roles = Role.find(object_auth['role_ids']) rescue nil
|
||||
authorization.add_roles(roles) if roles
|
||||
end
|
||||
if object_auth['sub_role_ids'].present?
|
||||
sub_roles = SubRole.find(object_auth['sub_role_ids']) rescue nil
|
||||
authorization.add_sub_roles(sub_roles) if sub_roles
|
||||
end
|
||||
if object_auth['privilege_user_ids'].present?
|
||||
users = User.find(object_auth['privilege_user_ids']) rescue nil
|
||||
authorization.add_users(users) if users
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def migrate_managers
|
||||
@db ||= Mongoid.database
|
||||
collection_app_manager = @db['app_managers']
|
||||
app_managers = collection_app_manager.find(managing_app_id: {'$not' => {'$size' => 0}}).entries
|
||||
app_managers.each do |app_manager|
|
||||
module_app = ModuleApp.find(app_manager['managing_app_id']) rescue nil
|
||||
user = User.find(app_manager['user_id']) rescue nil
|
||||
if module_app && user
|
||||
authorization = module_app.auth_manager || module_app.create_auth_manager(module_app_id: module_app.id, title: module_app.key)
|
||||
authorization.add_users(user)
|
||||
end
|
||||
end
|
||||
collection_app_manager.drop
|
||||
end
|
||||
|
||||
task :reset_user_position => :environment do
|
||||
User.where(email: /guest/).each{|d|d.update_attribute(:position, nil)}
|
||||
User.not_guest_user.each_with_index do |user, i|
|
||||
|
||||
Reference in new issue
Block a user