diff --git a/Gemfile b/Gemfile index 80c0e1c2a..39a181d05 100644 --- a/Gemfile +++ b/Gemfile @@ -50,16 +50,16 @@ gem 'elasticsearch-model' gem 'elasticsearch-rails' #rails 3.2.22.2 bug - gem "test-unit", "~>3.0" + # gem "test-unit", "~>3.0" ### profile - gem 'oneapm_rpm' + # gem 'oneapm_rpm' group :development do gem 'grape-swagger' gem 'better_errors', '~> 1.1.0' # gem "query_reviewer" - gem 'rack-mini-profiler', '~> 0.9.3' + # gem 'rack-mini-profiler', '~> 0.9.3' if RUBY_PLATFORM =~ /w32/ gem 'win32console' end diff --git a/app/api/mobile/apis/new_comment.rb b/app/api/mobile/apis/new_comment.rb index 84cf2ef93..e5e42e624 100644 --- a/app/api/mobile/apis/new_comment.rb +++ b/app/api/mobile/apis/new_comment.rb @@ -54,6 +54,16 @@ module Mobile authenticate! + subscribe = 0 #默认未关注 + + #-------------------获取用户是否关注此公众号----------------------------- + openid = session[:wechat_openid] + raise "无法获取到openid,请在微信中打开本页面" unless openid + user_info = Wechat.api.user(openid) + Rails.logger.info "user_info!!!!!!!!!" + Rails.logger.info user_info + subscribe = user_info["subscribe"] + status = 0 tip = 0 #0班级1项目 type = params[:type] @@ -207,6 +217,7 @@ module Mobile present :result, result present :status, status present :tip, tip + present :subscribe,subscribe end end end diff --git a/app/api/mobile/apis/users.rb b/app/api/mobile/apis/users.rb index 4950d7041..62376dc6e 100644 --- a/app/api/mobile/apis/users.rb +++ b/app/api/mobile/apis/users.rb @@ -37,7 +37,7 @@ module Mobile raise "此用户已经绑定过公众号, 请换一个帐户试试" if user.user_wechat - if uw && !user.real? + if uw && !uw.real? uw.migrate_user(user) else UserWechat.create!( @@ -69,7 +69,8 @@ module Mobile :should_confirmation_password => true) raise user.errors.full_messages.first if user.new_record? - if uw && !user.real? + if uw && !uw.real? + user.update_attributes(:lastname=>uw.user[:lastname]) uw.migrate_user(user) else UserWechat.create!( diff --git a/app/controllers/admin_controller.rb b/app/controllers/admin_controller.rb index 0463e08e8..3c012fce7 100644 --- a/app/controllers/admin_controller.rb +++ b/app/controllers/admin_controller.rb @@ -61,8 +61,7 @@ class AdminController < ApplicationController if params[:syllabus_id] && params[:course_id] course = Course.where("id = #{params[:course_id].to_i}").first unless course.nil? - course.update_column('syllabus_id', params[:syllabus_id].to_i) - Rails.logger.error "update_syllabus_id: admin_controller/select_scourse_syllabus" + course.update_attribute(:syllabus_id, params[:syllabus_id].to_i) @flag = true end end @@ -83,8 +82,7 @@ class AdminController < ApplicationController syllabus.update_attributes(:title => params[:title], :eng_name => params[:eng_name], :user_id => @user.id) syllabus.description = Message.where("id = 19412").first.nil? ? nil : Message.where("id = 19412").first.content if syllabus.save - course.update_column('syllabus_id', syllabus.id) - Rails.logger.error "update_syllabus_id: admin_controller/create_syllabus" + course.update_attribute(:syllabus_id, params[:syllabus_id].to_i) @flag = params[:flag].to_i @course = course respond_to do |format| diff --git a/app/controllers/applied_project_controller.rb b/app/controllers/applied_project_controller.rb index 069365df7..30978367c 100644 --- a/app/controllers/applied_project_controller.rb +++ b/app/controllers/applied_project_controller.rb @@ -53,7 +53,7 @@ class AppliedProjectController < ApplicationController else @project = Project.find(params[:project_id]) end - if !@project || params[:invite_code].upcase.to_s != @project.invite_code + if !@project || params[:invite_code].strip.upcase.to_s != @project.invite_code @flag = 1 elsif User.current.member_of?(@project) @flag = 2 diff --git a/app/controllers/files_controller.rb b/app/controllers/files_controller.rb index ed2b2ebfa..cd3870e9a 100644 --- a/app/controllers/files_controller.rb +++ b/app/controllers/files_controller.rb @@ -77,19 +77,25 @@ class FilesController < ApplicationController if params[:insite] if q == "%%" @result = [] - @searched_attach = paginateHelper @result,10 + # @searched_attach = paginateHelper @result,10 else @result = find_public_attache q,sort @result = visable_attachemnts_insite @result,@course - @searched_attach = paginateHelper @result,10 + # @searched_attach = paginateHelper @result,10 end else @result = find_course_attache q,@course,sort @result = visable_attachemnts @result - @searched_attach = paginateHelper @result,10 - + # @searched_attach = paginateHelper @result,10 @tag_list = get_course_tag_list @course end + @all_attachments = @result + @limit = 10 + @feedback_count = @all_attachments.count + @feedback_pages = Paginator.new @feedback_count, @limit, params['page'] + @offset ||= @feedback_pages.offset + #@curse_attachments_all = @all_attachments[@offset, @limit] + @obj_attachments = paginateHelper @all_attachments,10 #rescue Exception => e # #render 'stores' # redirect_to search_course_files_url @@ -144,18 +150,26 @@ class FilesController < ApplicationController if params[:insite] if q == "%%" @project_attachment_result = [] - @searched_attach = paginateHelper @project_attachment_result, 10 + # @searched_attach = paginateHelper @project_attachment_result, 10 else @project_attachment_result = find_public_attache q,sort @project_attachment_result = visable_attachemnts_insite @project_attachment_result, @project - @searched_attach = paginateHelper @project_attachment_result, 10 + # @searched_attach = paginateHelper @project_attachment_result, 10 end else @project_attachment_result = find_project_attache q, @project,sort @project_attachment_result = visable_attachemnts @project_attachment_result - @searched_attach = paginateHelper @project_attachment_result,10 + # @searched_attach = paginateHelper @project_attachment_result,10 @tag_list = get_project_tag_list @project end + + @all_attachments = @project_attachment_result + @limit = 10 + @feedback_count = @all_attachments.count + @feedback_pages = Paginator.new @feedback_count, @limit, params['page'] + @offset ||= @feedback_pages.offset + #@curse_attachments_all = @all_attachments[@offset, @limit] + @obj_attachments = paginateHelper @all_attachments,10 #rescue Exception => e # #render 'stores' # redirect_to search_course_files_url @@ -867,7 +881,17 @@ class FilesController < ApplicationController else @result = @result.select{|attachment| attachment.tag_list.include?(@tag_name)} unless @tag_name.blank? end - @searched_attach = paginateHelper @result,10 + + @all_attachments = @result + @limit = 10 + @feedback_count = @all_attachments.count + @feedback_pages = Paginator.new @feedback_count, @limit, params['page'] + @offset ||= @feedback_pages.offset + #@curse_attachments_all = @all_attachments[@offset, @limit] + @obj_attachments = paginateHelper @all_attachments,10 + + + # @searched_attach = paginateHelper @result,10 if @project @tag_list = get_project_tag_list @project @result_search_project = @result diff --git a/app/controllers/pull_requests_controller.rb b/app/controllers/pull_requests_controller.rb index 58d1cb3b2..5e21f9af0 100644 --- a/app/controllers/pull_requests_controller.rb +++ b/app/controllers/pull_requests_controller.rb @@ -1,7 +1,8 @@ class PullRequestsController < ApplicationController before_filter :find_project_and_repository - before_filter :connect_gitlab, :only => [:index, :show, :create, :accept_pull_request, :pull_request_commits, :pull_request_changes, :new] + before_filter :connect_gitlab, :only => [:index, :show, :create, :accept_pull_request, :pull_request_commits, :pull_request_changes, :new, + :update_pull_request, :pull_request_comments, :create_pull_request_comment] layout "base_projects" include PullRequestsHelper include ApplicationHelper @@ -14,9 +15,19 @@ class PullRequestsController < ApplicationController @requests = @g.merge_requests(@project.gpid).select{|request| request.state == "opened" || request.state == "reopened"} when "2" @requests = @g.merge_requests(@project.gpid).select{|request| request.state == "merged"} + when "3" + @requests = @g.merge_requests(@project.gpid).select{|request| request.state == "closed"} end @requests_opened_count = @requests.count - @requests_merged_count = params[:type] ? @requests.count : @g.merge_requests(@project.gpid).select{|request| request.state == "merged"}.count + @requests_merged_count = @g.merge_requests(@project.gpid).select{|request| request.state == "merged"}.count + @requests_closed_count = @g.merge_requests(@project.gpid).select{|request| request.state == "closed"}.count + + @limit = 10 + @is_remote = true + @count = type_count(type, @requests_opened_count, @requests_merged_count, @requests_closed_count) + @pages = Paginator.new @count, @limit, params['page'] || 1 + @offset ||= @pages.offset + @requests = paginateHelper @requests, 10 respond_to do |format| format.html format.js @@ -84,6 +95,15 @@ class PullRequestsController < ApplicationController @commits_count = @commits.count @changes = @g.merge_request_changes(@project.gpid, params[:id]).try(:changes) @changes_count = @changes.count + @comments = @g.merge_request_comments(@project.gpid, params[:id]).reverse + @comments_count = @comments.count + + @limit = 10 + @is_remote = true + @count = @comments_count + @pages = Paginator.new @count, @limit, params['page'] || 1 + @offset ||= @pages.offset + @comments = paginateHelper @comments, 10 end # Accept a merge request. @@ -99,6 +119,7 @@ class PullRequestsController < ApplicationController def accept_pull_request begin status = @g.accept_merge_rquest(@project.gpid, params[:id], User.current.gid) + PullRequest.create(:pull_request_id => status.id, :user_id => User.current.id, :gpid => status.project_id) respond_to do |format| format.js{redirect_to project_pull_request_path(status.id, :project_id => @project.id)} end @@ -107,16 +128,110 @@ class PullRequestsController < ApplicationController end end - # 获取某次请求的提交次数 - def pull_request_commits - @type = parms[:type] - @commits = @g.merge_request_commits(@project.gpid, params[:id].to_i) + # Updates a merge request. + # + # @example + # Gitlab.update_merge_request(5, 42, :title => 'New title') + # + # @param [Integer] project The ID of a project. + # @param [Integer] id The ID of a merge request. + # @param [Hash] options A customizable set of options. + # @option options [String] :title The title of a merge request. + # @option options [String] :source_branch The source branch name. + # @option options [String] :target_branch The target branch name. + # @option options [Integer] :assignee_id The ID of a user to assign merge request. + # @option options [String] :state_event New state (close|reopen|merge). + # @return [Gitlab::ObjectifiedHash] Information about updated merge request. + def update_pull_request + begin + @g.update_merge_request(@project.gpid, params[:id], User.current.gid, :state_event => params[:state]) + respond_to do |format| + format.html{redirect_to project_pull_request_path(params[:id], :project_id => @project.id)} + end + rescue Exception => e + @message = e.message + end end - # 获取某次请求的改动 + # Creates a merge request. + # + # @example + # Gitlab.create_merge_request(5, 'New merge request', + # :source_branch => 'source_branch', :target_branch => 'target_branch') + # Gitlab.create_merge_request(5, 'New merge request', + # :source_branch => 'source_branch', :target_branch => 'target_branch', :assignee_id => 42) + def create_pull_request_comment + content = params[:pull_request_comment] + begin + @comments = @g.create_merge_request_comment(@project.gpid, params[:id], content, User.current.gid) + respond_to do |format| + format.html{redirect_to project_pull_request_path(params[:id], :project_id => @project.id)} + end + rescue Exception => e + @message = e.message + end + end + + # Gets the comments on a merge request. + # + # @example + # Gitlab.merge_request_comments(5, 1) + def pull_request_comments + begin + @comments = @g.merge_request_comments(@project.gpid, params[:id]).reverse + @comments_count = @comments.count + + @limit = 10 + @is_remote = true + @count = @comments_count + @pages = Paginator.new @count, @limit, params['page'] || 1 + @offset ||= @pages.offset + @comments = paginateHelper @comments, 10 + rescue Exception => e + @message = e.message + end + end + + # Get a list of merge request commits. + # Parameters: + # id (required) - The ID of a project + # merge_request_id (required) - The ID of MR + def pull_request_commits + begin + @type = params[:type] + @commits = @g.merge_request_commits(@project.gpid, params[:id]) + @commits_count = @commits.count + + @limit = 10 + @is_remote = true + @count = @commits_count + @pages = Paginator.new @count, @limit, params['page'] || 1 + @offset ||= @pages.offset + @commits = paginateHelper @commits, 10 + rescue Exception => e + @message = e.message + end + end + + # Shows information about the merge request including its files and changes. With GitLab 8.2 the return fields upvotes and downvotes are deprecated and always return 0. + # Parameters: + # id (required) - The ID of a project + # merge_request_id (required) - The ID of MR def pull_request_changes - @changes = @g.merge_request_changes(@project.gpid, params[:id]).try(:changes) - @changes_count = @changes.count + begin + @type = params[:type] + @changes = @g.merge_request_changes(@project.gpid, params[:id]).try(:changes) + @changes_count = @changes.count + + @limit = 10 + @is_remote = true + @count = @changes_count + @pages = Paginator.new @count, @limit, params['page'] || 1 + @offset ||= @pages.offset + @changes = paginateHelper @changes, 10 + rescue Exception => e + @message = e.message + end end private diff --git a/app/controllers/quality_analysis_controller.rb b/app/controllers/quality_analysis_controller.rb index c9873ade4..228b643f5 100644 --- a/app/controllers/quality_analysis_controller.rb +++ b/app/controllers/quality_analysis_controller.rb @@ -17,6 +17,7 @@ class QualityAnalysisController < ApplicationController # params 说明:{identifier:版本库名} def create + logger.info("11111111111111111111111111111") begin user_name = User.find(params[:user_id]).try(:login) identifier = params[:identifier] @@ -32,12 +33,18 @@ class QualityAnalysisController < ApplicationController projects_date = open(@sonar_address + "/api/projects/index").read arr = JSON.parse(projects_date).map {|m| m["nm"]} # eg: ["Hjqreturn:cc_rep", "Hjqreturn:putong", "Hjqreturn:sonar_rep2", "shitou:sonar_rep"] quality_an = QualityAnalysis.where(:sonar_name => sonar_name).first - if @client.job.exists?(job_name) && QualityAnalysis.where(:sonar_name => sonar_name).select{|qa| arr.include?(qa.sonar_name)}.blank? - aa = @client.job.delete("#{job_name}") + logger.info("###########################6666666666666") + logger.info("job_name is ###########################{job_name}") + logger.info("@client_jenkins is ###########################{@client_jenkins}") + logger.info("@client_jenkins job is ###########################{@client_jenkins.job}") + logger.info("@client_jenkins result is ###########################{@client_jenkins.job.exists?(job_name)}") + if @client_jenkins.job.exists?(job_name) && QualityAnalysis.where(:sonar_name => sonar_name).select{|qa| arr.include?(qa.sonar_name)}.blank? + aa = @client_jenkins.job.delete("#{job_name}") quality_an.delete unless quality_an.blank? end + # Checks if the given job exists in Jenkins. - # unless @client.job.exists?(job_name) + unless @client_jenkins.job.exists?(job_name) @g = Gitlab.client branch = params[:branch] language = swith_language_type(params[:language]) @@ -59,20 +66,20 @@ class QualityAnalysisController < ApplicationController @doc.at_xpath("//hudson.plugins.sonar.SonarRunnerBuilder/properties").content = properties # sonar-properties # jenkins job创建 - jenkins_job = @client.job.create("#{job_name}", @doc.to_xml) + jenkins_job = @client_jenkins.job.create("#{job_name}", @doc.to_xml) logger.info("Jenkins status of create ==> #{jenkins_job}") # 将地址作为hook值添加到gitlab @g.add_project_hook(@project.gpid, @jenkins_address + "/project/#{job_name}") # job创建完成后自动运行job,如果运行成功则返回‘200’ - code = @client.job.build("#{job_name}") + code = @client_jenkins.job.build("#{job_name}") logger.error("build result ==> #{code}") # 判断调用sonar分析是否成功 # 等待启动时间处理, 最长时间为30分钟 for i in 0..360 do sleep(5) - @current_build_status = @client.job.get_current_build_status("#{job_name}") + @current_build_status = @client_jenkins.job.get_current_build_status("#{job_name}") if (@current_build_status == "success" || @current_build_status == "failure") break if i == 360 @@ -86,7 +93,7 @@ class QualityAnalysisController < ApplicationController sleep(10) # 获取sonar output结果 - console_build = @client.job.get_console_output("#{job_name}", build_num = 0, start = 0, mode = 'text')["output"] + console_build = @client_jenkins.job.get_console_output("#{job_name}", build_num = 0, start = 0, mode = 'text')["output"] logger.info("@current_build_status is ==> #{@current_build_status}") # 两种情况需要删除job: @@ -94,14 +101,14 @@ class QualityAnalysisController < ApplicationController # 2/creat和build成功,调用sonar启动失败则删除job # 错误信息存储需存到Trustie数据库,否则一旦job删除则无法获取这些信息 if jenkins_job == '200' && code != '201' - @client.job.delete("#{job_name}") + @client_jenkins.job.delete("#{job_name}") else if @current_build_status == "failure" reg_console = /Exception:.*?\r/.match(console_build) output = reg_console[0].gsub("\r", "") unless reg_console.nil? se = SonarError.where(:jenkins_job_name => job_name).first se.nil? ? SonarError.create(:project_id => @project.id, :jenkins_job_name => job_name, :output => output) : se.update_column(:output, output) - @client.job.delete("#{job_name}") + @client_jenkins.job.delete("#{job_name}") elsif @current_build_status == "success" if quality_an.blank? QualityAnalysis.create(:project_id => @project.id, :author_login => user_name, :rep_identifier => identifier, @@ -111,17 +118,24 @@ class QualityAnalysisController < ApplicationController end end end - # end + + respond_to do |format| + if @current_build_status == "success" + format.html{redirect_to project_quality_analysis_path(:project_id => @project.id, :resource_id => sonar_name, :branch => branch, :current_build_status => @current_build_status, :job_name => job_name)} + elsif @current_build_status == "failure" + format.html{redirect_to error_list_project_quality_analysi_path(:project_id => @project.id, :job_name => job_name)} + end + end + end rescue => e @message = e.message - end - respond_to do |format| - if @current_build_status == "success" - format.html{redirect_to project_quality_analysis_path(:project_id => @project.id, :resource_id => sonar_name, :branch => branch, :current_build_status => @current_build_status, :job_name => job_name)} - elsif @current_build_status == "failure" - format.html{redirect_to error_list_project_quality_analysi_path(:project_id => @project.id, :job_name => job_name)} + logger.error("######################====>#{e.message}") + respond_to do |format| + format.html{redirect_to error_list_project_quality_analysi_path(:project_id => @project.id, :job_name => job_name, :message => @message)} + # format.html{redirect_to :controller => 'repositories', :action => 'show', :id => @project, :repository_id => identifier} end end + end def error_list @@ -159,9 +173,9 @@ class QualityAnalysisController < ApplicationController rep_id = Repository.where(:project_id => @project.id, :identifier => qa.rep_identifier).first.try(:id) job_name = "#{qa.author_login}-#{rep_id}" logger.info("result: job_name ###################==>#{job_name}") - logger.info("result: @client.job ###################==>#{@client.job}") + logger.info("result: @client_jenkins.job ###################==>#{@client_jenkins.job}") - d_job = @client.job.delete(job_name) + d_job = @client_jenkins.job.delete(job_name) logger.info("result: delete job ###################==>#{d_job}") qa.delete respond_to do |format| @@ -198,7 +212,7 @@ class QualityAnalysisController < ApplicationController @doc.at_xpath("//hudson.plugins.sonar.SonarRunnerBuilder/properties").content = properties # sonar-properties # update成功则返回 ‘200’ - jenkins_job = @client.job.update("#{job_name}", @doc.to_xml) + jenkins_job = @client_jenkins.job.update("#{job_name}", @doc.to_xml) # 数据更新到Trustie数据 if jenkins_job == '200' logger.info("quality_ananlysis will be updated: ==> #{jenkins_job}") @@ -278,9 +292,10 @@ class QualityAnalysisController < ApplicationController @jenkins_address = Redmine::Configuration['jenkins_address'] jenkins_username = Redmine::Configuration['jenkins_username'] jenkins_password = Redmine::Configuration['jenkins_password'] - + logger.info("22222222222222222222222222222222") # connect jenkins - @client = JenkinsApi::Client.new(:server_url => @jenkins_address, :username => jenkins_username, :password => jenkins_password) + @client_jenkins = JenkinsApi::Client.new(:server_url => @jenkins_address, :username => jenkins_username, :password => jenkins_password) + logger.info("333333333333333333333333333333") rescue => e logger.error("failed to connect Jenkins ==> #{e}") end diff --git a/app/controllers/student_work_controller.rb b/app/controllers/student_work_controller.rb index adfcd6263..8f3ebff98 100644 --- a/app/controllers/student_work_controller.rb +++ b/app/controllers/student_work_controller.rb @@ -597,6 +597,7 @@ class StudentWorkController < ApplicationController student_work.description = params[:student_work][:description] student_work.homework_common_id = @homework.id student_work.user_id = User.current.id + student_work.commit_time = Time.now student_work.save_attachments(params[:attachments]) render_attachment_warning_if_needed(student_work) if @homework.homework_type == 3 && @homework.homework_detail_group.base_on_project == 1 @@ -791,7 +792,7 @@ class StudentWorkController < ApplicationController end end elsif @homework.homework_type == 1 - @work.update_attributes(:work_status => 0, :name => "#{@homework.name}的作品提交", :description => nil, :late_penalty => 0) + @work.update_attributes(:work_status => 0, :name => "#{@homework.name}的作品提交", :description => nil, :late_penalty => 0, :commit_time => nil) end @student_work = StudentWork.new respond_to do |format| @@ -826,7 +827,7 @@ class StudentWorkController < ApplicationController @new_score.user_id = User.current.id @new_score.student_work_id = @work.id if @is_teacher && @work.work_status == 0 - @work.update_column('work_status', 1) + @work.update_attributes(:work_status => 1, :commit_time => Time.now) end if User.current.admin? @new_score.reviewer_role = 1 diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index cb006d342..e929153ad 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -42,7 +42,7 @@ class UsersController < ApplicationController :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_system_messages,:choose_user_course,:user_courselist,:user_projectlist,:sort_syllabus_list, - :my_homeworks,:manage_or_receive_homeworks,:search_m_r_homeworks] + :sort_project_list,:my_homeworks,:manage_or_receive_homeworks,:search_m_r_homeworks] before_filter :auth_user_extension, only: :show #before_filter :rest_user_score, only: :show #before_filter :select_entry, only: :user_projects @@ -1025,6 +1025,7 @@ class UsersController < ApplicationController student_work.work_status = 1 end + student_work.commit_time = Time.now student_work.save send_message_to_teacher(student_work) homework.update_column(:updated_at, Time.now) @@ -1555,7 +1556,7 @@ class UsersController < ApplicationController stu_courses = @user.courses.visible.not_deleted.select{|course| @user.has_student_role(course)} stu_course_ids = stu_courses.empty? ? "(-1)" : "(" + stu_courses.map{|course| course.id}.join(',') + ")" @receive_homeworks = HomeworkCommon.where("course_id in #{stu_course_ids} and publish_time <= '#{Date.today}'").order("created_at desc").limit(5) - if (@manage_homeworks.empty? && @receive_homeworks.empty?) || (@receive_homeworks.empty?) || (!@manage_homeworks.empty? && !@receive_homeworks.empty? && @manage_homeworks.first.publish_time > @receive_homeworks.first.publish_time) + if (@manage_homeworks.empty? && @receive_homeworks.empty?) || (@receive_homeworks.empty?) || (!@manage_homeworks.empty? && !@receive_homeworks.empty? && @manage_homeworks.first.created_at > @receive_homeworks.first.created_at) @manage_pre = true else @manage_pre = false @@ -3439,7 +3440,22 @@ class UsersController < ApplicationController end def user_projectlist - @order, @c_sort,@type = params[:order] || 1, params[:sort] || 1, params[:type] || 1 + @order, @c_sort, @type, @list_type = 1, 2, 1, 1 + #limit = 5 + + @my_projects = @user.projects.visible.where("projects.user_id = #{@user.id}").select("projects.*,(SELECT MAX(updated_at) FROM `forge_activities` WHERE forge_activities.project_id = projects.id) AS updatetime").order("updatetime DESC") + @my_projects_count = @my_projects.count + + @my_joined_projects = @user.projects.visible.where("projects.user_id != #{@user.id}").select("projects.*,(SELECT MAX(updated_at) FROM `forge_activities` WHERE forge_activities.project_id = projects.id) AS updatetime").order("updatetime DESC") + @my_joined_projects_count = @my_joined_projects.count + respond_to do |format| + format.html {render :layout => 'new_base_user'} + end + end + + def sort_project_list + @order, @c_sort, @type, @list_type = params[:order] || 1, params[:sort] || 1, params[:type] || 1, params[:list_type] || 1 + #limit = 5 #确定 sort_type if @order.to_i == @type.to_i @@ -3448,11 +3464,16 @@ class UsersController < ApplicationController @c_sort = 2 end - sort_name = "updated_at" + sort_name = "updatetime" sort_type = @c_sort == 1 ? "asc" : "desc" #@projects = @user.projects.visible.order("#{sort_name} #{sort_type}") - @projects = @user.projects.visible.select("projects.*,(SELECT MAX(updated_at) FROM `forge_activities` WHERE forge_activities.project_id = projects.id) AS #{sort_name} ").order("#{sort_name} #{sort_type}") + if @list_type.to_i == 1 + @projects = @user.projects.visible.where("projects.user_id = #{@user.id}").select("projects.*,(SELECT MAX(updated_at) FROM `forge_activities` WHERE forge_activities.project_id = projects.id) AS #{sort_name}").order("#{sort_name} #{sort_type}") + else + @projects = @user.projects.visible.where("projects.user_id != #{@user.id}").select("projects.*,(SELECT MAX(updated_at) FROM `forge_activities` WHERE forge_activities.project_id = projects.id) AS #{sort_name}").order("#{sort_name} #{sort_type}") + end + @projects_count = @projects.count #根据 问题+资源数排序 @project.project_score.issue_num @project.project_score.attach_num if @order.to_i == 2 @@ -3469,18 +3490,8 @@ class UsersController < ApplicationController @type = 1 end - #分页 - @limit = 10 - @is_remote = true - @atta_count = @projects.count - @atta_pages = Paginator.new @atta_count, @limit, params['page'] || 1 - @offset ||= @atta_pages.offset - @projects = paginateHelper @projects,@limit - @is_project = 1 - respond_to do |format| format.js - format.html {render :layout => 'new_base_user'} end end diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index fbd1f2f0c..ced8854d9 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -252,13 +252,16 @@ class WechatsController < ActionController::Base end def sendBind(request) + tmpurl = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=#{Wechat.config.appid}&redirect_uri=#{ROOT_URL+'/wechat/user_activities'}&response_type=code&scope=snsapi_base&state=login&connect_redirect=1#wechat_redirect" + logger.info "tmpurl!!!!!!!!!!!!!!" + logger.info tmpurl news = (1..1).each_with_object([]) { |n, memo| memo << { title: '绑定登录', content: "欢迎使用Trustie创新实践服务平台! 在这里您可以随时了解您的课程和项目动态,随时点赞和回复。 我们将会与微信不断结合,为您提供更有价值的服务。 您还未绑定确实的用户,请先绑定,谢谢!" } } request.reply.news(news) do |article, n, index| # article is return object - url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=#{Wechat.config.appid}&redirect_uri=#{ROOT_URL+'/wechat/user_activities'}&response_type=code&scope=snsapi_base&state=login#wechat_redirect" + url = tmpurl pic_url = "#{ROOT_URL}/images/weixin_pic.jpg" article.item title: "#{n[:title]}", description: n[:content], diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index b225c3099..2d5455b67 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -2738,7 +2738,7 @@ module ApplicationHelper link_to "补交作品(#{count})", new_student_work_url_without_domain(homework.id),:class => 'c_red' end else - if homework.homework_detail_manual && homework.homework_detail_manual.comment_status == 2 #匿评作业,且作业状态不是在开启匿评之前 + if homework.homework_detail_manual && homework.homework_detail_manual.comment_status == 2 && StudentWorksEvaluationDistribution.where("student_work_id = #{work.id}").count > 0 #匿评作业,且作业状态不是在开启匿评之前 link_to "作品匿评", student_work_index_url_in_org(homework.id), :class => 'c_blue', :title => "开启匿评后不可修改作品" elsif homework.homework_detail_manual && homework.homework_detail_manual.comment_status == 3 link_to "查看作品(#{count})",student_work_index_url_in_org(homework.id), :class => 'c_blue', :title => "匿评已结束" @@ -2841,7 +2841,7 @@ module ApplicationHelper #获取当前作业的提交截止时间/互评截止时间 def cur_homework_end_time homework str = "" - if homework.anonymous_comment == 0 && homework.end_time < Date.today && homework.homework_detail_manual + if homework.anonymous_comment == 0 && homework.end_time && homework.end_time < Date.today && homework.homework_detail_manual str = "互评截止:#{format_date homework.homework_detail_manual.evaluation_end}" else str = "提交截止:#{homework.end_time ? (format_date homework.end_time) : '       --       '}" diff --git a/app/helpers/pull_requests_helper.rb b/app/helpers/pull_requests_helper.rb index 82d4edc0f..07b022358 100644 --- a/app/helpers/pull_requests_helper.rb +++ b/app/helpers/pull_requests_helper.rb @@ -14,4 +14,37 @@ module PullRequestsHelper User.find(user_id).try(:login) end + # 获取接受PullRequest用户的信息 + def accept_user pull_request_id + PullRequest.where(:pull_request_id => pull_request_id).first + end + + def get_state state + case state + when "open","reopened" + l(:label_state_open) + when "closed" + l(:label_state_closed) + when "merged" + l(:label_state_merged) + end + end + + def type_count type, requests_opened_count, requests_merged_count, requests_closed_count + case type + when nil, "1" + requests_opened_count + when "2" + requests_merged_count + when "3" + requests_closed_count + end + end + + # 判断是否允许创建Pull Request + # 如果分支相同,并且项目相同则提示 + def judge_pr_allow + + end + end diff --git a/app/helpers/quality_analysis_helper.rb b/app/helpers/quality_analysis_helper.rb index 5940dd255..dc7db673e 100644 --- a/app/helpers/quality_analysis_helper.rb +++ b/app/helpers/quality_analysis_helper.rb @@ -6,18 +6,23 @@ module QualityAnalysisHelper if val <= 5 arr << "很好" arr << "b_green2" + arr << "A" elsif val. > 5 && val <= 10 arr << "较好" arr << "b_slow_yellow" + arr << "B" elsif val > 10 && val <= 20 arr << "中等" arr << "b_yellow" + arr << "C" elsif val > 20 && val <= 50 arr << "较差" arr << "b_slow_red" + arr << "D" elsif val > 20 arr << "很差" arr << "b_red" + arr << "E" end end diff --git a/app/helpers/repositories_helper.rb b/app/helpers/repositories_helper.rb index ef637d3ee..bc5e8ee57 100644 --- a/app/helpers/repositories_helper.rb +++ b/app/helpers/repositories_helper.rb @@ -47,9 +47,9 @@ module RepositoriesHelper end # 获取文件目录的最新动态 - def get_trees_last_changes(project_id, rev, ent_name, g) + def get_trees_last_changes(gpid, rev, ent_name, g) begin - tree_changes = g.rep_last_changes(project_id, :rev => rev, :path => ent_name) + tree_changes = g.rep_last_changes(gpid, :rev => rev, :path => ent_name) rescue Exception => e puts e end diff --git a/app/models/course.rb b/app/models/course.rb index 561a031ae..659f9fcec 100644 --- a/app/models/course.rb +++ b/app/models/course.rb @@ -80,6 +80,7 @@ class Course < ActiveRecord::Base after_update :update_files_public,:update_course_ealasticsearch_index after_create :create_board_sync, :act_as_course_activity, :act_as_course_message,:create_course_ealasticsearch_index before_destroy :delete_all_members,:delete_course_ealasticsearch_index + after_save :log_infor safe_attributes 'extra', 'time', @@ -504,6 +505,10 @@ class Course < ActiveRecord::Base ticket end + def log_infor + Rails.logger.info "##########################################################course's syllabus_id is #{self.syllabus_id}." + end + end diff --git a/app/models/project.rb b/app/models/project.rb index 0751c902f..0d297bb3c 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -1254,12 +1254,14 @@ class Project < ActiveRecord::Base def create_project_ealasticsearch_index + return if Rails.env.development? if self.is_public self.__elasticsearch__.index_document end end def update_project_ealasticsearch_index + return if Rails.env.development? if self.is_public #如果是初次更新成为公开的情况,会报错,那么这条记录尚未被索引过。没有报错就是更新的其他属性 begin self.__elasticsearch__.update_document @@ -1276,6 +1278,7 @@ class Project < ActiveRecord::Base end def delete_project_ealasticsearch_index + return if Rails.env.development? begin self.__elasticsearch__.delete_document rescue => e diff --git a/app/models/pull_request.rb b/app/models/pull_request.rb new file mode 100644 index 000000000..f40397cf0 --- /dev/null +++ b/app/models/pull_request.rb @@ -0,0 +1,4 @@ +class PullRequest < ActiveRecord::Base + attr_accessible :gpid, :pull_request_id, :user_id + validates_uniqueness_of :pull_request_id +end diff --git a/app/models/student_work.rb b/app/models/student_work.rb index 3ba3ee2b2..09ef15583 100644 --- a/app/models/student_work.rb +++ b/app/models/student_work.rb @@ -1,6 +1,6 @@ #学生提交作品表 class StudentWork < ActiveRecord::Base - attr_accessible :name, :description, :homework_common_id, :user_id, :final_score, :teacher_score, :student_score, :teaching_asistant_score, :project_id, :is_test, :simi_id, :simi_value, :work_status + attr_accessible :name, :description, :homework_common_id, :user_id, :final_score, :teacher_score, :student_score, :teaching_asistant_score, :project_id, :is_test, :simi_id, :simi_value, :work_status, :commit_time belongs_to :homework_common belongs_to :user diff --git a/app/models/user_wechat.rb b/app/models/user_wechat.rb index b121aa4d2..692ead74e 100644 --- a/app/models/user_wechat.rb +++ b/app/models/user_wechat.rb @@ -15,7 +15,7 @@ class UserWechat < ActiveRecord::Base self.save ## 主要是将comment 迁移 - User.delete(old_user) + User.delete(old_user) JournalForMessage.where(user_id: old_user).update_all(user_id: u.id) Journal.where(user_id: old_user).update_all(user_id: u.id) diff --git a/app/services/courses_service.rb b/app/services/courses_service.rb index 71270cb8b..7d574bada 100644 --- a/app/services/courses_service.rb +++ b/app/services/courses_service.rb @@ -357,7 +357,6 @@ class CoursesService #@course.password = params[:course][:password] @course.tea_id = current_user.id @course.syllabus_id = params[:syllabus_id].to_i - Rails.logger.error "update_syllabus_id: courses_service/create_course" @course.term = params[:term] @course.time = params[:time] @course.end_term = params[:end_term] @@ -417,7 +416,6 @@ class CoursesService #course.safe_attributes = params[:course] #course.password = params[:course][:password] course.syllabus_id = params[:syllabus_id].to_i - Rails.logger.error "update_syllabus_id: courses_service/edit_course" course.time = params[:time] course.term = params[:term] course.end_time = params[:end_time] diff --git a/app/services/syllabuses_service.rb b/app/services/syllabuses_service.rb index cbc29e790..f12ae67cc 100644 --- a/app/services/syllabuses_service.rb +++ b/app/services/syllabuses_service.rb @@ -83,14 +83,12 @@ class SyllabusesService courses.each do |course| if ::Course === course course.syllabus_id = sy.id - Rails.logger.error "update_syllabus_id: syllabus_service/create" course.save! send_wechat_create_class_notice user,course elsif Hash === course c = ::Course.new(course) c.tea_id = user.id c.syllabus_id = sy.id - Rails.logger.error "update_syllabus_id: syllabus_service/create" c.update_default_value c.is_public = 0 c.save! @@ -135,7 +133,6 @@ class SyllabusesService course.name = c course.tea_id = user.id course.syllabus_id = sy.id - Rails.logger.error "update_syllabus_id: syllabus_service/edit" course.update_default_value course.is_public = 0 course.save! diff --git a/app/views/exercise/_show_head.html.erb b/app/views/exercise/_show_head.html.erb index cfa814c2e..8a0c182ce 100644 --- a/app/views/exercise/_show_head.html.erb +++ b/app/views/exercise/_show_head.html.erb @@ -11,6 +11,8 @@ 测验时长:<%= exercise.time %>分钟 <% end %> -
<%= exercise.exercise_description.nil? ? "" :exercise.exercise_description.html_safe%>
+
+    <%= exercise.exercise_description.nil? ? "" :exercise.exercise_description.html_safe%>
+  
\ No newline at end of file diff --git a/app/views/files/_course_list.html.erb b/app/views/files/_course_list.html.erb index 7724bb861..be7da4732 100644 --- a/app/views/files/_course_list.html.erb +++ b/app/views/files/_course_list.html.erb @@ -1,19 +1,14 @@ - <% curse_attachments.each do |file| %> - <% if file.is_public? || User.current.member_of_course?(course) || User.current.admin? %> +<% curse_attachments.each do |file| %> + <% if file.is_public? || User.current.member_of_course?(course) || User.current.admin? %>
- <%=render :partial=>'files/resource_detail',:locals => {:file => file} %> + <%=render :partial=>'files/resource_detail',:locals => {:file => file} %>
- <% else %> -
<%= file.filename %>是私有资源
- <% end %> - <% end %> - -<% if curse_attachments.count == 10%> - <% if params[:action] == 'search' %> - <%=link_to "点击展开更多", search_course_files_path({:course_id => course.id,:page => @obj_pages.nil? ? @feedback_pages.page + 1 : @obj_pages.page + 1}.merge(params)),:id => "show_more_attachments",:remote => "true",:class => "loadMore mt10 f_grey" %> <% else %> - - <%=link_to "点击展开更多", course_files_path(:course_id => course.id, :page => @page), :id => "show_more_attachments",:remote => "true",:class => "loadMore mt10 f_grey" %> - <%end%> -<% end%> +
<%= file.filename %>是私有资源
+ <% end %> +<% end %> + + diff --git a/app/views/files/_project_list.html.erb b/app/views/files/_project_list.html.erb index 36dc80a18..faf254015 100644 --- a/app/views/files/_project_list.html.erb +++ b/app/views/files/_project_list.html.erb @@ -66,17 +66,10 @@ <% end %> <% end %> -<% if project_attachments.count == 10%> - <% if params[:action] == 'search_project' %> - - - - <%=link_to "点击展开更多", search_project_project_files_path({:project_id => project.id, :page => @obj_pages.nil? ? @feedback_pages.page + 1 : @obj_pages.page + 1}.merge(params)),:id => "show_more_attachments",:remote => "true",:class => "loadMore mt10 f_grey" %> - <%else%> - - <%=link_to "点击展开更多", project_files_path(:project_id => project.id,:page => @page),:id => "show_more_attachments",:remote => "true",:class => "loadMore mt10 f_grey" %> - <%end%> -<% end%> + + diff --git a/app/views/files/index.js.erb b/app/views/files/index.js.erb index 49e7ac714..982d19329 100644 --- a/app/views/files/index.js.erb +++ b/app/views/files/index.js.erb @@ -1,7 +1,9 @@ <% if @course %> - $("#show_more_attachments").replaceWith("<%= escape_javascript( render :partial => 'files/course_list',:locals => {course:@course,all_attachments: @all_attachments,sort:@sort,order:@order,curse_attachments:@obj_attachments} )%>"); + $("#resource_list").html("<%= escape_javascript( render :partial => 'files/course_file',:locals => {course:@course,all_attachments: @all_attachments,sort:@sort,order:@order,curse_attachments:@obj_attachments}) %>"); + $("#pages").html('<%= pagination_links_full @feedback_pages, @feedback_count, :per_page_links => false, :remote => true, :flag => true %>'); <% elsif @project %> - $("#show_more_attachments").replaceWith("<%= escape_javascript( render :partial => 'files/project_list', :locals => {project:@project, all_attachments:@all_attachments, sort:@sort, order:@order, project_attachments:@obj_attachments})%>"); + $("#resource_list").html("<%= escape_javascript( render :partial => 'files/project_file',:locals => {project:@project, all_attachments:@all_attachments, sort:@sort, order:@order, project_attachments:@obj_attachments}) %>"); + $("#pages").html('<%= pagination_links_full @feedback_pages, @feedback_count, :per_page_links => false, :remote => true, :flag => true %>'); <% elsif @org_subfield %> $("#show_more_attachments").replaceWith("<%= escape_javascript( render :partial => 'files/org_subfield_list', :locals => {org_subfield:@org_subfield, all_attachments:@all_attachments, sort:@sort, order:@order, org_subfield_attachments:@obj_attachments})%>"); <%end %> \ No newline at end of file diff --git a/app/views/files/search.js.erb b/app/views/files/search.js.erb index fd88b3f9e..011b3bb25 100644 --- a/app/views/files/search.js.erb +++ b/app/views/files/search.js.erb @@ -1,6 +1,3 @@ -<% if (@obj_pages &&( @obj_pages.page > 1)) || (@feedback_pages && (@feedback_pages.page > 1)) %> //搜索的时候有时候是需要加载下一页,有时候是直接替换当前 #course_list。这个根据 page来判定 - $("#show_more_attachments").replaceWith("<%= escape_javascript( render :partial => 'files/course_list',:locals => {course: @course,all_attachments: @result,sort:@sort,order:@order,curse_attachments:@searched_attach} )%>"); -<% else %> - $("#course_list").html("<%= escape_javascript(render :partial => 'files/course_list',:locals => {course: @course,all_attachments: @result,sort:@sort,order:@order,curse_attachments:@searched_attach})%>"); - $("#attachment_count").html("<%= @result.count%>") -<% end %> \ No newline at end of file + + $("#resource_list").html("<%= escape_javascript( render :partial => 'files/course_file',:locals => {course:@course,all_attachments: @all_attachments,sort:@sort,order:@order,curse_attachments:@obj_attachments} )%>"); + $("#pages").html('<%= pagination_links_full @feedback_pages, @feedback_count, :per_page_links => false, :remote => true, :flag => true %>'); diff --git a/app/views/files/search_project.js.erb b/app/views/files/search_project.js.erb index 69752e0d9..f88438d57 100644 --- a/app/views/files/search_project.js.erb +++ b/app/views/files/search_project.js.erb @@ -1,7 +1,2 @@ -<% if (@obj_pages &&( @obj_pages.page > 1)) || (@feedback_pages && (@feedback_pages.page > 1)) %> //搜索的时候有时候是需要加载下一页,有时候是直接替换当前 #course_list。这个根据 page来判定 - $("#show_more_attachments").replaceWith("<%= escape_javascript( render :partial => 'files/project_list', - :locals => {project: @project, all_attachments:@result, sort:@sort, order:@order, project_attachments:@searched_attach})%>"); -<% else %> - $("#course_list").html("<%= escape_javascript(render :partial => 'files/project_list',:locals => {project:@project, all_attachments:@result, sort:@sort, order:@order,project_attachments:@searched_attach})%>"); - $("#attachment_count").html("<%= @project_attachment_result.count %>") -<% end %> \ No newline at end of file +$("#resource_list").html("<%= escape_javascript( render :partial => 'files/project_file',:locals => {project:@project, all_attachments:@all_attachments, sort:@sort, order:@order, project_attachments:@obj_attachments}) %>"); +$("#pages").html('<%= pagination_links_full @feedback_pages, @feedback_count, :per_page_links => false, :remote => true, :flag => true %>'); diff --git a/app/views/files/search_tag_attachment.js.erb b/app/views/files/search_tag_attachment.js.erb index 3003d8b98..dff75023b 100644 --- a/app/views/files/search_tag_attachment.js.erb +++ b/app/views/files/search_tag_attachment.js.erb @@ -1,8 +1,7 @@ <% if @course %> - $("#course_list").html("<%= escape_javascript(render :partial => 'course_list',:locals => {course: @course,all_attachments: @result,sort:@sort,order:@order,curse_attachments:@searched_attach})%>"); - $("#course_filter_order").html("<%= escape_javascript(render :partial => 'course_file_filter_order', :locals => {course: @course,all_attachments: @result,sort:@sort,order:@order,curse_attachments:@searched_attach, tag_name: @tag_name, q: @q})%>"); - $("#attachment_count").html("<%= @result.count%>") + $("#resource_list").html("<%= escape_javascript( render :partial => 'files/course_file',:locals => {course:@course,all_attachments: @all_attachments,sort:@sort,order:@order,curse_attachments:@obj_attachments} )%>"); + $("#pages").html('<%= pagination_links_full @feedback_pages, @feedback_count, :per_page_links => false, :remote => true, :flag => true %>'); <% else %> - $("#course_list").html("<%= escape_javascript(render :partial => 'project_list',:locals => {project:@project, all_attachments:@result_search_project, sort:@sort, order:@order, project_attachments:@searched_attach}) %>"); - $("#attachment_count").html("<%= @result_search_project.count%>") + $("#resource_list").html("<%= escape_javascript( render :partial => 'files/project_file',:locals => {project:@project, all_attachments:@all_attachments, sort:@sort, order:@order, project_attachments:@obj_attachments}) %>"); + $("#pages").html('<%= pagination_links_full @feedback_pages, @feedback_count, :per_page_links => false, :remote => true, :flag => true %>'); <% end %> diff --git a/app/views/layouts/_syllabus_base_info.html.erb b/app/views/layouts/_syllabus_base_info.html.erb index 335dc3335..22139b550 100644 --- a/app/views/layouts/_syllabus_base_info.html.erb +++ b/app/views/layouts/_syllabus_base_info.html.erb @@ -5,27 +5,27 @@