You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
trustieforge/app/services/projects_service.rb

250 lines
8.2 KiB

#coding=utf-8
class ProjectsService
include ApplicationHelper
#获取指定用户的项目列表
def user_projects(user)
projects = user.projects.not_deleted.select("projects.*,(SELECT MAX(updated_at) FROM `forge_activities` WHERE forge_activities.project_id = projects.id) AS updated_at ").order("updated_at desc")
projects
end
#显示项目
def show_project(params,current_user)
project = Project.find(params[:id])
# project.generate_invite_code
# project.generate_qrcode
project
end
def send_wechat_create_project_notice user,project
count = ShieldWechatMessage.where("container_type='User' and container_id=#{user.id} and shield_type='Project' and shield_id=#{project.id}").count
Rails.logger.info "!!!!!!!!!!!!!!!!!!!!!!#{project}"
if count == 0
ws = WechatService.new
title = "恭喜您创建项目成功。"
ws.create_project_notice user.id, "create_project_notice", project.id,title, project.name, format_time(project.created_on),"点击查看项目详情。"
end
end
def createNewProject params,user
status = -1
issue_custom_fields = IssueCustomField.sorted.all
trackers = Tracker.sorted.all
project = Project.new
project[:name] = params[:name]
project[:description] = ''
project[:is_public] = '0' #公开
project[:project_type] = 0
project[:project_new_type] = 1
project[:identifier] = Project.next_identifier if Setting.sequential_project_identifiers?
project.organization_id = params[:organization_id]
project.user_id = user.id
# if validate_parent_id && @project.save
if project.save
p = Project.find("#{project.id}")
send_wechat_create_project_notice user,p
r = Role.givable.find_by_id(Setting.new_project_user_role_id.to_i) || Role.givable.first
m = Member.new(:user => user, :roles => [r])
# project's score
if ProjectScore.where("project_id=?", project.id).first.nil?
ProjectScore.create(:project_id => project.id, :score => false)
end
# end
project_info = ProjectInfo.new(:user_id => user.id, :project_id => project.id)
user_grades = UserGrade.create(:user_id => user.id, :project_id => project.id)
project_status = ProjectStatus.create(:project_id => project.id, :watchers_count => 0, :changesets_count => 0, :project_type => project.project_type,:grade => 0)
project.members << m
project.project_infos << project_info
status = 0
end
status
end
#修改项目成员角色
def modify_user_project_role params
status = -1
project = Project.find("#{params[:id]}")
member = project.member_principals.includes(:roles, :principal).where("user_id=?",params[:user_id]).first
if member
member.member_roles[0].role_id = params[:role_id]
role = Role.find(params[:role_id])
if role.allowed_to?(:is_manager)
projectInfo = ProjectInfo.new(:user_id => member.user_id, :project_id => project.id)
projectInfo.save
else
user_admin = ProjectInfo.where("user_id = ? and project_id = ?", member.user_id, project.id)
if user_admin.size > 0
user_admin.each do |user|
user.destroy
end
end
end
if member.member_roles[0].save
status = 0
end
end
status
end
class JoinProjectError < Errors
define_error [
0, '加入成功',
1, '您的邀请码不正确',
2, '您还未登录',
3, '您已经是该项目的管理人员',
4, '您已经是该项目的开发人员',
5, '您已经是该项目的报告人员',
6, '该项目不存在或已被删除啦',
7, '您的申请已提交,请等待管理员审批',
8, '您已经发送过申请了,请耐心等待',
'未知错误,请稍后再试'
]
end
def join_project params,current_user
status = -1
project = Project.find_by_invite_code(params[:invite_code]) if params[:invite_code]
if project
if project[:is_delete] == 1
status = 6
else
if current_user.member_of?(project) #如果已经是成员
member = project.member_principals.includes(:roles, :principal).where("user_id=?",current_user.id).first
status = member.member_roles[0].role_id
else
if params[:invite_code].present?
if params[:role_id] == 5
members = []
user_grades = []
project_info = []
user_grades << UserGrade.new(:user_id => current_user.id, :project_id => project.id)
project.user_grades << user_grades unless user_grades.first.user_id.nil?
members << Member.new(:role_ids => ["5"], :user_id => current_user.id)
project.members << members
project_info << ProjectInfo.new(:user_id => current_user.id, :project_id => project.id)
project.project_infos << project_info
status = 0
else
if !AppliedProject.where(:project_id => project.id, :user_id => current_user.id).first.nil?
status = 8
else
AppliedProject.create(:user_id => current_user.id, :project_id => project.id, :role => params[:role_id])
status = 7
end
end
else
status = 4
end
end
end
else
status = 4
end
status
end
def get_project_review_members(project,role_id,current_user)
review_members = []
if role_id == 3 || role_id == 4
#AppliedMessage.where(:applied_id => @applied_message.applied_id, :project_id => @applied_message.project_id, :status => 1,
#:applied_type => "AppliedProject")
apply_messages = AppliedMessage.where(:user_id => current_user.id, :project_id => project.id, :status => 1, :role=>role_id)
apply_messages.each do |m|
user = User.find(m.applied_user_id)
if user
img_url = url_to_avatar(user)
gender = user.user_extensions.gender.nil? ? 0 : user.user_extensions.gender
work_unit = get_user_work_unit user
location = get_user_location user
review_members << {:id => user.id, :img_url => img_url, :nickname => user.login, :gender => gender,
:work_unit => work_unit, :mail => user.mail, :location => location,
role_name: "",
name: user.show_name,
roles_id: role_id,
:brief_introduction => user.user_extensions.brief_introduction,:realname=>user.realname}
end
end
end
review_members
end
def get_reviewer_info params
info = nil
project = Project.find(params[:project_id])
if project
messages = AppliedProject.where("project_id = ? and user_id=?",project.id,params[:user_id]).first
if messages
user = User.find(params[:user_id])
if user
img_url = url_to_avatar(user)
gender = user.user_extensions.gender.nil? ? 0 : user.user_extensions.gender
work_unit = get_user_work_unit user
location = get_user_location user
info = {:id => user.id, :img_url => img_url, :nickname => user.login, :gender => gender,
:work_unit => work_unit, :mail => user.mail, :location => location,
role_name: "",
name: user.show_name,
roles_id: messages.role_id,
:brief_introduction => user.user_extensions.brief_introduction,:realname=>user.realname}
end
end
end
info
end
def deal_join_apply params,current_user
status = -1
message = ""
project = Project.find(params[:project_id])
if project
messages = AppliedProject.where("project_id = ? and user_id=?",project.id,params[:user_id]).first
if messages
apply_user = User.find(params[:user_id])
#
status = 0
else
message = "该申请不存在或已被处理"
end
else
message = "该班级不存在或已被删除"
end
{:status => status,:message => message}
end
end