Skip to content

Commit

Permalink
Import Feature added
Browse files Browse the repository at this point in the history
  • Loading branch information
rkyadav-ncsu committed Aug 30, 2015
1 parent 9f41c4a commit 9f2ef48
Show file tree
Hide file tree
Showing 3 changed files with 85 additions and 19 deletions.
20 changes: 18 additions & 2 deletions app/controllers/import_file_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,20 @@ def importFile(session,params)
file = params['file'].tempfile

errors = Array.new

first_row_read=false
row_header={}
file.each_line do |line|
line.chomp!
if first_row_read==false
row_header=parse_line(line.downcase,delimiter)
first_row_read=true
if (row_header.include?("email"))
#skip if first row contains header. In case of user information, it will contain name of user (mandatory
next
else
row_header={}
end
end
unless line.empty?
row = parse_line(line,delimiter)
begin
Expand All @@ -46,7 +57,11 @@ def importFile(session,params)
session[:assignment_id] = params[:id]
Object.const_get(params[:model]).import(row,session,params[:id])
else
Object.const_get(params[:model]).import(row,session,params[:id])
if(row_header.count()>0)
Object.const_get(params[:model]).import(row,row_header,session,params[:id])
else
Object.const_get(params[:model]).import(row,nil,session,params[:id])
end
end
rescue
errors << $!
Expand All @@ -56,6 +71,7 @@ def importFile(session,params)
return errors
end


def get_delimiter(params)
delim_type = params[:delim_type]
delimiter = case delim_type
Expand Down
36 changes: 28 additions & 8 deletions app/helpers/import_file_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,27 +2,47 @@

module ImportFileHelper

def self.define_attributes(row)
def self.define_attributes(row,row_header)
attributes = {}
attributes["role_id"] = Role.student.id
attributes["name"] = row[0].strip
attributes["fullname"] = row[1]
attributes["email"] = row[2].strip
attributes["password"] = row[3].strip
index=0
#default will be blank
attributes["name"]=nil
attributes["fullname"]=nil
attributes["email"]=nil
attributes["password"] = nil

if (row_header==nil)
attributes["name"] = row[0].strip
attributes["fullname"] = row[1]
attributes["email"] = row[2].strip

password=row[3]
if (password[0]=="[")
password=password[1..password.length]
password=password[0..password.length-2]
end

if (password!="")
attributes["password"] = password
end
else
row_header.each do |item|
attributes[item.strip]=row[index].strip
index=index+1
end
end
attributes["password_confirmation"] = attributes["password"]
attributes["email_on_submission"] = 1
attributes["email_on_review"] = 1
attributes["email_on_review_of_review"] = 1
attributes
end

def self.create_new_user(attributes, session)
user = User.new(attributes)
user.parent_id = (session[:user]).id
user.save!

user
end
end


48 changes: 39 additions & 9 deletions app/models/user.rb
Original file line number Diff line number Diff line change
Expand Up @@ -176,19 +176,49 @@ def reset_password
password
end

def self.import(row,session,id = nil)
if row.length != 4
raise ArgumentError, "Not enough items"
#import method
def self.import(row,row_header,session,id = nil)
user=User.new
if(row_header==nil)
if row.length < 3
raise ArgumentError, "Not enough items"
end
user = User.find_by_name(row[0])
else
index=0
row_header.each do |item|
if item.strip=="name"
user = User.find_by_name(row[index])
end
index=index+1
end
end
user = User.find_by_name(row[0])

if user == nil
attributes = ImportFileHelper::define_attributes(row)
user = ImportFileHelper::create_new_user(attributes,session)
attributes = ImportFileHelper::define_attributes(row,row_header)
unless attributes["name"].nil?
user = ImportFileHelper::create_new_user(attributes,session)
end
else
user.password = row[3].strip
user.email = row[2].strip
user.fullname = row[1].strip
if(row_header==nil)
user.password = row[3].strip
user.email = row[2].strip
user.fullname = row[1].strip
else
index=0
row_header.each do |item|
case item.strip
when "password"
user.password=row[index].strip
when "email"
user.email=row[index].strip
when "fullname"
user.fullname=row[index].strip
else
end
index=index+1
end
end
user.parent_id = (session[:user]).id
user.save
end
Expand Down

0 comments on commit 9f2ef48

Please sign in to comment.