mport feature added. Everything gets imported except updated_at fields.

IDs of objects are not copied, but created as new so there could be no conflict with existing objects.
This commit is contained in:
Jakub A.Tesinsky 2008-09-05 03:25:56 +02:00
parent a4cb8fb113
commit 229a114441
5 changed files with 138 additions and 20 deletions

View file

@ -88,8 +88,115 @@ class DataController < ApplicationController
# Draw the form to input the YAML text data
end
# adjusts time to utc
def adjust_time(timestring)
if (timestring=='') or ( timestring == nil)
return nil
else
return Time.parse(timestring + 'UTC')
end
end
def yaml_import
# Logic to load the YAML text file and create new records from data
@errmessage = ''
@inarray = YAML::load(params['import']['yaml'])
# arrays to handle id translations
# contexts
translate_context = Hash.new
translate_context[nil] = nil
current_user.contexts.each { |context| context.destroy }
@inarray['contexts'].each { | item |
newitem = Context.new(item.ivars['attributes'])
newitem.user_id = current_user.id
newitem.created_at = adjust_time(item.ivars['attributes']['created_at'])
newitem.save(false)
translate_context[item.ivars['attributes']['id'].to_i] = newitem.id
}
# projects
translate_project = Hash.new
translate_project[nil] = nil
current_user.projects.each { |item| item.destroy }
@inarray['projects'].each { |item|
newitem = Project.new(item.ivars['attributes'])
# ids
newitem.user_id = current_user.id
newitem.default_context_id = translate_context[newitem.default_context_id]
newitem.save(false)
translate_project[item.ivars['attributes']['id'].to_i] = newitem.id
# state + dates
newitem.transition_to(item.ivars['attributes']['state'])
newitem.completed_at = adjust_time(item.ivars['attributes']['completed_at'])
newitem.created_at = adjust_time(item.ivars['attributes']['created_at'])
newitem.position = item.ivars['attributes']['position']
newitem.save(false)
}
# todos
translate_todo = Hash.new
translate_todo[nil] = nil
current_user.todos.each { |item| item.destroy }
@inarray['todos'].each { |item|
newitem = Todo.new(item.ivars['attributes'])
# ids
newitem.user_id = current_user.id
newitem.context_id = translate_context[newitem.context_id]
newitem.project_id = translate_project[newitem.project_id]
# TODO: vyresit recurring_todo_id
newitem.save(false)
translate_todo[item.ivars['attributes']['id'].to_i] = newitem.id
# state + dates
case item.ivars['attributes']['state']
when 'active' : newitem.activate!
when 'project_hidden' : newitem.hide!
when 'completed'
newitem.complete!
newitem.completed_at = adjust_time(item.ivars['attributes']['completed_at'])
when 'deferred' : newitem.defer!
end
newitem.created_at = adjust_time(item.ivars['attributes']['created_at'])
newitem.save(false)
}
#tags
translate_tag = Hash.new
translate_tag[nil] = nil
current_user.tags.each { |item| item.destroy }
@inarray['tags'].each { |item|
newitem = Tag.new(item.ivars['attributes'])
newitem.created_at = adjust_time(item.ivars['attributes']['created_at'])
newitem.save
translate_tag[item.ivars['attributes']['id'].to_i] = newitem.id
}
# taggings
current_user.taggings.each { |item| item.destroy }
@inarray['taggings'].each { |item|
newitem = Tagging.new(item.ivars['attributes'])
newitem.user_id = current_user.id
newitem.tag_id = translate_tag[newitem.tag_id]
case newitem.taggable_type
when 'Todo' : newitem.taggable_id = translate_todo[newitem.taggable_id]
else newitem.taggable_id = 0
end
newitem.save
}
# notes
current_user.notes.each { |item| item.destroy }
@inarray['notes'].each { |item|
newitem = Note.new(item.ivars['attributes'])
newitem.id = item.ivars['attributes']['id']
newitem.user_id = current_user.id
newitem.project_id = translate_project[newitem.project_id]
newitem.created_at = adjust_time(item.ivars['attributes']['created_at'])
newitem.save
}
end
end