diff --git a/app/api/mobile/apis/courses.rb b/app/api/mobile/apis/courses.rb index 7dbfaffb0..8b167980d 100644 --- a/app/api/mobile/apis/courses.rb +++ b/app/api/mobile/apis/courses.rb @@ -8,10 +8,11 @@ module Mobile optional :school_id, type: Integer, desc: '传入学校id,返回该学校课程列表' requires :per_page_count, type: Integer, desc: '每页总数' requires :page, type: Integer, desc: '当前页码' + optional :token, type: String end get do cs = CoursesService.new - courses = cs.course_list(params) + courses = cs.course_list(params,current_user.nil? ? User.find(2):current_user) present :data, courses, with: Mobile::Entities::Course present :status, 0 end @@ -130,10 +131,11 @@ module Mobile desc "搜索课程" params do requires :name, type: String, desc: "课程名" + optional :token, type: String end get 'search' do cs = CoursesService.new - courses = cs.search_course(params) + courses = cs.search_course(params,current_user.nil? ? User.find(2):current_user) present :data, courses, with: Mobile::Entities::Course present :status, 0 end @@ -165,13 +167,15 @@ module Mobile desc "返回单个课程" params do requires :id, type: Integer + optional :token, type: String end route_param :id do get do cs = CoursesService.new course = cs.show_course(params,(current_user.nil? ? User.find(2):current_user)) #course = Course.find(params[:id]) - {status: 0, data: course} + present :data, course, with: Mobile::Entities::Course + present :status, 0 end end diff --git a/app/api/mobile/apis/users.rb b/app/api/mobile/apis/users.rb index d780b9db4..9a5307be6 100644 --- a/app/api/mobile/apis/users.rb +++ b/app/api/mobile/apis/users.rb @@ -82,6 +82,7 @@ module Mobile desc "用户搜索" params do requires :name, type: String, desc: '用户名关键字' + requires :search_by, type: String,desc: '搜索依据:0 昵称,1 用户名,2 邮箱' end get 'search/search_user' do us = UsersService.new diff --git a/app/api/mobile/entities/course.rb b/app/api/mobile/entities/course.rb index ec00579ce..512aab69a 100644 --- a/app/api/mobile/entities/course.rb +++ b/app/api/mobile/entities/course.rb @@ -1,6 +1,7 @@ module Mobile module Entities class Course < Grape::Entity + include Redmine::I18n def self.course_expose(field) expose field do |f,opt| c = nil @@ -9,9 +10,11 @@ module Mobile else c = f[:course] end - if field == :img_url + 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)) else (c[field] if (c.is_a?(Hash) && c.key?(field))) || (c.send(field) if c.respond_to?(field)) end @@ -53,6 +56,8 @@ module Mobile expose :my_homework,using: Mobile::Entities::HomeworkAttach do |f, opt| f[:my_homework] if f.is_a?(Hash) && f.key?(:my_homework) end + course_expose :current_user_is_member + course_expose :current_user_is_teacher end end end diff --git a/app/api/mobile/entities/course_dynamic.rb b/app/api/mobile/entities/course_dynamic.rb index 11f8c2682..5e22e3df7 100644 --- a/app/api/mobile/entities/course_dynamic.rb +++ b/app/api/mobile/entities/course_dynamic.rb @@ -6,12 +6,11 @@ module Mobile c[field] if (c.is_a?(Hash) && c.key?(field)) end end - + course_dynamic_expose :type + course_dynamic_expose :count course_dynamic_expose :course_name - course_dynamic_expose :need_anonymous_comments_count - course_dynamic_expose :student_commit_number - course_dynamic_expose :news_count - course_dynamic_expose :message_count + course_dynamic_expose :course_id + course_dynamic_expose :course_img_url end end end \ No newline at end of file diff --git a/app/api/mobile/entities/homework.rb b/app/api/mobile/entities/homework.rb index 9be9bc53e..5b996c1af 100644 --- a/app/api/mobile/entities/homework.rb +++ b/app/api/mobile/entities/homework.rb @@ -18,8 +18,14 @@ module Mobile homework_expose :id #课程名称 homework_expose :course_name - #课程老师 - homework_expose :course_teacher + #作业发布者 + expose :author,using: Mobile::Entities::User do |f, opt| + f[:author] + end + + #作业发布者真名 + homework_expose :author_real_name + #作业次数 homework_expose :homework_times #作业名称 diff --git a/app/api/mobile/entities/homework_jours.rb b/app/api/mobile/entities/homework_jours.rb index 63c6997fd..0b9defe67 100644 --- a/app/api/mobile/entities/homework_jours.rb +++ b/app/api/mobile/entities/homework_jours.rb @@ -6,7 +6,11 @@ module Mobile def self.homework_jours_expose(field) expose field do |f,opt| if f.is_a?(Hash) && f.key?(field) - f[field] + if field == :created_at + format_time(f[field]) + else + f[field] + end elsif f.is_a?(::SeemsRateableRates) end diff --git a/app/api/mobile/entities/news.rb b/app/api/mobile/entities/news.rb index 406db59e4..f189771e3 100644 --- a/app/api/mobile/entities/news.rb +++ b/app/api/mobile/entities/news.rb @@ -1,6 +1,7 @@ module Mobile module Entities class News < Grape::Entity + include Redmine::I18n def self.news_expose(field) expose field do |f,opt| if f.is_a?(Hash) && f.key?(field) @@ -9,13 +10,18 @@ module Mobile n = f[:news] comments = f[:comments] if n.is_a?(::News) - n.send(field) if n.respond_to?(field) + if field == :created_on + format_time(n.send(field)) if n.respond_to?(field) + else + n.send(field) if n.respond_to?(field) + end + end end end end - + news_expose :id #新闻标题 news_expose :title diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index 3cf69c777..ac0e4a7b7 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -99,7 +99,8 @@ class CoursesController < ApplicationController #更新课程信息 def update cs = CoursesService.new - @course = cs.edit_course params,@course,User.current + c = cs.edit_course params,@course,User.current + @course = c[:course] if @course.errors.full_messages.count <= 0 respond_to do |format| format.html { @@ -956,10 +957,34 @@ class CoursesController < ApplicationController else render_403 end - end - + #根据已有课程复制课程 + #param id:已有课程ID + def copy_course + if @course + @new_course = Course.new @course.attributes + @new_course.tea_id = User.current.id + @new_course.created_at = DateTime.now + @new_course.updated_at = DateTime.now + @new_course.endup_time = nil + if @new_course.save + r = Role.givable.find_by_id(Setting.new_project_user_role_id.to_i) || Role.givable.first + m = Member.new(:user => User.current, :roles => [r]) + m.project_id = -1 + course = CourseInfos.new(:user_id => User.current.id, :course_id => @new_course.id) + #user_grades = UserGrade.create(:user_id => User.current.id, :course_id => @course.id) + if @new_course.is_public == 1 + course_status = CourseStatus.create(:course_id => @new_course.id, :watchers_count => 0, :changesets_count => 0, :grade => 0, :course_type => 1) + end + @new_course.members << m + @new_course.course_infos << course + redirect_to settings_course_url @new_course + end + else + render_404 + end + end private diff --git a/app/helpers/homework_attach_helper.rb b/app/helpers/homework_attach_helper.rb index 0b98283ff..72d381b28 100644 --- a/app/helpers/homework_attach_helper.rb +++ b/app/helpers/homework_attach_helper.rb @@ -140,8 +140,6 @@ module HomeworkAttachHelper ####################################################### def get_student_not_batch_homework_list bid,user HomeworkAttach.find_by_sql("SELECT * FROM(SELECT homework_attaches.*, - (SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND is_teacher_score = 1) AS t_score, - (SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND is_teacher_score = 0) AS s_score, (SELECT stars FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND rater_id = #{user.id} AND is_teacher_score = 0) AS m_score FROM homework_attaches INNER JOIN homework_evaluations ON homework_evaluations.homework_attach_id = homework_attaches.id diff --git a/app/helpers/welcome_helper.rb b/app/helpers/welcome_helper.rb index d101fd36c..eba3c0b3c 100644 --- a/app/helpers/welcome_helper.rb +++ b/app/helpers/welcome_helper.rb @@ -314,28 +314,28 @@ module WelcomeHelper str = ' '.html_safe case event.event_type when 'news' - str << content_tag("span", l(:field_user_active_published)) << + str << content_tag("span", l('user.active.published')) << content_tag("span", find_all_event_type(event)) << ': '.html_safe << link_to(strip_tags(event.event_description).gsub(/ /,''), event.event_url, {:title => event.event_description}) when 'issue', 'message' , 'bid' , 'wiki-page' , 'document' - str << content_tag("span", l(:field_user_active_published)) << + str << content_tag("span", l('user.active.published')) << content_tag("span", find_all_event_type(event)) << ': '.html_safe << link_to(event.event_title, event.event_url, {:title => event.event_title}) when 'reply' ,'Reply', 'Memo' - str << content_tag("span", l(:field_user_active_published)) << + str << content_tag("span", l('user.active.published')) << content_tag("span", find_all_event_type(event)) << ': '.html_safe << link_to(strip_tags(event.event_description).gsub(/ /,''), event.event_url, {:title => event.event_description}) when 'attachment' - str << content_tag('span', l(:field_user_active_uploaded)) << + str << content_tag('span', l('user.active.uploaded')) << content_tag('span', find_all_event_type(event)) << ': '.html_safe << link_to(event.event_title, event.event_url, {:title => event.event_title}) << link_to((' ['.html_safe+l(:label_downloads_list).to_s << ']'), project_files_path(event.container.project), :class => "attachments_list_color") else - str << content_tag("span", l(:field_user_active_updated)) << + str << content_tag("span", l('user.active.updated')) << content_tag("span", find_all_event_type(event)) << ': '.html_safe << link_to(event.event_title, event.event_url, {:title => event.event_title}) end diff --git a/app/services/courses_service.rb b/app/services/courses_service.rb index f4201774a..1f5ca7894 100644 --- a/app/services/courses_service.rb +++ b/app/services/courses_service.rb @@ -3,11 +3,11 @@ class CoursesService include CoursesHelper include HomeworkAttachHelper include ApiHelper - #TODO:尚未整合权限系统 + #参数school_id为0或不传时返回所有课程,否则返回对应学校的课程 #参数per_page_count分页功能,每页显示的课程数 #参数page分页功能,当前页码 - def course_list params + def course_list params,current_user @school_id = params[:school_id] per_page_option = params[:per_page_count] || 10 page_no = params[:page] || 1 @@ -25,13 +25,13 @@ class CoursesService @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)} + 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 + def search_course params,current_user courses_all = Course.all_course name = params[:name] if name.blank? @@ -44,6 +44,11 @@ class CoursesService @courses_all = @courses; 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 #获取头像 @@ -117,7 +122,7 @@ class CoursesService scope = @course ? @course.news.course_visible(current_user) : News.course_visible(current_user) news = [] scope.each do |n| - news << {: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} + 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 @@ -158,7 +163,7 @@ class CoursesService unless (course.is_public == 1 || currnet_user.member_of_course?(@course)|| currnet_user.admin?) raise '403' end - course + {: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 #创建课程 @@ -206,7 +211,7 @@ class CoursesService @course.members << m @course.course_infos << course end - @course + {: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 #验证编辑课程的权限 @@ -243,7 +248,7 @@ class CoursesService course_status = CourseStatus.create(:course_id => course.id, :grade => 0) end end - course + {: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 #退出课程 @@ -340,12 +345,18 @@ class CoursesService end news_count = course.news.count message_count = course.journals_for_messages.count - {:course_name => course.name,:need_anonymous_comments_count=>need_anonymous_comments_count,:student_commit_number=>student_commit_number,:news_count=> news_count,:message_count=>message_count} + result = [] + result << {:course_name => course.name,:course_id => course.id,:course_img_url => url_to_avatar(course),:type => 1,:count => message_count} + result << {:course_name => course.name,:course_id => course.id,:course_img_url => url_to_avatar(course),:type => 2,:count => need_anonymous_comments_count} + result << {:course_name => course.name,:course_id => course.id,:course_img_url => url_to_avatar(course),:type => 3,:count => student_commit_number} + result << {:course_name => course.name,:course_id => course.id,:course_img_url => url_to_avatar(course),:type => 4,:count => news_count} + #{:course_name => course.name,:need_anonymous_comments_count=>need_anonymous_comments_count,:student_commit_number=>student_commit_number,:news_count=> news_count,:message_count=>message_count} + result end private def show_homework_info course,bid,current_user,is_course_teacher - author = bid.author.lastname + bid.author.firstname + author_real_name = bid.author.lastname + bid.author.firstname many_times = course.homeworks.index(bid) + 1 name = bid.name homework_count = bid.homeworks.count #已提交的作业数量 @@ -358,7 +369,7 @@ class CoursesService end #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, + {:course_name => course.name,: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} end diff --git a/app/services/homework_service.rb b/app/services/homework_service.rb index b468e1110..c5a333125 100644 --- a/app/services/homework_service.rb +++ b/app/services/homework_service.rb @@ -6,6 +6,7 @@ class HomeworkService include WordsHelper include ApiHelper include HomeworkAttachHelper + include CoursesHelper # 作业详情(老师才显示启动匿评,学生不显示 ) # many_times 第几次(作业) @@ -25,7 +26,7 @@ class HomeworkService 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, + {:course_name => course.name,:id => @bid.id, :author => @bid.author,:author_real_name =>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 @@ -276,7 +277,7 @@ class HomeworkService hw = bid.homeworks.where("user_id = #{current_user.id}") my_homeworks << hw[0] unless (hw.nil? || hw[0].nil?) end - course_list << {:course => mp.course,:img_url => url_to_avatar(mp.course),:my_homework => my_homeworks} + course_list << {:course => mp.course,:img_url => url_to_avatar(mp.course),:my_homework => my_homeworks,:current_user_is_member => current_user.member_of_course?(mp.course),:current_user_is_teacher => is_course_teacher(current_user,mp.course)} end course_list end diff --git a/app/services/users_service.rb b/app/services/users_service.rb index b9962a2a8..8cadf031c 100644 --- a/app/services/users_service.rb +++ b/app/services/users_service.rb @@ -158,7 +158,7 @@ class UsersService membership.sort! {|older, newer| newer.created_on <=> older.created_on } course_list = [] membership.each do |mp| - course_list << {:course => mp.course,:img_url => url_to_avatar(mp.course)} + course_list << {:course => mp.course,:img_url => url_to_avatar(mp.course),:current_user_is_member => current_user.member_of_course?(mp.course),:current_user_is_teacher => is_course_teacher(current_user,mp.course)} end course_list end diff --git a/app/views/layouts/base_users.html.erb b/app/views/layouts/base_users.html.erb index 3b2bd8dfe..a7ed0aa25 100644 --- a/app/views/layouts/base_users.html.erb +++ b/app/views/layouts/base_users.html.erb @@ -68,7 +68,7 @@