diff options
Diffstat (limited to 'app/models/user.rb')
-rw-r--r-- | app/models/user.rb | 61 |
1 files changed, 25 insertions, 36 deletions
diff --git a/app/models/user.rb b/app/models/user.rb index ba3f7922c9c..da6e1abad07 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -63,12 +63,13 @@ class User < ApplicationRecord attribute :admin, default: false attribute :external, default: -> { Gitlab::CurrentSettings.user_default_external } attribute :can_create_group, default: -> { Gitlab::CurrentSettings.can_create_group } + attribute :private_profile, default: -> { Gitlab::CurrentSettings.user_defaults_to_private_profile } attribute :can_create_team, default: false attribute :hide_no_ssh_key, default: false attribute :hide_no_password, default: false attribute :project_view, default: :files attribute :notified_of_own_activity, default: false - attribute :preferred_language, default: -> { I18n.default_locale } + attribute :preferred_language, default: -> { Gitlab::CurrentSettings.default_preferred_language } attribute :theme_id, default: -> { gitlab_config.default_theme } attr_encrypted :otp_secret, @@ -100,6 +101,8 @@ class User < ApplicationRecord MINIMUM_DAYS_CREATED = 7 + ignore_columns %i[linkedin twitter skype website_url location organization], remove_with: '15.8', remove_after: '2023-01-22' + # Override Devise::Models::Trackable#update_tracked_fields! # to limit database writes to at most once every hour # rubocop: disable CodeReuse/ServiceClass @@ -214,7 +217,7 @@ class User < ApplicationRecord has_many :releases, dependent: :nullify, foreign_key: :author_id # rubocop:disable Cop/ActiveRecordDependent has_many :subscriptions, dependent: :destroy # rubocop:disable Cop/ActiveRecordDependent has_many :oauth_applications, class_name: 'Doorkeeper::Application', as: :owner, dependent: :destroy # rubocop:disable Cop/ActiveRecordDependent - has_one :abuse_report, dependent: :destroy, foreign_key: :user_id # rubocop:disable Cop/ActiveRecordDependent + has_many :abuse_reports, dependent: :destroy, foreign_key: :user_id # rubocop:disable Cop/ActiveRecordDependent has_many :reported_abuse_reports, dependent: :destroy, foreign_key: :reporter_id, class_name: "AbuseReport" # rubocop:disable Cop/ActiveRecordDependent has_many :spam_logs, dependent: :destroy # rubocop:disable Cop/ActiveRecordDependent has_many :builds, class_name: 'Ci::Build' @@ -262,8 +265,11 @@ class User < ApplicationRecord has_many :resource_label_events, dependent: :nullify # rubocop:disable Cop/ActiveRecordDependent has_many :resource_state_events, dependent: :nullify # rubocop:disable Cop/ActiveRecordDependent has_many :authored_events, class_name: 'Event', dependent: :destroy, foreign_key: :author_id # rubocop:disable Cop/ActiveRecordDependent - - has_many :namespace_commit_emails + has_many :namespace_commit_emails, class_name: 'Users::NamespaceCommitEmail' + has_many :user_achievements, class_name: 'Achievements::UserAchievement', inverse_of: :user + has_many :awarded_user_achievements, class_name: 'Achievements::UserAchievement', foreign_key: 'awarded_by_user_id', inverse_of: :awarded_by_user + has_many :revoked_user_achievements, class_name: 'Achievements::UserAchievement', foreign_key: 'revoked_by_user_id', inverse_of: :revoked_by_user + has_many :achievements, through: :user_achievements, class_name: 'Achievements::Achievement', inverse_of: :users # # Validations @@ -298,19 +304,15 @@ class User < ApplicationRecord validates :color_scheme_id, allow_nil: true, inclusion: { in: Gitlab::ColorSchemes.valid_ids, message: ->(*) { _("%{placeholder} is not a valid color scheme") % { placeholder: '%{value}' } } } - validates :website_url, allow_blank: true, url: true, if: :website_url_changed? - after_initialize :set_projects_limit before_validation :sanitize_attrs before_validation :ensure_namespace_correct after_validation :set_username_errors - before_save :default_private_profile_to_false before_save :ensure_incoming_email_token before_save :ensure_user_rights_and_limits, if: ->(user) { user.new_record? || user.external_changed? } before_save :skip_reconfirmation!, if: ->(user) { user.email_changed? && user.read_only_attribute?(:email) } before_save :check_for_verified_email, if: ->(user) { user.email_changed? && !user.new_record? } before_save :ensure_namespace_correct # in case validation is skipped - before_save :ensure_user_detail_assigned after_update :username_changed_hook, if: :saved_change_to_username? after_destroy :post_destroy_hook after_destroy :remove_key_cache @@ -372,6 +374,12 @@ class User < ApplicationRecord delegate :pronunciation, :pronunciation=, to: :user_detail, allow_nil: true delegate :registration_objective, :registration_objective=, to: :user_detail, allow_nil: true delegate :requires_credit_card_verification, :requires_credit_card_verification=, to: :user_detail, allow_nil: true + delegate :linkedin, :linkedin=, to: :user_detail, allow_nil: true + delegate :twitter, :twitter=, to: :user_detail, allow_nil: true + delegate :skype, :skype=, to: :user_detail, allow_nil: true + delegate :website_url, :website_url=, to: :user_detail, allow_nil: true + delegate :location, :location=, to: :user_detail, allow_nil: true + delegate :organization, :organization=, to: :user_detail, allow_nil: true accepts_nested_attributes_for :user_preference, update_only: true accepts_nested_attributes_for :user_detail, update_only: true @@ -531,9 +539,7 @@ class User < ApplicationRecord strip_attributes! :name def preferred_language - read_attribute('preferred_language') || - I18n.default_locale.to_s.presence_in(Gitlab::I18n.available_locales) || - default_preferred_language + read_attribute('preferred_language').presence || Gitlab::CurrentSettings.default_preferred_language end def active_for_authentication? @@ -1401,17 +1407,9 @@ class User < ApplicationRecord end def sanitize_attrs - sanitize_links sanitize_name end - def sanitize_links - %i[skype linkedin twitter].each do |attr| - value = self[attr] - self[attr] = Sanitize.clean(value) if value.present? - end - end - def sanitize_name return unless self.name @@ -1595,11 +1593,6 @@ class User < ApplicationRecord end end - # Temporary, will be removed when user_detail fields are fully migrated - def ensure_user_detail_assigned - user_detail.assign_changed_fields_from_user if UserDetail.user_fields_changed?(self) - end - def set_username_errors namespace_path_errors = self.errors.delete(:"namespace.path") @@ -1890,7 +1883,7 @@ class User < ApplicationRecord def invalidate_issue_cache_counts Rails.cache.delete(['users', id, 'assigned_open_issues_count']) - Rails.cache.delete(['users', id, 'max_assigned_open_issues_count']) if Feature.enabled?(:limit_assigned_issues_count) + Rails.cache.delete(['users', id, 'max_assigned_open_issues_count']) end def invalidate_merge_request_cache_counts @@ -2189,6 +2182,13 @@ class User < ApplicationRecord public_email.presence || _('[REDACTED]') end + def namespace_commit_email_for_project(project) + return if project.nil? + + namespace_commit_emails.find_by(namespace: project.project_namespace) || + namespace_commit_emails.find_by(namespace: project.root_namespace) + end + protected # override, from Devise::Validatable @@ -2230,11 +2230,6 @@ class User < ApplicationRecord otp_backup_codes.first.start_with?("$pbkdf2-sha512$") end - # To enable JiHu repository to modify the default language options - def default_preferred_language - 'en' - end - # rubocop: disable CodeReuse/ServiceClass def add_primary_email_to_emails! Emails::CreateService.new(self, user: self, email: self.email).execute(confirmed_at: self.confirmed_at) @@ -2299,12 +2294,6 @@ class User < ApplicationRecord ]) end - def default_private_profile_to_false - return unless private_profile_changed? && private_profile.nil? - - self.private_profile = false - end - def has_current_license? false end |