##// END OF EJS Templates
calendar javascripts and stylesheets removed from base layout. they're now only added to html header when needed....
calendar javascripts and stylesheets removed from base layout. they're now only added to html header when needed. git-svn-id: http://redmine.rubyforge.org/svn/trunk@151 e93f8b46-1217-0410-a6f0-8f06a7374b81

File last commit:

r133:470ef4d11ee7
r148:979892a109bd
Show More
projects_controller.rb
532 lines | 20.4 KiB | text/x-ruby | RubyLexer
/ app / controllers / projects_controller.rb
Jean-Philippe Lang
Initial commit...
r2 # redMine - project management software
Jean-Philippe Lang
* replaced "add_issue" links on projects/show by a drop down list...
r133 # Copyright (C) 2006-2007 Jean-Philippe Lang
Jean-Philippe Lang
Initial commit...
r2 #
# 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
Jean-Philippe Lang
"queries" branch merged...
r92 layout 'base'
Jean-Philippe Lang
git-svn-id: http://redmine.rubyforge.org/svn/trunk@6 e93f8b46-1217-0410-a6f0-8f06a7374b81
r4 before_filter :find_project, :authorize, :except => [ :index, :list, :add ]
Jean-Philippe Lang
Initial commit...
r2 before_filter :require_admin, :only => [ :add, :destroy ]
helper :sort
Jean-Philippe Lang
"queries" branch merged...
r92 include SortHelper
Jean-Philippe Lang
git-svn-id: http://redmine.rubyforge.org/svn/trunk@6 e93f8b46-1217-0410-a6f0-8f06a7374b81
r4 helper :custom_fields
include CustomFieldsHelper
Jean-Philippe Lang
* single/multiple issues pdf export added...
r35 helper :ifpdf
include IfpdfHelper
Jean-Philippe Lang
improved issues change history...
r52 helper IssuesHelper
Jean-Philippe Lang
"queries" branch merged...
r92 helper :queries
include QueriesHelper
Jean-Philippe Lang
* single/multiple issues pdf export added...
r35
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
Initial commit...
r2
Jean-Philippe Lang
v0.2.0...
r5 # Lists public projects
def list
sort_init 'name', 'asc'
sort_update
@project_count = Project.count(["is_public=?", true])
@project_pages = Paginator.new self, @project_count,
Jean-Philippe Lang
Initial commit...
r2 15,
Jean-Philippe Lang
replaced deprecated controller instance variables: @params, @session, @request...
r124 params['page']
Jean-Philippe Lang
v0.2.0...
r5 @projects = Project.find :all, :order => sort_clause,
:conditions => ["is_public=?", true],
Jean-Philippe Lang
Initial commit...
r2 :limit => @project_pages.items_per_page,
Jean-Philippe Lang
ajaxified paginators...
r31 :offset => @project_pages.current.offset
render :action => "list", :layout => false if request.xhr?
Jean-Philippe Lang
Initial commit...
r2 end
# Add a new project
Jean-Philippe Lang
v0.2.0...
r5 def add
Jean-Philippe Lang
0.3 unstable...
r10 @custom_fields = IssueCustomField.find(:all)
@root_projects = Project.find(:all, :conditions => "parent_id is null")
Jean-Philippe Lang
v0.2.0...
r5 @project = Project.new(params[:project])
Jean-Philippe Lang
0.3 unstable...
r10 if request.get?
@custom_values = ProjectCustomField.find(:all).collect { |x| CustomValue.new(:custom_field => x, :customized => @project) }
else
Jean-Philippe Lang
replaced deprecated controller instance variables: @params, @session, @request...
r124 @project.custom_fields = CustomField.find(params[:custom_field_ids]) if params[:custom_field_ids]
Jean-Philippe Lang
0.3 unstable...
r10 @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
Jean-Philippe Lang
svn browser merged in trunk...
r103 if params[:repository_enabled] && params[:repository_enabled] == "1"
@project.repository = Repository.new
@project.repository.attributes = params[:repository]
end
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
v0.2.0...
r5 redirect_to :controller => 'admin', :action => 'projects'
end
end
end
Jean-Philippe Lang
Initial commit...
r2
Jean-Philippe Lang
0.3 unstable...
r10 # Show @project
Jean-Philippe Lang
v0.2.0...
r5 def show
Jean-Philippe Lang
0.3 unstable...
r10 @custom_values = @project.custom_values.find(:all, :include => :custom_field)
Jean-Philippe Lang
v0.2.0...
r5 @members = @project.members.find(:all, :include => [:user, :role])
@subprojects = @project.children if @project.children_count > 0
Jean-Philippe Lang
0.3 unstable...
r10 @news = @project.news.find(:all, :limit => 5, :include => [ :author, :project ], :order => "news.created_on DESC")
@trackers = Tracker.find(:all)
Jean-Philippe Lang
v0.2.0...
r5 end
Jean-Philippe Lang
Initial commit...
r2
def settings
Jean-Philippe Lang
v0.2.0...
r5 @root_projects = Project::find(:all, :conditions => ["parent_id is null and id <> ?", @project.id])
Jean-Philippe Lang
replaced deprecated find_all calls...
r123 @custom_fields = IssueCustomField.find(:all)
Jean-Philippe Lang
v0.2.0...
r5 @issue_category ||= IssueCategory.new
Jean-Philippe Lang
Initial commit...
r2 @member ||= @project.members.new
Jean-Philippe Lang
replaced deprecated find_all calls...
r123 @roles = Role.find(:all)
@users = User.find(:all) - @project.members.find(:all, :include => :user).collect{|m| m.user }
Jean-Philippe Lang
custom field tags...
r18 @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
Initial commit...
r2 end
Jean-Philippe Lang
v0.2.0...
r5 # Edit @project
def edit
if request.post?
Jean-Philippe Lang
replaced deprecated controller instance variables: @params, @session, @request...
r124 @project.custom_fields = IssueCustomField.find(params[:custom_field_ids]) if params[:custom_field_ids]
Jean-Philippe Lang
0.3 unstable...
r10 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
Jean-Philippe Lang
svn browser merged in trunk...
r103 if params[:repository_enabled]
case params[:repository_enabled]
when "0"
@project.repository = nil
when "1"
@project.repository ||= Repository.new
@project.repository.attributes = params[:repository]
end
end
@project.attributes = params[:project]
if @project.save
Jean-Philippe Lang
notice messages translation...
r15 flash[:notice] = l(:notice_successful_update)
Jean-Philippe Lang
v0.2.0...
r5 redirect_to :action => 'settings', :id => @project
Jean-Philippe Lang
Initial commit...
r2 else
settings
render :action => 'settings'
Jean-Philippe Lang
v0.2.0...
r5 end
end
Jean-Philippe Lang
Initial commit...
r2 end
Jean-Philippe Lang
0.3 unstable...
r10
# Delete @project
def destroy
Jean-Philippe Lang
Initial commit...
r2 if request.post? and params[:confirm]
@project.destroy
redirect_to :controller => 'admin', :action => 'projects'
end
Jean-Philippe Lang
0.3 unstable...
r10 end
Jean-Philippe Lang
Initial commit...
r2
Jean-Philippe Lang
0.3 unstable...
r10 # Add a new issue category to @project
def add_issue_category
if request.post?
@issue_category = @project.issue_categories.build(params[:issue_category])
if @issue_category.save
Jean-Philippe Lang
notice messages translation...
r15 flash[:notice] = l(:notice_successful_create)
Jean-Philippe Lang
0.3 unstable...
r10 redirect_to :action => 'settings', :id => @project
else
Jean-Philippe Lang
Initial commit...
r2 settings
render :action => 'settings'
Jean-Philippe Lang
0.3 unstable...
r10 end
end
end
Jean-Philippe Lang
Initial commit...
r2
Jean-Philippe Lang
0.3 unstable...
r10 # Add a new version to @project
def add_version
@version = @project.versions.build(params[:version])
if request.post? and @version.save
Jean-Philippe Lang
notice messages translation...
r15 flash[:notice] = l(:notice_successful_create)
Jean-Philippe Lang
Initial commit...
r2 redirect_to :action => 'settings', :id => @project
Jean-Philippe Lang
0.3 unstable...
r10 end
end
Jean-Philippe Lang
Initial commit...
r2
Jean-Philippe Lang
0.3 unstable...
r10 # Add a new member to @project
def add_member
Jean-Philippe Lang
Initial commit...
r2 @member = @project.members.build(params[:member])
Jean-Philippe Lang
0.3 unstable...
r10 if request.post?
if @member.save
Jean-Philippe Lang
notice messages translation...
r15 flash[:notice] = l(:notice_successful_create)
Jean-Philippe Lang
0.3 unstable...
r10 redirect_to :action => 'settings', :id => @project
else
Jean-Philippe Lang
Initial commit...
r2 settings
render :action => 'settings'
end
Jean-Philippe Lang
0.3 unstable...
r10 end
end
Jean-Philippe Lang
Initial commit...
r2
Jean-Philippe Lang
0.3 unstable...
r10 # Show members list of @project
def list_members
@members = @project.members
end
Jean-Philippe Lang
Initial commit...
r2
Jean-Philippe Lang
0.3 unstable...
r10 # Add a new document to @project
def add_document
@categories = Enumeration::get_values('DCAT')
@document = @project.documents.build(params[:document])
Jean-Philippe Lang
added multiple file upload for documents and files modules...
r127 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)
redirect_to :action => 'list_documents', :id => @project
Jean-Philippe Lang
0.3 unstable...
r10 end
end
# Show documents list of @project
def list_documents
Jean-Philippe Lang
various eager loadings added...
r95 @documents = @project.documents.find :all, :include => :category
Jean-Philippe Lang
0.3 unstable...
r10 end
Jean-Philippe Lang
Initial commit...
r2
Jean-Philippe Lang
0.3 unstable...
r10 # Add a new issue to @project
def add_issue
@tracker = Tracker.find(params[:tracker_id])
@priorities = Enumeration::get_values('IPRI')
@issue = Issue.new(:project => @project, :tracker => @tracker)
Jean-Philippe Lang
* new report: project activity...
r42 if request.get?
@issue.start_date = Date.today
Jean-Philippe Lang
0.3 unstable...
r10 @custom_values = @project.custom_fields_for_issues(@tracker).collect { |x| CustomValue.new(:custom_field => x, :customized => @issue) }
else
@issue.attributes = params[:issue]
@issue.author_id = self.logged_in_user.id if self.logged_in_user
Jean-Philippe Lang
multiple file upload...
r38 # Multiple file upload
Jean-Philippe Lang
fixed: unable to attach a file when creating an issue ("attachment: invalid" error)...
r119 @attachments = []
Jean-Philippe Lang
multiple file upload...
r38 params[:attachments].each { |a|
Jean-Philippe Lang
fixed: unable to attach a file when creating an issue ("attachment: invalid" error)...
r119 @attachments << Attachment.new(:container => @issue, :file => a, :author => logged_in_user) unless a.size == 0
Jean-Philippe Lang
multiple file upload...
r38 } if params[:attachments] and params[:attachments].is_a? Array
Jean-Philippe Lang
0.3 unstable...
r10 @custom_values = @project.custom_fields_for_issues(@tracker).collect { |x| CustomValue.new(:custom_field => x, :customized => @issue, :value => params["custom_fields"][x.id.to_s]) }
Jean-Philippe Lang
fixed: unable to attach a file when creating an issue ("attachment: invalid" error)...
r119 @issue.custom_values = @custom_values
Jean-Philippe Lang
0.3 unstable...
r10 if @issue.save
Jean-Philippe Lang
fixed: unable to attach a file when creating an issue ("attachment: invalid" error)...
r119 @attachments.each(&:save)
Jean-Philippe Lang
notice messages translation...
r15 flash[:notice] = l(:notice_successful_create)
Jean-Philippe Lang
replaced deprecated controller instance variables: @params, @session, @request...
r124 Mailer.deliver_issue_add(@issue) if Permission.find_by_controller_and_action(params[:controller], params[:action]).mail_enabled?
Jean-Philippe Lang
0.3 unstable...
r10 redirect_to :action => 'list_issues', :id => @project
end
end
end
Jean-Philippe Lang
v0.2.0...
r5 # Show filtered/sorted issues list of @project
Jean-Philippe Lang
git-svn-id: http://redmine.rubyforge.org/svn/trunk@6 e93f8b46-1217-0410-a6f0-8f06a7374b81
r4 def list_issues
sort_init 'issues.id', 'desc'
sort_update
Jean-Philippe Lang
"queries" branch merged...
r92 retrieve_query
Jean-Philippe Lang
git-svn-id: http://redmine.rubyforge.org/svn/trunk@6 e93f8b46-1217-0410-a6f0-8f06a7374b81
r4
Jean-Philippe Lang
* single/multiple issues pdf export added...
r35 @results_per_page_options = [ 15, 25, 50, 100 ]
if params[:per_page] and @results_per_page_options.include? params[:per_page].to_i
@results_per_page = params[:per_page].to_i
session[:results_per_page] = @results_per_page
else
Jean-Philippe Lang
* new report: project activity...
r42 @results_per_page = session[:results_per_page] || 25
Jean-Philippe Lang
* single/multiple issues pdf export added...
r35 end
Jean-Philippe Lang
"queries" branch merged...
r92 if @query.valid?
@issue_count = Issue.count(:include => [:status, :project], :conditions => @query.statement)
Jean-Philippe Lang
replaced deprecated controller instance variables: @params, @session, @request...
r124 @issue_pages = Paginator.new self, @issue_count, @results_per_page, params['page']
Jean-Philippe Lang
"queries" branch merged...
r92 @issues = Issue.find :all, :order => sort_clause,
:include => [ :author, :status, :tracker, :project ],
:conditions => @query.statement,
:limit => @issue_pages.items_per_page,
:offset => @issue_pages.current.offset
Jean-Philippe Lang
* replaced "add_issue" links on projects/show by a drop down list...
r133 end
@trackers = Tracker.find :all
Jean-Philippe Lang
* single/multiple issues pdf export added...
r35 render :layout => false if request.xhr?
Jean-Philippe Lang
git-svn-id: http://redmine.rubyforge.org/svn/trunk@6 e93f8b46-1217-0410-a6f0-8f06a7374b81
r4 end
# Export filtered/sorted issues list to CSV
def export_issues_csv
sort_init 'issues.id', 'desc'
sort_update
Jean-Philippe Lang
"queries" branch merged...
r92 retrieve_query
render :action => 'list_issues' and return unless @query.valid?
Jean-Philippe Lang
git-svn-id: http://redmine.rubyforge.org/svn/trunk@6 e93f8b46-1217-0410-a6f0-8f06a7374b81
r4
@issues = Issue.find :all, :order => sort_clause,
Jean-Philippe Lang
* single/multiple issues pdf export added...
r35 :include => [ :author, :status, :tracker, :project, :custom_values ],
Jean-Philippe Lang
"queries" branch merged...
r92 :conditions => @query.statement
Jean-Philippe Lang
Initial commit...
r2
Jean-Philippe Lang
* single/multiple issues pdf export added...
r35 ic = Iconv.new('ISO-8859-1', 'UTF-8')
Jean-Philippe Lang
git-svn-id: http://redmine.rubyforge.org/svn/trunk@6 e93f8b46-1217-0410-a6f0-8f06a7374b81
r4 export = StringIO.new
Jean-Philippe Lang
* single/multiple issues pdf export added...
r35 CSV::Writer.generate(export, l(:general_csv_separator)) do |csv|
# csv header fields
headers = [ "#", l(:field_status), l(:field_tracker), l(:field_subject), l(:field_author), l(:field_created_on), l(:field_updated_on) ]
for custom_field in @project.all_custom_fields
headers << custom_field.name
end
csv << headers.collect {|c| ic.iconv(c) }
# csv lines
Jean-Philippe Lang
git-svn-id: http://redmine.rubyforge.org/svn/trunk@6 e93f8b46-1217-0410-a6f0-8f06a7374b81
r4 @issues.each do |issue|
Jean-Philippe Lang
* single/multiple issues pdf export added...
r35 fields = [issue.id, issue.status.name, issue.tracker.name, issue.subject, issue.author.display_name, l_datetime(issue.created_on), l_datetime(issue.updated_on)]
for custom_field in @project.all_custom_fields
fields << (show_value issue.custom_value_for(custom_field))
end
csv << fields.collect {|c| ic.iconv(c.to_s) }
Jean-Philippe Lang
git-svn-id: http://redmine.rubyforge.org/svn/trunk@6 e93f8b46-1217-0410-a6f0-8f06a7374b81
r4 end
end
export.rewind
Jean-Philippe Lang
* single/multiple issues pdf export added...
r35 send_data(export.read, :type => 'text/csv; header=present', :filename => 'export.csv')
end
# Export filtered/sorted issues to PDF
def export_issues_pdf
sort_init 'issues.id', 'desc'
sort_update
Jean-Philippe Lang
"queries" branch merged...
r92 retrieve_query
render :action => 'list_issues' and return unless @query.valid?
Jean-Philippe Lang
* single/multiple issues pdf export added...
r35
@issues = Issue.find :all, :order => sort_clause,
:include => [ :author, :status, :tracker, :project, :custom_values ],
Jean-Philippe Lang
"queries" branch merged...
r92 :conditions => @query.statement
Jean-Philippe Lang
* single/multiple issues pdf export added...
r35
@options_for_rfpdf ||= {}
@options_for_rfpdf[:file_name] = "export.pdf"
Jean-Philippe Lang
"queries" branch merged...
r92 render :layout => false
Jean-Philippe Lang
git-svn-id: http://redmine.rubyforge.org/svn/trunk@6 e93f8b46-1217-0410-a6f0-8f06a7374b81
r4 end
Jean-Philippe Lang
Initial commit...
r2
Jean-Philippe Lang
git-svn-id: http://redmine.rubyforge.org/svn/trunk@32 e93f8b46-1217-0410-a6f0-8f06a7374b81
r30 def move_issues
@issues = @project.issues.find(params[:issue_ids]) if params[:issue_ids]
redirect_to :action => 'list_issues', :id => @project and return unless @issues
@projects = []
# find projects to which the user is allowed to move the issue
@logged_in_user.memberships.each {|m| @projects << m.project if Permission.allowed_to_role("projects/move_issues", m.role_id)}
# issue can be moved to any tracker
@trackers = Tracker.find(:all)
if request.post? and params[:new_project_id] and params[:new_tracker_id]
new_project = Project.find(params[:new_project_id])
new_tracker = Tracker.find(params[:new_tracker_id])
@issues.each { |i|
Jean-Philippe Lang
* code and views cleaning...
r97 # project dependent properties
unless i.project_id == new_project.id
i.category = nil
i.fixed_version = nil
end
Jean-Philippe Lang
git-svn-id: http://redmine.rubyforge.org/svn/trunk@32 e93f8b46-1217-0410-a6f0-8f06a7374b81
r30 # move the issue
i.project = new_project
i.tracker = new_tracker
i.save
}
flash[:notice] = l(:notice_successful_update)
redirect_to :action => 'list_issues', :id => @project
end
end
Jean-Philippe Lang
"queries" branch merged...
r92 def add_query
@query = Query.new(params[:query])
@query.project = @project
@query.user = logged_in_user
params[:fields].each do |field|
@query.add_filter(field, params[:operators][field], params[:values][field])
end if params[:fields]
if request.post? and @query.save
flash[:notice] = l(:notice_successful_create)
redirect_to :controller => 'reports', :action => 'issue_report', :id => @project
end
render :layout => false if request.xhr?
end
Jean-Philippe Lang
0.3 unstable...
r10 # 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
Jean-Philippe Lang
notice messages translation...
r15 flash[:notice] = l(:notice_successful_create)
Jean-Philippe Lang
0.3 unstable...
r10 redirect_to :action => 'list_news', :id => @project
end
end
end
# Show news list of @project
Jean-Philippe Lang
git-svn-id: http://redmine.rubyforge.org/svn/trunk@6 e93f8b46-1217-0410-a6f0-8f06a7374b81
r4 def list_news
Jean-Philippe Lang
Initial commit...
r2 @news_pages, @news = paginate :news, :per_page => 10, :conditions => ["project_id=?", @project.id], :include => :author, :order => "news.created_on DESC"
Jean-Philippe Lang
ajaxified paginators...
r31 render :action => "list_news", :layout => false if 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
0.3 unstable...
r10
Jean-Philippe Lang
fixed bug when no version is selected in projects/add_file...
r94 def add_file
Jean-Philippe Lang
added multiple file upload for documents and files modules...
r127 if request.post?
@version = @project.versions.find_by_id(params[:version_id])
# Save the attachments
params[:attachments].each { |a|
Attachment.create(:container => @version, :file => a, :author => logged_in_user) unless a.size == 0
} if params[:attachments] and params[:attachments].is_a? Array
redirect_to :controller => 'projects', :action => 'list_files', :id => @project
Jean-Philippe Lang
Initial commit...
r2 end
@versions = @project.versions
end
def list_files
@versions = @project.versions
end
Jean-Philippe Lang
tracker filter added on change log...
r16 # Show changelog for @project
Jean-Philippe Lang
git-svn-id: http://redmine.rubyforge.org/svn/trunk@6 e93f8b46-1217-0410-a6f0-8f06a7374b81
r4 def changelog
Jean-Philippe Lang
tracker filter added on change log...
r16 @trackers = Tracker.find(:all, :conditions => ["is_in_chlog=?", true])
if request.get?
@selected_tracker_ids = @trackers.collect {|t| t.id.to_s }
else
@selected_tracker_ids = params[:tracker_ids].collect { |id| id.to_i.to_s } if params[:tracker_ids] and params[:tracker_ids].is_a? Array
end
@selected_tracker_ids ||= []
Jean-Philippe Lang
git-svn-id: http://redmine.rubyforge.org/svn/trunk@6 e93f8b46-1217-0410-a6f0-8f06a7374b81
r4 @fixed_issues = @project.issues.find(:all,
Jean-Philippe Lang
tracker filter added on change log...
r16 :include => [ :fixed_version, :status, :tracker ],
:conditions => [ "issue_statuses.is_closed=? and issues.tracker_id in (#{@selected_tracker_ids.join(',')}) and issues.fixed_version_id is not null", true],
:order => "versions.effective_date DESC, issues.id DESC"
) unless @selected_tracker_ids.empty?
@fixed_issues ||= []
Jean-Philippe Lang
git-svn-id: http://redmine.rubyforge.org/svn/trunk@6 e93f8b46-1217-0410-a6f0-8f06a7374b81
r4 end
Jean-Philippe Lang
Initial commit...
r2
Jean-Philippe Lang
git-svn-id: http://redmine.rubyforge.org/svn/trunk@38 e93f8b46-1217-0410-a6f0-8f06a7374b81
r36 def activity
Jean-Philippe Lang
* new report: project activity...
r42 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
@date_from = Date.civil(@year, @month, 1)
@date_to = (@date_from >> 1)-1
Jean-Philippe Lang
git-svn-id: http://redmine.rubyforge.org/svn/trunk@38 e93f8b46-1217-0410-a6f0-8f06a7374b81
r36 @events_by_day = {}
unless params[:show_issues] == "0"
Jean-Philippe Lang
* new report: project activity...
r42 @project.issues.find(:all, :include => [:author, :status], :conditions => ["issues.created_on>=? and issues.created_on<=?", @date_from, @date_to] ).each { |i|
Jean-Philippe Lang
git-svn-id: http://redmine.rubyforge.org/svn/trunk@38 e93f8b46-1217-0410-a6f0-8f06a7374b81
r36 @events_by_day[i.created_on.to_date] ||= []
@events_by_day[i.created_on.to_date] << i
}
@show_issues = 1
end
unless params[:show_news] == "0"
Jean-Philippe Lang
various eager loadings added...
r95 @project.news.find(:all, :conditions => ["news.created_on>=? and news.created_on<=?", @date_from, @date_to], :include => :author ).each { |i|
Jean-Philippe Lang
git-svn-id: http://redmine.rubyforge.org/svn/trunk@38 e93f8b46-1217-0410-a6f0-8f06a7374b81
r36 @events_by_day[i.created_on.to_date] ||= []
@events_by_day[i.created_on.to_date] << i
}
@show_news = 1
end
unless params[:show_files] == "0"
Jean-Philippe Lang
various eager loadings added...
r95 Attachment.find(:all, :select => "attachments.*", :joins => "LEFT JOIN versions ON versions.id = attachments.container_id", :conditions => ["attachments.container_type='Version' and versions.project_id=? and attachments.created_on>=? and attachments.created_on<=?", @project.id, @date_from, @date_to], :include => :author ).each { |i|
Jean-Philippe Lang
git-svn-id: http://redmine.rubyforge.org/svn/trunk@38 e93f8b46-1217-0410-a6f0-8f06a7374b81
r36 @events_by_day[i.created_on.to_date] ||= []
@events_by_day[i.created_on.to_date] << i
}
@show_files = 1
end
Jean-Philippe Lang
git-svn-id: http://redmine.rubyforge.org/svn/trunk@51 e93f8b46-1217-0410-a6f0-8f06a7374b81
r49 unless params[:show_documents] == "0"
Jean-Philippe Lang
bug fixed in projects/activity due to sql join...
r81 @project.documents.find(:all, :conditions => ["documents.created_on>=? and documents.created_on<=?", @date_from, @date_to] ).each { |i|
@events_by_day[i.created_on.to_date] ||= []
@events_by_day[i.created_on.to_date] << i
}
Jean-Philippe Lang
various eager loadings added...
r95 Attachment.find(:all, :select => "attachments.*", :joins => "LEFT JOIN documents ON documents.id = attachments.container_id", :conditions => ["attachments.container_type='Document' and documents.project_id=? and attachments.created_on>=? and attachments.created_on<=?", @project.id, @date_from, @date_to], :include => :author ).each { |i|
Jean-Philippe Lang
git-svn-id: http://redmine.rubyforge.org/svn/trunk@38 e93f8b46-1217-0410-a6f0-8f06a7374b81
r36 @events_by_day[i.created_on.to_date] ||= []
@events_by_day[i.created_on.to_date] << i
}
@show_documents = 1
end
Jean-Philippe Lang
calendar and activity views edited (previous/next links)...
r70
render :layout => false if request.xhr?
Jean-Philippe Lang
git-svn-id: http://redmine.rubyforge.org/svn/trunk@38 e93f8b46-1217-0410-a6f0-8f06a7374b81
r36 end
Jean-Philippe Lang
* new report: project activity...
r42
def calendar
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
@date_from = Date.civil(@year, @month, 1)
@date_to = (@date_from >> 1)-1
# start on monday
@date_from = @date_from - (@date_from.cwday-1)
# finish on sunday
@date_to = @date_to + (7-@date_to.cwday)
@issues = @project.issues.find(:all, :include => :tracker, :conditions => ["((start_date>=? and start_date<=?) or (due_date>=? and due_date<=?))", @date_from, @date_to, @date_from, @date_to])
render :layout => false if request.xhr?
end
def gantt
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
@month_from ||= (Date.today << 1).month
@year_from ||= (Date.today << 1).year
end
@zoom = (params[:zoom].to_i > 0 and params[:zoom].to_i < 5) ? params[:zoom].to_i : 2
@months = (params[:months].to_i > 0 and params[:months].to_i < 25) ? params[:months].to_i : 6
@date_from = Date.civil(@year_from, @month_from, 1)
@date_to = (@date_from >> @months) - 1
@issues = @project.issues.find(:all, :order => "start_date, due_date", :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)", @date_from, @date_to, @date_from, @date_to, @date_from, @date_to])
if params[:output]=='pdf'
@options_for_rfpdf ||= {}
@options_for_rfpdf[:file_name] = "gantt.pdf"
render :template => "projects/gantt.rfpdf", :layout => false
else
render :template => "projects/gantt.rhtml"
end
end
Jean-Philippe Lang
Initial commit...
r2 private
Jean-Philippe Lang
0.3 unstable...
r10 # Find project of id params[:id]
# if not found, redirect to project list
Jean-Philippe Lang
tracker filter added on change log...
r16 # Used as a before_filter
Jean-Philippe Lang
0.3 unstable...
r10 def find_project
Jean-Philippe Lang
* new report: project activity...
r42 @project = Project.find(params[:id])
@html_title = @project.name
Jean-Philippe Lang
ActiveRecord::RecordNotFound exceptions handled more gracefully...
r130 rescue ActiveRecord::RecordNotFound
render_404
Jean-Philippe Lang
0.3 unstable...
r10 end
Jean-Philippe Lang
"queries" branch merged...
r92
# Retrieve query from session or build a new query
def retrieve_query
if params[:query_id]
@query = @project.queries.find(params[:query_id])
else
if params[:set_filter] or !session[:query] or session[:query].project_id != @project.id
# Give it a name, required to be valid
@query = Query.new(:name => "_")
@query.project = @project
if params[:fields] and params[:fields].is_a? Array
params[:fields].each do |field|
@query.add_filter(field, params[:operators][field], params[:values][field])
end
else
@query.available_filters.keys.each do |field|
@query.add_short_filter(field, params[field]) if params[field]
end
end
session[:query] = @query
else
@query = session[:query]
end
end
end
Jean-Philippe Lang
Initial commit...
r2 end