summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2008-06-07 14:55:32 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2008-06-07 14:55:32 +0000
commit042da97f541824d72a60d51acd118dcf7892853e (patch)
treee492cb1851ecefe25c7839339914efad6346c12e /lib
parent956ad0a3f954d71240e454df950cddfc230076bf (diff)
downloadredmine-042da97f541824d72a60d51acd118dcf7892853e.tar.gz
redmine-042da97f541824d72a60d51acd118dcf7892853e.zip
Trac importer: read session_attribute table to find user's email and real name (#1340).
git-svn-id: http://redmine.rubyforge.org/svn/trunk@1502 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'lib')
-rw-r--r--lib/tasks/migrate_from_trac.rake23
1 files changed, 20 insertions, 3 deletions
diff --git a/lib/tasks/migrate_from_trac.rake b/lib/tasks/migrate_from_trac.rake
index 8d5a35fd0..4226d79c0 100644
--- a/lib/tasks/migrate_from_trac.rake
+++ b/lib/tasks/migrate_from_trac.rake
@@ -195,6 +195,10 @@ namespace :redmine do
set_table_name :permission
end
+ class TracSessionAttribute < ActiveRecord::Base
+ set_table_name :session_attribute
+ end
+
def self.find_or_create_user(username, project_member = false)
return User.anonymous if username.blank?
@@ -202,10 +206,23 @@ namespace :redmine do
if !u
# Create a new user if not found
mail = username[0,limit_for(User, 'mail')]
+ if mail_attr = TracSessionAttribute.find_by_sid_and_name(username, 'email')
+ mail = mail_attr.value
+ end
mail = "#{mail}@foo.bar" unless mail.include?("@")
- u = User.new :firstname => username[0,limit_for(User, 'firstname')].gsub(/[^\w\s\'\-]/i, '-'),
- :lastname => '-',
- :mail => mail.gsub(/[^-@a-z0-9\.]/i, '-')
+
+ name = username
+ if name_attr = TracSessionAttribute.find_by_sid_and_name(username, 'name')
+ name = name_attr.value
+ end
+ name =~ (/(.*)(\s+\w+)?/)
+ fn = $1.strip
+ ln = ($2 || '-').strip
+
+ u = User.new :mail => mail.gsub(/[^-@a-z0-9\.]/i, '-'),
+ :firstname => fn[0, limit_for(User, 'firstname')].gsub(/[^\w\s\'\-]/i, '-'),
+ :lastname => ln[0, limit_for(User, 'lastname')].gsub(/[^\w\s\'\-]/i, '-')
+
u.login = username[0,limit_for(User, 'login')].gsub(/[^a-z0-9_\-@\.]/i, '-')
u.password = 'trac'
u.admin = true if TracPermission.find_by_username_and_action(username, 'admin')