diff options
Diffstat (limited to 'app/controllers/resources_controller.rb')
-rw-r--r-- | app/controllers/resources_controller.rb | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/app/controllers/resources_controller.rb b/app/controllers/resources_controller.rb index 75fcedf..fdb69cc 100644 --- a/app/controllers/resources_controller.rb +++ b/app/controllers/resources_controller.rb @@ -35,6 +35,52 @@ class ResourcesController < ApplicationController # 1. Compare records for changes # 2. Validate each change # 3. Moderate queue or save + + updated_properties = @resource.feature['properties'] + updated_geometry = @resource.feature['geometry'] + + updated = false + + flash.now[:notice] = updated_geometry.inspect + + if @resource.uuid.present? && params[:resource][:uuid].present? && params[:resource][:uuid] != @resource.uuid + flash.now[:error] = "UUID cannot be changed." + render :edit, status: :unprocessable_entity and return + end + + params[:resource].each do |prop| + next if %w(longitude latitude).include?(prop.first.to_s) + if prop.last.present? && prop.last != @resource.send("#{prop.first.to_s}") + updated = true + updated_properties[prop.first.to_s] = prop.last + end + end + + lon, lat = updated_geometry['coordinates'] + flash.now.notice = "lon #{lon} => #{params[:resource][:longitude]}, lat #{lat} =>#{params[:resource][:latitude]}" + if params[:resource][:longitude].present? && params[:resource][:longitude] != lon + updated = true + updated_geometry['coordinates'][0] = params[:resource][:longitude] + Rails.logger.info "UPDATED LON TO #{params[:resource][:longitude]} /// #{updated_geometry.inspect}" + end + if params[:resource][:latitude].present? && params[:resource][:latitude] != lat + updated = true + updated_geometry['coordinates'][1] = params[:resource][:latitude] + end + + if updated == true + Rails.logger.info "Got a Resource update..." + @resource.feature['properties'] = updated_properties + @resource.feature['geometry'] = updated_geometry + if @resource.save + flash.notice = "Good! It worked! #{@resource.feature['geometry']}" + redirect_to resource_url(@resource) and return + else + flash.now[:notice] = @resource.errors.inspect + end + end + flash.now[:alert] = "Update failed!" + render :edit end # GET /resources/:id/delete @@ -49,6 +95,10 @@ class ResourcesController < ApplicationController private + def resource_params + params.require(:resource).permit(:uuid, :name, :summary, :description, :email, :city, :postal_code, :phone_number, :website, :entry_number, :categories, :latitude, :longitude) + end + def set_resource @resource = Resource.find_by(uuid: params[:id]) || Resource.new end |