Guest User

Untitled

a guest
Feb 11th, 2018
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.43 KB | None | 0 0
  1. require 'csv'
  2.  
  3. namespace :user_importer do
  4. desc "Import users from a CSV file"
  5. task :import, [:csv_file] => [:environment] do |_, args|
  6. abort "Please specify the CSV file to import" if args[:csv_file].blank?
  7.  
  8. CSV.foreach(args[:csv_file], col_sep: ';', headers: true) do |new_user|
  9. user = User.find_by_email(new_user['email'])
  10. if user
  11. new_groups = new_user_groups(new_user['groups']) - user.groups.map(&:name)
  12. user.groups << parse_user_groups(new_groups)
  13.  
  14. puts "User #{new_user['email']} already exists and is not imported."
  15. puts ">> #{new_user['email']} was added to #{new_groups.join(',')}" unless new_groups.empty?
  16. else
  17. u = User.new({
  18. username: new_user['username'] || UserNameSuggester.suggest(new_user['email']),
  19. email: new_user['email'],
  20. password: SecureRandom.hex,
  21. name: new_user['name'],
  22. title: new_user['title'],
  23. approved: true,
  24. approved_by_id: -1,
  25. trust_level: TrustLevel[1],
  26. })
  27. u.import_mode = true
  28. u.groups = parse_user_groups new_user['groups']
  29.  
  30. if u.save
  31. u.activate
  32. u.email_tokens.update_all(confirmed: true)
  33. puts "Imported #{u.name} (#{u.email}) as #{u.username} to #{u.groups.map(&:name).join(',')}"
  34. else
  35. puts "Could not import #{u.name} (#{u.email}) due to #{u.errors.messages}"
  36. end
  37.  
  38. end
  39.  
  40. end
  41. end
Add Comment
Please, Sign In to add comment