115 lines
3 KiB
Ruby
115 lines
3 KiB
Ruby
# frozen_string_literal: true
|
|
class ExploreController < ApplicationController
|
|
before_action :authorize_explore
|
|
after_action :verify_authorized
|
|
after_action :verify_policy_scoped
|
|
|
|
respond_to :html, :json, :csv
|
|
|
|
# TODO: remove?
|
|
# autocomplete :map, :name, full: true, extra_data: [:user_id]
|
|
|
|
# GET /explore/active
|
|
def active
|
|
page = params[:page].present? ? params[:page] : 1
|
|
@maps = policy_scope(Map).order('updated_at DESC')
|
|
.page(page).per(20)
|
|
|
|
respond_to do |format|
|
|
format.html do
|
|
# root url => main/home. main/home renders maps/activemaps view.
|
|
redirect_to(root_url) && return if authenticated?
|
|
respond_with(@maps, @user)
|
|
end
|
|
format.json { render json: @maps }
|
|
end
|
|
end
|
|
|
|
# GET /explore/featured
|
|
def featured
|
|
page = params[:page].present? ? params[:page] : 1
|
|
@maps = policy_scope(
|
|
Map.where('maps.featured = ? AND maps.permission != ?',
|
|
true, 'private')
|
|
).order('updated_at DESC').page(page).per(20)
|
|
|
|
respond_to do |format|
|
|
format.html { respond_with(@maps, @user) }
|
|
format.json { render json: @maps }
|
|
end
|
|
end
|
|
|
|
# GET /explore/mine
|
|
def mine
|
|
unless authenticated?
|
|
skip_policy_scope
|
|
return redirect_to explore_active_path
|
|
end
|
|
|
|
page = params[:page].present? ? params[:page] : 1
|
|
@maps = policy_scope(
|
|
Map.where('maps.user_id = ?', current_user.id)
|
|
).order('updated_at DESC').page(page).per(20)
|
|
|
|
respond_to do |format|
|
|
format.html { respond_with(@maps, @user) }
|
|
format.json { render json: @maps }
|
|
end
|
|
end
|
|
|
|
# GET /explore/shared
|
|
def shared
|
|
unless authenticated?
|
|
skip_policy_scope
|
|
return redirect_to explore_active_path
|
|
end
|
|
|
|
page = params[:page].present? ? params[:page] : 1
|
|
@maps = policy_scope(
|
|
Map.where('maps.id IN (?)', current_user.shared_maps.map(&:id))
|
|
).order('updated_at DESC').page(page).per(20)
|
|
|
|
respond_to do |format|
|
|
format.html { respond_with(@maps, @user) }
|
|
format.json { render json: @maps }
|
|
end
|
|
end
|
|
|
|
# GET /explore/starred
|
|
def starred
|
|
unless authenticated?
|
|
skip_policy_scope
|
|
return redirect_to explore_active_path
|
|
end
|
|
|
|
page = params[:page].present? ? params[:page] : 1
|
|
stars = current_user.stars.map(&:map_id)
|
|
@maps = policy_scope(
|
|
Map.where('maps.id IN (?)', stars)
|
|
).order('updated_at DESC').page(page).per(20)
|
|
|
|
respond_to do |format|
|
|
format.html { respond_with(@maps, @user) }
|
|
format.json { render json: @maps }
|
|
end
|
|
end
|
|
|
|
# GET /explore/mapper/:id
|
|
def mapper
|
|
page = params[:page].present? ? params[:page] : 1
|
|
@user = User.find(params[:id])
|
|
@maps = policy_scope(Map.where(user: @user))
|
|
.order('updated_at DESC').page(page).per(20)
|
|
|
|
respond_to do |format|
|
|
format.html { respond_with(@maps, @user) }
|
|
format.json { render json: @maps }
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def authorize_explore
|
|
authorize :Explore
|
|
end
|
|
end
|