@ -128,7 +128,7 @@ class ProjectsController < ApplicationController
def index
#Modified by nie
@project_type = params [ :project_type ]
@project_type = params [ :project_type ] . to_i
per_page_option = 10
@projects_all = Project . active . visible .
@ -177,30 +177,166 @@ class ProjectsController < ApplicationController
def course
@project_type = params [ :project_type ]
@school_id = params [ :school_id ]
per_page_option = 10
@projects_all = Project . active . visible .
joins ( " LEFT JOIN #{ ProjectStatus . table_name } ON #{ Project . table_name } .id = #{ ProjectStatus . table_name } .project_id " ) .
where ( " #{ Project . table_name } .project_type = ? " , Project :: ProjectType_course )
if @school_id == " 0 " or @school . nil?
@projects_all = Project . active . visible .
joins ( " LEFT JOIN #{ ProjectStatus . table_name } ON #{ Project . table_name } .id = #{ ProjectStatus . table_name } .project_id " ) .
where ( " #{ Project . table_name } .project_type = ? " , Project :: ProjectType_course )
else
@projects_all = Project . active . visible .
joins ( " LEFT JOIN #{ ProjectStatus . table_name } ON #{ Project . table_name } .id = #{ ProjectStatus . table_name } .project_id " ) .
joins ( :course_extra ) .
where ( " #{ Project . table_name } .project_type = ? AND #{ Course . table_name } .school_id = ? " , Project :: ProjectType_course , @school_id )
end
@project_count = @projects_all . count
@project_pages = Paginator . new @project_count , per_page_option , params [ 'page' ]
#gcm activity count
@project_activity_count = Hash . new
@projects_all . each do | project |
@project_activity_count [ project . id ] = 0
end
@project_ids = @project_activity_count . keys ( )
days = Setting . activity_days_default . to_i
date_to || = Date . today + 1
date_from = date_to - days - 1 . years
#approach 1
= begin
@projects_all . each do | project |
#issue_count
issues = Issue . where ( " project_id=? " , project . id )
issue_count = 0
issues . each do | issue |
issue_count += issue . journals . count
end
#repository_count
repositories = Repository . where ( " project_id=? " , project . id )
repository_count = 0
repositories . each do | repository |
repository_count += repository . changesets . count
end
#news_count
news_count = News . where ( " project_id=? " , project . id ) . count
#document_count
document_count = Document . where ( " project_id=? " , project . id ) . count
#file_count
file_count = Attachment . where ( " container_type='Project' AND container_id=? " , project . id ) . count
#message_count
boards = Board . where ( " project_id=? " , project . id )
message_count = 0
boards . each do | board |
message_count += board . messages . count
end
#time_entry_count
time_entry_count = TimeEntry . where ( " project_id=? " , project . id ) . count
#sum
@project_activity_count [ project . id . to_s ] = issue_count + repository_count + news_count + document_count + file_count + message_count + time_entry_count
end
= end
#gcm
#gcm approach 2
#issue_count
Issue . where ( project_id : @project_ids ) . where ( " updated_on>? " , date_from ) . each do | issue |
# @project_activity_count[issue.project_id.to_s]+=1
@project_activity_count [ issue . project_id ] += issue . journals . where ( " created_on>? " , date_from ) . count
end
#repository_count
Repository . where ( project_id : @project_ids ) . each do | repository |
# @project_activity_count[repository.project_id.to_s]+=1
@project_activity_count [ repository . project_id ] += repository . changesets . where ( " committed_on>? " , date_from ) . count
end
#news_count
News . where ( project_id : @project_ids ) . where ( " created_on>? " , date_from ) . each do | news |
@project_activity_count [ news . project_id ] += 1
end
#document_count
Document . where ( project_id : @project_ids ) . where ( " created_on>? " , date_from ) . each do | document |
@project_activity_count [ document . project_id ] += 1
end
#file_count
Attachment . where ( container_id : @project_ids ) . where ( " container_type='Project' AND created_on>? " , date_from ) . each do | attachment |
@project_activity_count [ attachment . container_id ] += 1
end
#message_count
Board . where ( project_id : @project_ids ) . each do | board |
# @project_activity_count[board.project_id]+=1
@project_activity_count [ board . project_id ] += board . messages . where ( " updated_on>? " , date_from ) . count
end
#time_entry_count
TimeEntry . where ( project_id : @project_ids ) . where ( " updated_on>? " , date_from ) . each do | timeentry |
@project_activity_count [ timeentry . project_id ] += 1
end
#feedbackc_count
JournalsForMessage . where ( jour_id : @project_ids ) . each do | jourformess |
@project_activity_count [ jourformess . jour_id ] += 1
end
#@project_activity_count!=0
@project_all_array = [ ]
i = 0 ;
@projects_all . each do | project |
id = project . id
@project_all_array [ i ] = project
if @project_activity_count [ id ] == 0
@project_activity_count [ id ] = 1
end
i = i + 1
end
@project_activity_count_array = @project_activity_count . values ( )
#gcm end
case params [ :project_sort_type ]
when '0'
@projects = @projects_all . order ( " created_on desc " )
@s_type = 0
@projects = @projects . offset ( @project_pages . offset ) . limit ( @project_pages . per_page )
when '1'
@projects = @projects_all . order ( " course_ac_para desc " )
@s_type = 1
@projects = @projects . offset ( @project_pages . offset ) . limit ( @project_pages . per_page )
when '2'
@projects = @projects_all . order ( " watchers_count desc " )
@s_type = 2
@projects = @projects . offset ( @project_pages . offset ) . limit ( @project_pages . per_page )
#gcm
when '3'
@projects = desc_sort_course_by_avtivity ( @project_ids , @project_activity_count_array , @project_all_array )
@s_type = 3
@projects = @projects [ @project_pages . offset , @project_pages . per_page ]
#gcmend
else
@s_type = 0
@projects = @projects_all . order ( " created_on desc " )
@projects = @projects . offset ( @project_pages . offset ) . limit ( @project_pages . per_page )
end
@projects = @projects . offset ( @project_pages . offset ) . limit ( @project_pages . per_page )
respond_to do | format |
format . html {
@ -220,8 +356,8 @@ class ProjectsController < ApplicationController
def search
#modified by nie
project_type = params [ :project_type ]
projects_all = ( project_type . eql? Project :: ProjectType_ project) ? Project . project_entities : Project . course _entities
project_type = params [ :project_type ] . to_i
projects_all = ( project_type . eql? Project :: ProjectType_ course) ? Project . course_entities : Project . project _entities
@projects = projects_all . visible
@projects = @projects . visible . like ( params [ :name ] ) if params [ :name ] . present?
@offset , @limit = api_offset_and_limit ( { :limit = > 10 } )
@ -392,7 +528,8 @@ class ProjectsController < ApplicationController
# added by bai
@course . term = params [ :term ]
@course . time = params [ :time ]
@course . school_id = params [ :occupation ]
#@course.school_id = params[:occupation]
@course . school_id = User . current . user_extensions . school_id
@course . setup_time = params [ :setup_time ]
@course . endup_time = params [ :endup_time ]
@course . class_period = params [ :class_period ]
@ -575,7 +712,7 @@ class ProjectsController < ApplicationController
" show_journals_for_messages " = > true
}
@date_to || = Date . today + 1
@date_from = @date_to - @days
@date_from = @date_to - @days - 1 . years
@with_subprojects = params [ :with_subprojects ] . nil? ? Setting . display_subprojects_issues? : ( params [ :with_subprojects ] == '1' )
@author = ( params [ :user_id ] . blank? ? nil : User . active . find ( params [ :user_id ] ) )
# 决定显示所用用户或单个用户活动
@ -725,7 +862,7 @@ class ProjectsController < ApplicationController
if params [ :project ] [ :is_public ] == '0'
project_status = ProjectStatus . find_by_project_id ( @project . id )
project_status . destroy
project_status . destroy if project_status
elsif params [ :project ] [ :is_public ] == '1'
project_status = ProjectStatus . create ( :project_id = > @project . id , :watchers_count = > @project . watchers . count , :changesets_count = > @project . changesets . count , :grade = > 0 , :project_type = > @project . project_type )
end
@ -880,4 +1017,32 @@ class ProjectsController < ApplicationController
@users -= watched . watcher_users
end
end
def desc_sort_course_by_avtivity ( ids , activity_count , projects )
return projects if activity_count . size < 2
( activity_count . size - 2 ) . downto ( 0 ) do | i |
( 0 .. i ) . each do | j |
if activity_count [ j ] < activity_count [ j + 1 ]
projects [ j ] , projects [ j + 1 ] = projects [ j + 1 ] , projects [ j ]
activity_count [ j ] , activity_count [ j + 1 ] = activity_count [ j + 1 ] , activity_count [ j ]
end
end
end
return projects
# len=activity_count.length
# for i in 0...(len-1) do
# for j in 0...(len-i-1) do
# if activity_count[j]>activity_count[j+1] do
# count_temp=activity_count[j]
# activity_count[j]=activity_count[j+1]
# activity_count[j+1]=count_temp
# end
# end
# end
#desc_sort_course_by_avtivity(@project_ids,@project_activity_count_array,@projects_all)
end
end