diff --git a/Gemfile b/Gemfile index 660a7ff49..2b43cade3 100644 --- a/Gemfile +++ b/Gemfile @@ -26,6 +26,7 @@ gem 'spreadsheet' gem 'ruby-ole' gem 'rails_kindeditor',path:'lib/rails_kindeditor' #gem "rmagick", ">= 2.0.0" +gem 'binding_of_caller' group :development do gem 'grape-swagger' diff --git a/app/api/mobile/apis/courses.rb b/app/api/mobile/apis/courses.rb index 57c1a8587..076e0b1c7 100644 --- a/app/api/mobile/apis/courses.rb +++ b/app/api/mobile/apis/courses.rb @@ -3,6 +3,9 @@ module Mobile module Apis class Courses < Grape::API resource :courses do + def self.get_service + CoursesService.new + end desc "获取所有课程" params do optional :school_id, type: Integer, desc: '传入学校id,返回该学校课程列表' @@ -337,9 +340,56 @@ module Mobile get ':course_id/student_works_list' do cs = CoursesService.new student_works = cs.student_work_list params,current_user - present :data,student_works.all,with:Mobile::Entities::StudentWork + present :data,student_works,with:Mobile::Entities::StudentWork + present :status,0 end + desc '讨论区信息' + params do + requires :token,type:String + requires :course_id,type:Integer,desc:'课程id' + optional :page,type:Integer,desc:'页码' + end + get ':course_id/board_message_list' do + cs = CoursesService.new + board_messages_list = cs.board_message_list params,current_user + present :data,board_messages_list.all,with:Mobile::Entities::Message + present :status,0 + end + + desc '讨论区某主题的回复列表' + params do + requires :token,type:String + requires :board_id,type:Integer,desc:'讨论区id' + requires :msg_id,type:Integer,desc:'讨论主题id' + optional :page,type:Integer,desc:'页码' + end + get ':board_id/board_message_reply_list' do + cs = Courses.get_service + board_messages_list = cs.board_message_reply_list params,current_user + present :data,board_messages_list.all,with:Mobile::Entities::Message + present :status,0 + end + + desc '讨论区回复' + params do + requires :token,type:String + requires :board_id,type:Integer,desc:'讨论区id' + requires :parent_id,type:Integer,desc:'本回复父id' + requires :subject,type:String,desc:'本回复主题' + requires :content,type:String,desc:'本回复内容' + requires :root_id,type:Integer,desc:'本回复根id' + requires :quote,type:String,desc:'本回复引用内容' + end + post ':board_id/board_message_reply' do + cs = Courses.get_service + board_messages = cs.board_message_reply params,current_user + present :data,board_messages,with:Mobile::Entities::Message + present :status,0 + end + + + end end diff --git a/app/controllers/homework_common_controller.rb b/app/controllers/homework_common_controller.rb index c0685ea0a..6e6fa7d20 100644 --- a/app/controllers/homework_common_controller.rb +++ b/app/controllers/homework_common_controller.rb @@ -1,6 +1,8 @@ class HomeworkCommonController < ApplicationController + require 'net/http' + require 'json' layout "base_courses" - before_filter :find_course, :only => [:index,:new,:create] + before_filter :find_course, :only => [:index,:new,:create,:next_step] before_filter :find_homework, :only => [:edit,:update,:alert_anonymous_comment,:start_anonymous_comment,:stop_anonymous_comment,:destroy] before_filter :teacher_of_course, :only => [:new, :create, :edit, :update, :destroy, :start_anonymous_comment, :stop_anonymous_comment, :alert_anonymous_comment] before_filter :member_of_course, :only => [:index] @@ -16,20 +18,37 @@ class HomeworkCommonController < ApplicationController end def new + respond_to do |format| + format.html + end + end + + #新建作业下一步 + def next_step + @homework_type = params[:homework_common_type] + @homework = HomeworkCommon.new @homework.safe_attributes = params[:homework_common] @homework.late_penalty = 0 @homework.end_time = (Time.now + 3600 * 24).strftime('%Y-%m-%d') @homework.publish_time = Time.now.strftime('%Y-%m-%d') - #匿评作业相关属性 - @homework_detail_manual = HomeworkDetailManual.new - @homework_detail_manual.ta_proportion = 0.6 - @homework_detail_manual.absence_penalty = 0 - @homework_detail_manual.evaluation_num = 3 - @homework_detail_manual.evaluation_start = Time.now.strftime('%Y-%m-%d') - @homework_detail_manual.evaluation_end = (Time.now + 3600 * 24).strftime('%Y-%m-%d') - @homework.homework_detail_manual = @homework_detail_manual + if @homework_type == "1" + #匿评作业相关属性 + @homework_detail_manual = HomeworkDetailManual.new + @homework_detail_manual.ta_proportion = 0.6 + @homework_detail_manual.absence_penalty = 0 + @homework_detail_manual.evaluation_num = 3 + @homework_detail_manual.evaluation_start = Time.now.strftime('%Y-%m-%d') + @homework_detail_manual.evaluation_end = (Time.now + 3600 * 24).strftime('%Y-%m-%d') + @homework.homework_detail_manual = @homework_detail_manual + elsif @homework_type == "2" + #编程作业相关属性 + @homework_detail_programing = HomeworkDetailPrograming.new + @homework.homework_detail_programing = @homework_detail_programing + end + + respond_to do |format| format.html end @@ -50,15 +69,57 @@ class HomeworkCommonController < ApplicationController homework.save_attachments(params[:attachments]) render_attachment_warning_if_needed(homework) - #匿评作业相关属性 - homework_detail_manual = HomeworkDetailManual.new - homework_detail_manual.ta_proportion = params[:ta_proportion] || 0.6 - homework_detail_manual.comment_status = 1 - homework_detail_manual.evaluation_start = params[:evaluation_start] - homework_detail_manual.evaluation_end = params[:evaluation_end] - homework_detail_manual.evaluation_num = params[:evaluation_num] - homework_detail_manual.absence_penalty = params[:absence_penalty] - homework.homework_detail_manual = homework_detail_manual + if homework.homework_type == 2 + homework_detail_programing = HomeworkDetailPrograming.new + homework_detail_programing.language = "C++" + homework_detail_programing.standard_code = params[:standard_code] + + question = {title:homework.name,content:homework.description} + question[:input] = [] + question[:output] = [] + if params[:input] && params[:output] + params[:input].each do |k,v| + if params[:output].include? k + homework_test = HomeworkTest.new + homework_test.input = v + homework_test.output = params[:output][k] + homework.homework_tests << homework_test + question[:input] << homework_test.input + question[:output] << homework_test.output + end + end + end + + # uri = URI('http://test.gitlab.trustie.net/api/questions.json') + # req = Net::HTTP::Post.new(uri, initheader = {'Content-Type' =>'application/json'}) + # req.body = question.to_json + # res = Net::HTTP.start(uri.hostname, uri.port) do |http| + # http.request(req) + # end + + uri = URI('http://192.168.80.21:8080/api/questions.json') + body = question.to_json + res = Net::HTTP.new(uri.host, uri.port).start do |client| + request = Net::HTTP::Post.new(uri.path) + request.body = body + request["Content-Type"] = "application/json" + client.request(request) + end + result = JSON.parse(res.body) + homework_detail_programing.question_id = result["id"] if result["status"] && result["status"] == 0 + + homework.homework_detail_programing = homework_detail_programing + else + #匿评作业相关属性 + homework_detail_manual = HomeworkDetailManual.new + homework_detail_manual.ta_proportion = params[:ta_proportion] || 0.6 + homework_detail_manual.comment_status = 1 + homework_detail_manual.evaluation_start = params[:evaluation_start] + homework_detail_manual.evaluation_end = params[:evaluation_end] + homework_detail_manual.evaluation_num = params[:evaluation_num] + homework_detail_manual.absence_penalty = params[:absence_penalty] + homework.homework_detail_manual = homework_detail_manual + end if homework.save respond_to do |format| @@ -90,7 +151,7 @@ class HomeworkCommonController < ApplicationController @homework.description = params[:homework_common][:description] @homework.end_time = params[:homework_common][:end_time] @homework.publish_time = params[:homework_common][:publish_time] - @homework.homework_type = params[:homework_common][:homework_type] + @homework.homework_type = params[:homework_common][:homework_type] if params[:homework_common][:homework_type] unless @homework.late_penalty == params[:late_penalty] @homework.student_works.where("created_at > '#{@homework.end_time} 23:59:59'").each do |student_work| student_work.late_penalty = params[:late_penalty] @@ -98,10 +159,10 @@ class HomeworkCommonController < ApplicationController end @homework.late_penalty = params[:late_penalty] end - @homework.course_id = @course.id + # @homework.course_id = @course.id #匿评作业相关属性 - if @homework.homework_type == 1 + if @homework.homework_type == 1 && @homework_detail_manual @homework_detail_manual.ta_proportion = params[:ta_proportion] || 0.6 @homework_detail_manual.evaluation_start = params[:evaluation_start] @homework_detail_manual.evaluation_end = params[:evaluation_end] @@ -117,18 +178,49 @@ class HomeworkCommonController < ApplicationController end @homework_detail_manual.absence_penalty = params[:absence_penalty] end - else #不是匿评作业,缺评扣分为0分,每个作品的缺评扣分改为0分,防止某些作业在结束匿评之后改为普通作业 + elsif @homework.homework_type == 0 #普通作业,缺评扣分为0分,每个作品的缺评扣分改为0分,防止某些作业在结束匿评之后改为普通作业 @homework.student_works.where("absence_penalty != 0").each do |student_work| student_work.late_penalty = 0 student_work.save end - @homework_detail_manual.absence_penalty = 0 + @homework_detail_manual.absence_penalty = 0 if @homework_detail_manual + end + + if @homework.homework_type == 2 && @homework_detail_programing #编程作业 + @homework_detail_programing.language = "C++" + @homework_detail_programing.standard_code = params[:standard_code] + homework_tests = @homework.homework_tests + #需要删除的测试 + ids = homework_tests.map(&:id) - params[:input].keys.map(&:to_i) + ids.each do |id| + homework_test = HomeworkTest.find id + homework_test.destroy if homework_test + end + if params[:input] && params[:output] + params[:input].each do |k,v| + if params[:output].include? k + homework_test = HomeworkTest.find_by_id k + if homework_test #已存在的测试,修改 + homework_test.input = v + homework_test.output = params[:output][k] + else #不存在的测试,增加 + homework_test = HomeworkTest.new + homework_test.input = v + homework_test.output = params[:output][k] + homework_test.homework_common = @homework + end + homework_test.save + end + end + end end @homework.save_attachments(params[:attachments]) render_attachment_warning_if_needed(@homework) - if @homework.save && @homework_detail_manual.save + if @homework.save + @homework_detail_manual.save if @homework_detail_manual + @homework_detail_programing.save if @homework_detail_programing respond_to do |format| format.html { flash[:notice] = l(:notice_successful_edit) @@ -227,6 +319,7 @@ class HomeworkCommonController < ApplicationController def find_homework @homework = HomeworkCommon.find params[:id] @homework_detail_manual = @homework.homework_detail_manual + @homework_detail_programing = @homework.homework_detail_programing @course = @homework.course rescue render_404 diff --git a/app/controllers/my_controller.rb b/app/controllers/my_controller.rb index 69d8bc3a6..103030d51 100644 --- a/app/controllers/my_controller.rb +++ b/app/controllers/my_controller.rb @@ -25,6 +25,7 @@ class MyController < ApplicationController helper :issues helper :users helper :custom_fields + helper :user_score BLOCKS = { 'issuesassignedtome' => :label_assigned_to_me_issues, 'issuesreportedbyme' => :label_reported_issues, @@ -88,6 +89,23 @@ class MyController < ApplicationController end end + def clear_user_avatar_temp + @user = User.current + diskfile = disk_filename('User', @user.id) + diskfile1 = diskfile + 'temp' + File.delete(diskfile1) if File.exist?(diskfile1) + end + def save_user_avatar + @user = User.current + diskfile = disk_filename('User', @user.id) + diskfile1 = diskfile + 'temp' + begin + FileUtils.mv diskfile1, diskfile, force: true if File.exist? diskfile1 + ensure + File.delete(diskfile1) if File.exist?(diskfile1) + end + end + # Edit user's account def account @user = User.current @@ -119,6 +137,8 @@ class MyController < ApplicationController @se.identity = params[:identity].to_i if params[:identity] @se.technical_title = params[:technical_title] if params[:technical_title] @se.student_id = params[:no] if params[:no] + @se.brief_introduction = params[:brief_introduction] + @se.description = params[:description] if @user.save && @se.save # 头像保存 @@ -137,6 +157,7 @@ class MyController < ApplicationController File.delete(diskfile1) if File.exist?(diskfile1) end + render :layout=>'base_users_new' end # Destroys user's account @@ -159,6 +180,8 @@ class MyController < ApplicationController # Manage user's password def password + begin + @act='password' @user = User.current unless @user.change_password_allowed? flash.now[:error] = l(:notice_can_t_change_password) @@ -174,16 +197,20 @@ class MyController < ApplicationController Token.delete_user_all_tokens(@user) logout_user redirect_to signin_url(back_url: my_account_path) + return else - flash.now[:error] = l(:notice_account_wrong_password) + #flash.now[:error] = l(:notice_account_wrong_password) end end rescue Exception => e if e.message == 'wrong password' - flash.now[:error] = l(:notice_account_wrong_password) + # flash.now[:error] = l(:notice_account_wrong_password) else - flash.now[:error] = e.message + # flash.now[:error] = e.message end + flash.now[:error] = l(:notice_account_old_wrong_password) + end + render :template => 'my/account',:layout=>'base_users_new' end # Create a new feeds key diff --git a/app/controllers/poll_controller.rb b/app/controllers/poll_controller.rb index d8a9d88c3..758747e02 100644 --- a/app/controllers/poll_controller.rb +++ b/app/controllers/poll_controller.rb @@ -23,7 +23,7 @@ class PollController < ApplicationController def show @poll = Poll.find params[:id] - if @poll.polls_status != 2 && !User.current.allowed_to?(:as_teacher,@course) + if @poll.polls_status != 2 && (!User.current.allowed_to?(:as_teacher,@course) || User.current.admin?) render_403 return end @@ -393,7 +393,7 @@ class PollController < ApplicationController end def is_member_of_course - render_403 unless(@course && User.current.member_of_course?(@course)) + render_403 unless(@course && (User.current.member_of_course?(@course) || User.current.admin?)) end def is_course_teacher diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index 607c9b5db..b335e1830 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -250,6 +250,14 @@ update return -1 end end + + if params[:to] == 'gitlab' + g = Gitlab.client + g.post('/session', body: {email: User.current.mail, password: User.current.hashed_password}) + redirect_to "http://192.168.41.130:3000/gitlab-org/gitlab-shell/tree/master" + return + end + #if( !User.current.member_of?(@project) || @project.hidden_repo) @repository.fetch_changesets if Setting.autofetch_changesets? && @path.empty? @@ -540,11 +548,12 @@ update :stack => :side, :scale_integers => true, :step_x_labels => 2, - :show_data_values => false, + :show_data_values => true, :graph_title => l(:label_commits_per_month), :show_graph_title => true ) + # 具状图 graph.add_data( :data => commits_by_month[0..11].reverse, :title => l(:label_revision_plural) @@ -560,7 +569,7 @@ update def graph_commits_per_author(repository) commits_by_author = Changeset.count(:all, :group => :committer, :conditions => ["repository_id = ?", repository.id]) - commits_by_author.to_a.sort! {|x, y| x.last <=> y.last} + commits_by_author = commits_by_author.to_a.sort! {|x, y| x.last <=> y.last}.last(25) changes_by_author = Change.count(:all, :group => :committer, :include => :changeset, :conditions => ["#{Changeset.table_name}.repository_id = ?", repository.id]) h = changes_by_author.inject({}) {|o, i| o[i.first] = i.last; o} @@ -582,7 +591,7 @@ update :fields => fields, :stack => :side, :scale_integers => true, - :show_data_values => false, + :show_data_values => true, :rotate_y_labels => false, :graph_title => l(:label_commits_per_author), :show_graph_title => true diff --git a/app/controllers/student_work_controller.rb b/app/controllers/student_work_controller.rb index cc858cc19..dae0bcab6 100644 --- a/app/controllers/student_work_controller.rb +++ b/app/controllers/student_work_controller.rb @@ -2,47 +2,88 @@ class StudentWorkController < ApplicationController layout "base_courses" include StudentWorkHelper require 'bigdecimal' + require "base64" before_filter :find_homework, :only => [:new, :index, :create, :student_work_absence_penalty, :absence_penalty_list, :evaluation_list] before_filter :find_work, :only => [:edit, :update, :show, :destroy, :add_score, :praise_student_work] before_filter :member_of_course, :only => [:index, :new, :create, :show, :add_score, :praise_student_work] before_filter :author_of_work, :only => [:edit, :update, :destroy] before_filter :teacher_of_course, :only => [:student_work_absence_penalty, :absence_penalty_list, :evaluation_list] + protect_from_forgery :except => :set_program_score def index - @order,@b_sort,@name = params[:order] || "score",params[:sort] || "desc",params[:name] || "" + @order,@b_sort,@name,@group = params[:order] || "score",params[:sort] || "desc",params[:name] || "",params[:group] @is_teacher = User.current.allowed_to?(:as_teacher,@course) - #老师 || 非匿评作业 || 匿评结束 显示所有的作品 - @show_all = @is_teacher || @homework.homework_type != 1 || @homework.homework_detail_manual.comment_status == 3 || User.current.admin? - if @show_all - if @homework.homework_type == 1 || @is_teacher || User.current.admin? #超级管理员 || 老师 || 匿评结束 显示所有的作品 - if @order == "name" - @stundet_works = search_homework_member @homework.student_works.select("*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score").joins(:user).order("users.lastname #{@b_sort}, users.firstname #{@b_sort}"),@name - else - @stundet_works = search_homework_member @homework.student_works.select("*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score").order("#{@order} #{@b_sort}"),@name - end - else #剩余情况: 学生 && 非匿评作业 如果未提交作品,只能看到自己的,提交了作品,能看到所有作品 - my_work = @homework.student_works.select("*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score").where(:user_id => User.current.id) - if my_work.empty? - @stundet_works = [] - else + course_group = CourseGroup.find_by_id(@group) if @group + if course_group + group_students = course_group.users + if group_students.empty? + student_in_group = '(0)' + else + student_in_group = '(' + group_students.map{|user| user.id}.join(',') + ')' + end + #老师 || 非匿评作业 || 匿评结束 显示所有的作品 + @show_all = @is_teacher || @homework.homework_type != 1 || @homework.homework_detail_manual.comment_status == 3 || User.current.admin? + if @show_all + if @homework.homework_type == 1 || @is_teacher || User.current.admin? #超级管理员 || 老师 || 匿评结束 显示所有的作品 if @order == "name" - @stundet_works = search_homework_member @homework.student_works.select("*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score").joins(:user).order("users.lastname #{@b_sort}, users.firstname #{@b_sort}"),@name + @stundet_works = search_homework_member @homework.student_works.select("student_works.*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score").joins(:user).where("users.id in #{student_in_group}").order("users.lastname #{@b_sort}, users.firstname #{@b_sort}"),@name + else + @stundet_works = search_homework_member @homework.student_works.select("student_works.*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score").joins(:user).where("users.id in #{student_in_group}").order("#{@order} #{@b_sort}"),@name + end + else #剩余情况: 学生 && 非匿评作业 如果未提交作品,只能看到自己的,提交了作品,能看到所有作品 + my_work = @homework.student_works.select("student_works.*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score").where(:user_id => User.current.id) + if my_work.empty? + @stundet_works = [] else - @stundet_works = search_homework_member @homework.student_works.select("*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score").order("#{@order} #{@b_sort}"),@name + if @order == "name" + @stundet_works = search_homework_member @homework.student_works.select("student_works.*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score").joins(:user).where("users.id in #{student_in_group}").order("users.lastname #{@b_sort}, users.firstname #{@b_sort}"),@name + else + @stundet_works = search_homework_member @homework.student_works.select("student_works.*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score").joins(:user).where("users.id in #{student_in_group}").order("#{@order} #{@b_sort}"),@name + end end end + else #学生 + if @homework.homework_detail_manual.comment_status == 1 #未开启匿评,只显示我的作品 + @stundet_works = @homework.student_works.select("student_works.*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score").where(:user_id => User.current.id) + elsif @homework.homework_detail_manual.comment_status == 2 #匿评列表,显示匿评作品和我的作品 + @is_evaluation = true + my_work = @homework.student_works.where(:user_id => User.current.id) + @stundet_works = my_work + User.current.student_works_evaluation_distributions.map(&:student_work).select { |work| work.homework_common_id == @homework.id} + end end - else #学生 - if @homework.homework_detail_manual.comment_status == 1 #未开启匿评,只显示我的作品 - @stundet_works = @homework.student_works.select("*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score").where(:user_id => User.current.id) - elsif @homework.homework_detail_manual.comment_status == 2 #匿评列表,显示匿评作品和我的作品 - @is_evaluation = true - my_work = @homework.student_works.where(:user_id => User.current.id) - @stundet_works = my_work + User.current.student_works_evaluation_distributions.map(&:student_work).select { |work| work.homework_common_id == @homework.id} + else + #老师 || 非匿评作业 || 匿评结束 显示所有的作品 + @show_all = @is_teacher || @homework.homework_type != 1 || @homework.homework_detail_manual.comment_status == 3 || User.current.admin? + if @show_all + if @homework.homework_type == 1 || @is_teacher || User.current.admin? #超级管理员 || 老师 || 匿评结束 显示所有的作品 + if @order == "name" + @stundet_works = search_homework_member @homework.student_works.select("student_works.*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score").joins(:user).order("users.lastname #{@b_sort}, users.firstname #{@b_sort}"),@name + else + @stundet_works = search_homework_member @homework.student_works.select("student_works.*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score").order("#{@order} #{@b_sort}"),@name + end + else #剩余情况: 学生 && 非匿评作业 如果未提交作品,只能看到自己的,提交了作品,能看到所有作品 + my_work = @homework.student_works.select("student_works.*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score").where(:user_id => User.current.id) + if my_work.empty? + @stundet_works = [] + else + if @order == "name" + @stundet_works = search_homework_member @homework.student_works.select("student_works.*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score").joins(:user).order("users.lastname #{@b_sort}, users.firstname #{@b_sort}"),@name + else + @stundet_works = search_homework_member @homework.student_works.select("student_works.*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score").order("#{@order} #{@b_sort}"),@name + end + end + end + else #学生 + if @homework.homework_detail_manual.comment_status == 1 #未开启匿评,只显示我的作品 + @stundet_works = @homework.student_works.select("student_works.*,IF(final_score is null,null,final_score - absence_penalty - late_penalty) as score").where(:user_id => User.current.id) + elsif @homework.homework_detail_manual.comment_status == 2 #匿评列表,显示匿评作品和我的作品 + @is_evaluation = true + my_work = @homework.student_works.where(:user_id => User.current.id) + @stundet_works = my_work + User.current.student_works_evaluation_distributions.map(&:student_work).select { |work| work.homework_common_id == @homework.id} + end end end @homework_commons = @course.homework_commons.order("created_at desc") - @homework_commons = @course.homework_commons.order("created_at desc") @score = @b_sort == "desc" ? "asc" : "desc" respond_to do |format| format.html @@ -80,7 +121,24 @@ class StudentWorkController < ApplicationController stundet_work.late_penalty = 0 end render_attachment_warning_if_needed(stundet_work) + if stundet_work.save + if @homework.homework_type == 2 && @homework.homework_detail_programing #编程作业,学生提交作品后计算系统得分 + url = "http://192.168.80.21:8080/api/questions/#{@homework.homework_detail_programing.question_id}/solutions.json" + solutions = { + student_work_id:stundet_work.id, + src:Base64.encode64(stundet_work.description), + language:1 + } + uri = URI(url) + body = solutions.to_json + res = Net::HTTP.new(uri.host, uri.port).start do |client| + request = Net::HTTP::Post.new(uri.path) + request.body = body + request["Content-Type"] = "application/json" + client.request(request) + end + end respond_to do |format| format.html { flash[:notice] = l(:notice_successful_create) @@ -99,8 +157,12 @@ class StudentWorkController < ApplicationController end def edit - respond_to do |format| - format.html + if @homework.homework_type == 2 #编程作业不能修改作业 + render_403 + else + respond_to do |format| + format.html + end end end @@ -135,7 +197,9 @@ class StudentWorkController < ApplicationController end def destroy - if @work.destroy + if @homework.homework_type == 2 #编程作业,作品提交后不可以删除 + render_403 + elsif @work.destroy respond_to do |format| format.html { redirect_to student_work_index_url(:homework => @homework.id) @@ -154,6 +218,12 @@ class StudentWorkController < ApplicationController if @score @score.comment = params[:new_form][:user_message] if params[:new_form] && params[:new_form][:user_message] && params[:new_form][:user_message] != "" @score.score = params[:score] if params[:score] + if User.current.admin? + @score.reviewer_role = 1 + else + role = User.current.members.where("course_id = ?",@course.id).first.roles.first.name + @score.reviewer_role = get_role_by_name(role) + end @is_new = false else @score = StudentWorksScore.new @@ -161,8 +231,12 @@ class StudentWorkController < ApplicationController @score.comment = params[:new_form][:user_message] if params[:new_form] && params[:new_form][:user_message] && params[:new_form][:user_message] != "" @score.user_id = User.current.id @score.student_work_id = @work.id - role = User.current.members.where("course_id = ?",@course.id).first.roles.first.name - User.current.admin? ? @score.reviewer_role = 1 : @score.reviewer_role = get_role_by_name(role) + if User.current.admin? + @score.reviewer_role = 1 + else + role = User.current.members.where("course_id = ?",@course.id).first.roles.first.name + @score.reviewer_role = get_role_by_name(role) + end @is_new = true end @@ -180,8 +254,10 @@ class StudentWorkController < ApplicationController if @work.student_score.nil? @work.final_score = @work.teaching_asistant_score else - final_ta_score = BigDecimal.new("#{@work.teaching_asistant_score}") * BigDecimal.new("#{@homework.homework_detail_manual.ta_proportion}") - final_s_score = BigDecimal.new("#{@work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{@homework.homework_detail_manual.ta_proportion}")) + ta_proportion = @homework.homework_detail_manual.ta_proportion if @homework.homework_detail_manual + ta_proportion = @homework.homework_detail_programing.ta_proportion if @homework.homework_detail_programing + final_ta_score = BigDecimal.new("#{@work.teaching_asistant_score}") * BigDecimal.new("#{ta_proportion}") + final_s_score = BigDecimal.new("#{@work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{ta_proportion}")) final_score = final_ta_score + final_s_score @work.final_score = format("%.2f",final_score.to_f) end @@ -303,6 +379,45 @@ class StudentWorkController < ApplicationController end end + #设置编程作业得分 + def set_program_score + stundet_work = StudentWork.find_by_id params[:student_work_id] + @course = stundet_work.homework_common.course + student_score_count = 0 + if stundet_work && params[:results] && params[:results].class.to_s == "Array" + homework_common = stundet_work.homework_common + params[:results].each do |result| + homework_test = homework_common.homework_tests.where("input = '#{result[:input]}' AND output = '#{result[:output]}'").first + if homework_test + student_work_test = StudentWorkTest.new + student_work_test.student_work = stundet_work + student_work_test.homework_test = homework_test + student_work_test.result = result[:status] + if student_work_test.result == 0 + student_score_count += 1 + end + student_work_test.save! + end + end + unless homework_common.homework_tests.empty? + stundet_work.student_score = student_score_count * 100.0 / homework_common.homework_tests.count + + if stundet_work.teacher_score.nil? + if stundet_work.teaching_asistant_score.nil? + stundet_work.final_score = stundet_work.student_score + else + final_ta_score = BigDecimal.new("#{stundet_work.teaching_asistant_score}") * BigDecimal.new("#{homework_common.homework_detail_programing.ta_proportion}") + final_s_score = BigDecimal.new("#{stundet_work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{homework_common.homework_detail_programing.ta_proportion}")) + final_score = final_ta_score + final_s_score + stundet_work.final_score = format("%.1f",final_score.to_f) + end + end + + stundet_work.save! + end + end + end + private #获取作业 def find_homework diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 0655c323b..d6597f3da 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -26,10 +26,10 @@ class UsersController < ApplicationController menu_item :user_homework, :only => :user_homeworks menu_item :user_project, :only => [:user_projects, :watch_projects] # menu_item :requirement_focus, :only => :watch_bids - menu_item :requirement_focus, :only => :watch_contests + menu_item :requirement_focus, :only => :watch_contests menu_item :user_newfeedback, :only => :user_newfeedback - - + + #Ended by young # edit @@ -39,23 +39,28 @@ class UsersController < ApplicationController before_filter :require_admin, :except => [:show, :index, :search, :tag_save, :tag_saveEx,:user_projects, :user_newfeedback, :user_comments, :watch_contests, :info, :user_watchlist, :user_fanslist,:update, :user_courses, :user_homeworks, :watch_projects, :show_score, :topic_score_index, :project_score_index, :activity_score_index, :influence_score_index, :score_index,:show_new_score, :topic_new_score_index, :project_new_score_index, - :activity_new_score_index, :influence_new_score_index, :score_new_index,:update_score,:user_activities,:user_projects_index] + :activity_new_score_index, :influence_new_score_index, :score_new_index,:update_score,:user_activities,:user_projects_index, + :user_courses4show,:user_projects4show,:user_course_activities,:user_project_activities,:user_feedback4show,:user_visitorlist] #edit has been deleted by huang, 2013-9-23 - before_filter :find_user, :only => [:user_fanslist, :user_watchlist, :show, :edit, :update, :destroy, :edit_membership, :user_courses, - :user_homeworks, :destroy_membership, :user_activities, :user_projects, :user_newfeedback, :user_comments, + before_filter :find_user, :only => [:user_fanslist, :user_watchlist, :show, :edit, :update, :destroy, :edit_membership, :user_courses, + :user_homeworks, :destroy_membership, :user_activities, :user_projects, :user_newfeedback, :user_comments, :watch_contests, :info, :watch_projects, :show_score, :topic_score_index, :project_score_index, :activity_score_index, :influence_score_index, :score_index,:show_new_score, :topic_new_score_index, :project_new_score_index, - :activity_new_score_index, :influence_new_score_index, :score_new_index,:user_projects_index] + :activity_new_score_index, :influence_new_score_index, :score_new_index,:user_projects_index, + :user_courses4show,:user_projects4show,:user_course_activities,:user_project_activities,:user_feedback4show,:user_visitorlist] before_filter :auth_user_extension, only: :show #before_filter :rest_user_score, only: :show #before_filter :select_entry, only: :user_projects accept_api_auth :index, :show, :create, :update, :destroy,:tag_save , :tag_saveEx - + #william before_filter :require_login, :only => [:tag_save,:tag_saveEx] #before_filter :refresh_changests, :only =>[:user_activities,:user_courses,:user_projects,:user_newfeedback] + #visitor + before_filter :recorded_visitor, :only => [:show,:user_fanslist,:user_watchlist,:user_visitorlist] + helper :sort include SortHelper helper :custom_fields @@ -76,6 +81,9 @@ class UsersController < ApplicationController # fq helper :words + helper :project_score + helper :issues + include UsersHelper def refresh_changests if !(@user.nil?) && !(@user.memberships.nil?) @@ -104,34 +112,41 @@ class UsersController < ApplicationController #added by young def user_projects - if User.current.admin? - @memberships = @user.memberships.all(conditions: "projects.project_type = #{Project::ProjectType_project}") - else - cond = Project.visible_condition(User.current) + " AND projects.project_type <> 1" - @memberships = @user.memberships.all(:conditions => cond) - end - @memberships = @memberships.sort {|a,b| b.created_on.to_i <=> a.created_on.to_i} - # unless @memberships.nil? - # @user_projects = [] - # @memberships.each do |membership| - # @user_projects << membership.project - # end - # @user_projects = @user_projects.sort {|a,b| b.created_on.to_i <=> a.created_on.to_i} - # end - #events = Redmine::Activity::Fetcher.new(User.current, :author => @user).events(nil, nil, :limit => 20) - #@events_by_day = events.group_by(&:event_date) - @state = 0 - #add by huang + + #add by huang unless User.current.admin? if !@user.active? #|| (@user != User.current && @memberships.empty? && events.empty?) render_404 - return + return end end - #end - + #end + # if User.current.admin? + # @memberships = @user.memberships.all(conditions: "projects.project_type = #{Project::ProjectType_project}") + # else + # cond = Project.visible_condition(User.current) + " AND projects.project_type <> 1" + # @memberships = @user.memberships.all(:conditions => cond) + # end + #events = Redmine::Activity::Fetcher.new(User.current, :author => @user).events(nil, nil, :limit => 20) + #@events_by_day = events.group_by(&:event_date) + # @state = 0 + + limit = 10; + query = Project.joins("join members m on #{Project.table_name}.id=m.project_id") + query = query.where("m.user_id = ? and #{Project.table_name}.project_type=?",@user.id,Project::ProjectType_project) + if(params[:status] == '1') + query = query.where("#{Project.table_name}.user_id = ?",@user.id); + elsif(params[:status] == '2') + query = query.where("#{Project.table_name}.user_id <> ?",@user.id); + end + @obj_count = query.count(); + + @obj_pages = Paginator.new @obj_count,limit,params['page'] + @list = query.order("#{Project.table_name}.updated_on desc,#{Project.table_name}.id desc").limit(limit).offset(@obj_pages.offset).all(); + @params = params + respond_to do |format| - format.html + format.html{render :layout=>'base_users_new'} format.api end end @@ -168,21 +183,21 @@ class UsersController < ApplicationController # format.api # end end - + #new add by linchun - def watch_contests - @bids = Contest.watched_by(@user) + def watch_contests + @bids = Contest.watched_by(@user) @offset, @limit = api_offset_and_limit({:limit => 10}) @contest_count = @contests.count @contest_pages = Paginator.new @contest_count, @limit, params['page'] - @offset ||= @contest_pages.reverse_offset + @offset ||= @contest_pages.reverse_offset unless @offset == 0 @contest = @contests.offset(@offset).limit(@limit).all.reverse else limit = @bid_count % @limit @contest = @contests.offset(@offset).limit(limit).all.reverse end - + respond_to do |format| format.html { render :layout => 'base_users' @@ -219,9 +234,9 @@ class UsersController < ApplicationController end end # end - + # added by huang - def user_homeworks + def user_homeworks # @membership = @user.memberships.all(:conditions => Project.visible_condition(User.current)) # @memberships = [] # @membership.each do |membership| @@ -240,46 +255,63 @@ class UsersController < ApplicationController # return # end # end - end - - + end + + include CoursesHelper - def user_courses + def user_courses unless User.current.admin? if !@user.active? #|| (@user != User.current && @memberships.empty? && events.empty?) render_404 - return + return end end - + #@user.coursememberships.all(:conditions => Course.visible_condition(User.current)) - if User.current == @user || User.current.admin? - membership = @user.coursememberships.all - else - membership = @user.coursememberships.all(:conditions => Course.visible_condition(User.current)) - end - - membership.sort! {|older, newer| newer.created_on <=> older.created_on } - @memberships = [] - membership.collect { |e| @memberships.push(e)} - ## 判断课程是否过期 [需封装] - @memberships_doing = [] - @memberships_done = [] - #now_time = Time.now.year - @memberships.map { |e| - #end_time = e.course.get_time.year - isDone = course_endTime_timeout?(e.course) - if isDone - @memberships_done.push e - else - @memberships_doing.push e - end - } + limit = 10; + query = Course.joins("join members m on #{Course.table_name}.id=m.course_id") + query = query.where("m.user_id = ?",@user.id) + if(params[:status] == '1') + query = query.where("endup_time >= ? or endup_time is null or endup_time=''",Time.now); + elsif(params[:status] == '2') + query = query.where("endup_time < ?",Time.now); + end + @obj_count = query.count(); + + @obj_pages = Paginator.new @obj_count,limit,params['page'] + @list = query.order("#{Course.table_name}.updated_at desc,#{Course.table_name}.id desc").limit(limit).offset(@obj_pages.offset).all(); + @params = params + render :layout=>'base_users_new' + + # if User.current == @user || User.current.admin? + # membership = @user.coursememberships.all + # else + # membership = @user.coursememberships.all(:conditions => Course.visible_condition(User.current)) + # end + # + # membership.sort! {|older, newer| newer.created_on <=> older.created_on } + # @memberships = [] + # membership.collect { |e| + # @memberships.push(e) + # } + # ## 判断课程是否过期 [需封装] + # @memberships_doing = [] + # @memberships_done = [] + # #now_time = Time.now.year + # @memberships.map { |e| + # #end_time = e.course.get_time.year + # isDone = course_endTime_timeout?(e.course) + # if isDone + # @memberships_done.push e + # else + # @memberships_doing.push e + # end + # } # respond_to do |format| - # format.html - # format.api + # format.html + # format.api # end end @@ -306,7 +338,7 @@ class UsersController < ApplicationController #end def index - + @status = params[:status] || 1 sort_init 'login', 'asc' sort_update %w(login firstname lastname mail admin created_on last_login_on) @@ -322,7 +354,7 @@ class UsersController < ApplicationController # 先内连一下statuses 保证排序之后数量一致 scope = User.visible. joins("INNER JOIN user_statuses ON users.id = user_statuses.user_id") - + # unknow scope = scope.in_group(params[:group_id]) if params[:group_id].present? @@ -359,7 +391,7 @@ class UsersController < ApplicationController # limit and offset @users = @users.limit(@user_pages.per_page).offset(@user_pages.offset) - + @user_base_tag = params[:id] ? 'base_users':'users_base' respond_to do |format| format.html { @@ -369,7 +401,7 @@ class UsersController < ApplicationController format.api end end - + def search sort_init 'login', 'asc' sort_update %w(login firstname lastname mail admin created_on last_login_on) @@ -413,8 +445,212 @@ class UsersController < ApplicationController format.api end end - + + def user_courses4show + query = Course.joins("join members m on #{Course.table_name}.id=m.course_id") + query = query.where("m.user_id = ?",@user.id) + if User.current == @user #看自己 + else + if @user.user_extensions!=nil && @user.user_extensions.identity == 0 #看老师 + query = query.joins("join member_roles r on m.id = r.member_id") + query = query.where("r.role_id in(3,7,9)") + end + query = query.where(Course.table_name+".is_public = 1") + # or exists (select 1 from courses c2,members m2 where c2.id=m2.course_id and c2.id=#{Course.table_name}.id and m2.user_id= User.current.id) + end + + if params[:lastid]!=nil && !params[:lastid].empty? + query = query.where("( (#{Course.table_name}.updated_at=? and #{Course.table_name}.id < ?) or #{Course.table_name}.updated_atnil + end + def user_projects4show + query = Project.joins("join members m on #{Project.table_name}.id=m.project_id") + query = query.where("m.user_id = ? and #{Project.table_name}.project_type=?",@user.id,Project::ProjectType_project) + if User.current == @user #看自己 + else + query = query.where(Project.table_name+".is_public = 1") + # TODO or exists (select 1 from project c2,members m2 where c2.id=m2.course_id and c2.id=#{Project.table_name}.id and m2.user_id= User.current.id) + end + + if params[:lastid]!=nil && !params[:lastid].empty? + query = query.where("( (#{Project.table_name}.updated_on=? and #{Project.table_name}.id < ?) or #{Project.table_name}.updated_onnil + end + + # def user_course_activities + # @list = [] + # lastid = nil + # if params[:lastid]!=nil && !params[:lastid].empty? + # lastid = params[:lastid]; + # end + # + # user_ids = [] + # if @user == User.current + # watcher = User.watched_by(@user) + # watcher.push(User.current) + # user_ids = watcher.map{|x| x.id} + # else + # user_ids << @user.id + # end + # + # query_rec_count = 8 + # query_times = 10 #query_times次没查到query_rec_count条记录就不查了 + # query_i = 0; + # while( true ) + # query_i = query_i+1 + # if(query_i>query_times) + # break + # end + # query = Activity.where(user_id: user_ids) + # if(lastid != nil) + # query = query.where("id < ?",lastid) + # end + # lastid,item_list = query_activities(query,'course'); + # for item in item_list + # @list << item + # if @list.count() >= query_rec_count + # break + # end + # end + # if @list.count() >= query_rec_count + # break + # end + # if lastid == nil + # break + # end + # end + # render :layout=>nil + # end + # + # def user_project_activities + # @list = [] + # lastid = nil + # if params[:lastid]!=nil && !params[:lastid].empty? + # lastid = params[:lastid]; + # end + # + # user_ids = [] + # if @user == User.current + # watcher = User.watched_by(@user) + # watcher.push(User.current) + # user_ids = watcher.map{|x| x.id} + # else + # user_ids << @user.id + # end + # + # query_rec_count = 8 + # query_times = 10 #query_times次没查到query_rec_count条记录就不查了 + # query_i = 0; + # while( true ) + # query_i = query_i+1 + # if(query_i>query_times) + # break + # end + # query = Activity.where(user_id: user_ids) + # if(lastid != nil) + # query = query.where("id < ?",lastid) + # end + # lastid,item_list = query_activities(query,'project'); + # for item in item_list + # @list << item + # if @list.count() >= query_rec_count + # break + # end + # end + # if @list.count() >= query_rec_count + # break + # end + # if lastid == nil + # break + # end + # end + # render :action=>'user_course_activities',:layout=>nil + # end + def user_course_activities + lastid = nil + if params[:lastid]!=nil && !params[:lastid].empty? + lastid = params[:lastid]; + end + + user_ids = [] + if @user == User.current + watcher = User.watched_by(@user) + watcher.push(User.current) + user_ids = watcher.map{|x| x.id} + else + user_ids << @user.id + end + + query = Activity.joins("join courses c on c.id=#{Activity.table_name}.activity_container_id and #{Activity.table_name}.activity_container_type='Course'") + query = query.where("#{Activity.table_name}.user_id in (?)", user_ids) + if User.current != @user #看别人 + if @user.user_extensions!=nil && @user.user_extensions.identity == 0 #看老师 + query = query.joins("join members m on c.id=m.course_id and m.user_id = #{@user.id}") + query = query.joins("join member_roles r on m.id = r.member_id") + query = query.where("r.role_id in(3,7,9)") + end + query = query.where("c.is_public=1") + end + if(lastid != nil) + query = query.where("#{Activity.table_name}.id < ?",lastid) + end + query = query.order("#{Activity.table_name}.id desc") + @list = query_activities(query) + + render :layout=>nil + end + + def user_project_activities + lastid = nil + if params[:lastid]!=nil && !params[:lastid].empty? + lastid = params[:lastid]; + end + + user_ids = [] + if @user == User.current + watcher = User.watched_by(@user) + watcher.push(User.current) + user_ids = watcher.map{|x| x.id} + else + user_ids << @user.id + end + + query = Activity.joins("join projects c on c.id=#{Activity.table_name}.activity_container_id and #{Activity.table_name}.activity_container_type='Project'") + query = query.where(user_id: user_ids) + if User.current != @user #看别人 + query = query.where("c.is_public=1") + end + if(lastid != nil) + query = query.where("#{Activity.table_name}.id < ?",lastid) + end + query = query.order("#{Activity.table_name}.id desc") + @list = query_activities(query); + + render :action=>'user_course_activities',:layout=>nil + end + + def user_feedback4show + query = @user.journals_for_messages + if params[:lastid]!=nil && !params[:lastid].empty? + query = query.where("#{JournalsForMessage.table_name}.id < ?",params[:lastid]) + end + logger.info('xxoo') + @list = query.order("#{JournalsForMessage.table_name}.id desc").limit(3).all + logger.info('aavv') + render :layout=>nil,:locals => {:feed_list=>@list} + end + def show + render :layout=>'base_users_new' + end + + def show_old pre_count = 10 #limit # Time 2015-02-04 11:46:34 # Author lizanle @@ -430,9 +666,9 @@ class UsersController < ApplicationController end when "2" message = [] - if @user == User.current + if @user == User.current message = JournalsForMessage.reference_message(@user.id) - message += Journal.reference_message(@user.id) + message += Journal.reference_message(@user.id) end @activity_count = message.size @info_pages = Paginator.new @activity_count, pre_count, params['page'] @@ -463,7 +699,7 @@ class UsersController < ApplicationController p_ids = [] Project.where(id: project_ids).each do |x| p_ids << x.id unless x.visible?(User.current) - end + end ids = [] ids << Issue.where(id: act_ids, project_id: p_ids).map{|x| x.id} @@ -482,7 +718,7 @@ class UsersController < ApplicationController p_ids = [] Project.where(id: project_ids).each do |x| p_ids << x.id unless x.visible?(User.current) - end + end ids << Journal.where(id: act_ids, journalized_id: p_ids, journalized_type: 'Project').map{|x| x.id} #News @@ -491,16 +727,16 @@ class UsersController < ApplicationController p_ids = [] Project.where(id: project_ids).each do |x| p_ids << x.id unless x.visible?(User.current) - end + end ids << News.where(id: act_ids, project_id: p_ids).map{|x| x.id} project_ids = News.where(id: act_ids).select('distinct course_id').map{|x| x.course_id} c_ids = [] Course.where(id: project_ids).each do |x| c_ids << x.id unless x.is_public !=0 && User.current.member_of_course?(x) - end + end ids << News.where(id: act_ids, course_id: p_ids).map{|x| x.id} - + #Message act_ids = activity.where(act_type: 'Message').select('act_id').map{|x| x.act_id} board_ids = Message.where(id: act_ids).select('distinct board_id').map{|x| x.board_id} @@ -508,14 +744,14 @@ class UsersController < ApplicationController p_ids = [] Project.where(id: project_ids).each do |x| p_ids << x.id unless x.visible?(User.current) - end + end ids << Message.where(id: act_ids, board_id: p_ids).map{|x| x.id} - + project_ids = Board.where(id: board_ids).select('distinct course_id').map{|x| x.course_id} c_ids = [] Course.where(id: project_ids).each do |x| c_ids << x.id unless x.is_public !=0 && User.current.member_of_course?(x) - end + end ids << Message.where(id: act_ids, board_id: c_ids).map{|x| x.id} logger.debug "filter ids #{ids}" @@ -533,33 +769,33 @@ class UsersController < ApplicationController # (e.act_type == "Message" && !e.act.board.nil? && ((!e.act.board.project.nil? && !e.act.board.project.visible?(User.current)) || (!e.act.board.course.nil? && e.act.board.course.is_public == 0 && !User.current.member_of_course?(e.act.board.course)))))) # } # - + @activity_count = activity.count @activity_pages = Paginator.new @activity_count, pre_count, params['page'] @activity = activity.slice(@activity_pages.offset,@activity_pages.per_page) @state = 0 end - + if params[:user].present? - + user_temp = User.find_by_sql("select id from users where concat(lastname,firstname) like '%#{params[:user]}%' or lastname like '%#{params[:user]}%'") - + if user_temp.size > 1 - activity = Activity.where('user_id in (?)', user_temp).where('user_id in (?)', watcher).order('id desc') + activity = Activity.where('user_id in (?)', user_temp).where('user_id in (?)', watcher).order('id desc') elsif user_temp.size == 1 - activity = Activity.where('user_id = ?', user_temp).where('user_id in (?)', watcher).order('id desc') + activity = Activity.where('user_id = ?', user_temp).where('user_id in (?)', watcher).order('id desc') else activity = Activity.where("1 = 0") end @offset, @limit = api_offset_and_limit({:limit => 10}) - @activity_count = activity.count + @activity_count = activity.count @activity_pages = Paginator.new @activity_count, @limit, params['page'] @offset ||= @activity_pages.offset - @activity = activity.offset(@offset).limit(@limit) + @activity = activity.offset(@offset).limit(@limit) @state = 0 end - - + + #Modified by nie unless User.current.admin? if !@user.active? #|| (@user != User.current && @memberships.empty? && events.empty?) @@ -581,17 +817,17 @@ class UsersController < ApplicationController def info message = [] - if @user == User.current + if @user == User.current message = JournalsForMessage.reference_message(@user.id) - message += Journal.reference_message(@user.id) + message += Journal.reference_message(@user.id) end @offset, @limit = api_offset_and_limit({:limit => 10}) @info_count = message.size @info_pages = Paginator.new @info_count, @limit, params['page'] @offset ||= @info_pages.offset - + messages = message.sort {|x,y| y.created_on <=> x.created_on } - + @message = messages[@offset, @limit] unless User.current.admin? @@ -607,7 +843,7 @@ class UsersController < ApplicationController end end #### end - + def new @user = User.new(:language => Setting.default_language, :mail_notification => Setting.default_notification_option) @@ -665,7 +901,7 @@ class UsersController < ApplicationController @auth_sources = AuthSource.all @membership ||= Member.new end - + def watch_projects @watch_projects = Project.joins(:watchers).where("project_type <>? and watchable_type = ? and `watchers`.user_id = ?", '1','Project', @user.id) @state = 1 @@ -835,42 +1071,66 @@ class UsersController < ApplicationController end end ###add by huang - def user_watchlist + def user_watchlist + limit = 10; + query = User.watched_by(@user.id); + @obj_count = query.count(); + @obj_pages = Paginator.new @obj_count,limit,params['page'] + @list = query.order("#{Watcher.table_name}.id desc").limit(limit).offset(@obj_pages.offset).all(); + + render :template=>'users/user_fanslist',:layout=>'base_users_new' end ###add by huang - def user_fanslist - + def user_fanslist + limit = 10; + query = @user.watcher_users; + @obj_count = query.count(); + @obj_pages = Paginator.new @obj_count,limit,params['page'] + @list = query.order("#{Watcher.table_name}.id desc").limit(limit).offset(@obj_pages.offset).all(); + @action = 'fans' + render :layout=>'base_users_new' + end + def user_visitorlist + limit = 10; + #query = @user.watcher_users; + query = User.joins("join visitors v on #{User.table_name}.id=v.user_id") + query = query.where("v.master_id=?",@user.id) + @obj_count = query.count(); + @obj_pages = Paginator.new @obj_count,limit,params['page'] + @list = query.order("v.updated_on desc").limit(limit).offset(@obj_pages.offset).all(); + @action = 'visitor' + render :template=>'users/user_fanslist',:layout=>'base_users_new' end - + #william def update_extensions(user_extensions) user_extensions = params[:user_extensions] unless user_extensions.nil? user_extensions = UserExtensions.find_by_id(user_extensions.user_id) - + # user_extensions. end end # added by bai def topic_score_index - + end - + def project_score_index - + end - + def activity_score_index - + end - + def influence_score_index - + end - + def score_index - + end # end def topic_new_score_index @@ -916,7 +1176,7 @@ class UsersController < ApplicationController # 必填自己的工作单位,其实就是学校 def auth_user_extension - if @user == User.current && @user.user_extensions.nil? + if @user == User.current && @user.user_extensions.nil? flash[:error] = l(:error_complete_occupation) redirect_to my_account_url end @@ -944,4 +1204,20 @@ class UsersController < ApplicationController render_404 end end + + def recorded_visitor + if(User.current.logged? && User.current != @user) + #impl = Visitor.where('user_id=? and master_id=?',User.current.id,@user.id).find; + # impl = Visitor.find_by_sql('user_id=? and master_id=?',[User.current.id,@user.id]); + impl = Visitor.find_by_user_id_and_master_id(User.current.id,@user.id); + if(impl.nil?) + impl = Visitor.new + impl.user_id = User.current.id + impl.master_id = @user.id + else + impl.updated_on = Time.now + end + impl.save + end + end end diff --git a/app/controllers/watchers_controller.rb b/app/controllers/watchers_controller.rb index f6d01a03d..35e1d5ba4 100644 --- a/app/controllers/watchers_controller.rb +++ b/app/controllers/watchers_controller.rb @@ -16,12 +16,15 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. class WatchersController < ApplicationController before_filter :require_login#, :find_watchables, :only => [:watch, :unwatch] + + helper :users + def watch s = WatchesService.new watchables = s.watch params.merge(:current_user_id => User.current.id) respond_to do |format| format.html { redirect_to_referer_or {render :text => (true ? 'Watcher added.' : 'Watcher removed.'), :layout => true}} - format.js { render :partial => 'set_watcher', :locals => {:user => User.current, :watched => watchables} } + format.js { render :partial => 'set_watcher', :locals => {:user => User.current, :watched => watchables,:params=>params,:opt=>'add'} } end rescue Exception => e if e.message == "404" @@ -37,7 +40,7 @@ class WatchersController < ApplicationController watchables = s.unwatch params.merge(:current_user_id => User.current.id) respond_to do |format| format.html { redirect_to_referer_or {render :text => (false ? 'Watcher added.' : 'Watcher removed.'), :layout => true}} - format.js { render :partial => 'set_watcher', :locals => {:user => User.current, :watched => watchables} } + format.js { render :partial => 'set_watcher', :locals => {:user => User.current, :watched => watchables,:params=>params,:opt=>'delete'} } end rescue Exception => e if e.message == "404" diff --git a/app/controllers/words_controller.rb b/app/controllers/words_controller.rb index cc6c4f47e..4ff01d36c 100644 --- a/app/controllers/words_controller.rb +++ b/app/controllers/words_controller.rb @@ -13,11 +13,12 @@ class WordsController < ApplicationController end refer_user_id = params[:new_form][:reference_user_id].to_i - @user.add_jour(User.current, message, refer_user_id) + list = @user.add_jour(User.current, message, refer_user_id) unless refer_user_id == 0 || refer_user_id == User.current.id - User.find(refer_user_id).add_jour(User.current, message, refer_user_id) + list = User.find(refer_user_id).add_jour(User.current, message, refer_user_id) end - @user.count_new_jour + @jour = list.last + # @user.count_new_jour # if a_message.size > 5 # @message = a_message[-5, 5] # else @@ -26,8 +27,8 @@ class WordsController < ApplicationController # @message_count = a_message.count end end - @jours = @user.journals_for_messages.where('m_parent_id IS NULL').reverse - @jour = paginateHelper @jours,10 + # @jours = @user.journals_for_messages.where('m_parent_id IS NULL').reverse + # @jour = paginateHelper @jours,10 respond_to do |format| # format.html { redirect_to_referer_or {render :text => 'Watcher added.', :layout => true}} diff --git a/app/helpers/activities_helper.rb b/app/helpers/activities_helper.rb index ede2ed78a..822613455 100644 --- a/app/helpers/activities_helper.rb +++ b/app/helpers/activities_helper.rb @@ -42,4 +42,33 @@ module ActivitiesHelper end sorted_events end + + def get_container_type(activity) + if activity.act.nil? + return ['Unknow',0] + end + #问卷 + if activity.act_type == 'Poll' + return ['Course',activity.act.polls_group_id] + end + #注册 + if activity.act_type == 'Principal' + return ['Principal',activity.act.id] + end + #留言 + if activity.act_type == 'JournalsForMessage' + return [activity.act.jour_type,activity.act.jour_id] + end + + # HomeworkCommon Issue Journal Message News + if activity.act.respond_to?('course') && activity.act.course + return ['Course',activity.act.course.id] + end + if activity.act.respond_to?('project') && activity.act.project + return ['Project',activity.act.project.id] + end + + # Contest Contestnotification + return ['Unknow',0] + end end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index a31bd6189..64a478187 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -2292,6 +2292,8 @@ module ApplicationHelper else link = "启动匿评".html_safe end + elsif homework.homework_type == 2 && homework.homework_detail_programing #编程作业作业 + link = "编程作业".html_safe else link = "启动匿评".html_safe end @@ -2305,6 +2307,8 @@ module ApplicationHelper else if homework.homework_type == 1 && homework.homework_detail_manual && homework.homework_detail_manual.comment_status != 1 #匿评作业,且作业状态不是在开启匿评之前 "#{l(:label_edit_homework)}".html_safe + elsif homework.homework_type == 2 #编程作业不能修改作品 + "作品已交".html_safe else link_to l(:label_edit_homework), edit_student_work_path(work.id),:class => 'fr mr10 work_edit' end @@ -2324,7 +2328,7 @@ module ApplicationHelper elsif homework.homework_type == 0 "未启用匿评".html_safe elsif homework.homework_type == 2 - "编程作业".html_safe + " 编程作业  ".html_safe end end @@ -2339,4 +2343,36 @@ module ApplicationHelper end end + #将文本内的/n转换为
+ def text_format text + text.gsub("&","&").gsub("<","<").gsub(">",">").gsub("\n","
").html_safe + end + + #评分规则显示 + def scoring_rules late_penalty,homework_id,is_teacher,absence_penalty=nil + if absence_penalty + if late_penalty.to_i == 0 && absence_penalty.to_i == 0 + notice = "尚未设置评分规则" + if is_teacher + notice += ",请 " + link_to("设置",edit_homework_common_path(homework_id),:class => "c_green") + end + elsif late_penalty.to_i != 0 && absence_penalty.to_i == 0 + notice = "迟交扣#{late_penalty}分,缺评扣分未设置" + elsif late_penalty.to_i == 0 && absence_penalty.to_i != 0 + notice = "迟交扣分未设置,缺评一个作品扣#{absence_penalty}分" + elsif late_penalty.to_i != 0 && absence_penalty.to_i != 0 + notice = "迟交扣#{late_penalty}分,缺评一个作品扣#{absence_penalty}分" + end + else + if late_penalty.to_i == 0 + notice = "尚未设置评分规则" + if is_teacher + notice += ",请 " + link_to("设置",edit_homework_common_path(homework_id),:class => "c_green") + end + else + notice = "迟交扣#{late_penalty}分" + end + end + notice.html_safe + end end diff --git a/app/helpers/homework_common_helper.rb b/app/helpers/homework_common_helper.rb index a2ff6dbab..81f817ee9 100644 --- a/app/helpers/homework_common_helper.rb +++ b/app/helpers/homework_common_helper.rb @@ -53,31 +53,4 @@ module HomeworkCommonHelper link end - #评分规则显示 - def scoring_rules late_penalty,homework_id,is_teacher,absence_penalty=nil - if absence_penalty - if late_penalty.to_i == 0 && absence_penalty.to_i == 0 - notice = "尚未设置评分规则" - if is_teacher - notice += ",请 " + link_to("设置",edit_homework_common_path(homework_id),:class => "c_green") - end - elsif late_penalty.to_i != 0 && absence_penalty.to_i == 0 - notice = "迟交扣#{late_penalty}分,缺评扣分未设置" - elsif late_penalty.to_i == 0 && absence_penalty.to_i != 0 - notice = "迟交扣分未设置,缺评一个作品扣#{absence_penalty}分" - elsif late_penalty.to_i != 0 && absence_penalty.to_i != 0 - notice = "迟交扣#{late_penalty}分,缺评一个作品扣#{absence_penalty}分" - end - else - if late_penalty.to_i == 0 - notice = "尚未设置评分规则" - if is_teacher - notice += ",请 " + link_to("设置",edit_homework_common_path(homework_id),:class => "c_green") - end - else - notice = "迟交扣#{late_penalty}分" - end - end - notice.html_safe - end end \ No newline at end of file diff --git a/app/helpers/student_work_helper.rb b/app/helpers/student_work_helper.rb index f88b1ff21..f24d5078f 100644 --- a/app/helpers/student_work_helper.rb +++ b/app/helpers/student_work_helper.rb @@ -80,4 +80,22 @@ module StudentWorkHelper end color end + + #获取分班信息 + def course_group_list course + result = [] + if course.course_groups && !course.course_groups.empty? + base = [] + base << l(:label_chose_group) + base << 0 + result << base + course.course_groups.each do |group| + option = [] + option << group.name + option << group.id + result << option + end + end + result + end end \ No newline at end of file diff --git a/app/helpers/users_helper.rb b/app/helpers/users_helper.rb index af2d5abc4..d4f9e4eb8 100644 --- a/app/helpers/users_helper.rb +++ b/app/helpers/users_helper.rb @@ -303,4 +303,243 @@ module UsersHelper end end end + + def get_watcher_users(obj) + count = User.watched_by(obj.id).count + if count == 0 + return [0,[]] + end + list = User.watched_by(obj.id).order("#{Watcher.table_name}.id desc").limit(10).all + return [count,list]; + end + + def get_fans_users(obj) + count = obj.watcher_users.count + if count == 0 + return [0,[]] + end + list = obj.watcher_users.order("#{Watcher.table_name}.id desc").limit(10).all + return [count,list]; + end + def get_visitor_users(obj) + query = Visitor.where("master_id=?",obj.id) + count = query.count + if count == 0 + return [0,[]] + end + list = query.order("updated_on desc").limit(10).all + return [count,list]; + end + + def get_create_course_count(user) + return Course.where("tea_id = ?",user.id).count() + end + def get_join_course_count(user) + return user.coursememberships.count() - get_create_course_count(user) + end + def get_homework_commons_count(user) + return HomeworkCommon.where("user_id = ?",user.id).count() + end + def get_projectandcourse_attachment_count(user) + return Attachment.where("author_id = ? and container_type in ('Project','Course')",user.id).count() + end + def get_create_project_count(user) + return Project.where("user_id = ? and project_type = ?",user.id,Project::ProjectType_project).count() + end + def get_join_project_count(user) + return user.memberships.count(conditions: "projects.project_type = #{Project::ProjectType_project}") - get_create_project_count(user) + end + def get_create_issue_count(user) + return Issue.where("author_id = ?",user.id).count() + end + def get_resolve_issue_count(user) + return Issue.where("assigned_to_id = ? and status_id=3",user.id).count() + end + def get_anonymous_evaluation_count(user) + return StudentWorksScore.where("user_id = ? and reviewer_role=3",user.id).count() + end + + + # def query_activities(query,type) + # query_rec_count = 8 + # # query = query.where("act_type='JournalsForMessage'") + # #query = query.where("act_type not in (?)", ['JournalsForMessage','Message','HomeworkCommon','News','Issue','Journal','Poll']) + # list = query.order("id desc").limit(query_rec_count).all + # + # result = []; + # for item in list + # container = get_activity_container(item,type) + # if( activity_is_show(item,container) ) + # result << { :item=>item,:e=>container } + # end + # end + # return [lastid,result] + # end + # def get_activity_container activity,type + # e = nil; + # if type == 'Project' + # if activity.act_type == 'Poll' + # # 项目没有问卷 + # # e = Project.find_by_id(activity.act.polls_group_id) + # else + # e = activity.act.project if activity.act.respond_to?('project') + # end + # end + # if type == 'Course' + # if activity.act_type == 'Poll' + # e = Course.find_by_id(activity.act.polls_group_id) + # else + # e = activity.act.course if activity.act.respond_to?('course') + # end + # end + # + # return e; + # end + def query_activities(query) + list = query.limit(8).all + result = []; + for item in list + container = get_activity_container(item) + result << { :item=>item,:e=>container } + end + return result + end + def get_activity_container activity + return activity.activity_container + # if type == 'Project' + # return activity.act.project if activity.act.respond_to?('project') + # end + # if type == 'Course' + # if activity.act_type == 'Poll' + # return Course.find_by_id(activity.act.polls_group_id) + # end + # return activity.act.course if activity.act.respond_to?('course') + # end + # return nil; + end + + # def activity_is_show(activity,e) + # if(!e) + # return false + # end + # + # if activity.user_id == User.current.id + # return true + # end + # if( e.visible? ) + # return true + # end + # return false + # end + def get_activity_act_showname_htmlclear(activity) + str = get_activity_act_showname(activity) + str = str.gsub(/<.*>/,'') + str = str.gsub(/\r/,'') + str = str.gsub(/\n/,'') + str = str.lstrip.rstrip + if str == '' + str = 'RE:' + end + return str.html_safe + end + def get_activity_act_showname(activity) + case activity.act_type + when "HomeworkCommon" + return activity.act.name + when "Issue" + return activity.act.subject + when "Journal" + arr = details_to_strings(activity.act.details,true) + arr << activity.act.notes + str = '' + arr.each { |item| str = str+item } + return str + when "JournalsForMessage" + return activity.act.notes + when "Message" + return activity.act.subject + when "News" + return activity.act.title + when "Poll" + return activity.act.polls_name + when "Contest" + return '' + when "Contestnotification" + return '' + when "Principal" + return '' + else + return activity.act_type + end + end + def get_activity_act_createtime(activity) + case activity.act_type + when "HomeworkCommon" + return activity.act.created_at + when "Poll" + return activity.act.created_at + else + return activity.act.created_on + end + end + def get_activity_container_url e + if !e.visible? + return "javascript:;" + end + + if e.class.to_s == 'Course' + return url_for(:controller => 'courses', :action=>"show", :id=>e.id, :host=>Setting.host_course) + end + return url_for(:controller => 'projects', :action=>"show", :id=>e.id, :host=>Setting.host_name) + end + def get_activity_url(activity,e) + if !e.visible? + return "javascript:;" + end + + case activity.act_type + # when "Contest" + # when "Contestnotification" + # when "Principal" + when "HomeworkCommon" + return homework_common_index_path( :course=>e.id ) + when "Issue" + return issue_path(activity.act.id) + when "Journal" + return issue_path( activity.act.journalized_id ) + when "JournalsForMessage" + return e.class.to_s == 'Course' ? course_feedback_path(e) : project_feedback_path(e) + when "Message" + return e.class.to_s == 'Course' ? course_boards_path(e) : project_boards_path(e) + when "News" + return news_path(activity.act) + #return e.class.to_s == 'Course' ? course_news_index_path(e) : project_news_index_path(e) + when "Poll" + return poll_index_path( :polls_group_id=>activity.act.polls_group_id, :polls_type=>e.class.to_s ) + else + return 'javascript:;' + end + end + def get_activity_opt(activity,e) + case activity.act_type + when "HomeworkCommon" + return '创建了作业' + when "News" + return e.class.to_s == 'Course' ? '发布了通知' : '添加了新闻' + when "Issue" + return '发表了问题' + when "Journal" + return '回复了问题' + when "JournalsForMessage" + return e.class.to_s == 'Course' ? '发表了留言' : '提交了反馈' + #return ( activity.act.reply_id == nil || activity.act.reply_id == 0 ) ? '' : '' + when "Message" + return ( activity.act.parent_id == nil || activity.act.parent_id == '' ) ? '发布了帖子' : '回复了帖子' + when "Poll" + return '发布了问卷' + else + return '有了新动态' + end + end + end diff --git a/app/models/activity.rb b/app/models/activity.rb index 5ec778641..679cb9599 100644 --- a/app/models/activity.rb +++ b/app/models/activity.rb @@ -2,9 +2,20 @@ class Activity < ActiveRecord::Base attr_accessible :act_id, :act_type, :user_id belongs_to :act, :polymorphic => true belongs_to :user + belongs_to :activity_container, polymorphic: true validates :act_id, presence: true validates :act_type, presence: true validates :user_id, presence: true include Trustie::Cache::ClearCourseEvent + + before_create :set_container_type_val + + #helper :activities + include ActivitiesHelper + def set_container_type_val + container_type,container_id =get_container_type(self) + self.activity_container_type = container_type + self.activity_container_id = container_id + end end diff --git a/app/models/homework_test.rb b/app/models/homework_test.rb index f7d9b20bc..7c477bfaf 100644 --- a/app/models/homework_test.rb +++ b/app/models/homework_test.rb @@ -2,4 +2,5 @@ class HomeworkTest < ActiveRecord::Base attr_accessible :input, :output, :homework_common_id belongs_to :homework_common + has_one :student_work_test end diff --git a/app/models/student_work.rb b/app/models/student_work.rb index e2be18423..c80d1315b 100644 --- a/app/models/student_work.rb +++ b/app/models/student_work.rb @@ -7,6 +7,13 @@ class StudentWork < ActiveRecord::Base has_many :student_works_evaluation_distributions, :dependent => :destroy has_many :student_works_scores, :dependent => :destroy belongs_to :project + has_one :student_work_test + + before_destroy :delete_praise acts_as_attachable + + def delete_praise + PraiseTread.where("praise_tread_object_id = #{self.id} AND praise_tread_object_type = 'StudentWork'").destroy_all + end end diff --git a/app/models/student_work_test.rb b/app/models/student_work_test.rb new file mode 100644 index 000000000..d9ac5e935 --- /dev/null +++ b/app/models/student_work_test.rb @@ -0,0 +1,42 @@ +# encoding: utf-8 +class StudentWorkTest < ActiveRecord::Base + attr_accessible :student_work_id, :homework_test_id + + belongs_to :homework_test + belongs_to :student_work + + def status_to_s + case self.result + when -1 + '编译出错' + when -2 + '答题错误' + when -3 + '答案错误' + when 1 + '运行出错' + when 2 + '超时' + when 3 + '内存超出' + when 4 + '输出超出' + when 5 + '禁用函数' + when 6 + '其他错误' + when 0 + '成功' + else + '未知错误' + end + end + + def test_score + if self.result == 0 + format("%.1f",100.0 / self.student_work.homework_common.homework_tests.count) + else + 0 + end + end +end diff --git a/app/models/user_extensions.rb b/app/models/user_extensions.rb index d9a0f520a..726918729 100644 --- a/app/models/user_extensions.rb +++ b/app/models/user_extensions.rb @@ -12,6 +12,8 @@ class UserExtensions < ActiveRecord::Base belongs_to :user belongs_to :school, :class_name => 'School', :foreign_key => :school_id attr_accessible :user_id,:birthday,:brief_introduction,:gender,:location,:occupation,:work_experience,:zip_code,:identity, :technical_title,:student_id + validates_length_of :description, :maximum => 255 + validates_length_of :brief_introduction, :maximum => 255 TEACHER = 0 STUDENT = 1 ENTERPRISE = 2 diff --git a/app/models/visitor.rb b/app/models/visitor.rb new file mode 100644 index 000000000..6563fde16 --- /dev/null +++ b/app/models/visitor.rb @@ -0,0 +1,3 @@ +class Visitor < ActiveRecord::Base + belongs_to :user +end \ No newline at end of file diff --git a/app/services/courses_service.rb b/app/services/courses_service.rb index 1439f961d..e4e84a7c4 100644 --- a/app/services/courses_service.rb +++ b/app/services/courses_service.rb @@ -678,12 +678,11 @@ class CoursesService end # 课程讨论区 - # 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_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} + end # 课程资源 # latest_attachment = course.attachments.order("created_on desc").page(1).per(2) @@ -788,6 +787,45 @@ class CoursesService student_works end + # 获取课程的讨论区信息 + def board_message_list params,current_user + # 课程讨论区 + course = Course.find(params[:course_id]) + latest_message = course.boards.first.topics.page(params[:page] || 1).per(10) + end + + #获取回复列表 + def board_message_reply_list params,current_user + board = Board.find(params[:board_id]) + reply_list = board.topics.where("id = #{params[:msg_id]}").first.children.order("created_on desc").page(params[:page] || 1).per(10) + end + + #回复讨论区 + def board_message_reply params,current_user + author = Message.find(params[:parent_id]).author + quote = "
" << author.realname << "(" << author.nickname << ")写到:
" << params[:quote] <<"
" + reply = Message.new + reply.author = current_user + reply.board = Board.find(params[:board_id]) + params[:reply] = {} + params[:reply][:subject] = params[:subject] #本回复标题 + params[:reply][:content] = params[:content] #本回复内容 + params[:reply][:quote] = {} + params[:reply][:quote][:quote] = params[:quote] #本回复引用的内容,也是父id内容 + params[:reply][:parent_topic] = params[:parent_id] # 父id + params[:reply][:board_id] = params[:board_id] #讨论区id + params[:reply][:id] = params[:root_id] #根id + reply.safe_attributes = params[:reply] + if params[:root_id] == params[:parent_id] + reply.content = reply.content + else + reply.content = quote + reply.content + end + + Message.find(params[:root_id]).children << reply + reply + end + # # 开启匿评 # #statue 1:启动成功,2:启动失败,作业总数大于等于2份时才能启动匿评,3:已开启匿评,请务重复开启,4:没有开启匿评的权限 # def start_anonymous_comment params,current_user diff --git a/app/views/avatar/upload.js.erb b/app/views/avatar/upload.js.erb index 1fa90c5a3..41cf3ab77 100644 --- a/app/views/avatar/upload.js.erb +++ b/app/views/avatar/upload.js.erb @@ -1,4 +1,8 @@ +<% if @source_type=='User' %> +var imgSpan = $("img[nhname='avatar_image']"); +imgSpan.attr({"src":'<%= "#{@urlfile.to_s}?#{Time.now.to_i}" %>'}); +<% else %> var imgSpan = jQuery('#avatar_image'); imgSpan.attr({"src":'<%= "#{@urlfile.to_s}?#{Time.now.to_i}" %>'}); - +<% end %> \ No newline at end of file diff --git a/app/views/bids/new_contest.html.erb b/app/views/bids/new_contest.html.erb index 216816bd1..899aea1e7 100644 --- a/app/views/bids/new_contest.html.erb +++ b/app/views/bids/new_contest.html.erb @@ -1,10 +1,10 @@ - -

<%=l(:label_newtype_contest)%>

+ + -<%= labelled_form_for @bid, :url => {:controller => 'bids', :action => 'create_contest'} do |f| %> -
- <%= render :partial => 'form_contest', :locals => { :f => f } %> - <%= submit_tag l(:button_create) %> - <%= javascript_tag "$('#bid_name').focus();" %> - <% end %> -
\ No newline at end of file + + + + + + + \ No newline at end of file diff --git a/app/views/courses/_show_member_score.html.erb b/app/views/courses/_show_member_score.html.erb index bdc1fa147..2d08e853e 100644 --- a/app/views/courses/_show_member_score.html.erb +++ b/app/views/courses/_show_member_score.html.erb @@ -19,7 +19,7 @@
  • 作业名称得分
  • <% @member_score.homework_common_list.each do |homework_common| %>
  • - + <%= homework_common.name %> diff --git a/app/views/courses/finishcourse.js.erb b/app/views/courses/finishcourse.js.erb index 2399062fd..0ca89aa19 100644 --- a/app/views/courses/finishcourse.js.erb +++ b/app/views/courses/finishcourse.js.erb @@ -1,8 +1,8 @@ <% if @save_flag %> - $('#finish_course_<%=@course.id%>').replaceWith("<%= escape_javascript(set_course_time(@course_prefs))%>"); +$('#finish_course_<%=@course.id%>').replaceWith("<%= escape_javascript(set_course_time(@course_prefs))%>"); +var html = "<%= escape_javascript( render( :partial => 'users/course_form', :locals => {:item => @course_prefs} ) )%>"; +$('#nh_course_<%=@course.id%>').replaceWith(html); // alert("关闭成功"); <% else %> - alert('权限不足,设置失败,请在论坛提交问题,等待管理员处理。'); -<% end %> - - +alert('权限不足,设置失败,请在论坛提交问题,等待管理员处理。'); +<% end %> \ No newline at end of file diff --git a/app/views/courses/join_private_courses.js.erb b/app/views/courses/join_private_courses.js.erb index fecfb13cd..d1bce7d86 100644 --- a/app/views/courses/join_private_courses.js.erb +++ b/app/views/courses/join_private_courses.js.erb @@ -1,7 +1,8 @@ $('#ajax-modal').html('<%= escape_javascript(render :partial => 'join_private_course') %>'); showModal('ajax-modal', '540px'); $('#ajax-modal').css('height','330px'); -$('#ajax-modal').siblings().remove(); +//$('#ajax-modal').siblings().remove(); +$('#ajax-modal').siblings().hide(); $('#ajax-modal').before("" + ""); $('#ajax-modal').parent().removeClass("alert_praise"); diff --git a/app/views/files/searchone4reload.html.erb b/app/views/files/searchone4reload.html.erb index 4512e52dd..75dd7bcab 100644 --- a/app/views/files/searchone4reload.html.erb +++ b/app/views/files/searchone4reload.html.erb @@ -2,26 +2,29 @@ <% if file.is_public? || User.current.member_of_course?(course) %>
    - <%= link_to_attachment file, :download => true,:text => truncate(file.filename,length: 35, omission: '...'), :title => file.filename+"\n"+file.description.to_s,:class => "c_dblue f_14 f_b f_l hiddent" %> + <%= link_to truncate(file.filename,length: 35, omission: '...'), + download_named_attachment_path(file.id, file.filename), + :title => file.filename+"\n"+file.description.to_s, :style => "overflow: hidden; white-space: nowrap;text-overflow: ellipsis;",:class => "c_dblue f_14 f_b f_l" %> <% if User.current.logged? %> <% if (is_course_teacher(User.current,@course) || file.author_id == User.current.id) && course_contains_attachment?(@course,file) %> <%= link_to("选入我的其他课程",quote_resource_show_course_file_path(@course,file),:class => "f_l re_select c_lorange",:remote => true) if has_course?(User.current,file) %> <% if delete_allowed && file.container_id == @course.id && file.container_type == "Course" %> - - <%= link_to (file.is_public? ? "公开":"私有"), update_file_dense_attachments_path(:attachmentid=>file.id,:newtype=>(file.is_public? ? 0:1)),:remote=>true,:class=>"f_l re_open c_blue",:method => :post %> - + + <%= link_to (file.is_public? ? "公开":"私有"), update_file_dense_attachments_path(:attachmentid=>file.id,:newtype=>(file.is_public? ? 0:1)),:remote=>true,:class=>"f_l re_open c_blue",:method => :post %> + <% else %> <% end %> <% else %> <%= link_to("选入我的课程",quote_resource_show_course_file_path(@course,file),:class => "f_l re_select c_lorange",:remote => true) if has_course?(User.current,file) %> <% end %> + <%= file_preview_tag(file, class: 'f_l re_open') %> <% else %> <% end %>
    -
    +

    文件大小:<%= number_to_human_size(file.filesize) %>

    <%= link_to( l(:button_delete), attachment_path(file), :data => {:confirm => l(:text_are_you_sure)}, :method => :delete,:class => "f_r re_de") if delete_allowed && file.container_id == @course.id && file.container_type == "Course"%> diff --git a/app/views/homework_common/_homework_common_form.html.erb b/app/views/homework_common/_homework_detail_manual_form.html.erb similarity index 97% rename from app/views/homework_common/_homework_common_form.html.erb rename to app/views/homework_common/_homework_detail_manual_form.html.erb index 4542be9f5..ffec93e73 100644 --- a/app/views/homework_common/_homework_common_form.html.erb +++ b/app/views/homework_common/_homework_detail_manual_form.html.erb @@ -10,7 +10,6 @@
  • -
    <% if edit_mode %> <%= f.kindeditor :description,:editor_id => 'homework_description_editor',:owner_id => homework.id,:owner_type =>OwnerTypeHelper::HOMEWORKCOMMON %> diff --git a/app/views/homework_common/_homework_detail_programing_form.html.erb b/app/views/homework_common/_homework_detail_programing_form.html.erb new file mode 100644 index 000000000..806768954 --- /dev/null +++ b/app/views/homework_common/_homework_detail_programing_form.html.erb @@ -0,0 +1,125 @@ + + +
    +
    +

    编程评测设置

    +
    +
      +
    • + + +
      +
    • + +
    • + + <%= select_tag :ta_proportion,options_for_select(ta_proportion_option,homework.homework_detail_programing.ta_proportion), {:class => "fl mb10 h26 w70"} %> + × 教辅评分 +   +   + + × 系统评分 + = 学生得分 +
      +
    • +
    • + + 如果教师对学生作品进行了评分,则教师评分为学生最终得分。 +
      +
    • + +
    • + + +
      +
    • + + <% if edit_mode %> + <% homework.homework_tests.each do |homework_test|%> +
      +
    • + + +
    • +
    • + + +
    • +
    • + + + +
    • +
      +
      + <% end%> + <% else %> +
      +
    • + + +
    • +
    • + + +
    • +
    • + + + +
    • +
      +
      + <% end %> +
    +
    \ No newline at end of file diff --git a/app/views/homework_common/edit.html.erb b/app/views/homework_common/edit.html.erb index 50feca946..5b65b5982 100644 --- a/app/views/homework_common/edit.html.erb +++ b/app/views/homework_common/edit.html.erb @@ -7,10 +7,18 @@
    - <%= form_for @homework do |f| %> - <%= render :partial => 'homework_common/homework_common_form', :locals => { :homework => @homework,:f => f,:edit_mode => true } %> - 提交 - <%= link_to '取消',homework_common_index_path(:course => @course.id),:class => 'grey_btn fl'%> + <%if @homework.homework_type == 2%> + <%= form_for @homework do |f| %> + <%= render :partial => 'homework_common/homework_detail_programing_form', :locals => { :homework => @homework,:f => f,:edit_mode => true } %> + 提交 + <%= link_to '取消',homework_common_index_path(:course => @course.id),:class => 'grey_btn fl'%> + <% end%> + <% else %> + <%= form_for @homework do |f| %> + <%= render :partial => 'homework_common/homework_detail_manual_form', :locals => { :homework => @homework,:f => f,:edit_mode => true } %> + 提交 + <%= link_to '取消',homework_common_index_path(:course => @course.id),:class => 'grey_btn fl'%> + <% end%> <% end%>
    diff --git a/app/views/homework_common/index.html.erb b/app/views/homework_common/index.html.erb index db7dad9c7..2de96bca1 100644 --- a/app/views/homework_common/index.html.erb +++ b/app/views/homework_common/index.html.erb @@ -48,6 +48,32 @@
    + <% if homework.homework_type == 2 && homework.homework_detail_programing%> + + + "> + + + + <% homework.homework_tests.each do |test|%> + "> + + + + <% end%> + +
    + 输入 + + 输出 +
    + <%=test.input%> + + <%= test.output%> +
    + <% end%> +
    +
    <% unless homework.attachments.empty?%> 附件: diff --git a/app/views/homework_common/new.html.erb b/app/views/homework_common/new.html.erb index dc67b5079..01fcb9f4d 100644 --- a/app/views/homework_common/new.html.erb +++ b/app/views/homework_common/new.html.erb @@ -1,17 +1,27 @@ -<%= javascript_include_tag "/assets/kindeditor/kindeditor",'/assets/kindeditor/pasteimg' %> -<%= error_messages_for 'homework_common' %> -

    <%= l(:label_course_homework_new)%>

    -
    - <%= labelled_form_for @homework,:url => {:controller => 'homework_common',:action => 'create'} do |f| %> - <%= hidden_field_tag "course",@course.id%> - <%= render :partial => 'homework_common/homework_common_form', :locals => { :homework => @homework,:f => f,:edit_mode => false } %> - 提交 - <%= link_to '取消',homework_common_index_path(:course => @course.id),:class => 'grey_btn fl'%> +
    + <%= form_for("new_homework_common",:url => next_step_homework_common_index_path) do |f|%> + +

    + 请选择将要发布的作业类型 +

    + + + 人工评分的作业(支持匿名互评、灵活设置评分比例) + +
    + + + 自动评测的编程作业(支持C++程序的自动评分) + +
    + + 下一步 + <% end%>
    diff --git a/app/views/homework_common/next_step.html.erb b/app/views/homework_common/next_step.html.erb new file mode 100644 index 000000000..75e9f4c0a --- /dev/null +++ b/app/views/homework_common/next_step.html.erb @@ -0,0 +1,30 @@ +<%= javascript_include_tag "/assets/kindeditor/kindeditor" %> +<%= error_messages_for 'homework_common' %> +
    +

    + <%= l(:label_course_homework_new)%> +

    +
    +<% if @homework_type == "1"%> +
    + <%= labelled_form_for @homework,:url => {:controller => 'homework_common',:action => 'create'} do |f| %> + <%= hidden_field_tag "course",@course.id%> + <%= render :partial => 'homework_common/homework_detail_manual_form', :locals => { :homework => @homework,:f => f,:edit_mode => false } %> + 提交 + <%= link_to "上一步", new_homework_common_path(:course => @course.id), :class => "orange_btn_homework fl"%> + <%= link_to '取消',homework_common_index_path(:course => @course.id),:class => 'grey_btn fl'%> + <% end%> +
    +<% elsif @homework_type == "2"%> +
    + <%= labelled_form_for @homework,:url => {:controller => 'homework_common',:action => 'create'} do |f| %> + <%= hidden_field_tag "course",@course.id%> + <%= hidden_field_tag "homework_common[homework_type]","2"%> + <%= render :partial => 'homework_common/homework_detail_programing_form', :locals => { :homework => @homework,:f => f,:edit_mode => false } %> + 提交 + <%= link_to "上一步", new_homework_common_path(:course => @course.id), :class => "orange_btn_homework fl"%> + <%= link_to '取消',homework_common_index_path(:course => @course.id),:class => 'grey_btn fl'%> + <% end%> +
    +
    +<% end%> \ No newline at end of file diff --git a/app/views/layouts/_base_footer_new.html.erb b/app/views/layouts/_base_footer_new.html.erb new file mode 100644 index 000000000..b4856d2af --- /dev/null +++ b/app/views/layouts/_base_footer_new.html.erb @@ -0,0 +1,13 @@ + \ No newline at end of file diff --git a/app/views/layouts/_base_header.html.erb b/app/views/layouts/_base_header.html.erb index b800a1722..16fa44c73 100644 --- a/app/views/layouts/_base_header.html.erb +++ b/app/views/layouts/_base_header.html.erb @@ -101,10 +101,7 @@ addSlipMenu(); addProjectSlipMenu (); addCourseSlipMenu(); - }); - - jQuery(document).ready(function($) { - $('.sub_menu').find("a").attr('target', '_blank'); + $('.sub_menu').find("a").attr('target', '_blank'); $('.project_sub_menu').find("a").attr('target', '_blank'); $('.course_sub_menu').find("a").attr('target', '_blank'); }); diff --git a/app/views/layouts/_base_header_new.html.erb b/app/views/layouts/_base_header_new.html.erb new file mode 100644 index 000000000..71cf8ab02 --- /dev/null +++ b/app/views/layouts/_base_header_new.html.erb @@ -0,0 +1,77 @@ + +
    \ No newline at end of file diff --git a/app/views/layouts/_user_fans_list.html.erb b/app/views/layouts/_user_fans_list.html.erb new file mode 100644 index 000000000..8c39c528c --- /dev/null +++ b/app/views/layouts/_user_fans_list.html.erb @@ -0,0 +1,12 @@ + <% fans_count,fans_list = get_fans_users(user) %> +
    +

    粉丝

    更多 +
    +
    + <% for fans in fans_list %> + <%= link_to image_tag(url_to_avatar(fans), :style => "width:38px;height:38px;"), user_path(fans), :class => "pic_members", :title => "#{fans.name}" %> + <% end %> +
    +
    +
    + \ No newline at end of file diff --git a/app/views/layouts/_user_watch_btn.html.erb b/app/views/layouts/_user_watch_btn.html.erb new file mode 100644 index 000000000..71eea7166 --- /dev/null +++ b/app/views/layouts/_user_watch_btn.html.erb @@ -0,0 +1,8 @@ +<% if(User.current.logged? && User.current!=target)%> + <%if(target.watched_by?(User.current))%> + 取消 + <% else %> + 关注 + <% end %> +<% end %> \ No newline at end of file diff --git a/app/views/layouts/_user_watch_list.html.erb b/app/views/layouts/_user_watch_list.html.erb new file mode 100644 index 000000000..00c0cdc40 --- /dev/null +++ b/app/views/layouts/_user_watch_list.html.erb @@ -0,0 +1,11 @@ + <% watcher_count,watcher_list = get_watcher_users(user) %> +
    +

    关注

    更多 +
    +
    + <% for watcher in watcher_list %> + <%= link_to image_tag(url_to_avatar(watcher), :style => "width:38px;height:38px;"), user_path(watcher), :class => "pic_members", :title => "#{watcher.name}" %> + <% end %> +
    +
    +
    \ No newline at end of file diff --git a/app/views/layouts/base_users_new.html.erb b/app/views/layouts/base_users_new.html.erb new file mode 100644 index 000000000..ef6d82245 --- /dev/null +++ b/app/views/layouts/base_users_new.html.erb @@ -0,0 +1,332 @@ +<% @nav_dispaly_home_path_label = 1 + @nav_dispaly_main_course_label = 1 + @nav_dispaly_main_project_label = 1 + @nav_dispaly_main_contest_label = 1 %> +<% @nav_dispaly_forum_label = 1%> +<% @nav_dispaly_user_label = show_item_on_navbar(params) %> +<% @center_flag = (User.current == @user) %> + + + + +<%= h html_title %> + + +<%= csrf_meta_tag %> +<%= favicon %> +<%= stylesheet_link_tag 'jquery/jquery-ui-1.9.2', 'public_new', 'leftside_new','users', :media => 'all' %> +<%= stylesheet_link_tag 'rtl', :media => 'all' if l(:direction) == 'rtl' %> +<%= javascript_heads %> +<%= heads_for_theme %> +<%= call_hook :view_layouts_base_html_head %> + +<%= yield :header_tags -%> + + + + + + + +
    + <%= render :partial => 'layouts/base_header_new'%> + +
    + +
    +
    +
    + +
    + <%=link_to @user.name, user_path(@user),:class=>"fl c_dark fb f14" %> + <% if (@user.user_extensions && (@user.user_extensions.identity != 2) ) %> + + <% end %> + + <%= render :partial => 'layouts/user_watch_btn', :locals => {:target => @user} %> +
    +
    + +
    + <%=l(:label_user_watcher)%>(<%= link_to User.watched_by(@user.id).count.to_s, {:controller=>"users", :action=>"user_watchlist",:id=>@user.id},:class=>"c_blue",:nh_name=>"watcher_count" %>) + + <%=l(:label_x_user_fans, :count => User.current.watcher_users(User.current.id).count)%>(<%= link_to @user.watcher_users.count.to_s, {:controller=>"users", :action=>"user_fanslist",:id=>@user.id},:class=>"c_blue",:nh_name=>"fans_count"%>) + 积分(<%= link_to(format("%.2f" ,get_option_number(@user,1).total_score ).to_i, + {:controller => 'users', :action => 'show_new_score', :remote => true, :id => @user.id }, :class => 'c_blue',:id => 'user_score') %>) +
    +
    + <% if (@user.user_extensions) %> +
    <%= @user.user_extensions.brief_introduction %>
    + <% end %> +
    + +
    +
      +
    • 加入时间 :
    • + <% if @user.user_extensions!=nil && @user.user_extensions.identity == 2 %> +
    • <%= l(:label_company_name) %> :
    • + <% elsif !@user.firstname.empty? || !@user.lastname.empty? %> +
    • 真实姓名 :
    • + <% end %> + <% unless @user.user_extensions.nil? %> + <% if @user.user_extensions.identity == 0 %> +
    • 职称 :
    • + <% end %> + <% if @user.user_extensions && @user.user_extensions.location && !@user.user_extensions.location.empty?%> +
    • 地区 :
    • + <% end %> + <% if (@user.user_extensions.identity == 0 || @user.user_extensions.identity == 1) && !@user.user_extensions.school.nil? %> +
    • 工作单位 :
    • + <% elsif @user.user_extensions.identity == 3 && !@user.user_extensions.occupation.nil? && !@user.user_extensions.occupation.empty? %> +
    • 工作单位 :
    • + <% elsif @user.user_extensions.identity == 2 %> +
    • 工作单位 :
    • + <% end %> + <% if (!@user.user_extensions.description.nil? && !@user.user_extensions.description.empty?) %> +
    • 个人简介 :
    • + <% end %> + <% end %> +
    +
      +
    • <%= format_date(@user.created_on) %>
    • +
    • <%= @user.show_name %>
    • + <% unless @user.user_extensions.nil? %> + <% if @user.user_extensions.identity == 0 %> +
    • <%= get_technical_title @user %>
    • + <% end %> + <% if @user.user_extensions && @user.user_extensions.location && !@user.user_extensions.location.empty?%> +
    • <%= @user.user_extensions.location %>  <%= @user.user_extensions.location_city %>
    • + <% end %> + + <% if (@user.user_extensions.identity == 0 || @user.user_extensions.identity == 1) && !@user.user_extensions.school.nil? %> +
    • <%= @user.user_extensions.school.name %>
    • + <% elsif @user.user_extensions.identity == 3 && !@user.user_extensions.occupation.nil? && !@user.user_extensions.occupation.empty? %> +
    • <%= @user.user_extensions.occupation %>
    • + <% elsif @user.user_extensions.identity == 2 %> +
    • <%= @user.show_name %>
    • + <% end %> + <% if (!@user.user_extensions.description.nil? && !@user.user_extensions.description.empty?) %> +
    • <%= @user.user_extensions.description %>
    • + <% end %> + <% end %> +
    +
    +
    + + <% if @center_flag %> + + <% end %> +
    + +
    +
      + <% if !@user.user_extensions.nil? && @user.user_extensions.identity == 0 %> +
    • 创建课程 :
    • +
    • 发布作业 :
    • + <% end %> +
    • 加入课程 :
    • +
    • 参加匿评 :
    • +
    • 发布资源 :
    • +
    • 创建项目 :
    • +
    • 加入项目 :
    • +
    • 发布缺陷 :
    • +
    • 解决缺陷 :
    • +
    +
      + <% if !@user.user_extensions.nil? && @user.user_extensions.identity == 0 %> +
    • <%= get_create_course_count(@user) %>
    • +
    • <%= get_homework_commons_count(@user) %>
    • + <% end %> +
    • <%= get_join_course_count(@user) %>
    • +
    • <%= get_anonymous_evaluation_count(@user) %>
    • +
    • <%= get_projectandcourse_attachment_count(@user) %>
    • +
    • <%= get_create_project_count(@user) %>
    • +
    • <%= get_join_project_count(@user) %>
    • +
    • <%= get_create_issue_count(@user) %>
    • +
    • <%= get_resolve_issue_count(@user) %>
    • +
    +
    +
    + +
    + + <%= render :partial => 'layouts/user_watch_list', :locals => {:user => @user} %> + <%= render :partial => 'layouts/user_fans_list', :locals => {:user => @user} %> + <% visitor_count,visitor_list = get_visitor_users(@user) %> +
    +

    访客

    更多 +
    +
    + <% for visitor in visitor_list %> + <%= link_to image_tag(url_to_avatar(visitor.user), :style => "width:38px;height:38px;"), user_path(visitor.user), :class => "pic_members", :title => "#{visitor.user.name}" %> + <% end %> +
    +
    +
    + +
    + + <%= yield %> + +
    +
    + + <%= render :partial => 'layouts/new_footer'%> +
    +
    + +<%= render :partial => 'layouts/new_feedback' %> + + +<%= javascript_include_tag '/javascripts/avatars.js' %> + + + + diff --git a/app/views/my/account.html.erb b/app/views/my/account.html.erb index 6c0c3a78a..c23266afd 100644 --- a/app/views/my/account.html.erb +++ b/app/views/my/account.html.erb @@ -1,743 +1,552 @@ -<% @nav_dispaly_home_path_label = 1 - @nav_dispaly_main_course_label = 1 - @nav_dispaly_main_project_label = 1 - @nav_dispaly_main_contest_label = 1 %> -<% @nav_dispaly_forum_label = 1%> - - - - -
    - <%= link_to(l(:button_change_password), {:action => 'password'}, :class => 'icon icon-passwd') if @user.change_password_allowed? %> - <%= call_hook(:view_my_account_contextual, :user => @user) %> -
    - -

    - <%= l(:label_my_account) %> -

    -<%= error_messages_for 'user' %> -
    -<%= labelled_form_for :user, @user, - :url => {:action => "account"}, - :html => {:id => 'my_account_form', - - :method => :post} do |f| %> - - +
    - +
    + +

    <%= l(:lable_school_list)%>

    +    +
    +
      + <% @ss = School.find_by_sql("select distinct province from schools") %> + <% @ss.each do |s| %> +
    • + <%= s.province %> + +
    • + <% end %> +
    +
    + +
    +
      + +
    +
    +
    - - - - - +<%= stylesheet_link_tag 'nyan' %> +<%= javascript_include_tag '/javascripts/jquery.leanModal.min.js' %> +<% if !User.current.user_extensions.nil? %> + <% province = User.current.user_extensions.location %> + <% city = User.current.user_extensions.location_city %> + <% identity = User.current.user_extensions.identity %> + <% occupation1 = User.current.user_extensions.occupation %> + <% occupation = User.current.user_extensions.occupation %> + <% title = User.current.user_extensions.technical_title %> + <% language = User.current.language %> +<% else %> + <% province = "湖南省" %> + <% city = "长沙"%> + <% identity = ""%> + <% occupation1 = ""%> + <% title = "" %> + <% language = ""%> <% end %> -<% html_title(l(:label_my_account)) -%> - + \ No newline at end of file diff --git a/app/views/my/clear_user_avatar_temp.js.erb b/app/views/my/clear_user_avatar_temp.js.erb new file mode 100644 index 000000000..9513bdac4 --- /dev/null +++ b/app/views/my/clear_user_avatar_temp.js.erb @@ -0,0 +1,7 @@ + $("img[nhname='avatar_image']").attr('src',$("#nh_user_tx").attr('src')); + $('#ajax-modal').html($("#nh_tx_dialog_html").html()); + showModal('ajax-modal','460px'); + $('#ajax-modal').siblings().hide(); + $('#ajax-modal').parent().removeClass("alert_praise"); + //$('#ajax-modal').parent().css("top","").css("left",""); + $('#ajax-modal').parent().addClass("alert_box"); \ No newline at end of file diff --git a/app/views/my/save_user_avatar.js.erb b/app/views/my/save_user_avatar.js.erb new file mode 100644 index 000000000..ce4bae501 --- /dev/null +++ b/app/views/my/save_user_avatar.js.erb @@ -0,0 +1,2 @@ +$("#nh_user_tx").replaceWith('<%= image_tag(url_to_avatar(@user), :id=>'nh_user_tx',:style=>"width:216px;height:216px;",:alt=>"头像") %>'); +hideModal(); \ No newline at end of file diff --git a/app/views/projects/join_project.js.erb b/app/views/projects/join_project.js.erb index 85e9e294b..92cdfcf2c 100644 --- a/app/views/projects/join_project.js.erb +++ b/app/views/projects/join_project.js.erb @@ -1,7 +1,8 @@ $('#ajax-modal').html('<%= escape_javascript(render :partial => 'projects/join_project') %>'); showModal('ajax-modal', '540px'); $('#ajax-modal').css('height','260px'); -$('#ajax-modal').siblings().remove(); +//$('#ajax-modal').siblings().remove(); +$('#ajax-modal').siblings().hide(); $('#ajax-modal').before("" + ""); $('#ajax-modal').parent().removeClass("alert_praise"); diff --git a/app/views/repositories/stats.html.erb b/app/views/repositories/stats.html.erb index 5fd791810..7e558119f 100644 --- a/app/views/repositories/stats.html.erb +++ b/app/views/repositories/stats.html.erb @@ -4,7 +4,7 @@

    <%= tag("embed", :width => 670, :height => 300, :type => "image/svg+xml", :src => url_for(:controller => 'repositories', :action => 'graph', :id => @project, :repository_id => @repository.identifier_param, :graph => "commits_per_month")) %>

    -

    +

    <%= tag("embed", :width => 670, :height => 400, :type => "image/svg+xml", :src => url_for(:controller => 'repositories', :action => 'graph', :id => @project, :repository_id => @repository.identifier_param, :graph => "commits_per_author")) %>

    <%= link_to l(:button_back), :action => 'show', :id => @project %>

    diff --git a/app/views/student_work/_evaluation_student_work.html.erb b/app/views/student_work/_evaluation_student_work.html.erb index 0f66452c7..b5bdd6f55 100644 --- a/app/views/student_work/_evaluation_student_work.html.erb +++ b/app/views/student_work/_evaluation_student_work.html.erb @@ -9,7 +9,7 @@ <%= link_to student_work.user.show_name,user_path(student_work.user),:title => student_work.user.show_name, :class => "c_blue02"%>
  • - <%= link_to student_work.name, student_work_path(student_work),:remote => true,:title => student_work.name, :class => "c_blue02"%> + <%= link_to student_work.name, student_work_path(student_work.id),:remote => true,:title => student_work.name, :class => "c_blue02"%>
  • <% if Time.parse(@homework.end_time.to_s).strftime("%Y-%m-%d") < Time.parse(student_work.created_at.to_s).strftime("%Y-%m-%d") %> @@ -26,7 +26,7 @@
  • <%= student_work.student_score.nil? ? "--" : format("%.1f",student_work.student_score)%> - <% unless student_work.student_score.nil?%> + <% unless student_work.student_score.nil? || student_work.homework_common.homework_type == 2%> (<%= student_work.student_works_scores.where(:reviewer_role => 3).count%>) diff --git a/app/views/student_work/_evaluation_student_work_title.html.erb b/app/views/student_work/_evaluation_student_work_title.html.erb index 0e4151065..f19438f78 100644 --- a/app/views/student_work/_evaluation_student_work_title.html.erb +++ b/app/views/student_work/_evaluation_student_work_title.html.erb @@ -2,42 +2,46 @@ 学号
  • - <%= link_to "姓名",@show_all ? student_work_index_path(:homework => @homework.id,:order => "name", :sort => @score, :name => @name) : "javascript:void(0)",:class => "f14 f_b c_dark fl"%> + <%= link_to "姓名",@show_all ? student_work_index_path(:homework => @homework.id,:order => "name", :sort => @score, :name => @name, :group => @group) : "javascript:void(0)",:class => "f14 f_b c_dark fl"%> <% if @show_all && @order == "name"%> - + <%= link_to "",student_work_index_path(:homework => @homework.id,:order => "name", :sort => @score, :name => @name, :group => @group) ,:class => @score == 'desc' ? 'st_up' : 'st_down'%> <% end%>
  • 作品名称
  • - <%= link_to "时间",@show_all ? student_work_index_path(:homework => @homework.id,:order => "created_at", :sort => @score, :name => @name) : "javascript:void(0)",:class => "f14 f_b c_dark fl"%> + <%= link_to "时间",@show_all ? student_work_index_path(:homework => @homework.id,:order => "created_at", :sort => @score, :name => @name, :group => @group) : "javascript:void(0)",:class => "f14 f_b c_dark fl"%> <% if @show_all && @order == "created_at"%> - <%= link_to "",student_work_index_path(:homework => @homework.id,:order => "created_at", :sort => @score, :name => @name) ,:class => @score == 'desc' ? 'st_up' : 'st_down'%> + <%= link_to "",student_work_index_path(:homework => @homework.id,:order => "created_at", :sort => @score, :name => @name, :group => @group) ,:class => @score == 'desc' ? 'st_up' : 'st_down'%> <% end%>
  • - <%= link_to "教师",@show_all ? student_work_index_path(:homework => @homework.id,:order => "teacher_score", :sort => @score, :name => @name) : "javascript:void(0)",:class => "f14 f_b c_dark fl"%> + <%= link_to "教师",@show_all ? student_work_index_path(:homework => @homework.id,:order => "teacher_score", :sort => @score, :name => @name, :group => @group) : "javascript:void(0)",:class => "f14 f_b c_dark fl"%> <% if @show_all && @order == "teacher_score"%> - <%= link_to "", student_work_index_path(:homework => @homework.id,:order => "teacher_score", :sort => @score, :name => @name) ,:class => @score == 'desc' ? 'st_up' : 'st_down'%> + <%= link_to "", student_work_index_path(:homework => @homework.id,:order => "teacher_score", :sort => @score, :name => @name, :group => @group) ,:class => @score == 'desc' ? 'st_up' : 'st_down'%> <% end%>
  • - <%= link_to "教辅",@show_all ? student_work_index_path(:homework => @homework.id,:order => "teaching_asistant_score", :sort => @score, :name => @name) : "javascript:void(0)",:class => "f14 f_b c_dark fl"%> + <%= link_to "教辅",@show_all ? student_work_index_path(:homework => @homework.id,:order => "teaching_asistant_score", :sort => @score, :name => @name, :group => @group) : "javascript:void(0)",:class => "f14 f_b c_dark fl"%> <% if @show_all && @order == "teaching_asistant_score"%> - <%= link_to "", student_work_index_path(:homework => @homework.id,:order => "teaching_asistant_score", :sort => @score, :name => @name) ,:class => @score == 'desc' ? 'st_up' : 'st_down'%> + <%= link_to "", student_work_index_path(:homework => @homework.id,:order => "teaching_asistant_score", :sort => @score, :name => @name, :group => @group) ,:class => @score == 'desc' ? 'st_up' : 'st_down'%> <% end%>
  • -
  • - <%= link_to "匿评",@show_all ? student_work_index_path(:homework => @homework.id,:order => "student_score", :sort => @score, :name => @name) : "javascript:void(0)",:class => "f14 f_b c_dark fl"%> +
  • + <% if @homework.homework_type == 1%> + <%= link_to "匿评",@show_all ? student_work_index_path(:homework => @homework.id,:order => "student_score", :sort => @score, :name => @name, :group => @group) : "javascript:void(0)",:class => "f14 f_b c_dark fl"%> + <% elsif @homework.homework_type == 2%> + <%= link_to "系统",@show_all ? student_work_index_path(:homework => @homework.id,:order => "student_score", :sort => @score, :name => @name, :group => @group) : "javascript:void(0)",:class => "f14 f_b c_dark fl"%> + <% end %> <% if @show_all && @order == "student_score"%> - <%= link_to "", student_work_index_path(:homework => @homework.id,:order => "student_score", :sort => @score, :name => @name) ,:class => @score == 'desc' ? 'st_up' : 'st_down'%> + <%= link_to "", student_work_index_path(:homework => @homework.id,:order => "student_score", :sort => @score, :name => @name, :group => @group) ,:class => @score == 'desc' ? 'st_up' : 'st_down'%> <% end%>
  • - <%= link_to "成绩",@show_all ? student_work_index_path(:homework => @homework.id,:order => "score", :sort => @score, :name => @name) : "javascript:void(0)",:class => "f14 f_b c_dark fl"%> + <%= link_to "成绩",@show_all ? student_work_index_path(:homework => @homework.id,:order => "score", :sort => @score, :name => @name, :group => @group) : "javascript:void(0)",:class => "f14 f_b c_dark fl"%> <% if @show_all && @order == "score"%> - <%= link_to "", student_work_index_path(:homework => @homework.id,:order => "score", :sort => @score, :name => @name) ,:class => @score == 'desc' ? 'st_up' : 'st_down'%> + <%= link_to "", student_work_index_path(:homework => @homework.id,:order => "score", :sort => @score, :name => @name, :group => @group) ,:class => @score == 'desc' ? 'st_up' : 'st_down'%> <% end%>
  • \ No newline at end of file diff --git a/app/views/student_work/_programing_work_show.html.erb b/app/views/student_work/_programing_work_show.html.erb new file mode 100644 index 000000000..8060b8a79 --- /dev/null +++ b/app/views/student_work/_programing_work_show.html.erb @@ -0,0 +1,75 @@ +
    +
    + + +
    + <%@work.student_works_scores.order("updated_at desc").each do |score|%> +
    + <%= render :partial => 'student_work_score',:locals => {:score => score}%> +
    + <% end%> +
    + 收起 +
    \ No newline at end of file diff --git a/app/views/student_work/_show.html.erb b/app/views/student_work/_show.html.erb index dfe61d3db..2b7d49402 100644 --- a/app/views/student_work/_show.html.erb +++ b/app/views/student_work/_show.html.erb @@ -36,7 +36,7 @@
  • 内容:
    - <%= textilizable @work.description%> + <%= text_format @work.description%>
  • diff --git a/app/views/student_work/_student_work_title.html.erb b/app/views/student_work/_student_work_title.html.erb index c46f7dc79..24e6a1b37 100644 --- a/app/views/student_work/_student_work_title.html.erb +++ b/app/views/student_work/_student_work_title.html.erb @@ -2,36 +2,36 @@ 学号
  • - <%= link_to "姓名",@show_all ? student_work_index_path(:homework => @homework.id,:order => "name", :sort => @score, :name => @name) : "javascript:void(0)",:class => "f14 f_b c_dark fl"%> + <%= link_to "姓名",@show_all ? student_work_index_path(:homework => @homework.id,:order => "name", :sort => @score, :name => @name, :group => @group) : "javascript:void(0)",:class => "f14 f_b c_dark fl"%> <% if @show_all && @order == "name"%> - + <%= link_to "",student_work_index_path(:homework => @homework.id,:order => "name", :sort => @score, :name => @name, :group => @group) ,:class => @score == 'desc' ? 'st_up' : 'st_down'%> <% end%>
  • 作品名称
  • - <%= link_to "时间",@show_all ? student_work_index_path(:homework => @homework.id,:order => "created_at", :sort => @score, :name => @name) : "javascript:void(0)",:class => "f14 f_b c_dark fl"%> + <%= link_to "时间",@show_all ? student_work_index_path(:homework => @homework.id,:order => "created_at", :sort => @score, :name => @name, :group => @group) : "javascript:void(0)",:class => "f14 f_b c_dark fl"%> <% if @show_all && @order == "created_at"%> - <%= link_to "",student_work_index_path(:homework => @homework.id,:order => "created_at", :sort => @score, :name => @name) ,:class => @score == 'desc' ? 'st_up' : 'st_down'%> + <%= link_to "",student_work_index_path(:homework => @homework.id,:order => "created_at", :sort => @score, :name => @name, :group => @group) ,:class => @score == 'desc' ? 'st_up' : 'st_down'%> <% end%>
  • - <%= link_to "教师",@show_all ? student_work_index_path(:homework => @homework.id,:order => "teacher_score", :sort => @score, :name => @name) : "javascript:void(0)",:class => "f14 f_b c_dark fl"%> + <%= link_to "教师",@show_all ? student_work_index_path(:homework => @homework.id,:order => "teacher_score", :sort => @score, :name => @name, :group => @group) : "javascript:void(0)",:class => "f14 f_b c_dark fl"%> <% if @show_all && @order == "teacher_score"%> - <%= link_to "", student_work_index_path(:homework => @homework.id,:order => "teacher_score", :sort => @score, :name => @name) ,:class => @score == 'desc' ? 'st_up' : 'st_down'%> + <%= link_to "", student_work_index_path(:homework => @homework.id,:order => "teacher_score", :sort => @score, :name => @name, :group => @group) ,:class => @score == 'desc' ? 'st_up' : 'st_down'%> <% end%>
  • - <%= link_to "教辅",@show_all ? student_work_index_path(:homework => @homework.id,:order => "teaching_asistant_score", :sort => @score, :name => @name) : "javascript:void(0)",:class => "f14 f_b c_dark fl"%> + <%= link_to "教辅",@show_all ? student_work_index_path(:homework => @homework.id,:order => "teaching_asistant_score", :sort => @score, :name => @name, :group => @group) : "javascript:void(0)",:class => "f14 f_b c_dark fl"%> <% if @show_all && @order == "teaching_asistant_score"%> - <%= link_to "", student_work_index_path(:homework => @homework.id,:order => "teaching_asistant_score", :sort => @score, :name => @name) ,:class => @score == 'desc' ? 'st_up' : 'st_down'%> + <%= link_to "", student_work_index_path(:homework => @homework.id,:order => "teaching_asistant_score", :sort => @score, :name => @name, :group => @group) ,:class => @score == 'desc' ? 'st_up' : 'st_down'%> <% end%>
  • - <%= link_to "成绩",@show_all ? student_work_index_path(:homework => @homework.id,:order => "score", :sort => @score, :name => @name) : "javascript:void(0)",:class => "f14 f_b c_dark fl"%> + <%= link_to "成绩",@show_all ? student_work_index_path(:homework => @homework.id,:order => "score", :sort => @score, :name => @name, :group => @group) : "javascript:void(0)",:class => "f14 f_b c_dark fl"%> <% if @show_all && @order == "score"%> - <%= link_to "", student_work_index_path(:homework => @homework.id,:order => "score", :sort => @score, :name => @name) ,:class => @score == 'desc' ? 'st_up' : 'st_down'%> + <%= link_to "", student_work_index_path(:homework => @homework.id,:order => "score", :sort => @score, :name => @name, :group => @group) ,:class => @score == 'desc' ? 'st_up' : 'st_down'%> <% end%>
  • \ No newline at end of file diff --git a/app/views/student_work/add_score.js.erb b/app/views/student_work/add_score.js.erb index 9298de8fc..1de92b51a 100644 --- a/app/views/student_work/add_score.js.erb +++ b/app/views/student_work/add_score.js.erb @@ -2,20 +2,23 @@ $("#add_student_score_<%= @work.id%>").html("<%= escape_javascript(render :parti $('#score_<%= @work.id%>').peSlider({range: 'min'}); <% if @is_new%> -$("#score_list_<%= @work.id%>").prepend("
    <%= escape_javascript(render :partial => 'student_work_score', :locals => {:score => @score}) %>
    "); + $("#score_list_<%= @work.id%>").prepend("
    <%= escape_javascript(render :partial => 'student_work_score', :locals => {:score => @score}) %>
    "); <% else %> -$("#work_score_<%= @score.id%>").html("<%= escape_javascript(render :partial => 'student_work_score', :locals => {:score => @score}) %>"); + $("#work_score_<%= @score.id%>").html("<%= escape_javascript(render :partial => 'student_work_score', :locals => {:score => @score}) %>"); <% end%> + $("#score_list_<%= @work.id%>").removeAttr("style"); <% if @is_teacher %> -<% if @homework.homework_type == 1%> -$("#student_work_<%= @work.id%>").replaceWith("<%= escape_javascript(render :partial => 'evaluation_student_work',:locals => {:student_work => @work}) %>"); -<% else%> -$("#student_work_<%= @work.id%>").replaceWith("<%= escape_javascript(render :partial => 'student_work',:locals => {:student_work => @work}) %>"); -<% end%> + <% if @homework.homework_type == 1%> + $("#student_work_<%= @work.id%>").replaceWith("<%= escape_javascript(render :partial => 'evaluation_student_work',:locals => {:student_work => @work}) %>"); + <% elsif @homework.homework_type == 2%> + $("#student_work_<%= @work.id%>").replaceWith("<%= escape_javascript(render :partial => 'evaluation_student_work',:locals => {:student_work => @work}) %>"); + <% else%> + $("#student_work_<%= @work.id%>").replaceWith("<%= escape_javascript(render :partial => 'student_work',:locals => {:student_work => @work}) %>"); + <% end%> <% else %> -$("#student_work_<%= @work.id%>").replaceWith("<%= escape_javascript(render :partial => 'evaluation_work',:locals => {:student_work => @work}) %>"); + $("#student_work_<%= @work.id%>").replaceWith("<%= escape_javascript(render :partial => 'evaluation_work',:locals => {:student_work => @work}) %>"); <% end%> diff --git a/app/views/student_work/edit.html.erb b/app/views/student_work/edit.html.erb index dfa995f47..6e36447d2 100644 --- a/app/views/student_work/edit.html.erb +++ b/app/views/student_work/edit.html.erb @@ -2,14 +2,6 @@

    编辑作品

    - - - - - - - -
    <%= labelled_form_for @work,:html => { :multipart => true } do |f|%> diff --git a/app/views/student_work/index.html.erb b/app/views/student_work/index.html.erb index 76ae71459..781277b57 100644 --- a/app/views/student_work/index.html.erb +++ b/app/views/student_work/index.html.erb @@ -48,8 +48,9 @@ <%= link_to "所有作品(#{@stundet_works.count})".html_safe,student_work_index_path(:homework => @homework.id), :class => "fl"%> <% if @show_all%> - - 搜索 + + <%= select_tag(:late_penalty,options_for_select(course_group_list(@course),@group), {:class => "fl h22 w100 ml10"}) if(@is_teacher && course_group_list(@course).count > 0) %> + 搜索 <%= link_to("缺评情况",student_work_absence_penalty_student_work_index_path(:homework => @homework.id), :class => "student_work_search fl", :target => "_blank") if((@is_teacher || User.current.admin?) && @homework.homework_type == 1) %> <% end%> <% if @is_teacher%> @@ -89,7 +90,7 @@
    <% end%> <% else %> - <% if @homework.homework_type == 1%> + <% if @homework.homework_type == 1 || @homework.homework_type == 2%>
      <%= render :partial => 'evaluation_student_work_title'%>
    @@ -126,13 +127,31 @@ <%= student_anonymous_comment @homework %> <%= student_new_homework @homework %> <% end %> -
    +
    <%= @homework.description.html_safe %>
    +
    + <% if @homework.homework_type == 2 && @homework.homework_detail_programing%> + + + <% @homework.homework_tests.each do |test|%> + "> + + + + <% end%> + +
    + <%=test.input%> + + <%= test.output%> +
    + <% end%>
    +
    <% unless @homework.attachments.empty?%> 附件: @@ -146,15 +165,10 @@
    扣分标准:
    - 迟交扣 - <%= @homework.late_penalty%> - 分 <% if @homework.homework_type == 1%> - ,缺评一个作品扣 - <%= @homework.homework_detail_manual.absence_penalty%> - 分 + <%= scoring_rules @homework.late_penalty,@homework.id,@is_teacher,@homework.homework_detail_manual.absence_penalty%> <% else%> - 。 + <%= scoring_rules @homework.late_penalty,@homework.id,@is_teacher%> <% end%>
    diff --git a/app/views/student_work/new.html.erb b/app/views/student_work/new.html.erb index b4162c4da..eda09114e 100644 --- a/app/views/student_work/new.html.erb +++ b/app/views/student_work/new.html.erb @@ -33,9 +33,12 @@

    <%= f.text_field "name", :required => true, :size => 60, :class => "bo fl", :maxlength => 200, :placeholder => "作品名称", :onkeyup => "regexStudentWorkName();" %> - 项目信息 - - + <% if @homework.homework_type != 2%> + + 项目信息 + + + <% end%>

    @@ -46,17 +49,23 @@

    - - <%= f.text_area "description", :class => "w620 hwork_txt ", :maxlength => 3000, :placeholder => "最多3000个汉字", :onkeyup => "regexStudentWorkDescription();"%> + + <%= f.text_area "description", :class => "w620 hwork_txt ", :placeholder => "作品描述不能为空", :onkeyup => "regexStudentWorkDescription();"%>

    -

    - - <%= render :partial => 'attachments/new_form' %> -

    -
    + <% if @homework.homework_type != 2%> +

    + + <%= render :partial => 'attachments/new_form' %> +

    +
    + <% end%>

    提交作品 <%= link_to "返  回".html_safe, student_work_index_path(:homework => @homework), :class => "blue_btn grey_btn fl c_white"%> diff --git a/app/views/student_work/set_program_score.html.erb b/app/views/student_work/set_program_score.html.erb new file mode 100644 index 000000000..6ea169c64 --- /dev/null +++ b/app/views/student_work/set_program_score.html.erb @@ -0,0 +1 @@ +成功 \ No newline at end of file diff --git a/app/views/student_work/show.js.erb b/app/views/student_work/show.js.erb index fa12e097d..1c8874c2f 100644 --- a/app/views/student_work/show.js.erb +++ b/app/views/student_work/show.js.erb @@ -2,6 +2,10 @@ if($("#about_hwork_<%= @work.id%>").children().length > 0) {$("#about_hwork_<%= @work.id%>").html("");} else { - $("#about_hwork_<%= @work.id%>").html("<%= escape_javascript(render :partial => 'show') %>"); + <% if @homework.homework_type == 2%> + $("#about_hwork_<%= @work.id%>").html("<%= escape_javascript(render :partial => 'programing_work_show') %>"); + <% else%> + $("#about_hwork_<%= @work.id%>").html("<%= escape_javascript(render :partial => 'show') %>"); + <% end%> $('#score_<%= @work.id%>').peSlider({range: 'min'}); } \ No newline at end of file diff --git a/app/views/users/_course_form.html.erb b/app/views/users/_course_form.html.erb index 82b69ab63..3a6b317f0 100644 --- a/app/views/users/_course_form.html.erb +++ b/app/views/users/_course_form.html.erb @@ -1,74 +1,46 @@ -

    -
      - <% for membership in memberships %> -
    • - - - - - -
      - <%= image_tag(url_to_avatar(membership.course), :class => 'avatar') %> - - - - - - - - - - - -
      - - <%= link_to_course(membership.course) %> - - - <%= render :partial => 'courses/set_course_time', :locals => {:course => membership.course} %> - <% if (User.current == @user && (!@user.allowed_to?(:as_teacher,membership.course)))%> - <%= join_in_course(membership.course, User.current) %> - <% end %> - -      - <%= l(:label_x_base_courses_member, :count => membership.course.members.count) %> - (<%= "#{membership.course.members.count}" %>) -    - <%= l(:label_homework) %> - ( - - <%= link_to (membership.course.homework_commons.count), homework_common_index_path(:course => membership.course.id) %> - - ) -    - <%= l(:label_course_news) %> - ( - - <%= link_to (membership.course.news.count), {:controller => 'news', :action => 'index', :course_id => membership.course.id} %> - ) - -
      -

      - <%= textilizable membership.course.short_description %> -

      -
      - - <% @course = Course.find_by_extra(membership.course.extra) %> - <% unless (@course.nil? || @course.teacher.nil? || @course.teacher.name.nil?) %> - - <%= l(:label_main_teacher) %> - : <%= link_to(@course.teacher.realname, user_path(@course.teacher)) %> - - - <%= l(:label_course_term) %> - : <%= @course.time %><%= get_course_term_locales @course %> - - <% end %> -
      -
      -
    • - +<% can_edit_flag = User.current.allowed_to?(:as_teacher,item) || User.current.admin? %> +<% course_end_flag = course_endTime_timeout?(item) %> +
    -
    -<%= call_hook :view_account_left_bottom, :user => @user %> \ No newline at end of file +
    +
    + + + + + + + + + + + + + +
    主讲老师: + <%= item.teacher.show_name %> + 课程作业:<%= item.homework_commons.count %>
    学生人数:item.id,:role=>2, :host=>Setting.host_course) %>"><%= studentCount(item) %>开课学期:<%= item.time %><%= get_course_term_locales item %>
    +
    +
    + <% if(course_end_flag) %> + 课程结束 + <% elsif(can_edit_flag) %> + 发布作业 + <% else %> + 提交作品 + <% end %> +
    +
    \ No newline at end of file diff --git a/app/views/users/_show_new_score.html.erb b/app/views/users/_show_new_score.html.erb index c0e731a65..2081c38d6 100644 --- a/app/views/users/_show_new_score.html.erb +++ b/app/views/users/_show_new_score.html.erb @@ -4,7 +4,7 @@
    - +
    <%= image_tag(url_to_avatar(@user), :class => 'avatar2') %><%= image_tag(url_to_avatar(@user), :class => 'avatar2',:style=>'max-width:150px;max-height:150px;') %> diff --git a/app/views/users/_user_fans_item.html.erb b/app/views/users/_user_fans_item.html.erb new file mode 100644 index 000000000..66181d23b --- /dev/null +++ b/app/views/users/_user_fans_item.html.erb @@ -0,0 +1,50 @@ +
    + +
    + <%= item.show_name %> +
    +
    + <% if item.user_extensions && !item.user_extensions.brief_introduction.nil? && !item.user_extensions.brief_introduction.empty? %> +

    个性签名:<%= item.user_extensions.brief_introduction %>

    + <% end %> +
    <%= h @user.name %>
    + + + <% if (item.user_extensions.identity == 0 || item.user_extensions.identity == 1) && !item.user_extensions.school.nil? %> + + + <% elsif item.user_extensions.identity == 3 && !item.user_extensions.occupation.nil? && !item.user_extensions.occupation.empty? %> + + + <% elsif item.user_extensions.identity == 2 %> + + + <% end %> +
    加入时间:<%= format_date(item.created_on) %>工作单位: +
  • + <%= item.user_extensions.school.name %> +
  • +
    工作单位: +
  • + <%= item.user_extensions.occupation %> +
  • +
    工作单位: +
  • + <%= item.show_name %> +
  • +
    + + + <% if(User.current.logged? && User.current != item )%> + <%if(item.watched_by?(User.current))%> + 取消关注 + <% else %> + 添加关注 + <% end %> + <% end %> +
    + diff --git a/app/views/users/show.html.erb b/app/views/users/show.html.erb index 496211e82..efe5d0539 100644 --- a/app/views/users/show.html.erb +++ b/app/views/users/show.html.erb @@ -1,661 +1,348 @@ -<% if User.current.id == @user.id %> - -
    - <%= form_tag(:controller => 'users', :action => "show") do %> - + +<%= javascript_include_tag "/assets/kindeditor/kindeditor",'/assets/kindeditor/pasteimg' %> +<% @center_flag = (User.current == @user) %> +<% if @center_flag %> +
    + + <% if @user.allowed_to?(:add_project, nil, :global => true) %> + 新建项目 + <% else %> + 加入项目 <% end %> -<% end %> - -<%= render_flash_messages %> -<% unless @state == 2 %> - <% unless @activity.empty? %> -
    - <% @activity.each do |e| %> - <%# 以下一行代码解决有未知的活动无法转换成Model报错%> - <% (Rails.logger.error "[Error] =========================================================> NameError: uninitialized constant " + e.act_type.to_s; next;) if e.act_type.safe_constantize.nil? %> - <% act = e.act %> - <% unless act.nil? %> - <% if e.act_type == 'JournalsForMessage' || e.act_type == 'HomeworkCommon' || e.act_type == 'Journal'|| e.act_type == 'Changeset' || e.act_type == 'Message' || e.act_type == 'Principal' || e.act_type == 'News' || e.act_type == 'Issue' || e.act_type == 'Contest' %> - - - - - -
    - <%= image_tag(url_to_avatar(e.user), :class => "avatar") %> - - - <% case e.act_type %> - <% when 'JournalsForMessage' %> - - - - - - - - - - <% when 'HomeworkCommon' %> - - <% if e.user == User.current %> - - <% else %> - - <% end %> - - - - - - - - <% when 'Journal' %> - - <% if e.user == User.current %> - - <% else %> - - <% end %> - - - <% if act.notes.nil? %> - <% desStr = '' %> - <% else %> - <% desStr= textAreailizable(act, :notes) %> - <% end %> - - - - - - <% when 'Changeset' %> - - <% if e.user == User.current %> - - <% else %> - - <% end %> - - - - - - - - <% when 'Message' %> - - <% if e.user == User.current %> - - <% else %> - - <% end %> - - - - - - - - <% when 'Principal' %> - - <% if e.user == User.current %> - - <% else %> - - <% end %> - - - - - - - - <% when 'News' %> - - <% if e.user == User.current %> - - <% else %> - - <% end %> - - - - - - - - <% when 'Issue' %> - <% if e.user == User.current %> - + <% if @user.user_extensions.identity == 0 && @user.allowed_to?(:add_course, nil, :global => true) %> + 新建课程 + <% else %> + + 加入课程 + <% end %> +
    + +<% end %> - - - - - - - - - <% else %> - - - - - - - - +
    +
    +
    +
    + +

    +
    + 取消 + 留言 + +
    +
    - <% end %> + +
    - <% when 'Contest' %> -
    - <% if e.user == User.current && @show_contest == 1 %> - - <% else %> - - <% end %> - - - - - - - <% else %> - <% end %> -
    - <% if User.current.login == e.user.try(:login) %> - - <%= link_to("#{l(:label_i)}", user_path(e.user_id)) %> - -   - <% if User.current.language == "zh" %> - - <%= l(:label_i_have_feedback) %> - <%= link_to("#{e.act.user.name}", user_path(e.act.user.id)) %> - <%= l(:label_of_feedback) + l(:label_layouts_feedback) %> - - <% else %> - - <%= l(:label_i_have_feedback) %> - <%= l(:label_layouts_feedback) + l(:label_of_feedback) %> - <%= link_to("#{e.act.user.name}", user_path(e.act.user.id)) %> - - <% end %> - <% else %> - - <%= link_to("#{e.user.name}", user_path(e.user_id)) %> - - <% if User.current.language == "zh" %> - - <%= l(:label_have_feedback) %> - <%= link_to("#{e.act.user.name}", user_path(e.act.user.id)) %> - <%= l(:label_of_feedback) + l(:label_layouts_feedback) %> - - <% else %> - - <%= l(:label_have_feedback) %> - <%= l(:label_layouts_feedback) + l(:label_of_feedback) %> - <%= link_to("#{e.act.user.name}", user_path(e.act.user.id)) %> - - <% end %> - <% end %> -
    -

    - <%= textAreailizable act.notes %> -

    - -
    - - <%= user_jour_feed_back_url e %> - -
    -
    -
    - - <%= (l(:label_update_time).to_s << ': ' << format_time(e.act.created_on)).to_s %> - -
    -
    -
    - - <%= link_to("#{l(:label_i)}", user_path(e.user_id)) %> - - - <%= l(:label_i_new_activity) %> - - <%= link_to format_activity_title("#{l(:label_active_homework)}##{act.id}:#{act.name}"), student_work_index_path(:homework => e.act_id) %> - - - <%= link_to(h(e.user), user_path(e.user_id)) %> -   - - <%= l(:label_new_activity) %> -   - <%= link_to format_activity_title("#{l(:label_active_homework)}##{act.id}:#{act.name}"), student_work_index_path(:homework => e.act_id) %> -
    -

    - <%= textAreailizable act, :description %> -

    -
    - - <%= (l(:label_update_time).to_s << ': ' << format_time(e.act.created_at)).to_s %> - -
    - - - - - - - - -
    - - <%= link_to("#{l(:label_i)}", user_path(e.user_id)) %> - -   - - <%= l(:label_i_new_activity) %> - -   - <%= link_to(l(:label_activity_project)+":"+act.issue.project.name, project_path(act.issue.project.id)) %> - <%= link_to format_activity_title("#{act.issue.tracker} ##{act.issue.id}: #{act.issue.subject}"), - {:controller => 'issues', :action => 'show', :id => act.issue.id, :anchor => "change-#{act.id}"} %> - - - <%= link_to(h(e.user), user_path(e.user_id)) %> - -   - - <%= l(:label_new_activity) %> - -   - <%= link_to(l(:label_activity_project)+":"+act.issue.project.name, project_path(act.issue.project.id)) %> - <%= link_to format_activity_title("#{act.issue.tracker} ##{act.issue.id}: #{act.issue.subject}"), - {:controller => 'issues', :action => 'show', :id => act.issue.id, :anchor => "change-#{act.id}"} %> -
    -

    - <%= desStr %> -

    -
    -
    - - <%= (l(:label_update_time).to_s << ': ' << format_time(e.act.created_on)).to_s %> - -
    -
    -
    - - <%= link_to("#{l(:label_i)}", user_path(e.user_id)) %> - -   - - <%= l(:label_i_new_activity) %> - -   - <%= link_to format_activity_title(act.title), - {:controller => 'repositories', - :action => 'revision', - :id => act.repository.project, - :repository_id => act.repository.identifier_param, - :rev => act.identifier} %> - - - <%= link_to(h(e.user), user_path(e.user_id)) %> - -   - - <%= l(:label_new_activity) %> - -   - <%= link_to format_activity_title(act.title), - {:controller => 'repositories', - :action => 'revision', - :id => act.repository.project, - :repository_id => act.repository.identifier_param, - :rev => act.identifier} %> -
    -

    - <%= textAreailizable act, :long_comments %> -

    -
    -
    - - <%= format_time(e.act.committed_on) %> - -
    -
    - <%= link_to l(:label_find_all_comments), - {:controller => 'repositories', - :action => 'revision', - :id => act.repository.project, - :repository_id => act.repository.identifier_param, - :rev => act.identifier} if e.act.count!= 0 %> - - - <%= l(:label_comments_count, :count => e.act.count) %> - -
    -
    - - <%= link_to("#{l(:label_i)}", user_path(e.user_id)) %> - -   - - <%= l(:label_i_new_activity) %> - -   - <%= link_to format_activity_title("#{act.board.name}: #{act.subject}"), - act.board.project ? project_boards_path(act.board.project,:topic_id => act.id) : course_boards_path(act.board.course,:topic_id => act.id), - :class => "problem_tit fl fb " %> - - - <%= link_to(h(e.user), user_path(e.user_id)) %> - -   - - <%= l(:label_new_activity) %> - -   - <%= link_to format_activity_title("#{act.board.name}: #{act.subject}"), - {:controller => 'messages', - :action => 'show', - :board_id => act.board_id}.merge(act.parent_id.nil? ? {:id => act.id} : {:id => act.parent_id, :r => act.id, :anchor => "message-#{act.id}"}) %> -
    -

    - <%= textAreailizable(act, :content) %> -

    -
    -
    - - <%= (l(:label_update_time).to_s << ': ' << format_time(e.act.created_on)).to_s %> - -
    -
    -
    - - <%= link_to("#{l(:label_i)}", user_path(e.user_id)) %> - -   - - <%= l(:label_new_user) %> - - - - <%= link_to(h(e.user), user_path(e.user_id)) %> - -   - - <%= l(:label_new_user) %> - -
    -

    -
    -
    - - <%= (l(:label_update_time).to_s << ': ' << format_time(e.act.created_on)).to_s %> - -
    -
    -
    - - <%= link_to("#{l(:label_i)}", user_path(e.user_id)) %> - -   - - <%= l(:label_i_new_activity) %> - -   - <%= link_to format_activity_title(" #{act.title}"), {:controller => 'news', :action => 'show', :id => act.id} %> - - - <%= link_to(h(e.user), user_path(e.user_id)) %> - -   - - <%= l(:label_new_activity) %> - -   - <%= link_to format_activity_title("#{l(:label_news)}: #{act.title}"), {:controller => 'news', :action => 'show', :id => act.id} %> -
    -

    - <%= textAreailizable act, :description %> -

    -
    -
    - - <%= (l(:label_update_time).to_s << ': ' << format_time(e.act.created_on)).to_s %> - -
    -
    - - <%= link_to l(:label_find_all_comments), {:controller => 'news', :action => 'show', :id => act.id} if e.act.comments_count!= 0 %> - - - <%= l(:label_comments_count, :count => e.act.comments_count) %> - -
    -
    - - <%= link_to("#{l(:label_i)}", user_path(e.user_id)) %> - -   - - <%= l(:label_i_new_activity) %> -   - <%= link_to format_activity_title("#{act.source_from} (#{act.status}): #{act.tracker.name} #{act.subject}"), - {:controller => 'issues', - :action => 'show', - :id => act.id} %> -
    - <%= textAreailizable act, :description %> -
    -
    - - <%= (l(:label_update_time).to_s << ': ' << format_time(e.act.created_on)).to_s %> - -
    -
    - - <%= link_to l(:label_find_all_comments), {:controller => 'issues', :action => 'show', :id => act.id} if e.act.journals.count!= 0 %> - - - <%= l(:label_comments_count, :count => e.act.journals.count) %> - -
    -
    - - <%= link_to(h(e.user), user_path(e.user_id)) %> -   - - <%= l(:label_new_activity) %> -   - <%= link_to format_activity_title("#{act.source_from} (#{act.status}): #{act.tracker.name} #{act.subject}"), - {:controller => 'issues', - :action => 'show', - :id => act.id} %> -
    - <%= textAreailizable act, :description %> -
    -
    - - <%= (l(:label_update_time).to_s << ': ' << format_time(e.act.created_on)).to_s %> - -
    -
    - - <%= link_to l(:label_find_all_comments), {:controller => 'issues', :action => 'show', :id => act.id} if e.act.journals.count!= 0 %> - - - <%= l(:label_comments_count, :count => e.act.journals.count) %> - -
    -
    - - <%= link_to("#{l(:label_i)}", user_path(e.user_id)) %> - -   - - <%= l(:label_i_new_activity) %> - -   - <%= link_to format_activity_title("#{l(:label_contest)}: #{act.name}"), {:controller => 'contests', :action => 'show_contest', :id => act.id} %> - - - <%= link_to(h(e.user), user_path(e.user_id)) %> - -   - - <%= l(:label_new_activity) %> - -   - <%= link_to format_activity_title("#{l(:label_contest)}: #{act.name}"), {:controller => 'contests', :action => 'show_contest', :id => act.id} %> -
    -

    - <%= textAreailizable act, :description %> -

    -
    -
    - - <%= (l(:label_update_time).to_s << ': ' << format_time(e.act.created_on)).to_s %> - -
    -
    -
    + <% if !@center_flag %> + + <% end %> + - <% end %> - <% end %> - <% end %> -
    - - <% else %> - <% if @user == User.current %> - <%= l(:label_user_activities_no) %> + <% if !@center_flag %> + + <% end %> -<% else %> - <% unless @message.empty? %> -
    - <% @message.each do |e| -%> - - - - - -
    <%= image_tag(url_to_avatar(e.user), :class => "avatar") %> - - - - - - - - - - - -
    - <%= link_to(h(e.user), user_path(e.user)) %> - <% if e.instance_of?(JournalsForMessage) %> - <% if e.reply_id == User.current.id %> - <% if e.jour_type == 'Bid' %> - <%= l(:label_in_bids) %><%= link_to(e.jour.name, respond_path(e.jour)) %> <%= l(:label_quote_my_words) %> - <% elsif e.jour_type == 'User' %> - <%= l(:label_in_users) %><%= link_to(e.jour.firstname, feedback_path(e.jour)) %> <%= l(:label_quote_my_words) %> - <% elsif e.jour_type == 'Project' %> - <%= l(:label_in_projects) %><%= link_to(e.jour.name, feedback_path(e.jour)) %> <%= l(:label_reply_plural) %> - <% end %> - <% else %> - <%= l(:label_about_requirement) %><%= link_to(e.jour.name, respond_path(e.jour_id)) %> <%= l(:label_have_respond) %> - <% end %> - <% else %> - <% if e.journal_reply.nil? || e.journal_reply.reply_id != User.current.id %> - <%= l(:label_about_issue) %><%= link_to(e.issue.subject, issue_path(e.journalized_id)) %><%= l(:label_have_respond) %> + - <% else %> - <%= l(:label_in_issues) %><%= link_to(e.issue.subject, issue_path(e.issue)) %><%= l(:label_quote_my_words) %> - <% end %> - <% end %> -
    -

    - <%= textAreailizable e.notes %> -

    -
    - - <%= format_time e.created_on %> - -
    -
    - <% end %> -
    +
    + + -<% html_title(l(:label_activity)) -%> diff --git a/app/views/users/show_new_score.js.erb b/app/views/users/show_new_score.js.erb index 4baee5c04..40ef7d5c5 100644 --- a/app/views/users/show_new_score.js.erb +++ b/app/views/users/show_new_score.js.erb @@ -1,3 +1,4 @@ $('#ajax-modal').html('<%= escape_javascript(render :partial => 'users/show_new_score') %>'); showModal('ajax-modal', '400px'); +$('#ajax-modal').siblings().show(); $('#ajax-modal').addClass('new-watcher'); diff --git a/app/views/users/user_course_activities.html.erb b/app/views/users/user_course_activities.html.erb new file mode 100644 index 000000000..bdebee6a5 --- /dev/null +++ b/app/views/users/user_course_activities.html.erb @@ -0,0 +1,19 @@ +<% for rec in @list %> +
    + + + <%= rec[:e].name %> + + <%# if( rec[:e].is_public == false || rec[:e].is_public == 0 ) %> + + <%# end %> + + <%= rec[:item].user.show_name %> + <%= get_activity_opt(rec[:item],rec[:e]) %> + + <%= get_activity_act_showname_htmlclear(rec[:item]) %> + + <%= time_tag(get_activity_act_createtime(rec[:item])).html_safe %> +
    +<% end %> \ No newline at end of file diff --git a/app/views/users/user_courses.html.erb b/app/views/users/user_courses.html.erb index 6e0a1ca17..36e061efa 100644 --- a/app/views/users/user_courses.html.erb +++ b/app/views/users/user_courses.html.erb @@ -1,33 +1,31 @@ -<% if @user.user_extensions.identity == UserExtensions::TEACHER %> - <%= render :partial => 'my_course' %> -<% else %> - <%= render :partial => 'my_joinedcourse' %> -<% end %> - +
    + + <% if @user.user_extensions.identity == 0 && @user.allowed_to?(:add_course, nil, :global => true) %> + 新建课程 + <% else %> + 加入课程 + <% end %> +
    +
    - -<% html_title(l(:label_user_course)) -%> \ No newline at end of file +
    +
    +
    +

    所有课程

    + +
    +
    + <% for item in @list %> + <%= render :partial => 'course_form', :locals => {:item => item} %> + <% end %> +

    <%= l(:label_no_data) %>

    +
    +
      + <%= pagination_links_full @obj_pages, @obj_count, :per_page_links => false, :remote => false, :flag => true%> +
    +
    +
    \ No newline at end of file diff --git a/app/views/users/user_courses4show.html.erb b/app/views/users/user_courses4show.html.erb new file mode 100644 index 000000000..7aab1b2a5 --- /dev/null +++ b/app/views/users/user_courses4show.html.erb @@ -0,0 +1,16 @@ +<% for item in @list %> + + +<% end %> diff --git a/app/views/users/user_fanslist.html.erb b/app/views/users/user_fanslist.html.erb index 92cc1cfb7..0b42da9f8 100644 --- a/app/views/users/user_fanslist.html.erb +++ b/app/views/users/user_fanslist.html.erb @@ -1,52 +1,25 @@ - -

    <%= l(:label_x_user_fans, :count => User.current.watcher_users(User.current.id).count) %>

    -
    - <% for user in @user.watcher_users %> -
      -
    • - - - - - -
      - <%= link_to image_tag(url_to_avatar(user), :class => "avatar"),user_path(user),:title => "#{user.name}" %> - - - - - - - - - - - - - - -
      - <%= content_tag "div", link_to(user.name, user_path(user)), :class => "project_avatar_name" %> -

      - <% cond = Project.visible_condition(User.current) + " AND projects.project_type <> 1" %> - <% memberships = user.memberships.all(:conditions => cond) %> - <%= l(:label_x_contribute_to, :count => memberships.count) %> - <% for member in memberships %> - <%= link_to_project(member.project) %><%= (user.memberships.last == member) ? '' : ',' %> - <% end %> - -

      - <% user_courses = user_courses_list(user) %> - <%= l(:label_x_course_contribute_to, :count => user_courses.count) %> - <%= ":" unless user_courses.empty? %> - <% for course in user_courses %> - <%= link_to course.name,{:controller => 'courses',:action => 'show',id:course.id, host: Setting.host_course} %><%= (user_courses.last == course) ? '' : ',' %> - <% end %> -

      -
      <%= l(:label_user_joinin) %><%= format_date(user.created_on) %> -
      -
      -
    • -
    - <% end %> -
    \ No newline at end of file +
    +
    +
    + <% if @action == 'fans' %> +

    粉丝

    +
    共有<%=@obj_count%>名粉丝
    + <% elsif @action == 'visitor' %> +

    访客

    +
    共有<%=@obj_count%>访客
    + <% else %> +

    关注

    +
    一共关注<%=@obj_count%>
    + <% end %> +
    +
    + <% for item in @list %> + <%= render :partial => 'users/user_fans_item', :locals => {:item => item,:target=>@user} %> + <% end %> +

    <%= l(:label_no_data) %>

    +
    +
      + <%= pagination_links_full @obj_pages, @obj_count, :per_page_links => false, :remote => false, :flag => true%> +
    +
    +
    diff --git a/app/views/users/user_feedback4show.html.erb b/app/views/users/user_feedback4show.html.erb new file mode 100644 index 000000000..0a1fc8af2 --- /dev/null +++ b/app/views/users/user_feedback4show.html.erb @@ -0,0 +1,36 @@ +<% for item in feed_list %> +
    + + <%= image_tag url_to_avatar(item.user),:width => '27',:height => '27' %> + + <%= item.user.show_name %> + <% if item.at_user %> +  回复 + <%= item.at_user.show_name %> + <% end %> +  :  +
    <%=item.notes.html_safe%>
    + <% if JournalsForMessage.create_by_user? User.current %> + 回复 + <% end %> + <% if User.current.admin? || item.user.id == User.current.id %> + item.id,:user_id=>item.user.id) %>" data-confirm="您确定要删除吗?" data-remote="true" data-method="delete" class="fl mt5 c_purple ml5">删除 + <% end %> + <%= time_tag(item.created_on).html_safe %> +
    + +
    +<% end %> diff --git a/app/views/users/user_projects.html.erb b/app/views/users/user_projects.html.erb index 69dda693e..e7eeedb29 100644 --- a/app/views/users/user_projects.html.erb +++ b/app/views/users/user_projects.html.erb @@ -1,66 +1,56 @@ - - - -