mirror of
https://github.com/publiclab/mapknitter.git
synced 2026-06-16 04:34:49 +02:00
d5c11f1aa7
* feat: 🎸 fetch maps and users based on status * test: 💍 increase test coverage * chore: 🤖 remove unnecessary comments and fix style suggestions * refactor: 💡 reduced lines of code for readability & efficiency
46 lines
1.3 KiB
Ruby
46 lines
1.3 KiB
Ruby
class UsersController < ApplicationController
|
|
helper_method :sort_column, :sort_direction
|
|
|
|
def profile
|
|
params[:id] = current_user.login if logged_in? && params[:id].nil?
|
|
@user = User.find_by(login: params[:id])
|
|
@maps = Map.where(user_id: @user.id, status: Map::Status::NORMAL)
|
|
.paginate(page: params[:page], per_page: 24)
|
|
return if @user.status == User::Status::NORMAL
|
|
|
|
if @user.status == User::Status::BANNED
|
|
if current_user&.can_moderate?
|
|
flash.now[:error] = 'This author has been banned'
|
|
else
|
|
flash[:error] = 'That author has been banned'
|
|
redirect_to('/')
|
|
end
|
|
end
|
|
end
|
|
|
|
def index
|
|
@title = 'Prolific map authors'
|
|
@users = User.where(status: User::Status::NORMAL).joins(:maps)
|
|
.select('users.*, count(users.id) as maps_count')
|
|
.group('maps.user_id')
|
|
.order(sort_column + ' ' + sort_direction)
|
|
.paginate(page: params[:page], per_page: 24)
|
|
render('users/index')
|
|
end
|
|
|
|
private
|
|
|
|
def sort_column
|
|
params[:sort] || 'maps_count'
|
|
end
|
|
|
|
def sort_direction
|
|
params[:direction] || 'desc'
|
|
end
|
|
|
|
def user_params
|
|
params.require(:user).permit(:login, :email, :name,
|
|
:password, :password_confirmation)
|
|
end
|
|
end
|