Patch #26621 ยป 0001-Allow-to-copy-documents-along-with-a-project.patch
| app/models/project.rb | ||
|---|---|---|
| 821 | 821 |
def copy(project, options={})
|
| 822 | 822 |
project = project.is_a?(Project) ? project : Project.find(project) |
| 823 | 823 | |
| 824 |
to_be_copied = %w(members wiki versions issue_categories issues queries boards) |
|
| 824 |
to_be_copied = %w(members wiki versions issue_categories issues queries boards documents)
|
|
| 825 | 825 |
to_be_copied = to_be_copied & Array.wrap(options[:only]) unless options[:only].nil? |
| 826 | 826 | |
| 827 | 827 |
Project.transaction do |
| ... | ... | |
| 1102 | 1102 |
end |
| 1103 | 1103 |
end |
| 1104 | 1104 | |
| 1105 |
# Copies documents from +project+ |
|
| 1106 |
def copy_documents(project) |
|
| 1107 |
project.documents.each do |document| |
|
| 1108 |
new_document = Document.new |
|
| 1109 |
new_document.attributes = document.attributes.dup.except("id", "project_id")
|
|
| 1110 |
new_document.project = self |
|
| 1111 | ||
| 1112 |
new_document.attachments = document.attachments.map do |attachement| |
|
| 1113 |
attachement.copy(:container => new_document) |
|
| 1114 |
end |
|
| 1115 | ||
| 1116 |
self.documents << new_document |
|
| 1117 |
end |
|
| 1118 |
end |
|
| 1119 | ||
| 1105 | 1120 |
def allowed_permissions |
| 1106 | 1121 |
@allowed_permissions ||= begin |
| 1107 | 1122 |
module_names = enabled_modules.loaded? ? enabled_modules.map(&:name) : enabled_modules.pluck(:name) |
| app/views/projects/copy.html.erb | ||
|---|---|---|
| 9 | 9 |
<label class="block"><%= check_box_tag 'only[]', 'issue_categories', true, :id => nil %> <%= l(:label_issue_category_plural) %> (<%= @source_project.issue_categories.count %>)</label> |
| 10 | 10 |
<label class="block"><%= check_box_tag 'only[]', 'issues', true, :id => nil %> <%= l(:label_issue_plural) %> (<%= @source_project.issues.count %>)</label> |
| 11 | 11 |
<label class="block"><%= check_box_tag 'only[]', 'queries', true, :id => nil %> <%= l(:label_query_plural) %> (<%= @source_project.queries.count %>)</label> |
| 12 |
<label class="block"><%= check_box_tag 'only[]', 'documents', true, :id => nil %> <%= l(:label_document_plural) %> (<%= @source_project.documents.count %>)</label> |
|
| 12 | 13 |
<label class="block"><%= check_box_tag 'only[]', 'boards', true, :id => nil %> <%= l(:label_board_plural) %> (<%= @source_project.boards.count %>)</label> |
| 13 | 14 |
<label class="block"><%= check_box_tag 'only[]', 'wiki', true, :id => nil %> <%= l(:label_wiki_page_plural) %> (<%= @source_project.wiki.nil? ? 0 : @source_project.wiki.pages.count %>)</label> |
| 14 | 15 |
<%= hidden_field_tag 'only[]', '' %> |
| test/object_helpers.rb | ||
|---|---|---|
| 227 | 227 |
query |
| 228 | 228 |
end |
| 229 | 229 | |
| 230 |
def Document.generate!(attributes={})
|
|
| 231 |
document = new(attributes) |
|
| 232 |
document.title = "Generated document" if document.title.blank? |
|
| 233 |
document.category ||= DocumentCategory.find(1) |
|
| 234 |
document.save! |
|
| 235 |
document |
|
| 236 |
end |
|
| 237 | ||
| 230 | 238 |
def generate_import(fixture_name='import_issues.csv') |
| 231 | 239 |
import = IssueImport.new |
| 232 | 240 |
import.user_id = 2 |
| test/unit/project_copy_test.rb | ||
|---|---|---|
| 341 | 341 |
end |
| 342 | 342 |
end |
| 343 | 343 | |
| 344 |
test "#copy should copy documents" do |
|
| 345 |
source_project = Project.find(1) |
|
| 346 |
assert @project.copy(source_project) |
|
| 347 | ||
| 348 |
assert_equal 2, @project.documents.size |
|
| 349 |
@project.documents.each do |document| |
|
| 350 |
assert !source_project.documents.include?(document) |
|
| 351 |
end |
|
| 352 |
end |
|
| 353 | ||
| 354 |
test "#copy should copy document attachments" do |
|
| 355 |
document = Document.generate!(:title => "copy with attachment", :category_id => 1, :project_id => @source_project.id) |
|
| 356 |
Attachment.create!(:container => document, :file => uploaded_test_file("testfile.txt", "text/plain"), :author_id => 1)
|
|
| 357 |
@source_project.documents << document |
|
| 358 |
assert @project.copy(@source_project) |
|
| 359 | ||
| 360 |
copied_document = @project.documents.where(:title => "copy with attachment").first |
|
| 361 |
assert_not_nil copied_document |
|
| 362 |
assert_equal 1, copied_document.attachments.count, "Attachment not copied" |
|
| 363 |
assert_equal "testfile.txt", copied_document.attachments.first.filename |
|
| 364 |
end |
|
| 365 | ||
| 344 | 366 |
test "#copy should change the new issues to use the copied issue categories" do |
| 345 | 367 |
issue = Issue.find(4) |
| 346 | 368 |
issue.update_attribute(:category_id, 3) |