X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/63303c22b704ca290c16ae908da1324f3ea25b2c..7b5f590a2d6f6ed253b595d4e3a27ca18289e5ce:/app/models/user.rb diff --git a/app/models/user.rb b/app/models/user.rb index c809b6192..3eb03a2fe 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -238,8 +238,12 @@ class User < ApplicationRecord @preferred_languages ||= Locale.list(languages) end + def home_location? + home_lat && home_lon + end + def nearby(radius = Settings.nearby_radius, num = Settings.nearby_users) - if home_lon && home_lat + if home_location? gc = OSM::GreatCircle.new(home_lat, home_lon) sql_for_area = QuadTile.sql_for_area(gc.bounds(radius), "home_") sql_for_distance = gc.sql_for_distance("home_lat", "home_lon") @@ -278,18 +282,18 @@ class User < ApplicationRecord ## # returns true if the user has the moderator role, false otherwise def moderator? - has_role? "moderator" + role? "moderator" end ## # returns true if the user has the administrator role, false otherwise def administrator? - has_role? "administrator" + role? "administrator" end ## # returns true if the user has the requested role - def has_role?(role) + def role?(role) roles.any? { |r| r.role == role } end @@ -391,6 +395,19 @@ class User < ApplicationRecord max_friends.clamp(0, Settings.max_friends_per_hour) end + def max_changeset_comments_per_hour + if moderator? + Settings.moderator_changeset_comments_per_hour + else + previous_comments = changeset_comments.limit(200).count + active_reports = issues.with_status(:open).sum(:reports_count) + max_comments = previous_comments / 200.0 * Settings.max_changeset_comments_per_hour + max_comments = max_comments.floor.clamp(Settings.initial_changeset_comments_per_hour, Settings.max_changeset_comments_per_hour) + max_comments /= 2**active_reports + max_comments.floor.clamp(Settings.min_changeset_comments_per_hour, Settings.max_changeset_comments_per_hour) + end + end + private def encrypt_password @@ -401,6 +418,6 @@ class User < ApplicationRecord end def update_tile - self.home_tile = QuadTile.tile_for_point(home_lat, home_lon) if home_lat && home_lon + self.home_tile = QuadTile.tile_for_point(home_lat, home_lon) if home_location? end end