|  |  | #coding=utf-8
 | 
						
						
						
							|  |  | class CoursesService
 | 
						
						
						
							|  |  |   include ApplicationHelper
 | 
						
						
						
							|  |  |   include CoursesHelper
 | 
						
						
						
							|  |  |   include HomeworkAttachHelper
 | 
						
						
						
							|  |  |   include ApiHelper
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   #参数school_id为0或不传时返回所有课程,否则返回对应学校的课程
 | 
						
						
						
							|  |  |   #参数per_page_count分页功能,每页显示的课程数
 | 
						
						
						
							|  |  |   #参数page分页功能,当前页码
 | 
						
						
						
							|  |  |   def course_list params,current_user
 | 
						
						
						
							|  |  |     @school_id = params[:school_id]
 | 
						
						
						
							|  |  |     per_page_option = params[:per_page_count] || 10
 | 
						
						
						
							|  |  |     page_no = params[:page] || 1
 | 
						
						
						
							|  |  |     if @school_id == "0" || @school_id.nil?
 | 
						
						
						
							|  |  |       @courses_all = Course.active.visible.
 | 
						
						
						
							|  |  |         joins("LEFT JOIN #{CourseStatus.table_name} ON #{Course.table_name}.id = #{CourseStatus.table_name}.course_id")
 | 
						
						
						
							|  |  |     else
 | 
						
						
						
							|  |  |       @courses_all = Course.active.visible.
 | 
						
						
						
							|  |  |         joins("LEFT JOIN #{CourseStatus.table_name} ON #{Course.table_name}.id = #{CourseStatus.table_name}.course_id").
 | 
						
						
						
							|  |  |         where("#{Course.table_name}.school_id = ?", @school_id)
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |     @course_count = @courses_all.count
 | 
						
						
						
							|  |  |     @course_pages = Redmine::Pagination::Paginator.new @course_count, per_page_option,page_no
 | 
						
						
						
							|  |  |     @courses = @courses_all.order("created_at desc")
 | 
						
						
						
							|  |  |     @courses = @courses.offset(@course_pages.offset).limit(@course_pages.per_page)
 | 
						
						
						
							|  |  |     course_list = []
 | 
						
						
						
							|  |  |     @courses.each do |course|
 | 
						
						
						
							|  |  |       course_list << {:course => course,:img_url => url_to_avatar(course),:current_user_is_member => current_user.member_of_course?(course),:current_user_is_teacher => is_course_teacher(current_user,course)}
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |     course_list
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   #搜索课程
 | 
						
						
						
							|  |  |   def search_course params,current_user
 | 
						
						
						
							|  |  |     courses_all = Course.all_course
 | 
						
						
						
							|  |  |     name = params[:name]
 | 
						
						
						
							|  |  |     if name.blank?
 | 
						
						
						
							|  |  |       raise 'sumbit empty'
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |     @courses = courses_all.visible(current_user)
 | 
						
						
						
							|  |  |     if params[:name].present?
 | 
						
						
						
							|  |  |       @courses_all = @courses.like(params[:name]).order("created_at desc")
 | 
						
						
						
							|  |  |     else
 | 
						
						
						
							|  |  |       @courses_all =  @courses.order("created_at desc");
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |     @courses_all
 | 
						
						
						
							|  |  |     course_list = []
 | 
						
						
						
							|  |  |     @courses_all.each do |course|
 | 
						
						
						
							|  |  |       course_list << {:course => course,:img_url => url_to_avatar(course),:current_user_is_member => current_user.member_of_course?(course),:current_user_is_teacher => is_course_teacher(current_user,course)}
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |     course_list
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   #获取头像
 | 
						
						
						
							|  |  |   def get_img obj
 | 
						
						
						
							|  |  |     url_to_avatar(obj)
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   #课程老师或课程学生列表
 | 
						
						
						
							|  |  |   def course_teacher_or_student_list params,course,current_user
 | 
						
						
						
							|  |  |     if course.is_a?(Course)
 | 
						
						
						
							|  |  |       c = course
 | 
						
						
						
							|  |  |     else
 | 
						
						
						
							|  |  |       c = Course.find(course)
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |     if current_user.nil? || !(current_user.admin? || c.is_public == 1 || (c.is_public == 0 && current_user.member_of_course?(c)))
 | 
						
						
						
							|  |  |       raise '403'
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |     @teachers= searchTeacherAndAssistant(c)
 | 
						
						
						
							|  |  |     #@canShowCode = isCourseTeacher(User.current.id,course) && params[:role] != '1'
 | 
						
						
						
							|  |  |     case params[:role]
 | 
						
						
						
							|  |  |       when '1'
 | 
						
						
						
							|  |  |         #@subPage_title = l :label_teacher_list
 | 
						
						
						
							|  |  |         @members = searchTeacherAndAssistant(c)
 | 
						
						
						
							|  |  |       when '2'
 | 
						
						
						
							|  |  |         #@subPage_title = l :label_student_list
 | 
						
						
						
							|  |  |         @members = searchStudent(c)
 | 
						
						
						
							|  |  |       else
 | 
						
						
						
							|  |  |         #@subPage_title = ''
 | 
						
						
						
							|  |  |         @members = c.member_principals.includes(:roles, :principal).all.sort
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |     users = []
 | 
						
						
						
							|  |  |     @members.each do |m|
 | 
						
						
						
							|  |  |       img_url = url_to_avatar(m.user)
 | 
						
						
						
							|  |  |       gender = m.user.user_extensions.gender.nil? ? 0 : m.user.user_extensions.gender
 | 
						
						
						
							|  |  |       work_unit = get_user_work_unit m.user
 | 
						
						
						
							|  |  |       location = get_user_location m.user
 | 
						
						
						
							|  |  |       users << {:id => m.user.id, :img_url => img_url, :nickname => m.user.login, :gender => gender, :work_unit => work_unit, :mail => m.user.mail, :location => location, :brief_introduction => m.user.user_extensions.brief_introduction}
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |     users
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   #获取用户的工作单位
 | 
						
						
						
							|  |  |   def get_user_work_unit user
 | 
						
						
						
							|  |  |     work_unit = ""
 | 
						
						
						
							|  |  |     if user.user_extensions.identity == 0 || user.user_extensions.identity == 1
 | 
						
						
						
							|  |  |       work_unit = user.user_extensions.school.name unless  user.user_extensions.school.nil?
 | 
						
						
						
							|  |  |     elsif  user.user_extensions.identity == 3
 | 
						
						
						
							|  |  |       work_unit = user.user_extensions.occupation
 | 
						
						
						
							|  |  |     elsif user.user_extensions.identity == 2
 | 
						
						
						
							|  |  |       work_unit = user.firstname
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |     work_unit
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   #获取用户地区
 | 
						
						
						
							|  |  |   def get_user_location user
 | 
						
						
						
							|  |  |     location = ""
 | 
						
						
						
							|  |  |     location << (user.user_extensions.location || '')
 | 
						
						
						
							|  |  |     location << (user.user_extensions.location_city || '')
 | 
						
						
						
							|  |  |     location
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   #课程通知列表
 | 
						
						
						
							|  |  |   def course_news_list params,current_user
 | 
						
						
						
							|  |  |     if params[:course_id] && @course==nil
 | 
						
						
						
							|  |  |       @course = Course.find(params[:course_id])
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |     if current_user.nil? || !(current_user.admin? || @course.is_public == 1 || (@course.is_public == 0 && current_user.member_of_course?(@course)))
 | 
						
						
						
							|  |  |       raise '403'
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |     scope = @course ? @course.news.course_visible(current_user) : News.course_visible(current_user)
 | 
						
						
						
							|  |  |     news = []
 | 
						
						
						
							|  |  |     scope.each do |n|
 | 
						
						
						
							|  |  |       news << {:id => n.id,:title => n.title,:author_name => n.author.name,:author_id => n.author.id, :description => n.description,:created_on => format_time(n.created_on),:comments_count => n.comments_count}
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |     news
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   #查看新闻权限验证
 | 
						
						
						
							|  |  |   def show_course_news_authorize(current_user)
 | 
						
						
						
							|  |  |     unless current_user.allowed_to?({:controller => 'news', :action => 'show'}, false)
 | 
						
						
						
							|  |  |       raise '403'
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   #显示课程通知(包括评论) 需验证权限
 | 
						
						
						
							|  |  |   def show_course_news params,current_user
 | 
						
						
						
							|  |  |     @news = News.find(params[:id])
 | 
						
						
						
							|  |  |     @course = @news.course
 | 
						
						
						
							|  |  |     if @course
 | 
						
						
						
							|  |  |       if current_user.nil? || !(current_user.admin? || @course.is_public == 1 || (@course.is_public == 0 && current_user.member_of_course?(@course)))
 | 
						
						
						
							|  |  |         raise '403'
 | 
						
						
						
							|  |  |       end
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |     @comments = @news.comments
 | 
						
						
						
							|  |  |     @comments.reverse! if current_user.wants_comments_in_reverse_order?
 | 
						
						
						
							|  |  |     {:news => @news,:comments => @comments}
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |     #comments = []
 | 
						
						
						
							|  |  |     #@comments.each do |comment|
 | 
						
						
						
							|  |  |     #  comments << {:author_id => comment.author_id,:author_name => comment.author.name,:commont_content => comment.comments,:time => format_time(comment.created_on)}
 | 
						
						
						
							|  |  |     #end
 | 
						
						
						
							|  |  |     #{:title => @news.title,:author_name => @news.author.name,:author_id => @news.author.id, :description => @news.description,:created_on => format_time(@news.created_on),
 | 
						
						
						
							|  |  |     # :comments_count => @news.comments_count,:comments => comments}
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   #显示课程
 | 
						
						
						
							|  |  |   def show_course(params,current_user)
 | 
						
						
						
							|  |  |     course = Course.find(params[:id])
 | 
						
						
						
							|  |  |     if course.school
 | 
						
						
						
							|  |  |       work_unit = course.school.name
 | 
						
						
						
							|  |  |     else
 | 
						
						
						
							|  |  |       work_unit = get_user_work_unit course.teacher
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |     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.member_of_course?(course),:current_user_is_teacher => is_course_teacher(current_user,course)}
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   #创建课程
 | 
						
						
						
							|  |  |   #current_user当前用户对象(不是id)
 | 
						
						
						
							|  |  |   # params[:course][:name]:课程名称
 | 
						
						
						
							|  |  |   #params[:course][:password]:密码
 | 
						
						
						
							|  |  |   #params[:course][:description]:描述
 | 
						
						
						
							|  |  |   #params[:course][:is_public]:是否公开1公开,0私有
 | 
						
						
						
							|  |  |   #params[:course][:open_student]:是否公开学生列表1公开,0不公开,不公开时非课程成员无法看到学生列表
 | 
						
						
						
							|  |  |   #params[:course][:course_type]:暂时默认给1值。
 | 
						
						
						
							|  |  |   #params[:term]:学期(秋季学期或春季学期)
 | 
						
						
						
							|  |  |   #params[:time]: 年份(例:2014)
 | 
						
						
						
							|  |  |   #params[:setup_time]:暂不传(貌似已经没用了)
 | 
						
						
						
							|  |  |   #params[:endup_time]: 暂不传(貌似已经没用了)
 | 
						
						
						
							|  |  |   #params[:class_period]:学时总数
 | 
						
						
						
							|  |  |   def create_course(params,current_user)
 | 
						
						
						
							|  |  |     if current_user.user_extensions.identity
 | 
						
						
						
							|  |  |       @course = Course.new
 | 
						
						
						
							|  |  |       @course.extra = 'course' + DateTime.parse(Time.now.to_s).strftime('%Y-%m-%d_%H-%M-%S').to_s
 | 
						
						
						
							|  |  |       @course.send(:safe_attributes=, params[:course], current_user)
 | 
						
						
						
							|  |  |       #@course.safe_attributes(current_user,params[:course])
 | 
						
						
						
							|  |  |       @course.tea_id = current_user.id
 | 
						
						
						
							|  |  |       @course.term = params[:term]
 | 
						
						
						
							|  |  |       @course.time = params[:time]
 | 
						
						
						
							|  |  |       #@course.school_id = params[:occupation]
 | 
						
						
						
							|  |  |       @course.school_id = current_user.user_extensions.school_id
 | 
						
						
						
							|  |  |       @course.setup_time = params[:setup_time]
 | 
						
						
						
							|  |  |       @course.endup_time = params[:endup_time]
 | 
						
						
						
							|  |  |       @course.class_period = params[:class_period].to_i
 | 
						
						
						
							|  |  |       params[:course][:is_public] ? @course.is_public = 1 : @course.is_public = 0
 | 
						
						
						
							|  |  |       params[:course][:open_student] ? @course.open_student = 1 : @course.open_student = 0
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |     @issue_custom_fields = IssueCustomField.sorted.all
 | 
						
						
						
							|  |  |     @trackers = Tracker.sorted.all
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |     if @course.save
 | 
						
						
						
							|  |  |       #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 => current_user, :roles => [r])
 | 
						
						
						
							|  |  |       m.project_id = -1
 | 
						
						
						
							|  |  |       course = CourseInfos.new(:user_id => current_user.id, :course_id => @course.id)
 | 
						
						
						
							|  |  |       #user_grades = UserGrade.create(:user_id => User.current.id, :course_id => @course.id)
 | 
						
						
						
							|  |  |       if params[:course][:is_public] == '1'
 | 
						
						
						
							|  |  |         course_status = CourseStatus.create(:course_id => @course.id, :watchers_count => 0, :changesets_count => 0, :grade => 0, :course_type => @course_tag)
 | 
						
						
						
							|  |  |       end
 | 
						
						
						
							|  |  |       @course.members << m
 | 
						
						
						
							|  |  |       @course.course_infos << course
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |     {:course => @course,:img_url => url_to_avatar(@course),:current_user_is_member => current_user.member_of_course?(@course),:current_user_is_teacher => is_course_teacher(current_user,@course)}
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   #验证编辑课程的权限
 | 
						
						
						
							|  |  |   #当前
 | 
						
						
						
							|  |  |   def edit_course_authorize(current_user,course)
 | 
						
						
						
							|  |  |     unless current_user.allowed_to?({:controller => 'courses', :action => 'update'}, course)
 | 
						
						
						
							|  |  |       raise '403'
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   #编辑课程  需验证权限
 | 
						
						
						
							|  |  |   # params[:course][:name]:课程名称
 | 
						
						
						
							|  |  |   #params[:course][:password]:密码
 | 
						
						
						
							|  |  |   #params[:course][:description]:描述
 | 
						
						
						
							|  |  |   #params[:course][:is_public]:是否公开1公开,0私有
 | 
						
						
						
							|  |  |   #params[:course][:open_student]:是否公开学生列表1公开,0不公开,不公开时非课程成员无法看到学生列表
 | 
						
						
						
							|  |  |   #params[:course][:course_type]:暂时默认给1值。
 | 
						
						
						
							|  |  |   #params[:term]:学期(秋季学期或春季学期)
 | 
						
						
						
							|  |  |   #params[:time]: 年份(例:2014)
 | 
						
						
						
							|  |  |   #params[:class_period]:学时总数
 | 
						
						
						
							|  |  |   def edit_course(params,course,current_user)
 | 
						
						
						
							|  |  |     course.send(:safe_attributes=, params[:course], current_user)
 | 
						
						
						
							|  |  |     #course.safe_attributes = params[:course]
 | 
						
						
						
							|  |  |     course.time = params[:time]
 | 
						
						
						
							|  |  |     course.term = params[:term]
 | 
						
						
						
							|  |  |     course.class_period = params[:class_period].to_i
 | 
						
						
						
							|  |  |     params[:course][:is_public] ? course.is_public = 1 : course.is_public = 0
 | 
						
						
						
							|  |  |     params[:course][:open_student] ? course.open_student = 1 : course.open_student = 0
 | 
						
						
						
							|  |  |     if course.save
 | 
						
						
						
							|  |  |       if params[:course][:is_public] == '0'
 | 
						
						
						
							|  |  |         course_status = CourseStatus.find_by_course_id(course.id)
 | 
						
						
						
							|  |  |         course_status.destroy if course_status
 | 
						
						
						
							|  |  |       elsif params[:course][:is_public] == '1'
 | 
						
						
						
							|  |  |         course_status = CourseStatus.find_by_course_id(course.id)
 | 
						
						
						
							|  |  |         course_status.destroy if course_status
 | 
						
						
						
							|  |  |         course_status = CourseStatus.create(:course_id => course.id,  :grade => 0)
 | 
						
						
						
							|  |  |       end
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |     {:course => course,:img_url => url_to_avatar(course),:current_user_is_member => current_user.member_of_course?(course),:current_user_is_teacher => is_course_teacher(current_user,course)}
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   #退出课程
 | 
						
						
						
							|  |  |   #object_id: 课程id
 | 
						
						
						
							|  |  |   #user:当前用户
 | 
						
						
						
							|  |  |   #@state == 0 退出成功
 | 
						
						
						
							|  |  |   #@state == 1 不在课程中
 | 
						
						
						
							|  |  |   #@state == 2 您还未登录
 | 
						
						
						
							|  |  |   #@state 其他 未知错误,请稍后再试
 | 
						
						
						
							|  |  |   def exit_course params,user
 | 
						
						
						
							|  |  |     if user.nil?
 | 
						
						
						
							|  |  |       @state = 2
 | 
						
						
						
							|  |  |       return @state
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |     @member = Member.where('course_id = ? and user_id = ?', params[:object_id], user.id)
 | 
						
						
						
							|  |  |     if @member.nil? || @member.count == 0
 | 
						
						
						
							|  |  |       @state = 1
 | 
						
						
						
							|  |  |       return @state
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |     @member.first.destroy
 | 
						
						
						
							|  |  |     joined = StudentsForCourse.where('student_id = ? and course_id = ?', user.id, params[:object_id])
 | 
						
						
						
							|  |  |     joined.each do |join|
 | 
						
						
						
							|  |  |       join.delete
 | 
						
						
						
							|  |  |       @state = 0
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |     @state
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   #加入课程
 | 
						
						
						
							|  |  |   #object_id:课程id
 | 
						
						
						
							|  |  |   #course_password :加入课程的密码
 | 
						
						
						
							|  |  |   #@state == 0 加入成功
 | 
						
						
						
							|  |  |   #@state == 1 密码错误
 | 
						
						
						
							|  |  |   #@state == 2 课程已过期 请联系课程管理员重启课程。(在配置课程处)
 | 
						
						
						
							|  |  |   #@state == 3 您已经加入了课程
 | 
						
						
						
							|  |  |   #@state == 4 您加入的课程不存在
 | 
						
						
						
							|  |  |   #@state == 5 您还未登录
 | 
						
						
						
							|  |  |   #@state 其他 未知错误,请稍后再试
 | 
						
						
						
							|  |  |   def join_course params,current_user
 | 
						
						
						
							|  |  |     course = Course.find_by_id params[:object_id]
 | 
						
						
						
							|  |  |     @state = 10
 | 
						
						
						
							|  |  |     if course
 | 
						
						
						
							|  |  |       if course_endTime_timeout? course
 | 
						
						
						
							|  |  |         @state = 2
 | 
						
						
						
							|  |  |       else
 | 
						
						
						
							|  |  |         if current_user.member_of_course?(course)
 | 
						
						
						
							|  |  |           @state = 3
 | 
						
						
						
							|  |  |         else
 | 
						
						
						
							|  |  |           if params[:course_password] == course.password
 | 
						
						
						
							|  |  |             members = []
 | 
						
						
						
							|  |  |             members << Member.new(:role_ids => [10], :user_id => current_user.id)
 | 
						
						
						
							|  |  |             course.members << members
 | 
						
						
						
							|  |  |             StudentsForCourse.create(:student_id => current_user.id, :course_id => params[:object_id])
 | 
						
						
						
							|  |  |             @state = 0
 | 
						
						
						
							|  |  |           else
 | 
						
						
						
							|  |  |             @state = 1
 | 
						
						
						
							|  |  |           end
 | 
						
						
						
							|  |  |         end
 | 
						
						
						
							|  |  |       end
 | 
						
						
						
							|  |  |     else
 | 
						
						
						
							|  |  |       @state = 4
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |     {:state => @state,:course => course}
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   #作业列表
 | 
						
						
						
							|  |  |   #已提交的作业数量获取 bid.homeworks.count
 | 
						
						
						
							|  |  |   #学生提问数量获取 bid.commit.nil? ? 0 : bid.commit
 | 
						
						
						
							|  |  |   def homework_list params,current_user
 | 
						
						
						
							|  |  |     course = Course.find(params[:id])
 | 
						
						
						
							|  |  |     if course.is_public != 0 || current_user.member_of_course?(course)
 | 
						
						
						
							|  |  |       bids = course.homeworks.order('deadline DESC')
 | 
						
						
						
							|  |  |       bids = bids.like(params[:name]) if params[:name].present?
 | 
						
						
						
							|  |  |       homeworks = []
 | 
						
						
						
							|  |  |       bids.each do |bid|
 | 
						
						
						
							|  |  |         homeworks << show_homework_info(course,bid,current_user,is_course_teacher(current_user,course))
 | 
						
						
						
							|  |  |       end
 | 
						
						
						
							|  |  |       homeworks
 | 
						
						
						
							|  |  |     else
 | 
						
						
						
							|  |  |       raise '403'
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   def course_dynamic(params,current_user)
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |     @user = User.find(params[:id])
 | 
						
						
						
							|  |  |     if current_user.nil? && !current_user.admin? && !@user.active?
 | 
						
						
						
							|  |  |       raise '404'
 | 
						
						
						
							|  |  |       return
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |     if current_user == @user || current_user.admin?
 | 
						
						
						
							|  |  |       membership = @user.coursememberships.all
 | 
						
						
						
							|  |  |     else
 | 
						
						
						
							|  |  |       membership = @user.coursememberships.all(:conditions => Course.visible_condition(current_user))
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |     if membership.nil? || membership.count == 0
 | 
						
						
						
							|  |  |       raise l(:label_no_courses,:locale => get_user_language(current_user))
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |     membership.sort! {|older, newer| newer.created_on <=> older.created_on }
 | 
						
						
						
							|  |  |     result = []
 | 
						
						
						
							|  |  |     membership.each do |mp|
 | 
						
						
						
							|  |  |       course = mp.course
 | 
						
						
						
							|  |  |       latest_course_dynamics = []
 | 
						
						
						
							|  |  |       latest_news = course.news.order("created_on desc").first
 | 
						
						
						
							|  |  |       unless latest_news.nil?
 | 
						
						
						
							|  |  |         latest_course_dynamics << {:type => 1,:time => latest_news.created_on,:message => l(:label_recently_updated_notification,:locale => get_user_language(current_user))}
 | 
						
						
						
							|  |  |       end
 | 
						
						
						
							|  |  |       latest_message = course.journals_for_messages.order("created_on desc").first
 | 
						
						
						
							|  |  |       unless latest_message.nil?
 | 
						
						
						
							|  |  |         latest_course_dynamics << {:type => 2,:time => latest_message.created_on,:message => l(:label_recently_updated_message,:locale => get_user_language(current_user))}
 | 
						
						
						
							|  |  |       end
 | 
						
						
						
							|  |  |       latest_attachment = course.attachments.order("created_on desc").first
 | 
						
						
						
							|  |  |       unless latest_attachment.nil?
 | 
						
						
						
							|  |  |         latest_course_dynamics << {:type => 3,:time => latest_attachment.created_on,:message => l(:label_recently_updated_courseware,:locale => get_user_language(current_user))}
 | 
						
						
						
							|  |  |       end
 | 
						
						
						
							|  |  |       latest_bid = course.homeworks.order('updated_on DESC').first
 | 
						
						
						
							|  |  |       unless latest_bid.nil?
 | 
						
						
						
							|  |  |         latest_course_dynamics << {:type => 4,:time => latest_bid.updated_on,:message => l(:label_recently_updated_homework,:locale => get_user_language(current_user))}
 | 
						
						
						
							|  |  |       end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |       # Time 2015-04-07 14:58:30
 | 
						
						
						
							|  |  |       # Author lizanle
 | 
						
						
						
							|  |  |       # Description 添加课程创建动态
 | 
						
						
						
							|  |  |       if(User.find_by_id(CourseInfos.find_by_course_id(course.id).try(:user_id)))
 | 
						
						
						
							|  |  |         create_user_name = User.find_by_id(CourseInfos.find_by_course_id(course.id).user_id).realname
 | 
						
						
						
							|  |  |         latest_course_dynamics << {:type => 5,:time => course.created_at,:message =>l(:label_recently,:locale => get_user_language(current_user)) << create_user_name << l(:label_creat,:locale => get_user_language(current_user))}
 | 
						
						
						
							|  |  |       end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |       #每个作业中的最新留言
 | 
						
						
						
							|  |  |       messages = []
 | 
						
						
						
							|  |  |       course.homeworks.each do |bid|
 | 
						
						
						
							|  |  |         jour = bid.journals_for_messages.order("created_on desc").first
 | 
						
						
						
							|  |  |         unless jour.nil?
 | 
						
						
						
							|  |  |           messages << jour
 | 
						
						
						
							|  |  |         end
 | 
						
						
						
							|  |  |       end
 | 
						
						
						
							|  |  |       unless messages.count == 0
 | 
						
						
						
							|  |  |         messages.sort!{|order,newer| newer.created_on <=> order.created_on}
 | 
						
						
						
							|  |  |       end
 | 
						
						
						
							|  |  |       latest_bid_message = messages.first
 | 
						
						
						
							|  |  |       unless latest_bid_message.nil?
 | 
						
						
						
							|  |  |         latest_course_dynamics << {:type => 4,:time => latest_bid_message.created_on,:message => l(:label_recently_updated_message,:locale => get_user_language(current_user))}
 | 
						
						
						
							|  |  |       end
 | 
						
						
						
							|  |  |       #每个作业中学生最后提交的作业
 | 
						
						
						
							|  |  |       homeworks = []
 | 
						
						
						
							|  |  |       course.homeworks.each do |bid|
 | 
						
						
						
							|  |  |          homework_attach = bid.homeworks.order('updated_at DESC').first
 | 
						
						
						
							|  |  |          unless homework_attach.nil?
 | 
						
						
						
							|  |  |            homeworks << homework_attach
 | 
						
						
						
							|  |  |          end
 | 
						
						
						
							|  |  |       end
 | 
						
						
						
							|  |  |       unless homeworks.count == 0
 | 
						
						
						
							|  |  |         homeworks.sort!{|order,newer| newer.updated_at <=> order.updated_at}
 | 
						
						
						
							|  |  |       end
 | 
						
						
						
							|  |  |       latest_homework_attach = homeworks.first
 | 
						
						
						
							|  |  |       unless latest_homework_attach.nil?
 | 
						
						
						
							|  |  |         latest_course_dynamics << {:type => 4,:time => latest_homework_attach.updated_at,:message => l(:label_recently_updated_homework,:locale => get_user_language(current_user))}
 | 
						
						
						
							|  |  |       end
 | 
						
						
						
							|  |  |       latest_course_dynamics.sort!{|order,newer| newer[:time] <=> order[:time]}
 | 
						
						
						
							|  |  |       latest_course_dynamic = latest_course_dynamics.first
 | 
						
						
						
							|  |  |       unless latest_course_dynamic.nil?
 | 
						
						
						
							|  |  |         result << {:course_name => course.name,:course_id => course.id,:course_img_url => url_to_avatar(course),:course_time => course.time,:course_term => course.term,:type => latest_course_dynamic[:type],:update_time => latest_course_dynamic[:time],:message => latest_course_dynamic[:message],:count => nil}
 | 
						
						
						
							|  |  |       end
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |     result.sort!{|order,newer| newer[:update_time] <=> order[:update_time]}
 | 
						
						
						
							|  |  |     result
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |    # 课程课件
 | 
						
						
						
							|  |  |    def course_attachments params
 | 
						
						
						
							|  |  |      result = []
 | 
						
						
						
							|  |  |      @course = Course.find(params[:course_id])
 | 
						
						
						
							|  |  |      @attachments = @course.attachments.order("created_on desc")
 | 
						
						
						
							|  |  |      @attachments.each do |atta|
 | 
						
						
						
							|  |  |        result << {:filename => atta.filename,:description => atta.description,:downloads => atta.downloads,:quotes => atta.quotes.nil? ? 0 :atta.quotes  }
 | 
						
						
						
							|  |  |      end
 | 
						
						
						
							|  |  |      result
 | 
						
						
						
							|  |  |    end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   private
 | 
						
						
						
							|  |  |   def show_homework_info course,bid,current_user,is_course_teacher
 | 
						
						
						
							|  |  |     author_real_name = bid.author.lastname + bid.author.firstname
 | 
						
						
						
							|  |  |     many_times = course.homeworks.index(bid) + 1
 | 
						
						
						
							|  |  |     name = bid.name
 | 
						
						
						
							|  |  |     homework_count = bid.homeworks.count  #已提交的作业数量
 | 
						
						
						
							|  |  |     student_questions_count = bid.journals_for_messages.where('m_parent_id IS NULL').count
 | 
						
						
						
							|  |  |     description = bid.description
 | 
						
						
						
							|  |  |     #if is_course_teacher(User.current, course) && @bid.open_anonymous_evaluation == 1 && @bid.homeworks.count >= 2
 | 
						
						
						
							|  |  |     state = bid.comment_status
 | 
						
						
						
							|  |  |     unless is_course_teacher
 | 
						
						
						
							|  |  |       homework_for_anonymous_comments = get_student_batch_homework_list bid,current_user
 | 
						
						
						
							|  |  |     end
 | 
						
						
						
							|  |  |     #end
 | 
						
						
						
							|  |  |     open_anonymous_evaluation = bid.open_anonymous_evaluation
 | 
						
						
						
							|  |  |     {:course_name => course.name,:course_id => course.id,:id => bid.id, :author => bid.author,:author_real_name => author_real_name, :homework_times => many_times, :homework_name => name, :homework_count => homework_count,:student_questions_count => student_questions_count,
 | 
						
						
						
							|  |  |      :description => description, :homework_state => state,:open_anonymous_evaluation => open_anonymous_evaluation,:homework_for_anonymous_comments => homework_for_anonymous_comments,:created_on => bid.created_on,:deadline => bid.deadline}
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  |   #显示作业列表的同时显示分配给当前学生匿评的作业
 | 
						
						
						
							|  |  |   def show_homework_info_with_batch course,bid
 | 
						
						
						
							|  |  |     author = bid.author.lastname + bid.author.firstname
 | 
						
						
						
							|  |  |     many_times = course.homeworks.index(bid) + 1
 | 
						
						
						
							|  |  |     name = bid.name
 | 
						
						
						
							|  |  |     homework_count = bid.homeworks.count  #已提交的作业数量
 | 
						
						
						
							|  |  |     student_questions_count = bid.journals_for_messages.where('m_parent_id IS NULL').count
 | 
						
						
						
							|  |  |     description = bid.description
 | 
						
						
						
							|  |  |                                           #if is_course_teacher(User.current, course) && @bid.open_anonymous_evaluation == 1 && @bid.homeworks.count >= 2
 | 
						
						
						
							|  |  |     state = bid.comment_status
 | 
						
						
						
							|  |  |                                           #end
 | 
						
						
						
							|  |  |     open_anonymous_evaluation = bid.open_anonymous_evaluation
 | 
						
						
						
							|  |  |     {:course_name => course.name,:id => bid.id, :course_teacher => author, :homework_times => many_times, :homework_name => name, :homework_count => homework_count,:student_questions_count => student_questions_count,
 | 
						
						
						
							|  |  |      :description => description, :homework_state => state,:open_anonymous_evaluation => open_anonymous_evaluation}
 | 
						
						
						
							|  |  |   end
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | 
 | 
						
						
						
							|  |  | end |