2014-05-27 13:54:04 -04:00
class UserProfile < ActiveRecord :: Base
2014-06-10 01:19:08 -04:00
belongs_to :user , inverse_of : :user_profile
2016-05-25 22:29:47 +05:30
WEBSITE_REGEXP = / (^$)|(^(http|https): \/ \/ [a-z0-9]+([ \ - \ .]{1}[a-z0-9]+)* \ .[a-z]{2,10}(([0-9]{1,5})? \/ .*)?$) /ix
2016-02-21 17:38:04 +01:00
2014-09-08 15:17:31 -04:00
validates :bio_raw , length : { maximum : 3000 }
2016-03-18 12:21:37 -04:00
validates :website , format : { with : WEBSITE_REGEXP } , allow_blank : true , if : Proc . new { | c | c . new_record? || c . website_changed? }
2014-06-10 01:19:08 -04:00
validates :user , presence : true
before_save :cook
2014-07-23 11:42:24 +10:00
after_save :trigger_badges
2014-06-10 01:19:08 -04:00
2014-10-20 13:15:58 -04:00
belongs_to :card_image_badge , class_name : 'Badge'
2015-09-14 15:51:17 +08:00
has_many :user_profile_views , dependent : :destroy
2014-10-20 13:15:58 -04:00
2014-08-05 16:37:56 +10:00
BAKED_VERSION = 1
2014-12-08 00:23:53 +01:00
def bio_excerpt ( length = 350 , opts = { } )
excerpt = PrettyText . excerpt ( bio_cooked , length , opts )
2014-11-25 16:14:21 -05:00
return excerpt if excerpt . blank? || ( user . has_trust_level? ( TrustLevel [ 1 ] ) && ! user . suspended? )
2014-06-10 01:19:08 -04:00
PrettyText . strip_links ( excerpt )
end
def bio_processed
2014-11-25 16:14:21 -05:00
return bio_cooked if bio_cooked . blank? || ( user . has_trust_level? ( TrustLevel [ 1 ] ) && ! user . suspended? )
2014-06-10 01:19:08 -04:00
PrettyText . strip_links ( bio_cooked )
end
def bio_summary
return nil unless bio_cooked . present?
2014-12-08 00:23:53 +01:00
bio_excerpt ( 500 , strip_links : true , text_entities : true )
2014-06-10 01:19:08 -04:00
end
def recook_bio
self . bio_raw_will_change!
cook
end
2014-10-20 12:11:36 -04:00
def upload_card_background ( upload )
self . card_background = upload . url
2014-10-16 15:05:36 -04:00
self . save!
end
2014-10-20 12:11:36 -04:00
def clear_card_background
self . card_background = " "
2014-10-16 15:05:36 -04:00
self . save!
end
2014-06-11 18:52:50 -07:00
def upload_profile_background ( upload )
self . profile_background = upload . url
self . save!
end
def clear_profile_background
self . profile_background = " "
self . save!
end
2014-08-05 16:37:56 +10:00
def self . rebake_old ( limit )
problems = [ ]
UserProfile . where ( 'bio_cooked_version IS NULL OR bio_cooked_version < ?' , BAKED_VERSION )
. limit ( limit ) . each do | p |
begin
p . rebake!
rescue = > e
problems << { profile : p , ex : e }
end
end
problems
end
def rebake!
update_columns ( bio_cooked : cooked , bio_cooked_version : BAKED_VERSION )
end
2014-07-03 17:29:44 +10:00
protected
2014-07-23 11:42:24 +10:00
def trigger_badges
BadgeGranter . queue_badge_grant ( Badge :: Trigger :: UserChange , user : self )
2014-07-03 17:29:44 +10:00
end
2014-06-10 01:19:08 -04:00
private
2014-08-05 16:37:56 +10:00
def cooked
if self . bio_raw . present?
2014-09-05 15:20:39 +10:00
PrettyText . cook ( self . bio_raw , omit_nofollow : user . has_trust_level? ( TrustLevel [ 3 ] ) && ! SiteSetting . tl3_links_no_follow )
2014-08-05 16:37:56 +10:00
else
nil
end
end
2014-06-10 01:19:08 -04:00
def cook
if self . bio_raw . present?
2014-08-05 16:37:56 +10:00
if bio_raw_changed?
self . bio_cooked = cooked
self . bio_cooked_version = BAKED_VERSION
end
2014-06-10 01:19:08 -04:00
else
self . bio_cooked = nil
end
end
2014-05-27 13:54:04 -04:00
end
2014-05-29 14:59:14 +10:00
# == Schema Information
#
# Table name: user_profiles
#
2014-07-03 17:29:44 +10:00
# user_id :integer not null, primary key
2016-02-23 10:33:53 +11:00
# location :string
# website :string
2014-07-03 17:29:44 +10:00
# bio_raw :text
# bio_cooked :text
# profile_background :string(255)
2014-11-20 14:53:15 +11:00
# dismissed_banner_key :integer
2014-08-07 13:33:11 +10:00
# bio_cooked_version :integer
2014-11-20 14:53:15 +11:00
# badge_granted_title :boolean default(FALSE)
# card_background :string(255)
# card_image_badge_id :integer
2015-09-14 11:50:59 +08:00
# views :integer default(0), not null
2014-08-07 13:33:11 +10:00
#
# Indexes
#
# index_user_profiles_on_bio_cooked_version (bio_cooked_version)
2014-05-29 14:59:14 +10:00
#