115 lines
3.5 KiB
Ruby
115 lines
3.5 KiB
Ruby
module Mobile
|
|
module Entities
|
|
class Course < Grape::Entity
|
|
include Redmine::I18n
|
|
include ApplicationHelper
|
|
include ApiHelper
|
|
def self.course_expose(field)
|
|
expose field do |f,opt|
|
|
c = nil
|
|
if f.is_a? ::Course
|
|
c = f
|
|
else
|
|
c = f[:course]
|
|
end
|
|
if f.is_a?(Hash) && f.key?(field)
|
|
f[field] if f.is_a?(Hash) && f.key?(field)
|
|
#f.img_url if f.respond_to?(:img_url)
|
|
elsif field == :created_at || field == :updated_at
|
|
(format_time(c[field]) if (c.is_a?(Hash) && c.key?(field))) || (format_time(c.send(field)) if c.respond_to?(field))
|
|
elsif field == :member_count
|
|
::Course===c ? c.members.count : 0
|
|
else
|
|
(c[field] if (c.is_a?(Hash) && c.key?(field))) || (c.send(field) if c.respond_to?(field))
|
|
end
|
|
end
|
|
end
|
|
course_expose :img_url
|
|
course_expose :attachmenttype
|
|
course_expose :class_period
|
|
course_expose :code
|
|
course_expose :created_at
|
|
course_expose :description
|
|
course_expose :endup_time
|
|
course_expose :extra
|
|
course_expose :id
|
|
course_expose :inherit_members
|
|
course_expose :is_public
|
|
course_expose :lft
|
|
course_expose :location
|
|
course_expose :name
|
|
course_expose :open_student
|
|
# course_expose :password
|
|
course_expose :rgt
|
|
course_expose :school_id
|
|
course_expose :setup_time
|
|
course_expose :state
|
|
course_expose :status
|
|
course_expose :string
|
|
course_expose :tea_id
|
|
course_expose :term
|
|
course_expose :time
|
|
course_expose :invite_code
|
|
course_expose :qrcode
|
|
course_expose :updated_at
|
|
course_expose :course_student_num
|
|
course_expose :member_count
|
|
course_expose :groupnum
|
|
expose :can_setting, if: lambda { |instance, options| options[:user] } do |instance, options|
|
|
current_user = options[:user]
|
|
can_setting = false
|
|
|
|
if instance[:course]
|
|
course = instance[:course]
|
|
else
|
|
course = instance
|
|
end
|
|
|
|
member = course.members.where("user_id=#{current_user.id} and course_id=#{course.id}")[0]
|
|
role_ids = member.role_ids if member
|
|
|
|
if role_ids && (role_ids.include?(7) || role_ids.include?(9) )
|
|
can_setting = true
|
|
end
|
|
|
|
if course.tea_id == current_user.id
|
|
can_setting = true
|
|
end
|
|
can_setting
|
|
end
|
|
expose :is_member, if: lambda { |instance, options| options[:user] } do |instance, options|
|
|
current_user = options[:user]
|
|
if instance[:course]
|
|
course = instance[:course]
|
|
else
|
|
course = instance
|
|
end
|
|
current_user.member_of_course?(course)
|
|
end
|
|
expose :teacher, using: Mobile::Entities::User do |c, opt|
|
|
if c.is_a? ::Course
|
|
c.teacher
|
|
else
|
|
c[:course].teacher
|
|
end
|
|
end
|
|
expose :my_homework,using: Mobile::Entities::Homework do |f, opt|
|
|
f[:my_homework] if f.is_a?(Hash) && f.key?(:my_homework)
|
|
end
|
|
expose :is_creator, if: lambda { |instance, options| options[:user] } do |instance, options|
|
|
if instance[:course]
|
|
course = instance[:course]
|
|
else
|
|
course = instance
|
|
end
|
|
current_user = options[:user]
|
|
course.tea_id == current_user.id
|
|
end
|
|
course_expose :current_user_is_member
|
|
course_expose :current_user_is_teacher
|
|
course_expose :work_unit
|
|
course_expose :syllabus_title
|
|
end
|
|
end
|
|
end
|