Defect #6136 ยป issue_serialization_patch.diff
| app/controllers/issues_controller.rb | ||
|---|---|---|
| 109 | 109 |
rescue ActiveRecord::RecordNotFound |
| 110 | 110 |
render_404 |
| 111 | 111 |
end |
| 112 |
|
|
| 112 | ||
| 113 | 113 |
def show |
| 114 | 114 |
@journals = @issue.journals.find(:all, :include => [:user, :details], :order => "#{Journal.table_name}.created_on ASC")
|
| 115 | 115 |
@journals.each_with_index {|j,i| j.indice = i+1}
|
| ... | ... | |
| 120 | 120 |
@edit_allowed = User.current.allowed_to?(:edit_issues, @project) |
| 121 | 121 |
@priorities = IssuePriority.all |
| 122 | 122 |
@time_entry = TimeEntry.new |
| 123 | ||
| 123 | 124 |
respond_to do |format| |
| 124 | 125 |
format.html { render :template => 'issues/show.rhtml' }
|
| 125 |
format.xml { render :layout => false }
|
|
| 126 |
format.xml { render :text => @issue.to_xml, :layout => false }
|
|
| 126 | 127 |
format.json { render :text => @issue.to_json, :layout => false }
|
| 127 | 128 |
format.atom { render :action => 'changes', :layout => false, :content_type => 'application/atom+xml' }
|
| 128 | 129 |
format.pdf { send_data(issue_to_pdf(@issue), :type => 'application/pdf', :filename => "#{@project.identifier}-#{@issue.id}.pdf") }
|
| app/models/issue.rb | ||
|---|---|---|
| 615 | 615 |
end |
| 616 | 616 |
projects |
| 617 | 617 |
end |
| 618 | ||
| 619 |
def to_xml |
|
| 620 |
xml = Builder::XmlMarkup.new |
|
| 621 |
xml.instruct! |
|
| 622 |
xml.issue do |
|
| 623 |
xml.id id |
|
| 624 |
xml.project(:id => project_id, :name => project.name) unless project.nil? |
|
| 625 |
xml.tracker(:id => tracker_id, :name => tracker.name) unless tracker.nil? |
|
| 626 |
xml.status(:id => status_id, :name => status.name) unless status.nil? |
|
| 627 |
xml.priority(:id => priority_id, :name => priority.name) unless priority.nil? |
|
| 628 |
xml.author(:id => author_id, :name => author.name) unless author.nil? |
|
| 629 |
xml.assigned_to(:id => assigned_to_id, :name => assigned_to.name) unless assigned_to.nil? |
|
| 630 |
xml.category(:id => category_id, :name => category.name) unless category.nil? |
|
| 631 |
xml.fixed_version(:id => fixed_version_id, :name => fixed_version.name) unless fixed_version.nil? |
|
| 632 |
xml.parent(:id => parent_id) unless parent.nil? |
|
| 633 |
|
|
| 634 |
xml.subject subject |
|
| 635 |
xml.description description |
|
| 636 |
xml.start_date start_date |
|
| 637 |
xml.due_date due_date |
|
| 638 |
xml.done_ratio done_ratio |
|
| 639 |
xml.estimated_hours estimated_hours |
|
| 640 |
if User.current.allowed_to?(:view_time_entries, project) |
|
| 641 |
xml.spent_hours spent_hours |
|
| 642 |
end |
|
| 643 |
|
|
| 644 |
xml.custom_fields do |
|
| 645 |
custom_field_values.each do |custom_value| |
|
| 646 |
xml.custom_field custom_value.value, :id => custom_value.custom_field_id, :name => custom_value.custom_field.name |
|
| 647 |
end |
|
| 648 |
end unless custom_field_values.empty? |
|
| 649 |
|
|
| 650 |
xml.created_on created_on |
|
| 651 |
xml.updated_on updated_on |
|
| 652 |
|
|
| 653 |
xml.relations do |
|
| 654 |
relations.select {|r| r.other_issue(self).visible? }.each do |relation|
|
|
| 655 |
xml.relation(:id => relation.id, :issue_id => relation.other_issue(self).id, :relation_type => relation.relation_type_for(self), :delay => relation.delay) |
|
| 656 |
end |
|
| 657 |
end |
|
| 658 |
|
|
| 659 |
xml.changesets do |
|
| 660 |
changesets.each do |changeset| |
|
| 661 |
xml.changeset :revision => changeset.revision do |
|
| 662 |
xml.user(:id => changeset.user_id, :name => changeset.user.name) unless changeset.user.nil? |
|
| 663 |
xml.comments changeset.comments |
|
| 664 |
xml.committed_on changeset.committed_on |
|
| 665 |
end |
|
| 666 |
end |
|
| 667 |
end if User.current.allowed_to?(:view_changesets, project) && changesets.any? |
|
| 668 |
|
|
| 669 |
xml.journals do |
|
| 670 |
journals.each do |journal| |
|
| 671 |
xml.journal :id => journal.id do |
|
| 672 |
xml.user(:id => journal.user_id, :name => journal.user.name) unless journal.user.nil? |
|
| 673 |
xml.notes journal.notes |
|
| 674 |
xml.details do |
|
| 675 |
journal.details.each do |detail| |
|
| 676 |
xml.detail :property => detail.property, :name => detail.prop_key, :old => detail.old_value, :new => detail.value |
|
| 677 |
end |
|
| 678 |
end |
|
| 679 |
end |
|
| 680 |
end |
|
| 681 |
end unless journals.empty? |
|
| 682 |
end |
|
| 683 | ||
| 684 |
return xml.target! |
|
| 685 |
end |
|
| 686 | ||
| 687 |
def to_json |
|
| 688 |
Hash.from_xml(to_xml).to_json |
|
| 689 |
end |
|
| 618 | 690 |
|
| 619 | 691 |
private |
| 620 | 692 |
|
| app/views/issues/show.xml.builder | ||
|---|---|---|
| 1 |
xml.instruct! |
|
| 2 |
xml.issue do |
|
| 3 |
xml.id @issue.id |
|
| 4 |
xml.project(:id => @issue.project_id, :name => @issue.project.name) unless @issue.project.nil? |
|
| 5 |
xml.tracker(:id => @issue.tracker_id, :name => @issue.tracker.name) unless @issue.tracker.nil? |
|
| 6 |
xml.status(:id => @issue.status_id, :name => @issue.status.name) unless @issue.status.nil? |
|
| 7 |
xml.priority(:id => @issue.priority_id, :name => @issue.priority.name) unless @issue.priority.nil? |
|
| 8 |
xml.author(:id => @issue.author_id, :name => @issue.author.name) unless @issue.author.nil? |
|
| 9 |
xml.assigned_to(:id => @issue.assigned_to_id, :name => @issue.assigned_to.name) unless @issue.assigned_to.nil? |
|
| 10 |
xml.category(:id => @issue.category_id, :name => @issue.category.name) unless @issue.category.nil? |
|
| 11 |
xml.fixed_version(:id => @issue.fixed_version_id, :name => @issue.fixed_version.name) unless @issue.fixed_version.nil? |
|
| 12 |
xml.parent(:id => @issue.parent_id) unless @issue.parent.nil? |
|
| 13 |
|
|
| 14 |
xml.subject @issue.subject |
|
| 15 |
xml.description @issue.description |
|
| 16 |
xml.start_date @issue.start_date |
|
| 17 |
xml.due_date @issue.due_date |
|
| 18 |
xml.done_ratio @issue.done_ratio |
|
| 19 |
xml.estimated_hours @issue.estimated_hours |
|
| 20 |
if User.current.allowed_to?(:view_time_entries, @project) |
|
| 21 |
xml.spent_hours @issue.spent_hours |
|
| 22 |
end |
|
| 23 |
|
|
| 24 |
xml.custom_fields do |
|
| 25 |
@issue.custom_field_values.each do |custom_value| |
|
| 26 |
xml.custom_field custom_value.value, :id => custom_value.custom_field_id, :name => custom_value.custom_field.name |
|
| 27 |
end |
|
| 28 |
end unless @issue.custom_field_values.empty? |
|
| 29 |
|
|
| 30 |
xml.created_on @issue.created_on |
|
| 31 |
xml.updated_on @issue.updated_on |
|
| 32 |
|
|
| 33 |
xml.relations do |
|
| 34 |
@issue.relations.select {|r| r.other_issue(@issue).visible? }.each do |relation|
|
|
| 35 |
xml.relation(:id => relation.id, :issue_id => relation.other_issue(@issue).id, :relation_type => relation.relation_type_for(@issue), :delay => relation.delay) |
|
| 36 |
end |
|
| 37 |
end |
|
| 38 |
|
|
| 39 |
xml.changesets do |
|
| 40 |
@issue.changesets.each do |changeset| |
|
| 41 |
xml.changeset :revision => changeset.revision do |
|
| 42 |
xml.user(:id => changeset.user_id, :name => changeset.user.name) unless changeset.user.nil? |
|
| 43 |
xml.comments changeset.comments |
|
| 44 |
xml.committed_on changeset.committed_on |
|
| 45 |
end |
|
| 46 |
end |
|
| 47 |
end if User.current.allowed_to?(:view_changesets, @project) && @issue.changesets.any? |
|
| 48 |
|
|
| 49 |
xml.journals do |
|
| 50 |
@issue.journals.each do |journal| |
|
| 51 |
xml.journal :id => journal.id do |
|
| 52 |
xml.user(:id => journal.user_id, :name => journal.user.name) unless journal.user.nil? |
|
| 53 |
xml.notes journal.notes |
|
| 54 |
xml.details do |
|
| 55 |
journal.details.each do |detail| |
|
| 56 |
xml.detail :property => detail.property, :name => detail.prop_key, :old => detail.old_value, :new => detail.value |
|
| 57 |
end |
|
| 58 |
end |
|
| 59 |
end |
|
| 60 |
end |
|
| 61 |
end unless @issue.journals.empty? |
|
| 62 |
end |
|