From a3f444819ee34c9e00f1c796f5336100cc913a0e Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Mon, 12 Sep 2016 10:52:43 +0800 Subject: [PATCH 01/41] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E5=90=8D=E5=AD=97=E5=A4=AA=E9=95=BF=E6=8E=92=E7=89=88=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/schema.rb | 31 ++++++++++++++++-------------- public/stylesheets/css/project.css | 2 +- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/db/schema.rb b/db/schema.rb index 4b188ecbb..443e8c426 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20160907061917) do +ActiveRecord::Schema.define(:version => 20160907080621) do create_table "activities", :force => true do |t| t.integer "act_id", :null => false @@ -56,10 +56,10 @@ ActiveRecord::Schema.define(:version => 20160907061917) do t.integer "user_id" t.integer "applied_id" t.string "applied_type" - t.integer "viewed", :default => 0 - t.integer "status", :default => 0 - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false + t.integer "viewed" + t.integer "status" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false t.string "name" t.integer "applied_user_id" t.integer "role" @@ -157,13 +157,13 @@ ActiveRecord::Schema.define(:version => 20160907061917) do create_table "attachments", :force => true do |t| t.integer "container_id" t.string "container_type", :limit => 30 - t.string "filename", :default => "", :null => false - t.string "disk_filename", :default => "", :null => false - t.integer "filesize", :default => 0, :null => false + t.string "filename", :default => "", :null => false + t.string "disk_filename", :default => "", :null => false + t.integer "filesize", :default => 0, :null => false t.string "content_type", :default => "" - t.string "digest", :limit => 40, :default => "", :null => false - t.integer "downloads", :default => 0, :null => false - t.integer "author_id", :default => 0, :null => false + t.string "digest", :limit => 40, :default => "", :null => false + t.integer "downloads", :default => 0, :null => false + t.integer "author_id", :default => 0, :null => false t.datetime "created_on" t.string "description" t.string "disk_directory" @@ -173,6 +173,7 @@ ActiveRecord::Schema.define(:version => 20160907061917) do t.integer "quotes" t.integer "is_publish", :default => 1 t.date "publish_time" + t.boolean "init_file", :default => false end add_index "attachments", ["author_id"], :name => "index_attachments_on_author_id" @@ -310,14 +311,16 @@ ActiveRecord::Schema.define(:version => 20160907061917) do add_index "changeset_parents", ["parent_id"], :name => "changeset_parents_parent_ids" create_table "changesets", :force => true do |t| - t.integer "repository_id", :null => false - t.string "revision", :null => false + t.integer "repository_id", :null => false + t.string "revision", :null => false t.string "committer" - t.datetime "committed_on", :null => false + t.datetime "committed_on", :null => false t.text "comments" t.date "commit_date" t.string "scmid" t.integer "user_id" + t.integer "project_id" + t.integer "type", :default => 0 end add_index "changesets", ["committed_on"], :name => "index_changesets_on_committed_on" diff --git a/public/stylesheets/css/project.css b/public/stylesheets/css/project.css index 454fce294..d2be2e16c 100644 --- a/public/stylesheets/css/project.css +++ b/public/stylesheets/css/project.css @@ -549,7 +549,7 @@ a:hover.upload_btn_grey{background:#8a8a8a;} .merge-discussion-input textarea {width:720px; height:80px; font-size:13px; line-height:16px; color:#484848; padding:5px;} /*新版项目列表新增*/ -.new_project_title{ font-size:16px; color:#333; max-width:560px; font-weight:normal;white-space:nowrap; overflow:hidden; text-overflow:ellipsis; } +.new_project_title{ font-size:16px; color:#333; max-width:480px; font-weight:normal;white-space:nowrap; overflow:hidden; text-overflow:ellipsis; } .icons_project_list{ width:8px; height:8px; border:2px solid #fff; background:#3b94d6;-webkit-border-radius:50px;-moz-border-radius:50px;-o-border-radius:50px;border-radius:50px;-webkit-box-shadow: 0px 2px 5px rgba(146, 153, 169, 0.5);-moz-box-shadow: 0px 2px 5px rgba(146, 153, 169, 0.5);box-shadow: 0px 2px 5px rgba(146, 153, 169, 0.5); } .icons_project_favorite {background: url(/images/syllabus/sy_icons_star.png) 0px 0px no-repeat; width:20px; height:20px; display:block; float:left;} .icons_project_star{background: url(/images/syllabus/sy_icons_star.png) 0px -27px no-repeat; width:20px; height:20px; display:block; float:left;} From 7c9f5a4f2d0e2ca88a3460ba4b059c31edc4b040 Mon Sep 17 00:00:00 2001 From: yuanke <249218296@qq.com> Date: Mon, 12 Sep 2016 16:40:31 +0800 Subject: [PATCH 02/41] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E9=80=9A=E7=9F=A5?= =?UTF-8?q?=E5=B7=B2=E8=A2=AB=E5=88=A0=E9=99=A4=E5=8A=A0=E4=B8=8A=E6=97=A5?= =?UTF-8?q?=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/mobile/apis/newss.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/api/mobile/apis/newss.rb b/app/api/mobile/apis/newss.rb index 810e4ff2a..0f03905a5 100644 --- a/app/api/mobile/apis/newss.rb +++ b/app/api/mobile/apis/newss.rb @@ -35,6 +35,8 @@ module Mobile present :is_public, is_public present :status, 0 rescue Exception=>e + Rails.logger.info "course_notice is not find!" + Rails.logger.info e present :status, -1 present :message, e.message end From 168a47fabb7b8bc2a29d6f3f1b011124d333ce3d Mon Sep 17 00:00:00 2001 From: yuanke <249218296@qq.com> Date: Mon, 12 Sep 2016 17:34:55 +0800 Subject: [PATCH 03/41] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E9=80=9A=E7=9F=A5?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E8=A2=AB=E5=88=A0=E9=99=A4=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/news_controller.rb | 13 +++++++++++++ app/models/news.rb | 22 +++++++++++----------- 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/app/controllers/news_controller.rb b/app/controllers/news_controller.rb index 190c3852b..33ff2a248 100644 --- a/app/controllers/news_controller.rb +++ b/app/controllers/news_controller.rb @@ -1,3 +1,4 @@ +#encoding: utf-8 # Redmine - project management software # Copyright (C) 2006-2013 Jean-Philippe Lang # @@ -212,6 +213,18 @@ class NewsController < ApplicationController @news.safe_attributes = params[:news] @news.save_attachments(params[:attachments]) if @news.save + @course.members.each do |m| + if m.user_id != User.current.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=#{@news.course_id}").count + if count == 0 + ws = WechatService.new + content = @news.title + ws.class_notice m.user_id, "course_notice", @news.id, "#{l(:label_new_notice_template)}", @news.course.name, @news.author.show_name, format_time(@news.created_on), content, "点击查看通知详情" + end + end + end + if params[:asset_id] ids = params[:asset_id].split(',') update_kindeditor_assets_owner ids,@news.id,OwnerTypeHelper::NEWS diff --git a/app/models/news.rb b/app/models/news.rb index cd7156cca..0e83a39f8 100644 --- a/app/models/news.rb +++ b/app/models/news.rb @@ -167,17 +167,17 @@ class News < ActiveRecord::Base # 消息发送原则:除了消息的发布者,课程的其它成员都能收到消息提醒 def act_as_system_message if self.course - self.course.members.each do |m| - if m.user_id != self.author_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 - content = self.title - ws.class_notice m.user_id, "course_notice", self.id, "#{l(:label_new_notice_template)}", self.course.name, self.author.show_name, format_time(self.created_on), content, "点击查看通知详情" - end - end - end + # self.course.members.each do |m| + # if m.user_id != self.author_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 + # content = self.title + # ws.class_notice m.user_id, "course_notice", self.id, "#{l(:label_new_notice_template)}", self.course.name, self.author.show_name, format_time(self.created_on), content, "点击查看通知详情" + # end + # end + # end else if !self.project.nil? self.project.members.each do |m| From 22da03a1e068405957f5d8cc99a533a108ae85cd Mon Sep 17 00:00:00 2001 From: yuanke <249218296@qq.com> Date: Tue, 13 Sep 2016 13:44:26 +0800 Subject: [PATCH 04/41] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E6=B3=A8=E5=86=8C?= =?UTF-8?q?=E5=90=8E=E8=B7=B3=E5=85=A5=E7=BC=96=E8=BE=91=E8=B5=84=E6=96=99?= =?UTF-8?q?=E7=95=8C=E9=9D=A2=EF=BC=8C=E8=BF=9B=E5=85=A5=E5=88=AB=E7=9A=84?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E6=97=A0=E5=A7=93=E5=90=8D=E5=88=99=E8=B7=B3?= =?UTF-8?q?=E5=85=A5=E7=BC=96=E8=BE=91=E8=B5=84=E6=96=99=E7=95=8C=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/wechats_controller.rb | 29 ++++++++++++++------ public/assets/wechat/edit_userinfo.html | 8 +++++- public/javascripts/wechat/controllers/reg.js | 3 +- 3 files changed, 29 insertions(+), 11 deletions(-) diff --git a/app/controllers/wechats_controller.rb b/app/controllers/wechats_controller.rb index 0c6eb0910..cd911bcd6 100644 --- a/app/controllers/wechats_controller.rb +++ b/app/controllers/wechats_controller.rb @@ -456,18 +456,29 @@ class WechatsController < ActionController::Base session[:wechat_openid] = open_id if params[:code] - # if params[:state].match("review_class_member") || params[:state].match("review_project_member") + if !(params[:state] == "invite_code" || params[:state] == "project_invite_code" || params[:state] == "blog_comment" || params[:state] == "course_notice" || params[:state] == "project_discussion" || params[:state] == "course_discussion" || params[:state] == "homework" || params[:state] == "issues" || params[:state] == "journal_for_message") + uw = user_binded?(open_id) + if uw + user = uw.user + lastname = user.lastname + end + end + + if lastname && lastname == "" + @path = '/edit_userinfo' + else @path = params[:state].split('/')[0] useridstr = params[:state].split('/')[1] - # end - if useridstr - redirect_to "/wechat/user_activities##{@path}?id=#{params[:id]}&#{useridstr}" and return - elsif params[:id] - redirect_to "/wechat/user_activities##{@path}?id=#{params[:id]}" and return - else - redirect_to "/wechat/user_activities##{@path}" and return + + if useridstr + redirect_to "/wechat/user_activities##{@path}?id=#{params[:id]}&#{useridstr}" and return + elsif params[:id] + redirect_to "/wechat/user_activities##{@path}?id=#{params[:id]}" and return + else + redirect_to "/wechat/user_activities##{@path}" and return + end + # redirect_to "/wechat/user_activities##{@path}?id=#{params[:id]}" and return end - # redirect_to "/wechat/user_activities##{@path}?id=#{params[:id]}" and return end end render 'wechats/user_activities', layout: nil diff --git a/public/assets/wechat/edit_userinfo.html b/public/assets/wechat/edit_userinfo.html index e299b8feb..f4178fee4 100644 --- a/public/assets/wechat/edit_userinfo.html +++ b/public/assets/wechat/edit_userinfo.html @@ -11,7 +11,7 @@
-
姓名
+
姓名
性别 @@ -33,6 +33,12 @@ 电子邮箱地址不合法
+
+ 提示 + +
取消 确定 diff --git a/public/javascripts/wechat/controllers/reg.js b/public/javascripts/wechat/controllers/reg.js index 1247cd931..34ced26d5 100644 --- a/public/javascripts/wechat/controllers/reg.js +++ b/public/javascripts/wechat/controllers/reg.js @@ -36,7 +36,8 @@ app.controller('RegController', ['$scope', '$http', '$location', 'alertService', vm.successDialog.showMessage("提示","注册且绑定微信成功", function(){ // $location.path("/activities"); // window.WeixinJSBridge.call('closeWindow'); - wx.closeWindow(); +// wx.closeWindow(); + $location.path("/edit_userinfo"); }); } }, function (response) { From f882c0e8c31c4522ce998107a62e3563d5841aed Mon Sep 17 00:00:00 2001 From: yuanke <249218296@qq.com> Date: Tue, 13 Sep 2016 14:11:41 +0800 Subject: [PATCH 05/41] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E5=8A=A8=E6=80=81BUG?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/mobile/apis/activities.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/api/mobile/apis/activities.rb b/app/api/mobile/apis/activities.rb index 4d07c23f8..6ce01aac0 100644 --- a/app/api/mobile/apis/activities.rb +++ b/app/api/mobile/apis/activities.rb @@ -36,7 +36,7 @@ module Mobile principal_types = "JournalsForMessage" watched_user_ids = User.watched_by(user.id).count == 0 ? " " : ("," + User.watched_by(user.id).map{|u| u.id.to_s }.join(',')) user_ids = "(" + user.id.to_s + watched_user_ids + ")" - watched_user_blog_ids = Blog.select("id").where("author_id in #{user_ids}").count == 0 ? " " :Blog.select("id").where("author_id in #{user_ids}").map { |blog| blog.id}.join(",") + watched_user_blog_ids = Blog.select("id").where("author_id in #{user_ids}").count == 0 ? "-1" :Blog.select("id").where("author_id in #{user_ids}").map { |blog| blog.id}.join(",") blog_ids = "(" + watched_user_blog_ids + ")" if container_type == "Course" From 8626692367c000423796af63273e166fe2c6651d Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Tue, 13 Sep 2016 14:47:05 +0800 Subject: [PATCH 06/41] =?UTF-8?q?=E9=A1=B9=E7=9B=AEissue=EF=BC=9A=E7=BC=96?= =?UTF-8?q?=E8=BE=91issue=E5=90=8E=E7=82=B9=E5=87=BB=E7=A1=AE=E5=AE=9A?= =?UTF-8?q?=E6=8C=89=E9=92=AE=EF=BC=8C=E5=8D=B4=E8=BF=98=E6=98=AF=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E7=9A=84=E7=BC=96=E8=BE=91=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/issues/_edit.html.erb | 2 +- app/views/issues/_jounal_refresh.js.erb | 7 +++++++ app/views/issues/update.js.erb | 9 +++++++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/app/views/issues/_edit.html.erb b/app/views/issues/_edit.html.erb index ccd37dc91..ea15af42e 100644 --- a/app/views/issues/_edit.html.erb +++ b/app/views/issues/_edit.html.erb @@ -3,7 +3,7 @@ <%= import_ke(enable_at: true, prettify: false, init_activity: false) %> <% end %> -<%= labelled_form_for @issue, :html => {:id => 'issue-form', :multipart => true, :remote => true} do |f| %> +<%= labelled_form_for @issue, :html => {:id => 'issue-form', :multipart => true} do |f| %> <%= error_messages_for 'issue', 'time_entry' %> <%= render :partial => 'conflict' if @conflict %> diff --git a/app/views/issues/_jounal_refresh.js.erb b/app/views/issues/_jounal_refresh.js.erb index db5a068bf..5ccbf69d2 100644 --- a/app/views/issues/_jounal_refresh.js.erb +++ b/app/views/issues/_jounal_refresh.js.erb @@ -1,3 +1,8 @@ +/* $("#reply_div_<%#= @issue.id %>").html("<%#= escape_javascript(render :partial => 'issues/issue_replies', :locals => {:issue => @issue}) %>"); +$("#issue_detail_show").html('<%#= escape_javascript(render :partial => 'issues/detail') %>'); +$("#issue_edit_show").html('<%#= escape_javascript(render :partial => 'issues/edit') %>'); +$("#div_issue_attachment_<%#=@issue.id %>").html("<%#= escape_javascript(render :partial => 'issues/issue_attachments', :locals => {:issue => @issue}) %>"); +sd_create_editor_from_data(<%#= @issue.id %>, null, "100%", "<%#= @issue.class.name %>");*/ location.reload(); issue_desc_editor = KindEditor.create('#issue_description', @@ -14,3 +19,5 @@ issue_desc_editor = KindEditor.create('#issue_description', "uploadJson":"/kindeditor/upload", "fileManagerJson":"/kindeditor/filemanager"}); // $("#issue_test_<%#= @issue.id %>").html("<%#= escape_javascript(render :partial => 'issues/edit', :locals => {:issue => Issue.find( @issue_id)}) %>"); +// $(".homepagePostReplyBannerCount").html('<%#= escape_javascript(render :partial => 'issues/issue_reply_banner') %>'); +// sd_create_editor_from_data(<%#= @issue.id%>, null, "100%","<%#= @issue.class.name %>"); \ No newline at end of file diff --git a/app/views/issues/update.js.erb b/app/views/issues/update.js.erb index 733066d38..bcf4c3077 100644 --- a/app/views/issues/update.js.erb +++ b/app/views/issues/update.js.erb @@ -1,4 +1,13 @@ <% if @saved %> +/*$("#issue_detail").replaceWith('<%#= escape_javascript(render :partial => 'issues/detail') %>'); +$("#issue_edit").replaceWith('<%#= escape_javascript(render :partial => 'issues/edit') %>'); + +$("#issue_detail").show(); +$("#issue_edit").hide(); + +$("#reply_div_<%#= @issue.id %>").html("<%#= escape_javascript(render :partial => 'issues/issue_replies', :locals => {:issue => @issue,:replies_all_i=>0}) %>"); +sd_create_editor_from_data(<%#= @issue.id%>, null, "100%","<%#=@issue.class.name%>"); +$(".homepagePostReplyBannerCount").html('<%#= escape_javascript(render :partial => 'issues/issue_reply_banner') %>');*/ location.reload(); //edit里的编辑器貌似显示不出来,所以手动js生成。 issue_desc_editor = KindEditor.create('#issue_description', From 390f68aad6df5e3edce942f6119727dc635d25ca Mon Sep 17 00:00:00 2001 From: huang Date: Tue, 13 Sep 2016 14:57:45 +0800 Subject: [PATCH 07/41] =?UTF-8?q?=E4=BD=9C=E5=93=81=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E6=80=A7=E8=83=BD=E6=8F=90=E5=8D=87=EF=BC=88?= =?UTF-8?q?=E4=B8=BB=E8=A6=81=E6=98=AF=E6=95=B0=E6=8D=AE=E5=BA=93=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E5=87=8F=E5=B0=91=EF=BC=8C=E5=BB=BA=E7=AB=8B=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E7=B4=A2=E5=BC=95=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/student_work_controller.rb | 38 ++++--------------- .../student_work/_evaluation_title.html.erb | 2 +- .../_evaluation_un_title.html.erb | 2 +- ...63446_add_index_to_student_works_scores.rb | 6 +++ 4 files changed, 15 insertions(+), 33 deletions(-) create mode 100644 db/migrate/20160913063446_add_index_to_student_works_scores.rb diff --git a/app/controllers/student_work_controller.rb b/app/controllers/student_work_controller.rb index d1835408f..0dffd7b66 100644 --- a/app/controllers/student_work_controller.rb +++ b/app/controllers/student_work_controller.rb @@ -338,41 +338,17 @@ class StudentWorkController < ApplicationController end def index - # 作业消息状态更新 - @homework.course_messages.each do |homework_message| - if User.current.id == homework_message.user_id && homework_message.viewed == 0 - homework_message.update_attributes(:viewed => true) if homework_message.viewed == 0 - end - end - - #修改作品提示消息更新 - student_work_messages = CourseMessage.where("user_id =? and course_id =? and course_message_type =? and viewed =?", User.current.id, @homework.course, StudentWork.name, 0) - student_work_messages.each do |message| - message.update_attribute(:viewed, true) - end - + # 作业消息状态更新? + homeworkcommon_messages = CourseMessage.where(:user_id => User.current.id, :viewed => 0, :course_message_id => @homework.id, :course_message_type => "HomeWorkCommon") + homeworkcommon_messages.update_all(:viewed => true) + studentwork_messages = CourseMessage.where(:user_id => User.current.id, :viewed => 0, :course_id => @homework.course, :course_message_type => "StudentWork") + studentwork_messages.update_all(:viewed => true) # 作品打分消息状态更新 studentworks_scores = CourseMessage.where("user_id =? and course_id =? and course_message_type =? and viewed =?", User.current.id, @homework.course, "StudentWorksScore", 0) - studentworks_scores.each do |studentworks_score| - studentworks_score.update_attributes(:viewed => true) if studentworks_score.viewed == 0 - end + studentworks_scores.update_all(:viewed => true) # 作品评论消息状态更新 journals_for_teacher = CourseMessage.where("user_id =? and course_id =? and course_message_type =? and viewed =?", User.current.id, @homework.course, "JournalsForMessage", 0) - journals_for_teacher.each do |journal_for_teacher| - journal_for_teacher.update_attributes(:viewed => true) - end - #不能参与作业匿评消息状态更新 - no_evaluation = CourseMessage.where("user_id =? and course_id =? and course_message_type =? and viewed =? and status =?", User.current.id, @homework.course, "StudentWork", 0, 0) - no_evaluation.update_all(:viewed => true) - # 作品留言 - # 消息end - #设置作业对应的forge_messages表的viewed字段 - query_student_work = @homework.course_messages - query_student_work.each do |query| - if User.current.id == query.user_id - query.update_attributes(:viewed => true) - end - end + journals_for_teacher.update_all(:viewed => true) ################################################################################################################## @order,@b_sort,@name,@group = params[:order] || "score",params[:sort] || "desc",params[:name].to_s.strip || "",params[:group] @homework_commons = @course.homework_commons.where("publish_time <= ?",Time.now.strftime("%Y-%m-%d")).order("created_at desc") diff --git a/app/views/student_work/_evaluation_title.html.erb b/app/views/student_work/_evaluation_title.html.erb index 55e1b57c1..397e4ba46 100644 --- a/app/views/student_work/_evaluation_title.html.erb +++ b/app/views/student_work/_evaluation_title.html.erb @@ -29,7 +29,7 @@ 我的评分 - <% @stundet_works.each_with_index do |student_work, i|%> + <% @stundet_works.includes(:user => {:user_extensions => []}, :project => {}).each_with_index do |student_work, i|%> <%= render :partial => "evaluation_work", :locals => {:student_work => student_work, :index => i}%> diff --git a/app/views/student_work/_evaluation_un_title.html.erb b/app/views/student_work/_evaluation_un_title.html.erb index 4fdd6384f..4091911fe 100644 --- a/app/views/student_work/_evaluation_un_title.html.erb +++ b/app/views/student_work/_evaluation_un_title.html.erb @@ -74,7 +74,7 @@ <%# end %> - <% @stundet_works.each_with_index do |student_work, i| %> + <% @stundet_works.includes(:user => {:user_extensions => []}, :project => {}, :student_works_scores => {}).each_with_index do |student_work, i| %> <%= render :partial => "evaluation_un_work", :locals => {:student_work => student_work, :index => i} %> diff --git a/db/migrate/20160913063446_add_index_to_student_works_scores.rb b/db/migrate/20160913063446_add_index_to_student_works_scores.rb new file mode 100644 index 000000000..f21843289 --- /dev/null +++ b/db/migrate/20160913063446_add_index_to_student_works_scores.rb @@ -0,0 +1,6 @@ +class AddIndexToStudentWorksScores < ActiveRecord::Migration + def change + add_index :student_works_scores, :user_id, name: 'user_id' + add_index :student_works_scores, :student_work_id, name: 'student_work_id' + end +end From 235554a104a6f327fbfb84369bb849145b90ed0f Mon Sep 17 00:00:00 2001 From: huang Date: Tue, 13 Sep 2016 16:34:40 +0800 Subject: [PATCH 08/41] =?UTF-8?q?=E6=96=B0=E9=97=BB=E9=A6=96=E9=A1=B5?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/users/_course_newslist.html.erb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/views/users/_course_newslist.html.erb b/app/views/users/_course_newslist.html.erb index 87dbe6b95..961b2bfdf 100644 --- a/app/views/users/_course_newslist.html.erb +++ b/app/views/users/_course_newslist.html.erb @@ -23,7 +23,7 @@ <% if activity.sticky == 1 %> <% end%> - <% u = User.where("id=?",activity.author_id).first%> + <%# u = User.where("id=?",activity.author_id).first%>
@@ -31,9 +31,9 @@
- 发布者: <%=(u.try(:realname) != " " ? u.lastname + u.firstname : u.try(:login)) %> + 发布者: <%= activity.author.show_name %> - 更新:<%= format_time(CourseActivity.where("course_act_type='#{activity.class}' and course_act_id =#{activity.id}").first.updated_at) %> + 更新:<%= format_time(activity.course_acts.first.try(:updated_at)) %> <% count=0 %> <% count=activity.comments.count %>

<%= count>0 ? "#{count}" : "0" %>回复|<%= get_praise_num(activity) > 0 ? "#{get_praise_num(activity)}" : "0" %>

From f0d150ec47c3d059b7b3e01644df45dbdae5f54d Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Tue, 13 Sep 2016 17:05:42 +0800 Subject: [PATCH 09/41] =?UTF-8?q?=E7=82=B9=E5=87=BB=E9=A6=96=E9=A1=B5?= =?UTF-8?q?=E5=BA=95=E9=83=A8=E7=9A=84=E2=80=9C=E5=B8=AE=E5=8A=A9=E4=B8=AD?= =?UTF-8?q?=E5=BF=83=E2=80=9D=EF=BC=8C=E5=BC=B9=E6=97=A0=E6=95=88=E5=BC=B9?= =?UTF-8?q?=E6=A1=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/memos/show.html.erb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/views/memos/show.html.erb b/app/views/memos/show.html.erb index d684b4297..95059e21d 100644 --- a/app/views/memos/show.html.erb +++ b/app/views/memos/show.html.erb @@ -90,7 +90,7 @@
<%= reply.author.name%><%= format_date(reply.created_at) %>
-
<%= h reply.content.html_safe%>
+
<%= h reply.content.html_safe %>
diff --git a/public/javascripts/feedback.js b/public/javascripts/feedback.js index 97209131e..066b5b96d 100644 --- a/public/javascripts/feedback.js +++ b/public/javascripts/feedback.js @@ -1,148 +1,148 @@ -(function($){ - $.fn.fix = function(options){ - var u = navigator.userAgent; - if((u.indexOf('Android') > -1 || u.indexOf('Linux') > -1 ||u.indexOf('iPhone') > -1 || u.indexOf('Mac') > -1)){ - $("#scrollsidebar").css("display","none"); - return; - } - var defaults = { - float : 'right', - minStatue : true, - skin : 'blue', - durationTime : 1000 - }; - var options = $.extend(defaults, options); - - this.each(function(){ - //??????? - var thisBox = $(this), - closeBtn = thisBox.find('.close_btn' ), - show_btn = thisBox.find('.show_btn' ), - sideContent = thisBox.find('.side_content'); - var defaultTop = thisBox.offset().top; //????????top - thisBox.css(options.float, 0); - if(options.minStatue == "true"){ - show_btn.css("float", options.float); - sideContent.css('width', 0); - show_btn.css('width', 28); - } - //close - closeBtn.bind("click",function(){ - sideContent.animate({width: '0px'},"fast"); - show_btn.stop(true, true).delay(300).animate({ width: '28px'},"fast"); - cookiesave('minStatue','true','','',''); - }); - //show - show_btn.bind("click",function() { - $(this).animate({width: '0px'},"fast"); - sideContent.stop(true, true).delay(200).animate({ width: '154px'},"fast"); - cookiesave('minStatue','false','','',''); - }); - }); //end this.each - }; -})(jQuery); - -function f_submit() -{ - $("#new_memo").submit(); -} - -function cookiesave(n, v, mins, dn, path) -{ - if(n) - { - - if(!mins) mins = 365 * 24 * 60; - if(!path) path = "/"; - var date = new Date(); - date.setTime(date.getTime() + (mins * 60 * 1000)); - var expires = "; expires=" + date.toGMTString(); - if(dn) dn = "domain=" + dn + "; "; - document.cookie = n + "=" + v + expires + "; " + dn + "path=" + path; - - } -} -function cookieget(n) -{ - var name = n + "="; - var ca = document.cookie.split(';'); - for(var i=0;i -1 || u.indexOf('Linux') > -1 ||u.indexOf('iPhone') > -1 || u.indexOf('Mac') > -1)){ - $("#scrollsidebar").css("display","none"); - return; - } - $(".closeSidebar").click(function(){ - $(".show_btn").css("display","none"); - $("#scrollsidebar").css("display","none"); - return false; - }); - - $("#button1").click(function(){ - myTips("反馈成功","success"); - }); - - $("#scrollsidebar").fix({ - float: 'right', //default.left or right - minStatue: cookieget('minStatue'), - skin: 'green', //default.gray or blue - durationTime: 600 - }); - - $("#subject").keydown(function(){ - var curLength=$("#subject").val().length; - if(curLength>50){ - var num=$("#subject").val().substr(0,50); - $("#subject").val(num); - } - else{ - $("#textCount").text(50-$("#subject").val().length) - } - }).keyup(function(){ - var curLength=$("#subject").val().length; - if(curLength>50){ - var num=$("#subject").val().substr(0,50); - $("#subject").val(num); - } - else{ - $("#textCount").text(50-$("#subject").val().length) - } - }); -}); - -//var browser={ -// versions:function(){ -// var u = navigator.userAgent, app = navigator.appVersion; -// return {//移动终端浏览器版本信息 -// trident: u.indexOf('Trident') > -1, //IE内核 -// presto: u.indexOf('Presto') > -1, //opera内核 -// webKit: u.indexOf('AppleWebKit') > -1, //苹果、谷歌内核 -// gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1, //火狐内核 -// mobile: !!u.match(/AppleWebKit.*Mobile.*/)||!!u.match(/AppleWebKit/), //是否为移动终端 -// ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios终端 -// android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1, //android终端或者uc浏览器 -// iPhone: u.indexOf('iPhone') > -1 || u.indexOf('Mac') > -1, //是否为iPhone或者QQHD浏览器 -// iPad: u.indexOf('iPad') > -1, //是否iPad -// webApp: u.indexOf('Safari') == -1 //是否web应该程序,没有头部与底部 -// }; -// }(), -// language:(navigator.browserLanguage || navigator.language).toLowerCase() -//} -//document.writeln("语言版本: "+browser.language); -//document.writeln(" 是否为移动终端: "+browser.versions.mobile); -//document.writeln(" ios终端: "+browser.versions.ios); -//document.writeln(" android终端: "+browser.versions.android); -//document.writeln(" 是否为iPhone: "+browser.versions.iPhone); -//document.writeln(" 是否iPad: "+browser.versions.iPad); +(function($){ + $.fn.fix = function(options){ + var u = navigator.userAgent; + if((u.indexOf('Android') > -1 || u.indexOf('Linux') > -1 ||u.indexOf('iPhone') > -1 || u.indexOf('Mac') > -1)){ + $("#scrollsidebar").css("display","none"); + return; + } + var defaults = { + float : 'right', + minStatue : true, + skin : 'blue', + durationTime : 1000 + }; + var options = $.extend(defaults, options); + + this.each(function(){ + //??????? + var thisBox = $(this), + closeBtn = thisBox.find('.close_btn' ), + show_btn = thisBox.find('.show_btn' ), + sideContent = thisBox.find('.side_content'); + var defaultTop = thisBox.offset().top; //????????top + thisBox.css(options.float, 0); + if(options.minStatue == "true"){ + show_btn.css("float", options.float); + sideContent.css('width', 0); + show_btn.css('width', 28); + } + //close + closeBtn.bind("click",function(){ + sideContent.animate({width: '0px'},"fast"); + show_btn.stop(true, true).delay(300).animate({ width: '28px'},"fast"); + cookiesave('minStatue','true','','',''); + }); + //show + show_btn.bind("click",function() { + $(this).animate({width: '0px'},"fast"); + sideContent.stop(true, true).delay(200).animate({ width: '180px'},"fast"); + cookiesave('minStatue','false','','',''); + }); + }); //end this.each + }; +})(jQuery); + +function f_submit() +{ + $("#new_memo").submit(); +} + +function cookiesave(n, v, mins, dn, path) +{ + if(n) + { + + if(!mins) mins = 365 * 24 * 60; + if(!path) path = "/"; + var date = new Date(); + date.setTime(date.getTime() + (mins * 60 * 1000)); + var expires = "; expires=" + date.toGMTString(); + if(dn) dn = "domain=" + dn + "; "; + document.cookie = n + "=" + v + expires + "; " + dn + "path=" + path; + + } +} +function cookieget(n) +{ + var name = n + "="; + var ca = document.cookie.split(';'); + for(var i=0;i -1 || u.indexOf('Linux') > -1 ||u.indexOf('iPhone') > -1 || u.indexOf('Mac') > -1)){ + $("#scrollsidebar").css("display","none"); + return; + } + $(".closeSidebar, .hide-side-bar").click(function(){ + $(".show_btn").css("display","none"); + $("#scrollsidebar").css("display","none"); + return false; + }); + + $("#button1").click(function(){ + myTips("反馈成功","success"); + }); + + $("#scrollsidebar").fix({ + float: 'right', //default.left or right + minStatue: cookieget('minStatue'), + skin: 'green', //default.gray or blue + durationTime: 600 + }); + + $("#subject").keydown(function(){ + var curLength=$("#subject").val().length; + if(curLength>50){ + var num=$("#subject").val().substr(0,50); + $("#subject").val(num); + } + else{ + $("#textCount").text(50-$("#subject").val().length) + } + }).keyup(function(){ + var curLength=$("#subject").val().length; + if(curLength>50){ + var num=$("#subject").val().substr(0,50); + $("#subject").val(num); + } + else{ + $("#textCount").text(50-$("#subject").val().length) + } + }); +}); + +//var browser={ +// versions:function(){ +// var u = navigator.userAgent, app = navigator.appVersion; +// return {//移动终端浏览器版本信息 +// trident: u.indexOf('Trident') > -1, //IE内核 +// presto: u.indexOf('Presto') > -1, //opera内核 +// webKit: u.indexOf('AppleWebKit') > -1, //苹果、谷歌内核 +// gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1, //火狐内核 +// mobile: !!u.match(/AppleWebKit.*Mobile.*/)||!!u.match(/AppleWebKit/), //是否为移动终端 +// ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios终端 +// android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1, //android终端或者uc浏览器 +// iPhone: u.indexOf('iPhone') > -1 || u.indexOf('Mac') > -1, //是否为iPhone或者QQHD浏览器 +// iPad: u.indexOf('iPad') > -1, //是否iPad +// webApp: u.indexOf('Safari') == -1 //是否web应该程序,没有头部与底部 +// }; +// }(), +// language:(navigator.browserLanguage || navigator.language).toLowerCase() +//} +//document.writeln("语言版本: "+browser.language); +//document.writeln(" 是否为移动终端: "+browser.versions.mobile); +//document.writeln(" ios终端: "+browser.versions.ios); +//document.writeln(" android终端: "+browser.versions.android); +//document.writeln(" 是否为iPhone: "+browser.versions.iPhone); +//document.writeln(" 是否iPad: "+browser.versions.iPad); //document.writeln(navigator.userAgent); \ No newline at end of file diff --git a/public/stylesheets/css/public.css b/public/stylesheets/css/public.css index ea29327c4..923ec4dbb 100644 --- a/public/stylesheets/css/public.css +++ b/public/stylesheets/css/public.css @@ -118,33 +118,30 @@ a.resourcesTypeUser {background:url(../images/homepage_icon.png) -178px -453px n /*意见反馈*/ html{ overflow-x:hidden;} .scrollsidebar{ position: fixed; bottom:1px; right:1px; background:none; } -.side_content{width:152px; height:auto; overflow:hidden; float:left;} -.side_content .side_list {width:152px;overflow:hidden;} -.show_btn{ width:0; height:112px; overflow:hidden; float:left; margin-top:200px; cursor:pointer;} -.show_btn span { display:none;} -.close_btn{width:24px;height:24px;cursor:pointer;} -.side_title,.side_bottom,.close_btn,.show_btn {background:url(/images/sidebar_bg.png) no-repeat; } +.side_content{width:180px; height:auto; overflow:hidden; float:left;} +.side_content .side_list {width:180px;overflow:hidden;} +.show_btn{ width:0; height:100px; overflow:hidden; float:left; margin-top:200px; cursor:pointer; background-color:#fff;} +.close_btn{cursor:pointer;} +.side_title,.side_bottom {background:url(/images/sidebar_bg.png) no-repeat; } .side_title {height:35px;} .side_bottom { height:8px;} .side_center {font-family:Verdana, Geneva, sans-serif; padding:0px 12px; font-size:12px;} -.close_btn { float:right; display:block; width:21px; height:16px; margin:9px 10px 0 0; _margin:16px 5px 0 0;} -.close_btn span { display:none;} .side_center .custom_service p { text-align:center; padding:6px 0; margin:0; vertical-align:middle;} .msgserver { margin:10px 0 0px 5px;} .msgserver a { background:url(/images/sidebar_bg.png) no-repeat -119px -110px; padding-left:22px; display:block; height:24px; } -.opnionText{box-shadow:none; width:122px; height:180px; border-color: #DFDFDF; background:#fff; color:#999; padding:3px; font-size:12px;overflow:auto; background-attachment:fixed;border-style:solid;} +.opnionText{box-shadow:none; width:150px; height:180px; border-color: #DFDFDF; background:#fff; color:#999; padding:3px; font-size:12px;overflow:auto; background-attachment:fixed;border-style:solid;} a.opnionButton{ display:block; background:#269ac9; width:130px; height:26px; margin-top:5px; text-align:center; padding-top:0px; color:#fff;} a.opnionButton:hover{background: #297fb8; } /* blue skin as the default skin */ .side_title {background-position:-195px 0;} .side_center {background:url(/images/blue_line.png) repeat-y center; } .side_bottom {background-position:-195px -50px;} -.close_btn {background-position:-44px 0;} -.close_btn:hover {background-position:-66px 0;} -.show_btn {background-position:-119px 0;} .msgserver a {color:#269ac9; } .msgserver a:hover { text-decoration:underline; } -.closeSidebar {background:url(/images/sidebar_bg.png) 0px -112px no-repeat; width:28px; height:18px; margin-top:65px; position:absolute;} +.closeSidebar {width:26px; height:18px; line-height:18px; vertical-align:middle; border-top:1px solid #aaa; color:#aaa; display:block;} + +.side-bar-circle {width:13px; height:13px; font-size:14px; color:#aaa; border:1px solid #aaa; border-radius:50%; display:block; font-weight:bold; position:relative; cursor:pointer;} +.side-bar-content {position:absolute; top:-5px; left:1px;} .hiddent{ overflow:hidden; white-space: nowrap; text-overflow:ellipsis;} From 154b77a3a7a016588c9c06ea21334e7ce88858ae Mon Sep 17 00:00:00 2001 From: yuanke <249218296@qq.com> Date: Wed, 14 Sep 2016 15:10:24 +0800 Subject: [PATCH 18/41] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E7=8F=AD=E7=BA=A7?= =?UTF-8?q?=E5=90=8D=E6=94=B9=E4=B8=BA=E8=AF=BE=E7=A8=8B=E5=90=8D=E3=80=82?= =?UTF-8?q?=E7=8F=AD=E7=BA=A7=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/mobile/entities/activity.rb | 7 +++++++ app/api/mobile/entities/course.rb | 1 + app/controllers/news_controller.rb | 3 ++- app/models/homework_common.rb | 3 ++- app/services/courses_service.rb | 9 ++++++--- app/services/syllabuses_service.rb | 3 ++- 6 files changed, 20 insertions(+), 6 deletions(-) diff --git a/app/api/mobile/entities/activity.rb b/app/api/mobile/entities/activity.rb index 9deeec58e..b36b8039b 100644 --- a/app/api/mobile/entities/activity.rb +++ b/app/api/mobile/entities/activity.rb @@ -73,6 +73,12 @@ module Mobile elsif ac.container_type == "Blog" "发表博客" end + when :syllabus_title + if ac.container_type == "Course" + course = get_course(ac.container_id) + name = course.syllabus.nil? ? "":course.syllabus.title + name + end when :course_project_id if ac.container_type == "Course" ac.container_id @@ -145,6 +151,7 @@ module Mobile act_expose :latest_update #最新更新时间 act_expose :course_project_id #课程/项目ID act_expose :course_project_name #课程/项目名字 + act_expose :syllabus_title #课程名字 act_expose :activity_type_name #课程问答区/项目缺陷等 expose :has_praise , if: lambda { |instance, options| options[:user] } do |instance, options| if instance.act_type == "HomeworkCommon" || instance.act_type == "News" || instance.act_type == "Message" || instance.act_type == "BlogComment" || instance.act_type == "JournalsForMessage" || instance.act_type == "Issue" diff --git a/app/api/mobile/entities/course.rb b/app/api/mobile/entities/course.rb index fc78cc14e..30a5a6cc9 100644 --- a/app/api/mobile/entities/course.rb +++ b/app/api/mobile/entities/course.rb @@ -107,6 +107,7 @@ module Mobile course_expose :current_user_is_member course_expose :current_user_is_teacher course_expose :work_unit + course_expose :syllabus_title end end end diff --git a/app/controllers/news_controller.rb b/app/controllers/news_controller.rb index 33ff2a248..660e4d76c 100644 --- a/app/controllers/news_controller.rb +++ b/app/controllers/news_controller.rb @@ -220,7 +220,8 @@ class NewsController < ApplicationController if count == 0 ws = WechatService.new content = @news.title - ws.class_notice m.user_id, "course_notice", @news.id, "#{l(:label_new_notice_template)}", @news.course.name, @news.author.show_name, format_time(@news.created_on), content, "点击查看通知详情" + name = @news.course.syllabus.nil? ? @news.course.name : @news.course.syllabus.title+" • "+@news.course.name + ws.class_notice m.user_id, "course_notice", @news.id, "#{l(:label_new_notice_template)}", name, @news.author.show_name, format_time(@news.created_on), content, "点击查看通知详情" end end end diff --git a/app/models/homework_common.rb b/app/models/homework_common.rb index a901e6338..7a082cecf 100644 --- a/app/models/homework_common.rb +++ b/app/models/homework_common.rb @@ -77,7 +77,8 @@ class HomeworkCommon < ActiveRecord::Base 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 - ws.homework_message_notice(m.user_id, "homework", self.id, "#{m.user.show_name},#{l(:label_new_homework_template)}", self.course.name, "新作业:"+ self.name.html_safe, "作业内容请点击“详情”查看。") + 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 diff --git a/app/services/courses_service.rb b/app/services/courses_service.rb index 24e15f369..5add9979d 100644 --- a/app/services/courses_service.rb +++ b/app/services/courses_service.rb @@ -332,7 +332,7 @@ class CoursesService # unless (course.is_public == 1 || current_user.member_of_course?(course) || current_user.admin?) # raise '403' # end - {:course => course,:work_unit => work_unit, :img_url => url_to_avatar(course),:current_user_is_member => current_user.nil? ? false : current_user.member_of_course?(course),:current_user_is_teacher => current_user.nil? ? false : is_course_teacher(current_user,course),:course_student_num => course ? course.student.count.to_s : 0} + {:course => course,:syllabus_title => course.syllabus.nil? ? "":course.syllabus.title ,:work_unit => work_unit, :img_url => url_to_avatar(course),:current_user_is_member => current_user.nil? ? false : current_user.member_of_course?(course),:current_user_is_teacher => current_user.nil? ? false : is_course_teacher(current_user,course),:course_student_num => course ? course.student.count.to_s : 0} end #创建课程 @@ -554,8 +554,10 @@ class CoursesService uid = user.id type = "review_class_member" end + + name = course.syllabus.nil? ? course.name : course.syllabus.title+" • "+course.name ws = WechatService.new - ws.class_notice user.id, type, course.id, title, course.name, user.show_name, format_time(Time.now), content, remark,uid + ws.class_notice user.id, type, course.id, title,name, user.show_name, format_time(Time.now), content, remark,uid end end @@ -650,8 +652,9 @@ class CoursesService rolename = role_ids.include?("7") ? "助教" : "教师" content = current_user.show_name + "申请以"+rolename+"身份加入班级,等待您的审批。" + name = course.syllabus.nil? ? course.name : course.syllabus.title+" • "+course.name ws = WechatService.new - ws.class_notice tea_user.id, "review_class_member", course.id, "班级成员审批通知。", course.name, tea_user.show_name, format_time(Time.now), content, "点击查看申请详情。",current_user.id + ws.class_notice tea_user.id, "review_class_member", course.id, "班级成员审批通知。", name, tea_user.show_name, format_time(Time.now), content, "点击查看申请详情。",current_user.id end end #-------------------------------------------- diff --git a/app/services/syllabuses_service.rb b/app/services/syllabuses_service.rb index f12ae67cc..caf6e052e 100644 --- a/app/services/syllabuses_service.rb +++ b/app/services/syllabuses_service.rb @@ -69,7 +69,8 @@ class SyllabusesService if count == 0 ws = WechatService.new title = "恭喜您创建班级成功。" - ws.create_class_notice user.id, "create_course_notice", course.id,title, course.name, user.show_name, 1, "点击查看班级详情。" + name = course.syllabus.nil? ? course.name : course.syllabus.title+" • "+course.name + ws.create_class_notice user.id, "create_course_notice", course.id,title, name, user.show_name, 1, "点击查看班级详情。" end end From e508cba95186d16cd528834f0e65e2a0af1d4717 Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Wed, 14 Sep 2016 15:10:26 +0800 Subject: [PATCH 19/41] =?UTF-8?q?1.=E6=B8=B8=E5=AE=A2=E8=BF=9B=E5=85=A5?= =?UTF-8?q?=E7=8F=AD=E7=BA=A7=EF=BC=8C=E8=B5=84=E6=BA=90=E5=87=BA=E7=8E=B0?= =?UTF-8?q?=E4=BA=86=E4=B8=A4=E4=B8=AA=E5=85=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/courses_helper.rb | 4 +++- app/views/layouts/base_courses.html.erb | 5 +++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/app/helpers/courses_helper.rb b/app/helpers/courses_helper.rb index b3e946f95..8f0d10634 100644 --- a/app/helpers/courses_helper.rb +++ b/app/helpers/courses_helper.rb @@ -63,6 +63,7 @@ module CoursesHelper # searchTeacherAndAssistant(project).count end + # 统计数目 def show_nav?(count) count == 0 ? true : false end @@ -807,11 +808,12 @@ module CoursesHelper link.html_safe end + # 可以查看到资源库的资源 def visable_attachemnts_incourse course return[] unless course result = [] course.attachments.each do |attachment| - if (attachment.is_public? && attachment.is_publish == 1) ||User.current == attachment.author ||User.current.allowed_to?(:as_teacher,course)|| (User.current.member_of_course?(course) && attachment.is_publish == 1) || User.current.admin? + if attachment.is_public? && attachment.is_publish == 1 || User.current == attachment.author || User.current.allowed_to?(:as_teacher,course) || (User.current.member_of_course?(course) && attachment.is_publish == 1) || User.current.admin? result << attachment end end diff --git a/app/views/layouts/base_courses.html.erb b/app/views/layouts/base_courses.html.erb index 2c72e3e2e..84aa054e0 100644 --- a/app/views/layouts/base_courses.html.erb +++ b/app/views/layouts/base_courses.html.erb @@ -1,6 +1,7 @@ <%# course_model %> -<%# course_file_num = visable_attachemnts_incourse(@course).count%> -<% course_file_num = Attachment.where(:container_type => "Course", :container_id => @course.id).count %> +<%# course_file_num = Attachment.where(:container_type => "Course", :container_id => @course.id).count %> + +<% course_file_num = visable_attachemnts_incourse(@course).count%> <% is_teacher = User.current.logged? && (User.current.admin? || User.current.allowed_to?(:as_teacher,@course)) %> <% homework_num = visable_course_homework @course %> From 067426824b457192657993097d61d022baf16e70 Mon Sep 17 00:00:00 2001 From: huang Date: Wed, 14 Sep 2016 15:12:04 +0800 Subject: [PATCH 20/41] =?UTF-8?q?news.rb=E5=9B=9E=E8=B0=83=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/news.rb | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/app/models/news.rb b/app/models/news.rb index 0e83a39f8..58bbc40ac 100644 --- a/app/models/news.rb +++ b/app/models/news.rb @@ -62,7 +62,7 @@ class News < ActiveRecord::Base :author_key => :author_id acts_as_watchable - after_create :act_as_activity,:act_as_forge_activity, :act_as_course_activity, :add_author_as_watcher, :send_mail, :add_news_count, :act_as_student_score, :act_as_system_message, :delay_news_send + after_create :act_as_forge_activity, :act_as_course_activity, :add_author_as_watcher, :send_mail, :add_news_count, :act_as_student_score, :act_as_system_message, :delay_news_send after_update :update_activity after_destroy :delete_kindeditor_assets, :decrease_news_count, :delete_org_activities, :down_course_score @@ -140,19 +140,13 @@ class News < ActiveRecord::Base Watcher.create(:watchable => self, :user => author) end - ## fq - def act_as_activity - self.acts << Activity.new(:user_id => self.author_id) - end - # Time 2015-02-27 15:48:17 # Author lizanle # Description 公用表中也要记录 def act_as_forge_activity # 如果是project为空,那么是课程相关的,不需要保存 if self.project - self.forge_acts << ForgeActivity.new(:user_id => self.author_id, - :project_id => self.project.id) + self.forge_acts << ForgeActivity.new(:user_id => self.author_id, :project_id => self.project.id) end end @@ -198,7 +192,7 @@ class News < ActiveRecord::Base def contain_news_message self.course.members.each do |m| if m.user_id != self.author_id - self.course_messages << CourseMessage.new(:user_id => user_id, :course_id => container_id, :viewed => false) + self.course_messages << CourseMessage.new(:user_id => m.user_id, :course_id => self.course_id, :viewed => false) end end end From 5d8ed8c0548271afa4f3afdfd12d6dbe513c8907 Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Wed, 14 Sep 2016 16:07:43 +0800 Subject: [PATCH 21/41] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=8F=91=E9=80=81?= =?UTF-8?q?=E9=99=84=E4=BB=B6=E4=BA=BA=E5=90=8D=E6=A0=B7=E5=BC=8F=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/attachments/_activity_attach.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/attachments/_activity_attach.html.erb b/app/views/attachments/_activity_attach.html.erb index b4c45b44c..48c01468a 100644 --- a/app/views/attachments/_activity_attach.html.erb +++ b/app/views/attachments/_activity_attach.html.erb @@ -11,7 +11,7 @@ <% user_name = attachment.author.show_name.empty? ? attachment.author : attachment.author.show_name %> - <%= link_to h(truncate(user_name, length: 15, omission: '...')),user_path(attachment.author),:class => "c_orange" %>, + <%= link_to h(truncate(user_name, length: 15, omission: '...')),user_path(attachment.author),:class => "linkBlue2" %>, <%= format_time(attachment.created_on) %> From de3fc8aa9ff219bf78b48cfb61665591097f04a4 Mon Sep 17 00:00:00 2001 From: huang Date: Wed, 14 Sep 2016 16:26:37 +0800 Subject: [PATCH 22/41] =?UTF-8?q?school=E4=B8=BA0=E7=9A=84=E6=83=85?= =?UTF-8?q?=E5=86=B5=E6=95=B0=E6=8D=AE=E8=BF=81=E7=A7=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/migrate/20160914073340_update_user_extensions.rb | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 db/migrate/20160914073340_update_user_extensions.rb diff --git a/db/migrate/20160914073340_update_user_extensions.rb b/db/migrate/20160914073340_update_user_extensions.rb new file mode 100644 index 000000000..63d15437b --- /dev/null +++ b/db/migrate/20160914073340_update_user_extensions.rb @@ -0,0 +1,9 @@ +class UpdateUserExtensions < ActiveRecord::Migration + def up + ues = UserExtensions.where(:school_id => 0) + ues.update_all(:school_id => nil) + end + + def down + end +end From 7cd2a98f11f3cd0170e1f8036d9e3d4067edab6d Mon Sep 17 00:00:00 2001 From: Tim Date: Wed, 14 Sep 2016 16:50:46 +0800 Subject: [PATCH 23/41] =?UTF-8?q?=E4=BE=A7=E5=AF=BC=E8=88=AA=E8=AF=BE?= =?UTF-8?q?=E7=A8=8B=E3=80=81=E7=8F=AD=E7=BA=A7=E5=90=8D=E7=A7=B0=E9=95=BF?= =?UTF-8?q?=E5=BA=A6=E6=8E=A7=E5=88=B6=EF=BC=9B=E7=AE=AD=E5=A4=B4=E6=9B=BF?= =?UTF-8?q?=E6=8D=A2=EF=BC=9Btip=E6=98=BE=E7=A4=BA=E6=9B=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/layouts/_user_courses.html.erb | 34 +++++++++++++----- public/images/user/icons_user_leftnav.png | Bin 25966 -> 3456 bytes .../user/icons_user_leftnav_archive.png | Bin 0 -> 25966 bytes public/images/user/user_navmore_icons.png | Bin 19619 -> 1072 bytes .../user/user_navmore_icons_archive.png | Bin 0 -> 19619 bytes public/stylesheets/css/structure.css | 4 ++- 6 files changed, 28 insertions(+), 10 deletions(-) create mode 100644 public/images/user/icons_user_leftnav_archive.png create mode 100644 public/images/user/user_navmore_icons_archive.png diff --git a/app/views/layouts/_user_courses.html.erb b/app/views/layouts/_user_courses.html.erb index 8d09ecb52..60db07db0 100644 --- a/app/views/layouts/_user_courses.html.erb +++ b/app/views/layouts/_user_courses.html.erb @@ -2,10 +2,17 @@
  • <% is_teacher = User.current.logged? && (User.current.admin? || User.current.allowed_to?(:as_teacher,course)) %> -

    - <%= link_to course.syllabus.title, syllabus_path(course.syllabus_id), :target => '_blank', :class => 'hidden', :style => "max-width:85px; display:inline-block;"%> +

    + <% title = "#{course.syllabus.title}".html_safe %> + <%= link_to title, syllabus_path(course.syllabus_id), :target => '_blank', :class => 'hidden', :style => "max-width:91px; display:inline-block;"%> · - <%= link_to course.name, course_path(course.id,:host=>Setting.host_course), :target => '_blank', :class => 'hidden', :style => "max-width:85px; display:inline-block;"%> + <% classes = "#{course.name}".html_safe %> + <%= link_to classes, course_path(course.id,:host=>Setting.host_course), :target => '_blank', :class => 'hidden', :style => "max-width:91px; display:inline-block;"%> + + 课程名称:<%= course.syllabus.title %>
    + 班级名称:<%= course.name+'('+current_time_and_term(course)+')' %>
    + 班级属性:<%= course.is_public? ? '公开' : '私有' %> +

    <%#= link_to course.name+"("+current_time_and_term_short(course)+")", course_path(course.id,:host=>Setting.host_course), :id => "show_course_#{course.id}", :class => 'course_list_menu hidden', :target => '_blank', :title => (course.is_public? ? "公开班级:":"私有班级:")+course.name+"("+current_time_and_term(course)+")"%> @@ -106,16 +113,25 @@ } $(".course_list_menu").each(function(){ - var courseWidth = $(this).children().eq(0).width(); - var classWidth = $(this).children().eq(2).width(); - var newClassWidth = 170 - courseWidth; - var newCourseWidth = 170 - classWidth; + var courseWidth = $(this).children().eq(0).children().width(); + var classWidth = $(this).children().eq(2).children().width(); + var newClassWidth = 182 - courseWidth; + var newCourseWidth = 182 - classWidth; console.log(courseWidth, classWidth); - if(courseWidth < 80 && classWidth > 80){ + if(courseWidth < 91 && classWidth > 91){ $(this).children().eq(2).css("max-width",newClassWidth + "px"); } - if(classWidth < 80 && courseWidth > 80){ + if(classWidth < 91 && courseWidth > 91){ $(this).children().eq(0).css("max-width",newCourseWidth + "px"); } }) + + $(".course-name").each(function(){ + $(this).mouseenter(function(){ + $(this).parent().parent().children().eq(3).show(); + }); + $(this).mouseleave(function(){ + $(this).parent().parent().children().eq(3).hide(); + }); + }) diff --git a/public/images/user/icons_user_leftnav.png b/public/images/user/icons_user_leftnav.png index 77900e9cf726f6e7d9e2d1bb6a103ffa9fc40e6b..7983c4dc6e57599455234427fc42d295e7c39e89 100644 GIT binary patch literal 3456 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 diff --git a/public/images/user/icons_user_leftnav_archive.png b/public/images/user/icons_user_leftnav_archive.png new file mode 100644 index 0000000000000000000000000000000000000000..77900e9cf726f6e7d9e2d1bb6a103ffa9fc40e6b GIT binary patch literal 25966 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 literal 0 HcmV?d00001 diff --git a/public/images/user/user_navmore_icons.png b/public/images/user/user_navmore_icons.png index 5dcd2608ba58ac4497e6ecd49a42804409003fd5..e4fb91b541329d50720c2d106570ec0e59044479 100644 GIT binary patch literal 1072 zcmaJ=PiWIn7!MsfnHCZBpm+$`!3}KwbZuth;%J-9RhCk^!U}>eP2Se9B`+p#Hk*fu z2gf{%Fz~2|9)x-IFvWv-^WfavVTgx0rc#~YK+yTpwcP~kN0RsN_xpX{`@S!;+06NH z+le-UAj0W>Ifuuu`0Y5*g1=j9GavA994Q4f2uDy^a{-YsU=fgMOB)3_pc#`_UV$Eh zXrat}0Tt8%QHK_-1sK}59Ly$&o?hS4^f7?QA{aGoiK;wZph(k@sG+#Zs!j@&%>F4C z3{GY8`qY>%7*y{$vd0&(fCZ37`qsGZiM~WtbwxZ6wi$}7LeQ8*?F3a&vt$aofQ-{! z5uN2YlILkI7Uy~HG#O>ND8u51k8m+D&Wq7*vSt+a<{BenPVTGu!Yhd?A>@b*Q!bb3 zau*HVQHB!)A<&3MBN!3!CT*no5!-98E6BjpUDH7(w8=nGE5ZpRQ8?0_D_BlL*7j;? z!U(pL76|10I}kbzHcS_P~`Rrd*&Q=;k3D zuV*n^f(Uvg=#Z&Fp6nPhZ3C9Q&MID2#kB1q&DKF$mME-1o2DTqQ?b675KVR`;xUd> z_+(sRg`_Mf?3q-8O(=D)4D|^M*r?7mcDbph+@KXK2YZ%*YhDFLp9?LrdS%gU9*fXa zuf{c+$C7BuWpFS|P}n_%u5aP)38sy<#fwJc0~>d{i`)9;(djPyOPtCM)poI^2XM!g^$IDtMhLv%G|R4XmxgBZGN#L&n<6nZy%P!6-)`ETxJk28%9X$)J=R) zNXv=5zw&u;Hhi5WTIOGGzWDw9N$WRjxHGqT=h*OH_Wp8w<(W{qfAH?fPwS!HrSTBF lwsh~o#nAq}M(>*r9U{IQd7iy+X{HtXAks=kew-Y>@ds0XXd3_k literal 19619 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 Be>eaD diff --git a/public/images/user/user_navmore_icons_archive.png b/public/images/user/user_navmore_icons_archive.png new file mode 100644 index 0000000000000000000000000000000000000000..5dcd2608ba58ac4497e6ecd49a42804409003fd5 GIT binary patch literal 19619 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 Be>eaD literal 0 HcmV?d00001 diff --git a/public/stylesheets/css/structure.css b/public/stylesheets/css/structure.css index 0675f51e4..5fc47ad81 100644 --- a/public/stylesheets/css/structure.css +++ b/public/stylesheets/css/structure.css @@ -596,7 +596,7 @@ a.user_leftinfo_img { display:block; width:80px; height:80px; margin:15px auto;} .user_sub_menu li a:hover,.user_sub_menu li a:target { color:#3b94d6; background:#fff url(/images/user/user_navmore_icons.png) 0px 0px no-repeat;} .user_sub_menu li a:hover,.user_sub_menu li a:target{} .user_sub_menu li:last-child a { } -.user_sub_menu li p {padding:0 25px; border:1px solid #e5e5e5; border-bottom:none; background:#f8f8f8;} +.user_sub_menu li p {padding:0 15px 0 25px; border:1px solid #e5e5e5; border-bottom:none; background:#f8f8f8;} .user_sub_menu li p:hover {background:#fff;} .user_sub_menu li p:hover a {background:#fff;} .user_sub_menu li p:hover,.user_sub_menu li p:target {color:#3b94d6; background:#fff url(/images/user/user_navmore_icons.png) 0px 0px no-repeat;} @@ -617,6 +617,7 @@ a.user_leftinfo_img { display:block; width:80px; height:80px; margin:15px auto;} width:20px; height:20px; background:url(/images/user/icons_user_leftnav.png) 0px -34px no-repeat; + z-index:99; } a.user_navmorebox{ display:block; width:238px; height:20px; position:relative; background:#f8f8f8;border:1px solid #e5e5e5; border-bottom:none;} a:hover.user_navmorebox{ background:#fff;} @@ -639,6 +640,7 @@ a.user_navmorebox .user_icons_closeclass{ background:url(/images/user/icons_user_leftnav.png) -25px -347px no-repeat; } .show-all-sub {position:absolute; top:18px; right:15px;} +.sub-menu-title {position:absolute; border:1px solid #ddd; background-color:#fff; padding:2px 5px; z-index:99; white-space:nowrap; left:25px; top:35px; display:none;} /* 个人主页左侧导航更多功能 */ .user_navmore_box {position:absolute; width:15px; height:15px; right:13px; top:17px; cursor:pointer;} .user_navmore_box ul li:hover ul {display:block; } From 431f5ae49218b46490fc99e2f6787d9ec510b15a Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Wed, 14 Sep 2016 17:09:26 +0800 Subject: [PATCH 24/41] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=B8=AE=E5=8A=A9?= =?UTF-8?q?=E4=B8=AD=E5=BF=83=E5=BC=B9=E6=97=A0=E6=95=88=E5=BC=B9=E6=A1=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/memos/show.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/memos/show.html.erb b/app/views/memos/show.html.erb index 7015d17e5..4145ee25f 100644 --- a/app/views/memos/show.html.erb +++ b/app/views/memos/show.html.erb @@ -90,7 +90,7 @@
    <%= reply.author.name%><%= format_date(reply.created_at) %>
    -
    <%= h reply.content.html_safe %>
    +
    <%= h reply.content.html_safe.gsub(/\/, " +<% end %> \ No newline at end of file From 7b9ba6a1f7f6da26329cdf5932233df23c8486bf Mon Sep 17 00:00:00 2001 From: Tim Date: Wed, 14 Sep 2016 20:46:23 +0800 Subject: [PATCH 31/41] =?UTF-8?q?=E9=97=AE=E9=A2=98=E5=8F=8D=E9=A6=88?= =?UTF-8?q?=E6=A0=B7=E5=BC=8F=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/layouts/_new_feedback.html.erb | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/app/views/layouts/_new_feedback.html.erb b/app/views/layouts/_new_feedback.html.erb index 2bdb554ce..db90c47c4 100644 --- a/app/views/layouts/_new_feedback.html.erb +++ b/app/views/layouts/_new_feedback.html.erb @@ -41,9 +41,11 @@
    - -
    - × +
    + +
    +
    + ×
    From cfc5a2457c1895d232c699591ef5c97695a141c1 Mon Sep 17 00:00:00 2001 From: huang Date: Sat, 17 Sep 2016 11:26:29 +0800 Subject: [PATCH 32/41] =?UTF-8?q?=E8=AF=BE=E7=A8=8B500=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/courses_helper.rb | 37 ++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/app/helpers/courses_helper.rb b/app/helpers/courses_helper.rb index 39c61a318..f119e0e69 100644 --- a/app/helpers/courses_helper.rb +++ b/app/helpers/courses_helper.rb @@ -14,21 +14,30 @@ module CoursesHelper # 推荐的精品课程 - def excellent_course_recommend current_course - q = "%#{current_course.name.strip}%" - recomment_courses = [] - # 推荐过程过滤掉自身 - sql = "SELECT distinct c.* FROM course_activities cs, courses c where cs.course_id = c.id - and (c.is_excellent =1 or c.excellent_option =1) and c.is_public = 1 and c.id != #{current_course.id} order by cs.updated_at desc;" - ex_courses = Course.find_by_sql(sql) - # 使用课程的tag去和课程名称进行匹配 - c_courses = ex_courses.select{|ex_course| ex_course.tags.any?{|tag| q.include?(tag.to_s)}} - if c_courses.count < 3 - results = c_courses.length == 0 ? ex_courses.first(3) : (c_courses + ex_courses.first(3 - ex_courses.count)) - else - results = c_courses.first(3) + def excellent_course_recommend new_course + q = "%#{new_course.name.strip}%" + result = find_excelletn_course(q, new_course) + end + + # 查询符合条件的精品课程 + # 用新课程名去匹配精品课程中按课程名和Tag名 + def find_excelletn_course keywords, current_course + # 获取tag匹配结果ID + a_tags = [] + Course.where("is_excellent =? and is_public =?", 1, 1).each do |ec| + if ec.tags.any?{|value| current_course.name.include?(value.to_s)} + a_tags << ec.id + end end - results + # 课程本身不能搜索显示自己 + excellent_ids = a_tags.uniq.delete_if{|i| i == current_course.id} + sql = "SELECT distinct c.id FROM course_activities cs, courses c where cs.course_id = c.id + and (c.is_excellent =1 or c.excellent_option =1) and c.is_public = 1 and c.id != #{current_course.id} order by cs.updated_at desc;" + default_ids = Course.find_by_sql(sql).flatten.map { |c| c.id } + excellent_ids << default_ids.flatten + arr_result = excellent_ids.flatten.uniq.first(3) + excellent_courses = Course.find(arr_result) + return excellent_courses end # 判断精品课程是否可见,非课程成员无法查看私有课程 From 53bdeed1e4b0cb2fad9e3847fb93b1b38c413e82 Mon Sep 17 00:00:00 2001 From: liguangye Date: Sun, 18 Sep 2016 14:20:08 +0800 Subject: [PATCH 33/41] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E9=93=83=E9=93=9B404?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/users/_project_issue.html.erb | 2 -- db/migrate/20160918033136_update_issue_author.rb | 13 +++++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 db/migrate/20160918033136_update_issue_author.rb diff --git a/app/views/users/_project_issue.html.erb b/app/views/users/_project_issue.html.erb index 0ca706b68..e1c9038d5 100644 --- a/app/views/users/_project_issue.html.erb +++ b/app/views/users/_project_issue.html.erb @@ -1,4 +1,3 @@ -<% unless activity.author.nil? %>
    @@ -104,4 +103,3 @@ user_card_show_hide(); }); -<% end %> \ No newline at end of file diff --git a/db/migrate/20160918033136_update_issue_author.rb b/db/migrate/20160918033136_update_issue_author.rb new file mode 100644 index 000000000..8cbc99d6d --- /dev/null +++ b/db/migrate/20160918033136_update_issue_author.rb @@ -0,0 +1,13 @@ +class UpdateIssueAuthor < ActiveRecord::Migration + def up + begin + issue = Issue.find(9377) + issue.update_column(:author_id, 15341) + rescue Exception => e + puts e + end + end + + def down + end +end From 5b938aa11bf95f826be923d6ceb1006aa2d27a2c Mon Sep 17 00:00:00 2001 From: huang Date: Sun, 18 Sep 2016 15:44:27 +0800 Subject: [PATCH 34/41] =?UTF-8?q?=E8=AF=BE=E7=A8=8B=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E8=AE=A8=E8=AE=BA=E5=8C=BA=E9=9D=9E=E6=88=90=E5=91=98=E7=8E=B0?= =?UTF-8?q?=E5=9C=A8=E8=B5=84=E6=BA=90=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/messages_controller.rb | 8 ++- .../lib/acts_as_attachable.rb | 70 +++++++++++++++++++ 2 files changed, 77 insertions(+), 1 deletion(-) diff --git a/app/controllers/messages_controller.rb b/app/controllers/messages_controller.rb index 3e41e2c91..37383712f 100644 --- a/app/controllers/messages_controller.rb +++ b/app/controllers/messages_controller.rb @@ -92,7 +92,13 @@ class MessagesController < ApplicationController @message.board = @board @message.safe_attributes = params[:message] if request.post? - @message.save_attachments(params[:attachments]) + if @project + is_public = @project.is_public + elsif @course + is_public = @course.is_public + end + # 公开项目/课程上传的资源是公开的,私有项目上传的是私有的 + @message.save_attachments_containers(params[:attachments], User.current, is_public) if @message.save # 更新kindeditor上传的图片资源所有者 if params[:asset_id] diff --git a/lib/plugins/acts_as_attachable/lib/acts_as_attachable.rb b/lib/plugins/acts_as_attachable/lib/acts_as_attachable.rb index f5b48544d..20bc0a7ad 100644 --- a/lib/plugins/acts_as_attachable/lib/acts_as_attachable.rb +++ b/lib/plugins/acts_as_attachable/lib/acts_as_attachable.rb @@ -172,6 +172,76 @@ module Redmine {:files => saved_attachments, :unsaved => unsaved_attachments} end + # 扩展方法,因为类型太多,为了不影响其它的 + # 最终需要形成一个方法 + def save_attachments_containers(attachments, author, is_public) + # 清除临时文件 + if attachments + tempAttach = attachments[:dummy] + if tempAttach && tempAttach[:file] + attachments.delete(:dummy) + end + end + + if attachments.is_a?(Hash) + attachments = attachments.stringify_keys + attachments = attachments.to_a.sort {|a, b| + if a.first.to_i > 0 && b.first.to_i > 0 + a.first.to_i <=> b.first.to_i + elsif a.first.to_i > 0 + 1 + elsif b.first.to_i > 0 + -1 + else + a.first <=> b.first + end + } + attachments = attachments.map(&:last) + end + if attachments.is_a?(Array) + attachments.each do |attachment| + if attachment.is_a?(Hash) + a = nil + file = attachment['file'] + token = attachment['token'] + t = file && file.size > 0 + if file && file.size > 0 + a = Attachment.create(:file => file, :author => author) + elsif token + # 通过token值找到对应的attachment + a = Attachment.find_by_token_only(token) + if a + a.filename = attachment['filename'] unless attachment['filename'].blank? + a.content_type = attachment['content_type'] + end + end + end + + if a && !attachment['is_public_checkbox'] + # 考虑到更新操作,所以全部设置为公开,私有项目、课程是不能访问的 + if is_public + a.is_public = true + else + a.is_public = false + end + elsif a && attachment['is_public_checkbox'] + a.is_public = true + end + set_attachment_public(a) if a + next unless a + a.description = attachment['description'].to_s.strip + a.attachtype = @curattachment_type + if a.new_record? + unsaved_attachments << a + else + saved_attachments << a + end + end + end + {:files => saved_attachments, :unsaved => unsaved_attachments} + end + + def attach_saved_attachments saved_attachments.each do |attachment| self.attachments << attachment From a3467a569796d15b433c77fc034ea86418011cbe Mon Sep 17 00:00:00 2001 From: huang Date: Sun, 18 Sep 2016 15:53:32 +0800 Subject: [PATCH 35/41] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E8=AF=BE=E7=A8=8B?= =?UTF-8?q?=E8=AE=A8=E8=AE=BA=E5=8C=BA=E8=B5=84=E6=BA=90=E5=85=AC=E5=BC=80?= =?UTF-8?q?=E8=BF=81=E7=A7=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...160918074635_update_attach_public_for_message.rb | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 db/migrate/20160918074635_update_attach_public_for_message.rb diff --git a/db/migrate/20160918074635_update_attach_public_for_message.rb b/db/migrate/20160918074635_update_attach_public_for_message.rb new file mode 100644 index 000000000..5f9b51c5a --- /dev/null +++ b/db/migrate/20160918074635_update_attach_public_for_message.rb @@ -0,0 +1,13 @@ +class UpdateAttachPublicForMessage < ActiveRecord::Migration + def up + begin + attachments = Attachment.where(:container_type => "Message", :is_public => 0) + attachments.update_all(:is_public => 1) + rescue Exception => e + puts e + end + end + + def down + end +end From 924db06cbf73066b5a21d47d7bc8f3e88afd3d16 Mon Sep 17 00:00:00 2001 From: huang Date: Sun, 18 Sep 2016 15:55:22 +0800 Subject: [PATCH 36/41] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E5=BA=93=E9=9A=90=E8=97=8F=E4=BB=A3=E7=A0=81=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/projects_controller.rb | 42 +++++++++++++------------- app/views/projects/show.html.erb | 11 ------- 2 files changed, 21 insertions(+), 32 deletions(-) diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 8d4c09ded..df40eb378 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -325,27 +325,27 @@ class ProjectsController < ApplicationController end # 版本库统计图 - unless @project.gpid.nil? || @project.project_score.changeset_num == 0 - # rep_statics_commit = @project.rep_statics.order("commits_num desc") - rep_statics_commit = RepStatics.find_by_sql("SELECT * FROM `rep_statics` where project_id = #{@project.id} order by commits_num desc limit 10") - rep_statics_code = RepStatics.find_by_sql("SELECT * FROM `rep_statics` where project_id = #{@project.id} order by changeset desc limit 10") - # rep_statics_code = @project.rep_statics.sort_by {|u| u.changeset}.reverse - @a_uname = rep_statics_commit.map {|s| s.uname } - @a_uname_code = rep_statics_code.map {|s| s.uname } - @a_commits_num = rep_statics_commit.map {|s| s.commits_num.to_i } - @a_commits_add = rep_statics_code.map {|s| s.add.to_i } - @a_commits_del = rep_statics_code.map {|s| s.del.to_i } - @a_commits_changeset = rep_statics_code.map {|s| s.changeset.to_i } - g = Gitlab.client - begin - gid = @project.gpid - g_project = g.project(gid) - g_branch = g_project.default_branch.to_s - rescue =>e - logger.error("get default branch failed: " + e) - end - @rev = g_branch.nil? ? "master" : g_branch - end + # unless @project.gpid.nil? || @project.project_score.changeset_num == 0 + # # rep_statics_commit = @project.rep_statics.order("commits_num desc") + # rep_statics_commit = RepStatics.find_by_sql("SELECT * FROM `rep_statics` where project_id = #{@project.id} order by commits_num desc limit 10") + # rep_statics_code = RepStatics.find_by_sql("SELECT * FROM `rep_statics` where project_id = #{@project.id} order by changeset desc limit 10") + # # rep_statics_code = @project.rep_statics.sort_by {|u| u.changeset}.reverse + # @a_uname = rep_statics_commit.map {|s| s.uname } + # @a_uname_code = rep_statics_code.map {|s| s.uname } + # @a_commits_num = rep_statics_commit.map {|s| s.commits_num.to_i } + # @a_commits_add = rep_statics_code.map {|s| s.add.to_i } + # @a_commits_del = rep_statics_code.map {|s| s.del.to_i } + # @a_commits_changeset = rep_statics_code.map {|s| s.changeset.to_i } + # g = Gitlab.client + # begin + # gid = @project.gpid + # g_project = g.project(gid) + # g_branch = g_project.default_branch.to_s + # rescue =>e + # logger.error("get default branch failed: " + e) + # end + # @rev = g_branch.nil? ? "master" : g_branch + # end # 根据对应的请求,返回对应的数据 respond_to do |format| format.html diff --git a/app/views/projects/show.html.erb b/app/views/projects/show.html.erb index 39d8a9847..6c4e2b802 100644 --- a/app/views/projects/show.html.erb +++ b/app/views/projects/show.html.erb @@ -29,17 +29,6 @@
    - <%# 时间紧,权限待优化 %> - <% unless @project.hidden_repo && !User.current.member_of?(@project) && !User.current.admin? %> - <% unless @project.gpid.nil? || @project.project_score.changeset_num == 0 || @project.rep_statics.blank? %> -
    -
    - <%= render :partial => "rep_static" %> -
    -
    -
    - <% end %> - <% end %> <%= render :partial => "project_activities", :locals => {:forge_acts => @events_pages, :page => 0, :type => @type} %>
    \ No newline at end of file From 728e1333fc988fec0311bdb3fbccc60a961f513f Mon Sep 17 00:00:00 2001 From: huang Date: Sun, 18 Sep 2016 15:58:55 +0800 Subject: [PATCH 37/41] =?UTF-8?q?issue=20author=E4=B8=BA=E7=A9=BA=E5=A4=84?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/users/_project_issue.html.erb | 191 ++++++++++++------------ 1 file changed, 97 insertions(+), 94 deletions(-) diff --git a/app/views/users/_project_issue.html.erb b/app/views/users/_project_issue.html.erb index e1c9038d5..5a0065f86 100644 --- a/app/views/users/_project_issue.html.erb +++ b/app/views/users/_project_issue.html.erb @@ -1,105 +1,108 @@ -
    -
    -
    - <%= link_to image_tag(url_to_avatar(activity.author), :width => "50", :height => "50"), user_path(activity.author_id), :alt => "用户头像" %> - <%= render :partial => 'users/show_detail_info', :locals => {:user => activity.author} %> -
    -
    -
    - <% if activity.try(:author).try(:realname) == ' ' %> - <%= link_to activity.try(:author), user_path(activity.author_id), :class => "newsBlue mr15" %> - <% else %> - <%= link_to activity.try(:author).try(:realname), user_path(activity.author_id), :class => "newsBlue mr15" %> - <% end %> TO - <%= link_to activity.project.name.to_s+" | 项目问题", project_issues_path(activity.project), :class => "newsBlue ml15"%> -
    - <% if User.current.logged? %> -
    -
      -
    • -
        -
      • - <%= link_to l(:button_edit), issue_path(activity.id, :edit => 'true'), :class => 'postOptionLink', :accesskey => accesskey(:edit) if activity.editable? && User.current.allowed_to?(:edit_issues, activity.project) %> -
      • -
      • - <% if !defined?(project_id) && !defined?(user_id) %> - <%= link_to l(:button_delete), issue_path(activity.id), :data => {:confirm => issues_destroy_confirmation_message(activity)}, :method => :delete, :class => 'postOptionLink' if User.current.allowed_to?(:delete_issues, activity.project) %> - <% elsif defined?(project_id) %> - <%= link_to l(:button_delete), issue_path(activity.id, :page_classify => "project_page", :page_id => project_id), :data => {:confirm => issues_destroy_confirmation_message(activity)}, :method => :delete, :class => 'postOptionLink' if User.current.allowed_to?(:delete_issues, activity.project) %> - <% elsif defined?(user_id) %> - <%= link_to l(:button_delete), issue_path(activity.id, :page_classify => "user_page", :page_id => user_id), :data => {:confirm => issues_destroy_confirmation_message(activity)}, :method => :delete, :class => 'postOptionLink' if User.current.allowed_to?(:delete_issues, activity.project) %> - <% end %> -
      • -
      • - <%= link_to l(:button_copy), project_copy_issue_path(activity.project, activity), :class => 'postOptionLink' if User.current.allowed_to?(:add_issues, activity.project) %> +<% unless activity.author.nil? %> +
        +
        +
        + <%= link_to image_tag(url_to_avatar(activity.author), :width => "50", :height => "50"), user_path(activity.author_id), :alt => "用户头像" %> + <%= render :partial => 'users/show_detail_info', :locals => {:user => activity.author} %> +
        +
        +
        + <% if activity.try(:author).try(:realname) == ' ' %> + <%= link_to activity.try(:author), user_path(activity.author_id), :class => "newsBlue mr15" %> + <% else %> + <%= link_to activity.try(:author).try(:realname), user_path(activity.author_id), :class => "newsBlue mr15" %> + <% end %> TO + <%= link_to activity.project.name.to_s+" | 项目问题", project_issues_path(activity.project), :class => "newsBlue ml15"%> +
        + <% if User.current.logged? %> +
        +
          +
        • +
            +
          • + <%= link_to l(:button_edit), issue_path(activity.id, :edit => 'true'), :class => 'postOptionLink', :accesskey => accesskey(:edit) if activity.editable? && User.current.allowed_to?(:edit_issues, activity.project) %> +
          • +
          • + <% if !defined?(project_id) && !defined?(user_id) %> + <%= link_to l(:button_delete), issue_path(activity.id), :data => {:confirm => issues_destroy_confirmation_message(activity)}, :method => :delete, :class => 'postOptionLink' if User.current.allowed_to?(:delete_issues, activity.project) %> + <% elsif defined?(project_id) %> + <%= link_to l(:button_delete), issue_path(activity.id, :page_classify => "project_page", :page_id => project_id), :data => {:confirm => issues_destroy_confirmation_message(activity)}, :method => :delete, :class => 'postOptionLink' if User.current.allowed_to?(:delete_issues, activity.project) %> + <% elsif defined?(user_id) %> + <%= link_to l(:button_delete), issue_path(activity.id, :page_classify => "user_page", :page_id => user_id), :data => {:confirm => issues_destroy_confirmation_message(activity)}, :method => :delete, :class => 'postOptionLink' if User.current.allowed_to?(:delete_issues, activity.project) %> + <% end %> +
          • +
          • + <%= link_to l(:button_copy), project_copy_issue_path(activity.project, activity), :class => 'postOptionLink' if User.current.allowed_to?(:add_issues, activity.project) %> +
          • +
        -
      • -
      -
    - <% end %> -
    - <% case activity.tracker_id %> - <% when 1%> - 【缺陷】 - <% when 2%> - 【功能】 - <% when 3%> - 【支持】 - <% when 4%> - 【任务】 - <% when 5%> - 【周报】 - <% end %> - <%= link_to activity.subject.to_s, issue_path(activity), :class => "postGrey ml5", :target => "_blank" %> - +
    + <% end %> +
    + <% case activity.tracker_id %> + <% when 1%> + 【缺陷】 + <% when 2%> + 【功能】 + <% when 3%> + 【支持】 + <% when 4%> + 【任务】 + <% when 5%> + 【周报】 + <% end %> + <%= link_to activity.subject.to_s, issue_path(activity), :class => "postGrey ml5", :target => "_blank" %> + <%= get_issue_priority(activity.priority_id)[1] %> -
    -
    -
    指派给   - <% unless activity.assigned_to_id.nil? %> - <% if activity.try(:assigned_to).try(:realname) == ' ' %> - <%= link_to activity.try(:assigned_to), user_path(activity.assigned_to_id), :class => "newsBlue mr15" %> - <% else %> - <%= link_to activity.try(:assigned_to).try(:realname), user_path(activity.assigned_to_id), :class => "newsBlue mr15" %> +
    +
    +
    指派给   + <% unless activity.assigned_to_id.nil? %> + <% if activity.try(:assigned_to).try(:realname) == ' ' %> + <%= link_to activity.try(:assigned_to), user_path(activity.assigned_to_id), :class => "newsBlue mr15" %> + <% else %> + <%= link_to activity.try(:assigned_to).try(:realname), user_path(activity.assigned_to_id), :class => "newsBlue mr15" %> + <% end %> + <% end %> +
    +
    + 发布时间: + <%=format_time(activity.created_on) %> +
    +
    + 更新时间:<%= format_time(ForgeActivity.where("forge_act_type='#{activity.class}' and forge_act_id =#{activity.id}").first.updated_at) %> +
    +
    +
    + <%=render :partial =>"users/intro_content", :locals=>{:user_activity_id => user_activity_id, :content => activity.description} %> + + +
    + <%# 局部刷新:修改xissue属性 %> + <% if User.current.member_of?(activity.project) && !activity.nil? && !activity.status.nil? %> + <% unless params[:action] == "index" %> +
    + <%= render :partial => 'users/project_issue_detail', :locals => {:activity => activity} %> +
    <% end %> <% end %> -
    -
    - 发布时间: - <%=format_time(activity.created_on) %> -
    -
    - 更新时间:<%= format_time(ForgeActivity.where("forge_act_type='#{activity.class}' and forge_act_id =#{activity.id}").first.updated_at) %> +
    +
    + <%= render :partial=>"attachments/activity_attach", :locals=>{:activity => activity} %> +
    - <%=render :partial =>"users/intro_content", :locals=>{:user_activity_id => user_activity_id, :content => activity.description} %> - - -
    - <%# 局部刷新:修改xissue属性 %> - <% if User.current.member_of?(activity.project) && !activity.nil? && !activity.status.nil? %> - <% unless params[:action] == "index" %> -
    - <%= render :partial => 'users/project_issue_detail', :locals => {:activity => activity} %> -
    - <% end %> - <% end %> -
    -
    - <%= render :partial=>"attachments/activity_attach", :locals=>{:activity => activity} %> +
    + <%= render :partial => 'users/project_issue_reply', :locals => {:activity => activity, :user_activity_id => user_activity_id} %>
    -
    -
    -
    - <%= render :partial => 'users/project_issue_reply', :locals => {:activity => activity, :user_activity_id => user_activity_id} %> -
    -
    - + +<% end %> + From dd825a6426e89526273484c801361d447571b11e Mon Sep 17 00:00:00 2001 From: cxt Date: Sun, 18 Sep 2016 16:26:47 +0800 Subject: [PATCH 38/41] =?UTF-8?q?config/environments/production.rb=20=20?= =?UTF-8?q?=E8=BF=99=E4=B8=AA=E6=96=87=E4=BB=B6=E6=B7=BB=E5=8A=A0=E5=88=B0?= =?UTF-8?q?=E5=BF=BD=E7=95=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index a1f5f7e76..9d33b264c 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ /config/configuration.yml /config/additional_environment.rb /config/oneapm.yml +/config/environments/production.rb /files/* From fe431902d70cce85acee1fb1df9a9f2305d46e17 Mon Sep 17 00:00:00 2001 From: yuanke <249218296@qq.com> Date: Sun, 18 Sep 2016 16:48:20 +0800 Subject: [PATCH 39/41] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=95=99=E8=A8=80?= =?UTF-8?q?=E7=9A=84at=E5=BE=AE=E4=BF=A1=E7=9B=B8=E5=85=B3BUG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/at_message.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/at_message.rb b/app/models/at_message.rb index 2212ef07e..10afe3e79 100644 --- a/app/models/at_message.rb +++ b/app/models/at_message.rb @@ -99,7 +99,7 @@ class AtMessage < ActiveRecord::Base else type = "journal_for_message" detail_id = topic.id - detail_title = at_message.notes + detail_title = topic.notes.nil? ? "" : topic.notes end else status = -1 From 030056fd0d0a17792446f9d89375abbef0be88db Mon Sep 17 00:00:00 2001 From: huang Date: Sun, 18 Sep 2016 16:51:52 +0800 Subject: [PATCH 40/41] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E8=AE=A8=E8=AE=BA?= =?UTF-8?q?=E5=8C=BA=E9=99=84=E4=BB=B6=E4=B8=8B=E8=BD=BD=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/plugins/acts_as_attachable/lib/acts_as_attachable.rb | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/lib/plugins/acts_as_attachable/lib/acts_as_attachable.rb b/lib/plugins/acts_as_attachable/lib/acts_as_attachable.rb index 20bc0a7ad..acfc28c41 100644 --- a/lib/plugins/acts_as_attachable/lib/acts_as_attachable.rb +++ b/lib/plugins/acts_as_attachable/lib/acts_as_attachable.rb @@ -219,11 +219,7 @@ module Redmine if a && !attachment['is_public_checkbox'] # 考虑到更新操作,所以全部设置为公开,私有项目、课程是不能访问的 - if is_public - a.is_public = true - else - a.is_public = false - end + a.is_public = true elsif a && attachment['is_public_checkbox'] a.is_public = true end From fa82860813408a4498308edcc680b5087ddc1693 Mon Sep 17 00:00:00 2001 From: cxt Date: Sun, 18 Sep 2016 17:01:08 +0800 Subject: [PATCH 41/41] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E8=AE=A8=E8=AE=BA?= =?UTF-8?q?=E5=8C=BA=E5=8A=A8=E6=80=81=E7=9A=84=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/users_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 7e9add5e2..bdbaf1738 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -1683,7 +1683,7 @@ class UsersController < ApplicationController container_type = 'Project' act_type = 'Issue' when "project_message" - container_type = 'Course' + container_type = 'Project' act_type = 'Message' when "user_journals" container_type = 'Principal'