Commit c383bcdc2828c665db2df81c997bdcd00eef6099
1 parent
c4a8f9bf
Exists in
federation-webfinger
Creates concerns for concealing common attributes for different types of person
Showing
5 changed files
with
79 additions
and
54 deletions
Show diff stats
@@ -0,0 +1,33 @@ | @@ -0,0 +1,33 @@ | ||
1 | +module Human | ||
2 | + extend ActiveSupport::Concern | ||
3 | + | ||
4 | + included do | ||
5 | + has_many :comments, :foreign_key => :author_id | ||
6 | + has_many :abuse_reports, :foreign_key => 'reporter_id', :dependent => :destroy | ||
7 | + | ||
8 | + scope :abusers, -> { | ||
9 | + joins(:abuse_complaints).where('tasks.status = 3').distinct.select('profiles.*') | ||
10 | + } | ||
11 | + scope :non_abusers, -> { | ||
12 | + distinct.select("profiles.*"). | ||
13 | + joins("LEFT JOIN tasks ON profiles.id = tasks.requestor_id AND tasks.type='AbuseComplaint'"). | ||
14 | + where("tasks.status != 3 OR tasks.id is NULL") | ||
15 | + } | ||
16 | + end | ||
17 | + | ||
18 | + def already_reported?(profile) | ||
19 | + abuse_reports.any? { |report| report.abuse_complaint.reported == profile && report.abuse_complaint.opened? } | ||
20 | + end | ||
21 | + | ||
22 | + def register_report(abuse_report, profile) | ||
23 | + AbuseComplaint.create!(:reported => profile, :target => profile.environment) if !profile.opened_abuse_complaint | ||
24 | + abuse_report.abuse_complaint = profile.opened_abuse_complaint | ||
25 | + abuse_report.reporter = self | ||
26 | + abuse_report.save! | ||
27 | + end | ||
28 | + | ||
29 | + def abuser? | ||
30 | + AbuseComplaint.finished.where(:requestor_id => self).count > 0 | ||
31 | + end | ||
32 | + | ||
33 | +end |
@@ -0,0 +1,33 @@ | @@ -0,0 +1,33 @@ | ||
1 | +module ProfileEntity | ||
2 | + extend ActiveSupport::Concern | ||
3 | + | ||
4 | + included do | ||
5 | + attr_accessible :name, :identifier, :environment, :redirection_after_login | ||
6 | + | ||
7 | + validates_presence_of :identifier, :name | ||
8 | + validates_inclusion_of :redirection_after_login, :in => Environment.login_redirection_options.keys, :allow_nil => true | ||
9 | + | ||
10 | + belongs_to :environment | ||
11 | + has_many :search_terms, :as => :context | ||
12 | + has_many :abuse_complaints, :foreign_key => 'requestor_id', :dependent => :destroy | ||
13 | + | ||
14 | + end | ||
15 | + | ||
16 | + def disable | ||
17 | + self.visible = false | ||
18 | + self.save | ||
19 | + end | ||
20 | + | ||
21 | + def enable | ||
22 | + self.visible = true | ||
23 | + self.save | ||
24 | + end | ||
25 | + | ||
26 | + def preferred_login_redirection | ||
27 | + redirection_after_login.blank? ? environment.redirection_after_login : redirection_after_login | ||
28 | + end | ||
29 | + | ||
30 | + def opened_abuse_complaint | ||
31 | + abuse_complaints.opened.first | ||
32 | + end | ||
33 | +end |
app/models/person.rb
1 | # A person is the profile of an user holding all relationships with the rest of the system | 1 | # A person is the profile of an user holding all relationships with the rest of the system |
2 | class Person < Profile | 2 | class Person < Profile |
3 | 3 | ||
4 | + include Human | ||
5 | + | ||
4 | attr_accessible :organization, :contact_information, :sex, :birth_date, :cell_phone, :comercial_phone, :jabber_id, :personal_website, :nationality, :address_reference, :district, :schooling, :schooling_status, :formation, :custom_formation, :area_of_study, :custom_area_of_study, :professional_activity, :organization_website, :following_articles | 6 | attr_accessible :organization, :contact_information, :sex, :birth_date, :cell_phone, :comercial_phone, :jabber_id, :personal_website, :nationality, :address_reference, :district, :schooling, :schooling_status, :formation, :custom_formation, :area_of_study, :custom_area_of_study, :professional_activity, :organization_website, :following_articles |
5 | 7 | ||
6 | SEARCH_FILTERS = { | 8 | SEARCH_FILTERS = { |
@@ -88,7 +90,6 @@ class Person < Profile | @@ -88,7 +90,6 @@ class Person < Profile | ||
88 | memberships.where('role_assignments.role_id = ?', role.id) | 90 | memberships.where('role_assignments.role_id = ?', role.id) |
89 | end | 91 | end |
90 | 92 | ||
91 | - has_many :comments, :foreign_key => :author_id | ||
92 | has_many :article_followers, :dependent => :destroy | 93 | has_many :article_followers, :dependent => :destroy |
93 | has_many :following_articles, :class_name => 'Article', :through => :article_followers, :source => :article | 94 | has_many :following_articles, :class_name => 'Article', :through => :article_followers, :source => :article |
94 | has_many :friendships, :dependent => :destroy | 95 | has_many :friendships, :dependent => :destroy |
@@ -100,8 +101,6 @@ class Person < Profile | @@ -100,8 +101,6 @@ class Person < Profile | ||
100 | 101 | ||
101 | has_many :requested_tasks, :class_name => 'Task', :foreign_key => :requestor_id, :dependent => :destroy | 102 | has_many :requested_tasks, :class_name => 'Task', :foreign_key => :requestor_id, :dependent => :destroy |
102 | 103 | ||
103 | - has_many :abuse_reports, :foreign_key => 'reporter_id', :dependent => :destroy | ||
104 | - | ||
105 | has_many :mailings | 104 | has_many :mailings |
106 | 105 | ||
107 | has_many :scraps_sent, :class_name => 'Scrap', :foreign_key => :sender_id, :dependent => :destroy | 106 | has_many :scraps_sent, :class_name => 'Scrap', :foreign_key => :sender_id, :dependent => :destroy |
@@ -123,15 +122,6 @@ class Person < Profile | @@ -123,15 +122,6 @@ class Person < Profile | ||
123 | 122 | ||
124 | scope :more_popular, -> { order 'friends_count DESC' } | 123 | scope :more_popular, -> { order 'friends_count DESC' } |
125 | 124 | ||
126 | - scope :abusers, -> { | ||
127 | - joins(:abuse_complaints).where('tasks.status = 3').distinct.select('profiles.*') | ||
128 | - } | ||
129 | - scope :non_abusers, -> { | ||
130 | - distinct.select("profiles.*"). | ||
131 | - joins("LEFT JOIN tasks ON profiles.id = tasks.requestor_id AND tasks.type='AbuseComplaint'"). | ||
132 | - where("tasks.status != 3 OR tasks.id is NULL") | ||
133 | - } | ||
134 | - | ||
135 | scope :admins, -> { joins(:role_assignments => :role).where('roles.key = ?', 'environment_administrator') } | 125 | scope :admins, -> { joins(:role_assignments => :role).where('roles.key = ?', 'environment_administrator') } |
136 | scope :activated, -> { joins(:user).where('users.activation_code IS NULL AND users.activated_at IS NOT NULL') } | 126 | scope :activated, -> { joins(:user).where('users.activation_code IS NULL AND users.activated_at IS NOT NULL') } |
137 | scope :deactivated, -> { joins(:user).where('NOT (users.activation_code IS NULL AND users.activated_at IS NOT NULL)') } | 127 | scope :deactivated, -> { joins(:user).where('NOT (users.activation_code IS NULL AND users.activated_at IS NOT NULL)') } |
@@ -517,21 +507,6 @@ class Person < Profile | @@ -517,21 +507,6 @@ class Person < Profile | ||
517 | leave_hash.to_json | 507 | leave_hash.to_json |
518 | end | 508 | end |
519 | 509 | ||
520 | - def already_reported?(profile) | ||
521 | - abuse_reports.any? { |report| report.abuse_complaint.reported == profile && report.abuse_complaint.opened? } | ||
522 | - end | ||
523 | - | ||
524 | - def register_report(abuse_report, profile) | ||
525 | - AbuseComplaint.create!(:reported => profile, :target => profile.environment) if !profile.opened_abuse_complaint | ||
526 | - abuse_report.abuse_complaint = profile.opened_abuse_complaint | ||
527 | - abuse_report.reporter = self | ||
528 | - abuse_report.save! | ||
529 | - end | ||
530 | - | ||
531 | - def abuser? | ||
532 | - AbuseComplaint.finished.where(:requestor_id => self).count > 0 | ||
533 | - end | ||
534 | - | ||
535 | def control_panel_settings_button | 510 | def control_panel_settings_button |
536 | {:title => _('Edit Profile'), :icon => 'edit-profile'} | 511 | {:title => _('Edit Profile'), :icon => 'edit-profile'} |
537 | end | 512 | end |
app/models/profile.rb
@@ -3,9 +3,10 @@ | @@ -3,9 +3,10 @@ | ||
3 | # which by default is the one returned by Environment:default. | 3 | # which by default is the one returned by Environment:default. |
4 | class Profile < ApplicationRecord | 4 | class Profile < ApplicationRecord |
5 | 5 | ||
6 | - attr_accessible :name, :identifier, :public_profile, :nickname, :custom_footer, :custom_header, :address, :zip_code, :contact_phone, :image_builder, :description, :closed, :template_id, :environment, :lat, :lng, :is_template, :fields_privacy, :preferred_domain_id, :category_ids, :country, :city, :state, :national_region_code, :email, :contact_email, :redirect_l10n, :notification_time, | ||
7 | - :redirection_after_login, :custom_url_redirection, | ||
8 | - :email_suggestions, :allow_members_to_invite, :invite_friends_only, :secret, :profile_admin_mail_notification | 6 | + include ProfileEntity |
7 | + | ||
8 | + attr_accessible :public_profile, :nickname, :custom_footer, :custom_header, :address, :zip_code, :contact_phone, :image_builder, :description, :closed, :template_id, :lat, :lng, :is_template, :fields_privacy, :preferred_domain_id, :category_ids, :country, :city, :state, :national_region_code, :email, :contact_email, :redirect_l10n, :notification_time, | ||
9 | + :custom_url_redirection, :email_suggestions, :allow_members_to_invite, :invite_friends_only, :secret, :profile_admin_mail_notification | ||
9 | 10 | ||
10 | # use for internationalizable human type names in search facets | 11 | # use for internationalizable human type names in search facets |
11 | # reimplement on subclasses | 12 | # reimplement on subclasses |
@@ -224,8 +225,6 @@ class Profile < ApplicationRecord | @@ -224,8 +225,6 @@ class Profile < ApplicationRecord | ||
224 | welcome_page && welcome_page.published ? welcome_page.body : nil | 225 | welcome_page && welcome_page.published ? welcome_page.body : nil |
225 | end | 226 | end |
226 | 227 | ||
227 | - has_many :search_terms, :as => :context | ||
228 | - | ||
229 | def scraps(scrap=nil) | 228 | def scraps(scrap=nil) |
230 | scrap = scrap.is_a?(Scrap) ? scrap.id : scrap | 229 | scrap = scrap.is_a?(Scrap) ? scrap.id : scrap |
231 | scrap.nil? ? Scrap.all_scraps(self) : Scrap.all_scraps(self).find(scrap) | 230 | scrap.nil? ? Scrap.all_scraps(self) : Scrap.all_scraps(self).find(scrap) |
@@ -278,7 +277,6 @@ class Profile < ApplicationRecord | @@ -278,7 +277,6 @@ class Profile < ApplicationRecord | ||
278 | 277 | ||
279 | has_many :domains, :as => :owner | 278 | has_many :domains, :as => :owner |
280 | belongs_to :preferred_domain, :class_name => 'Domain', :foreign_key => 'preferred_domain_id' | 279 | belongs_to :preferred_domain, :class_name => 'Domain', :foreign_key => 'preferred_domain_id' |
281 | - belongs_to :environment | ||
282 | 280 | ||
283 | has_many :articles, :dependent => :destroy | 281 | has_many :articles, :dependent => :destroy |
284 | belongs_to :home_page, :class_name => Article.name, :foreign_key => 'home_page_id' | 282 | belongs_to :home_page, :class_name => Article.name, :foreign_key => 'home_page_id' |
@@ -305,8 +303,6 @@ class Profile < ApplicationRecord | @@ -305,8 +303,6 @@ class Profile < ApplicationRecord | ||
305 | has_many :profile_categorizations_including_virtual, :class_name => 'ProfileCategorization' | 303 | has_many :profile_categorizations_including_virtual, :class_name => 'ProfileCategorization' |
306 | has_many :categories_including_virtual, :through => :profile_categorizations_including_virtual, :source => :category | 304 | has_many :categories_including_virtual, :through => :profile_categorizations_including_virtual, :source => :category |
307 | 305 | ||
308 | - has_many :abuse_complaints, :foreign_key => 'requestor_id', :dependent => :destroy | ||
309 | - | ||
310 | has_many :profile_suggestions, :foreign_key => :suggestion_id, :dependent => :destroy | 306 | has_many :profile_suggestions, :foreign_key => :suggestion_id, :dependent => :destroy |
311 | 307 | ||
312 | def top_level_categorization | 308 | def top_level_categorization |
@@ -401,7 +397,6 @@ class Profile < ApplicationRecord | @@ -401,7 +397,6 @@ class Profile < ApplicationRecord | ||
401 | self.all | 397 | self.all |
402 | end | 398 | end |
403 | 399 | ||
404 | - validates_presence_of :identifier, :name | ||
405 | validates_length_of :nickname, :maximum => 16, :allow_nil => true | 400 | validates_length_of :nickname, :maximum => 16, :allow_nil => true |
406 | validate :valid_template | 401 | validate :valid_template |
407 | validate :valid_identifier | 402 | validate :valid_identifier |
@@ -1042,20 +1037,6 @@ private :generate_url, :url_options | @@ -1042,20 +1037,6 @@ private :generate_url, :url_options | ||
1042 | end | 1037 | end |
1043 | end | 1038 | end |
1044 | 1039 | ||
1045 | - def opened_abuse_complaint | ||
1046 | - abuse_complaints.opened.first | ||
1047 | - end | ||
1048 | - | ||
1049 | - def disable | ||
1050 | - self.visible = false | ||
1051 | - self.save | ||
1052 | - end | ||
1053 | - | ||
1054 | - def enable | ||
1055 | - self.visible = true | ||
1056 | - self.save | ||
1057 | - end | ||
1058 | - | ||
1059 | def control_panel_settings_button | 1040 | def control_panel_settings_button |
1060 | {:title => _('Edit Profile'), :icon => 'edit-profile'} | 1041 | {:title => _('Edit Profile'), :icon => 'edit-profile'} |
1061 | end | 1042 | end |
@@ -1122,10 +1103,6 @@ private :generate_url, :url_options | @@ -1122,10 +1103,6 @@ private :generate_url, :url_options | ||
1122 | display_private_info_to?(current_person) || (public_fields.include?(field) && public?) | 1103 | display_private_info_to?(current_person) || (public_fields.include?(field) && public?) |
1123 | end | 1104 | end |
1124 | 1105 | ||
1125 | - validates_inclusion_of :redirection_after_login, :in => Environment.login_redirection_options.keys, :allow_nil => true | ||
1126 | - def preferred_login_redirection | ||
1127 | - redirection_after_login.blank? ? environment.redirection_after_login : redirection_after_login | ||
1128 | - end | ||
1129 | settings_items :custom_url_redirection, type: String, default: nil | 1106 | settings_items :custom_url_redirection, type: String, default: nil |
1130 | 1107 | ||
1131 | def remove_from_suggestion_list(person) | 1108 | def remove_from_suggestion_list(person) |