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