增加项目和用户的排序功能

exceptionHandle
nieguanghui 12 years ago
parent cce0b299b7
commit fa27d3bf32

@ -282,6 +282,7 @@ class AccountController < ApplicationController
def register_by_email_activation(user, &block)
token = Token.new(:user => user, :action => "register")
if user.save and token.save
UserStatus.create(:user_id => user.id)
Mailer.register(token).deliver
flash[:notice] = l(:notice_account_register_done)
redirect_to signin_path
@ -298,6 +299,7 @@ class AccountController < ApplicationController
user.activate
user.last_login_on = Time.now
if user.save
UserStatus.create(:user_id => user.id)
self.logged_user = user
flash[:notice] = l(:notice_account_activated)
redirect_to my_account_path
@ -311,6 +313,7 @@ class AccountController < ApplicationController
# Pass a block for behavior when a user fails to save
def register_manually_by_administrator(user, &block)
if user.save
UserStatus.create(:user_id => user.id)
# Sends an email to the administrators
Mailer.account_activation_request(user).deliver
account_pending

File diff suppressed because it is too large Load Diff

@ -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)
@ -154,16 +154,61 @@ class UsersController < ApplicationController
"show_changesets" => true
}
# @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 = 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
#@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 = scope.offset(@offset).limit(@limit).all.reverse
else
limit = @user_count % @limit
@users = scope.offset(@offset).limit(limit).all.reverse
end
# @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 = scope.includes(:user_status).reorder('user_statuses.changesets_count').offset(@offset).limit(@limit).all.reverse
else
limit = @user_count % @limit
@users = scope.includes(:user_status).reorder('user_statuses.changesets_count').offset(@offset).limit(limit).all.reverse
end
#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 = scope.includes(:user_status).reorder('user_statuses.watchers_count').offset(@offset).limit(@limit).all.reverse
else
limit = @user_count % @limit
@users = scope.includes(:user_status).reorder('user_statuses.watchers_count').offset(@offset).limit(limit).all.reverse
end
#@users = @users[@offset, @limit]
end
else
@offset ||= @user_pages.reverse_offset
unless @offset == 0
@users = scope.offset(@offset).limit(@limit).all.reverse
else
limit = @user_count % @limit
@users = scope.offset(@offset).limit(limit).all.reverse
end
# @projects = @projects.sort {|x,y| y.created_on <=> x.created_on }
# @projects = @projects[@offset, @limit]
end
respond_to do |format|
format.html {
@groups = Group.all.sort

@ -23,6 +23,11 @@ class Changeset < ActiveRecord::Base
has_many :acts, :class_name => 'Activity', :as => :act, :dependent => :destroy
# end
#Added by nie
has_one :project_status, :dependent => :destroy
has_one :users_status
#end
has_and_belongs_to_many :issues
has_and_belongs_to_many :parents,
:class_name => "Changeset",

@ -57,7 +57,6 @@ class Project < ActiveRecord::Base
#ADDED BY NIE
has_many :project_infos, :dependent => :destroy
has_one :project_status, :class_name => "ProjectStatus", :dependent => :destroy
#end
has_one :wiki, :dependent => :destroy
# Custom field for the project issues

@ -18,6 +18,10 @@
class Watcher < ActiveRecord::Base
belongs_to :watchable, :polymorphic => true
belongs_to :user
#Added by nie
has_one :project_status
has_one :users_status
#end
validates_presence_of :user
validates_uniqueness_of :user_id, :scope => [:watchable_type, :watchable_id]

@ -19,6 +19,21 @@
</div>
<%end%>
<div class="pagination" style="border-bottom: 1px solid rgb(223,223,223); width: 95%; margin-left: 2%; margin-top: 15px" >
<ul style="margin-right:0px">
<li>
<%= link_to l(:label_sort_by_time), projects_path(:project_sort_type => '0') %>
</li>
<li>
<%= link_to l(:label_sort_by_active), projects_path(:project_sort_type => '1') %>
</li>
<li>
<%= link_to l(:label_sort_by_influence), projects_path(:project_sort_type => '2') %>
</li>
</ul>
</div>
<div id="projects-index">
<%= render_project_hierarchy(@projects)%>
</div>

@ -86,6 +86,21 @@
</div>
&nbsp;
<div class="pagination" style="border-bottom: 1px solid rgb(223,223,223); width: 95%; margin-left: 2%; margin-top: 0px">
<ul style="margin-right:0px">
<li>
<%= link_to l(:label_sort_by_time), users_path(:user_sort_type => '0') %>
</li>
<li>
<%= link_to l(:label_sort_by_active), users_path(:user_sort_type => '1') %>
</li>
<li>
<%= link_to l(:label_sort_by_influence), users_path(:user_sort_type => '2') %>
</li>
</ul>
</div>
<div class="autoscroll">
<% for user in @users -%>
<% unless user.id == 1%>

@ -0,0 +1,9 @@
class CreateProjectStatuses < ActiveRecord::Migration
def change
create_table :project_statuses do |t|
t.integer :changesets_count
t.integer :watchers_count
t.integer :project_id
end
end
end

@ -0,0 +1,11 @@
class CreateUserStatuses < ActiveRecord::Migration
def change
create_table :user_statuses do |t|
t.integer :changesets_count
t.integer :watchers_count
t.integer :user_id
t.timestamps
end
end
end

@ -0,0 +1,76 @@
class StoredStatusProcedure < ActiveRecord::Migration
def up
#sql = <<- END_OF_SQL_CODE
execute "
create procedure `sp_user_status_cursor`()
begin
declare v_uid bigint(22);
declare v int(10);
declare _done TINYINT(1) default 0;
declare cur_user cursor for select user_id, count(*) from changesets where user_id != '' group by user_id;
declare continue handler for not found set _done = 1;
open cur_user;
loop_xxx:loop
fetch cur_user into v_uid,v;
if _done=1 then
leave loop_xxx;
end if;
begin
update user_statuses set changesets_count = v where user_id = v_uid;
commit;
end;
end loop;
end;
"
execute "
create event if not exists e_test
on schedule every 1 day starts'2013_08_27 01:50:00'
on completion preserve
do call `sp_user_status_cursor`();
"
execute "
create procedure `sp_project_status_cursor`()
begin
declare v_uid bigint(22);
declare v int(10);
declare _done TINYINT(1) default 0;
declare cur_user cursor for select project_id,count(*) from (select project_id,repositories.id from repositories inner join changesets where repositories.id = changesets.repository_id)t group by project_id;
declare continue handler for not found set _done = 1;
open cur_user;
loop_xxx:loop
fetch cur_user into v_uid,v;
if _done=1 then
leave loop_xxx;
end if;
begin
update project_statuses set changesets_count = v where project_id = v_uid;
commit;
end;
end loop;
end;
"
execute "
create event if not exists e_project_status_test
on schedule every 1 day starts'2013_08_27 01:50:00'
on completion preserve
do call `sp_project_status_cursor`();
"
execute "
set global event_scheduler = on;
"
end
def down
execute " drop procedure if exists `sp_user_status_cursor`;
"
execute "
drop event if exists e_test;
"
execute "
drop procedure if exists `sp_project_status_cursor`;
"
execute "
drop event if exists e_project_status_test;
"
end
end

@ -11,7 +11,7 @@
#
# It's strongly recommended to check this file into your version control system.
ActiveRecord::Schema.define(:version => 20130819020004) do
ActiveRecord::Schema.define(:version => 20130828004955) do
create_table "a_user_watchers", :force => true do |t|
t.string "name"
@ -445,6 +445,23 @@ ActiveRecord::Schema.define(:version => 20130819020004) do
t.string "salt", :null => false
end
create_table "permissions", :force => true do |t|
t.string "controller", :limit => 30, :default => "", :null => false
t.string "action", :limit => 30, :default => "", :null => false
t.string "description", :limit => 60, :default => "", :null => false
t.boolean "is_public", :default => false, :null => false
t.integer "sort", :default => 0, :null => false
t.boolean "mail_option", :default => false, :null => false
t.boolean "mail_enabled", :default => false, :null => false
end
create_table "permissions_roles", :id => false, :force => true do |t|
t.integer "permission_id", :default => 0, :null => false
t.integer "role_id", :default => 0, :null => false
end
add_index "permissions_roles", ["role_id"], :name => "permissions_roles_role_id"
create_table "praise_tread_caches", :force => true do |t|
t.integer "object_id", :null => false
t.string "object_type"
@ -470,6 +487,12 @@ ActiveRecord::Schema.define(:version => 20130819020004) do
t.datetime "updated_at", :null => false
end
create_table "project_statuses", :force => true do |t|
t.integer "changesets_count"
t.integer "watchers_count"
t.integer "project_id"
end
create_table "project_tags", :force => true do |t|
t.integer "project_id"
t.integer "tag_id"
@ -648,6 +671,14 @@ ActiveRecord::Schema.define(:version => 20130819020004) do
add_index "user_preferences", ["user_id"], :name => "index_user_preferences_on_user_id"
create_table "user_statuses", :force => true do |t|
t.integer "changesets_count"
t.integer "watchers_count"
t.integer "user_id"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
create_table "user_tags", :force => true do |t|
t.integer "user_id"
t.integer "tag_id"

Loading…
Cancel
Save