diff --git a/app/models/attachment.rb b/app/models/attachment.rb
index 08f440816..f44fe8b4d 100644
--- a/app/models/attachment.rb
+++ b/app/models/attachment.rb
@@ -40,7 +40,7 @@ class Attachment < ActiveRecord::Base
@temp_file = incoming_file
if @temp_file.size > 0
self.filename = sanitize_filename(@temp_file.original_filename)
- self.disk_filename = DateTime.now.strftime("%y%m%d%H%M%S") + "_" + self.filename
+ self.disk_filename = Attachment.disk_filename(filename)
self.content_type = @temp_file.content_type.to_s.chomp
self.filesize = @temp_file.size
end
@@ -100,4 +100,17 @@ private
# Finally, replace all non alphanumeric, hyphens or periods with underscore
@filename = just_filename.gsub(/[^\w\.\-]/,'_')
end
+
+ # Returns an ASCII or hashed filename
+ def self.disk_filename(filename)
+ df = DateTime.now.strftime("%y%m%d%H%M%S") + "_"
+ if filename =~ %r{^[a-zA-Z0-9_\.\-]*$}
+ df << filename
+ else
+ df << Digest::MD5.hexdigest(filename)
+ # keep the extension if any
+ df << $1 if filename =~ %r{(\.[a-zA-Z0-9]+)$}
+ end
+ df
+ end
end
diff --git a/app/models/project.rb b/app/models/project.rb
index 964469649..8c32c8562 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -73,9 +73,9 @@ class Project < ActiveRecord::Base
def issues_with_subprojects(include_subprojects=false)
conditions = nil
- if include_subprojects && !active_children.empty?
- ids = [id] + active_children.collect {|c| c.id}
- conditions = ["#{Project.table_name}.id IN (#{ids.join(',')})"]
+ if include_subprojects
+ ids = [id] + child_ids
+ conditions = ["#{Project.table_name}.id IN (#{ids.join(',')}) AND #{Project.visible_by}"]
end
conditions ||= ["#{Project.table_name}.id = ?", id]
# Quick and dirty fix for Rails 2 compatibility
@@ -93,6 +93,7 @@ class Project < ActiveRecord::Base
end
def self.visible_by(user=nil)
+ user ||= User.current
if user && user.admin?
return "#{Project.table_name}.status=#{Project::STATUS_ACTIVE}"
elsif user && user.memberships.any?
diff --git a/app/models/query.rb b/app/models/query.rb
index d9a720812..f25b5c401 100644
--- a/app/models/query.rb
+++ b/app/models/query.rb
@@ -265,7 +265,7 @@ class Query < ActiveRecord::Base
def statement
# project/subprojects clause
- clause = ''
+ project_clauses = []
if project && !@project.active_children.empty?
ids = [project.id]
if has_filter?("subproject_id")
@@ -277,17 +277,16 @@ class Query < ActiveRecord::Base
# main project only
else
# all subprojects
- ids += project.active_children.collect{|p| p.id}
+ ids += project.child_ids
end
elsif Setting.display_subprojects_issues?
- ids += project.active_children.collect{|p| p.id}
+ ids += project.child_ids
end
- clause << "#{Issue.table_name}.project_id IN (%s)" % ids.join(',')
+ project_clauses << "#{Issue.table_name}.project_id IN (%s)" % ids.join(',')
elsif project
- clause << "#{Issue.table_name}.project_id = %d" % project.id
- else
- clause << Project.visible_by(User.current)
+ project_clauses << "#{Issue.table_name}.project_id = %d" % project.id
end
+ project_clauses << Project.visible_by(User.current)
# filters clauses
filters_clauses = []
@@ -365,8 +364,6 @@ class Query < ActiveRecord::Base
filters_clauses << sql
end if filters and valid?
- clause << ' AND ' unless clause.empty?
- clause << filters_clauses.join(' AND ') unless filters_clauses.empty?
- clause
+ (project_clauses + filters_clauses).join(' AND ')
end
end
diff --git a/app/views/issues/_edit.rhtml b/app/views/issues/_edit.rhtml
index 2e00ab520..49f198a63 100644
--- a/app/views/issues/_edit.rhtml
+++ b/app/views/issues/_edit.rhtml
@@ -21,9 +21,9 @@
<%= time_entry.text_field :hours, :size => 6, :label => :label_spent_time %> <%= l(:field_hours) %>
-
<%= time_entry.text_field :comments, :size => 40 %>
<%= time_entry.select :activity_id, (@activities.collect {|p| [p.name, p.id]}) %>
+ <%= time_entry.text_field :comments, :size => 60 %>
<% end %>
<% end %>
diff --git a/app/views/roles/_form.rhtml b/app/views/roles/_form.rhtml
index 58dc2af41..4aad45471 100644
--- a/app/views/roles/_form.rhtml
+++ b/app/views/roles/_form.rhtml
@@ -12,7 +12,7 @@
<% end %>
<%= l(:label_permissions) %>
-
+
<% perms_by_module = @permissions.group_by {|p| p.project_module.to_s} %>
<% perms_by_module.keys.sort.each do |mod| %>
<% end %>
-
<%= check_all_links 'role_form' %>
+
<%= check_all_links 'permissions' %>
<%= hidden_field_tag 'role[permissions][]', '' %>
diff --git a/app/views/settings/_notifications.rhtml b/app/views/settings/_notifications.rhtml
index ac3213853..1a472d606 100644
--- a/app/views/settings/_notifications.rhtml
+++ b/app/views/settings/_notifications.rhtml
@@ -9,13 +9,13 @@
<%= hidden_field_tag 'settings[bcc_recipients]', 0 %>
-