Remove middle site
This commit is contained in:
		
							parent
							
								
									609c932cca
								
							
						
					
					
						commit
						192e52b5de
					
				| 
						 | 
					@ -1,21 +0,0 @@
 | 
				
			||||||
#encoding: utf-8
 | 
					 | 
				
			||||||
require 'mysql2'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
$mid_site_connection
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
module  MiddleSiteConnection
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  @mid_host = { 
 | 
					 | 
				
			||||||
    :host => 'mruling.nccu.edu.tw',  #mruling.nccu.edu.tw or 127.0.0.1
 | 
					 | 
				
			||||||
    :port => 3306, #3306 or 8005
 | 
					 | 
				
			||||||
    :username => "rulingcom",
 | 
					 | 
				
			||||||
    :password => "5w3iJQ9OJQMGhJibKP6YQje8",
 | 
					 | 
				
			||||||
    :database => "RSS23_NCCU_MIDDLE",
 | 
					 | 
				
			||||||
    :encoding => "UTF8"
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  def self.establish
 | 
					 | 
				
			||||||
    $mid_site_connection = Mysql2::Client.new(@mid_host)
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
end
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,170 +0,0 @@
 | 
				
			||||||
# encoding: utf-8 
 | 
					 | 
				
			||||||
# require 'ruby-debug'
 | 
					 | 
				
			||||||
require "#{Rails.root}/config/initializers/middle_site_connection"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
namespace :mid_site do
 | 
					 | 
				
			||||||
  desc "mid_site Rake task"
 | 
					 | 
				
			||||||
  attr_from_mid = %w{nccu_id psn_nam ut_cod up_ut_cod eml_adr off_tel_ext sta_num}
 | 
					 | 
				
			||||||
  officer_posgrp_code = %w{02 06 10 05} #from RSS2 
 | 
					 | 
				
			||||||
  admin_role = nil
 | 
					 | 
				
			||||||
  sub_role = nil
 | 
					 | 
				
			||||||
  test_account_ldap_id ='139716'
 | 
					 | 
				
			||||||
 MiddleSiteConnection.establish
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
  task :sync => :environment do
 | 
					 | 
				
			||||||
    info_profile = Info.first(conditions: {:key => 'profile'})
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    def find_or_create_sub_role(role,ut_query=[],key='')
 | 
					 | 
				
			||||||
      sub_role = role.sub_roles.get_sub_role_from_key(key)
 | 
					 | 
				
			||||||
      if sub_role.nil?
 | 
					 | 
				
			||||||
        ut_data = ut_query.find{|ut_data| ut_data["ut_cod"] == key }
 | 
					 | 
				
			||||||
        sub_role = role.sub_roles.create!(:key => key)
 | 
					 | 
				
			||||||
        sub_role.title_translations ={"en" => (ut_data["ut_eng_m"] rescue ''), "zh_tw" => (ut_data["ut_chi_m"] rescue '')}
 | 
					 | 
				
			||||||
        sub_role.save!
 | 
					 | 
				
			||||||
        p "Created SubRole(key: #{key}): EN: #{sub_role.title_translations['en']}, CH: #{sub_role.title_translations['zh_tw']} ParentRole(#{role.key}): #{role.title_translations['en']}"
 | 
					 | 
				
			||||||
      end
 | 
					 | 
				
			||||||
      sub_role
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    users_from_mid = $mid_site_connection.query("SELECT #{attr_from_mid.join(',')} FROM rss_pautlst_ut  WHERE posgrp_cod IN (#{officer_posgrp_code.join(',')})") 
 | 
					 | 
				
			||||||
    ut_data_from_mid = $mid_site_connection.query("SELECT ut_odr, ut_cod, up_ut_cod, ut_chi_m, ut_eng_m FROM rss_paunit WHERE ut_tpe =  '1' AND ut_grp !=  '3' AND up_ut_cod !=  'F00' ORDER BY ut_odr, ut_cod")   
 | 
					 | 
				
			||||||
    remote_list = users_from_mid.collect{|t| t["nccu_id"]}
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    #remove delete user sho has been deleted at remote first
 | 
					 | 
				
			||||||
    local_need_remove = User.all.collect{|t| t.nccu_id rescue nil}.uniq.delete_if {|x| x == nil} - remote_list
 | 
					 | 
				
			||||||
    desc "Going to delete User with IDs: #{local_need_remove.inspect}"
 | 
					 | 
				
			||||||
    local_need_remove = User.excludes(nccu_ldap_uid: test_account_ldap_id ).collect{|t| t.nccu_ldap_uid rescue nil}.uniq.delete_if {|x| x == nil} - remote_list
 | 
					 | 
				
			||||||
    AppManager.all.collect{|am|  am if am.user.nil? }.delete_if {|x| x == nil}.each{|am| am.destroy}
 | 
					 | 
				
			||||||
    desc "Deletion completed! \n"
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    #starting update user
 | 
					 | 
				
			||||||
    desc "Updating and Newing Users"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    users_from_mid.each do |mid_user|      
 | 
					 | 
				
			||||||
      ut_item = ut_data_from_mid.find{|ut_data| ut_data["ut_cod"] ==  mid_user["ut_cod"]}
 | 
					 | 
				
			||||||
      up_ut_item = ut_data_from_mid.find{|ut_data| ut_data["ut_cod"] == mid_user["up_ut_cod"] }
 | 
					 | 
				
			||||||
      local_user = User.find_or_initialize_by(:nccu_ldap_uid => mid_user["nccu_id"])
 | 
					 | 
				
			||||||
      users_name_from_mid = $mid_site_connection.query("SELECT eng_nam_l,eng_nam_f,chi_nam_l,chi_nam_f FROM rss_zzperson_view  WHERE nccu_id =#{mid_user["nccu_id"]}").first
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      
 | 
					 | 
				
			||||||
      first_name = AttributeValue.find_or_create_by( :user_id => local_user.id, :attribute_field_id => info_profile.attribute_fields[0].id, :key => 'first_name')
 | 
					 | 
				
			||||||
      last_name = AttributeValue.find_or_create_by( :user_id => local_user.id, :attribute_field_id => info_profile.attribute_fields[1].id, :key => 'last_name')
 | 
					 | 
				
			||||||
      
 | 
					 | 
				
			||||||
      first_name['en'] = users_name_from_mid["eng_nam_f"]
 | 
					 | 
				
			||||||
      first_name['zh_tw'] = users_name_from_mid["chi_nam_f"]
 | 
					 | 
				
			||||||
      first_name.save
 | 
					 | 
				
			||||||
      
 | 
					 | 
				
			||||||
      last_name['en'] = users_name_from_mid["eng_nam_l"]
 | 
					 | 
				
			||||||
      last_name['zh_tw'] = users_name_from_mid["chi_nam_l"]
 | 
					 | 
				
			||||||
      last_name.save
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      user_model_mapper = Hash[:ut_cod => mid_user["ut_cod"] ,:up_ut_cod => mid_user["up_ut_cod"],:email => mid_user["eml_adr"],:off_tel_ext => mid_user["off_tel_ext"],:sta_num => mid_user["sta_num"]]
 | 
					 | 
				
			||||||
      user_model_mapper[:admin] = false
 | 
					 | 
				
			||||||
      local_user.update_attributes(user_model_mapper)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      local_user.role = Role.find_or_create_by( :key => "department_admin",:build_in => true)
 | 
					 | 
				
			||||||
      local_user.role.title_translations = {"en" => 'Department Admin', "zh_tw" => '系所使用者' }
 | 
					 | 
				
			||||||
      
 | 
					 | 
				
			||||||
      
 | 
					 | 
				
			||||||
      unless local_user.ut_cod == local_user.up_ut_cod  #if the ut_cod has additions info for up ut
 | 
					 | 
				
			||||||
        local_user.sub_roles << find_or_create_sub_role(local_user.role,ut_data_from_mid,local_user.up_ut_cod)
 | 
					 | 
				
			||||||
      end
 | 
					 | 
				
			||||||
      
 | 
					 | 
				
			||||||
      local_user.sub_roles << find_or_create_sub_role(local_user.role,ut_data_from_mid,local_user.ut_cod)
 | 
					 | 
				
			||||||
      
 | 
					 | 
				
			||||||
      local_user.save!
 | 
					 | 
				
			||||||
    end   
 | 
					 | 
				
			||||||
    sys_users = User.all(conditions: {admin: false}).includes(:avatar).to_a
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  task :install_admin => :before_instll_admin do
 | 
					 | 
				
			||||||
    admins_nccu_id = '2772'
 | 
					 | 
				
			||||||
    info_profile = Info.first(conditions: {:key => 'profile'})
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
    user_from_mid = $mid_site_connection.query("SELECT #{attr_from_mid.join(',')} FROM rss_pautlst_ut  WHERE posgrp_cod IN (#{officer_posgrp_code.join(',')}) AND nccu_id = '#{admins_nccu_id}' limit 1")    
 | 
					 | 
				
			||||||
    admin_at_mid =  user_from_mid.first
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    local_user = User.find_or_initialize_by(:nccu_ldap_uid => admin_at_mid["nccu_id"])
 | 
					 | 
				
			||||||
    local_user.update_attributes(:email => admin_at_mid["eml_adr"], :admin => true, :role_id => admin_role.id, :sub_role_ids => [sub_role.id])
 | 
					 | 
				
			||||||
    users_name_from_mid = $mid_site_connection.query("SELECT eng_nam_l,eng_nam_f,chi_nam_l,chi_nam_f FROM rss_zzperson_view  WHERE nccu_id =#{admin_at_mid["nccu_id"]}").first
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    first_name = AttributeValue.find_or_create_by( :user_id => local_user.id, :attribute_field_id => info_profile.attribute_fields[0].id, :key => 'first_name')
 | 
					 | 
				
			||||||
    last_name = AttributeValue.find_or_create_by( :user_id => local_user.id, :attribute_field_id => info_profile.attribute_fields[1].id, :key => 'last_name')
 | 
					 | 
				
			||||||
      
 | 
					 | 
				
			||||||
    first_name['en'] = users_name_from_mid["eng_nam_f"]
 | 
					 | 
				
			||||||
    first_name['zh_tw'] = users_name_from_mid["chi_nam_f"]
 | 
					 | 
				
			||||||
    first_name.save
 | 
					 | 
				
			||||||
      
 | 
					 | 
				
			||||||
    last_name['en'] = users_name_from_mid["eng_nam_l"]
 | 
					 | 
				
			||||||
    last_name['zh_tw'] = users_name_from_mid["chi_nam_l"]
 | 
					 | 
				
			||||||
    last_name.save
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
  task :install_test => :before_instll_admin do
 | 
					 | 
				
			||||||
    admins_nccu_id = '139716'
 | 
					 | 
				
			||||||
    # admin_role = Role.find_or_create_by( key: 'administrator')
 | 
					 | 
				
			||||||
    # sub_role = admin_role.sub_roles.find_or_create_by(:key => 'computer_center')
 | 
					 | 
				
			||||||
    info_profile = Info.first(conditions: {:key => 'profile'})
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    user_from_mid = $mid_site_connection.query("SELECT #{attr_from_mid.join(',')} FROM rss_pautlst_ut  WHERE  nccu_id = '#{admins_nccu_id}' limit 1")    
 | 
					 | 
				
			||||||
    admin_at_mid =  user_from_mid.first
 | 
					 | 
				
			||||||
    user_first_name = admin_at_mid["psn_nam"].size > 3 ? admin_at_mid["psn_nam"][3..-1] : admin_at_mid["psn_nam"][1..-1]
 | 
					 | 
				
			||||||
    user_last_name =  admin_at_mid["psn_nam"].size  > 3 ? admin_at_mid["psn_nam"][1..2] : admin_at_mid["psn_nam"][0]
 | 
					 | 
				
			||||||
    local_user = User.find_or_initialize_by(:nccu_ldap_uid => admin_at_mid["nccu_id"])
 | 
					 | 
				
			||||||
    local_user.update_attributes(:email => admin_at_mid["eml_adr"], :admin => true, :role_id => admin_role.id, :sub_role_ids => [sub_role.id])
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    AttributeValue.create( :user_id => local_user.id, :attribute_field_id => info_profile.attribute_fields[0].id, :key => 'first_name', :en => user_first_name, :zh_tw => user_first_name )
 | 
					 | 
				
			||||||
    AttributeValue.create( :user_id => local_user.id, :attribute_field_id => info_profile.attribute_fields[1].id, :key => 'last_name', :en => user_last_name, :zh_tw => user_last_name )
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
  task :before_instll_admin => :environment do
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    var_1 =  {"en" => 'Administrator', "zh_tw" => '管理員' }
 | 
					 | 
				
			||||||
    var_1_1 = {"en" => 'Computer Center', "zh_tw" => '計算機中心'}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    admin_role = Role.find_or_create_by( :key => 'administrator',:built_in => true)
 | 
					 | 
				
			||||||
    admin_role.title_translations =var_1
 | 
					 | 
				
			||||||
    admin_role.save!
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    sub_role = admin_role.sub_roles.find_or_create_by(:key => 'computer_center', :built_in => true)
 | 
					 | 
				
			||||||
    sub_role.title_translations =var_1_1
 | 
					 | 
				
			||||||
    sub_role.save!
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        #var_1_1_1 = I18nVariable.create!( :document_class => 'Attribute', :key => 'field', :en => 'Field', :zh_tw => '領域', :parent_id => var_1_1.id )
 | 
					 | 
				
			||||||
        #var_1_1_2 = I18nVariable.create!( :document_class => 'Attribute', :key => 'department', :en => 'Department', :zh_tw => '學系', :parent_id => var_1_1.id )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
  task :clean_local_account => :environment do
 | 
					 | 
				
			||||||
    User.remote_account.each{|user| user.destroy}
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
  task :claen_cc => [:clean_i18n_vars,:clean_admin_role_and_sub_role] do
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
  task :clean_i18n_vars => :environment do
 | 
					 | 
				
			||||||
    i18ns = I18nVariable.any_in( key: ['administrator','computer_center'])
 | 
					 | 
				
			||||||
    i18ns.each  { |var|  var.destroy }
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
  task :clean_ldap_users => :environment do
 | 
					 | 
				
			||||||
    User.where(:nccu_ldap_uid.ne => nil ).each {|t| t.destroy}
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
  task :clean_admin_role_and_sub_role => :environment do
 | 
					 | 
				
			||||||
    data = Role.any_in( key: ['administrator','computer_center'])
 | 
					 | 
				
			||||||
    data.each  { |var|  var.destroy }
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    data = SubRole.any_in( key: ['administrator','computer_center'])
 | 
					 | 
				
			||||||
    data.each  { |var|  var.destroy }
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
end
 | 
					 | 
				
			||||||
		Reference in New Issue