##// END OF EJS Templates
"me" value is now available in queries for "assigned to" and "author" filters....
"me" value is now available in queries for "assigned to" and "author" filters. When executing the query, it is replaced by the currently logged in user. git-svn-id: http://redmine.rubyforge.org/svn/trunk@520 e93f8b46-1217-0410-a6f0-8f06a7374b81

File last commit:

r517:df0a49ff1447
r517:df0a49ff1447
Show More
projects_controller.rb
672 lines | 27.1 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.
require 'csv'
class ProjectsController < ApplicationController
layout 'base'
before_filter :find_project, :authorize, :except => [ :index, :list, :add ]
before_filter :require_admin, :only => [ :add, :destroy ]
Jean-Philippe Lang
Added fragment caching for calendar and gantt views...
r512
cache_sweeper :issue_sweeper, :only => [ :add_issue ]
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
helper IssuesHelper
helper :queries
include QueriesHelper
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
v0.2.0...
r5 # Lists public projects
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 def list
Jean-Philippe Lang
Added parent project name (if it exists) on project list and project overview....
r401 sort_init "#{Project.table_name}.name", "asc"
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 sort_update
Jean-Philippe Lang
Projects menu item now shows the list of public projects and projects for which the user is a member (marked with a star)....
r457 @project_count = Project.count(:all, :conditions => Project.visible_by(logged_in_user))
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 @project_pages = Paginator.new self, @project_count,
15,
params['page']
@projects = Project.find :all, :order => sort_clause,
Jean-Philippe Lang
Projects menu item now shows the list of public projects and projects for which the user is a member (marked with a star)....
r457 :conditions => Project.visible_by(logged_in_user),
Jean-Philippe Lang
Added parent project name (if it exists) on project list and project overview....
r401 :include => :parent,
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 :limit => @project_pages.items_per_page,
:offset => @project_pages.current.offset
Jean-Philippe Lang
ajaxified paginators...
r31 render :action => "list", :layout => false if request.xhr?
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
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)
@root_projects = Project.find(:all, :conditions => "parent_id is null")
@project = Project.new(params[:project])
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]
@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
if params[:repository_enabled] && params[:repository_enabled] == "1"
@project.repository = Repository.new
@project.repository.attributes = params[:repository]
end
if "1" == params[:wiki_enabled]
@project.wiki = Wiki.new
@project.wiki.attributes = params[:wiki]
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
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 svn:eol-style native property on /app files...
r330 @subprojects = @project.children if @project.children.size > 0
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
v0.2.0...
r5 end
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330
def settings
@root_projects = Project::find(:all, :conditions => ["parent_id is null and id <> ?", @project.id])
@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) }
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
if params[:repository_enabled]
case params[:repository_enabled]
when "0"
@project.repository = nil
when "1"
@project.repository ||= Repository.new
@project.repository.update_attributes params[:repository]
end
end
if params[:wiki_enabled]
case params[:wiki_enabled]
when "0"
@project.wiki.destroy if @project.wiki
when "1"
@project.wiki ||= Wiki.new
@project.wiki.update_attributes params[:wiki]
end
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
0.3 unstable...
r10 # Delete @project
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 def destroy
Jean-Philippe Lang
Initial commit...
r2 if request.post? and params[:confirm]
@project.destroy
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 redirect_to :controller => 'admin', :action => 'projects'
end
end
# 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
flash[:notice] = l(:notice_successful_create)
redirect_to :action => 'settings', :tab => 'categories', :id => @project
else
settings
render :action => 'settings'
end
end
end
# 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 member to @project
def add_member
@member = @project.members.build(params[:member])
Jean-Philippe Lang
Members management in project settings is now AJAXified...
r505 if request.post? && @member.save
respond_to do |format|
format.html { redirect_to :action => 'settings', :tab => 'members', :id => @project }
format.js { render(:update) {|page| page.replace_html "tab-content-members", :partial => 'members'} }
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
Jean-Philippe Lang
Members management in project settings is now AJAXified...
r505 else
settings
render :action => 'settings'
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
end
# Show members list of @project
def list_members
@members = @project.members.find(:all)
end
# Add a new document to @project
def add_document
@categories = Enumeration::get_values('DCAT')
@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)
Mailer.deliver_document_add(@document) if Permission.find_by_controller_and_action(params[:controller], params[:action]).mail_enabled?
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
@documents = @project.documents.find :all, :include => :category
end
# Add a new issue to @project
def add_issue
@tracker = Tracker.find(params[:tracker_id])
@priorities = Enumeration::get_values('IPRI')
Jean-Philippe Lang
Feature 9784 Set status when raising issue....
r404
default_status = IssueStatus.default
Jean-Philippe Lang
Fixed a regression (crash when an admin with no role on the project try to create an issue)...
r417 @issue = Issue.new(:project => @project, :tracker => @tracker)
@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 svn:eol-style native property on /app files...
r330 if request.get?
@issue.start_date = Date.today
@custom_values = @project.custom_fields_for_issues(@tracker).collect { |x| CustomValue.new(:custom_field => x, :customized => @issue) }
else
@issue.attributes = params[:issue]
Jean-Philippe Lang
Feature 9784 Set status when raising issue....
r404
requested_status = IssueStatus.find_by_id(params[:issue][:status_id])
@issue.status = (@allowed_statuses.include? requested_status) ? requested_status : default_status
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 @issue.author_id = self.logged_in_user.id if self.logged_in_user
# Multiple file upload
@attachments = []
params[:attachments].each { |a|
@attachments << Attachment.new(:container => @issue, :file => a, :author => logged_in_user) unless a.size == 0
} if params[:attachments] and params[:attachments].is_a? Array
@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]) }
@issue.custom_values = @custom_values
if @issue.save
@attachments.each(&:save)
flash[:notice] = l(:notice_successful_create)
Mailer.deliver_issue_add(@issue) if Permission.find_by_controller_and_action(params[:controller], params[:action]).mail_enabled?
redirect_to :action => 'list_issues', :id => @project
end
end
end
# Show filtered/sorted issues list of @project
def list_issues
Jean-Philippe Lang
fixed #9308 table_name pre/suffix support...
r334 sort_init "#{Issue.table_name}.id", "desc"
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 sort_update
retrieve_query
@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
@results_per_page = session[:results_per_page] || 25
end
if @query.valid?
Jean-Philippe Lang
Custom fields for issues can now be used as filters on issue list....
r444 @issue_count = Issue.count(:include => [:status, :project, :custom_values], :conditions => @query.statement)
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 @issue_pages = Paginator.new self, @issue_count, @results_per_page, params['page']
@issues = Issue.find :all, :order => sort_clause,
Jean-Philippe Lang
Custom fields for issues can now be used as filters on issue list....
r444 :include => [ :assigned_to, :status, :tracker, :project, :priority, :custom_values ],
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 :conditions => @query.statement,
:limit => @issue_pages.items_per_page,
:offset => @issue_pages.current.offset
end
@trackers = Tracker.find :all, :order => 'position'
render :layout => false if request.xhr?
end
# Export filtered/sorted issues list to CSV
def export_issues_csv
Jean-Philippe Lang
fixed #9308 table_name pre/suffix support...
r334 sort_init "#{Issue.table_name}.id", "desc"
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 sort_update
retrieve_query
render :action => 'list_issues' and return unless @query.valid?
@issues = Issue.find :all, :order => sort_clause,
Jean-Philippe Lang
Subproject name added in csv and pdf exports....
r493 :include => [ :assigned_to, :author, :status, :tracker, :priority, :project, {:custom_values => :custom_field} ],
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 :conditions => @query.statement,
:limit => Setting.issues_export_limit
ic = Iconv.new(l(:general_csv_encoding), 'UTF-8')
export = StringIO.new
CSV::Writer.generate(export, l(:general_csv_separator)) do |csv|
# csv header fields
headers = [ "#", l(:field_status),
Jean-Philippe Lang
Subproject name added in csv and pdf exports....
r493 l(:field_project),
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 l(:field_tracker),
l(:field_priority),
l(:field_subject),
Jean-Philippe Lang
"Author" column replaced by "Assigned to" in issue list....
r419 l(:field_assigned_to),
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 l(:field_author),
l(:field_start_date),
l(:field_due_date),
l(:field_done_ratio),
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
@issues.each do |issue|
fields = [issue.id, issue.status.name,
Jean-Philippe Lang
Subproject name added in csv and pdf exports....
r493 issue.project.name,
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 issue.tracker.name,
issue.priority.name,
Jean-Philippe Lang
Subproject name added in csv and pdf exports....
r493 issue.subject,
Jean-Philippe Lang
"Author" column replaced by "Assigned to" in issue list....
r419 (issue.assigned_to ? issue.assigned_to.name : ""),
issue.author.name,
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 issue.start_date ? l_date(issue.start_date) : nil,
issue.due_date ? l_date(issue.due_date) : nil,
issue.done_ratio,
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) }
end
end
export.rewind
send_data(export.read, :type => 'text/csv; header=present', :filename => 'export.csv')
end
# Export filtered/sorted issues to PDF
def export_issues_pdf
Jean-Philippe Lang
fixed #9308 table_name pre/suffix support...
r334 sort_init "#{Issue.table_name}.id", "desc"
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 sort_update
retrieve_query
render :action => 'list_issues' and return unless @query.valid?
@issues = Issue.find :all, :order => sort_clause,
Jean-Philippe Lang
Subproject name added in csv and pdf exports....
r493 :include => [ :author, :status, :tracker, :priority, :project, :custom_values ],
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 :conditions => @query.statement,
:limit => Setting.issues_export_limit
@options_for_rfpdf ||= {}
@options_for_rfpdf[:file_name] = "export.pdf"
render :layout => false
end
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
Jean-Philippe Lang
Various code cleaning, mainly on User, Permission and IssueStatus models....
r411 @logged_in_user.memberships.each {|m| @projects << m.project if Permission.allowed_to_role("projects/move_issues", m.role)}
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]
new_project = Project.find(params[:new_project_id])
new_tracker = Tracker.find(params[:new_tracker_id])
@issues.each { |i|
# project dependent properties
unless i.project_id == new_project.id
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 svn:eol-style native property on /app files...
r330 end
# 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
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
# 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)
redirect_to :action => 'list_news', :id => @project
end
end
end
# Show news list of @project
def list_news
Jean-Philippe Lang
fixed #9308 table_name pre/suffix support...
r334 @news_pages, @news = paginate :news, :per_page => 10, :conditions => ["project_id=?", @project.id], :include => :author, :order => "#{News.table_name}.created_on DESC"
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 render :action => "list_news", :layout => false if request.xhr?
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
Mailer.deliver_attachments_add(@attachments) if !@attachments.empty? and Permission.find_by_controller_and_action(params[:controller], params[:action]).mail_enabled?
redirect_to :controller => 'projects', :action => 'list_files', :id => @project
end
@versions = @project.versions
end
def list_files
@versions = @project.versions
end
# Show changelog for @project
def changelog
@trackers = Tracker.find(:all, :conditions => ["is_in_chlog=?", true], :order => 'position')
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 @fixed_issues = @project.issues.find(:all,
:include => [ :fixed_version, :status, :tracker ],
Jean-Philippe Lang
fixed #9308 table_name pre/suffix support...
r334 :conditions => [ "#{IssueStatus.table_name}.is_closed=? and #{Issue.table_name}.tracker_id in (#{@selected_tracker_ids.join(',')}) and #{Issue.table_name}.fixed_version_id is not null", true],
:order => "#{Version.table_name}.effective_date DESC, #{Issue.table_name}.id DESC"
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 ) unless @selected_tracker_ids.empty?
@fixed_issues ||= []
end
def roadmap
@trackers = Tracker.find(:all, :conditions => ["is_in_roadmap=?", true], :order => 'position')
Jean-Philippe Lang
Added an option to see all versions in the roadmap view (including completed ones)....
r513 retrieve_selected_tracker_ids(@trackers)
conditions = ("1" == params[:completed] ? nil : [ "#{Version.table_name}.effective_date > ?", Date.today])
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 @versions = @project.versions.find(:all,
Jean-Philippe Lang
Added an option to see all versions in the roadmap view (including completed ones)....
r513 :conditions => conditions,
Jean-Philippe Lang
fixed #9308 table_name pre/suffix support...
r334 :order => "#{Version.table_name}.effective_date ASC"
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
@date_from = Date.civil(@year, @month, 1)
Jean-Philippe Lang
Fixed: last day of the month not included in project activity...
r490 @date_to = @date_from >> 1
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330
@events_by_day = {}
unless params[:show_issues] == "0"
Jean-Philippe Lang
Added link_to_issue helper....
r428 @project.issues.find(:all, :include => [:author], :conditions => ["#{Issue.table_name}.created_on>=? and #{Issue.table_name}.created_on<=?", @date_from, @date_to] ).each { |i|
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 @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
fixed #9308 table_name pre/suffix support...
r334 @project.news.find(:all, :conditions => ["#{News.table_name}.created_on>=? and #{News.table_name}.created_on<=?", @date_from, @date_to], :include => :author ).each { |i|
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 @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
fixed #9308 table_name pre/suffix support...
r334 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 ).each { |i|
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 @events_by_day[i.created_on.to_date] ||= []
@events_by_day[i.created_on.to_date] << i
}
@show_files = 1
end
unless params[:show_documents] == "0"
Jean-Philippe Lang
fixed #9308 table_name pre/suffix support...
r334 @project.documents.find(:all, :conditions => ["#{Document.table_name}.created_on>=? and #{Document.table_name}.created_on<=?", @date_from, @date_to] ).each { |i|
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 @events_by_day[i.created_on.to_date] ||= []
@events_by_day[i.created_on.to_date] << i
}
Jean-Philippe Lang
fixed #9308 table_name pre/suffix support...
r334 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 ).each { |i|
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 @events_by_day[i.created_on.to_date] ||= []
@events_by_day[i.created_on.to_date] << i
}
@show_documents = 1
end
Jean-Philippe Lang
Removed "Wiki edits" option in the activity view if the project has no wiki....
r514 unless @project.wiki.nil? || params[:show_wiki_edits] == "0"
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
patch #9429 Display Wiki edits in activity log (Nick Read)...
r367 "#{WikiContent.versioned_table_name}.#{WikiContent.version_column}, #{WikiPage.table_name}.title"
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]
WikiContent.versioned_class.find(:all, :select => select, :joins => joins, :conditions => conditions).each { |i|
# We provide this alias so all events can be treated in the same manner
def i.created_on
self.updated_on
end
@events_by_day[i.created_on.to_date] ||= []
@events_by_day[i.created_on.to_date] << i
}
@show_wiki_edits = 1
end
Jean-Philippe Lang
SVN commits are now stored in the database, and added to the activity view and the search engine....
r374 unless @project.repository.nil? || params[:show_changesets] == "0"
@project.repository.changesets.find(:all, :conditions => ["#{Changeset.table_name}.committed_on BETWEEN ? AND ?", @date_from, @date_to]).each { |i|
def i.created_on
self.committed_on
end
@events_by_day[i.created_on.to_date] ||= []
@events_by_day[i.created_on.to_date] << i
}
@show_changesets = 1
end
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 render :layout => false if request.xhr?
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
@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
Jean-Philippe Lang
Patch #9705 Tracker filtering on Main Calendar (Jeffrey Jones)...
r392 @date_to = @date_to + (7-@date_to.cwday)
Jean-Philippe Lang
Added versions due dates on calendar....
r426 @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 calendar....
r426 @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
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<=?)) and #{Issue.table_name}.tracker_id in (#{@selected_tracker_ids.join(',')})", @date_from, @date_to, @date_from, @date_to]
) unless @selected_tracker_ids.empty?
end
Jean-Philippe Lang
Added versions due dates on calendar....
r426 @events += @project.versions.find(:all, :conditions => ["effective_date BETWEEN ? AND ?", @date_from, @date_to])
Jean-Philippe Lang
Patch #9705 Tracker filtering on Main Calendar (Jeffrey Jones)...
r392
Jean-Philippe Lang
Added versions due dates on calendar....
r426 @ending_events_by_days = @events.group_by {|event| event.due_date}
@starting_events_by_days = @events.group_by {|event| event.start_date}
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
@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
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
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
Added a quick search form in page header. Search functionality moved to a dedicated controller....
r486
Jean-Philippe Lang
added rss/atom feeds at project levels for:...
r336 def feeds
@queries = @project.queries.find :all, :conditions => ["is_public=? or user_id=?", true, (logged_in_user ? logged_in_user.id : 0)]
@key = logged_in_user.get_or_create_rss_key.value if logged_in_user
end
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])
@html_title = @project.name
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
added svn:eol-style native property on /app files...
r330 # Retrieve query from session or build a new query
def retrieve_query
if params[:query_id]
@query = @project.queries.find(params[:query_id])
Jean-Philippe Lang
"me" value is now available in queries for "assigned to" and "author" filters....
r517 @query.executed_by = logged_in_user
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 session[:query] = @query
else
if params[:set_filter] or !session[:query] or session[:query].project_id != @project.id
# Give it a name, required to be valid
Jean-Philippe Lang
"me" value is now available in queries for "assigned to" and "author" filters....
r517 @query = Query.new(:name => "_", :executed_by => logged_in_user)
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 @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