diff --git a/app/controllers/account_controller.rb b/app/controllers/account_controller.rb index 82f92c2d1..af501fdf9 100644 --- a/app/controllers/account_controller.rb +++ b/app/controllers/account_controller.rb @@ -41,6 +41,10 @@ class AccountController < ApplicationController render :layout => 'static_base' end + def about_us + render :layout => 'static_base' + end + # Log out current user and redirect to welcome page def logout if User.current.anonymous? diff --git a/app/controllers/comments_controller.rb b/app/controllers/comments_controller.rb index c10f8bc84..4088d4156 100644 --- a/app/controllers/comments_controller.rb +++ b/app/controllers/comments_controller.rb @@ -19,7 +19,7 @@ class CommentsController < ApplicationController default_search_scope :news include ApplicationHelper model_object News - before_filter :find_model_object + before_filter :find_model_object before_filter :find_project_from_association before_filter :authorize @@ -34,24 +34,31 @@ class CommentsController < ApplicationController ids = params[:asset_id].split(',') update_kindeditor_assets_owner ids,@comment.id,OwnerTypeHelper::COMMENT end - # 与我相关动态的记录add start - if( @comment.id && @news.course ) - if(@news.author_id != User.current.id) - notify = ActivityNotify.new() - notify.activity_container_id = @news.course.id - notify.activity_container_type = 'Course' - notify.activity_id = @comment.id - notify.activity_type = 'Comment' - notify.notify_to = @news.author_id - notify.is_read = 0 - notify.save() - end - end - # 与我相关动态的记录add end + # # 锟斤拷锟斤拷锟斤拷囟锟教拷募锟铰糰dd start + # if( @comment.id && @news.course ) + # if(@news.author_id != User.current.id) + # notify = ActivityNotify.new() + # notify.activity_container_id = @news.course.id + # notify.activity_container_type = 'Course' + # notify.activity_id = @comment.id + # notify.activity_type = 'Comment' + # notify.notify_to = @news.author_id + # notify.is_read = 0 + # notify.save() + # end + # end + # # 锟斤拷锟斤拷锟斤拷囟锟教拷募锟铰糰dd end flash[:notice] = l(:label_comment_added) end - redirect_to news_url(@news) + if params[:user_activity_id] + @user_activity_id = params[:user_activity_id] + respond_to do |format| + format.js + end + else + redirect_to news_url(@news) + end end def destroy @@ -69,6 +76,6 @@ class CommentsController < ApplicationController @comment = nil @news end - - + + end diff --git a/app/controllers/homework_common_controller.rb b/app/controllers/homework_common_controller.rb index 87c1e288b..2e9925916 100644 --- a/app/controllers/homework_common_controller.rb +++ b/app/controllers/homework_common_controller.rb @@ -115,23 +115,16 @@ class HomeworkCommonController < ApplicationController 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) + # 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 - - 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 + # 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 @@ -254,15 +247,15 @@ class HomeworkCommonController < ApplicationController question[:input] << test.input question[:output] << test.output end - uri = URI("http://192.168.80.21:8080/api/questions/#{@homework_detail_programing.question_id}.json") - body = question.to_json - res = Net::HTTP.new(uri.host, uri.port).start do |client| - request = Net::HTTP::Put.new(uri.path) - request.body = body - request["Content-Type"] = "application/json" - client.request(request) - end - result = JSON.parse(res.body) + # uri = URI("http://192.168.80.21:8080/api/questions/#{@homework_detail_programing.question_id}.json") + # body = question.to_json + # res = Net::HTTP.new(uri.host, uri.port).start do |client| + # request = Net::HTTP::Put.new(uri.path) + # request.body = body + # request["Content-Type"] = "application/json" + # client.request(request) + # end + # result = JSON.parse(res.body) end @homework.save_attachments(params[:attachments]) @@ -406,4 +399,4 @@ class HomeworkCommonController < ApplicationController student_works += student_works student_works[index + 1 .. index + n] end -end \ No newline at end of file +end diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index 67fec1b71..b3624b14d 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -20,11 +20,11 @@ class IssuesController < ApplicationController default_search_scope :issues before_filter :authorize1, :only => [:show] - before_filter :find_issue, :only => [:show, :edit, :update] + before_filter :find_issue, :only => [:show, :edit, :update,:add_journal] before_filter :find_issues, :only => [:bulk_edit, :bulk_update, :destroy] before_filter :find_project, :only => [:new, :create, :update_form] #before_filter :authorize, :except => [:index, :show] - before_filter :authorize, :except => [:index] + before_filter :authorize, :except => [:index,:add_journal] before_filter :find_optional_project, :only => [:index] before_filter :check_for_default_issue_status, :only => [:new, :create] @@ -66,14 +66,14 @@ class IssuesController < ApplicationController if @query.valid? case params[:format] - when 'csv', 'pdf' - @limit = 10#Setting.issues_export_limit.to_i - when 'atom' - @limit = 10#Setting.feeds_limit.to_i - when 'xml', 'json' - @offset, @limit = api_offset_and_limit({:limit => 10}) - else - @limit = 10#per_page_option + when 'csv', 'pdf' + @limit = 10#Setting.issues_export_limit.to_i + when 'atom' + @limit = 10#Setting.feeds_limit.to_i + when 'xml', 'json' + @offset, @limit = api_offset_and_limit({:limit => 10}) + else + @limit = 10#per_page_option end @assign_to_id = params[:assigned_to_id] @author_id = params[:author_id] @@ -84,9 +84,9 @@ class IssuesController < ApplicationController @issue_pages = Paginator.new @issue_count, @limit, params['page'] @offset ||= @issue_pages.offset @issues = @query.issues(:include => [:assigned_to, :tracker, :priority, :category, :fixed_version], - :order => sort_clause, - :offset => @offset, - :limit => @limit) + :order => sort_clause, + :offset => @offset, + :limit => @limit) @issue_count_by_group = @query.issue_count_by_group respond_to do |format| format.js @@ -145,16 +145,16 @@ class IssuesController < ApplicationController @available_watchers = (@issue.project.users.sort + @issue.watcher_users).uniq respond_to do |format|`` - format.html { - retrieve_previous_and_next_issue_ids - render :template => 'issues/show', :layout => @project_base_tag#by young - } - format.api - format.atom { render :template => 'journals/index', :layout => false, :content_type => 'application/atom+xml' } - format.pdf { - pdf = issue_to_pdf(@issue, :journals => @journals) - send_data(pdf, :type => 'application/pdf', :filename => "#{@project.identifier}-#{@issue.id}.pdf") - } + format.html { + retrieve_previous_and_next_issue_ids + render :template => 'issues/show', :layout => @project_base_tag#by young + } + format.api + format.atom { render :template => 'journals/index', :layout => false, :content_type => 'application/atom+xml' } + format.pdf { + pdf = issue_to_pdf(@issue, :journals => @journals) + send_data(pdf, :type => 'application/pdf', :filename => "#{@project.identifier}-#{@issue.id}.pdf") + } end end @@ -324,8 +324,8 @@ class IssuesController < ApplicationController issue.reload if @copy issue = issue.copy({}, - :attachments => params[:copy_attachments].present?, - :subtasks => params[:copy_subtasks].present? + :attachments => params[:copy_attachments].present?, + :subtasks => params[:copy_subtasks].present? ) end journal = issue.init_journal(User.current, params[:notes]) @@ -355,21 +355,21 @@ class IssuesController < ApplicationController @hours = TimeEntry.sum(:hours, :conditions => ['issue_id IN (?)', @issues]).to_f if @hours > 0 case params[:todo] - when 'destroy' - # nothing to do - when 'nullify' - TimeEntry.update_all('issue_id = NULL', ['issue_id IN (?)', @issues]) - when 'reassign' - reassign_to = @project.issues.find_by_id(params[:reassign_to_id]) - if reassign_to.nil? - flash.now[:error] = l(:error_issue_not_found_in_project) - return + when 'destroy' + # nothing to do + when 'nullify' + TimeEntry.update_all('issue_id = NULL', ['issue_id IN (?)', @issues]) + when 'reassign' + reassign_to = @project.issues.find_by_id(params[:reassign_to_id]) + if reassign_to.nil? + flash.now[:error] = l(:error_issue_not_found_in_project) + return + else + TimeEntry.update_all("issue_id = #{reassign_to.id}", ['issue_id IN (?)', @issues]) + end else - TimeEntry.update_all("issue_id = #{reassign_to.id}", ['issue_id IN (?)', @issues]) - end - else - # display the destroy form if it's a user request - return unless api_request? + # display the destroy form if it's a user request + return unless api_request? end end @issues.each do |issue| @@ -385,6 +385,18 @@ class IssuesController < ApplicationController end end + def add_journal + jour = Journal.new + jour.user_id = User.current.id + jour.notes = params[:notes] + jour.journalized = @issue + jour.save + @user_activity_id = params[:user_activity_id] + respond_to do |format| + format.js + end + end + private def find_project @@ -425,14 +437,14 @@ class IssuesController < ApplicationController issue_attributes = params[:issue] if issue_attributes && params[:conflict_resolution] case params[:conflict_resolution] - when 'overwrite' - issue_attributes = issue_attributes.dup - issue_attributes.delete(:lock_version) - when 'add_notes' - issue_attributes = issue_attributes.slice(:notes) - when 'cancel' - redirect_to issue_url(@issue) - return false + when 'overwrite' + issue_attributes = issue_attributes.dup + issue_attributes.delete(:lock_version) + when 'add_notes' + issue_attributes = issue_attributes.slice(:notes) + when 'cancel' + redirect_to issue_url(@issue) + return false end end @issue.safe_attributes = issue_attributes diff --git a/app/controllers/messages_controller.rb b/app/controllers/messages_controller.rb index a242587fb..965aacab0 100644 --- a/app/controllers/messages_controller.rb +++ b/app/controllers/messages_controller.rb @@ -177,6 +177,7 @@ class MessagesController < ApplicationController @reply.board = @board @reply.safe_attributes = params[:reply] @reply.content = @quote + @reply.content + @reply.subject = "RE: #{@topic.subject}" unless params[:reply][:subject] @topic.children << @reply #@topic.update_attribute(:updated_on, Time.now) if !@reply.new_record? @@ -185,41 +186,18 @@ class MessagesController < ApplicationController update_kindeditor_assets_owner ids,@reply.id,OwnerTypeHelper::MESSAGE end - # 涓庢垜鐩稿叧鍔ㄦ佺殑璁板綍add start - if(@board && @board.course) #椤圭洰鐨勫厛涓嶇 - notifyto_arr = {} - notifyto_arr[@topic.author_id] = @topic.author_id - if( params[:parent_topic] != nil && params[:parent_topic] != '') - parent_topic = Message.find(params[:parent_topic]) - notifyto_arr[parent_topic.author_id] = parent_topic.author_id - end - notifyto_arr.each do |k,user_id| - if(user_id != User.current.id) - notify = ActivityNotify.new() - if(@board.course) - notify.activity_container_id = @board.course_id - notify.activity_container_type = 'Course' - else - notify.activity_container_id = @board.project_id - notify.activity_container_type = 'Project' - end - notify.activity_id = @reply.id - notify.activity_type = 'Message' - notify.notify_to = user_id - notify.is_read = 0 - notify.save() - end - end - end - # 涓庢垜鐩稿叧鍔ㄦ佺殑璁板綍add end - call_hook(:controller_messages_reply_after_save, { :params => params, :message => @reply}) attachments = Attachment.attach_files(@reply, params[:attachments]) render_attachment_warning_if_needed(@reply) else #render file: 'messages#show', layout: 'base_courses' end - if params[:is_board] + if params[:user_activity_id] + @user_activity_id = params[:user_activity_id] + respond_to do |format| + format.js + end + elsif params[:is_board] if @project redirect_to project_boards_path(@project) elsif @course diff --git a/app/controllers/student_work_controller.rb b/app/controllers/student_work_controller.rb index 1af832b79..7726ab3da 100644 --- a/app/controllers/student_work_controller.rb +++ b/app/controllers/student_work_controller.rb @@ -3,13 +3,45 @@ class StudentWorkController < ApplicationController 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_homework, :only => [:new, :index, :create, :student_work_absence_penalty, :absence_penalty_list, :evaluation_list, :program_test] 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 program_test + resultObj = {status: 0, results: [], error_msg: '', time: Time.now} + student_work = find_or_save_student_work + unless student_work + resultObj[:status] = 100 + else + if @homework.homework_type == 2 && @homework.homework_detail_programing + result = test_realtime(student_work, params[:src]) + logger.debug result + resultObj[:status] = result["status"] + resultObj[:results] = result["results"] + resultObj[:error_msg] = result["error_msg"] + results = result["results"] + if result["status"].to_i == -2 #缂栬瘧閿欒 + results = [result["error_msg"]] + end + student_work_test = student_work.student_work_tests.build(status: result["status"], results: results, + src: params[:src]) + unless student_work.save + resultObj[:status] = 200 + else + resultObj[:status] = result["status"].to_i + resultObj[:time] = student_work_test.created_at.to_s(:db) + resultObj[:index] = student_work.student_work_tests.count + end + + end + end + render :json => resultObj + end + def index #璁剧疆浣滀笟瀵瑰簲鐨刦orge_messages琛ㄧ殑viewed瀛楁 query_student_work = @homework.course_messages @@ -102,20 +134,16 @@ class StudentWorkController < ApplicationController end def new - student_work = @homework.student_works.where("user_id = ?",User.current.id).first - if student_work.nil? - @stundet_work = StudentWork.new - respond_to do |format| - format.html - end - else - render_403 + @student_work = @homework.student_works.where("user_id = ?",User.current.id).first + if @student_work.nil? + @student_work = StudentWork.new end end def create if params[:student_work] - stundet_work = StudentWork.new + stundet_work = StudentWork.find(params[:student_work_id]) if params[:student_work_id] + stundet_work ||= StudentWork.new stundet_work.name = params[:student_work][:name] stundet_work.description = params[:student_work][:description] stundet_work.project_id = params[:student_work][:project_id] @@ -128,23 +156,9 @@ 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:@homework.homework_detail_programing.language - } - 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 { @@ -584,4 +598,44 @@ class StudentWorkController < ApplicationController book.write xls_report xls_report.string end + + def find_or_save_student_work + student_work = @homework.student_works.where(user_id: User.current.id).first + if student_work.nil? + @homework.student_works.build( + name: params[:title], + description: params[:src], + user_id: User.current.id + ) + unless @homework.save + else + student_work = @homework.student_works.where(user_id: User.current.id).first + end + end + student_work + end + + + def test_realtime(student_work, src) + url = "#{Redmine::Configuration['judge_server']}api/realtime_test.json" + + factor = [] + @homework.homework_tests.each do |test| + factor << {input: test.input, output: test.output} + end + solutions = { + src:src, + language:@homework.homework_detail_programing.language, + factor: factor + } + 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 + JSON.parse(res.body) + end end \ No newline at end of file diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 882f88e41..1fac6737b 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -41,12 +41,12 @@ class UsersController < ApplicationController before_filter :can_show_course, :only => [:user_courses,:user_homeworks] #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, - :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,:user_resource, - :user_courses4show,:user_projects4show,:user_course_activities,:user_project_activities,:user_feedback4show,:user_visitorlist,:user_messages,:edit_brief_introduction, - :user_import_homeworks,:user_search_homeworks,:user_import_resource] + :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,:user_resource, + :user_courses4show,:user_projects4show,:user_course_activities,:user_project_activities,:user_feedback4show,:user_visitorlist,:user_messages,:edit_brief_introduction, + :user_import_homeworks,:user_search_homeworks,:user_import_resource] before_filter :auth_user_extension, only: :show #before_filter :rest_user_score, only: :show #before_filter :select_entry, only: :user_projects @@ -218,7 +218,7 @@ class UsersController < ApplicationController end # end - ##added by fq +##added by fq def watch_bids # cond = 'bids.reward_type <> 1' # @bids = Bid.watched_by(@user).where('reward_type = ?', 1) # added by huang @@ -281,7 +281,7 @@ class UsersController < ApplicationController unless User.current.admin? if !@user.active? || (@user != User.current && @memberships.empty? && events.empty?) render_404 - return + return end end @@ -342,6 +342,24 @@ class UsersController < ApplicationController end end + def new_user_commit_homework + @user = User.current + @homework = HomeworkCommon.find(params[:homework_id]) + @student_work = @homework.student_works.where(user_id: User.current.id).first + if @student_work.nil? + @student_work = StudentWork.new + end + respond_to do |format| + format.js + format.html {render :layout => 'new_base_user'} + end + end + + def user_commit_homework + flash[:notice] = l(:notice_successful_create) + redirect_to user_homeworks_user_path(User.current) + end + def user_new_homework if params[:homework_common] homework = HomeworkCommon.new @@ -349,7 +367,7 @@ class UsersController < ApplicationController homework.description = params[:homework_common][:description] homework.end_time = params[:homework_common][:end_time] || Time.now homework.publish_time = Time.now - homework.homework_type = 1 + homework.homework_type = params[:homework_type].to_i || 1 homework.late_penalty = 2 homework.user_id = User.current.id homework.course_id = params[:course_id] @@ -358,17 +376,36 @@ class UsersController < ApplicationController 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 = Time.now - homework_detail_manual.evaluation_end = Time.now - homework_detail_manual.evaluation_num = params[:evaluation_num] || 3 - homework_detail_manual.absence_penalty = 2 - homework.homework_detail_manual = homework_detail_manual + if homework.homework_type == 1 + 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 = Time.now + homework_detail_manual.evaluation_end = Time.now + homework_detail_manual.evaluation_num = params[:evaluation_num] || 3 + homework_detail_manual.absence_penalty = 2 + homework.homework_detail_manual = homework_detail_manual + else + homework_detail_programing = HomeworkDetailPrograming.new + homework.homework_detail_programing = homework_detail_programing + homework_detail_programing.ta_proportion = params[:ta_proportion] || 0.6 + homework_detail_programing.language = params[:program][:language].to_i + + inputs = params[:program][:input] + if Array === inputs + inputs.each_with_index do |val, i| + homework.homework_tests << HomeworkTest.new( + input: val, + output: params[:program][:output][i] + ) + end + end + + end if homework.save homework_detail_manual.save if homework_detail_manual + homework_detail_programing.save if homework_detail_programing redirect_to user_homeworks_user_path(User.current.id) end end @@ -376,9 +413,102 @@ class UsersController < ApplicationController #鐢ㄦ埛浠庤祫婧愬簱瀵煎叆璧勬簮鍒颁綔涓 def user_import_resource - user_course_ids = User.current.courses.map { |c| c.id} #鎴戠殑璧勬簮搴撶殑璇濓紝閭d箞搴旇鏄垜涓婁紶鐨勬墍鏈夎祫婧 鍔犱笂 鎴戝姞鍏ョ殑璇剧▼鐨勬墍鏈夎祫婧 + @user = User.current + user_course_ids = @user.courses.map { |c| c.id} #鎴戠殑璧勬簮搴撶殑璇濓紝閭d箞搴旇鏄垜涓婁紶鐨勬墍鏈夎祫婧 鍔犱笂 鎴戝姞鍏ョ殑璇剧▼鐨勬墍鏈夎祫婧 @attachments = Attachment.where("(author_id = #{params[:id]} and container_type in('Project','Principal','Course','Issue','Document','Message','News','StudentWorkScore','HomewCommon')) "+ "or (container_type = 'Course' and container_id in (#{user_course_ids.empty? ? '0': user_course_ids.join(',')}))").order("created_on desc") + @type = params[:type] + @homework_id = params[:homework_id] + @limit = 7 + @is_remote = true + @atta_count = @attachments.count + @atta_pages = Paginator.new @atta_count, @limit, params['page'] || 1 + @offset ||= @atta_pages.offset + #@curse_attachments_all = @all_attachments[@offset, @limit] + @attachments = paginateHelper @attachments,7 + respond_to do |format| + format.js + end + end + + #寮曞叆璧勬簮鍒楄〃鏍规嵁绫诲瀷杩囨护 + def user_resource_type + if User.current.id.to_i != params[:id].to_i + render_403 + return + end + if(params[:type].blank? || params[:type] == "1") #鍏ㄩ儴 + user_course_ids = User.current.courses.map { |c| c.id} #鎴戠殑璧勬簮搴撶殑璇濓紝閭d箞搴旇鏄垜涓婁紶鐨勬墍鏈夎祫婧 鍔犱笂 鎴戝姞鍏ョ殑璇剧▼鐨勬墍鏈夎祫婧 + @attachments = Attachment.where("(author_id = #{params[:id]} and container_type in('Project','Principal','Course','Issue','Document','Message','News','StudentWorkScore','HomewCommon')) "+ + "or (container_type = 'Course' and container_id in (#{user_course_ids.empty? ? '0': user_course_ids.join(',')}))").order("created_on desc") + elsif params[:type] == "2" #璇剧▼璧勬簮 + user_course_ids = User.current.courses.map { |c| c.id} + @attachments = Attachment.where("(author_id = #{params[:id]} and container_type = 'Course') or (container_type = 'Course' and container_id in (#{user_course_ids.empty? ? '0': user_course_ids.join(',')})) ").order("created_on desc") + elsif params[:type] == "3" #椤圭洰璧勬簮 + @attachments = Attachment.where("author_id = #{params[:id]} and container_type = 'Project'").order("created_on desc") + elsif params[:type] == "4" #闄勪欢 + @attachments = Attachment.where("author_id = #{params[:id]} and container_type in('Issue','Document','Message','News','StudentWorkScore','HomewCommon')").order("created_on desc") + elsif params[:type] == "5" #鐢ㄦ埛璧勬簮 + @attachments = Attachment.where("author_id = #{params[:id]} and container_type = 'Principal'").order("created_on desc") + end + @type = params[:type] + @limit = 7 + @is_remote = true + @atta_count = @attachments.count + @atta_pages = Paginator.new @atta_count, @limit, params['page'] || 1 + @offset ||= @atta_pages.offset + #@curse_attachments_all = @all_attachments[@offset, @limit] + @attachments = paginateHelper @attachments,7 + respond_to do |format| + format.js + end + end + + + #寮曞叆璧勬簮鍒楄〃鏍规嵁鍏抽敭璇嶈繃婊 + def user_ref_resource_search + search = params[:search].to_s.strip.downcase + if(params[:type].blank? || params[:type] == "1") #鍏ㄩ儴 + user_course_ids = User.current.courses.map { |c| c.id} #鎴戠殑璧勬簮搴撶殑璇濓紝閭d箞搴旇鏄垜涓婁紶鐨勬墍鏈夎祫婧 鍔犱笂 鎴戝姞鍏ョ殑璇剧▼鐨勬墍鏈夎祫婧 鍙栦氦闆嗗苟鏌ヨ + @attachments = Attachment.where("((author_id = #{params[:id]} and container_type in('Project','Principal','Course','Issue','Document','Message','News','StudentWorkScore','HomewCommon')) "+ + " or (container_type = 'Course' and container_id in (#{user_course_ids.empty? ? '0': user_course_ids.join(',')}))) and (filename like '%#{search}%') ").order("created_on desc") + elsif params[:type] == "2" #璇剧▼璧勬簮 + user_course_ids = User.current.courses.map { |c| c.id} + @attachments = Attachment.where("(author_id = #{params[:id]} and container_type = 'Course') or (container_type = 'Course' and container_id in (#{user_course_ids.empty? ? '0': user_course_ids.join(',')})) and (filename like '%#{search}%') ").order("created_on desc") + elsif params[:type] == "3" #椤圭洰璧勬簮 + @attachments = Attachment.where("author_id = #{params[:id]} and container_type = 'Project' and (filename like '%#{search}%')").order("created_on desc") + elsif params[:type] == "4" #闄勪欢 + @attachments = Attachment.where("author_id = #{params[:id]} and container_type in('Project','Issue','Document','Message','News','StudentWorkScore','HomewCommon') and (filename like '%#{search}%')").order("created_on desc") + elsif params[:type] == "5" #鐢ㄦ埛璧勬簮 + @attachments = Attachment.where("author_id = #{params[:id]} and container_type = 'Principal' and (filename like '%#{search}%')").order("created_on desc") + end + @type = params[:type] + @limit = 7 + @is_remote = true + @atta_count = @attachments.count + @atta_pages = Paginator.new @atta_count, @limit, params['page'] || 1 + @offset ||= @atta_pages.offset + #@curse_attachments_all = @all_attachments[@offset, @limit] + @attachments = paginateHelper @attachments,7 + respond_to do |format| + format.js + end + end + + #灏嗚祫婧愭壒閲忓紩鍏 + def import_resources_to_homework + @attachments = [] + unless params[:checkbox1].nil? || params[:checkbox1].blank? + params[:checkbox1].each do |id| + atta = Attachment.find(id) + att_copy = atta.copy + att_copy.container_id = nil + att_copy.container_type = nil + att_copy.copy_from = atta.id + att_copy.save + @attachments << att_copy + end + end respond_to do |format| format.js end @@ -440,16 +570,16 @@ class UsersController < ApplicationController sort_update %w(login firstname lastname mail admin created_on last_login_on) case params[:format] - when 'xml', 'json' - @offset, @limit = api_offset_and_limit({:limit => 15}) - else - @limit = 15 + when 'xml', 'json' + @offset, @limit = api_offset_and_limit({:limit => 15}) + else + @limit = 15 end # retrieve all users # 鍏堝唴杩炰竴涓媠tatuses 淇濊瘉鎺掑簭涔嬪悗鏁伴噺涓鑷 scope = User.visible. - joins("INNER JOIN user_statuses ON users.id = user_statuses.user_id") + 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? @@ -460,29 +590,29 @@ class UsersController < ApplicationController # users classify case params[:user_sort_type] - when '0' - # 鍒涘缓鏃堕棿鎺掑簭 - @s_type = 0 - @users = scope.reorder('users.created_on DESC') - when '1' - # 娲昏穬搴︽帓搴, 灏辨槸鎵璋撶殑寰楀垎鎯呭喌 - @s_type = 1 - @users = scope. - joins("LEFT JOIN option_numbers ON users.id = option_numbers.user_id and option_numbers.score_type = 1"). - reorder('option_numbers.total_score DESC') - when '2' - # 绮変笣鏁版帓搴 - @s_type = 2 - @users = scope. - #joins("INNER JOIN user_statuses ON users.id = user_statuses.user_id"). - reorder('user_statuses.watchers_count DESC') + when '0' + # 鍒涘缓鏃堕棿鎺掑簭 + @s_type = 0 + @users = scope.reorder('users.created_on DESC') + when '1' + # 娲昏穬搴︽帓搴, 灏辨槸鎵璋撶殑寰楀垎鎯呭喌 + @s_type = 1 + @users = scope. + joins("LEFT JOIN option_numbers ON users.id = option_numbers.user_id and option_numbers.score_type = 1"). + reorder('option_numbers.total_score DESC') + when '2' + # 绮変笣鏁版帓搴 + @s_type = 2 + @users = scope. + #joins("INNER JOIN user_statuses ON users.id = user_statuses.user_id"). + reorder('user_statuses.watchers_count DESC') - else - # 榛樿娲昏穬搴︽帓搴 - @s_type = 1 - @users = scope. - joins("LEFT JOIN option_numbers ON users.id = option_numbers.user_id and option_numbers.score_type = 1"). - reorder('option_numbers.total_score DESC') + else + # 榛樿娲昏穬搴︽帓搴 + @s_type = 1 + @users = scope. + joins("LEFT JOIN option_numbers ON users.id = option_numbers.user_id and option_numbers.score_type = 1"). + reorder('option_numbers.total_score DESC') end # limit and offset @@ -502,20 +632,20 @@ class UsersController < ApplicationController sort_init 'login', 'asc' sort_update %w(login firstname lastname mail admin created_on last_login_on) (redirect_to user_url, :notice => l(:label_sumbit_empty);return) if params[:name].blank? - case params[:format] + case params[:format] when 'xml', 'json' @offset, @limit = api_offset_and_limit({:limit => 15}) else @limit = 15#per_page_option - end - # - #@status = params[:status] || 1 - #has = { - # "show_changesets" => true - #} - # scope = User.logged.status(@status) - # @search_by = params[:search_by] ? params[:search_by][:id] : 0 - # scope = scope.like(params[:name],@search_by) if params[:name].present? + end + # + #@status = params[:status] || 1 + #has = { + # "show_changesets" => true + #} + # scope = User.logged.status(@status) + # @search_by = params[:search_by] ? params[:search_by][:id] : 0 + # scope = scope.like(params[:name],@search_by) if params[:name].present? @search_by = params[:search_by] ? params[:search_by] : 0 us = UsersService.new @@ -548,13 +678,13 @@ class UsersController < ApplicationController def user_courses4show @page = params[:page].to_i + 1 @courses = @user.courses.visible.select("courses.*,(SELECT MAX(created_at) FROM `course_activities` WHERE course_activities.course_id = courses.id) AS a").order("a desc").limit(5).offset(@page * 5) - end + end #鏄剧ず鏇村鐢ㄦ埛椤圭洰 def user_projects4show @page = params[:page].to_i + 1 @projects = @user.projects.visible.select("projects.*,(SELECT MAX(created_at) FROM `forge_activities` WHERE forge_activities.project_id = projects.id) AS a").order("a desc").limit(5).offset(@page * 5) - end + end def user_course_activities lastid = nil @@ -631,9 +761,7 @@ class UsersController < ApplicationController end def show - @page = params[:page] ? params[:page].to_i + 1 : 0 - user_project_ids = @user.projects.visible.empty? ? "(-1)" : "(" + @user.projects.visible.map{|project| project.id}.join(",") + ")" user_course_ids = @user.courses.visible.empty? ? "(-1)" : "(" + @user.courses.visible.map{|course| course.id}.join(",") + ")" course_types = "('Message','News','HomeworkCommon','poll')" @@ -654,7 +782,7 @@ class UsersController < ApplicationController @user_activities = UserActivity.where("container_type = 'Project' and container_id in #{user_project_ids} and act_type = 'Message'").order('created_at desc').limit(10).offset(@page * 10) else @user_activities = UserActivity.where("(container_type = 'Project' and container_id in #{user_project_ids} and act_type in #{project_types}) or (container_type = 'Course' and container_id in #{user_course_ids}) and act_type in #{course_types}").order('created_at desc').limit(10).offset(@page * 10) - end + end else @user_activities = UserActivity.where("(container_type = 'Project' and container_id in #{user_project_ids} and act_type in #{project_types}) or (container_type = 'Course' and container_id in #{user_course_ids}) and act_type in #{course_types}").order('created_at desc').limit(10).offset(@page * 10) end @@ -672,124 +800,124 @@ class UsersController < ApplicationController # Author lizanle # Description type 1 :鎵鏈夊姩鎬佸寘鎷垜鍏虫敞鐨勪汉 type 2:鎴戠殑鍔ㄦ type 3:鍏充簬鎴戠殑鍥炲 case params[:type] - when "1" - if @user == User.current - activity = Activity.where('user_id = ?', User.current.id).order('id desc') - @activity_count = activity.count - @activity_pages = Paginator.new @activity_count, pre_count, params['page'] - @activity = activity.offset(@activity_pages.offset).limit(@activity_pages.per_page).all - @state = 1 - end - when "2" - message = [] - if @user == User.current - message = JournalsForMessage.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'] - messages = message.sort {|x,y| y.created_on <=> x.created_on } - @message = messages[@info_pages.offset, @info_pages.per_page] - @state = 2 - else - # Time 2015-02-04 10:50:49 - # Author lizanle - # Description 鎵鏈夊姩鎬 - where_condition = nil; - # where_condition = "act_type <> 'JournalsForMessage'" - 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 - activity = Activity.where(where_condition).where(user_id: user_ids).order('id desc') - - permission = !User.current.admin? - if permission - #Issue - act_ids = activity.where(act_type: 'Issue').select('act_id').map{|x| x.act_id} - project_ids = Issue.where(id: act_ids).select('distinct project_id').map{|x| x.project_id} - p_ids = [] - Project.where(id: project_ids).each do |x| - p_ids << x.id unless x.visible?(User.current) - end - ids = [] - ids << Issue.where(id: act_ids, project_id: p_ids).map{|x| x.id} - - #HomeworkCommon - act_ids = activity.where(act_type: 'HomeworkCommon').select('act_id').map{|x| x.act_id} - course_ids = HomeworkCommon.where(id: act_ids).select('distinct course_id').map{|x| x.course_id} - c_ids = [] - Course.where(id: course_ids).each do |x| - c_ids << x.id unless x.is_public !=0 && User.current.member_of_course?(x) + when "1" + if @user == User.current + activity = Activity.where('user_id = ?', User.current.id).order('id desc') + @activity_count = activity.count + @activity_pages = Paginator.new @activity_count, pre_count, params['page'] + @activity = activity.offset(@activity_pages.offset).limit(@activity_pages.per_page).all + @state = 1 end - ids << HomeworkCommon.where(id: act_ids, course_id: c_ids).map{|x| x.id} - - #Journal - act_ids = activity.where(act_type: 'Journal').select('act_id').map{|x| x.act_id} - project_ids = Journal.where(id:act_ids, journalized_type: 'Project').select('distinct journalized_id').map{|x| x.journalized_id} - p_ids = [] - Project.where(id: project_ids).each do |x| - p_ids << x.id unless x.visible?(User.current) + when "2" + message = [] + if @user == User.current + message = JournalsForMessage.reference_message(@user.id) + message += Journal.reference_message(@user.id) end - ids << Journal.where(id: act_ids, journalized_id: p_ids, journalized_type: 'Project').map{|x| x.id} - - #News - act_ids = activity.where(act_type: 'News').select('act_id').map{|x| x.act_id} - project_ids = News.where(id: act_ids).select('distinct project_id').map{|x| x.project_id} - p_ids = [] - Project.where(id: project_ids).each do |x| - p_ids << x.id unless x.visible?(User.current) + @activity_count = message.size + @info_pages = Paginator.new @activity_count, pre_count, params['page'] + messages = message.sort {|x,y| y.created_on <=> x.created_on } + @message = messages[@info_pages.offset, @info_pages.per_page] + @state = 2 + else + # Time 2015-02-04 10:50:49 + # Author lizanle + # Description 鎵鏈夊姩鎬 + where_condition = nil; + # where_condition = "act_type <> 'JournalsForMessage'" + 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 - ids << News.where(id: act_ids, project_id: p_ids).map{|x| x.id} + activity = Activity.where(where_condition).where(user_id: user_ids).order('id desc') + + permission = !User.current.admin? + if permission + #Issue + act_ids = activity.where(act_type: 'Issue').select('act_id').map{|x| x.act_id} + project_ids = Issue.where(id: act_ids).select('distinct project_id').map{|x| x.project_id} + p_ids = [] + Project.where(id: project_ids).each do |x| + p_ids << x.id unless x.visible?(User.current) + end + ids = [] + ids << Issue.where(id: act_ids, project_id: p_ids).map{|x| x.id} + + #HomeworkCommon + act_ids = activity.where(act_type: 'HomeworkCommon').select('act_id').map{|x| x.act_id} + course_ids = HomeworkCommon.where(id: act_ids).select('distinct course_id').map{|x| x.course_id} + c_ids = [] + Course.where(id: course_ids).each do |x| + c_ids << x.id unless x.is_public !=0 && User.current.member_of_course?(x) + end + ids << HomeworkCommon.where(id: act_ids, course_id: c_ids).map{|x| x.id} + + #Journal + act_ids = activity.where(act_type: 'Journal').select('act_id').map{|x| x.act_id} + project_ids = Journal.where(id:act_ids, journalized_type: 'Project').select('distinct journalized_id').map{|x| x.journalized_id} + p_ids = [] + Project.where(id: project_ids).each do |x| + p_ids << x.id unless x.visible?(User.current) + end + ids << Journal.where(id: act_ids, journalized_id: p_ids, journalized_type: 'Project').map{|x| x.id} + + #News + act_ids = activity.where(act_type: 'News').select('act_id').map{|x| x.act_id} + project_ids = News.where(id: act_ids).select('distinct project_id').map{|x| x.project_id} + p_ids = [] + Project.where(id: project_ids).each do |x| + p_ids << x.id unless x.visible?(User.current) + 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 - 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} - project_ids = Board.where(id: board_ids).select('distinct project_id').map{|x| x.project_id} - p_ids = [] - Project.where(id: project_ids).each do |x| - p_ids << x.id unless x.visible?(User.current) - end - ids << Message.where(id: act_ids, board_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 + 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} + project_ids = Board.where(id: board_ids).select('distinct project_id').map{|x| x.project_id} + p_ids = [] + Project.where(id: project_ids).each do |x| + p_ids << x.id unless x.visible?(User.current) + 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 - ids << Message.where(id: act_ids, board_id: c_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 + ids << Message.where(id: act_ids, board_id: c_ids).map{|x| x.id} - logger.debug "filter ids #{ids}" + logger.debug "filter ids #{ids}" - activity = activity.where('act_id not in (?)', ids.flatten ).order('id desc') unless ids.flatten.empty? - end + activity = activity.where('act_id not in (?)', ids.flatten ).order('id desc') unless ids.flatten.empty? + end - # activity = activity.reject { |e| - # e.act.nil? || - # (!User.current.admin? && !e.act.nil? - # (((e.act_type == "Issue") && !e.act.project.visible?(User.current)) || - # (e.act_type == "Bid" && !e.act.courses.first.nil? && e.act.courses.first.is_public == 0 && !User.current.member_of_course?(e.act.courses.first)) || - # (e.act_type == "Journal" && e.act.respond_to?("Project") && !e.act.project.visible?(User.current)) || - # (e.act_type == "News" && ((!e.act.project.nil? && !e.act.project.visible?(User.current)) || (!e.act.course.nil? && e.act.course.is_public == 0 && !User.current.member_of_course?(e.act.course)))) || - # (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 = activity.reject { |e| + # e.act.nil? || + # (!User.current.admin? && !e.act.nil? + # (((e.act_type == "Issue") && !e.act.project.visible?(User.current)) || + # (e.act_type == "Bid" && !e.act.courses.first.nil? && e.act.courses.first.is_public == 0 && !User.current.member_of_course?(e.act.courses.first)) || + # (e.act_type == "Journal" && e.act.respond_to?("Project") && !e.act.project.visible?(User.current)) || + # (e.act_type == "News" && ((!e.act.project.nil? && !e.act.project.visible?(User.current)) || (!e.act.course.nil? && e.act.course.is_public == 0 && !User.current.member_of_course?(e.act.course)))) || + # (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 + @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? @@ -817,7 +945,7 @@ class UsersController < ApplicationController if !@user.active? #|| (@user != User.current && @memberships.empty? && events.empty?) # redirect_to home_path render_404 - return + return end end @@ -849,7 +977,7 @@ class UsersController < ApplicationController unless User.current.admin? if !@user.active? render_404 - return + return end end @@ -907,7 +1035,7 @@ class UsersController < ApplicationController unless @user.id.nil? #鍚庡彴娉ㄥ唽鐨勭敤鎴烽粯璁ゆ潈闄愪负鐢锋у紑鍙戝憳 ue = UserExtensions.create(:identity => 3, - :gender => 0, + :gender => 0, :user_id => @user.id) ue.save end @@ -977,8 +1105,8 @@ class UsersController < ApplicationController @user = User.find(params[:id]) #@user.save_attachments(params[:attachments],User.current) # Container_type涓篜rincipal - Attachment.attach_filesex(@user, params[:attachments], params[:attachment_type]) - if(params[:type].nil? || params[:type] == "1") #鍏ㄩ儴 + Attachment.attach_filesex(@user, params[:attachments], params[:attachment_type]) + if(params[:type].blank?|| params[:type] == "1") #鍏ㄩ儴 if User.current.id.to_i == params[:id].to_i user_course_ids = User.current.courses.map { |c| c.id} #鎴戠殑璧勬簮搴撶殑璇濓紝閭d箞搴旇鏄垜涓婁紶鐨勬墍鏈夎祫婧 鍔犱笂 鎴戝姞鍏ョ殑璇剧▼鐨勬墍鏈夎祫婧 @attachments = Attachment.where("(author_id = #{params[:id]} and container_type in('Project','Principal','Course','Issue','Document','Message','News','StudentWorkScore','HomewCommon')) "+ @@ -1033,14 +1161,14 @@ class UsersController < ApplicationController # 鍒犻櫎鐢ㄦ埛璧勬簮锛屽垎涓烘壒閲忓垹闄 鍜 鍗曚釜鍒犻櫎锛屽彧鑳藉垹闄よ嚜宸变笂浼犵殑璧勬簮 def user_resource_delete if params[:resource_id].present? - Attachment.where("author_id = #{User.current.id}").delete(params[:resource_id]) + Attachment.where("author_id = #{User.current.id}").delete(params[:resource_id]) elsif params[:checkbox1].present? - params[:checkbox1].each do |id| - Attachment.where("author_id = #{User.current.id}").delete(id) + params[:checkbox1].each do |id| + Attachment.where("author_id = #{User.current.id}").delete(id) end end - if(params[:type].nil? || params[:type] == "1") #鍏ㄩ儴 + if(params[:type].blank? || params[:type] == "1") #鍏ㄩ儴 if User.current.id.to_i == params[:id].to_i user_course_ids = User.current.courses.map { |c| c.id} #鎴戠殑璧勬簮搴撶殑璇濓紝閭d箞搴旇鏄垜涓婁紶鐨勬墍鏈夎祫婧 鍔犱笂 鎴戝姞鍏ョ殑璇剧▼鐨勬墍鏈夎祫婧 @attachments = Attachment.where("(author_id = #{params[:id]} and container_type in('Project','Principal','Course','Issue','Document','Message','News','StudentWorkScore','HomewCommon')) "+ @@ -1087,17 +1215,17 @@ class UsersController < ApplicationController @offset ||= @atta_pages.offset #@curse_attachments_all = @all_attachments[@offset, @limit] @attachments = paginateHelper @attachments,25 - respond_to do |format| - format.js - end + respond_to do |format| + format.js + end end #鏍规嵁id鎴栬呭悕绉版悳绱㈡暀甯堟垨鑰呭姪鏁欎负褰撳墠鐢ㄦ埛鐨勮绋 def search_user_course @user = User.current if !params[:search].nil? - @course = @user.courses.where(" #{Course.table_name}.id = #{params[:search].to_i } or #{Course.table_name}.name like '%#{params[:search.to_s]}%'") - .select { |course| @user.allowed_to?(:as_teacher,course)} + @course = @user.courses.where(" #{Course.table_name}.id = #{params[:search].to_i } or #{Course.table_name}.name like '%#{params[:search.to_s]}%'") + .select { |course| @user.allowed_to?(:as_teacher,course)} else @course = @user.courses .select { |course| @user.allowed_to?(:as_teacher,course)} @@ -1129,28 +1257,28 @@ class UsersController < ApplicationController # 灏嗚祫婧愬彂閫佸埌瀵瑰簲鐨勮绋,鍒嗕负鍙戦佸崟涓紝鎴栬呮壒閲忓彂閫 def add_exist_file_to_course @flag = true - if params[:send_id].present? + if params[:send_id].present? send_id = params[:send_id] ori = Attachment.find_by_id(send_id) course_ids = params[:course_ids] if course_ids.nil? @flag = false end - unless course_ids.nil? - course_ids.each do |id| - next if ori.blank? - attach_copied_obj = ori.copy - attach_copied_obj.tag_list.add(ori.tag_list) # tag鍏宠仈 - attach_copied_obj.container = Course.find(id) - attach_copied_obj.created_on = Time.now - attach_copied_obj.author_id = User.current.id - if attach_copied_obj.attachtype == nil - attach_copied_obj.attachtype = 4 - end - attach_copied_obj.save - @save_message = attach_copied_obj.errors.full_messages - end + unless course_ids.nil? + course_ids.each do |id| + next if ori.blank? + attach_copied_obj = ori.copy + attach_copied_obj.tag_list.add(ori.tag_list) # tag鍏宠仈 + attach_copied_obj.container = Course.find(id) + attach_copied_obj.created_on = Time.now + attach_copied_obj.author_id = User.current.id + if attach_copied_obj.attachtype == nil + attach_copied_obj.attachtype = 4 + end + attach_copied_obj.save + @save_message = attach_copied_obj.errors.full_messages end + end elsif params[:send_ids].present? send_ids = params[:send_ids].split(" ") course_ids = params[:course_ids] @@ -1177,8 +1305,20 @@ class UsersController < ApplicationController end end else - @flag = false + @flag = false end + user_course_ids = User.current.courses.map { |c| c.id} #鎴戠殑璧勬簮搴撶殑璇濓紝閭d箞搴旇鏄垜涓婁紶鐨勬墍鏈夎祫婧 鍔犱笂 鎴戝姞鍏ョ殑璇剧▼鐨勬墍鏈夎祫婧 + @attachments = Attachment.where("(author_id = #{params[:id]} and container_type in('Project','Principal','Course','Issue','Document','Message','News','StudentWorkScore','HomewCommon')) "+ + "or (container_type = 'Course' and container_id in (#{user_course_ids.empty? ? '0': user_course_ids.join(',')}))").order("created_on desc") + @type = params[:type] + @limit = 25 + @user = User.current + @is_remote = true + @atta_count = @attachments.count + @atta_pages = Paginator.new @atta_count, @limit, params['page'] || 1 + @offset ||= @atta_pages.offset + #@curse_attachments_all = @all_attachments[@offset, @limit] + @attachments = paginateHelper @attachments,25 respond_to do |format| format.js end @@ -1235,7 +1375,18 @@ class UsersController < ApplicationController else @flag=true end - + user_course_ids = User.current.courses.map { |c| c.id} #鎴戠殑璧勬簮搴撶殑璇濓紝閭d箞搴旇鏄垜涓婁紶鐨勬墍鏈夎祫婧 鍔犱笂 鎴戝姞鍏ョ殑璇剧▼鐨勬墍鏈夎祫婧 + @attachments = Attachment.where("(author_id = #{params[:id]} and container_type in('Project','Principal','Course','Issue','Document','Message','News','StudentWorkScore','HomewCommon')) "+ + "or (container_type = 'Course' and container_id in (#{user_course_ids.empty? ? '0': user_course_ids.join(',')}))").order("created_on desc") + @type = params[:type] + @limit = 25 + @user = User.current + @is_remote = true + @atta_count = @attachments.count + @atta_pages = Paginator.new @atta_count, @limit, params['page'] || 1 + @offset ||= @atta_pages.offset + #@curse_attachments_all = @all_attachments[@offset, @limit] + @attachments = paginateHelper @attachments,25 respond_to do |format| format.js end @@ -1243,15 +1394,15 @@ class UsersController < ApplicationController # 璧勬簮棰勮 def resource_preview - preview_id = params[:resource_id] - @file = Attachment.find(preview_id) - @preview_able = false; - if %w(pdf pptx doc docx xls xlsx).any?{|x| @file.filename.downcase.end_with?(x)} - @preview_able = true; - end - respond_to do |format| - format.js - end + preview_id = params[:resource_id] + @file = Attachment.find(preview_id) + @preview_able = false; + if %w(pdf pptx doc docx xls xlsx).any?{|x| @file.filename.downcase.end_with?(x)} + @preview_able = true; + end + respond_to do |format| + format.js + end end # 閲嶅懡鍚嶈祫婧 @@ -1291,7 +1442,7 @@ class UsersController < ApplicationController def destroy_membership @membership = Member.find(params[:membership_id]) if @membership.deletable? - @membership.destroy + @membership.destroy end respond_to do |format| format.html { redirect_to edit_user_url(@user, :tab => 'memberships') } @@ -1306,31 +1457,31 @@ class UsersController < ApplicationController @obj_flag = params[:tag_for_save][:object_flag] case @obj_flag - when '1' then - @obj = User.find_by_id(@obj_id) - when '2' then - @obj = Project.find_by_id(@obj_id) - when '3' then - @obj = Issue.find_by_id(@obj_id) - when '4' then - # @obj = Bid.find_by_id(@obj_id) - when '5' then - @obj = Forum.find_by_id(@obj_id) - when '6' - @obj = Attachment.find_by_id(@obj_id) - when '7' then - @obj = Contest.find_by_id(@obj_id) - when '8' - @obj = OpenSourceProject.find_by_id(@obj_id) - when '9' - @obj = Course.find_by_id(@obj_id) - else - @obj = nil + when '1' then + @obj = User.find_by_id(@obj_id) + when '2' then + @obj = Project.find_by_id(@obj_id) + when '3' then + @obj = Issue.find_by_id(@obj_id) + when '4' then + # @obj = Bid.find_by_id(@obj_id) + when '5' then + @obj = Forum.find_by_id(@obj_id) + when '6' + @obj = Attachment.find_by_id(@obj_id) + when '7' then + @obj = Contest.find_by_id(@obj_id) + when '8' + @obj = OpenSourceProject.find_by_id(@obj_id) + when '9' + @obj = Course.find_by_id(@obj_id) + else + @obj = nil end unless @obj.nil? @obj.tag_list.add(@tags.split(",")) else - return + return end if @obj.save logger.debug "#{__FILE__}:#{__LINE__} ===> #{@obj.to_json}" @@ -1421,9 +1572,9 @@ class UsersController < ApplicationController 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 = UserExtensions.find_by_id(user_extensions.user_id) - # user_extensions. + # user_extensions. end end @@ -1450,7 +1601,7 @@ class UsersController < ApplicationController render_403 return end - if(params[:type].nil? || params[:type] == "1") #鍏ㄩ儴 + if(params[:type].blank? || params[:type] == "1") #鍏ㄩ儴 if User.current.id.to_i == params[:id].to_i user_course_ids = User.current.courses.map { |c| c.id} #鎴戠殑璧勬簮搴撶殑璇濓紝閭d箞搴旇鏄垜涓婁紶鐨勬墍鏈夎祫婧 鍔犱笂 鎴戝姞鍏ョ殑璇剧▼鐨勬墍鏈夎祫婧 @attachments = Attachment.where("(author_id = #{params[:id]} and container_type in('Project','Principal','Course','Issue','Document','Message','News','StudentWorkScore','HomewCommon')) "+ @@ -1514,9 +1665,9 @@ class UsersController < ApplicationController else user_course_ids = User.find(params[:id]).courses.visible.map { |c| c.id} #濡傛灉璇剧▼绉佹湁璧勬簮锛岄偅涔堣鐪嬭繖涓祫婧愮殑璇剧▼鏄笉鏄湪 杩欎釜user鐨勬墍鏈夋垜鍙鐨勮绋嬩腑 @attachments = Attachment.where("((author_id = #{params[:id]} and is_public = 1 and container_type in" + - " ('Project','Principal','Course','Issue','Document','Message','News','StudentWorkScore','HomewCommon'))"+ - " or (container_type = 'Course' and is_public = 1 and container_id in (#{user_course_ids.empty? ? '0': user_course_ids.join(',')})) )" + - " and (filename like '%#{search}%') ").order("created_on desc") + " ('Project','Principal','Course','Issue','Document','Message','News','StudentWorkScore','HomewCommon'))"+ + " or (container_type = 'Course' and is_public = 1 and container_id in (#{user_course_ids.empty? ? '0': user_course_ids.join(',')})) )" + + " and (filename like '%#{search}%') ").order("created_on desc") end elsif params[:type] == "2" #璇剧▼璧勬簮 if User.current.id.to_i == params[:id].to_i @@ -1525,7 +1676,7 @@ class UsersController < ApplicationController else user_course_ids = User.find(params[:id]).courses.visible.map { |c| c.id} #濡傛灉璇剧▼绉佹湁璧勬簮锛岄偅涔堣鐪嬭繖涓祫婧愮殑璇剧▼鏄笉鏄湪 杩欎釜user鐨勬墍鏈夋垜鍙鐨勮绋嬩腑 @attachments = Attachment.where("((author_id = #{params[:id]} and is_public = 1 and container_type = 'Course') "+ - "or (container_type = 'Course' and is_public = 1 and container_id in (#{user_course_ids.empty? ? '0': user_course_ids.join(',')})) )"+ + "or (container_type = 'Course' and is_public = 1 and container_id in (#{user_course_ids.empty? ? '0': user_course_ids.join(',')})) )"+ " and (filename like '%#{search}%') ").order("created_on desc") end elsif params[:type] == "3" #椤圭洰璧勬簮 diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 76f36b34d..ad9322cbc 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -2338,7 +2338,7 @@ module ApplicationHelper #鏍规嵁浼犲叆浣滀笟纭畾鏄剧ず涓虹紪杈戜綔鍝佽繕鏄柊寤轰綔鍝,鎴栬呮樉绀轰綔鍝佹暟閲 def user_for_homework_common homework,is_teacher if is_teacher #鑰佸笀鏄剧ず浣滃搧鏁伴噺 - link_to "鎻愪氦锛#{homework.student_works.count}锛",student_work_index_path(:homework => homework.id),:class => "c_blue" + link_to "鎻愪氦(#{homework.student_works.count})",student_work_index_path(:homework => homework.id),:class => "c_blue" else #瀛︾敓鏄剧ず鎻愪氦浣滃搧銆佷慨鏀逛綔鍝佺瓑鎸夐挳 work = cur_user_works_for_homework homework if work.nil? diff --git a/app/helpers/journals_helper.rb b/app/helpers/journals_helper.rb index 0eee08b6b..1a0b9ca0d 100644 --- a/app/helpers/journals_helper.rb +++ b/app/helpers/journals_helper.rb @@ -116,7 +116,7 @@ module JournalsHelper end end #content << content_tag('div', links.join(' ').html_safe, :class => 'contextual', :style => 'margin-top:-25px;') unless links.empty? - content << textilizable(journal, :notes) + content << textAreailizable(journal, :notes) css_classes = "wiki" css_classes << " editable" if editable content_tag('div', content.html_safe, :id => "journal-#{journal.id}-notes", :class => css_classes ,:style => "width:510px") diff --git a/app/helpers/users_helper.rb b/app/helpers/users_helper.rb index e7ab001da..269630ec3 100644 --- a/app/helpers/users_helper.rb +++ b/app/helpers/users_helper.rb @@ -71,7 +71,7 @@ module UsersHelper def user_settings_tabs tabs = [{:name => 'general', :partial => 'users/general', :label => :label_general}, {:name => 'memberships', :partial => 'users/memberships', :label => :label_project_plural} - ] + ] if Group.all.any? tabs.insert 1, {:name => 'groups', :partial => 'users/groups', :label => :label_group_plural} end @@ -83,7 +83,7 @@ module UsersHelper def get_users_by_tag(tag_name) User.tagged_with(tag_name).order('updated_on desc') end - + # added by fq #
+ Trustie鏄竴涓潰鍚戦珮鏍″垱鏂板疄璺电殑鍦ㄧ嚎鍗忎綔绀惧尯锛屾槸鍦ㄤ腑鍥介珮鏍℃帹琛屽ぇ瑙勬ā寮鏀惧湪绾跨爺绌讹紙Massive Open Online Research, MOORE锛夌殑鏀拺骞冲彴锛屼篃绠绉癟rustie骞冲彴銆傝佸笀銆佸鐢熷拰绉戠爺浜哄憳鍙互鍦ㄦ寮灞曞悇绉嶅湪绾垮崗鍚屽涔犮佸崗鍚屼綔涓氥佸崗鍚屽紑鍙戠瓑娲诲姩銆 +
++ MOORE鏄浗闃茬瀛︽妧鏈ぇ瀛︽潹瀛﹀啗闄㈠+鎻愬嚭鐨勪竴涓潰鍚戦珮鏍$鐮旀暀瀛︽椿鍔ㄧ殑鏂板瀷鍒涙柊瀹炶返姒傚康锛屼负鍏ㄩ潰鏀寔楂樻牎浜烘墠鍩瑰吇鍜岀瀛︾爺绌舵彁渚涗簡涓绉嶆柊鎬濊矾銆侻OORE鏄澶ц妯″湪绾垮紑鏀捐绋嬶紙Massive Open Online Course, MOOC锛夌殑鎷撳睍锛屾槸璇惧爞鏁欏涓庡垱鏂板疄璺垫繁搴︾粨鍚堢殑鍏ㄦ柊妯″紡锛屽彲浠ョ湅浣淢OOC2.0銆 +
++ 2005骞村紑濮嬶紝Trustie鐮斿埗鍥㈤槦鍥寸粫缃戠粶鏃朵唬鐨勮蒋浠跺紑鍙戞晥鐜囧拰璐ㄩ噺杩欎竴鏍稿績闂灞曞紑鐮旂┒锛岀粡杩囧崄骞寸殑纾ㄧ牶涓庢敾鍏筹紝閫愭鎻ず鍑轰互澶т紬鍖栧崗鍚屽紑鍙戙佸紑鏀惧紡璧勬簮鍏变韩銆佹寔缁у彲淇¤瘎浼颁负鏍稿績鐨勪簰鑱旂綉澶ц妯″崗鍚屾満鐞嗭紝鎻愬嚭浜嗗叏鏂扮殑杞欢寮鍙戠兢浣撳寲鏂规硶銆2008骞磋捣锛岀爺鍒跺洟闃熷紑濮嬫帰绱㈠浣曞皢杩欑鍗忓悓鏈虹悊寮曞叆杞欢浜烘墠鍩瑰吇銆侻OORE姒傚康鐨勬彁鍑轰负鐮斿埗鍥㈤槦鐨勪汉鎵嶅煿鍏诲疄璺垫彁渚涗簡鏂扮殑鍙戝睍鏂瑰悜鍜屽簲鐢ㄦā寮忥紝浣縏rustie鎶鏈拰宸ュ叿鑳藉鏇寸洿鎺ャ佹洿鏈夋晥鍦颁笌楂樻牎浜烘墠鍩瑰吇瀵规帴锛屽舰鎴愪簡浠婂ぉ宸茶澶ч噺甯堢敓鎺ュ彈鐨勫湪绾夸汉鎵嶅煿鍏诲钩鍙般 +
++ 鐮斿埗鍥㈤槦璁や负MOORE鐨勫垱鏂颁汉鎵嶅煿鍏绘ā寮忥紙濡傚浘1宸﹀浘锛夋槸灏嗕簰鑱旂綉澶ц妯″崗鍚屾満鐞嗕笌楂樻牎鍒涙柊瀹炶返娲诲姩鐩哥粨鍚堢殑鍏ㄦ柊浜烘墠鍩瑰吇鏂规硶鍜屾ā寮忥紝鐮斿埗鍥㈤槦骞跺熀浜庢湰骞冲彴鐨勬灦鏋勫舰鎴愪簡瀵筂OORE鏍稿績鏈虹悊鐨勪笁鏂归潰璁よ瘑锛堝鍥1鍙冲浘锛夈 +
+鍥1 鍩轰簬MOORE鐨勫垱鏂颁汉鎵嶅煿鍏绘ā寮忎笌鏍稿績鏈虹悊
++ 鐩墠锛孴rustie骞冲彴宸茬粡鍒濇灞曠幇鍑哄ぇ瑙勬ā寮鏀惧湪绾跨爺绌剁殑鐢熸佺郴缁熻摑鍥撅紝鍏舵牳蹇冩槸鍦ㄧ嚎鏁欏瀹炶返骞冲彴鍜屽湪绾垮崗鍚岀爺绌跺钩鍙帮紝濡傚浘2銆俆rustie鍦ㄧ嚎鏁欏瀹炶返骞冲彴鏄敮鎸佹暀甯堝拰瀛︾敓鍥寸粫璇惧爞瀛︿範寮灞曞疄璺电殑骞冲彴锛堝鍥2锛夛紝Trustie鍦ㄧ嚎鍗忓悓鐮旂┒骞冲彴鏄敮鎸佸紑鍙戝皬缁勫洿缁曞疄璺典换鍔℃垨鐮旂┒宸ヤ綔寮灞曞垎甯冨紡鍗忎綔鐨勫钩鍙帮紙濡傚浘2锛夈備袱涓牳蹇冨钩鍙颁负涓鍚"鏂版墜"澶у鐢熸垚闀夸负鍏锋湁涓瀹氬垱鏂拌兘鍔涚殑"鍒涘"鎻愪緵浜嗕粠瀛︿範鍒扮爺绌剁殑涓涓笎杩涘紡鎴愰暱鐜锛堝鍥2锛夈 +
++ 鐗瑰埆鏄紝鏍规嵁甯堢敓鐨勫疄闄呴渶瑕侊紝Trustie骞冲彴鎻愪緵浜嗙鏈夋ā寮忓拰鍏紑妯″紡锛屾敮鎸侀拡瀵规湭鍏紑鎴愭灉瀹炴柦鏈夋晥鐭ヨ瘑浜ф潈淇濇姢涓哄墠鎻愮殑浜ゆ祦鍒嗕韩锛堝鍥2锛夈傞殢鐫瓒婃潵瓒婂鐨勯珮鏍°佽绋嬪拰鐮旂┒灏忕粍鐨勫姞鍏ワ紝MOORE鍒涙柊瀹炶返妯″紡鐨勭敓鎬佹晥鐩婂皢涓嶆柇鏄剧幇鍑烘潵銆 +
+鍥2 鍩轰簬MOORE鐨勬敮鎾戝钩鍙板拰鐢熸佺郴缁
++ 鐮斿埗鍥㈤槦鐗瑰埆鎰熻阿楂樻牎鑰佸笀鍜屽鐢熺殑绉瀬鍙嶉銆佹棤绉佸垱鎰忋傚钩鍙扮殑寰堝瀹炵敤渚挎嵎鐨勫姛鑳介兘鏄佸笀浠Н鏋佸弬涓庡拰璁捐鐨勭粨鏋滐紝姹囪仛浜嗗ぇ閲忓笀鐢熺殑瀹濊吹璐$尞锛屾槸鐮斿埗鍥㈤槦鍜岀敤鎴风兢浣撳叡鍚屾垚闀跨殑缁撴灉銆 +
+
+ Trustie骞冲彴鐨勫熀鏈濊矾鏄皢寮婧愭ā寮忎笌涓浗楂樻牎浜烘墠鍩瑰吇娲诲姩鐩哥粨鍚堬紝浣嗗叾鏈川涓婃槸涓绉峅2O锛圤nline To Offline锛夌殑鍒涙柊浜烘墠鍩瑰吇妯″紡锛屽彧鏈夊湪浠ヤ笅涓や釜鏂归潰鍚屾鎺ㄨ繘锛屾墠鑳藉湪鎸佺画瑙e喅瀹為檯闇姹傜殑杩囩▼涓揩閫熷彂灞曪細
+ 锛1锛夋瀯寤哄疄璺靛钩鍙帮紝婵娲诲垱鏂拌兘鍔涳細鎴愪负鏀寔涓嶅悓瑙勬ā鐨勫洟闃熻繘琛屽崗鍚岀爺绌跺拰鍗忓悓寮鍙戠殑瀹炶返骞冲彴锛屾敮鎸佸悇绫诲彲鍏紑鐨勮绋嬪疄楠屼换鍔°佹暀鐮斿绉戠爺浠诲姟鐨勫湪绾垮崗鍚岋紝鑳藉鏈夋晥鎻愬崌鍜岃瘎浼板鐢熺殑鍒涙柊鑳藉姏銆佸崗浣滆兘鍔涘拰瀹炶返鑳藉姏銆
+ 锛2锛夊紩鍏ュ紑婧愮悊蹇碉紝褰㈡垚鍒涘鏂囧寲锛氬皢浜掕仈缃戝紑婧愯蒋浠惰繍鍔ㄤ腑鐨勮嚜鐢便佸绛夈佸叡浜佸垱鏂扮殑鐞嗗康寮曞叆楂樻牎锛屼娇"鑷富鍒涙剰骞朵翰鑷姩鎵嬪疄鐜板垱鎰"鐨勫垱瀹㈢簿绁炴繁鍏ヤ汉鎵嶅煿鍏绘椿鍔紝鍦ㄥ鐢熺兢浣撲腑褰㈡垚澶ц儐鍒涙剰銆佸ぇ鑳嗗疄璺电殑鍒涙柊鏂囧寲銆
+
+ 鐮斿埗鍥㈤槦璁や负锛孴rustie骞冲彴鏄竴绉"浜掕仈缃+"鎬濈淮鍦ㄩ珮鏍℃暀鑲查鍩熺殑澶у瀷鎺㈢储鎬у疄璺点備綔涓轰竴绉嶄簰鑱旂綉搴旂敤锛孴rustie骞冲彴鑷韩鐨勫紑鍙戜篃閲囧彇浜嗕簰鑱旂綉妯″紡锛歍rustie鐮斿埗鍥㈤槦閲囩敤浜"缃戞瀯鍖栬蒋浠跺紑鍙戞ā寮"锛屽潥鎸"姣忓懆涓鏇"鐨勫揩閫熶笂绾裤佸揩閫熶綋楠屾ā寮忥紝浠ユ渶澶х▼搴︿笂璐磋繎鐢ㄦ埛瀹為檯闇姹傛彁鍗囥傛杩庨珮鏍″笀鐢熶竴鍚屾姇韬垱鏂板疄璺碉紝鍏卞悓瑙佽瘉MOORE鍒涙柊鐢熸佺殑鏃╂棩褰㈡垚銆 +
+<%= flash[:error]%>
+<%= flash[:error]%>
<% elsif flash[:notice] %><%= flash[:notice]%>
diff --git a/app/views/boards/_course_show.html.erb b/app/views/boards/_course_show.html.erb index b8bbf3d63..f117acd7f 100644 --- a/app/views/boards/_course_show.html.erb +++ b/app/views/boards/_course_show.html.erb @@ -37,7 +37,7 @@ <% @topics.each do |topic| %><%= @homework.description %>
+杈撳叆 2 1 1 4 4 2 3 6 5
+杈撳嚭 15
+
娉細杩熶氦鎵2鍒嗭紝缂鸿瘎涓涓綔鍝佹墸2鍒
+绗<%= @student_work.student_work_tests.count - index%>娆℃祴璇
<%= test.created_at.to_s(:db) %> + +