class Moodle2CC::Moodle2Converter::Migrator

Public Class Methods

new(source_file, output_dir) click to toggle source
# File lib/moodle2cc/moodle2converter/migrator.rb, line 6
def initialize(source_file, output_dir)
  self.class.clear_unique_id_set!
  @extractor = Moodle2CC::Moodle2::Extractor.new(source_file)
  @output_dir = output_dir
end

Private Class Methods

activity_id_map() click to toggle source
# File lib/moodle2cc/moodle2converter/migrator.rb, line 207
def self.activity_id_map
  @activity_id_map ||= {}
end
clear_unique_id_set!() click to toggle source
# File lib/moodle2cc/moodle2converter/migrator.rb, line 198
def self.clear_unique_id_set!
  @unique_id_set = Set.new
  @activity_id_map = {}
end
unique_id_set() click to toggle source
# File lib/moodle2cc/moodle2converter/migrator.rb, line 203
def self.unique_id_set
  @unique_id_set ||= Set.new
end

Public Instance Methods

imscc_path() click to toggle source
# File lib/moodle2cc/moodle2converter/migrator.rb, line 48
def imscc_path
  @path
end
migrate() click to toggle source
# File lib/moodle2cc/moodle2converter/migrator.rb, line 12
def migrate
  @extractor.extract do |moodle_course|
    cc_course = convert_course(moodle_course)
    cc_course.files += convert_files(moodle_course.files)
    cc_course.pages += convert_pages(moodle_course.pages)
    cc_course.pages += convert_wikis(moodle_course.wikis)
    cc_course.discussions += convert_discussions(moodle_course.forums)
    cc_course.assignments += convert_assignments(moodle_course.assignments, moodle_course.grading_scales)

    cc_course.mute_assignments! unless moodle_course.show_grades

    cc_course.assessments += convert_assessments(moodle_course.quizzes, moodle_course.choices,
      moodle_course.feedbacks, moodle_course.questionnaires)
    cc_course.question_banks += convert_question_banks(moodle_course.question_categories)

    cc_course.pages += convert_sections_to_pages(moodle_course.sections)
    cc_course.pages += convert_folders(moodle_course)
    cc_course.pages += convert_books(moodle_course.books)
    cc_course.pages += convert_labels(moodle_course.labels)
    cc_course.pages += convert_glossaries(moodle_course)

    cc_course.pages.each do |canvas_page|
      canvas_page.href = generate_unique_resource_path(Moodle2CC::CanvasCC::Models::Page::WIKI_CONTENT, canvas_page.title)
    end

    cc_course.canvas_modules += convert_sections(moodle_course.sections)

    resolve_duplicate_page_titles!(cc_course)
    convert_html!(cc_course, moodle_course)

    cc_course.resolve_question_references!
    @path = Moodle2CC::CanvasCC::CartridgeCreator.new(cc_course).create(@output_dir)
  end
  @path
end

Private Instance Methods

convert_assessments(quizzes, choices, feedbacks, questionnaires) click to toggle source

convert quizzes to assessments

# File lib/moodle2cc/moodle2converter/migrator.rb, line 114
def convert_assessments(quizzes, choices, feedbacks, questionnaires)
  assessment_converter = Moodle2CC::Moodle2Converter::AssessmentConverter.new
  assessments = []
  assessments += quizzes.map { |quiz| assessment_converter.convert_quiz(quiz) }
  assessments += choices.map { |choice| assessment_converter.convert_choice(choice) }
  assessments += feedbacks.map { |feedback| assessment_converter.convert_feedback(feedback) }
  assessments += questionnaires.map { |questionnaire| assessment_converter.convert_questionnaire(questionnaire) }
  assessments
end
convert_assignments(assignments, grading_scales) click to toggle source
# File lib/moodle2cc/moodle2converter/migrator.rb, line 83
def convert_assignments(assignments, grading_scales)
  assignment_converter = Moodle2CC::Moodle2Converter::AssignmentConverter.new
  assignments.map { |assignment| assignment_converter.convert(assignment, grading_scales) }
end
convert_books(books) click to toggle source
# File lib/moodle2cc/moodle2converter/migrator.rb, line 98
def convert_books(books)
  book_converter = Moodle2CC::Moodle2Converter::BookConverter.new
  books.map { |book| book_converter.convert_to_pages(book) }.flatten
end
convert_course(moodle_course) click to toggle source
# File lib/moodle2cc/moodle2converter/migrator.rb, line 54
def convert_course(moodle_course)
  Moodle2CC::Moodle2Converter::CourseConverter.new.convert(moodle_course)
end
convert_discussions(discussions) click to toggle source
# File lib/moodle2cc/moodle2converter/migrator.rb, line 78
def convert_discussions(discussions)
  discussion_converter = Moodle2CC::Moodle2Converter::DiscussionConverter.new
  discussions.map { |discussion| discussion_converter.convert(discussion) }
end
convert_files(files) click to toggle source
# File lib/moodle2cc/moodle2converter/migrator.rb, line 63
def convert_files(files)
  file_converter = Moodle2CC::Moodle2Converter::FileConverter.new
  Array.new(files).map { |file| file_converter.convert(file) }
end
convert_folders(moodle_course) click to toggle source
# File lib/moodle2cc/moodle2converter/migrator.rb, line 93
def convert_folders(moodle_course)
  folder_converter = Moodle2CC::Moodle2Converter::FolderConverter.new(moodle_course)
  moodle_course.folders.map { |folder| folder_converter.convert(folder) }
end
convert_glossaries(moodle_course) click to toggle source
# File lib/moodle2cc/moodle2converter/migrator.rb, line 108
def convert_glossaries(moodle_course)
  glossary_converter = Moodle2CC::Moodle2Converter::GlossaryConverter.new(moodle_course)
  moodle_course.glossaries.map { |glossary| glossary_converter.convert(glossary) }
end
convert_html!(cc_course, moodle_course) click to toggle source
# File lib/moodle2cc/moodle2converter/migrator.rb, line 130
def convert_html!(cc_course, moodle_course)
  html_converter = HtmlConverter.new(cc_course.files, moodle_course)
  cc_course.pages.each {|page| page.body = html_converter.convert(page.body)}
  cc_course.discussions.each {|discussion| discussion.text = html_converter.convert(discussion.text)}
  cc_course.assignments.each {|assignment| assignment.body = html_converter.convert(assignment.body)}

  cc_course.assessments.each do |assessment|
    assessment.description = html_converter.convert(assessment.description)

    next unless assessment.items
    assessment.items.each do |item|
      if item.is_a?(Moodle2CC::CanvasCC::Models::QuestionGroup)
        item.questions.each do |question|
          convert_question_html!(question, html_converter)
        end
      elsif item.is_a?(Moodle2CC::CanvasCC::Models::Question)
        convert_question_html!(item, html_converter)
      end
    end
  end

  cc_course.question_banks.each do |question_bank|
    question_bank.questions.each do |question|
      convert_question_html!(question, html_converter)
    end
  end
end
convert_labels(labels) click to toggle source
# File lib/moodle2cc/moodle2converter/migrator.rb, line 103
def convert_labels(labels)
  label_converter = Moodle2CC::Moodle2Converter::LabelConverter.new
  labels.map { |label| label_converter.convert_to_pages(label) }.flatten
end
convert_pages(pages) click to toggle source
# File lib/moodle2cc/moodle2converter/migrator.rb, line 68
def convert_pages(pages)
  page_converter = Moodle2CC::Moodle2Converter::PageConverter.new
  pages.map { |page| page_converter.convert(page) }
end
convert_question_banks(question_categories) click to toggle source

convert question categories to question banks

# File lib/moodle2cc/moodle2converter/migrator.rb, line 125
def convert_question_banks(question_categories)
  bank_converter = Moodle2CC::Moodle2Converter::QuestionBankConverter.new
  question_categories.map { |category| bank_converter.convert(category) }
end
convert_question_html!(question, html_converter) click to toggle source
# File lib/moodle2cc/moodle2converter/migrator.rb, line 158
def convert_question_html!(question, html_converter)
  question.material = html_converter.convert(question.material)
  question.general_feedback = html_converter.convert(question.general_feedback) if question.general_feedback

  question.answers.each do |answer|
    answer.answer_text = html_converter.convert(answer.answer_text)
    answer.feedback = html_converter.convert(answer.feedback) if answer.feedback
  end

  question.post_process! if question.is_a?(Moodle2CC::CanvasCC::Models::CalculatedQuestion)
end
convert_sections(sections) click to toggle source
# File lib/moodle2cc/moodle2converter/migrator.rb, line 58
def convert_sections(sections)
  section_converter = Moodle2CC::Moodle2Converter::SectionConverter.new
  sections.map { |section| section_converter.convert(section) if !section.empty? }.compact
end
convert_sections_to_pages(sections) click to toggle source
# File lib/moodle2cc/moodle2converter/migrator.rb, line 88
def convert_sections_to_pages(sections)
  converter = Moodle2CC::Moodle2Converter::SectionConverter.new
  sections.map{|s| converter.convert_to_summary_page(s) if s.summary?}.compact
end
convert_wikis(wikis) click to toggle source
# File lib/moodle2cc/moodle2converter/migrator.rb, line 73
def convert_wikis(wikis)
  wiki_converter = Moodle2CC::Moodle2Converter::WikiConverter.new
  wikis.map { |wiki| wiki_converter.convert(wiki) }.flatten
end
find_module_index_for_page(cc_course, canvas_page) click to toggle source
# File lib/moodle2cc/moodle2converter/migrator.rb, line 187
def find_module_index_for_page(cc_course, canvas_page)
  cc_course.canvas_modules.each_with_index do |canvas_module, module_index|
    canvas_module.module_items.each_with_index do |module_item, item_index|
      if module_item.identifierref.to_s == canvas_page.identifier.to_s
        return [module_index, item_index]
      end
    end
  end
  [Float::INFINITY]
end
resolve_duplicate_page_titles!(cc_course) click to toggle source
# File lib/moodle2cc/moodle2converter/migrator.rb, line 170
def resolve_duplicate_page_titles!(cc_course)
  page_titles = cc_course.pages.map(&:title)
  duplicate_page_map = cc_course.pages.group_by(&:title).select{|k, v| v.count > 1}
  duplicate_page_map.each do |title, dup_pages|
    dup_pages.sort_by!{|page| find_module_index_for_page(cc_course, page)}

    dup_pages.each_with_index do |page, index|
      next if index == 0
      num = index + 1
      while (title = "#{page.title}-#{num}") && page_titles.include?(title)
        num += 1
      end
      page.title = title
    end
  end
end