##// END OF EJS Templates
Improved on-the-fly account creation. If some attributes are missing (eg. not present in the LDAP) or are invalid, the registration form is displayed so that the user is able to fill or fix these attributes....
Improved on-the-fly account creation. If some attributes are missing (eg. not present in the LDAP) or are invalid, the registration form is displayed so that the user is able to fill or fix these attributes. git-svn-id: http://redmine.rubyforge.org/svn/trunk@1678 e93f8b46-1217-0410-a6f0-8f06a7374b81

File last commit:

r1628:bfba84d526f8
r1661:eb1d969237a9
Show More
projects_controller.rb
437 lines | 20.2 KiB | text/x-ruby | RubyLexer
/ app / controllers / projects_controller.rb
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 # redMine - project management software
# Copyright (C) 2006-2007 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class ProjectsController < ApplicationController
layout 'base'
Jean-Philippe Lang
Highlight the current item of the main menu....
r1062 menu_item :overview
menu_item :activity, :only => :activity
menu_item :roadmap, :only => :roadmap
menu_item :files, :only => [:list_files, :add_file]
menu_item :settings, :only => :settings
Jean-Philippe Lang
Issue list now supports bulk edit/move/delete (#563, #607). For now, issues from different projects can not be bulk edited/moved/deleted at once....
r1116 menu_item :issues, :only => [:changelog]
Jean-Philippe Lang
Highlight the current item of the main menu....
r1062
Jean-Philippe Lang
Activity enhancements:...
r1213 before_filter :find_project, :except => [ :index, :list, :add, :activity ]
before_filter :find_optional_project, :only => :activity
before_filter :authorize, :except => [ :index, :list, :add, :archive, :unarchive, :destroy, :activity ]
Jean-Philippe Lang
Added the ability to archive projects:...
r546 before_filter :require_admin, :only => [ :add, :archive, :unarchive, :destroy ]
Jean-Philippe Lang
Merged 0.6 branch into trunk....
r663 accept_key_auth :activity, :calendar
Jean-Philippe Lang
Added fragment caching for calendar and gantt views...
r512
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 helper :sort
include SortHelper
helper :custom_fields
include CustomFieldsHelper
helper :ifpdf
include IfpdfHelper
Jean-Philippe Lang
Performance improvement on calendar and gantt (about 45% on gantt for large number of issues)....
r783 helper :issues
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 helper IssuesHelper
helper :queries
include QueriesHelper
Jean-Philippe Lang
Added basic support for CVS and Mercurial SCMs....
r556 helper :repositories
include RepositoriesHelper
Jean-Philippe Lang
Gantt chart can now be exported to a graphic file (png)....
r660 include ProjectsHelper
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330
Jean-Philippe Lang
Main project list now displays root projects with their subprojects....
r718 # Lists visible projects
Jean-Philippe Lang
Moved ProjectsController#list to ProjectsController#index....
r1450 def index
Jean-Philippe Lang
Main project list now displays root projects with their subprojects....
r718 projects = Project.find :all,
Jean-Philippe Lang
Anonymous users can now be allowed to create, edit, comment issues, comment news and post messages in the forums....
r906 :conditions => Project.visible_by(User.current),
Jean-Philippe Lang
Main project list now displays root projects with their subprojects....
r718 :include => :parent
Jean-Philippe Lang
Adds new projects atom feed (#1290)....
r1451 respond_to do |format|
format.html {
@project_tree = projects.group_by {|p| p.parent || p}
Jean-Philippe Lang
Merged Rails 2.1 compatibility branch....
r1609 @project_tree.keys.each {|p| @project_tree[p] -= [p]}
Jean-Philippe Lang
Adds new projects atom feed (#1290)....
r1451 }
format.atom {
render_feed(projects.sort_by(&:created_on).reverse.slice(0, Setting.feeds_limit.to_i),
:title => "#{Setting.app_title}: #{l(:label_project_latest)}")
}
end
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
Jean-Philippe Lang
Main project list now displays root projects with their subprojects....
r718
Jean-Philippe Lang
Initial commit...
r2 # Add a new project
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 def add
Jean-Philippe Lang
Custom fields refactoring: most of code moved from controllers to models (using new module ActsAsCustomizable)....
r1578 @issue_custom_fields = IssueCustomField.find(:all, :order => "#{CustomField.table_name}.position")
Jean-Philippe Lang
Added per-project tracker selection. Trackers can be selected on project settings....
r907 @trackers = Tracker.all
Jean-Philippe Lang
Project name format limitation removed (name can now contain any character)....
r936 @root_projects = Project.find(:all,
:conditions => "parent_id IS NULL AND status = #{Project::STATUS_ACTIVE}",
:order => 'name')
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 @project = Project.new(params[:project])
if request.get?
Jean-Philippe Lang
Added per-project tracker selection. Trackers can be selected on project settings....
r907 @project.trackers = Tracker.all
Jean-Philippe Lang
Adds a setting for whether new projects should be public by default (closes #842, #839)....
r1221 @project.is_public = Setting.default_projects_public?
Jean-Philippe Lang
Fixed: Modules selection not remembered when new project creation fails (#1109)....
r1343 @project.enabled_module_names = Redmine::AccessControl.available_project_modules
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 else
Jean-Philippe Lang
Fixed: Modules selection not remembered when new project creation fails (#1109)....
r1343 @project.enabled_module_names = params[:enabled_modules]
Jean-Philippe Lang
v0.2.0...
r5 if @project.save
Jean-Philippe Lang
notice messages translation...
r15 flash[:notice] = l(:notice_successful_create)
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 redirect_to :controller => 'admin', :action => 'projects'
Jean-Philippe Lang
Fixed: Modules selection not remembered when new project creation fails (#1109)....
r1343 end
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
end
# Show @project
def show
Jean-Philippe Lang
Various changes on views. On project summary, members are now grouped by role and subprojects are listed inline....
r431 @members_by_role = @project.members.find(:all, :include => [:user, :role], :order => 'position').group_by {|m| m.role}
Jean-Philippe Lang
Fixed: private subprojects names are revealed on the project overview (#1152)....
r1384 @subprojects = @project.children.find(:all, :conditions => Project.visible_by(User.current))
Jean-Philippe Lang
fixed #9308 table_name pre/suffix support...
r334 @news = @project.news.find(:all, :limit => 5, :include => [ :author, :project ], :order => "#{News.table_name}.created_on DESC")
Jean-Philippe Lang
Include subprojects on the issue list, calendar and gantt by default....
r1164 @trackers = @project.rolled_up_trackers
Jean-Philippe Lang
If 'Display subprojects issues on main projects' is set to false:...
r1283
cond = @project.project_condition(Setting.display_subprojects_issues?)
Jean-Philippe Lang
Include subprojects on the issue list, calendar and gantt by default....
r1164 Issue.visible_by(User.current) do
@open_issues_by_tracker = Issue.count(:group => :tracker,
:include => [:project, :status, :tracker],
Jean-Philippe Lang
If 'Display subprojects issues on main projects' is set to false:...
r1283 :conditions => ["(#{cond}) AND #{IssueStatus.table_name}.is_closed=?", false])
Jean-Philippe Lang
Include subprojects on the issue list, calendar and gantt by default....
r1164 @total_issues_by_tracker = Issue.count(:group => :tracker,
:include => [:project, :status, :tracker],
Jean-Philippe Lang
If 'Display subprojects issues on main projects' is set to false:...
r1283 :conditions => cond)
Jean-Philippe Lang
Include subprojects on the issue list, calendar and gantt by default....
r1164 end
Jean-Philippe Lang
Propagates time tracking to the parent project (closes #433). Time report enhancements....
r1162 TimeEntry.visible_by(User.current) do
@total_hours = TimeEntry.sum(:hours,
:include => :project,
Jean-Philippe Lang
If 'Display subprojects issues on main projects' is set to false:...
r1283 :conditions => cond).to_f
Jean-Philippe Lang
Propagates time tracking to the parent project (closes #433). Time report enhancements....
r1162 end
Jean-Philippe Lang
Merged 0.6 branch into trunk....
r663 @key = User.current.rss_key
Jean-Philippe Lang
v0.2.0...
r5 end
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330
def settings
Jean-Philippe Lang
Project name format limitation removed (name can now contain any character)....
r936 @root_projects = Project.find(:all,
:conditions => ["parent_id IS NULL AND status = #{Project::STATUS_ACTIVE} AND id <> ?", @project.id],
:order => 'name')
Jean-Philippe Lang
Custom fields refactoring: most of code moved from controllers to models (using new module ActsAsCustomizable)....
r1578 @issue_custom_fields = IssueCustomField.find(:all, :order => "#{CustomField.table_name}.position")
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 @issue_category ||= IssueCategory.new
@member ||= @project.members.new
Jean-Philippe Lang
Added per-project tracker selection. Trackers can be selected on project settings....
r907 @trackers = Tracker.all
Jean-Philippe Lang
Added project module concept....
r714 @repository ||= @project.repository
@wiki ||= @project.wiki
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
# Edit @project
def edit
if request.post?
@project.attributes = params[:project]
Jean-Philippe Lang
svn browser merged in trunk...
r103 if @project.save
Jean-Philippe Lang
notice messages translation...
r15 flash[:notice] = l(:notice_successful_update)
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 redirect_to :action => 'settings', :id => @project
else
settings
render :action => 'settings'
end
Jean-Philippe Lang
v0.2.0...
r5 end
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
Jean-Philippe Lang
Added project module concept....
r714
def modules
@project.enabled_module_names = params[:enabled_modules]
redirect_to :action => 'settings', :id => @project, :tab => 'modules'
end
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330
Jean-Philippe Lang
Added the ability to archive projects:...
r546 def archive
@project.archive if request.post? && @project.active?
redirect_to :controller => 'admin', :action => 'projects'
end
def unarchive
@project.unarchive if request.post? && !@project.active?
redirect_to :controller => 'admin', :action => 'projects'
end
Jean-Philippe Lang
0.3 unstable...
r10 # Delete @project
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 def destroy
Jean-Philippe Lang
Added the ability to archive projects:...
r546 @project_to_destroy = @project
Jean-Philippe Lang
Initial commit...
r2 if request.post? and params[:confirm]
Jean-Philippe Lang
Added the ability to archive projects:...
r546 @project_to_destroy.destroy
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 redirect_to :controller => 'admin', :action => 'projects'
end
Jean-Philippe Lang
Added the ability to archive projects:...
r546 # hide project in layout
@project = nil
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
# Add a new issue category to @project
def add_issue_category
Jean-Philippe Lang
Each category can now be associated to a user, so that new issues in that category are automatically assigned to that user....
r574 @category = @project.issue_categories.build(params[:category])
if request.post? and @category.save
Jean-Philippe Lang
Added a link to add a new category when creating or editing an issue....
r642 respond_to do |format|
format.html do
flash[:notice] = l(:notice_successful_create)
redirect_to :action => 'settings', :tab => 'categories', :id => @project
end
format.js do
# IE doesn't support the replace_html rjs method for select box options
render(:update) {|page| page.replace "issue_category_id",
content_tag('select', '<option></option>' + options_from_collection_for_select(@project.issue_categories, 'id', 'name', @category.id), :id => 'issue_category_id', :name => 'issue[category_id]')
}
end
end
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
Jean-Philippe Lang
Each category can now be associated to a user, so that new issues in that category are automatically assigned to that user....
r574 end
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330
# Add a new version to @project
def add_version
@version = @project.versions.build(params[:version])
if request.post? and @version.save
flash[:notice] = l(:notice_successful_create)
redirect_to :action => 'settings', :tab => 'versions', :id => @project
end
end
def add_file
if request.post?
@version = @project.versions.find_by_id(params[:version_id])
Jean-Philippe Lang
Ported r1009 from 0.6-stable branch....
r1000 attachments = attach_files(@version, params[:attachments])
Jean-Philippe Lang
Added ApplicationController#attach_files as a common method to attach files in all actions....
r977 Mailer.deliver_attachments_added(attachments) if !attachments.empty? && Setting.notified_events.include?('file_added')
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 redirect_to :controller => 'projects', :action => 'list_files', :id => @project
end
Jean-Philippe Lang
Versions can now be created with no date....
r533 @versions = @project.versions.sort
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
def list_files
Jean-Philippe Lang
Make the project files list sortable (#997)....
r1315 sort_init "#{Attachment.table_name}.filename", "asc"
sort_update
@versions = @project.versions.find(:all, :include => :attachments, :order => sort_clause).sort.reverse
render :layout => !request.xhr?
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
# Show changelog for @project
def changelog
Jean-Philippe Lang
Added per-project tracker selection. Trackers can be selected on project settings....
r907 @trackers = @project.trackers.find(:all, :conditions => ["is_in_chlog=?", true], :order => 'position')
Jean-Philippe Lang
Versions can now be created with no date....
r533 retrieve_selected_tracker_ids(@trackers)
@versions = @project.versions.sort
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
def roadmap
Jean-Philippe Lang
Added per-project tracker selection. Trackers can be selected on project settings....
r907 @trackers = @project.trackers.find(:all, :conditions => ["is_in_roadmap=?", true])
Jean-Philippe Lang
Versions can now be created with no date....
r533 retrieve_selected_tracker_ids(@trackers)
Jean-Philippe Lang
Overdue versions (date reached and open issues > 0) are now always displayed on the roadmap....
r601 @versions = @project.versions.sort
@versions = @versions.select {|v| !v.completed? } unless params[:completed]
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
def activity
Jean-Philippe Lang
Display the last 30 days on the activity view rather than the current month....
r1182 @days = Setting.activity_days_default.to_i
if params[:from]
begin; @date_to = params[:from].to_date; rescue; end
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
Jean-Philippe Lang
Display the last 30 days on the activity view rather than the current month....
r1182 @date_to ||= Date.today + 1
@date_from = @date_to - @days
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330
Jean-Philippe Lang
Added forums topics on the activity view (disabled by default)....
r878 @event_types = %w(issues news files documents changesets wiki_pages messages)
Jean-Philippe Lang
Activity enhancements:...
r1213 if @project
@event_types.delete('wiki_pages') unless @project.wiki
@event_types.delete('changesets') unless @project.repository
@event_types.delete('messages') unless @project.boards.any?
# only show what the user is allowed to view
@event_types = @event_types.select {|o| User.current.allowed_to?("view_#{o}".to_sym, @project)}
@with_subprojects = params[:with_subprojects].nil? ? Setting.display_subprojects_issues? : (params[:with_subprojects] == '1')
end
Jean-Philippe Lang
Merged 0.6 branch into trunk....
r663 @scope = @event_types.select {|t| params["show_#{t}"]}
# default events if none is specified in parameters
Jean-Philippe Lang
Added forums topics on the activity view (disabled by default)....
r878 @scope = (@event_types - %w(wiki_pages messages))if @scope.empty?
Jean-Philippe Lang
Merged 0.6 branch into trunk....
r663
@events = []
if @scope.include?('issues')
Jean-Philippe Lang
Activity enhancements:...
r1213 cond = ARCondition.new(Project.allowed_to_condition(User.current, :view_issues, :project => @project, :with_subprojects => @with_subprojects))
cond.add(["#{Issue.table_name}.created_on BETWEEN ? AND ?", @date_from, @date_to])
@events += Issue.find(:all, :include => [:project, :author, :tracker], :conditions => cond.conditions)
cond = ARCondition.new(Project.allowed_to_condition(User.current, :view_issues, :project => @project, :with_subprojects => @with_subprojects))
Jean-Philippe Lang
Display issue notes in the activity view (#1509)....
r1553 cond.add(["#{Journal.table_name}.journalized_type = 'Issue' AND #{Journal.table_name}.created_on BETWEEN ? AND ?", @date_from, @date_to])
cond.add("#{JournalDetail.table_name}.prop_key = 'status_id' OR #{Journal.table_name}.notes <> ''")
Jean-Philippe Lang
Activity enhancements:...
r1213 @events += Journal.find(:all, :include => [{:issue => :project}, :details, :user], :conditions => cond.conditions)
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
Jean-Philippe Lang
Merged 0.6 branch into trunk....
r663 if @scope.include?('news')
Jean-Philippe Lang
Activity enhancements:...
r1213 cond = ARCondition.new(Project.allowed_to_condition(User.current, :view_news, :project => @project, :with_subprojects => @with_subprojects))
cond.add(["#{News.table_name}.created_on BETWEEN ? AND ?", @date_from, @date_to])
@events += News.find(:all, :include => [:project, :author], :conditions => cond.conditions)
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
Jean-Philippe Lang
Project activity view now only shows what the user is allowed to view....
r746 if @scope.include?('files')
Jean-Philippe Lang
Activity enhancements:...
r1213 cond = ARCondition.new(Project.allowed_to_condition(User.current, :view_files, :project => @project, :with_subprojects => @with_subprojects))
cond.add(["#{Attachment.table_name}.created_on BETWEEN ? AND ?", @date_from, @date_to])
@events += Attachment.find(:all, :select => "#{Attachment.table_name}.*",
:joins => "LEFT JOIN #{Version.table_name} ON #{Attachment.table_name}.container_type='Version' AND #{Version.table_name}.id = #{Attachment.table_name}.container_id " +
"LEFT JOIN #{Project.table_name} ON #{Version.table_name}.project_id = #{Project.table_name}.id",
:conditions => cond.conditions)
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
Jean-Philippe Lang
Merged 0.6 branch into trunk....
r663 if @scope.include?('documents')
Jean-Philippe Lang
Activity enhancements:...
r1213 cond = ARCondition.new(Project.allowed_to_condition(User.current, :view_documents, :project => @project, :with_subprojects => @with_subprojects))
cond.add(["#{Document.table_name}.created_on BETWEEN ? AND ?", @date_from, @date_to])
@events += Document.find(:all, :include => :project, :conditions => cond.conditions)
cond = ARCondition.new(Project.allowed_to_condition(User.current, :view_documents, :project => @project, :with_subprojects => @with_subprojects))
cond.add(["#{Attachment.table_name}.created_on BETWEEN ? AND ?", @date_from, @date_to])
@events += Attachment.find(:all, :select => "#{Attachment.table_name}.*",
:joins => "LEFT JOIN #{Document.table_name} ON #{Attachment.table_name}.container_type='Document' AND #{Document.table_name}.id = #{Attachment.table_name}.container_id " +
"LEFT JOIN #{Project.table_name} ON #{Document.table_name}.project_id = #{Project.table_name}.id",
:conditions => cond.conditions)
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
Jean-Philippe Lang
Project activity view now only shows what the user is allowed to view....
r746 if @scope.include?('wiki_pages')
Jean-Philippe Lang
Fixed: 10342 Creation of Schema in Oracle...
r476 select = "#{WikiContent.versioned_table_name}.updated_on, #{WikiContent.versioned_table_name}.comments, " +
Jean-Philippe Lang
Merged 0.6 branch into trunk....
r663 "#{WikiContent.versioned_table_name}.#{WikiContent.version_column}, #{WikiPage.table_name}.title, " +
"#{WikiContent.versioned_table_name}.page_id, #{WikiContent.versioned_table_name}.author_id, " +
"#{WikiContent.versioned_table_name}.id"
Jean-Philippe Lang
patch #9429 Display Wiki edits in activity log (Nick Read)...
r367 joins = "LEFT JOIN #{WikiPage.table_name} ON #{WikiPage.table_name}.id = #{WikiContent.versioned_table_name}.page_id " +
Jean-Philippe Lang
Activity enhancements:...
r1213 "LEFT JOIN #{Wiki.table_name} ON #{Wiki.table_name}.id = #{WikiPage.table_name}.wiki_id " +
"LEFT JOIN #{Project.table_name} ON #{Project.table_name}.id = #{Wiki.table_name}.project_id"
Jean-Philippe Lang
patch #9429 Display Wiki edits in activity log (Nick Read)...
r367
Jean-Philippe Lang
Activity enhancements:...
r1213 cond = ARCondition.new(Project.allowed_to_condition(User.current, :view_wiki_pages, :project => @project, :with_subprojects => @with_subprojects))
cond.add(["#{WikiContent.versioned_table_name}.updated_on BETWEEN ? AND ?", @date_from, @date_to])
@events += WikiContent.versioned_class.find(:all, :select => select, :joins => joins, :conditions => cond.conditions)
Jean-Philippe Lang
patch #9429 Display Wiki edits in activity log (Nick Read)...
r367 end
Jean-Philippe Lang
Project activity view now only shows what the user is allowed to view....
r746 if @scope.include?('changesets')
Jean-Philippe Lang
Activity enhancements:...
r1213 cond = ARCondition.new(Project.allowed_to_condition(User.current, :view_changesets, :project => @project, :with_subprojects => @with_subprojects))
cond.add(["#{Changeset.table_name}.committed_on BETWEEN ? AND ?", @date_from, @date_to])
@events += Changeset.find(:all, :include => {:repository => :project}, :conditions => cond.conditions)
Jean-Philippe Lang
SVN commits are now stored in the database, and added to the activity view and the search engine....
r374 end
Jean-Philippe Lang
Added forums topics on the activity view (disabled by default)....
r878 if @scope.include?('messages')
Jean-Philippe Lang
Activity enhancements:...
r1213 cond = ARCondition.new(Project.allowed_to_condition(User.current, :view_messages, :project => @project, :with_subprojects => @with_subprojects))
cond.add(["#{Message.table_name}.created_on BETWEEN ? AND ?", @date_from, @date_to])
@events += Message.find(:all, :include => [{:board => :project}, :author], :conditions => cond.conditions)
Jean-Philippe Lang
Added forums topics on the activity view (disabled by default)....
r878 end
Jean-Philippe Lang
Merged 0.6 branch into trunk....
r663 @events_by_day = @events.group_by(&:event_date)
respond_to do |format|
format.html { render :layout => false if request.xhr? }
Jean-Philippe Lang
Better naming of activity feed if only one kind of event is displayed (#1323)....
r1628 format.atom {
title = (@scope.size == 1) ? l("label_#{@scope.first.singularize}_plural") : l(:label_activity)
render_feed(@events, :title => "#{@project || Setting.app_title}: #{title}")
}
Jean-Philippe Lang
Merged 0.6 branch into trunk....
r663 end
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
def calendar
Jean-Philippe Lang
On the calendar, the gantt and in the Tracker filter on the issue list, only active trackers of the project (and its sub projects) can be selected....
r1057 @trackers = @project.rolled_up_trackers
Jean-Philippe Lang
Patch #9705 Tracker filtering on Main Calendar (Jeffrey Jones)...
r392 retrieve_selected_tracker_ids(@trackers)
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 if params[:year] and params[:year].to_i > 1900
@year = params[:year].to_i
if params[:month] and params[:month].to_i > 0 and params[:month].to_i < 13
@month = params[:month].to_i
end
end
@year ||= Date.today.year
Jean-Philippe Lang
Calendar:...
r804 @month ||= Date.today.month
@calendar = Redmine::Helpers::Calendar.new(Date.civil(@year, @month, 1), current_language, :month)
Jean-Philippe Lang
Adds an application setting to choose whether or not subprojects issues should be displayed by default on the issue list, calendar and gantt (r1178). Default is true....
r1184 @with_subprojects = params[:with_subprojects].nil? ? Setting.display_subprojects_issues? : (params[:with_subprojects] == '1')
Jean-Philippe Lang
Calendar:...
r804 events = []
Jean-Philippe Lang
Include subprojects on the issue list, calendar and gantt by default....
r1164 @project.issues_with_subprojects(@with_subprojects) do
Jean-Philippe Lang
Calendar:...
r804 events += Issue.find(:all,
Jean-Philippe Lang
Subproject name displayed on issue list, calendar and gantt (only for issues that belong to a subproject)....
r481 :include => [:tracker, :status, :assigned_to, :priority, :project],
Jean-Philippe Lang
Calendar:...
r804 :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]
Jean-Philippe Lang
Added the ability to include subprojects issues on calendar & gantt (options box)...
r395 ) unless @selected_tracker_ids.empty?
Jean-Philippe Lang
Include subprojects versions on calendar and gantt (#1116)....
r1349 events += Version.find(:all, :include => :project,
:conditions => ["effective_date BETWEEN ? AND ?", @calendar.startdt, @calendar.enddt])
Jean-Philippe Lang
Added the ability to include subprojects issues on calendar & gantt (options box)...
r395 end
Jean-Philippe Lang
Calendar:...
r804 @calendar.events = events
Jean-Philippe Lang
Patch #9705 Tracker filtering on Main Calendar (Jeffrey Jones)...
r392
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 render :layout => false if request.xhr?
end
def gantt
Jean-Philippe Lang
On the calendar, the gantt and in the Tracker filter on the issue list, only active trackers of the project (and its sub projects) can be selected....
r1057 @trackers = @project.rolled_up_trackers
Jean-Philippe Lang
Patch #9705 Tracker filtering on Main Calendar (Jeffrey Jones)...
r392 retrieve_selected_tracker_ids(@trackers)
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 if params[:year] and params[:year].to_i >0
@year_from = params[:year].to_i
if params[:month] and params[:month].to_i >=1 and params[:month].to_i <= 12
@month_from = params[:month].to_i
else
@month_from = 1
end
else
Jean-Philippe Lang
Gantt chart:...
r818 @month_from ||= Date.today.month
@year_from ||= Date.today.year
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
Jean-Philippe Lang
Gantt chart:...
r818 zoom = (params[:zoom] || User.current.pref[:gantt_zoom]).to_i
@zoom = (zoom > 0 && zoom < 5) ? zoom : 2
months = (params[:months] || User.current.pref[:gantt_months]).to_i
@months = (months > 0 && months < 25) ? months : 6
# Save gantt paramters as user preference (zoom and months count)
if (User.current.logged? && (@zoom != User.current.pref[:gantt_zoom] || @months != User.current.pref[:gantt_months]))
User.current.pref[:gantt_zoom], User.current.pref[:gantt_months] = @zoom, @months
User.current.preference.save
end
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330
@date_from = Date.civil(@year_from, @month_from, 1)
@date_to = (@date_from >> @months) - 1
Jean-Philippe Lang
Adds an application setting to choose whether or not subprojects issues should be displayed by default on the issue list, calendar and gantt (r1178). Default is true....
r1184 @with_subprojects = params[:with_subprojects].nil? ? Setting.display_subprojects_issues? : (params[:with_subprojects] == '1')
Jean-Philippe Lang
Patch #9705 Tracker filtering on Main Calendar (Jeffrey Jones)...
r392
Jean-Philippe Lang
Added versions due dates on gantt chart....
r425 @events = []
Jean-Philippe Lang
Include subprojects on the issue list, calendar and gantt by default....
r1164 @project.issues_with_subprojects(@with_subprojects) do
Jean-Philippe Lang
Gantt chart: display issues that don't have a due date if they are assigned to a version with a date (#184)....
r1441 # Issues that have start and due dates
Jean-Philippe Lang
Added versions due dates on gantt chart....
r425 @events += Issue.find(:all,
Jean-Philippe Lang
Added the ability to include subprojects issues on calendar & gantt (options box)...
r395 :order => "start_date, due_date",
Jean-Philippe Lang
Subproject name displayed on issue list, calendar and gantt (only for issues that belong to a subproject)....
r481 :include => [:tracker, :status, :assigned_to, :priority, :project],
Jean-Philippe Lang
Added the ability to include subprojects issues on calendar & gantt (options box)...
r395 :conditions => ["(((start_date>=? and start_date<=?) or (due_date>=? and due_date<=?) or (start_date<? and due_date>?)) and start_date is not null and due_date is not null and #{Issue.table_name}.tracker_id in (#{@selected_tracker_ids.join(',')}))", @date_from, @date_to, @date_from, @date_to, @date_from, @date_to]
) unless @selected_tracker_ids.empty?
Jean-Philippe Lang
Gantt chart: display issues that don't have a due date if they are assigned to a version with a date (#184)....
r1441 # Issues that don't have a due date but that are assigned to a version with a date
@events += Issue.find(:all,
:order => "start_date, effective_date",
:include => [:tracker, :status, :assigned_to, :priority, :project, :fixed_version],
:conditions => ["(((start_date>=? and start_date<=?) or (effective_date>=? and effective_date<=?) or (start_date<? and effective_date>?)) and start_date is not null and due_date is null and effective_date is not null and #{Issue.table_name}.tracker_id in (#{@selected_tracker_ids.join(',')}))", @date_from, @date_to, @date_from, @date_to, @date_from, @date_to]
) unless @selected_tracker_ids.empty?
Jean-Philippe Lang
Include subprojects versions on calendar and gantt (#1116)....
r1349 @events += Version.find(:all, :include => :project,
:conditions => ["effective_date BETWEEN ? AND ?", @date_from, @date_to])
Jean-Philippe Lang
Added the ability to include subprojects issues on calendar & gantt (options box)...
r395 end
Jean-Philippe Lang
Added versions due dates on gantt chart....
r425 @events.sort! {|x,y| x.start_date <=> y.start_date }
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330
Jean-Philippe Lang
Gantt chart can now be exported to a graphic file (png)....
r660 if params[:format]=='pdf'
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 @options_for_rfpdf ||= {}
Jean-Philippe Lang
Gantt chart can now be exported to a graphic file (png)....
r660 @options_for_rfpdf[:file_name] = "#{@project.identifier}-gantt.pdf"
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 render :template => "projects/gantt.rfpdf", :layout => false
Jean-Philippe Lang
Gantt chart can now be exported to a graphic file (png)....
r660 elsif params[:format]=='png' && respond_to?('gantt_image')
image = gantt_image(@events, @date_from, @months, @zoom)
image.format = 'PNG'
send_data(image.to_blob, :disposition => 'inline', :type => 'image/png', :filename => "#{@project.identifier}-gantt.png")
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 else
render :template => "projects/gantt.rhtml"
end
end
Jean-Philippe Lang
added rss/atom feeds at project levels for:...
r336
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 private
# Find project of id params[:id]
# if not found, redirect to project list
# Used as a before_filter
def find_project
@project = Project.find(params[:id])
Jean-Philippe Lang
ActiveRecord::RecordNotFound exceptions handled more gracefully...
r130 rescue ActiveRecord::RecordNotFound
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 render_404
end
Jean-Philippe Lang
Activity enhancements:...
r1213 def find_optional_project
return true unless params[:id]
@project = Project.find(params[:id])
authorize
rescue ActiveRecord::RecordNotFound
render_404
end
Jean-Philippe Lang
Patch #9705 Tracker filtering on Main Calendar (Jeffrey Jones)...
r392 def retrieve_selected_tracker_ids(selectable_trackers)
if ids = params[:tracker_ids]
@selected_tracker_ids = (ids.is_a? Array) ? ids.collect { |id| id.to_i.to_s } : ids.split('/').collect { |id| id.to_i.to_s }
else
@selected_tracker_ids = selectable_trackers.collect {|t| t.id.to_s }
end
end
Jean-Philippe Lang
Initial commit...
r2 end