课程动态 api改版

This commit is contained in:
lizanle 2015-06-30 15:17:22 +08:00
parent ddb705b658
commit 416dee2d30
5 changed files with 85 additions and 83 deletions

View File

@ -38,30 +38,6 @@ module Mobile
end
end
obj
elsif field == :homework_submit_num
obj = nil
c[:dynamics].each do |d|
if d[:type] == 4
obj = d[:submit_count]
end
end
obj
elsif field == :homework_submit_students
obj = nil
c[:dynamics].each do |d|
if d[:type] == 4
obj = d[:studentlist]
end
end
obj
elsif field == :homework_status
obj = nil
c[:dynamics].each do |d|
if d[:type] == 4
obj = d[:homework_status]
end
end
obj
else
c[field] if (c.is_a?(Hash) && c.key?(field))
end
@ -82,11 +58,8 @@ module Mobile
course_dynamic_expose :document_count
course_dynamic_expose :topic_count
course_dynamic_expose :homework_count
course_dynamic_expose :homework_submit_students
course_dynamic_expose :homework_submit_num
course_dynamic_expose :homework_status
#在dynamics里解析出四种动态
expose :document,using:Mobile::Entities::Attachment do |f,opt|
expose :documents,using:Mobile::Entities::Attachment do |f,opt|
obj = nil
f[:dynamics].each do |d|
if d[:type] == 3
@ -95,20 +68,20 @@ module Mobile
end
obj
end
expose :topic,using:Mobile::Entities::Message do |f,opt|
expose :topics,using:Mobile::Entities::Message do |f,opt|
obj = nil
f[:dynamics].each do |d|
if d[:type] == 2
obj = d[:topic]
obj = d[:topics]
end
end
obj
end
expose :homework,using:Mobile::Entities::Homework do |f,opt|
expose :homeworks,using:Mobile::Entities::Homework do |f,opt|
obj = nil
f[:dynamics].each do |d|
if d[:type] == 4
obj = d[:homework]
obj = d[:homeworks]
end
end
obj
@ -118,7 +91,7 @@ module Mobile
obj = nil
f[:dynamics].each do |d|
if d[:type] == 1
obj = d
obj = d[:news]
end
end
obj

View File

@ -3,6 +3,8 @@ module Mobile
module Entities
class Homework < Grape::Entity
include Redmine::I18n
include ApplicationHelper
include ApiHelper
def self.homework_expose(field)
expose field do |f,opt|
if f.is_a?(Hash) && f.key?(field)
@ -20,6 +22,10 @@ module Mobile
f.send(:name)
when :homework_notsubmit_num
f.course.members.count - f.student_works.count
when :homework_submit_num
f.student_works.count
when :homework_status
get_homework_status f
end
end
end
@ -66,11 +72,13 @@ module Mobile
f[:homework_for_anonymous_comments] if f.is_a?(Hash) && f.key?(:homework_for_anonymous_comments)
end
homework_expose :homework_submit_num
homework_expose :homework_notsubmit_num
expose :submit_student_list ,using:Mobile::Entities::User do |f,opt|
f[:studentlist]
expose :submit_student_list ,using: Mobile::Entities::User do |f,opt|
get_submit_sutdent_list f
end
homework_expose :homework_status
end
end

View File

@ -6,6 +6,12 @@ module Mobile
expose field do |f,opt|
if f.is_a?(Hash) && f.key?(field)
f[field]
elsif f.is_a?(::News)
if field == :created_on
format_time(f.send(field)) if f.respond_to?(field)
else
f.send(field) if f.respond_to?(field)
end
elsif f.is_a?(Hash) && !f.key?(field)
n = f[:news]
comments = f[:comments]
@ -26,8 +32,8 @@ module Mobile
news_expose :title
expose :author,using: Mobile::Entities::User do |f, opt|
n = f[:author]
#n.author if n.respond_to?(:author)
#n = f[:author]
f.author if f.respond_to?(:author)
end
#作者id
news_expose :author_id

View File

@ -1,3 +1,4 @@
# encoding: utf-8
module ApiHelper
#获取用户的工作单位
def get_user_work_unit user
@ -64,4 +65,45 @@ module ApiHelper
def get_user_language user
(user.language.nil? || user.language == "") ? 'zh':user.language
end
# 获取课程作业的状态
def get_homework_status homework
homework_status = ""
if !homework.nil?
if homework.homework_type == 1 && homework.homework_detail_manual
case homework.homework_detail_manual.comment_status
when 1
homework_status = show_homework_deadline homework
when 2
homework_status = "正在匿评中"
when 3
homework_status = "匿评已结束"
end
elsif homework.homework_type == 0
homework_status = "未启用匿评"
elsif homework.homework_type == 2
homework_status = "编程作业"
else
end
end
homework_status
end
#获取
def get_submit_sutdent_list homework
studentlist = []
if homework.is_a?(Hash) && homework.key?(:studentlist)
studentlist = homework[:studentlist]
else
homework.student_works.order("created_at desc").page(1).per(6).each do |work|
studentlist << work.user
end
end
studentlist
end
#计算作业的截止日期,剩余日期
def show_homework_deadline homework
"距作业截止还有" << (Date.parse(Time.now.to_s) - Date.parse(homework.end_time.to_s)).to_i.to_s << ""
end
end

View File

@ -120,7 +120,7 @@ class CoursesService
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)
scope = @course ? @course.news.order("news.created_on desc").course_visible(current_user) : News.order("news.created_on desc").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, :author=>n.author, :description => n.description,:created_on => format_time(n.created_on),:comments_count => n.comments_count}
@ -330,7 +330,7 @@ class CoursesService
def homework_list params,current_user
course = Course.find(params[:id])
if course.is_public != 0 || current_user.member_of_course?(course)
bids = course.homework_commons.page(1).per(3).order('created_at DESC')
bids = course.homework_commons.page(1).per(20).order('created_at DESC')
bids = bids.like(params[:name]) if params[:name].present?
homeworks = []
bids.each do |bid|
@ -665,58 +665,35 @@ class CoursesService
course = mp.course
latest_course_dynamics = []
dynamics_count = 0
# 课程学霸 学生总分数排名靠前的5个人
# 课程通知
latest_news = course.news.order("created_on desc").first
unless latest_news.nil?
latest_course_dynamics << {:type => 1, :time => latest_news.created_on,:count=>course.news.count,
:news => latest_news}
latest_news = course.news.page(1).per(2).order("created_on desc")
unless latest_news.first.nil?
latest_course_dynamics << {:type => 1, :time => latest_news.first.created_on,:count=>course.news.count,
:news => latest_news.all}
dynamics_count += 1
end
# 课程讨论区
latest_message = course.boards.first.topics[0]
unless latest_message.nil?
latest_course_dynamics << {:type => 2, :time => latest_message.created_on, :count =>course.boards.nil? ? 0 : course.boards.first.topics.count,
:topic => latest_message}
latest_message = course.boards.first.topics.page(1).per(2)
unless latest_message.first.nil?
latest_course_dynamics << {:type => 2, :time => latest_message.first.created_on, :count =>course.boards.nil? ? 0 : course.boards.first.topics.count,
:topics => latest_message.all}
dynamics_count += 1
end
# 课程资源
latest_attachment = course.attachments.order("created_on desc").first
unless latest_attachment.nil?
latest_course_dynamics << {:type => 3, :time => latest_attachment.created_on,:count =>course.attachments.count , :documents=>latest_attachment}
latest_attachment = course.attachments.order("created_on desc").page(1).per(2)
unless latest_attachment.first.nil?
latest_course_dynamics << {:type => 3, :time => latest_attachment.first.created_on,:count =>course.attachments.count , :documents=>latest_attachment}
dynamics_count += 1
end
#课程作业 已经交的学生列表暂定显示6人未交的学生列表作业的状态
homework = course.homework_commons.order('created_at desc').first
homework_status = "";
# 判断作业所处的状态,如果是刚发布,就获取剩余时间
#如果是匿评状态,显示正在匿评
#如果是匿评结束,显示匿评结束
#获取作业提交的前6个人不足6个显示所有
studentlist = []
if !homework.nil?
if homework.homework_type == 1 && homework.homework_detail_manual
case homework.homework_detail_manual.comment_status
when 1
homework_status = show_homework_deadline homework
when 2
homework_status = "正在匿评中"
when 3
homework_status = "匿评已结束"
end
elsif homework.homework_type == 0
homework_status = "未启用匿评"
elsif homework.homework_type == 2
homework_status = "编程作业"
else
end
# 获取提交作业的前六个学生的名字 和 头像路径
homework.student_works.order("created_at desc").page(1).per(6).each do |work|
studentlist << {:image_url=> url_to_avatar(work.user),:user_name=>work.user.realname}
end
latest_course_dynamics << {:type => 4, :time => homework.updated_at, :count=>course.homework_commons.count,:submit_count => homework.student_works.count , :homework => homework, :homework_status => homework_status, :studentlist => studentlist}
homeworks = course.homework_commons.page(1).per(2).order('created_at desc')
unless homeworks.first.nil?
latest_course_dynamics << {:type => 4, :time => homeworks.first.updated_at, :count=>course.homework_commons.count , :homeworks => homeworks}
dynamics_count += 1
end
latest_course_dynamics.sort! { |order, newer| newer[:time] <=> order[:time] }
@ -730,9 +707,5 @@ class CoursesService
result
end
#计算作业的截止日期,剩余日期
def show_homework_deadline homework
"距作业截止还有" << (Date.parse(Time.now.to_s) - Date.parse(homework.end_time.to_s)).to_i.to_s << ""
end
end
end