| 88 | 88 |  | 
  | 89 | 89 |       def firstname | 
  | 90 | 90 |         @firstname = realname.blank? ? username : realname.split.first[0..29] | 
  |  | 91 |         @firstname.gsub!(/[^\w\s\'\-]/i, '') | 
  | 91 | 92 |         @firstname | 
  | 92 | 93 |       end | 
  | 93 | 94 |  | 
  | 94 | 95 |       def lastname | 
  | 95 | 96 |         @lastname = realname.blank? ? '-' : realname.split[1..-1].join(' ')[0..29] | 
  |  | 97 |         @lastname.gsub!(/[^\w\s\'\-]/i, '') | 
  | 96 | 98 |         @lastname = '-' if @lastname.blank? | 
  | 97 | 99 |         @lastname | 
  | 98 | 100 |       end | 
  | ... | ... |  | 
  | 118 | 120 |       has_many :news, :class_name => "MantisNews", :foreign_key => :project_id | 
  | 119 | 121 |       has_many :members, :class_name => "MantisProjectUser", :foreign_key => :project_id | 
  | 120 | 122 |  | 
  |  | 123 |       def name | 
  |  | 124 |         read_attribute(:name)[0..29] | 
  |  | 125 |       end | 
  |  | 126 |  | 
  | 121 | 127 |       def identifier | 
  | 122 |  |         read_attribute(:name).gsub(/[^a-z0-9\-]+/, '-').slice(0, Project::IDENTIFIER_MAX_LENGTH) | 
  |  | 128 |         read_attribute(:name).underscore[0..19].gsub(/[^a-z0-9\-]/, '-') | 
  | 123 | 129 |       end | 
  | 124 | 130 |     end | 
  | 125 | 131 |  | 
  |  | 132 |     class MantisProjectHierarchy < ActiveRecord::Base | 
  |  | 133 |       self.table_name = :mantis_project_hierarchy_table; | 
  |  | 134 |     end | 
  |  | 135 |  | 
  | 126 | 136 |     class MantisVersion < ActiveRecord::Base | 
  | 127 | 137 |       self.table_name = :mantis_project_version_table | 
  | 128 | 138 |  | 
  | ... | ... |  | 
  | 136 | 146 |     end | 
  | 137 | 147 |  | 
  | 138 | 148 |     class MantisCategory < ActiveRecord::Base | 
  | 139 |  |       self.table_name = :mantis_project_category_table | 
  |  | 149 |       self.table_name = :mantis_category_table | 
  | 140 | 150 |     end | 
  | 141 | 151 |  | 
  | 142 | 152 |     class MantisProjectUser < ActiveRecord::Base | 
  | ... | ... |  | 
  | 222 | 232 |       end | 
  | 223 | 233 |  | 
  | 224 | 234 |       def name | 
  | 225 |  |         read_attribute(:name)[0..29] | 
  |  | 235 |         read_attribute(:name)[0..29].gsub(/[^\w\s\'\-]/, '-') | 
  | 226 | 236 |       end | 
  | 227 | 237 |     end | 
  | 228 | 238 |  | 
  | ... | ... |  | 
  | 248 | 258 |                      :last_login_on => user.last_visit | 
  | 249 | 259 |         u.login = user.username | 
  | 250 | 260 |         u.password = 'mantis' | 
  | 251 |  |         u.status = User::STATUS_LOCKED if user.enabled != 1 | 
  |  | 261 |         u.status = User::STATUS_ACTIVE if user.enabled == true | 
  |  | 262 |         u.status = User::STATUS_LOCKED if user.enabled != true | 
  | 252 | 263 |         u.admin = true if user.access_level == 90 | 
  | 253 | 264 |         next unless u.save! | 
  | 254 | 265 |         users_migrated += 1 | 
  | ... | ... |  | 
  | 259 | 270 |  | 
  | 260 | 271 |       # Projects | 
  | 261 | 272 |       print "Migrating projects" | 
  | 262 |  |       Project.destroy_all | 
  |  | 273 |       Project.destroy_all(:parent_id => nil) | 
  | 263 | 274 |       projects_map = {} | 
  | 264 | 275 |       versions_map = {} | 
  | 265 | 276 |       categories_map = {} | 
  | ... | ... |  | 
  | 286 | 297 |         project.versions.each do |version| | 
  | 287 | 298 |           v = Version.new :name => encode(version.version), | 
  | 288 | 299 |                           :description => encode(version.description), | 
  | 289 |  |                           :effective_date => (version.date_order ? version.date_order.to_date : nil) | 
  |  | 300 |                           :effective_date => Time.at(version.date_order).to_date | 
  | 290 | 301 |           v.project = p | 
  | 291 | 302 |           v.save | 
  | 292 | 303 |           versions_map[version.id] = v.id | 
  | ... | ... |  | 
  | 294 | 305 |  | 
  | 295 | 306 |         # Project categories | 
  | 296 | 307 |         project.categories.each do |category| | 
  | 297 |  |           g = IssueCategory.new :name => category.category[0,30] | 
  |  | 308 |           g = IssueCategory.new :name => category.name[0,30] | 
  | 298 | 309 |           g.project = p | 
  | 299 | 310 |           g.save | 
  | 300 |  |           categories_map[category.category] = g.id | 
  |  | 311 |           categories_map[category.id] = g.id | 
  | 301 | 312 |         end | 
  | 302 | 313 |       end | 
  | 303 | 314 |       puts | 
  | 304 | 315 |  | 
  |  | 316 |       # Project Hierarchy | 
  |  | 317 |       print "Migrating project hierarchy..." | 
  |  | 318 |       MantisProjectHierarchy.find(:all).each do |entry| | 
  |  | 319 |         p = Project.find_by_id(projects_map[entry.child_id]) | 
  |  | 320 |         p.set_parent!(projects_map[entry.parent_id]) | 
  |  | 321 |       end | 
  |  | 322 |       puts | 
  |  | 323 |  | 
  | 305 | 324 |       # Bugs | 
  | 306 | 325 |       print "Migrating bugs" | 
  | 307 | 326 |       Issue.destroy_all | 
  | ... | ... |  | 
  | 313 | 332 |                       :subject => encode(bug.summary), | 
  | 314 | 333 |                       :description => encode(bug.bug_text.full_description), | 
  | 315 | 334 |                       :priority => PRIORITY_MAPPING[bug.priority] || DEFAULT_PRIORITY, | 
  | 316 |  |                       :created_on => bug.date_submitted, | 
  | 317 |  |                       :updated_on => bug.last_updated | 
  |  | 335 |                       :created_on => Time.at(bug.date_submitted), | 
  |  | 336 |                       :updated_on => Time.at(bug.last_updated) | 
  | 318 | 337 |         i.author = User.find_by_id(users_map[bug.reporter_id]) | 
  | 319 |  |         i.category = IssueCategory.find_by_project_id_and_name(i.project_id, bug.category[0,30]) unless bug.category.blank? | 
  |  | 338 |         i.category = IssueCategory.find_by_id(categories_map[bug.category_id]) unless bug.category_id.blank? | 
  | 320 | 339 |         i.fixed_version = Version.find_by_project_id_and_name(i.project_id, bug.fixed_in_version) unless bug.fixed_in_version.blank? | 
  | 321 | 340 |         i.status = STATUS_MAPPING[bug.status] || DEFAULT_STATUS | 
  | 322 | 341 |         i.tracker = (bug.severity == 10 ? TRACKER_FEATURE : TRACKER_BUG) | 
  | ... | ... |  | 
  | 337 | 356 |         bug.bug_notes.each do |note| | 
  | 338 | 357 |           next unless users_map[note.reporter_id] | 
  | 339 | 358 |           n = Journal.new :notes => encode(note.bug_note_text.note), | 
  | 340 |  |                           :created_on => note.date_submitted | 
  |  | 359 |                           :created_on => Time.at(note.date_submitted) | 
  | 341 | 360 |           n.user = User.find_by_id(users_map[note.reporter_id]) | 
  | 342 | 361 |           n.journalized = i | 
  | 343 | 362 |           n.save | 
  | ... | ... |  | 
  | 345 | 364 |  | 
  | 346 | 365 |         # Bug files | 
  | 347 | 366 |         bug.bug_files.each do |file| | 
  | 348 |  |           a = Attachment.new :created_on => file.date_added | 
  |  | 367 |           a = Attachment.new :created_on => Time.at(file.date_added) | 
  | 349 | 368 |           a.file = file | 
  | 350 | 369 |           a.author = User.find :first | 
  | 351 | 370 |           a.container = i | 
  | ... | ... |  | 
  | 357 | 376 |           next unless users_map[monitor.user_id] | 
  | 358 | 377 |           i.add_watcher(User.find_by_id(users_map[monitor.user_id])) | 
  | 359 | 378 |         end | 
  |  | 379 |  | 
  |  | 380 | 	# Fix updated time (setting some attribute breaks it) | 
  |  | 381 |         i.updated_on = Time.at(bug.last_updated) | 
  | 360 | 382 |       end | 
  | 361 | 383 |  | 
  | 362 | 384 |       # update issue id sequence if needed (postgresql) | 
  | ... | ... |  | 
  | 384 | 406 |         n = News.new :project_id => projects_map[news.project_id], | 
  | 385 | 407 |                      :title => encode(news.headline[0..59]), | 
  | 386 | 408 |                      :description => encode(news.body), | 
  | 387 |  |                      :created_on => news.date_posted | 
  |  | 409 |                      :created_on => Time.at(news.date_posted) | 
  | 388 | 410 |         n.author = User.find_by_id(users_map[news.poster_id]) | 
  | 389 | 411 |         n.save | 
  | 390 | 412 |         print '.' |