diff --git a/Gemfile b/Gemfile index a5aee62c2..58ccbc011 100644 --- a/Gemfile +++ b/Gemfile @@ -24,7 +24,7 @@ gem 'rubyzip' gem 'delayed_job_active_record'#, :group => :production gem 'daemons' gem 'grape', '~> 0.9.0' -gem 'grape-entity' +gem 'grape-entity', '= 0.4.5' gem 'rack-cors', :require => 'rack/cors' gem 'seems_rateable', '~> 1.0.13' gem 'rails', '~> 3.2' diff --git a/app/api/mobile/entities/issue.rb b/app/api/mobile/entities/issue.rb index a46e10da5..7f09906b5 100644 --- a/app/api/mobile/entities/issue.rb +++ b/app/api/mobile/entities/issue.rb @@ -1,3 +1,4 @@ +#coding=utf-8 module Mobile module Entities class Issue @project.id) + + # @forked_members = User.find_by_sql("SELECT u.* FROM `projects` p,`users` u where p.user_id = u.id and p.forked_from_project_id = #{@project.id} ;") + end + def update_message_status(user, project) # 更新加入项目消息 project__messages = ForgeMessage.where("forge_message_type in ('ProjectInvite', 'JoinProject', 'RemoveFromProject') and user_id =? and project_id =? ", user, project) @@ -756,6 +762,13 @@ class ProjectsController < ApplicationController redirect_to admin_projects_url(:status => params[:status]) end + # 资源库fork弹框 + def forked_pop + respond_to do |format| + format.js + end + end + def close @project.close redirect_to project_url(@project) @@ -942,5 +955,4 @@ class ProjectsController < ApplicationController return projects end #gcmend - end diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index bd6c67f58..0e8ca71c0 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -40,7 +40,7 @@ class RepositoriesController < ApplicationController # before_filter :connect_gitlab, :only => [:quality_analysis, :commit_diff] before_filter :find_changeset, :only => [:revision, :add_related_issue, :remove_related_issue] - before_filter :authorize , :except => [:newrepo,:newcreate,:fork, :to_gitlab, :forked, :project_archive, :quality_analysis] + before_filter :authorize , :except => [:newrepo,:newcreate,:fork, :to_gitlab, :forked, :project_archive, :quality_analysis, :commit_diff] # 版本库新增权限 # before_filter :show_rep, :only => [:show, :stats, :revisions, :revision, :diff, :commit_diff ] accept_rss_auth :revisions @@ -87,35 +87,34 @@ class RepositoriesController < ApplicationController end def forked - @project = Project.find(params[:id]) - @repository = Repository.where("project_id =? and type =?", @project.id, "Repository::Gitlab") - # 如果当前用户已经fork过该项目,不会新fork项目,则跳至已fork的项 - unless has_forked?(@project, User.current) - project = project_from_current_project(@project.id, User.current.id) - redirect_to project_path(project) - else - # 自己不能fork自己的项目 - if User.current.id == @project.user_id - flash[:notice] = l(:project_gitlab_fork_own) - redirect_to repository_url(@repository) - else - g = Gitlab.client - if User.current.gid.nil? - begin - g.sync_user(User.current) - ensure - logger.error "Synv user failed ==>#{User.current.id}" + @project = Project.find(params[:id]) + @repository = Repository.where("project_id =? and type =?", @project.id, "Repository::Gitlab") + # 如果当前用户已经fork过该项目,不会新fork项目,则跳至已fork的项 + unless has_forked?(@project, User.current) + project = project_from_current_project(@project.id, User.current.id) + redirect_to project_path(project) + else + # 自己不能fork自己的项目 + if User.current.id == @project.user_id + flash[:notice] = l(:project_gitlab_fork_own) + redirect_to repository_url(@repository) + else + g = Gitlab.client + if User.current.gid.nil? + begin + g.sync_user(User.current) + ensure + logger.error "Synv user failed ==>#{User.current.id}" + end + end + gproject = g.fork(@project.gpid, User.current.gid) + if gproject + copy_project(@project, gproject) + forked_count = @project.forked_count.to_i + 1 + @project.update_attributes(:forked_count => forked_count) + end end end - gproject = g.fork(@project.gpid, User.current.gid) - if gproject - copy_project(@project, gproject) - forked_count = @project.forked_count.to_i + 1 - @project.update_attributes(:forked_count => forked_count) - end - end - end - end # 一键ZIP下载 @@ -262,6 +261,7 @@ update end @repository.project = @project @repository.type = 'Repository::Gitlab' + @repository.identifier = @repository.identifier.downcase @repository.url = @repository.identifier if request.post? && @repository.save s = Trustie::Gitlab::Sync.new @@ -477,8 +477,14 @@ update end def entry + # 顶部导航 + @project_menu_type = 5 + entry_and_raw(false) @content = @repository.cat(@path, @rev) + @changesets_latest_coimmit = @g.commit(@project.gpid, @entry.try(:lastrev)) + # 总的提交数 + @changesets_all_count = @g.user_static(@project.gpid, :rev => @rev).count if is_entry_text_data?(@content, @path) render :layout => 'base_projects' end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index cf1fc7f4e..3265d273b 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -1137,7 +1137,7 @@ class UsersController < ApplicationController def user_import_resource @user = User.current user_course_ids = @user.courses.map { |c| c.id} #我的资源库的话,那么应该是我上传的所有资源 加上 我加入的课程的所有资源 - @attachments = Attachment.where("(author_id = #{params[:id]} and container_type in('Project','Principal','Course','Issue','Document','Message','News','StudentWorkScore','HomewCommon')) "+ + @attachments = Attachment.where("(author_id = #{@user.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] @@ -1156,26 +1156,22 @@ class UsersController < ApplicationController #引入资源列表根据类型过滤 def user_resource_type - if User.current.id.to_i != params[:id].to_i - render_403 - return - end user_course_ids = User.current.courses.map { |c| c.is_delete == 0 && c.id} user_project_ids = User.current.projects.map {|p| p.status != 9 && p.id } # user_org_ids = User.current.organizations.map {|o| o.id} if(params[:type].blank? || params[:type] == "1") # 我的资源 # 修正:我的资源库的话,那么应该是我上传的所有资源加上,我加入的课程、项目、组织的所有资源 if params[:status] == "2" - @attachments = get_course_resources(params[:id], user_course_ids, @order, @score) + @attachments = get_course_resources(User.current.id, user_course_ids, @order, @score) elsif params[:status] == "3" - @attachments = get_project_resources(params[:id], user_project_ids, @order, @score) + @attachments = get_project_resources(User.current.id, user_project_ids, @order, @score) elsif params[:status] == "4" - @attachments = get_attch_resources(params[:id], @order, @score) + @attachments = get_attch_resources(User.current.id, @order, @score) elsif params[:status] == "5" - @attachments = get_principal_resources(params[:id], @order, @score) + @attachments = get_principal_resources(User.current.id, @order, @score) else # 公共资源库:所有公开资源或者我上传的私有资源 - @attachments = get_my_resources(params[:id], user_course_ids, user_project_ids, @order, @score) + @attachments = get_my_resources(User.current.id, user_course_ids, user_project_ids, @order, @score) end elsif params[:type] == "6" # 公共资源 if params[:status] == "2" @@ -1208,10 +1204,6 @@ class UsersController < ApplicationController #引入资源列表根据关键词过滤 def user_ref_resource_search - if User.current.id.to_i != params[:id].to_i - render_403 - return - end @resource_id = params[:mul_id] @resource_type = params[:mul_type] @order, @b_sort = params[:order] || "created_on", params[:sort] || "asc" @@ -1225,7 +1217,7 @@ class UsersController < ApplicationController user_course_ids = User.current.courses.map { |c| c.is_delete == 0 && c.id} user_project_ids = User.current.projects.map {|p| p.status != 9 && p.id } # user_org_ids = User.current.organizations.map {|o| o.id} - @attachments = get_my_resources_search(params[:id], user_course_ids, user_project_ids, @order, @score, search) + @attachments = get_my_resources_search(User.current.id, user_course_ids, user_project_ids, @order, @score, search) elsif (params[:type].blank? || params[:type] == "6") # 公共资源 # 公共资源库:所有公开资源或者我上传的私有资源 @attachments = get_public_resources_search(user_course_ids, user_project_ids, @order, @score, search) @@ -2041,7 +2033,7 @@ class UsersController < ApplicationController user_course_ids = User.current.courses.map { |c| c.is_delete == 0 && c.id} user_project_ids = User.current.projects.map {|p| p.status != 9 && p.id } # user_org_ids = User.current.organizations.map {|o| o.id} - @user = User.find(params[:id]) + @user = User.current # 保存文件 attach = Attachment.attach_filesex_public(@user, params[:attachments], params[:attachment_type], is_public = true) @order, @b_sort = params[:order] || "created_on", params[:sort] || "asc" @@ -2050,16 +2042,16 @@ class UsersController < ApplicationController if(params[:type].blank? || params[:type] == "1") # 我的资源 # 修正:我的资源库的话,那么应该是我上传的所有资源加上,我加入的课程、项目、组织的所有资源 if params[:status] == "2" - @attachments = get_course_resources(params[:id], user_course_ids, @order, @score) + @attachments = get_course_resources(@user.id, user_course_ids, @order, @score) elsif params[:status] == "3" - @attachments = get_project_resources(params[:id], user_project_ids, @order, @score) + @attachments = get_project_resources(@user.id, user_project_ids, @order, @score) elsif params[:status] == "4" - @attachments = get_attch_resources(params[:id], @order, @score) + @attachments = get_attch_resources(@user.id, @order, @score) elsif params[:status] == "5" - @attachments = get_principal_resources(params[:id], @order, @score) + @attachments = get_principal_resources(@user.id, @order, @score) else # 公共资源库:所有公开资源或者我上传的私有资源 - @attachments = get_my_resources(params[:id], user_course_ids, user_project_ids, @order, @score) + @attachments = get_my_resources(@user.id, user_course_ids, user_project_ids, @order, @score) end elsif params[:type] == "6" # 公共资源 if params[:status] == "2" @@ -2109,16 +2101,16 @@ class UsersController < ApplicationController if(params[:type].blank? || params[:type] == "1") # 我的资源 # 修正:我的资源库的话,那么应该是我上传的所有资源加上,我加入的课程、项目、组织的所有资源 if params[:status] == "2" - @attachments = get_course_resources(params[:id], user_course_ids, @order, @score) + @attachments = get_course_resources(@user.id, user_course_ids, @order, @score) elsif params[:status] == "3" - @attachments = get_project_resources(params[:id], user_project_ids, @order, @score) + @attachments = get_project_resources(@user.id, user_project_ids, @order, @score) elsif params[:status] == "4" - @attachments = get_attch_resources(params[:id], @order, @score) + @attachments = get_attch_resources(@user.id, @order, @score) elsif params[:status] == "5" - @attachments = get_principal_resources(params[:id], @order, @score) + @attachments = get_principal_resources(@user.id, @order, @score) else # 公共资源库:所有公开资源或者我上传的私有资源 - @attachments = get_my_resources(params[:id], user_course_ids, user_project_ids, @order, @score) + @attachments = get_my_resources(@user.id, user_course_ids, user_project_ids, @order, @score) end elsif params[:type] == "6" # 公共资源 if params[:status] == "2" @@ -2248,16 +2240,16 @@ class UsersController < ApplicationController if(params[:type] == "1") # 我的资源 # 修正:我的资源库的话,那么应该是我上传的所有资源加上,我加入的课程、项目、组织的所有资源 if params[:status] == "2" - @attachments = get_course_resources(params[:id], user_course_ids, @order, @score) + @attachments = get_course_resources(User.current.id, user_course_ids, @order, @score) elsif params[:status] == "3" - @attachments = get_project_resources(params[:id], user_project_ids, @order, @score) + @attachments = get_project_resources(User.current.id, user_project_ids, @order, @score) elsif params[:status] == "4" - @attachments = get_attch_resources(params[:id], @order, @score) + @attachments = get_attch_resources(User.current.id, @order, @score) elsif params[:status] == "5" - @attachments = get_principal_resources(params[:id], @order, @score) + @attachments = get_principal_resources(User.current.id, @order, @score) else # 公共资源库:所有公开资源或者我上传的私有资源 - @attachments = get_my_resources(params[:id], user_course_ids, user_project_ids, @order, @score) + @attachments = get_my_resources(User.current.id, user_course_ids, user_project_ids, @order, @score) end elsif (params[:type].blank? || params[:type] == "6") # 公共资源 if params[:status] == "2" @@ -2408,16 +2400,16 @@ class UsersController < ApplicationController if(params[:type] == "1") # 我的资源 # 修正:我的资源库的话,那么应该是我上传的所有资源加上,我加入的课程、项目、组织的所有资源 if params[:status] == "2" - @attachments = get_course_resources(params[:id], user_course_ids, @order, @score) + @attachments = get_course_resources(User.current.id, user_course_ids, @order, @score) elsif params[:status] == "3" - @attachments = get_project_resources(params[:id], user_project_ids, @order, @score) + @attachments = get_project_resources(User.current.id, user_project_ids, @order, @score) elsif params[:status] == "4" - @attachments = get_attch_resources(params[:id], @order, @score) + @attachments = get_attch_resources(User.current.id, @order, @score) elsif params[:status] == "5" - @attachments = get_principal_resources(params[:id], @order, @score) + @attachments = get_principal_resources(User.current.id, @order, @score) else # 公共资源库:所有公开资源或者我上传的私有资源 - @attachments = get_my_resources(params[:id], user_course_ids, user_project_ids, @order, @score) + @attachments = get_my_resources(User.current.id, user_course_ids, user_project_ids, @order, @score) end elsif (params[:type].blank? || params[:type] == "6") # 公共资源 if params[:status] == "2" @@ -2549,16 +2541,16 @@ class UsersController < ApplicationController if(params[:type] == "1") # 我的资源 # 修正:我的资源库的话,那么应该是我上传的所有资源加上,我加入的课程、项目、组织的所有资源 if params[:status] == "2" - @attachments = get_course_resources(params[:id], user_course_ids, @order, @score) + @attachments = get_course_resources(User.current.id, user_course_ids, @order, @score) elsif params[:status] == "3" - @attachments = get_project_resources(params[:id], user_project_ids, @order, @score) + @attachments = get_project_resources(User.current.id, user_project_ids, @order, @score) elsif params[:status] == "4" - @attachments = get_attch_resources(params[:id], @order, @score) + @attachments = get_attch_resources(User.current.id, @order, @score) elsif params[:status] == "5" - @attachments = get_principal_resources(params[:id], @order, @score) + @attachments = get_principal_resources(User.current.id, @order, @score) else # 公共资源库:所有公开资源或者我上传的私有资源 - @attachments = get_my_resources(params[:id], user_course_ids, user_project_ids, @order, @score) + @attachments = get_my_resources(User.current.id, user_course_ids, user_project_ids, @order, @score) end elsif (params[:type].blank? || params[:type] == "6") # 公共资源 if params[:status] == "2" @@ -3061,16 +3053,16 @@ class UsersController < ApplicationController if(params[:type].blank? || params[:type] == "1") # 我的资源 # 修正:我的资源库的话,那么应该是我上传的所有资源加上,我加入的课程、项目、组织的所有资源 if params[:status] == "2" - @attachments = get_course_resources(params[:id], user_course_ids, @order, @score) + @attachments = get_course_resources(User.current.id, user_course_ids, @order, @score) elsif params[:status] == "3" - @attachments = get_project_resources(params[:id], user_project_ids, @order, @score) + @attachments = get_project_resources(User.current.id, user_project_ids, @order, @score) elsif params[:status] == "4" - @attachments = get_attch_resources(params[:id], @order, @score) + @attachments = get_attch_resources(User.current.id, @order, @score) elsif params[:status] == "5" - @attachments = get_principal_resources(params[:id], @order, @score) + @attachments = get_principal_resources(User.current.id, @order, @score) else # 公共资源库:所有公开资源或者我上传的私有资源 - @attachments = get_my_resources(params[:id], user_course_ids, user_project_ids, @order, @score) + @attachments = get_my_resources(User.current.id, user_course_ids, user_project_ids, @order, @score) end elsif (params[:type] == "6") # 公共资源 if params[:status] == "2" @@ -3115,11 +3107,6 @@ class UsersController < ApplicationController # 导入资源 def import_resources - # 别人的资源库是没有权限去看的 - if User.current.id != params[:id].to_i - render_403 - return - end @resource_id = params[:project_id].nil? ? (params[:course_id].nil? ? params[:subfield_file_id] : params[:course_id]) : params[:project_id] @resource_type = params[:project_id].nil? ? (params[:course_id].nil? ? "SubfieldFile" : "Course") : "Project" @order, @b_sort = params[:order] || "created_on", params[:sort] || "asc" @@ -3128,7 +3115,7 @@ class UsersController < ApplicationController user_project_ids = User.current.projects.map {|p| p.status != 9 && p.id } # user_org_ids = User.current.organizations.map {|o| o.id} if(params[:type].blank? || params[:type] == "1") # 我的资源 # 修正:我的资源库的话,那么应该是我上传的所有资源加上,我加入的课程、项目、组织的所有资源 - @attachments = get_my_resources(params[:id], user_course_ids, user_project_ids, @order, @score) + @attachments = get_my_resources(User.current.id, user_course_ids, user_project_ids, @order, @score) elsif params[:type] == "6" # 公共资源 # 公共资源库:所有公开资源或者我上传的私有资源 @attachments = get_public_resources(user_course_ids, user_project_ids, params[:order], @score) @@ -3149,10 +3136,6 @@ class UsersController < ApplicationController end def import_resources_search - if User.current.id.to_i != params[:id].to_i - render_403 - return - end @resource_id = params[:mul_id] @resource_type = params[:mul_type] @order, @b_sort = params[:order] || "created_on", params[:sort] || "asc" @@ -3166,7 +3149,7 @@ class UsersController < ApplicationController user_course_ids = User.current.courses.map { |c| c.is_delete == 0 && c.id} user_project_ids = User.current.projects.map {|p| p.status != 9 && p.id } # user_org_ids = User.current.organizations.map {|o| o.id} - @attachments = get_my_resources_search(params[:id], user_course_ids, user_project_ids, @order, @score, search) + @attachments = get_my_resources_search(User.current.id, user_course_ids, user_project_ids, @order, @score, search) elsif params[:type] == "6" # 公共资源 # 公共资源库:所有公开资源或者我上传的私有资源 @attachments = get_public_resources_search(user_course_ids, user_project_ids, @order, @score, search) @@ -3253,16 +3236,16 @@ class UsersController < ApplicationController user_project_ids = User.current.projects.map {|p| p.status != 9 && p.id } if(params[:type].nil? || params[:type].blank? || params[:type] == "1" || params[:type] == 'all') # 全部 if params[:status] == "2" - @attachments = get_course_resources_search(params[:id], user_course_ids, @order, @score, search) + @attachments = get_course_resources_search(User.current.id, user_course_ids, @order, @score, search) elsif params[:status] == "3" - @attachments = get_project_resources_search(params[:id], user_project_ids, @order, @score, search) + @attachments = get_project_resources_search(User.current.id, user_project_ids, @order, @score, search) elsif params[:status] == "4" - @attachments = get_attch_resources_search(params[:id], @order, @score, search) + @attachments = get_attch_resources_search(User.current.id, @order, @score, search) elsif params[:status] == "5" - @attachments = get_principal_resources_search(params[:id], @order, @score, search) + @attachments = get_principal_resources_search(User.current.id, @order, @score, search) else # 公共资源库:所有公开资源或者我上传的私有资源 - @attachments = get_my_resources_search(params[:id], user_course_ids, user_project_ids, @order, @score, search) + @attachments = get_my_resources_search(User.current.id, user_course_ids, user_project_ids, @order, @score, search) end elsif params[:type] == "6" # 公共资源 if params[:status] == "2" diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index 7cc480317..a082d72ff 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -13,7 +13,7 @@ class WechatsController < ActionController::Base # elsif join_project_request(request) # sendBindProject(request, {invite_code: content}) # else - request.reply.text "您的意见已收到,非常感谢~ \n更多问题可以通过以下方式联系我们:\n官方QQ群:173184401\n我们会认真聆听您的意见和建议。" + request.reply.text "您的意见已收到,非常感谢~ \n更多问题可以通过以下方式联系我们:\n官方QQ群:373967360\n我们会认真聆听您的意见和建议。" # end end @@ -137,7 +137,7 @@ class WechatsController < ActionController::Base on :fallback, respond: 'fallback message' on :click, with: 'FEEDBACK' do |request, key| - request.reply.text "如有问题反馈,请您:\n1、直接切换至输入框,发微信给我们。\n2、加入QQ群:173184401,直接互动。\n\n如您有合作事宜洽谈,请联系:\n王林春 老师\n手机:13467631747\nQQ:494496321" + request.reply.text "如有问题反馈,请您:\n1、直接切换至输入框,发微信给我们。\n2、加入QQ群:373967360,直接互动。\n\n如您有合作事宜洽谈,请联系:\n王林春 老师\n手机:13467631747\nQQ:494496321" end on :click, with: 'MY_NEWS' do |request, key| diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 683bf2057..c4746ff29 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -54,6 +54,18 @@ module ApplicationHelper Project.find(forked_from_project_id) end + # 判断当前用户是否已经fork过当前项目 + # project: current_project + def has_forked_cur_project project + cur_user_projects = Project.where(:user_id => User.current.id) + if cur_user_projects.count == 0 + false + else + has_forked = cur_user_projects.select{|cur_user_project| cur_user_project.forked_from_project_id == project.id} + has_forked.length > 0 ? true : false + end + end + # 通过系统外部邮箱查找用户,如果用户不存在则用邮箱替换 def get_user_by_mail mail user = User.find_by_mail(mail) @@ -67,12 +79,12 @@ module ApplicationHelper end # 重置user_path,目的是将id转换成用户名 - # def user_path(resource, parameters = {}) - # if Fixnum === resource - # resource = User.find(resource) - # end - # super - # end + def user_path(resource, parameters = {}) + if Fixnum === resource + resource = User.find(resource) + end + super + end # 历史数据(老版本库数据)处理完则可以修改该放放 def get_rep_identifier_by_project project @@ -1013,7 +1025,7 @@ module ApplicationHelper def project_member_check_box_tags_ex name, principals s = '' principals.each do |principal| - s << "
  • #{ check_box_tag name, principal.id, false, :id => nil} #{h link_to principal.userInfo, user_url_in_org( principal.id)}
  • \n" + s << "
  • #{ check_box_tag name, principal.id, false, :id => nil} #{h link_to principal.userInfo, user_url_in_org( principal), :target => "_blank"}
  • \n" end s.html_safe end @@ -2934,32 +2946,34 @@ module ApplicationHelper #根据传入作业确定显示为提交作品、补交作品、查看作品等 def student_for_homework_common homework - if User.current.member_of_course?(homework.course) + if User.current.allowed_to?(:as_teacher, homework.course) + link_to "查看作品", student_work_index_url_in_org(homework.id, 2), :class => 'hw_btn_green fr mt5', :title => "查看作品", :target => '_blank' + else User.current.member_of_course?(homework.course) work = cur_user_works_for_homework homework project = cur_user_projects_for_homework homework if work.nil? && Time.parse(homework.end_time.to_s).strftime("%Y-%m-%d") >= Time.now.strftime("%Y-%m-%d") if homework.homework_type ==3 && project.nil? && homework.homework_detail_group.base_on_project == 1 - link_to "查看详情", homework_common_index_path(:course_id => homework.course_id), :class => 'hw_btn_green2 fr mt5',:title => '查看分组作业详情', :target => '_blank' + link_to "查看详情", homework_common_index_path(:course_id => homework.course_id), :class => 'hw_btn_green fr mt5',:title => '查看分组作业详情', :target => '_blank' else - link_to "提交作品", new_student_work_url_without_domain(homework.id),:class => 'hw_btn_green2 fr mt5', :target => '_blank' + link_to "提交作品", new_student_work_url_without_domain(homework.id),:class => 'hw_btn_green fr mt5', :target => '_blank' end elsif work.nil? && Time.parse(homework.end_time.to_s).strftime("%Y-%m-%d") < Time.now.strftime("%Y-%m-%d") if homework.homework_type ==3 && project.nil? && homework.homework_detail_group.base_on_project == 1 - link_to "查看详情", homework_common_index_path(:course_id => homework.course_id), :class => 'hw_btn_green2 fr mt5',:title => '查看分组作业详情', :target => '_blank' + link_to "查看详情", homework_common_index_path(:course_id => homework.course_id), :class => 'hw_btn_green fr mt5',:title => '查看分组作业详情', :target => '_blank' else link_to "补交作品", new_student_work_url_without_domain(homework.id),:class => 'btn_orange_big fr mt5', :target => '_blank' end else if homework.homework_detail_manual && homework.homework_detail_manual.comment_status == 2 #匿评作业,且作业状态不是在开启匿评之前 - link_to "作品匿评", student_work_index_url_in_org(homework.id, 2), :class => 'hw_btn_green2 fr mt5', :title => "开启匿评后不可修改作品", :target => '_blank' + link_to "作品匿评", student_work_index_url_in_org(homework.id, 2), :class => 'hw_btn_green fr mt5', :title => "开启匿评后不可修改作品", :target => '_blank' elsif homework.homework_detail_manual && homework.homework_detail_manual.comment_status == 3 - link_to "查看作品",student_work_index_url_in_org(homework.id, 2), :class => 'hw_btn_green2 fr mt5', :title => "匿评已结束", :target => '_blank' + link_to "查看作品",student_work_index_url_in_org(homework.id, 2), :class => 'hw_btn_green fr mt5', :title => "匿评已结束", :target => '_blank' elsif homework.homework_type == 2 && Time.parse(homework.end_time.to_s).strftime("%Y-%m-%d") >= Time.now.strftime("%Y-%m-%d")#编程作业不能修改作品 - link_to "修改作品", new_student_work_url_without_domain(homework.id),:class => 'hw_btn_green2 fr mt5', :target => '_blank' + link_to "修改作品", new_student_work_url_without_domain(homework.id),:class => 'hw_btn_green fr mt5', :target => '_blank' elsif Time.parse(homework.end_time.to_s).strftime("%Y-%m-%d") >= Time.now.strftime("%Y-%m-%d") && work.user_id == User.current.id - link_to "修改作品", edit_student_work_url_without_domain(work.id),:class => 'hw_btn_green2 fr mt5', :target => '_blank' + link_to "修改作品", edit_student_work_url_without_domain(work.id),:class => 'hw_btn_green fr mt5', :target => '_blank' else - link_to "查看作品", student_work_index_url_in_org(homework.id, 2), :class => 'hw_btn_green2 fr mt5', :title => "作业截止后不可修改作品", :target => '_blank' + link_to "查看作品", student_work_index_url_in_org(homework.id, 2), :class => 'hw_btn_green fr mt5', :title => "作业截止后不可修改作品", :target => '_blank' end end end diff --git a/app/helpers/members_helper.rb b/app/helpers/members_helper.rb index 58f270332..9dd0bed8c 100644 --- a/app/helpers/members_helper.rb +++ b/app/helpers/members_helper.rb @@ -39,7 +39,7 @@ module MembersHelper end principals = paginateHelper scope,10 s = content_tag('ul', project_member_check_box_tags_ex('membership[user_ids][]', principals), :class => 'mb5', :id => 'principals') - links = pagination_links_full(@obj_pages, @obj_count, :per_page_links => false, :remote => false, :flag => true, :is_new => true){|text, parameters, options| + links = pagination_links_full(@obj_pages, @obj_count, :per_page_links => false, :remote => false, :flag => true){|text, parameters, options| link_to text, autocomplete_project_memberships_path(project, parameters.merge(:q => params[:q],:flag => true, :format => 'js')), :remote => true } s + content_tag('ul', links,:class => 'wlist', :id => "course_member_pagination_links" ) diff --git a/app/models/homework_common.rb b/app/models/homework_common.rb index 3072fa72b..c87cd3d42 100644 --- a/app/models/homework_common.rb +++ b/app/models/homework_common.rb @@ -73,20 +73,50 @@ class HomeworkCommon < ActiveRecord::Base if self.homework_detail_manual.comment_status == 0 self.course_messages.destroy_all else - self.course.members.each do |m| - # if m.user_id != self.user_id - #self.course_messages << CourseMessage.new(:user_id => m.user_id, :course_id => self.course_id, :viewed => false) - count = ShieldWechatMessage.where("container_type='User' and container_id=#{m.user_id} and shield_type='Course' and shield_id=#{self.course_id}").count - if count == 0 - ws = WechatService.new - name = self.course.syllabus.nil? ? self.course.name : self.course.syllabus.title+" • "+self.course.name - ws.homework_message_notice(m.user_id, "homework", self.id, "#{m.user.show_name},#{l(:label_new_homework_template)}", name, "新作业:"+ self.name.html_safe, "作业内容请点击“详情”查看。") - end - # end - end + # self.course.members.each do |m| + # # if m.user_id != self.user_id + # #self.course_messages << CourseMessage.new(:user_id => m.user_id, :course_id => self.course_id, :viewed => false) + # rolesids = [] + # m.roles.each do |role| + # rolesids << role.id + # end + # if rolesids.include?(10) + # count = ShieldWechatMessage.where("container_type='User' and container_id=#{m.user_id} and shield_type='Course' and shield_id=#{self.course_id}").count + # if count == 0 + # ws = WechatService.new + # name = self.course.syllabus.nil? ? self.course.name : self.course.syllabus.title+" • "+self.course.name + # ws.homework_message_notice(m.user_id, "homework", self.id, "#{m.user.show_name},#{l(:label_new_homework_template)}", name, "新作业:"+ self.name.html_safe, "作业内容请点击“详情”查看。") + # end + # end + # # end + # end + self.delay.send_homework_wechat_message_delay end end end + + #作业微信通知delay + def send_homework_wechat_message_delay + self.course.members.each do |m| + # if m.user_id != self.user_id + #self.course_messages << CourseMessage.new(:user_id => m.user_id, :course_id => self.course_id, :viewed => false) + rolesids = [] + m.roles.each do |role| + rolesids << role.id + end + if rolesids.include?(10) + count = ShieldWechatMessage.where("container_type='User' and container_id=#{m.user_id} and shield_type='Course' and shield_id=#{self.course_id}").count + if count == 0 + ws = WechatService.new + name = self.course.syllabus.nil? ? self.course.name : self.course.syllabus.title+" • "+self.course.name + ws.homework_message_notice(m.user_id, "homework", self.id, "#{m.user.show_name},#{l(:label_new_homework_template)}", name, "新作业:"+ self.name.html_safe, "作业内容请点击“详情”查看。") + end + end + # end + end + end + + #动态的更新 def update_activity update_course_activity(self.class, self.id) @@ -135,6 +165,12 @@ class HomeworkCommon < ActiveRecord::Base # end # end + def set_jour_viewed + self.journals_for_messages.each do |j| + User.current.at_messages.unviewed('JournalsForMessage', j.id).each {|x| x.viewed!} + end + end + delegate :language_name, :language, :to => :homework_detail_programing end diff --git a/app/models/journals_for_message.rb b/app/models/journals_for_message.rb index 2a432d42f..4a9601d07 100644 --- a/app/models/journals_for_message.rb +++ b/app/models/journals_for_message.rb @@ -78,7 +78,7 @@ class JournalsForMessage < ActiveRecord::Base :act_as_principal_activity, :act_as_student_score after_create :reset_counters! #after_update :update_activity - after_destroy :reset_counters! + # after_destroy :reset_counters! after_save :be_user_score after_destroy :down_user_score, :down_course_score diff --git a/app/models/student_work.rb b/app/models/student_work.rb index 9b3124797..794faa774 100644 --- a/app/models/student_work.rb +++ b/app/models/student_work.rb @@ -4,7 +4,7 @@ class StudentWork < ActiveRecord::Base belongs_to :homework_common belongs_to :user - has_many :student_work_projects + has_many :student_work_projects, :dependent => :destroy has_many :student_works_evaluation_distributions, :dependent => :destroy has_many :student_works_scores, :dependent => :destroy belongs_to :project diff --git a/app/models/user.rb b/app/models/user.rb index 0ea0eaf15..99b39543e 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -322,9 +322,10 @@ class User < Principal end # id 转换成 登录名 - # def to_param - # self.login.to_i > 0 ? id : login - # end + # 如果是整数就去ID,否则就取login + def to_param + (self.login.to_i.to_s == self.login || self.login.include?(".") || self.login.include?("%") || self.login.include?("?")) ? id : login + end def my_blogs_count diff --git a/app/views/attachments/_form.html.erb b/app/views/attachments/_form.html.erb index f302190b2..f5b5692f3 100644 --- a/app/views/attachments/_form.html.erb +++ b/app/views/attachments/_form.html.erb @@ -2,63 +2,6 @@ input.is_public,input.is_public_checkbox{height:12px;} input.is_public_checkbox{margin-left:4px;margin-right:4px;} -
    - -<% if defined?(container) && container && container.saved_attachments %> - <% container.attachments.each_with_index do |attachment, i| %> - - <%= text_field_tag("attachments[p#{i}][filename]", attachment.filename, :class => 'upload_filename readonly', :readonly => 'readonly', :style=>'border:none;') %> - <%#= text_field_tag("attachments[p#{i}][description]", attachment.description, :maxlength => 254, :placeholder => l(:label_optional_description), :class => 'description', :style => "display: inline-block;") %> - - <%#= check_box_tag("attachments[p#{i}][is_public_checkbox]", attachment.is_public, attachment.is_public == 1 ? true : false, :class => 'is_public') %> - <%= if attachment.id.nil? - #待补充代码 - else - link_to(' '.html_safe, attachment_path(attachment, :attachment_id => "p#{i}", :format => 'js'), :method => 'delete', :remote => true, :class => 'remove-upload') - end - %> - <%#= render :partial => 'tags/tag', :locals => {:obj => attachment, :object_flag => "6"} %> - - <%= hidden_field_tag "attachments[p#{i}][token]", "#{attachment.token}" %> - -
    - <% end %> - -<% end %> -
    - <% project = project %> -
    - - <%#= button_tag "浏览", :type=>"button", :onclick=>"CompatibleSend();" %> - - <%= button_tag "上传附件", :type=>"button", :onclick=>"$('#_file').click();",:onmouseover => 'this.focus()',:class => 'sub_btn' %> - <%= file_field_tag 'attachments[dummy][file]', - :id => '_file', - :class => 'file_selector', - :multiple => true, - :onchange => 'addInputFiles(this);', - :style => ie8? ? '' : 'display:none', - :data => { - :max_file_size => Setting.attachment_max_size.to_i.kilobytes, - :max_file_size_message => l(:error_attachment_too_big, :max_size => number_to_human_size(Setting.attachment_max_size.to_i.kilobytes)), - :max_concurrent_uploads => Redmine::Configuration['max_concurrent_ajax_uploads'].to_i, - :upload_path => uploads_path(:format => 'js', :project => project), - :description_placeholder => l(:label_optional_description), - :field_is_public => l(:field_is_public), - :are_you_sure => l(:text_are_you_sure), - :file_count => l(:label_file_count), - :lebel_file_uploding => l(:lebel_file_uploding), - :delete_all_files => l(:text_are_you_sure_all) - } %> - - <%= l(:label_no_file_uploaded) %> - - (<%= l(:label_max_size) %>: - <%= number_to_human_size(Setting.attachment_max_size.to_i.kilobytes) %>) - - - <% content_for :header_tags do %> - <%= javascript_include_tag 'attachments' %> - <% end %> -
    - +
    + <%= render :partial=>'attachments/form_attachments', :locals => { :container => container }%> +
    \ No newline at end of file diff --git a/app/views/attachments/_form_attachments.html.erb b/app/views/attachments/_form_attachments.html.erb new file mode 100644 index 000000000..db4ba070c --- /dev/null +++ b/app/views/attachments/_form_attachments.html.erb @@ -0,0 +1,58 @@ + +<% if defined?(container) && container && container.saved_attachments %> + <% container.attachments.each_with_index do |attachment, i| %> + + <%= text_field_tag("attachments[p#{i}][filename]", attachment.filename, :class => 'upload_filename readonly hidden', :readonly => 'readonly', :style=>'border:none; width:460px;') %> + + <%#= text_field_tag("attachments[p#{i}][description]", attachment.description, :maxlength => 254, :placeholder => l(:label_optional_description), :class => 'description', :style => "display: inline-block;") %> + + <%#= check_box_tag("attachments[p#{i}][is_public_checkbox]", attachment.is_public, attachment.is_public == 1 ? true : false, :class => 'is_public') %> + <%= if attachment.id.nil? + #待补充代码 + else + link_to(' '.html_safe, attachment_path(attachment, :attachment_id => "p#{i}", :format => 'js'), :method => 'delete', :remote => true, :class => 'remove-upload') + end + %> + <%#= render :partial => 'tags/tag', :locals => {:obj => attachment, :object_flag => "6"} %> + + <%= hidden_field_tag "attachments[p#{i}][token]", "#{attachment.token}" %> + +
    + <% end %> + +<% end %> +
    +<% project = project %> +
    + + <%#= button_tag "浏览", :type=>"button", :onclick=>"CompatibleSend();" %> + + <%= button_tag "上传附件", :id => "upload_attachments", :type=>"button", :onclick=>"$('#_file').click();",:onmouseover => 'this.focus()',:class => 'sub_btn' %> + <%= file_field_tag 'attachments[dummy][file]', + :id => '_file', + :class => 'file_selector', + :multiple => true, + :onchange => 'addInputFiles(this);', + :style => ie8? ? '' : 'display:none', + :data => { + :max_file_size => Setting.attachment_max_size.to_i.kilobytes, + :max_file_size_message => l(:error_attachment_too_big, :max_size => number_to_human_size(Setting.attachment_max_size.to_i.kilobytes)), + :max_concurrent_uploads => Redmine::Configuration['max_concurrent_ajax_uploads'].to_i, + :upload_path => uploads_path(:format => 'js', :project => project), + :description_placeholder => l(:label_optional_description), + :field_is_public => l(:field_is_public), + :are_you_sure => l(:text_are_you_sure), + :file_count => l(:label_file_count), + :lebel_file_uploding => l(:lebel_file_uploding), + :delete_all_files => l(:text_are_you_sure_all) + } %> + + <%= l(:label_no_file_uploaded) %> + + (<%= l(:label_max_size) %>: + <%= number_to_human_size(Setting.attachment_max_size.to_i.kilobytes) %>) + + +<% content_for :header_tags do %> + <%= javascript_include_tag 'attachments' %> +<% end %> \ No newline at end of file diff --git a/app/views/attachments/destroy.js.erb b/app/views/attachments/destroy.js.erb index 97d3fd3ec..1e33d8e7a 100644 --- a/app/views/attachments/destroy.js.erb +++ b/app/views/attachments/destroy.js.erb @@ -12,6 +12,10 @@ $("#attachment_history_popub").html('<%= escape_javascript( render :partial => ' $("#attachment_history_popub").html('<%= escape_javascript( render :partial => 'files/attachment_history_popub') %>'); <% end %> +<% unless @attachment.container.nil? %> + $("#issue_upload_attachments").html('<%= escape_javascript( render :partial => 'attachments/form_attachments', :locals => { :container => @attachment.container }) %>'); +<% end %> + <% if @is_destroy%> $("#attachment_<%= @attachment.id%>").remove(); if(document.getElementById("revise_attachment_div_<%= @attachment.id%>")) { @@ -49,4 +53,4 @@ $("#attachment_history_popub").html('<%= escape_javascript( render :partial => ' $("#choose_revise_attach").attr("onclick","_file.click();"); } //modify by yutao 2015-5-14 当1个页面存在多个上传控件时此块代码存在bug 故改之 end -<% end%> \ No newline at end of file +<% end%> diff --git a/app/views/attachments/upload.js.erb b/app/views/attachments/upload.js.erb index 62db5ebfd..7a0a195ad 100644 --- a/app/views/attachments/upload.js.erb +++ b/app/views/attachments/upload.js.erb @@ -1,3 +1,6 @@ +$('#issue_confirm').removeAttr("disabled"); +$('#issue_confirm').css('background-color', '#3b94d6'); +$('#issue_confirm').css('cursor','pointer'); var fileSpan = $('#attachments_<%= j params[:attachment_id] %>'); <% if(!@attachment.nil? && @attachment.new_record?) %> fileSpan.hide(); diff --git a/app/views/blogs/_article.html.erb b/app/views/blogs/_article.html.erb index e6136ecfa..8ddc3062d 100644 --- a/app/views/blogs/_article.html.erb +++ b/app/views/blogs/_article.html.erb @@ -21,9 +21,9 @@