Guest User

Untitled

a guest
May 4th, 2018
447
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 18.39 KB | None | 0 0
  1. # == Schema Information
  2. # Schema version: 76
  3. #
  4. # Table name: users
  5. #
  6. # id :integer(11) not null, primary key
  7. # username :string(255)
  8. # email :string(255)
  9. # crypted_password :string(40)
  10. # salt :string(40)
  11. # created_at :datetime
  12. # updated_at :datetime
  13. # remember_token :string(255)
  14. # remember_token_expires_at :datetime
  15. # confirmed :boolean(1)
  16. # description :text
  17. # username_paypal :string(255)
  18. # username_moneybookers :string(255)
  19. # username_webmoney :string(255)
  20. # email_on_pm :boolean(1)
  21. # email_on_update :boolean(1)
  22. # email_on_approval :boolean(1)
  23. # report_weekly :boolean(1)
  24. # report_monthly :boolean(1)
  25. # newsletter :boolean(1)
  26. # rating :float default(0.0)
  27. # funds :float default(0.0)
  28. # funds_from_sales :float default(0.0)
  29. # number_of_sales :integer(11) default(0)
  30. # number_of_buys :integer(11) default(0)
  31. # temp_username :string(255)
  32. # registered :boolean(1)
  33. # pro :boolean(1)
  34. # admin :boolean(1)
  35. # approver :boolean(1)
  36. # author :boolean(1)
  37. # sales :float default(0.0)
  38. # buys :float default(0.0)
  39. # deleted :boolean(1)
  40. # freezed :boolean(1)
  41. # featured_author_id :integer(11)
  42. # deposit_account :float default(0.0)
  43. # withdrawal_account :float default(0.0)
  44. # funds_from_buys :float default(0.0)
  45. # exclusive :boolean(1)
  46. # weekly_sales :integer(11) default(0)
  47. # seller_percentage_modifier :float default(0.0)
  48. # mailing_address :text
  49. # exclusive_expire :datetime
  50. # referrer :string(255)
  51. # funds_from_referrals :float default(0.0)
  52. # referred_user :boolean(1)
  53. # temp_email :string(255)
  54. # registration_code :string(40)
  55. # register_by :datetime
  56. #
  57.  
  58. require 'digest/sha1'
  59.  
  60. class User < ActiveRecord::Base
  61. # Virtual attribute for the unencrypted password
  62. has_private_messages
  63.  
  64. has_many :openid_urls, :dependent => :destroy
  65. has_many :products
  66. has_many :transfers
  67.  
  68. has_one :forum_user, :foreign_key => "UserID"
  69. has_one :featured_author
  70. has_one :avatar
  71. has_many :comments
  72.  
  73. acts_as_textiled :description
  74. def description(*args)
  75. origin = super(*args)
  76. if args.empty? and origin # origin isn't nil
  77. # origin.gsub!(/</, "<")
  78. # origin.gsub!(/>/, ">")
  79. origin = RedCloth.new(origin).to_html
  80. end
  81. return origin
  82. end
  83.  
  84. before_save :encrypt_password
  85. before_save :remove_username_spaces
  86. after_save :upload_avatar_if_available
  87.  
  88. has_many :transactions, :dependent => :destroy
  89. has_many :purchases, :through => :transactions, :source => :product
  90.  
  91. validates_numericality_of :funds, :greater_than_or_equal_to => 0
  92. validates_numericality_of :withdrawal_account, :greater_than_or_equal_to => 0
  93. validates_numericality_of :deposit_account, :greater_than_or_equal_to => 0
  94.  
  95. validates_length_of :username, :minimum => 2, :allow_nil => true
  96. validates_length_of :username, :maximum => 20, :allow_nil => true
  97.  
  98. validates_format_of :email, :with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i, :message => 'must be valid', :allow_nil => true
  99.  
  100. # prevents a user from submitting a crafted form that bypasses activation
  101. # anything else you want your user to change should be added here.
  102. attr_accessor :password
  103.  
  104. # Authenticates a user by their login name and unencrypted password. Returns the user or nil.
  105. def self.authenticate(username, password)
  106. u = find_by_username(username) # need to get the salt
  107. u && u.authenticated?(password) ? u : nil
  108. end
  109.  
  110. # Encrypts some data with the salt.
  111. def self.encrypt(password, salt)
  112. Digest::SHA1.hexdigest("--#{salt}--#{password}--")
  113. end
  114.  
  115. def new_random_password
  116. Digest::SHA1.hexdigest("--#{Time.now.to_s}--#{username}--")[0, 10]
  117. end
  118.  
  119. def new_random_verification_key
  120. Digest::SHA1.hexdigest("--#{Time.now.to_s}--#{username}")[2, 20]
  121. end
  122.  
  123.  
  124. # Encrypts the password with the user salt
  125. def encrypt(password)
  126. self.class.encrypt(password, salt)
  127. end
  128.  
  129. def authenticated?(password)
  130. crypted_password == encrypt(password) && registered? && !deleted?
  131. end
  132.  
  133. def remember_token?
  134. remember_token_expires_at && Time.now.utc < remember_token_expires_at
  135. end
  136.  
  137. # These create and unset the fields required for remembering users between browser closes
  138. def remember_me
  139. remember_me_for 2.weeks
  140. end
  141.  
  142. def remember_me_for(time)
  143. remember_me_until time.from_now.utc
  144. end
  145.  
  146. def remember_me_until(time)
  147. self.remember_token_expires_at = time
  148. self.remember_token = encrypt("#{email}--#{remember_token_expires_at}")
  149. save(false)
  150. end
  151.  
  152. def forget_me
  153. self.remember_token_expires_at = nil
  154. self.remember_token = nil
  155. save(false)
  156. end
  157.  
  158. def to_param
  159. "#{username.gsub(/[^a-z0-9]+/i, '-')}" if self.username
  160. end
  161.  
  162. def referrer?
  163. referrer.blank?
  164. end
  165.  
  166. # alias doesn't work ... maybe this is just some rails magic
  167. def confirmed? ; confirmed ; end
  168. def registered? ; registered ; end
  169. def freezed? ; freezed ; end
  170. def deleted? ; deleted ; end
  171. def admin? ; admin ; end
  172. def approver? ; approver ; end
  173. def pro? ; pro ; end
  174. def featured? ; featured_author ; end
  175. def referred_user? ; referred_user ; end
  176.  
  177. def exclusive?
  178. exclusive || (exclusive_expire && exclusive_expire < Time.now)
  179. end
  180.  
  181. def file_featured?
  182. self.products.any? { |product| product.featured? }
  183. end
  184.  
  185. def badges
  186. if self.sales < 1.0
  187. badges = "<img src='/stylesheets/images/icons/icon_badge_leaf_bw.png' alt='Seller badge' title='Seller badge' />"
  188. elsif self.sales < 500.0
  189. badges = "<img src='/stylesheets/images/icons/icon_badge_leaf_01.png' alt='Sold between $1 and $499 badge' title='Sold between $1 and $499' />"
  190. elsif self.sales < 2000.0
  191. 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' />"
  192. elsif self.sales < 5000.0
  193. 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' />"
  194. elsif self.sales < 10000.0
  195. 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' />"
  196. elsif self.sales < 15000.0
  197. 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' />"
  198. elsif self.sales < 20000.0
  199. 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' />"
  200. elsif self.sales < 25000.0
  201. 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' />"
  202. elsif self.sales < 50000.0
  203. 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' />"
  204. elsif self.sales < 100000.0
  205. 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' />"
  206. else
  207. badges = "<img src='/stylesheets/images/icons/icon_badge_leaf_10.png' alt='Sold more then $100 000 badge' title='Sold more then $100 000' />"
  208. end
  209. if self.buys < 1.0
  210. badges << "<img src='/stylesheets/images/icons/icon_badge_cart_bw.png' alt='Buyer badge' title='Buyer badge' />"
  211. elsif self.buys < 100.0
  212. badges << "<img src='/stylesheets/images/icons/icon_badge_cart_01.png' alt='Bought between $1 and $99 badge' title='Bought between $1 and $99' />"
  213. elsif self.buys < 200.0
  214. badges << "<img src='/stylesheets/images/icons/icon_badge_cart_02.png' alt='Bought between $100 and $199 badge' title='Bought between $100 and $199' />"
  215. elsif self.buys < 300.0
  216. badges << "<img src='/stylesheets/images/icons/icon_badge_cart_03.png' alt='Bought between $200 and $299 badge' title='Bought between $200 and $299' />"
  217. elsif self.buys < 400.0
  218. badges << "<img src='/stylesheets/images/icons/icon_badge_cart_04.png' alt='Bought between $300 and $399 badge' title='Bought between $300 and $399' />"
  219. elsif self.buys < 500.0
  220. badges << "<img src='/stylesheets/images/icons/icon_badge_cart_05.png' alt='Bought between $400 and $499 badge' title='Bought between $400 and $499' />"
  221. elsif self.buys < 600.0
  222. badges << "<img src='/stylesheets/images/icons/icon_badge_cart_06.png' alt='Bought between $500 and $599 badge' title='Bought between $500 and $599' />"
  223. elsif self.buys < 700.0
  224. badges << "<img src='/stylesheets/images/icons/icon_badge_cart_07.png' alt='Bought between $600 and $699 badge' title='Bought between $600 and $699' />"
  225. elsif self.buys < 800.0
  226. badges << "<img src='/stylesheets/images/icons/icon_badge_cart_08.png' alt='Bought between $700 and $799 badge' title='Bought between $700 and $799' />"
  227. elsif self.buys < 900.0
  228. badges << "<img src='/stylesheets/images/icons/icon_badge_cart_09.png' alt='Bought between $800 and $899 badge' title='Bought between $800 and $899' />"
  229. else
  230. badges << "<img src='/stylesheets/images/icons/icon_badge_cart_10.png' alt='Bought more then $900 badge' title='Bought more then $900' />"
  231. end
  232. if self.featured?
  233. badges << "<img src='/stylesheets/images/icons/icon_badge_featured_author.png' alt='Featured author Badge' title='Featured author' />"
  234. else
  235. badges << "<img src='/stylesheets/images/icons/icon_badge_featured_author_bw.png' alt='Featured author Badge' title='Featured author' />"
  236. end
  237. if self.file_featured?
  238. badges << "<img src='/stylesheets/images/icons/icon_badge_featured_file.png' alt='Featured file Badge' title='Featured file' />"
  239. else
  240. badges << "<img src='/stylesheets/images/icons/icon_badge_featured_file_bw.png' alt='Featured file Badge' title='Featured file' />"
  241. end
  242. if self.exclusive?
  243. badges << "<img src='/stylesheets/images/icons/icon_badge_exclusive.png' alt='Exclusive author badge' title='Exclusive author' />"
  244. else
  245. badges << "<img src='/stylesheets/images/icons/icon_badge_exclusive_bw.png' alt='Exclusive author badge' title='Exclusive author' />"
  246. end
  247. badges << "<img src='/stylesheets/images/icons/icon_badge_ruby_bw.png' alt='Contest winner badge' title='Contest winner' />"
  248. if self.referred_user?
  249. badges << "<img src='/stylesheets/images/icons/icon_badge_heart.png' alt='Referred a user badge' title='Referred a user' />"
  250. else
  251. badges << "<img src='/stylesheets/images/icons/icon_badge_heart_bw.png' alt='Referred a user badge' title='Referred a user' />"
  252. end
  253. badges << "<img src='/stylesheets/images/icons/icon_badge_moderator_bw.png' alt='Moderator badge' title='Moderator' />"
  254. badges << "<img src='/stylesheets/images/icons/icon_badge_approver_bw.png' alt='Approver badge' title='Approver' />"
  255. if self.admin?
  256. badges << "<img src='/stylesheets/images/icons/icon_badge_staff.png' alt='Staff member badge' title='Staff member' />"
  257. else
  258. badges << "<img src='/stylesheets/images/icons/icon_badge_staff_bw.png' alt='Staff member badge' title='Staff member' />"
  259. end
  260. return badges
  261. end
  262.  
  263. def self.find_by_identity_url(identity_url)
  264. openid = OpenidUrl.find_by_identity_url(identity_url, :include => :user)
  265. openid.nil? ? nil : openid.user
  266. end
  267.  
  268. def self.find_by_identity_url_and_deleted(identity_url,deleted_param)
  269. openid = OpenidUrl.find_by_identity_url(identity_url, :include => :user)
  270. deleted = deleted_param
  271. if !openid.nil?
  272. deleted = openid.user.deleted?
  273. end
  274. openid.nil? || deleted != deleted_param ? nil : openid.user
  275. end
  276.  
  277. def make_openid(identity_url)
  278. if !identity_url.blank?
  279. newopenid = self.openid_urls.new(:identity_url => identity_url)
  280. newopenid.make_activation_code!
  281. newopenid.save!
  282. end
  283. end
  284.  
  285. def buyer_percentage
  286. if buys < 100
  287. percentage = 0.0
  288. elsif buys < 200
  289. percentage = 0.01
  290. elsif buys < 300
  291. percentage = 0.02
  292. elsif buys < 400
  293. percentage = 0.03
  294. elsif buys < 500
  295. percentage = 0.04
  296. elsif buys < 600
  297. percentage = 0.05
  298. elsif buys < 700
  299. percentage = 0.06
  300. elsif buys < 800
  301. percentage = 0.07
  302. elsif buys < 900
  303. percentage = 0.08
  304. elsif buys < 1000
  305. percentage = 0.09
  306. else
  307. percentage = 0.1
  308. end
  309.  
  310. return percentage
  311. end
  312.  
  313. def seller_percentage
  314. if exclusive?
  315. if sales < 500
  316. percentage = 0.4
  317. elsif sales < 4000
  318. percentage = 0.41
  319. elsif sales < 7500
  320. percentage = 0.42
  321. elsif sales < 11000
  322. percentage = 0.43
  323. elsif sales < 14500
  324. percentage = 0.44
  325. elsif sales < 18000
  326. percentage = 0.45
  327. elsif sales < 21500
  328. percentage = 0.46
  329. elsif sales < 25000
  330. percentage = 0.47
  331. elsif sales < 28500
  332. percentage = 0.48
  333. elsif sales < 32000
  334. percentage = 0.49
  335. else
  336. percentage = 0.5
  337. end
  338. else
  339. percentage = 0.3
  340. end
  341. percentage = percentage + seller_percentage_modifier
  342. return percentage
  343. end
  344.  
  345. def pending_withdrawal
  346. pending = 0
  347. withdrawals = Transfer.find_all_by_user_id_and_status(id,'pending')
  348. for withdrawal in withdrawals
  349. pending = pending + withdrawal.amount
  350. end
  351. return pending
  352. end
  353.  
  354. def make_activated_openid(identity_url)
  355. self.openid_urls.create(:identity_url => identity_url, :activated => true) unless identity_url.blank?
  356. end
  357.  
  358. def openids?
  359. true if self.openid_urls.count > 1
  360. end
  361.  
  362. def make_registration_code!
  363. make_registration_code
  364. end
  365.  
  366. def self.create_and_link_forum_users
  367. users = User.find_all_by_confirmed_and_deleted(true,false)
  368. for user in users
  369. if ForumUser.find_by_Name(user.username)
  370. forumuser = ForumUser.find_by_Name(user.username)
  371. user.update_attribute(:forum_user_id,forumuser.id)
  372. forumuser.update_attribute(:Email,user.email)
  373. if !user.avatar.blank?
  374. forumuser.update_attribute(:Picture,user.avatar.public_filename)
  375. forumuser.update_attribute(:Icon,user.avatar.public_filename)
  376. else
  377. forumuser.update_attribute(:Picture,'/images/noavatar.png')
  378. forumuser.update_attribute(:Icon,'/images/noavatar.png')
  379. end
  380. else
  381. newuser = ForumUser.create(:Name => "#{user.username}",:Password => "anypassword",:RoleID => "3",:DateFirstVisit => "#{user.created_at}",:DateLastActive => "#{user.created_at}", :Email => "#{user.email}")
  382. if !user.avatar.blank?
  383. newuser.update_attribute(:Picture,user.avatar.public_filename)
  384. newuser.update_attribute(:Icon,user.avatar.public_filename)
  385. else
  386. newuser.update_attribute(:Picture,'/images/noavatar.png')
  387. newuser.update_attribute(:Icon,'/images/noavatar.png')
  388. end
  389. newuser.save!
  390. user.update_attribute(:forum_user_id,newuser.id)
  391. end
  392. end
  393. end
  394.  
  395. def self.calculate_weekly
  396. users = User.find_all_by_confirmed_and_deleted(true,false)
  397. temp_users = []
  398. for user in users
  399. temp_users[user.id] = 0
  400. end
  401. transactions = Transaction.find(:all, :conditions => ['created_at > ?', 1.week.ago])
  402. for sale in transactions
  403. temp_users[sale.product.user_id] = temp_users[sale.product.user_id] + 1
  404. end
  405. for user in users
  406. if !user.deleted? && user.confirmed?
  407. user.update_attribute(:weekly_sales, temp_users[user.id])
  408. end
  409. end
  410. top5authors = User.find_all_by_deleted_and_confirmed(false,true, :order => "weekly_sales DESC", :limit => 5)
  411. if top5authors.size == 5
  412. 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)
  413. elsif top5authors.size == 4
  414. TopArchive.create(:type => 'user', :first_id => top5authors[0].id, :second_id => top5authors[1].id, :third_id => top5authors[2].id, :fourth_id => top5authors[3].id)
  415. elsif top5authors.size == 3
  416. TopArchive.create(:type => 'user', :first_id => top5authors[0].id, :second_id => top5authors[1].id, :third_id => top5authors[2].id)
  417. elsif top5authors.size == 2
  418. TopArchive.create(:type => 'user', :first_id => top5authors[0].id, :second_id => top5authors[1].id)
  419. elsif top5authors.size == 1
  420. TopArchive.create(:type => 'user', :first_id => top5authors[0].id)
  421. else
  422. TopArchive.create(:type => 'user')
  423. end
  424. end
  425.  
  426. protected
  427. # before filter
  428. def encrypt_password
  429. return if password.blank?
  430. self.salt = Digest::SHA1.hexdigest("--#{Time.now.to_s}--#{username}--") if new_record?
  431. self.crypted_password = encrypt(password)
  432. end
  433.  
  434. def remove_username_spaces
  435. return if username.blank?
  436. self.username = username.gsub(/\s+/, '')
  437. end
  438.  
  439. def make_registration_code
  440. self.registration_code = Digest::SHA1.hexdigest( Time.now.to_s.split(//).sort_by {rand}.join )
  441. self.register_by = Time.now + 1.day
  442. end
  443.  
  444. def password_required?
  445. crypted_password.blank? || !password.blank?
  446. end
  447. end
Add Comment
Please, Sign In to add comment