# encoding: utf-8
## This helper be included in applicationHelper
module CoursesHelper
=begin
1. define TeacherRoles, StudentRoles
2. define count function
3. define search by roles
4. define search member function
=end
  #TeacherRoles = [3, 4, 7, 9]
  #StudentRoles = [5, 10]
  #AllPeople = StudentRoles+TeacherRoles
  ## return people count

  # 添加教师--列表翻页返回的json数据
  def search_teacher_json_data users
    users.map do |user|
      user_name = user.show_real_name
      user_path = user_path(user)
      school = user.user_extensions.try(:school).try(:name).to_s
      department = user.user_extensions.try(:department).try(:name).to_s
      user.attributes.dup.except("hashed_password", "login", "firstname", "lastname", "mail", "admin", "status", "last_login_on",
                                   "identity_url", "salt", "gid", "phone", "ID_number", "authentication").merge({
                                                                                                                    user_name: user_name,
                                                                                                                    user_path: user_path,
                                                                                                                    school: school,
                                                                                                                    department: department
                                                                                                                })
    end
  end


  # 添加学生--列表翻页返回的json数据
  def search_student_json_data users
    users.map do |user|
      user_name = user.show_real_name
      user_path = user_path(user)
      student_id = user.user_extensions.try(:student_id)
      user.attributes.dup.except("hashed_password", "firstname", "lastname", "mail", "admin", "status", "last_login_on",
                                 "identity_url", "salt", "gid", "phone", "ID_number", "authentication").merge({
                                                                                                                  user_name: user_name,
                                                                                                                  user_path: user_path,
                                                                                                                  student_id: student_id
                                                                                                              })
    end
  end

  def student_course_homework_score course, user
    homework_ids = course.homework_commons.where("homework_type in (1, 4) and publish_time < '#{Time.now}'").map(&:id)
    score = 0
    user.student_works.where(:homework_common_id => homework_ids).each do |work|
      score = score + work.work_score if work.work_score
    end
    format("%.1f",score)
  end

  # 学生的发布资源数
  def student_course_resource_num course, user
    num = course.attachments.where(:author_id => user.id).count
  end

  # 学生的发布帖子数
  def student_course_message_num course, user
    num = Message.where(:board_id => course.boards.map(&:id), :author_id => user.id, :parent_id => nil).count
  end

  # 学生的回复评论数
  def student_course_reply_num course, user
    boards_id = course.boards.empty? ? "(-1)" : "(" + course.boards.map(&:id).join(",") + ")"
    me_num = Message.where("board_id in #{boards_id} and author_id = #{user.id} and parent_id is not null").count
    jour_num = JournalsForMessage.where(:jour_type => 'HomeworkCommon', :jour_id => course.homework_commons.map(&:id), :user_id => user.id).count
    num = me_num + jour_num
  end

  # 推荐的精品课程
  def excellent_course_recommend new_course
    q = "%#{new_course.name.strip}%"
    result = find_excelletn_course(q, new_course)
  end

  # 查询符合条件的精品课程
  # 用新课程名去匹配精品课程中按课程名和Tag名
  def find_excelletn_course keywords, current_course
    # 获取tag匹配结果ID
    a_tags = []
    Course.where("is_excellent =? and is_public =?", 1, 1).each do |ec|
      if ec.tags.any?{|value| current_course.name.include?(value.to_s)}
        a_tags << ec.id
      end
    end
    # 课程本身不能搜索显示自己
    excellent_ids = a_tags.uniq.delete_if{|i| i == current_course.id}
    sql = "SELECT distinct c.id FROM course_activities cs, courses c where cs.course_id = c.id
         and (c.is_excellent =1 or c.excellent_option =1) and c.is_public = 1 and c.id != #{current_course.id} order by cs.updated_at desc;"
    default_ids = Course.find_by_sql(sql).flatten.map { |c| c.id }
    excellent_ids << default_ids.flatten
    arr_result = excellent_ids.flatten.uniq.first(3)
    excellent_courses = Course.find(arr_result)
    return excellent_courses
  end

  # 判断精品课程是否可见,非课程成员无法查看私有课程
  def visible_excellent_course obj
    # if course.is_pu
  end

  # 返回x项目成员数量,即roles表中定义的所有成员
  def projectCount project
    #searchCountByRoles project, AllPeople
    project.members.count
  end

  # 统计课程中作品的数量
  def student_works_num course
    StudentWork.find_by_sql("SELECT * FROM student_works WHERE homework_common_id IN (SELECT id FROM homework_commons WHERE course_id = '#{course.id}')").count
  end

  # 统计数目
  def show_nav?(count)
    count == 0 ? true : false
  end

  #课程模块需要展示的模块
  def course_model
    @nav_dispaly_course_all_label = 1
    @nav_dispaly_forum_label = 1
    @nav_dispaly_course_label = nil
    @nav_dispaly_store_all_label = 1
  end

  #生成课程老师成员链接
  def course_teacher_link teacher_num
    if User.current.member_of_course?(@course) || User.current.admin?
      link_to teacher_num, teachers_course_path(@course), :class => 'color-white', :id => 'teacher_number'
    # elsif  User.current.member_of_course?(@course)
    #   link_to teacher_num, course_member_path(@course, :role => 't'), :class => 'ml5 edu-cir-grey-q color-orange05', :id => 'teacher_number'
    else
      content_tag 'span',teacher_num, :class => 'color-white'
    end
  end

  #生成课程学生列表连接
  def course_student_link student_num
    if User.current.member_of_course?(@course) || User.current.admin?
      link_to "#{student_num}", students_course_path(@course), :class => 'color-white', :id => 'student_number'
    # elsif (User.current.logged? && @course.open_student == 1) || (User.current.member_of_course?(@course))
    #   link_to "#{student_num}", course_member_path(@course, :role => 'as'), :class => 'ml5 edu-cir-grey-q color-orange05', :id => "student_number"
    else
      content_tag 'span',student_num, :class => 'color-white'
    end
  end

  # 生成分班列表连接
  def course_group_link group_num
    if User.current.member_of_course?(@course) || User.current.admin?
      link_to "#{group_num}", students_course_path(@course), :class => 'color-white', :id => 'group_number'
    # elsif (User.current.logged? && @course.open_student == 1) || (User.current.member_of_course?(@course))
    #   link_to "#{group_num}", course_member_path(@course, :role => @course.course_groups.first.id), :class => 'ml5 edu-cir-grey-q color-orange03', :id => "group_number"
    else
      content_tag 'span',group_num, :class => 'color-white'
    end
  end

  # 班级结束天数
  def course_end_date course
    if course.end_date
      curr = Time.new
      ((Date.parse(course.end_date.to_s) - Date.parse(curr.to_s)).to_i)
    end
  end

  def course_poll_count
    Poll.where("polls_type = 'Course' and polls_group_id = #{@course.id} and polls_status in (2,3)").count
  end

  def course_feedback_count
    @course.journals_for_messages.where('m_parent_id IS NULL').count
  end

  #当前学期(2015春季学期)
  def current_time_and_term course
    str = ""
    term = cur_course_term
    if (course.time == course.end_time && course.term == course.end_term) || (course.end_term.nil? && course.end_time.nil?) || course.time > Time.now.year
      str = course.time.to_s + course.term.to_s
    elsif course.time == Time.now.year && set_term_value(cur_course_term) <= set_term_value(course.term)
      str = course.time.to_s + course.term.to_s
    elsif course.end_time < Time.now.year || (course.end_time == Time.now.year && set_term_value(cur_course_term) >= set_term_value(course.term))
      str = course.end_time.to_s + course.end_term.to_s
    else
      str = Time.now.year.to_s + cur_course_term.to_s
    end
    str
  end

  def set_term_value term
    val = 0
    if term == "春季学期"
      val = 1
    elsif term == "夏季学期"
      val = 2
    elsif term == "秋季学期"
      val = 3
    end
    val
  end

  #当前学期(2015春)
  def current_time_and_term_short course
    str = ""
    term = cur_course_term
    if (course.time == course.end_time && course.term == course.end_term) || (course.end_term.nil? && course.end_time.nil?) || course.time > Time.now.year
      str = course.time.to_s + course.term[0]
    elsif course.time == Time.now.year && set_term_value(cur_course_term) <= set_term_value(course.term)
      str = course.time.to_s + course.term[0]
    elsif course.end_time < Time.now.year || (course.end_time == Time.now.year && set_term_value(cur_course_term) >= set_term_value(course.term))
      str = course.end_time.to_s + course.end_term[0]
    else
      str = Time.now.year.to_s + cur_course_term[0]
    end
    str
  end

  # 返回学生数量,即roles表中定义的Reporter
  #def studentCount project
  # searchStudent(project).count
  # or
  # searchStudent(project).count
  # end

  # 判断用户是否是课程的管理员
  # add by nwb
  def is_course_manager?(user_id,course_id)
    @result = false
    @user_id = CourseInfo.find_by_course_id(course_id)
    if @user_id == user.id
      @result = true
    end
    return @result
  end

  # 返回课程设置界面
  def course_settings_tabs
    tabs = [{:name => 'info', :action => :edit_course, :partial => 'courses/edit', :label => :label_information_plural},
            {:name => 'members', :action => :manage_members, :partial => 'courses/settings/members', :label => :label_member_plural}
    ]
    tabs.select { |tab| User.current.allowed_to?(tab[:action], @course) }

  end

  #是否启动互评下拉框
  def is_evaluation_option
    type = []
    option1 = []
    option2 = []
    option1 << l(:lable_start_mutual_evaluation)
    option1 << 1
    option2 << l(:lable_close_mutual_evaluation)
    option2 << 2
    type << option1
    type << option2
  end

  # garble count 混淆数量
  # alias projectCountOrigin projectCount
  # def projectCount project    
  #   count = projectCountOrigin project
  #   garble count
  # end

  def proportion_option
    type = []
    i = 0
    while i <= 100
      option = []
      option << i.to_s + "%"
      option << i
      type << option
      i = i + 10
    end
    type
  end

  # 注意:此方法有问题,速度慢且结果不准
  # alias studentCountOrigin studentCount
  #def studentCount course
  # count = studentCountOrigin course
  #garble count
  # end

  #获取课程所有成员
  def course_all_member course
    course.members
  end
  # 学生人数计算
  # add by nwb
  def studentCount course
    course ? course.student.count.to_i : 0#course.student.count
  end

  # 课堂教师数
  def teacherCount course
    if course.try(:id) != 1309 || User.current.admin? || User.current.try(:id) == 15582
      count = Member.find_by_sql("SELECT count(*) as teacher_count FROM `member_roles` mr, users, `members` m where m.course_id=#{course.id}
                                  and m.user_id = users.id and users.status = 1 and m.id=mr.member_id and mr.role_id in ('3','7','9')").first.try(:teacher_count)
    else
      count = Member.find_by_sql("SELECT count(*) as teacher_count FROM `member_roles` mr, users, `members` m where m.course_id=#{course.id}
                                  and m.user_id = users.id and users.status = 1 and m.id=mr.member_id and (mr.role_id in ('3','7') or (users.id = #{User.current.id} and mr.role_id = 9))").first.try(:teacher_count)
    end
  end

  #课程成员数计算
  def memberCount course
    count = searchStudent(course).count + searchTeacherAndAssistant(course).count
    count.to_s
  end

  def eventToLanguageCourse event_type, course
    case event_type
      when "issue-note"
        l :label_issue
      when "issue"
        l :label_issue
      when "attachment"
        l :label_attachment
      when "news"
        l :label_notification
      else
        ""
    end
  end

  def garble count
    count = count.round( 1-count.to_s.size ).to_i
    return count.to_s if count.to_s.size.eql?(1)
    count.to_s << '+'
  end

  def searchTeacherAndAssistantNoManager course
    members = []
    course.members.includes(:user).each do |m|
      members << m  if m && m.user && m.user != course.teacher && m.user.has_teacher_role(course)
    end
    members
  end

  # =====================================================================================
  # return people list
  def searchTeacherAndAssistant project
    #searchPeopleByRoles(project, TeacherRoles)
    members = []
    project.members.includes(:user).each do |m|
      #members << m  if m && m.user && m.user.allowed_to?(:as_teacher,project)
      members << m  if m && m.user && m.user.has_teacher_role(project)
    end
    members
  end

  def TeacherAndAssistantCount course
    #students_count = course.student.count
    #number = course.members.count - students_count
    member_ids = course.members.includes(:user).blank? ? "(-1)" : "(" + course.members.includes(:user).map { |mem| mem.id}.join(",") + ")"
    role_ids = "(3, 7, 9)"
    number = MemberRole.where("member_id in #{member_ids} and role_id in #{role_ids}").count
    #number = (searchTeacherAndAssistant course).count
  end

  def search_student_in_group(project, course_group_id)
    #searchPeopleByRoles(project, StudentRoles)
    members = []
    project.members.each do |m|
      members << m  if m && m.user && m.user.allowed_to?(:as_student,project)
    end
    members
  end

  def searchStudent project
    #searchPeopleByRoles(project, StudentRoles)
    members = []
    project.members.each do |m|
      if m && m.user && m.user.allowed_to?(:as_student,project)
        members << m
      end
    end
    members
  end

  def groupCount course
    course.course_groups.count
  end

  def searchStudent_by_name  project, name
    #searchPeopleByRoles(project, StudentRoles)
    members = []
    project.members.each do |m|
      if m && m.user && m.user.allowed_to?(:as_student,project)
        username = m.user[:lastname].to_s + m.user[:firstname].to_s
        if(m.user[:login].to_s.include?(name) ||  m.user.user_extensions[:student_id].to_s.include?(name) || username.include?(name))
          members << m
        end
      end
    end
    members
  end
  def searchmember_by_name  members, name
    #searchPeopleByRoles(project, StudentRoles)
    mems = []
    if name != ""
      name = name.to_s.downcase
      members.each do |m|
        username = m.user[:lastname].to_s.downcase + m.user[:firstname].to_s.downcase
        if(m.user[:login].to_s.downcase.include?(name) ||  m.user.user_extensions[:student_id].to_s.downcase.include?(name) || username.include?(name))
          mems << m
        end
      end
    else
      mems = members
    end
    mems
  end
  def searchgroupmember_by_name  members, name, group
    #searchPeopleByRoles(project, StudentRoles)
    mems = []
    if name != ""
      members.each do |m|
        if m.course_group_id == group.id
          username = m.user[:lastname].to_s + m.user[:firstname].to_s
          if(m.user[:login].to_s.include?(name) ||  m.user.user_extensions[:student_id].to_s.include?(name) || username.include?(name))
            mems << m
          end
        end
      end
    else
      mems = members
    end
    mems
  end
  def searchgroupstudent_by_name(group, project, name)
    members = []
    group.members.each do |m|
      if m && m.user && m.user.allowed_to?(:as_student,project)
        username = m.user[:lastname].to_s + m.user[:firstname].to_s
        if(m.user[:login].to_s.include?(name) ||  m.user.user_extensions[:student_id].to_s.include?(name) || username.include?(name))
          members << m
        end
      end
    end
    members
  end
  def searchStudent_by_group  group, project
    #searchPeopleByRoles(project, StudentRoles)
    members = []
    group.members.each do |m|
      members << m  if m && m.user && m.user.allowed_to?(:as_student,project)
    end
    members
  end
  # =====================================================================================

  #def searchCountByRoles project, roles_id
  #  members = searchPeopleByRoles project, roles_id
  #  members.count
  #end

  #def searchPeopleByRoles project, roles_id
  #  members = []
  #  begin
  #    members = project.members.joins(:member_roles).where("member_roles.role_id IN (:role_id)", {:role_id => roles_id})
  #  rescue Exception => e
  #    logger.error "[CoursesHelper] ===> #{e}"
  #  end
  #  members
  #end

  def sort_courses(state)
    content = ''.html_safe
    case state
      when 0

        content << content_tag('li', link_to(l(:label_sort_by_active), courses_path(:courses_sort_type => '1')))
        content << content_tag('li', link_to(l(:label_sort_by_influence), courses_path(:courses_sort_type => '2')))
        content << content_tag('li', link_to(l(:label_sort_by_time), courses_path(:courses_sort_type => '0'), :class=>"selected"), :class=>"selected")
      when 1

        content << content_tag('li', link_to(l(:label_sort_by_active), courses_path(:courses_sort_type => '1'), :class=>"selected"), :class=>"selected")
        content << content_tag('li', link_to(l(:label_sort_by_influence), courses_path(:courses_sort_type => '2')))
        content << content_tag('li', link_to(l(:label_sort_by_time), courses_path(:courses_sort_type => '0')))
      when 2
        content << content_tag('li', link_to(l(:label_sort_by_active), courses_path(:courses_sort_type => '1')))
        content << content_tag('li', link_to(l(:label_sort_by_influence), courses_path(:courses_sort_type => '2'), :class=>"selected"), :class=>"selected")
        content << content_tag('li', link_to(l(:label_sort_by_time), courses_path(:courses_sort_type => '0')))
    end
    content = content_tag('ul', content)
    content_tag('div', content, :class => "tabs")
  end

  def render_course_hierarchy(courses)
    render_course_nested_lists(courses) do |course|
      s = link_to_course(course, {}, :class => "#{course.css_classes} #{User.current.member_of_course?(course) ? 'my-course' : nil}").html_safe
      s
    end
  end

  #useless
  #def searchMembersByRole project, role_id
  #  members = []
  #  begin
  #    members = project.members.joins(:member_roles).where("member_roles.role_id = :role_id", {:role_id => role_id })
  #  rescue Exception => e
  #    logger.error "[CoursesHelper] ===> #{e}"
  #  end
  #  members
  #end

  def sort_course(state,  school_id)
    content = ''.html_safe
    case state
      when 0
        content << content_tag('li', link_to(l(:label_sort_by_time), courses_path(:course_sort_type => '0'), :school_id => school_id, :class=>"selected"), :class=>"selected")
        content << content_tag('li', link_to(l(:label_sort_by_active), courses_path(:course_sort_type => '1', :school_id => school_id)))
        content << content_tag('li', link_to(l(:label_sort_by_activity), courses_path(:course_sort_type => '3', :school_id => school_id)))

      when 1
        content << content_tag('li', link_to(l(:label_sort_by_time), courses_path(:course_sort_type => '0', :school_id => school_id)))
        content << content_tag('li', link_to(l(:label_sort_by_active), courses_path(:course_sort_type => '1', :school_id => school_id), :class=>"selected"), :class=>"selected")
        content << content_tag('li', link_to(l(:label_sort_by_activity), courses_path(:course_sort_type => '3', :school_id => school_id)))

      when 2
        content << content_tag('li', link_to(l(:label_sort_by_time), courses_path(:course_sort_type => '0', :school_id => school_id)))
        content << content_tag('li', link_to(l(:label_sort_by_active), courses_path(:course_sort_type => '1', :school_id => school_id)))
        content << content_tag('li', link_to(l(:label_sort_by_activity), courses_path(:course_sort_type => '3', :school_id => school_id)))

      #gcm
      when 3
        content << content_tag('li', link_to(l(:label_sort_by_time), courses_path(:course_sort_type => '0', :school_id => school_id)))
        content << content_tag('li', link_to(l(:label_sort_by_active), courses_path(:course_sort_type => '1', :school_id => school_id)))
        content << content_tag('li', link_to(l(:label_sort_by_activity), courses_path(:course_sort_type => '3', :school_id => school_id), :class=>"selected"), :class=>"selected")
    end
    #gcmend

    content = content_tag('ul', content)
    content_tag('div', content, :class => "tabs")
  end

  def findCourseTime project
    str = ""
    begin
      @course = Course.find_by_extra(@project.identifier)
      date_format = l(:zh_date)[:formats][:default]
      if @course
        str = DateTime.parse(@course.setup_time.to_s).strftime("#{date_format}").to_s unless @course.setup_time.blank?
        str <<  '-' unless  @course.setup_time.blank?
        str <<  DateTime.parse(@course.endup_time.to_s).strftime("#{date_format}").to_s unless @course.endup_time.blank?
      end
    rescue Exception => e
      logger.error  "[CoursesHelper] ===> #{e}"
    end
    str
  end

  # added by meng
  # 课程time+term简写(2014.春/2014.秋)国际化输出
  def get_course_term course
    strterm = course.try(:term).to_s
    if !(User.current.language == 'zh'||User.current.language == '')
      strterm == '春季学期' ? strterm =  'spring term' : strterm =  'autumn term'
      str = ( course.try(:time).to_s << '.' << strterm )
      str[0..-6]
    else
      str = ( course.try(:time).to_s << '.' << strterm )
      str[0..-4]
    end
  end

  # added by meng
  # 课程term(春季学期/秋季学期)国际化输出
  def get_course_term_locales course
    str = course.try(:term).to_s
    if !(User.current.language == 'zh'||User.current.language == '')
      str == '春季学期' ? str =  ' ' + 'spring term' : str =  ' ' + 'autumn term'
    end
    return str
  end

  def members_to_user_ids members
    people = []
    members.each { |member|
      people << member.user_id
    }
    people
  end
  # 截至到2014-03-17 这个是最终的判断课程是否过期的方法
  def course_endTime_timeout? course
    end_time_str = course.try(:endup_time)
    begin
      cTime = Time.parse(end_time_str.to_s)
    rescue TypeError,ArgumentError
      cTime = Time.parse("3000-01-01")
    end
    now = Time.now

    now > cTime
  end

  def find_by_extra_from_project extra
    Course.find_by_extra(try(extra))
  end

  #判断指定用户是不是当前课程的老师
  def is_course_teacher (user,course)
    user.allowed_to?(:as_teacher,course)
  end

  #当前用户是不是指定课程的学生
  def is_cur_course_student course
    User.current.logged? && User.current.member_of_course?(course) && !(User.current.allowed_to?(:as_teacher,course))
  end
  #获取当前用户在指定作业下提交的作业的集合
  def cur_user_homework_for_bid bid
    bid.homeworks.where("user_id = ?",User.current)
  end

  #判断当前用户对指定作业是否已经评价过
  def has_evaluation? homework
    seem_count = homework.rates(:quality).where("rater_id = ?",User.current).count
    seem_count > 0
  end

  #获取指定作业的所有成员
  def users_for_homework homework
    homework.nil? ? [] : (homework.users + [homework.user])
  end

  #获取指定项目的得分
  def project_score project
    issue_count = project.issues.count
    issue_journal_count = project.issue_changes.count
    issue_score = issue_count * 0.2
    issue_journal_score = issue_journal_count * 0.1
    finall_issue_score = issue_score + issue_journal_score
    new_count = project.news.count
    new_score = new_count * 0.1
    finall_new_score = new_score
    document_count = project.documents.count
    file_score = document_count * 0.1
    finall_file_score = file_score
    changeset_count = project.changesets.count
    code_submit_score = changeset_count * 0.3
    finall_code_submit_score = code_submit_score
    board_message_count = 0
    project.boards.each do |board|
      board_message_count += board.messages_count
    end
    topic_score = board_message_count * 0.1
    #finall_topic_score = topic_score
    finall_project_score = finall_issue_score + finall_new_score + finall_file_score + finall_code_submit_score + topic_score
    format("%.2f",finall_project_score)
  end

  #获取指定作业的参与人员
  #返回结果:张三、李四、王五
  def homework_user_of_homework homework,is_teacher
    homework_users = ""
    homework.users.each do |user|
      homework_users = homework_users + (is_teacher ? (user.lastname + user.firstname) : user.login)
      if user != homework.users.last
        homework_users = homework_users + "、"
      end
    end
    return homework_users
  end

  def get_courses_by_tag(tag_name)
    Course.tagged_with(tag_name).order('updated_at desc')
  end

  # 获取动态列表名称
  def get_acts_list_type type
    case type
      when "common_homework"
        l(:label_common_homework_acts)
      when "shixun_homework"
        l(:label_shixun_homework_acts)
      when "graduation_topic"
        l(:label_graduation_topic_acts)
      when "graduation_task"
        l(:label_graduation_task_acts)
      when "news"
        l(:label_news_acts)
      when "attachment"
        l(:label_attachment_acts)
      when "message"
        l(:label_message_acts)
      when "journalsForMessage"
        l(:label_journalsForMessage_acts)
      when "poll"
        l(:label_poll_acts)
      when "group_homework"
        l(:label_group_homework_acts)
      when "exercise"
        l(:label_exercise_acts)
      when "JoinCourse"
        l(:label_joinCourse_acts)
      else
        l(:label_all_cats)
    end
  end

  #分班下拉框
  def course_group_option course_groups
    type = []
    option1 = []
    option1 << "选择分班"
    option1 << -1
    type << option1
    option2 = []
    option2 << "未分班"
    option2 << 0
    type << option2
    unless course_groups.nil?
      course_groups.each do |cg|
        option = []
        option << cg.name
        option << cg.id
        type << option
      end
    end
    type
  end

  #课程实践年份下拉框
  def course_time_option year
    type = []
    month = Time.now.month
    now_year = year.nil? ? Time.now.year : (Time.now.year <= year ? Time.now.year : year)
    year = month < 2 && now_year >=Time.now.year ? now_year - 1 : now_year
    for i in (year-3..year + 10)
      option = []
      option << i
      option << i
      type << option
    end
    type
  end

  #课程课时下拉框
  def course_term_option
    type = []
    option1 = []
    option1 << l(:label_spring)
    option1 << l(:label_spring)
    option2 = []
    option2 << l(:label_summer)
    option2 << l(:label_summer)
    option3 = []
    option3 << l(:label_autumn)
    option3 << l(:label_autumn)
    type << option1
    type << option2
    type << option3
    type
  end

  def cur_course_term
    month = Time.now.month
    if month >= 9 || month < 2
      term = "秋季学期"
    elsif (month >= 7 && Time.now.day >= 15) || month == 8
      term = "夏季学期"
    else
      term = "春季学期"
    end
    term
  end

  def course_in_current_or_next_term course
    is_current_term = false
    is_next_term = false
    year_now = Time.now.month < 2 ? Time.now.year - 1:Time.now.year
    if course.time == year_now && course.term == cur_course_term
      is_current_term = true
    end
    if cur_course_term == "秋季学期" && course.time == (year_now + 1) && course.term == "春季学期"
      is_next_term = true
    elsif cur_course_term == "春季学期" && course.time == year_now && course.term == "夏季学期"
      is_next_term = true
    elsif cur_course_term == "夏季学期" && course.time == year_now && course.term == "秋季学期"
      is_next_term = true
    end
    is_current_term || is_next_term
  end

  #课程大纲下拉框
  def syllabus_option
    type = []
    option1 = []
    option1 << "请选择课程"
    option1 << 0
    type << option1
    Syllabus.all.each do |syllabus|
      option = []
      option << syllabus.title
      option << syllabus.id
      type << option
    end
    type
  end

  #获取课程动态
  def get_course_activity courses, activities
    @course_ids=activities.keys()
    days = Setting.activity_days_default.to_i
    #原来课程动态计算当期时间前(一年+一月)的动态
    # date_to ||= Date.today + 1
    # #date_from = date_to - days-1.years

    date_from = @course.created_at.to_date-days
    #file_count
    Attachment.where(container_id: @course_ids, container_type: Course).where("created_on>?", date_from).each do |attachment|
      if attachment.is_public? || User.current.member_of_course?(@course) || User.current.admin?
        activities[attachment.container_id]+=1
      else
        activities[attachment.container_id]
      end
    end

    #message_count
    Board.where(course_id: @course_ids).each do |board|
      countmessage = 0
      # 课程人员退出课程后,之前在讨论区回帖不计入课程动态统计
      board.messages.where("updated_on>?", date_from).each do |message|
        if message.author.member_of_course?(@course)
          countmessage+=1
        end
      end
      activities[board.course_id]+=countmessage
    end

    #news
    News.where(course_id: @course_ids).where("created_on>?",date_from).each do |news|
      if news.author.member_of_course?(@course)
        activities[news.course_id]+=1
      end
    end

    #homework_count
    # HomeworkForCourse.where(course_id: @course_ids).each do |homework|
    #   countbid=0
    #   #  @bid_ids<<homework.bid_id
    #   Bid.where(id: homework.bid_id).where("created_on>?",date_from).each do |bid|
    #     countbid+=1
    #   end
    #   activities[homework.course_id]+=countbid
    # end

    #poll_count
    # 动态目前只统计发布的问卷,关闭的问卷不在动态内显示
    # Poll.where(polls_group_id: @course_ids, polls_type: Course, polls_status: 2||3).where("published_at>?",date_from).each do |poll|
    Poll.where(polls_group_id: @course_ids, polls_type: Course, polls_status: 2||3).where("published_at>?",date_from).each do |poll|
      activities[poll.polls_group_id]+=1
    end
    #end


    # 动态数 + 1 ( 某某创建了该课程 )
    activities.each_pair { |key, value| activities[key] = value + 1 }
    return activities
  end

  #获取某个课程的动态数
  def course_activity_count course
    course_activity_count=Hash.new
    course_activity_count[course.id]=0
    count = get_course_activity([course],course_activity_count)[course.id]
    count.nil? ? 0 : count
  end

  #重启、关闭课程按钮
  def set_course_time course
    # id = "finish_course_#{course.id}"
    # linkPath = course_endTime_timeout?(course) ? restartcourse_course_path(course) :  finishcourse_course_path(course, format: :js)
    # desc = course_endTime_timeout?(course) ? l(:label_course_reload) :  l(:label_course_closed)
    # link_to "<span class='pr_close'></span>#{desc}".html_safe, linkPath, :remote => true, :method => :post, :id => id, :confirm => l(:label_course_closed_tips, :desc => desc), :class => "pr_join_a"
  end

  #加入课程、退出课程按钮
  def join_in_course_header(course, user, options=[])
    if user.logged?
      joined = course.members.includes(:user).map{|member| member.user_id}.include? user.id
      text = joined ? l(:label_course_exit_student) : l(:label_course_join_student)
      url = joined ? join_path(:object_id => course.id) : join_private_courses_courses_path()
      method = joined ? 'delete' : 'post'
      if joined
        link = link_to(text, url, :remote => true, :method => method, :class => "joinclass", :id => "#{course.id}", :confirm => l(:text_are_you_sure_out))
      else
        link = link_to(text, url, :remote => true, :method => method, :id => "#{course.id}", :class => "joinclass")
      end
    else
      if User.current.logged?
        link = "<a href='javascript:void(0)' class='joinclass'>#{l(:label_course_join_student)}</a>"
      else
        link = link_to(l(:label_course_join_student), signin_url_without_domain, :class => "joinclass")
      end
    end
    link.html_safe
  end


  def zh_course_role role
    if role == "TeachingAsistant"
      result = l(:label_TA)
    elsif role == "Teacher"
      result = l(:label_teacher)
    elsif role == "Student"
      result = l(:label_student)
    elsif role == "Manager"
      result = l(:field_admin)
    elsif role.include?("TeachingAsistant") && role.include?("Student")
      result = l(:label_TA) + " " + l(:label_student)
    elsif role.include?("Teacher") && role.include?("Student")
      result = l(:label_teacher) + " " + l(:label_student)
    end
    result
  end

  #生成课程相关动态的链接
  def course_activity_link activity
    # activity = CourseActivity.first
    title = ""
    url = ""
    if activity.course_act
      case activity.course_act_type
        when "Course"
          title = activity.course_act.name
          url = course_path activity.course
        when "HomeworkCommon"
          title = "作业&nbsp;" + activity.course_act.name
          url = student_work_index_path(:homework => activity.course_act.id)
        when "News"
          title = "通知公告&nbsp;" + activity.course_act.title
          url = course_news_index_path(activity.course)
        when "Attachment"
          title = "课件&nbsp;" + activity.course_act.filename
          url = course_files_path(activity.course)
        when "Message"
          title = "课程讨论区&nbsp;" + activity.course_act.subject
          url = course_boards_path(activity.course,:parent_id => activity.course_act.parent_id ? activity.course_act.parent_id : activity.course_act.id, :topic_id => activity.course_act.id)
        when "JournalsForMessage"
          title = "留言&nbsp;" + activity.course_act.notes
          url = course_feedback_path(activity.course)
        when "Poll"
          title = "问卷&nbsp;" + activity.course_act.polls_name
          url = poll_path(activity.course_act_id)
      end
    end
    link_to title.gsub(/<(?!img)[^>]*>/,'').html_safe, url, :class => "problem_tit c_dblue fl fb"
  end

  #课程动态的描述
  def course_activity_desc activity
    desc = ""
    if activity.course_act
      case activity.course_act_type
        when "Course"
          desc = ""
        when "HomeworkCommon"
          desc = activity.course_act.description
        when "News"
          desc = activity.course_act.description
        when "Attachment"
          desc = ""
        when "Message"
          desc = activity.course_act.content
        when "JournalsForMessage"
          desc = ""
        when "Poll"
          desc = activity.course_act.polls_description
      end
    end
    desc.html_safe
  end

  # 学生按作业总分排序,取前6个
  def hero_homework_score(course, score_sort_by)
    sql_select = "SELECT members.*,(
          SELECT SUM(work_score)
          FROM student_works,homework_commons
          WHERE student_works.homework_common_id = homework_commons.id
          AND homework_commons.course_id = #{course.id}
          AND student_works.user_id = members.user_id
        ) AS score
        FROM members
        JOIN students_for_courses
        ON students_for_courses.student_id = members.user_id AND students_for_courses.course_id = members.course_id
        WHERE members.course_id = #{course.id} ORDER BY score #{score_sort_by} limit 6"
    homework_scores = Member.find_by_sql(sql_select)
  end

  def contributor_course_scor(course_id)
    ccs = CourseContributorScore.find_by_sql("SELECT ccs.*, (message_num*2 + message_reply_num + news_reply_num + news_num +
         resource_num*5 + journal_num + homework_journal_num ) as con_score FROM `course_contributor_scores` ccs JOIN students_for_courses sfs
        ON sfs.student_id = ccs.user_id AND sfs.course_id = ccs.course_id where ccs.course_id = #{course_id} order by
        con_score desc limit 6;")
  end

  #用户在该课程是否具有某个角色
  def get_user_member_roles_course course, user, role
    members = course.members.where("user_id = #{user.id}")
    result = false
    unless members.blank?
      m_roles = MemberRole.where("member_id = #{members.first.id} and role_id = #{role}")
    end
    result = !m_roles.blank?
    result
  end

  #获取该班级下已关联项目的分组作业
  def select_group_homeworks course
    student_work_pros = course.student_work_projects.where("project_id != -1 && project_id != 0")
    homeworks = @course.homework_commons.where(:id => student_work_pros.map(&:homework_common_id))
  end
end