diff --git a/Gemfile b/Gemfile index 03dbb5785..a94f1b33b 100644 --- a/Gemfile +++ b/Gemfile @@ -51,7 +51,7 @@ gem 'elasticsearch-rails' ### profile -gem 'oneapm_rpm' +# gem 'oneapm_rpm' group :development do gem 'grape-swagger' diff --git a/app/controllers/admin_controller.rb b/app/controllers/admin_controller.rb index 6c62c642a..4bfd9a514 100644 --- a/app/controllers/admin_controller.rb +++ b/app/controllers/admin_controller.rb @@ -598,6 +598,66 @@ class AdminController < ApplicationController format.html end end + + # 获取申请的高校列表 + # status: 0 未审批; 1 已批阅; + def applied_schools + @name = params[:name] + @apply_status = ApplyAddSchools.where(:status => 0).order('created_at desc') + @apply_count = @apply_status.count + + @apply_pages = Paginator.new @apply_count, 30, params['page'] || 1 + @apply_status = paginateHelper @apply_status, 30 + + @page = (params['page'] || 1).to_i - 1 + respond_to do |format| + format.html + end + end + + def has_applied_schools + @name = params[:name] + @has_apply_status = ApplyAddSchools.where(:status => 1).order('created_at desc') + @has_apply_count = @has_apply_status.count + + @has_apply_pages = Paginator.new @has_apply_count, 30, params['page'] || 1 + @has_apply_status = paginateHelper @has_apply_status, 30 + + @page = (params['page'] || 1).to_i - 1 + respond_to do |format| + format.html + end + end + + # 批准未审批的高校 + # 消息发送,发送对象为申请人 + # status: 0表示未批准; status:1表示已批准; status: 2表示已拒绝 + def approve_applied_schools + applied_school = ApplyAddSchools.find params[:id] + applied_school.update_column('status', 1) unless applied_school.nil? + AppliedMessage.create(:user_id => applied_school.user_id, :status => true, :applied_id => applied_school.id, :applied_type => "ApplyAddSchools") + respond_to do |format| + format.html{ redirect_to unapplied_schools_url } + end + end + + # 更改申请的高校名称 + # REDO: 修改该字段 + # REDO: 同步修改使用了改名称的用户单位 + def edit_applied_schools + @applied_schools = ApplyAddSchools.find params[:id] + @applied_schools.update_column('name', params[:name]) + end + + # 删除申请的高校 + # REDO: destroy关联删除 + # REDO: 删除确认提示,是否删除 + # REDO: 给申请人发送消息 + def delete_applied_schools + @applied_schools = ApplyAddSchools.find params[:id] + @applied_schools.destroy + end + #移动端版本管理 def mobile_version @versions = PhoneAppVersion.reorder('created_at desc') diff --git a/app/controllers/applied_project_controller.rb b/app/controllers/applied_project_controller.rb index b9824976b..117d022d6 100644 --- a/app/controllers/applied_project_controller.rb +++ b/app/controllers/applied_project_controller.rb @@ -2,43 +2,63 @@ class AppliedProjectController < ApplicationController #申请加入项目 def applied_join_project - @user_id = params[:user_id] - @project = Project.find_by_id(params[:project_id]) - if params[:project_join] - if @project - user = User.find @user_id - if user.member_of?(@project) - @status = 3 - else - @applieds = AppliedProject.where("user_id = ? and project_id = ?", params[:user_id],params[:project_id]) - if @applieds.count == 0 - appliedproject = AppliedProject.create(:user_id => params[:user_id], :project_id => params[:project_id]) - Mailer.run.applied_project(appliedproject) - @status = 2 - else - @status = 1 - end - end - else - @status = 0 - end - respond_to do |format| - format.js - end - return - end + @project = Project.find_by_id(params[:object_id]) + # @user_id = params[:user_id] + # if params[:project_join] + # if @project + # user = User.find @user_id + # if user.member_of?(@project) + # @status = 3 + # else + # @applieds = AppliedProject.where("user_id = ? and project_id = ?", params[:user_id],params[:project_id]) + # if @applieds.count == 0 + # appliedproject = AppliedProject.create(:user_id => params[:user_id], :project_id => params[:project_id]) + # Mailer.run.applied_project(appliedproject) + # @status = 2 + # else + # @status = 1 + # end + # end + # else + # @status = 0 + # end + # respond_to do |format| + # format.js + # end + # return + # end + # + # @applieds = AppliedProject.where("user_id = ? and project_id = ?", params[:user_id],params[:project_id]) + # if @applieds.count == 0 + # appliedproject = AppliedProject.create(:user_id => params[:user_id], :project_id => params[:project_id]) + # Mailer.run.applied_project(appliedproject) + # end + # + # #redirect_to project_path(params[:project_id]) + # #redirect_to_referer_or {render :text => ( 'applied success.'), :layout => true} + # respond_to do |format| + # format.html { redirect_to_referer_or {render :text => (watching ? 'Watcher added.' : 'Watcher removed.'), :layout => true}} + # format.js { render :partial => 'set_applied'} + # end + end - @applieds = AppliedProject.where("user_id = ? and project_id = ?", params[:user_id],params[:project_id]) - if @applieds.count == 0 - appliedproject = AppliedProject.create(:user_id => params[:user_id], :project_id => params[:project_id]) - Mailer.run.applied_project(appliedproject) - end - - #redirect_to project_path(params[:project_id]) - #redirect_to_referer_or {render :text => ( 'applied success.'), :layout => true} - respond_to do |format| - format.html { redirect_to_referer_or {render :text => (watching ? 'Watcher added.' : 'Watcher removed.'), :layout => true}} - format.js { render :partial => 'set_applied'} + # @flage:提示语标志(1:邀请码错误;2:已经是项目成员; 3:角色没有选择; 4:申请成功) + # role:成员角色 => 0(1:管理人员;2:开发人员;3:报告人员) + # 申请成功则发送消息 + def applied_project_info + @project = Project.find(params[:project_id]) + if params[:invite_code].to_s != @project.invite_code + @flag = 1 + elsif User.current.member_of?(@project) + @flag = 2 + elsif params[:member].nil? + @flag = 3 + else + @flag = 4 + role = params[:member] == "member_manager" ? 1 : (params[:member] = "member_developer" ? 2 : 3) + applied_project = AppliedProject.create(:user_id => User.current.id, :project_id => params[:project_id], :role => role) + # 申请成功则给项目管理员发送邮件及发送消息 + Mailer.run.applied_project(applied_project) end end diff --git a/app/controllers/school_controller.rb b/app/controllers/school_controller.rb index dab752afb..bdd99de61 100644 --- a/app/controllers/school_controller.rb +++ b/app/controllers/school_controller.rb @@ -180,7 +180,7 @@ class SchoolController < ApplicationController applyschool.city = params[:city] applyschool.address = params[:address] applyschool.remarks = params[:remarks] - + applyschool.user_id = User.current.id if applyschool.save data[:school_id] = school.id else diff --git a/app/controllers/student_work_controller.rb b/app/controllers/student_work_controller.rb index 4992501c5..e2dd23552 100644 --- a/app/controllers/student_work_controller.rb +++ b/app/controllers/student_work_controller.rb @@ -381,14 +381,32 @@ class StudentWorkController < ApplicationController @is_evaluation = @homework.homework_detail_manual && @homework.homework_detail_manual.comment_status == 2 && !@is_teacher #是不是匿评 @show_all = false - course_group = CourseGroup.find_by_id(@group) if @group - if course_group - group_students = course_group.users - if group_students.empty? - student_in_group = '(0)' + # 0表示没有分组的学生,-1表示所有分组的学生 + if @group + if @group == "0" + none_group_students = @course.members.select{ |member| member.course_group_id == 0 } + if none_group_students.empty? + student_in_group = '(0)' + else + student_in_group = '(' + none_group_students.map{ |member| member.user_id }.join(',') + ')' + end + elsif @group == "-1" + all_group_students = @course.members.select{ |member| member.course_group_id } + if all_group_students.empty? + student_in_group = '(0)' + else + student_in_group = '(' + all_group_students.map{ |member| member.user_id }.join(',') + ')' + end else - student_in_group = '(' + group_students.map{|user| user.id}.join(',') + ')' + course_group = CourseGroup.find_by_id(@group) + group_students = course_group.users + if group_students.empty? + student_in_group = '(0)' + else + student_in_group = '(' + group_students.map{ |user| user.id }.join(',') + ')' + end end + #开放作品 || 老师 || 超级管理员 || 禁用匿评&&作业截止&&已提交作品 显示所有列表 if (@homework.is_open == 1 && @course.is_public == 1) || (@homework.is_open == 1 && @course.is_public == 0 && User.current.member_of_course?(@course)) || @is_teacher || User.current.admin? || (User.current.member_of_course?(@course) && @homework.anonymous_comment == 1 && Time.parse(@homework.end_time.to_s).strftime("%Y-%m-%d") < Time.now.strftime("%Y-%m-%d") && !@homework.student_works.has_committed.where(:user_id => User.current.id).empty?) if @order == 'lastname' diff --git a/app/controllers/syllabuses_controller.rb b/app/controllers/syllabuses_controller.rb index 9c69f5259..e77b19511 100644 --- a/app/controllers/syllabuses_controller.rb +++ b/app/controllers/syllabuses_controller.rb @@ -88,7 +88,7 @@ class SyllabusesController < ApplicationController end def destroy - if @syllabus && @syllabus.courses.empty? + if @syllabus && @syllabus.courses.not_deleted.empty? @syllabus.destroy redirect_to user_courselist_user_path(User.current.id) end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 7aae73e94..d64d95223 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -33,7 +33,6 @@ module ApplicationHelper extend Forwardable def_delegators :wiki_helper, :wikitoolbar_for, :heads_for_wiki_formatter - # def user_blogs_path(resource,parameters={}) # super # end diff --git a/app/helpers/courses_helper.rb b/app/helpers/courses_helper.rb index 46ad4bb1c..ef304887f 100644 --- a/app/helpers/courses_helper.rb +++ b/app/helpers/courses_helper.rb @@ -596,6 +596,26 @@ module CoursesHelper Course.tagged_with(tag_name).order('updated_at desc') end + # 获取动态列表名称 + def get_acts_list_type type + case type + when "homework" + l(:label_homework_acts) + when "news" + l(:label_news_acts) + when "attachment" + l(:label_attachment_acts) + when "message" + l(:label_message_acts) + when "journalsForMessage" + l(:label_journalsForMessage_acts) + when "poll" + l(:label_poll_acts) + else + l(:label_all_cats) + end + end + #分班下拉框 def course_group_option course type = [] diff --git a/app/helpers/student_work_helper.rb b/app/helpers/student_work_helper.rb index 42a3a6538..4f0a2ca6d 100644 --- a/app/helpers/student_work_helper.rb +++ b/app/helpers/student_work_helper.rb @@ -101,6 +101,10 @@ module StudentWorkHelper if course.course_groups && !course.course_groups.empty? base = [] base << l(:label_chose_group) + base << -1 + result << base + base = [] + base << l(:label_no_group) base << 0 result << base course.course_groups.each do |group| diff --git a/app/helpers/users_helper.rb b/app/helpers/users_helper.rb index 6493993b0..ad8bc4377 100644 --- a/app/helpers/users_helper.rb +++ b/app/helpers/users_helper.rb @@ -54,6 +54,18 @@ module UsersHelper end end + # 获取消息角色 + def applied_project_message_type role + case role + when 1 + "管理员" + when 2 + "开发人员" + when 3 + "报告人员" + end + end + def get_resource_origin attach type = attach.container_type content = attach.container diff --git a/app/helpers/watchers_helper.rb b/app/helpers/watchers_helper.rb index 52f2ea119..d846071b5 100644 --- a/app/helpers/watchers_helper.rb +++ b/app/helpers/watchers_helper.rb @@ -364,22 +364,29 @@ module WatchersHelper :class => "pr_join_a" ,:id=>id end - #申请加入项目 + # 申请加入项目 def join_in_project_link(project, user, options=[]) - return '' unless user && user.logged? applied = project.applied_projects.find_by_user_id(user.id) text = applied ? l(:label_unapply_project) : l(:label_apply_project) - @applied_flag = project.instance_of?(Project) + url = applied_join_project_path(:object_id => project.id) + method = 'post' + @applied_flag = project.instance_of?(Project) if applied - appliedid = applied.id + link = "#{text}" + else + link = link_to(text, url, :remote => true, :method => method, :id => "#{project.id}", :class => "pr_join_a") end - id = applied_css(project) - url = appliedproject_path( - :id=>appliedid, - :user_id => user.id, - :project_id => project.id) - method = applied ? 'delete' : 'post' - link_to text, url, :remote => true, :method => method , :class => "pr_join_a",:id => id + link.html_safe + # if applied + # appliedid = applied.id + # end + # id = applied_css(project) + # url = appliedproject_path( + # :id=>appliedid, + # :user_id => user.id, + # :project_id => project.id) + # method = applied ? 'delete' : 'post' + # link_to text, url, :remote => true, :method => method , :class => "pr_join_a",:id => id end def paginateHelper obj, pre_size=20 diff --git a/app/models/applied_message.rb b/app/models/applied_message.rb new file mode 100644 index 000000000..1c6b3a8e7 --- /dev/null +++ b/app/models/applied_message.rb @@ -0,0 +1,21 @@ +class AppliedMessage < ActiveRecord::Base + # status: 0表示未批准; status:1表示已批准; status: 2表示已拒绝 + attr_accessible :applied_id, :applied_type, :status, :user_id, :viewed + belongs_to :applied ,:polymorphic => true + belongs_to :apply_add_schools + belongs_to :user + has_many :message_alls, :class_name => 'MessageAll', :as =>:message, :dependent => :destroy + + validates :user_id,presence: true + validates :applied_id,presence: true + validates :applied_type, presence: true + after_create :add_user_message + + # 因为要排序所以需要写入总表 + def add_user_message + if MessageAll.where("message_type = '#{self.class.to_s}' and message_id = '#{self.id}'").first.nil? + self.message_alls << MessageAll.new(:user_id => self.user_id, :viewed => false) + end + end + +end diff --git a/app/models/applied_project.rb b/app/models/applied_project.rb index fb8bf90af..8dbed9cda 100644 --- a/app/models/applied_project.rb +++ b/app/models/applied_project.rb @@ -1,18 +1,16 @@ class AppliedProject < ActiveRecord::Base - attr_accessible :project_id, :user_id + attr_accessible :project_id, :user_id, :role belongs_to :user belongs_to :project - has_many :forge_messages, :class_name => 'ForgeMessage', :as => :forge_message, :dependent => :destroy + has_many :applied_messages, :class_name => 'AppliedMessage', :as => :applied, :dependent => :destroy after_create :send_appliled_message + # 仅仅给项目管理人员发送消息 def send_appliled_message - # if MessageAll.where("message_type = '#{self.class.to_s}' and message_id = '#{self.id}'").first.nil? - self.project.members.each do |m| - if m.roles.first.to_s.include?("Manager") - self.forge_messages << ForgeMessage.new(:user_id => m.user_id, :project_id => self.project_id, :viewed => false) - end + self.project.managers.each do |member| + self.applied_messages << AppliedMessage.new(:user_id => member.user_id, :status => true, :viewed => false) end # end end diff --git a/app/models/apply_add_schools.rb b/app/models/apply_add_schools.rb index efa56e808..b7301af13 100644 --- a/app/models/apply_add_schools.rb +++ b/app/models/apply_add_schools.rb @@ -1,4 +1,16 @@ class ApplyAddSchools < ActiveRecord::Base + # status:0 未审批 ; 1 已批阅 attr_accessible :address, :city, :name, :province, :remarks, :school_id, :status + has_many :applied_messages, :class_name =>'AppliedMessage', :as => :applied, :dependent => :destroy belongs_to :school + + after_create :send_massage + + #给系统所有管理发送消息 + def send_massage + users = User.where(:admin => 1) + users.each do |user| + self.applied_messages << AppliedMessage.new(:user_id => user.id, :viewed => false, :status => false) + end + end end diff --git a/app/models/project.rb b/app/models/project.rb index bbc639f3d..edeee4f33 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -268,6 +268,11 @@ class Project < ActiveRecord::Base notified.collect(&:mail) end + # 返回为member类型数组 + def managers + self.members.includes(:roles).select{|member| member.roles[0].try(:name) == "Manager"} + end + def initialize(attributes=nil, *args) super @@ -904,6 +909,24 @@ class Project < ActiveRecord::Base User.find(self.user_id) end + # 延迟生成邀请码 + def invite_code + return generate_invite_code + end + + # 生成邀请码 + # 如果已有改邀请码,则重新生成 + CODES = %W(2 3 4 5 6 7 8 9 A B C D E F G H J K L N M O P Q R S T U V W X Y Z) + def generate_invite_code + code = read_attribute(:invite_code) + if !code || code.size <5 + code = CODES.sample(5).join + return generate_invite_code if Project.where(invite_code: code).present? + update_attribute(:invite_code, code) + end + code + end + private def after_parent_changed(parent_was) diff --git a/app/views/admin/_tab_has_applied_applied.erb b/app/views/admin/_tab_has_applied_applied.erb new file mode 100644 index 000000000..6ae501b0c --- /dev/null +++ b/app/views/admin/_tab_has_applied_applied.erb @@ -0,0 +1,6 @@ +
+ +
\ No newline at end of file diff --git a/app/views/admin/applied_schools.html.erb b/app/views/admin/applied_schools.html.erb new file mode 100644 index 000000000..f14f8100a --- /dev/null +++ b/app/views/admin/applied_schools.html.erb @@ -0,0 +1,78 @@ +

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

+ +<%= render 'tab_has_applied_applied' %> + +<%= form_tag({}, :method => :get) do %> +
+ + <%= text_field_tag 'name', params[:name], :size => 30, :placeholder => '输入单位名称进行搜索' %> + <%= submit_tag l(:button_apply ), :class => "small", :name => nil %> + <%= link_to l(:button_clear), {:controller => 'admin', :action => 'applied_shcools'}, :class => 'icon icon-reload' %> +
+<% end %> +  + +
+ + + + + + + + + + + + + + <% @apply_status.each do |apply| %> + <% if apply.status == 0 %> + + + + + + + + + + <% end %> + <% end %> + +
+ 序号 + + 单位名称 + + 地区 + + 详细地址 + + 用户 + + 创建时间 + + 操作 +
+ <%= apply.id %> + + <%= apply.name %> + + <%= apply.province + apply.city %> + + <%= apply.address %> + + <%= apply.user_id %> + + <%= format_date(apply.created_at) %> + + <%= link_to( l(:label_approve), { :controller => 'admin', :action => 'approve_applied_schools', :id => apply.id }, :class => 'icon-del') %> + <%= link_to( l(:button_delete), { :controller => 'admin', :action => 'delete_applied_schools', :id => apply.id }, :class => 'icon-del') %> + <%= link_to( l(:button_change), { :controller => 'admin', :action => 'edit_applied_schools', :id => apply.id, :name => apply.name }, :class => 'icon-del') %> +
+
\ No newline at end of file diff --git a/app/views/admin/has_applied_schools.html.erb b/app/views/admin/has_applied_schools.html.erb new file mode 100644 index 000000000..a68deb0bc --- /dev/null +++ b/app/views/admin/has_applied_schools.html.erb @@ -0,0 +1,77 @@ +

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

+ +<%= render 'tab_has_applied_applied' %> + +<%= form_tag({}, :method => :get) do %> +
+ + <%= text_field_tag 'name', params[:name], :size => 30, :placeholder => '输入单位名称进行搜索' %> + <%= submit_tag l(:button_apply ), :class => "small", :name => nil %> + <%= link_to l(:button_clear), {:controller => 'admin', :action => 'applied_shcools'}, :class => 'icon icon-reload' %> +
+<% end %> +  + +
+ + + + + + + + + + + + + + <% @has_apply_status.each do |apply| %> + <% if apply.status == 1 %> + + + + + + + + + + <% end %> + <% end %> + +
+ 序号 + + 单位名称 + + 地区 + + 详细地址 + + 用户 + + 创建时间 + + 操作 +
+ <%= apply.id %> + + <%= apply.name %> + + <%= apply.province + apply.city %> + + <%= apply.address %> + + <%= apply.user_id %> + + <%= format_date(apply.created_at) %> + + <%= link_to( l(:button_delete), { :controller => 'admin', :action => 'delete_applied_schools', :id => apply.id }, :class => 'icon-del') %> + <%= link_to( l(:button_change), { :controller => 'admin', :action => 'edit_applied_schools', :id => apply.id, :name => apply.name }, :class => 'icon-del') %> +
+
\ No newline at end of file diff --git a/app/views/applied_project/_applied_join_project.html.erb b/app/views/applied_project/_applied_join_project.html.erb new file mode 100644 index 000000000..ad2d020c2 --- /dev/null +++ b/app/views/applied_project/_applied_join_project.html.erb @@ -0,0 +1,29 @@ +
+

欢迎加入项目

+ +
+
+
+ <%= form_tag( url_for(:controller => 'applied_project', :action => 'applied_project_info', :project_id => @project.id), :remote => true, :id => 'project_applied_form') do %> + + <% end %> +
diff --git a/app/views/applied_project/_applied_project_tip.js.erb b/app/views/applied_project/_applied_project_tip.js.erb new file mode 100644 index 000000000..56e5270d6 --- /dev/null +++ b/app/views/applied_project/_applied_project_tip.js.erb @@ -0,0 +1,25 @@ +
+
+

提示

+ +
+
+
+ +
+
\ No newline at end of file diff --git a/app/views/applied_project/applied_join_project.js.erb b/app/views/applied_project/applied_join_project.js.erb index ae9d3f467..6aa4481a4 100644 --- a/app/views/applied_project/applied_join_project.js.erb +++ b/app/views/applied_project/applied_join_project.js.erb @@ -1,14 +1,3 @@ -// @status: 0 该项目不存在;1 不重复加入;2 成功加入; 3 已是项目成员;其它 加入失败 -<% if @status == 0%> - alert("<%= l('project.join.tips.notexist') %>"); -<% elsif @status == 1%> - alert("<%= l('project.join.tips.repeat') %>"); -<% elsif @status == 2%> - alert("<%= l('project.join.tips.success') %>"); - hideModal($("#popbox")); - $("#applied_project_link_<%= @project.id%>").replaceWith("<%=escape_javascript(link_to '取消申请',appliedproject_applied_path(:project_id => @project.id,:user_id => User.current.id),:class => "blue_n_btn fr mt20", :remote => "true",:method => "delete",:id => "applied_project_link_#{@project.id}")%>"); -<% elsif @status == 3%> - alert("<%= l('project.join.tips.has') %>"); -<%else%> - alert("<%= l('project.join.tips.fail') %>"); -<%end%> \ No newline at end of file +var htmlvalue = "<%= escape_javascript(render :partial => 'applied_join_project', locals: {:project_id => @project.id}) %>"; +pop_box_new(htmlvalue,460,40,50); + diff --git a/app/views/applied_project/applied_project_info.js.erb b/app/views/applied_project/applied_project_info.js.erb new file mode 100644 index 000000000..1ac627b3e --- /dev/null +++ b/app/views/applied_project/applied_project_info.js.erb @@ -0,0 +1,3 @@ +var htmlvalue = "<%= escape_javascript(render :partial => 'applied_project/applied_project_tip', locals: {:project_id => @project.id}) %>"; +pop_box_new(htmlvalue,380,40,50); +//$("#join_in_project").attr('href','<%#= join_in_project_link(@project, User.current) %>'); diff --git a/app/views/attachments/_project_file_links.html.erb b/app/views/attachments/_project_file_links.html.erb index 0f7e8a012..759a9a735 100644 --- a/app/views/attachments/_project_file_links.html.erb +++ b/app/views/attachments/_project_file_links.html.erb @@ -92,7 +92,7 @@ <% end %> <% if options[:author] %> - <%= link_to h(truncate(attachment.author.name, length: 10, omission: '...')),user_path(attachment.author),:class => "c_orange" %>, + <%= link_to h(truncate(attachment.author.name, length: 10, omission: '...')),user_path(attachment.author),:class => "link-blue" %>, <%= format_time(attachment.created_on) %> <% end %> diff --git a/app/views/boards/_course_new.html.erb b/app/views/boards/_course_new.html.erb index df61d2b9c..90f0d9c7e 100644 --- a/app/views/boards/_course_new.html.erb +++ b/app/views/boards/_course_new.html.erb @@ -130,12 +130,14 @@