source: subversion/sites/rails_port/app/models/user.rb @ 2776

Last change on this file since 2776 was 2776, checked in by steve, 13 years ago

updates from hacking day

File size: 2.7 KB
Line 
1class User < ActiveRecord::Base
2  require 'xml/libxml'
3  require 'digest/md5'
4
5  has_many :traces
6  has_many :diary_entries
7  has_many :messages, :foreign_key => :to_user_id
8  has_many :friends
9
10  validates_confirmation_of :pass_crypt, :message => 'Password must match the confirmation password'
11  validates_uniqueness_of :display_name, :allow_nil => true
12  validates_uniqueness_of :email
13  validates_length_of :pass_crypt, :minimum => 8
14  validates_length_of :display_name, :minimum => 3, :allow_nil => true
15  validates_format_of :email, :with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i
16
17  def set_defaults
18    self.creation_time = Time.now
19    self.timeout = Time.now
20    self.token = User.make_token()
21  end
22
23  def pass_crypt=(str) 
24    write_attribute("pass_crypt", Digest::MD5.hexdigest(str)) 
25  end
26
27  def pass_crypt_confirmation=(str) 
28    write_attribute("pass_crypt_confirm", Digest::MD5.hexdigest(str)) 
29  end
30
31  def self.authenticate(email, passwd)
32    find(:first, :conditions => [ "email = ? AND pass_crypt = ? AND active = true", email, Digest::MD5.hexdigest(passwd)])
33  end 
34
35  def self.authenticate_token(token) 
36    find(:first, :conditions => [ "token = ? ", token])
37  end 
38
39  def self.make_token(length=30)
40    chars = 'abcdefghijklmnopqrtuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
41    confirmstring = ''
42
43    length.times do
44      confirmstring += chars[(rand * chars.length).to_i].chr
45    end
46
47    return confirmstring
48  end
49
50  def to_xml
51    doc = OSM::API.new.get_xml_doc
52    doc.root << to_xml_node()
53    return doc
54  end
55
56  def to_xml_node
57    el1 = XML::Node.new 'user'
58    el1['display_name'] = self.display_name.to_s
59    el1['account_created'] = self.creation_time.xmlschema
60    return el1
61  end
62
63  def nearby(lat_range=1, lon_range=1)
64      if self.home_lon and self.home_lat
65          nearby = User.find(:all,  :conditions => "#{self.home_lon} > home_lon - #{lon_range} and #{self.home_lon} < home_lon + #{lon_range} and  #{self.home_lon} > home_lon - #{lon_range} and #{self.home_lon} < home_lon + #{lon_range} and data_public = 1 and id != #{self.id}") 
66      else
67          nearby = []
68      end
69      return nearby
70  end
71
72  def self.has_messages?
73    if Message.fdhjklsafind_by_to_user_id(self.id) 
74      return true
75    else
76      return false
77    end
78  end
79
80  def get_new_messages
81    messages = Message.find(:all, :conditions => "message_read = 0 and to_user_id = #{self.id}")
82    return messages
83  end
84
85  def get_all_messages
86    messages = Message.find(:all, :conditions => "to_user_id = #{self.id}")
87    return messages
88  end
89
90  def is_friends_with?(new_friend)
91    res = false
92    @new_friend = new_friend
93    self.friends.each do |friend|
94      if friend.user_id == @new_friend.user_id
95        return true
96      end
97    end
98    return false
99  end
100
101end
Note: See TracBrowser for help on using the repository browser.