Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # == Schema Information
- # Schema version: 76
- #
- # Table name: users
- #
- # id :integer(11) not null, primary key
- # username :string(255)
- # email :string(255)
- # crypted_password :string(40)
- # salt :string(40)
- # created_at :datetime
- # updated_at :datetime
- # remember_token :string(255)
- # remember_token_expires_at :datetime
- # confirmed :boolean(1)
- # description :text
- # username_paypal :string(255)
- # username_moneybookers :string(255)
- # username_webmoney :string(255)
- # email_on_pm :boolean(1)
- # email_on_update :boolean(1)
- # email_on_approval :boolean(1)
- # report_weekly :boolean(1)
- # report_monthly :boolean(1)
- # newsletter :boolean(1)
- # rating :float default(0.0)
- # funds :float default(0.0)
- # funds_from_sales :float default(0.0)
- # number_of_sales :integer(11) default(0)
- # number_of_buys :integer(11) default(0)
- # temp_username :string(255)
- # registered :boolean(1)
- # pro :boolean(1)
- # admin :boolean(1)
- # approver :boolean(1)
- # author :boolean(1)
- # sales :float default(0.0)
- # buys :float default(0.0)
- # deleted :boolean(1)
- # freezed :boolean(1)
- # featured_author_id :integer(11)
- # deposit_account :float default(0.0)
- # withdrawal_account :float default(0.0)
- # funds_from_buys :float default(0.0)
- # exclusive :boolean(1)
- # weekly_sales :integer(11) default(0)
- # seller_percentage_modifier :float default(0.0)
- # mailing_address :text
- # exclusive_expire :datetime
- # referrer :string(255)
- # funds_from_referrals :float default(0.0)
- # referred_user :boolean(1)
- # temp_email :string(255)
- # registration_code :string(40)
- # register_by :datetime
- #
- require 'digest/sha1'
- class User < ActiveRecord::Base
- # Virtual attribute for the unencrypted password
- has_private_messages
- has_many :openid_urls, :dependent => :destroy
- has_many :products
- has_many :transfers
- has_one :forum_user, :foreign_key => "UserID"
- has_one :featured_author
- has_one :avatar
- has_many :comments
- acts_as_textiled :description
- def description(*args)
- origin = super(*args)
- if args.empty? and origin # origin isn't nil
- # origin.gsub!(/</, "<")
- # origin.gsub!(/>/, ">")
- origin = RedCloth.new(origin).to_html
- end
- return origin
- end
- before_save :encrypt_password
- before_save :remove_username_spaces
- after_save :upload_avatar_if_available
- has_many :transactions, :dependent => :destroy
- has_many :purchases, :through => :transactions, :source => :product
- validates_numericality_of :funds, :greater_than_or_equal_to => 0
- validates_numericality_of :withdrawal_account, :greater_than_or_equal_to => 0
- validates_numericality_of :deposit_account, :greater_than_or_equal_to => 0
- validates_length_of :username, :minimum => 2, :allow_nil => true
- validates_length_of :username, :maximum => 20, :allow_nil => true
- validates_format_of :email, :with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i, :message => 'must be valid', :allow_nil => true
- # prevents a user from submitting a crafted form that bypasses activation
- # anything else you want your user to change should be added here.
- attr_accessor :password
- # Authenticates a user by their login name and unencrypted password. Returns the user or nil.
- def self.authenticate(username, password)
- u = find_by_username(username) # need to get the salt
- u && u.authenticated?(password) ? u : nil
- end
- # Encrypts some data with the salt.
- def self.encrypt(password, salt)
- Digest::SHA1.hexdigest("--#{salt}--#{password}--")
- end
- def new_random_password
- Digest::SHA1.hexdigest("--#{Time.now.to_s}--#{username}--")[0, 10]
- end
- def new_random_verification_key
- Digest::SHA1.hexdigest("--#{Time.now.to_s}--#{username}")[2, 20]
- end
- # Encrypts the password with the user salt
- def encrypt(password)
- self.class.encrypt(password, salt)
- end
- def authenticated?(password)
- crypted_password == encrypt(password) && registered? && !deleted?
- end
- def remember_token?
- remember_token_expires_at && Time.now.utc < remember_token_expires_at
- end
- # These create and unset the fields required for remembering users between browser closes
- def remember_me
- remember_me_for 2.weeks
- end
- def remember_me_for(time)
- remember_me_until time.from_now.utc
- end
- def remember_me_until(time)
- self.remember_token_expires_at = time
- self.remember_token = encrypt("#{email}--#{remember_token_expires_at}")
- save(false)
- end
- def forget_me
- self.remember_token_expires_at = nil
- self.remember_token = nil
- save(false)
- end
- def to_param
- "#{username.gsub(/[^a-z0-9]+/i, '-')}" if self.username
- end
- def referrer?
- referrer.blank?
- end
- # alias doesn't work ... maybe this is just some rails magic
- def confirmed? ; confirmed ; end
- def registered? ; registered ; end
- def freezed? ; freezed ; end
- def deleted? ; deleted ; end
- def admin? ; admin ; end
- def approver? ; approver ; end
- def pro? ; pro ; end
- def featured? ; featured_author ; end
- def referred_user? ; referred_user ; end
- def exclusive?
- exclusive || (exclusive_expire && exclusive_expire < Time.now)
- end
- def file_featured?
- self.products.any? { |product| product.featured? }
- end
- def badges
- if self.sales < 1.0
- badges = "<img src='/stylesheets/images/icons/icon_badge_leaf_bw.png' alt='Seller badge' title='Seller badge' />"
- elsif self.sales < 500.0
- badges = "<img src='/stylesheets/images/icons/icon_badge_leaf_01.png' alt='Sold between $1 and $499 badge' title='Sold between $1 and $499' />"
- elsif self.sales < 2000.0
- badges = "<img src='/stylesheets/images/icons/icon_badge_leaf_02.png' alt='Sold between $500 and $1 999 badge' title='Sold between $500 and $1 999' />"
- elsif self.sales < 5000.0
- badges = "<img src='/stylesheets/images/icons/icon_badge_leaf_03.png' alt='Sold between $2 000 and $4 999 badge' title='Sold between $2 000 and $4 999' />"
- elsif self.sales < 10000.0
- badges = "<img src='/stylesheets/images/icons/icon_badge_leaf_04.png' alt='Sold between $5 000 and $9 999 badge' title='Sold between $5 000 and $9 999' />"
- elsif self.sales < 15000.0
- badges = "<img src='/stylesheets/images/icons/icon_badge_leaf_05.png' alt='Sold between $10 000 and $14 999 badge' title='Sold between $10 000 and $14 999' />"
- elsif self.sales < 20000.0
- badges = "<img src='/stylesheets/images/icons/icon_badge_leaf_06.png' alt='Sold between $15 000 and $19 999 badge' title='Sold between $15 000 and $19 999' />"
- elsif self.sales < 25000.0
- badges = "<img src='/stylesheets/images/icons/icon_badge_leaf_07.png' alt='Sold between $20 000 and $24 999 badge' title='Sold between $20 000 and $24 999' />"
- elsif self.sales < 50000.0
- badges = "<img src='/stylesheets/images/icons/icon_badge_leaf_08.png' alt='Sold between $25 000 and $49 999 badge' title='Sold between $25 000 and $49 999' />"
- elsif self.sales < 100000.0
- badges = "<img src='/stylesheets/images/icons/icon_badge_leaf_09.png' alt='Sold between $50 000 and $99 999 badge' title='Sold between $50 000 and $99 999' />"
- else
- badges = "<img src='/stylesheets/images/icons/icon_badge_leaf_10.png' alt='Sold more then $100 000 badge' title='Sold more then $100 000' />"
- end
- if self.buys < 1.0
- badges << "<img src='/stylesheets/images/icons/icon_badge_cart_bw.png' alt='Buyer badge' title='Buyer badge' />"
- elsif self.buys < 100.0
- badges << "<img src='/stylesheets/images/icons/icon_badge_cart_01.png' alt='Bought between $1 and $99 badge' title='Bought between $1 and $99' />"
- elsif self.buys < 200.0
- badges << "<img src='/stylesheets/images/icons/icon_badge_cart_02.png' alt='Bought between $100 and $199 badge' title='Bought between $100 and $199' />"
- elsif self.buys < 300.0
- badges << "<img src='/stylesheets/images/icons/icon_badge_cart_03.png' alt='Bought between $200 and $299 badge' title='Bought between $200 and $299' />"
- elsif self.buys < 400.0
- badges << "<img src='/stylesheets/images/icons/icon_badge_cart_04.png' alt='Bought between $300 and $399 badge' title='Bought between $300 and $399' />"
- elsif self.buys < 500.0
- badges << "<img src='/stylesheets/images/icons/icon_badge_cart_05.png' alt='Bought between $400 and $499 badge' title='Bought between $400 and $499' />"
- elsif self.buys < 600.0
- badges << "<img src='/stylesheets/images/icons/icon_badge_cart_06.png' alt='Bought between $500 and $599 badge' title='Bought between $500 and $599' />"
- elsif self.buys < 700.0
- badges << "<img src='/stylesheets/images/icons/icon_badge_cart_07.png' alt='Bought between $600 and $699 badge' title='Bought between $600 and $699' />"
- elsif self.buys < 800.0
- badges << "<img src='/stylesheets/images/icons/icon_badge_cart_08.png' alt='Bought between $700 and $799 badge' title='Bought between $700 and $799' />"
- elsif self.buys < 900.0
- badges << "<img src='/stylesheets/images/icons/icon_badge_cart_09.png' alt='Bought between $800 and $899 badge' title='Bought between $800 and $899' />"
- else
- badges << "<img src='/stylesheets/images/icons/icon_badge_cart_10.png' alt='Bought more then $900 badge' title='Bought more then $900' />"
- end
- if self.featured?
- badges << "<img src='/stylesheets/images/icons/icon_badge_featured_author.png' alt='Featured author Badge' title='Featured author' />"
- else
- badges << "<img src='/stylesheets/images/icons/icon_badge_featured_author_bw.png' alt='Featured author Badge' title='Featured author' />"
- end
- if self.file_featured?
- badges << "<img src='/stylesheets/images/icons/icon_badge_featured_file.png' alt='Featured file Badge' title='Featured file' />"
- else
- badges << "<img src='/stylesheets/images/icons/icon_badge_featured_file_bw.png' alt='Featured file Badge' title='Featured file' />"
- end
- if self.exclusive?
- badges << "<img src='/stylesheets/images/icons/icon_badge_exclusive.png' alt='Exclusive author badge' title='Exclusive author' />"
- else
- badges << "<img src='/stylesheets/images/icons/icon_badge_exclusive_bw.png' alt='Exclusive author badge' title='Exclusive author' />"
- end
- badges << "<img src='/stylesheets/images/icons/icon_badge_ruby_bw.png' alt='Contest winner badge' title='Contest winner' />"
- if self.referred_user?
- badges << "<img src='/stylesheets/images/icons/icon_badge_heart.png' alt='Referred a user badge' title='Referred a user' />"
- else
- badges << "<img src='/stylesheets/images/icons/icon_badge_heart_bw.png' alt='Referred a user badge' title='Referred a user' />"
- end
- badges << "<img src='/stylesheets/images/icons/icon_badge_moderator_bw.png' alt='Moderator badge' title='Moderator' />"
- badges << "<img src='/stylesheets/images/icons/icon_badge_approver_bw.png' alt='Approver badge' title='Approver' />"
- if self.admin?
- badges << "<img src='/stylesheets/images/icons/icon_badge_staff.png' alt='Staff member badge' title='Staff member' />"
- else
- badges << "<img src='/stylesheets/images/icons/icon_badge_staff_bw.png' alt='Staff member badge' title='Staff member' />"
- end
- return badges
- end
- def self.find_by_identity_url(identity_url)
- openid = OpenidUrl.find_by_identity_url(identity_url, :include => :user)
- openid.nil? ? nil : openid.user
- end
- def self.find_by_identity_url_and_deleted(identity_url,deleted_param)
- openid = OpenidUrl.find_by_identity_url(identity_url, :include => :user)
- deleted = deleted_param
- if !openid.nil?
- deleted = openid.user.deleted?
- end
- openid.nil? || deleted != deleted_param ? nil : openid.user
- end
- def make_openid(identity_url)
- if !identity_url.blank?
- newopenid = self.openid_urls.new(:identity_url => identity_url)
- newopenid.make_activation_code!
- newopenid.save!
- end
- end
- def buyer_percentage
- if buys < 100
- percentage = 0.0
- elsif buys < 200
- percentage = 0.01
- elsif buys < 300
- percentage = 0.02
- elsif buys < 400
- percentage = 0.03
- elsif buys < 500
- percentage = 0.04
- elsif buys < 600
- percentage = 0.05
- elsif buys < 700
- percentage = 0.06
- elsif buys < 800
- percentage = 0.07
- elsif buys < 900
- percentage = 0.08
- elsif buys < 1000
- percentage = 0.09
- else
- percentage = 0.1
- end
- return percentage
- end
- def seller_percentage
- if exclusive?
- if sales < 500
- percentage = 0.4
- elsif sales < 4000
- percentage = 0.41
- elsif sales < 7500
- percentage = 0.42
- elsif sales < 11000
- percentage = 0.43
- elsif sales < 14500
- percentage = 0.44
- elsif sales < 18000
- percentage = 0.45
- elsif sales < 21500
- percentage = 0.46
- elsif sales < 25000
- percentage = 0.47
- elsif sales < 28500
- percentage = 0.48
- elsif sales < 32000
- percentage = 0.49
- else
- percentage = 0.5
- end
- else
- percentage = 0.3
- end
- percentage = percentage + seller_percentage_modifier
- return percentage
- end
- def pending_withdrawal
- pending = 0
- withdrawals = Transfer.find_all_by_user_id_and_status(id,'pending')
- for withdrawal in withdrawals
- pending = pending + withdrawal.amount
- end
- return pending
- end
- def make_activated_openid(identity_url)
- self.openid_urls.create(:identity_url => identity_url, :activated => true) unless identity_url.blank?
- end
- def openids?
- true if self.openid_urls.count > 1
- end
- def make_registration_code!
- make_registration_code
- end
- def self.create_and_link_forum_users
- users = User.find_all_by_confirmed_and_deleted(true,false)
- for user in users
- if ForumUser.find_by_Name(user.username)
- forumuser = ForumUser.find_by_Name(user.username)
- user.update_attribute(:forum_user_id,forumuser.id)
- forumuser.update_attribute(:Email,user.email)
- if !user.avatar.blank?
- forumuser.update_attribute(:Picture,user.avatar.public_filename)
- forumuser.update_attribute(:Icon,user.avatar.public_filename)
- else
- forumuser.update_attribute(:Picture,'/images/noavatar.png')
- forumuser.update_attribute(:Icon,'/images/noavatar.png')
- end
- else
- newuser = ForumUser.create(:Name => "#{user.username}",:Password => "anypassword",:RoleID => "3",:DateFirstVisit => "#{user.created_at}",:DateLastActive => "#{user.created_at}", :Email => "#{user.email}")
- if !user.avatar.blank?
- newuser.update_attribute(:Picture,user.avatar.public_filename)
- newuser.update_attribute(:Icon,user.avatar.public_filename)
- else
- newuser.update_attribute(:Picture,'/images/noavatar.png')
- newuser.update_attribute(:Icon,'/images/noavatar.png')
- end
- newuser.save!
- user.update_attribute(:forum_user_id,newuser.id)
- end
- end
- end
- def self.calculate_weekly
- users = User.find_all_by_confirmed_and_deleted(true,false)
- temp_users = []
- for user in users
- temp_users[user.id] = 0
- end
- transactions = Transaction.find(:all, :conditions => ['created_at > ?', 1.week.ago])
- for sale in transactions
- temp_users[sale.product.user_id] = temp_users[sale.product.user_id] + 1
- end
- for user in users
- if !user.deleted? && user.confirmed?
- user.update_attribute(:weekly_sales, temp_users[user.id])
- end
- end
- top5authors = User.find_all_by_deleted_and_confirmed(false,true, :order => "weekly_sales DESC", :limit => 5)
- if top5authors.size == 5
- TopArchive.create(:type => 'user', :first_id => top5authors[0].id, :second_id => top5authors[1].id, :third_id => top5authors[2].id, :fourth_id => top5authors[3].id, :fifth_id => top5authors[4].id)
- elsif top5authors.size == 4
- TopArchive.create(:type => 'user', :first_id => top5authors[0].id, :second_id => top5authors[1].id, :third_id => top5authors[2].id, :fourth_id => top5authors[3].id)
- elsif top5authors.size == 3
- TopArchive.create(:type => 'user', :first_id => top5authors[0].id, :second_id => top5authors[1].id, :third_id => top5authors[2].id)
- elsif top5authors.size == 2
- TopArchive.create(:type => 'user', :first_id => top5authors[0].id, :second_id => top5authors[1].id)
- elsif top5authors.size == 1
- TopArchive.create(:type => 'user', :first_id => top5authors[0].id)
- else
- TopArchive.create(:type => 'user')
- end
- end
- protected
- # before filter
- def encrypt_password
- return if password.blank?
- self.salt = Digest::SHA1.hexdigest("--#{Time.now.to_s}--#{username}--") if new_record?
- self.crypted_password = encrypt(password)
- end
- def remove_username_spaces
- return if username.blank?
- self.username = username.gsub(/\s+/, '')
- end
- def make_registration_code
- self.registration_code = Digest::SHA1.hexdigest( Time.now.to_s.split(//).sort_by {rand}.join )
- self.register_by = Time.now + 1.day
- end
- def password_required?
- crypted_password.blank? || !password.blank?
- end
- end
Add Comment
Please, Sign In to add comment