moodle2cc 0.1.12 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.travis.yml +4 -1
- data/Changelog +5 -0
- data/Gemfile +2 -0
- data/Guardfile +6 -0
- data/README.md +1 -1
- data/Rakefile +14 -1
- data/lib/moodle2cc.rb +66 -0
- data/lib/moodle2cc/canvas/question.rb +1 -1
- data/lib/moodle2cc/canvas_cc/assessment_writer.rb +82 -0
- data/lib/moodle2cc/canvas_cc/assignment_writer.rb +67 -0
- data/lib/moodle2cc/canvas_cc/calculated_question_writer.rb +61 -0
- data/lib/moodle2cc/canvas_cc/canvas_export_writer.rb +18 -0
- data/lib/moodle2cc/canvas_cc/cartridge_creator.rb +57 -0
- data/lib/moodle2cc/canvas_cc/course_setting_writer.rb +35 -0
- data/lib/moodle2cc/canvas_cc/discussion_writer.rb +51 -0
- data/lib/moodle2cc/canvas_cc/essay_question_writer.rb +19 -0
- data/lib/moodle2cc/canvas_cc/file_meta_writer.rb +38 -0
- data/lib/moodle2cc/canvas_cc/ims_manifest_generator.rb +123 -0
- data/lib/moodle2cc/canvas_cc/matching_question_writer.rb +41 -0
- data/lib/moodle2cc/canvas_cc/models/answer.rb +12 -0
- data/lib/moodle2cc/canvas_cc/models/assessment.rb +68 -0
- data/lib/moodle2cc/canvas_cc/models/assignment.rb +30 -0
- data/lib/moodle2cc/canvas_cc/models/calculated_question.rb +7 -0
- data/lib/moodle2cc/canvas_cc/models/canvas_file.rb +22 -0
- data/lib/moodle2cc/canvas_cc/models/canvas_module.rb +10 -0
- data/lib/moodle2cc/canvas_cc/models/course.rb +46 -0
- data/lib/moodle2cc/canvas_cc/models/discussion.rb +36 -0
- data/lib/moodle2cc/canvas_cc/models/discussion_topic.rb +5 -0
- data/lib/moodle2cc/canvas_cc/models/matching_question.rb +7 -0
- data/lib/moodle2cc/canvas_cc/models/module_item.rb +16 -0
- data/lib/moodle2cc/canvas_cc/models/numerical_question.rb +7 -0
- data/lib/moodle2cc/canvas_cc/models/page.rb +31 -0
- data/lib/moodle2cc/canvas_cc/models/question.rb +36 -0
- data/lib/moodle2cc/canvas_cc/models/question_bank.rb +27 -0
- data/lib/moodle2cc/canvas_cc/models/question_group.rb +10 -0
- data/lib/moodle2cc/canvas_cc/models/resource.rb +23 -0
- data/lib/moodle2cc/canvas_cc/models/web_content.rb +7 -0
- data/lib/moodle2cc/canvas_cc/models/web_link.rb +7 -0
- data/lib/moodle2cc/canvas_cc/models/workflow_state.rb +6 -0
- data/lib/moodle2cc/canvas_cc/module_meta_writer.rb +52 -0
- data/lib/moodle2cc/canvas_cc/multiple_blanks_question_writer.rb +51 -0
- data/lib/moodle2cc/canvas_cc/multiple_choice_question_writer.rb +48 -0
- data/lib/moodle2cc/canvas_cc/numerical_question_writer.rb +40 -0
- data/lib/moodle2cc/canvas_cc/page_writer.rb +38 -0
- data/lib/moodle2cc/canvas_cc/question_bank_writer.rb +44 -0
- data/lib/moodle2cc/canvas_cc/question_group_writer.rb +23 -0
- data/lib/moodle2cc/canvas_cc/question_writer.rb +127 -0
- data/lib/moodle2cc/canvas_cc/short_answer_question_writer.rb +42 -0
- data/lib/moodle2cc/canvas_cc/text_only_question_writer.rb +19 -0
- data/lib/moodle2cc/canvas_cc/true_false_question_writer.rb +38 -0
- data/lib/moodle2cc/cli.rb +1 -1
- data/lib/moodle2cc/migrator.rb +37 -4
- data/lib/moodle2cc/moodle2.rb +9 -0
- data/lib/moodle2cc/moodle2/extractor.rb +144 -0
- data/lib/moodle2cc/moodle2/models.rb +17 -0
- data/lib/moodle2cc/moodle2/models/assignment.rb +10 -0
- data/lib/moodle2cc/moodle2/models/book.rb +9 -0
- data/lib/moodle2cc/moodle2/models/book_chapter.rb +5 -0
- data/lib/moodle2cc/moodle2/models/course.rb +29 -0
- data/lib/moodle2cc/moodle2/models/external_url.rb +7 -0
- data/lib/moodle2cc/moodle2/models/folder.rb +9 -0
- data/lib/moodle2cc/moodle2/models/forum.rb +10 -0
- data/lib/moodle2cc/moodle2/models/glossary.rb +13 -0
- data/lib/moodle2cc/moodle2/models/glossary_entry.rb +13 -0
- data/lib/moodle2cc/moodle2/models/label.rb +6 -0
- data/lib/moodle2cc/moodle2/models/moodle2_file.rb +13 -0
- data/lib/moodle2cc/moodle2/models/page.rb +9 -0
- data/lib/moodle2cc/moodle2/models/quizzes.rb +13 -0
- data/lib/moodle2cc/moodle2/models/quizzes/answer.rb +5 -0
- data/lib/moodle2cc/moodle2/models/quizzes/calculated_question.rb +11 -0
- data/lib/moodle2cc/moodle2/models/quizzes/match_question.rb +11 -0
- data/lib/moodle2cc/moodle2/models/quizzes/multianswer_question.rb +23 -0
- data/lib/moodle2cc/moodle2/models/quizzes/numerical_question.rb +11 -0
- data/lib/moodle2cc/moodle2/models/quizzes/question.rb +33 -0
- data/lib/moodle2cc/moodle2/models/quizzes/question_category.rb +18 -0
- data/lib/moodle2cc/moodle2/models/quizzes/quiz.rb +20 -0
- data/lib/moodle2cc/moodle2/models/quizzes/random_sa_question.rb +6 -0
- data/lib/moodle2cc/moodle2/models/quizzes/true_false_question.rb +6 -0
- data/lib/moodle2cc/moodle2/models/resource.rb +11 -0
- data/lib/moodle2cc/moodle2/models/section.rb +19 -0
- data/lib/moodle2cc/moodle2/parsers.rb +19 -0
- data/lib/moodle2cc/moodle2/parsers/answer_parser.rb +17 -0
- data/lib/moodle2cc/moodle2/parsers/assignment_parser.rb +61 -0
- data/lib/moodle2cc/moodle2/parsers/book_parser.rb +52 -0
- data/lib/moodle2cc/moodle2/parsers/course_parser.rb +28 -0
- data/lib/moodle2cc/moodle2/parsers/external_url_parser.rb +40 -0
- data/lib/moodle2cc/moodle2/parsers/file_parser.rb +47 -0
- data/lib/moodle2cc/moodle2/parsers/folder_parser.rb +54 -0
- data/lib/moodle2cc/moodle2/parsers/forum_parser.rb +53 -0
- data/lib/moodle2cc/moodle2/parsers/glossary_parser.rb +78 -0
- data/lib/moodle2cc/moodle2/parsers/label_parser.rb +36 -0
- data/lib/moodle2cc/moodle2/parsers/page_parser.rb +45 -0
- data/lib/moodle2cc/moodle2/parsers/parser_helper.rb +37 -0
- data/lib/moodle2cc/moodle2/parsers/question_category_parser.rb +47 -0
- data/lib/moodle2cc/moodle2/parsers/question_parsers.rb +13 -0
- data/lib/moodle2cc/moodle2/parsers/question_parsers/calculated_parser.rb +43 -0
- data/lib/moodle2cc/moodle2/parsers/question_parsers/match_parser.rb +24 -0
- data/lib/moodle2cc/moodle2/parsers/question_parsers/multianswer_parser.rb +21 -0
- data/lib/moodle2cc/moodle2/parsers/question_parsers/multichoice_parser.rb +16 -0
- data/lib/moodle2cc/moodle2/parsers/question_parsers/numerical_parser.rb +24 -0
- data/lib/moodle2cc/moodle2/parsers/question_parsers/question_parser.rb +51 -0
- data/lib/moodle2cc/moodle2/parsers/question_parsers/random_sa_parser.rb +17 -0
- data/lib/moodle2cc/moodle2/parsers/question_parsers/short_answer_parser.rb +16 -0
- data/lib/moodle2cc/moodle2/parsers/question_parsers/true_false_parser.rb +20 -0
- data/lib/moodle2cc/moodle2/parsers/quiz_parser.rb +87 -0
- data/lib/moodle2cc/moodle2/parsers/resource_parser.rb +54 -0
- data/lib/moodle2cc/moodle2/parsers/section_parser.rb +48 -0
- data/lib/moodle2cc/moodle2converter/assessment_converter.rb +31 -0
- data/lib/moodle2cc/moodle2converter/assignment_converter.rb +23 -0
- data/lib/moodle2cc/moodle2converter/book_converter.rb +97 -0
- data/lib/moodle2cc/moodle2converter/converter_helper.rb +68 -0
- data/lib/moodle2cc/moodle2converter/course_converter.rb +18 -0
- data/lib/moodle2cc/moodle2converter/discussion_converter.rb +18 -0
- data/lib/moodle2cc/moodle2converter/file_converter.rb +14 -0
- data/lib/moodle2cc/moodle2converter/folder_converter.rb +50 -0
- data/lib/moodle2cc/moodle2converter/glossary_converter.rb +36 -0
- data/lib/moodle2cc/moodle2converter/html_converter.rb +96 -0
- data/lib/moodle2cc/moodle2converter/migrator.rb +111 -0
- data/lib/moodle2cc/moodle2converter/page_converter.rb +16 -0
- data/lib/moodle2cc/moodle2converter/question_bank_converter.rb +31 -0
- data/lib/moodle2cc/moodle2converter/question_converters.rb +11 -0
- data/lib/moodle2cc/moodle2converter/question_converters/calculated_converter.rb +17 -0
- data/lib/moodle2cc/moodle2converter/question_converters/matching_converter.rb +22 -0
- data/lib/moodle2cc/moodle2converter/question_converters/multiple_blanks_converter.rb +26 -0
- data/lib/moodle2cc/moodle2converter/question_converters/numerical_converter.rb +14 -0
- data/lib/moodle2cc/moodle2converter/question_converters/question_converter.rb +57 -0
- data/lib/moodle2cc/moodle2converter/question_converters/random_sa_converter.rb +18 -0
- data/lib/moodle2cc/moodle2converter/question_converters/true_false_converter.rb +20 -0
- data/lib/moodle2cc/moodle2converter/section_converter.rb +75 -0
- data/lib/moodle2cc/version.rb +1 -1
- data/moodle2cc.gemspec +6 -1
- data/spec/moodle2cc/canvas_cc/assessment_writer_spec.rb +95 -0
- data/spec/moodle2cc/canvas_cc/assignment_writer_spec.rb +72 -0
- data/spec/moodle2cc/canvas_cc/calculated_question_writer_spec.rb +81 -0
- data/spec/moodle2cc/canvas_cc/canvas_export_writer_spec.rb +26 -0
- data/spec/moodle2cc/canvas_cc/cartridge_creator_spec.rb +50 -0
- data/spec/moodle2cc/canvas_cc/course_setting_writer_spec.rb +47 -0
- data/spec/moodle2cc/canvas_cc/discussion_writer_spec.rb +38 -0
- data/spec/moodle2cc/canvas_cc/essay_question_writer_spec.rb +31 -0
- data/spec/moodle2cc/canvas_cc/file_meta_writer_spec.rb +57 -0
- data/spec/moodle2cc/canvas_cc/ims_manifest_generator_spec.rb +141 -0
- data/spec/moodle2cc/canvas_cc/matching_question_writer_spec.rb +51 -0
- data/spec/moodle2cc/canvas_cc/models/assessment_spec.rb +78 -0
- data/spec/moodle2cc/canvas_cc/models/assignment_spec.rb +45 -0
- data/spec/moodle2cc/canvas_cc/models/canvas_file_spec.rb +23 -0
- data/spec/moodle2cc/canvas_cc/models/canvas_module_spec.rb +16 -0
- data/spec/moodle2cc/canvas_cc/models/course_spec.rb +43 -0
- data/spec/moodle2cc/canvas_cc/models/discussion_spec.rb +47 -0
- data/spec/moodle2cc/canvas_cc/models/discussion_topic_spec.rb +7 -0
- data/spec/moodle2cc/canvas_cc/models/module_item_spec.rb +15 -0
- data/spec/moodle2cc/canvas_cc/models/page_spec.rb +28 -0
- data/spec/moodle2cc/canvas_cc/models/question_spec.rb +8 -0
- data/spec/moodle2cc/canvas_cc/models/resource_spec.rb +17 -0
- data/spec/moodle2cc/canvas_cc/models/web_content_spec.rb +7 -0
- data/spec/moodle2cc/canvas_cc/models/web_link_spec.rb +9 -0
- data/spec/moodle2cc/canvas_cc/module_meta_writer_spec.rb +118 -0
- data/spec/moodle2cc/canvas_cc/multiple_blanks_question_writer_spec.rb +77 -0
- data/spec/moodle2cc/canvas_cc/multiple_choice_question_writer_spec.rb +69 -0
- data/spec/moodle2cc/canvas_cc/numerical_question_writer_spec.rb +69 -0
- data/spec/moodle2cc/canvas_cc/page_writer_spec.rb +29 -0
- data/spec/moodle2cc/canvas_cc/question_bank_writer_spec.rb +43 -0
- data/spec/moodle2cc/canvas_cc/question_writer_spec.rb +129 -0
- data/spec/moodle2cc/canvas_cc/short_answer_question_writer_spec.rb +50 -0
- data/spec/moodle2cc/canvas_cc/text_only_question_writer_spec.rb +23 -0
- data/spec/moodle2cc/canvas_cc/true_false_question_writer_spec.rb +62 -0
- data/spec/moodle2cc/moodle2/extractor_spec.rb +175 -0
- data/spec/moodle2cc/moodle2/models/assignment_spec.rb +36 -0
- data/spec/moodle2cc/moodle2/models/book_chapter_spec.rb +11 -0
- data/spec/moodle2cc/moodle2/models/book_spec.rb +13 -0
- data/spec/moodle2cc/moodle2/models/course_spec.rb +67 -0
- data/spec/moodle2cc/moodle2/models/external_url_spec.rb +18 -0
- data/spec/moodle2cc/moodle2/models/folder_spec.rb +16 -0
- data/spec/moodle2cc/moodle2/models/forum_spec.rb +30 -0
- data/spec/moodle2cc/moodle2/models/glossary_entry_spec.rb +25 -0
- data/spec/moodle2cc/moodle2/models/glossary_spec.rb +35 -0
- data/spec/moodle2cc/moodle2/models/label_spec.rb +13 -0
- data/spec/moodle2cc/moodle2/models/moodle2_file_spec.rb +32 -0
- data/spec/moodle2cc/moodle2/models/page_spec.rb +23 -0
- data/spec/moodle2cc/moodle2/models/quizzes/answer_spec.rb +14 -0
- data/spec/moodle2cc/moodle2/models/quizzes/calculated_question_spec.rb +14 -0
- data/spec/moodle2cc/moodle2/models/quizzes/multianswer_question_spec.rb +30 -0
- data/spec/moodle2cc/moodle2/models/quizzes/numerical_question_spec.rb +12 -0
- data/spec/moodle2cc/moodle2/models/quizzes/question_category_spec.rb +29 -0
- data/spec/moodle2cc/moodle2/models/quizzes/question_spec.rb +35 -0
- data/spec/moodle2cc/moodle2/models/quizzes/quiz_spec.rb +7 -0
- data/spec/moodle2cc/moodle2/models/quizzes/random_sa_question_spec.rb +12 -0
- data/spec/moodle2cc/moodle2/models/quizzes/true_false_question_spec.rb +16 -0
- data/spec/moodle2cc/moodle2/models/resource_spec.rb +22 -0
- data/spec/moodle2cc/moodle2/models/section_spec.rb +57 -0
- data/spec/moodle2cc/moodle2/parsers/answer_parser_spec.rb +18 -0
- data/spec/moodle2cc/moodle2/parsers/assignment_parser_spec.rb +42 -0
- data/spec/moodle2cc/moodle2/parsers/book_parser_spec.rb +35 -0
- data/spec/moodle2cc/moodle2/parsers/course_parser_spec.rb +18 -0
- data/spec/moodle2cc/moodle2/parsers/external_url_parser_spec.rb +26 -0
- data/spec/moodle2cc/moodle2/parsers/file_parser_spec.rb +35 -0
- data/spec/moodle2cc/moodle2/parsers/folder_parser_spec.rb +24 -0
- data/spec/moodle2cc/moodle2/parsers/forum_parser_spec.rb +38 -0
- data/spec/moodle2cc/moodle2/parsers/glossary_parser_spec.rb +60 -0
- data/spec/moodle2cc/moodle2/parsers/label_parser_spec.rb +21 -0
- data/spec/moodle2cc/moodle2/parsers/page_parser_spec.rb +25 -0
- data/spec/moodle2cc/moodle2/parsers/parser_helper_spec.rb +94 -0
- data/spec/moodle2cc/moodle2/parsers/question_category_parser_spec.rb +27 -0
- data/spec/moodle2cc/moodle2/parsers/question_parsers/calculated_parser_spec.rb +83 -0
- data/spec/moodle2cc/moodle2/parsers/question_parsers/match_parser_spec.rb +31 -0
- data/spec/moodle2cc/moodle2/parsers/question_parsers/multianswer_parser_spec.rb +16 -0
- data/spec/moodle2cc/moodle2/parsers/question_parsers/multichoice_parser_spec.rb +16 -0
- data/spec/moodle2cc/moodle2/parsers/question_parsers/numerical_parser_spec.rb +23 -0
- data/spec/moodle2cc/moodle2/parsers/question_parsers/question_parser_spec.rb +62 -0
- data/spec/moodle2cc/moodle2/parsers/question_parsers/random_sa_parser_spec.rb +18 -0
- data/spec/moodle2cc/moodle2/parsers/question_parsers/short_answer_parser_spec.rb +16 -0
- data/spec/moodle2cc/moodle2/parsers/question_parsers/true_false_parser_spec.rb +22 -0
- data/spec/moodle2cc/moodle2/parsers/quiz_parser_spec.rb +68 -0
- data/spec/moodle2cc/moodle2/parsers/resource_parser_spec.rb +29 -0
- data/spec/moodle2cc/moodle2/parsers/section_parser_spec.rb +27 -0
- data/spec/moodle2cc/moodle2converter/assessment_converter_spec.rb +49 -0
- data/spec/moodle2cc/moodle2converter/assignment_converter_spec.rb +34 -0
- data/spec/moodle2cc/moodle2converter/book_converter_spec.rb +132 -0
- data/spec/moodle2cc/moodle2converter/converter_helper_spec.rb +149 -0
- data/spec/moodle2cc/moodle2converter/course_converter_spec.rb +24 -0
- data/spec/moodle2cc/moodle2converter/discussion_converter_spec.rb +23 -0
- data/spec/moodle2cc/moodle2converter/file_converter_spec.rb +20 -0
- data/spec/moodle2cc/moodle2converter/folder_converter_spec.rb +42 -0
- data/spec/moodle2cc/moodle2converter/glossary_converter_spec.rb +36 -0
- data/spec/moodle2cc/moodle2converter/html_converter_spec.rb +186 -0
- data/spec/moodle2cc/moodle2converter/migrator_spec.rb +173 -0
- data/spec/moodle2cc/moodle2converter/page_converter_spec.rb +28 -0
- data/spec/moodle2cc/moodle2converter/question_bank_converter_spec.rb +44 -0
- data/spec/moodle2cc/moodle2converter/question_converters/calculated_converter_spec.rb +30 -0
- data/spec/moodle2cc/moodle2converter/question_converters/matching_converter_spec.rb +25 -0
- data/spec/moodle2cc/moodle2converter/question_converters/multiple_blanks_converter_spec.rb +37 -0
- data/spec/moodle2cc/moodle2converter/question_converters/numerical_converter_spec.rb +19 -0
- data/spec/moodle2cc/moodle2converter/question_converters/question_converter_spec.rb +82 -0
- data/spec/moodle2cc/moodle2converter/question_converters/random_sa_converter_spec.rb +20 -0
- data/spec/moodle2cc/moodle2converter/question_converters/true_false_converter_spec.rb +26 -0
- data/spec/moodle2cc/moodle2converter/section_converter_spec.rb +187 -0
- data/spec/spec_helper.rb +11 -0
- data/spec/support/shared_examples_for_models.rb +26 -0
- data/test/acceptance/migrator_test.rb +2 -1
- data/test/fixtures/common_cartridge/ims_manifest_simple.xml +45 -0
- data/test/fixtures/common_cartridge/schema/cccv1p0.xsd +563 -0
- data/test/fixtures/common_cartridge/schema/ccv1p1_imsccauth_v1p1.xsd +203 -0
- data/test/fixtures/common_cartridge/schema/ccv1p1_imscp_v1p2_v1p0.xsd +827 -0
- data/test/fixtures/common_cartridge/schema/ccv1p1_lommanifest_v1p0.xsd +822 -0
- data/test/fixtures/common_cartridge/schema/ccv1p1_lomresource_v1p0.xsd +273 -0
- data/test/fixtures/common_cartridge/schema/xml.xsd +286 -0
- data/test/fixtures/moodle2/SC.mbz +0 -0
- data/test/fixtures/moodle2/backup/activities/assign_12/assign.xml +78 -0
- data/test/fixtures/moodle2/backup/activities/assign_12/calendar.xml +21 -0
- data/test/fixtures/moodle2/backup/activities/assign_12/comments.xml +3 -0
- data/test/fixtures/moodle2/backup/activities/assign_12/completion.xml +3 -0
- data/test/fixtures/moodle2/backup/activities/assign_12/filters.xml +7 -0
- data/test/fixtures/moodle2/backup/activities/assign_12/grades.xml +38 -0
- data/test/fixtures/moodle2/backup/activities/assign_12/grading.xml +9 -0
- data/test/fixtures/moodle2/backup/activities/assign_12/inforef.xml +13 -0
- data/test/fixtures/moodle2/backup/activities/assign_12/module.xml +25 -0
- data/test/fixtures/moodle2/backup/activities/assign_12/roles.xml +7 -0
- data/test/fixtures/moodle2/backup/activities/assign_4/assign.xml +78 -0
- data/test/fixtures/moodle2/backup/activities/assign_4/calendar.xml +21 -0
- data/test/fixtures/moodle2/backup/activities/assign_4/comments.xml +3 -0
- data/test/fixtures/moodle2/backup/activities/assign_4/completion.xml +3 -0
- data/test/fixtures/moodle2/backup/activities/assign_4/filters.xml +7 -0
- data/test/fixtures/moodle2/backup/activities/assign_4/grades.xml +38 -0
- data/test/fixtures/moodle2/backup/activities/assign_4/grading.xml +9 -0
- data/test/fixtures/moodle2/backup/activities/assign_4/inforef.xml +13 -0
- data/test/fixtures/moodle2/backup/activities/assign_4/module.xml +25 -0
- data/test/fixtures/moodle2/backup/activities/assign_4/roles.xml +7 -0
- data/test/fixtures/moodle2/backup/activities/book_6/book.xml +44 -0
- data/test/fixtures/moodle2/backup/activities/book_6/calendar.xml +3 -0
- data/test/fixtures/moodle2/backup/activities/book_6/comments.xml +3 -0
- data/test/fixtures/moodle2/backup/activities/book_6/completion.xml +3 -0
- data/test/fixtures/moodle2/backup/activities/book_6/filters.xml +7 -0
- data/test/fixtures/moodle2/backup/activities/book_6/grades.xml +7 -0
- data/test/fixtures/moodle2/backup/activities/book_6/inforef.xml +3 -0
- data/test/fixtures/moodle2/backup/activities/book_6/module.xml +25 -0
- data/test/fixtures/moodle2/backup/activities/book_6/roles.xml +7 -0
- data/test/fixtures/moodle2/backup/activities/folder_7/calendar.xml +3 -0
- data/test/fixtures/moodle2/backup/activities/folder_7/comments.xml +3 -0
- data/test/fixtures/moodle2/backup/activities/folder_7/completion.xml +3 -0
- data/test/fixtures/moodle2/backup/activities/folder_7/filters.xml +7 -0
- data/test/fixtures/moodle2/backup/activities/folder_7/folder.xml +10 -0
- data/test/fixtures/moodle2/backup/activities/folder_7/grades.xml +7 -0
- data/test/fixtures/moodle2/backup/activities/folder_7/inforef.xml +20 -0
- data/test/fixtures/moodle2/backup/activities/folder_7/module.xml +25 -0
- data/test/fixtures/moodle2/backup/activities/folder_7/roles.xml +7 -0
- data/test/fixtures/moodle2/backup/activities/forum_1/calendar.xml +3 -0
- data/test/fixtures/moodle2/backup/activities/forum_1/comments.xml +3 -0
- data/test/fixtures/moodle2/backup/activities/forum_1/completion.xml +3 -0
- data/test/fixtures/moodle2/backup/activities/forum_1/filters.xml +7 -0
- data/test/fixtures/moodle2/backup/activities/forum_1/forum.xml +34 -0
- data/test/fixtures/moodle2/backup/activities/forum_1/grades.xml +7 -0
- data/test/fixtures/moodle2/backup/activities/forum_1/inforef.xml +3 -0
- data/test/fixtures/moodle2/backup/activities/forum_1/module.xml +25 -0
- data/test/fixtures/moodle2/backup/activities/forum_1/roles.xml +7 -0
- data/test/fixtures/moodle2/backup/activities/forum_13/calendar.xml +3 -0
- data/test/fixtures/moodle2/backup/activities/forum_13/comments.xml +3 -0
- data/test/fixtures/moodle2/backup/activities/forum_13/completion.xml +3 -0
- data/test/fixtures/moodle2/backup/activities/forum_13/filters.xml +7 -0
- data/test/fixtures/moodle2/backup/activities/forum_13/forum.xml +34 -0
- data/test/fixtures/moodle2/backup/activities/forum_13/grades.xml +7 -0
- data/test/fixtures/moodle2/backup/activities/forum_13/inforef.xml +3 -0
- data/test/fixtures/moodle2/backup/activities/forum_13/module.xml +25 -0
- data/test/fixtures/moodle2/backup/activities/forum_13/roles.xml +7 -0
- data/test/fixtures/moodle2/backup/activities/glossary_8/calendar.xml +3 -0
- data/test/fixtures/moodle2/backup/activities/glossary_8/comments.xml +3 -0
- data/test/fixtures/moodle2/backup/activities/glossary_8/completion.xml +3 -0
- data/test/fixtures/moodle2/backup/activities/glossary_8/filters.xml +7 -0
- data/test/fixtures/moodle2/backup/activities/glossary_8/glossary.xml +115 -0
- data/test/fixtures/moodle2/backup/activities/glossary_8/grades.xml +7 -0
- data/test/fixtures/moodle2/backup/activities/glossary_8/inforef.xml +22 -0
- data/test/fixtures/moodle2/backup/activities/glossary_8/module.xml +25 -0
- data/test/fixtures/moodle2/backup/activities/glossary_8/roles.xml +7 -0
- data/test/fixtures/moodle2/backup/activities/label_11/calendar.xml +3 -0
- data/test/fixtures/moodle2/backup/activities/label_11/comments.xml +3 -0
- data/test/fixtures/moodle2/backup/activities/label_11/completion.xml +3 -0
- data/test/fixtures/moodle2/backup/activities/label_11/filters.xml +7 -0
- data/test/fixtures/moodle2/backup/activities/label_11/grades.xml +7 -0
- data/test/fixtures/moodle2/backup/activities/label_11/inforef.xml +3 -0
- data/test/fixtures/moodle2/backup/activities/label_11/label.xml +9 -0
- data/test/fixtures/moodle2/backup/activities/label_11/module.xml +25 -0
- data/test/fixtures/moodle2/backup/activities/label_11/roles.xml +7 -0
- data/test/fixtures/moodle2/backup/activities/page_10/calendar.xml +3 -0
- data/test/fixtures/moodle2/backup/activities/page_10/comments.xml +3 -0
- data/test/fixtures/moodle2/backup/activities/page_10/completion.xml +3 -0
- data/test/fixtures/moodle2/backup/activities/page_10/filters.xml +7 -0
- data/test/fixtures/moodle2/backup/activities/page_10/grades.xml +7 -0
- data/test/fixtures/moodle2/backup/activities/page_10/inforef.xml +3 -0
- data/test/fixtures/moodle2/backup/activities/page_10/module.xml +25 -0
- data/test/fixtures/moodle2/backup/activities/page_10/page.xml +16 -0
- data/test/fixtures/moodle2/backup/activities/page_10/roles.xml +7 -0
- data/test/fixtures/moodle2/backup/activities/page_2/calendar.xml +3 -0
- data/test/fixtures/moodle2/backup/activities/page_2/comments.xml +3 -0
- data/test/fixtures/moodle2/backup/activities/page_2/completion.xml +3 -0
- data/test/fixtures/moodle2/backup/activities/page_2/filters.xml +7 -0
- data/test/fixtures/moodle2/backup/activities/page_2/grades.xml +7 -0
- data/test/fixtures/moodle2/backup/activities/page_2/inforef.xml +14 -0
- data/test/fixtures/moodle2/backup/activities/page_2/module.xml +25 -0
- data/test/fixtures/moodle2/backup/activities/page_2/page.xml +21 -0
- data/test/fixtures/moodle2/backup/activities/page_2/roles.xml +7 -0
- data/test/fixtures/moodle2/backup/activities/questionnaire_9/calendar.xml +3 -0
- data/test/fixtures/moodle2/backup/activities/questionnaire_9/comments.xml +3 -0
- data/test/fixtures/moodle2/backup/activities/questionnaire_9/completion.xml +3 -0
- data/test/fixtures/moodle2/backup/activities/questionnaire_9/filters.xml +7 -0
- data/test/fixtures/moodle2/backup/activities/questionnaire_9/grades.xml +7 -0
- data/test/fixtures/moodle2/backup/activities/questionnaire_9/inforef.xml +3 -0
- data/test/fixtures/moodle2/backup/activities/questionnaire_9/module.xml +25 -0
- data/test/fixtures/moodle2/backup/activities/questionnaire_9/questionnaire.xml +245 -0
- data/test/fixtures/moodle2/backup/activities/questionnaire_9/roles.xml +7 -0
- data/test/fixtures/moodle2/backup/activities/quiz_5/calendar.xml +21 -0
- data/test/fixtures/moodle2/backup/activities/quiz_5/comments.xml +3 -0
- data/test/fixtures/moodle2/backup/activities/quiz_5/completion.xml +3 -0
- data/test/fixtures/moodle2/backup/activities/quiz_5/filters.xml +7 -0
- data/test/fixtures/moodle2/backup/activities/quiz_5/grades.xml +38 -0
- data/test/fixtures/moodle2/backup/activities/quiz_5/inforef.xml +21 -0
- data/test/fixtures/moodle2/backup/activities/quiz_5/module.xml +25 -0
- data/test/fixtures/moodle2/backup/activities/quiz_5/quiz.xml +108 -0
- data/test/fixtures/moodle2/backup/activities/quiz_5/roles.xml +7 -0
- data/test/fixtures/moodle2/backup/activities/resource_14/calendar.xml +3 -0
- data/test/fixtures/moodle2/backup/activities/resource_14/comments.xml +3 -0
- data/test/fixtures/moodle2/backup/activities/resource_14/completion.xml +3 -0
- data/test/fixtures/moodle2/backup/activities/resource_14/filters.xml +7 -0
- data/test/fixtures/moodle2/backup/activities/resource_14/grades.xml +7 -0
- data/test/fixtures/moodle2/backup/activities/resource_14/inforef.xml +11 -0
- data/test/fixtures/moodle2/backup/activities/resource_14/module.xml +25 -0
- data/test/fixtures/moodle2/backup/activities/resource_14/resource.xml +16 -0
- data/test/fixtures/moodle2/backup/activities/resource_14/roles.xml +7 -0
- data/test/fixtures/moodle2/backup/activities/resource_3/calendar.xml +3 -0
- data/test/fixtures/moodle2/backup/activities/resource_3/comments.xml +3 -0
- data/test/fixtures/moodle2/backup/activities/resource_3/completion.xml +3 -0
- data/test/fixtures/moodle2/backup/activities/resource_3/filters.xml +7 -0
- data/test/fixtures/moodle2/backup/activities/resource_3/grades.xml +7 -0
- data/test/fixtures/moodle2/backup/activities/resource_3/inforef.xml +11 -0
- data/test/fixtures/moodle2/backup/activities/resource_3/module.xml +25 -0
- data/test/fixtures/moodle2/backup/activities/resource_3/resource.xml +16 -0
- data/test/fixtures/moodle2/backup/activities/resource_3/roles.xml +7 -0
- data/test/fixtures/moodle2/backup/activities/url_15/calendar.xml +3 -0
- data/test/fixtures/moodle2/backup/activities/url_15/comments.xml +3 -0
- data/test/fixtures/moodle2/backup/activities/url_15/completion.xml +3 -0
- data/test/fixtures/moodle2/backup/activities/url_15/filters.xml +7 -0
- data/test/fixtures/moodle2/backup/activities/url_15/grades.xml +7 -0
- data/test/fixtures/moodle2/backup/activities/url_15/inforef.xml +3 -0
- data/test/fixtures/moodle2/backup/activities/url_15/module.xml +25 -0
- data/test/fixtures/moodle2/backup/activities/url_15/roles.xml +7 -0
- data/test/fixtures/moodle2/backup/activities/url_15/url.xml +13 -0
- data/test/fixtures/moodle2/backup/completion.xml +3 -0
- data/test/fixtures/moodle2/backup/course/blocks/calendar_upcoming_12/block.xml +13 -0
- data/test/fixtures/moodle2/backup/course/blocks/calendar_upcoming_12/comments.xml +3 -0
- data/test/fixtures/moodle2/backup/course/blocks/calendar_upcoming_12/inforef.xml +3 -0
- data/test/fixtures/moodle2/backup/course/blocks/calendar_upcoming_12/roles.xml +7 -0
- data/test/fixtures/moodle2/backup/course/blocks/news_items_11/block.xml +13 -0
- data/test/fixtures/moodle2/backup/course/blocks/news_items_11/comments.xml +3 -0
- data/test/fixtures/moodle2/backup/course/blocks/news_items_11/inforef.xml +3 -0
- data/test/fixtures/moodle2/backup/course/blocks/news_items_11/roles.xml +7 -0
- data/test/fixtures/moodle2/backup/course/blocks/recent_activity_13/block.xml +13 -0
- data/test/fixtures/moodle2/backup/course/blocks/recent_activity_13/comments.xml +3 -0
- data/test/fixtures/moodle2/backup/course/blocks/recent_activity_13/inforef.xml +3 -0
- data/test/fixtures/moodle2/backup/course/blocks/recent_activity_13/roles.xml +7 -0
- data/test/fixtures/moodle2/backup/course/blocks/search_forums_10/block.xml +13 -0
- data/test/fixtures/moodle2/backup/course/blocks/search_forums_10/comments.xml +3 -0
- data/test/fixtures/moodle2/backup/course/blocks/search_forums_10/inforef.xml +3 -0
- data/test/fixtures/moodle2/backup/course/blocks/search_forums_10/roles.xml +7 -0
- data/test/fixtures/moodle2/backup/course/calendar.xml +3 -0
- data/test/fixtures/moodle2/backup/course/comments.xml +3 -0
- data/test/fixtures/moodle2/backup/course/course.xml +37 -0
- data/test/fixtures/moodle2/backup/course/enrolments.xml +110 -0
- data/test/fixtures/moodle2/backup/course/filters.xml +7 -0
- data/test/fixtures/moodle2/backup/course/inforef.xml +13 -0
- data/test/fixtures/moodle2/backup/course/roles.xml +7 -0
- data/test/fixtures/moodle2/backup/files.xml +531 -0
- data/test/fixtures/moodle2/backup/files/50/50bf82ee23d193378b172d6656c08eebb094f006 +0 -0
- data/test/fixtures/moodle2/backup/files/51/516ec993971b6e2122b97d15ecc0e08c3eb03828 +0 -0
- data/test/fixtures/moodle2/backup/files/64/64643b3bd4274c90e293583030e549e61f4d24fb +0 -0
- data/test/fixtures/moodle2/backup/files/67/67859b142e5ba020a84c3166f09d59ef992379a4 +0 -0
- data/test/fixtures/moodle2/backup/files/7a/7a647918739d3017a4e272ad97b147b667c00fca +0 -0
- data/test/fixtures/moodle2/backup/files/a0/a0f324310c8d8dd9c79458986c4322f5a060a1d9 +0 -0
- data/test/fixtures/moodle2/backup/files/a2/a258f0bb582d111a994b35fdc84a71ed1d487310 +0 -0
- data/test/fixtures/moodle2/backup/gradebook.xml +57 -0
- data/test/fixtures/moodle2/backup/groups.xml +5 -0
- data/test/fixtures/moodle2/backup/moodle_backup.xml +530 -0
- data/test/fixtures/moodle2/backup/outcomes.xml +3 -0
- data/test/fixtures/moodle2/backup/questions.xml +1187 -0
- data/test/fixtures/moodle2/backup/roles.xml +11 -0
- data/test/fixtures/moodle2/backup/scales.xml +3 -0
- data/test/fixtures/moodle2/backup/sections/section_1/inforef.xml +3 -0
- data/test/fixtures/moodle2/backup/sections/section_1/section.xml +13 -0
- data/test/fixtures/moodle2/backup/sections/section_10/inforef.xml +3 -0
- data/test/fixtures/moodle2/backup/sections/section_10/section.xml +13 -0
- data/test/fixtures/moodle2/backup/sections/section_2/inforef.xml +3 -0
- data/test/fixtures/moodle2/backup/sections/section_2/section.xml +13 -0
- data/test/fixtures/moodle2/backup/sections/section_3/inforef.xml +3 -0
- data/test/fixtures/moodle2/backup/sections/section_3/section.xml +13 -0
- data/test/fixtures/moodle2/backup/sections/section_4/inforef.xml +3 -0
- data/test/fixtures/moodle2/backup/sections/section_4/section.xml +13 -0
- data/test/fixtures/moodle2/backup/sections/section_5/inforef.xml +3 -0
- data/test/fixtures/moodle2/backup/sections/section_5/section.xml +13 -0
- data/test/fixtures/moodle2/backup/sections/section_6/inforef.xml +3 -0
- data/test/fixtures/moodle2/backup/sections/section_6/section.xml +13 -0
- data/test/fixtures/moodle2/backup/sections/section_7/inforef.xml +3 -0
- data/test/fixtures/moodle2/backup/sections/section_7/section.xml +13 -0
- data/test/fixtures/moodle2/backup/users.xml +104 -0
- data/test/fixtures/moodle2/moodle2_shell.mbz +0 -0
- data/test/test_helper.rb +71 -0
- data/{lib/test → test}/test_question_helper.rb +0 -0
- data/{lib/test → test}/test_wiki_helper.rb +0 -0
- data/test/unit/canvas/assessment_test.rb +1 -1
- data/test/unit/canvas/assignment_test.rb +1 -1
- data/test/unit/canvas/converter_test.rb +1 -1
- data/test/unit/canvas/course_test.rb +1 -1
- data/test/unit/canvas/discussion_topic_test.rb +1 -1
- data/test/unit/canvas/label_test.rb +1 -1
- data/test/unit/canvas/question_bank_test.rb +1 -1
- data/test/unit/canvas/question_group_test.rb +1 -1
- data/test/unit/canvas/question_test.rb +2 -2
- data/test/unit/canvas/web_content_test.rb +1 -1
- data/test/unit/canvas/web_link_test.rb +1 -1
- data/test/unit/canvas/wiki_test.rb +2 -2
- data/test/unit/cc/assessment_test.rb +1 -1
- data/test/unit/cc/assignment_test.rb +1 -1
- data/test/unit/cc/cc_helper_test.rb +1 -1
- data/test/unit/cc/converter_test.rb +1 -1
- data/test/unit/cc/course_test.rb +1 -1
- data/test/unit/cc/discussion_topic_test.rb +1 -1
- data/test/unit/cc/label_test.rb +1 -1
- data/test/unit/cc/question_test.rb +2 -2
- data/test/unit/cc/web_content_test.rb +1 -1
- data/test/unit/cc/web_link_test.rb +1 -1
- data/test/unit/cc/wiki_test.rb +2 -2
- data/test/unit/migrator_test.rb +12 -1
- data/test/unit/moodle/backup_test.rb +1 -1
- data/test/unit/moodle/course_test.rb +1 -1
- data/test/unit/moodle/grade_item_test.rb +1 -1
- data/test/unit/moodle/info_test.rb +1 -1
- data/test/unit/moodle/mod_test.rb +1 -1
- data/test/unit/moodle/question_category_test.rb +1 -1
- data/test/unit/moodle/question_test.rb +1 -1
- data/test/unit/moodle/section_test.rb +1 -1
- data/test/unit/resource_factory_test.rb +1 -1
- metadata +814 -58
- data/lib/test/test_helper.rb +0 -44
@@ -0,0 +1,17 @@
|
|
1
|
+
module Moodle2CC::Moodle2
|
2
|
+
class Parsers::QuestionParsers::RandomSAParser < Parsers::QuestionParsers::QuestionParser
|
3
|
+
include Parsers::ParserHelper
|
4
|
+
register_parser_type('randomsamatch')
|
5
|
+
|
6
|
+
def parse_question(node)
|
7
|
+
question = super
|
8
|
+
|
9
|
+
if choose_node = node.at_xpath("plugin_qtype_randomsamatch_question/randomsamatch/choose")
|
10
|
+
question.choose = choose_node.text
|
11
|
+
end
|
12
|
+
|
13
|
+
question
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Moodle2CC::Moodle2
|
2
|
+
class Parsers::QuestionParsers::ShortAnswerParser < Parsers::QuestionParsers::QuestionParser
|
3
|
+
include Parsers::ParserHelper
|
4
|
+
register_parser_type('shortanswer')
|
5
|
+
|
6
|
+
def parse_question(node)
|
7
|
+
question = super
|
8
|
+
|
9
|
+
answer_parser = Parsers::AnswerParser.new
|
10
|
+
question.answers += node.search('answers/answer').map { |n| answer_parser.parse(n) }
|
11
|
+
|
12
|
+
question
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Moodle2CC::Moodle2
|
2
|
+
class Parsers::QuestionParsers::TrueFalseParser < Parsers::QuestionParsers::QuestionParser
|
3
|
+
include Parsers::ParserHelper
|
4
|
+
register_parser_type('truefalse')
|
5
|
+
|
6
|
+
def parse_question(node)
|
7
|
+
question = super
|
8
|
+
q_node = node.at_xpath('plugin_qtype_truefalse_question')
|
9
|
+
question.true_false_id = q_node.at_xpath('truefalse/@id').value
|
10
|
+
question.true_answer = parse_text(q_node, 'truefalse/trueanswer')
|
11
|
+
question.false_answer = parse_text(q_node, 'truefalse/falseanswer')
|
12
|
+
|
13
|
+
answer_parser = Parsers::AnswerParser.new
|
14
|
+
question.answers += node.search('answers/answer').map { |n| answer_parser.parse(n) }
|
15
|
+
|
16
|
+
question
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
module Moodle2CC::Moodle2::Parsers
|
2
|
+
class QuizParser
|
3
|
+
include ParserHelper
|
4
|
+
|
5
|
+
QUIZ_XML = 'quiz.xml'
|
6
|
+
QUIZ_MODULE_NAME = 'quiz'
|
7
|
+
|
8
|
+
def initialize(backup_dir)
|
9
|
+
@backup_dir = backup_dir
|
10
|
+
end
|
11
|
+
|
12
|
+
def parse
|
13
|
+
activity_dirs = activity_directories(@backup_dir, QUIZ_MODULE_NAME)
|
14
|
+
activity_dirs.map { |dir| parse_quiz(dir) }
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def parse_quiz(dir)
|
20
|
+
quiz = Moodle2CC::Moodle2::Models::Quizzes::Quiz.new
|
21
|
+
activity_dir = File.join(@backup_dir, dir)
|
22
|
+
File.open(File.join(activity_dir, QUIZ_XML)) do |f|
|
23
|
+
xml = Nokogiri::XML(f)
|
24
|
+
quiz.id = xml.at_xpath('/activity/quiz/@id').value
|
25
|
+
quiz.module_id = xml.at_xpath('/activity/@moduleid').value
|
26
|
+
quiz.name = parse_text(xml, '/activity/quiz/name')
|
27
|
+
quiz.intro = parse_text(xml, '/activity/quiz/intro')
|
28
|
+
quiz.intro_format = parse_text(xml, '/activity/quiz/introformat')
|
29
|
+
quiz.time_open = parse_text(xml, '/activity/quiz/timeopen')
|
30
|
+
quiz.time_close = parse_text(xml, '/activity/quiz/timeclose')
|
31
|
+
quiz.time_limit = parse_text(xml, '/activity/quiz/timelimit')
|
32
|
+
quiz.overdue_handling = parse_text(xml, '/activity/quiz/overduehandling')
|
33
|
+
quiz.grace_period = parse_text(xml, '/activity/quiz/graceperiod')
|
34
|
+
quiz.preferred_behavior = parse_text(xml, '/activity/quiz/preferredbehaviour')
|
35
|
+
quiz.attempts_number = parse_text(xml, '/activity/quiz/attempts_number')
|
36
|
+
quiz.attempt_on_last = parse_text(xml, '/activity/quiz/attemptonlast')
|
37
|
+
quiz.grade_method = parse_text(xml, '/activity/quiz/grademethod')
|
38
|
+
quiz.decimal_points = parse_text(xml, '/activity/quiz/decimalpoints')
|
39
|
+
quiz.question_decimal_points = parse_text(xml, '/activity/quiz/questiondecimalpoints')
|
40
|
+
quiz.review_attempt = parse_text(xml, '/activity/quiz/reviewattempt')
|
41
|
+
quiz.review_correctness = parse_text(xml, '/activity/quiz/reviewcorrectness')
|
42
|
+
quiz.review_marks = parse_text(xml, '/activity/quiz/reviewmarks')
|
43
|
+
quiz.review_specific_feedback = parse_text(xml, '/activity/quiz/reviewspecificfeedback')
|
44
|
+
quiz.review_general_feedback = parse_text(xml, '/activity/quiz/reviewgeneralfeedback')
|
45
|
+
quiz.review_right_answer = parse_text(xml, '/activity/quiz/reviewrightanswer')
|
46
|
+
quiz.review_overall_feedback = parse_text(xml, '/activity/quiz/reviewoverallfeedback')
|
47
|
+
quiz.questions_per_page = parse_text(xml, '/activity/quiz/questionsperpage')
|
48
|
+
quiz.nav_method = parse_text(xml, '/activity/quiz/navmethod')
|
49
|
+
|
50
|
+
quiz.shuffle_questions = parse_boolean(xml, '/activity/quiz/shufflequestions')
|
51
|
+
quiz.shuffle_answers = parse_boolean(xml, '/activity/quiz/shuffleanswers')
|
52
|
+
|
53
|
+
quiz.sum_grades = parse_text(xml, '/activity/quiz/sumgrades')
|
54
|
+
quiz.grade = parse_text(xml, '/activity/quiz/grade')
|
55
|
+
quiz.time_created = parse_text(xml, '/activity/quiz/timecreated')
|
56
|
+
quiz.time_modified = parse_text(xml, '/activity/quiz/timemodified')
|
57
|
+
quiz.password = parse_text(xml, '/activity/quiz/password')
|
58
|
+
quiz.subnet = parse_text(xml, '/activity/quiz/subnet')
|
59
|
+
quiz.browser_security = parse_text(xml, '/activity/quiz/browsersecurity')
|
60
|
+
quiz.delay1 = parse_text(xml, '/activity/quiz/delay1')
|
61
|
+
quiz.delay2 = parse_text(xml, '/activity/quiz/delay2')
|
62
|
+
quiz.show_user_picture = parse_text(xml, '/activity/quiz/showuserpicture')
|
63
|
+
quiz.show_blocks = parse_text(xml, '/activity/quiz/showblocks')
|
64
|
+
|
65
|
+
xml.search('/activity/quiz/question_instances/question_instance').each do |node|
|
66
|
+
quiz.question_instances << {
|
67
|
+
:question => parse_text(node, 'question'),
|
68
|
+
:grade => parse_text(node, 'grade')
|
69
|
+
}
|
70
|
+
end
|
71
|
+
|
72
|
+
xml.search('/activity/quiz/feedbacks/feedback').each do |node|
|
73
|
+
quiz.feedbacks << {
|
74
|
+
:text => parse_text(node, 'feedbacktext'),
|
75
|
+
:format => parse_text(node, 'feedbacktextformat'),
|
76
|
+
:min_grade => parse_text(node, 'mingrade'),
|
77
|
+
:max_grade => parse_text(node, 'maxgrade')
|
78
|
+
}
|
79
|
+
end
|
80
|
+
end
|
81
|
+
parse_module(activity_dir, quiz)
|
82
|
+
|
83
|
+
quiz
|
84
|
+
end
|
85
|
+
|
86
|
+
end
|
87
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module Moodle2CC::Moodle2::Parsers
|
2
|
+
class ResourceParser
|
3
|
+
include ParserHelper
|
4
|
+
|
5
|
+
RESOURCE_XML = 'resource.xml'
|
6
|
+
RESOURCE_MODULE_NAME = 'resource'
|
7
|
+
|
8
|
+
def initialize(backup_dir)
|
9
|
+
@backup_dir = backup_dir
|
10
|
+
end
|
11
|
+
|
12
|
+
def parse
|
13
|
+
activity_dirs = activity_directories(@backup_dir, RESOURCE_MODULE_NAME)
|
14
|
+
activity_dirs.map { |dir| parse_resource(dir) }
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def parse_resource(dir)
|
20
|
+
resource = Moodle2CC::Moodle2::Models::Resource.new
|
21
|
+
activity_dir = File.join(@backup_dir, dir)
|
22
|
+
File.open(File.join(activity_dir, RESOURCE_XML)) do |f|
|
23
|
+
xml = Nokogiri::XML(f).at_xpath('/activity/resource')
|
24
|
+
resource.id = xml.at_xpath('@id').value
|
25
|
+
resource.module_id = xml.at_xpath('/activity/@moduleid').value
|
26
|
+
resource.name = parse_text(xml, 'name')
|
27
|
+
resource.intro = parse_text(xml, 'intro')
|
28
|
+
resource.intro_format = parse_text(xml, 'introformat')
|
29
|
+
resource.to_be_migrated = parse_text(xml, 'tobemigrated')
|
30
|
+
resource.legacy_files = parse_text(xml, 'legacyfiles')
|
31
|
+
resource.legacy_files_last = parse_text(xml, 'legacyfileslast')
|
32
|
+
resource.display = parse_text(xml, 'display')
|
33
|
+
resource.display_options = parse_text(xml, 'displayoptions')
|
34
|
+
resource.filter_files = parse_text(xml, 'filterfiles')
|
35
|
+
end
|
36
|
+
parse_module(activity_dir, resource)
|
37
|
+
resource.file_ids += parse_files(dir)
|
38
|
+
resource
|
39
|
+
end
|
40
|
+
|
41
|
+
|
42
|
+
def parse_files(dir)
|
43
|
+
files = []
|
44
|
+
File.open(File.join(@backup_dir, dir, FILES_XML)) do |f|
|
45
|
+
xml = Nokogiri::XML(f)
|
46
|
+
xml.search('/inforef/fileref/file').each do |node|
|
47
|
+
files << parse_text(node, 'id')
|
48
|
+
end
|
49
|
+
end
|
50
|
+
files
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module Moodle2CC::Moodle2::Parsers
|
2
|
+
class SectionParser
|
3
|
+
include ParserHelper
|
4
|
+
|
5
|
+
SECTION_XML = 'section.xml'
|
6
|
+
|
7
|
+
def initialize(backup_dir)
|
8
|
+
@backup_dir = backup_dir
|
9
|
+
end
|
10
|
+
|
11
|
+
def parse
|
12
|
+
section_directories.each_with_index.map { |section, i| parse_section(section, i) }
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def parse_section(section_dir, i)
|
18
|
+
section = Moodle2CC::Moodle2::Models::Section.new
|
19
|
+
File.open(File.join(@backup_dir, section_dir, SECTION_XML)) do |f|
|
20
|
+
section_xml = Nokogiri::XML(f)
|
21
|
+
section.position = i
|
22
|
+
section.id = section_xml.%('/section/@id').value
|
23
|
+
section.number = parse_text(section_xml, '/section/number')
|
24
|
+
section.name = parse_text(section_xml, '/section/name')
|
25
|
+
section.summary = parse_text(section_xml, '/section/summary')
|
26
|
+
section.summary_format = parse_text(section_xml, 'section/summaryformat')
|
27
|
+
section.sequence = parse_text(section_xml, 'section/sequence')
|
28
|
+
section.sequence = section.sequence.split(',') if section.sequence
|
29
|
+
section.visible = parse_text(section_xml, 'section/visible') == '1' ? true : false
|
30
|
+
section.available_from = parse_text(section_xml, 'section/availablefrom')
|
31
|
+
section.available_until = parse_text(section_xml, 'section/availableuntil')
|
32
|
+
section.show_availability = parse_text(section_xml, 'section/showavailability')
|
33
|
+
section.grouping_id = parse_text(section_xml, 'section/groupingid')
|
34
|
+
end
|
35
|
+
section
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def section_directories
|
41
|
+
File.open(File.join(@backup_dir, Moodle2CC::Moodle2::Extractor::MOODLE_BACKUP_XML)) do |f|
|
42
|
+
moodle_backup_xml = Nokogiri::XML(f)
|
43
|
+
sections = moodle_backup_xml / '/moodle_backup/information/contents/sections/section'
|
44
|
+
sections.map { |section| section./('directory').text }
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Moodle2CC::Moodle2Converter
|
2
|
+
class AssessmentConverter
|
3
|
+
include ConverterHelper
|
4
|
+
|
5
|
+
def convert(moodle_quiz)
|
6
|
+
canvas_assessment = Moodle2CC::CanvasCC::Models::Assessment.new
|
7
|
+
canvas_assessment.identifier = generate_unique_identifier_for(moodle_quiz.id, ASSESSMENT_SUFFIX)
|
8
|
+
canvas_assessment.title = moodle_quiz.name
|
9
|
+
canvas_assessment.description = moodle_quiz.intro
|
10
|
+
canvas_assessment.workflow_state = workflow_state(moodle_quiz.visible)
|
11
|
+
|
12
|
+
canvas_assessment.lock_at = Time.at(Integer(moodle_quiz.time_close)) if moodle_quiz.time_close
|
13
|
+
canvas_assessment.unlock_at = Time.at(Integer(moodle_quiz.time_open)) if moodle_quiz.time_open
|
14
|
+
|
15
|
+
canvas_assessment.allowed_attempts = Integer(moodle_quiz.attempts_number)
|
16
|
+
canvas_assessment.allowed_attempts = -1 if canvas_assessment.allowed_attempts == 0
|
17
|
+
|
18
|
+
canvas_assessment.scoring_policy = moodle_quiz.grade_method == 4 ? 'keep_latest' : 'keep_highest'
|
19
|
+
canvas_assessment.access_code = moodle_quiz.password
|
20
|
+
canvas_assessment.ip_filter = moodle_quiz.subnet
|
21
|
+
canvas_assessment.shuffle_answers = moodle_quiz.shuffle_answers
|
22
|
+
canvas_assessment.time_limit = Integer(moodle_quiz.time_limit) if moodle_quiz.time_limit
|
23
|
+
canvas_assessment.quiz_type = 'practice_quiz'
|
24
|
+
|
25
|
+
canvas_assessment.question_references = moodle_quiz.question_instances
|
26
|
+
|
27
|
+
canvas_assessment
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Moodle2CC::Moodle2Converter
|
2
|
+
class AssignmentConverter
|
3
|
+
include ConverterHelper
|
4
|
+
|
5
|
+
def convert(moodle_assignment)
|
6
|
+
canvas_assignment = Moodle2CC::CanvasCC::Models::Assignment.new
|
7
|
+
canvas_assignment.identifier = generate_unique_identifier_for(moodle_assignment.id, ASSIGNMENT_SUFFIX)
|
8
|
+
canvas_assignment.title = moodle_assignment.name
|
9
|
+
canvas_assignment.body = moodle_assignment.intro
|
10
|
+
canvas_assignment.due_at = Time.at(Integer(moodle_assignment.due_date)) if moodle_assignment.due_date
|
11
|
+
canvas_assignment.lock_at = Time.at(Integer(moodle_assignment.cut_off_date)) if moodle_assignment.cut_off_date
|
12
|
+
canvas_assignment.unlock_at = Time.at(Integer(moodle_assignment.allow_submissions_from_date)) if moodle_assignment.allow_submissions_from_date
|
13
|
+
canvas_assignment.workflow_state = workflow_state(moodle_assignment.visible)
|
14
|
+
canvas_assignment.points_possible = moodle_assignment.grade
|
15
|
+
canvas_assignment.grading_type = 'points'
|
16
|
+
canvas_assignment.submission_types << 'online_text_entry' if moodle_assignment.online_text_submission == '1'
|
17
|
+
canvas_assignment.submission_types += %w(online_url online_upload) if moodle_assignment.file_submission == '1'
|
18
|
+
|
19
|
+
canvas_assignment
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
module Moodle2CC
|
2
|
+
class Moodle2Converter::BookConverter
|
3
|
+
include Moodle2Converter::ConverterHelper
|
4
|
+
|
5
|
+
def convert(moodle_book)
|
6
|
+
canvas_module = convert_moodle_book(moodle_book)
|
7
|
+
moodle_book.chapters.each do |chapter|
|
8
|
+
canvas_module.module_items << convert_moodle_chapter(moodle_book, chapter)
|
9
|
+
end
|
10
|
+
canvas_module
|
11
|
+
end
|
12
|
+
|
13
|
+
def convert_to_pages(moodle_book)
|
14
|
+
pages = moodle_book.chapters.map do |moodle_chapter|
|
15
|
+
page = create_page(moodle_chapter.title)
|
16
|
+
page.identifier = generate_unique_identifier_for_activity(moodle_chapter)
|
17
|
+
page.body = moodle_chapter.content
|
18
|
+
page.workflow_state = workflow_state(moodle_book.visible)
|
19
|
+
page
|
20
|
+
end
|
21
|
+
|
22
|
+
if moodle_book.intro
|
23
|
+
page = create_page(moodle_book.name)
|
24
|
+
page.identifier = generate_unique_identifier_for_book_intro(moodle_book)
|
25
|
+
page.body = moodle_book.intro
|
26
|
+
pages.unshift(page)
|
27
|
+
end
|
28
|
+
|
29
|
+
pages
|
30
|
+
end
|
31
|
+
|
32
|
+
def convert_to_module_items(moodle_book)
|
33
|
+
module_items = []
|
34
|
+
module_items << create_title(moodle_book)
|
35
|
+
module_items << create_introduction(moodle_book) if moodle_book.intro
|
36
|
+
module_items += moodle_book.chapters.map { |chapter| create_chapter(chapter) }
|
37
|
+
module_items
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
def create_title(moodle_book)
|
43
|
+
module_item = create_module_item_with_defaults()
|
44
|
+
module_item.content_type = Moodle2CC::CanvasCC::Models::ModuleItem::CONTENT_TYPE_CONTEXT_MODULE_SUB_HEADER
|
45
|
+
module_item.title = moodle_book.name
|
46
|
+
module_item.indent = "0"
|
47
|
+
module_item.identifier = generate_unique_identifier()
|
48
|
+
module_item.workflow_state = workflow_state(moodle_book.visible)
|
49
|
+
|
50
|
+
module_item
|
51
|
+
end
|
52
|
+
|
53
|
+
def create_introduction(moodle_book)
|
54
|
+
module_item = create_module_item_with_defaults()
|
55
|
+
module_item.title = 'Introduction'
|
56
|
+
module_item.indent = '1'
|
57
|
+
module_item.identifier = generate_unique_identifier()
|
58
|
+
module_item.identifierref = generate_unique_identifier_for_book_intro(moodle_book)
|
59
|
+
module_item.workflow_state = workflow_state(moodle_book.visible)
|
60
|
+
|
61
|
+
module_item
|
62
|
+
end
|
63
|
+
|
64
|
+
def create_chapter(moodle_chapter)
|
65
|
+
module_item = create_module_item_with_defaults()
|
66
|
+
module_item.title = moodle_chapter.title
|
67
|
+
module_item.indent = moodle_chapter.subchapter ? "2" : "1"
|
68
|
+
module_item.identifier = generate_unique_identifier()
|
69
|
+
module_item.identifierref = generate_unique_identifier_for_activity(moodle_chapter)
|
70
|
+
module_item.workflow_state = CanvasCC::Models::WorkflowState::UNPUBLISHED if moodle_chapter.hidden
|
71
|
+
|
72
|
+
module_item
|
73
|
+
end
|
74
|
+
|
75
|
+
def create_module_item_with_defaults
|
76
|
+
module_item = CanvasCC::Models::ModuleItem.new
|
77
|
+
module_item.identifier = generate_unique_identifier()
|
78
|
+
module_item.content_type = CanvasCC::Models::ModuleItem::CONTENT_TYPE_WIKI_PAGE
|
79
|
+
module_item.workflow_state = CanvasCC::Models::WorkflowState::ACTIVE
|
80
|
+
module_item
|
81
|
+
end
|
82
|
+
|
83
|
+
def create_page(title)
|
84
|
+
page = CanvasCC::Models::Page.new
|
85
|
+
page.type = CanvasCC::Models::Resource::WEB_CONTENT_TYPE
|
86
|
+
page.href = generate_unique_resource_path(CanvasCC::Models::Page::BOOK_PATH, title)
|
87
|
+
page.title = title
|
88
|
+
page.workflow_state = CanvasCC::Models::WorkflowState::ACTIVE
|
89
|
+
page.editing_roles = CanvasCC::Models::Page::EDITING_ROLE_TEACHER
|
90
|
+
page
|
91
|
+
end
|
92
|
+
|
93
|
+
def generate_unique_identifier_for_book_intro(moodle_book)
|
94
|
+
generate_unique_identifier_for(moodle_book.id, INTRO_SUFFIX)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
module Moodle2CC
|
2
|
+
module Moodle2Converter::ConverterHelper
|
3
|
+
INTRO_SUFFIX = '_book_intro'
|
4
|
+
CHAPTER_SUFFIX = '_chapter'
|
5
|
+
FOLDER_SUFFIX = '_folder'
|
6
|
+
PAGE_SUFFIX = '_page'
|
7
|
+
ASSESSMENT_SUFFIX = '_assessment'
|
8
|
+
ASSIGNMENT_SUFFIX = '_assignment'
|
9
|
+
COURSE_SUFFIX = '_course'
|
10
|
+
DISCUSSION_SUFFIX = '_discussion'
|
11
|
+
FILE_SUFFIX = '_file'
|
12
|
+
QUESTION_BANK_SUFFIX = '_question_bank'
|
13
|
+
MODULE_SUFFIX = '_module'
|
14
|
+
GLOSSARY_SUFFIX = '_glossary'
|
15
|
+
SUMMARY_PAGE_SUFFIX = '_summary_page'
|
16
|
+
EXTERNAL_URL_SUFFIX = '_external_url'
|
17
|
+
|
18
|
+
ACTIVITY_LOOKUP = {
|
19
|
+
Moodle2::Models::Page => {suffix: PAGE_SUFFIX, content_type: CanvasCC::Models::ModuleItem::CONTENT_TYPE_WIKI_PAGE},
|
20
|
+
Moodle2::Models::Assignment => {suffix: ASSIGNMENT_SUFFIX, content_type: CanvasCC::Models::ModuleItem::CONTENT_TYPE_ASSIGNMENT},
|
21
|
+
Moodle2::Models::Folder => {suffix: FOLDER_SUFFIX, content_type: CanvasCC::Models::ModuleItem::CONTENT_TYPE_WIKI_PAGE},
|
22
|
+
Moodle2::Models::Forum => {suffix: DISCUSSION_SUFFIX, content_type: CanvasCC::Models::ModuleItem::CONTENT_TYPE_DISCUSSION_TOPIC},
|
23
|
+
Moodle2::Models::BookChapter => {suffix: CHAPTER_SUFFIX, content_type: CanvasCC::Models::ModuleItem::CONTENT_TYPE_WIKI_PAGE},
|
24
|
+
Moodle2::Models::Quizzes::Quiz => {suffix: ASSESSMENT_SUFFIX, content_type: CanvasCC::Models::ModuleItem::CONTENT_TYPE_QUIZ},
|
25
|
+
Moodle2::Models::Section => {suffix: SUMMARY_PAGE_SUFFIX, content_type: CanvasCC::Models::ModuleItem::CONTENT_TYPE_WIKI_PAGE},
|
26
|
+
Moodle2::Models::Label => {suffix: nil, content_type: CanvasCC::Models::ModuleItem::CONTENT_TYPE_CONTEXT_MODULE_SUB_HEADER},
|
27
|
+
Moodle2::Models::Glossary => {suffix: GLOSSARY_SUFFIX, content_type: CanvasCC::Models::ModuleItem::CONTENT_TYPE_WIKI_PAGE},
|
28
|
+
Moodle2::Models::ExternalUrl => {suffix: EXTERNAL_URL_SUFFIX, content_type: CanvasCC::Models::ModuleItem::CONTENT_TYPE_EXTERNAL_URL},
|
29
|
+
Moodle2::Models::Resource => {suffix: nil, content_type: CanvasCC::Models::ModuleItem::CONTENT_TYPE_ATTACHMENT}
|
30
|
+
}
|
31
|
+
|
32
|
+
def generate_unique_resource_path(base_path, readable_name, file_extension = 'html')
|
33
|
+
file_name_suffix = readable_name ? readable_name.downcase.strip.gsub(/\s/, '-') : ''
|
34
|
+
ext = file_extension ? ".#{file_extension}" : ''
|
35
|
+
File.join(base_path, generate_unique_identifier(), "#{file_name_suffix}#{ext}")
|
36
|
+
end
|
37
|
+
|
38
|
+
def generate_unique_identifier
|
39
|
+
"m2#{SecureRandom.uuid.gsub('-', '')}"
|
40
|
+
end
|
41
|
+
|
42
|
+
def generate_unique_identifier_for_activity(activity)
|
43
|
+
if lookup = ACTIVITY_LOOKUP[activity.class]
|
44
|
+
generate_unique_identifier_for(activity.id, lookup[:suffix])
|
45
|
+
else
|
46
|
+
raise "Unknown activity type: #{activity.class}"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def generate_unique_identifier_for(id, suffix = nil)
|
51
|
+
"m2#{Digest::MD5.hexdigest(id.to_s)}#{suffix}"
|
52
|
+
end
|
53
|
+
|
54
|
+
def activity_content_type(activity)
|
55
|
+
if lookup = ACTIVITY_LOOKUP[activity.class]
|
56
|
+
lookup[:content_type]
|
57
|
+
else
|
58
|
+
raise "Unknown activity type: #{activity.class}"
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def workflow_state(moodle_visibility)
|
63
|
+
moodle_visibility ? CanvasCC::Models::WorkflowState::ACTIVE : CanvasCC::Models::WorkflowState::UNPUBLISHED
|
64
|
+
end
|
65
|
+
|
66
|
+
|
67
|
+
end
|
68
|
+
end
|