Commit c383bcdc2828c665db2df81c997bdcd00eef6099

Authored by Larissa Reis
1 parent c4a8f9bf

Creates concerns for concealing common attributes for different types of person

app/models/concerns/human.rb 0 → 100644
... ... @@ -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
... ...
app/models/concerns/profile_entity.rb 0 → 100644
... ... @@ -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/external_person.rb 0 → 100644
... ... @@ -0,0 +1,7 @@
  1 +# A pseudo profile is a person from a remote network
  2 +class ExternalPerson
  3 +
  4 + include Human
  5 + include ProfileEntity
  6 +
  7 +end
... ...
app/models/person.rb
1 1 # A person is the profile of an user holding all relationships with the rest of the system
2 2 class Person < Profile
3 3  
  4 + include Human
  5 +
4 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 8 SEARCH_FILTERS = {
... ... @@ -88,7 +90,6 @@ class Person &lt; Profile
88 90 memberships.where('role_assignments.role_id = ?', role.id)
89 91 end
90 92  
91   - has_many :comments, :foreign_key => :author_id
92 93 has_many :article_followers, :dependent => :destroy
93 94 has_many :following_articles, :class_name => 'Article', :through => :article_followers, :source => :article
94 95 has_many :friendships, :dependent => :destroy
... ... @@ -100,8 +101,6 @@ class Person &lt; Profile
100 101  
101 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 104 has_many :mailings
106 105  
107 106 has_many :scraps_sent, :class_name => 'Scrap', :foreign_key => :sender_id, :dependent => :destroy
... ... @@ -123,15 +122,6 @@ class Person &lt; Profile
123 122  
124 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 125 scope :admins, -> { joins(:role_assignments => :role).where('roles.key = ?', 'environment_administrator') }
136 126 scope :activated, -> { joins(:user).where('users.activation_code IS NULL AND users.activated_at IS NOT NULL') }
137 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 &lt; Profile
517 507 leave_hash.to_json
518 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 510 def control_panel_settings_button
536 511 {:title => _('Edit Profile'), :icon => 'edit-profile'}
537 512 end
... ...
app/models/profile.rb
... ... @@ -3,9 +3,10 @@
3 3 # which by default is the one returned by Environment:default.
4 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 11 # use for internationalizable human type names in search facets
11 12 # reimplement on subclasses
... ... @@ -224,8 +225,6 @@ class Profile &lt; ApplicationRecord
224 225 welcome_page && welcome_page.published ? welcome_page.body : nil
225 226 end
226 227  
227   - has_many :search_terms, :as => :context
228   -
229 228 def scraps(scrap=nil)
230 229 scrap = scrap.is_a?(Scrap) ? scrap.id : scrap
231 230 scrap.nil? ? Scrap.all_scraps(self) : Scrap.all_scraps(self).find(scrap)
... ... @@ -278,7 +277,6 @@ class Profile &lt; ApplicationRecord
278 277  
279 278 has_many :domains, :as => :owner
280 279 belongs_to :preferred_domain, :class_name => 'Domain', :foreign_key => 'preferred_domain_id'
281   - belongs_to :environment
282 280  
283 281 has_many :articles, :dependent => :destroy
284 282 belongs_to :home_page, :class_name => Article.name, :foreign_key => 'home_page_id'
... ... @@ -305,8 +303,6 @@ class Profile &lt; ApplicationRecord
305 303 has_many :profile_categorizations_including_virtual, :class_name => 'ProfileCategorization'
306 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 306 has_many :profile_suggestions, :foreign_key => :suggestion_id, :dependent => :destroy
311 307  
312 308 def top_level_categorization
... ... @@ -401,7 +397,6 @@ class Profile &lt; ApplicationRecord
401 397 self.all
402 398 end
403 399  
404   - validates_presence_of :identifier, :name
405 400 validates_length_of :nickname, :maximum => 16, :allow_nil => true
406 401 validate :valid_template
407 402 validate :valid_identifier
... ... @@ -1042,20 +1037,6 @@ private :generate_url, :url_options
1042 1037 end
1043 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 1040 def control_panel_settings_button
1060 1041 {:title => _('Edit Profile'), :icon => 'edit-profile'}
1061 1042 end
... ... @@ -1122,10 +1103,6 @@ private :generate_url, :url_options
1122 1103 display_private_info_to?(current_person) || (public_fields.include?(field) && public?)
1123 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 1106 settings_items :custom_url_redirection, type: String, default: nil
1130 1107  
1131 1108 def remove_from_suggestion_list(person)
... ...