]> git.openstreetmap.org Git - rails.git/blob - app/controllers/segment_controller.rb
rails API support for history of node/segment/way + various bugfixes and cleanups
[rails.git] / app / controllers / segment_controller.rb
1 class SegmentController < ApplicationController
2   require 'xml/libxml'
3
4   before_filter :authorize
5
6   def create
7     response.headers["Content-Type"] = 'application/xml'
8     if request.put?
9       segment = Segment.from_xml(request.raw_post, true)
10
11       if segment
12         
13         segment.user_id = @user.id
14
15         a = Node.find(segment.node_a.to_i)
16         b = Node.find(segment.node_b.to_i)
17         
18         unless a and a.visible and b and b.visible  
19           render :nothing => true, :status => 400
20         end
21
22         if segment.save_with_history
23           render :text => segment.id
24         else
25           render :nothing => true, :status => 500
26         end
27         return
28
29       else
30         render :nothing => true, :status => 400 # if we got here the doc didnt parse
31         return
32       end
33     end
34
35     render :nothing => true, :status => 500 # something went very wrong
36   end
37
38   def rest
39     response.headers["Content-Type"] = 'application/xml'
40     unless Segment.exists?(params[:id])
41       render :nothing => true, :status => 404
42       return
43     end
44
45     segment = Segment.find(params[:id])
46
47     case request.method
48
49     when :get
50       render :text => segment.to_xml.to_s
51       return
52
53     when :delete
54       if segment.visible
55         segment.visible = 0
56         segment.save_with_history
57         render :nothing => true
58       else
59         render :nothing => true, :status => 410
60       end
61
62     when :put
63       new_segment = Segment.from_xml(request.raw_post)
64
65       segment.timestamp = Time.now
66       segment.user_id = @user.id
67
68       segment.node_a = new_segment.node_a
69       segment.node_b = new_segment.node_b
70       segment.tags = new_segment.tags
71       segment.visible = new_segment.visible
72
73       if segment.id == new_segment.id and segment.save_with_history
74         render :nothing => true, :status => 200
75       else
76         render :nothing => true, :status => 500
77       end
78       return
79     end
80
81   end
82
83 end