X-Git-Url: https://git.openstreetmap.org/rails.git/blobdiff_plain/d9e070e06956801aba2378c1b79b4d9f13ae12ee..233a97bfcbee9c82027c049bb8bafac2693ec359:/app/controllers/changeset_controller.rb diff --git a/app/controllers/changeset_controller.rb b/app/controllers/changeset_controller.rb index 8668611eb..8151d3a67 100644 --- a/app/controllers/changeset_controller.rb +++ b/app/controllers/changeset_controller.rb @@ -57,13 +57,13 @@ class ChangesetController < ApplicationController def close begin - if not request.put? + unless request.put? render :nothing => true, :status => :method_not_allowed return end changeset = Changeset.find(params[:id]) changeset.open = false - changeset.save + changeset.save! render :nothing => true rescue ActiveRecord::RecordNotFound render :nothing => true, :status => :not_found @@ -71,7 +71,7 @@ class ChangesetController < ApplicationController end def upload - if not request.put? + unless request.put? render :nothing => true, :status => :method_not_allowed return end @@ -83,10 +83,13 @@ class ChangesetController < ApplicationController models = {"node"=>Node, "way"=>Way, "relation"=>Relation} + # FIXME shouldn't this be done through the + # res = OSM::API.new.get_xml_doc + # as everything else is? res = XML::Document.new res.encoding = 'UTF-8' root = XML::Node.new 'osm' - root['version'] = '0.6' + root['version'] = API_VERSION root['creator'] = 'OpenStreetMap.org' res.root = root @@ -95,69 +98,69 @@ class ChangesetController < ApplicationController Changeset.transaction do while p.read == 1 - break if p.node_type == 15 # end element - next unless p.node_type == 1 # element - - case p.name - when 'create': - while p.read == 1 - break if p.node_type == 15 # end element - next unless p.node_type == 1 # element - - model = models[p.name] - next if model.nil? - - elem = XML::Node.new p.name - nd = p.expand; p.next - osm = model.from_xml_node(nd, true) - elem['old_id'] = nd['id'] - - case nd.name - when 'way': - fix_way(osm, node_ids) - raise OSM::APIPreconditionFailedError.new if !osm.preconditions_ok? - when 'relation': - fix_rel(osm, ids) - raise OSM::APIPreconditionFailedError.new if !osm.preconditions_ok? - end - - create_prim ids[nd.name], osm, nd - elem['new_id'] = osm.id.to_s - elem['new_version'] = osm.version.to_s - root << elem - end - when 'modify': - while p.read == 1 - break if p.node_type == 15 # end element - next unless p.node_type == 1 # element - - model = models[p.name] - next if model.nil? - - elem = XML::Node.new p.name - new_osm = model.from_xml_node(p.expand); p.next - osm = model.find(new_osm.id) - osm.update_from new_osm, @user - elem['old_id'] = elem['new_id'] = osm.id.to_s - elem['new_version'] = osm.version.to_s - root << elem - end - when 'delete': - while p.read == 1 - break if p.node_type == 15 # end element - next unless p.node_type == 1 # element - - model = models[p.name] - next if model.nil? - - elem = XML::Node.new p.name - osm = model.find(p.expand['id']); p.next - osm.delete_with_history(@user) - elem['old_id'] = elem['new_id'] = osm.id.to_s - elem['new_version'] = osm.version.to_s - root << elem - end - end + break if p.node_type == 15 # end element + next unless p.node_type == 1 # element + + case p.name + when 'create': + while p.read == 1 + break if p.node_type == 15 # end element + next unless p.node_type == 1 # element + + model = models[p.name] + next if model.nil? + + elem = XML::Node.new p.name + nd = p.expand; p.next + osm = model.from_xml_node(nd, true) + elem['old_id'] = nd['id'] + + case nd.name + when 'way': + fix_way(osm, node_ids) + raise OSM::APIPreconditionFailedError.new if !osm.preconditions_ok? + when 'relation': + fix_rel(osm, ids) + raise OSM::APIPreconditionFailedError.new if !osm.preconditions_ok? + end + + create_prim ids[nd.name], osm, nd + elem['new_id'] = osm.id.to_s + elem['new_version'] = osm.version.to_s + root << elem + end + when 'modify': + while p.read == 1 + break if p.node_type == 15 # end element + next unless p.node_type == 1 # element + + model = models[p.name] + next if model.nil? + + elem = XML::Node.new p.name + new_osm = model.from_xml_node(p.expand); p.next + osm = model.find(new_osm.id) + osm.update_from new_osm, @user + elem['old_id'] = elem['new_id'] = osm.id.to_s + elem['new_version'] = osm.version.to_s + root << elem + end + when 'delete': + while p.read == 1 + break if p.node_type == 15 # end element + next unless p.node_type == 1 # element + + model = models[p.name] + next if model.nil? + + elem = XML::Node.new p.name + osm = model.find(p.expand['id']); p.next + osm.delete_with_history(@user) + elem['old_id'] = elem['new_id'] = osm.id.to_s + elem['new_version'] = osm.version.to_s + root << elem + end + end end end