diff --git a/app/controllers/shixuns_controller.rb b/app/controllers/shixuns_controller.rb index b7f035888..9adddf597 100644 --- a/app/controllers/shixuns_controller.rb +++ b/app/controllers/shixuns_controller.rb @@ -184,17 +184,38 @@ class ShixunsController < ApplicationController end end + # 事务处理,保证Trustie与Gitlab数据同步 def shixun_members_added unless params[:membership][:user_ids].blank? memberships = params[:membership][:user_ids] memberships.each do |member| - ShixunMember.create(:user_id => member, :shixun_id => @shixun.id, :role => 2) + ActiveRecord::Base.transaction do + begin + user = User.find(member) + s = Trustie::Gitlab::Sync.new + if user.gid.present? + gid = user.gid + else + guser = s.sync_user(user) + gid = guser.id + end + ShixunMember.create(:user_id => member, :shixun_id => @shixun.id, :role => 2) + u = s.g.add_team_member(@shixun.gpid, gid, 40) # 3代表角色master + if u.blank? + raise("同步Gitlab数据错误") + end + @collaborators = @shixun.collaborators + respond_to do |format| + format.js + end + rescue Exception => e + logger.error(e) + raise ActiveRecord::Rollback + end + end end @collaborators = @shixun.collaborators end - respond_to do |format| - format.js - end end def search @@ -619,7 +640,7 @@ class ShixunsController < ApplicationController # REDO: 新增类型copy的时候 # 复制项目 # gshixun --> gitlab project - CODES = %W(2 3 4 5 6 7 8 9 a b c f e f g h i j k l m n o p q r s t u v w x y z) + # CODES = %W(2 3 4 5 6 7 8 9 a b c f e f g h i j k l m n o p q r s t u v w x y z) def copy_myshixun shixun, gshixun myshixun = Myshixun.new # myshixun.attributes = shixun.attributes.dup.except("id","user_id","visits","gpid","status", "identifier","propaedeutics")