@members_by_role = @project.members.find(:all, :include => [:user, :role], :order => 'position').group_by {|m| m.role}
@subprojects = @project.active_children
@news = @project.news.find(:all, :limit => 5, :include => [ :author, :project ], :order => "#{News.table_name}.created_on DESC")
- @trackers = @project.trackers
- @open_issues_by_tracker = Issue.count(:group => :tracker, :joins => "INNER JOIN #{IssueStatus.table_name} ON #{IssueStatus.table_name}.id = #{Issue.table_name}.status_id", :conditions => ["project_id=? and #{IssueStatus.table_name}.is_closed=?", @project.id, false])
- @total_issues_by_tracker = Issue.count(:group => :tracker, :conditions => ["project_id=?", @project.id])
+ @trackers = @project.rolled_up_trackers
+ Issue.visible_by(User.current) do
+ @open_issues_by_tracker = Issue.count(:group => :tracker,
+ :include => [:project, :status, :tracker],
+ :conditions => ["(#{Project.table_name}.id=? OR #{Project.table_name}.parent_id=?) and #{IssueStatus.table_name}.is_closed=?", @project.id, @project.id, false])
+ @total_issues_by_tracker = Issue.count(:group => :tracker,
+ :include => [:project, :status, :tracker],
+ :conditions => ["#{Project.table_name}.id=? OR #{Project.table_name}.parent_id=?", @project.id, @project.id])
+ end
TimeEntry.visible_by(User.current) do
@total_hours = TimeEntry.sum(:hours,
:include => :project,
@year ||= Date.today.year
@month ||= Date.today.month
@calendar = Redmine::Helpers::Calendar.new(Date.civil(@year, @month, 1), current_language, :month)
-
+ @with_subprojects = params[:with_subprojects].nil? ? true : (params[:with_subprojects] == '1')
events = []
- @project.issues_with_subprojects(params[:with_subprojects]) do
+ @project.issues_with_subprojects(@with_subprojects) do
events += Issue.find(:all,
:include => [:tracker, :status, :assigned_to, :priority, :project],
:conditions => ["((start_date BETWEEN ? AND ?) OR (due_date BETWEEN ? AND ?)) AND #{Issue.table_name}.tracker_id IN (#{@selected_tracker_ids.join(',')})", @calendar.startdt, @calendar.enddt, @calendar.startdt, @calendar.enddt]
@date_from = Date.civil(@year_from, @month_from, 1)
@date_to = (@date_from >> @months) - 1
+ @with_subprojects = params[:with_subprojects].nil? ? true : (params[:with_subprojects] == '1')
@events = []
- @project.issues_with_subprojects(params[:with_subprojects]) do
+ @project.issues_with_subprojects(@with_subprojects) do
@events += Issue.find(:all,
:order => "start_date, due_date",
:include => [:tracker, :status, :assigned_to, :priority, :project],
def soonest_start
@soonest_start ||= relations_to.collect{|relation| relation.successor_soonest_start}.compact.min
end
+
+ def self.visible_by(usr)
+ with_scope(:find => { :conditions => Project.visible_by(usr) }) do
+ yield
+ end
+ end
end
@@operators_by_filter_type = { :list => [ "=", "!" ],
:list_status => [ "o", "=", "!", "c", "*" ],
:list_optional => [ "=", "!", "!*", "*" ],
- :list_one_or_more => [ "*", "=" ],
+ :list_subprojects => [ "*", "!*", "=" ],
:date => [ "<t+", ">t+", "t+", "t", "w", ">t-", "<t-", "t-" ],
:date_past => [ ">t-", "<t-", "t-", "t", "w" ],
:string => [ "=", "~", "!", "!~" ],
@available_filters["category_id"] = { :type => :list_optional, :order => 6, :values => @project.issue_categories.collect{|s| [s.name, s.id.to_s] } }
@available_filters["fixed_version_id"] = { :type => :list_optional, :order => 7, :values => @project.versions.sort.collect{|s| [s.name, s.id.to_s] } }
unless @project.active_children.empty?
- @available_filters["subproject_id"] = { :type => :list_one_or_more, :order => 13, :values => @project.active_children.collect{|s| [s.name, s.id.to_s] } }
+ @available_filters["subproject_id"] = { :type => :list_subprojects, :order => 13, :values => @project.active_children.collect{|s| [s.name, s.id.to_s] } }
end
@project.all_custom_fields.select(&:is_filter?).each do |field|
case field.field_format
def statement
# project/subprojects clause
clause = ''
- if project && has_filter?("subproject_id")
- subproject_ids = []
- if operator_for("subproject_id") == "="
- subproject_ids = values_for("subproject_id").each(&:to_i)
+ if project && !@project.active_children.empty?
+ ids = [project.id]
+ if has_filter?("subproject_id") && operator_for("subproject_id") == "="
+ # include the selected subprojects
+ ids += values_for("subproject_id").each(&:to_i)
else
- subproject_ids = project.active_children.collect{|p| p.id}
+ # include all the subprojects unless 'none' is selected
+ ids += project.active_children.collect{|p| p.id} unless has_filter?("subproject_id") && operator_for("subproject_id") == "!*"
end
- clause << "#{Issue.table_name}.project_id IN (%d,%s)" % [project.id, subproject_ids.join(",")] if project
+ clause << "#{Issue.table_name}.project_id IN (%s)" % ids.join(',')
elsif project
- clause << "#{Issue.table_name}.project_id=%d" % project.id
+ clause << "#{Issue.table_name}.project_id = %d" % project.id
else
clause << Project.visible_by(User.current)
end
<label><%= check_box_tag "tracker_ids[]", tracker.id, (@selected_tracker_ids.include? tracker.id.to_s) %> <%= tracker.name %></label><br />
<% end %>
<% if @project.active_children.any? %>
- <br /><label><%= check_box_tag "with_subprojects", 1, params[:with_subprojects] %> <%=l(:label_subproject_plural)%></label>
+ <br /><label><%= check_box_tag 'with_subprojects', 1, @with_subprojects %> <%=l(:label_subproject_plural)%></label>
+ <%= hidden_field_tag 'with_subprojects', 0 %>
<% end %>
- <p><%= submit_tag l(:button_apply), :class => 'button-small' %></p>
+ <p><%= submit_tag l(:button_apply), :class => 'button-small', :name => nil %></p>
<% end %>
<% end %>
<label><%= check_box_tag "tracker_ids[]", tracker.id, (@selected_tracker_ids.include? tracker.id.to_s) %> <%= tracker.name %></label><br />
<% end %>
<% if @project.active_children.any? %>
- <br /><label><%= check_box_tag "with_subprojects", 1, params[:with_subprojects] %> <%=l(:label_subproject_plural)%></label>
+ <br /><label><%= check_box_tag 'with_subprojects', 1, @with_subprojects %> <%=l(:label_subproject_plural)%></label>
+ <%= hidden_field_tag 'with_subprojects', 0 %>
<% end %>
<p><%= submit_tag l(:button_apply), :class => 'button-small' %></p>
<% end %>
<td valign="top">
<div id="div_values_<%= field %>" style="display:none;">
<% case options[:type]
- when :list, :list_optional, :list_status, :list_one_or_more %>
+ when :list, :list_optional, :list_status, :list_subprojects %>
<select <%= "multiple=true" if query.values_for(field) and query.values_for(field).length > 1 %> name="values[<%= field %>][]" id="values_<%= field %>" class="select-small" style="vertical-align: top;">
<%= options_for_select options[:values], query.values_for(field) %>
</select>