| 2 |
2 |
|
| 3 |
3 |
module RedmineTags
|
| 4 |
4 |
module Patches
|
| 5 |
|
module ProjectsControllerPatch
|
|
5 |
module ProjectsControllerPatch
|
| 6 |
6 |
def self.included(base)
|
| 7 |
7 |
base.send(:include, InstanceMethods)
|
| 8 |
8 |
base.class_eval do
|
| 9 |
9 |
unloadable
|
|
10 |
skip_before_filter :authorize, :only => [:set_fieldset_status]
|
|
11 |
skip_before_filter :find_project, :only => [:set_fieldset_status]
|
| 10 |
12 |
before_filter :add_tags_to_project, :only => [:save, :update]
|
| 11 |
|
before_filter :filter_projects, :only => :index
|
|
13 |
# before_filter :filter_projects, :only => :index
|
|
14 |
|
|
15 |
alias :index filtered_index
|
| 12 |
16 |
end
|
| 13 |
17 |
end
|
| 14 |
18 |
|
| 15 |
19 |
module InstanceMethods
|
|
20 |
|
|
21 |
|
|
22 |
|
| 16 |
23 |
def add_tags_to_project
|
| 17 |
24 |
|
| 18 |
25 |
if params && params[:project] && !params[:project][:tag_list].nil?
|
| ... | ... | |
| 25 |
32 |
end
|
| 26 |
33 |
end
|
| 27 |
34 |
|
| 28 |
|
# # luisf - TO BE REMOVED?
|
| 29 |
|
# def calculate_project_filtering_settings
|
| 30 |
|
# @project_filtering_settings = Setting[:plugin_redmine_project_filtering]
|
| 31 |
|
# end
|
|
35 |
def paginate_projects
|
|
36 |
sort_init 'name'
|
|
37 |
sort_update %w(name lft created_on updated_on)
|
|
38 |
@limit = per_page_option
|
|
39 |
@project_count = Project.visible_roots.find(@projects).count
|
|
40 |
@project_pages = ActionController::Pagination::Paginator.new self, @project_count, @limit, params['page']
|
|
41 |
@offset ||= @project_pages.current.offset
|
|
42 |
end
|
| 32 |
43 |
|
| 33 |
|
def filter_projects
|
|
44 |
def set_fieldset_status
|
|
45 |
|
|
46 |
# luisf. test for missing parameters………
|
|
47 |
field = params[:field_id]
|
|
48 |
status = params[:status]
|
|
49 |
|
|
50 |
session[(field + "_status").to_sym] = status
|
|
51 |
logger.error { "SET - DEBUG-ME #{session.inspect}" }
|
|
52 |
|
|
53 |
render :nothing => true
|
|
54 |
end
|
|
55 |
|
|
56 |
# gets the status of the collabsible fieldsets
|
|
57 |
def get_fieldset_statuses
|
|
58 |
if session[:my_projects_fieldset_status].nil?
|
|
59 |
@myproj_status = true
|
|
60 |
else
|
|
61 |
@myproj_status = session[:my_projects_fieldset_status]
|
|
62 |
end
|
|
63 |
|
|
64 |
if session[:filters_fieldset_status].nil?
|
|
65 |
@filter_status = false
|
|
66 |
else
|
|
67 |
@filter_status = session[:filters_fieldset_status]
|
|
68 |
end
|
|
69 |
end
|
|
70 |
|
|
71 |
# Lists visible projects. Paginator is for top-level projects only
|
|
72 |
# (subprojects belong to them)
|
|
73 |
def filtered_index
|
| 34 |
74 |
@project = Project.new
|
|
75 |
filter_projects
|
|
76 |
get_fieldset_statuses
|
| 35 |
77 |
|
| 36 |
78 |
respond_to do |format|
|
| 37 |
|
format.any(:html, :xml) {
|
| 38 |
|
calculate_filtered_projects
|
|
79 |
format.html {
|
|
80 |
paginate_projects
|
|
81 |
@projects = Project.visible_roots.find(@projects, :offset => @offset, :limit => @limit, :order => sort_clause)
|
|
82 |
|
|
83 |
if User.current.logged?
|
|
84 |
# seems sort_by gives us case-sensitive ordering, which we don't want
|
|
85 |
# @user_projects = User.current.projects.sort_by(&:name)
|
|
86 |
@user_projects = User.current.projects.all(:order => :name)
|
|
87 |
end
|
|
88 |
|
|
89 |
render :template => 'projects/index.rhtml', :layout => !request.xhr?
|
|
90 |
}
|
|
91 |
format.api {
|
|
92 |
@offset, @limit = api_offset_and_limit
|
|
93 |
@project_count = Project.visible.count
|
|
94 |
@projects = Project.visible.find(@projects, :offset => @offset, :limit => @limit, :order => 'lft')
|
|
95 |
}
|
|
96 |
format.atom {
|
|
97 |
projects = Project.visible.find(:all, :order => 'created_on DESC', :limit => Setting.feeds_limit.to_i)
|
|
98 |
render_feed(projects, :title => "#{Setting.app_title}: #{l(:label_project_latest)}")
|
| 39 |
99 |
}
|
| 40 |
100 |
format.js {
|
| 41 |
|
calculate_filtered_projects
|
|
101 |
paginate_projects
|
|
102 |
@projects = Project.visible_roots.find(@projects, :offset => @offset, :limit => @limit, :order => sort_clause)
|
| 42 |
103 |
render :update do |page|
|
| 43 |
104 |
page.replace_html 'projects', :partial => 'filtered_projects'
|
| 44 |
105 |
end
|
| 45 |
106 |
}
|
| 46 |
|
format.atom {
|
| 47 |
|
projects = Project.visible.find(:all, :order => 'created_on DESC',
|
| 48 |
|
:limit => Setting.feeds_limit.to_i)
|
| 49 |
|
render_feed(projects, :title => "#{Setting.app_title}: #{l(:label_project_latest)}")
|
| 50 |
|
}
|
| 51 |
107 |
end
|
| 52 |
108 |
end
|
| 53 |
109 |
|
| 54 |
110 |
private
|
| 55 |
111 |
|
| 56 |
|
def calculate_filtered_projects
|
|
112 |
def filter_projects
|
| 57 |
113 |
@question = (params[:q] || "").strip
|
| 58 |
114 |
|
| 59 |
115 |
if params.has_key?(:project)
|
| ... | ... | |
| 64 |
120 |
|
| 65 |
121 |
@projects = Project.visible
|
| 66 |
122 |
|
| 67 |
|
@featured_projects = @projects.featured if Project.respond_to? :featured
|
| 68 |
|
|
| 69 |
123 |
# luisf
|
| 70 |
124 |
@projects = @projects.search_by_question(@question) unless @question == ""
|
| 71 |
125 |
@tagged_projects_ids = Project.tagged_with(@tag_list).collect{ |project| Project.find(project.id) } unless @tag_list.empty?
|
| 72 |
126 |
|
| 73 |
|
debugger
|
| 74 |
|
|
| 75 |
127 |
# intersection of both prject groups
|
| 76 |
|
@projects = @projects && @tagged_projects_ids unless @tag_list.empty?
|
| 77 |
|
|
| 78 |
|
debugger
|
| 79 |
|
@filtered_projects = @projects
|
|
128 |
@projects = @projects & @tagged_projects_ids unless @tag_list.empty?
|
| 80 |
129 |
end
|
| 81 |
130 |
end
|
| 82 |
131 |
end
|