From 63c9804da85e480dea04cf59a717eb1027d1e80a Mon Sep 17 00:00:00 2001 From: alan <547533434@qq.com> Date: Tue, 2 Dec 2014 14:41:36 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E6=B7=BB=E5=8A=A0course=5Fgroup=E8=A1=A8?= =?UTF-8?q?=E5=8D=95=E5=88=B0=E6=95=B0=E6=8D=AE=E5=BA=93=E4=B8=AD=EF=BC=8C?= =?UTF-8?q?=E5=B9=B6=E5=BB=BA=E7=AB=8B=E5=AF=B9=E5=BA=94=E4=BA=8Emembers?= =?UTF-8?q?=E5=92=8Ccourses=E4=B9=8B=E9=97=B4=E7=9A=84=E5=85=B3=E8=81=94?= =?UTF-8?q?=EF=BC=8C=20=E5=AF=B9=E7=9B=B8=E5=BA=94=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E7=9A=84=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: alan <547533434@qq.com> --- app/controllers/courses_controller.rb | 8 +- app/helpers/courses_helper.rb | 10 +- app/models/course.rb | 2 + app/models/course_group.rb | 15 + app/models/member.rb | 1 + app/views/courses/member.html.erb | 21 +- .../20141126091207_create_course_groups.rb | 11 + .../20141126091750_add_column_to_members.rb | 5 + db/schema.rb | 10 +- public/images/btn.png | Bin 0 -> 1308 bytes public/images/close2.png | Bin 0 -> 1637 bytes public/images/inputBg.png | Bin 0 -> 958 bytes public/images/pic_edit.png | Bin 0 -> 629 bytes public/images/pic_up.png | Bin 0 -> 217 bytes public/javascripts/application.js.bak | 696 ------------------ public/stylesheets/course_group.css | 67 ++ test/fixtures/course_groups.yml | 11 + test/unit/course_group_test.rb | 7 + 18 files changed, 157 insertions(+), 707 deletions(-) create mode 100644 app/models/course_group.rb create mode 100644 db/migrate/20141126091207_create_course_groups.rb create mode 100644 db/migrate/20141126091750_add_column_to_members.rb create mode 100644 public/images/btn.png create mode 100644 public/images/close2.png create mode 100644 public/images/inputBg.png create mode 100644 public/images/pic_edit.png create mode 100644 public/images/pic_up.png delete mode 100644 public/javascripts/application.js.bak create mode 100644 public/stylesheets/course_group.css create mode 100644 test/fixtures/course_groups.yml create mode 100644 test/unit/course_group_test.rb diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index bd389ff68..78f75f31a 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -201,13 +201,19 @@ class CoursesController < ApplicationController @render_file = 'member_list' @teachers= searchTeacherAndAssistant(@course) @canShowCode = isCourseTeacher(User.current.id,@course) && params[:role] != '1' + @role = params[:role] + @course_group_id = params[:@course_group_id] unless params[:@course_group_id].nil? case params[:role] when '1' @subPage_title = l :label_teacher_list @members = searchTeacherAndAssistant(@course) when '2' @subPage_title = l :label_student_list - @members = searchStudent(@course) + if @course_group_id + @members = search_student_in_group(@course, @course_group_id) + else + @members = searchStudent(@course) + end else @subPage_title = '' @members = @course.member_principals.includes(:roles, :principal).all.sort diff --git a/app/helpers/courses_helper.rb b/app/helpers/courses_helper.rb index 178782da3..92f95bdc1 100644 --- a/app/helpers/courses_helper.rb +++ b/app/helpers/courses_helper.rb @@ -170,7 +170,7 @@ module CoursesHelper members end - def searchStudent project + def search_student_in_group(project, course_group_id) #searchPeopleByRoles(project, StudentRoles) members = [] project.members.each do |m| @@ -178,6 +178,14 @@ module CoursesHelper end members end + def searchStudent project + #searchPeopleByRoles(project, StudentRoles) + members = [] + project.members.each do |m| + members << m if m && m.user && m.user.allowed_to?(:as_student,project) + end + members + end # ===================================================================================== #def searchCountByRoles project, roles_id diff --git a/app/models/course.rb b/app/models/course.rb index 6bb7a75d4..099ae7ae5 100644 --- a/app/models/course.rb +++ b/app/models/course.rb @@ -29,6 +29,8 @@ class Course < ActiveRecord::Base has_many :news, :dependent => :destroy, :include => :author has_one :course_status, :class_name => "CourseStatus", :dependent => :destroy + has_many :course_groups, :dependent => :destroy + acts_as_taggable acts_as_nested_set :order => 'name', :dependent => :destroy acts_as_attachable :view_permission => :view_files, diff --git a/app/models/course_group.rb b/app/models/course_group.rb new file mode 100644 index 000000000..236a51145 --- /dev/null +++ b/app/models/course_group.rb @@ -0,0 +1,15 @@ +class CourseGroup < ActiveRecord::Base + # attr_accessible :title, :body + belongs_to :course + has_many :members + + before_destroy :set_member_nil + + attr_accessible :name + + def set_member_nil + if self.members && self.members.count > 0 + self.members.update_all("course_group_id = 0") + end + end +end diff --git a/app/models/member.rb b/app/models/member.rb index 46aefbd09..716f6a7c5 100644 --- a/app/models/member.rb +++ b/app/models/member.rb @@ -24,6 +24,7 @@ class Member < ActiveRecord::Base belongs_to :project belongs_to :course + belongs_to :course_group validates_presence_of :principal validates_uniqueness_of :user_id, :scope => [:project_id,:course_id] validate :validate_role diff --git a/app/views/courses/member.html.erb b/app/views/courses/member.html.erb index 3d3076bcc..aff9ffeb5 100644 --- a/app/views/courses/member.html.erb +++ b/app/views/courses/member.html.erb @@ -1,10 +1,15 @@ -
-

- <%= @subPage_title %> -

-
-
- <%= error_messages_for 'member' %> - <%= render :partial => @render_file, :locals => {:members => @members} %> +<%= stylesheet_link_tag 'course_group', :media => 'all' %> +
+ +
+ <%= error_messages_for 'member' %> + <%= render :partial => @render_file, :locals => {:members => @members} %> +
diff --git a/db/migrate/20141126091207_create_course_groups.rb b/db/migrate/20141126091207_create_course_groups.rb new file mode 100644 index 000000000..2ee849b6f --- /dev/null +++ b/db/migrate/20141126091207_create_course_groups.rb @@ -0,0 +1,11 @@ +class CreateCourseGroups < ActiveRecord::Migration + def change + create_table :course_groups do |t| + t.string :name + t.integer :course_id + + + t.timestamps + end + end +end diff --git a/db/migrate/20141126091750_add_column_to_members.rb b/db/migrate/20141126091750_add_column_to_members.rb new file mode 100644 index 000000000..ce1ac7a75 --- /dev/null +++ b/db/migrate/20141126091750_add_column_to_members.rb @@ -0,0 +1,5 @@ +class AddColumnToMembers < ActiveRecord::Migration + def change + add_column :members, :course_group_id, :integer, default: 0 + end +end diff --git a/db/schema.rb b/db/schema.rb index 973e2afbe..36fcb15cf 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 => 20141120091234) do +ActiveRecord::Schema.define(:version => 20141126091750) do create_table "activities", :force => true do |t| t.integer "act_id", :null => false @@ -313,6 +313,13 @@ ActiveRecord::Schema.define(:version => 20141120091234) do t.integer "container_id", :default => 0 end + create_table "course_groups", :force => true do |t| + t.string "name" + t.integer "course_id" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + create_table "course_infos", :force => true do |t| t.integer "course_id" t.integer "user_id" @@ -651,6 +658,7 @@ ActiveRecord::Schema.define(:version => 20141120091234) do t.datetime "created_on" t.boolean "mail_notification", :default => false, :null => false t.integer "course_id", :default => -1 + t.integer "course_group_id", :default => 0 end add_index "members", ["project_id"], :name => "index_members_on_project_id" diff --git a/public/images/btn.png b/public/images/btn.png new file mode 100644 index 0000000000000000000000000000000000000000..85cea7f5c179b272cbe136f07f804ab663f8b161 GIT binary patch literal 1308 zcmV+%1>^dOP)(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ=qDe$SRCwCVn9Xk!M;OL`Gv0iV0||8$5CI7)acRn@3Q^e;s^}&ELMv63s#L<> z9D3-fBJ{+i2XAs{sZ`7GQ#{@3QS<9h$;eUJbAan=E(kaBu&-wyuX&@6>PCV+0sN%jux zpc-yW1D`v9gVtmBYno62A{)A|E4W|Np!FEwNI(Jvs`p^Op3MIzzQ!y}(g6elbO)f< z-PR<>%4>-L?EbhNE3a|g&3E*Po5s+HZ~%l9Xl>qXwWH18H{5(;+dSLDZ@BqXA8p6q z0#r1x0XP=+o-7VBDcR8!?6v!#7_SCscepp*JV&g=H)9D*LgRBJrNn9doHQWg;0`x~ zA1<$P%gsm6w=DT@x#<_r;S^va>2(LBi_N5m%4;kpfU!ZDcZU*^FS_}}{?4j5A~x3) zXxY9TyxIt^B`vk-KX`Sm#m6p-Za!)!z3*1czV0+}qE&bCjgP5+dpqA!(P7!Cc?-_mCo=5lYv>`sVj5_kKPP1Y-MlUr3-2 z*ai#%{V&$qD>DUb0_(s(KwVTS72f&%C%JIo3yFPIDW}6v)O}im>bgM09wDN@2kMALY!MGhKZ`6&;n0J5x6%3xz^r z|NQ)XS7r)@LgZ(++xfI(Hq|y{g3Qm)x3mj|LQ82k*1WUZX+Xx0{gDz?{-zy|F*i3yp-_m%*)eR3$FqNMw=kMk z`eL!z^Yn-V>ovwpNpCayveu5#RM%y#HCidU{TQ{GFBXgVzK`$wQM;Wop6B8Fen(J= z(pyt9mGqwHwbVeAxSQD^+l{m1c9p&p)KV-GADYPC8$JUon)*|^*(rFi=EDfN2& zg892Z0M5d~!r8&W!HWm|{|*3=5ER6x SG$&F30000c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxKsVXI%s|1+P|wiV z#N6CmN5ROz&_Lh7NZ-&%*U;R`*vQJjKmiJrfVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8EkR}&8R-I5=oVMzl_XZ^<`pZ$OmImpPAEg{v+u2}(t{7puX=A(aKG z`a!A1`K3k4z=%sz23b{L$o& z6x?nx#;I2y=oo!av?4__ObD2EKuma|1#;lYJ~a=R){B6NI_pLIVFm`K+nz3tAr-gQ zOuL^QlqhlhyyfLPr%dmt)IW(4T9osmwcN90vVva(OPq*so8KOfkMf4^%N{>9(`EO1 zSPn6vJd`)|f?75E_KMy=V^jYrQ_2;$w&i~%C#6v}i z#fejg;d6t;4Awe^`v&=q{68e~Cos2MIG)c?+)^-y@%MpjJ4ZdmFYDh%WL){dX~W!i zlUrEC)v!LE?Hz;Gqx(rr7noxo7|*{TQXoD-@W1?udAbjl{BM|fE;pe~BL2=HH!Jlm z2iAFNh+Ohk5z3mOAGJ1Y=Kc5k&u#2ApXsDhc712T&X{Q_MlS_~B4c8vIv%1%9 z@#_++@(``7F=n$%H(dwvO(uG*nd-IFdH(tB)(V+ZI%XVtS?IPm?){CNZSGvHPRB%? zm2Tg@y}H%u;epp*FEQ=zmI`&{v|M{LXP%`@pRCF>ucdF)CTCVDX(2-lSe*I-< zs{*#UJp3CJ+1es>)QWfBv7PI;eTv`m`D{#$)0HFsingBDJa{3)WU`8GN;h(8G z#p~&sh8xvsy{q0_EwFgwq9oV<-15G7K=5L_;MG?@Wte0=tysz~G9&qs_J$VzL;Gh} zRaFUfx}0*FeLrt|wTW+d_1-x4Z97gzxhc87;atr;?YM>7J_i3^sfm31*y=3o*#uJ> zc;w#BS^P(MUQg7u02$NCJiG00I06v^1kLrQHXdPd6B=u;&Qx zy1iGj=yUvaqn=$)1L+-fWUdKhlK8rJJ;Fz?9lnwg|x0i%s@k9_h25P&b-;R=M!6Y*uC4J znkZDjL&O4!ckD+>qOuEJh0fD$o&^gCnW*epQa!T;G#nyO;)J{{lm$?R94r(iNxB6@ z0Sdez@=(k}NhyemAb{n=(rBSGRN8uD8H=t|c1%d1@O&J{TwLIAIO3r!%c+Ja<|!f{ z&3s}dc|Y3C6m%5Xp&Jkv`yf@c26#$TmS%c(1TR?0`q8pXv|xN<1w7=0^hg=dH2)9v zycIekZFHXRKZT?2EI@o4MR*$8v~k1TG*qByA+iV#yBHs5Rcwth!O<88K})Gp>&9sfT=$ zah-FnzLuLB!3$_)9fj^=4V%(B^E5dMBN( zOiLFl+asTPJ*1}Yeg1wzFGSJMYu)7Q;KAFY`#T%C{-tlfzg&LUzxL!M_vz>9>C@-; fK3sgQo0~g*=8t{Del5JIq&Lc_H}zNh{bzpx7X2%s literal 0 HcmV?d00001 diff --git a/public/images/pic_edit.png b/public/images/pic_edit.png new file mode 100644 index 0000000000000000000000000000000000000000..fc2f3ae13a4c12b1e73e6494568d239ef14a29bb GIT binary patch literal 629 zcmV-*0*d{KP)(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ-`$>bWkV^bN%X|wCvlq5dA=X;&Qr|gPrd# zT9$Q6CdUU^TEcz)%yC0et^tVcqb{d=e+LdjQYtrhA4=%CTn|#XG(~7n_buI>JBy}igu~&;tLDZV=_V}$AQm1U1_7FG|5Y+g5z@WEb{q+%X|f+u zs~^9$gq}~dj{NDZ)KEI1dxPy*Yar)X{FF?!c&rP3-9JaFOVw?ppzaO&kaJ*}WT#{6 zE+Ix$7cXJ!E|dzXt7IrwbZ^jyF$0!CDiJRjh8QqyaYvQ~a#PU1e+4NeQc6^#q_{1c zW8R~8PqJ|jRGrxP>$eR%cj9wL*U zwHF?@!$h{J=Hk`$l6sns%YA%_%sxtPOnuLL#@;My8K4cw*EsU{`Xx${bPe$OC~uCty~rT;(mm7XSK=dI$sp%C7+c*N@(mC&bl5 P00000NkvXXu0mjf4wwr> literal 0 HcmV?d00001 diff --git a/public/images/pic_up.png b/public/images/pic_up.png new file mode 100644 index 0000000000000000000000000000000000000000..84401074a7d586610910efab0f3b5c4283563b3e GIT binary patch literal 217 zcmeAS@N?(olHy`uVBq!ia0vp^96+qV!3HGtKUiJ>Qk(@Ik;M!Q+`=Ht$S`Y;1V}}) zN02WALzOB6LqjtI!_WUf`XvKHsR0ASs{{rHs~HRo;`x)}kGcWX#(TOrhE&{2nliI| z4kOn;=S(*?Hnz6oonky7;KRehAUrFt#H>*5&v7L_@#IEJuDcUeA`LHaMNGKS(|mQJ zv){q`oX+$UOWOZiOtMiv!;-_zopr E0Q9^(asU7T literal 0 HcmV?d00001 diff --git a/public/javascripts/application.js.bak b/public/javascripts/application.js.bak deleted file mode 100644 index 0c09ffb03..000000000 --- a/public/javascripts/application.js.bak +++ /dev/null @@ -1,696 +0,0 @@ -//= require_directory ./rateable -/* Redmine - project management software - Copyright (C) 2006-2013 Jean-Philippe Lang */ - -function cleanArray (actual){ - var newArray = new Array(); - for (var i = 0; i< actual.length; i++){ - if (actual[i]){ - newArray.push(actual[i]); - } - } - return newArray; -} - -function checkAll(id, checked) { - if (checked) { - $('#'+id).find('input[type=checkbox]').attr('checked', true); - } else { - $('#'+id).find('input[type=checkbox]').removeAttr('checked'); - } -} - -function toggleCheckboxesBySelector(selector) { - var all_checked = true; - $(selector).each(function(index) { - if (!$(this).is(':checked')) { all_checked = false; } - }); - $(selector).attr('checked', !all_checked); -} - -function showAndScrollTo(id, focus) { - $('#'+id).show(); - if (focus !== null) { - $('#'+focus).focus(); - } - $('html, body').animate({scrollTop: $('#'+id).offset().top}, 400); -} - -function toggleRowGroup(el) { - var tr = $(el).parents('tr').first(); - var n = tr.next(); - tr.toggleClass('open'); - while (n.length && !n.hasClass('group')) { - n.toggle(); - n = n.next('tr'); - } -} - -function collapseAllRowGroups(el) { - var tbody = $(el).parents('tbody').first(); - tbody.children('tr').each(function(index) { - if ($(this).hasClass('group')) { - $(this).removeClass('open'); - } else { - $(this).hide(); - } - }); -} - -function expandAllRowGroups(el) { - var tbody = $(el).parents('tbody').first(); - tbody.children('tr').each(function(index) { - if ($(this).hasClass('group')) { - $(this).addClass('open'); - } else { - $(this).show(); - } - }); -} - -function toggleAllRowGroups(el) { - var tr = $(el).parents('tr').first(); - if (tr.hasClass('open')) { - collapseAllRowGroups(el); - } else { - expandAllRowGroups(el); - } -} - -function toggleFieldset(el) { - var fieldset = $(el).parents('fieldset').first(); - fieldset.toggleClass('collapsed'); - fieldset.children('div').toggle(); -} - -function hideFieldset(el) { - var fieldset = $(el).parents('fieldset').first(); - fieldset.toggleClass('collapsed'); - fieldset.children('div').hide(); -} - -function initFilters(){ - $('#add_filter_select').change(function(){ - addFilter($(this).val(), '', []); - }); - $('#filters-table td.field input[type=checkbox]').each(function(){ - toggleFilter($(this).val()); - }); - $('#filters-table td.field input[type=checkbox]').live('click',function(){ - toggleFilter($(this).val()); - }); - $('#filters-table .toggle-multiselect').live('click',function(){ - toggleMultiSelect($(this).siblings('select')); - }); - $('#filters-table input[type=text]').live('keypress', function(e){ - if (e.keyCode == 13) submit_query_form("query_form"); - }); -} - -function addFilter(field, operator, values) { - var fieldId = field.replace('.', '_'); - var tr = $('#tr_'+fieldId); - if (tr.length > 0) { - tr.show(); - } else { - buildFilterRow(field, operator, values); - } - $('#cb_'+fieldId).attr('checked', true); - toggleFilter(field); - $('#add_filter_select').val('').children('option').each(function(){ - if ($(this).attr('value') == field) { - $(this).attr('disabled', true); - } - }); -} - -function buildFilterRow(field, operator, values) { - var fieldId = field.replace('.', '_'); - var filterTable = $("#filters-table"); - var filterOptions = availableFilters[field]; - var operators = operatorByType[filterOptions['type']]; - var filterValues = filterOptions['values']; - var i, select; - - var tr = $('').attr('id', 'tr_'+fieldId).html( - '' + - '' + - ' 复选/multi-select' - ); - select = tr.find('td.values select'); - if (values.length > 1) { select.attr('multiple', true); } - for (i=0;i'); - if ($.isArray(filterValue)) { - option.val(filterValue[1]).text(filterValue[0]); - if ($.inArray(filterValue[1], values) > -1) {option.attr('selected', true);} - } else { - option.val(filterValue).text(filterValue); - if ($.inArray(filterValue, values) > -1) {option.attr('selected', true);} - } - select.append(option); - } - break; - case "date": - case "date_past": - tr.find('td.values').append( - '' + - ' ' + - ' '+labelDayPlural+'' - ); - $('#values_'+fieldId+'_1').val(values[0]).datepicker(datepickerOptions); - $('#values_'+fieldId+'_2').val(values[1]).datepicker(datepickerOptions); - $('#values_'+fieldId).val(values[0]); - break; - case "string": - case "text": - tr.find('td.values').append( - '' - ); - $('#values_'+fieldId).val(values[0]); - break; - case "relation": - tr.find('td.values').append( - '' + - '' - ); - $('#values_'+fieldId).val(values[0]); - select = tr.find('td.values select'); - for (i=0;i'); - option.val(filterValue[1]).text(filterValue[0]); - if (values[0] == filterValue[1]) { option.attr('selected', true); } - select.append(option); - } - case "integer": - case "float": - tr.find('td.values').append( - '' + - ' ' - ); - $('#values_'+fieldId+'_1').val(values[0]); - $('#values_'+fieldId+'_2').val(values[1]); - break; - } -} - -function toggleFilter(field) { - var fieldId = field.replace('.', '_'); - if ($('#cb_' + fieldId).is(':checked')) { - $("#operators_" + fieldId).show().removeAttr('disabled'); - toggleOperator(field); - } else { - $("#operators_" + fieldId).hide().attr('disabled', true); - enableValues(field, []); - } -} - -function enableValues(field, indexes) { - var fieldId = field.replace('.', '_'); - $('#tr_'+fieldId+' td.values .value').each(function(index) { - if ($.inArray(index, indexes) >= 0) { - $(this).removeAttr('disabled'); - $(this).parents('span').first().show(); - } else { - $(this).val(''); - $(this).attr('disabled', true); - $(this).parents('span').first().hide(); - } - - if ($(this).hasClass('group')) { - $(this).addClass('open'); - } else { - $(this).show(); - } - }); -} - -function toggleOperator(field) { - var fieldId = field.replace('.', '_'); - var operator = $("#operators_" + fieldId); - switch (operator.val()) { - case "!*": - case "*": - case "t": - case "ld": - case "w": - case "lw": - case "l2w": - case "m": - case "lm": - case "y": - case "o": - case "c": - enableValues(field, []); - break; - case "><": - enableValues(field, [0,1]); - break; - case "t+": - case ">t-": - case "0) { - lis.eq(i-1).show(); - } -} - -function displayTabsButtons() { - var lis; - var tabsWidth = 0; - var el; - $('div.tabs').each(function() { - el = $(this); - lis = el.find('ul').children(); - lis.each(function(){ - if ($(this).is(':visible')) { - tabsWidth += $(this).width() + 6; - } - }); - if ((tabsWidth < el.width() - 60) && (lis.first().is(':visible'))) { - el.find('div.tabs-buttons').hide(); - } else { - el.find('div.tabs-buttons').show(); - } - }); -} - -function setPredecessorFieldsVisibility() { - var relationType = $('#relation_relation_type'); - if (relationType.val() == "precedes" || relationType.val() == "follows") { - $('#predecessor_fields').show(); - } else { - $('#predecessor_fields').hide(); - } -} - -function showModal(id, width) { - var el = $('#'+id).first(); - if (el.length === 0 || el.is(':visible')) {return;} - var title = el.find('h3.title').text(); - el.dialog({ - width: width, - modal: true, - resizable: false, - dialogClass: 'modal', - title: title - }); - el.find("input[type=text], input[type=submit]").first().focus(); -} - -function hideModal(el) { - var modal; - if (el) { - modal = $(el).parents('.ui-dialog-content'); - } else { - modal = $('#ajax-modal'); - } - modal.dialog("close"); -} - -function submitPreview(url, form, target) { - $.ajax({ - url: url, - type: 'post', - beforeSend: function(xhr) {xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'))}, - data: $('#'+form).serialize(), - success: function(data){ - $('#'+target).html(data); - } - }); -} - -function collapseScmEntry(id) { - $('.'+id).each(function() { - if ($(this).hasClass('open')) { - collapseScmEntry($(this).attr('id')); - } - $(this).hide(); - }); - $('#'+id).removeClass('open'); -} - -function expandScmEntry(id) { - $('.'+id).each(function() { - $(this).show(); - if ($(this).hasClass('loaded') && !$(this).hasClass('collapsed')) { - expandScmEntry($(this).attr('id')); - } - }); - $('#'+id).addClass('open'); -} - -function scmEntryClick(id, url) { - el = $('#'+id); - if (el.hasClass('open')) { - collapseScmEntry(id); - el.addClass('collapsed'); - return false; - } else if (el.hasClass('loaded')) { - expandScmEntry(id); - el.removeClass('collapsed'); - return false; - } - if (el.hasClass('loading')) { - return false; - } - el.addClass('loading'); - $.ajax({ - url: url, - success: function(data){ - el.after(data); - el.addClass('open').addClass('loaded').removeClass('loading'); - } - }); - return true; -} - -function randomKey(size) { - var chars = new Array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'); - var key = ''; - for (i = 0; i < size; i++) { - key += chars[Math.floor(Math.random() * chars.length)]; - } - return key; -} - -// Can't use Rails' remote select because we need the form data -function updateIssueFrom(url) { - $.ajax({ - url: url, - type: 'post', - data: $('#issue-form').serialize() - }); -} - -function updateBulkEditFrom(url) { - $.ajax({ - url: url, - type: 'post', - data: $('#bulk_edit_form').serialize() - }); -} - -function clearMessage(id) { - $('#'+id).val(""); -} - - -function observeAutocompleteField(fieldId, url, options) { - $(document).ready(function() { - $('#'+fieldId).autocomplete($.extend({ - source: url, - select: function(e,ui){self.location="/issues/"+ui.item.value;}, - minLength: 2, - search: function(){$('#'+fieldId).addClass('ajax-loading');}, - response: function(){$('#'+fieldId).removeClass('ajax-loading'); - } - }, options)); - $('#'+fieldId).addClass('autocomplete'); - - }); - -} - -function observeSearchfield(fieldId, targetId, url) { - $('#'+fieldId).each(function() { - var $this = $(this); - $this.addClass('autocomplete'); - $this.attr('data-value-was', $this.val()); - var check = function() { - var val = $this.val(); - if ($this.attr('data-value-was') != val){ - $this.attr('data-value-was', val); - $.ajax({ - url: url, - type: 'get', - data: {q: $this.val()}, - success: function(data){ if(targetId) $('#'+targetId).html(data); }, - beforeSend: function(){ $this.addClass('ajax-loading'); }, - complete: function(){ $this.removeClass('ajax-loading'); } - }); - } - }; - var reset = function() { - if (timer) { - clearInterval(timer); - timer = setInterval(check, 300); - } - }; - var timer = setInterval(check, 300); - $this.bind('keyup click mousemove', reset); - }); -} - -function observeProjectModules() { - var f = function() { - /* Hides trackers and issues custom fields on the new project form when issue_tracking module is disabled */ - if ($('#project_enabled_module_names_issue_tracking').attr('checked')) { - $('#project_trackers').show(); - }else{ - $('#project_trackers').hide(); - } - }; - - $(window).load(f); - $('#project_enabled_module_names_issue_tracking').change(f); -} - -function initMyPageSortable(list, url) { - $('#list-'+list).sortable({ - connectWith: '.block-receiver', - tolerance: 'pointer', - update: function(){ - $.ajax({ - url: url, - type: 'post', - data: {'blocks': $.map($('#list-'+list).children(), function(el){return $(el).attr('id');})} - }); - } - }); - $("#list-top, #list-left, #list-right").disableSelection(); -} - -var warnLeavingUnsavedMessage; -function warnLeavingUnsaved(message) { - warnLeavingUnsavedMessage = message; - - $('form').submit(function(){ - $('textarea').removeData('changed'); - }); - $('textarea').change(function(){ - $(this).data('changed', 'changed'); - }); - window.onbeforeunload = function(){ - var warn = false; - $('textarea').blur().each(function(){ - if ($(this).data('changed')) { - warn = true; - } - }); - if (warn) {return warnLeavingUnsavedMessage;} - }; -} - -function setupAjaxIndicator() { - - $('#ajax-indicator').bind('ajaxSend', function(event, xhr, settings) { - - if ($('.ajax-loading').length === 0 && settings.contentType != 'application/octet-stream') { - $('#ajax-indicator').show(); - } - }); - - $('#ajax-indicator').bind('ajaxStop', function() { - $('#ajax-indicator').hide(); - }); -} - -function hideOnLoad() { - $('.hol').hide(); -} - -function addFormObserversForDoubleSubmit() { - $('form[method=post]').each(function() { - if (!$(this).hasClass('multiple-submit')) { - $(this).submit(function(form_submission) { - if ($(form_submission.target).attr('data-submitted')) { - form_submission.preventDefault(); - } else { - $(form_submission.target).attr('data-submitted', true); - } - }); - } - }); -} - -function blockEventPropagation(event) { - event.stopPropagation(); - event.preventDefault(); -} - -function toggleAndSettingWordsVal(parent_widget, text_widget, value){ - text_widget.val(value) - parent_widget.slideToggle(400) -} -function transpotUrl (scope) { - $(scope).each(function(){ - var tmpContent = $(this).html(); - tmpContent = tmpContent.replace(/(^|[^\"\'])(http|ftp|mms|rstp|news|https)(\:\/\/[^<\s\+,,]+)/gi,"$1$2$3<\/a>"); - // tmpContent = tmpContent.replace(/(^|[^\/])(www\.[^<\s\+,,]+)/gi,"$1$2"); - $(this).html(tmpContent); - }); -} - -$(document).ready(setupAjaxIndicator); -$(document).ready(hideOnLoad); -$(document).ready(addFormObserversForDoubleSubmit); -$(document).ready(function(){ - $.ajaxSetup({ - headers: { - 'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content') - } - }); - } -) - -function img_thumbnails() { - $('.thumbnails a').colorbox({rel:'nofollow'}); - $('.attachments').find('a').each(function(index, element) { - var href_value = $(element).attr('href'); - if (/\.(jpg|png|gif|bmp)$/.test(href_value)) { - $(element).colorbox({rel:'nofollow'}); - } - - }); -} -$(document).ready(img_thumbnails); - -function TimeClose(dateText, inst) { - if(inst.id=="issue_start_date"){ - time=dateText; - } -} -var time=new Date(); -function TimeBeforeShow(input){ - if(input.id=="issue_due_date"){ - //var minDate = $(input).datepicker('option', 'minDate'); - var tempdata=$("#issue_start_date").attr("value"); - - $(input).datepicker('option', 'minDate',new Date(tempdata.replace(/-/g, "/"))); - //$('.selector').datepicker('option', 'minDate', '12/25/2012'); - } -} - -function SetMinValue(){ - /// var tempdata=$("#issue_start_date").attr("value"); - //$('.selector').datepicker('option', 'minDate', '12/25/2012'); - //alert(tempdata); - //$("#issue_due_date").datepicker({ - // minDate: new Date(2014,08,23) - //var datepickerOptions= - //{dateFormat: 'yy-mm-dd',minDate: new Date(2014,08,23), showOn: 'button', buttonImageOnly: true, buttonImage: "path_to_image('/images/calendar.png')", showButtonPanel: true, showWeek: true, showOtherMonths: true, selectOtherMonths: true}; - //alert( $('.issue_due_date').length); - //$('.selector')[1].datepicker('option', 'minDate', new Date(2014, 0 - 8, 23)); - //$("#issue_due_date").datepicker(datepickerOptions); - //$("##{issue_due_date}").datepicker(datepickerOptions); - //$("#issue_due_date").datepicker( - // {dateFormat: 'yy-mm-dd',minDate: new Date(2014,08,23), showOn: 'button', buttonImageOnly: true, buttonImage: "path_to_image('/images/calendar.png')", showButtonPanel: true, showWeek: true, showOtherMonths: true, selectOtherMonths: true} - //) - //}); -} -function PrecentChange(obj){ - var _v= obj; - if(_v==100) - { - //var select=$("select[id='issue_status_id']"); - $("select[id='issue_status_id']").find("option[value='3']").attr("selected","selected"); - } - else if(_v==0) - { - //alert(1); - $("select[id='issue_status_id']").find("option[value='1']").attr("selected","selected"); - } - else if(_v!=100&&_v!=0) - { - // alert(2); - $("select[id='issue_status_id']").find("option[value='2']").attr("selected","selected"); - } -} diff --git a/public/stylesheets/course_group.css b/public/stylesheets/course_group.css new file mode 100644 index 000000000..638dddb20 --- /dev/null +++ b/public/stylesheets/course_group.css @@ -0,0 +1,67 @@ +body{ font-size:12px; font-family:"微软雅黑","宋体"; line-height:1.9; background:#fff; font-style:normal;} +div,html,img,ul,li,p,body,h1,h2,h3,h4,p,a,table,tr,td,fieldset,input,span,textarea,form{ margin:0; padding:0;} +div,img,tr,td,textarea,form{ border:0;} +table,tr,td{border:0; cellspacing:0; cellpadding:0;} +ul,li{ list-style-type:none} +.cl{ clear:both; overflow:hidden; } +a{ text-decoration:none; } +a:hover{ } +/**** 常用***/ +.f_l{ float:left;} +.f_r{ float:right;} +.b_lblue{ background:#64bdd9;} +.b_dblue{ background:#55a1b9; cursor:pointer;} +.f_b{ font-weight: bold;} +.c_blue{ color:#64bdd9;} +.c_grey{ color:#999999;} +.c_grey02{ color:#666666;} +.f_14{ font-size:14px;} +.c_dblue{ color:#3e6d8e;} +.c_red{ color:#ec0016;} +.w90{width:90px;} +.ml10{margin-left:10px;} + +.container{ width:940px; margin:0 auto; font-size:12px;} + +.st_list{ width:688px; padding-left:5px; height:800px;} +.st_search{ margin:10px 0;} +.st_search span{ font-size:14px; font-weight:bold; color:#606060; margin-right:35px;} +.st_search input{ border:1px solid #1c9ec7; background:#fff; height:20px; color:#c4c4c4; width:200px;} +.st_search input.f_2{ background:#1c9ec7; padding: 3px; margin-left: 3px; color:#fff;border:1px solid #1c9ec7; text-align:center; display:block; width:45px; height:28px; float:left; font-size:12px; } +.st_search a:hover{ background:#048fbb; text-decoration:none;} + +.classbox{ border:1px solid #f8df8c; background:#fffce6; color:#0d90c3; padding:0 3px; float:left; margin-left:15px;} +.st_addclass{ margin-top:5px;} +.st_addclass ul li{ margin-bottom:10px;} +.st_addclass ul li,.st_addclass a,.st_addclass img{ float:left;} +.st_addclass img{ margin-top:3px;} +.st_addclass a{ color:#0d90c3;} + +.st_box{ margin-top:10px; border-top:1px solid #CCC; padding-top:10px;} +.st_box ul li{ float:left;} +.st_box_top a{ font-weight:bold; color:#7a7a7a; float:left;} +.st_box_top a:hover{ color:#1c9ec7;} +a.st_up{ display: block; width:8px; float:left; height:13px; background:url(images/pic_up.png) 0 0 no-repeat; margin-top:5px; margin-left:3px;} +a.st_down{ display: block; width:8px; float:left; height:13px; background:url(images/pic_up.png) 0 -22px no-repeat; margin-top:5px; margin-left:3px;} +a.st_img { display:block;width:40px; height:40px; border:1px solid #CCC; padding:1px;} +a:hover.st_img { border:1px solid #1c9ec7; } +.st_boxlist{ border-bottom:1px dashed #CCC; height:53px; padding-top:10px; } +.st_boxlist a{ float:left;} +.st_boxlist ul{ float:left; width:200px; margin-left:10px;} +.st_boxlist ul li a{ color:#5d5d5d;} +.st_boxlist ul li a span{ color:#1c9ec7;} +.st_boxlist ul li a:hover span{ color:#ff8e15;} +.ml50{ margin-left:50px;} +.ml358{ margin-left:358px;} +.ml258{ margin-left:254px;} +.ml65{ margin-left:65px;} +a:hover.st_add{ color:#ff8e15;} + +/****翻页***/ +.wlist{ margin-top:15px; float:right;} +.wlist a{ float:left; border:1px solid #15bccf; padding:0 5px; margin-left:3px; color:#15bccf;} +.wlist a:hover{border:1px solid #15bccf; background-color:#15bccf; color:#fff;} +.wlist_select a { background-color:#64bdd9; color:#fff;} + +.submit{height:21px;border:0; cursor:pointer; background:url(images/btn.png) no-repeat 0 0;width:42px; margin-top:2px; margin-left:3px; } +.isTxt{background:#fbfbfb url(images/inputBg.png) repeat-x left top;height:22px;line-height:22px;border:1px solid #c1c1c1;padding:0 5px;color:#666666;} \ No newline at end of file diff --git a/test/fixtures/course_groups.yml b/test/fixtures/course_groups.yml new file mode 100644 index 000000000..c63aac0b6 --- /dev/null +++ b/test/fixtures/course_groups.yml @@ -0,0 +1,11 @@ +# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/Fixtures.html + +# This model initially had no columns defined. If you add columns to the +# model remove the '{}' from the fixture names and add the columns immediately +# below each fixture, per the syntax in the comments below +# +one: {} +# column: value +# +two: {} +# column: value diff --git a/test/unit/course_group_test.rb b/test/unit/course_group_test.rb new file mode 100644 index 000000000..c08ede23f --- /dev/null +++ b/test/unit/course_group_test.rb @@ -0,0 +1,7 @@ +require 'test_helper' + +class CourseGroupTest < ActiveSupport::TestCase + # test "the truth" do + # assert true + # end +end From 615bc7d444d773721855a05392b4669d6239c913 Mon Sep 17 00:00:00 2001 From: alan <547533434@qq.com> Date: Wed, 3 Dec 2014 19:17:10 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=AF=BE=E7=A8=8B?= =?UTF-8?q?=E5=88=86=E7=BB=84=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: alan <547533434@qq.com> --- app/controllers/courses_controller.rb | 23 +++++++++++ app/helpers/courses_helper.rb | 13 ++++++ app/views/courses/_groups_name.html.erb | 51 ++++++++++++++++++++++++ app/views/courses/_member_list.html.erb | 1 + app/views/courses/member.html.erb | 18 +++++++-- app/views/courses/searchmembers.js | 4 ++ config/routes.rb | 2 + public/images/btn1.png | Bin 0 -> 769 bytes public/stylesheets/course_group.css | 25 +++++++++--- 9 files changed, 129 insertions(+), 8 deletions(-) create mode 100644 app/views/courses/_groups_name.html.erb create mode 100644 app/views/courses/searchmembers.js create mode 100644 public/images/btn1.png diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index 78f75f31a..12b733669 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -196,12 +196,35 @@ class CoursesController < ApplicationController end end + def searchmembers + @render_file = 'member_list' + + @is_remote = true + q = "#{params[:name].strip}" + #(redirect_to stores_url, :notice => l(:label_sumbit_empty);return) if params[:name].blank? + @results = searchStudent_by_name(@course, q) + @results = paginateHelper @results + + end + + def addgroups + + end + + def updategroupname + + end + + def searchgroupmembers + + end def member ## 有角色参数的才是课程,没有的就是项目 @render_file = 'member_list' @teachers= searchTeacherAndAssistant(@course) @canShowCode = isCourseTeacher(User.current.id,@course) && params[:role] != '1' @role = params[:role] + @course_groups = @course.course_groups if @course.course_groups @course_group_id = params[:@course_group_id] unless params[:@course_group_id].nil? case params[:role] when '1' diff --git a/app/helpers/courses_helper.rb b/app/helpers/courses_helper.rb index 92f95bdc1..9e18c9f54 100644 --- a/app/helpers/courses_helper.rb +++ b/app/helpers/courses_helper.rb @@ -186,6 +186,19 @@ module CoursesHelper end members end + def searchStudent_by_name project, name + #searchPeopleByRoles(project, StudentRoles) + members = [] + project.members.each do |m| + if m && m.user && m.user.allowed_to?(:as_student,project) + username = m.user[:lastname].to_s + m.user[:firstname].to_s + if(m.user[:login].to_s.include?(name) || m.user.user_extensions[:student_id].to_s.include?(name) || username.include?(name)) + members << m + end + end + end + members + end # ===================================================================================== #def searchCountByRoles project, roles_id diff --git a/app/views/courses/_groups_name.html.erb b/app/views/courses/_groups_name.html.erb new file mode 100644 index 000000000..804b3f805 --- /dev/null +++ b/app/views/courses/_groups_name.html.erb @@ -0,0 +1,51 @@ + +<%# if course_groups.any? %> + +
    + +
  • 分班:
  • + <% form_tag(searchgroupmembers_course_path(@course), :method => 'get', :remote => true) do %> +
  • + <%= hidden_field 'all', params[:group_id], name: 'all' %> + <%= submit_tag l:(label_all), :onclick => "asign_id('all')" %> +
  • + <% end %> +
  • + +
  • + <% course_groups.each do |group| %> +
  • + <% form_tag(searchgroupmembers_course_path(@course), :method => 'get', :remote => true) do %> + <%= hidden_field group, :id, :value => params[:group_id] %> + <%= submit_tag l:(label_all), :onclick => "asign_id(#{group.id})" %> + <% end %> + 编辑班级 +
  • +
  • + <% form_tag(updategroupname_course_path(@course), :method => 'get', :remote => true, :update => 'group_name') do %> + + <% end %> +
  • + <% end %> +
  • + +添加分班 +
  • +
  • + +
  • + +
+ + <%# end %> \ No newline at end of file diff --git a/app/views/courses/_member_list.html.erb b/app/views/courses/_member_list.html.erb index a6ee0b9b4..cd620c52f 100644 --- a/app/views/courses/_member_list.html.erb +++ b/app/views/courses/_member_list.html.erb @@ -1,3 +1,4 @@ + <% if members.any? %> <% members.each do |member| %>
diff --git a/app/views/courses/member.html.erb b/app/views/courses/member.html.erb index aff9ffeb5..4f7b395b0 100644 --- a/app/views/courses/member.html.erb +++ b/app/views/courses/member.html.erb @@ -1,13 +1,25 @@ <%= stylesheet_link_tag 'course_group', :media => 'all' %> +
-
+
+ <%# if @canShowCode %> +
+ <%= render :partial => 'groups_name', locals: {:course_groups => @course_groups} %> +
+ <%# end %> + +
+
<%= error_messages_for 'member' %> <%= render :partial => @render_file, :locals => {:members => @members} %>
diff --git a/app/views/courses/searchmembers.js b/app/views/courses/searchmembers.js new file mode 100644 index 000000000..efe47a9c0 --- /dev/null +++ b/app/views/courses/searchmembers.js @@ -0,0 +1,4 @@ +/** + * Created by Administrator on 2014/12/2. + */ +$("#member_content").html("<%= escape_javascript( render :partial => @render_file, :locals => {:members => @results})%>"); \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index 1d28a9ae6..7a6a8aae0 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -643,10 +643,12 @@ RedmineApp::Application.routes.draw do get 'member', :controller => 'courses', :action => 'member', :as => 'member' post 'finishcourse' post 'restartcourse' + match "searchmembers", :controller => 'courses', :action => 'searchmembers', :via => [:post,:get] end collection do match 'join_private_courses', :via => [:get, :post] + end match '/member', :to => 'courses#member', :as => 'member', :via => :get diff --git a/public/images/btn1.png b/public/images/btn1.png new file mode 100644 index 0000000000000000000000000000000000000000..f7f7f1c77a32dc643afd8f07ae8ec36391147856 GIT binary patch literal 769 zcmV+c1OEJpP)004R= z004l4008;_004mL004C`008P>0026e000+nl3&F}00009a7bBm000ie000ie0hKEb z8vp8`5&{I_ii;YG&IK|pW8mFm?RxoRFj!ziNdZb$q5p8mbQ zI>Gwu>4{pc7IoTf@;#3%=w`E_!{I=UMuTcKH&i{J&vZN2$~p zZF9jqsA$@DyQO}=Pd=b7my1)7U}Djj&4R*$FuX0Y(AlEW*zrvG@_)Y zxkV7iCdV>1ZC+ib#!StprizeAF=$L1#CgJuci5XZkfj8@t6CWuR4CO!yhmlhgdo03ykOEdAuk& zXRf11LbN;<2jd*FznAX|sCHv)nxu#}o)zUhdGdW8J>FU7n?Q4QeEhT7jL@JC`n1>F zWHPbq9GA35QmnisZ=m-8u@Q`WjCtcMH6>(PoXi`~_wDHIjhoV@Mh)4JjD4{Q*3ie} zd5z~~ob*kbmsQ8-!-Qf)+id2DegkqkwPW=7EOYSMZSH@Z^szAs^X$Wl+UjY!TvGS> z*;Xqq86Y<=FEkho$VX*gtyU?xUMa!@rB(I8eqaF;*kIlz45Gh(*0eJfe!X5N-&cM8 zKV10GfSyh#YMTnb*XxmIN~s9s>-E|esi^;4uu7$3i+Mnn%jJ&>AM}Cwfro~%3x<;| zl}fhRY9F93fMqfGKZKJC(5$1(yY9xjNI_kIDn!cVQYe~BE`@WUs6wP%E`_4G Date: Thu, 4 Dec 2014 19:09:10 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E5=A2=9E=E5=8A=A0<=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=EF=BC=8C=E6=B7=BB=E5=8A=A0=E5=88=86=E7=BB=84>=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=20Signed-off-by:=20alan=20<547533434@qq.com>?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/courses_controller.rb | 41 +++++++++++- app/helpers/courses_helper.rb | 8 +++ app/helpers/watchers_helper.rb | 22 +++++++ app/models/course_group.rb | 8 ++- app/models/principal.rb | 1 + app/models/user.rb | 3 + app/views/courses/_groups_name.html.erb | 64 +++++++++++-------- app/views/courses/addgroups.js.erb | 1 + app/views/courses/member.html.erb | 7 +- app/views/courses/searchgroupmembers.js.erb | 4 ++ ...{searchmembers.js => searchmembers.js.erb} | 0 app/views/courses/updategroupname.js.erb | 4 ++ config/locales/zh.yml | 1 + config/routes.rb | 7 +- 14 files changed, 135 insertions(+), 36 deletions(-) create mode 100644 app/views/courses/addgroups.js.erb create mode 100644 app/views/courses/searchgroupmembers.js.erb rename app/views/courses/{searchmembers.js => searchmembers.js.erb} (100%) create mode 100644 app/views/courses/updategroupname.js.erb diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index ccb02d939..8a3c58244 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -78,7 +78,21 @@ class CoursesController < ApplicationController format.js { render :partial => 'set_join', :locals => {:user => User.current, :course => Course.find(params[:object_id]), :object_id => params[:object_id]} } end end + def join_group + group = CourseGroup.find(params[:object_id]) + member = Member.find(:conditions => {:course_id => @course.id, :user_id => User.current.id}).first + member.course_group_id = group.id + member.save + end + def unjoin_group + member = Member.find(:conditions => {:course_group_id => params[object_id], :user_id => User.current.id}).first + member.course_group_id = 0 + member.save + end + def new_join_group + + end def join_private_courses respond_to do |format| format.js @@ -198,7 +212,7 @@ class CoursesController < ApplicationController def searchmembers @render_file = 'member_list' - + @canShowCode = isCourseTeacher(User.current.id,@course) && params[:role] != '1' @is_remote = true q = "#{params[:name].strip}" #(redirect_to stores_url, :notice => l(:label_sumbit_empty);return) if params[:name].blank? @@ -208,15 +222,36 @@ class CoursesController < ApplicationController end def addgroups - + if params[:group_name] + group = CourseGroup.new + group.name = params[:group_name] + group.course_id = @course.id + group.save + end + @course_groups = @course.course_groups end def updategroupname - + if params[:group_name] + group = CourseGroup.find(params[:group_id]) + group.name = params[:group_name] + group.save + end + @course_groups = @course.course_groups end def searchgroupmembers + @render_file = 'member_list' + @canShowCode = isCourseTeacher(User.current.id,@course) && params[:role] != '1' + @is_remote = true + if params[:group_id] && params[:group_id] != "0" + @group = CourseGroup.find(params[:group_id]) + @results = searchStudent_by_group(@group) + else + @results = searchStudent(@course) + end + @results = paginateHelper @results end def member ## 有角色参数的才是课程,没有的就是项目 diff --git a/app/helpers/courses_helper.rb b/app/helpers/courses_helper.rb index ccca6be9d..5da100fa9 100644 --- a/app/helpers/courses_helper.rb +++ b/app/helpers/courses_helper.rb @@ -199,6 +199,14 @@ module CoursesHelper end members end + def searchStudent_by_group group + #searchPeopleByRoles(project, StudentRoles) + members = [] + group.members.each do |m| + members << m if m && m.user && m.user.allowed_to?(:as_student,project) + end + members + end # ===================================================================================== #def searchCountByRoles project, roles_id diff --git a/app/helpers/watchers_helper.rb b/app/helpers/watchers_helper.rb index 6d916f43e..3b49f3d48 100644 --- a/app/helpers/watchers_helper.rb +++ b/app/helpers/watchers_helper.rb @@ -109,6 +109,28 @@ module WatchersHelper link_to text, url_f, :remote => true, :method => method, :id => "#{course.id}", :class => []+options end end + def join_in_course_group(coursegroups,group, user, options=[]) + return '' unless user && user.logged? + + @isjoin = false + coursegroups.each do |g| + @isjoin = user.member_of_course_group?(g) + end + url_t = join_group_path(:object_id => group.id) + url_f = try_join_group_path(:object_id => group.id) + if @isjoin == true + joined = user.member_of_course_group?(group) + text = l(:label_exit_course) + + if joined + link_to text, url_t, :remote => true, :method => 'delete', :id => "#{group.id}", :confirm => l(:text_are_you_sure_out), :class => []+options + + end + else + text = l(:label_new_join) + link_to text, url_f, :remote => true, :method => 'post', :id => "#{group.id}", :class => []+options + end + end # 用户是否允许加入课程判断 # add by nwb diff --git a/app/models/course_group.rb b/app/models/course_group.rb index 236a51145..bb7be5af9 100644 --- a/app/models/course_group.rb +++ b/app/models/course_group.rb @@ -1,7 +1,13 @@ class CourseGroup < ActiveRecord::Base # attr_accessible :title, :body belongs_to :course - has_many :members + has_many :members, :include => [:principal, :roles], :conditions => "#{Principal.table_name}.type='User' AND #{Principal.table_name}.status=#{Principal::STATUS_ACTIVE}" + has_many :memberships, :class_name => 'Member' + has_many :member_principals, :class_name => 'Member', + :include => :principal, + :conditions => "#{Principal.table_name}.type='Group' OR (#{Principal.table_name}.type='User' AND #{Principal.table_name}.status=#{Principal::STATUS_ACTIVE})" + has_many :principals, :through => :member_principals, :source => :principal + has_many :users, :through => :members before_destroy :set_member_nil diff --git a/app/models/principal.rb b/app/models/principal.rb index 024480635..30c064f6f 100644 --- a/app/models/principal.rb +++ b/app/models/principal.rb @@ -30,6 +30,7 @@ class Principal < ActiveRecord::Base has_many :projects, :through => :memberships #add by nwb has_many :courses, :through => :coursememberships + has_many :course_groups, :through => :coursememberships has_many :issue_categories, :foreign_key => 'assigned_to_id', :dependent => :nullify # Groups and active users diff --git a/app/models/user.rb b/app/models/user.rb index ef327f47f..57077f167 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -690,6 +690,9 @@ class User < Principal courses.to_a.include?(course) end + def member_of_course_group?(course_group) + course_groups.to_a.include?(course_group) + end # Returns a hash of user's projects grouped by roles def projects_by_role return @projects_by_role if @projects_by_role diff --git a/app/views/courses/_groups_name.html.erb b/app/views/courses/_groups_name.html.erb index 804b3f805..6256bd4f7 100644 --- a/app/views/courses/_groups_name.html.erb +++ b/app/views/courses/_groups_name.html.erb @@ -1,51 +1,59 @@ - -<%# if course_groups.any? %> + +
  • 分班:
  • - <% form_tag(searchgroupmembers_course_path(@course), :method => 'get', :remote => true) do %> +
  • - <%= hidden_field 'all', params[:group_id], name: 'all' %> - <%= submit_tag l:(label_all), :onclick => "asign_id('all')" %> -
  • - <% end %> -
  • + <%= form_tag( searchgroupmembers_course_path(@course, :group_id => 0), method: 'get',:remote=>true) do %> + + + <%= hidden_field_tag "all", params[:group_id], name: 'all' %> + <%= submit_tag l(:label_all), :style => "background: #f8df8c; border:0px; color: black" %> + <% end %>
  • + <% if course_groups.any? %> <% course_groups.each do |group| %>
  • - <% form_tag(searchgroupmembers_course_path(@course), :method => 'get', :remote => true) do %> - <%= hidden_field group, :id, :value => params[:group_id] %> - <%= submit_tag l:(label_all), :onclick => "asign_id(#{group.id})" %> + <%= form_tag(searchgroupmembers_course_path(@course,:group_id => group.id), method: 'get', remote: true) do %> + <%#= text_field_tag "group_id", params[:group_id] %> + <%= submit_tag group.name, :onclick => "$asign_id(#{group.id})",:style => "background: #f8df8c; border:0px; color: black; float:left;"%> + <% if @canShowCode %> + 编辑班级 + <% end %> <% end %> - 编辑班级 -
  • +
  • - <% form_tag(updategroupname_course_path(@course), :method => 'get', :remote => true, :update => 'group_name') do %> + <%= form_tag(updategroupname_course_path(@course,:group_id => group.id), method: 'get', remote:true, update: 'group_name') do %> + <%= submit_tag '', class: "submit f_l", style: "width: 43px;height: 21px;background: url(/images/btn.png) no-repeat 0 0;" %> + <% end %>
  • <% end %> + <% end %>
  • +添加分班
  • - -
  • + +
+
+ <%= @group %><%= @subPage_title %> + <% if !@canShowCode %> + <%= join_in_course_group(@course.course_groups,@group, User.current) %> + <% end %> - <%# end %> \ No newline at end of file diff --git a/app/views/courses/addgroups.js.erb b/app/views/courses/addgroups.js.erb new file mode 100644 index 000000000..a6f6933b9 --- /dev/null +++ b/app/views/courses/addgroups.js.erb @@ -0,0 +1 @@ +$("#st_groups").html("<%= escape_javascript( render :partial => 'groups_name', locals: {:course_groups => @course_groups})%>"); \ No newline at end of file diff --git a/app/views/courses/member.html.erb b/app/views/courses/member.html.erb index 4f7b395b0..5d596efeb 100644 --- a/app/views/courses/member.html.erb +++ b/app/views/courses/member.html.erb @@ -12,13 +12,14 @@ <% end %>
- <%# if @canShowCode %> -
+ +
<%= render :partial => 'groups_name', locals: {:course_groups => @course_groups} %>
- <%# end %> +
+
<%= error_messages_for 'member' %> <%= render :partial => @render_file, :locals => {:members => @members} %> diff --git a/app/views/courses/searchgroupmembers.js.erb b/app/views/courses/searchgroupmembers.js.erb new file mode 100644 index 000000000..c6ff97164 --- /dev/null +++ b/app/views/courses/searchgroupmembers.js.erb @@ -0,0 +1,4 @@ +/** + * Created by Administrator on 2014/12/3. + */ +$("#member_content").html("<%= escape_javascript( render :partial => @render_file, :locals => {:members => @results})%>"); \ No newline at end of file diff --git a/app/views/courses/searchmembers.js b/app/views/courses/searchmembers.js.erb similarity index 100% rename from app/views/courses/searchmembers.js rename to app/views/courses/searchmembers.js.erb diff --git a/app/views/courses/updategroupname.js.erb b/app/views/courses/updategroupname.js.erb new file mode 100644 index 000000000..8eb4e865c --- /dev/null +++ b/app/views/courses/updategroupname.js.erb @@ -0,0 +1,4 @@ +/** + * Created by Administrator on 2014/12/3. + */ +$("#st_groups").html("<%= escape_javascript( render :partial => 'groups_name', locals: {:course_groups => @course_groups})%>"); \ No newline at end of file diff --git a/config/locales/zh.yml b/config/locales/zh.yml index 5aedd93a7..13302a77c 100644 --- a/config/locales/zh.yml +++ b/config/locales/zh.yml @@ -1120,6 +1120,7 @@ zh: text_workflow_edit: 选择角色和跟踪标签来编辑工作流程 text_are_you_sure: 您确定要删除吗? text_are_you_sure_out: 你确定要退出该课程吗? + text_are_you_sure_out_group: 你确定要退出该分组吗? text_journal_changed: "%{label} 从 %{old} 变更为 %{new}" text_journal_set_to: "%{label} 被设置为 %{value}" text_journal_deleted: "%{label} 已删除 (%{old})" diff --git a/config/routes.rb b/config/routes.rb index 7a6a8aae0..f3f2a7e91 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -644,7 +644,9 @@ RedmineApp::Application.routes.draw do post 'finishcourse' post 'restartcourse' match "searchmembers", :controller => 'courses', :action => 'searchmembers', :via => [:post,:get] - + match "searchgroupmembers", :via => [:post, :get] + match "updategroupname", :via => [:post, :get] + match "addgroups", :via => [:post, :get] end collection do match 'join_private_courses', :via => [:get, :post] @@ -741,6 +743,8 @@ RedmineApp::Application.routes.draw do post 'join_in/join', :to => 'courses#join', :as => 'join' delete 'join_in/join', :to => 'courses#unjoin' + post 'join_in/join_group', :to => 'courses#join_group', :as => 'join_group' + delete 'join_in/join_group', :to => 'courses#unjoin_group' post 'calls/:id/join_in_contest', :to => 'bids#join_in_contest', :as => 'join_in_contest' delete 'calls/:id/join_in_contest', :to => 'bids#unjoin_in_contest' match 'calls/:id/show_participator', :to => 'bids#show_participator' # bai @@ -749,6 +753,7 @@ RedmineApp::Application.routes.draw do delete 'attachment/:id', :to => 'attachments#delete_homework' match 'new_join', :to => 'courses#new_join', :as => 'try_join' + match 'new_join_group', :to => 'courses#new_join_group', :as => 'try_join_group' match 'new_join_in_contest', :to => 'bids#new_join', :as => 'try_join_in_contest' match 'projects/:id/respond', :to => 'projects#project_respond', :via => :post match 'calls/:id/manage',:to => 'bids#manage',:via => [:get,:post] From c9b84d0a352732c100426ed95e452f8333eb0c2e Mon Sep 17 00:00:00 2001 From: alan <547533434@qq.com> Date: Thu, 4 Dec 2014 22:02:10 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E3=80=8A=E5=AD=A6?= =?UTF-8?q?=E7=94=9F=E5=8A=A0=E5=85=A5=EF=BC=8C=E9=80=80=E5=87=BA=E5=88=86?= =?UTF-8?q?=E7=BB=84=E3=80=8B=E5=8A=9F=E8=83=BD=20Signed-off-by:=20alan=20?= =?UTF-8?q?<547533434@qq.com>?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/courses_controller.rb | 41 ++++++++++++++++--------- app/helpers/courses_helper.rb | 2 +- app/helpers/watchers_helper.rb | 17 +++++++--- app/models/course_group.rb | 2 +- app/models/principal.rb | 2 +- app/views/courses/_groups_name.html.erb | 7 ++--- app/views/courses/_member_list.html.erb | 9 ++++++ app/views/courses/join_group.js.erb | 2 ++ app/views/courses/unjoin_group.js.erb | 2 ++ config/routes.rb | 2 ++ 10 files changed, 58 insertions(+), 28 deletions(-) create mode 100644 app/views/courses/join_group.js.erb create mode 100644 app/views/courses/unjoin_group.js.erb diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index 8a3c58244..87a5184f7 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -78,21 +78,9 @@ class CoursesController < ApplicationController format.js { render :partial => 'set_join', :locals => {:user => User.current, :course => Course.find(params[:object_id]), :object_id => params[:object_id]} } end end - def join_group - group = CourseGroup.find(params[:object_id]) - member = Member.find(:conditions => {:course_id => @course.id, :user_id => User.current.id}).first - member.course_group_id = group.id - member.save - end - def unjoin_group - member = Member.find(:conditions => {:course_group_id => params[object_id], :user_id => User.current.id}).first - member.course_group_id = 0 - member.save - end - def new_join_group - end + def join_private_courses respond_to do |format| format.js @@ -239,20 +227,43 @@ class CoursesController < ApplicationController end @course_groups = @course.course_groups end - + def join_group + group = CourseGroup.find(params[:object_id]) + member = Member.where(:course_id => @course.id, :user_id => User.current.id).first + member.course_group_id = group.id + member.save + @group = group + search_group_members group + end + def unjoin_group + group = CourseGroup.find(params[:object_id]) + member = Member.where(:course_id => @course.id, :user_id => User.current.id).first + member.course_group_id = 0 + member.save + @group = group + search_group_members group + end def searchgroupmembers @render_file = 'member_list' @canShowCode = isCourseTeacher(User.current.id,@course) && params[:role] != '1' @is_remote = true if params[:group_id] && params[:group_id] != "0" @group = CourseGroup.find(params[:group_id]) - @results = searchStudent_by_group(@group) + @results = searchStudent_by_group(@group, @course) else @results = searchStudent(@course) end @results = paginateHelper @results end + def search_group_members group + @render_file = 'member_list' + @canShowCode = isCourseTeacher(User.current.id,@course) && params[:role] != '1' + @is_remote = true + + @results = searchStudent_by_group(group, @course) + @results = paginateHelper @results + end def member ## 有角色参数的才是课程,没有的就是项目 @render_file = 'member_list' diff --git a/app/helpers/courses_helper.rb b/app/helpers/courses_helper.rb index 5da100fa9..7356fe8fa 100644 --- a/app/helpers/courses_helper.rb +++ b/app/helpers/courses_helper.rb @@ -199,7 +199,7 @@ module CoursesHelper end members end - def searchStudent_by_group group + def searchStudent_by_group group, project #searchPeopleByRoles(project, StudentRoles) members = [] group.members.each do |m| diff --git a/app/helpers/watchers_helper.rb b/app/helpers/watchers_helper.rb index ca5efd364..6818b4859 100644 --- a/app/helpers/watchers_helper.rb +++ b/app/helpers/watchers_helper.rb @@ -113,21 +113,27 @@ module WatchersHelper @isjoin = false coursegroups.each do |g| - @isjoin = user.member_of_course_group?(g) + g.members.each do |mem| + if mem.user_id == user.id + @isjoin = true + end + end end url_t = join_group_path(:object_id => group.id) - url_f = try_join_group_path(:object_id => group.id) + url_f = join_group_path(:object_id => group.id) if @isjoin == true joined = user.member_of_course_group?(group) text = l(:label_exit_course) if joined - link_to text, url_t, :remote => true, :method => 'delete', :id => "#{group.id}", :confirm => l(:text_are_you_sure_out), :class => []+options + link_to text, {:controller => "courses", :action => "join_group", :object_id => "#{group.id}"}, :remote => true, :method => 'delete', :id => "#{group.id}", :confirm => l(:text_are_you_sure_out_group), :class => []+options end else text = l(:label_new_join) - link_to text, url_f, :remote => true, :method => 'post', :id => "#{group.id}", :class => []+options + form_tag({:controller => "courses", :action => "join_group", :object_id => "#{group.id}"}, :remote => true, :method => 'post') do + submit_tag text, class: "submit f_l", style: "width: 43px;height: 21px;" + end end end @@ -146,7 +152,8 @@ module WatchersHelper if joined link_to text, url_t, :remote => true, :method => method, :id => "#{course.id}", :confirm => l(:text_are_you_sure_out), :class => []+options else - link_to text, url_f, :remote => true, :method => method, :id => "#{course.id}", :class => []+options + + link_to text, url_f, :remote => true, :method => method, :id => "#{course.id}", :class => []+options end end diff --git a/app/models/course_group.rb b/app/models/course_group.rb index bb7be5af9..6126352f6 100644 --- a/app/models/course_group.rb +++ b/app/models/course_group.rb @@ -1,7 +1,7 @@ class CourseGroup < ActiveRecord::Base # attr_accessible :title, :body belongs_to :course - has_many :members, :include => [:principal, :roles], :conditions => "#{Principal.table_name}.type='User' AND #{Principal.table_name}.status=#{Principal::STATUS_ACTIVE}" + has_many :members has_many :memberships, :class_name => 'Member' has_many :member_principals, :class_name => 'Member', :include => :principal, diff --git a/app/models/principal.rb b/app/models/principal.rb index 30c064f6f..2eaba6796 100644 --- a/app/models/principal.rb +++ b/app/models/principal.rb @@ -26,7 +26,7 @@ class Principal < ActiveRecord::Base has_many :members, :foreign_key => 'user_id', :dependent => :destroy has_many :memberships, :class_name => 'Member', :foreign_key => 'user_id', :include => [ :project, :roles ], :conditions => "#{Project.table_name}.status<>#{Project::STATUS_ARCHIVED}", :order => "#{Project.table_name}.name" - has_many :coursememberships, :class_name => 'Member', :foreign_key => 'user_id', :include => [ :course, :roles ], :conditions => "#{Course.table_name}.status<>#{Course::STATUS_ARCHIVED}", :order => "#{Course.table_name}.name" + has_many :coursememberships, :class_name => 'Member', :foreign_key => 'user_id', :include => [ :course, :roles ], :order => "#{Course.table_name}.name" has_many :projects, :through => :memberships #add by nwb has_many :courses, :through => :coursememberships diff --git a/app/views/courses/_groups_name.html.erb b/app/views/courses/_groups_name.html.erb index 6256bd4f7..32f85ba21 100644 --- a/app/views/courses/_groups_name.html.erb +++ b/app/views/courses/_groups_name.html.erb @@ -51,9 +51,6 @@ -
- <%= @group %><%= @subPage_title %> - <% if !@canShowCode %> - <%= join_in_course_group(@course.course_groups,@group, User.current) %> - <% end %> + + diff --git a/app/views/courses/_member_list.html.erb b/app/views/courses/_member_list.html.erb index cd620c52f..c915587c1 100644 --- a/app/views/courses/_member_list.html.erb +++ b/app/views/courses/_member_list.html.erb @@ -1,3 +1,12 @@ +
+<% if @group %> + <% if !@canShowCode %> + <%= join_in_course_group(@course.course_groups,@group, User.current) %> + <% end %>    + <%= @group.name %><%= @subPage_title %> + +<% end %> +
<% if members.any? %> <% members.each do |member| %> diff --git a/app/views/courses/join_group.js.erb b/app/views/courses/join_group.js.erb new file mode 100644 index 000000000..d1901db83 --- /dev/null +++ b/app/views/courses/join_group.js.erb @@ -0,0 +1,2 @@ + +$("#member_content").html("<%= escape_javascript( render :partial => @render_file, :locals => {:members => @results})%>"); \ No newline at end of file diff --git a/app/views/courses/unjoin_group.js.erb b/app/views/courses/unjoin_group.js.erb new file mode 100644 index 000000000..d1901db83 --- /dev/null +++ b/app/views/courses/unjoin_group.js.erb @@ -0,0 +1,2 @@ + +$("#member_content").html("<%= escape_javascript( render :partial => @render_file, :locals => {:members => @results})%>"); \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index f3f2a7e91..835e6be6e 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -647,6 +647,8 @@ RedmineApp::Application.routes.draw do match "searchgroupmembers", :via => [:post, :get] match "updategroupname", :via => [:post, :get] match "addgroups", :via => [:post, :get] + post 'join_in/join_group', :to => 'courses#join_group', :as => 'join_group' + delete 'join_in/join_group', :to => 'courses#unjoin_group' end collection do match 'join_private_courses', :via => [:get, :post] From cfb8edbfe2a19cd335be3996c1341a8b84e9f026 Mon Sep 17 00:00:00 2001 From: alan <547533434@qq.com> Date: Fri, 5 Dec 2014 10:53:43 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E5=88=86=E7=BB=84=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E6=A0=B7=E5=BC=8F=E5=BE=AE=E8=B0=83=20Signed-off-by:=20alan=20?= =?UTF-8?q?<547533434@qq.com>?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/courses_controller.rb | 4 ++++ app/helpers/watchers_helper.rb | 7 +++++-- app/views/courses/_groups_name.html.erb | 7 +++++-- app/views/courses/_member_list.html.erb | 4 ++-- public/stylesheets/course_group.css | 16 +++++++++++++++- 5 files changed, 31 insertions(+), 7 deletions(-) diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index 87a5184f7..2e3f42784 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -225,6 +225,8 @@ class CoursesController < ApplicationController group.name = params[:group_name] group.save end + @canShowCode = isCourseTeacher(User.current.id,@course) && params[:role] != '1' + @is_remote = true @course_groups = @course.course_groups end def join_group @@ -233,6 +235,7 @@ class CoursesController < ApplicationController member.course_group_id = group.id member.save @group = group + search_group_members group end def unjoin_group @@ -241,6 +244,7 @@ class CoursesController < ApplicationController member.course_group_id = 0 member.save @group = group + search_group_members group end def searchgroupmembers diff --git a/app/helpers/watchers_helper.rb b/app/helpers/watchers_helper.rb index 6818b4859..8acd0b577 100644 --- a/app/helpers/watchers_helper.rb +++ b/app/helpers/watchers_helper.rb @@ -126,13 +126,16 @@ module WatchersHelper text = l(:label_exit_course) if joined - link_to text, {:controller => "courses", :action => "join_group", :object_id => "#{group.id}"}, :remote => true, :method => 'delete', :id => "#{group.id}", :confirm => l(:text_are_you_sure_out_group), :class => []+options + link_to text, {:controller => "courses", :action => "join_group", :object_id => "#{group.id}"}, + :remote => true, :method => 'delete', + :id => "#{group.id}", :style => "padding: 8px 8px 4px;", + :confirm => l(:text_are_you_sure_out_group), :class => 'group_in' end else text = l(:label_new_join) form_tag({:controller => "courses", :action => "join_group", :object_id => "#{group.id}"}, :remote => true, :method => 'post') do - submit_tag text, class: "submit f_l", style: "width: 43px;height: 21px;" + submit_tag text, class: "group_in", style: "width: 43px;height: 21px;" end end end diff --git a/app/views/courses/_groups_name.html.erb b/app/views/courses/_groups_name.html.erb index 32f85ba21..de8425b45 100644 --- a/app/views/courses/_groups_name.html.erb +++ b/app/views/courses/_groups_name.html.erb @@ -16,10 +16,11 @@ <% if course_groups.any? %> <% course_groups.each do |group| %> + <% group_display = group.name + "(" + group.members.count.to_s + "人)" %>
  • <%= form_tag(searchgroupmembers_course_path(@course,:group_id => group.id), method: 'get', remote: true) do %> <%#= text_field_tag "group_id", params[:group_id] %> - <%= submit_tag group.name, :onclick => "$asign_id(#{group.id})",:style => "background: #f8df8c; border:0px; color: black; float:left;"%> + <%= submit_tag group_display, :onclick => "$asign_id(#{group.id})",:style => "background: #f8df8c; border:0px; color: black; float:left;"%> <% if @canShowCode %> 编辑班级 <% end %> @@ -36,12 +37,13 @@
  • <% end %> <% end %> + <% if @canShowCode %>
  • +添加分班
  • + <% end %> diff --git a/app/views/courses/_member_list.html.erb b/app/views/courses/_member_list.html.erb index c915587c1..cba88b141 100644 --- a/app/views/courses/_member_list.html.erb +++ b/app/views/courses/_member_list.html.erb @@ -1,9 +1,9 @@ -
    +
    <% if @group %> <% if !@canShowCode %> <%= join_in_course_group(@course.course_groups,@group, User.current) %> <% end %>    - <%= @group.name %><%= @subPage_title %> + <%= @group.name %><%= @subPage_title %> <% end %>
    diff --git a/public/stylesheets/course_group.css b/public/stylesheets/course_group.css index 81e9f68e4..10d69f384 100644 --- a/public/stylesheets/course_group.css +++ b/public/stylesheets/course_group.css @@ -79,4 +79,18 @@ a:hover.st_add{ color:#ff8e15;} .submit{height:21px;border:0; cursor:pointer; background:url(../images/btn.png) no-repeat 0 0;width:42px; margin-top:2px; margin-left:3px; } .submit_2{height:21px;border:0; cursor:pointer; background:url(../images/btn1.png) no-repeat 0 0;width:42px; margin-top:2px; margin-left:3px; } -.isTxt{background:#fbfbfb url(../images/inputBg.png) repeat-x left top;height:22px;line-height:22px;border:1px solid #c1c1c1;padding:0 5px;color:#666666;} \ No newline at end of file +.isTxt{background:#fbfbfb url(../images/inputBg.png) repeat-x left top;height:22px;line-height:22px;border:1px solid #c1c1c1;padding:0 5px;color:#666666;} +.group_in { + width:60px !important; + height:28px !important; + color:#fff !important; + margin-right:5px !important; + border:none !important; + margin-left:0px !important; + box-shadow: none !important; + + border-radius: 0 !important; + text-shadow: none !important; + border:1px solid #1c9ec7; + background:#1c9ec7; +} \ No newline at end of file From 020242a8c973109f958292601b172c296eaf873e Mon Sep 17 00:00:00 2001 From: alan <547533434@qq.com> Date: Fri, 5 Dec 2014 11:27:51 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E5=A2=9E=E5=87=8F=E3=80=8A=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E6=98=BE=E7=A4=BA=E4=BA=BA=E6=95=B0=E4=BB=A5=E5=8F=8A?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E5=85=A8=E9=83=A8=E4=BA=BA=E6=95=B0=E3=80=8B?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=20Signed-off-by:=20alan=20<547533434@qq.com>?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/courses_controller.rb | 1 + app/views/courses/_groups_name.html.erb | 3 ++- app/views/courses/_member_list.html.erb | 3 +++ config/locales/zh.yml | 4 +++- 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index 2e3f42784..d266f5990 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -205,6 +205,7 @@ class CoursesController < ApplicationController q = "#{params[:name].strip}" #(redirect_to stores_url, :notice => l(:label_sumbit_empty);return) if params[:name].blank? @results = searchStudent_by_name(@course, q) + @result_count = @results.count @results = paginateHelper @results end diff --git a/app/views/courses/_groups_name.html.erb b/app/views/courses/_groups_name.html.erb index de8425b45..151eb9c7e 100644 --- a/app/views/courses/_groups_name.html.erb +++ b/app/views/courses/_groups_name.html.erb @@ -6,11 +6,12 @@
  • 分班:
  • + <% course_member_count = l(:label_all) + "(" + @course.members.count.to_s + "人)" %> <%= form_tag( searchgroupmembers_course_path(@course, :group_id => 0), method: 'get',:remote=>true) do %> <%= hidden_field_tag "all", params[:group_id], name: 'all' %> - <%= submit_tag l(:label_all), :style => "background: #f8df8c; border:0px; color: black" %> + <%= submit_tag course_member_count, :style => "background: #f8df8c; border:0px; color: black" %> <% end %>
  • diff --git a/app/views/courses/_member_list.html.erb b/app/views/courses/_member_list.html.erb index cba88b141..436a339dd 100644 --- a/app/views/courses/_member_list.html.erb +++ b/app/views/courses/_member_list.html.erb @@ -9,6 +9,9 @@
    <% if members.any? %> + <% if @result_count %> +

    <%= l(:label_search_member_count) %><%= @result_count %><%= l(:label_member_people) %>

    + <% end %> <% members.each do |member| %>
    <% next if member.new_record? %> diff --git a/config/locales/zh.yml b/config/locales/zh.yml index ef90c7d10..cecc9b465 100644 --- a/config/locales/zh.yml +++ b/config/locales/zh.yml @@ -569,7 +569,9 @@ zh: label_role_plural: 角色 label_role_new: 新建角色 label_role_and_permissions: 角色和权限 - label_member: 成员 + label_member: + label_search_member_count: 共搜索到 + label_member_people: 人 label_member_new: 添加成员 label_member_plural: 成员 label_tracker: 跟踪标签