@ -3,30 +3,7 @@
class ProjectsService
include ApplicationHelper
# include CoursesHelper
def judge_can_setting ( sy , user )
sy [ :can_setting ] = sy [ :user_id ] == user . id ? true : false
sy [ :can_setting ] = false if sy [ :id ] . nil?
sy . courses . each do | c |
c [ :can_setting ] = false
member = c . members . where ( " user_id= #{ user . id } and course_id= #{ c . id } " ) [ 0 ]
roleName = member . roles [ 0 ] . name if member
if roleName && ( roleName == " TeachingAsistant " || roleName == " Teacher " )
c [ :can_setting ] = true
end
if c . tea_id == user . id
c [ :can_setting ] = true
end
end
sy
end
#获取指定用户的项目列表
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 " )
@ -36,103 +13,130 @@ class ProjectsService
#显示项目
def show_project ( params , current_user )
project = Project . find ( params [ :id ] )
# course .generate_invite_code
# course .generate_qrcode
# project .generate_invite_code
# project .generate_qrcode
# unless (course.is_public == 1 || current_user.member_of_course?(course) || current_user.admin?)
# raise '403'
# end
# {:course => course,:work_unit => work_unit, :img_url => url_to_avatar(course),:current_user_is_member => current_user.nil? ? false : current_user.member_of_course?(course),:current_user_is_teacher => current_user.nil? ? false : is_course_teacher(current_user,course),:course_student_num => course ? course.student.count.to_s : 0}
project
end
def after_create_course ( course , user )
#unless User.current.admin?
r = Role . givable . find_by_id ( Setting . new_project_user_role_id . to_i ) || Role . givable . first
m = Member . new ( :user = > user , :roles = > [ r ] )
m . project_id = - 1
course_info = CourseInfos . new ( :user_id = > user . id , :course_id = > course . id )
#user_grades = UserGrade.create(:user_id => User.current.id, :course_id => @course.id)
course . members << m
course . course_infos << course_info
end
def send_wechat_create_class_notice user , course
count = ShieldWechatMessage . where ( " container_type='User' and container_id= #{ user . id } and shield_type='Course' and shield_id= #{ course . id } " ) . count
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
if count == 0
ws = WechatService . new
title = " 恭喜您创建 班级 成功。"
ws . create_ class_notice user . id , " create_course_notice " , course . id , title , course . name , user . show_name , 0 , " 点击查看班级 详情。"
title = " 恭喜您创建项目成功。 "
ws . create_project_notice user . id , " create_project_notice " , project . id , title , project . name , format_time ( project . created_on ) , " 点击查看项目详情。 "
end
end
#创建大纲
# params {title: '大纲名称', [{course}, {course}]}
def create ( user , title , courses = [ ] )
sy = Syllabus . new ( title : title , user_id : user . id )
ActiveRecord :: Base . transaction ( ) do
sy . save!
courses . each do | course |
if :: Course === course
course . syllabus_id = sy . id
course . save!
send_wechat_create_class_notice user , course
elsif Hash === course
c = :: Course . new ( course )
c . tea_id = user . id
c . syllabus_id = sy . id
c . update_default_value
c . is_public = 0
c . save!
after_create_course ( c , user )
send_wechat_create_class_notice user , c
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 ] = '1' #公开
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
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
send_wechat_create_project_notice user , project
end
sy [ :can_setting ] = true
sy
status
end
#修改课程大纲的名称、班级名称、新增班级
def edit ( user , option )
courses = [ ]
#修改项目成员角色
def modify_user_project_role params
status = - 1
syllabus_id = option [ :id ]
sy = Syllabus . where ( " id=? " , option [ :id ] ) . first
project = Project . find ( " #{ params [ :id ] } " )
member = project . member_principals . includes ( :roles , :principal ) . where ( " user_id=? " , params [ :user_id ] ) . first
if sy && sy . user_id == user . id
syllabus_title = option [ :title ]
if member
member. member_roles [ 0 ] . role_id = params [ :role_id ]
sy . title = syllabus_title
sy . save!
#修改班级名称
modify_courses = option [ :modify_courses ]
modify_courses . each do | c |
course = Course . where ( " id=? " , c . id ) . first
if course && course . tea_id == user . id
course . name = c . name
! course . save
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
#新增班级
add_courses = option [ :add_courses ]
add_courses . each do | c |
course = Course . new ( )
course . name = c
course . tea_id = user . id
course . syllabus_id = sy . id
course . update_default_value
course . is_public = 0
course . save!
after_create_course ( course , user )
send_wechat_create_class_notice user , course
if member . member_roles [ 0 ] . save
status = 0
end
status = 0
end
status
end
class JoinProjectError < Errors
define_error [
0 , '加入成功' ,
1 , '您的邀请码不正确' ,
2 , '您还未登录' ,
3 , '您已经是该项目的管理人员' ,
4 , '您已经是该项目的开发人员' ,
5 , '您已经是该项目的报告人员' ,
6 , '该项目不存在或已被删除啦' ,
'未知错误,请稍后再试'
]
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?
members = [ ]
members << Member . new ( :role_ids = > [ 5 ] , :user_id = > current_user . id )
project . members << members
projectInfo = ProjectInfo . new ( :user_id = > current_user . id , :project_id = > project . id )
projectInfo . save
status = 0
else
status = 4
end
end
end
else
status = 4
end
status
end