d2l_sdk 0.1.8 → 0.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/d2l_sdk.rb +16 -14
- data/lib/d2l_sdk/auth.rb +1 -1
- data/lib/d2l_sdk/config_variables.rb +81 -5
- data/lib/d2l_sdk/course.rb +184 -136
- data/lib/d2l_sdk/course_content.rb +148 -23
- data/lib/d2l_sdk/course_template.rb +78 -69
- data/lib/d2l_sdk/demographics.rb +62 -22
- data/lib/d2l_sdk/enroll.rb +159 -84
- data/lib/d2l_sdk/grades.rb +352 -0
- data/lib/d2l_sdk/group.rb +1 -0
- data/lib/d2l_sdk/news.rb +97 -0
- data/lib/d2l_sdk/org_unit.rb +205 -167
- data/lib/d2l_sdk/requests.rb +3 -14
- data/lib/d2l_sdk/section.rb +77 -52
- data/lib/d2l_sdk/semester.rb +3 -0
- data/lib/d2l_sdk/setup_versions.rb +14 -0
- data/lib/d2l_sdk/user.rb +334 -68
- data/lib/d2l_sdk/version.rb +1 -1
- metadata +4 -2
@@ -1,7 +1,7 @@
|
|
1
1
|
|
2
|
-
|
3
|
-
### CONTENT ACTIONS
|
4
|
-
|
2
|
+
########################
|
3
|
+
### CONTENT ACTIONS#####
|
4
|
+
########################
|
5
5
|
|
6
6
|
# Delete a specific module from an org unit.
|
7
7
|
def delete_module(org_unit_id, module_id) # DELETE
|
@@ -51,7 +51,7 @@ def get_topic_file(org_unit_id, topic_id, stream = false) # GET
|
|
51
51
|
_get(query_string)
|
52
52
|
end
|
53
53
|
|
54
|
-
# Add a child +module+ or +topic+ to a specific module’s structure.
|
54
|
+
# TODO Add a child +module+ or +topic+ to a specific module’s structure.
|
55
55
|
# Can be used in multiple ways. D2L categorizes it into 3 different ways:
|
56
56
|
# --Module: add child module to parent module
|
57
57
|
# --Link Topic: add child topic to parent module structure consisting of a LINK
|
@@ -68,7 +68,6 @@ end
|
|
68
68
|
# Returns (if successful) a JSON data block containing properties of the newly created object
|
69
69
|
def add_child_to_module(org_unit_id, module_id) # POST
|
70
70
|
query_string = "/d2l/api/le/#{$le_ver}/#{org_unit_id}/content/modules/#{module_id}/structure/"
|
71
|
-
# TODO
|
72
71
|
end
|
73
72
|
|
74
73
|
def check_content_module_validity(content_module)
|
@@ -200,9 +199,9 @@ def update_topic(org_unit_id, topic_id, content_topic) # GET
|
|
200
199
|
_put(query_string, payload)
|
201
200
|
end
|
202
201
|
|
203
|
-
|
204
|
-
### CONTENT OVERVIEW
|
205
|
-
|
202
|
+
#########################
|
203
|
+
### CONTENT OVERVIEW#####
|
204
|
+
#########################
|
206
205
|
|
207
206
|
# Retrieve the overview for a course offering.
|
208
207
|
def get_course_overview(org_unit_id) # GET
|
@@ -219,9 +218,9 @@ def get_course_overview_file_attachment(org_unit_id) # GET
|
|
219
218
|
# Returns: a file stream containing the course offering’s overview attachment.
|
220
219
|
end
|
221
220
|
|
222
|
-
|
223
|
-
### ISBN
|
224
|
-
|
221
|
+
##############
|
222
|
+
### ISBN #####
|
223
|
+
##############
|
225
224
|
|
226
225
|
# Remove the association between an ISBN and org unit.
|
227
226
|
def delete_isbn_association(org_unit_id, isbn) # DELETE
|
@@ -279,9 +278,137 @@ def create_isbn_org_unit_association(org_unit_id, isbn_association_data) # GET
|
|
279
278
|
# the association between an org unit and an ISBN.
|
280
279
|
end
|
281
280
|
|
282
|
-
|
283
|
-
### SCHEDULED ITEMS
|
284
|
-
|
281
|
+
#########################
|
282
|
+
### SCHEDULED ITEMS######
|
283
|
+
#########################
|
284
|
+
|
285
|
+
# REVIEW: Retrieve the calling user’s scheduled items.
|
286
|
+
def get_user_overdue_items(org_unit_ids_CSV, completion = nil,
|
287
|
+
start_date_time = '', end_date_time = '') # GET
|
288
|
+
query_string = "/d2l/api/le/#{$le_ver}/content/myItems/?"
|
289
|
+
query_string += "orgUnitIdsCSV=#{org_unit_ids_CSV}&"
|
290
|
+
query_string += "completion=#{completion}&" unless completion.nil?
|
291
|
+
query_string += "startDateTime=#{start_date_time}&" unless start_date_time == ''
|
292
|
+
query_string += "endDateTime=#{end_date_time}&" unless end_date_time == ''
|
293
|
+
_get(query_string)
|
294
|
+
# Returns: An ObjectListPage JSON block containing a list of ScheduledItem blocks
|
295
|
+
end
|
296
|
+
|
297
|
+
# REVIEW: Retrieve the calling user’s scheduled items still due.
|
298
|
+
def get_current_user_still_due_items(org_unit_ids_CSV, completion = nil,
|
299
|
+
start_date_time = '', end_date_time = '')
|
300
|
+
query_string = "/d2l/api/le/#{$le_ver}/content/myItems/due/?"
|
301
|
+
query_string += "orgUnitIdsCSV=#{org_unit_ids_CSV}&"
|
302
|
+
query_string += "completion=#{completion}&" unless completion.nil?
|
303
|
+
query_string += "startDateTime=#{start_date_time}&" unless start_date_time == ''
|
304
|
+
query_string += "endDateTime=#{end_date_time}&" unless end_date_time == ''
|
305
|
+
_get(query_string)
|
306
|
+
# Returns: An ObjectListPage JSON block containing a list of ScheduledItem blocks
|
307
|
+
end
|
308
|
+
|
309
|
+
# REVIEW: Retrieve the quantities of the calling user’s scheduled items, organized by org unit.
|
310
|
+
# GET /d2l/api/le/(version)/content/myItems/itemCounts/
|
311
|
+
def get_current_user_organized_scheduled_items(org_unit_ids_CSV,
|
312
|
+
completion = nil,
|
313
|
+
start_date_time = '',
|
314
|
+
end_date_time = '')
|
315
|
+
query_string = "/d2l/api/le/#{$le_ver}/content/myItems/itemCounts/?"
|
316
|
+
query_string += "orgUnitIdsCSV=#{org_unit_ids_CSV}&"
|
317
|
+
query_string += "completion=#{completion}&" unless completion.nil?
|
318
|
+
query_string += "startDateTime=#{start_date_time}&" unless start_date_time == ''
|
319
|
+
query_string += "endDateTime=#{end_date_time}&" unless end_date_time == ''
|
320
|
+
_get(query_string)
|
321
|
+
# Returns: An ObjectListPage JSON block containing a list of ScheduledItem blocks
|
322
|
+
end
|
323
|
+
|
324
|
+
# REVIEW: Retrieve the quantities of the calling user’s scheduled items still due.
|
325
|
+
# GET /d2l/api/le/(version)/content/myItems/due/itemCounts/
|
326
|
+
def get_current_user_scheduled_item_count(org_unit_ids_CSV, completion = nil,
|
327
|
+
start_date_time = '', end_date_time = '') # GET
|
328
|
+
query_string = "/d2l/api/le/#{$le_ver}/content/myItems/due/itemCounts/?"
|
329
|
+
query_string += "orgUnitIdsCSV=#{org_unit_ids_CSV}&"
|
330
|
+
query_string += "completion=#{completion}&" unless completion.nil?
|
331
|
+
query_string += "startDateTime=#{start_date_time}&" unless start_date_time == ''
|
332
|
+
query_string += "endDateTime=#{end_date_time}&" unless end_date_time == ''
|
333
|
+
_get(query_string)
|
334
|
+
# Returns: An ObjectListPage JSON block containing a list of ScheduledItem blocks
|
335
|
+
end
|
336
|
+
|
337
|
+
# REVIEW: Retrieve the calling user’s completed scheduled items.
|
338
|
+
# GET /d2l/api/le/(version)/content/myItems/completions/
|
339
|
+
def get_current_user_completed_scheduled_items(org_unit_ids_CSV,
|
340
|
+
completion_from_date_time = '',
|
341
|
+
completed_to_date_time = '')
|
342
|
+
query_string = "/d2l/api/le/#{$le_ver}/content/myItems/completions/?"
|
343
|
+
query_string += "orgUnitIdsCSV=#{org_unit_ids_CSV}&"
|
344
|
+
query_string += "completedFromDateTime=#{completion_from_date_time}&" unless completion_from_date_time == ''
|
345
|
+
query_string += "completedToDateTime=#{completed_to_date_time}&" unless completed_to_date_time == ''
|
346
|
+
_get(query_string)
|
347
|
+
# Returns: An ObjectListPage JSON block containing a list of ScheduledItem blocks
|
348
|
+
end
|
349
|
+
|
350
|
+
# REVIEW: Retrieve the calling user’s completed scheduled items that have a due date.
|
351
|
+
# GET /d2l/api/le/(version)/content/myItems/completions/due/
|
352
|
+
def get_current_user_completed_scheduled_items_with_due_date(org_unit_ids_CSV,
|
353
|
+
completion_from_date_time = '',
|
354
|
+
completed_to_date_time = '')
|
355
|
+
query_string = "/d2l/api/le/#{$le_ver}/content/myItems/completions/due/?"
|
356
|
+
query_string += "orgUnitIdsCSV=#{org_unit_ids_CSV}&"
|
357
|
+
query_string += "completedFromDateTime=#{completion_from_date_time}&" unless completion_from_date_time == ''
|
358
|
+
query_string += "completedToDateTime=#{completed_to_date_time}&" unless completed_to_date_time == ''
|
359
|
+
_get(query_string)
|
360
|
+
# Returns: An ObjectListPage JSON block containing a list of ScheduledItem blocks
|
361
|
+
end
|
362
|
+
|
363
|
+
# REVIEW: Retrieve the calling user’s scheduled items for a particular org unit.
|
364
|
+
# GET /d2l/api/le/(version)/(orgUnitId)/content/myItems/
|
365
|
+
def get_current_user_scheduled_items_by_org_unit(org_unit_id, completion = nil,
|
366
|
+
start_date_time = '',
|
367
|
+
end_date_time = '')
|
368
|
+
query_string = "/d2l/api/le/#{$le_ver}/#{org_unit_id}/content/myItems/?"
|
369
|
+
query_string += "completion=#{completion}&" unless completion.nil?
|
370
|
+
query_string += "startDateTime=#{start_date_time}&" unless start_date_time == ''
|
371
|
+
query_string += "endDateTime=#{end_date_time}&" unless end_date_time == ''
|
372
|
+
_get(query_string)
|
373
|
+
# Returns: An ObjectListPage JSON block containing a list of ScheduledItem blocks
|
374
|
+
end
|
375
|
+
|
376
|
+
# REVIEW: Retrieve the calling user’s scheduled items still due for a particular org unit.
|
377
|
+
# GET /d2l/api/le/(version)/(orgUnitId)/content/myItems/due/
|
378
|
+
def get_current_user_org_unit_scheduled_item_count(org_unit_id, completion = nil,
|
379
|
+
start_date_time = '',
|
380
|
+
end_date_time = '') # GET
|
381
|
+
query_string = "/d2l/api/le/#{$le_ver}/#{org_unit_id}/content/myItems/due/?"
|
382
|
+
query_string += "completion=#{completion}&" unless completion.nil?
|
383
|
+
query_string += "startDateTime=#{start_date_time}&" unless start_date_time == ''
|
384
|
+
query_string += "endDateTime=#{end_date_time}&" unless end_date_time == ''
|
385
|
+
_get(query_string)
|
386
|
+
# Returns: An ObjectListPage JSON block containing a list of ScheduledItem blocks
|
387
|
+
end
|
388
|
+
|
389
|
+
# REVIEW: Retrieve the quantity of the calling user’s scheduled items for provided org unit.
|
390
|
+
# GET /d2l/api/le/(version)/(orgUnitId)/content/myItems/itemCount
|
391
|
+
def get_user_overdue_items(org_unit_id, completion = nil, start_date_time = '',
|
392
|
+
end_date_time = '') # GET
|
393
|
+
query_string = "/d2l/api/le/#{$le_ver}/#{org_unit_id}/content/myItems/itemCount?"
|
394
|
+
query_string += "completion=#{completion}&" unless completion.nil?
|
395
|
+
query_string += "startDateTime=#{start_date_time}&" unless start_date_time == ''
|
396
|
+
query_string += "endDateTime=#{end_date_time}&" unless end_date_time == ''
|
397
|
+
_get(query_string)
|
398
|
+
# Returns: An ObjectListPage JSON block containing a list of ScheduledItem blocks
|
399
|
+
end
|
400
|
+
|
401
|
+
# REVIEW: Retrieve quantity of the calling user’s scheduled items still due for a particular org unit.
|
402
|
+
# GET /d2l/api/le/(version)/(orgUnitId)/content/myItems/due/itemCount
|
403
|
+
def get_user_overdue_items(org_unit_id, completion = nil, start_date_time = '',
|
404
|
+
end_date_time = '') # GET
|
405
|
+
query_string = "/d2l/api/le/#{$le_ver}/#{org_unit_id}/content/myItems/due/itemCount?"
|
406
|
+
query_string += "completion=#{completion}&" unless completion.nil?
|
407
|
+
query_string += "startDateTime=#{start_date_time}&" unless start_date_time == ''
|
408
|
+
query_string += "endDateTime=#{end_date_time}&" unless end_date_time == ''
|
409
|
+
_get(query_string)
|
410
|
+
# Returns: An ObjectListPage JSON block containing a list of ScheduledItem blocks
|
411
|
+
end
|
285
412
|
|
286
413
|
# Retrieve the overdue items for a particular user in a particular org unit.
|
287
414
|
# +org_unit_ids_CSV+ is a CSV of D2LIDs or rather Org unit IDs (optional)
|
@@ -308,9 +435,9 @@ def get_current_user_overdue_items(org_unit_ids_CSV = nil) # GET
|
|
308
435
|
# Returns: An ObjectListPage JSON block containing a list of OverdueItem.
|
309
436
|
end
|
310
437
|
|
311
|
-
|
312
|
-
### TABLE OF CONTENTS
|
313
|
-
|
438
|
+
#########################
|
439
|
+
### TABLE OF CONTENTS####
|
440
|
+
#########################
|
314
441
|
|
315
442
|
# Retrieve a list of topics that have been bookmarked.
|
316
443
|
def get_bookmarked_topics(org_unit_id) # GET
|
@@ -348,15 +475,13 @@ def get_current_user_progress(org_unit_id, level) # GET
|
|
348
475
|
# a list of ContentAggregateCompletion items.
|
349
476
|
end
|
350
477
|
|
351
|
-
|
352
|
-
#
|
478
|
+
|
479
|
+
# TODO: --UNSTABLE-- Retrieve the user progress items in an org unit, for specific users or content topics.
|
353
480
|
# _get "/d2l/api/le/#{$le_ver}/#{org_unit_id}/content/userprogress/"
|
354
481
|
|
355
|
-
# Retrieve one user’s progress within an org unit for a particular content topic.
|
356
|
-
# NOTE: UNSTABLE
|
482
|
+
# TODO: --UNSTABLE-- Retrieve one user’s progress within an org unit for a particular content topic.
|
357
483
|
# _get "/d2l/api/le/#{$le_ver}/#{org_unit_id}/content/userprogress/#{topic_id}"
|
358
484
|
|
359
|
-
# Update a user progress item.
|
360
|
-
# NOTE: UNSTABLE
|
485
|
+
# TODO: --UNSTABLE-- Update a user progress item.
|
361
486
|
# _post "/d2l/api/le/#{$le_ver}/#{org_unit_id}/content/userprogress/"
|
362
487
|
# payload: UserProgressData
|
@@ -4,6 +4,40 @@ require 'json-schema'
|
|
4
4
|
# COURSE TEMPLATES:#####
|
5
5
|
########################
|
6
6
|
|
7
|
+
# Simply, a course template can be deleted by refencing it using its Identifier
|
8
|
+
# as an argument for this method. The argument is then used to refernce the obj
|
9
|
+
# by a path and then the path is passed in for a delete http method.
|
10
|
+
# /d2l/api/lp/(version)/coursetemplates/(orgUnitId) [DELETE]
|
11
|
+
def delete_course_template(org_unit_id)
|
12
|
+
path = "/d2l/api/lp/#{$lp_ver}/coursetemplates/#{org_unit_id}"
|
13
|
+
_delete(path)
|
14
|
+
puts '[+] Course template data deleted successfully'.green
|
15
|
+
end
|
16
|
+
|
17
|
+
# Retrieves a course template based upon an explicitly defined course template
|
18
|
+
# org_unit_id or Identifier. This is done by using the identifier as a component
|
19
|
+
# of the path, and then performing a GET http method that is then returned.
|
20
|
+
#
|
21
|
+
# returns: JSON course template data
|
22
|
+
# /d2l/api/lp/(version)/coursetemplates/(orgUnitId) [GET]
|
23
|
+
def get_course_template(org_unit_id)
|
24
|
+
path = "/d2l/api/lp/#{$lp_ver}/coursetemplates/#{org_unit_id}"
|
25
|
+
_get(path)
|
26
|
+
# return: JSON course template data
|
27
|
+
end
|
28
|
+
|
29
|
+
# Moreso a helper method, but this really just returns the schema of the
|
30
|
+
# course templates. This is predefined in the routing table, and retrieved via
|
31
|
+
# a GET http method.
|
32
|
+
#
|
33
|
+
# returns: JSON of course templates schema
|
34
|
+
# /d2l/api/lp/(version)/coursetemplates/schema [GET]
|
35
|
+
def get_course_templates_schema
|
36
|
+
path = "/d2l/api/lp/#{$lp_ver}/coursetemplates/schema"
|
37
|
+
_get(path)
|
38
|
+
# This action returns a JSON array of SchemaElement blocks.
|
39
|
+
end
|
40
|
+
|
7
41
|
# Checks if the created course template data conforms to the valence api for the
|
8
42
|
# course template JSON object. If it does conform, then nothing happens and it
|
9
43
|
# simply returns true. If it does not conform, then the JSON validator raises
|
@@ -51,18 +85,51 @@ def create_course_template(course_template_data)
|
|
51
85
|
# returns: CourseTemplate JSON block containing the new data.
|
52
86
|
end
|
53
87
|
|
54
|
-
#
|
55
|
-
#
|
56
|
-
#
|
57
|
-
#
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
88
|
+
# Checks if the updated course template data conforms to the valence api for the
|
89
|
+
# course template JSON object. If it does conform, then nothing happens and it
|
90
|
+
# simply returns true. If it does not conform, then the JSON validator raises
|
91
|
+
# an exception.
|
92
|
+
def check_course_template_updated_data_validity(course_template_data)
|
93
|
+
schema = {
|
94
|
+
'type' => 'object',
|
95
|
+
'required' => %w(Name Code),
|
96
|
+
'properties' => {
|
97
|
+
'Name' => { 'type' => 'string' },
|
98
|
+
'Code' => { 'type' => 'string' }
|
99
|
+
}
|
100
|
+
}
|
101
|
+
JSON::Validator.validate!(schema, course_template_data, validate_schema: true)
|
102
|
+
end
|
103
|
+
|
104
|
+
# This is the primary method utilized to update course templates. As only the
|
105
|
+
# Name and the Code can be changed in an update, they are pre-defined to
|
106
|
+
# conform to the required update data. The update is then performed via a
|
107
|
+
# PUT http method that is executed using a path referencing the course template.
|
108
|
+
# /d2l/api/lp/(version)/coursetemplates/(orgUnitId) [PUT]
|
109
|
+
def update_course_template(org_unit_id, new_data)
|
110
|
+
# Define a valid, empty payload and merge! with the new data.
|
111
|
+
payload = { 'Name' => '', # String
|
112
|
+
'Code' => 'off_SEMESTERCODE_STARNUM', # String
|
113
|
+
}.merge!(new_data)
|
114
|
+
puts "Updating course template #{org_unit_id}"
|
115
|
+
check_course_template_updated_data_validity(payload)
|
116
|
+
# ap payload
|
117
|
+
# requires: CourseTemplateInfo JSON block
|
118
|
+
# Define a path referencing the courses path
|
119
|
+
path = "/d2l/api/lp/#{$lp_ver}/coursetemplates/" + org_unit_id.to_s
|
120
|
+
_put(path, payload)
|
121
|
+
puts '[+] Course template update completed successfully'.green
|
64
122
|
end
|
65
123
|
|
124
|
+
################################################################################################
|
125
|
+
################################################################################################
|
126
|
+
|
127
|
+
###########################
|
128
|
+
# Additional Functions:####
|
129
|
+
###########################
|
130
|
+
|
131
|
+
|
132
|
+
|
66
133
|
# Instead of explicitly retrieving a single course template, this method uses
|
67
134
|
# the routing table to retrieve all of the organizations descendants with the
|
68
135
|
# outTypeId of 2. What this means is that it is literally retrieving any and all
|
@@ -102,64 +169,6 @@ def get_course_template_by_name(org_unit_name)
|
|
102
169
|
# return: JSON array of matching course template data objects
|
103
170
|
end
|
104
171
|
|
105
|
-
# Moreso a helper method, but this really just returns the schema of the
|
106
|
-
# course templates. This is predefined in the routing table, and retrieved via
|
107
|
-
# a GET http method.
|
108
|
-
#
|
109
|
-
# returns: JSON of course templates schema
|
110
|
-
# /d2l/api/lp/(version)/coursetemplates/schema [GET]
|
111
|
-
def get_course_templates_schema
|
112
|
-
path = "/d2l/api/lp/#{$lp_ver}/coursetemplates/schema"
|
113
|
-
_get(path)
|
114
|
-
# This action returns a JSON array of SchemaElement blocks.
|
115
|
-
end
|
116
|
-
|
117
|
-
# Checks if the updated course template data conforms to the valence api for the
|
118
|
-
# course template JSON object. If it does conform, then nothing happens and it
|
119
|
-
# simply returns true. If it does not conform, then the JSON validator raises
|
120
|
-
# an exception.
|
121
|
-
def check_course_template_updated_data_validity(course_template_data)
|
122
|
-
schema = {
|
123
|
-
'type' => 'object',
|
124
|
-
'required' => %w(Name Code),
|
125
|
-
'properties' => {
|
126
|
-
'Name' => { 'type' => 'string' },
|
127
|
-
'Code' => { 'type' => 'string' }
|
128
|
-
}
|
129
|
-
}
|
130
|
-
JSON::Validator.validate!(schema, course_template_data, validate_schema: true)
|
131
|
-
end
|
132
|
-
|
133
|
-
# This is the primary method utilized to update course templates. As only the
|
134
|
-
# Name and the Code can be changed in an update, they are pre-defined to
|
135
|
-
# conform to the required update data. The update is then performed via a
|
136
|
-
# PUT http method that is executed using a path referencing the course template.
|
137
|
-
# /d2l/api/lp/(version)/coursetemplates/(orgUnitId) [PUT]
|
138
|
-
def update_course_template(org_unit_id, new_data)
|
139
|
-
# Define a valid, empty payload and merge! with the new data.
|
140
|
-
payload = { 'Name' => '', # String
|
141
|
-
'Code' => 'off_SEMESTERCODE_STARNUM', # String
|
142
|
-
}.merge!(new_data)
|
143
|
-
puts "Updating course template #{org_unit_id}"
|
144
|
-
check_course_template_updated_data_validity(payload)
|
145
|
-
# ap payload
|
146
|
-
# requires: CourseTemplateInfo JSON block
|
147
|
-
# Define a path referencing the courses path
|
148
|
-
path = "/d2l/api/lp/#{$lp_ver}/coursetemplates/" + org_unit_id.to_s
|
149
|
-
_put(path, payload)
|
150
|
-
puts '[+] Course template update completed successfully'.green
|
151
|
-
end
|
152
|
-
|
153
|
-
# Simply, a course template can be deleted by refencing it using its Identifier
|
154
|
-
# as an argument for this method. The argument is then used to refernce the obj
|
155
|
-
# by a path and then the path is passed in for a delete http method.
|
156
|
-
# /d2l/api/lp/(version)/coursetemplates/(orgUnitId) [DELETE]
|
157
|
-
def delete_course_template(org_unit_id)
|
158
|
-
path = "/d2l/api/lp/#{$lp_ver}/coursetemplates/#{org_unit_id}"
|
159
|
-
_delete(path)
|
160
|
-
puts '[+] Course template data deleted successfully'.green
|
161
|
-
end
|
162
|
-
|
163
172
|
# As a more streamlined approach to deleting many course templates conforming to
|
164
173
|
# a particular naming style, this function performs deletions based on a string.
|
165
174
|
# Using the name argument, +get_course_template_by_name+ is called in order to
|
@@ -174,6 +183,6 @@ def delete_all_course_templates_with_name(name)
|
|
174
183
|
end
|
175
184
|
end
|
176
185
|
|
177
|
-
#
|
186
|
+
# TODO: Delete course templates by using regular expressions to filter them.
|
178
187
|
def delete_course_templates_by_regex(regex)
|
179
188
|
end
|
data/lib/d2l_sdk/demographics.rb
CHANGED
@@ -2,11 +2,9 @@ require_relative 'requests'
|
|
2
2
|
require 'json-schema'
|
3
3
|
|
4
4
|
########################
|
5
|
-
#
|
5
|
+
# ACTIONS:##############
|
6
6
|
########################
|
7
7
|
|
8
|
-
###### Actions
|
9
|
-
|
10
8
|
# Delete one or more of a particular user's associated demographics entries.
|
11
9
|
# if no entries specified, it DELETES ALL.
|
12
10
|
# entry_ids are added as additional variables
|
@@ -17,45 +15,69 @@ def delete_user_demographics(user_id, entry_ids = '')
|
|
17
15
|
_delete(path)
|
18
16
|
end
|
19
17
|
|
18
|
+
# Retrieve all the demographics entries for all users enrolled in an OU
|
20
19
|
# optional params: fieldIds, roleIds, and userIds are CSV formatted Strings
|
21
20
|
# search and bookmark are Strings
|
22
|
-
# retrieve all the demographics entries for all users enrolled in an OU
|
23
21
|
def get_all_demographics_by_org_unit(org_unit_id, field_ids = '', role_ids = '',
|
24
22
|
user_ids = '', search = '', bookmark = '')
|
25
23
|
path = "/d2l/api/lp/#{$lp_ver}/demographics/orgUnits/#{org_unit_id}/users/"
|
26
|
-
path += "?
|
27
|
-
path += "
|
28
|
-
path += "
|
29
|
-
path += "
|
30
|
-
path += "
|
24
|
+
path += "?"
|
25
|
+
path += "fieldIds=#{field_ids}&" if field_ids != ''
|
26
|
+
path += "roleIds=#{role_ids}&" if role_ids != ''
|
27
|
+
path += "userIds=#{user_ids}&" if user_ids != ''
|
28
|
+
path += "search=#{search}&" if search != ''
|
29
|
+
path += "bookmark=#{bookmark}&" if bookmark != ''
|
31
30
|
_get(path)
|
32
31
|
# returns paged result set of DemographicsUserEntryData JSON blocks
|
33
32
|
end
|
34
33
|
|
35
|
-
#
|
34
|
+
# Retrieve all the demographics entries for a specific user within an OU
|
36
35
|
def get_all_demographics_by_org_unit_by_user(org_unit_id, user_id, field_ids = '')
|
37
36
|
path = "/d2l/api/lp/#{$lp_ver}/demographics/orgUnits/#{org_unit_id}/users/(#{user_id})"
|
38
|
-
path += "
|
37
|
+
path += "?fieldIds=#{field_ids}" if field_ids != ''
|
39
38
|
_get(path)
|
40
39
|
# returns DemographicsUserEntryData JSON block
|
41
40
|
end
|
42
41
|
|
43
|
-
#
|
42
|
+
# Retrieve all demographics entries for all users with specified filters
|
44
43
|
def get_all_demographics(field_ids = '', role_ids = '', user_ids = '',
|
45
44
|
search = '', bookmark = '')
|
46
45
|
path = "/d2l/api/lp/#{$lp_ver}/demographics/users/"
|
47
|
-
path += "
|
48
|
-
path += "
|
49
|
-
path += "
|
50
|
-
path += "
|
51
|
-
path += "
|
46
|
+
path += "?"
|
47
|
+
path += "fieldIds=#{field_ids}&" if field_ids != ''
|
48
|
+
path += "roleIds=#{role_ids}&" if role_ids != ''
|
49
|
+
path += "userIds=#{user_ids}&" if user_ids != ''
|
50
|
+
path += "search=#{search}&" if search != ''
|
51
|
+
path += "bookmark=#{bookmark}" if bookmark != ''
|
52
52
|
_get(path)
|
53
53
|
# returns paged result set of DemographicsUserEntryData JSON blocks
|
54
54
|
end
|
55
55
|
|
56
|
+
# Retrieve all the demographics entries for a single user.
|
57
|
+
def get_user_demographics(user_id, field_ids = '', bookmark = '')
|
58
|
+
path = "/d2l/api/lp/#{$lp_ver}/demographics/users/#{user_id}"
|
59
|
+
path += "?"
|
60
|
+
path += "fieldIds=#{field_ids}&" if field_ids != ''
|
61
|
+
path += "bookmark=#{bookmark}" if bookmark != ''
|
62
|
+
end
|
63
|
+
|
64
|
+
# TODO: Update the demographics entries for a single user.
|
65
|
+
# Return: a DemographicsUserEntryData JSON block containing the user’s updated entries.
|
66
|
+
def update_user_demographics(user_id, demographics_entry_data)
|
67
|
+
# PUT /d2l/api/lp/(version)/demographics/users/(userId)
|
68
|
+
end
|
56
69
|
|
57
|
-
|
58
|
-
|
70
|
+
########################
|
71
|
+
## FIELDS:##############
|
72
|
+
########################
|
73
|
+
|
74
|
+
# REVIEW: Delete a single demographic field, provided it has no associated entries.
|
75
|
+
def delete_demographics_field(field_id)
|
76
|
+
path = "/d2l/api/lp/#{$lp_ver}/demographics/fields/#{field_id}"
|
77
|
+
_delete(path)
|
78
|
+
end
|
79
|
+
|
80
|
+
# Retrieve list of all demographics fields
|
59
81
|
def get_all_demographic_fields(bookmark = '')
|
60
82
|
path = "/d2l/api/lp/#{$lp_ver}/demographics/fields/"
|
61
83
|
path += "#{bookmark}" if bookmark != ''
|
@@ -63,16 +85,34 @@ def get_all_demographic_fields(bookmark = '')
|
|
63
85
|
# returns paged result set of DemographicsField JSON blocks
|
64
86
|
end
|
65
87
|
|
66
|
-
#
|
88
|
+
# Retrieve a single demographic field
|
67
89
|
def get_demographic_field(field_id)
|
68
90
|
path = "/d2l/api/lp/#{$lp_ver}/demographics/fields/#{field_id}"
|
69
91
|
_get(path)
|
70
92
|
# returns fetch form of DemographicsField JSON block
|
71
93
|
end
|
72
94
|
|
73
|
-
|
95
|
+
# TODO: Create new demographic field
|
96
|
+
# Input: DemographicsField (Demographics.Demographicsfield)
|
97
|
+
# RETURNS: fetch form of a DemographicsField JSON block
|
98
|
+
def create_demographic_field(demographics_field)
|
99
|
+
# POST /d2l/api/lp/(version)/demographics/fields/
|
100
|
+
# RETURNS: fetch form of a DemographicsField JSON block
|
101
|
+
end
|
102
|
+
|
103
|
+
# TODO: Update demographic field
|
104
|
+
# Input: DemographicsField (Demographics.Demographicsfield)
|
105
|
+
# RETURNS: fetch form of a DemographicsField JSON block
|
106
|
+
def create_demographic_field(field_id, demographics_field)
|
107
|
+
# PUT /d2l/api/lp/(version)/demographics/fields/(fieldId)
|
108
|
+
# RETURNS: fetch form of a DemographicsField JSON block
|
109
|
+
end
|
110
|
+
|
111
|
+
########################
|
112
|
+
## DATA TYPES:##########
|
113
|
+
########################
|
74
114
|
|
75
|
-
#
|
115
|
+
# Retrieve the list of all demographics data types
|
76
116
|
# uses DataTypeId's as a paging control value
|
77
117
|
def get_all_demographic_types(bookmark = '')
|
78
118
|
path = "/d2l/api/lp/#{$lp_ver}/demographics/dataTypes/"
|