diff --git a/app/controllers/admin_controller.rb b/app/controllers/admin_controller.rb index f96cf66f..ab3d7b12 100644 --- a/app/controllers/admin_controller.rb +++ b/app/controllers/admin_controller.rb @@ -23,6 +23,7 @@ class AdminController < ApplicationController before_filter :require_admin helper :sort + helper :Users include SortHelper def index @@ -39,6 +40,121 @@ class AdminController < ApplicationController render :action => "projects", :layout => false if request.xhr? end + def users + @project_type = params[:project_type] + role = params[:role] + + sort_init 'login', 'asc' + sort_update %w(login firstname lastname mail admin created_on last_login_on) + + case params[:format] + when 'xml', 'json' + @offset, @limit = api_offset_and_limit({:limit => 15}) + else + @limit = 15#per_page_option + end + + @status = params[:status] || 1 + has = { + "show_changesets" => true + } + # @count = Redmine::Activity::Fetcher.new(User.current, :author => @user).scope_select {|t| !has["show_#{t}"].nil?}.events(nil, nil).count + + scope = UserStatus.visible + case role + when 'teacher' + scope = UserStatus.teacher + when 'student' + scope = UserStatus.student + else + + end + + scope = scope.in_group(params[:group_id]) if params[:group_id].present? + # scope.each do |user| + # UserStatus.create(:changesets_count => user.changesets.count, :watchers_count => user.watcher_users.count, :user_id => user.id) + # end + @user_count = scope.count + @user_pages = Paginator.new @user_count, @limit, params['page'] + #@offset ||= @user_pages.offset + #@users = scope.order(sort_clause).limit(@limit).offset(@offset).all + @user_base_tag = params[:id] ? 'base_users':'base' + if params[:user_sort_type].present? + case params[:user_sort_type] + when '0' + @offset ||= @user_pages.reverse_offset + unless @offset == 0 + @users_statuses = scope.offset(@offset).limit(@limit).all.reverse + else + limit = @user_count % @limit + if limit == 0 + limit = @limit + end + @users_statuses = scope.offset(@offset).limit(limit).all.reverse + end + @s_type = 0 + # @projects = @projects.sort {|x,y| y.created_on <=> x.created_on } + # @projects = @projects[@offset, @limit] + when '1' + @offset ||= @user_pages.reverse_offset + unless @offset == 0 + @users_statuses = scope.reorder('grade').offset(@offset).limit(@limit).all.reverse + else + limit = @user_count % @limit + if limit == 0 + limit = @limit + end + @users_statuses = scope.reorder('grade').offset(@offset).limit(limit).all.reverse + end + @s_type = 1 + #sort {|x,y| y.user_status.changesets_count <=> x.user_status.changesets_count} + #@users = @users[@offset, @limit] + when '2' + @offset ||= @user_pages.reverse_offset + unless @offset == 0 + @users_statuses = scope.reorder('watchers_count').offset(@offset).limit(@limit).all.reverse + else + limit = @user_count % @limit + if limit == 0 + limit = @limit + end + @users_statuses = scope.reorder('watchers_count').offset(@offset).limit(limit).all.reverse + end + @s_type = 2 + #@users = @users[@offset, @limit] + end + + else + @offset ||= @user_pages.reverse_offset + unless @offset == 0 + @users_statuses = scope.reorder('grade').offset(@offset).limit(@limit).all.reverse + else + limit = @user_count % @limit + if limit == 0 + limit = @limit + end + @users_statuses = scope.reorder('grade').offset(@offset).limit(limit).all.reverse + end + @s_type = 1 + # @projects = @projects.sort {|x,y| y.created_on <=> x.created_on } + # @projects = @projects[@offset, @limit] + end + + @users = [] + @users_statuses.each do |obj| + @users << User.find_by_id("#{obj.user_id}") + end + + + respond_to do |format| + format.html { + @groups = Group.all.sort + render :layout => @user_base_tag + } + format.api + end + end + def plugins @plugins = Redmine::Plugin.all end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 6174e212..edc8088f 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -782,7 +782,7 @@ class UsersController < ApplicationController end def setting_layout(default_base='base_users') - User.current.admin? ? 'base_admin' : default_base + User.current.admin? ? default_base : default_base end # 必填自己的工作单位,其实就是学校 diff --git a/app/views/admin/users.html.erb b/app/views/admin/users.html.erb new file mode 100644 index 00000000..77931646 --- /dev/null +++ b/app/views/admin/users.html.erb @@ -0,0 +1,69 @@ +<% if User.current.admin? %> +
+ | |||||||
---|---|---|---|---|---|---|---|
<%= avatar(user, :size => "14") %><%= link_to h(user.login), edit_user_path(user) %> | +<%= h(user.firstname) %> | +<%= h(user.lastname) %> | +<%= mail_to(h(user.mail)) %> | +<%= checked_image user.admin? %> | +<%= format_time(user.created_on) %> | +<%= format_time(user.last_login_on) unless user.last_login_on.nil? %> | +<%= change_status_link(user) %> + <%= delete_link user_path(user, :back_url => users_path(params)) unless User.current == user %> | +
<% unless user.memberships.empty? %> - <% cond = Project.visible_condition(User.current) + "AND projects.project_type = 1" %> + <% cond = Project.visible_condition(User.current) + " AND projects.project_type = 1" %> <% memberships = user.memberships.all(:conditions => cond) %> <%= l(:label_x_course_contribute_to, :count => memberships.count) %> <% for member in memberships %> diff --git a/app/views/users/index.html.erb b/app/views/users/index.html.erb index a9f3e0b0..2736ec37 100644 --- a/app/views/users/index.html.erb +++ b/app/views/users/index.html.erb @@ -1,71 +1,3 @@ -<% if User.current.admin? %> -
- | |||||||
---|---|---|---|---|---|---|---|
<%= avatar(user, :size => "14") %><%= link_to h(user.login), edit_user_path(user) %> | -<%= h(user.firstname) %> | -<%= h(user.lastname) %> | -<%= mail_to(h(user.mail)) %> | -<%= checked_image user.admin? %> | -<%= format_time(user.created_on) %> | -<%= format_time(user.last_login_on) unless user.last_login_on.nil? %> | -<%= change_status_link(user) %> - <%= delete_link user_path(user, :back_url => users_path(params)) unless User.current == user %> | -