1
|
class TracAttribute < ActiveRecord::Base
|
2
|
set_table_name :session_attribute
|
3
|
end
|
4
|
|
5
|
def self.find_or_create_user(username, project_member = false)
|
6
|
return User.anonymous if username.blank?
|
7
|
|
8
|
u = User.find_by_login(username)
|
9
|
if !u
|
10
|
# Create a new user if not found
|
11
|
TracAttribute.find_by_sql("SELECT value FROM #{TracAttribute.table_name} WHERE sid='#{username}' AND name='email'").each do |attrib|
|
12
|
@mail = attrib.value
|
13
|
end
|
14
|
TracAttribute.find_by_sql("SELECT value FROM #{TracAttribute.table_name} WHERE sid='#{username}' AND name='name'").each do |attrib|
|
15
|
@fn = $1 if attrib.value =~ (/(\w+)/)
|
16
|
@ln = $1 if attrib.value =~ (/(\s+\w+)/)
|
17
|
end
|
18
|
@ln2 = @ln.gsub(/^\s+/, "")
|
19
|
u = User.new :firstname => @fn,
|
20
|
:lastname => @ln2,
|
21
|
:mail => @mail
|
22
|
u.login = username[0,limit_for(User, 'login')].gsub(/[^a-z0-9_\-@\.]/i, '-')
|
23
|
u.password = 'trac'
|
24
|
u.admin = true if TracPermission.find_by_username_and_action(username, 'admin')
|
25
|
@fn = ''
|
26
|
@ln = ''
|
27
|
@ln2 = ''
|
28
|
@mail = ''
|
29
|
# finally, a default user is used if the new user is not valid
|
30
|
u = User.find(:first) unless u.save
|
31
|
end
|
32
|
# Make sure he is a member of the project
|
33
|
if project_member && !u.member_of?(@target_project)
|
34
|
role = DEFAULT_ROLE
|
35
|
if u.admin
|
36
|
role = ROLE_MAPPING['admin']
|
37
|
elsif TracPermission.find_by_username_and_action(username, 'developer')
|
38
|
role = ROLE_MAPPING['developer']
|
39
|
end
|
40
|
Member.create(:user => u, :project => @target_project, :role => role)
|
41
|
u.reload
|
42
|
end
|
43
|
u
|
44
|
end
|