From 65bd77f0ff25298ce5039a4b547c47346e47f099 Mon Sep 17 00:00:00 2001 From: yuanke <249218296@qq.com> Date: Sun, 18 Sep 2016 10:50:40 +0800 Subject: [PATCH 01/50] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E4=BA=8C=E7=BB=B4?= =?UTF-8?q?=E7=A0=81=E8=BF=87=E6=9C=9F=E9=97=AE=E9=A2=98=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/course.rb | 3 ++- app/models/project.rb | 3 ++- .../20160918024056_add_qrcode_expiretime_to_courses.rb | 5 +++++ .../20160918024214_add_qrcode_expiretime_to_projects.rb | 5 +++++ 4 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 db/migrate/20160918024056_add_qrcode_expiretime_to_courses.rb create mode 100644 db/migrate/20160918024214_add_qrcode_expiretime_to_projects.rb diff --git a/app/models/course.rb b/app/models/course.rb index 659f9fcec..cc80a1b4b 100644 --- a/app/models/course.rb +++ b/app/models/course.rb @@ -495,10 +495,11 @@ class Course < ActiveRecord::Base def generate_qrcode ticket = self.qrcode - if !ticket || ticket.size < 10 + if !ticket || ticket.size < 10 || (Time.now.to_i > self.qrcode_expiretime) response = Wechat.api.qrcode_create_scene(invite_code, 2592000) logger.debug "response = #{response}" self.qrcode = response['ticket'] + self.qrcode_expiretime = Time.now.to_i+response['expire_seconds'] save! && reload ticket = qrcode end diff --git a/app/models/project.rb b/app/models/project.rb index 0d297bb3c..e80306036 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -930,10 +930,11 @@ class Project < ActiveRecord::Base def generate_qrcode ticket = self.qrcode - if !ticket || ticket.size < 10 + if !ticket || ticket.size < 10 || (Time.now.to_i > self.qrcode_expiretime) response = Wechat.api.qrcode_create_scene(invite_code, 2592000) logger.debug "response = #{response}" self.qrcode = response['ticket'] + self.qrcode_expiretime = Time.now.to_i+response['expire_seconds'] save! ticket = qrcode end diff --git a/db/migrate/20160918024056_add_qrcode_expiretime_to_courses.rb b/db/migrate/20160918024056_add_qrcode_expiretime_to_courses.rb new file mode 100644 index 000000000..17d8548cc --- /dev/null +++ b/db/migrate/20160918024056_add_qrcode_expiretime_to_courses.rb @@ -0,0 +1,5 @@ +class AddQrcodeExpiretimeToCourses < ActiveRecord::Migration + def change + add_column :courses, :qrcode_expiretime, :integer, :default => 0 + end +end diff --git a/db/migrate/20160918024214_add_qrcode_expiretime_to_projects.rb b/db/migrate/20160918024214_add_qrcode_expiretime_to_projects.rb new file mode 100644 index 000000000..870917443 --- /dev/null +++ b/db/migrate/20160918024214_add_qrcode_expiretime_to_projects.rb @@ -0,0 +1,5 @@ +class AddQrcodeExpiretimeToProjects < ActiveRecord::Migration + def change + add_column :projects, :qrcode_expiretime, :integer, :default => 0 + end +end From b783ec5b44823771de8f0d0cfe78ea554b764705 Mon Sep 17 00:00:00 2001 From: yuanke <249218296@qq.com> Date: Sun, 18 Sep 2016 13:19:37 +0800 Subject: [PATCH 02/50] . --- app/api/mobile/apis/courses.rb | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/api/mobile/apis/courses.rb b/app/api/mobile/apis/courses.rb index cbf8f4986..57feff084 100644 --- a/app/api/mobile/apis/courses.rb +++ b/app/api/mobile/apis/courses.rb @@ -123,6 +123,12 @@ module Mobile else cs = CoursesService.new status = cs.join_course_roles({role: roles_ids, openid: params[:openid], invite_code: params[:invite_code]}, current_user) + if params[:student_flag] && status[:state] == 0 + #查询分班信息 + + + end + { status: status[:state], message:CoursesService::JoinCourseError.message(status[:state]) From 04a2effceec5c8b07b230a51fd90cc5bb5bc2cc3 Mon Sep 17 00:00:00 2001 From: yuanke <249218296@qq.com> Date: Sun, 18 Sep 2016 16:12:38 +0800 Subject: [PATCH 03/50] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=88=86=E7=8F=AD=E7=9B=B8=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/mobile/apis/courses.rb | 30 ++++++++++---- app/services/courses_service.rb | 8 +++- public/assets/wechat/join_class.html | 2 + public/assets/wechat/join_classgroup.html | 32 +++++++++++++++ .../wechat/controllers/join_class.js | 8 +++- .../wechat/controllers/join_classgroup.js | 39 +++++++++++++++++++ public/javascripts/wechat/others/routes.js | 1 + 7 files changed, 111 insertions(+), 9 deletions(-) create mode 100644 public/assets/wechat/join_classgroup.html create mode 100644 public/javascripts/wechat/controllers/join_classgroup.js diff --git a/app/api/mobile/apis/courses.rb b/app/api/mobile/apis/courses.rb index 57feff084..f0e4c867d 100644 --- a/app/api/mobile/apis/courses.rb +++ b/app/api/mobile/apis/courses.rb @@ -118,20 +118,18 @@ module Mobile roles_ids << "10" end + go_course_group = 0 + if roles_ids.length <= 0 {status:-1,message:"请至少选择一个角色"} else cs = CoursesService.new status = cs.join_course_roles({role: roles_ids, openid: params[:openid], invite_code: params[:invite_code]}, current_user) - if params[:student_flag] && status[:state] == 0 - #查询分班信息 - - - end - { status: status[:state], - message:CoursesService::JoinCourseError.message(status[:state]) + message:CoursesService::JoinCourseError.message(status[:state]), + go_coursegroup_flag:status[:go_coursegroup_flag], + course_id:status[:course_id] } end end @@ -756,6 +754,24 @@ module Mobile end out.merge(message: message) end + + desc '获取分班列表' + params do + requires :token, type:String + end + get ':course_id/course_groups' do + begin + authenticate! + course = Course.find(params[:course_id]) + groups = [] + groups = course.course_groups if course.course_groups + present :data,groups + present :status,0 + rescue + present :status,-1 + end + end + end end end diff --git a/app/services/courses_service.rb b/app/services/courses_service.rb index 5add9979d..182d1150f 100644 --- a/app/services/courses_service.rb +++ b/app/services/courses_service.rb @@ -565,6 +565,8 @@ class CoursesService #多个角色加入课程 def join_course_roles params,current_user course = Course.find_by_invite_code(params[:invite_code]) if params[:invite_code] + go_coursegroup_flag = 0 + course_id = 0 @state = 10 if course @@ -621,6 +623,8 @@ class CoursesService course.members << members StudentsForCourse.create(:student_id => current_user.id, :course_id => course.id) @state = 0 + go_coursegroup_flag = 1 if course.course_groups + course_id = course.id send_wechat_join_class_notice current_user,course,10,0 else is_stu = false @@ -630,6 +634,8 @@ class CoursesService course.members << members StudentsForCourse.create(:student_id => current_user.id, :course_id =>course.id) is_stu = true + go_coursegroup_flag = 1 if course.course_groups + course_id = course.id send_wechat_join_class_notice current_user,course,10,0 end #如果已经发送过消息了,那么就要给个提示 @@ -674,7 +680,7 @@ class CoursesService else @state = 4 end - {:state => @state,:course => course} + {:state => @state,:course => course,:go_coursegroup_flag => go_coursegroup_flag,:course_id=>course_id} end diff --git a/public/assets/wechat/join_class.html b/public/assets/wechat/join_class.html index ad43db3a7..4c81ff2e4 100644 --- a/public/assets/wechat/join_class.html +++ b/public/assets/wechat/join_class.html @@ -25,5 +25,7 @@ +
{{tip_1}}
+ diff --git a/public/assets/wechat/join_classgroup.html b/public/assets/wechat/join_classgroup.html new file mode 100644 index 000000000..6da2f1503 --- /dev/null +++ b/public/assets/wechat/join_classgroup.html @@ -0,0 +1,32 @@ +
+
+
+
欢迎加入班级
+
{{current_course.name}}
+
选择分班
+ + +
+ 提示 +
    +
  • 该班级存在分班信息,请选择属于您的小班
  • +
  • 老师可以在班级的成员管理页,对所有成员进行修改
  • +
  • 学生可以在班级的我的同学页,对自己进行修改
  • +
+
+ +
+ 取消 + 确定 +
+
+ + +
\ No newline at end of file diff --git a/public/javascripts/wechat/controllers/join_class.js b/public/javascripts/wechat/controllers/join_class.js index 006fa0b59..8f7647b12 100644 --- a/public/javascripts/wechat/controllers/join_class.js +++ b/public/javascripts/wechat/controllers/join_class.js @@ -55,10 +55,16 @@ app.controller('JoinClassController', ['$scope', '$http', 'auth', 'config', 'ale assistant_flag:vm.assistant, student_flag:vm.student }).then(function(response){ + console.log(response); if(response.data.status == 0){ vm.alertService.showMessage('提示', response.data.message,function(){ rms.save('syllabuses',[]); - $location.path("/class_list"); + if(response.data.go_coursegroup_flag == 0){ + $location.path("/class_list"); + } + else{ + $location.path("/join_classgroup").search({id: response.data.course_id}); + } }); } else { vm.alertService.showMessage('提示', response.data.message); diff --git a/public/javascripts/wechat/controllers/join_classgroup.js b/public/javascripts/wechat/controllers/join_classgroup.js new file mode 100644 index 000000000..504643817 --- /dev/null +++ b/public/javascripts/wechat/controllers/join_classgroup.js @@ -0,0 +1,39 @@ + + +app.controller('JoinClassGroupController', ['$scope', '$http', 'auth', 'config', 'alertService','$location','$routeParams','rms','wx','common', function($scope, $http, auth, config, alertService, $location,$routeParams, rms,wx,common){ + var vm = $scope; + + var course_id = $routeParams.id; + vm.alertService = alertService.create(); + + $http.get(config.apiUrl+ 'courses/'+course_id+"?token="+auth.token()).then( + function(response) { + console.log(response.data); + if (response.data.status == 0){ + vm.current_course = response.data.data; + console.log("courses"); + console.log(response.data.data); + } + else{ + vm.alertService.showMessage('提示', response.data.message); + } + if(!vm.current_course){ + vm.tip_1 = "该班级不存在或已被删除"; + } + } + ); + + if(vm.current_course){ + $http.get(config.apiUrl + 'courses/course_groups?token='+auth.token()+'&course_id='+course_id).then( + function(response) { + if(response.data.status == 0) { + vm.groups = response.data.groups; + } + else{ + vm.groups = []; + } + }); + } + + +}] ); \ No newline at end of file diff --git a/public/javascripts/wechat/others/routes.js b/public/javascripts/wechat/others/routes.js index e5c87d1ab..845995ec6 100644 --- a/public/javascripts/wechat/others/routes.js +++ b/public/javascripts/wechat/others/routes.js @@ -39,6 +39,7 @@ app.config(['$routeProvider',"$httpProvider", "$locationProvider",'config', func .when('/invite_code', {templateUrl: rootPath + 'invite_code.html', controller: 'InviteCodeController'}) .when('/send_class_list', makeRoute('send_class_list.html', 'SendClassListController')) .when('/join_class', makeRoute('join_class.html', 'JoinClassController')) + .when('/join_classgroup', makeRoute('join_classgroup.html', 'JoinClassGroupController')) .when('/review_class_member', makeRoute('review_class_member.html', 'ReviewClassMemberController')) .when('/class_publishnotice', makeRoute('class_publishnotice.html', 'ClassPublishNoticeController')) .when('/class_publishissue', makeRoute('class_publishissue.html', 'ClassPublishIssueController')) From 97394a6cbe529cff023cae4966f5bc686aaa0355 Mon Sep 17 00:00:00 2001 From: Tim Date: Sun, 18 Sep 2016 16:47:13 +0800 Subject: [PATCH 04/50] =?UTF-8?q?=E6=98=BE=E7=A4=BA=E8=AF=BE=E7=A8=8B?= =?UTF-8?q?=E5=90=8D=E7=A7=B0=E4=B8=8E=E7=8F=AD=E7=BA=A7=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/assets/wechat/activities.html | 16 ++++++++-------- public/assets/wechat/class.html | 2 +- public/assets/wechat/class_publishissue.html | 2 +- public/assets/wechat/class_publishnotice.html | 2 +- public/assets/wechat/course_discussion.html | 2 +- public/assets/wechat/course_notice.html | 2 +- public/assets/wechat/homework_detail.html | 2 +- public/assets/wechat/invite_code.html | 2 +- public/assets/wechat/myresource.html | 4 ++-- public/assets/wechat/review_class_member.html | 4 ++-- public/stylesheets/weui/weixin.css | 2 +- 11 files changed, 20 insertions(+), 20 deletions(-) diff --git a/public/assets/wechat/activities.html b/public/assets/wechat/activities.html index 2d45f4d17..09490b766 100644 --- a/public/assets/wechat/activities.html +++ b/public/assets/wechat/activities.html @@ -40,7 +40,7 @@
- +
{{act.praise_count}}
@@ -75,7 +75,7 @@
- +
{{act.praise_count}}
@@ -111,7 +111,7 @@
- +
{{act.praise_count}}
@@ -147,7 +147,7 @@
- + @@ -405,7 +405,7 @@
- +
{{act.praise_count}}
@@ -440,7 +440,7 @@
- +
{{act.praise_count}}
@@ -476,7 +476,7 @@
- +
{{act.praise_count}}
@@ -512,7 +512,7 @@
- + diff --git a/public/assets/wechat/class.html b/public/assets/wechat/class.html index 836575b90..303b73057 100644 --- a/public/assets/wechat/class.html +++ b/public/assets/wechat/class.html @@ -1,6 +1,6 @@
-
邀请码
+
邀请码
diff --git a/public/assets/wechat/class_publishissue.html b/public/assets/wechat/class_publishissue.html index f4dd40552..5a65beabf 100644 --- a/public/assets/wechat/class_publishissue.html +++ b/public/assets/wechat/class_publishissue.html @@ -1,7 +1,7 @@
-
{{current_course.name}}
+
标题
diff --git a/public/assets/wechat/class_publishnotice.html b/public/assets/wechat/class_publishnotice.html index d27e378d3..e56c762a6 100644 --- a/public/assets/wechat/class_publishnotice.html +++ b/public/assets/wechat/class_publishnotice.html @@ -1,7 +1,7 @@
-
{{current_course.name}}
+
标题
diff --git a/public/assets/wechat/course_discussion.html b/public/assets/wechat/course_discussion.html index 91aa58fcf..8dc08c788 100644 --- a/public/assets/wechat/course_discussion.html +++ b/public/assets/wechat/course_discussion.html @@ -24,7 +24,7 @@
{{discussion.subject}}
-
{{discussion.course_project_name}} - 班级讨论区{{discussion.created_on}}
+
{{discussion.syllabus_title}}·{{discussion.course_project_name}} - 班级讨论区{{discussion.created_on}}
diff --git a/public/assets/wechat/course_notice.html b/public/assets/wechat/course_notice.html index 247cd1fd0..3358da343 100644 --- a/public/assets/wechat/course_notice.html +++ b/public/assets/wechat/course_notice.html @@ -23,7 +23,7 @@
{{news.title}}
-
{{news.course_name}} - 课程通知{{news.created_on}}
+
{{discussion.syllabus_title}}·{{news.course_name}} - 课程通知{{news.created_on}}
diff --git a/public/assets/wechat/homework_detail.html b/public/assets/wechat/homework_detail.html index e5f73faa9..3898bee14 100644 --- a/public/assets/wechat/homework_detail.html +++ b/public/assets/wechat/homework_detail.html @@ -23,7 +23,7 @@
{{homework.name}}
-
{{homework.course_name}} - 普通作业编程作业分组作业{{homework.publish_time}}
+
{{discussion.syllabus_title}}·{{homework.course_name}} - 普通作业编程作业分组作业{{homework.publish_time}}
迟交扣分:{{homework.late_penalty}}分 匿评开启时间:{{homework.evaluation_start}}
diff --git a/public/assets/wechat/invite_code.html b/public/assets/wechat/invite_code.html index 3aaa00bbe..c6d3b425f 100644 --- a/public/assets/wechat/invite_code.html +++ b/public/assets/wechat/invite_code.html @@ -1,7 +1,7 @@
- +
邀请码:{{course.invite_code}}
diff --git a/public/assets/wechat/myresource.html b/public/assets/wechat/myresource.html index 1848dad60..df04a184f 100644 --- a/public/assets/wechat/myresource.html +++ b/public/assets/wechat/myresource.html @@ -13,7 +13,7 @@
{{r.filename}}发送
- 大小:{{r.attafile_size}}
+ 大小:{{r.attafile_size}}
更多
@@ -24,7 +24,7 @@
{{r.homework_name}}发送
-
+
更多
diff --git a/public/assets/wechat/review_class_member.html b/public/assets/wechat/review_class_member.html index e066c48f0..b1f0dacc5 100644 --- a/public/assets/wechat/review_class_member.html +++ b/public/assets/wechat/review_class_member.html @@ -2,7 +2,7 @@
-
{{current_course.name}}
+
{{current_review_member.realname == "" ? current_review_member.name : current_review_member.realname}}
角色
    @@ -29,7 +29,7 @@
-
{{current_course.name}}
+
{{tip_2}}
diff --git a/public/stylesheets/weui/weixin.css b/public/stylesheets/weui/weixin.css index cf44a3814..8e0b3933e 100644 --- a/public/stylesheets/weui/weixin.css +++ b/public/stylesheets/weui/weixin.css @@ -147,7 +147,7 @@ a.underline {text-decoration:underline;} .post-dynamic-author {width:50%; height:30px; line-height:30px; font-size:14px; color:#5b5b5b; vertical-align:middle;} .post-dynamic-time {height:30px; line-height:30px; vertical-align:middle;} .post-dynamic-title {font-size:15px;} -.post-dynamic-from {width:50%; font-size:13px;} +.post-dynamic-from {width:55%; font-size:13px;} .post-box-shadow {box-shadow: 0px 2px 8px rgba(146, 153, 169, 0.5);} .post-reply-author {width:50%; height:20px; line-height:20px; font-size:12px; color:#5d5d5d; vertical-align:middle;} .post-reply-time {height:20px; line-height:20px; vertical-align:middle;} From fa82860813408a4498308edcc680b5087ddc1693 Mon Sep 17 00:00:00 2001 From: cxt Date: Sun, 18 Sep 2016 17:01:08 +0800 Subject: [PATCH 05/50] =?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' From 7a5f21456d75dcf3cf4c7ec21d3bd9641cea4a21 Mon Sep 17 00:00:00 2001 From: Tim Date: Mon, 19 Sep 2016 11:24:44 +0800 Subject: [PATCH 06/50] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E5=90=8D=E5=AD=97=E4=B8=BA=E7=A9=BA=E6=97=B6=EF=BC=8C=E6=8F=90?= =?UTF-8?q?=E7=A4=BA=E6=96=87=E5=AD=97=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/assets/wechat/edit_userinfo.html | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/public/assets/wechat/edit_userinfo.html b/public/assets/wechat/edit_userinfo.html index f4178fee4..3e4bf51f2 100644 --- a/public/assets/wechat/edit_userinfo.html +++ b/public/assets/wechat/edit_userinfo.html @@ -12,6 +12,7 @@
姓名
+
姓名不能为空
性别 @@ -28,10 +29,10 @@
邮箱 -
- 电子邮箱地址不能为空 - 电子邮箱地址不合法 -
+
+
+ 电子邮箱地址不能为空 + 电子邮箱地址不合法
提示 From 3624d9d4ca95863bdb2774ee84572370aa4b07d4 Mon Sep 17 00:00:00 2001 From: yuanke <249218296@qq.com> Date: Mon, 19 Sep 2016 13:22:29 +0800 Subject: [PATCH 07/50] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=88=86=E7=8F=AD=E7=9B=B8=E5=85=B3=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/mobile/apis/courses.rb | 27 +++++++- app/api/mobile/entities/course.rb | 3 + app/api/mobile/entities/user.rb | 4 ++ app/services/courses_service.rb | 2 +- public/assets/wechat/class.html | 3 +- public/assets/wechat/join_classgroup.html | 10 +-- .../assets/wechat/select_my_coursegroup.html | 25 +++++++ .../javascripts/wechat/controllers/class.js | 8 ++- .../wechat/controllers/join_class.js | 6 +- .../wechat/controllers/join_classgroup.js | 63 ++++++++++++++---- .../controllers/select_my_coursegroup.js | 66 +++++++++++++++++++ public/javascripts/wechat/others/routes.js | 1 + 12 files changed, 195 insertions(+), 23 deletions(-) create mode 100644 public/assets/wechat/select_my_coursegroup.html create mode 100644 public/javascripts/wechat/controllers/select_my_coursegroup.js diff --git a/app/api/mobile/apis/courses.rb b/app/api/mobile/apis/courses.rb index f0e4c867d..dd5525fae 100644 --- a/app/api/mobile/apis/courses.rb +++ b/app/api/mobile/apis/courses.rb @@ -757,12 +757,13 @@ module Mobile desc '获取分班列表' params do + requires :id, type: Integer requires :token, type:String end - get ':course_id/course_groups' do + get 'course_groups/:id' do begin authenticate! - course = Course.find(params[:course_id]) + course = Course.find(params[:id]) groups = [] groups = course.course_groups if course.course_groups present :data,groups @@ -772,6 +773,28 @@ module Mobile end end + desc "加入分班" + params do + requires :id, type: Integer + requires :token, type: String + requires :course_group_id, type: Integer + end + post 'join_coursegroup' do + begin + authenticate! + member = Member.where(:course_id => params[:id], :user_id => current_user.id).first + + raise "你还不是该班级的学生!" unless member + + member.course_group_id = params[:course_group_id].to_i + member.save + present :status,0 + rescue Exception=>e + present :message,e.message + present :status,-1 + end + end + end end end diff --git a/app/api/mobile/entities/course.rb b/app/api/mobile/entities/course.rb index 30a5a6cc9..9bf1cc1f6 100644 --- a/app/api/mobile/entities/course.rb +++ b/app/api/mobile/entities/course.rb @@ -19,6 +19,8 @@ module Mobile (format_time(c[field]) if (c.is_a?(Hash) && c.key?(field))) || (format_time(c.send(field)) if c.respond_to?(field)) elsif field == :member_count ::Course===c ? c.members.count : 0 + elsif field == :syllabus_title + c.syllabus.nil? ? "":c.syllabus.title else (c[field] if (c.is_a?(Hash) && c.key?(field))) || (c.send(field) if c.respond_to?(field)) end @@ -38,6 +40,7 @@ module Mobile course_expose :lft course_expose :location course_expose :name + course_expose :syllabus_title course_expose :open_student # course_expose :password course_expose :rgt diff --git a/app/api/mobile/entities/user.rb b/app/api/mobile/entities/user.rb index 30a2a7edd..09ef6a599 100644 --- a/app/api/mobile/entities/user.rb +++ b/app/api/mobile/entities/user.rb @@ -36,6 +36,8 @@ module Mobile u.lastname when :mail u.mail + when :is_me + defined? u.is_me ? u.is_me : 0 end end end @@ -77,6 +79,8 @@ module Mobile user_expose :name + user_expose :is_me + end end diff --git a/app/services/courses_service.rb b/app/services/courses_service.rb index 182d1150f..2c0506d1e 100644 --- a/app/services/courses_service.rb +++ b/app/services/courses_service.rb @@ -115,7 +115,7 @@ class CoursesService role_name: m.roles.first.name, name: m.user.show_name, roles_id: role_ids.include?(7) ? 7 : (role_ids.include?(9) ? 9 : 10 ), - :brief_introduction => m.user.user_extensions.brief_introduction,:realname=>m.user.realname} + :brief_introduction => m.user.user_extensions.brief_introduction,:realname=>m.user.realname,:is_me => current_user.id == m.user.id ? 1:0 } # end end diff --git a/public/assets/wechat/class.html b/public/assets/wechat/class.html index 836575b90..30c9120c3 100644 --- a/public/assets/wechat/class.html +++ b/public/assets/wechat/class.html @@ -25,7 +25,7 @@
-
+
diff --git a/public/assets/wechat/select_my_coursegroup.html b/public/assets/wechat/select_my_coursegroup.html new file mode 100644 index 000000000..c16b276e4 --- /dev/null +++ b/public/assets/wechat/select_my_coursegroup.html @@ -0,0 +1,25 @@ +
+
+
+
我的信息
+
{{current_edit_member.user.show_name}}
+
角色
+
学生
+
选择分班
+
    +
  • +
  • +
  • +
+ +
+ 取消 + 确定 +
+
+ +
{{tip_1}}
+
{{tip_2}}
+ + +
diff --git a/public/javascripts/wechat/controllers/class.js b/public/javascripts/wechat/controllers/class.js index ea394a1ff..ca4ad6d76 100644 --- a/public/javascripts/wechat/controllers/class.js +++ b/public/javascripts/wechat/controllers/class.js @@ -247,7 +247,6 @@ app.controller('ClassController', ['$scope', 'config','$http', 'auth','$location resetMenu(vm.course.current_user_is_teacher,vm.currentTab); } - vm.onSetting = function(user){ rms.save('current_edit_member', user); rms.save("course",vm.course); @@ -255,6 +254,13 @@ app.controller('ClassController', ['$scope', 'config','$http', 'auth','$location $location.path("/edit_class_member").search({id: courseid,user_id: user.id}); }; + vm.onSetting_1 = function(user){ + rms.save('current_edit_member', user); + rms.save("course",vm.course); + rms.save("tab_num",vm.currentTab); + $location.path("/select_my_coursegroup").search({id: courseid}); + }; + vm.review = function(user){ rms.save('current_review_member', user); rms.save('current_course', vm.course); diff --git a/public/javascripts/wechat/controllers/join_class.js b/public/javascripts/wechat/controllers/join_class.js index 8f7647b12..709072562 100644 --- a/public/javascripts/wechat/controllers/join_class.js +++ b/public/javascripts/wechat/controllers/join_class.js @@ -67,7 +67,11 @@ app.controller('JoinClassController', ['$scope', '$http', 'auth', 'config', 'ale } }); } else { - vm.alertService.showMessage('提示', response.data.message); + vm.alertService.showMessage('提示', response.data.message,function(){ + if(response.data.go_coursegroup_flag == 1) { + $location.path("/join_classgroup").search({id: response.data.course_id}); + } + }); } }); }; diff --git a/public/javascripts/wechat/controllers/join_classgroup.js b/public/javascripts/wechat/controllers/join_classgroup.js index 504643817..a661ba6fc 100644 --- a/public/javascripts/wechat/controllers/join_classgroup.js +++ b/public/javascripts/wechat/controllers/join_classgroup.js @@ -5,14 +5,28 @@ app.controller('JoinClassGroupController', ['$scope', '$http', 'auth', 'config', var course_id = $routeParams.id; vm.alertService = alertService.create(); + vm.selectid = 0; $http.get(config.apiUrl+ 'courses/'+course_id+"?token="+auth.token()).then( function(response) { console.log(response.data); if (response.data.status == 0){ vm.current_course = response.data.data; - console.log("courses"); + console.log("courses="); console.log(response.data.data); + if(vm.current_course){ + $http.get(config.apiUrl + 'courses/course_groups/'+course_id+'?token='+auth.token()).then( + function(response) { + console.log("groups="); + console.log(response); + if(response.data.status == 0) { + vm.groups = response.data.data; + } + else{ + vm.groups = []; + } + }); + } } else{ vm.alertService.showMessage('提示', response.data.message); @@ -23,17 +37,42 @@ app.controller('JoinClassGroupController', ['$scope', '$http', 'auth', 'config', } ); - if(vm.current_course){ - $http.get(config.apiUrl + 'courses/course_groups?token='+auth.token()+'&course_id='+course_id).then( - function(response) { - if(response.data.status == 0) { - vm.groups = response.data.groups; - } - else{ - vm.groups = []; - } - }); - } + vm.selectGroup = function(id){ + vm.selectid = id; + }; + + + vm.cancel = function(){ + }; + + vm.confirm = function(){ + if(vm.selectid == 0){ + rms.save('syllabuses',[]); + $location.path("/class_list"); + return; + } + + //加入分班 + $http.post(config.apiUrl+'courses/join_coursegroup', { + token: auth.token(), + id: course_id, + course_group_id:vm.selectid + }).then(function(response){ + console.log(response); + if(response.data.status == 0){ + vm.alertService.showMessage('提示', "加入分班成功!",function(){ + rms.save('syllabuses',[]); + $location.path("/class_list"); + + }); + } else { + vm.alertService.showMessage('提示', response.data.message,function(){ + rms.save('syllabuses',[]); + $location.path("/class_list"); + }); + } + }); + }; }] ); \ No newline at end of file diff --git a/public/javascripts/wechat/controllers/select_my_coursegroup.js b/public/javascripts/wechat/controllers/select_my_coursegroup.js new file mode 100644 index 000000000..2c338d33f --- /dev/null +++ b/public/javascripts/wechat/controllers/select_my_coursegroup.js @@ -0,0 +1,66 @@ + + +app.controller('SelectMyCourseGroupController', ['$scope', '$http', 'auth', 'config', 'alertService','$location','$routeParams','rms','common', function($scope, $http, auth, config, alertService, $location,$routeParams, rms,common){ +// common.checkLogin(); + + var vm = $scope; + + vm.current_review_member = rms.get('current_review_member'); + + vm.alertService = alertService.create(); + + vm.tip_1 = ""; + vm.tip_2 = ""; + + var course_id = $routeParams.id; + if(!vm.current_course){ + $http.get(config.apiUrl+ 'courses/'+course_id+"?token="+auth.token()).then( + function(response) { + console.log(response.data); + if (response.data.status == 0){ + vm.current_course = response.data.data; + console.log("courses"); + console.log(response.data.data); + } + else{ + vm.alertService.showMessage('提示', response.data.message); + } + if(!vm.current_course){ + vm.tip_1 = "该班级不存在或已被删除"; + } + + } + ); + } + + if(!vm.current_edit_member){ + $http.post(config.apiUrl+'courses/get_member_info', { + token: auth.token(), + id: course_id, + user_id:user_id + }).then(function(response){ + if(response.data.status!=0){ + vm.alertService.showMessage('提示', response.data.message,function(){ + $location.path("/class").search({id: course_id,tag:1}); + }); + } else { + console.log(response); + course_id = response.data.course_id; + vm.current_edit_member = response.data.member_info; + vm.current_roles_id = vm.current_edit_member.roles_id; + + for(var i in vm.current_roles_id){ + if(vm.current_roles_id[i] == 10){ + vm.student = true; + return; + } + } + + if(!vm.student){ + vm.tip_2 = "您不是该班级的学生!"; + } + } + }); + } + +}] ); \ No newline at end of file diff --git a/public/javascripts/wechat/others/routes.js b/public/javascripts/wechat/others/routes.js index 845995ec6..7b5434ddd 100644 --- a/public/javascripts/wechat/others/routes.js +++ b/public/javascripts/wechat/others/routes.js @@ -41,6 +41,7 @@ app.config(['$routeProvider',"$httpProvider", "$locationProvider",'config', func .when('/join_class', makeRoute('join_class.html', 'JoinClassController')) .when('/join_classgroup', makeRoute('join_classgroup.html', 'JoinClassGroupController')) .when('/review_class_member', makeRoute('review_class_member.html', 'ReviewClassMemberController')) + .when('/select_my_coursegroup', makeRoute('select_my_coursegroup.html', 'SelectMyCourseGroupController')) .when('/class_publishnotice', makeRoute('class_publishnotice.html', 'ClassPublishNoticeController')) .when('/class_publishissue', makeRoute('class_publishissue.html', 'ClassPublishIssueController')) .when('/project_list', makeRoute('project_list.html', 'ProjectListController')) From 5b613964103a1742137c41221f9d81db41a1011b Mon Sep 17 00:00:00 2001 From: yuanke <249218296@qq.com> Date: Mon, 19 Sep 2016 13:53:15 +0800 Subject: [PATCH 08/50] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E8=AF=BE=E7=A8=8B?= =?UTF-8?q?=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/mobile/entities/attachment.rb | 3 +++ app/api/mobile/entities/course.rb | 3 --- app/api/mobile/entities/exercise.rb | 3 +++ app/api/mobile/entities/homework.rb | 4 ++++ app/api/mobile/entities/message.rb | 5 +++++ app/api/mobile/entities/news.rb | 6 ++++++ app/api/mobile/entities/whomework.rb | 3 +++ 7 files changed, 24 insertions(+), 3 deletions(-) diff --git a/app/api/mobile/entities/attachment.rb b/app/api/mobile/entities/attachment.rb index 8200c04b2..0eda2d1c0 100644 --- a/app/api/mobile/entities/attachment.rb +++ b/app/api/mobile/entities/attachment.rb @@ -23,6 +23,8 @@ module Mobile (number_to_human_size(f.filesize)).gsub("ytes", "").to_s when :coursename f.course.nil? ? "" : f.course.name + when :syllabus_title + f.course.nil? ? "" : f.course.syllabus.nil? ? "" : f.course.syllabus.title when :course_id f.course.nil? ? 0 : f.course.id @@ -40,6 +42,7 @@ module Mobile attachment_expose :file_dir attachment_expose :attafile_size attachment_expose :coursename #所属班级名 + attachment_expose :syllabus_title #所属班级名 attachment_expose :course_id #所属班级名 expose :current_user_is_teacher, if: lambda { |instance, options| options[:user] } do |instance, options| current_user = options[:user] diff --git a/app/api/mobile/entities/course.rb b/app/api/mobile/entities/course.rb index 9bf1cc1f6..30a5a6cc9 100644 --- a/app/api/mobile/entities/course.rb +++ b/app/api/mobile/entities/course.rb @@ -19,8 +19,6 @@ module Mobile (format_time(c[field]) if (c.is_a?(Hash) && c.key?(field))) || (format_time(c.send(field)) if c.respond_to?(field)) elsif field == :member_count ::Course===c ? c.members.count : 0 - elsif field == :syllabus_title - c.syllabus.nil? ? "":c.syllabus.title else (c[field] if (c.is_a?(Hash) && c.key?(field))) || (c.send(field) if c.respond_to?(field)) end @@ -40,7 +38,6 @@ module Mobile course_expose :lft course_expose :location course_expose :name - course_expose :syllabus_title course_expose :open_student # course_expose :password course_expose :rgt diff --git a/app/api/mobile/entities/exercise.rb b/app/api/mobile/entities/exercise.rb index ce6a2fb39..821380b47 100644 --- a/app/api/mobile/entities/exercise.rb +++ b/app/api/mobile/entities/exercise.rb @@ -19,6 +19,8 @@ module Mobile case field when :coursename f.course.nil? ? "" : f.course.name + when :syllabus_title + f.course.nil? ? "" : f.course.syllabus.nil? ? "" : f.course.syllabus.title end end end @@ -27,6 +29,7 @@ module Mobile expose :exercise_name expose :exercise_description exercise_expose :coursename #所属班级名 + exercise_expose :syllabus_title expose :current_user_is_teacher, if: lambda { |instance, options| options[:user] } do |instance, options| current_user = options[:user] diff --git a/app/api/mobile/entities/homework.rb b/app/api/mobile/entities/homework.rb index a5b981c6d..d149681e4 100644 --- a/app/api/mobile/entities/homework.rb +++ b/app/api/mobile/entities/homework.rb @@ -39,6 +39,8 @@ module Mobile val when :coursename f.course.nil? ? "" : f.course.name + when :syllabus_title + f.course.nil? ? "" : f.course.syllabus.nil? ? "" : f.course.syllabus.title end end end @@ -49,6 +51,8 @@ module Mobile #课程名称 homework_expose :course_name + homework_expose :syllabus_title + homework_expose :course_id #作业发布者 expose :author,using: Mobile::Entities::User do |f, opt| diff --git a/app/api/mobile/entities/message.rb b/app/api/mobile/entities/message.rb index 07c560a1f..189b52851 100644 --- a/app/api/mobile/entities/message.rb +++ b/app/api/mobile/entities/message.rb @@ -22,6 +22,10 @@ module Mobile else u.project.name end + when :syllabus_title + if u.board.project_id == -1 + u.course.syllabus.nil? ? "" : u.course.syllabus.title + end when :lasted_comment time_from_now u.created_on when :praise_count @@ -50,6 +54,7 @@ module Mobile message_expose :act_type message_expose :act_id message_expose :course_project_name + message_expose :syllabus_title message_expose :board_id message_expose :subject message_expose :title diff --git a/app/api/mobile/entities/news.rb b/app/api/mobile/entities/news.rb index d8c4dcab3..4515791cd 100644 --- a/app/api/mobile/entities/news.rb +++ b/app/api/mobile/entities/news.rb @@ -26,6 +26,11 @@ module Mobile f.id when :comment_count f.comments.count + when :syllabus_title + unless f.course_id == nil + course = get_course(f.course_id) + course.syllabus.nil? ? "" : course.syllabus.title + end end end elsif f.is_a?(::Comment) @@ -89,6 +94,7 @@ module Mobile news_expose :praise_count #课程名字 news_expose :course_name + news_expose :syllabus_title news_expose :lasted_comment #评论 diff --git a/app/api/mobile/entities/whomework.rb b/app/api/mobile/entities/whomework.rb index 9d141552a..b19d34f05 100644 --- a/app/api/mobile/entities/whomework.rb +++ b/app/api/mobile/entities/whomework.rb @@ -30,6 +30,8 @@ module Mobile wh.journals_for_messages.count when :course_name wh.course.name + when :syllabus_title + wh.course.syllabus.nil? ? "" : wh.course.syllabus.title when :act_type 'HomeworkCommon' when :act_id @@ -65,6 +67,7 @@ module Mobile whomework_expose :act_type whomework_expose :act_id whomework_expose :course_name + whomework_expose :syllabus_title whomework_expose :created_at whomework_expose :absence_penalty whomework_expose :evaluation_start From 126c18f8333f4afd3fbb60cd53140f6c24927283 Mon Sep 17 00:00:00 2001 From: Tim Date: Mon, 19 Sep 2016 14:00:52 +0800 Subject: [PATCH 09/50] =?UTF-8?q?=E6=88=91=E7=9A=84=E8=B5=84=E6=BA=90?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E6=9D=A5=E6=BA=90=E5=AE=BD=E5=BA=A6=E8=B0=83?= =?UTF-8?q?=E6=95=B4=EF=BC=9B=E7=8F=AD=E7=BA=A7=E5=8A=A8=E6=80=81=E8=AF=A6?= =?UTF-8?q?=E6=83=85=E9=A1=B5=E9=9D=A2=E6=98=BE=E7=A4=BA=E8=AF=BE=E7=A8=8B?= =?UTF-8?q?=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/assets/wechat/course_notice.html | 2 +- public/assets/wechat/homework_detail.html | 2 +- public/stylesheets/weui/weixin.css | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/public/assets/wechat/course_notice.html b/public/assets/wechat/course_notice.html index 3358da343..a0c242d72 100644 --- a/public/assets/wechat/course_notice.html +++ b/public/assets/wechat/course_notice.html @@ -23,7 +23,7 @@
{{news.title}}
-
{{discussion.syllabus_title}}·{{news.course_name}} - 课程通知{{news.created_on}}
+
{{news.syllabus_title}}·{{news.course_name}} - 课程通知{{news.created_on}}
diff --git a/public/assets/wechat/homework_detail.html b/public/assets/wechat/homework_detail.html index 3898bee14..908cff977 100644 --- a/public/assets/wechat/homework_detail.html +++ b/public/assets/wechat/homework_detail.html @@ -23,7 +23,7 @@
{{homework.name}}
-
{{discussion.syllabus_title}}·{{homework.course_name}} - 普通作业编程作业分组作业{{homework.publish_time}}
+
{{homework.syllabus_title}}·{{homework.course_name}} - 普通作业编程作业分组作业{{homework.publish_time}}
迟交扣分:{{homework.late_penalty}}分 匿评开启时间:{{homework.evaluation_start}}
diff --git a/public/stylesheets/weui/weixin.css b/public/stylesheets/weui/weixin.css index 8e0b3933e..d2d92a361 100644 --- a/public/stylesheets/weui/weixin.css +++ b/public/stylesheets/weui/weixin.css @@ -203,7 +203,7 @@ a.underline {text-decoration:underline;} .img-circle {border-radius:50% !important;} .member-banner {height:24px; line-height:24px; text-align:center; vertical-align:middle; background-color:#dfdfdf;} .resource-width {width:76%;} -.courseware-from-width {max-width:57%;} +.courseware-from-width {max-width:50%;} .other-from-width {max-width:80%;} .course-name-width {width:68%;} From 9c214ef57b9756683a1e2f8f8daec86d5414e669 Mon Sep 17 00:00:00 2001 From: Tim Date: Mon, 19 Sep 2016 14:07:32 +0800 Subject: [PATCH 10/50] =?UTF-8?q?=E4=B8=AA=E4=BA=BA=E8=B5=84=E6=96=99?= =?UTF-8?q?=E6=96=87=E5=AD=97=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/assets/wechat/edit_userinfo.html | 6 +++--- public/stylesheets/weui/weixin.css | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/public/assets/wechat/edit_userinfo.html b/public/assets/wechat/edit_userinfo.html index 3e4bf51f2..b0a00bba2 100644 --- a/public/assets/wechat/edit_userinfo.html +++ b/public/assets/wechat/edit_userinfo.html @@ -12,7 +12,7 @@
姓名
-
姓名不能为空
+
姓名不能为空
性别 @@ -31,8 +31,8 @@
- 电子邮箱地址不能为空 - 电子邮箱地址不合法 + 电子邮箱地址不能为空 + 电子邮箱地址不合法
提示 diff --git a/public/stylesheets/weui/weixin.css b/public/stylesheets/weui/weixin.css index d2d92a361..aa4cff972 100644 --- a/public/stylesheets/weui/weixin.css +++ b/public/stylesheets/weui/weixin.css @@ -43,6 +43,7 @@ blockquote {border:1px solid #d4d4d4; padding: 0.6em; margin: 5px 0.4em 5px 1.4e .mr25 {margin-right:25px;} .ml55 {margin-left:55px;} .mr55 {margin-right:55px;} +.ml65 {margin-left:65px;} .c-red {color:#e81a1a;} .c-blue {color:#269ac9;} .c-grey {color:#9a9a9a !important;} From ba4a1c64d9e18ebc8609f73615dc8a899fe359d2 Mon Sep 17 00:00:00 2001 From: cxt Date: Mon, 19 Sep 2016 17:14:14 +0800 Subject: [PATCH 11/50] =?UTF-8?q?=E4=BD=9C=E4=B8=9A=E5=8A=A8=E6=80=81?= =?UTF-8?q?=E7=9A=84=E9=87=8D=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/homework_common_controller.rb | 58 ++++++++----------- app/controllers/student_work_controller.rb | 15 ++--- app/controllers/users_controller.rb | 13 ++--- app/controllers/words_controller.rb | 11 ++-- app/helpers/application_helper.rb | 6 +- app/helpers/homework_common_helper.rb | 6 +- app/views/courses/_course_activity.html.erb | 2 +- .../_user_homework_search_list.html.erb | 2 +- app/views/courses/homework_search.js.erb | 4 +- .../homework_common/_alert_anonyoms.html.erb | 2 +- .../_alert_open_student_works.html.erb | 2 +- .../_homework_index_list.html.erb | 2 +- .../_set_evalutation_att.html.erb | 2 +- .../alert_forbidden_anonymous_comment.js.erb | 2 +- app/views/homework_common/edit.html.erb | 15 ++--- .../homework_common/open_student_works.js.erb | 9 ++- .../homework_common/score_rule_set.js.erb | 2 +- .../set_evaluation_attr.js.erb | 5 +- .../start_anonymous_comment.js.erb | 12 ++-- .../start_evaluation_set.js.erb | 2 +- .../stop_anonymous_comment.js.erb | 10 ++-- .../organizations/_org_activities.html.erb | 2 +- .../_alert_forbidden_anonymous.html.erb | 2 +- .../student_work/_relate_project.html.erb | 2 +- .../student_work/_set_score_rule.html.erb | 2 +- .../student_work/cancel_relate_project.js.erb | 11 ++-- .../forbidden_anonymous_comment.js.erb | 9 ++- app/views/student_work/set_score_rule.js.erb | 5 +- .../student_work/student_work_project.js.erb | 11 ++-- app/views/users/_course_homework.html.erb | 47 +++++++++------ app/views/users/_news_replies.html.erb | 4 +- app/views/users/_reply_banner.html.erb | 8 +-- app/views/users/_reply_to.html.erb | 3 +- app/views/users/_user_activities.html.erb | 2 +- app/views/users/_user_homework_list.html.erb | 11 +--- app/views/users/_user_homeworks_old.html.erb | 47 --------------- app/views/users/all_journals.js.erb | 2 +- app/views/words/destroy.js.erb | 9 ++- app/views/words/leave_homework_message.js.erb | 13 ++--- app/views/words/reply_to_homework.js.erb | 7 +-- public/javascripts/application.js | 5 +- 41 files changed, 149 insertions(+), 235 deletions(-) delete mode 100644 app/views/users/_user_homeworks_old.html.erb diff --git a/app/controllers/homework_common_controller.rb b/app/controllers/homework_common_controller.rb index b8c6a4a0a..b5d55df28 100644 --- a/app/controllers/homework_common_controller.rb +++ b/app/controllers/homework_common_controller.rb @@ -58,10 +58,9 @@ class HomeworkCommonController < ApplicationController def edit @user = User.current - @is_in_course = params[:is_in_course] + @hw_status = params[:hw_status].to_i @is_manage = params[:is_manage] - @course_activity = params[:course_activity].to_i - if @is_in_course.to_i == 1 || @course_activity == 1 + if @hw_status != 1 @left_nav_type = 3 respond_to do |format| format.html{render :layout => 'base_courses'} @@ -160,18 +159,17 @@ class HomeworkCommonController < ApplicationController create_works_list @homework end + @hw_status = params[:hw_status].to_i if params[:is_manage] == "1" redirect_to manage_or_receive_homeworks_user_path(User.current.id) elsif params[:is_manage] == "2" redirect_to my_homeworks_user_path(User.current.id) - elsif params[:is_in_course] == "1" - redirect_to homework_common_index_path(:course => @course.id) - elsif params[:is_in_course] == "0" - redirect_to user_homeworks_user_path(User.current.id) - elsif params[:is_in_course] == "-1" && params[:course_activity] == "0" + elsif @hw_status == 1 redirect_to user_path(User.current.id) - elsif params[:is_in_course] == "-1" && params[:course_activity] == "1" + elsif @hw_status == 2 redirect_to course_path(@course.id) + else + redirect_to homework_common_index_path(:course => @course.id) end end end @@ -181,14 +179,13 @@ class HomeworkCommonController < ApplicationController if @homework.destroy respond_to do |format| format.html { - if params[:is_in_course] == "1" - redirect_to homework_common_index_path(:course => @course.id) - elsif params[:is_in_course] == "0" - redirect_to user_homeworks_user_path(User.current.id) - elsif params[:is_in_course] == "-1" && params[:course_activity] == "0" - redirect_to user_path(User.current.id) - elsif params[:is_in_course] == "-1" && params[:course_activity] == "1" - redirect_to course_path(@course.id) + @hw_status = params[:hw_status].to_i + if @hw_status == 1 + redirect_to user_path(User.current.id) + elsif @hw_status == 2 + redirect_to course_path(@course.id) + else + redirect_to homework_common_index_path(:course => @course.id) end } end @@ -246,8 +243,7 @@ class HomeworkCommonController < ApplicationController @statue = 3 end @user_activity_id = params[:user_activity_id].to_i - @is_in_course = params[:is_in_course].to_i - @course_activity = params[:course_activity].to_i + @hw_status = params[:hw_status].to_i end #关闭匿评 @@ -265,8 +261,7 @@ class HomeworkCommonController < ApplicationController send_message_anonymous_comment(@homework, m_status = 3) Mailer.send_mail_anonymous_comment_close(@homework).deliver @user_activity_id = params[:user_activity_id].to_i - @is_in_course = params[:is_in_course].to_i - @course_activity = params[:course_activity].to_i + @hw_status = params[:hw_status].to_i respond_to do |format| format.js end @@ -294,8 +289,7 @@ class HomeworkCommonController < ApplicationController end @percent = format("%.2f",(@cur_size.to_f / ( @totle_size == 0 ? 1 : @totle_size)) * 100) @user_activity_id = params[:user_activity_id].to_i - @is_in_course = params[:is_in_course].to_i - @course_activity = params[:course_activity].to_i + @hw_status = params[:hw_status].to_i respond_to do |format| format.js end @@ -307,8 +301,7 @@ class HomeworkCommonController < ApplicationController else @user_activity_id = -1 end - @is_in_course = params[:is_in_course] if params[:is_in_course] - @course_activity = params[:course_activity] if params[:course_Activity] + @hw_status = params[:hw_status].to_i respond_to do |format| format.js end @@ -321,8 +314,7 @@ class HomeworkCommonController < ApplicationController @homework.update_column('is_open', 0) end @user_activity_id = params[:user_activity_id] - @is_in_course = params[:is_in_course] if params[:is_in_course] - @course_activity = params[:course_activity] if params[:course_Activity] + @hw_status = params[:hw_status].to_i end def alert_open_student_works @@ -331,8 +323,7 @@ class HomeworkCommonController < ApplicationController else @user_activity_id = -1 end - @is_in_course = params[:is_in_course] if params[:is_in_course] - @course_activity = params[:course_activity] if params[:course_Activity] + @hw_status = params[:hw_status].to_i respond_to do |format| format.js end @@ -363,8 +354,7 @@ class HomeworkCommonController < ApplicationController else @user_activity_id = -1 end - @is_in_course = params[:is_in_course] - @course_activity = params[:course_activity].to_i + @hw_status = params[:hw_status].to_i end #设置匿评参数 @@ -381,8 +371,7 @@ class HomeworkCommonController < ApplicationController @homework_detail_manual.evaluation_num = params[:evaluation_num] @homework_detail_manual.save @user_activity_id = params[:user_activity_id].to_i - @is_in_course = params[:is_in_course].to_i - @course_activity = params[:course_activity].to_i + @hw_status = params[:hw_status].to_i end end @@ -393,8 +382,7 @@ class HomeworkCommonController < ApplicationController else @user_activity_id = -1 end - @is_in_course = params[:is_in_course] - @course_activity = params[:course_activity].to_i + @hw_status = params[:hw_status].to_i end private diff --git a/app/controllers/student_work_controller.rb b/app/controllers/student_work_controller.rb index f6a97e66c..b259737a1 100644 --- a/app/controllers/student_work_controller.rb +++ b/app/controllers/student_work_controller.rb @@ -1012,8 +1012,7 @@ class StudentWorkController < ApplicationController redirect_to student_work_index_url(:homework => @homework.id) else @user_activity_id = params[:user_activity_id].to_i - @is_in_course = params[:is_in_course].to_i - @course_activity = params[:course_activity].to_i + @hw_status = params[:hw_status].to_i respond_to do |format| format.js end @@ -1035,8 +1034,7 @@ class StudentWorkController < ApplicationController student_work.save end @user_activity_id = params[:user_activity_id].to_i - @is_in_course = params[:is_in_course].to_i - @course_activity = params[:course_activity].to_i + @hw_status = params[:hw_status].to_i end def revise_attachment @@ -1058,8 +1056,7 @@ class StudentWorkController < ApplicationController def new_student_work_project @user_activity_id = params[:user_activity_id].to_i - @is_in_course = params[:is_in_course].to_i - @course_activity = params[:course_activity].to_i + @hw_status = params[:hw_status].to_i respond_to do |format| format.js end @@ -1078,8 +1075,7 @@ class StudentWorkController < ApplicationController @project.is_leader = 1 if @project.save @user_activity_id = params[:user_activity_id].to_i - @is_in_course = params[:is_in_course].to_i - @course_activity = params[:course_activity].to_i + @hw_status = params[:hw_status].to_i respond_to do |format| format.js end @@ -1129,8 +1125,7 @@ class StudentWorkController < ApplicationController relate_pro = StudentWorkProject.where("user_id = #{User.current.id} and homework_common_id = #{@homework.id}").first if relate_pro.destroy @user_activity_id = params[:user_activity_id].to_i - @is_in_course = params[:is_in_course].to_i - @course_activity = params[:course_activity].to_i + @hw_status = params[:hw_status].to_i respond_to do |format| format.js end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index bdbaf1738..87dc127a0 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -115,8 +115,7 @@ class UsersController < ApplicationController else @user_activity_id = -1 end - @is_in_course = params[:is_in_course].to_i - @course_activity = params[:course_activity].to_i + @hw_status = params[:hw_status].to_i when 'JournalsForMessage' @reply = JournalsForMessage.find params[:reply_id] @user_activity_id = params[:user_activity_id] @@ -1123,11 +1122,8 @@ class UsersController < ApplicationController quotes_homework = HomeworkCommon.find params[:quotes].to_i quotes_homework.update_column(:quotes, quotes_homework.quotes+1) end - if params[:is_in_course] == "1" - redirect_to homework_common_index_path(:course => homework.course_id) - else - redirect_to user_homeworks_user_path(User.current.id) - end + + redirect_to homework_common_index_path(:course => homework.course_id) end end else @@ -3573,8 +3569,7 @@ class UsersController < ApplicationController obj = HomeworkCommon.where('id = ?', params[:id].to_i).first @type = 'HomeworkCommon' @journals = obj.journals_for_messages.reorder("created_on desc") - @is_in_course = params[:is_in_course].to_i if params[:is_in_course] - @course_activity = params[:course_activity].to_i if params[:course_activity] + @hw_status = params[:hw_status].to_i if params[:hw_status] @is_teacher = User.current.allowed_to?(:as_teacher,obj.course) @user_activity_id = params[:user_activity_id].to_i if params[:user_activity_id] end diff --git a/app/controllers/words_controller.rb b/app/controllers/words_controller.rb index 499272706..f1bfc7a31 100644 --- a/app/controllers/words_controller.rb +++ b/app/controllers/words_controller.rb @@ -110,8 +110,7 @@ class WordsController < ApplicationController else @user_activity_id = -1 end - @is_in_course = params[:is_in_course].to_i - @course_activity = params[:course_activity].to_i + @hw_status = params[:hw_status].to_i elsif @journal_destroyed.jour_type == 'Syllabus' @syllabus = Syllabus.find @journal_destroyed.jour_id @count = @syllabus.journals_for_messages.count @@ -308,9 +307,8 @@ class WordsController < ApplicationController update_org_activity(@homework_common.class,@homework_common.id) respond_to do |format| format.js{ - @user_activity_id = params[:user_activity_id] - @is_in_course = params[:is_in_course] - @course_activity = params[:course_activity] + @user_activity_id = params[:user_activity_id].to_i + @hw_status = params[:hw_status].to_i @homework_common_id = params[:homework_common_id] } end @@ -344,8 +342,7 @@ class WordsController < ApplicationController respond_to do |format| format.js{ @user_activity_id = params[:user_activity_id].to_i - @is_in_course = params[:is_in_course].to_i - @course_activity = params[:course_activity].to_i + @hw_status = params[:hw_status].to_i } end else diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index d3b28fb20..d9a694eaa 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -2689,15 +2689,15 @@ module ApplicationHelper end #获取匿评相关连接代码 - def homework_anonymous_comment (homework, is_in_course, user_activity_id = -1, course_activity = -1) + def homework_anonymous_comment (homework, hw_status, user_activity_id = -1) if homework.homework_detail_manual.comment_status == 0 ||Time.parse(homework.end_time.to_s).strftime("%Y-%m-%d") >= Time.now.strftime("%Y-%m-%d") link = link_to "启动匿评","javascript:void(0)", :class => "postOptionLink", :title => "作业截止日期之前不可以启动匿评" elsif homework.student_works.has_committed.count >= 2 && homework.homework_detail_manual#作业份数大于2 case homework.homework_detail_manual.comment_status when 1 - link = link_to '启动匿评', Setting.protocol + "://" + Setting.host_name + "/homework_common/" + homework.id.to_s + "/alert_anonymous_comment?is_in_course=" + is_in_course.to_s + "&user_activity_id=" + user_activity_id.to_s + "&course_activity=" + course_activity.to_s, id: "#{homework.id}_start_anonymous_comment", remote: true, disable_with: '加载中...',:class => 'postOptionLink' + link = link_to '启动匿评', Setting.protocol + "://" + Setting.host_name + "/homework_common/" + homework.id.to_s + "/alert_anonymous_comment?hw_status=" + hw_status.to_s + "&user_activity_id=" + user_activity_id.to_s, id: "#{homework.id}_start_anonymous_comment", remote: true, disable_with: '加载中...',:class => 'postOptionLink' when 2 - link = link_to '关闭匿评', Setting.protocol + "://" + Setting.host_name + "/homework_common/" + homework.id.to_s + "/alert_anonymous_comment?is_in_course=" + is_in_course.to_s + "&user_activity_id=" + user_activity_id.to_s + "&course_activity=" + course_activity.to_s, id: "#{homework.id}_stop_anonymous_comment", remote: true,:class => 'postOptionLink' + link = link_to '关闭匿评', Setting.protocol + "://" + Setting.host_name + "/homework_common/" + homework.id.to_s + "/alert_anonymous_comment?hw_status=" + hw_status.to_s + "&user_activity_id=" + user_activity_id.to_s, id: "#{homework.id}_stop_anonymous_comment", remote: true,:class => 'postOptionLink' when 3 # link = link_to "匿评结束","javascript:void(0)", :class => "postOptionLink", :title => "匿评结束" end diff --git a/app/helpers/homework_common_helper.rb b/app/helpers/homework_common_helper.rb index 2d3c72c20..d79a7a432 100644 --- a/app/helpers/homework_common_helper.rb +++ b/app/helpers/homework_common_helper.rb @@ -57,12 +57,12 @@ module HomeworkCommonHelper end #根据传入作业确定跳转到开启匿评还是关闭匿评功能 - def alert_anonyoms_path homework,homework_detail_manual,user_activity_id,is_in_course,course_activity + def alert_anonyoms_path homework,homework_detail_manual,user_activity_id,hw_status link = "" if homework_detail_manual.comment_status == 1 - link = start_anonymous_comment_homework_common_url homework.id,:user_activity_id=>user_activity_id,:is_in_course=>is_in_course,:course_activity=>course_activity + link = start_anonymous_comment_homework_common_url homework.id,:user_activity_id=>user_activity_id,:hw_status=>hw_status elsif homework_detail_manual.comment_status == 2 - link = stop_anonymous_comment_homework_common_url homework.id,:user_activity_id=>user_activity_id,:is_in_course=>is_in_course,:course_activity=>course_activity + link = stop_anonymous_comment_homework_common_url homework.id,:user_activity_id=>user_activity_id,:hw_status=>hw_status end link end diff --git a/app/views/courses/_course_activity.html.erb b/app/views/courses/_course_activity.html.erb index c71e5ade4..a7f99f2b0 100644 --- a/app/views/courses/_course_activity.html.erb +++ b/app/views/courses/_course_activity.html.erb @@ -60,7 +60,7 @@ <% act = activity.course_act %> <% case activity.course_act_type.to_s %> <% when 'HomeworkCommon' %> - <%= render :partial => 'users/course_homework', :locals => {:activity => act, :user_activity_id => activity.id, :course_activity => 1} %> + <%= render :partial => 'users/course_homework', :locals => {:activity => act, :user_activity_id => activity.id, :hw_status => 2} %> <% when 'News' %> <%= render :partial => 'users/course_news', :locals => {:activity => act, :user_activity_id => activity.id} %> <% when 'Message' %> diff --git a/app/views/courses/_user_homework_search_list.html.erb b/app/views/courses/_user_homework_search_list.html.erb index 750e7537c..ecc0d1d7e 100644 --- a/app/views/courses/_user_homework_search_list.html.erb +++ b/app/views/courses/_user_homework_search_list.html.erb @@ -26,7 +26,7 @@ } } - <%= render :partial => 'users/user_homework_detail', :locals => {:homework_common => homework_common,:is_in_course => is_in_course} %> + <%= render :partial => 'users/course_homework', :locals => {:activity => homework_common,:user_activity_id => homework_common.id, :hw_status => 3} %> <% end%> <% if homework_commons.count == 10%> <%= link_to "点击展开更多",homework_search_course_path(course_id,:page => page,:search=>search),:id => "user_show_more_homework",:remote => "true",:class => "loadMore f_grey"%> diff --git a/app/views/courses/homework_search.js.erb b/app/views/courses/homework_search.js.erb index 3c644ad9e..5e2f81f01 100644 --- a/app/views/courses/homework_search.js.erb +++ b/app/views/courses/homework_search.js.erb @@ -1,5 +1,5 @@ <% if @page == 0 %> - $("#user_homework_list").replaceWith("<%= escape_javascript( render :partial => 'courses/user_homework_search_list',:locals => {:homework_commons => @homeworks, :page => @page, :is_in_course => 1,:course_id => @course.id,:search=>@search} )%>"); + $("#user_homework_list").replaceWith("<%= escape_javascript( render :partial => 'courses/user_homework_search_list',:locals => {:homework_commons => @homeworks, :page => @page, :course_id => @course.id,:search=>@search} )%>"); <% else %> - $("#user_show_more_homework").replaceWith("<%= escape_javascript( render :partial => 'courses/user_homework_search_list',:locals => {:homework_commons => @homeworks, :page => @page, :is_in_course => 1,:course_id => @course.id,:search=>@search} )%>"); + $("#user_show_more_homework").replaceWith("<%= escape_javascript( render :partial => 'courses/user_homework_search_list',:locals => {:homework_commons => @homeworks, :page => @page, :course_id => @course.id,:search=>@search} )%>"); <% end %> \ No newline at end of file diff --git a/app/views/homework_common/_alert_anonyoms.html.erb b/app/views/homework_common/_alert_anonyoms.html.erb index 79840cb35..8834d6746 100644 --- a/app/views/homework_common/_alert_anonyoms.html.erb +++ b/app/views/homework_common/_alert_anonyoms.html.erb @@ -32,7 +32,7 @@

<% end %>
- + 确  定 diff --git a/app/views/homework_common/_alert_open_student_works.html.erb b/app/views/homework_common/_alert_open_student_works.html.erb index 73c7f0b47..4eda8e458 100644 --- a/app/views/homework_common/_alert_open_student_works.html.erb +++ b/app/views/homework_common/_alert_open_student_works.html.erb @@ -22,7 +22,7 @@

<% end %>
- + 确  定 diff --git a/app/views/homework_common/_homework_index_list.html.erb b/app/views/homework_common/_homework_index_list.html.erb index 9b11017e8..dcbe8d411 100644 --- a/app/views/homework_common/_homework_index_list.html.erb +++ b/app/views/homework_common/_homework_index_list.html.erb @@ -1,4 +1,4 @@ -<%= render :partial => 'users/user_homework_list', :locals => {:homework_commons => homework_commons,:page => 0,:is_in_course => 1,:course_id => course_id} %> +<%= render :partial => 'users/user_homework_list', :locals => {:homework_commons => homework_commons,:page => 0,:course_id => course_id} %>
    diff --git a/app/views/homework_common/_set_evalutation_att.html.erb b/app/views/homework_common/_set_evalutation_att.html.erb index bc4e8e733..eff138305 100644 --- a/app/views/homework_common/_set_evalutation_att.html.erb +++ b/app/views/homework_common/_set_evalutation_att.html.erb @@ -1,5 +1,5 @@
    - <%= form_for('new_form',:url => {:controller => 'homework_common',:action => 'set_evaluation_attr',:homework => @homework.id,:user_activity_id=>user_activity_id,:is_in_course=>is_in_course,:course_activity=>course_activity},:method => "post",:remote => true) do |f|%> + <%= form_for('new_form',:url => {:controller => 'homework_common',:action => 'set_evaluation_attr',:homework => @homework.id,:user_activity_id=>user_activity_id,:hw_status=>hw_status},:method => "post",:remote => true) do |f|%> 匿评设置
    diff --git a/app/views/homework_common/alert_forbidden_anonymous_comment.js.erb b/app/views/homework_common/alert_forbidden_anonymous_comment.js.erb index 1e81df9e7..354f217e2 100644 --- a/app/views/homework_common/alert_forbidden_anonymous_comment.js.erb +++ b/app/views/homework_common/alert_forbidden_anonymous_comment.js.erb @@ -1,4 +1,4 @@ -$('#ajax-modal').html('<%= escape_javascript(render :partial => 'student_work/alert_forbidden_anonymous', :locals => {:user_activity_id => @user_activity_id,:is_in_course => @is_in_course,:course_activity => @course_activity}) %>'); +$('#ajax-modal').html('<%= escape_javascript(render :partial => 'student_work/alert_forbidden_anonymous', :locals => {:user_activity_id => @user_activity_id,:hw_status => @hw_status}) %>'); showModal('ajax-modal', '500px'); $('#ajax-modal').siblings().remove(); $('#ajax-modal').before("" + diff --git a/app/views/homework_common/edit.html.erb b/app/views/homework_common/edit.html.erb index 4a3de027b..ec5ecc31c 100644 --- a/app/views/homework_common/edit.html.erb +++ b/app/views/homework_common/edit.html.erb @@ -1,5 +1,5 @@ -
    +
    编辑作业
    @@ -56,8 +54,7 @@ <% end %> <%= form_for @homework do |f| %> - - +
    <%= render :partial => 'users/user_homework_form', :locals => { :homework => @homework,:f => f,:edit_mode => true } %> diff --git a/app/views/homework_common/open_student_works.js.erb b/app/views/homework_common/open_student_works.js.erb index e171e65d1..2dd4a88a4 100644 --- a/app/views/homework_common/open_student_works.js.erb +++ b/app/views/homework_common/open_student_works.js.erb @@ -1,7 +1,6 @@ -<% if @user_activity_id.to_i == -1 %> -$("#homework_common_<%= @homework.id %>").replaceWith("<%= escape_javascript(render :partial => "users/user_homework_detail",:locals => {:homework_common => @homework, :is_in_course => @is_in_course})%>"); -sd_create_editor_from_data(<%= @homework.id%>,"","100%", "<%=@homework.class.to_s%>"); -<% else %> -$("#user_activity_<%= @user_activity_id%>").replaceWith("<%= escape_javascript(render :partial => 'users/course_homework', :locals => {:activity => @homework,:user_activity_id =>@user_activity_id,:course_activity=>@course_activity}) %>"); +$("#user_activity_<%= @user_activity_id%>").replaceWith("<%= escape_javascript(render :partial => 'users/course_homework', :locals => {:activity => @homework,:user_activity_id =>@user_activity_id,:hw_status=>@hw_status}) %>"); +<% if @user_activity_id != @homework.id %> sd_create_editor_from_data(<%= @user_activity_id%>,"","100%", "UserActivity"); +<% else %> +sd_create_editor_from_data(<%= @homework.id%>,"","100%", "<%=@homework.class.to_s%>"); <% end %> \ No newline at end of file diff --git a/app/views/homework_common/score_rule_set.js.erb b/app/views/homework_common/score_rule_set.js.erb index f83b51b55..2ea1fe4a5 100644 --- a/app/views/homework_common/score_rule_set.js.erb +++ b/app/views/homework_common/score_rule_set.js.erb @@ -1,4 +1,4 @@ -$('#ajax-modal').html('<%= escape_javascript(render :partial => 'student_work/set_score_rule',:locals => {:homework => @homework, :student_path => false, :user_activity_id => @user_activity_id,:is_in_course => @is_in_course,:course_activity =>@course_activity,:remote=>true}) %>'); +$('#ajax-modal').html('<%= escape_javascript(render :partial => 'student_work/set_score_rule',:locals => {:homework => @homework, :student_path => false, :user_activity_id => @user_activity_id,:hw_status => @hw_status,:remote=>true}) %>'); showModal('ajax-modal', '350px'); $('#ajax-modal').siblings().remove(); $('#ajax-modal').before("" + diff --git a/app/views/homework_common/set_evaluation_attr.js.erb b/app/views/homework_common/set_evaluation_attr.js.erb index 987abd351..42bc842bc 100644 --- a/app/views/homework_common/set_evaluation_attr.js.erb +++ b/app/views/homework_common/set_evaluation_attr.js.erb @@ -1,8 +1,7 @@ clickCanel(); -<% if @user_activity_id != -1 %> -$("#user_activity_<%= @user_activity_id%>").replaceWith("<%= escape_javascript(render :partial => 'users/course_homework', :locals => {:activity => @homework,:user_activity_id =>@user_activity_id,:course_activity=>@courae_activity}) %>"); +$("#user_activity_<%= @user_activity_id%>").replaceWith("<%= escape_javascript(render :partial => 'users/course_homework', :locals => {:activity => @homework,:user_activity_id =>@user_activity_id,:hw_status=>@hw_status}) %>"); +<% if @user_activity_id != @homework.id %> sd_create_editor_from_data(<%= @user_activity_id%>,"","100%", "UserActivity"); <% else %> -$("#homework_common_<%= @homework.id %>").replaceWith("<%= escape_javascript(render :partial => 'users/user_homework_detail', :locals => {:homework_common => @homework,:is_in_course => @is_in_course}) %>"); sd_create_editor_from_data(<%= @homework.id%>,"","100%", "<%=@homework.class.to_s%>"); <% end %> \ No newline at end of file diff --git a/app/views/homework_common/start_anonymous_comment.js.erb b/app/views/homework_common/start_anonymous_comment.js.erb index 91a68011e..94db99dd8 100644 --- a/app/views/homework_common/start_anonymous_comment.js.erb +++ b/app/views/homework_common/start_anonymous_comment.js.erb @@ -1,13 +1,11 @@ <% if @statue == 1%> alert('启动成功'); - <% if @user_activity_id == -1 %> - $("#homework_common_<%= @homework.id %>").replaceWith("<%= escape_javascript(render :partial => "users/user_homework_detail",:locals => {:homework_common => @homework, :is_in_course => @is_in_course})%>"); - $("#evaluation_start_time_<%=@homework.id %>").html("匿评开启时间:<%=format_time(Time.now) %>"); - sd_create_editor_from_data(<%= @homework.id%>,"","100%", "<%=@homework.class.to_s%>"); - <% else %> - $("#user_activity_<%= @user_activity_id%>").replaceWith("<%= escape_javascript(render :partial => 'users/course_homework', :locals => {:activity => @homework,:user_activity_id =>@user_activity_id,:course_activity=>@course_activity}) %>"); - $("#evaluation_start_time_<%=@user_activity_id %>").html("匿评开启时间:<%=format_time(Time.now) %>"); + $("#user_activity_<%= @user_activity_id%>").replaceWith("<%= escape_javascript(render :partial => 'users/course_homework', :locals => {:activity => @homework,:user_activity_id =>@user_activity_id,:hw_status=>@hw_status}) %>"); + $("#evaluation_start_time_<%=@user_activity_id %>").html("匿评开启时间:<%=format_time(Time.now) %>"); + <% if @user_activity_id != @homework.id %> sd_create_editor_from_data(<%= @user_activity_id%>,"","100%", "UserActivity"); + <% else %> + sd_create_editor_from_data(<%= @homework.id%>,"","100%", "<%=@homework.class.to_s%>"); <% end %> /*$("#<%#= @homework.id %>_start_anonymous_comment").replaceWith('<%#= escape_javascript(link_to "关闭匿评", alert_anonymous_comment_homework_common_path(@homework), remote: true, id:"#{@homework.id}_stop_anonymous_comment",:class => "postOptionLink")%>');*/ <% elsif @statue == 2 %> diff --git a/app/views/homework_common/start_evaluation_set.js.erb b/app/views/homework_common/start_evaluation_set.js.erb index 6ed74d0f0..3ece646dc 100644 --- a/app/views/homework_common/start_evaluation_set.js.erb +++ b/app/views/homework_common/start_evaluation_set.js.erb @@ -1,4 +1,4 @@ -$('#ajax-modal').html('<%= escape_javascript(render :partial => 'homework_common/set_evalutation_att',:locals => {:user_activity_id => @user_activity_id,:is_in_course => @is_in_course,:course_activity =>@course_activity,:remote=>true}) %>'); +$('#ajax-modal').html('<%= escape_javascript(render :partial => 'homework_common/set_evalutation_att',:locals => {:user_activity_id => @user_activity_id,:hw_status => @hw_status,:remote=>true}) %>'); var datepickerOptions={dateFormat: 'yy-mm-dd', firstDay: 0, showOn: 'button', buttonImageOnly: true, buttonImage: '/images/public_icon.png', showButtonPanel: true, showWeek: true, showOtherMonths: true, selectOtherMonths: true}; showModal('ajax-modal', '350px'); $('#ajax-modal').siblings().remove(); diff --git a/app/views/homework_common/stop_anonymous_comment.js.erb b/app/views/homework_common/stop_anonymous_comment.js.erb index 874374476..c540c323d 100644 --- a/app/views/homework_common/stop_anonymous_comment.js.erb +++ b/app/views/homework_common/stop_anonymous_comment.js.erb @@ -1,12 +1,10 @@ alert('关闭成功'); -<% if @user_activity_id == -1 %> -$("#homework_common_<%= @homework.id %>").replaceWith("<%= escape_javascript(render :partial => "users/user_homework_detail",:locals => {:homework_common => @homework, :is_in_course => @is_in_course})%>"); +$("#user_activity_<%= @user_activity_id%>").replaceWith("<%= escape_javascript(render :partial => 'users/course_homework', :locals => {:activity => @homework,:user_activity_id =>@user_activity_id,:hw_status=>@hw_status}) %>"); $("#evaluation_end_time_<%=@homework.id %>").html("匿评关闭时间:<%=format_time(Time.now) %>"); -sd_create_editor_from_data(<%= @homework.id%>,"","100%", "<%=@homework.class.to_s%>"); +<% if @user_activity_id != @homework.id %> +sd_create_editor_from_data(<%= @user_activity_id%>,"","100%", "UserActivity"); <% else %> -$("#user_activity_<%= @user_activity_id%>").replaceWith("<%= escape_javascript(render :partial => 'users/course_homework', :locals => {:activity => @homework,:user_activity_id =>@user_activity_id,:course_activity=>@course_activity}) %>"); -$("#evaluation_end_time_<%=@user_activity_id %>").html("匿评关闭时间:<%=format_time(Time.now) %>"); -sd_create_editor_from_data(<%= @user_activity_id%>,"","100%", 'UserActivity'); +sd_create_editor_from_data(<%= @homework.id%>,"","100%", "<%=@homework.class.to_s%>"); <% end %> /* $("#<%#= @homework.id %>_stop_anonymous_comment").replaceWith('');*/ diff --git a/app/views/organizations/_org_activities.html.erb b/app/views/organizations/_org_activities.html.erb index 4a78ec3c0..ca70add10 100644 --- a/app/views/organizations/_org_activities.html.erb +++ b/app/views/organizations/_org_activities.html.erb @@ -63,7 +63,7 @@ <% if act.container_type == 'Course' %> <% case act.org_act_type.to_s %> <% when 'HomeworkCommon' %> - <%= render :partial => 'users/course_homework', :locals => {:activity => HomeworkCommon.find(act.org_act_id),:user_activity_id =>act.id,:course_activity => 0} %> + <%= render :partial => 'users/course_homework', :locals => {:activity => HomeworkCommon.find(act.org_act_id),:user_activity_id =>act.id, :hw_status => 4} %> <% when 'News' %> <%= render :partial => 'users/course_news', :locals => {:activity => News.find(act.org_act_id),:user_activity_id =>act.id} %> <% when 'Message'%> diff --git a/app/views/student_work/_alert_forbidden_anonymous.html.erb b/app/views/student_work/_alert_forbidden_anonymous.html.erb index 55f21048f..d1cdd8d57 100644 --- a/app/views/student_work/_alert_forbidden_anonymous.html.erb +++ b/app/views/student_work/_alert_forbidden_anonymous.html.erb @@ -5,7 +5,7 @@ 禁用匿评后学生将不能对作品进行互评,且匿评不能再开启,是否确定禁用匿评?

    - + 确  定 diff --git a/app/views/student_work/_relate_project.html.erb b/app/views/student_work/_relate_project.html.erb index 9a1fcead5..24eac58ef 100644 --- a/app/views/student_work/_relate_project.html.erb +++ b/app/views/student_work/_relate_project.html.erb @@ -1,7 +1,7 @@
    关联项目 - <%=form_tag url_for(:controller=>'student_work',:action=>'student_work_project',:homework=>@homework.id,:user_activity_id=>@user_activity_id,:is_in_course=>@is_in_course,:course_activity =>@course_activity),:id =>'student_work_relate_project',:class=>'resourcesSearchBox',:remote => true do %> + <%=form_tag url_for(:controller=>'student_work',:action=>'student_work_project',:homework=>@homework.id,:user_activity_id=>@user_activity_id,:hw_status =>@hw_status),:id =>'student_work_relate_project',:class=>'resourcesSearchBox',:remote => true do %>
    diff --git a/app/views/student_work/_set_score_rule.html.erb b/app/views/student_work/_set_score_rule.html.erb index ce6f12eb8..d9ce9f6b2 100644 --- a/app/views/student_work/_set_score_rule.html.erb +++ b/app/views/student_work/_set_score_rule.html.erb @@ -3,7 +3,7 @@ <% render :partial => 'student_work/set_score_rule_detail', :locals => {:homework => homework, :f => f}%> <% end%> <% else %> - <%= form_for('new_form',:url => {:controller => 'student_work',:action => 'set_score_rule',:homework => homework.id,:user_activity_id=>user_activity_id,:is_in_course=>is_in_course,:course_activity=>course_activity},:method => "post",:remote => true) do |f|%> + <%= form_for('new_form',:url => {:controller => 'student_work',:action => 'set_score_rule',:homework => homework.id,:user_activity_id=>user_activity_id,:hw_status=>hw_status},:method => "post",:remote => true) do |f|%> <% render :partial => 'student_work/set_score_rule_detail', :locals => {:homework => homework, :f => f}%> <% end%> <% end %> \ No newline at end of file diff --git a/app/views/student_work/cancel_relate_project.js.erb b/app/views/student_work/cancel_relate_project.js.erb index f5caf2e8f..2dd4a88a4 100644 --- a/app/views/student_work/cancel_relate_project.js.erb +++ b/app/views/student_work/cancel_relate_project.js.erb @@ -1,7 +1,6 @@ -<% if @user_activity_id != -1 %> -$("#user_activity_<%= @user_activity_id%>").replaceWith("<%= escape_javascript(render :partial => 'users/course_homework', :locals => {:activity => @homework,:user_activity_id =>@user_activity_id,:course_activity => @course_activity}) %>"); -sd_create_editor_from_data(<%= @user_activity_id%>,"","100%"); -<% else%> -$("#homework_common_<%= @homework.id %>").replaceWith("<%= escape_javascript(render :partial => 'users/user_homework_detail', :locals => {:homework_common => @homework,:is_in_course => @is_in_course}) %>"); -sd_create_editor_from_data(<%= @homework.id%>,"","100%"); +$("#user_activity_<%= @user_activity_id%>").replaceWith("<%= escape_javascript(render :partial => 'users/course_homework', :locals => {:activity => @homework,:user_activity_id =>@user_activity_id,:hw_status=>@hw_status}) %>"); +<% if @user_activity_id != @homework.id %> +sd_create_editor_from_data(<%= @user_activity_id%>,"","100%", "UserActivity"); +<% else %> +sd_create_editor_from_data(<%= @homework.id%>,"","100%", "<%=@homework.class.to_s%>"); <% end %> \ No newline at end of file diff --git a/app/views/student_work/forbidden_anonymous_comment.js.erb b/app/views/student_work/forbidden_anonymous_comment.js.erb index d869cba58..2dd4a88a4 100644 --- a/app/views/student_work/forbidden_anonymous_comment.js.erb +++ b/app/views/student_work/forbidden_anonymous_comment.js.erb @@ -1,7 +1,6 @@ -<% if @user_activity_id == -1 %> -$("#homework_common_<%= @homework.id %>").replaceWith("<%= escape_javascript(render :partial => "users/user_homework_detail",:locals => {:homework_common => @homework, :is_in_course => @is_in_course})%>"); -sd_create_editor_from_data(<%= @homework.id%>,"","100%", "<%=@homework.class.to_s%>"); -<% else %> -$("#user_activity_<%= @user_activity_id%>").replaceWith("<%= escape_javascript(render :partial => 'users/course_homework', :locals => {:activity => @homework,:user_activity_id =>@user_activity_id,:course_activity=>@course_activity}) %>"); +$("#user_activity_<%= @user_activity_id%>").replaceWith("<%= escape_javascript(render :partial => 'users/course_homework', :locals => {:activity => @homework,:user_activity_id =>@user_activity_id,:hw_status=>@hw_status}) %>"); +<% if @user_activity_id != @homework.id %> sd_create_editor_from_data(<%= @user_activity_id%>,"","100%", "UserActivity"); +<% else %> +sd_create_editor_from_data(<%= @homework.id%>,"","100%", "<%=@homework.class.to_s%>"); <% end %> \ No newline at end of file diff --git a/app/views/student_work/set_score_rule.js.erb b/app/views/student_work/set_score_rule.js.erb index fa1308873..b50f61e36 100644 --- a/app/views/student_work/set_score_rule.js.erb +++ b/app/views/student_work/set_score_rule.js.erb @@ -1,8 +1,7 @@ clickCanel(); -<% if @user_activity_id != -1 %> - $("#user_activity_<%= @user_activity_id%>").replaceWith("<%= escape_javascript(render :partial => 'users/course_homework', :locals => {:activity => @homework,:user_activity_id =>@user_activity_id,:course_activity=>@courae_activity}) %>"); +$("#user_activity_<%= @user_activity_id%>").replaceWith("<%= escape_javascript(render :partial => 'users/course_homework', :locals => {:activity => @homework,:user_activity_id =>@user_activity_id,:hw_status=>@hw_status}) %>"); +<% if @user_activity_id != @homework.id %> sd_create_editor_from_data(<%= @user_activity_id%>,"","100%", "UserActivity"); <% else %> - $("#homework_common_<%= @homework.id %>").replaceWith("<%= escape_javascript(render :partial => 'users/user_homework_detail', :locals => {:homework_common => @homework,:is_in_course => @is_in_course}) %>"); sd_create_editor_from_data(<%= @homework.id%>,"","100%", "<%=@homework.class.to_s%>"); <% end %> diff --git a/app/views/student_work/student_work_project.js.erb b/app/views/student_work/student_work_project.js.erb index 217a68422..5739f07a7 100644 --- a/app/views/student_work/student_work_project.js.erb +++ b/app/views/student_work/student_work_project.js.erb @@ -1,8 +1,7 @@ hideModal("#popbox02"); -<% if @user_activity_id != -1 %> - $("#user_activity_<%= @user_activity_id%>").replaceWith("<%= escape_javascript(render :partial => 'users/course_homework', :locals => {:activity => @homework,:user_activity_id =>@user_activity_id,:course_activity => @course_activity}) %>"); - sd_create_editor_from_data(<%= @user_activity_id%>,"","100%"); -<% else%> - $("#homework_common_<%= @homework.id %>").replaceWith("<%= escape_javascript(render :partial => 'users/user_homework_detail', :locals => {:homework_common => @homework,:is_in_course => @is_in_course}) %>"); - sd_create_editor_from_data(<%= @homework.id%>,"","100%"); +$("#user_activity_<%= @user_activity_id%>").replaceWith("<%= escape_javascript(render :partial => 'users/course_homework', :locals => {:activity => @homework,:user_activity_id =>@user_activity_id,:hw_status=>@hw_status}) %>"); +<% if @user_activity_id != @homework.id %> +sd_create_editor_from_data(<%= @user_activity_id%>,"","100%", "UserActivity"); +<% else %> +sd_create_editor_from_data(<%= @homework.id%>,"","100%", "<%=@homework.class.to_s%>"); <% end %> \ No newline at end of file diff --git a/app/views/users/_course_homework.html.erb b/app/views/users/_course_homework.html.erb index cf5f5881b..7e8c1a6aa 100644 --- a/app/views/users/_course_homework.html.erb +++ b/app/views/users/_course_homework.html.erb @@ -11,12 +11,20 @@ TO <%=link_to activity.course.syllabus.title, syllabus_path(activity.course.syllabus_id), :class => 'newsBlue ml15', :target => '_blank' %> - <%= link_to activity.course.name.to_s+" | 班级作业", homework_common_index_path(:course => activity.course.id, :host=> Setting.host_course), :class => "newsBlue"%> + <% if hw_status == 3 || hw_status == 5 %> + <%= link_to activity.course.name, course_path(activity.course_id), :class => "newsBlue"%> + <% else %> + <%= link_to activity.course.name.to_s+" | 班级作业", homework_common_index_path(:course => activity.course.id, :host=> Setting.host_course), :class => "newsBlue"%> + <% end %>
    - <%=get_hw_status(activity).html_safe %>
    @@ -31,12 +39,12 @@ <% works = cur_user_works_for_homework activity %> <% if works.nil? && projects.nil? %>
    - <%=link_to "关联项目",new_student_work_project_student_work_index_path(:homework => activity.id,:is_in_course=>-1,:user_activity_id=>user_activity_id,:course_activity=>course_activity),remote: true,:class=> 'c_blue', :title=> '请各组长关联作业项目' %> - <%#= relate_project(activity,is_teacher,-1,user_activity_id,course_activity) %> + <%=link_to "关联项目",new_student_work_project_student_work_index_path(:homework => activity.id,:hw_status=>hw_status,:user_activity_id=>user_activity_id),remote: true,:class=> 'c_blue', :title=> '请各组长关联作业项目' %> + <%#= relate_project(activity,is_teacher,-1,user_activity_id) %>
    <% elsif works.nil? %>
    - <%=link_to "取消关联",cancel_relate_project_student_work_index_path(:homework => activity.id,:is_in_course=>-1,:user_activity_id=>user_activity_id,:course_activity=>course_activity), :confirm => "您确定要取消关联吗?", remote: true,:class => "c_blue", :title=> '取消关联项目' %> + <%=link_to "取消关联",cancel_relate_project_student_work_index_path(:homework => activity.id,:hw_status=>hw_status,:user_activity_id=>user_activity_id), :confirm => "您确定要取消关联吗?", remote: true,:class => "c_blue", :title=> '取消关联项目' %>
    <% end %> <% end %> @@ -76,6 +84,11 @@ <% elsif activity.homework_detail_manual && activity.homework_detail_manual.comment_status >= 2 && activity.anonymous_comment == 0%>
    匿评截止时间:<%= activity.homework_detail_manual.evaluation_end.to_s %> 23:59
    <% end %> + <% if activity.homework_detail_manual.comment_status == 0 && !activity.publish_time.nil? %> +
    + <%= l(:label_publish_time)%>:<%= activity.publish_time%> 00:00 +
    + <% end %>
    <%=render :partial =>"users/intro_content", :locals=>{:user_activity_id =>user_activity_id, :content=>activity.description} %> @@ -227,35 +240,35 @@
    • - <%= link_to l(:button_edit),edit_homework_common_path(activity,:is_in_course => -1,:course_activity=>course_activity), :class => "postOptionLink"%> + <%= link_to l(:button_edit),edit_homework_common_path(activity, :hw_status => hw_status), :class => "postOptionLink"%>
    • - <%= link_to(l(:label_bid_respond_delete), homework_common_path(activity,:is_in_course => -1,:course_activity=>course_activity),:method => 'delete', :confirm => l(:text_are_you_sure), :class => "postOptionLink") %> + <%= link_to(l(:label_bid_respond_delete), homework_common_path(activity, :hw_status => hw_status),:method => 'delete', :confirm => l(:text_are_you_sure), :class => "postOptionLink") %>
    • - <%= link_to("评分设置", score_rule_set_homework_common_path(activity,:user_activity_id => user_activity_id, :is_in_course => -1,:course_activity=>course_activity),:class => "postOptionLink", :remote => true) %> + <%= link_to("评分设置", score_rule_set_homework_common_path(activity,:user_activity_id => user_activity_id, :hw_status => hw_status),:class => "postOptionLink", :remote => true) %>
    • <% if activity.anonymous_comment == 0 %>
    • - <%= link_to("匿评设置", start_evaluation_set_homework_common_path(activity,:user_activity_id => user_activity_id, :is_in_course => -1,:course_activity=>course_activity),:class => "postOptionLink", :remote => true) if activity.homework_detail_manual.comment_status == 1%> + <%= link_to("匿评设置", start_evaluation_set_homework_common_path(activity,:user_activity_id => user_activity_id, :hw_status => hw_status),:class => "postOptionLink", :remote => true) if activity.homework_detail_manual.comment_status == 1%>
    • - <%= homework_anonymous_comment activity,-1,user_activity_id,course_activity %> + <%= homework_anonymous_comment activity,hw_status,user_activity_id %>
    • <% end %> <% if activity.anonymous_comment == 0 && (comment_status == 0 || comment_status == 1)%>
    • - <%= link_to("禁用匿评", alert_forbidden_anonymous_comment_homework_common_path(activity,:user_activity_id => user_activity_id,:course_activity=>course_activity),:class => "postOptionLink", + <%= link_to("禁用匿评", alert_forbidden_anonymous_comment_homework_common_path(activity,:user_activity_id => user_activity_id),:class => "postOptionLink", :title => "匿评是同学之间的双盲互评过程:每个同学将评阅系统分配给他/她的若干个作品", :remote => true)%>
    • <% end %> <% if (activity.anonymous_comment == 1 && activity.is_open == 0) || (activity.anonymous_comment == 0 && comment_status == 3 && activity.is_open == 0) %>
    • - <%= link_to("公开作品", alert_open_student_works_homework_common_path(activity,:user_activity_id => user_activity_id, :is_in_course => -1,:course_activity=>course_activity),:class => "postOptionLink", :remote => true)%> + <%= link_to("公开作品", alert_open_student_works_homework_common_path(activity,:user_activity_id => user_activity_id, :hw_status => hw_status),:class => "postOptionLink", :remote => true)%>
    • <% elsif activity.is_open == 1 %>
    • - <%= link_to("取消公开", alert_open_student_works_homework_common_path(activity,:user_activity_id => user_activity_id, :is_in_course => -1,:course_activity=>course_activity),:class => "postOptionLink", :remote => true)%> + <%= link_to("取消公开", alert_open_student_works_homework_common_path(activity,:user_activity_id => user_activity_id, :hw_status => hw_status),:class => "postOptionLink", :remote => true)%>
    • <% end %>
    @@ -269,12 +282,12 @@ <% count=activity.journals_for_messages.count %>
    - <%= render :partial => 'users/reply_banner', :locals => {:count => count, :activity => activity, :user_activity_id => user_activity_id, :is_in_course => -1,:course_activity=>course_activity} %> + <%= render :partial => 'users/reply_banner', :locals => {:count => count, :activity => activity, :user_activity_id => user_activity_id, :hw_status => hw_status} %> <% comments = activity.journals_for_messages.reorder("created_on desc").limit(3) %> <% if count > 0 %>
    - <%=render :partial => 'users/news_replies', :locals => {:comments => comments, :type => 'HomeworkCommon', :is_in_course => -1,:course_activity=>course_activity, :is_teacher => is_teacher, :user_activity_id => user_activity_id, :activity_id => activity.id} %> + <%=render :partial => 'users/news_replies', :locals => {:comments => comments, :type => 'HomeworkCommon', :hw_status => hw_status, :is_teacher => is_teacher, :user_activity_id => user_activity_id, :activity_id => activity.id} %>
    <% end %> @@ -285,7 +298,7 @@
    <%= form_for('new_form',:url => {:controller => 'words', :action => 'leave_homework_message', :id => activity.id},:method => "post", :remote => true) do |f|%> <%= hidden_field_tag 'user_activity_id',params[:user_activity_id],:value =>user_activity_id %> - <%= hidden_field_tag 'course_activity',params[:course_activity],:value =>course_activity %> + <%= hidden_field_tag 'hw_status',params[:hw_status],:value =>hw_status %>
    diff --git a/app/views/users/_news_replies.html.erb b/app/views/users/_news_replies.html.erb index 138efd16e..0b5464946 100644 --- a/app/views/users/_news_replies.html.erb +++ b/app/views/users/_news_replies.html.erb @@ -36,14 +36,14 @@ <%= link_to( l(:button_reply), - {:controller => 'users' ,:action => 'reply_to', :reply_id => comment.id, :type => 'HomeworkCommon', :is_in_course => is_in_course, :user_activity_id => user_activity_id, :course_activity => course_activity}, + {:controller => 'users' ,:action => 'reply_to', :reply_id => comment.id, :type => 'HomeworkCommon', :hw_status => hw_status, :user_activity_id => user_activity_id}, :remote => true, :method => 'get', :title => l(:button_reply)) %> <% if User.current.admin? ||is_teacher || comment.user == User.current%> - <%= link_to('删除', {:controller => 'words', :action => 'destroy', :object_id => comment, :user_id => comment.user,:is_in_course => is_in_course, :user_activity_id => user_activity_id, :course_activity => course_activity}, + <%= link_to('删除', {:controller => 'words', :action => 'destroy', :object_id => comment, :user_id => comment.user,:hw_status => hw_status, :user_activity_id => user_activity_id}, :id => "delete_reply_#{activity_id}_#{comment.id}",:remote => true, :confirm => l(:text_are_you_sure), :method => 'delete', :class => "fr mr20 undis", :title => l(:button_delete)) %> <% end %> <% elsif type == 'News' %> diff --git a/app/views/users/_reply_banner.html.erb b/app/views/users/_reply_banner.html.erb index 4f2094899..7246ffd03 100644 --- a/app/views/users/_reply_banner.html.erb +++ b/app/views/users/_reply_banner.html.erb @@ -10,12 +10,8 @@
    <%#= format_date(activity.updated_on) %>
    <%if count>3 %>
    - <% if activity.class.to_s == 'HomeworkCommon' && is_in_course == -1 %> - - 展开更多 - - <% elsif activity.class.to_s == 'HomeworkCommon' %> - + <% if activity.class.to_s == 'HomeworkCommon' %> + 展开更多 <% elsif activity.class.to_s == 'Message' %> diff --git a/app/views/users/_reply_to.html.erb b/app/views/users/_reply_to.html.erb index 8752de30b..b6689851b 100644 --- a/app/views/users/_reply_to.html.erb +++ b/app/views/users/_reply_to.html.erb @@ -5,9 +5,8 @@
    <% if @type == 'HomeworkCommon' %> <%= form_for('new_form',:url => {:controller => 'words', :action => 'reply_to_homework', :id => reply.id},:method => "post", :remote => true) do |f| %> - > + > > - >
    diff --git a/app/views/users/_user_activities.html.erb b/app/views/users/_user_activities.html.erb index 5c6f07bb1..4770bf408 100644 --- a/app/views/users/_user_activities.html.erb +++ b/app/views/users/_user_activities.html.erb @@ -51,7 +51,7 @@ <% hidden_courses = Setting.find_by_name("hidden_courses") %> <% unvisiable = hidden_courses && hidden_courses.value == "1"%> <% if !unvisiable %> - <%= render :partial => 'course_homework', :locals => {:activity => act,:user_activity_id =>user_activity.id,:course_activity => 0} %> + <%= render :partial => 'course_homework', :locals => {:activity => act,:user_activity_id =>user_activity.id,:hw_status => 1} %> <% end %> <%# end %> <% when 'News' %> diff --git a/app/views/users/_user_homework_list.html.erb b/app/views/users/_user_homework_list.html.erb index f7669047c..5f37f54ac 100644 --- a/app/views/users/_user_homework_list.html.erb +++ b/app/views/users/_user_homework_list.html.erb @@ -26,15 +26,10 @@ } } - <%= render :partial => 'users/user_homework_detail', :locals => {:homework_common => homework_common,:is_in_course => is_in_course} %> + <%= render :partial => 'users/course_homework', :locals => {:activity => homework_common, :user_activity_id =>homework_common.id, :hw_status => 3} %> <% end%> <% if homework_commons.count == 10%> - <% if is_in_course == 1%> - - <%#= link_to "点击展开更多",homework_common_index_path(:course => course_id,:page => page,:is_in_course => is_in_course),:id => "user_show_more_homework",:remote => "true",:class => "loadMore f_grey"%> - <% else%> - - <%= link_to "点击展开更多",student_homeworks_user_path(User.current.id,:page => page,:is_in_course => is_in_course),:id => "user_show_more_homework",:remote => "true",:class => "loadMore f_grey"%> - <% end%> + + <%#= link_to "点击展开更多",homework_common_index_path(:course => course_id,:page => page),:id => "user_show_more_homework",:remote => "true",:class => "loadMore f_grey"%> <% end%>
    diff --git a/app/views/users/_user_homeworks_old.html.erb b/app/views/users/_user_homeworks_old.html.erb deleted file mode 100644 index 59ec24ad3..000000000 --- a/app/views/users/_user_homeworks_old.html.erb +++ /dev/null @@ -1,47 +0,0 @@ - -
    -
    作业
    -
    -
    - -<% if @is_teacher%> - -
    - <% homework = HomeworkCommon.new %> - <% homework.homework_detail_manual = HomeworkDetailManual.new%> - <%= labelled_form_for homework,:url => user_new_homework_users_path,:method => "post" do |f| %> -
    - <%= render :partial => 'users/user_homework_form', :locals => { :homework => homework,:f => f,:edit_mode => false } %> -
    - <% end%> -
    -<% end%> - -<%= render :partial => 'users/user_homework_list', :locals => {:homework_commons => @homework_commons,:page => 0,:is_in_course => 0} %> diff --git a/app/views/users/all_journals.js.erb b/app/views/users/all_journals.js.erb index 5f60c754c..7aa8581d7 100644 --- a/app/views/users/all_journals.js.erb +++ b/app/views/users/all_journals.js.erb @@ -1,5 +1,5 @@ <% if params[:type] == 'HomeworkCommon' %> -$('#reply_div_<%= params[:div_id].to_i %>').html('<%=escape_javascript(render :partial => 'users/news_replies', :locals => {:comments => @journals, :type => @type, :is_in_course =>@is_in_course,:course_activity=>@course_activity, :is_teacher => @is_teacher, :user_activity_id => @user_activity_id, :activity_id => params[:id].to_i}) %>'); +$('#reply_div_<%= params[:div_id].to_i %>').html('<%=escape_javascript(render :partial => 'users/news_replies', :locals => {:comments => @journals, :type => @type, :hw_status =>@hw_status, :is_teacher => @is_teacher, :user_activity_id => @user_activity_id, :activity_id => params[:id].to_i}) %>'); <% elsif params[:type] == 'JournalsForMessage' %> $('#reply_div_<%= @user_activity_id %>').html('<%=escape_javascript(render :partial => 'users/message_replies', :locals => {:comments => @journals,:user_activity_id => @user_activity_id, :type => @type, :activity_id =>params[:id].to_i}) %>'); <% elsif params[:type] == 'Message' %> diff --git a/app/views/words/destroy.js.erb b/app/views/words/destroy.js.erb index 00be899cc..5dcdc6401 100644 --- a/app/views/words/destroy.js.erb +++ b/app/views/words/destroy.js.erb @@ -31,12 +31,11 @@ <% elsif @user && @jours_count%> $('#jour_count').html("<%= @jours_count %>"); <% elsif @homework%> - <% if @user_activity_id == -1 %> - $("#homework_common_<%= @homework.id %>").replaceWith("<%= escape_javascript(render :partial => "users/user_homework_detail",:locals => {:homework_common => @homework, :is_in_course => @is_in_course})%>"); - sd_create_editor_from_data(<%= @homework.id%>,"","100%"); + $("#user_activity_<%= @user_activity_id%>").replaceWith("<%= escape_javascript(render :partial => 'users/course_homework', :locals => {:activity => @homework,:user_activity_id =>@user_activity_id,:hw_status=>@hw_status}) %>"); + <% if @user_activity_id != @homework.id %> + sd_create_editor_from_data(<%= @user_activity_id%>,"","100%", "UserActivity"); <% else %> - $("#user_activity_<%= @user_activity_id%>").replaceWith("<%= escape_javascript(render :partial => 'users/course_homework', :locals => {:activity => @homework,:user_activity_id =>@user_activity_id,:course_activity=>@course_activity}) %>"); - sd_create_editor_from_data(<%= @user_activity_id%>,"","100%"); + sd_create_editor_from_data(<%= @homework.id%>,"","100%", "<%=@homework.class.to_s%>"); <% end %> <% end %> var destroyedItem = $('#word_li_<%=@journal_destroyed.id%>') diff --git a/app/views/words/leave_homework_message.js.erb b/app/views/words/leave_homework_message.js.erb index acb16be50..61a8aca14 100644 --- a/app/views/words/leave_homework_message.js.erb +++ b/app/views/words/leave_homework_message.js.erb @@ -1,7 +1,6 @@ -<% if @user_activity_id %> - $("#user_activity_<%= @user_activity_id%>").replaceWith("<%= escape_javascript(render :partial => 'users/course_homework', :locals => {:activity => @homework_common,:user_activity_id =>@user_activity_id,:course_activity => @course_activity}) %>"); - sd_create_editor_from_data(<%= @user_activity_id%>,"","100%", "UserActivity"); -<% elsif @homework_common_id && @is_in_course %> - $("#homework_common_<%= @homework_common_id %>").replaceWith("<%= escape_javascript(render :partial => 'users/user_homework_detail', :locals => {:homework_common => @homework_common,:is_in_course => @is_in_course}) %>"); - sd_create_editor_from_data(<%= @homework_common_id%>,"","100%", "HomeworkCommon"); -<% end %> +$("#user_activity_<%= @user_activity_id%>").replaceWith("<%= escape_javascript(render :partial => 'users/course_homework', :locals => {:activity => @homework_common,:user_activity_id =>@user_activity_id,:hw_status=>@hw_status}) %>"); +<% if @user_activity_id != @homework_common.id %> +sd_create_editor_from_data(<%= @user_activity_id%>,"","100%", "UserActivity"); +<% else %> +sd_create_editor_from_data(<%= @homework_common.id%>,"","100%", "<%=@homework_common.class.to_s%>"); +<% end %> \ No newline at end of file diff --git a/app/views/words/reply_to_homework.js.erb b/app/views/words/reply_to_homework.js.erb index 7da72fa54..61a8aca14 100644 --- a/app/views/words/reply_to_homework.js.erb +++ b/app/views/words/reply_to_homework.js.erb @@ -1,7 +1,6 @@ -<% if @user_activity_id != -1 %> -$("#user_activity_<%= @user_activity_id%>").replaceWith("<%= escape_javascript(render :partial => 'users/course_homework', :locals => {:activity => @homework_common,:user_activity_id =>@user_activity_id,:course_activity => @course_activity}) %>"); +$("#user_activity_<%= @user_activity_id%>").replaceWith("<%= escape_javascript(render :partial => 'users/course_homework', :locals => {:activity => @homework_common,:user_activity_id =>@user_activity_id,:hw_status=>@hw_status}) %>"); +<% if @user_activity_id != @homework_common.id %> sd_create_editor_from_data(<%= @user_activity_id%>,"","100%", "UserActivity"); <% else %> -$("#homework_common_<%= @homework_common.id %>").replaceWith("<%= escape_javascript(render :partial => 'users/user_homework_detail', :locals => {:homework_common => @homework_common,:is_in_course => @is_in_course}) %>"); -sd_create_editor_from_data(<%= @homework_common.id%>,"","100%", "HomeworkCommon"); +sd_create_editor_from_data(<%= @homework_common.id%>,"","100%", "<%=@homework_common.class.to_s%>"); <% end %> \ No newline at end of file diff --git a/public/javascripts/application.js b/public/javascripts/application.js index aeb9e645a..b74d8b71e 100644 --- a/public/javascripts/application.js +++ b/public/javascripts/application.js @@ -1459,7 +1459,7 @@ function expand_blog_comment_reply(container, btnid, id, type, div_id, homepage) } } -function expand_reply_homework(container, btnid, id, type, div_id, is_in_course, course_activity, user_activity_id) { +function expand_reply_homework(container, btnid, id, type, div_id, hw_status, user_activity_id) { var target = $(container); var btn = $(btnid); if (btn.data('init') == '0') { @@ -1470,8 +1470,7 @@ function expand_reply_homework(container, btnid, id, type, div_id, is_in_course, type: type, id: id, div_id: div_id, - is_in_course: is_in_course, - course_activity: course_activity, + hw_status: hw_status, user_activity_id: user_activity_id }, function(data) { From 2856cd06d5c3511486b1ff661d021b7c5212e973 Mon Sep 17 00:00:00 2001 From: Tim Date: Tue, 20 Sep 2016 14:42:36 +0800 Subject: [PATCH 12/50] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E5=9B=BE=E7=89=87?= =?UTF-8?q?=E5=86=85=E5=AE=B9=E7=82=B9=E5=87=BB=E5=8F=AF=E6=94=BE=E5=A4=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/assets/wechat/app.html | 1 + public/assets/wechat/blog_detail.html | 2 +- public/assets/wechat/course_discussion.html | 2 +- public/assets/wechat/course_notice.html | 2 +- public/assets/wechat/homework_detail.html | 2 +- public/assets/wechat/issue_detail.html | 2 +- public/assets/wechat/jour_message_detail.html | 2 +- public/assets/wechat/project_discussion.html | 2 +- .../wechat/directives/img_preview.js | 22 +++++++++++++++++++ 9 files changed, 30 insertions(+), 7 deletions(-) create mode 100644 public/javascripts/wechat/directives/img_preview.js diff --git a/public/assets/wechat/app.html b/public/assets/wechat/app.html index 099384593..232f07494 100644 --- a/public/assets/wechat/app.html +++ b/public/assets/wechat/app.html @@ -41,6 +41,7 @@ + diff --git a/public/assets/wechat/blog_detail.html b/public/assets/wechat/blog_detail.html index 7aa629bb7..91a5fff59 100644 --- a/public/assets/wechat/blog_detail.html +++ b/public/assets/wechat/blog_detail.html @@ -25,7 +25,7 @@
    {{blog.title}}
    博客{{blog.created_at}}
    -
    +
    diff --git a/public/assets/wechat/course_discussion.html b/public/assets/wechat/course_discussion.html index 8dc08c788..7a818bb79 100644 --- a/public/assets/wechat/course_discussion.html +++ b/public/assets/wechat/course_discussion.html @@ -25,7 +25,7 @@
    {{discussion.subject}}
    {{discussion.syllabus_title}}·{{discussion.course_project_name}} - 班级讨论区{{discussion.created_on}}
    -
    +
    diff --git a/public/assets/wechat/course_notice.html b/public/assets/wechat/course_notice.html index a0c242d72..c13a7b532 100644 --- a/public/assets/wechat/course_notice.html +++ b/public/assets/wechat/course_notice.html @@ -24,7 +24,7 @@
    {{news.title}}
    {{news.syllabus_title}}·{{news.course_name}} - 课程通知{{news.created_on}}
    -
    +
    diff --git a/public/assets/wechat/homework_detail.html b/public/assets/wechat/homework_detail.html index 908cff977..161c3be94 100644 --- a/public/assets/wechat/homework_detail.html +++ b/public/assets/wechat/homework_detail.html @@ -24,7 +24,7 @@
    {{homework.name}}
    {{homework.syllabus_title}}·{{homework.course_name}} - 普通作业编程作业分组作业{{homework.publish_time}}
    -
    +
    迟交扣分:{{homework.late_penalty}}分 匿评开启时间:{{homework.evaluation_start}}
    缺评扣分:{{homework.absence_penalty}}分/作品 diff --git a/public/assets/wechat/issue_detail.html b/public/assets/wechat/issue_detail.html index f4eed4bd9..278b545a5 100644 --- a/public/assets/wechat/issue_detail.html +++ b/public/assets/wechat/issue_detail.html @@ -26,7 +26,7 @@
    {{issue.subject}}
    {{issue.project_name}} - 项目问题{{issue.created_on}}
    -
    +
    状   态:{{issue.issue_status}} 优先级:{{issue.issue_priority}}
    指派给:{{issue.issue_assigned_to}} diff --git a/public/assets/wechat/jour_message_detail.html b/public/assets/wechat/jour_message_detail.html index a1db224a6..736ad419b 100644 --- a/public/assets/wechat/jour_message_detail.html +++ b/public/assets/wechat/jour_message_detail.html @@ -24,7 +24,7 @@
    留言{{message.created_on}}
    -
    +
    diff --git a/public/assets/wechat/project_discussion.html b/public/assets/wechat/project_discussion.html index dcb5a68a6..7fca33657 100644 --- a/public/assets/wechat/project_discussion.html +++ b/public/assets/wechat/project_discussion.html @@ -25,7 +25,7 @@
    {{discussion.subject}}
    {{discussion.course_project_name}} - 项目讨论区{{discussion.created_on}}
    -
    +
    diff --git a/public/javascripts/wechat/directives/img_preview.js b/public/javascripts/wechat/directives/img_preview.js new file mode 100644 index 000000000..08f33d381 --- /dev/null +++ b/public/javascripts/wechat/directives/img_preview.js @@ -0,0 +1,22 @@ +/** + * Created by ttang on 2016/9/20. + */ +app.directive('imgPreview',["$timeout",'wx',function(timer,wx){ + return{ + restrict: 'A', + scope: {}, + link: function(scope, element){ + timer(function(){ + var srcList = []; + $.each($(".post-all-content img"),function(i,item){ + if(item.src){ + srcList.push(item.src); + $(item).click(function(e){ + wx.previewImage(this.src,srcList); + }); + } + }); + }) + } + } +}]); \ No newline at end of file From 8b771a183c6dc6fb99ad02e0f0effbd1f60fcea6 Mon Sep 17 00:00:00 2001 From: yuanke <249218296@qq.com> Date: Tue, 20 Sep 2016 14:58:37 +0800 Subject: [PATCH 13/50] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E5=88=86=E7=8F=AD?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/mobile/apis/courses.rb | 124 +++++++++++++++- app/api/mobile/entities/course.rb | 1 + app/api/mobile/entities/course_group.rb | 19 +++ app/services/courses_service.rb | 4 +- .../_programing_work_show.html.erb | 2 +- public/assets/wechat/class.html | 4 +- public/assets/wechat/class_group.html | 20 +++ public/assets/wechat/edit_class_group.html | 14 ++ public/assets/wechat/edit_class_member.html | 16 ++- public/assets/wechat/edit_userinfo.html | 1 + public/assets/wechat/join_class.html | 2 - public/assets/wechat/join_classgroup.html | 10 +- .../assets/wechat/select_my_coursegroup.html | 17 ++- .../javascripts/wechat/controllers/class.js | 21 ++- .../wechat/controllers/class_group.js | 48 +++++++ .../wechat/controllers/edit_class.js | 2 +- .../wechat/controllers/edit_class_group.js | 136 ++++++++++++++++++ .../wechat/controllers/edit_class_member.js | 87 ++++++++++- .../wechat/controllers/join_classgroup.js | 17 +-- .../controllers/select_my_coursegroup.js | 53 ++++++- public/javascripts/wechat/others/routes.js | 2 + 21 files changed, 564 insertions(+), 36 deletions(-) create mode 100644 app/api/mobile/entities/course_group.rb create mode 100644 public/assets/wechat/class_group.html create mode 100644 public/assets/wechat/edit_class_group.html create mode 100644 public/javascripts/wechat/controllers/class_group.js create mode 100644 public/javascripts/wechat/controllers/edit_class_group.js diff --git a/app/api/mobile/apis/courses.rb b/app/api/mobile/apis/courses.rb index dd5525fae..c4b445af9 100644 --- a/app/api/mobile/apis/courses.rb +++ b/app/api/mobile/apis/courses.rb @@ -541,6 +541,7 @@ module Mobile present :course_id,params[:id] present :user_id,params[:user_id] present :member_info,my_member, with: Mobile::Entities::ProjectMember + present :course_group_id,my_member.course_group_id present :status, 0 else present :status, -1 @@ -779,7 +780,7 @@ module Mobile requires :token, type: String requires :course_group_id, type: Integer end - post 'join_coursegroup' do + post 'user_join_coursegroup' do begin authenticate! member = Member.where(:course_id => params[:id], :user_id => current_user.id).first @@ -795,6 +796,127 @@ module Mobile end end + desc "修改分班" + params do + requires :id, type: Integer + requires :token, type: String + requires :course_group_id, type: Integer + requires :user_id, type: Integer + end + post 'user_edit_coursegroup' do + begin + authenticate! + member = Member.where(:course_id => params[:id], :user_id => params[:user_id]).first + + raise "不是该班级的学生!" unless member + + member.course_group_id = params[:course_group_id].to_i + member.save + present :status,0 + rescue Exception=>e + present :message,e.message + present :status,-1 + end + end + + desc '获取分班列表带上学生' + params do + requires :id, type: Integer + requires :token, type:String + end + get 'course_groups_withstudent/:id' do + begin + authenticate! + course = Course.find(params[:id]) + groups = [] + groups = course.course_groups if course.course_groups + present :data,groups, with: Mobile::Entities::CourseGroup + present :status,0 + rescue + present :status,-1 + end + end + + desc "删除分班" + params do + requires :id, type: Integer + requires :token, type: String + requires :course_group_id, type: Integer + end + post 'delete_coursegroup' do + begin + authenticate! + c = Course.find("#{params[:id]}") + my_member = c.member_principals.where("users.id=#{current_user.id}").first + + roles_ids = [] + my_member.roles.each do |role| + roles_ids << role.id + end + + if my_member && (roles_ids.include?(3) || roles_ids.include?(7) || roles_ids.include?(9) ) + else + raise "您没有该权限!" + end + CourseGroup.delete(params[:course_group_id]) + present :status,0 + rescue Exception=>e + present :message,e.message + present :status,-1 + end + end + + + desc "编辑分班" + params do + requires :id, type: Integer + requires :token, type: String + end + post 'edit_coursegroup' do + begin + authenticate! + c = Course.find("#{params[:id]}") + my_member = c.member_principals.where("users.id=#{current_user.id}").first + + roles_ids = [] + my_member.roles.each do |role| + roles_ids << role.id + end + + if my_member && (roles_ids.include?(3) || roles_ids.include?(7) || roles_ids.include?(9) ) + else + raise "您没有该权限!" + end + + #增加分班和修改分班名 + modify_groups = params[:modify_groups] + modify_groups.each do |g| + group = CourseGroup.find(g.id) + group.name = g.id.to_s + Time.now.to_i.to_s #只能先另取个名了不然原有的两个互换的话修改不了 + group.save + end + + modify_groups.each do |g| + group = CourseGroup.find(g.id) + group.name = g.name + group.save + end + + #增加分班和修改分班名 + add_groups = params[:add_groups] + add_groups.each do |name| + group = CourseGroup.new + group.name = name + group.course_id = params[:id] + group.save + end + present :status,0 + rescue Exception=>e + present :message,e.message + present :status,-1 + end + end + end end end diff --git a/app/api/mobile/entities/course.rb b/app/api/mobile/entities/course.rb index 30a5a6cc9..1b696e40c 100644 --- a/app/api/mobile/entities/course.rb +++ b/app/api/mobile/entities/course.rb @@ -54,6 +54,7 @@ module Mobile course_expose :updated_at course_expose :course_student_num course_expose :member_count + course_expose :groupnum expose :can_setting, if: lambda { |instance, options| options[:user] } do |instance, options| current_user = options[:user] can_setting = false diff --git a/app/api/mobile/entities/course_group.rb b/app/api/mobile/entities/course_group.rb new file mode 100644 index 000000000..f5d05d44c --- /dev/null +++ b/app/api/mobile/entities/course_group.rb @@ -0,0 +1,19 @@ +module Mobile + module Entities + class CourseGroup < Grape::Entity + include Redmine::I18n + include ApplicationHelper + include ApiHelper + def self.course_group_expose(f) + expose f do |u,opt| + if u.is_a?(Hash) && u.key?(f) + u[f] + end + end + end + expose :id + expose :name + expose :users, using: Mobile::Entities::User + end + end +end diff --git a/app/services/courses_service.rb b/app/services/courses_service.rb index 2c0506d1e..5d2957d4c 100644 --- a/app/services/courses_service.rb +++ b/app/services/courses_service.rb @@ -332,7 +332,9 @@ class CoursesService # unless (course.is_public == 1 || current_user.member_of_course?(course) || current_user.admin?) # raise '403' # end - {: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} + groupnum = 0 + groupnum = course.course_groups.length if course.course_groups + {: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,:groupnum => groupnum} end #创建课程 diff --git a/app/views/student_work/_programing_work_show.html.erb b/app/views/student_work/_programing_work_show.html.erb index c4df9e715..bf4cf9e76 100644 --- a/app/views/student_work/_programing_work_show.html.erb +++ b/app/views/student_work/_programing_work_show.html.erb @@ -43,7 +43,7 @@ 第<%= work.student_work_tests.count - index%>次测试

    - <%= test.created_at.to_s(:db) %> + <%= format_time(test.created_at).to_s %>
    diff --git a/public/assets/wechat/class.html b/public/assets/wechat/class.html index 30c9120c3..f8947b029 100644 --- a/public/assets/wechat/class.html +++ b/public/assets/wechat/class.html @@ -256,13 +256,15 @@
    {{student.name}} - +
    +
    diff --git a/public/assets/wechat/class_group.html b/public/assets/wechat/class_group.html new file mode 100644 index 000000000..04cdf8025 --- /dev/null +++ b/public/assets/wechat/class_group.html @@ -0,0 +1,20 @@ +
    +
    +
    + +
    +
    {{group.name+"("+group.users.length+")"}}
    +
    + {{user.realname == "" ? user.name : user.realname}} +
    +
    +
    + +
    + 编辑 +
    + +
    {{tip_1}}
    + + +
    \ No newline at end of file diff --git a/public/assets/wechat/edit_class_group.html b/public/assets/wechat/edit_class_group.html new file mode 100644 index 000000000..3dda96d53 --- /dev/null +++ b/public/assets/wechat/edit_class_group.html @@ -0,0 +1,14 @@ +
    +
    + +
    分班管理
    +
    {{course.name}}
    + +
    分班名称删除
    + + 完成 + + + + +
    \ No newline at end of file diff --git a/public/assets/wechat/edit_class_member.html b/public/assets/wechat/edit_class_member.html index d06eba89b..1eb53c7bf 100644 --- a/public/assets/wechat/edit_class_member.html +++ b/public/assets/wechat/edit_class_member.html @@ -4,15 +4,25 @@
    成员管理
    {{current_edit_member.user.realname == "" ? current_edit_member.user.name : current_edit_member.user.realname}}
    角色变更
    -
      +
      -
      删除成员
      -
        +
        删除成员
        +
        +
        编辑分班
        +
          +
        • + +
          +
        • + +
          +
        +
        取消 确定 diff --git a/public/assets/wechat/edit_userinfo.html b/public/assets/wechat/edit_userinfo.html index f4178fee4..48d207d4c 100644 --- a/public/assets/wechat/edit_userinfo.html +++ b/public/assets/wechat/edit_userinfo.html @@ -30,6 +30,7 @@
        电子邮箱地址不能为空 + 电子邮箱地址不合法
        diff --git a/public/assets/wechat/join_class.html b/public/assets/wechat/join_class.html index 4c81ff2e4..ad43db3a7 100644 --- a/public/assets/wechat/join_class.html +++ b/public/assets/wechat/join_class.html @@ -25,7 +25,5 @@
    -
    {{tip_1}}
    -
    diff --git a/public/assets/wechat/join_classgroup.html b/public/assets/wechat/join_classgroup.html index 9a7705252..9a7e9fa2d 100644 --- a/public/assets/wechat/join_classgroup.html +++ b/public/assets/wechat/join_classgroup.html @@ -1,11 +1,11 @@
    -
    +
    欢迎加入班级
    {{current_course.name}}
    选择分班{{selectid}}
    +
    {{tip_1}}
    +
    \ No newline at end of file diff --git a/public/assets/wechat/select_my_coursegroup.html b/public/assets/wechat/select_my_coursegroup.html index c16b276e4..cc7a65753 100644 --- a/public/assets/wechat/select_my_coursegroup.html +++ b/public/assets/wechat/select_my_coursegroup.html @@ -2,24 +2,27 @@
    我的信息
    -
    {{current_edit_member.user.show_name}}
    +
    {{current_edit_member.user.realname == "" ? current_edit_member.user.name : current_edit_member.user.realname}}
    角色
    学生
    选择分班
      -
    • -
    • -
    • +
    • + +
      +
    • + +
    -
    {{tip_1}}
    -
    {{tip_2}}
    +
    {{tip_1}}
    +
    {{tip_2}}
    diff --git a/public/javascripts/wechat/controllers/class.js b/public/javascripts/wechat/controllers/class.js index ca4ad6d76..70c5d839d 100644 --- a/public/javascripts/wechat/controllers/class.js +++ b/public/javascripts/wechat/controllers/class.js @@ -258,7 +258,7 @@ app.controller('ClassController', ['$scope', 'config','$http', 'auth','$location rms.save('current_edit_member', user); rms.save("course",vm.course); rms.save("tab_num",vm.currentTab); - $location.path("/select_my_coursegroup").search({id: courseid}); + $location.path("/select_my_coursegroup").search({id: courseid,user_id: user.id}); }; vm.review = function(user){ @@ -367,5 +367,24 @@ app.controller('ClassController', ['$scope', 'config','$http', 'auth','$location }; + vm.goEditGroup = function(){ + if(!vm.isTeacher){ + return; + } + + rms.save('course_activities_page',vm.course_activities_page); + rms.save("course_activities",vm.course_activities); + rms.save('course_has_more', vm.course_has_more); + rms.save("tab_num",vm.currentTab); + rms.save("course",vm.course); + rms.save('current_course', vm.course); + + if(vm.course.groupnum == 0){ + $location.path("/edit_class_group").search({id: courseid}); + } + else{ + $location.path("/class_group").search({id: courseid}); + } + } }]); \ No newline at end of file diff --git a/public/javascripts/wechat/controllers/class_group.js b/public/javascripts/wechat/controllers/class_group.js new file mode 100644 index 000000000..77de92332 --- /dev/null +++ b/public/javascripts/wechat/controllers/class_group.js @@ -0,0 +1,48 @@ +app.controller('ClassGroupController', ['$scope', 'config','$http', 'auth','$location','$routeParams','alertService','rms','common','$timeout', function($scope, config, $http, auth, $location, $routeParams,alertService,rms,common,$timeout){ +// common.checkLogin(); + + $scope.replaceUrl = function(url){ + return url; + }; + + var vm = $scope; + var courseid = $routeParams.id; + vm.alertService = alertService.create(); + + if(!vm.course){ + $http.get(config.apiUrl+ 'courses/'+courseid+"?token="+auth.token()).then( + function(response) { + console.log(response.data); + if (response.data.status == 0){ + vm.course = response.data.data; + console.log("courses"); + console.log(response.data.data); + } + else{ + vm.alertService.showMessage('提示', response.data.message); + } + if(!vm.course){ + vm.tip_1 = "该班级不存在或已被删除"; + } + } + ); + } + + + $http.get(config.apiUrl + 'courses/course_groups_withstudent/'+courseid+'?token='+auth.token()).then( + function(response) { + console.log("groups="); + console.log(response); + if(response.data.status == 0) { + vm.groups = response.data.data; + } + else{ + vm.groups = []; + } + }); + + vm.goEditGroup = function(){ + $location.path("/edit_class_group").search({id: courseid}); + } + +}]); \ No newline at end of file diff --git a/public/javascripts/wechat/controllers/edit_class.js b/public/javascripts/wechat/controllers/edit_class.js index d61c25353..6cb50da1a 100644 --- a/public/javascripts/wechat/controllers/edit_class.js +++ b/public/javascripts/wechat/controllers/edit_class.js @@ -63,7 +63,7 @@ app.controller('EditClassController', ['$scope', '$http', 'auth', 'config', 'ale vm.syllabus.courses.splice(index, 1); } - } + }; vm.newClass = function (frm, syllabus) { frm.$setSubmitted(); diff --git a/public/javascripts/wechat/controllers/edit_class_group.js b/public/javascripts/wechat/controllers/edit_class_group.js new file mode 100644 index 000000000..e80b35869 --- /dev/null +++ b/public/javascripts/wechat/controllers/edit_class_group.js @@ -0,0 +1,136 @@ + + +app.controller('EditClassGroupController', ['$scope', '$http', 'auth', 'config', 'alertService','$location','$routeParams','rms','common', function($scope, $http, auth, config, alertService, $location,$routeParams, rms,common){ + var vm = $scope; + var courseid = $routeParams.id; + vm.alertService = alertService.create(); + vm.alertService_2 = alertService.create(); + + if(!vm.course){ + $http.get(config.apiUrl+ 'courses/'+courseid+"?token="+auth.token()).then( + function(response) { + console.log(response.data); + if (response.data.status == 0){ + vm.course = response.data.data; + console.log("courses"); + console.log(response.data.data); + } + else{ + vm.alertService.showMessage('提示', response.data.message); + } + if(!vm.course){ + vm.tip_1 = "该班级不存在或已被删除"; + } + } + ); + } + + $http.get(config.apiUrl + 'courses/course_groups/'+courseid+'?token='+auth.token()).then( + function(response) { + console.log("groups="); + console.log(response); + if(response.data.status == 0) { + vm.groups = response.data.data; + for(var i in vm.groups){ + vm.groups[i].tmpname = vm.groups[i].course_group.name; + } + } + else{ + vm.groups = []; + } + }); + + vm.addGroup = function(){ + vm.groups.push({tmpname:""}); + }; + + vm.deleteGroup = function(index){ + var group = vm.groups[index]; + if(group.course_group){ + vm.alertService_2.showMessage('提示', '您确定要删除该分班吗?', function() { + $http.post(config.apiUrl+'courses/delete_coursegroup', { + token: auth.token(), + id: courseid, + course_group_id:group.course_group.id + }).then(function(response){ + console.log(response); + if(response.data.status == 0){ + vm.alertService.showMessage('提示', "删除成功!",function(){ + vm.groups.splice(index, 1); + }); + } else { + vm.alertService.showMessage('提示', response.data.message); + } + }); + }); + + } else { + vm.groups.splice(index, 1); + } + + }; + + vm.newGroup = function (frm, groups) { + frm.$setSubmitted(); + console.log(groups); + + if(!frm.$valid){ + console.log(frm.$error); + return; + } + + if(vm.groups.length == 0){ + $location.path("/class").search({id: courseid,tag:1}); + return; + } + //不能有相同名称的分班 + for(var i=0;i< vm.groups.length-1;i++) { + for (var j=i+1;j Date: Tue, 20 Sep 2016 15:00:22 +0800 Subject: [PATCH 14/50] . --- Gemfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Gemfile b/Gemfile index 1305320cf..cbeade2a3 100644 --- a/Gemfile +++ b/Gemfile @@ -50,10 +50,10 @@ gem 'elasticsearch-model' gem 'elasticsearch-rails' #rails 3.2.22.2 bug - # gem "test-unit", "~>3.0" + gem "test-unit", "~>3.0" ### profile - # gem 'oneapm_rpm' + gem 'oneapm_rpm' group :development do gem 'grape-swagger' From 4e292425793d544a3346522b1931b92ba0631e7f Mon Sep 17 00:00:00 2001 From: yuanke <249218296@qq.com> Date: Tue, 20 Sep 2016 15:11:00 +0800 Subject: [PATCH 15/50] =?UTF-8?q?=E8=B0=83=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/wechats_helper.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/helpers/wechats_helper.rb b/app/helpers/wechats_helper.rb index 5c6b3da8c..34c4dd9a1 100644 --- a/app/helpers/wechats_helper.rb +++ b/app/helpers/wechats_helper.rb @@ -3,9 +3,9 @@ module WechatsHelper def include_wechat_jsfile - if Rails.env.production? - javascript_include_tag '/javascripts/wechat/build/app.min.js' - else + # if Rails.env.production? + # javascript_include_tag '/javascripts/wechat/build/app.min.js' + # else wechat_path = File.join(Rails.root, "public", "javascripts", "wechat") srcs = Rails.application.config.wechat_srcs paths = [] @@ -15,6 +15,6 @@ module WechatsHelper end end javascript_include_tag *paths - end + # end end end From 930acd382cce98f74ee882f2b24f12d41c37080b Mon Sep 17 00:00:00 2001 From: yuanke <249218296@qq.com> Date: Tue, 20 Sep 2016 15:14:48 +0800 Subject: [PATCH 16/50] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E5=9B=BE=E7=89=87?= =?UTF-8?q?=E7=82=B9=E5=87=BB=E8=B0=83=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/wechats_helper.rb | 2 +- public/javascripts/wechat/directives/img_preview.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/helpers/wechats_helper.rb b/app/helpers/wechats_helper.rb index 34c4dd9a1..e76ea08d6 100644 --- a/app/helpers/wechats_helper.rb +++ b/app/helpers/wechats_helper.rb @@ -4,7 +4,7 @@ module WechatsHelper def include_wechat_jsfile # if Rails.env.production? - # javascript_include_tag '/javascripts/wechat/build/app.min.js' + javascript_include_tag '/javascripts/wechat/build/app.min.js' # else wechat_path = File.join(Rails.root, "public", "javascripts", "wechat") srcs = Rails.application.config.wechat_srcs diff --git a/public/javascripts/wechat/directives/img_preview.js b/public/javascripts/wechat/directives/img_preview.js index 08f33d381..ce973c69b 100644 --- a/public/javascripts/wechat/directives/img_preview.js +++ b/public/javascripts/wechat/directives/img_preview.js @@ -12,7 +12,7 @@ app.directive('imgPreview',["$timeout",'wx',function(timer,wx){ if(item.src){ srcList.push(item.src); $(item).click(function(e){ - wx.previewImage(this.src,srcList); + wx.previewImage({current:this.src,urls:srcList}); }); } }); From bda68495c979c5ca723f8d009ac509c9775f59f5 Mon Sep 17 00:00:00 2001 From: yuanke <249218296@qq.com> Date: Tue, 20 Sep 2016 15:19:06 +0800 Subject: [PATCH 17/50] . --- app/helpers/wechats_helper.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/helpers/wechats_helper.rb b/app/helpers/wechats_helper.rb index e76ea08d6..5c6b3da8c 100644 --- a/app/helpers/wechats_helper.rb +++ b/app/helpers/wechats_helper.rb @@ -3,9 +3,9 @@ module WechatsHelper def include_wechat_jsfile - # if Rails.env.production? + if Rails.env.production? javascript_include_tag '/javascripts/wechat/build/app.min.js' - # else + else wechat_path = File.join(Rails.root, "public", "javascripts", "wechat") srcs = Rails.application.config.wechat_srcs paths = [] @@ -15,6 +15,6 @@ module WechatsHelper end end javascript_include_tag *paths - # end + end end end From e4f6852d1bde788c7b5fdc3e67b2ed74c817b40a Mon Sep 17 00:00:00 2001 From: Tim Date: Wed, 21 Sep 2016 09:44:02 +0800 Subject: [PATCH 18/50] =?UTF-8?q?=E6=88=91=E7=9A=84=E4=BD=9C=E4=B8=9A?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=EF=BC=8C=E6=8C=89=E9=92=AE=E5=AD=97=E4=BD=93?= =?UTF-8?q?=E5=A4=A7=E5=B0=8F=E7=BB=9F=E4=B8=80=EF=BC=8C=E4=BD=9C=E5=93=81?= =?UTF-8?q?=E6=95=B0=E5=AE=BD=E5=BA=A6=E5=A2=9E=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/users/_manage_homework_list.html.erb | 8 ++++---- public/stylesheets/sy_public.css | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/app/views/users/_manage_homework_list.html.erb b/app/views/users/_manage_homework_list.html.erb index e8912c4c9..79294d7ea 100644 --- a/app/views/users/_manage_homework_list.html.erb +++ b/app/views/users/_manage_homework_list.html.erb @@ -16,13 +16,13 @@ <%= link_to homework.course.name, course_path(homework.course), :target => '_blank', :class => 'hw_cgrey hw_classname fl mr15' %> 类别:<%=homework.homework_type_ch %> 作品: - <%=homework.student_works.has_committed.count %> + <%=homework.student_works.has_committed.count %> / - <%= homework.homework_type == 3 ? '--' : homework.course.student.count %> + <%= homework.homework_type == 3 ? '--' : homework.course.student.count %> 待评阅: - <%= homework.student_works.has_committed.where("teacher_score is null and teaching_asistant_score is null").count %> + <%= homework.student_works.has_committed.where("teacher_score is null and teaching_asistant_score is null").count %> / - <%=homework.student_works.has_committed.count %> + <%=homework.student_works.has_committed.count %> 发布时间: <% if homework.publish_time %> <%= format_date(homework.publish_time) %> diff --git a/public/stylesheets/sy_public.css b/public/stylesheets/sy_public.css index 454bdcb4a..adfce90bb 100644 --- a/public/stylesheets/sy_public.css +++ b/public/stylesheets/sy_public.css @@ -38,7 +38,7 @@ a.hw_btn_green2{ border:1px solid #60b25e; background:#fff; text-align: center; - font-size: 14px; + font-size: 12px; padding:0 10px; height: 30px; line-height: 30px; @@ -71,14 +71,14 @@ a:hover.hw_corange{ color: #e1412b;} .hw_cir_lorange{ background:#f79981;} .hw_cir_lgreen{ background:#7ecfa2;} .hw_w20{ width:20px; display:block; text-align:center;} -.hw_w20{ width:20px; display:block; text-align:center;} +.hw_w30{ width:30px; display:block; text-align:center;} /* 按钮*/ a.btn_orange_big{ display:inline-block; border: 1px solid #ee4a1f; color: #ee4a1f; text-align: center; - font-size: 14px; + font-size: 12px; padding:0 10px; height: 30px; line-height: 30px; From d1c284c953caa69027dabe504ab9db5dd0ce2b80 Mon Sep 17 00:00:00 2001 From: cxt Date: Wed, 21 Sep 2016 10:34:38 +0800 Subject: [PATCH 19/50] =?UTF-8?q?=E4=BD=9C=E4=B8=9A=E8=AF=A6=E6=83=85?= =?UTF-8?q?=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/homework_common_controller.rb | 6 + app/controllers/student_work_controller.rb | 3 + app/controllers/words_controller.rb | 4 +- app/helpers/application_helper.rb | 24 +- .../exercise/student_exercise_list.html.erb | 2 +- .../homework_common/open_student_works.js.erb | 4 + .../set_evaluation_attr.js.erb | 4 + .../start_anonymous_comment.js.erb | 4 + .../stop_anonymous_comment.js.erb | 4 + .../_org_course_homework.html.erb | 6 +- .../_homework_post_brief.html.erb | 102 +++++++ .../student_work/_student_work_list.html.erb | 5 +- .../student_work/cancel_relate_project.js.erb | 4 + app/views/student_work/index.html.erb | 144 ++++------ app/views/student_work/set_score_rule.js.erb | 4 + .../student_work/student_work_project.js.erb | 4 + app/views/users/_course_homework.html.erb | 258 +----------------- app/views/users/_homework_base_info.html.erb | 178 ++++++++++++ app/views/users/_homework_opr.html.erb | 43 +++ app/views/users/_homework_post_reply.html.erb | 34 +++ .../users/_user_homework_detail.html.erb | 2 +- app/views/words/destroy.js.erb | 2 +- app/views/words/leave_homework_message.js.erb | 2 +- app/views/words/reply_to_homework.js.erb | 2 +- public/stylesheets/courses.css | 2 +- public/stylesheets/css/courses.css | 2 +- 26 files changed, 469 insertions(+), 380 deletions(-) create mode 100644 app/views/student_work/_homework_post_brief.html.erb create mode 100644 app/views/users/_homework_base_info.html.erb create mode 100644 app/views/users/_homework_opr.html.erb create mode 100644 app/views/users/_homework_post_reply.html.erb diff --git a/app/controllers/homework_common_controller.rb b/app/controllers/homework_common_controller.rb index b5d55df28..4511e5a1f 100644 --- a/app/controllers/homework_common_controller.rb +++ b/app/controllers/homework_common_controller.rb @@ -168,6 +168,8 @@ class HomeworkCommonController < ApplicationController redirect_to user_path(User.current.id) elsif @hw_status == 2 redirect_to course_path(@course.id) + elsif @hw_status == 5 + redirect_to student_work_index_url(:homework => @homework.id) else redirect_to homework_common_index_path(:course => @course.id) end @@ -244,6 +246,7 @@ class HomeworkCommonController < ApplicationController end @user_activity_id = params[:user_activity_id].to_i @hw_status = params[:hw_status].to_i + @is_teacher = User.current.admin? || User.current.allowed_to?(:as_teacher, @course) end #关闭匿评 @@ -262,6 +265,7 @@ class HomeworkCommonController < ApplicationController Mailer.send_mail_anonymous_comment_close(@homework).deliver @user_activity_id = params[:user_activity_id].to_i @hw_status = params[:hw_status].to_i + @is_teacher = User.current.admin? || User.current.allowed_to?(:as_teacher, @course) respond_to do |format| format.js end @@ -315,6 +319,7 @@ class HomeworkCommonController < ApplicationController end @user_activity_id = params[:user_activity_id] @hw_status = params[:hw_status].to_i + @is_teacher = User.current.admin? || User.current.allowed_to?(:as_teacher,@course) end def alert_open_student_works @@ -372,6 +377,7 @@ class HomeworkCommonController < ApplicationController @homework_detail_manual.save @user_activity_id = params[:user_activity_id].to_i @hw_status = params[:hw_status].to_i + @is_teacher = User.current.admin? || User.current.allowed_to?(:as_teacher,@course) end end diff --git a/app/controllers/student_work_controller.rb b/app/controllers/student_work_controller.rb index b259737a1..a0d981b22 100644 --- a/app/controllers/student_work_controller.rb +++ b/app/controllers/student_work_controller.rb @@ -521,6 +521,7 @@ class StudentWorkController < ApplicationController # 消息传过来的ID @message_student_work_id = params[:student_work_id] @left_nav_type = 3 + @tab = params[:tab].to_i respond_to do |format| format.js format.html @@ -1076,6 +1077,7 @@ class StudentWorkController < ApplicationController if @project.save @user_activity_id = params[:user_activity_id].to_i @hw_status = params[:hw_status].to_i + @is_teacher = User.current.allowed_to?(:as_teacher,@homework.course) || User.current.admin? respond_to do |format| format.js end @@ -1126,6 +1128,7 @@ class StudentWorkController < ApplicationController if relate_pro.destroy @user_activity_id = params[:user_activity_id].to_i @hw_status = params[:hw_status].to_i + @is_teacher = User.current.allowed_to?(:as_teacher,@homework.course) || User.current.admin? respond_to do |format| format.js end diff --git a/app/controllers/words_controller.rb b/app/controllers/words_controller.rb index f1bfc7a31..9c8954ed9 100644 --- a/app/controllers/words_controller.rb +++ b/app/controllers/words_controller.rb @@ -111,6 +111,7 @@ class WordsController < ApplicationController @user_activity_id = -1 end @hw_status = params[:hw_status].to_i + @is_teacher = User.current.allowed_to?(:as_teacher, @homework.course) || User.current.admin? elsif @journal_destroyed.jour_type == 'Syllabus' @syllabus = Syllabus.find @journal_destroyed.jour_id @count = @syllabus.journals_for_messages.count @@ -309,7 +310,7 @@ class WordsController < ApplicationController format.js{ @user_activity_id = params[:user_activity_id].to_i @hw_status = params[:hw_status].to_i - @homework_common_id = params[:homework_common_id] + @is_teacher = User.current.allowed_to?(:as_teacher, @homework_common.course) || User.current.admin? } end else @@ -343,6 +344,7 @@ class WordsController < ApplicationController format.js{ @user_activity_id = params[:user_activity_id].to_i @hw_status = params[:hw_status].to_i + @is_teacher = User.current.allowed_to?(:as_teacher, @homework_common.course) || User.current.admin? } end else diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index d9a694eaa..8b5b594bd 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -2745,7 +2745,7 @@ module ApplicationHelper count = homework.student_works.has_committed.count if User.current.member_of_course?(homework.course) if is_teacher #老师显示作品数量 - link_to "作品(#{count})", student_work_index_url_in_org(homework.id), :class => "c_blue" + link_to "作品(#{count})", student_work_index_url_in_org(homework.id, 2), :class => "c_blue" else #学生显示提交作品、修改作品等按钮 work = cur_user_works_for_homework homework project = cur_user_projects_for_homework homework @@ -2763,20 +2763,20 @@ module ApplicationHelper end else if homework.homework_detail_manual && homework.homework_detail_manual.comment_status == 2 && StudentWorksEvaluationDistribution.where("student_work_id = #{work.id}").count > 0 #匿评作业,且作业状态不是在开启匿评之前 - link_to "作品匿评", student_work_index_url_in_org(homework.id), :class => 'c_blue', :title => "开启匿评后不可修改作品" + link_to "作品匿评", student_work_index_url_in_org(homework.id, 2), :class => 'c_blue', :title => "开启匿评后不可修改作品" elsif homework.homework_detail_manual && homework.homework_detail_manual.comment_status == 3 - link_to "查看作品(#{count})",student_work_index_url_in_org(homework.id), :class => 'c_blue', :title => "匿评已结束" + link_to "查看作品(#{count})",student_work_index_url_in_org(homework.id, 2), :class => 'c_blue', :title => "匿评已结束" elsif homework.homework_type == 2 && Time.parse(homework.end_time.to_s).strftime("%Y-%m-%d") >= Time.now.strftime("%Y-%m-%d")#编程作业不能修改作品 link_to "修改作品(#{count})", new_student_work_url_without_domain(homework.id),:class => 'c_blue' elsif Time.parse(homework.end_time.to_s).strftime("%Y-%m-%d") >= Time.now.strftime("%Y-%m-%d") && work.user_id == User.current.id link_to "修改作品(#{count})", edit_student_work_url_without_domain(work.id),:class => 'c_blue' else - link_to "查看作品(#{count})", student_work_index_url_in_org(homework.id), :class => 'c_blue', :title => "作业截止后不可修改作品" + link_to "查看作品(#{count})", student_work_index_url_in_org(homework.id, 2), :class => 'c_blue', :title => "作业截止后不可修改作品" end end end else - link_to "作品(#{count})",student_work_index_url_in_org(homework.id),:class => "c_blue" + link_to "作品(#{count})",student_work_index_url_in_org(homework.id, 2),:class => "c_blue" end end @@ -2799,15 +2799,15 @@ module ApplicationHelper end else if homework.homework_detail_manual && homework.homework_detail_manual.comment_status == 2 #匿评作业,且作业状态不是在开启匿评之前 - link_to "作品匿评", student_work_index_url_in_org(homework.id), :class => 'hw_btn_green2 fr mt5', :title => "开启匿评后不可修改作品", :target => '_blank' + link_to "作品匿评", student_work_index_url_in_org(homework.id, 2), :class => 'hw_btn_green2 fr mt5', :title => "开启匿评后不可修改作品", :target => '_blank' elsif homework.homework_detail_manual && homework.homework_detail_manual.comment_status == 3 - link_to "查看作品",student_work_index_url_in_org(homework.id), :class => 'hw_btn_green2 fr mt5', :title => "匿评已结束", :target => '_blank' + link_to "查看作品",student_work_index_url_in_org(homework.id, 2), :class => 'hw_btn_green2 fr mt5', :title => "匿评已结束", :target => '_blank' elsif homework.homework_type == 2 && Time.parse(homework.end_time.to_s).strftime("%Y-%m-%d") >= Time.now.strftime("%Y-%m-%d")#编程作业不能修改作品 link_to "修改作品", new_student_work_url_without_domain(homework.id),:class => 'hw_btn_green2 fr mt5', :target => '_blank' elsif Time.parse(homework.end_time.to_s).strftime("%Y-%m-%d") >= Time.now.strftime("%Y-%m-%d") && work.user_id == User.current.id link_to "修改作品", edit_student_work_url_without_domain(work.id),:class => 'hw_btn_green2 fr mt5', :target => '_blank' else - link_to "查看作品", student_work_index_url_in_org(homework.id), :class => 'hw_btn_green2 fr mt5', :title => "作业截止后不可修改作品", :target => '_blank' + link_to "查看作品", student_work_index_url_in_org(homework.id, 2), :class => 'hw_btn_green2 fr mt5', :title => "作业截止后不可修改作品", :target => '_blank' end end end @@ -3136,13 +3136,13 @@ def homework_common_index_url_in_org(course_id) Setting.protocol + "://" + Setting.host_name + "/homework_common?course=" + course_id.to_s end -def student_work_index_url_in_org(homework_id, is_focus = '', show_work_id = '') +def student_work_index_url_in_org(homework_id, tab = 1, is_focus = '', show_work_id = '') if is_focus != '' - Setting.protocol + "://" + Setting.host_name + "/student_work?homework=" + homework_id.to_s + "&is_focus=" + is_focus.to_s + Setting.protocol + "://" + Setting.host_name + "/student_work?homework=" + homework_id.to_s + "&tab=" + tab.to_s + "&is_focus=" + is_focus.to_s elsif show_work_id != '' - Setting.protocol + "://" + Setting.host_name + "/student_work?homework=" + homework_id.to_s + "&show_work_id=" + show_work_id.to_s + Setting.protocol + "://" + Setting.host_name + "/student_work?homework=" + homework_id.to_s + "&tab=" + tab.to_s + "&show_work_id=" + show_work_id.to_s else - Setting.protocol + "://" + Setting.host_name + "/student_work?homework=" + homework_id.to_s + Setting.protocol + "://" + Setting.host_name + "/student_work?homework=" + homework_id.to_s + "&tab=" + tab.to_s end end diff --git a/app/views/exercise/student_exercise_list.html.erb b/app/views/exercise/student_exercise_list.html.erb index 1cbe058a1..443a9f5f1 100644 --- a/app/views/exercise/student_exercise_list.html.erb +++ b/app/views/exercise/student_exercise_list.html.erb @@ -84,7 +84,7 @@
    -
    +
    <% if @exercise.exercise_status == 1 %> diff --git a/app/views/homework_common/open_student_works.js.erb b/app/views/homework_common/open_student_works.js.erb index 2dd4a88a4..c65034689 100644 --- a/app/views/homework_common/open_student_works.js.erb +++ b/app/views/homework_common/open_student_works.js.erb @@ -1,4 +1,8 @@ +<% if @hw_status == 5 %> +$("#homework_post_brief").html("<%= escape_javascript(render :partial => 'student_work/homework_post_brief', :locals => {:homework => @homework, :is_teacher => @is_teacher}) %>"); +<% else %> $("#user_activity_<%= @user_activity_id%>").replaceWith("<%= escape_javascript(render :partial => 'users/course_homework', :locals => {:activity => @homework,:user_activity_id =>@user_activity_id,:hw_status=>@hw_status}) %>"); +<% end %> <% if @user_activity_id != @homework.id %> sd_create_editor_from_data(<%= @user_activity_id%>,"","100%", "UserActivity"); <% else %> diff --git a/app/views/homework_common/set_evaluation_attr.js.erb b/app/views/homework_common/set_evaluation_attr.js.erb index 42bc842bc..e084967c7 100644 --- a/app/views/homework_common/set_evaluation_attr.js.erb +++ b/app/views/homework_common/set_evaluation_attr.js.erb @@ -1,5 +1,9 @@ clickCanel(); +<% if @hw_status == 5 %> +$("#homework_post_brief").html("<%= escape_javascript(render :partial => 'student_work/homework_post_brief', :locals => {:homework => @homework, :is_teacher => @is_teacher}) %>"); +<% else %> $("#user_activity_<%= @user_activity_id%>").replaceWith("<%= escape_javascript(render :partial => 'users/course_homework', :locals => {:activity => @homework,:user_activity_id =>@user_activity_id,:hw_status=>@hw_status}) %>"); +<% end %> <% if @user_activity_id != @homework.id %> sd_create_editor_from_data(<%= @user_activity_id%>,"","100%", "UserActivity"); <% else %> diff --git a/app/views/homework_common/start_anonymous_comment.js.erb b/app/views/homework_common/start_anonymous_comment.js.erb index 94db99dd8..809ba5b05 100644 --- a/app/views/homework_common/start_anonymous_comment.js.erb +++ b/app/views/homework_common/start_anonymous_comment.js.erb @@ -1,6 +1,10 @@ <% if @statue == 1%> alert('启动成功'); + <% if @hw_status == 5 %> + $("#homework_post_brief").html("<%= escape_javascript(render :partial => 'student_work/homework_post_brief', :locals => {:homework => @homework, :is_teacher => @is_teacher}) %>"); + <% else %> $("#user_activity_<%= @user_activity_id%>").replaceWith("<%= escape_javascript(render :partial => 'users/course_homework', :locals => {:activity => @homework,:user_activity_id =>@user_activity_id,:hw_status=>@hw_status}) %>"); + <% end %> $("#evaluation_start_time_<%=@user_activity_id %>").html("匿评开启时间:<%=format_time(Time.now) %>"); <% if @user_activity_id != @homework.id %> sd_create_editor_from_data(<%= @user_activity_id%>,"","100%", "UserActivity"); diff --git a/app/views/homework_common/stop_anonymous_comment.js.erb b/app/views/homework_common/stop_anonymous_comment.js.erb index c540c323d..027f477a7 100644 --- a/app/views/homework_common/stop_anonymous_comment.js.erb +++ b/app/views/homework_common/stop_anonymous_comment.js.erb @@ -1,5 +1,9 @@ alert('关闭成功'); +<% if @hw_status == 5 %> +$("#homework_post_brief").html("<%= escape_javascript(render :partial => 'student_work/homework_post_brief', :locals => {:homework => @homework, :is_teacher => @is_teacher}) %>"); +<% else %> $("#user_activity_<%= @user_activity_id%>").replaceWith("<%= escape_javascript(render :partial => 'users/course_homework', :locals => {:activity => @homework,:user_activity_id =>@user_activity_id,:hw_status=>@hw_status}) %>"); +<% end %> $("#evaluation_end_time_<%=@homework.id %>").html("匿评关闭时间:<%=format_time(Time.now) %>"); <% if @user_activity_id != @homework.id %> sd_create_editor_from_data(<%= @user_activity_id%>,"","100%", "UserActivity"); diff --git a/app/views/organizations/_org_course_homework.html.erb b/app/views/organizations/_org_course_homework.html.erb index 510a743b1..ebbd5fa32 100644 --- a/app/views/organizations/_org_course_homework.html.erb +++ b/app/views/organizations/_org_course_homework.html.erb @@ -73,7 +73,7 @@ <% work = cur_user_works_for_homework activity %> <% if activity.end_time < Date.today && !is_teacher && !work.nil? && work.user == User.current %>
    - <%=link_to "追加附件", student_work_index_url_in_org(activity.id, 1), :class => 'c_blue', :title => "可追加作品修订附件" %> + <%=link_to "追加附件", student_work_index_url_in_org(activity.id, 2, 1), :class => 'c_blue', :title => "可追加作品修订附件" %>
    <% end %> <% if activity.homework_type == 2 && is_teacher%> @@ -161,9 +161,9 @@
    <% if User.current.member_of_course?(activity.course) || User.current.admin? || activity.is_open == 1 %> - <%= link_to image_tag(url_to_avatar(User.find sw.user_id), :width => "40", :height => "40"), student_work_index_url_in_org(activity.id, '', sw.id), :alt => "学生头像" %> + <%= link_to image_tag(url_to_avatar(User.find sw.user_id), :width => "40", :height => "40"), student_work_index_url_in_org(activity.id, 2, '', sw.id), :alt => "学生头像" %> <% else %> <%= image_tag(url_to_avatar(User.find sw.user_id), :width => "40", :height => "40", :title => '该作业的作品暂未公开') %> diff --git a/app/views/student_work/_homework_post_brief.html.erb b/app/views/student_work/_homework_post_brief.html.erb new file mode 100644 index 000000000..b575c8788 --- /dev/null +++ b/app/views/student_work/_homework_post_brief.html.erb @@ -0,0 +1,102 @@ +
    +<%=link_to image_tag(url_to_avatar(homework.user),width:"50px", height: "50px"), user_activities_path(homework.user_id)%> +
    +
    +
    + <%= link_to homework.user.show_name, user_activities_path(homework.user_id), :class => "newsBlue mr15"%> + TO + <%=link_to homework.course.syllabus.title, syllabus_path(homework.course.syllabus_id), :class => 'newsBlue ml15', :target => '_blank' %> + + <%= link_to homework.course.name, course_path(homework.course_id), :class => "newsBlue"%> +
    + +<%=get_hw_status(homework).html_safe %> +
    +<% if homework.homework_type == 3 && homework.homework_detail_group.base_on_project == 1%> + 系统提示:该作业要求各组长<%=link_to "创建项目", new_project_path(:host=>Setting.host_name),:class=>"linkBlue",:title=>"新建项目",:style=>"text-decoration:underline;"%>,组成员加入项目,然后由组长关联项目。谢谢配合! +<% elsif homework.homework_type == 3 && homework.homework_detail_group.base_on_project == 0%> + 系统提示:该作业要求各组长提交作品,提交作品时请添加组成员。谢谢配合! +<% end %> + +<% is_pro = homework.homework_type == 2 && is_teacher %> +<% is_base_group = homework.homework_type == 3 && homework.homework_detail_group.base_on_project == 1 && !is_teacher %> +
    + <%= render :partial => 'users/homework_opr', :locals => {:activity => homework, :is_teacher => is_teacher, :hw_status => 5, :user_activity_id => homework.id} %> + <% if is_pro || is_base_group %> +
    + <% end %> + <% if !homework.publish_time.nil? %> +
    + <%= l(:label_publish_time)%>:<%= homework.publish_time%> 00:00 +
    + <% end %> + <% if homework.homework_detail_manual && homework.homework_detail_manual.comment_status < 2 %> +
    提交截止时间:<%= homework.end_time.to_s %> 23:59
    + <% elsif homework.homework_detail_manual && homework.homework_detail_manual.comment_status >= 2 && homework.anonymous_comment == 0%> +
    匿评截止时间:<%= homework.homework_detail_manual.evaluation_end.to_s %> 23:59
    + <% end %> +
    +
    +
    +
    +
    +
    + <%= homework.description %> +
    +
    + <% if is_pro %> +
    测试集:<%=homework.homework_tests.count %>组 + + + + + + + <% homework.homework_tests.each_with_index do |test, i| %> + + + + + + <% end %> +
     测试集输入测试集输出
    <%=i+1 %><%=test.input %><%=test.output %>
    +
    + <% end %> +
    +
    + <% if homework.homework_detail_manual%> + <% if homework.homework_detail_manual.comment_status == 1%> + <% end_time = homework.end_time.to_time.to_i + 24*60*60 - 1 %> + <% if end_time >= Time.now.to_i %> +
    提交剩余时间: <%= (end_time - Time.now.to_i) / (24*60*60) %> 天 + <%= ((end_time - Time.now.to_i) % (24*60*60)) / (60*60)%> 小时 + <%= (((end_time - Time.now.to_i) % (24*60*60)) % (60*60)) / 60%>
    + <% else %> +
    提交已截止
    + <% end %> + <% elsif homework.homework_detail_manual.comment_status == 2%> + <% end_time = homework.homework_detail_manual.evaluation_end.to_time.to_i + 24*60*60 - 1 %> + <% if end_time >= Time.now.to_i %> +
    匿评剩余时间: <%= (end_time - Time.now.to_i) / (24*60*60)%> 天 + <%= ((end_time - Time.now.to_i) % (24*60*60)) / (60*60)%> 小时 + <%= (((end_time - Time.now.to_i) % (24*60*60)) % (60*60)) / 60%>
    + <% else %> +
    匿评已截止
    + <% end %> + <% end%> + <% end%> +
    +
    +
    +
    +
    +
    + <%= render :partial=>"attachments/activity_attach", :locals=>{:activity => homework} %> +
    + +<%= render :partial => "users/homework_base_info", :locals =>{:activity => homework, :user_activity_id =>homework.id, :is_teacher => is_teacher, :hw_status => 5} %> +
    +
    \ No newline at end of file diff --git a/app/views/student_work/_student_work_list.html.erb b/app/views/student_work/_student_work_list.html.erb index 73f37602b..6bcb2bb5e 100644 --- a/app/views/student_work/_student_work_list.html.erb +++ b/app/views/student_work/_student_work_list.html.erb @@ -93,10 +93,7 @@ <% elsif @homework.homework_type == 1 %> $("#about_hwork_<%= work.id%>").html("<%= escape_javascript(render :partial => 'show',:locals => {:work => work, :score =>student_work_score(work,User.current),:student_work_scores => work.student_works_scores.order("updated_at desc"),:is_focus => @is_focus}) %>"); <% elsif @homework.homework_type == 3 %> - <% pro = @homework.student_work_projects.where(:user_id => User.current.id).first %> - <% if pro && pro.student_work_id == work.id %> - $("#about_hwork_<%= work.id%>").html("<%= escape_javascript(render :partial => 'show',:locals => {:work => work, :score =>student_work_score(work,User.current),:student_work_scores => work.student_works_scores.order("updated_at desc"),:is_focus => @is_focus}) %>"); - <% end %> + $("#about_hwork_<%= work.id%>").html("<%= escape_javascript(render :partial => 'show',:locals => {:work => work, :score =>student_work_score(work,User.current),:student_work_scores => work.student_works_scores.order("updated_at desc"),:is_focus => @is_focus}) %>"); <% end %> $('#score_<%= work.id%>').peSlider({range: 'min'}); <% end %> diff --git a/app/views/student_work/cancel_relate_project.js.erb b/app/views/student_work/cancel_relate_project.js.erb index 2dd4a88a4..c65034689 100644 --- a/app/views/student_work/cancel_relate_project.js.erb +++ b/app/views/student_work/cancel_relate_project.js.erb @@ -1,4 +1,8 @@ +<% if @hw_status == 5 %> +$("#homework_post_brief").html("<%= escape_javascript(render :partial => 'student_work/homework_post_brief', :locals => {:homework => @homework, :is_teacher => @is_teacher}) %>"); +<% else %> $("#user_activity_<%= @user_activity_id%>").replaceWith("<%= escape_javascript(render :partial => 'users/course_homework', :locals => {:activity => @homework,:user_activity_id =>@user_activity_id,:hw_status=>@hw_status}) %>"); +<% end %> <% if @user_activity_id != @homework.id %> sd_create_editor_from_data(<%= @user_activity_id%>,"","100%", "UserActivity"); <% else %> diff --git a/app/views/student_work/index.html.erb b/app/views/student_work/index.html.erb index 3ec6232db..8ab08b7e0 100644 --- a/app/views/student_work/index.html.erb +++ b/app/views/student_work/index.html.erb @@ -2,6 +2,7 @@ <%= javascript_include_tag "/assets/codemirror/codemirror_python_ruby_c" %> <%= javascript_include_tag "resizeable_table" %> <%= stylesheet_link_tag "/assets/codemirror/codemirror" %> +<%= import_ke(enable_at: true, prettify: false, init_activity: true) %> <% end %> -
    - <% com_time = project.project_score.commit_time %> - <% forge_time=ForgeActivity.where("project_id=?",project.id).last.updated_at if ForgeActivity.where("project_id=?",project.id).last %> - <% if project.is_public || User.current.member_of?(project) || User.current.admin? %> - <%= link_to image_tag(url_to_avatar(project),:width=>"40",:height => "40",:class => "borderRadius relatePImage"),project_path(project.id,:host=>Setting.host_name),:id=>"project_img_"+project.id.to_s+"_"+activity.id.to_s,:alt =>"项目头像", :target => '_blank' %> - - <% update_time = time_from_now !com_time.nil? && format_time(com_time) > format_time(forge_time) ? com_time : forge_time %> - - <% else %> - <%= image_tag(url_to_avatar(project),:width=>"40",:height => "40",:class => "borderRadius relatePImage",:id=>"project_img_"+project.id.to_s+"_"+activity.id.to_s,:alt =>"项目头像",:title => "私有项目不可访问") %> - - - <% end %> -
    - 项目名称:<%=project.name %>
    - 创建者:<%=(User.find project.user_id).show_name %>(组长)
    - 更新时间:<%=time_from_now !com_time.nil? && format_time(com_time) > format_time(forge_time) ? com_time : forge_time %> -
    -
    - <% if i == 9 && projects.count > 10 %> -
    更多>> - <% end %> - <% if i > 9 && i == (projects.count - 1) %> - 收回<< - <% end %> - <% end %> -
    - <% end %> - <% end %> -
    - <% if is_teacher%> - <% comment_status = activity.homework_detail_manual.comment_status %> -
    -
      -
    • -
        -
      • - <%= link_to l(:button_edit),edit_homework_common_path(activity, :hw_status => hw_status), :class => "postOptionLink"%> -
      • -
      • - <%= link_to(l(:label_bid_respond_delete), homework_common_path(activity, :hw_status => hw_status),:method => 'delete', :confirm => l(:text_are_you_sure), :class => "postOptionLink") %> -
      • -
      • - <%= link_to("评分设置", score_rule_set_homework_common_path(activity,:user_activity_id => user_activity_id, :hw_status => hw_status),:class => "postOptionLink", :remote => true) %> -
      • - <% if activity.anonymous_comment == 0 %> -
      • - <%= link_to("匿评设置", start_evaluation_set_homework_common_path(activity,:user_activity_id => user_activity_id, :hw_status => hw_status),:class => "postOptionLink", :remote => true) if activity.homework_detail_manual.comment_status == 1%> -
      • -
      • - <%= homework_anonymous_comment activity,hw_status,user_activity_id %> -
      • - <% end %> - <% if activity.anonymous_comment == 0 && (comment_status == 0 || comment_status == 1)%> -
      • - <%= link_to("禁用匿评", alert_forbidden_anonymous_comment_homework_common_path(activity,:user_activity_id => user_activity_id),:class => "postOptionLink", - :title => "匿评是同学之间的双盲互评过程:每个同学将评阅系统分配给他/她的若干个作品", :remote => true)%> -
      • - <% end %> - <% if (activity.anonymous_comment == 1 && activity.is_open == 0) || (activity.anonymous_comment == 0 && comment_status == 3 && activity.is_open == 0) %> -
      • - <%= link_to("公开作品", alert_open_student_works_homework_common_path(activity,:user_activity_id => user_activity_id, :hw_status => hw_status),:class => "postOptionLink", :remote => true)%> -
      • - <% elsif activity.is_open == 1 %> -
      • - <%= link_to("取消公开", alert_open_student_works_homework_common_path(activity,:user_activity_id => user_activity_id, :hw_status => hw_status),:class => "postOptionLink", :remote => true)%> -
      • - <% end %> -
      -
    • -
    -
    - <% end%> + <%= render :partial => "users/homework_base_info", :locals =>{:activity => activity, :user_activity_id =>user_activity_id, :is_teacher => is_teacher, :hw_status => hw_status} %>
    - <% count=activity.journals_for_messages.count %> -
    - <%= render :partial => 'users/reply_banner', :locals => {:count => count, :activity => activity, :user_activity_id => user_activity_id, :hw_status => hw_status} %> - - <% comments = activity.journals_for_messages.reorder("created_on desc").limit(3) %> - <% if count > 0 %> -
    - <%=render :partial => 'users/news_replies', :locals => {:comments => comments, :type => 'HomeworkCommon', :hw_status => hw_status, :is_teacher => is_teacher, :user_activity_id => user_activity_id, :activity_id => activity.id} %> -
    - <% end %> - -
    -
    <%= link_to image_tag(url_to_avatar(User.current), :width => "33", :height => "33"), :alt => "用户头像" %>
    -
    - <% if User.current.logged? %> -
    - <%= form_for('new_form',:url => {:controller => 'words', :action => 'leave_homework_message', :id => activity.id},:method => "post", :remote => true) do |f|%> - <%= hidden_field_tag 'user_activity_id',params[:user_activity_id],:value =>user_activity_id %> - <%= hidden_field_tag 'hw_status',params[:hw_status],:value =>hw_status %> -
    - - -
    -

    - <% end%> -
    - <% else %> - <%= render :partial => "users/show_unlogged" %> - <% end %> -
    -
    -
    -
    -
    + <%= render :partial => 'users/homework_post_reply', :locals => {:activity => activity, :user_activity_id => user_activity_id, :hw_status => hw_status, :is_teacher => is_teacher} %>
    + +
    + <% com_time = project.project_score.commit_time %> + <% forge_time=ForgeActivity.where("project_id=?",project.id).last.updated_at if ForgeActivity.where("project_id=?",project.id).last %> + <% if project.is_public || User.current.member_of?(project) || User.current.admin? %> + <%= link_to image_tag(url_to_avatar(project),:width=>"40",:height => "40",:class => "borderRadius relatePImage"),project_path(project.id,:host=>Setting.host_name),:id=>"project_img_"+project.id.to_s+"_"+activity.id.to_s,:alt =>"项目头像", :target => '_blank' %> + + <% update_time = time_from_now !com_time.nil? && format_time(com_time) > format_time(forge_time) ? com_time : forge_time %> + + <% else %> + <%= image_tag(url_to_avatar(project),:width=>"40",:height => "40",:class => "borderRadius relatePImage",:id=>"project_img_"+project.id.to_s+"_"+activity.id.to_s,:alt =>"项目头像",:title => "私有项目不可访问") %> + + + <% end %> +
    + 项目名称:<%=project.name %>
    + 创建者:<%=(User.find project.user_id).show_name %>(组长)
    + 更新时间:<%=time_from_now !com_time.nil? && format_time(com_time) > format_time(forge_time) ? com_time : forge_time %> +
    +
    + <% if i == 9 && projects.count > 10 %> + 更多>> + <% end %> + <% if i > 9 && i == (projects.count - 1) %> + 收回<< + <% end %> + <% end %> +
    + <% end %> +<% end %> +
    + +<% if is_teacher%> + <% comment_status = activity.homework_detail_manual.comment_status %> +
    +
      +
    • +
        +
      • + <%= link_to l(:button_edit),edit_homework_common_path(activity, :hw_status => hw_status), :class => "postOptionLink"%> +
      • +
      • + <%= link_to(l(:label_bid_respond_delete), homework_common_path(activity, :hw_status => hw_status),:method => 'delete', :confirm => l(:text_are_you_sure), :class => "postOptionLink") %> +
      • +
      • + <%= link_to("评分设置", score_rule_set_homework_common_path(activity,:user_activity_id => user_activity_id, :hw_status => hw_status),:class => "postOptionLink", :remote => true) %> +
      • + <% if activity.anonymous_comment == 0 %> +
      • + <%= link_to("匿评设置", start_evaluation_set_homework_common_path(activity,:user_activity_id => user_activity_id, :hw_status => hw_status),:class => "postOptionLink", :remote => true) if activity.homework_detail_manual.comment_status == 1%> +
      • +
      • + <%= homework_anonymous_comment activity,hw_status,user_activity_id %> +
      • + <% end %> + <% if activity.anonymous_comment == 0 && (comment_status == 0 || comment_status == 1)%> +
      • + <%= link_to("禁用匿评", alert_forbidden_anonymous_comment_homework_common_path(activity,:user_activity_id => user_activity_id),:class => "postOptionLink", + :title => "匿评是同学之间的双盲互评过程:每个同学将评阅系统分配给他/她的若干个作品", :remote => true)%> +
      • + <% end %> + <% if (activity.anonymous_comment == 1 && activity.is_open == 0) || (activity.anonymous_comment == 0 && comment_status == 3 && activity.is_open == 0) %> +
      • + <%= link_to("公开作品", alert_open_student_works_homework_common_path(activity,:user_activity_id => user_activity_id, :hw_status => hw_status),:class => "postOptionLink", :remote => true)%> +
      • + <% elsif activity.is_open == 1 %> +
      • + <%= link_to("取消公开", alert_open_student_works_homework_common_path(activity,:user_activity_id => user_activity_id, :hw_status => hw_status),:class => "postOptionLink", :remote => true)%> +
      • + <% end %> +
      +
    • +
    +
    +<% end%> \ No newline at end of file diff --git a/app/views/users/_homework_opr.html.erb b/app/views/users/_homework_opr.html.erb new file mode 100644 index 000000000..53d16b15d --- /dev/null +++ b/app/views/users/_homework_opr.html.erb @@ -0,0 +1,43 @@ +<% if activity.homework_type == 3 && !is_teacher && activity.homework_detail_group.base_on_project == 1 && User.current.member_of_course?(activity.course)%> + <% projects = cur_user_projects_for_homework activity %> + <% works = cur_user_works_for_homework activity %> + <% if works.nil? && projects.nil? %> +
    + <%=link_to "关联项目",new_student_work_project_student_work_index_path(:homework => activity.id,:hw_status=>hw_status,:user_activity_id=>user_activity_id),remote: true,:class=> 'c_blue', :title=> '请各组长关联作业项目' %> +
    + <% elsif works.nil? %> +
    + <%=link_to "取消关联",cancel_relate_project_student_work_index_path(:homework => activity.id,:hw_status=>hw_status,:user_activity_id=>user_activity_id), :confirm => "您确定要取消关联吗?", remote: true,:class => "c_blue", :title=> '取消关联项目' %> +
    + <% end %> +<% end %> +
    + <%= user_for_homework_common activity,is_teacher %> +
    +<% work = cur_user_works_for_homework activity %> +<% if activity.end_time < Date.today && !is_teacher && !work.nil? && work.user == User.current %> +
    + <%=link_to "追加附件", student_work_index_url_in_org(activity.id, 2, 1), :class => 'c_blue', :title => "可追加作品修订附件" %> +
    +<% end %> +<% if activity.homework_type == 2 && is_teacher%> +
    + <%= link_to "模拟答题", new_user_commit_homework_users_path(homework_id: activity.id, is_test: true), class: 'c_blue test-program-btn', title: '教师可以通过模拟答题设置作业的标准答案' %> +
    + <% if activity.homework_detail_manual.comment_status != 0 %> +
    + <%= link_to "代码查重", work_canrepeat_student_work_index_path(homework: activity.id, course_id: activity.course.id), class: 'c_blue test-program-btn',:remote => true %> +
    + <% end %> +<% end %> +<% if activity.homework_type == 2%> +
    + 语言: + <%= activity.language_name%> +
    +<% end %> +<% if activity.homework_type == 3 && activity.homework_detail_group%> +
    + 分组人数:<%=activity.homework_detail_group.min_num %>-<%=activity.homework_detail_group.max_num %> 人 +
    +<% end %> \ No newline at end of file diff --git a/app/views/users/_homework_post_reply.html.erb b/app/views/users/_homework_post_reply.html.erb new file mode 100644 index 000000000..0037e35ac --- /dev/null +++ b/app/views/users/_homework_post_reply.html.erb @@ -0,0 +1,34 @@ +<% count=activity.journals_for_messages.count %> +
    + <%= render :partial => 'users/reply_banner', :locals => {:count => count, :activity => activity, :user_activity_id => user_activity_id, :hw_status => hw_status} %> + + <% comments = activity.journals_for_messages.reorder("created_on desc").limit(3) %> + <% if count > 0 %> +
    + <%=render :partial => 'users/news_replies', :locals => {:comments => comments, :type => 'HomeworkCommon', :hw_status => hw_status, :is_teacher => is_teacher, :user_activity_id => user_activity_id, :activity_id => activity.id} %> +
    + <% end %> + +
    +
    <%= link_to image_tag(url_to_avatar(User.current), :width => "33", :height => "33"), :alt => "用户头像" %>
    +
    + <% if User.current.logged? %> +
    + <%= form_for('new_form',:url => {:controller => 'words', :action => 'leave_homework_message', :id => activity.id},:method => "post", :remote => true) do |f|%> + <%= hidden_field_tag 'user_activity_id',params[:user_activity_id],:value =>user_activity_id %> + <%= hidden_field_tag 'hw_status',params[:hw_status],:value =>hw_status %> +
    + + +
    +

    + <% end%> +
    + <% else %> + <%= render :partial => "users/show_unlogged" %> + <% end %> +
    +
    +
    +
    +
    \ No newline at end of file diff --git a/app/views/users/_user_homework_detail.html.erb b/app/views/users/_user_homework_detail.html.erb index 6f1fb7843..3351ae3f2 100644 --- a/app/views/users/_user_homework_detail.html.erb +++ b/app/views/users/_user_homework_detail.html.erb @@ -50,7 +50,7 @@ <% work = cur_user_works_for_homework homework_common %> <% if !is_teacher && !work.nil? && homework_common.end_time < Date.today && work.user == User.current %>
    - <%=link_to "追加附件", student_work_index_url_in_org(homework_common.id, 1), :class => 'c_blue', :title => "可追加作品修订附件" %> + <%=link_to "追加附件", student_work_index_url_in_org(homework_common.id, 2, 1), :class => 'c_blue', :title => "可追加作品修订附件" %>
    <% end %> <% if homework_common.homework_type == 2 && is_teacher%> diff --git a/app/views/words/destroy.js.erb b/app/views/words/destroy.js.erb index 5dcdc6401..ab41b1ae6 100644 --- a/app/views/words/destroy.js.erb +++ b/app/views/words/destroy.js.erb @@ -31,7 +31,7 @@ <% elsif @user && @jours_count%> $('#jour_count').html("<%= @jours_count %>"); <% elsif @homework%> - $("#user_activity_<%= @user_activity_id%>").replaceWith("<%= escape_javascript(render :partial => 'users/course_homework', :locals => {:activity => @homework,:user_activity_id =>@user_activity_id,:hw_status=>@hw_status}) %>"); + $("#homework_post_reply_<%= @user_activity_id%>").replaceWith("<%= escape_javascript(render :partial => 'users/homework_post_reply', :locals => {:activity => @homework, :user_activity_id => @user_activity_id, :hw_status => @hw_status, :is_teacher => @is_teacher}) %>"); <% if @user_activity_id != @homework.id %> sd_create_editor_from_data(<%= @user_activity_id%>,"","100%", "UserActivity"); <% else %> diff --git a/app/views/words/leave_homework_message.js.erb b/app/views/words/leave_homework_message.js.erb index 61a8aca14..f6a89323f 100644 --- a/app/views/words/leave_homework_message.js.erb +++ b/app/views/words/leave_homework_message.js.erb @@ -1,4 +1,4 @@ -$("#user_activity_<%= @user_activity_id%>").replaceWith("<%= escape_javascript(render :partial => 'users/course_homework', :locals => {:activity => @homework_common,:user_activity_id =>@user_activity_id,:hw_status=>@hw_status}) %>"); +$("#homework_post_reply_<%= @user_activity_id%>").replaceWith("<%= escape_javascript(render :partial => 'users/homework_post_reply', :locals => {:activity => @homework_common, :user_activity_id => @user_activity_id, :hw_status => @hw_status, :is_teacher => @is_teacher}) %>"); <% if @user_activity_id != @homework_common.id %> sd_create_editor_from_data(<%= @user_activity_id%>,"","100%", "UserActivity"); <% else %> diff --git a/app/views/words/reply_to_homework.js.erb b/app/views/words/reply_to_homework.js.erb index 61a8aca14..f6a89323f 100644 --- a/app/views/words/reply_to_homework.js.erb +++ b/app/views/words/reply_to_homework.js.erb @@ -1,4 +1,4 @@ -$("#user_activity_<%= @user_activity_id%>").replaceWith("<%= escape_javascript(render :partial => 'users/course_homework', :locals => {:activity => @homework_common,:user_activity_id =>@user_activity_id,:hw_status=>@hw_status}) %>"); +$("#homework_post_reply_<%= @user_activity_id%>").replaceWith("<%= escape_javascript(render :partial => 'users/homework_post_reply', :locals => {:activity => @homework_common, :user_activity_id => @user_activity_id, :hw_status => @hw_status, :is_teacher => @is_teacher}) %>"); <% if @user_activity_id != @homework_common.id %> sd_create_editor_from_data(<%= @user_activity_id%>,"","100%", "UserActivity"); <% else %> diff --git a/public/stylesheets/courses.css b/public/stylesheets/courses.css index 8f6c56a4b..a2117bdf3 100644 --- a/public/stylesheets/courses.css +++ b/public/stylesheets/courses.css @@ -130,7 +130,7 @@ a.hworkSearchIcon:hover {background:url(../images/nav_icon.png) -49px -1px no-re /*作业信息*/ .mt-2 {margin-top:-2px;} -.homeworkInfo {background:#F6F6F6; padding:10px; margin-bottom:10px;} +.homeworkInfo {background:#F6F6F6; padding:10px;} .homeworkDetail {line-height:18px; font-size:12px; color:#484848; overflow:hidden;} .homeworkDetail p,.homeworkDetail div,.homeworkDetail em, .homeworkDetail span{text-align: justify; text-justify:inter-ideograph; word-break: normal !important; word-wrap: break-word !important; line-height: 18px !important;} .max_h54 {max-height:54px; } diff --git a/public/stylesheets/css/courses.css b/public/stylesheets/css/courses.css index 1841e0348..eccbcc9b1 100644 --- a/public/stylesheets/css/courses.css +++ b/public/stylesheets/css/courses.css @@ -249,7 +249,7 @@ a.hworkSearchIcon:hover {background:url(../images/nav_icon.png) -49px -1px no-re .StudentName{display: table-cell;width: 115px;vertical-align: middle;text-align: left;height: 40px;} /*作业信息*/ -.homeworkInfo {background:#F6F6F6; padding:10px; margin-bottom:10px;} +.homeworkInfo {background:#F6F6F6; padding:10px;} .homeworkDetail {line-height:18px; font-size:12px; color:#484848; overflow:hidden;} .homeworkDetail p,.homeworkDetail div,.homeworkDetail em, .homeworkDetail span{text-align: justify; text-justify:inter-ideograph; word-break: normal !important; word-wrap: break-word !important; line-height: 18px !important;} .homeworkState {padding:3px 5px; background-color:#28be6c; border-radius:3px; float:left; margin-left:15px; color:#ffffff;} From 25b2418730e977e66edfebb6aa4a7c9786232dc4 Mon Sep 17 00:00:00 2001 From: Tim Date: Wed, 21 Sep 2016 14:33:46 +0800 Subject: [PATCH 20/50] =?UTF-8?q?=E5=AE=8C=E5=96=84=E8=B5=84=E6=96=99?= =?UTF-8?q?=E7=95=8C=E9=9D=A2=E9=97=AE=E9=A2=98=E5=8F=8D=E9=A6=88=E6=A1=86?= =?UTF-8?q?=E6=A0=B7=E5=BC=8F=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../layouts/_forbidden_new_feedback.html.erb | 47 ++++++++++++------- public/stylesheets/nyan.css | 2 +- 2 files changed, 30 insertions(+), 19 deletions(-) diff --git a/app/views/layouts/_forbidden_new_feedback.html.erb b/app/views/layouts/_forbidden_new_feedback.html.erb index 03c9855f9..9dc4a560b 100644 --- a/app/views/layouts/_forbidden_new_feedback.html.erb +++ b/app/views/layouts/_forbidden_new_feedback.html.erb @@ -3,38 +3,49 @@
    -
    - - - - +
    + 问题和建议 + × +
    -
    -
    +
    +
    <% get_memo %> <%= form_for(@new_memo, :url => create_feedback_forum_path(@public_forum)) do |f| %> - <%= f.text_area :subject, :id=>"subject", :class => "opnionText", :placeholder => l(:label_feedback_tips) %> + <%= f.text_area :subject, :id=>"subject", :class => "opnionText mb5", :placeholder => "完善您的基本资料后,可在此输入问题和建议", :disabled => "disabled" %> <%= f.hidden_field :content,:id => 'hidden', :required => true , :value => l(:label_feedback_value) %> - - - <%= l(:label_submit)%> - + + + <%#= l(:label_submit)%> + +
    <% end %>
    -
    +
    +
    +
    <%#= l(:label_technical_support) %> - Trustie师姐师兄答疑群 + +

    加入QQ群

    +
    +
    +

    关注官方微信

    +
    -
    -
    - <%= l(:label_submit)%> - +
    +
    +
    + +
    +
    + × +
    diff --git a/public/stylesheets/nyan.css b/public/stylesheets/nyan.css index 75da9349d..d219a8efb 100644 --- a/public/stylesheets/nyan.css +++ b/public/stylesheets/nyan.css @@ -1447,7 +1447,7 @@ ul.contest-notification-list li span{ .xls { /*background: url('../images/icon_excel.gif') no-repeat scroll 1px 50% transparent;*/ /*padding: 2px 0px 3px 16px;*/ - font-family:微软雅黑 !important; + font-family:"微软雅黑" !important; font-size: 12px !important; color: #136b3b !important; font-weight:normal !important; From d83441fe7ca7d2abdff5f015a80809d3d4f42684 Mon Sep 17 00:00:00 2001 From: Tim Date: Wed, 21 Sep 2016 14:58:48 +0800 Subject: [PATCH 21/50] =?UTF-8?q?=E5=8F=8D=E9=A6=88=E6=A1=86=E6=8F=90?= =?UTF-8?q?=E4=BA=A4=E6=96=87=E5=AD=97=E5=A4=A7=E5=B0=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 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/layouts/_new_feedback.html.erb b/app/views/layouts/_new_feedback.html.erb index db90c47c4..ee8575a3c 100644 --- a/app/views/layouts/_new_feedback.html.erb +++ b/app/views/layouts/_new_feedback.html.erb @@ -15,7 +15,7 @@ <%= f.text_area :subject, :id=>"subject", :class => "opnionText mb5", :placeholder => l(:label_feedback_tips) %> <%= f.hidden_field :content,:id => 'hidden', :required => true , :value => l(:label_feedback_value) %> 还能输入50个字符 - + <%= l(:label_submit)%>
    From ab72bf5f088a279b26f7674a3b379cb2631fe696 Mon Sep 17 00:00:00 2001 From: Tim Date: Thu, 22 Sep 2016 09:48:37 +0800 Subject: [PATCH 22/50] =?UTF-8?q?=E5=88=86=E7=8F=AD=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E7=95=8C=E9=9D=A2=E8=AA=BF=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/assets/wechat/class_group.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/assets/wechat/class_group.html b/public/assets/wechat/class_group.html index 04cdf8025..e5a1b8f47 100644 --- a/public/assets/wechat/class_group.html +++ b/public/assets/wechat/class_group.html @@ -3,7 +3,7 @@
    -
    {{group.name+"("+group.users.length+")"}}
    +
    {{group.name+"("+group.users.length+")"}}
    {{user.realname == "" ? user.name : user.realname}}
    From 1798b8a086d13e968a788833bd965d0f8dab7abb Mon Sep 17 00:00:00 2001 From: yuanke <249218296@qq.com> Date: Thu, 22 Sep 2016 09:56:46 +0800 Subject: [PATCH 23/50] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E7=8F=AD=E7=BA=A7logob?= =?UTF-8?q?ug=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/services/courses_service.rb | 2 +- public/assets/wechat/edit_class_group.html | 2 +- public/assets/wechat/join_classgroup.html | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/services/courses_service.rb b/app/services/courses_service.rb index 5d2957d4c..b97fa1a64 100644 --- a/app/services/courses_service.rb +++ b/app/services/courses_service.rb @@ -334,7 +334,7 @@ class CoursesService # end groupnum = 0 groupnum = course.course_groups.length if course.course_groups - {: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,:groupnum => groupnum} + {:course => course,:syllabus_title => course.syllabus.nil? ? "":course.syllabus.title ,:work_unit => work_unit, :img_url => "/images/"+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,:groupnum => groupnum} end #创建课程 diff --git a/public/assets/wechat/edit_class_group.html b/public/assets/wechat/edit_class_group.html index 3dda96d53..4c1c612a6 100644 --- a/public/assets/wechat/edit_class_group.html +++ b/public/assets/wechat/edit_class_group.html @@ -2,7 +2,7 @@
    分班管理
    -
    {{course.name}}
    +
    {{course.name}}
    分班名称删除
    diff --git a/public/assets/wechat/join_classgroup.html b/public/assets/wechat/join_classgroup.html index 9a7e9fa2d..631ec4969 100644 --- a/public/assets/wechat/join_classgroup.html +++ b/public/assets/wechat/join_classgroup.html @@ -2,7 +2,7 @@
    欢迎加入班级
    -
    {{current_course.name}}
    +
    {{current_course.name}}
    选择分班{{selectid}}
    • From 72190a3639ca915e94404b8561a92e1c5dee3859 Mon Sep 17 00:00:00 2001 From: yuanke <249218296@qq.com> Date: Thu, 22 Sep 2016 10:47:02 +0800 Subject: [PATCH 24/50] =?UTF-8?q?=E5=8E=BB=E6=8E=89=E8=B0=83=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/assets/wechat/join_classgroup.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/assets/wechat/join_classgroup.html b/public/assets/wechat/join_classgroup.html index 631ec4969..dce42ee42 100644 --- a/public/assets/wechat/join_classgroup.html +++ b/public/assets/wechat/join_classgroup.html @@ -3,7 +3,7 @@
      欢迎加入班级
      {{current_course.name}}
      -
      选择分班{{selectid}}
      +
      选择分班
      • From 11132d345914c00d59b32ea2d1521e0bc69d6ba9 Mon Sep 17 00:00:00 2001 From: yuanke <249218296@qq.com> Date: Thu, 22 Sep 2016 10:49:53 +0800 Subject: [PATCH 25/50] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=8A=A0=E5=85=A5?= =?UTF-8?q?=E7=8F=AD=E7=BA=A7=E6=97=B6=E9=80=89=E6=8B=A9=E5=88=86=E7=8F=AD?= =?UTF-8?q?=E5=90=8E=E8=B7=B3=E5=85=A5=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/javascripts/wechat/controllers/join_classgroup.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/public/javascripts/wechat/controllers/join_classgroup.js b/public/javascripts/wechat/controllers/join_classgroup.js index 4812ca767..a63744e3c 100644 --- a/public/javascripts/wechat/controllers/join_classgroup.js +++ b/public/javascripts/wechat/controllers/join_classgroup.js @@ -43,7 +43,8 @@ app.controller('JoinClassGroupController', ['$scope', '$http', 'auth', 'config', vm.cancel = function(){ - $location.path("/class").search({id: course_id,tag:1}); + rms.save('syllabuses',[]); + $location.path("/class_list"); }; vm.confirm = function(){ @@ -66,10 +67,12 @@ app.controller('JoinClassGroupController', ['$scope', '$http', 'auth', 'config', console.log(response); if(response.data.status == 0){ vm.alertService.showMessage('提示', "选择分班成功!",function(){ + rms.save('syllabuses',[]); $location.path("/class_list"); }); } else { vm.alertService.showMessage('提示', response.data.message,function(){ + rms.save('syllabuses',[]); $location.path("/class_list"); }); } From 0b1a22d9aa382ce7479d5f2750ebaf6af9d6b1b3 Mon Sep 17 00:00:00 2001 From: Tim Date: Thu, 22 Sep 2016 13:56:57 +0800 Subject: [PATCH 26/50] =?UTF-8?q?=E5=88=86=E7=8F=AD=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E6=A0=B7=E5=BC=8F=E6=9B=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/assets/wechat/class_group.html | 2 +- public/assets/wechat/edit_class_member.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/public/assets/wechat/class_group.html b/public/assets/wechat/class_group.html index e5a1b8f47..b097db9c6 100644 --- a/public/assets/wechat/class_group.html +++ b/public/assets/wechat/class_group.html @@ -3,7 +3,7 @@
        -
        {{group.name+"("+group.users.length+")"}}
        +
        {{group.name+"("+group.users.length+")"}}
        {{user.realname == "" ? user.name : user.realname}}
        diff --git a/public/assets/wechat/edit_class_member.html b/public/assets/wechat/edit_class_member.html index 1eb53c7bf..5530671f7 100644 --- a/public/assets/wechat/edit_class_member.html +++ b/public/assets/wechat/edit_class_member.html @@ -18,7 +18,7 @@
      • -
      • +
      From a169ad087bd9e7fd0bf985f570203813768a17e8 Mon Sep 17 00:00:00 2001 From: yuanke <249218296@qq.com> Date: Thu, 22 Sep 2016 14:03:59 +0800 Subject: [PATCH 27/50] =?UTF-8?q?=E5=8A=A0=E5=85=A5=E5=88=86=E7=8F=AD?= =?UTF-8?q?=E6=97=B6=E9=80=89=E6=8B=A9=E6=9A=82=E6=97=A0=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E7=8F=AD=E7=BA=A7=E5=88=97=E8=A1=A8=E5=88=B7=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/javascripts/wechat/controllers/join_classgroup.js | 1 + 1 file changed, 1 insertion(+) diff --git a/public/javascripts/wechat/controllers/join_classgroup.js b/public/javascripts/wechat/controllers/join_classgroup.js index a63744e3c..ed7692494 100644 --- a/public/javascripts/wechat/controllers/join_classgroup.js +++ b/public/javascripts/wechat/controllers/join_classgroup.js @@ -54,6 +54,7 @@ app.controller('JoinClassGroupController', ['$scope', '$http', 'auth', 'config', } if(vm.selectid == 0){ + rms.save('syllabuses',[]); $location.path("/class_list"); return; } From dac9502f1fbdc47e6a720f4857ca8cb28beec38e Mon Sep 17 00:00:00 2001 From: Tim Date: Thu, 22 Sep 2016 14:25:09 +0800 Subject: [PATCH 28/50] =?UTF-8?q?=E8=B5=84=E6=BA=90=E5=BA=93=E6=9D=A5?= =?UTF-8?q?=E6=BA=90title=E6=98=BE=E7=A4=BA=E5=B8=A6html=E4=BB=A3=E7=A0=81?= =?UTF-8?q?bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/users/_resources_list.html.erb | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/views/users/_resources_list.html.erb b/app/views/users/_resources_list.html.erb index d7f0dee7f..0190e60dc 100644 --- a/app/views/users/_resources_list.html.erb +++ b/app/views/users/_resources_list.html.erb @@ -267,4 +267,9 @@ } } + + $(".resource-list-from").each(function(){ + var titleContent = $(this).text(); + $(this).attr("title",titleContent); + }); From 0716d4fa3863add1070fa7df6ebcff798bb41a9c Mon Sep 17 00:00:00 2001 From: yuanke <249218296@qq.com> Date: Thu, 22 Sep 2016 14:29:00 +0800 Subject: [PATCH 29/50] =?UTF-8?q?=E9=BB=98=E8=AE=A4=E5=9B=BE=E7=89=87?= =?UTF-8?q?=E4=B8=8D=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/assets/wechat/edit_class_group.html | 2 +- public/assets/wechat/join_classgroup.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/public/assets/wechat/edit_class_group.html b/public/assets/wechat/edit_class_group.html index 4c1c612a6..6f08d1b53 100644 --- a/public/assets/wechat/edit_class_group.html +++ b/public/assets/wechat/edit_class_group.html @@ -2,7 +2,7 @@
      分班管理
      -
      {{course.name}}
      +
      {{course.name}}
      分班名称删除
      diff --git a/public/assets/wechat/join_classgroup.html b/public/assets/wechat/join_classgroup.html index dce42ee42..e4d92fbf8 100644 --- a/public/assets/wechat/join_classgroup.html +++ b/public/assets/wechat/join_classgroup.html @@ -2,7 +2,7 @@
      欢迎加入班级
      -
      {{current_course.name}}
      +
      {{current_course.name}}
      选择分班
      • From b965e270e24301ce85605fa80db827d2c8232c18 Mon Sep 17 00:00:00 2001 From: Tim Date: Thu, 22 Sep 2016 15:27:16 +0800 Subject: [PATCH 30/50] =?UTF-8?q?=E5=88=86=E7=8F=AD=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E5=A2=9E=E5=8A=A0=E8=AF=BE=E7=A8=8B=E5=90=8D?= =?UTF-8?q?=EF=BC=8C=E8=AF=BE=E7=A8=8B=E5=90=8D=E4=B8=8E=E7=8F=AD=E7=BA=A7?= =?UTF-8?q?=E5=90=8D=E4=B9=8B=E9=97=B4=E7=82=B9=E5=8F=B7=E5=90=8C=E6=97=B6?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=EF=BC=8C=E5=9B=BE=E6=A0=87=E5=9C=86=E5=BD=A2?= =?UTF-8?q?=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/assets/wechat/class.html | 2 +- public/assets/wechat/class_publishissue.html | 2 +- public/assets/wechat/class_publishnotice.html | 2 +- public/assets/wechat/edit_class_group.html | 2 +- public/assets/wechat/invite_code.html | 2 +- public/assets/wechat/join_classgroup.html | 4 ++-- public/assets/wechat/review_class_member.html | 4 ++-- public/assets/wechat/select_my_coursegroup.html | 4 ++-- 8 files changed, 11 insertions(+), 11 deletions(-) diff --git a/public/assets/wechat/class.html b/public/assets/wechat/class.html index 6678456b6..789ef7018 100644 --- a/public/assets/wechat/class.html +++ b/public/assets/wechat/class.html @@ -1,6 +1,6 @@
        -
        邀请码
        +
        邀请码
        diff --git a/public/assets/wechat/class_publishissue.html b/public/assets/wechat/class_publishissue.html index 5a65beabf..cf030d7c5 100644 --- a/public/assets/wechat/class_publishissue.html +++ b/public/assets/wechat/class_publishissue.html @@ -1,7 +1,7 @@
        -
        +
        标题
        diff --git a/public/assets/wechat/class_publishnotice.html b/public/assets/wechat/class_publishnotice.html index e56c762a6..21b1deeb7 100644 --- a/public/assets/wechat/class_publishnotice.html +++ b/public/assets/wechat/class_publishnotice.html @@ -1,7 +1,7 @@
        -
        +
        标题
        diff --git a/public/assets/wechat/edit_class_group.html b/public/assets/wechat/edit_class_group.html index 4c1c612a6..d3683358e 100644 --- a/public/assets/wechat/edit_class_group.html +++ b/public/assets/wechat/edit_class_group.html @@ -2,7 +2,7 @@
        分班管理
        -
        {{course.name}}
        +
        {{course.syllabus_title}}·{{course.name}}
        分班名称删除
        diff --git a/public/assets/wechat/invite_code.html b/public/assets/wechat/invite_code.html index c6d3b425f..ae30e335e 100644 --- a/public/assets/wechat/invite_code.html +++ b/public/assets/wechat/invite_code.html @@ -1,7 +1,7 @@
        - +
        邀请码:{{course.invite_code}}
        diff --git a/public/assets/wechat/join_classgroup.html b/public/assets/wechat/join_classgroup.html index dce42ee42..4b14b0153 100644 --- a/public/assets/wechat/join_classgroup.html +++ b/public/assets/wechat/join_classgroup.html @@ -2,13 +2,13 @@
        欢迎加入班级
        -
        {{current_course.name}}
        +
        {{course.syllabus_title}}·{{current_course.name}}
        选择分班
        • -
        • +
        diff --git a/public/assets/wechat/review_class_member.html b/public/assets/wechat/review_class_member.html index b1f0dacc5..ee0138965 100644 --- a/public/assets/wechat/review_class_member.html +++ b/public/assets/wechat/review_class_member.html @@ -2,7 +2,7 @@
        -
        +
        {{current_review_member.realname == "" ? current_review_member.name : current_review_member.realname}}
        角色
          @@ -29,7 +29,7 @@
        -
        +
        {{tip_2}}
        diff --git a/public/assets/wechat/select_my_coursegroup.html b/public/assets/wechat/select_my_coursegroup.html index cc7a65753..5bd563554 100644 --- a/public/assets/wechat/select_my_coursegroup.html +++ b/public/assets/wechat/select_my_coursegroup.html @@ -2,7 +2,7 @@
        我的信息
        -
        {{current_edit_member.user.realname == "" ? current_edit_member.user.name : current_edit_member.user.realname}}
        +
        {{current_edit_member.user.realname == "" ? current_edit_member.user.name : current_edit_member.user.realname}}
        角色
        学生
        选择分班
        @@ -10,7 +10,7 @@
      • -
      • +
      From 0431d28fd132b3a036400cb514e852679d45de01 Mon Sep 17 00:00:00 2001 From: Tim Date: Thu, 22 Sep 2016 15:35:43 +0800 Subject: [PATCH 31/50] =?UTF-8?q?=E5=88=86=E7=8F=AD=E7=AE=A1=E7=90=86?= =?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 --- public/assets/wechat/edit_class_member.html | 2 +- public/assets/wechat/join_classgroup.html | 2 +- public/assets/wechat/select_my_coursegroup.html | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/public/assets/wechat/edit_class_member.html b/public/assets/wechat/edit_class_member.html index 5530671f7..cbbd96ba3 100644 --- a/public/assets/wechat/edit_class_member.html +++ b/public/assets/wechat/edit_class_member.html @@ -15,7 +15,7 @@
    编辑分班
      -
    • +
    • diff --git a/public/assets/wechat/join_classgroup.html b/public/assets/wechat/join_classgroup.html index 91a1184d7..a63217288 100644 --- a/public/assets/wechat/join_classgroup.html +++ b/public/assets/wechat/join_classgroup.html @@ -5,7 +5,7 @@
      {{course.syllabus_title}}·{{current_course.name}}
      选择分班
        -
      • +
      • diff --git a/public/assets/wechat/select_my_coursegroup.html b/public/assets/wechat/select_my_coursegroup.html index 5bd563554..54c4c8c80 100644 --- a/public/assets/wechat/select_my_coursegroup.html +++ b/public/assets/wechat/select_my_coursegroup.html @@ -7,7 +7,7 @@
        学生
        选择分班
          -
        • +
        • From 61c2f8fdd6ca686c067f5ea20f775c784a0098f8 Mon Sep 17 00:00:00 2001 From: yuanke <249218296@qq.com> Date: Thu, 22 Sep 2016 16:17:23 +0800 Subject: [PATCH 32/50] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=88=86=E7=8F=AD=E5=90=8D=E7=A7=B0=E8=BF=87=E9=95=BF=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/assets/wechat/edit_class_group.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/assets/wechat/edit_class_group.html b/public/assets/wechat/edit_class_group.html index 756670b2a..f13f02100 100644 --- a/public/assets/wechat/edit_class_group.html +++ b/public/assets/wechat/edit_class_group.html @@ -4,7 +4,7 @@
          分班管理
          {{course.syllabus_title}}·{{course.name}}
          -
          分班名称删除
          +
          分班名称删除
          完成 From a0772332daa3341af5ae2f6d39001063f4b68e71 Mon Sep 17 00:00:00 2001 From: Tim Date: Thu, 22 Sep 2016 17:04:45 +0800 Subject: [PATCH 33/50] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E4=BE=A7=E5=AF=BC?= =?UTF-8?q?=E8=88=AA=E5=BF=AB=E6=8D=B7=E6=8C=89=E9=92=AE=E6=A0=B7=E5=BC=8F?= =?UTF-8?q?=E6=9B=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/projects/_development_group.html.erb | 8 ++++---- public/images/new_project/icons_issue.png | Bin 0 -> 201838 bytes public/stylesheets/css/project.css | 4 ++++ 3 files changed, 8 insertions(+), 4 deletions(-) create mode 100644 public/images/new_project/icons_issue.png diff --git a/app/views/projects/_development_group.html.erb b/app/views/projects/_development_group.html.erb index e3fa3cde1..ad8d9a35a 100644 --- a/app/views/projects/_development_group.html.erb +++ b/app/views/projects/_development_group.html.erb @@ -13,7 +13,7 @@ <% end %> <% if User.current.member_of?(@project) %> - <%= link_to "+"+l(:label_release_issue), new_project_issue_path(@project) , :class => "subnav_green" %> + <%= link_to "", new_project_issue_path(@project) , :class => "publish-icon fr mr10 mt2", :title => "发布问题" %> <% end %>
          <% end %> @@ -24,7 +24,7 @@ (<%= @project.project_score.board_num %>) <% end %> <% if User.current.member_of?(@project) %> - <%= link_to "+"+l(:project_module_boards_post), project_boards_path(@project, :flag => true), :layout => 'base_projects', :class => "subnav_green ml105" %> + <%= link_to "", project_boards_path(@project, :flag => true), :layout => 'base_projects', :class => "publish-icon fr mr10 mt2", :title => "发布新帖" %> <% end %>
        <% end%> @@ -36,7 +36,7 @@ <% end %> <% if User.current.member_of?(@project) %> <%#= link_to "+"+l(:label_upload_source), project_files_path(@project,:flag => true), :class => "subnav_green ml95" %> - +上传资源 + <% end %>
      <% end %> @@ -46,7 +46,7 @@ <%= link_to "Pull Requests", project_pull_requests_path(@project), :class => "f14 c_blue02" %> <%= link_to "(#{pull_request_count(@project)})", project_pull_requests_path(@project), :class => "subnav_num c_orange",:id=>'project_files_count_nav' %> <% if User.current.member_of?(@project) %> - <%= link_to "+新建请求", new_project_pull_request_path(:project_id => @project.id), :class => "subnav_green" %> + <%= link_to "", new_project_pull_request_path(:project_id => @project.id), :class => "publish-icon fr mr10 mt2", :title => "新建请求" %> <% end %>
    <% end %> diff --git a/public/images/new_project/icons_issue.png b/public/images/new_project/icons_issue.png new file mode 100644 index 0000000000000000000000000000000000000000..8c09a9ece0d70e37d7cd5a585c58b2be55f4740d GIT binary patch literal 201838 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

    f9Wr;i-3g5-9#iq8_F1VSoXKaFi+ zt%NclKj2cVmC`x`&1t}RC|?RbK#7e0)B%&xay8O=E4K{!t5h7A8e&Yr8M7O3cx}#N z^8i!;)KOGfhNdg*F1-rsQ@fooW+zrN3p%IyQUn?%HHgSedg99ffo>w>9eV?O9qD}` zBW|;a(6D(pMYM%E-<~J()OmU6uHU=qc8{?S{V9dJ`XiZu9Jxy9a3y0!8nrlsAsV_~ zsmvOgTB)utb`{bA=S8bo0$lM6dd$od*&4|P1|@ctNtnK6D)C0`3O!dRn3y`wvCud~ zuVShgTq*QP3wZ!E22G5n6DI-*VprkoHCAP{TOPKC#b6EXE!mZZ!O^P(;SO!YhFLZo z)%;t)Xl)#06^nVO`KR47WP!Y*wV1#%3TNdda!`0zD zfHsUfk~pk_x6%AHwh9mQm^0T#GwH4tVoc>i2p`%w&EOQcM7~jIyr>WhOSw@b%Riku zv6Xs2BIW2+^njcgLF8(OsF}AGLx;R16?ewk7q8G)3&j<-3U(?_7%eIva;R=5_8ZBs zh=~C(L2AO2NQw1G(0sudXoUumZ=}P1_~DQtg*Woe7=C)U0{#H)I`A#hMggghkP;iz1kr2kH`2*h(m-{9 z6ArrzaswG~*1}B8OWd=ti~uOCHrA#+b^7lHbVx{N4sL8e_E2H$tD+0HkrSH!&>4er zMXgF~_bk&Y^w=4aj%`QHLRM)gi5sFkdh(&35kYptEA39#LQTFC?Rj{{-KmAr7G9JP z@Ch|L;Twsew3G3vc_=+JBfpWLG~7K_e>ZZHFnxd*VVlI>!IOA|T9@vrnG4pByhmVm zoq3e$2Nhc2CKSzyTWNy(iY{X_;kM^iXxAJ9L-xhz>QGy56+kZgAlh!rcGojHwK?rQ(wn#ux28-4iy7&s`DDr_ zL;_uB>(w|(w$2taMY~IA}EX3&Z-VP}mpSvkkPRpIFH71NrH^g!^r>2XCTSC6+-|+!KgtT~>C- zA0bJ}POz@36T_G8rh|vO1gVpZPgx<$5Ikc*dSxX+>mPew%)R66`*@NK{sJ{b%xb|I z+9cJHk*bDss~Cwmbpr*}QGwHUa#E3RMAoDYjtWoMq4Q#3nzkp%e;qf6d90S0)>YSz z5S?z+(G-<<7Z@>GLGQ}g-PMQKPiUyE7CiXrPPGae1xjAYOyNF3i!)GPqjnl;ub&6= z6}vB5?Cb4KjL)v}MrDk>-(>j7&WEfWQanLKmvwGW>AtvuI72 ziaL1N_8w8CjdYb(dSP=$k!WZbX&|oCO%it-Vkv*E2{jR~?!x+2MLtUqFNlE*DBD=? zLW66pBk>k{p2fZq=ZY+d87{+)bxI%4G9A0$~@bexh>{UQttfWd#uQa07zcnx?;P$KdSRX(Ss- zeHa27I}1tKMdcD;3$^bI7(CIr`$N(I9OCEV_9Zl;Ms{k_tp`%rU0VbL)G|m4NFW@$ zN;nnD%tBkAa09##7Rss7>)0&O_*FvxIKAFlj4ZS)rq5KvA$}(>h+SnO((o{1p71P? z7?wgOr9S@@UE}U`*i5)zw&{N1CQ}Y-@@_Q&W8`gA$}T4{xY-qG?XGZ>Xwjq|?wh%b zd?NzL36-jpqNWq`mJ#Jf#WY)oM!b_i3DQ>m85XYjD5PH1op zA8Isys7+#te4{*!lb4e~q1tRBw7pdY7zlU5w%GIHPwPO<^url~S5rhnKfqp~wRAm> zeU?V>WDLweZXcq~F5rGSRnTrkha>ujP_#!HwZWx2P0F;2rf8*J z%bT+c((2I3(JDb)Y9O~N$*?aa-KzprBXWe~vGJ}|!iCOu^G+Mzf@4JC2H;u`7k?3| zLJUt9&&2Xa<^=K0XfREZTfR{Up~E{+#`#5FMxGamkq?9x7g%~4$^;{3VDc*R^ns3D zB?#C3QbEv$5o18biS#*Bo;r3a4eC^>oEkO!f9pv)#h7k0TVP0v_XzhW1Y=l^N>^Q7 zSYrG4t2kBW$z^QMo=_1UY8!)S&}5fbWY&wI2=UpWt~@+Tr`|;xdBD`zH`buF44tM% zgkCFBd5&b$d5%xRH{$3*8)#WdzZi)X=FY(g zf~}KF2&5#V2t$t*`z$0gBU#CAu`OEe5?Ps?j&=#pf(s?HNYUh~o2uB36Oih*k93e5 z1|PtGgu22Y$$^E&PGdLt*3{LU;TIj~|uzFmKpgIu5;sX> zM%5l0ztDK-7GYwpFC8o z4y2@}AUWhE)PN4|y~e!=kTq@KDxioU;=maNg>#OF!;qpPN#=a95Q@YprBo~fjq4OC zTFw+|P9&is1O^hACh7hBo_DP?EI9Z)Ywi2r;a=Sa`#ikw^FG6G_zs~^)pf6>Z=^mIX-6mIQqc@F2x6ib2%KVEq^*)N&PVoQ?s9ZqPMLb?-QBbUtAz z)&7)tGv6pEDH37L#j09i8#(?5n*TD=T)Y$^HG9S(1xb`nso=`M)zP*DNyt5=2rq`+ zT3va1hHi^d91Y@14oWEx2<1^Sc+`KG-REMgLv0AlUj~8~5T}$_%$CsLay`KcWzMdW znnNYT+Ny7aV>pDMK|dD2bTT6kvr2D8L6_-6I$x$+yWEP%>EUQrENrl7;Q~cISVSU* znKw!3#ZX8T!B>h|oX*_zt~5G@WLGlJI;vq5_`na^dVF!Kg$N^J2o*d4-dvojQvgN- zsSNxkol=;wC^pf?4|(Fuo5VGw2&GlXQ8n^u-FoafF%iBp&&teunkWe0Pf$Nfi}5U7 z;YKHbxACo8jof(w;12+^=wk-&Ply8n90h=OsQG%9nr^$IRKv&5S5GHNsB!`@Mci`w zd>Z4_=cOeA!c)zQ(z|l4x`7IRE(etmLtvb!1yuUp`qUCYOm*-T+_l_q1dya!gZ&LD z8(9{IK==kf`!$Y%x!-6(pONt0jCW%PsJp3+05u!W0wM+MXQPKq2r6pk`2wa+`BX~b zh2oT=Wv0E0V*?eyVKsLYO^LV;M@hNnvj&yQ?na+7d%T#Z!D~KPlyYSA$ zzlcnpO8A^PyNO30(na`{F}q0f(Fo%5+M#uydk0{1NkKq>W{GzR7l^TS``g_rn+T;W z%~NoHs?xa%YwDl~Z_+-iEX6NVDgPSoR4k2C}5^~HNvqjNjLXC;`^p{ zZtR0@!kze3DQ1YuNjUpi{mn2@%>2@*$_oQ!OeaiwBSm7Gq3Rc*F_K%E<*EanA$jP# zN#gJ%FNp&u4~~d2muqPha~g3sHhSCvn4={6029>8l!$WQh-0HB4N2fi&4BL(@i`Wx zZtz~No`>^|Stv9!=vA5*7RR0gv3wA6uemviM3eKUzQ#;@8rcV6ijb*%B6edPDN)2I zUxOOS?Kesmm*T|KpVn`6WXi5QOHV$+ut$|j`2wCe^BWBb3wcCXLsi)ZE1d@UMLNxd70|A58(}gsTi^Ho3MaYR4pKwF3EA`HwrZd zg&@U4Vmfi#&ui5Up>OA@Sc_HjW;aSnI&n3#Th%dn!DxBwABHwyKl7B5f5`3tQjsU7 zuaSu;x$&r{GQCLqD9j5jS{1X9=E!{`avp&pklUo}6RVamNdk{_!)_sSULp>}WC0JV zuv?IW)(+hVI5$15%ux{JfqMS^vxVr5{yL|0P z0WjeJSgI(M^pDChuB`m@yac4YVWi)Ek)zM;2b8{57M|sXl8r22@Trps#O(J)C*g zQA)Q$1cOl3)t-h2Vs=IMK}R6hxyTWPchN8nx^upfNLiu=;1*#fW$Mh?4aj)|8HHS8 zI(KR64asq+N%mkaa=&yq0t>ppSUE&&Y9oHisNb(2#8Qz?byvd8MGk)c$I{Kk|GMCDneu*_m1Hq1&hpQSP;XBP)Fm!1k@;- z&72phgT{(BYL&yH90}+wAz~p~4Y}V4t{JCMI2GVLZxnfs&MsdL8V$KlS7sI3FT9s3 zO>LM^T7w{z7>^E_%RnbX z)=y}P<&FZ>Nq`A%EL8|B8^{Q<9I9T@wcPVXF_&@}Zi0qZbm!bEQa~75lv)8*?z5;V z1APS>Bz+?}TLdsl`7XC%?zzih1!7%gN-Z+_jq*R$_h7g?B65-1L-;SQ#OnCE3K3&c z^#cwHuxe<}=EhR8I%@DL!dwkKf8Y zUm!|liL_;B=}!-V=y^3mcUKIV$fmWStQGi0dLfx#8a`Z=A+-IfFKvr2@_=@9a<9$p zA2~|U(FG3C%8I*jAxsup2Icf5vCVuIRc=H^9R!(;QF`G_sV(79x9W1axro~#3^fN% zkrXG~1}gIU#0YFkhq?O*peYH}@-2-o4VNj^)6LSkr-zZ5eGa2;5-z4QapywB5Azx( zbr#JyQ9lh1-Exq+RQC>D2B1&`^#F%vzY!T=>W%QO)ve~EtB>L!`RK|anO_=qM{goz zDXZ=r!!<2Jss!2`wC*!Uk<&-yPn)&kh=FoKv4_6_1F%7Ej42EXqI5d5@%XxRXM;cl z0=#J%=SD$9O{lv<%vN1X!DeXAqGG7=YtiPu5le)40$s-Rjf4u&0QE(kRhX&ld676% zI}Gu=bV`L^p*l+F$}b4bGM`1J)(pB2szvNZ8U$1q{T_#l$|nJ0sI(ls5B z8Hbe{Has7&6_uAn(QdokH=;QQ1`L#+a#&)P!C)i)BdHJ$<&L7ZNA?_$zuHFuqXDDW zAT#OnnQK?v9okD!2USN*D$c_A0$<7A2!tdSQ{F| zWs*)Q9o1DL!42>RqC?MO07XPO zilQ-+SMG_4nXLCaFQIobd6ucP=|zI`$Yp)a=!&hQXslTsy>FnjTy6`g{%A+A$C{<% z4wDLv=dIXV$tFTV(QO|kDI_U!X_@P#p>ZV01Y)mt0K2tN$R<0)I5d0hf~kg_q!0?G z!Z*^yg3g5XkUvr+$bA-=CdgF0%G8~Uv=fsQGYTon-I6&9dW6(U>O4Xh(K1k|qU+lT zR$=CC&nLs;UjS@Uvx(bY^=^Su5G^q7>DhNcsJsO~ER4}&l&RDKk$WPEO_2OF%7D5t zr#4tsdIY%@Yoqwo3vKakwRWdsnvwM3El3vvAT2!$lwg>)5EYQA0!QS&k%enAY^Ey9qLdX5rVZeH>o4~Xz}lzS z&Yro_^N2^Y8-NAn`IC3fdZRGa%!l6iQ?c<60VOH#)gpA(9lODP8p37*kO>Y5apcrS$?O z>a@__3T$$AM5ZsY1ox5a)Fq2r8&wx?B!LY-M~p#C^7?fxS5lVk|RO4&$-R(HHx;mqo7)V?}Q6?nipka=vk`7+VGT-GDnfyA$KXD zieAhve^~a1B&$FY=xJnDPOu9G9X&KVySic3K?SF zw4t4#UEz134>RXQ<}KjSZJdRx;Fwh{L5W5EjN4u^0GT9<6=3mg$jxDuYj~lC`&c?( z!t+gl>chF2v{p0UNZ1@x5IRn2UbI~_bLA3kQEzSyUU-E*`COXF2`IWzPq%%+1u;1#F zR`0JVtwRwam6bt`q=H;NgI~}K_DH{cV{REJcz56#8Xak_BiBKf4a{Dap5s;nfgtpo zGGozEB$5cFaGpwXK3;|l^p=6bnuEp~JGmH$R8uW9!sJ~p^$euvmVxjnxYbgJNt73h z$}t?`2_UV2NClHE<5IOHqf)(^L`RA|?oKTkrV`GD-kjFGxDDQW_n92ycET(+@x95ZS__dXDb5G0#<%W0-LqM1+Z$7##uWVV4=?}l_7o_E1{H2L{WHgZ5; z;W#Y2XLuqd=P0hCYth!rC~|FgvJK?Sj{Z9jilSp=Vr9ob2;;Qj$+TyP+1=X{4MOTb z+rdfq%k%5)4kYEK5dwswOezJM{`0%JQJ8fy)$Dl`%rp?#8?9mlImh`-10^>tEG!}4 zFV9!DJ4d9>IMu;VN7pUGq~P8L>LtzMIbEX+Ecd+)B&4M9rSDYBfVbTHK!9-kq?%%_ z=_i}NKUkwq}e9XBr638kADy8-0Jafsn%HX+J~BPJbP_Ka?~Yuqwok5sjyRBC=#`WR&eiV_6_|E(ibfek8jP5){JB4wf29I{s# zmSo#~wXn}sbwOsv(3>HtiC1$SIgX&v)%j<7HAn*ZUZyvY{?iZSI%D}kh;va+Gs_8S zAUHntJ2X3J@|m6}dO<9*shnmABW?Gqc_R9kG*&^MX;4o8M9`WTEUIf%?s6dI+kGPR zgN`D(M~Ww!KJO?00HtWdBB?PEoIZw38X0XBJD?&!?-`y*H8G4;fTWO&XP9iA2uZqj zmCH>9Y5LvI2Givjnn@Ob0^-!4Ut z!86PeEdx?El7Br*kcsJ^2y&G^&YT`Iz*|NaYJ0~Bv7Z*T1r+44S(_m|R(*n(3IKV? z{>)JG@9E};CjlpPz4RGMtUVD3fpynENUr|=)RT>Eqv0ETXovtTtLX<~CP0FLmZD}j z!u^>3i5#ymDnPy*2LSt~ABZ6|t~R73 zEoDWrl7Yf#J7lFRD-;T+kRS@$)+202!9duQH3B*bWd@x^^>Kj*g0faP68>`R+m^i+ ze-gbF7mSdIhiHI_Q~C6a7U3z$gTL?^Q_%Vsx=c&l*)%FsKoARab(DK zZf~+0hm-{2czmbl8;q3l9IuC+gM^2=vuuf6(Ct@zLZ!;v%&Su#wOzm@DY7 zO$=mJhr>)iI*@_xo_dbJBQY$1M;LkIRTRY8lTW19ry~j}K^MGMbV6=>jNm@fg$P&# zIBH{I`Z*#)s~sM~BmixQF;mY`1X@%ba5HQ6{`~X{Qe%}o7eyX2E8J+NUy#tHG-hjo zYU@W2Y5G?)P|{kKY?1pZ2>m8LKOAQWDo|qwhQxL(c%lv(A@knm7=N?~Z74#KA?x}S ztZZn-COn=7Xa!^fVhTyI&?#?HHp_n^uwfir%LW(LRm)BieVTA*=sD^86%4fP$`)ja z*OefJBXhKfW*TVN*P`J<1leA&vf%@^x%)klCIn?un~odD^iLGvir5`cqeyTC1%$~b z3ZDli>NrknWQzq`WO5*Z7B5o#T0sqIj_F^`{vZ)T&@L2>G6c#t-~E$M6lJ3jb<{X+ zBIQi~L_}C5+CWSN10VYsx!mqH;|4Wh=v3SvuK7V!a#%@k!A}>yVE}r zmoKi5k|W|SH0ug-k%_OC`m~Z9DNUn~y*Kr%#XyV}g@4-6o%Zy{Nc7hh0EUrt*pqZi z4z_J~e}_Mp+!*ZxE3%m(2fn?P4W>@Eor*@7a%ziDKS#>YX!XuUtfPJjl4bI%8A!2C z$DjSyd`U@TVxX`wlN&+W4rTo_yqf9JFcct#X&3FSf;p1h`BCJy&&tQJo z>E;il|H0Btd{%LoRM*{X%pAkW%Oy}SkjO(Mt7K5!v<`o$IxuZz4Y7a8K&&`0vs5rr za*Y2#l27DMfD6jDWFX}S3iAve0-&o<7v-Kgp6X#lS1{QaquX4NQ(s4u195i`4GE~h z@U$(svL^?MGuu^7HWO+nLs@L|roE?uDAb6MWy!6ATV!IOIM|ReS=OLISd|4|ZQIF? zfymEVR*Z8f3Qa%I)H&_stJ!OCCmllKdg2+zuiKmKkg_MXr&>n9gkA8|uhye4tsssW z#A=K_^7I3RCt{dDf%}Tt3NA1s7eff(&Njb_Wt@ zF?B^K#OBBRn0k(Q=^|z!sPlp3rcrQ0PRtR{P0G9!cgXxMU@=YoM3xW19b%*~?0|y> zSN6mc(HZ8;$Rd(SpY&$>S7X~fWnV<_8oWe)-O1DuTv$7c6k^0k&5{%XA(m|m>Pbki zsjzb?HcMd_r9#>-IJ5O<=u)bJS48A6uA*?DS)&-K2VL;h7ByHx>mKV3yA+j@oWYnIixot!wSAR6(Ej?6!$XZ)i-Yun(W)0*;5x;CI@n+O-C1+94Lw` zh}SMPO~huwnSBof0oCbjMX9YMKAIfJ!4?v`Adv)wORnsRfjV`{k2JqRbD}A8%U?&6 z14URvL#d@(PY$yn%f_UX>zUkM*hjj8_)o(h0I=$glyLlXWaDziG8!c{0Tsvbpp+@& zDmX@bZo$6NEQEMO{>aZreo%h2Sc{UHc8f0-u=Jc5YmKeYgc)+;L3&%Q%(uT)}-%3_K#hR zmr@-Cu_`zrX|n4PIT5R9B+TcnY&!jvyYRE~zgj2;!!C^bB0^)nr(8UM>Wx%z9udgh zWviQw1y3<7B}Vh{JCsh=p$BlROoAWFXTB@1%fR}&nEyD)CA)}J+6@I)j|B3(el zin|{eMb#JSoUyz^yP$v|zh_#md{9ARh|j^X%_S$`CL^JOCt9jFTT}x*?fR#tV6%{E zgZ9Dg#}y}&SMo$;G8Y@DIO-SCI`pEvcjRm^NIZS>Uk#-L>nVK1k}f2jH0zqjwF1&S z213C=YQzvZh+$Qr6{)CIB%%ok?~;MGT}RQ(Tnr5gQsmyWAR3|TvGsWr$uaxl1q!y1 zBN;}Zn=i=8fdYCS;;pQ^!#t{Bj<$WG6hyd{EKC*l-t+@;tCot8J)>Di!J=S`0QGV4 zarRgCjEn_*{wT62`V~Pv`%Crtxo;}5hwxr?(}F^Z)jMRSQI|{Bkyf)PolZ%J#m5%u zz-NR8c8zgZ2|gQ)Hf)y|KqR?!mQo7=7f*iLL~ipxzsdt)f4Q~C5sd(h>WmO}2)$+# zUN8_xwgon3}vSgyK-*=E8MHM`eItX09u3*CDP8M=RtH;jA;d;LA)(3=c)mA?jv5t)N_-AVM|l<8$GU<^&7Y&>V+Oa} zqY)l+gm3^)%f4&Tc~o-KhBv}Is?q4x9BKd~oOc*(uwE&Mv+Yf4esU^B)rhk-04+-V zEb_q364;Qht|`xlXf)X&$Dsuc#1>w~1(gVeG0B46-vY0R-H%I8(~f#K$$^6Qs;})5 zQRF2ImG;`u^`S*SAYG*enE%z3AOtUTlGEC;``c)6G^3b0EtF7=e47NBcG6f}E5nqEjct_hwhO|~6EMj0?) z1;^o?KahSJlWxM{xazTvP-&S*s{ByGCkah9U&L%WZZ0*S7+id2D0401uM4z|{YeomWKg+*GduI2c*Z}VSGGOH>Uxp0MH zm-12k6^$fu@`82brT{pEU2y}6tORd{Aa>ZYXK>gGo+zclbI=P(YcWz~qTmD&>cYta z-~h1`)?>I+!Jl?}CxW+CDL=(z$dJY#M{M)VQ21Bkz0buuYVanpHk~2lIjQy+Og2YY z^l6)Ibg$Luu?Pl8_tqq%`Tc$zf&=-BSPhiVJASCL60T>s71s>dC+rWO6Ap@ zL@w%}n-VUQv={6(?kZuZiHk``+Ia+087iCMjR~(&@c9KJ>?GsnPqkWGPSuyHyS}K~ zw_wxa;Y6H8I65il58mxvDR_R) zAq5drKs<@wr`i*o*l4dwYC1d+1vbiB1t4aPMjE0DY}&l(iE1(mbXxQ!-P(fCPjKvu zBQ2m}#TEgni!7OrtA-7$;QY_8;1KGWTu;(b+Y3=2Zb`k+8tgYq28t^&d~>XT2(%cR zhSvvY0DdBag1evIK|sv`Rx5Wp!n*DiCliF7UO>UCd5k$h9+B%bN95;O96DPZEh57F zfq=54wW`--@FPB&R>Sn7NQU(O5<1Ouv2Zz@yytK z9qD}-0~)K6bzBI?UOeh9PK|(|U>z}-Bfr7YyV|s%H9bM47=i$Tos<9hQB-{)Wwpu< zgvm}o*w8y={ob}{} zngv}5=SI^Y1GmwrfS_rIxxx)V2w70}abD2aCwxlGEA2JNTqqwVLPSP|rulOeZA*0- z8m`p|S?3W<`bhV%w$Lw7t_XJ#DW7U8M!#s=_OKZF+jQ+ch^G7}3K%{TrjntljyC-Q z{+iQPpB8?gV2kw0_qAF~$+p}gd@Qt~%^2Wd{u9ai6@9{bu-deWQvPoduIlf6L7!H2 z7d}Xz&tEBql)x?8Z~+_%Gp&LrBHr9_B!z*ZS#onbnQR#MN)hMS6QOc42oVmaffU#V zq{(q%ySV2iPt=m;( zCsKCLdMu&vP%scjK@t-lph`uj1;c}>N1PQsuryHg4Aj<{HEXi~jpsj+A{Z=uNaluh zRyg6Q-9z~~+#+Nz7)X}@6GOySy_#aHqL#YL0t> zA%D}thy|94TCNx=LcbavzOcy#`lHB`kJ4}sN;-P3!|K&kBG~OTr~^wN$g$?nk>`lJ z8S}Xcj{#yt{(;eghtIH_8XvV}dj&F-idZzHy$1K;BBII#!mfZ{@I-`DOo$ztE=c;j z7%)&{BJFSi%pXX-p-$miohMba!l-@N6rng=6xs5d2Ogi^3D^12UW-N@I3yEe+CC+M zr7|pPsSXWaDcx&PIA#^iQ%Dd{azFnu+zrflS>latJ~^TV2O5qFEh8jLnApf@EWp+<4%5RHcaDjMD%N|Ha>(I!?K?~6y{)fR~Qs7S+$i;>;t1p`SL zhYb1Pd#bM{yp|ptKkOn(o(N)1M@3dN+O%q#bfIC8M23d79(6opsEI9F6RDG&yjdCAbxx^1{Drz7WN*x;Tq;o`Uo~-Zl3r0<~xG8_KIRI$)Dq@4d3XtUw4G1<@ zc(~LRuzaBBYut(b+efbkyBrpTnh@@#lK2QBLqFAJR5|##Ji6+V5wfEZEtb3*gI>5U zuT4Ge*oyfdv{f6%d>R(G;~9*-4gMkTjR;8iznA)#umdABGKeHw2UmkSul@T?wLa zThU;{JQ64-bU6yLBh@19EY(OP7(s-Ns!i{Ovq3$wWe z#^Db{B=Dl5q$^fZ&$g#RQ_Fv1)bq>cc;W!gKWfPo zEKO9aun))xgD~16@M}t}c%DLn_8`9r#RGsQwbu!2Mgg+&JQokOC~KnYKiRKVkE|1* zANLGwmD8T2OTNv(-T#C_E*WTPKEF#JwVbi|I2E0?enfD8X}%h*!Z?Rc z{4B1eonC&Y1|hrC#tIUV%n#6b!@I=$83Tsdefi33b zC*f9=f3KypinuUBjvs>OXsle)@3W${lb2DHAT%W zlRe!Q(Thi*L8KX^+K3jt>IkJFfGBc7`S}{*90&n$Ce)Wv0l~te!Vbb7%QF9~H5sk3 zT)|aLSif$7j`TB_ClCiOkO^U1+etWj-d$<0aRlf)3EBftE6mgUCu%{&IYYz|)p_Kr z5mHeDRuwNP`|zUC$uJ|)rH@Vx5ZXe!g9h7RcUK@;sI@lG0bxBX0WjVC~5IYObBgMreoO9Q#r6b?v(>H))Be z;(WkNK?K$Z5D5b|945L91-qYqUORLgY`GZ7!SC3m>ZqX@b-(;qb1{dLL{G|?!WxYy zZp#*dn3<(-!9ZbbB4b#r04Q;0>)a@o5zy}zKpE<)a$v7OLz@q_7UT)&7me}xg0>iW zAkw)Mn8tNTdA~6LBGuQGBJ*DjDFYrdj$8jD>X4xMq8tIdRHDE&uO5hQ3S70g5F>`v zq~ixDT!)f#1Lr>xxJnxueh~iGanlN}Iw3M=@-5SXGg~#2*1;T1d@4jaIUJTG)Y>u~ zJ*9#tTB@&x3Iom1;%vA1JerEY%2=4P^s0Yc3_qdGYxda6E7|R1{Fg z6e$Xx$d+*NzzHVnZ^tab!HXWfeEKQo$ODP66_8MK>IDoI*M|nb)lE}ARcjFS%(2_f z%jx3ezZx3}3dPFlwd#qq)k!kJTShyhSFOR5g`TXieefi3IXT|c>E0uv)%`>bhfDZX;eB^;L`_)YXG>R%52Qalb zG=%J@O1WQX`;4li5o{^6(HaY9hk`Rn;;}T_L~j-HSq~GmH};$9W}2$O$;7$iTjal* zCM_H!0Fgxy*LI)=0}rF~isV}|kQ+Pd592~h%n=lrAb>2_V*V1K646jW4mF;{s?#^t zivS$x5M)*=DR?yq@m?swS0r!MTk0N=^;nxS_WXd9$34KJ9yIuHy4z&45$!lzgw7@F z$Ss2SKo7d2!?@YdnSj{L5+*_Zxov{l9d(RtdLtngAW<@2{^3T#J!CUB2NEEAB3txs z)L0Qke$U@A!g8TU%wtPLB0)w*0FdJmmjBhHBDNNuF%!_ZlBT7@M7*e{C65RL4(GNW z3rY>uI!#|UX8sc?B8g`L7Lh{az%Y6zOcLtQ7%lk&0pf#201l7N?ICLs@(z&Jz$^uR zK6bv^h-+ws^%sTA!;J@=FlsLOi47KZT_rk>|0=SDkXmRD78>9TVDSZC4OksKd{J6c zsl-W+)PiIIG@V-o$)70#SB8x6LaFq#pijSmC@gx%9w<0QD0#x?hb?XTYC#&%8TX=) zJMQrOuLd*{03YvD)kk!*Wbc-!7JCVWQBg}jy(PG&pcO}LTft7IO&KS`_JRco`!2PH zIvBlL0Hp9f2;UC-94qo)O^-#3#T@zWGHq305jK_;Qlz}O;5<^X=_uJlFjZNkMwBH< zs{?#fRkPrUAUjoPAQ)2rC}29OwGRJ)A(kAqOpc&LwTn~@?0yZg(7PWHV}^_>D37TU zyTXvO@P*Sc0tL;*v4I?mT33LrmBbEst^u)82=GKup0cj_Md&&;=>k(gGp(Zm@&WQ$ z9c&V05e`_KBfI2a0}T$A|K{Y+EgMvQ3K;nD1&YaXJ+F zpI;4WK*U*T%OT**7DV(#?J#b!`wJGN+mV?BQst;(BY1N_DNqfF4Yvw*KY|FvDIE@d z$GDCtRTN?bzh1GlJ_a9^%L*dxj%=zUU#MutS(tcVnu{Z4?f}!1 zy&*&?D3Gv#*T{b&ew)38HhkCUf&_^rq|woDCmmH_Qz*(33=ioGCfYefLM);1a1|0- z;RR2W266=~!9aGp(IiObhz2KSj6?t%!J5x+M5%>35LvD3sidPeP~!p$=z5k;1w20; z5!|_00F}gpI=NnrR5W_Z4&3ZHQu1Sa02*VnrizWCW`w089hAg^ViZ&@k3@CE#)!ti zmR?m0+J^T5L!W{tvPD~BKQk>n60zy}p=S$8I0F^vX+Tg3tZ1ifMH+BwLse@?3Qh8# zNbLgURr9DKRZh(rp}XltgrVcQznd22*Lr|$as?DT5ez#C*D>5Pi3Cm~TIz{J!+N1s zLF{>*EkT63J7gNRN5NNfNlR#XR8}<4kg(xRTo;oB7NlgLz;;q&(Zona7FV}wbTpL$ zfS7-aD2ar#B`)QRsByvt!4HFd9>v+y;%k~UY6$oral>q=p>g0CH5T zO|`WEH7=t?3k9yTtYc+!18iy_IQ~U!01^eSMw=9Wl@LNe&_dKNV62W7bw#A4{DC5Z zS&}W%u**71m>MMUYVj;XV*c_Y-I`&33PCV&iB3pianQPS5K`g?`->qz2B-+>O-I6R)x6H+<@>M6RKt5|gw zGY+gXQ=KE?_xvZKmhaRT(T<)-u`cZ8R7dqi3#!NbJ4g$Lc-{Eb=1Ji~r3g?JObgCz z!cOz*Y4AE#`!F;|aPvYefc8MaWP^91hASh8Wqp4EE7iFr+}z81fWs+He!l z!P0ZED3y{1BAVy}gh;4PNB$Ej_b$z3+pFQZqw!FcH1O8+`xWjKkWmo|o+tnxgP=pq zxU#jbBV({r(_V`dLQyJ;36iE}!7-xf7d|ZGCR7L9m#cW!@w-TgzaSOu%la%o6H~$T z;#3P>ofNe@SjcZ3Iu0X)4f9{hCvFi%7DPcB2!l{CD0w0rb6s9l&9rHQ<1bAMgx)}1 zso<+ccW+5HEu@CBOi!&q-Pfzx{UL#+kzA*)nqNOcg6XOglZM*rJW|@kJnRRtF@Hf? ziwe9+cH8inUPiYD{U!LWOumQub6j zpkX-&6sL1k($3J>3y!A>|L9=TZ71q#wOdOithy#aIOS}T*`vu;KLQw_%^(NBhsytI z(59$Rt~3%Mab`p4N=M^VqSRU-?xu3s2ge2X+w%FRa`FW0@Gk~8LtIKJ1S;adZQ#(> z8!Kq}sP<}#IYs;xp&t&Ma&l1fp_oAdv*#$8n=Hjw6Yj&qgnSW}Kr~oFj45omJRPB* z{IBMe6;#7@TgGXQw4DXVBsD@Au^_DB|EHfu(}g-*3uj*m}9*d+h(rxYRu4%Q&yDJvT`TOBZp z^Z+-my8O>yLxiRBAeN~N6tL_1PG7bzk^big5mcC+wPJrOGv+9+G;l8rNo7stmx3oE zfdomV_AIQCLHd8BrlWHgXtw-dRPF$vC(9akr#E_ZU zOgx>oGTH(&m=|in9L%O(0aM+wV@X$q1+aAl2MgQSXqzKBT)|fZ&i1{8wis|x8xa@T z8ByP6n^@p0?un2e?0CrK+4dSq$)#D@Du=RR?bLRKWF1mLfrRS-xaj;B9JO&;FUjZE zig!s8so!!PsoeNp(U&UFV{K`nhRS)kx5npJG?4g#?toYZ#y)@3YC#U_QffoQK+yUc zzTnZpwiJFB3`EpB1YtLqp~>Nq_fVM%*j~YTBy~`62Fe@F5kcpODRmDCP8AgE;40V> zfHI1UQVBt_#G(YfGh={AAm8!bynxjN3i%1=R)y|QpFzt?h*^)(3vT0Kb8@pnhW+9>W8$t8z;II{R*D1@; zft_oRx=xh{y)}rTVI684lBJ-(rnB$g&H@llH%enY-6IC)7?qmPo-Ti~g~br-9fAt5 zQMQP?AJz}7v7;$ka%PLv$UMl_s)MacjxFpsYnfgbJP}C%hdgM1I*)|K$WcQb8&X)E zR(?)vCLpo2#>WD|m@s0Trmhb(TY-$KB%l4a$QC3oMYYOnV$jg^)~+uZD0~|=eX03Y z09}kmb_Z?3SfSHZa2*9e2c2H-kPw;-{P;NuB%Q&7qF_`_4u2lDV#`-^lIYO08ChJ& z$JGK0cf%^jEJYb}9+Vy}4j?VQf!bUC=U3wu^`YdBF33>$SU?(!JqKD_Fc3*tOtbN( zjrtL#2(4^6voNAyAQ><|ci_a*EfS1uKwlvtk=6n=9sX#JL^~C{HzmjP^g)H)PO05q zutj_!C{H^rNR>(us9K?73XHDbR{&)o=<0jb#7GskW`Ws=4qaUl0dliIXS@Y$1hS}G zOfM!%8o~!n5mf|bXdvMH$qopmV=RbOv5xR)^^#kyp@R7wd|Sal(rE}LACCu`AW$O-+PJ++36~y|%dIVjz_u+INJxVO&nq`wkSG=cEG=JhR)I?`7zkppr7&h; zrpXqEfI;^}fbh%(JU=oznxb5QN9!m$HBb#IoPs~{5BX12ClbjII_v;OpI;2o)yxiP zQ^~6(l~I&FW$ifpb=Qe0(Lm^jqCx?w67bdHqrW*$MZMZodSmJ`HK{PUnL=nhh(MJTb z?zB+G^H0b&pn>+jQh3dZlK9C;=+=eKu;Ob$cO9um4BH`^H>2iAyhFglx3(*oN+d9X zV}LbbeicK8f5uSlMyWL%Yx3jlHZ>iF9yJ6;u`R&4_9|gtb~lit1XA)pzm{JV!jvK^ zq;H5I2)uYflOiclh=mr%%2WsI;KW3H#537>RF_1;Tok}P+QL`d@HxRzm1dFBv0uqU zjdn z5M6->8#9k3nrw`4dga1nrSYgknkSPCQ?Qm=ics^D|T9BX~s=wqz;1XC4 z=6|)w9teZhYc0=W9f|ik{3Y~_`;yUuV?-Dl?H-F@Gq%QechdHt;Y-dVA`DA&)P`D# z@S}>3fU?k*3A_Lk*!m#4`E$fOOXZryu>G#Oy+77&rTgdz&ABPzF!kU$Dn*c#CU`O%u(U0<>! z@()~Rzy?P*ZNOS2T~rImtCTRI#CdwhxV*f3Qg|%$4+|Bdc#0DRNZ%M}QK@De`oVWW z#){d<;*kw0*dok!L+G$BK1vlWK~XrB2yzvu3hLSMRyB^jYW}Ihu39svUL*O^94FY6 zzmC-9DPN;6RK#4kSbLaCi`}oqm0w|x_AEF&K`=zBD2&TPy3x?qylWHoEqEgM4$(T? zYPGVJBkd1p7F{<;(t?2?1HFnRsk<(S&}I)vgd)3kVyobS^eC$SAYY@E9h|{Xj0KO^ z3(Dt01g4`4{HnochN3SL6%N{(5fYYwbVB%o*2O%Tx+*?mz(JJ-lFeYU-26ETbwM=@ zJQ14Hu59f`0>SiyM3E|y1p{G+2-09OpkRa_tTbZdfv_VHo6=?5{?UacMR!S19Cu z^5B%h(yMtbB0)`k@sOa*kNmNX9b~wwT%co%P($FLY(3cgOf2&E+5#X8emBL`xl}!- zG`KjJYXoYrAs5XrAS|fK(ed=rD+5lBu+BByK>|3m8A>KwK{H9;Y>8^8s*Si8m*!qG zkh#!I8{M=~K+tgGcfE)>P@wKb03l52l<2BgL(ZpsMIjPhgK$N`WE(>(r9N}suLDiX zMKOB}hgA@9)w(nT-CPi`vnOW*;%*&;K~QudbdB_S1BA%OCcj!^k86N|tTDH*cK?(( zHuYw);-ZG?h%ds;dw^O?5EZMUfOV)arp8K*do0Msb8DjYR8FRNEb90fPIuV zN`OpimzHG0oL0?Dc}aLEBYA>a74-WJM0rmtG7{y0hUCY}IgKQape?`Sr`jMcmJs8L zrLV?5RjCXtidm4NRQ^|!V1=+o-$NEBp`pVMg&y^!!@j zHZqa|XJIEZF&^uhNLb26pmrQB#GL@`h=%7s5vUnu!o+@zIGY+|kER;B9}Byo1i;7CJ@CFfBGm7bW3J1F6gz>(rnDE**`Q+LaMHEA#v=eaR%L^D(v z(x$1*JV}~VFwj!nYxKD2&9JK&t?X%q0x0_G><6ko)I3H0PX3^fpzI~7*8Epf0QW4A z5mo(28bIYo*#|UCfS^*R(~Jb?E=h+!TqZ)L?T<}6D7e>xO)KzVaF%NR?t8@+Kt{-6;ur;3 zKYvgN+3Mg#q??uwnkriegyQCV$Ls}ZhQSz3N2Jt=2$x#N9UF##K!HRU+LQuIm{V0N zd+G{1+zTIX-<^6^+O(0InCGTcM}a(luc30d#TtNBBfdzRFjSpDNHfx;ZoxVVP9Wht z4!6~rEngE2P@4=Hr2Bx;a;&Mt+l`SN29p8w8&kxB&G{rGleSTvM zr{Y3{$!32MX=I%D6Xy;I0#-aqt_289L5!FI075A<;aAK^a=22V8@m{-$#o3o=mkj5FhTbn5bB$UrQz z7uuqH>KI|B2MkRvN(`Pq*#MM*HAXeGHRQC4j{^bIfKP1Lo)io;Bv2TZ)LRZVeF&vQ z^dGXWB?H0Lg-D67m(q1SUFo}~C>7g&el9|}Sp!5RoFq&dh`Txc0n*b%C%}F3pGX%? zW7fGn+Oz>V4sr#E)nnWVXA#pAA|LTYI$}<707k2t{%C%nr8-0ER_|I0na*qu zVIWm%KS~lMIjx2z@l+Hl5VZ6}4z>grRX~X9TmBqTaRn3Oxme8+y<_5)fb~R60$5ux z&{ExNn4C-V`Niu31~9?V%9dtz-H=*ZA?jXmi-bgd-Sw>PoDx69XFwm~0j#vakn`tg zKq{TIAdlk;qoo1lAktc4$|=|>7zpEqwqywL%#@0T_4h(>a>b+Rf^^7fWGz_kwoO60 zuEtLL`3ahw^eh^1*I=q@M`SMLTpOwDW0fHohK?sv9RS@1@RGG>ZJ*^hWrtM z;ibc=g&@juXhT_ROKEHroY_MmO$}jeOck#68RrSSq7d0B0O?>0v6u;z78|xWkMs>} zW4^G_lPpL@&2x=;3c;bOHsUyu9#KK3V9Hgc;MLMVQR10#psrk6W<}czeKI080aKrX zGDK?Rmiaer7eFYa>RBA66B0H`kw(2tp_M#O{+W$nP-AzsnNHm!R2E9ubRFBw!Sd$_ zbU_260TiplDu{5@>XUXB3EAmu6sVr-T#K~k;SXno=Nkw%oT{KobUYE+e3@uy)?oRQ zp3dI1s^Yro0YKey)ViX|Ez?OkP+Zm{97iJoVFKAPPfSn>PDn^>pABgR6(Y6>@hfRb zi{TvQn#BT1=eX;AH%{JLf(Womiu%!{Z{`Q1xN}%EASj^_9`O+&Z=R4L8$=$sn;(tf zJ)+`R$l$)QMW6*D3uW#?qgCH0|EmR2aY@#ZC|iGbUadGm8RQO{0Fd?=Y|(MgeS_!u6UplJ%lh%<3!i!Tr?zLo=`Oydt%o6Q>hHzR? ziie$~TLYaH1wUs1aK1K9{v4_Jaif)|L3qbe+iv4%;&`h3#x0pYP`Gz2$-&l9Zx*9R zVwJ9JpPrSD{TCN-f#(587H%Hd8+@Gf)wEVzMsrR!1kGW=?uV*%%({L?XSRNEc(5X{ zG(+w+e~w&XP7-U9p=(4Vs6)E_UK2u(&rAM5>W}I~kX56jR$;;?3pZc^`(l1hi-*lc z*b-0#Psy?4(%l5r?8K%%Snxzk_4%cHL;6(XntxJ=vyCC5Lf@|-h`=j{5y4$0p>DDr zW_GOtB7qHp^#$=!=&rJCqM2TG*J%$hWsF8S6aY}z zWa#*XAlsH8Lb=7E4U}4RL5j+jX48@sc3SJFH>)x<-f$S+@#Atn7U*cP-U^6lc*!Jn z4o~WvRp{9%8OLv~rbV*c8dlif-#AQ;k&MJ~~g?fRG zAFb#7C&E<=U(yBLlyubEdU6rM1N6}KehUT?Rw-&KIwzH32u&z5ZaVl7$j}ABD3l@n zi%z#Ss*KtjgtP>;l$vm?v!6(jzQuZ*NA75jrtLw>f&(Ma$1bmeQ94twFd<$;oV}C( z`Mm*IczOT$i5OHk;B=+r$=Z?yuf{Pu&Q++$bc{%qqE-*PgMCr}KGm|2WNQ=2h*ToL z)`J!y;(4j0$)JQB%?9e5H3iMgo>~S;jy42p`uuKe;3HYKs&p`;3!X^D z2n_<_M+svnJ5s8J{j>rw8w#@Q9?m*B;XWs?WDC-@LY2e?-lY9h|MQ=SeVmUE)16*z zdX4emVj<#lCey{XjzBGFJXl>W0WVze)s%baiHc<^I4p~(RyRTh&C4I2k*jI7fV zhd#$V!23hj%TL$IZv+DqD!1zQ>yF8j*n7ZN$_DduS_h#EL~lR*Q62s=9C@w9K6GMY zq!hfG%U+DPH9&XKStNstiei4~rwkR&a{NTL1nf*572332p<4@{i0*OJ=8?Od4VPQYRC|JeJ#NARQ2OA-hn#Q zwrddeFYwL?XIl3lcM0i8fW78Gte|aJ3n6|N^!q6b#n;&^U7&0r;)}LKI0P2JszcU6 zwcb>R7ex3}YaA(R01ftvk{bAKa5$)S?w{%Nqb|6?>E6lMYqgTE1|%{M=_NXgErLi9 zNg;ubRqz?kUPy>u7qI(s6`arNMwUr#T zXwM3ftRO~Dgen|@6A;YUBHe=5lr{pbIAV!kVIt94DClN6#K0k~qH%IO zt%5G`B^YXj6(1|bM{^Q2N*z4YkRl7JHK7htX972#qp8*N;klLf$b$jY#8*=SbQnn= zl#tZ_3a+EjJ?d}+)vb?#f(30!)0m{k1o4xti905I<47?y3kuh}W zag5Cqx?v12A+5p2=!+C=5e-LCq*C!{L4rdMHH_S6{V1Zn5&)pbIigCv;@-@k5^l0Iv3M4Rk8kT@Ue4$1sBxqH5@H9GoV&Q{=$)=nh z4b3r%HChm|E2@g5^m+yGGu4%#JB$71le!1`kPB8PS*6ZaE=c_NwvhDkBmw$`^t%a}g)|(bD4}*zXL~W42X$cMl?3f}~l8Ke7yFwU4 zpl1={t>p(123ndc8#dJa9Nd1VNu1eugETQ5lwxn{DA{vFLMH%-UU0N&r%jIgpnX(e z1rj4~F^Eb!m`p);`3;U4uicMgdp`S@|P#OvA(wr%HH7b|fzp)r95rktM|IMwx0b|lZz?nAO5grEOJ2q(@| zYCfTTQ6)7!K^t6x$u98D(AbIcPPFDK21{tp&eg*2$Yom~F|U)-0;&!XHqSHUZ9WL# z0B{Ahm$`zdmL@Se2XPQI=yb3NmlkAhwr&tV^6xb_JjzpeTaE7iX~lurW-ZYcQAg(> zDjXgiwPMKWuA`RZfwUCK!m8{eOb5`NuK|$Q|M?Lcg+s!?u;E+LU|l5G8e)l(7Id&@ z`=OT?F#TANUCWvN5M)y*Gv&wGapVgixUNIf8weF!O9O==S_n{J`CCN9>BIGqC({M# z7)pcD3=9c`g2TUE4@KE_D3n%AD2B`E&%|Z|hMFIZpu9Fv&Xo~HZF;(nO6*$6B!7f~ z`L8Cyk0VV1S3E;^qs^>`A_5`3Ph&DRvM_6+(F>lMeNejf)f%CYn#31iF`7eVQ`vyf%#8F zISF%;qC)jVf?29T?KV>fPJxa57IXxR2sJ!J16`%Ut_2ZSQV3v#qhJ0Lu}Tgn=qMY+ zKt8|9Ek1?H4_ZsX6N&wRJ+(6FrJF6KY$a&Q+%)k9=3HYSi|F zdLS20=Mjh{ZarfTQj>(k3Z4i=gy~6h9<)1xQP7VFY!&Q!b(eYmKxJ{fh-p1E4ke2^V3yRn7|)|`4AHp3^ZJj)x@Qr3JAR#N-gg_bbp+xPQhdk zao+sfA^xhPHY6};GBikrcet_VKM^_&BCOPUbc{@Em+lUunFxZ0ES&B&r-&MtJ^-Cj zXx)M*q9%=+BTGsk9Xf-HY(PUDygz3(6$}(DQDh+~t#~5eO3*Dawb{tm7ko8lS6~7% z2=5Wi1J-u|7vr2HtSHclfTHXxB7i}SzFNo@=|*do;-l3IB7bgO#C!aCz<18Y*;v2FYQO_Yd$96fw4T_E*E_;MOV& z*6>g3D4bjx(d>u#XUJVJ5R5;{`SSFR(Xx45HwCpuyuJ8pb=!)t+5cW{K9_MS3B-I?7%GqpP z^EWL;80}uJ1Y>a*!j+CW+#dxB(m45FO_Nw1+|9pbi#Q4NkCf{aaq|a~N$X*N`7$Vu z-46||5{VVt(?;r*3`8*p)nv0ESJbmz){BJiLW#ZLiOjQD7>=ewvIucP^%#V;LuWew zJd(~}&I*l2wc2DWOInL902*9DGn2>(8#hM@%z8o}3Mhr^4myLW*X6&O2zzNZZS-Tw zxsO|iQ+KmqPKgWy(uIBnl$QFRJ^~(^vJzFa{F~M_PiYP-+ntooBXPP|-IZn!+9L&X z6m$wVtt>wc%vBkC!_0V+RCU34?`Ft)#D7(W)uA;&48-k%#zbw*7x6@kY@>ZC{qlmep5oVeKg6^c+V_8Jo}Qrz51U3T>XsX5)9aO)*aKeD<6^Ng4V z*hf>cpfWn3!`;;vX^+Xv=r!(300ak~K48HdZCgMHWDBHKLlOz%QqZUaUxR;)kYre) zeXOdXLq%gk1X#d3k_y=$Luq!!%p?rPdnH0$FcJdV`L9+D6eJHj%`r0lKvD%A`OOs1 z5Wpd>5X?F-kbNnu8mF4RYoT5*IFDeuZ7&dLfUMZGLL8MqJ5W#qE0O=zv{j)4#lx1k zR|_Rn`DBP#^@l(N`2%5?4q7dmb=9jmhgc`UL?Dmrt`-ClN{;*m&|WH&d!l6vQ1DUj zCk$S4j1akAlCNf7z%wHetq4rLRBzP}1GXkvm%ok-6mUF%Jh^pLYs3H;dCFNVSS^X{ z$sTHaqj;&*Vl&b ze)(@X1A!;=z+`z+v$qvpmfn(7AG)Ju0+yx=1uCC$l7R=F7?KL~XyJ#J3 zbwZkFC??{^1p+wEeC4Ak@s9=~@njvUWi>$u3P|wiopOi(c#Z~|w&OPx9BYfHVvk=f zinIE3~Gg|p#)|IXMfu<;@sa|dB zR8*^IiOy^j6jE#|h{>l0p9Pcwe?_F*mfhsfQA4=~!&l5;pfH$F_;VOV%3LEKQ!tQ* z3Yrm~_vV1zz0XPyxV@z8gMA-B=stUks#c48%zg=EzbAw&@HvhJ10z-+SG070+94LH z;Ugw(=9hio^TM0lH9vYaCvBuNw6F1F3bX&TB0oyn$()m0>HG6g5V8*M6Mbv z#^IU2AoW#9$rIkIOr--f7_8`!8e?8maE$PA6vN7~TU8f=wy2wt+8_!E+;098wL4%8 z+Kzgf)mKCK(b8}L_t|L{EJzm`;bj1^(N~+cQ-kRmQml`XxXbGQK->= z7q7Koi_rg9lwmLzlDANiAu{Qm<{~#1f#-jIpn3oSvSOpj4k7MoWQ&HNjJZkx zML+Bv^$`r7C5TNigh}9ERh*yJS3APvwf>_!GZm@J18F-U+^M}$LxnLzCAlh7k zoWJ>V#A*>mh}zv~j)E_u+Fyr2P@XDCYG}A%9x2UK17WUe+XEj0)>7jxc_QbKYkpi| z7eE3>GA$D``K#bO(v4f1&o71v6DUWd&aBX{3Be{16hn%02L*dgKLfH756Z>ly9t)H zqFpu%ab@>{tt2svN9QzHFgpIfF z#Dqh#AFW~}vyo8=)-W)EroUoquK<2VrdZIZ=SavkZV?o;Iof_&_kjW_IU&R!Ap|*TTRL%ZGX&|}Q%yX0mA}}-iK-;YBSdf(1G?b+f zC2$XOwCz9+Hg14w&=E||72LEu)(K}Ya-8|qh-6DdmtY`>Dl$GyNzw(01>0O;z5$^* z54K%UKN^~p=sqVT45qI(A9+54@kVYJ=+@{DE>T#+op5Px5!=5R0@LGYBr0RVH4JEl zmIAa7X<`so5@7%+>0k>&UbxjSxCXR>@(=$2n$7o#)>f7m%5=6r!&H$a=teswIt^e7?q?7@pT~Gb}>QuvnO^q(Jcc@ z%ullt(-^i-kta3kx{Dz(hKoRv)mJNcHOPvsgVA6?8z@MJ4z>a~tmZK2nw8_COeGEO zv>pE;98q^==J)%Fgk--q5H?%}j=QveL-mwcXI^3!X?r9+P)7 zRoDp`-ZJJt{4Wb8TOA9LSVXecrm4cQu0y>hFvi0%rV z0JB~2YEGg?IH!?db7lv5xgWX=aUj@*B?Cpr%9eInRWqv*00G{qJB+|0To zg8y`j=!HWu!)QiAQqb^S6!-^jUEfzOBHnUe1FzRuDDs9WFek@-w>g0apu`oA^|Aqf zoCF}vp%j&$uA>Di72^nvdq=7@G#Vr)NtmtR@TU@?GOH3^Z4oLqWTEv#opqt2n*Y_{ zyRl&clD+xLCWE5M)%Q3kx= z0V1_#*lV_bG`5GNtDq%j7)Vvr4NhMgyvX7WoYIl_&SJ?iv`Whdm0F&sTCU+ zA#VDEEfvN=ZOLkblC@_Wi2BU1#vynCcxdXq7I{C(fFPn{#1z07?>0wu9Xcj%?FO<4 z-uLuRl;oX3kD8dQFsaiI6ewR#=T@UQyMR!6w^s{zzLMWCSe`U~W_lvn7DP>a2v`q|`Hi>??Eg`vs@{!wrGXoT>I$`3LOlQ0%T`JLmt zJyA@cA)W;eN?X$wO8C zre4|IplMP(tx+mB*bI}6$PQGa?#Bq6d(QMvgaGg8uW>966-56Yk=MY9AiYk|@6^m9Z(gGNKtwOU;3W_UHpBQA^Pk#2p7N8Q~f+xtX< z6s|l>=BB@nz>xV3k%-k2w^OFy{d6>F9x6m@aky=#-~ALKU_DwIWg>UInu4$9c9sQq zX{e@}KYC?{V=^&B(DtGjl5P&2%VB7+xTaOugf$%4l>OAX3icYt>trEnx_b6K4TK({ zGCH8iT985B!$4&9l(NC$SSaLA_T)gUpfv3%kl=SZBc~r|>g0IxiG+?_c|H!Q-b=P1DN)8!%)Poz@=ibyvG58b(4aEwe0 zMD;fGifPuMez1csc(o8waZQiuLN>hvTS2)87~3z{{R&P25J1PRI(}imjcz{Fqz4@@ zs2>S~scBF_LBzJA#YD_u0iuKW$xtQ#)jFX~%RUKaExHHJB5W9fr6i|>{soggp%F#w ze#(0GgxE~S z3fy29UG|C(ifW^_7|f`iEx|H)8w{O-Cqna3DwfJrUD0?PAQ|0*h(-!xNFbA{p&krK zJ;=}rq{~2zYhLHRV2gA$(lA3Ewv`;876y2R&Cg3k_MiW1;RULz3dNfGwAhe}+2k+C zGKr81=7_n`Ht~^Tq#HI$e3_UI6)eb!fz;>%jKD5A#LEk`SW#8Cd7|m_HC~rEu#l!~ z9NZ#P6THdF$>Ve|$4?hoN1e>L#-#_t0>F}qiNz;2VxC{kP#4e5S?bfnI zlE;QrO|p+@ z!76U^`CZxmM!6;nG~~7eSx0bZ(H5O^(iI&369YxSo-Bf@K14w-GC7cS1oKO)8edpA zGW8sF+#<}z#DWm}KtBZog~lmt)fmIB1+8g}%~-FI@0H~?%rWzYmedwSKNEnj|StzJO z#;)3mYg#p{vDI8Y z*ILt9zIIh(e)-CJW99O>`PFMzu3puk`ms8Do2*%}V&%&A%G&akbMq^f2P%8{ij^zo zm)Gj6+H3ub)-+lx?s>54@Ag)_;GkU|H~#B@Cv7-!{igM&p16L){)6?aPCI4Ix=r16 ztJa*lY5m4ixBk5?zt&%W^7@U3uV209AUFFx{q3zr-|~+S>-V3wasAqpPF{1+sYe~s zd)#5e5M6Gyme=<4MegzUwi;*ks{Pll-+0Q3O$VKH%8D1PdD4b;FF4>yTmI%&zq#q8 zwQKi3a^p$fW5uSE)~`Fr=y&^jlfVD0qt=|d{^Zlr?>jX7^(3mva{`X^N4NgRlYjKM zd;g(>0!nte-ok zD{Gp@zqDhz#xs%ibH{XLP1E?7c1+iJCbE9+n69j88voLc=^D>O*3TW&l{HP{U)nKU z*tQ?%9^I}FYTDF@l0g>+%a8Q z(=`629n&?QiL9SHrYmcj#=o>fE`Wlhugmv&6ocqX!b?wGEuX&V31j_DfD zMApw8)0H(%<6qh_UE`U^`nhAevZiVLOFO1(JQGw00$8?QnBJ1al>B^d> z@h|O|uJKG{{k+%d+U0;Jp9#|cqBWZyw`Sey1NS^*&nF*r?hSwP&}GY(J#N*ZM;*Rw z*-IY3Y}whrziio0f8pm%%a)xsw`|$JpRjD%{ueG=w)^@wKmXH<%a%Rh`ojj@qtE>2 zEq`|W$am(eWU;p)&F6@59n^#@`$2Tq9bk_xMJnIv;-t~*`{MYAyaO+)v_ly5}@<063 z_cwOla?vAq+V!oSzc~Gi_r2v|Z`%Fr{ZH8Ck@x+?eSdzxyZ-0KFRgmUv->yy=T~mM z-_BQFa^>?*c*9Q)`TE%pUU}{F&%W{<_4~i#oz2VlyWsPCAM(v*cRhCDL08{$(u${i zakthp*MDZsi_iP)+DAU+4G;ap`~GC(PkwdXaQ**2{nq=e|IKTE@8reHZhFT<_Biv% zo1b@j&876KL6P(AGp_}t~>nFOa9^WNB!W|kKOSf z2VD2%b#J@j&R5*^XMVor<`1`Tx$dnO{OkFzef6)sweyp|dCS#Lxb8k@zwFYVowVt% zF1qCF^$l;?^n~G;ul&YwcfR32PP^qr*FNbHPd;GN4R1ee-y4rT`qoxw0}ngsl&=n-|Cz_%ICtfl`&@kNi~DQpKWqQ|^$$M(i|_rH?;d&b zr=Hz?{(Y`!zGUCOdgo_Pxc=3jIOW0z{rh8oxcI$~Z2IOUkGSIp%Rb)!`0qX9tGn&~ z?mKq?bm_Z3_Fu33&azuhxwidl zPdnv~Bkz0ATV8v}8~@{g)312s)BpAOgFCl<{*PYy>(BYUv(Ej}M~-N{`{{4|&^!O^nWr@mIP2jzyzlCl zJ!_ZauDSGwm%jJPQ{VmaHOr6x*75JY{@*;rBcAx8k9=UogLnPeYtMPqhOZy{*B@B% zhNJJg?XGj5^3An}Klg~=z4Nr@ul~k?XFmLfx9$GYpB_24*Xz%G?t}Nc=-j5aec=ladegh!wejPhJpF=Wu72yX^N)DqvTLr{<1;H?{5Pkz9&pC3 z2kv#p2~XSbyZb-p@FU-I?#Zva-*M0Q>`TA0?82w6S$5Wo54`ew|MH#dHhujYU-_HI z{{G(|Y_R*k>65h$Pr2sV@BR42Pu%ys6XVz4wera)e(8pdmwo%Nv(7qa-}bsymmPE4 zi9h+^ZC|}{)8+4f{vqf8!*lOAd+!I$H6MTS`@ePk*H+D6w9_Mx-0R|HH{W^k$?J~# zm5cxMPZz)Omff!Ymt`xz`^jC7UH8Gie)py4ZhYNw$24xd^YV84-(LLDqaXDfZ}^9I zKjW0k-t$|#tUuv{7yk6+$M3uE$;UkPJ+*Hh-@fkj&VRNV4|`1C7^nXC!*6@u?;P~O z7j8K5!e_qouReU?;hWa2JN~cF`}=pSSoxzD?|t68UiP&+zI5e*pZWFIobxD;a7BH? zk^6k&pRWD>kuUm{3jraWGg$M8R*qi?2_P71>Ctv!# zFaGJvn;YJC=3+UVP`fK6mxeKYRaQe(nh;JpH(9 z{$syi-2S;gJ^hTIKIOP;&bj1}y>ET`Is0`lc>7bXe#$WycV4v5Yu@sWYi_;jjx!%~ z;e9v$%3}|^Zud{W@xY%iJNgfIdiu#b9e=?i4}Hu|KYz|sPuzFInuk8{f_<-i&%3WX z@XfFL>mz^X+|F}vzvl5b-g?z*7Y=#$LpOfmuz&jDov*v|pc5|befbIhe#2`Y{IUn$ z_PUFXIjnV`uRh?W4{SWYwcqZK`tN_Za;Gcz{p2qWe(DqNdiKYD{>m%Lw(|L5KL)3fgLorhg<-9fg{eU3bLw^u%C=Vz|H zY>$h+_y=Eo;ipfa{#O6g_rAB+XIH;@)BekU<=7|v&Th}S?+3R5|Hg0^_tA23Zmv`U)nOE)o;yrG>?Iqv7ywO~F^{@WzSAR0t`Lb`k z>eDB$eZocGzu~Qqd+5LY(`mnX+s8J(_qW$yb>P9T{>I4{-~Z9OzWT5yoco1yj=1Dg zH{ZE(w|_nA#)tfHm-GF@Yu8?M|8Kuy`IWaF`tXN5@3AMI^unvwUG|qhe#fg0T6V%^ z-&lR!$98(%5wAY{#HW3D->2=m>?_B-bj@{Vt-Si?zr6Iv@BQ&RF27~jUqAcO+aGYr zQG5UNG5_bOPx!5WSyS8Nxb^4l@t$1|e);oPpS9=T|738^tLDCX=)14k_}qQo`k80k zbkq;~H{E`~vitr1PG@g8^T(I{Xs~Cuch=RnZv4L+7QXkJ&pBqloxgdXrycWzkL~}J zS1g~q`TDDGdqDqFzqPFK{tq1ciAO!_PkwFxUCvy)cJ16FA9TfY_WQk8{rYR}yW8u| zy?x_~=fCKK&-%x;-~ZXlO%J{L=~vbdJn-=2j@#qG@4NZ?4}I)!JofK@xXIo=_mwaH z`k#Dh_0d0j+7WL$=-}ITS$OLae|E$r2b}Tw&wu{=`@infd)~a$vAged?fs8@-igOO zX z$es^9>6JJAy4gPR>`%OA^_#DJ>)Ri+?$W<_`-;;(e%H&7Ze8^F4Nv^XSIy1+=YL=L z(LF!#D?e|ZG5pHScdowdxDP$zN5i*$`HVBp+xMN{e)Z*hzGR>0{_!4fc>Yb+147`g8tew_iQr{vUh$K{xFDgKNM3rPtj4;n#lPg-8GB xnJ>Hj$#1;<=%4-e!sm|P_4e=VwCt>xopQ|kkKgSrBBN!84UZUnpm)MK{|}+^TBHB~ literal 0 HcmV?d00001 diff --git a/public/stylesheets/css/project.css b/public/stylesheets/css/project.css index d2be2e16c..2fe6cdf16 100644 --- a/public/stylesheets/css/project.css +++ b/public/stylesheets/css/project.css @@ -555,3 +555,7 @@ a:hover.upload_btn_grey{background:#8a8a8a;} .icons_project_star{background: url(/images/syllabus/sy_icons_star.png) 0px -27px no-repeat; width:20px; height:20px; display:block; float:left;} .new_projectlist_more{ text-align:center;} .new_projectlist_more a:hover{ color:#3b94d6;} + +/*发布新样式*/ +.publish-icon {background:url("/images/new_project/icons_issue.png") 0px -82px no-repeat; width:18px; height:18px; display:block;} +.publish-icon:hover {background:url("/images/new_project/icons_issue.png") -25px -82px no-repeat;} From caf5602389ece0a5526cff1c990782724727be9c Mon Sep 17 00:00:00 2001 From: cxt Date: Fri, 23 Sep 2016 09:22:47 +0800 Subject: [PATCH 34/50] =?UTF-8?q?=E8=AF=BE=E7=A8=8B=E5=A4=A7=E7=BA=B2?= =?UTF-8?q?=E6=95=99=E5=B8=88=E5=9B=A2=E9=98=9F=E7=9A=84=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../javascripts/syllabus_member.js.coffee | 3 + .../stylesheets/syllabus_member.css.scss | 3 + app/controllers/syllabus_member_controller.rb | 64 +++++++++++++++++++ app/controllers/syllabuses_controller.rb | 10 ++- app/helpers/syllabus_member_helper.rb | 17 +++++ app/helpers/syllabuses_helper.rb | 14 ++++ app/models/principal.rb | 10 +++ app/models/syllabus.rb | 1 + app/models/syllabus_member.rb | 5 ++ app/models/user.rb | 1 + .../layouts/_syllabus_teacher_list.html.erb | 10 +-- app/views/layouts/base_syllabus.html.erb | 13 ++-- app/views/syllabus_member/create.js.erb | 4 ++ app/views/syllabus_member/destroy.js.erb | 2 + .../syl_member_autocomplete.js.erb | 19 ++++++ app/views/syllabus_member/update_rank.js.erb | 2 + .../syllabuses/_syllabus_course_list.html.erb | 14 ++-- .../syllabuses/_syllabus_member_list.html.erb | 55 ++++++++++++++++ app/views/syllabuses/members.html.erb | 51 +++++++++++++++ app/views/syllabuses/show.html.erb | 3 + .../syllabuses/syllabus_courselist.html.erb | 3 + config/locales/projects/zh.yml | 2 +- config/routes.rb | 11 ++++ .../20160921062340_create_syllabus_members.rb | 23 +++++++ db/schema.rb | 46 ++++++++----- public/stylesheets/syllabus.css | 17 +++++ .../syllabus_member_controller_spec.rb | 5 ++ spec/factories/syllabus_members.rb | 9 +++ spec/models/syllabus_member_spec.rb | 5 ++ 29 files changed, 384 insertions(+), 38 deletions(-) create mode 100644 app/assets/javascripts/syllabus_member.js.coffee create mode 100644 app/assets/stylesheets/syllabus_member.css.scss create mode 100644 app/controllers/syllabus_member_controller.rb create mode 100644 app/helpers/syllabus_member_helper.rb create mode 100644 app/models/syllabus_member.rb create mode 100644 app/views/syllabus_member/create.js.erb create mode 100644 app/views/syllabus_member/destroy.js.erb create mode 100644 app/views/syllabus_member/syl_member_autocomplete.js.erb create mode 100644 app/views/syllabus_member/update_rank.js.erb create mode 100644 app/views/syllabuses/_syllabus_member_list.html.erb create mode 100644 app/views/syllabuses/members.html.erb create mode 100644 db/migrate/20160921062340_create_syllabus_members.rb create mode 100644 spec/controllers/syllabus_member_controller_spec.rb create mode 100644 spec/factories/syllabus_members.rb create mode 100644 spec/models/syllabus_member_spec.rb diff --git a/app/assets/javascripts/syllabus_member.js.coffee b/app/assets/javascripts/syllabus_member.js.coffee new file mode 100644 index 000000000..761567942 --- /dev/null +++ b/app/assets/javascripts/syllabus_member.js.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/ diff --git a/app/assets/stylesheets/syllabus_member.css.scss b/app/assets/stylesheets/syllabus_member.css.scss new file mode 100644 index 000000000..579bf153b --- /dev/null +++ b/app/assets/stylesheets/syllabus_member.css.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the SyllabusMember controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/controllers/syllabus_member_controller.rb b/app/controllers/syllabus_member_controller.rb new file mode 100644 index 000000000..ac686c0a2 --- /dev/null +++ b/app/controllers/syllabus_member_controller.rb @@ -0,0 +1,64 @@ +class SyllabusMemberController < ApplicationController + + def syl_member_autocomplete + @syllabus = Syllabus.find(params[:syllabus]) + @flag = params[:flag] || false + respond_to do |format| + format.js + end + end + + def create + @syllabus = Syllabus.find(params[:syllabus]) + if params[:membership].nil? + @fail_hint = l(:label_blank_user_lists_for_org) + else + member_ids = params[:membership][:user_ids] + last_rank = @syllabus.syllabus_members.order("rank asc").last.rank + user_ids = @syllabus.syllabus_members.map{|sy| sy.user_id} + member_ids.each_with_index do |user_id, i| + unless user_ids.include?(user_id.to_i) + member = SyllabusMember.create(:user_id => user_id, :rank => last_rank + 1 + i) + @syllabus.syllabus_members << member + end + end + @members = @syllabus.syllabus_members.order("rank asc") + end + respond_to do |format| + format.js + end + end + + def destroy + member = SyllabusMember.find(params[:id]) + @syllabus = member.syllabus + after_syl_members = @syllabus.syllabus_members.where("rank > #{member.rank}") + after_syl_members.update_all("rank = rank - 1") + member.destroy + @members = @syllabus.syllabus_members.order("rank asc") + respond_to do |format| + format.js + end + end + + def update_rank + member = SyllabusMember.find(params[:id]) + @syllabus = member.syllabus + members = @syllabus.syllabus_members + if params[:opr] == 'up' && member.rank > 2 + before_mem = members.where("rank = #{member.rank - 1}").first + if before_mem && member.update_attribute('rank', member.rank - 1) + before_mem.update_attribute('rank', before_mem.rank + 1) + end + elsif params[:opr] == 'down' && member.rank > 1 && member.rank < members.count + after_mem = members.where("rank = #{member.rank + 1}").first + if after_mem && member.update_attribute('rank', member.rank + 1) + after_mem.update_attribute('rank', after_mem.rank - 1) + end + end + @members = @syllabus.syllabus_members.order("rank asc") + respond_to do |format| + format.js + end + end +end diff --git a/app/controllers/syllabuses_controller.rb b/app/controllers/syllabuses_controller.rb index e77b19511..94f05409c 100644 --- a/app/controllers/syllabuses_controller.rb +++ b/app/controllers/syllabuses_controller.rb @@ -6,7 +6,7 @@ class SyllabusesController < ApplicationController include CoursesHelper before_filter :is_logged, :only => [:index, :show, :edit, :new, :update, :destroy, :delete_syllabus] - before_filter :find_syllabus, :only => [:show, :edit, :update, :destroy, :syllabus_courselist, :edit_syllabus_eng_name, :edit_syllabus_title, :update_base_info, :delete_syllabus, :delete_des] + before_filter :find_syllabus, :only => [:show, :edit, :update, :destroy, :syllabus_courselist, :edit_syllabus_eng_name, :edit_syllabus_title, :update_base_info, :delete_syllabus, :delete_des, :members] def index user = User.current @syllabuses = user.syllabuses @@ -170,6 +170,14 @@ class SyllabusesController < ApplicationController end end + def members + @members = @syllabus.syllabus_members.includes(:user => {:user_extensions => [], :courses => []}).order("rank asc") + respond_to do |format| + format.js + format.html{render :layout => 'base_syllabus'} + end + end + private def find_syllabus @syllabus = Syllabus.find params[:id] diff --git a/app/helpers/syllabus_member_helper.rb b/app/helpers/syllabus_member_helper.rb new file mode 100644 index 000000000..491928d74 --- /dev/null +++ b/app/helpers/syllabus_member_helper.rb @@ -0,0 +1,17 @@ +module SyllabusMemberHelper + include ApplicationHelper + + def find_user_not_in_current_syllabus_by_name syllabus + if params[:q] && params[:q].lstrip.rstrip != "" + scope = Principal.active.sorted.not_member_of_syllabus(syllabus).like(params[:q]) + else + scope = [] + end + principals = paginateHelper scope,10 + s = content_tag('ul', project_member_check_box_tags_ex('membership[user_ids][]', principals), :id => 'principals', :class => 'sy_new_tchlist') + links = pagination_links_full(@obj_pages, @obj_count, :per_page_links => false, :remote => false, :flag => true){|text, parameters, options| + link_to text, host_with_protocol + "/syllabus_member/syl_member_autocomplete?" + parameters.merge(:q => params[:q],:flag => true,:syllabus=> syllabus, :format => 'js').to_query, :remote => true + } + s + content_tag('ul', links,:class => 'wlist',:style=>'float:left !important', :id => "syllabus_member_pagination_links" ) + end +end diff --git a/app/helpers/syllabuses_helper.rb b/app/helpers/syllabuses_helper.rb index 7e815950b..b9e3d09c1 100644 --- a/app/helpers/syllabuses_helper.rb +++ b/app/helpers/syllabuses_helper.rb @@ -4,6 +4,20 @@ module SyllabusesHelper Syllabus.tagged_with(tag_name).order('updated_at desc') end + def find_user_not_in_current_syllabus_by_name syllabus + if params[:q] && params[:q].lstrip.rstrip != "" + scope = Principal.active.sorted.not_member_of_syllabus(syllabus).like(params[:q]) + else + scope = [] + end + principals = paginateHelper scope,10 + s = content_tag('ul', project_member_check_box_tags_ex('membership[user_ids][]', principals), :id => 'principals', :class => 'sy_new_tchlist') + links = pagination_links_full(@obj_pages, @obj_count, :per_page_links => false, :remote => false, :flag => true){|text, parameters, options| + link_to text, host_with_protocol + "/syllabus_member/syl_member_autocomplete?" + parameters.merge(:q => params[:q],:flag => true,:syllabus=> syllabus, :format => 'js').to_query, :remote => true + } + s + content_tag('ul', links,:class => 'wlist',:style=>'float:left !important', :id => "syllabus_member_pagination_links" ) + end + def teacher_count syllabus count = 0 courses = syllabus.courses diff --git a/app/models/principal.rb b/app/models/principal.rb index e65816e83..7c2b24587 100644 --- a/app/models/principal.rb +++ b/app/models/principal.rb @@ -97,6 +97,16 @@ class Principal < ActiveRecord::Base end } + scope :not_member_of_syllabus, lambda {|syllabus| + syllabuses = [syllabus] unless syllabus.is_a?(Array) + if syllabuses.empty? + where("1=0") + else + ids = syllabuses.map(&:id) + where("#{Principal.table_name}.id NOT IN (SELECT DISTINCT user_id FROM #{SyllabusMember.table_name} WHERE syllabus_id IN (?))", ids) + end + } + scope :sorted, lambda { order(*Principal.fields_for_order_statement)} scope :applied_members, lambda {|project| diff --git a/app/models/syllabus.rb b/app/models/syllabus.rb index 29b675d25..0c23c1b13 100644 --- a/app/models/syllabus.rb +++ b/app/models/syllabus.rb @@ -9,6 +9,7 @@ class Syllabus < ActiveRecord::Base belongs_to :user has_many :courses has_many :journals_for_messages, :as => :jour, :dependent => :destroy + has_many :syllabus_members, :dependent => :destroy attr_accessible :description, :user_id, :title, :eng_name, :syllabus_type, :credit, :hours, :theory_hours, :practice_hours, :applicable_major, :pre_course safe_attributes 'title','user', 'description', 'eng_name', 'syllabus_type', 'credit', 'hours', 'theory_hours', 'practice_hours', 'credit', 'applicable_major', 'pre_course' diff --git a/app/models/syllabus_member.rb b/app/models/syllabus_member.rb new file mode 100644 index 000000000..40d3dacbe --- /dev/null +++ b/app/models/syllabus_member.rb @@ -0,0 +1,5 @@ +class SyllabusMember < ActiveRecord::Base + belongs_to :syllabus + belongs_to :user + attr_accessible :rank, :user_id, :syllabus_id +end diff --git a/app/models/user.rb b/app/models/user.rb index f2b2b6824..c1a830809 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -91,6 +91,7 @@ class User < Principal has_many :homework_attaches, :through => :homework_users has_many :homework_evaluations has_many :syllabuses, :dependent => :destroy + has_many :syllabus_members, :dependent => :destroy #问卷相关关关系 has_many :poll_users, :dependent => :destroy has_many :poll_votes, :dependent => :destroy diff --git a/app/views/layouts/_syllabus_teacher_list.html.erb b/app/views/layouts/_syllabus_teacher_list.html.erb index 344036ccf..c6d6fd59a 100644 --- a/app/views/layouts/_syllabus_teacher_list.html.erb +++ b/app/views/layouts/_syllabus_teacher_list.html.erb @@ -1,10 +1,12 @@

    教师团队 - 增加教师 + <% if User.current == @syllabus.user || User.current.admin? %> + 增加教师 + <% end %>

      - <% teacher = syllabus.user %> - <%# teachers.each do |teacher| %> + <% members.each do |member| %> + <% teacher = member.user %>
    • <%= link_to image_tag(url_to_avatar(teacher), :width => "60", :height => "60", :class => "sy_teachers_img fl mr15"), user_path(teacher), :target => "_blank", :alt => "用户头像" %>
      @@ -17,5 +19,5 @@
    • - <%# end %> + <% end %>
    \ No newline at end of file diff --git a/app/views/layouts/base_syllabus.html.erb b/app/views/layouts/base_syllabus.html.erb index 445af2a8b..3153741e0 100644 --- a/app/views/layouts/base_syllabus.html.erb +++ b/app/views/layouts/base_syllabus.html.erb @@ -60,11 +60,12 @@ <%= yield %>
    + <% members = @syllabus.syllabus_members.order("rank asc") %>
    <%= render :partial => 'layouts/syllabus_base_info', :locals => {:syllabus => @syllabus} %>
    -
    - <%= render :partial => 'layouts/syllabus_teacher_list', :locals => {:syllabus => @syllabus} %> +
    + <%= render :partial => 'layouts/syllabus_teacher_list', :locals => {:syllabus => @syllabus, :members => members} %>
    @@ -123,16 +124,18 @@ } function g(o){return document.getElementById(o);} function HoverLi(n){ - for(var i=1;i<=2;i++){ + //for(var i=1;i<=2;i++){ //g('sy_tab_nav_'+i).className='sy_tab_nomal'; //g('sy_tab_con_'+i).className='undis'; - } + //} //g('sy_tab_con_'+n).className='dis'; //g('sy_tab_nav_'+n).className='sy_tab_hover'; if(n == 1) { window.location.href = '<%=syllabus_path(@syllabus) %>'; - } else { + } else if(n == 2) { window.location.href = '<%=syllabus_courselist_syllabus_path(@syllabus) %>'; + } else if(n == 3) { + window.location.href = '<%=members_syllabus_path(@syllabus) %>'; } } //侧导航栏配置设置 diff --git a/app/views/syllabus_member/create.js.erb b/app/views/syllabus_member/create.js.erb new file mode 100644 index 000000000..d63db3288 --- /dev/null +++ b/app/views/syllabus_member/create.js.erb @@ -0,0 +1,4 @@ +$("#syllabus_member_list").replaceWith("<%= escape_javascript(render :partial => 'syllabuses/syllabus_member_list') %>"); +$("#syllabus_teacher_list").html("<%= escape_javascript(render :partial => 'layouts/syllabus_teacher_list', :locals => {:syllabus => @syllabus, :members => @members}) %>"); +$("#principal_search").val(""); +$("#principals_for_new_member").html(""); \ No newline at end of file diff --git a/app/views/syllabus_member/destroy.js.erb b/app/views/syllabus_member/destroy.js.erb new file mode 100644 index 000000000..8b1621741 --- /dev/null +++ b/app/views/syllabus_member/destroy.js.erb @@ -0,0 +1,2 @@ +$("#syllabus_member_list").replaceWith("<%= escape_javascript(render :partial => 'syllabuses/syllabus_member_list') %>"); +$("#syllabus_teacher_list").html("<%= escape_javascript(render :partial => 'layouts/syllabus_teacher_list', :locals => {:syllabus => @syllabus, :members => @members}) %>"); \ No newline at end of file diff --git a/app/views/syllabus_member/syl_member_autocomplete.js.erb b/app/views/syllabus_member/syl_member_autocomplete.js.erb new file mode 100644 index 000000000..f6160697d --- /dev/null +++ b/app/views/syllabus_member/syl_member_autocomplete.js.erb @@ -0,0 +1,19 @@ +<% if @syllabus %> +var checked = $("#principals_for_new_member input:checked").size(); +if(checked > 0) +{ + alert('翻页或搜索后将丢失当前选择的用户数据!'); +} +$('#principals_for_new_member').html('<%= escape_javascript(find_user_not_in_current_syllabus_by_name(@syllabus)) %>'); + +<% end %> +var collection = $("#principals_for_new_member").children("#principals").children("label"); +collection.css("text-overflow", "ellipsis"); +collection.css("white-space", "nowrap"); +collection.css("width", "200px"); +collection.css("overflow", "hidden"); +for(i = 0; i < collection.length; i++) { //增加悬浮显示 + var label = collection[i]; + var text = $(label).text(); + $(label).attr("title", text); +} \ No newline at end of file diff --git a/app/views/syllabus_member/update_rank.js.erb b/app/views/syllabus_member/update_rank.js.erb new file mode 100644 index 000000000..8b1621741 --- /dev/null +++ b/app/views/syllabus_member/update_rank.js.erb @@ -0,0 +1,2 @@ +$("#syllabus_member_list").replaceWith("<%= escape_javascript(render :partial => 'syllabuses/syllabus_member_list') %>"); +$("#syllabus_teacher_list").html("<%= escape_javascript(render :partial => 'layouts/syllabus_teacher_list', :locals => {:syllabus => @syllabus, :members => @members}) %>"); \ No newline at end of file diff --git a/app/views/syllabuses/_syllabus_course_list.html.erb b/app/views/syllabuses/_syllabus_course_list.html.erb index e90e274dc..8bbbd3cf9 100644 --- a/app/views/syllabuses/_syllabus_course_list.html.erb +++ b/app/views/syllabuses/_syllabus_course_list.html.erb @@ -9,7 +9,7 @@ <% if @type.to_i == 2 %> <%= link_to "", {:controller => 'syllabuses', :action => 'syllabus_courselist', :id =>@syllabus, :type => @type, :sort => @c_sort, :order => 2 }, :class => "#{@c_sort.to_i == 1 ? 'sortupbtn' : 'sortdownbtn'} mt15 fl", :remote => true %> <% end %> - <% if @syllabus.user == User.current %> + <% if @syllabus.syllabus_members.map{|sm| sm.user_id}.include?(User.current.id) %> <%= link_to "新建班级", new_course_path(:host=> Setting.host_course, :syllabus_id => @syllabus.id), :class => "sy_btn_green fr mt10 mr15", :target => '_blank'%> <% end %>
    @@ -21,13 +21,13 @@ <% if course.is_public == 0 && !User.current.member_of_course?(course) && !User.current.admin? %>

    <%= link_to @syllabus.title, syllabus_path(@syllabus.id), :style => 'color:#000', :target => '_blank' %> -  ·  + · <%=course.name %>(<%=current_time_and_term_short(course) %>)

    <% else %>

    <%= link_to @syllabus.title, syllabus_path(@syllabus.id), :style => 'color:#000', :target => '_blank' %> -  ·  + · <%= link_to course.name+"("+current_time_and_term_short(course)+")", course_path(course.id,:host=>Setting.host_course), :style => 'color:#000',:id => "show_course_#{course.id}", :target => '_blank', :title => (course.is_public? ? "公开班级:":"私有班级:")+course.name+"("+current_time_and_term(course)+")"%>

    @@ -88,12 +88,6 @@ \ No newline at end of file diff --git a/app/views/syllabuses/_syllabus_member_list.html.erb b/app/views/syllabuses/_syllabus_member_list.html.erb new file mode 100644 index 000000000..4ee3b9c28 --- /dev/null +++ b/app/views/syllabuses/_syllabus_member_list.html.erb @@ -0,0 +1,55 @@ +<% is_admin = User.current == @syllabus.user || User.current.admin? %> + + + + + + + + + <% if is_admin %> + + <% end %> + + + + <% @members.each_with_index do |member, i| %> + <% user = member.user %> + + + + + <% courses = user.courses.not_deleted %> + + + <% if is_admin %> + + <% end %> + + <% end %> + +
    序号姓名身份创建班级数参与班级数操作
    <%= member.rank %> + <% if member.rank == 1 %> +
    <%= user.show_name %>创建者
    + <% else %> + <%= user.show_name %> + <% end %> +
    + <% if user.user_extensions && user.user_extensions.identity %> + <%= get_user_roll user %> + <% end%> + <%= courses.where("tea_id = #{user.id}").count %><%= courses.where("tea_id != #{user.id}").count %> + <% if i == 0 %> +   + <% elsif i == 1 %> + <%= link_to('删除', {:controller => 'syllabus_member', :action => 'destroy', :id => member.id, :syllabus => @syllabus.id},:remote => true, :method => 'delete', :class => "fr sy_btn_grey mr5", :title => l(:button_delete)) %> + <%= link_to('下移', {:controller => 'syllabus_member', :action => 'update_rank', :id => member.id, :syllabus => @syllabus.id, :opr => 'down'},:remote => true, :method => 'post', :class => "fr sy_btn_blue mr5", :title => '下移') %> + <% elsif i == @members.count - 1 %> + <%= link_to('删除', {:controller => 'syllabus_member', :action => 'destroy', :id => member.id, :syllabus => @syllabus.id},:remote => true, :method => 'delete', :class => "fr sy_btn_grey mr5", :title => l(:button_delete)) %> + <%= link_to('上移', {:controller => 'syllabus_member', :action => 'update_rank', :id => member.id, :syllabus => @syllabus.id, :opr => 'up'},:remote => true, :method => 'post', :class => "fr sy_btn_blue mr5", :title => '上移') %> + <% else %> + <%= link_to('删除', {:controller => 'syllabus_member', :action => 'destroy', :id => member.id, :syllabus => @syllabus.id},:remote => true, :method => 'delete', :class => "fr sy_btn_grey mr5", :title => l(:button_delete)) %> + <%= link_to('下移', {:controller => 'syllabus_member', :action => 'update_rank', :id => member.id, :syllabus => @syllabus.id, :opr => 'down'},:remote => true, :method => 'post', :class => "fr sy_btn_blue mr5", :title => '下移') %> + <%= link_to('上移', {:controller => 'syllabus_member', :action => 'update_rank', :id => member.id, :syllabus => @syllabus.id, :opr => 'up'},:remote => true, :method => 'post', :class => "fr sy_btn_blue mr5", :title => '上移') %> + <% end %> +
    \ No newline at end of file diff --git a/app/views/syllabuses/members.html.erb b/app/views/syllabuses/members.html.erb new file mode 100644 index 000000000..fd4041b20 --- /dev/null +++ b/app/views/syllabuses/members.html.erb @@ -0,0 +1,51 @@ + + +
    +
    + <%= render :partial => 'syllabus_member_list' %> + 添加成员 +
    + +
    + + \ No newline at end of file diff --git a/app/views/syllabuses/show.html.erb b/app/views/syllabuses/show.html.erb index 17d03b8c5..03eb3f90a 100644 --- a/app/views/syllabuses/show.html.erb +++ b/app/views/syllabuses/show.html.erb @@ -14,6 +14,9 @@
  • 班级列表
  • +
  • + 教师团队 +
<% if @syllabus.des_status == 0 && User.current == @syllabus.user %> diff --git a/app/views/syllabuses/syllabus_courselist.html.erb b/app/views/syllabuses/syllabus_courselist.html.erb index ecb8ed7b8..123d1e332 100644 --- a/app/views/syllabuses/syllabus_courselist.html.erb +++ b/app/views/syllabuses/syllabus_courselist.html.erb @@ -5,6 +5,9 @@
  • 班级列表
  • +
  • + 教师团队 +
  • diff --git a/config/locales/projects/zh.yml b/config/locales/projects/zh.yml index 792ff35fd..4040edcc8 100644 --- a/config/locales/projects/zh.yml +++ b/config/locales/projects/zh.yml @@ -369,7 +369,7 @@ zh: label_input_email: 请输入邮箱地址 label_invite_trustie_user: "邀请Trustie注册用户" - label_invite_trustie_user_tips: "支持姓名、邮箱、登录名搜索!" + label_invite_trustie_user_tips: "支持姓名、邮箱、登录名搜索" label_user_role_null: 用户和角色不能留空! label_invite_project: 邀请您加入项目 label_mail_invite_success: 您已成功加入项目! diff --git a/config/routes.rb b/config/routes.rb index afe30d4de..d3700bb73 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1140,6 +1140,7 @@ RedmineApp::Application.routes.draw do post 'update_base_info' get 'delete_syllabus' get 'delete_des' + get 'members' end collection do @@ -1147,6 +1148,16 @@ RedmineApp::Application.routes.draw do end end + resources :syllabus_member do + member do + post 'update_rank' + end + + collection do + get 'syl_member_autocomplete' + end + end + # add by nwb # 课程路由设置 resources :courses do diff --git a/db/migrate/20160921062340_create_syllabus_members.rb b/db/migrate/20160921062340_create_syllabus_members.rb new file mode 100644 index 000000000..c2e76ee3f --- /dev/null +++ b/db/migrate/20160921062340_create_syllabus_members.rb @@ -0,0 +1,23 @@ +class CreateSyllabusMembers < ActiveRecord::Migration + def change + create_table :syllabus_members do |t| + t.integer :rank + t.references :syllabus + t.references :user + + t.timestamps + end + add_index :syllabus_members, :syllabus_id + add_index :syllabus_members, :user_id + add_index :syllabus_members, :rank + + count = Syllabus.all.count / 30 + 2 + transaction do + for i in 1 ... count do i + Syllabus.page(i).per(30).each do |syllabus| + SyllabusMember.create(:user_id => syllabus.user_id, :syllabus_id => syllabus.id, :rank => 1) + end + end + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 443e8c426..d8a60c93f 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 => 20160907080621) do +ActiveRecord::Schema.define(:version => 20160921062340) do create_table "activities", :force => true do |t| t.integer "act_id", :null => false @@ -56,10 +56,10 @@ ActiveRecord::Schema.define(:version => 20160907080621) do t.integer "user_id" t.integer "applied_id" t.string "applied_type" - t.integer "viewed" - t.integer "status" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false + t.integer "viewed", :default => 0 + t.integer "status", :default => 0 + 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 => 20160907080621) 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,7 +173,6 @@ ActiveRecord::Schema.define(:version => 20160907080621) 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" @@ -311,16 +310,14 @@ ActiveRecord::Schema.define(:version => 20160907080621) 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" @@ -1881,6 +1878,9 @@ ActiveRecord::Schema.define(:version => 20160907080621) do t.datetime "updated_at", :null => false end + add_index "student_works_scores", ["student_work_id"], :name => "student_work_id" + add_index "student_works_scores", ["user_id"], :name => "user_id" + create_table "students_for_courses", :force => true do |t| t.integer "student_id" t.integer "course_id" @@ -1923,6 +1923,18 @@ ActiveRecord::Schema.define(:version => 20160907080621) do t.datetime "updated_at", :null => false end + create_table "syllabus_members", :force => true do |t| + t.integer "rank" + t.integer "syllabus_id" + t.integer "user_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + + add_index "syllabus_members", ["rank"], :name => "index_syllabus_members_on_rank" + add_index "syllabus_members", ["syllabus_id"], :name => "index_syllabus_members_on_syllabus_id" + add_index "syllabus_members", ["user_id"], :name => "index_syllabus_members_on_user_id" + create_table "syllabuses", :force => true do |t| t.string "title" t.text "description" diff --git a/public/stylesheets/syllabus.css b/public/stylesheets/syllabus.css index 9aac34eae..1a04c73a5 100644 --- a/public/stylesheets/syllabus.css +++ b/public/stylesheets/syllabus.css @@ -617,3 +617,20 @@ a:hover.sy_class_ltitle{ color:#333;} /* 我的作业 */ .hw_classname{ width:180px; overflow:hidden; display:block;overflow:hidden;white-space: nowrap; text-overflow:ellipsis;} .hw_tab_top{ height: 50px; line-height: 50px; padding-left: 15px; border-bottom:1px solid #ddd; border-left:3px solid #3b94d6; } + +/*20160918教师团队*/ +.sy_new_tablebox{ padding:15px; padding-bottom:none;} +.sy_new_table{ width:100%; background:#fff; border:1px solid #e5e5e5; padding-bottom:30px;} +.sy_new_table thead tr{ height:40px; line-height:40px;} +.sy_new_table thead tr th{ border-bottom:1px solid #e5e5e5;} +.sy_new_table tbody tr:hover{ background:#f5f5f5;} +.sy_new_table tbody tr td{ height:40px; line-height:40px; border-bottom:1px dashed #e5e5e5; font-weight:normal; color:#888; text-align: center} +.sy_new_table tbody tr:last-child{ height:40px;} +.sy_new_tchlist li{ height:30px; line-height:30px;} +.sy_new_search{-webkit-border-radius:3px;-moz-border-radius:3px;-o-border-radius:3px;border-radius:3px; border:1px solid #d3d3d3; background:#fff; padding-left:5px; color:#888; height:32px; width:370px;box-shadow: inset 0px 0px 3px #dcdcdc; } +.sy_new_tchbox{ background:#f5f5f5; padding:15px; margin:15px; margin-top:0px;} +.sy_new_orange{font-size: 12px;padding: 0 5px;border-radius: 3px;line-height: 14px;color: #ff4a1b;border: 1px solid #ff4a1b;} +.sy_new_namebox{ width:180px; overflow:hidden;} +.sy_new_name{ display:block;max-width:120px; overflow:hidden;white-space: nowrap; text-overflow:ellipsis;} +.sy_new_long_name{ display:block;width:180px; overflow:hidden;white-space: nowrap; text-overflow:ellipsis;} +.mt12{ margin-top:12px;} diff --git a/spec/controllers/syllabus_member_controller_spec.rb b/spec/controllers/syllabus_member_controller_spec.rb new file mode 100644 index 000000000..b56654f55 --- /dev/null +++ b/spec/controllers/syllabus_member_controller_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe SyllabusMemberController, :type => :controller do + +end diff --git a/spec/factories/syllabus_members.rb b/spec/factories/syllabus_members.rb new file mode 100644 index 000000000..ab1bd6701 --- /dev/null +++ b/spec/factories/syllabus_members.rb @@ -0,0 +1,9 @@ +# Read about factories at https://github.com/thoughtbot/factory_girl + +FactoryGirl.define do + factory :syllabus_member do + rank 1 + syllabus nil + user nil + end +end diff --git a/spec/models/syllabus_member_spec.rb b/spec/models/syllabus_member_spec.rb new file mode 100644 index 000000000..464c1e965 --- /dev/null +++ b/spec/models/syllabus_member_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe SyllabusMember, :type => :model do + pending "add some examples to (or delete) #{__FILE__}" +end From 46c3e6e8f6ed947aae7ce4065718135b5af79c93 Mon Sep 17 00:00:00 2001 From: yuanke <249218296@qq.com> Date: Fri, 23 Sep 2016 14:16:28 +0800 Subject: [PATCH 35/50] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E4=BD=9C=E4=B8=9A?= =?UTF-8?q?=E5=8A=A8=E6=80=81=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/mobile/entities/activity.rb | 26 ++++++++++++++++++++++++++ app/api/mobile/entities/whomework.rb | 19 +++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/app/api/mobile/entities/activity.rb b/app/api/mobile/entities/activity.rb index b36b8039b..b2581c319 100644 --- a/app/api/mobile/entities/activity.rb +++ b/app/api/mobile/entities/activity.rb @@ -109,6 +109,28 @@ module Mobile "项目" end end + when :homework_commit_count + if ac.act_type == "HomeworkCommon" + ac.act.student_works.has_committed.count + end + when :last_commit_info + if ac.act_type == "HomeworkCommon" + if ac.act.student_works.has_committed.count > 0 + lc = ac.act.student_works.has_committed.reorder("commit_time desc").first + {:lasttime=>time_from_now(lc.commit_time), :lastname=>lc.user.show_name} + end + end + when :last_score_info + if ac.act_type == "HomeworkCommon" + if ac.act.student_works.has_committed.count > 0 + sw_id = "("+ac.act.student_works.map{|sw| sw.id}.join(",")+")" + student_work_scores = StudentWorksScore.where("student_work_id in #{sw_id} and score is not null").reorder("created_at desc") + unless student_work_scores.empty? + last_score = student_work_scores.first + {:lasttime=>time_from_now(last_score.created_at), :lastname=>last_score.user.show_name} + end + end + end end end end @@ -153,6 +175,10 @@ module Mobile act_expose :course_project_name #课程/项目名字 act_expose :syllabus_title #课程名字 act_expose :activity_type_name #课程问答区/项目缺陷等 + act_expose :homework_commit_count #作品提交数 + act_expose :last_commit_info #最近提交信息 + act_expose :last_score_info #最近评阅信息 + 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" has_praise = false diff --git a/app/api/mobile/entities/whomework.rb b/app/api/mobile/entities/whomework.rb index b19d34f05..1fbc52eea 100644 --- a/app/api/mobile/entities/whomework.rb +++ b/app/api/mobile/entities/whomework.rb @@ -38,6 +38,22 @@ module Mobile wh.id when :title wh.name + when :homework_commit_count + wh.student_works.has_committed.count + when :last_commit_info + if wh.student_works.has_committed.count > 0 + lc = wh.student_works.has_committed.reorder("commit_time desc").first + {:lasttime=>time_from_now(lc.commit_time), :lastname=>lc.user.show_name} + end + when :last_score_info + if wh.student_works.has_committed.count > 0 + sw_id = "("+wh.student_works.map{|sw| sw.id}.join(",")+")" + student_work_scores = StudentWorksScore.where("student_work_id in #{sw_id} and score is not null").reorder("created_at desc") + unless student_work_scores.empty? + last_score = student_work_scores.first + {:lasttime=>time_from_now(last_score.created_at), :lastname=>last_score.user.show_name} + end + end end end end @@ -74,6 +90,9 @@ module Mobile whomework_expose :evaluation_end whomework_expose :praise_count whomework_expose :comment_count + whomework_expose :homework_commit_count #作品提交数 + whomework_expose :last_commit_info #最近提交信息 + whomework_expose :last_score_info #最近评阅信息 expose :all_children, using: Mobile::Entities::Jours do |f, opt| #f[:journals_for_messages] if f.is_a?(Hash) && f.key?(:journals_for_messages) if f.is_a?(::HomeworkCommon) From 86a3ce185d7d3190fe77613ea244feb2ade5d2bf Mon Sep 17 00:00:00 2001 From: Tim Date: Fri, 23 Sep 2016 14:17:23 +0800 Subject: [PATCH 36/50] =?UTF-8?q?=E4=B8=AA=E4=BA=BA=E4=B8=BB=E9=A1=B5?= =?UTF-8?q?=E4=BE=A7=E5=AF=BC=E8=88=AA=E5=AE=BD=E5=BA=A6=E9=99=90=E5=88=B6?= =?UTF-8?q?=E6=9B=B4=E6=94=B9=EF=BC=8C=E6=8F=90=E7=A4=BA=E6=A1=86=E6=95=88?= =?UTF-8?q?=E6=9E=9C=E5=8F=8Ajs=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/layouts/_user_courses.html.erb | 61 +++++++++++----------- public/images/user/icons_user_leftnav.png | Bin 3456 -> 3465 bytes public/images/user/user_navmore_icons.png | Bin 1072 -> 1085 bytes public/stylesheets/css/structure.css | 7 ++- 4 files changed, 36 insertions(+), 32 deletions(-) diff --git a/app/views/layouts/_user_courses.html.erb b/app/views/layouts/_user_courses.html.erb index 60db07db0..8f996fe1c 100644 --- a/app/views/layouts/_user_courses.html.erb +++ b/app/views/layouts/_user_courses.html.erb @@ -1,19 +1,19 @@ <% courses.each do |course|%> -
  • +
  • <% is_teacher = User.current.logged? && (User.current.admin? || User.current.allowed_to?(:as_teacher,course)) %> -

    - <% 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+"("+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)+")"%> <% count = ShieldActivity.where("container_type='User' and container_id=#{user.id} and shield_type='Course' and shield_id=#{course.id}").count %> @@ -113,25 +113,26 @@ } $(".course_list_menu").each(function(){ - 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 < 91 && classWidth > 91){ - $(this).children().eq(2).css("max-width",newClassWidth + "px"); - } - if(classWidth < 91 && courseWidth > 91){ - $(this).children().eq(0).css("max-width",newCourseWidth + "px"); - } + $(this).mouseenter(function(){ + $(".sub-menu-title").hide(); + $(this).next().stop(); + $(this).next().show(); + }); + $(this).mouseleave(function(){ + $(this).next().delay(500).hide(0); + }); }) - $(".course-name").each(function(){ - $(this).mouseenter(function(){ - $(this).parent().parent().children().eq(3).show(); - }); - $(this).mouseleave(function(){ - $(this).parent().parent().children().eq(3).hide(); - }); - }) + $(".sub-menu-title").each(function(){ + var boxWidth = $(this).width(); + var leftAttr = boxWidth + 50 + $(this).css("left",-leftAttr); + $(this).mouseover(function(){ + $(this).stop(); + $(this).show(); + }); + $(this).mouseout(function(){ + $(this).delay(500).hide(0); + }); + }); diff --git a/public/images/user/icons_user_leftnav.png b/public/images/user/icons_user_leftnav.png index 7983c4dc6e57599455234427fc42d295e7c39e89..b667508da64368aa31024ad31b2c746315ab98c2 100644 GIT binary patch delta 2667 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 E0y;LA6951J diff --git a/public/images/user/user_navmore_icons.png b/public/images/user/user_navmore_icons.png index e4fb91b541329d50720c2d106570ec0e59044479..249d8ab15e833d964b26ff0944ed49592027acae 100644 GIT binary patch delta 408 zcmdnMv6o|m8&iz4g`<$_i>(q+L@y;X#R{s|8JFJ4i5|o-|m4e#>M_hU*>oGgk zZ+7RiXJBB^3h)VWwVrbA-M8PB+a51H_r`nf&6@2`eCFP&-SNa}#`V3oKQ1}<#&O2= zeYZdU|NozC z8yH`GW>b&se9i04$P5C0U=m22=eCQI*zrxBCuZvwgMzu)5$_i>(q+L@y;X#R{s|8JFJ4i5|o-|m4e#>M_hU*>oGgk z9~Y@NW?*1Y5AX?bwVrbA+poVjUwyyv>U-Dz=SeH?ZM^c{b>@xaRrfmgKihcqz01rS z|NsBzcj0{x)WTa5>qOz zG=n}(6HPz{jtLLqO>Z5re7}@?j?C*9O!n7vnDVQyFIgVV#D)y?SnHX17~TpV4DgC; RX9rrs;OXk;vd$@?2>^fLkeL7g diff --git a/public/stylesheets/css/structure.css b/public/stylesheets/css/structure.css index 5fc47ad81..2c2773774 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 15px 0 25px; border:1px solid #e5e5e5; border-bottom:none; background:#f8f8f8;} +.user_sub_menu li p {padding: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;} @@ -640,7 +640,10 @@ 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;} +.sub-menu-title {position:absolute; background-color:#fff; padding:5px 10px; z-index:99; white-space:nowrap; top:-13px; box-shadow: 0px 2px 8px rgba(146, 153, 169, 0.5); display:none;} +.sub-menu-title div a {background-color:#fff; height:auto; line-height:1; font-size:12px;} +.sub-menu-title em {display:block; border-width:8px; position:absolute;top:23px; right:-16px; border-style:dashed dashed dashed solid; border-color:transparent transparent transparent #fff; font-size:0; line-height:0; z-index:1;} +.sub-menu-title font {display:block; border-width:8px; position:absolute;top:24px; right:-17px; border-style:dashed dashed dashed solid; border-color:transparent transparent transparent rgba(146, 153, 169, 0.5); font-size:0; line-height:0;} /* 个人主页左侧导航更多功能 */ .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 56a55eb911e44bdf2437446a94ea9ef156643e79 Mon Sep 17 00:00:00 2001 From: Tim Date: Fri, 23 Sep 2016 14:41:09 +0800 Subject: [PATCH 37/50] =?UTF-8?q?=E4=BD=9C=E4=B8=9A=E5=8A=A8=E6=80=81?= =?UTF-8?q?=E5=92=8C=E8=AF=A6=E6=83=85=E6=B7=BB=E5=8A=A0=E6=8F=90=E4=BA=A4?= =?UTF-8?q?=E4=BD=9C=E5=93=81=E6=95=B0=E5=8F=8A=E6=8F=90=E4=BA=A4=E5=8A=A8?= =?UTF-8?q?=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/assets/wechat/activities.html | 10 ++++++++++ public/assets/wechat/homework_detail.html | 5 +++++ 2 files changed, 15 insertions(+) diff --git a/public/assets/wechat/activities.html b/public/assets/wechat/activities.html index 09490b766..6c42ef098 100644 --- a/public/assets/wechat/activities.html +++ b/public/assets/wechat/activities.html @@ -37,6 +37,11 @@
    迟交扣分:{{act.homework_common_detail.late_penalty}}分 匿评开启时间:{{act.homework_common_detail.evaluation_start}}
    缺评扣分:{{act.homework_common_detail.absence_penalty}}分/作品 匿评关闭时间:{{act.homework_common_detail.evaluation_end}} +
    作品提交数: 10
    +
    + #1个月前 胡莎莎 评阅了作品
    + #2个月前 胡莎莎 提交了作品 +
  • @@ -402,6 +407,11 @@
    迟交扣分:{{act.homework_common_detail.late_penalty}}分 匿评开启时间:{{act.homework_common_detail.evaluation_start}}
    缺评扣分:{{act.homework_common_detail.absence_penalty}}分/作品 匿评关闭时间:{{act.homework_common_detail.evaluation_end}} +
    作品提交数: 10
    +
    + #1个月前 胡莎莎 评阅了作品
    + #2个月前 胡莎莎 提交了作品 +
    diff --git a/public/assets/wechat/homework_detail.html b/public/assets/wechat/homework_detail.html index 161c3be94..1806f9eb7 100644 --- a/public/assets/wechat/homework_detail.html +++ b/public/assets/wechat/homework_detail.html @@ -30,6 +30,11 @@ 缺评扣分:{{homework.absence_penalty}}分/作品 匿评关闭时间:{{homework.evaluation_end}}
    +
    作品提交数: 10
    +
    + #1个月前 胡莎莎 评阅了作品
    + #2个月前 胡莎莎 提交了作品 +
    From 70042fe91fa016cf91f501fdd9416ed124af7aeb Mon Sep 17 00:00:00 2001 From: cxt Date: Fri, 23 Sep 2016 16:44:49 +0800 Subject: [PATCH 38/50] =?UTF-8?q?=E5=B8=96=E5=AD=90=E8=AF=A6=E6=83=85?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E7=9A=84=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/messages_controller.rb | 56 +++++++++---------- app/helpers/application_helper.rb | 7 ++- app/models/blog_comment.rb | 2 + app/models/comment.rb | 2 + app/models/contest.rb | 1 + app/models/homework_common.rb | 2 + app/models/issue.rb | 1 + app/models/journal.rb | 2 + app/models/journals_for_message.rb | 2 + app/models/memo.rb | 2 + app/models/message.rb | 1 + app/models/news.rb | 3 + app/models/org_document_comment.rb | 2 + app/models/praise_tread_cache.rb | 3 +- app/models/syllabus.rb | 2 + app/views/messages/_course_show.html.erb | 6 +- .../messages/_org_subfield_show.html.erb | 6 +- app/views/messages/_project_show.html.erb | 6 +- app/views/praise_tread/_praise.html.erb | 4 +- 19 files changed, 68 insertions(+), 42 deletions(-) diff --git a/app/controllers/messages_controller.rb b/app/controllers/messages_controller.rb index 37383712f..5731244c3 100644 --- a/app/controllers/messages_controller.rb +++ b/app/controllers/messages_controller.rb @@ -38,47 +38,45 @@ class MessagesController < ApplicationController # Show a topic and its replies def show @isReply = true - page = params[:page] - # Find the page of the requested reply - if params[:r] && page.nil? - offset = @topic.children.count(:conditions => ["#{Message.table_name}.id < ?", params[:r].to_i]) - page = 1 + offset / REPLIES_PER_PAGE - end + # page = params[:page] + # # Find the page of the requested reply + # if params[:r] && page.nil? + # offset = @topic.children.count(:conditions => ["#{Message.table_name}.id < ?", params[:r].to_i]) + # page = 1 + offset / REPLIES_PER_PAGE + # end all_comments = [] - @reply_count = get_all_children(all_comments, @topic).count + @replies = get_all_children(all_comments, @topic) + @reply_count = @replies.count @reply = Message.new(:subject => "RE: #{@message.subject}") if @course - messages_replies = @topic.children. - includes(:author, :attachments, {:board => :project}). - reorder("#{Message.table_name}.created_on DESC"). + #@replies = @topic.children. + #includes(:author, :attachments, :praise_tread_cache, {:board => :project}). + #reorder("#{Message.table_name}.created_on DESC"). #limit(@reply_pages.per_page). #offset(@reply_pages.offset). - all - @replies = paginateHelper messages_replies,10 - @reply = Message.new(:subject => "RE: #{@message.subject}") + #all + #@replies = paginateHelper messages_replies,10 @left_nav_type = 2 render :action => "show", :layout => "base_courses"#by young elsif @project - @reply_pages = Paginator.new @reply_count, REPLIES_PER_PAGE, page - @replies = @topic.children. - includes(:author, :attachments, {:board => :project}). - reorder("#{Message.table_name}.created_on DESC"). - limit(@reply_pages.per_page). - offset(@reply_pages.offset). - all + #@reply_pages = Paginator.new @reply_count, REPLIES_PER_PAGE, page + # @replies = @topic.children. + # includes(:author, :attachments, {:board => :project}). + # reorder("#{Message.table_name}.created_on DESC"). + # limit(@reply_pages.per_page). + # offset(@reply_pages.offset). + # all - @reply = Message.new(:subject => "RE: #{@message.subject}") render :action => "show", :layout => "base_projects"#by young else - @reply_pages = Paginator.new @reply_count, REPLIES_PER_PAGE, page - @replies = @topic.children. - includes(:author, :attachments, {:board => :project}). - reorder("#{Message.table_name}.created_on DESC"). - limit(@reply_pages.per_page). - offset(@reply_pages.offset). - all + # @reply_pages = Paginator.new @reply_count, REPLIES_PER_PAGE, page + # @replies = @topic.children. + # includes(:author, :attachments, {:board => :project}). + # reorder("#{Message.table_name}.created_on DESC"). + # limit(@reply_pages.per_page). + # offset(@reply_pages.offset). + # all - @reply = Message.new(:subject => "RE: #{@message.subject}") @organization = @org_subfield.organization render :action => "show", :layout => "base_org"#by young end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 8b5b594bd..511266ba1 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -3246,7 +3246,12 @@ end #获取所有子节点 def get_all_children result, jour - if (jour.kind_of? JournalsForMessage) || (jour.kind_of? Message) || (jour.kind_of? BlogComment) || (jour.kind_of? OrgDocumentComment) + if jour.kind_of? JournalsForMessage + jour.children.includes(:author, :praise_tread_cache).each do |jour_child| + result << jour_child + get_all_children result, jour_child + end + elsif (jour.kind_of? Message) || (jour.kind_of? BlogComment) || (jour.kind_of? OrgDocumentComment) jour.children.each do |jour_child| result << jour_child get_all_children result, jour_child diff --git a/app/models/blog_comment.rb b/app/models/blog_comment.rb index 8959e9c29..6290840a3 100644 --- a/app/models/blog_comment.rb +++ b/app/models/blog_comment.rb @@ -12,6 +12,8 @@ class BlogComment < ActiveRecord::Base belongs_to :last_reply, :class_name => 'BlogComment', :foreign_key => 'last_comment_id' # 虚拟关联 has_many :user_acts, :class_name => 'UserAcivity',:as =>:act + has_many :praise_tread, as: :praise_tread_object, dependent: :destroy + has_one :praise_tread_cache, as: :object, dependent: :destroy acts_as_watchable validates_presence_of :title, :content diff --git a/app/models/comment.rb b/app/models/comment.rb index 633c9a825..27a917b93 100644 --- a/app/models/comment.rb +++ b/app/models/comment.rb @@ -27,6 +27,8 @@ class Comment < ActiveRecord::Base has_many :course_messages, :class_name =>'CourseMessage', :as => :course_message, :dependent => :destroy has_many :forge_messages, :class_name => 'ForgeMessage', :as => :forge_message, :dependent => :destroy #end + has_many :praise_tread, as: :praise_tread_object, dependent: :destroy + has_one :praise_tread_cache, as: :object, dependent: :destroy acts_as_event :datetime => :updated_on, :description => :comments, :type => 'news', diff --git a/app/models/contest.rb b/app/models/contest.rb index 650e363a8..4fbd5441e 100644 --- a/app/models/contest.rb +++ b/app/models/contest.rb @@ -13,6 +13,7 @@ class Contest < ActiveRecord::Base has_many :join_in_competitions, foreign_key: 'competition_id', :dependent => :destroy has_many :join_in_contests, class_name: 'JoinInCompetition', foreign_key: 'competition_id', :dependent => :destroy has_many :praise_tread, as: :praise_tread_object, dependent: :destroy + has_one :praise_tread_cache, as: :object, dependent: :destroy has_many :contestnotifications, :dependent => :destroy, :include => :author diff --git a/app/models/homework_common.rb b/app/models/homework_common.rb index 7a082cecf..dfff273a0 100644 --- a/app/models/homework_common.rb +++ b/app/models/homework_common.rb @@ -19,6 +19,8 @@ class HomeworkCommon < ActiveRecord::Base has_many :student_works_evaluation_distributions, :through => :student_works #一个作业的分配的匿评列表 has_many :journals_for_messages, :as => :jour, :dependent => :destroy has_many :apply_homeworks, :dependent => :destroy + has_many :praise_tread, as: :praise_tread_object, dependent: :destroy + has_one :praise_tread_cache, as: :object, dependent: :destroy has_many :acts, :class_name => 'Activity', :as => :act, :dependent => :destroy #用户活动 # 课程动态 has_many :course_acts, :class_name => 'CourseActivity',:as =>:course_act ,:dependent => :destroy diff --git a/app/models/issue.rb b/app/models/issue.rb index 222a4f4e2..9c3c8d168 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -53,6 +53,7 @@ class Issue < ActiveRecord::Base has_many :forge_acts, :class_name => 'ForgeActivity',:as =>:forge_act ,:dependent => :destroy # end has_many :praise_tread, as: :praise_tread_object, dependent: :destroy + has_one :praise_tread_cache, as: :object, dependent: :destroy # ForgeMessage虚拟关联(多态) has_many :forge_messages, :class_name => 'ForgeMessage',:as =>:forge_message ,:dependent => :destroy diff --git a/app/models/journal.rb b/app/models/journal.rb index f22015f47..f14484a31 100644 --- a/app/models/journal.rb +++ b/app/models/journal.rb @@ -35,6 +35,8 @@ class Journal < ActiveRecord::Base # 被ForgeMessage虚拟关联 has_many :forge_messages, :class_name => 'ForgeMessage',:as =>:forge_message ,:dependent => :destroy has_many :at_messages, as: :at_message, dependent: :destroy + has_many :praise_tread, as: :praise_tread_object, dependent: :destroy + has_one :praise_tread_cache, as: :object, dependent: :destroy acts_as_attachable attr_accessor :indice acts_as_tree :counter_cache => :comments_count, :order => "#{Journal.table_name}.created_on ASC" diff --git a/app/models/journals_for_message.rb b/app/models/journals_for_message.rb index 68cb9da15..30d8120ef 100644 --- a/app/models/journals_for_message.rb +++ b/app/models/journals_for_message.rb @@ -68,6 +68,8 @@ class JournalsForMessage < ActiveRecord::Base has_many :user_feedback_messages, :class_name => 'UserFeedbackMessage', :as =>:journals_for_message, :dependent => :destroy has_many :at_messages, as: :at_message, dependent: :destroy + has_many :praise_tread, as: :praise_tread_object, dependent: :destroy + has_one :praise_tread_cache, as: :object, dependent: :destroy validates :notes, presence: true, if: :is_homework_jour? after_create :act_as_activity, :act_as_course_activity, :act_as_course_message, diff --git a/app/models/memo.rb b/app/models/memo.rb index ee9f4c8db..793d534d4 100644 --- a/app/models/memo.rb +++ b/app/models/memo.rb @@ -48,6 +48,8 @@ class Memo < ActiveRecord::Base acts_as_attachable has_many :user_score_details, :class_name => 'UserScoreDetails',:as => :score_changeable_obj has_many :praise_tread, as: :praise_tread_object, dependent: :destroy + has_one :praise_tread_cache, as: :object, dependent: :destroy + # 消息 has_many :memo_messages, :class_name =>'MemoMessage', :dependent => :destroy # end diff --git a/app/models/message.rb b/app/models/message.rb index 14add0d02..3192907fe 100644 --- a/app/models/message.rb +++ b/app/models/message.rb @@ -26,6 +26,7 @@ class Message < ActiveRecord::Base belongs_to :board,:touch => true belongs_to :author, :class_name => 'User', :foreign_key => 'author_id' has_many :praise_tread, as: :praise_tread_object, dependent: :destroy + has_one :praise_tread_cache, as: :object, dependent: :destroy # has_many :org_subfield_messages, :dependent => :destroy # has_many :org_subfields, :through => :org_subfield_messages diff --git a/app/models/news.rb b/app/models/news.rb index 58bbc40ac..0a893e34e 100644 --- a/app/models/news.rb +++ b/app/models/news.rb @@ -40,6 +40,9 @@ class News < ActiveRecord::Base has_many :forge_messages, :class_name => 'ForgeMessage', :as => :forge_message, :dependent => :destroy #end + has_many :praise_tread, as: :praise_tread_object, dependent: :destroy + has_one :praise_tread_cache, as: :object, dependent: :destroy + #转发表 has_many :forwards, :as => :from, :dependent => :destroy diff --git a/app/models/org_document_comment.rb b/app/models/org_document_comment.rb index dd7734a54..a87fe783f 100644 --- a/app/models/org_document_comment.rb +++ b/app/models/org_document_comment.rb @@ -6,6 +6,8 @@ class OrgDocumentComment < ActiveRecord::Base belongs_to :organization belongs_to :creator, :class_name => 'User', :foreign_key => 'creator_id' has_many :editor_of_documents, :dependent => :destroy + has_many :praise_tread, as: :praise_tread_object, dependent: :destroy + has_one :praise_tread_cache, as: :object, dependent: :destroy acts_as_tree :order => "#{OrgDocumentComment.table_name}.sticky asc, #{OrgDocumentComment.table_name}.created_at desc" acts_as_attachable has_many :org_acts, :class_name => 'OrgActivity',:as =>:org_act ,:dependent => :destroy diff --git a/app/models/praise_tread_cache.rb b/app/models/praise_tread_cache.rb index 739b45876..27f4104fc 100644 --- a/app/models/praise_tread_cache.rb +++ b/app/models/praise_tread_cache.rb @@ -1,6 +1,7 @@ class PraiseTreadCache < ActiveRecord::Base attr_accessible :object_id,:object_type,:praise_num,:tread_num - + belongs_to :object, :polymorphic => true + def plus(flag,num) case flag when 0 diff --git a/app/models/syllabus.rb b/app/models/syllabus.rb index 0c23c1b13..f72463503 100644 --- a/app/models/syllabus.rb +++ b/app/models/syllabus.rb @@ -10,6 +10,8 @@ class Syllabus < ActiveRecord::Base has_many :courses has_many :journals_for_messages, :as => :jour, :dependent => :destroy has_many :syllabus_members, :dependent => :destroy + has_many :praise_tread, as: :praise_tread_object, dependent: :destroy + has_one :praise_tread_cache, as: :object, dependent: :destroy attr_accessible :description, :user_id, :title, :eng_name, :syllabus_type, :credit, :hours, :theory_hours, :practice_hours, :applicable_major, :pre_course safe_attributes 'title','user', 'description', 'eng_name', 'syllabus_type', 'credit', 'hours', 'theory_hours', 'practice_hours', 'credit', 'applicable_major', 'pre_course' diff --git a/app/views/messages/_course_show.html.erb b/app/views/messages/_course_show.html.erb index 95c9b7df1..abdeef255 100644 --- a/app/views/messages/_course_show.html.erb +++ b/app/views/messages/_course_show.html.erb @@ -93,10 +93,10 @@
    - <% all_comments = []%> - <% comments = get_all_children(all_comments, @topic) %> + <%# all_comments = []%> + <%# comments = get_all_children(all_comments, @topic) %>
    - <% comments.each_with_index do |reply,i| %> + <% @replies.each do |reply| %>