forked from jacknudt/trustieforge
201 lines
7.0 KiB
Ruby
201 lines
7.0 KiB
Ruby
class SyncForgesController < ApplicationController
|
|
# before_filter :check_token
|
|
# before_filter :check_ids
|
|
|
|
def index
|
|
Rails.logger.info("###############____begin__#{params[:type]}_____########{params[:parent_id].present? ? params[:parent_id] : params[:new_project_id]}")
|
|
|
|
model_name = params[:type].to_s.constantize
|
|
targets = model_name.where(id: params[:ids])
|
|
targets_params = []
|
|
case params[:type].to_s
|
|
when "Project"
|
|
targets = targets.includes(:versions,:repository,:project_score, :owner, issues: [journals: :details], members: [:user, :member_roles])
|
|
targets_params = get_projects(targets, params) if targets.present?
|
|
when "Issue"
|
|
targets = targets.includes(:author, journals: :details)
|
|
targets_params = get_issue_issues(targets, params[:parent_id]) if targets.present?
|
|
when "Journal"
|
|
targets = targets.includes(:user, :details)
|
|
targets_params = get_journal_issues(targets) if targets.present?
|
|
when "Member"
|
|
targets = targets.includes(:member_roles)
|
|
targets_params = get_member_targets(targets, params[:parent_id]) if targets.present?
|
|
else
|
|
targets = targets.includes(:user)
|
|
targets_params = get_common_targets(targets, params[:parent_id],params[:type].to_s) if targets.present?
|
|
end
|
|
|
|
Rails.logger.info("###############___completed___#{params[:type]}####{params[:parent_id].present? ? params[:parent_id] : params[:new_project_id]}")
|
|
respond_to do | format|
|
|
format.json {
|
|
render json: { targets_params: targets_params }
|
|
}
|
|
end
|
|
|
|
end
|
|
|
|
def get_forums
|
|
all_forums = Forum.all.as_json(only: [:id, :name, :description, :creator_id]).map{|k| k["forum"]}
|
|
respond_to do | format|
|
|
format.json {
|
|
render json: { all_forums: all_forums }
|
|
}
|
|
end
|
|
end
|
|
|
|
def get_memos
|
|
memos = Memo.where(forum_id: params[:forum_id])
|
|
all_memos = memos.as_json.map{|k| k["memo"].delete_if {|k,v| v.blank?}}
|
|
respond_to do |format|
|
|
format.json {
|
|
render json: { all_memos: all_memos }
|
|
}
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
# def check_token
|
|
# unless params[:token] && params[:token] == "#{Redmine::Configuration['sync_token']}"
|
|
# respond_to do |format|
|
|
# format.json {
|
|
# render json: { message: "token错误" }
|
|
# }
|
|
# end
|
|
# end
|
|
# end
|
|
|
|
def get_projects(targets, params)
|
|
new_project_id = params[:new_project_id]
|
|
target_params = []
|
|
project = targets.first
|
|
project_json = project.as_json(:except=>[:user_id, :id, :created_on, :updated_on, :name, :is_public, :identifier]).values[0].delete_if {|k,v| v.blank?}
|
|
issues = project.issues
|
|
members = project.members.where("user_id != ?", project.user_id)
|
|
versions = project.versions
|
|
watchers = project.watchers
|
|
praises = project.praise_tread
|
|
user_login = project.owner.try(:login)
|
|
issues_params = get_issue_issues(issues, new_project_id) if issues.present?
|
|
member_params = get_member_targets(members, new_project_id) if members.present?
|
|
versions_params = get_common_targets(versions, new_project_id, "Version") if versions.present?
|
|
watcher_params = get_common_targets(watchers, new_project_id, "Watcher") if watchers.present?
|
|
praise_treads = get_common_targets(praises, new_project_id, "PraiseTread") if praises.present?
|
|
target_params.push({
|
|
target_params: project_json,
|
|
issues_params: issues_params || nil,
|
|
member_params: member_params || nil,
|
|
versions_params: versions_params || nil,
|
|
watcher_params: watcher_params || nil,
|
|
praise_treads: praise_treads || nil,
|
|
user_login: user_login
|
|
}.delete_if {|k,v| v.blank?})
|
|
return target_params
|
|
end
|
|
|
|
def get_issue_issues(targets, new_project_id)
|
|
target_params = []
|
|
targets.find_each do |re|
|
|
user_logins = User.select([:id, :login]).where(id: [re.author_id, re.assigned_to_id]).pluck(:login)
|
|
author_login = user_logins[0]
|
|
assign_login = user_logins[1]
|
|
re_json = re.as_json(:except=>[:author_id, :id, :assigned_to_id, :lock_version]).values[0].delete_if {|k,v| v.blank?}
|
|
re_version = re.fixed_version.present? ? re.fixed_version&.name : nil
|
|
re_json.merge!({
|
|
issue_type: "Issue",
|
|
})
|
|
if new_project_id.present?
|
|
re_json.merge!(project_id: new_project_id)
|
|
end
|
|
|
|
# if re_version.present?
|
|
# re_json.merge!(re_version: re_version)
|
|
# end
|
|
|
|
journal_details = re.journals
|
|
journal_details_params = get_journal_issues(journal_details) if journal_details.present?
|
|
|
|
target_params.push({
|
|
target_params: re_json,
|
|
journals: journal_details_params || nil,
|
|
user_login: author_login,
|
|
assign_login: assign_login,
|
|
re_version: re_version
|
|
}.delete_if {|k,v| v.blank?})
|
|
end
|
|
return target_params
|
|
end
|
|
|
|
def get_journal_issues(targets)
|
|
target_params = []
|
|
targets.find_each do |re|
|
|
re_json = re.as_json(:except=>[:user_id, :id]).values[0].delete_if {|k,v| v.blank?}
|
|
re_detail_json = re.details.as_json(:except => [:id, :journal_id]).map{|k| k["journal_detail"].delete_if {|k,v| v.blank?}} if re.details.present?
|
|
user_login = re.user.try(:login)
|
|
new_re_json = {
|
|
target_params: re_json,
|
|
journal_details: re_detail_json || nil,
|
|
user_login: user_login
|
|
}
|
|
target_params.push(new_re_json.delete_if {|k,v| v.blank?})
|
|
end
|
|
return target_params
|
|
end
|
|
|
|
def get_member_targets(targets,new_project_id)
|
|
target_params = []
|
|
targets.find_each do |re|
|
|
re_json = re.as_json(:except=>[:user_id, :id]).values[0].delete_if {|k,v| v.blank?}
|
|
if new_project_id.present?
|
|
re_json.merge!(project_id: new_project_id)
|
|
end
|
|
user_login = re.user.try(:login)
|
|
member_roles_json = re.member_roles.as_json(:except => [:id, :member_id]).map{|k| k["member_role"].delete_if {|k,v| v.blank?}} if re.member_roles.present?
|
|
|
|
new_re_json = {
|
|
target_params: re_json,
|
|
member_roles: member_roles_json || nil,
|
|
user_login: user_login
|
|
}
|
|
target_params.push(new_re_json.delete_if {|k,v| v.blank?})
|
|
end
|
|
return target_params
|
|
end
|
|
|
|
def get_common_targets(targets, new_project_id, type)
|
|
target_params = []
|
|
targets.find_each do |re|
|
|
re_json = re.as_json(:except=>[:user_id]).values[0].delete_if {|k,v| v.blank?}
|
|
if new_project_id.present?
|
|
case type
|
|
when "Watcher"
|
|
re_json.merge!(watchable_id: new_project_id)
|
|
when "PraiseTread"
|
|
re_json.merge!(praise_tread_object_id: new_project_id)
|
|
else
|
|
re_json.merge!(project_id: new_project_id)
|
|
end
|
|
end
|
|
|
|
user_login = re.user.try(:login)
|
|
new_re_json = {
|
|
target_params: re_json,
|
|
user_login: user_login
|
|
}
|
|
target_params.push(new_re_json.delete_if {|k,v| v.blank?})
|
|
end
|
|
return target_params
|
|
end
|
|
|
|
# def check_ids
|
|
# unless params[:ids].present?
|
|
# respond_to do |format|
|
|
# format.json {
|
|
# render json: { message: "缺少ID参数" }
|
|
# }
|
|
# end
|
|
# end
|
|
# end
|
|
|
|
end |