##// END OF EJS Templates
Added issues status changes on the activity view (initial patch by Cyril Mougel)....
Added issues status changes on the activity view (initial patch by Cyril Mougel). git-svn-id: http://redmine.rubyforge.org/svn/trunk@892 e93f8b46-1217-0410-a6f0-8f06a7374b81

File last commit:

r879:fa95501fe5e8
r879:fa95501fe5e8
Show More
projects_controller.rb
553 lines | 24.9 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
Added the ability to archive projects:...
r546 before_filter :find_project, :except => [ :index, :list, :add ]
before_filter :authorize, :except => [ :index, :list, :add, :archive, :unarchive, :destroy ]
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 the ability to archive projects:...
r546 cache_sweeper :project_sweeper, :only => [ :add, :edit, :archive, :unarchive, :destroy ]
Jean-Philippe Lang
Added fragment caching for calendar and gantt views...
r512 cache_sweeper :issue_sweeper, :only => [ :add_issue ]
Jean-Philippe Lang
Fixed: calendar and gantt not updated when adding/editing/deleting a project version....
r659 cache_sweeper :version_sweeper, :only => [ :add_version ]
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
git-svn-id: http://redmine.rubyforge.org/svn/trunk@6 e93f8b46-1217-0410-a6f0-8f06a7374b81
r4 def index
list
Jean-Philippe Lang
ajaxified paginators...
r31 render :action => 'list' unless request.xhr?
Jean-Philippe Lang
git-svn-id: http://redmine.rubyforge.org/svn/trunk@6 e93f8b46-1217-0410-a6f0-8f06a7374b81
r4 end
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
added svn:eol-style native property on /app files...
r330 def list
Jean-Philippe Lang
Main project list now displays root projects with their subprojects....
r718 projects = Project.find :all,
:conditions => Project.visible_by(logged_in_user),
:include => :parent
@project_tree = projects.group_by {|p| p.parent || p}
@project_tree.each_key {|p| @project_tree[p] -= [p]}
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
@custom_fields = IssueCustomField.find(:all)
Jean-Philippe Lang
Fixed: "subproject of" list should not show archived projects....
r667 @root_projects = Project.find(:all, :conditions => "parent_id IS NULL AND status = #{Project::STATUS_ACTIVE}")
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 @project = Project.new(params[:project])
Jean-Philippe Lang
Project modules are checked (default) when creating a project....
r719 @project.enabled_module_names = Redmine::AccessControl.available_project_modules
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 if request.get?
@custom_values = ProjectCustomField.find(:all).collect { |x| CustomValue.new(:custom_field => x, :customized => @project) }
else
@project.custom_fields = CustomField.find(params[:custom_field_ids]) if params[:custom_field_ids]
Jean-Philippe Lang
Fix: error when posting to projects/add or users/add with no custom_fields parameter....
r664 @custom_values = ProjectCustomField.find(:all).collect { |x| CustomValue.new(:custom_field => x, :customized => @project, :value => (params[:custom_fields] ? params["custom_fields"][x.id.to_s] : nil)) }
Jean-Philippe Lang
Added project module concept....
r714 @project.custom_values = @custom_values
Jean-Philippe Lang
v0.2.0...
r5 if @project.save
Jean-Philippe Lang
Added project module concept....
r714 @project.enabled_module_names = params[:enabled_modules]
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'
end
end
end
# Show @project
def show
@custom_values = @project.custom_values.find(:all, :include => :custom_field)
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
Added the ability to archive projects:...
r546 @subprojects = @project.active_children
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
added svn:eol-style native property on /app files...
r330 @trackers = Tracker.find(:all, :order => 'position')
Jean-Philippe Lang
fixed #9308 table_name pre/suffix support...
r334 @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])
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 @total_issues_by_tracker = Issue.count(:group => :tracker, :conditions => ["project_id=?", @project.id])
Jean-Philippe Lang
Application layout refactored....
r736 @total_hours = @project.time_entries.sum(:hours)
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
Fixed: "subproject of" list should not show archived projects....
r667 @root_projects = Project::find(:all, :conditions => ["parent_id IS NULL AND status = #{Project::STATUS_ACTIVE} AND id <> ?", @project.id])
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 @custom_fields = IssueCustomField.find(:all)
@issue_category ||= IssueCategory.new
@member ||= @project.members.new
@custom_values ||= ProjectCustomField.find(:all).collect { |x| @project.custom_values.find_by_custom_field_id(x.id) || CustomValue.new(:custom_field => x) }
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.custom_fields = IssueCustomField.find(params[:custom_field_ids]) if params[:custom_field_ids]
if params[:custom_fields]
@custom_values = ProjectCustomField.find(:all).collect { |x| CustomValue.new(:custom_field => x, :customized => @project, :value => params["custom_fields"][x.id.to_s]) }
@project.custom_values = @custom_values
end
@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
# Add a new document to @project
def add_document
@document = @project.documents.build(params[:document])
if request.post? and @document.save
# Save the attachments
params[:attachments].each { |a|
Attachment.create(:container => @document, :file => a, :author => logged_in_user) unless a.size == 0
} if params[:attachments] and params[:attachments].is_a? Array
flash[:notice] = l(:notice_successful_create)
Jean-Philippe Lang
Removed translated email templates attachments_added and document_added (no longer usefull)....
r823 Mailer.deliver_document_added(@document) if Setting.notified_events.include?('document_added')
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 redirect_to :action => 'list_documents', :id => @project
Jean-Philippe Lang
Initial commit...
r2 end
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
Jean-Philippe Lang
0.3 unstable...
r10 # Show documents list of @project
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 def list_documents
Jean-Philippe Lang
Added radio buttons on the documents list to sort documents by category, date, title or author....
r866 @sort_by = %w(category date title author).include?(params[:sort_by]) ? params[:sort_by] : 'category'
documents = @project.documents.find :all, :include => [:attachments, :category]
case @sort_by
when 'date'
@grouped = documents.group_by {|d| d.created_on.to_date }
when 'title'
@grouped = documents.group_by {|d| d.title.first.upcase}
when 'author'
@grouped = documents.select{|d| d.attachments.any?}.group_by {|d| d.attachments.last.author}
else
@grouped = documents.group_by(&:category)
end
render :layout => false if request.xhr?
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
# Add a new issue to @project
Jean-Philippe Lang
Added the hability to copy an issue....
r860 # The new issue will be created from an existing one if copy_from parameter is given
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 def add_issue
Jean-Philippe Lang
Added the hability to copy an issue....
r860 @issue = params[:copy_from] ? Issue.new.copy_from(params[:copy_from]) : Issue.new(params[:issue])
@issue.project = @project
@issue.author = User.current
@issue.tracker ||= Tracker.find(params[:tracker_id])
Jean-Philippe Lang
Feature 9784 Set status when raising issue....
r404
default_status = IssueStatus.default
Jean-Philippe Lang
Added an error message when trying to create an issue with no default status defined....
r557 unless default_status
Jean-Philippe Lang
Added the hability to copy an issue....
r860 flash.now[:error] = 'No default issue status is defined. Please check your configuration (Go to "Administration -> Issue statuses").'
Jean-Philippe Lang
Added an error message when trying to create an issue with no default status defined....
r557 render :nothing => true, :layout => true
return
Jean-Philippe Lang
Added the hability to copy an issue....
r860 end
Jean-Philippe Lang
Fixed a regression (crash when an admin with no role on the project try to create an issue)...
r417 @issue.status = default_status
Jean-Philippe Lang
Fixed: default status not showing in new issue...
r472 @allowed_statuses = ([default_status] + default_status.find_new_statuses_allowed_to(logged_in_user.role_for_project(@project), @issue.tracker))if logged_in_user
Jean-Philippe Lang
Added the hability to copy an issue....
r860
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 if request.get?
Jean-Philippe Lang
Added the hability to copy an issue....
r860 @issue.start_date ||= Date.today
@custom_values = @issue.custom_values.empty? ?
@project.custom_fields_for_issues(@issue.tracker).collect { |x| CustomValue.new(:custom_field => x, :customized => @issue) } :
@issue.custom_values
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 else
Jean-Philippe Lang
Feature 9784 Set status when raising issue....
r404 requested_status = IssueStatus.find_by_id(params[:issue][:status_id])
Jean-Philippe Lang
Added the hability to copy an issue....
r860 # Check that the user is allowed to apply the requested status
Jean-Philippe Lang
Feature 9784 Set status when raising issue....
r404 @issue.status = (@allowed_statuses.include? requested_status) ? requested_status : default_status
Jean-Philippe Lang
Added the hability to copy an issue....
r860 @custom_values = @project.custom_fields_for_issues(@issue.tracker).collect { |x| CustomValue.new(:custom_field => x, :customized => @issue, :value => params["custom_fields"][x.id.to_s]) }
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 @issue.custom_values = @custom_values
if @issue.save
Jean-Philippe Lang
Added the hability to copy an issue....
r860 if params[:attachments] && params[:attachments].is_a?(Array)
# Save attachments
params[:attachments].each {|a| Attachment.create(:container => @issue, :file => a, :author => User.current) unless a.size == 0}
end
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 flash[:notice] = l(:notice_successful_create)
Jean-Philippe Lang
Mail notification options restored (default is: issue_added and issue_updated)....
r717 Mailer.deliver_issue_add(@issue) if Setting.notified_events.include?('issue_added')
Jean-Philippe Lang
ProjectsController#list_issues, #export_issues_csv and #export_issues_pdf merged into IssuesController#index...
r874 redirect_to :controller => 'issues', :action => 'index', :project_id => @project
Jean-Philippe Lang
Added the hability to copy an issue....
r860 return
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
end
Jean-Philippe Lang
Added the hability to copy an issue....
r860 @priorities = Enumeration::get_values('IPRI')
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
Jean-Philippe Lang
Added 'Bulk edit' functionality....
r806 # Bulk edit issues
def bulk_edit_issues
if request.post?
Jean-Philippe Lang
Fixed: error when bulk editing with Postgresql...
r853 status = params[:status_id].blank? ? nil : IssueStatus.find_by_id(params[:status_id])
priority = params[:priority_id].blank? ? nil : Enumeration.find_by_id(params[:priority_id])
assigned_to = params[:assigned_to_id].blank? ? nil : User.find_by_id(params[:assigned_to_id])
category = params[:category_id].blank? ? nil : @project.issue_categories.find_by_id(params[:category_id])
fixed_version = params[:fixed_version_id].blank? ? nil : @project.versions.find_by_id(params[:fixed_version_id])
Jean-Philippe Lang
Added 'Bulk edit' functionality....
r806 issues = @project.issues.find_all_by_id(params[:issue_ids])
Jean-Philippe Lang
Status can now be updated when bulk editing issues....
r820 unsaved_issue_ids = []
Jean-Philippe Lang
Added 'Bulk edit' functionality....
r806 issues.each do |issue|
Jean-Philippe Lang
Bulk editing:...
r815 journal = issue.init_journal(User.current, params[:notes])
Jean-Philippe Lang
Added 'Bulk edit' functionality....
r806 issue.priority = priority if priority
Jean-Philippe Lang
Added the ability to unassign issues with bulk edit....
r837 issue.assigned_to = assigned_to if assigned_to || params[:assigned_to_id] == 'none'
Jean-Philippe Lang
Fixed: Bulk edit doesn't change the category or fixed version properties....
r809 issue.category = category if category
issue.fixed_version = fixed_version if fixed_version
Jean-Philippe Lang
Added 'Bulk edit' functionality....
r806 issue.start_date = params[:start_date] unless params[:start_date].blank?
issue.due_date = params[:due_date] unless params[:due_date].blank?
issue.done_ratio = params[:done_ratio] unless params[:done_ratio].blank?
Jean-Philippe Lang
Status can now be updated when bulk editing issues....
r820 # Don't save any change to the issue if the user is not authorized to apply the requested status
if (status.nil? || (issue.status.new_status_allowed_to?(status, current_role, issue.tracker) && issue.status = status)) && issue.save
Jean-Philippe Lang
Bulk editing:...
r815 # Send notification for each issue (if changed)
Mailer.deliver_issue_edit(journal) if journal.details.any? && Setting.notified_events.include?('issue_updated')
else
Jean-Philippe Lang
Status can now be updated when bulk editing issues....
r820 # Keep unsaved issue ids to display them in flash error
Jean-Philippe Lang
Bulk editing:...
r815 unsaved_issue_ids << issue.id
end
Jean-Philippe Lang
Added 'Bulk edit' functionality....
r806 end
if unsaved_issue_ids.empty?
flash[:notice] = l(:notice_successful_update) unless issues.empty?
else
flash[:error] = l(:notice_failed_to_save_issues, unsaved_issue_ids.size, issues.size, '#' + unsaved_issue_ids.join(', #'))
end
Jean-Philippe Lang
ProjectsController#list_issues, #export_issues_csv and #export_issues_pdf merged into IssuesController#index...
r874 redirect_to :controller => 'issues', :action => 'index', :project_id => @project
Jean-Philippe Lang
Added 'Bulk edit' functionality....
r806 return
end
Jean-Philippe Lang
Status can now be updated when bulk editing issues....
r820 if current_role && User.current.allowed_to?(:change_issue_status, @project)
# Find potential statuses the user could be allowed to switch issues to
@available_statuses = Workflow.find(:all, :include => :new_status,
:conditions => {:role_id => current_role.id}).collect(&:new_status).compact.uniq
end
Jean-Philippe Lang
Added 'Bulk edit' functionality....
r806 render :update do |page|
page.hide 'query_form'
page.replace_html 'bulk-edit', :partial => 'issues/bulk_edit_form'
end
end
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330
def move_issues
@issues = @project.issues.find(params[:issue_ids]) if params[:issue_ids]
Jean-Philippe Lang
ProjectsController#list_issues, #export_issues_csv and #export_issues_pdf merged into IssuesController#index...
r874 redirect_to :controller => 'issues', :action => 'index', :project_id => @project and return unless @issues
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 @projects = []
# find projects to which the user is allowed to move the issue
Jean-Philippe Lang
Merged 0.6 branch into trunk....
r663 User.current.memberships.each {|m| @projects << m.project if m.role.allowed_to?(:controller => 'projects', :action => 'move_issues')}
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 # issue can be moved to any tracker
@trackers = Tracker.find(:all)
if request.post? and params[:new_project_id] and params[:new_tracker_id]
Jean-Philippe Lang
Added the ability to move issues (to another project) without changing their trackers....
r676 new_project = Project.find_by_id(params[:new_project_id])
new_tracker = Tracker.find_by_id(params[:new_tracker_id])
@issues.each do |i|
if new_project && i.project_id != new_project.id
# issue is moved to another project
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 i.category = nil
i.fixed_version = nil
Jean-Philippe Lang
Issue relations first commit (not thoroughly tested). 4 kinds of relation are available:...
r503 # delete issue relations
i.relations_from.clear
i.relations_to.clear
Jean-Philippe Lang
Added the ability to move issues (to another project) without changing their trackers....
r676 i.project = new_project
end
if new_tracker
i.tracker = new_tracker
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
i.save
Jean-Philippe Lang
Added the ability to move issues (to another project) without changing their trackers....
r676 end
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 flash[:notice] = l(:notice_successful_update)
Jean-Philippe Lang
ProjectsController#list_issues, #export_issues_csv and #export_issues_pdf merged into IssuesController#index...
r874 redirect_to :controller => 'issues', :action => 'index', :project_id => @project
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
end
# Add a news to @project
def add_news
@news = News.new(:project => @project)
if request.post?
@news.attributes = params[:news]
@news.author_id = self.logged_in_user.id if self.logged_in_user
if @news.save
flash[:notice] = l(:notice_successful_create)
Jean-Philippe Lang
Mail notification options restored (default is: issue_added and issue_updated)....
r717 Mailer.deliver_news_added(@news) if Setting.notified_events.include?('news_added')
Jean-Philippe Lang
Moved ProjectsController#list_news to NewsController#index....
r875 redirect_to :controller => 'news', :action => 'index', :project_id => @project
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
end
end
def add_file
if request.post?
@version = @project.versions.find_by_id(params[:version_id])
# Save the attachments
@attachments = []
params[:attachments].each { |file|
next unless file.size > 0
a = Attachment.create(:container => @version, :file => file, :author => logged_in_user)
@attachments << a unless a.new_record?
} if params[:attachments] and params[:attachments].is_a? Array
Jean-Philippe Lang
Removed translated email templates attachments_added and document_added (no longer usefull)....
r823 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
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
# Show changelog for @project
def changelog
@trackers = Tracker.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
@trackers = Tracker.find(:all, :conditions => ["is_in_roadmap=?", true], :order => 'position')
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
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
@month ||= Date.today.month
Jean-Philippe Lang
Merged 0.6 branch into trunk....
r663 case params[:format]
Jean-Philippe Lang
Small fix in project activity feed....
r782 when 'atom'
Jean-Philippe Lang
Merged 0.6 branch into trunk....
r663 # 30 last days
@date_from = Date.today - 30
@date_to = Date.today + 1
else
# current month
@date_from = Date.civil(@year, @month, 1)
@date_to = @date_from >> 1
end
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
Project activity view now only shows what the user is allowed to view....
r746 @event_types.delete('wiki_pages') unless @project.wiki
Jean-Philippe Lang
Merged 0.6 branch into trunk....
r663 @event_types.delete('changesets') unless @project.repository
Jean-Philippe Lang
Added forums topics on the activity view (disabled by default)....
r878 @event_types.delete('messages') unless @project.boards.any?
Jean-Philippe Lang
Project activity view now only shows what the user is allowed to view....
r746 # only show what the user is allowed to view
@event_types = @event_types.select {|o| User.current.allowed_to?("view_#{o}".to_sym, @project)}
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330
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')
@events += @project.issues.find(:all, :include => [:author, :tracker], :conditions => ["#{Issue.table_name}.created_on>=? and #{Issue.table_name}.created_on<=?", @date_from, @date_to] )
Jean-Philippe Lang
Added issues status changes on the activity view (initial patch by Cyril Mougel)....
r879 @events += @project.issues_status_changes(@date_from, @date_to)
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')
@events += @project.news.find(:all, :conditions => ["#{News.table_name}.created_on>=? and #{News.table_name}.created_on<=?", @date_from, @date_to], :include => :author )
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
Merged 0.6 branch into trunk....
r663 @events += Attachment.find(:all, :select => "#{Attachment.table_name}.*", :joins => "LEFT JOIN #{Version.table_name} ON #{Version.table_name}.id = #{Attachment.table_name}.container_id", :conditions => ["#{Attachment.table_name}.container_type='Version' and #{Version.table_name}.project_id=? and #{Attachment.table_name}.created_on>=? and #{Attachment.table_name}.created_on<=?", @project.id, @date_from, @date_to], :include => :author )
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')
@events += @project.documents.find(:all, :conditions => ["#{Document.table_name}.created_on>=? and #{Document.table_name}.created_on<=?", @date_from, @date_to] )
@events += Attachment.find(:all, :select => "attachments.*", :joins => "LEFT JOIN #{Document.table_name} ON #{Document.table_name}.id = #{Attachment.table_name}.container_id", :conditions => ["#{Attachment.table_name}.container_type='Document' and #{Document.table_name}.project_id=? and #{Attachment.table_name}.created_on>=? and #{Attachment.table_name}.created_on<=?", @project.id, @date_from, @date_to], :include => :author )
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 " +
"LEFT JOIN #{Wiki.table_name} ON #{Wiki.table_name}.id = #{WikiPage.table_name}.wiki_id "
conditions = ["#{Wiki.table_name}.project_id = ? AND #{WikiContent.versioned_table_name}.updated_on BETWEEN ? AND ?",
@project.id, @date_from, @date_to]
Jean-Philippe Lang
Merged 0.6 branch into trunk....
r663 @events += WikiContent.versioned_class.find(:all, :select => select, :joins => joins, :conditions => 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
Merged 0.6 branch into trunk....
r663 @events += @project.repository.changesets.find(:all, :conditions => ["#{Changeset.table_name}.committed_on BETWEEN ? AND ?", @date_from, @date_to])
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')
@events += Message.find(:all,
:include => [:board, :author],
:conditions => ["#{Board.table_name}.project_id=? AND #{Message.table_name}.parent_id IS NULL AND #{Message.table_name}.created_on BETWEEN ? AND ?", @project.id, @date_from, @date_to])
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? }
format.atom { render_feed(@events, :title => "#{@project.name}: #{l(:label_activity)}") }
end
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
def calendar
Jean-Philippe Lang
Patch #9705 Tracker filtering on Main Calendar (Jeffrey Jones)...
r392 @trackers = Tracker.find(:all, :order => 'position')
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
Patch #9705 Tracker filtering on Main Calendar (Jeffrey Jones)...
r392
Jean-Philippe Lang
Calendar:...
r804 events = []
Jean-Philippe Lang
Added the ability to include subprojects issues on calendar & gantt (options box)...
r395 @project.issues_with_subprojects(params[: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?
end
Jean-Philippe Lang
Calendar:...
r804 events += @project.versions.find(:all, :conditions => ["effective_date BETWEEN ? AND ?", @calendar.startdt, @calendar.enddt])
@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
Patch #9705 Tracker filtering on Main Calendar (Jeffrey Jones)...
r392 @trackers = Tracker.find(:all, :order => 'position')
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
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
Added the ability to include subprojects issues on calendar & gantt (options box)...
r395 @project.issues_with_subprojects(params[:with_subprojects]) do
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?
end
Jean-Philippe Lang
Added versions due dates on gantt chart....
r425 @events += @project.versions.find(:all, :conditions => ["effective_date BETWEEN ? AND ?", @date_from, @date_to])
@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
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