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 %>
diff --git a/app/views/projects/search.html.erb b/app/views/projects/search.html.erb new file mode 100644 index 000000000..e10be86fd --- /dev/null +++ b/app/views/projects/search.html.erb @@ -0,0 +1,67 @@ +<% content_for :header_tags do %> +<%= auto_discovery_link_tag(:atom, {:action => 'index', :format => 'atom', :key => User.current.rss_key}) %> +<% end %> + +<%= 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) %> +
+
+<%end%> + + + + +
+ <%= render_project_hierarchy(@projects)%> +
+ + + +<% if User.current.logged? %> +

+ <%= 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 %> +

<%= l(:label_project_plural) %>

+ +

+ <%= 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 @@

<%= l(:label_user_plural)%>

-<%= form_tag(users_path, :method => :get) do %> +<%= form_tag(:controller => 'users', :action => 'search', :method => :get) do %>
<%= l(:label_filter_plural) %> @@ -72,7 +72,7 @@
<%= l(:label_user_plural)%> -<%= form_tag(users_path, :method => :get) do %> +<%= form_tag(:controller => 'users', :action => 'search', :method => :get) do %> +
+<% end %> +  + +
+ + + + <%= sort_header_tag('login', :caption => l(:field_login)) %> + <%= sort_header_tag('firstname', :caption => l(:field_firstname)) %> + <%= sort_header_tag('lastname', :caption => l(:field_lastname)) %> + <%= sort_header_tag('mail', :caption => l(:field_mail)) %> + + <%= sort_header_tag('admin', :caption => l(:field_admin), :default_order => 'desc') %> + <%= sort_header_tag('created_on', :caption => l(:field_created_on), :default_order => 'desc') %> + <%= sort_header_tag('last_login_on', :caption => l(:field_last_login_on), :default_order => 'desc') %> + + + + + <% for user in @users -%> + "> + + + + + + + + + + <% end -%> + +
<%= avatar(user, :size => "14") %><%= link_to h(user.login), edit_user_path(user) %><%= h(user.firstname) %><%= h(user.lastname) %><%= checked_image user.admin? %><%= format_time(user.created_on) %> <%= change_status_link(user) %> + <%= delete_link user_path(user, :back_url => users_path(params)) unless User.current == user %>
+
+ + +<% html_title(l(:label_user_plural)) -%> + +<% else %> + +
+<%= l(:label_user_plural)%> + +<%= form_tag(:controller => 'users', :action => 'search', :method => :get) do %> + + +
+ + + + + +
+ <% for user in @users -%> + <% unless user.id == 1%> +
+ + <%= content_tag "p", "#{format_date(user.created_on)}#{l(:label_member_since)}", :class => "float_right member_since" %> + <%= image_tag "/images/time_member.png", :class => "img_member_time"%> + +
+ <%= link_to image_tag(url_to_avatar(user), :class => 'avatar'), user_path(user) %> + <%= content_tag "span", link_to_user(user), :class => "nomargin avatar_name" %> +
+
+ <%= l(:label_has_fans,:count=>user.watcher_users.count)%> + <%= l(:label_has_watchers,:count=>User.watched_by(user.id).count) %> +
+ +
+ <% unless user.memberships.empty? %> + <%= l(:label_contribute_to, :project_count => "#{user.memberships.count}") %> + <% for member in user.memberships %> + <%= link_to_project(member.project) %><%= (user.memberships.last == member) ? '' : ',' %> + <% end %> + <% end %> + <%= user.changesets.count == 0 ? '' : ",#{l(:label_total_commit, :total_commit => user.changesets.count)}" %> +
+
+ <% end -%> + <% end -%> +
+ +<% html_title(l(:label_user_plural)) -%> +<% end -%> diff --git a/config/routes.rb b/config/routes.rb index 39139473a..240c1daca 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -31,8 +31,10 @@ RedmineApp::Application.routes.draw do #added by baiyu match 'git_usage/ch_usage', :controller => 'git_usage', :action => 'ch_usage', :via => :get, :as => 'ch_usage' match 'git_usage/en_usage', :controller => 'git_usage', :action => 'en_usage', :via => :get, :as => 'en_usage' - - + #added by nie + match '/projects/search', :controller => 'projects', :action => 'search', :via => [:get, :post], :as => 'search' + match '/users/search', :controller => 'users', :action => 'search', :via => [:get, :post], :as => 'search' + #end match 'login', :to => 'account#login', :as => 'signin', :via => [:get, :post] match 'logout', :to => 'account#logout', :as => 'signout', :via => [:get, :post] match 'account/register', :to => 'account#register', :via => [:get, :post], :as => 'register'