X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/4c4150e0d0dc43c0468388956728d8ffc43e6c9c..d104736809d9e36b0bc955f3425c4d47a370e78b:/app/models/user.rb?ds=sidebyside diff --git a/app/models/user.rb b/app/models/user.rb index 638928861..7571dd9dc 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -115,6 +115,7 @@ class User < ApplicationRecord alias_attribute :created_at, :creation_time + after_initialize :encrypt_password before_save :encrypt_password before_save :update_tile after_save :spam_check @@ -290,6 +291,12 @@ class User < ApplicationRecord role? "administrator" end + ## + # returns true if the user has the importer role, false otherwise + def importer? + role? "importer" + end + ## # returns true if the user has the requested role def role?(role) @@ -376,11 +383,18 @@ class User < ApplicationRecord digest.hexdigest end + def active_reports + issues + .with_status(:open) + .joins(:reports) + .where("reports.updated_at >= COALESCE(issues.resolved_at, '1970-01-01')") + .count + end + def max_messages_per_hour account_age_in_seconds = Time.now.utc - created_at account_age_in_hours = account_age_in_seconds / 3600 recent_messages = messages.where("sent_on >= ?", Time.now.utc - 3600).count - active_reports = issues.with_status(:open).sum(:reports_count) max_messages = account_age_in_hours.ceil + recent_messages - (active_reports * 10) max_messages.clamp(0, Settings.max_messages_per_hour) end @@ -389,7 +403,6 @@ class User < ApplicationRecord account_age_in_seconds = Time.now.utc - created_at account_age_in_hours = account_age_in_seconds / 3600 recent_friends = Friendship.where(:befriendee => self).where("created_at >= ?", Time.now.utc - 3600).count - active_reports = issues.with_status(:open).sum(:reports_count) max_friends = account_age_in_hours.ceil + recent_friends - (active_reports * 10) max_friends.clamp(0, Settings.max_friends_per_hour) end @@ -399,7 +412,6 @@ class User < ApplicationRecord 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