Project

General

Profile

Feature #3055 » duplicate_issues_attachment.diff

Preethi Sriram, 2012-01-17 01:14

View differences:

app/models/journal.rb (working copy)
85 85
  def notify=(arg)
86 86
    @notify = arg
87 87
  end
88
  
89
  # copies a set of journal notes  from one object to another
90
  def self.copy_notes(objToId, objFromId)
91
   transaction do
92
      connection.insert "INSERT INTO #{Journal.table_name} (journalized_id,journalized_type,user_id,notes,created_on)" +
93
                              " SELECT #{objToId}, journalized_type,user_id,notes,created_on" +
94
                              " FROM #{Journal.table_name}" +
95
                              " WHERE journalized_id = #{objFromId}"
96
       
97
     
98
    end
99
    true
100
  end
88 101
end
app/models/issue.rb (working copy)
136 136
    self.attributes = issue.attributes.dup.except("id", "root_id", "parent_id", "lft", "rgt", "created_on", "updated_on")
137 137
    self.custom_field_values = issue.custom_field_values.inject({}) {|h,v| h[v.custom_field_id] = v.value; h}
138 138
    self.status = issue.status
139
   
139 140
    self
140 141
  end
141

  
142
  # copies attachments from one issue to another
143
  def copy_attachment(arg)
144
   
145
    issue = arg.is_a?(Issue) ? arg : Issue.visible.find(arg)
146
    
147
    if issue.attachments.any?
148
      Attachment.copy_files(id,issue.id)
149
    end
150
   
151
  end
152
  
153
  def copy_notes(arg)
154
    issue = arg.is_a?(Issue) ? arg : Issue.visible.find(arg)
155
    
156
    if issue.journals.present?
157
      Journal.copy_notes(id,issue.id)
158
    end
159
    
160
  end
142 161
  # Moves/copies an issue to a new project and tracker
143 162
  # Returns the moved/copied issue on success, false on failure
144 163
  def move_to_project(*args)
app/models/attachment.rb (working copy)
160 160
    end
161 161
    {:files => attached, :unsaved => obj.unsaved_attachments}
162 162
  end
163
  
164
  # copies a set of files attached from one object to another
165
  def self.copy_files(objToId, objFromId)
166
   transaction do
167
       connection.insert "INSERT INTO #{Attachment.table_name} (container_id,container_type,filename,disk_filename,filesize,content_type,digest,downloads,author_id,created_on,description)" +
168
                              " SELECT #{objToId}, container_type,filename,disk_filename,filesize,content_type,digest,downloads,author_id,created_on,description" +
169
                              " FROM #{Attachment.table_name}" +
170
                              " WHERE container_id = #{objFromId}"
171
    end
172
    true
173
  end
163 174

  
164 175
private
165 176
  def sanitize_filename(value)
app/controllers/issues_controller.rb (working copy)
129 129
  # Add a new issue
130 130
  # The new issue will be created from an existing one if copy_from parameter is given
131 131
  def new
132
    respond_to do |format|
133
      format.html { render :action => 'new', :layout => !request.xhr? }
134
      format.js { render :partial => 'attributes' }
132
    if params[:copy_from]
133
       respond_to do |format|
134
        format.html { render :action => 'new',:copy_from => params[:copy_from], :layout => !request.xhr? }
135
        format.js { render :partial => 'attributes' }
136
      end
137
   
138
    else
139
      respond_to do |format|
140
        format.html { render :action => 'new', :layout => !request.xhr? }
141
        format.js { render :partial => 'attributes' }
142
      end
135 143
    end
136 144
  end
137 145

  
138 146
  def create
147
    
139 148
    call_hook(:controller_issues_new_before_save, { :params => params, :issue => @issue })
140 149
    if @issue.save
150
      @issue.copy_attachment(params[:copy_from]) if params[:copy_from]
151
      @issue.copy_notes(params[:copy_from]) if params[:copy_from]
141 152
      attachments = Attachment.attach_files(@issue, params[:attachments])
142 153
      render_attachment_warning_if_needed(@issue)
143 154
      flash[:notice] = l(:notice_successful_create)
app/views/issues/new.rhtml (working copy)
1 1
<h2><%=l(:label_issue_new)%></h2>
2 2

  
3
<% labelled_tabular_form_for :issue, @issue, :url => {:controller => 'issues', :action => 'create', :project_id => @project},
3
<% labelled_tabular_form_for :issue, @issue, :url => {:controller => 'issues', :action => 'create',:copy_from => params[:copy_from], :project_id => @project},
4 4
                             :html => {:multipart => true, :id => 'issue-form', :class => 'tabular new-issue-form'} do |f| %>
5 5
    <%= error_messages_for 'issue' %>
6 6
    <div class="box">
7 7

  
(1-1/4)