simplify grabbing of a xml base doc
[rails.git] / app / controllers / node_controller.rb
1 class NodeController < ApplicationController
2   require 'xml/libxml'
3
4   before_filter :authorize
5   after_filter :compress_output
6
7   def create\r
8     response.headers["Content-Type"] = 'application/xml'
9     if request.put?
10       node = nil
11       begin
12         node = Node.from_xml(request.raw_post, true)
13       rescue
14         render :text => "XML didn't parse", :status => 400 # if we got here the doc didnt parse
15         return
16       end
17
18       if node
19         node.user_id = @user.id
20         node.visible = 1
21         if node.save_with_history
22           render :text => node.id.to_s
23         else
24           render :nothing => true, :status => 500
25         end
26         return
27
28       else
29         render :nothing => true, :status => 400 # if we got here the doc didnt parse
30         return
31       end
32     end
33
34     render :nothing => true, :status => 500 # something went very wrong
35   end
36
37   def rest
38     response.headers["Content-Type"] = 'application/xml'
39     unless Node.exists?(params[:id])
40       render :nothing => true, :status => 404
41       return
42     end
43
44     node = Node.find(params[:id])
45
46     case request.method
47
48     when :get
49       unless node
50         render :nothing => true, :status => 500
51         return
52       end
53
54       unless node.visible
55         render :nothing => true, :status => 410
56         return
57       end
58
59       render :text => node.to_xml.to_s
60       return
61
62     when :delete
63       if node.visible
64         node.visible = 0
65         node.save_with_history
66         render :nothing => true
67       else
68         render :nothing => true, :status => 410
69       end
70
71     when :put
72       new_node = Node.from_xml(request.raw_post)
73
74       node.timestamp = Time.now
75       node.user_id = @user.id
76
77       node.latitude = new_node.latitude 
78       node.longitude = new_node.longitude
79       node.tags = new_node.tags
80
81       if node.id == new_node.id and node.save_with_history
82         render :nothing => true, :status => 200
83       else
84         render :nothing => true, :status => 500
85       end
86       return
87     end
88
89   end
90
91   def nodes
92     response.headers["Content-Type"] = 'application/xml'
93     ids = params['nodes'].split(',').collect {|n| n.to_i }
94     if ids.length > 0
95       nodelist = Node.find(ids)
96       doc = get_xml_doc
97       nodelist.each do |node|
98         doc.root << node.to_xml_node
99       end 
100       render :text => doc.to_s
101     else
102       render :nothing => true, :status => 400
103     end
104   end
105 end