# The ChangesetController is the RESTful interface to Changeset objects
class ChangesetsController < ApplicationController
+ include UserMethods
+
layout "site"
require "xml/libxml"
- skip_before_action :verify_authenticity_token, :except => [:index]
before_action :authorize_web
before_action :set_locale
+ before_action -> { check_database_readable(:need_api => true) }, :only => [:index, :feed]
+ before_action :check_database_writable, :only => [:subscribe, :unsubscribe]
authorize_resource
- before_action(:only => [:index, :feed]) { |c| c.check_database_readable(true) }
around_action :web_timeout
# Helper methods for checking consistency
if @params[:display_name]
changesets = if user.data_public? || user == current_user
- changesets.where(:user_id => user.id)
+ changesets.where(:user => user)
else
changesets.where("false")
end
elsif @params[:bbox]
changesets = conditions_bbox(changesets, BoundingBox.from_bbox_params(params))
elsif @params[:friends] && current_user
- changesets = changesets.where(:user_id => current_user.friend_users.identifiable)
+ changesets = changesets.where(:user => current_user.friends.identifiable)
elsif @params[:nearby] && current_user
- changesets = changesets.where(:user_id => current_user.nearby)
+ changesets = changesets.where(:user => current_user.nearby)
end
changesets = changesets.where("changesets.id <= ?", @params[:max_id]) if @params[:max_id]
- @edits = changesets.order("changesets.id DESC").limit(20).preload(:user, :changeset_tags, :comments)
+ @changesets = changesets.order("changesets.id DESC").limit(20).preload(:user, :changeset_tags, :comments)
render :action => :index, :layout => false
end
index
end
+ ##
+ # subscribe to a changeset
+ def subscribe
+ @changeset = Changeset.find(params[:id])
+
+ if request.post?
+ @changeset.subscribe(current_user) unless @changeset.subscribed?(current_user)
+
+ redirect_to changeset_path(@changeset)
+ end
+ rescue ActiveRecord::RecordNotFound
+ render :action => "no_such_entry", :status => :not_found
+ end
+
+ ##
+ # unsubscribe from a changeset
+ def unsubscribe
+ @changeset = Changeset.find(params[:id])
+
+ if request.post?
+ @changeset.unsubscribe(current_user)
+
+ redirect_to changeset_path(@changeset)
+ end
+ rescue ActiveRecord::RecordNotFound
+ render :action => "no_such_entry", :status => :not_found
+ end
+
private
#------------------------------------------------------------
##
# if a bounding box was specified do some sanity checks.
# restrict changesets to those enclosed by a bounding box
- # we need to return both the changesets and the bounding box
def conditions_bbox(changesets, bbox)
if bbox
bbox.check_boundaries