parent
d1c284c953
commit
caf5602389
@ -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/
|
@ -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/
|
@ -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
|
@ -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
|
@ -0,0 +1,5 @@
|
||||
class SyllabusMember < ActiveRecord::Base
|
||||
belongs_to :syllabus
|
||||
belongs_to :user
|
||||
attr_accessible :rank, :user_id, :syllabus_id
|
||||
end
|
@ -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("");
|
@ -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}) %>");
|
@ -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);
|
||||
}
|
@ -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}) %>");
|
@ -0,0 +1,55 @@
|
||||
<% is_admin = User.current == @syllabus.user || User.current.admin? %>
|
||||
<table class="sy_new_table clear mb15" cellpadding="0" cellspacing="0" id="syllabus_member_list">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>序号</th>
|
||||
<th class="sy_new_namebox">姓名</th>
|
||||
<th>身份</th>
|
||||
<th>创建班级数</th>
|
||||
<th>参与班级数</th>
|
||||
<% if is_admin %>
|
||||
<th>操作</th>
|
||||
<% end %>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<% @members.each_with_index do |member, i| %>
|
||||
<% user = member.user %>
|
||||
<tr>
|
||||
<td><%= member.rank %></td>
|
||||
<td>
|
||||
<% if member.rank == 1 %>
|
||||
<div style="display: inline-block"><span class="sy_new_name fl"><%= user.show_name %></span><span class="sy_new_orange ml5 fl mt12">创建者</span></div>
|
||||
<% else %>
|
||||
<span class="sy_new_long_name"><%= user.show_name %></span>
|
||||
<% end %>
|
||||
</td>
|
||||
<td>
|
||||
<% if user.user_extensions && user.user_extensions.identity %>
|
||||
<%= get_user_roll user %>
|
||||
<% end%>
|
||||
</td>
|
||||
<% courses = user.courses.not_deleted %>
|
||||
<td><%= courses.where("tea_id = #{user.id}").count %></td>
|
||||
<td><%= courses.where("tea_id != #{user.id}").count %></td>
|
||||
<% if is_admin %>
|
||||
<td>
|
||||
<% 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 %>
|
||||
</td>
|
||||
<% end %>
|
||||
</tr>
|
||||
<% end %>
|
||||
</tbody>
|
||||
</table>
|
@ -0,0 +1,51 @@
|
||||
<ul id="sy_tab_nav">
|
||||
<li id="sy_tab_nav_1" onclick="HoverLi(1);">
|
||||
<a href="javascript:void(0);" class="sy_tab_type" >课程大纲</a>
|
||||
</li>
|
||||
<li id="sy_tab_nav_2" onclick="HoverLi(2);">
|
||||
<a href="javascript:void(0);" class="sy_tab_type" >班级列表</a>
|
||||
</li>
|
||||
<li id="sy_tab_nav_3" class="sy_tab_hover" onclick="HoverLi(3);">
|
||||
<a href="javascript:void(0);" class="sy_tab_type" >教师团队</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<div id="sy_tab_con_3">
|
||||
<div class="sy_new_tablebox clear">
|
||||
<%= render :partial => 'syllabus_member_list' %>
|
||||
<a href="javascript:void(0);" class="fl sy_btn_green" onclick="toggle_search();">添加成员</a>
|
||||
</div>
|
||||
<div class="sy_new_tchbox clear undis" id="sy_search_box">
|
||||
<%= form_tag url_for(:controller => 'syllabus_member', :action => 'create', :syllabus => @syllabus),:id => 'syllabus_member_add_form', :remote => true do |f|%>
|
||||
<input hidden="hidden" value="true" name="flag">
|
||||
<div class="hw_search_box mb10">
|
||||
<input id="principal_search" class="sy_new_search" type="text" placeholder="<%= l(:label_invite_trustie_user_tips)%>">
|
||||
<%= javascript_tag "observeSearchfield('principal_search', null, '#{escape_javascript "/syllabus_member/syl_member_autocomplete?" + {:syllabus => @syllabus.id}.to_query }')" %>
|
||||
</div>
|
||||
<div class="cl"></div>
|
||||
|
||||
<div id="principals_for_new_member">
|
||||
<%= find_user_not_in_current_syllabus_by_name(@syllabus) %>
|
||||
</div>
|
||||
<div class="cl mb10"></div>
|
||||
<a href="javascript:void(0);" class="fl sy_btn_blue mr5" onclick="$('#syllabus_member_add_form').submit();">确定</a>
|
||||
<a href="javascript:void(0);" class="fl sy_btn_grey mr5" onclick="reset_search();">取消</a>
|
||||
<% end%>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
//如果右边的列表比左边的高度低则将右边的高度设为与左边对齐
|
||||
$(function() {
|
||||
$(".sy_con_l").css("min-height",$(".sy_con_r").height());
|
||||
});
|
||||
|
||||
function toggle_search() {
|
||||
$("#sy_search_box").toggle();
|
||||
}
|
||||
function reset_search() {
|
||||
$("#sy_search_box").toggle();
|
||||
$("#principal_search").val("");
|
||||
$("#principals_for_new_member").html("");
|
||||
}
|
||||
</script>
|
@ -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
|
@ -0,0 +1,5 @@
|
||||
require 'rails_helper'
|
||||
|
||||
RSpec.describe SyllabusMemberController, :type => :controller do
|
||||
|
||||
end
|
@ -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
|
@ -0,0 +1,5 @@
|
||||
require 'rails_helper'
|
||||
|
||||
RSpec.describe SyllabusMember, :type => :model do
|
||||
pending "add some examples to (or delete) #{__FILE__}"
|
||||
end
|
Loading…
Reference in new issue