moodle2cc 0.2.28 → 0.2.29
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -13
- data/Changelog +4 -0
- data/lib/moodle2cc/moodle2/extractor.rb +7 -0
- data/lib/moodle2cc/moodle2/models.rb +1 -0
- data/lib/moodle2cc/moodle2/models/course.rb +3 -2
- data/lib/moodle2cc/moodle2/models/lti.rb +5 -0
- data/lib/moodle2cc/moodle2/models/section.rb +0 -2
- data/lib/moodle2cc/moodle2/parsers.rb +1 -0
- data/lib/moodle2cc/moodle2/parsers/lti_parser.rb +35 -0
- data/lib/moodle2cc/moodle2/parsers/section_parser.rb +1 -4
- data/lib/moodle2cc/moodle2converter/converter_helper.rb +3 -1
- data/lib/moodle2cc/moodle2converter/section_converter.rb +21 -0
- data/lib/moodle2cc/version.rb +1 -1
- data/moodle2cc.gemspec +1 -1
- data/spec/moodle2cc/moodle2/extractor_spec.rb +8 -0
- data/spec/moodle2cc/moodle2/models/course_spec.rb +1 -0
- data/spec/moodle2cc/moodle2/models/forum_spec.rb +1 -1
- data/spec/moodle2cc/moodle2/parsers/forum_parser_spec.rb +1 -1
- data/spec/moodle2cc/moodle2/parsers/lti_parser_spec.rb +21 -0
- data/spec/moodle2cc/moodle2converter/section_converter_spec.rb +42 -1
- data/test/fixtures/moodle2/backup/activities/lti_78841/calendar.xml +3 -0
- data/test/fixtures/moodle2/backup/activities/lti_78841/filters.xml +7 -0
- data/test/fixtures/moodle2/backup/activities/lti_78841/grade_history.xml +5 -0
- data/test/fixtures/moodle2/backup/activities/lti_78841/grades.xml +7 -0
- data/test/fixtures/moodle2/backup/activities/lti_78841/inforef.xml +3 -0
- data/test/fixtures/moodle2/backup/activities/lti_78841/lti.xml +26 -0
- data/test/fixtures/moodle2/backup/activities/lti_78841/module.xml +20 -0
- data/test/fixtures/moodle2/backup/activities/lti_78841/roles.xml +7 -0
- data/test/fixtures/moodle2/backup/moodle_backup.xml +8 -1
- metadata +56 -36
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
MzVhYjExMjAwODM0OTVkMjg0MTdmYTY1Njc0ZTI0ZWE0ZTFlZmYxMw==
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 7852ac0df4ec637ac21c82e50fb3af7d95913e4c
|
4
|
+
data.tar.gz: 2b7a0055cf75bea08fa84003241f84566c114ed1
|
7
5
|
SHA512:
|
8
|
-
metadata.gz:
|
9
|
-
|
10
|
-
NzJjOTI2MjM2ZjE2MTNlOWE1N2UxMmQxNTRiM2QwODU2MzlhYTc3MzBiZjlh
|
11
|
-
N2U2MTQ5ZTFhYTBhMGU3YWMwMzVkMDE2MjI5MmFjNzU1YWIwNzA=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
MjgyZDZlM2M4NGM1YWE5YmVjMjg5MDQ5Nzg5NDE1N2M4ZmYzNjMzZDlhY2Iy
|
14
|
-
ZmUyZDQwMTc5YzFhZTQyNWMxMWZiOTU0Njg1MDY3ZGNhMzYzZTM2MzNjYjA4
|
15
|
-
NzQzY2M4ZjJmZWZmMDRlMWJiNDc1NmViNzNmNjk3ZWFhZGE3YTg=
|
6
|
+
metadata.gz: bbe007fcd42be598446394ec1b9baaddfd60289902420ba88033ded9cd9f0fdc3f793fdf0267c3fdb12ad06914db534363eb101b46f538b3927ded578b1b9eaa
|
7
|
+
data.tar.gz: ce26098ed8fae34f62e09935ee6dc12aafcb728c118ac58369698ee9a1c79f29b4d259011a5e61865cd67049fc22da67fbfb0fbcddff56c821f3bea613738f06
|
data/Changelog
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
2016-03-16 Version 0.2.29
|
2
|
+
* Imports LTI links as Canvas External Tool module items
|
3
|
+
* Uses the first section label as a module name if needed
|
4
|
+
|
1
5
|
2015-11-18 Version 0.2.28
|
2
6
|
* Fixes module item reference resolution caused by 0.2.26
|
3
7
|
* Also distinguishes Announcement type discussion topics
|
@@ -45,6 +45,7 @@ module Moodle2CC::Moodle2
|
|
45
45
|
parse_labels(work_dir, course)
|
46
46
|
parse_external_urls(work_dir, course)
|
47
47
|
parse_resources(work_dir, course)
|
48
|
+
parse_lti_links(work_dir, course)
|
48
49
|
collect_files_for_resources(course)
|
49
50
|
collect_activities_for_sections(course.sections, course.activities)
|
50
51
|
course
|
@@ -171,6 +172,12 @@ module Moodle2CC::Moodle2
|
|
171
172
|
end
|
172
173
|
end
|
173
174
|
|
175
|
+
def parse_lti_links(work_dir, course)
|
176
|
+
if lti_links = Parsers::LtiParser.new(work_dir).parse
|
177
|
+
course.lti_links = lti_links
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
174
181
|
def collect_files_for_resources(course)
|
175
182
|
files_hash = {}
|
176
183
|
course.files.each{ |file| files_hash[file.id] = file }
|
@@ -4,7 +4,7 @@ module Moodle2CC::Moodle2::Models
|
|
4
4
|
:course_id, :show_grades, :sections, :files, :pages, :forums, :assignments,
|
5
5
|
:books, :folders, :question_categories, :quizzes, :glossaries,
|
6
6
|
:labels, :resources, :external_urls, :choices, :questionnaires,
|
7
|
-
:feedbacks, :wikis, :grading_scales, :missing_files
|
7
|
+
:feedbacks, :wikis, :grading_scales, :missing_files, :lti_links
|
8
8
|
|
9
9
|
def initialize
|
10
10
|
@sections = []
|
@@ -26,11 +26,12 @@ module Moodle2CC::Moodle2::Models
|
|
26
26
|
@external_urls = []
|
27
27
|
@wikis = []
|
28
28
|
@grading_scales = {}
|
29
|
+
@lti_links = []
|
29
30
|
end
|
30
31
|
|
31
32
|
def activities
|
32
33
|
pages + forums + assignments + books + folders + quizzes + labels + resources + glossaries +
|
33
|
-
external_urls + choices + questionnaires + feedbacks + wikis
|
34
|
+
external_urls + choices + questionnaires + feedbacks + wikis + lti_links
|
34
35
|
end
|
35
36
|
|
36
37
|
end
|
@@ -3,8 +3,6 @@ module Moodle2CC::Moodle2::Models
|
|
3
3
|
attr_accessor :id, :number, :name, :summary, :summary_format, :sequence, :visible, :available_from, :available_until,
|
4
4
|
:release_code, :show_availability, :grouping_id, :position, :activities
|
5
5
|
|
6
|
-
DEFAULT_NAME = 'Untitled Module'
|
7
|
-
|
8
6
|
def initialize
|
9
7
|
@sequence = []
|
10
8
|
@activities = []
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Moodle2CC::Moodle2
|
2
|
+
class Parsers::LtiParser
|
3
|
+
include Parsers::ParserHelper
|
4
|
+
|
5
|
+
LTI_XML = 'lti.xml'
|
6
|
+
LTI_MODULE_NAME = 'lti'
|
7
|
+
|
8
|
+
def initialize(backup_dir)
|
9
|
+
@backup_dir = backup_dir
|
10
|
+
end
|
11
|
+
|
12
|
+
def parse
|
13
|
+
activity_dirs = activity_directories(@backup_dir, LTI_MODULE_NAME)
|
14
|
+
activity_dirs.map { |dir| parse_lti(dir) }
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def parse_lti(dir)
|
20
|
+
lti = Models::Lti.new
|
21
|
+
activity_dir = File.join(@backup_dir, dir)
|
22
|
+
File.open(File.join(activity_dir, LTI_XML)) do |f|
|
23
|
+
lti_xml = Nokogiri::XML(f)
|
24
|
+
lti.id = lti_xml.at_xpath('/activity/lti/@id').value
|
25
|
+
lti.module_id = lti_xml.at_xpath('/activity/@moduleid').value
|
26
|
+
lti.name = parse_text(lti_xml, '/activity/lti/name')
|
27
|
+
lti.url = parse_text(lti_xml, '/activity/lti/toolurl')
|
28
|
+
end
|
29
|
+
parse_module(activity_dir, lti)
|
30
|
+
lti
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
end
|
35
|
+
end
|
@@ -37,10 +37,7 @@ module Moodle2CC::Moodle2::Parsers
|
|
37
37
|
section.grouping_id = parse_text(section_xml, 'section/groupingid')
|
38
38
|
end
|
39
39
|
if section.name.to_s.strip.length == 0
|
40
|
-
section.name = Nokogiri::HTML(section.summary.to_s).text rescue ''
|
41
|
-
if section.name.to_s.strip.length == 0
|
42
|
-
section.name = Moodle2CC::Moodle2::Models::Section::DEFAULT_NAME
|
43
|
-
end
|
40
|
+
section.name = Nokogiri::HTML(section.summary.to_s).text.to_s.strip rescue ''
|
44
41
|
end
|
45
42
|
|
46
43
|
section
|
@@ -17,6 +17,7 @@ module Moodle2CC
|
|
17
17
|
GLOSSARY_SUFFIX = '_glossary'
|
18
18
|
SUMMARY_PAGE_SUFFIX = '_summary_page'
|
19
19
|
EXTERNAL_URL_SUFFIX = '_external_url'
|
20
|
+
LTI_SUFFIX = '_lti'
|
20
21
|
|
21
22
|
ACTIVITY_LOOKUP = {
|
22
23
|
Moodle2::Models::Page => {suffix: PAGE_SUFFIX, content_type: CanvasCC::Models::ModuleItem::CONTENT_TYPE_WIKI_PAGE},
|
@@ -33,7 +34,8 @@ module Moodle2CC
|
|
33
34
|
Moodle2::Models::Label => {suffix: nil, content_type: CanvasCC::Models::ModuleItem::CONTENT_TYPE_CONTEXT_MODULE_SUB_HEADER},
|
34
35
|
Moodle2::Models::Glossary => {suffix: GLOSSARY_SUFFIX, content_type: CanvasCC::Models::ModuleItem::CONTENT_TYPE_WIKI_PAGE},
|
35
36
|
Moodle2::Models::ExternalUrl => {suffix: EXTERNAL_URL_SUFFIX, content_type: CanvasCC::Models::ModuleItem::CONTENT_TYPE_EXTERNAL_URL},
|
36
|
-
Moodle2::Models::Resource => {suffix: nil, content_type: CanvasCC::Models::ModuleItem::CONTENT_TYPE_ATTACHMENT}
|
37
|
+
Moodle2::Models::Resource => {suffix: nil, content_type: CanvasCC::Models::ModuleItem::CONTENT_TYPE_ATTACHMENT},
|
38
|
+
Moodle2::Models::Lti => {suffix: LTI_SUFFIX, content_type: CanvasCC::Models::ModuleItem::CONTENT_TYPE_CONTEXT_EXTERNAL_TOOL}
|
37
39
|
}
|
38
40
|
|
39
41
|
MAX_TITLE_LENGTH = 250
|
@@ -7,6 +7,8 @@ module Moodle2CC
|
|
7
7
|
Moodle2::Models::Label => Moodle2Converter::LabelConverter,
|
8
8
|
}
|
9
9
|
|
10
|
+
DEFAULT_NAME = 'Untitled Module'
|
11
|
+
|
10
12
|
def initialize
|
11
13
|
@converters ={}
|
12
14
|
end
|
@@ -21,6 +23,8 @@ module Moodle2CC
|
|
21
23
|
canvas_module.module_items += moodle_section.activities.map { |a| convert_activity(a) }
|
22
24
|
canvas_module.module_items = canvas_module.module_items.flatten.compact
|
23
25
|
|
26
|
+
handle_untitled_module!(canvas_module)
|
27
|
+
|
24
28
|
canvas_module
|
25
29
|
end
|
26
30
|
|
@@ -53,6 +57,9 @@ module Moodle2CC
|
|
53
57
|
module_item.url = moodle_activity.external_url.gsub(/\s/, '%20')
|
54
58
|
elsif moodle_activity.is_a? Moodle2::Models::Resource
|
55
59
|
module_item.identifierref = moodle_activity.file.content_hash if moodle_activity.file
|
60
|
+
elsif moodle_activity.is_a? Moodle2::Models::Lti
|
61
|
+
module_item.identifierref = module_item.identifier
|
62
|
+
module_item.url = moodle_activity.url.gsub(/\s/, '%20')
|
56
63
|
else
|
57
64
|
module_item.identifierref = get_unique_identifier_for_activity(moodle_activity)
|
58
65
|
end
|
@@ -70,5 +77,19 @@ module Moodle2CC
|
|
70
77
|
ACTIVITY_CONVERTERS[moodle_activity.class] ? ACTIVITY_CONVERTERS[moodle_activity.class].new : self
|
71
78
|
end
|
72
79
|
|
80
|
+
# If a module has no title, but its first item is a subheader, promote that to the title
|
81
|
+
# (per example package provided by a customer)
|
82
|
+
def handle_untitled_module!(canvas_module)
|
83
|
+
if canvas_module.title.nil? || canvas_module.title.empty?
|
84
|
+
if canvas_module.module_items.any? &&
|
85
|
+
canvas_module.module_items.first.is_a?(CanvasCC::Models::ModuleItem) &&
|
86
|
+
canvas_module.module_items.first.content_type == 'ContextModuleSubHeader'
|
87
|
+
canvas_module.title = canvas_module.module_items.shift.title
|
88
|
+
else
|
89
|
+
canvas_module.title = DEFAULT_NAME
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
73
94
|
end
|
74
95
|
end
|
data/lib/moodle2cc/version.rb
CHANGED
data/moodle2cc.gemspec
CHANGED
@@ -23,7 +23,7 @@ Gem::Specification.new do |gem|
|
|
23
23
|
gem.add_development_dependency "guard-bundler"
|
24
24
|
gem.add_development_dependency "guard-minitest"
|
25
25
|
gem.add_development_dependency "guard-rspec"
|
26
|
-
gem.add_development_dependency "
|
26
|
+
gem.add_development_dependency "byebug"
|
27
27
|
|
28
28
|
|
29
29
|
gem.files = `git ls-files`.split($\)
|
@@ -25,6 +25,7 @@ module Moodle2CC::Moodle2
|
|
25
25
|
Parsers::LabelParser.any_instance.stub(:parse)
|
26
26
|
Parsers::ExternalUrlParser.any_instance.stub(:parse)
|
27
27
|
Parsers::ResourceParser.any_instance.stub(:parse)
|
28
|
+
Parsers::LtiParser.any_instance.stub(:parse)
|
28
29
|
Zip::File.stub(:open).and_yield([])
|
29
30
|
end
|
30
31
|
|
@@ -203,5 +204,12 @@ module Moodle2CC::Moodle2
|
|
203
204
|
extractor.extract {}
|
204
205
|
expect(course.resources).to eq [resource]
|
205
206
|
end
|
207
|
+
|
208
|
+
it 'parses lti links' do
|
209
|
+
resource = Models::Lti.new
|
210
|
+
Parsers::LtiParser.any_instance.stub(:parse).and_return([resource])
|
211
|
+
extractor.extract {}
|
212
|
+
expect(course.lti_links).to eq [resource]
|
213
|
+
end
|
206
214
|
end
|
207
215
|
end
|
@@ -15,6 +15,7 @@ module Moodle2CC::Moodle2::Models
|
|
15
15
|
it_behaves_like 'it has an attribute for', :labels, []
|
16
16
|
it_behaves_like 'it has an attribute for', :external_urls, []
|
17
17
|
it_behaves_like 'it has an attribute for', :resources, []
|
18
|
+
it_behaves_like 'it has an attribute for', :lti_links, []
|
18
19
|
|
19
20
|
describe '#activities' do
|
20
21
|
it 'collects pages' do
|
@@ -14,7 +14,7 @@ describe Moodle2CC::Moodle2::Models::Forum do
|
|
14
14
|
it_behaves_like 'it has an attribute for', :scale
|
15
15
|
it_behaves_like 'it has an attribute for', :max_bytes
|
16
16
|
it_behaves_like 'it has an attribute for', :max_attachments
|
17
|
-
it_behaves_like 'it has an attribute for', :
|
17
|
+
it_behaves_like 'it has an attribute for', :force_subscribe
|
18
18
|
it_behaves_like 'it has an attribute for', :tracking_type
|
19
19
|
it_behaves_like 'it has an attribute for', :rss_type
|
20
20
|
it_behaves_like 'it has an attribute for', :rss_articles
|
@@ -19,7 +19,7 @@ describe Moodle2CC::Moodle2::Parsers::ForumParser do
|
|
19
19
|
expect(forum.scale).to eq '1'
|
20
20
|
expect(forum.max_bytes).to eq '0'
|
21
21
|
expect(forum.max_attachments).to eq '1'
|
22
|
-
expect(forum.
|
22
|
+
expect(forum.force_subscribe).to eq true
|
23
23
|
expect(forum.tracking_type).to eq '1'
|
24
24
|
expect(forum.rss_type).to eq '0'
|
25
25
|
expect(forum.rss_articles).to eq '0'
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Moodle2CC::Moodle2::Parsers
|
4
|
+
describe LtiParser do
|
5
|
+
|
6
|
+
subject { LtiParser.new(fixture_path(File.join('moodle2', 'backup'))) }
|
7
|
+
|
8
|
+
it 'parses lti links' do
|
9
|
+
lti_links = subject.parse
|
10
|
+
expect(lti_links.count).to eq(1)
|
11
|
+
|
12
|
+
lti_link = lti_links.first
|
13
|
+
expect(lti_link.module_id).to eq('78841')
|
14
|
+
expect(lti_link.id).to eq('47236')
|
15
|
+
expect(lti_link.name).to eq('eTeacher Guide')
|
16
|
+
expect(lti_link.url).to eq('https://lti.flvsgl.com/tool.php?id=11&launch=educator_psychology1_v14_gs_guide/index.htm')
|
17
|
+
expect(lti_link.visible).to eq false
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
@@ -151,7 +151,7 @@ module Moodle2CC
|
|
151
151
|
expect(module_item.indent).to eq '0'
|
152
152
|
end
|
153
153
|
|
154
|
-
it 'converts a moodle
|
154
|
+
it 'converts a moodle resource to a file module item' do
|
155
155
|
moodle_resource = Moodle2::Models::Resource.new
|
156
156
|
moodle_file = Moodle2::Models::Moodle2File.new
|
157
157
|
moodle_file.content_hash = 'some_id'
|
@@ -165,6 +165,47 @@ module Moodle2CC
|
|
165
165
|
expect(module_item.identifierref).to eq 'some_id'
|
166
166
|
end
|
167
167
|
|
168
|
+
it 'converts a moodle LTI item to an external tool module item' do
|
169
|
+
subject.stub(:generate_unique_identifier) { 'some_random_id' }
|
170
|
+
|
171
|
+
moodle_lti = Moodle2::Models::Lti.new
|
172
|
+
moodle_lti.id = 1
|
173
|
+
moodle_lti.name = 'Whatever'
|
174
|
+
moodle_lti.url = 'http://whatever.invalid'
|
175
|
+
moodle_lti.visible = false
|
176
|
+
|
177
|
+
module_items = subject.convert_to_module_items(moodle_lti)
|
178
|
+
expect(module_items.size).to eq 1
|
179
|
+
|
180
|
+
expect(module_items[0].identifier).to eq 'some_random_id'
|
181
|
+
expect(module_items[0].workflow_state).to eq 'unpublished'
|
182
|
+
expect(module_items[0].title).to eq 'Whatever'
|
183
|
+
expect(module_items[0].identifierref).to eq 'some_random_id'
|
184
|
+
expect(module_items[0].content_type).to eq 'ContextExternalTool'
|
185
|
+
expect(module_items[0].url).to eq 'http://whatever.invalid'
|
186
|
+
expect(module_items[0].indent).to eq '0'
|
187
|
+
end
|
188
|
+
|
189
|
+
it 'infers a default name for an untitled section' do
|
190
|
+
moodle_section.id = 'section_id'
|
191
|
+
moodle_section.name = ''
|
192
|
+
canvas_module = subject.convert(moodle_section)
|
193
|
+
expect(canvas_module.title).to eq('Untitled Module')
|
194
|
+
end
|
195
|
+
|
196
|
+
it 'uses the first label as a title if needed' do
|
197
|
+
moodle_section.id = 'section_id'
|
198
|
+
moodle_section.name = ''
|
199
|
+
label = Moodle2::Models::Label.new
|
200
|
+
label.module_id = 'section_id'
|
201
|
+
label.id = 'label_id'
|
202
|
+
label.name = 'blah'
|
203
|
+
moodle_section.activities << label
|
204
|
+
canvas_module = subject.convert(moodle_section)
|
205
|
+
expect(canvas_module.title).to eq 'blah'
|
206
|
+
expect(canvas_module.module_items).to be_empty
|
207
|
+
end
|
208
|
+
|
168
209
|
end
|
169
210
|
end
|
170
211
|
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<activity id="47236" moduleid="78841" modulename="lti" contextid="82672">
|
3
|
+
<lti id="47236">
|
4
|
+
<name>eTeacher Guide</name>
|
5
|
+
<intro></intro>
|
6
|
+
<introformat>1</introformat>
|
7
|
+
<timecreated>1375814377</timecreated>
|
8
|
+
<timemodified>1375968182</timemodified>
|
9
|
+
<typeid>0</typeid>
|
10
|
+
<toolurl>https://lti.flvsgl.com/tool.php?id=11&launch=educator_psychology1_v14_gs_guide/index.htm</toolurl>
|
11
|
+
<securetoolurl></securetoolurl>
|
12
|
+
<launchcontainer>1</launchcontainer>
|
13
|
+
<instructorchoicesendname>$@NULL@$</instructorchoicesendname>
|
14
|
+
<instructorchoicesendemailaddr>$@NULL@$</instructorchoicesendemailaddr>
|
15
|
+
<instructorchoiceacceptgrades>$@NULL@$</instructorchoiceacceptgrades>
|
16
|
+
<instructorchoiceallowroster>$@NULL@$</instructorchoiceallowroster>
|
17
|
+
<instructorchoiceallowsetting>$@NULL@$</instructorchoiceallowsetting>
|
18
|
+
<grade>100</grade>
|
19
|
+
<instructorcustomparameters></instructorcustomparameters>
|
20
|
+
<debuglaunch>0</debuglaunch>
|
21
|
+
<showtitlelaunch>0</showtitlelaunch>
|
22
|
+
<showdescriptionlaunch>0</showdescriptionlaunch>
|
23
|
+
<icon></icon>
|
24
|
+
<secureicon></secureicon>
|
25
|
+
</lti>
|
26
|
+
</activity>
|
@@ -0,0 +1,20 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<module id="78841" version="2014111000">
|
3
|
+
<modulename>lti</modulename>
|
4
|
+
<sectionid>3443</sectionid>
|
5
|
+
<sectionnumber>0</sectionnumber>
|
6
|
+
<idnumber></idnumber>
|
7
|
+
<added>1375814377</added>
|
8
|
+
<score>0</score>
|
9
|
+
<indent>0</indent>
|
10
|
+
<visible>0</visible>
|
11
|
+
<visibleold>1</visibleold>
|
12
|
+
<groupmode>0</groupmode>
|
13
|
+
<groupingid>0</groupingid>
|
14
|
+
<completion>0</completion>
|
15
|
+
<completiongradeitemnumber>$@NULL@$</completiongradeitemnumber>
|
16
|
+
<completionview>0</completionview>
|
17
|
+
<completionexpected>0</completionexpected>
|
18
|
+
<availability>$@NULL@$</availability>
|
19
|
+
<showdescription>0</showdescription>
|
20
|
+
</module>
|
@@ -169,6 +169,13 @@
|
|
169
169
|
<title>Hidden Assignmnet</title>
|
170
170
|
<directory>activities/assignment_42</directory>
|
171
171
|
</activity>
|
172
|
+
<activity>
|
173
|
+
<moduleid>78841</moduleid>
|
174
|
+
<sectionid>3443</sectionid>
|
175
|
+
<modulename>lti</modulename>
|
176
|
+
<title>eTeacher Guide</title>
|
177
|
+
<directory>activities/lti_78841</directory>
|
178
|
+
</activity>
|
172
179
|
</activities>
|
173
180
|
<sections>
|
174
181
|
<section>
|
@@ -562,4 +569,4 @@
|
|
562
569
|
</setting>
|
563
570
|
</settings>
|
564
571
|
</information>
|
565
|
-
</moodle_backup>
|
572
|
+
</moodle_backup>
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: moodle2cc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.29
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Christopher Durtschi
|
@@ -10,202 +10,202 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2016-03-16 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rubyzip
|
17
17
|
requirement: !ruby/object:Gem::Requirement
|
18
18
|
requirements:
|
19
|
-
- -
|
19
|
+
- - ">="
|
20
20
|
- !ruby/object:Gem::Version
|
21
21
|
version: 1.0.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
requirements:
|
26
|
-
- -
|
26
|
+
- - ">="
|
27
27
|
- !ruby/object:Gem::Version
|
28
28
|
version: 1.0.0
|
29
29
|
- !ruby/object:Gem::Dependency
|
30
30
|
name: instructure-happymapper
|
31
31
|
requirement: !ruby/object:Gem::Requirement
|
32
32
|
requirements:
|
33
|
-
- - ~>
|
33
|
+
- - "~>"
|
34
34
|
- !ruby/object:Gem::Version
|
35
35
|
version: 0.5.10
|
36
36
|
type: :runtime
|
37
37
|
prerelease: false
|
38
38
|
version_requirements: !ruby/object:Gem::Requirement
|
39
39
|
requirements:
|
40
|
-
- - ~>
|
40
|
+
- - "~>"
|
41
41
|
- !ruby/object:Gem::Version
|
42
42
|
version: 0.5.10
|
43
43
|
- !ruby/object:Gem::Dependency
|
44
44
|
name: builder
|
45
45
|
requirement: !ruby/object:Gem::Requirement
|
46
46
|
requirements:
|
47
|
-
- -
|
47
|
+
- - ">="
|
48
48
|
- !ruby/object:Gem::Version
|
49
49
|
version: '0'
|
50
50
|
type: :runtime
|
51
51
|
prerelease: false
|
52
52
|
version_requirements: !ruby/object:Gem::Requirement
|
53
53
|
requirements:
|
54
|
-
- -
|
54
|
+
- - ">="
|
55
55
|
- !ruby/object:Gem::Version
|
56
56
|
version: '0'
|
57
57
|
- !ruby/object:Gem::Dependency
|
58
58
|
name: thor
|
59
59
|
requirement: !ruby/object:Gem::Requirement
|
60
60
|
requirements:
|
61
|
-
- -
|
61
|
+
- - ">="
|
62
62
|
- !ruby/object:Gem::Version
|
63
63
|
version: '0'
|
64
64
|
type: :runtime
|
65
65
|
prerelease: false
|
66
66
|
version_requirements: !ruby/object:Gem::Requirement
|
67
67
|
requirements:
|
68
|
-
- -
|
68
|
+
- - ">="
|
69
69
|
- !ruby/object:Gem::Version
|
70
70
|
version: '0'
|
71
71
|
- !ruby/object:Gem::Dependency
|
72
72
|
name: nokogiri
|
73
73
|
requirement: !ruby/object:Gem::Requirement
|
74
74
|
requirements:
|
75
|
-
- -
|
75
|
+
- - ">="
|
76
76
|
- !ruby/object:Gem::Version
|
77
77
|
version: '0'
|
78
78
|
type: :runtime
|
79
79
|
prerelease: false
|
80
80
|
version_requirements: !ruby/object:Gem::Requirement
|
81
81
|
requirements:
|
82
|
-
- -
|
82
|
+
- - ">="
|
83
83
|
- !ruby/object:Gem::Version
|
84
84
|
version: '0'
|
85
85
|
- !ruby/object:Gem::Dependency
|
86
86
|
name: rdiscount
|
87
87
|
requirement: !ruby/object:Gem::Requirement
|
88
88
|
requirements:
|
89
|
-
- -
|
89
|
+
- - ">="
|
90
90
|
- !ruby/object:Gem::Version
|
91
91
|
version: '0'
|
92
92
|
type: :runtime
|
93
93
|
prerelease: false
|
94
94
|
version_requirements: !ruby/object:Gem::Requirement
|
95
95
|
requirements:
|
96
|
-
- -
|
96
|
+
- - ">="
|
97
97
|
- !ruby/object:Gem::Version
|
98
98
|
version: '0'
|
99
99
|
- !ruby/object:Gem::Dependency
|
100
100
|
name: rake
|
101
101
|
requirement: !ruby/object:Gem::Requirement
|
102
102
|
requirements:
|
103
|
-
- -
|
103
|
+
- - ">="
|
104
104
|
- !ruby/object:Gem::Version
|
105
105
|
version: '0'
|
106
106
|
type: :development
|
107
107
|
prerelease: false
|
108
108
|
version_requirements: !ruby/object:Gem::Requirement
|
109
109
|
requirements:
|
110
|
-
- -
|
110
|
+
- - ">="
|
111
111
|
- !ruby/object:Gem::Version
|
112
112
|
version: '0'
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
114
|
name: minitest
|
115
115
|
requirement: !ruby/object:Gem::Requirement
|
116
116
|
requirements:
|
117
|
-
- -
|
117
|
+
- - ">="
|
118
118
|
- !ruby/object:Gem::Version
|
119
119
|
version: '0'
|
120
120
|
type: :development
|
121
121
|
prerelease: false
|
122
122
|
version_requirements: !ruby/object:Gem::Requirement
|
123
123
|
requirements:
|
124
|
-
- -
|
124
|
+
- - ">="
|
125
125
|
- !ruby/object:Gem::Version
|
126
126
|
version: '0'
|
127
127
|
- !ruby/object:Gem::Dependency
|
128
128
|
name: rspec
|
129
129
|
requirement: !ruby/object:Gem::Requirement
|
130
130
|
requirements:
|
131
|
-
- - ~>
|
131
|
+
- - "~>"
|
132
132
|
- !ruby/object:Gem::Version
|
133
133
|
version: '2'
|
134
134
|
type: :development
|
135
135
|
prerelease: false
|
136
136
|
version_requirements: !ruby/object:Gem::Requirement
|
137
137
|
requirements:
|
138
|
-
- - ~>
|
138
|
+
- - "~>"
|
139
139
|
- !ruby/object:Gem::Version
|
140
140
|
version: '2'
|
141
141
|
- !ruby/object:Gem::Dependency
|
142
142
|
name: guard
|
143
143
|
requirement: !ruby/object:Gem::Requirement
|
144
144
|
requirements:
|
145
|
-
- -
|
145
|
+
- - ">="
|
146
146
|
- !ruby/object:Gem::Version
|
147
147
|
version: '0'
|
148
148
|
type: :development
|
149
149
|
prerelease: false
|
150
150
|
version_requirements: !ruby/object:Gem::Requirement
|
151
151
|
requirements:
|
152
|
-
- -
|
152
|
+
- - ">="
|
153
153
|
- !ruby/object:Gem::Version
|
154
154
|
version: '0'
|
155
155
|
- !ruby/object:Gem::Dependency
|
156
156
|
name: guard-bundler
|
157
157
|
requirement: !ruby/object:Gem::Requirement
|
158
158
|
requirements:
|
159
|
-
- -
|
159
|
+
- - ">="
|
160
160
|
- !ruby/object:Gem::Version
|
161
161
|
version: '0'
|
162
162
|
type: :development
|
163
163
|
prerelease: false
|
164
164
|
version_requirements: !ruby/object:Gem::Requirement
|
165
165
|
requirements:
|
166
|
-
- -
|
166
|
+
- - ">="
|
167
167
|
- !ruby/object:Gem::Version
|
168
168
|
version: '0'
|
169
169
|
- !ruby/object:Gem::Dependency
|
170
170
|
name: guard-minitest
|
171
171
|
requirement: !ruby/object:Gem::Requirement
|
172
172
|
requirements:
|
173
|
-
- -
|
173
|
+
- - ">="
|
174
174
|
- !ruby/object:Gem::Version
|
175
175
|
version: '0'
|
176
176
|
type: :development
|
177
177
|
prerelease: false
|
178
178
|
version_requirements: !ruby/object:Gem::Requirement
|
179
179
|
requirements:
|
180
|
-
- -
|
180
|
+
- - ">="
|
181
181
|
- !ruby/object:Gem::Version
|
182
182
|
version: '0'
|
183
183
|
- !ruby/object:Gem::Dependency
|
184
184
|
name: guard-rspec
|
185
185
|
requirement: !ruby/object:Gem::Requirement
|
186
186
|
requirements:
|
187
|
-
- -
|
187
|
+
- - ">="
|
188
188
|
- !ruby/object:Gem::Version
|
189
189
|
version: '0'
|
190
190
|
type: :development
|
191
191
|
prerelease: false
|
192
192
|
version_requirements: !ruby/object:Gem::Requirement
|
193
193
|
requirements:
|
194
|
-
- -
|
194
|
+
- - ">="
|
195
195
|
- !ruby/object:Gem::Version
|
196
196
|
version: '0'
|
197
197
|
- !ruby/object:Gem::Dependency
|
198
|
-
name:
|
198
|
+
name: byebug
|
199
199
|
requirement: !ruby/object:Gem::Requirement
|
200
200
|
requirements:
|
201
|
-
- -
|
201
|
+
- - ">="
|
202
202
|
- !ruby/object:Gem::Version
|
203
203
|
version: '0'
|
204
204
|
type: :development
|
205
205
|
prerelease: false
|
206
206
|
version_requirements: !ruby/object:Gem::Requirement
|
207
207
|
requirements:
|
208
|
-
- -
|
208
|
+
- - ">="
|
209
209
|
- !ruby/object:Gem::Version
|
210
210
|
version: '0'
|
211
211
|
description: Migrates Moodle backup ZIP to IMS Common Cartridge package
|
@@ -218,8 +218,8 @@ executables:
|
|
218
218
|
extensions: []
|
219
219
|
extra_rdoc_files: []
|
220
220
|
files:
|
221
|
-
- .gitignore
|
222
|
-
- .travis.yml
|
221
|
+
- ".gitignore"
|
222
|
+
- ".travis.yml"
|
223
223
|
- Changelog
|
224
224
|
- Gemfile
|
225
225
|
- Guardfile
|
@@ -331,6 +331,7 @@ files:
|
|
331
331
|
- lib/moodle2cc/moodle2/models/glossary.rb
|
332
332
|
- lib/moodle2cc/moodle2/models/glossary_entry.rb
|
333
333
|
- lib/moodle2cc/moodle2/models/label.rb
|
334
|
+
- lib/moodle2cc/moodle2/models/lti.rb
|
334
335
|
- lib/moodle2cc/moodle2/models/moodle2_file.rb
|
335
336
|
- lib/moodle2cc/moodle2/models/page.rb
|
336
337
|
- lib/moodle2cc/moodle2/models/questionnaire.rb
|
@@ -362,6 +363,7 @@ files:
|
|
362
363
|
- lib/moodle2cc/moodle2/parsers/forum_parser.rb
|
363
364
|
- lib/moodle2cc/moodle2/parsers/glossary_parser.rb
|
364
365
|
- lib/moodle2cc/moodle2/parsers/label_parser.rb
|
366
|
+
- lib/moodle2cc/moodle2/parsers/lti_parser.rb
|
365
367
|
- lib/moodle2cc/moodle2/parsers/page_parser.rb
|
366
368
|
- lib/moodle2cc/moodle2/parsers/parser_helper.rb
|
367
369
|
- lib/moodle2cc/moodle2/parsers/question_category_parser.rb
|
@@ -483,6 +485,7 @@ files:
|
|
483
485
|
- spec/moodle2cc/moodle2/parsers/forum_parser_spec.rb
|
484
486
|
- spec/moodle2cc/moodle2/parsers/glossary_parser_spec.rb
|
485
487
|
- spec/moodle2cc/moodle2/parsers/label_parser_spec.rb
|
488
|
+
- spec/moodle2cc/moodle2/parsers/lti_parser_spec.rb
|
486
489
|
- spec/moodle2cc/moodle2/parsers/page_parser_spec.rb
|
487
490
|
- spec/moodle2cc/moodle2/parsers/parser_helper_spec.rb
|
488
491
|
- spec/moodle2cc/moodle2/parsers/question_category_parser_spec.rb
|
@@ -641,6 +644,14 @@ files:
|
|
641
644
|
- test/fixtures/moodle2/backup/activities/label_11/label.xml
|
642
645
|
- test/fixtures/moodle2/backup/activities/label_11/module.xml
|
643
646
|
- test/fixtures/moodle2/backup/activities/label_11/roles.xml
|
647
|
+
- test/fixtures/moodle2/backup/activities/lti_78841/calendar.xml
|
648
|
+
- test/fixtures/moodle2/backup/activities/lti_78841/filters.xml
|
649
|
+
- test/fixtures/moodle2/backup/activities/lti_78841/grade_history.xml
|
650
|
+
- test/fixtures/moodle2/backup/activities/lti_78841/grades.xml
|
651
|
+
- test/fixtures/moodle2/backup/activities/lti_78841/inforef.xml
|
652
|
+
- test/fixtures/moodle2/backup/activities/lti_78841/lti.xml
|
653
|
+
- test/fixtures/moodle2/backup/activities/lti_78841/module.xml
|
654
|
+
- test/fixtures/moodle2/backup/activities/lti_78841/roles.xml
|
644
655
|
- test/fixtures/moodle2/backup/activities/page_10/calendar.xml
|
645
656
|
- test/fixtures/moodle2/backup/activities/page_10/comments.xml
|
646
657
|
- test/fixtures/moodle2/backup/activities/page_10/completion.xml
|
@@ -822,17 +833,17 @@ require_paths:
|
|
822
833
|
- lib
|
823
834
|
required_ruby_version: !ruby/object:Gem::Requirement
|
824
835
|
requirements:
|
825
|
-
- -
|
836
|
+
- - ">="
|
826
837
|
- !ruby/object:Gem::Version
|
827
838
|
version: '0'
|
828
839
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
829
840
|
requirements:
|
830
|
-
- -
|
841
|
+
- - ">="
|
831
842
|
- !ruby/object:Gem::Version
|
832
843
|
version: '0'
|
833
844
|
requirements: []
|
834
845
|
rubyforge_project:
|
835
|
-
rubygems_version: 2.4.
|
846
|
+
rubygems_version: 2.4.7
|
836
847
|
signing_key:
|
837
848
|
specification_version: 4
|
838
849
|
summary: Migrates Moodle backup ZIP to IMS Common Cartridge package
|
@@ -910,6 +921,7 @@ test_files:
|
|
910
921
|
- spec/moodle2cc/moodle2/parsers/forum_parser_spec.rb
|
911
922
|
- spec/moodle2cc/moodle2/parsers/glossary_parser_spec.rb
|
912
923
|
- spec/moodle2cc/moodle2/parsers/label_parser_spec.rb
|
924
|
+
- spec/moodle2cc/moodle2/parsers/lti_parser_spec.rb
|
913
925
|
- spec/moodle2cc/moodle2/parsers/page_parser_spec.rb
|
914
926
|
- spec/moodle2cc/moodle2/parsers/parser_helper_spec.rb
|
915
927
|
- spec/moodle2cc/moodle2/parsers/question_category_parser_spec.rb
|
@@ -1068,6 +1080,14 @@ test_files:
|
|
1068
1080
|
- test/fixtures/moodle2/backup/activities/label_11/label.xml
|
1069
1081
|
- test/fixtures/moodle2/backup/activities/label_11/module.xml
|
1070
1082
|
- test/fixtures/moodle2/backup/activities/label_11/roles.xml
|
1083
|
+
- test/fixtures/moodle2/backup/activities/lti_78841/calendar.xml
|
1084
|
+
- test/fixtures/moodle2/backup/activities/lti_78841/filters.xml
|
1085
|
+
- test/fixtures/moodle2/backup/activities/lti_78841/grade_history.xml
|
1086
|
+
- test/fixtures/moodle2/backup/activities/lti_78841/grades.xml
|
1087
|
+
- test/fixtures/moodle2/backup/activities/lti_78841/inforef.xml
|
1088
|
+
- test/fixtures/moodle2/backup/activities/lti_78841/lti.xml
|
1089
|
+
- test/fixtures/moodle2/backup/activities/lti_78841/module.xml
|
1090
|
+
- test/fixtures/moodle2/backup/activities/lti_78841/roles.xml
|
1071
1091
|
- test/fixtures/moodle2/backup/activities/page_10/calendar.xml
|
1072
1092
|
- test/fixtures/moodle2/backup/activities/page_10/comments.xml
|
1073
1093
|
- test/fixtures/moodle2/backup/activities/page_10/completion.xml
|