| 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 '.'
|