diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 5a6f909c6..1ac68c6d3 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -23,8 +23,8 @@ class ProjectsController < ApplicationController menu_item l(:label_sort_by_active), :only => :index menu_item l(:label_sort_by_influence), :only => :index - before_filter :find_project, :except => [ :index, :list, :new, :create, :copy ] - before_filter :authorize, :except => [:watcherlist, :index, :list, :new, :create, :copy, :archive, :unarchive, :destroy, :member, :focus, :file, :statistics, :feedback, :project_respond] + before_filter :find_project, :except => [ :index, :search, :list, :new, :create, :copy ] + before_filter :authorize, :except => [:watcherlist, :index, :search, :list, :new, :create, :copy, :archive, :unarchive, :destroy, :member, :focus, :file, :statistics, :feedback, :project_respond] before_filter :authorize_global, :only => [:new, :create] before_filter :require_admin, :only => [ :copy, :archive, :unarchive, :destroy ] #by young @@ -89,7 +89,7 @@ class ProjectsController < ApplicationController # @projects = Project.visible.offset(@offset).limit(@limit).order('lft').all @offset, @limit = api_offset_and_limit({:limit => 10}) - @projects = Project.visible + @projects_status = ProjectStatus.visible # @projects.each do |project| # @admin = project.users_by_role[Role.find(3)] # unless @admin.nil? @@ -102,8 +102,8 @@ class ProjectsController < ApplicationController # @projects.each do |project| # ProjectStatus.create(:changesets_count => project.changesets.count, :project_id => project.id, :watchers_count => project.watcher_users.count) # end - @projects = Project.visible.like(params[:name]) if params[:name].present? - @project_count = @projects.count + #@projects_status = Project.visible.like(params[:name]) if params[:name].present? + @project_count = @projects_status.count @project_pages = Paginator.new @project_count, @limit, params['page'] @offset ||= @project_pages.reverse_offset @@ -114,13 +114,13 @@ class ProjectsController < ApplicationController when '0' @offset ||= @project_pages.reverse_offset unless @offset == 0 - @projects = @projects.offset(@offset).limit(@limit).all.reverse + @projects_status = @projects_status.offset(@offset).limit(@limit).all.reverse else limit = @project_count % @limit if limit == 0 limit = @limit end - @projects = @projects.offset(@offset).limit(limit).all.reverse + @projects_status = @projects_status.offset(@offset).limit(limit).all.reverse end @s_type = 0 # @projects = @projects.sort {|x,y| y.created_on <=> x.created_on } @@ -128,13 +128,13 @@ class ProjectsController < ApplicationController when '1' @offset ||= @project_pages.reverse_offset unless @offset == 0 - @projects = @projects.includes(:project_status).reorder('project_statuses.changesets_count').offset(@offset).limit(@limit).all.reverse + @projects_status = @projects_status.reorder('changesets_count').offset(@offset).limit(@limit).all.reverse else limit = @project_count % @limit if limit == 0 limit = @limit end - @projects = @projects.includes(:project_status).reorder('project_statuses.changesets_count').offset(@offset).limit(limit).all.reverse + @projects_status = @projects_status.reorder('changesets_count').offset(@offset).limit(limit).all.reverse end @s_type = 1 @@ -142,31 +142,35 @@ class ProjectsController < ApplicationController when '2' @offset ||= @project_pages.reverse_offset unless @offset == 0 - @projects = @projects.includes(:project_status).reorder('project_statuses.watchers_count').offset(@offset).limit(@limit).all.reverse + @projects_status = @projects_status.reorder('watchers_count').offset(@offset).limit(@limit).all.reverse else limit = @project_count % @limit if limit == 0 limit = @limit end - @projects = @projects.includes(:project_status).reorder('project_statuses.watchers_count').offset(@offset).limit(limit).all.reverse + @projects_status = @projects_status.reorder('watchers_count').offset(@offset).limit(limit).all.reverse end @s_type = 2 end else @offset ||= @project_pages.reverse_offset unless @offset == 0 - @projects = @projects.includes(:project_status).reorder('project_statuses.changesets_count').offset(@offset).limit(@limit).all.reverse + @projects_status = @projects_status.reorder('changesets_count').offset(@offset).limit(@limit).all.reverse else limit = @project_count % @limit if limit == 0 limit = @limit end - @projects = @projects.includes(:project_status).reorder('project_statuses.changesets_count').offset(@offset).limit(limit).all.reverse + @projects_status = @projects_status.reorder('changesets_count').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 + + @projects = [] + @projects_status.each do |obj| + @projects << Project.find_by_id("#{obj.project_id}") end #end respond_to do |format| @@ -188,6 +192,35 @@ class ProjectsController < ApplicationController } end end + + def search + + @projects = Project.visible + @projects = @projects.visible.like(params[:name]) if params[:name].present? + @offset, @limit = api_offset_and_limit({:limit => 10}) + @project_count = @projects.visible.count + @project_pages = Paginator.new @project_count, @limit, params['page'] + @offset ||= @project_pages.offset + @projects = @projects.visible.offset(@offset).limit(@limit).all + respond_to do |format| + format.html { + render :layout => 'base' + scope = Project + unless params[:closed] + scope = scope.active + end + } + format.api { + # @offset, @limit = api_offset_and_limit + # @project_count = Project.visible.count + # @projects = Project.visible.offset(@offset).limit(@limit).order('lft').all + } + format.atom { + projects = Project.visible.order('created_on DESC').limit(Setting.feeds_limit.to_i).all + render_feed(projects, :title => "#{Setting.app_title}: #{l(:label_project_latest)}") + } + end + end def feedback @jours = @project.journals_for_messages.reverse diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 7f41a984a..fa8879921 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -25,7 +25,7 @@ class UsersController < ApplicationController #Ended by young - before_filter :require_admin, :except => [:show, :index,:tag_save, :user_projects, :user_newfeedback, :user_comments, :watch_bids, :info, :user_watchlist, :user_fanslist,:edit,:update] + before_filter :require_admin, :except => [:show, :index, :search, :tag_save, :user_projects, :user_newfeedback, :user_comments, :watch_bids, :info, :user_watchlist, :user_fanslist,:edit,:update] before_filter :find_user, :only => [:user_fanslist, :user_watchlist, :show, :edit, :update, :destroy, :edit_membership, :destroy_membership, :user_activities, :user_projects, :user_newfeedback, :user_comments, :watch_bids, :info] accept_api_auth :index, :show, :create, :update, :destroy,:tag_save @@ -138,7 +138,7 @@ class UsersController < ApplicationController end #end - def index + def index sort_init 'login', 'asc' sort_update %w(login firstname lastname mail admin created_on last_login_on) @@ -155,8 +155,8 @@ class UsersController < ApplicationController } # @count = Redmine::Activity::Fetcher.new(User.current, :author => @user).scope_select {|t| !has["show_#{t}"].nil?}.events(nil, nil).count - scope = User.logged.status(@status) - scope = scope.like(params[:name]) if params[:name].present? + scope = UserStatus.visible + 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) @@ -171,13 +171,13 @@ class UsersController < ApplicationController when '0' @offset ||= @user_pages.reverse_offset unless @offset == 0 - @users = scope.offset(@offset).limit(@limit).all.reverse + @users_statuses = scope.offset(@offset).limit(@limit).all.reverse else limit = @user_count % @limit if limit == 0 limit = @limit end - @users = scope.offset(@offset).limit(limit).all.reverse + @users_statuses = scope.offset(@offset).limit(limit).all.reverse end @s_type = 0 # @projects = @projects.sort {|x,y| y.created_on <=> x.created_on } @@ -185,13 +185,13 @@ class UsersController < ApplicationController when '1' @offset ||= @user_pages.reverse_offset unless @offset == 0 - @users = scope.includes(:user_status).reorder('user_statuses.changesets_count').offset(@offset).limit(@limit).all.reverse + @users_statuses = scope.reorder('changesets_count').offset(@offset).limit(@limit).all.reverse else limit = @user_count % @limit if limit == 0 limit = @limit end - @users = scope.includes(:user_status).reorder('user_statuses.changesets_count').offset(@offset).limit(limit).all.reverse + @users_statuses = scope.reorder('changesets_count').offset(@offset).limit(limit).all.reverse end @s_type = 1 #sort {|x,y| y.user_status.changesets_count <=> x.user_status.changesets_count} @@ -199,13 +199,13 @@ class UsersController < ApplicationController when '2' @offset ||= @user_pages.reverse_offset unless @offset == 0 - @users = scope.includes(:user_status).reorder('user_statuses.watchers_count').offset(@offset).limit(@limit).all.reverse + @users_statuses = scope.reorder('watchers_count').offset(@offset).limit(@limit).all.reverse else limit = @user_count % @limit if limit == 0 limit = @limit end - @users = scope.includes(:user_status).reorder('user_statuses.watchers_count').offset(@offset).limit(limit).all.reverse + @users_statuses = scope.reorder('watchers_count').offset(@offset).limit(limit).all.reverse end @s_type = 2 #@users = @users[@offset, @limit] @@ -214,18 +214,65 @@ class UsersController < ApplicationController else @offset ||= @user_pages.reverse_offset unless @offset == 0 - @users = scope.includes(:user_status).reorder('user_statuses.changesets_count').offset(@offset).limit(@limit).all.reverse + @users_statuses = scope.reorder('changesets_count').offset(@offset).limit(@limit).all.reverse else limit = @user_count % @limit if limit == 0 limit = @limit end - @users = scope.includes(:user_status).reorder('user_statuses.changesets_count').offset(@offset).limit(limit).all.reverse + @users_statuses = scope.reorder('changesets_count').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 search + 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 + } + scope = User.logged.status(@status) + scope = scope.like(params[:name]) if params[:name].present? + @user_count = scope.count + @user_pages = Paginator.new @user_count, @limit, params['page'] + @user_base_tag = params[:id]?'base_users':'base' + @offset ||= @user_pages.reverse_offset + unless @offset == 0 + @users = scope.offset(@offset).limit(@limit).all.reverse + else + limit = @user_count % @limit + if limit == 0 + limit = @limit + end + @users = scope.offset(@offset).limit(limit).all.reverse + end + respond_to do |format| format.html { @groups = Group.all.sort @@ -234,6 +281,7 @@ class UsersController < ApplicationController format.api end end + ### modified by fq def show diff --git a/app/models/project_status.rb b/app/models/project_status.rb index 0e6882693..02eeb30c8 100644 --- a/app/models/project_status.rb +++ b/app/models/project_status.rb @@ -6,7 +6,7 @@ class ProjectStatus < ActiveRecord::Base validates_presence_of :project_id validates_uniqueness_of :project_id - + scope :visible, lambda {|*args| nil } # 更新字段 watchers_count 加1 这里没有做用户是否存在的匹配 # 负责这个表的聂同学 是在新建用户时就新建了该表的记录 # 但是 如果超级用户删除其他用户的话会造成读取错误 这里是遗漏点 diff --git a/app/models/user_status.rb b/app/models/user_status.rb index ab710bf15..f7815b62e 100644 --- a/app/models/user_status.rb +++ b/app/models/user_status.rb @@ -6,7 +6,7 @@ class UserStatus < ActiveRecord::Base validates_presence_of :user_id validates_uniqueness_of :user_id - + scope :visible, lambda {|*args| nil } # 更新字段 watchers_count 加1 这里没有做用户是否存在的匹配 # 负责这个表的聂同学 是在新建用户时就新建了该表的记录 # 但是 如果超级用户删除其他用户的话会造成读取错误 这里是遗漏点 diff --git a/app/views/projects/index.html.erb b/app/views/projects/index.html.erb index 1c611a0f1..fae7d8bad 100644 --- a/app/views/projects/index.html.erb +++ b/app/views/projects/index.html.erb @@ -2,7 +2,7 @@ <%= auto_discovery_link_tag(:atom, {:action => 'index', :format => 'atom', :key => User.current.rss_key}) %> <% end %> -<%= form_tag(projects_path, :method => :get) do %> +<%= form_tag(:controller => 'projects', :action => 'search', :method => :get) do %>
<%= l(:label_project_plural)%> | +<%= link_to(l(:label_project_new), {:controller => 'projects', :action => 'new'}, :class => 'icon icon-add') if User.current.allowed_to?(:add_project, nil, :global => true) %> | + +
+
+ <%= text_field_tag 'name', params[:name], :size => 30 %>
+ <%= submit_tag l(:label_search), :class => "small", :name => nil %>
+ |
+
+ <%= l(:label_my_projects) %> +
+<% end %> + +<% other_formats_links do |f| %> +<%= f.link_to 'Atom', :url => {:key => User.current.rss_key} %> +<% end %> + +<% content_for :sidebar do %> +<%= form_tag({}, :method => :get) do %> ++ <%= submit_tag l(:button_apply), :class => 'button-small', :name => nil %> +
+<% end %> +<% end %> + +<% html_title(l(:label_project_plural)) -%> diff --git a/app/views/users/index.html.erb b/app/views/users/index.html.erb index 82288143d..0ced54d0c 100644 --- a/app/views/users/index.html.erb +++ b/app/views/users/index.html.erb @@ -5,7 +5,7 @@