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.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'
|