d2l_sdk 0.1.8 → 0.1.9
Sign up to get free protection for your applications and to get access to all the features.
- 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
data/lib/d2l_sdk/requests.rb
CHANGED
@@ -108,10 +108,11 @@ end
|
|
108
108
|
|
109
109
|
# Performs a delete request by creating an authenticated uri and using the
|
110
110
|
# RestClient delete method and specifying the content_type as being JSON.
|
111
|
-
def _delete(path, isD2l = true)
|
111
|
+
def _delete(path, isD2l = true, headers = {})
|
112
|
+
headers[:content_type] = :json
|
112
113
|
auth_uri = path
|
113
114
|
auth_uri = create_authenticated_uri(path, 'DELETE') if isD2l == true
|
114
|
-
RestClient.delete(auth_uri,
|
115
|
+
RestClient.delete(auth_uri, headers)
|
115
116
|
end
|
116
117
|
|
117
118
|
# based upon the specific code that is returned from the http method, this
|
@@ -182,18 +183,6 @@ def get_latest_product_version(product_code)
|
|
182
183
|
end
|
183
184
|
end
|
184
185
|
|
185
|
-
# init products to newest versions.
|
186
|
-
$le_ver = get_latest_product_version('le')
|
187
|
-
$lp_ver = get_latest_product_version('lp')
|
188
|
-
$ep_ver = get_latest_product_version('ep')
|
189
|
-
#lti, rp, LR, ext,
|
190
|
-
puts "versions set to:"
|
191
|
-
versions = {
|
192
|
-
"le_ver" => $le_ver,
|
193
|
-
"lp_ver" => $lp_ver,
|
194
|
-
"ep_ver" => $ep_ver
|
195
|
-
}
|
196
|
-
ap versions
|
197
186
|
# retrieve all supported versions for all product components
|
198
187
|
def get_versions
|
199
188
|
path = "/d2l/api/versions/"
|
data/lib/d2l_sdk/section.rb
CHANGED
@@ -11,58 +11,6 @@ def delete_section(org_unit_id, section_id)
|
|
11
11
|
_delete(path)
|
12
12
|
end
|
13
13
|
|
14
|
-
##########
|
15
|
-
# WesternOnline Specific GET Section ID by Code
|
16
|
-
##########
|
17
|
-
def create_semester_code(star_num, course_date)
|
18
|
-
"sec_#{course_date}_#{star_num}"
|
19
|
-
end
|
20
|
-
|
21
|
-
def get_section_by_section_code(code)
|
22
|
-
_get("/d2l/api/lp/1.4/orgstructure/?orgUnitCode=#{code}")["Items"][0]
|
23
|
-
end
|
24
|
-
|
25
|
-
def get_section_id_by_section_code(code)
|
26
|
-
get_section_by_section_code(code)["Identifier"]
|
27
|
-
end
|
28
|
-
|
29
|
-
def get_section_data_by_code(code)
|
30
|
-
sect_id = get_section_by_section_code(code)["Identifier"]
|
31
|
-
parent_id = get_org_unit_parents(sect_id)[0]["Identifier"]
|
32
|
-
get_section_data(parent_id, sect_id)
|
33
|
-
end
|
34
|
-
=begin
|
35
|
-
def get_section_by_offering_code(code)
|
36
|
-
section_data = 0
|
37
|
-
parent_course = nil
|
38
|
-
courses = get_courses_by_code(code)
|
39
|
-
if courses.size > 1 # If the course code matches two codes..should be CL then
|
40
|
-
courses.each do |course| # iterate through each course...should be < 3
|
41
|
-
if course["Code"].include? "cl_off"
|
42
|
-
parent_course = course
|
43
|
-
end
|
44
|
-
end
|
45
|
-
# ELSE IF no course with "cl_off" found: Not properly cross listed
|
46
|
-
if parent_course == nil
|
47
|
-
puts "More than two courses with same code index; No proper crosslisting"
|
48
|
-
end
|
49
|
-
end
|
50
|
-
# get all sections of the course offering
|
51
|
-
sections = get_org_unit_sections(parent_course["Identifier"])
|
52
|
-
sections.each do |sect|
|
53
|
-
if sect["Code"].include? code[-5..-1]
|
54
|
-
section_data = sect
|
55
|
-
end
|
56
|
-
end
|
57
|
-
return section_data
|
58
|
-
end
|
59
|
-
|
60
|
-
def get_section_id_by_section_code(code)
|
61
|
-
get_section_data_by_code(code)["SectionId"]
|
62
|
-
end
|
63
|
-
=end
|
64
|
-
############
|
65
|
-
############
|
66
14
|
# Retrieve all the sections for a provided org unit.
|
67
15
|
def get_org_unit_sections(org_unit_id)
|
68
16
|
path = "/d2l/api/lp/#{$lp_ver}/#{org_unit_id}/sections/"
|
@@ -193,6 +141,7 @@ def update_org_unit_section_properties(org_unit_id, section_property_data)
|
|
193
141
|
# for the org unit’s updated section properties.
|
194
142
|
end
|
195
143
|
|
144
|
+
# Update information for a section in a particular org unit.
|
196
145
|
def update_org_unit_section_info(org_unit_id, section_id, section_data)
|
197
146
|
payload = { 'Name' => '', # String
|
198
147
|
'Code' => '', # String
|
@@ -205,3 +154,79 @@ def update_org_unit_section_info(org_unit_id, section_id, section_data)
|
|
205
154
|
_put(path, payload)
|
206
155
|
# returns the SectionData JSON block, in its Fetch form
|
207
156
|
end
|
157
|
+
|
158
|
+
#########################################################
|
159
|
+
# WesternOnline Specific GET Section ID by Code##########
|
160
|
+
#########################################################
|
161
|
+
# NOTE: These are additional functions that were primarily made to work with
|
162
|
+
# the Western Illinois University brightspace instance. Most will work
|
163
|
+
# universally, but others may be of no use outside our specific instance.
|
164
|
+
|
165
|
+
# creates a properly formatted section code, based on WIU's standard
|
166
|
+
# section code.
|
167
|
+
# RETURNS: formatted section code
|
168
|
+
def create_section_code(star_num, course_date)
|
169
|
+
"sec_#{course_date}_#{star_num}"
|
170
|
+
end
|
171
|
+
|
172
|
+
# retrieves all sections with the same code.
|
173
|
+
# NOTE: As the code SHOULD be unique, this function assumes that the returned
|
174
|
+
# item is the requested item.
|
175
|
+
def get_section_by_section_code(code)
|
176
|
+
path = "/d2l/api/lp/#{$lp_ver}/orgstructure/?orgUnitCode=#{code}"
|
177
|
+
_get(path)["Items"][0]
|
178
|
+
# RETURNS: SectionData block
|
179
|
+
end
|
180
|
+
|
181
|
+
# Simple bridge function that allows for the retrieval of a section's ID
|
182
|
+
# based on its section code.
|
183
|
+
# NOTE: Again, As the code SHOULD be unique, this function assumes that the
|
184
|
+
# returned item is the requested item.
|
185
|
+
def get_section_id_by_section_code(code)
|
186
|
+
get_section_by_section_code(code)["Identifier"]
|
187
|
+
# RETURNS: D2LID of the section identified by its section code
|
188
|
+
end
|
189
|
+
|
190
|
+
# Simple bridge function allowing for retrieval of section data by using
|
191
|
+
# the section's code. As D2L does not allow for accessing the SectionData block
|
192
|
+
# without using a parent's id, this retrieves the parents id and allows for
|
193
|
+
# such functionality.
|
194
|
+
def get_section_data_by_code(code)
|
195
|
+
sect_id = get_section_by_section_code(code)["Identifier"]
|
196
|
+
parent_id = get_org_unit_parents(sect_id)[0]["Identifier"]
|
197
|
+
get_section_data(parent_id, sect_id)
|
198
|
+
end
|
199
|
+
|
200
|
+
=begin
|
201
|
+
# IDEA::
|
202
|
+
def get_section_by_offering_code(code)
|
203
|
+
section_data = 0
|
204
|
+
parent_course = nil
|
205
|
+
courses = get_courses_by_code(code)
|
206
|
+
if courses.size > 1 # If the course code matches two codes..should be CL then
|
207
|
+
courses.each do |course| # iterate through each course...should be < 3
|
208
|
+
if course["Code"].include? "cl_off"
|
209
|
+
parent_course = course
|
210
|
+
end
|
211
|
+
end
|
212
|
+
# ELSE IF no course with "cl_off" found: Not properly cross listed
|
213
|
+
if parent_course == nil
|
214
|
+
puts "More than two courses with same code index; No proper crosslisting"
|
215
|
+
end
|
216
|
+
end
|
217
|
+
# get all sections of the course offering
|
218
|
+
sections = get_org_unit_sections(parent_course["Identifier"])
|
219
|
+
sections.each do |sect|
|
220
|
+
if sect["Code"].include? code[-5..-1]
|
221
|
+
section_data = sect
|
222
|
+
end
|
223
|
+
end
|
224
|
+
return section_data
|
225
|
+
end
|
226
|
+
|
227
|
+
def get_section_id_by_section_code(code)
|
228
|
+
get_section_data_by_code(code)["SectionId"]
|
229
|
+
end
|
230
|
+
=end
|
231
|
+
############
|
232
|
+
############
|
data/lib/d2l_sdk/semester.rb
CHANGED
@@ -4,6 +4,9 @@ require 'json-schema'
|
|
4
4
|
########################
|
5
5
|
# SEMESTER:#############
|
6
6
|
########################
|
7
|
+
# NOTE: These functions are supplementary to the basic +org unit+ functions
|
8
|
+
# provided by the valence API. These simply provide a little more tailored
|
9
|
+
# functionality to this particular org unit type.
|
7
10
|
|
8
11
|
# Checks if the created semester data conforms to the valence api for the
|
9
12
|
# semester JSON object. If it does conform, then nothing happens and it
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require_relative "requests"
|
2
|
+
|
3
|
+
# init products to newest versions.
|
4
|
+
$le_ver = get_latest_product_version('le')
|
5
|
+
$lp_ver = get_latest_product_version('lp')
|
6
|
+
$ep_ver = get_latest_product_version('ep')
|
7
|
+
#lti, rp, LR, ext,
|
8
|
+
puts "versions set to:"
|
9
|
+
versions = {
|
10
|
+
"le_ver" => $le_ver,
|
11
|
+
"lp_ver" => $lp_ver,
|
12
|
+
"ep_ver" => $ep_ver
|
13
|
+
}
|
14
|
+
ap versions
|
data/lib/d2l_sdk/user.rb
CHANGED
@@ -59,11 +59,11 @@ def create_user_data(user_data)
|
|
59
59
|
end
|
60
60
|
|
61
61
|
# Retrieves the whoami of the user authenticated through the config file.
|
62
|
-
#
|
62
|
+
# RETURNS: JSON whoami response
|
63
63
|
def get_whoami
|
64
64
|
path = "/d2l/api/lp/#{$lp_ver}/users/whoami"
|
65
65
|
_get(path)
|
66
|
-
#
|
66
|
+
# RETURNS: a WhoAmIUser JSON block for the current user context
|
67
67
|
end
|
68
68
|
|
69
69
|
# Simple get users function that assists in retrieving users by particular
|
@@ -193,12 +193,12 @@ end
|
|
193
193
|
# known as the Identifier of this user object. Upon retrieving the user, it
|
194
194
|
# is then returned.
|
195
195
|
#
|
196
|
-
#
|
196
|
+
# RETURNS: JSON user object.
|
197
197
|
def get_user_by_user_id(user_id)
|
198
198
|
# Retrieve data for a particular user
|
199
199
|
path = "/d2l/api/lp/#{$lp_ver}/users/#{user_id}"
|
200
200
|
_get(path)
|
201
|
-
#
|
201
|
+
# RETURNS: a UserData JSON block
|
202
202
|
end
|
203
203
|
|
204
204
|
# Checks whether the updated user data conforms to the valence api for the
|
@@ -268,21 +268,108 @@ def delete_user_data(user_id)
|
|
268
268
|
puts '[+] User data deleted successfully'.green
|
269
269
|
end
|
270
270
|
|
271
|
-
|
272
|
-
#
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
271
|
+
########################
|
272
|
+
# ACTIVATION:###########
|
273
|
+
########################
|
274
|
+
# REVIEW: Retrieve a particular user’s activation settings.
|
275
|
+
# RETURNS: a UserActivationData JSON block with the user’s current activation status.
|
276
|
+
def get_user_activation_settings(user_id)
|
277
|
+
path = "/d2l/api/lp/#{$lp_ver}/users/#{user_id}/activation"
|
277
278
|
_get(path)
|
278
|
-
#
|
279
|
+
# RETURNS: a UserActivationData JSON block with the user’s current activation status.
|
280
|
+
end
|
281
|
+
|
282
|
+
# TODO: Update a particular user’s activation settings.
|
283
|
+
# RETURNS: ?
|
284
|
+
def update_user_activation_settings(user_id, user_activation_data)
|
285
|
+
# PUT /d2l/api/lp/(version)/users/(userId)/activation
|
286
|
+
# RETURNS: ?
|
287
|
+
end
|
288
|
+
|
289
|
+
########################
|
290
|
+
# INTEGRATIONS:#########
|
291
|
+
########################
|
292
|
+
|
293
|
+
# NOTE: UNSTABLE!
|
294
|
+
# TODO: Link a user to a Google Apps user account.
|
295
|
+
# RETURNS: ?
|
296
|
+
def link_user_google_apps_account(google_apps_linking_item)
|
297
|
+
# POST /d2l/api/gae/(version)/linkuser
|
298
|
+
end
|
299
|
+
|
300
|
+
|
301
|
+
########################
|
302
|
+
# NOTIFICATIONS:########
|
303
|
+
########################
|
304
|
+
|
305
|
+
# REVIEW: Delete the subscription for messages of a particular type,
|
306
|
+
# delivered by a particular carrier.
|
307
|
+
def delete_subscription(carrier_id, message_type_id)
|
308
|
+
path = "/d2l/api/lp/#{$lp_ver}/notifications/instant/carriers/#{carrier_id}/subscriptions/#{message_type_id}"
|
309
|
+
_delete(path)
|
310
|
+
end
|
311
|
+
|
312
|
+
# Retrieve all the carrier channels for delivering notification messages.
|
313
|
+
# RETURNS: a JSON array of CarrierOutput data blocks.
|
314
|
+
def get_all_notification_carrier_channels
|
315
|
+
path = "/d2l/api/lp/#{$lp_ver}/notifications/instant/carriers/"
|
316
|
+
_get(path)
|
317
|
+
end
|
318
|
+
|
319
|
+
# Retrieve all the current subscriptions for notification messages.
|
320
|
+
# RETURNS: a JSON array of SubscriptionOutput data blocks.
|
321
|
+
def get_all_subscriptions_by_carrier(carrier_id)
|
322
|
+
path = "/d2l/api/lp/#{$lp_ver}/notifications/instant/carriers/#{carrier_id}/subscriptions/"
|
323
|
+
_get(path)
|
324
|
+
end
|
325
|
+
|
326
|
+
# Subscribe to notification messages of a particular type, delivered by a particular carrier.
|
327
|
+
def subscribe_to_carrier_notification(carrier_id, message_type_id)
|
328
|
+
path = "/d2l/api/lp/#{$lp_ver}/notifications/instant/carriers/#{carrier_id}/subscriptions/#{message_type_id}"
|
329
|
+
_put(path, {})
|
279
330
|
end
|
280
331
|
|
332
|
+
########################
|
333
|
+
# PASSWORDS:############
|
334
|
+
########################
|
335
|
+
|
336
|
+
# REVIEW: Clear a particular user’s password.
|
337
|
+
def delete_user_password(user_id)
|
338
|
+
path = "/d2l/api/lp/#{$lp_ver}/users/#{user_id}/password"
|
339
|
+
_delete(path)
|
340
|
+
end
|
341
|
+
|
342
|
+
# REVIEW: Reset a particular user’s password.
|
343
|
+
# INPUT: nil (no payload necessary)
|
344
|
+
# NOTE: Prompts the service to send a password-reset email to the provided user.
|
345
|
+
def reset_user_password(user_id)
|
346
|
+
path = "/d2l/api/lp/#{$lp_ver}/users/#{user_id}/password"
|
347
|
+
_post(path, {})
|
348
|
+
end
|
349
|
+
|
350
|
+
# REVIEW: Update a particular user’s password.
|
351
|
+
# NOTE: 400 errors are implicitly invalid password
|
352
|
+
def update_user_password(user_id, user_password_data)
|
353
|
+
if user_password_data.is_a? String
|
354
|
+
path = "/d2l/api/lp/#{$lp_ver}/users/#{user_id}/password"
|
355
|
+
payload = {"Password" => user_password_data}
|
356
|
+
_put(path, payload)
|
357
|
+
else
|
358
|
+
raise ArgumentError, "Argument 'user_password_data' is not a String"
|
359
|
+
end
|
360
|
+
end
|
361
|
+
|
362
|
+
|
363
|
+
|
364
|
+
########################
|
365
|
+
# ROLES:################
|
366
|
+
########################
|
367
|
+
|
281
368
|
# retrieve list of all known user roles
|
282
369
|
def get_all_user_roles
|
283
370
|
path = "/d2l/api/lp/#{$lp_ver}/roles/"
|
284
371
|
_get(path)
|
285
|
-
#
|
372
|
+
# RETURNS: a JSON array of Role data blocks
|
286
373
|
end
|
287
374
|
|
288
375
|
# Retrieve a particular user role
|
@@ -292,19 +379,66 @@ def get_user_role(role_id)
|
|
292
379
|
# returns a Role JSON data block
|
293
380
|
end
|
294
381
|
|
382
|
+
# Retrieve a list of all the enrolled user roles the calling user can view
|
383
|
+
# in an org unit
|
384
|
+
def get_enrolled_roles_in_org_unit(org_unit_id)
|
385
|
+
# this only lists ones viewable by the CALLING user
|
386
|
+
# also, only includes roles that are enrolled in the org unit
|
387
|
+
path = "/d2l/api/#{$lp_ver}/#{org_unit_id}/roles/"
|
388
|
+
_get(path)
|
389
|
+
# returns JSON array of Role data blocks
|
390
|
+
end
|
391
|
+
|
392
|
+
# TODO: --UNSTABLE -- Create a new role copied from an existing role.
|
393
|
+
# INPUT: deep_copy_role_id = d2lID; role_copy_data = User.role_copy_data
|
394
|
+
# RETURN: a Role JSON data block representing the newly-created copy of the role.
|
395
|
+
def create_new_role_from_existing_role(deep_copy_role_id, role_copy_data)
|
396
|
+
# POST /d2l/api/lp/(version)/roles/
|
397
|
+
end
|
398
|
+
|
399
|
+
|
400
|
+
########################
|
401
|
+
# PROFILES:#############
|
402
|
+
########################
|
403
|
+
|
404
|
+
# REVIEW: Remove the current user’s profile image.
|
405
|
+
def remove_current_user_profile_image
|
406
|
+
path = "/d2l/api/lp/#{$lp_ver}/profile/myProfile/image"
|
407
|
+
_delete(path)
|
408
|
+
end
|
409
|
+
|
410
|
+
# REVIEW: Remove the profile image from a particular personal profile, by Profile ID.
|
411
|
+
def remove_profile_image_by_profile_id(profile_id)
|
412
|
+
path = "/d2l/api/lp/#{$lp_ver}/profile/#{profile_id}/image"
|
413
|
+
_delete(path)
|
414
|
+
end
|
415
|
+
|
416
|
+
# REVIEW: Remove the profile image from a particular personal profile, by User ID.
|
417
|
+
def remove_profile_image_by_user_id(user_id)
|
418
|
+
path = "/d2l/api/lp/#{$lp_ver}/profile/user/#{user_id}/image"
|
419
|
+
_delete(path)
|
420
|
+
end
|
295
421
|
|
296
422
|
# retrieve personal profile info for the current user context
|
423
|
+
# Returns: UserProfile JSON data block
|
297
424
|
def get_current_user_profile
|
298
425
|
path = "/d2l/api/lp/#{$lp_ver}/profile/myProfile"
|
299
426
|
_get(path)
|
300
|
-
# Returns UserProfile JSON data block
|
427
|
+
# Returns: UserProfile JSON data block
|
301
428
|
end
|
302
429
|
|
303
|
-
#
|
304
|
-
|
305
|
-
|
430
|
+
# Retrieve the current user’s profile image.
|
431
|
+
# INPUT: size (integer) determines the thumbnail size
|
432
|
+
# RETURNS: This action returns a file stream containing the current user’s
|
433
|
+
# profile image. Note that the back-end service may return a
|
434
|
+
# profile image larger than your provided size.
|
435
|
+
def get_current_user_profile_image(size = 0)
|
436
|
+
path = "/d2l/api/lp/#{$lp_ver}/profile/myProfile/image"
|
437
|
+
path += "?size=#{size}" if size != 0
|
306
438
|
_get(path)
|
307
|
-
#
|
439
|
+
# RETURNS: This action returns a file stream containing the current user’s
|
440
|
+
# profile image. Note that the back-end service may return a
|
441
|
+
# profile image larger than your provided size.
|
308
442
|
end
|
309
443
|
|
310
444
|
# retrieve a particular personal profile, by Profile ID
|
@@ -314,107 +448,239 @@ def get_user_profile_by_profile_id(profile_id)
|
|
314
448
|
# Returns UserProfile JSON data block
|
315
449
|
end
|
316
450
|
|
451
|
+
# Retrieve a particular profile image, by Profile ID.
|
452
|
+
# RETURNS: This action returns a file stream containing the current user’s
|
453
|
+
# profile image. Note that the back-end service may return a
|
454
|
+
# profile image larger than your provided size.
|
317
455
|
def get_profile_image(profile_id, size = 0)
|
318
456
|
path = "/d2l/api/lp/#{$lp_ver}/profile/#{profile_id}/image"
|
319
457
|
path += "?size=#{size}" if size != 0
|
320
458
|
_get(path)
|
459
|
+
# RETURNS: This action returns a file stream containing the current user’s
|
460
|
+
# profile image. Note that the back-end service may return a
|
461
|
+
# profile image larger than your provided size.
|
321
462
|
end
|
322
463
|
|
323
|
-
|
324
|
-
|
325
|
-
path
|
464
|
+
# Retrieve a particular personal profile, by User ID.
|
465
|
+
def get_user_profile_by_user_id(user_id)
|
466
|
+
path = "/d2l/api/lp/#{$lp_ver}/profile/user/#{user_id}"
|
326
467
|
_get(path)
|
468
|
+
# Returns UserProfile JSON data block
|
327
469
|
end
|
328
470
|
|
471
|
+
|
472
|
+
# Retrieve a particular profile image, by User ID.
|
473
|
+
# RETURNS: This action returns a file stream containing the current user’s
|
474
|
+
# profile image. Note that the back-end service may return a
|
475
|
+
# profile image larger than your provided size.
|
329
476
|
def get_user_profile_image(user_id)
|
330
477
|
path = "/d2l/api/lp/#{$lp_ver}/profile/user/#{user_id}"
|
331
478
|
path += "?size=#{size}" if size != 0
|
332
479
|
_get(path)
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
480
|
+
# RETURNS: This action returns a file stream containing the current user’s
|
481
|
+
# profile image. Note that the back-end service may return a
|
482
|
+
# profile image larger than your provided size.
|
483
|
+
end
|
484
|
+
|
485
|
+
# TODO: Update the personal profile image for the current user context.
|
486
|
+
# INPUT: Provide an uploaded image file using the simple file upload process;
|
487
|
+
# the content-disposition part header for the file part should have the
|
488
|
+
# name profileImage
|
489
|
+
# http://docs.valence.desire2learn.com/basic/fileupload.html#simple-uploads
|
490
|
+
# RETURNS: ?
|
491
|
+
def update_current_user_profile_image()
|
492
|
+
# POST /d2l/api/lp/(version)/profile/myProfile/image
|
493
|
+
# RETURNS: ?
|
494
|
+
end
|
495
|
+
|
496
|
+
# TODO: Update the profile image for the identified personal profile, by Profile ID.
|
497
|
+
# INPUT: Provide an uploaded image file using the simple file upload process;
|
498
|
+
# the content-disposition part header for the file part should have the
|
499
|
+
# name profileImage
|
500
|
+
# http://docs.valence.desire2learn.com/basic/fileupload.html#simple-uploads
|
501
|
+
# RETURNS: ?
|
502
|
+
def update_profile_image_by_profile_id
|
503
|
+
# POST /d2l/api/lp/(version)/profile/(profileId)/image
|
504
|
+
# RETURNS: ?
|
505
|
+
end
|
506
|
+
|
507
|
+
# TODO: Update the profile image for the identified personal profile, by User ID.
|
508
|
+
# INPUT: Provide an uploaded image file using the simple file upload process;
|
509
|
+
# the content-disposition part header for the file part should have the
|
510
|
+
# name profileImage
|
511
|
+
# http://docs.valence.desire2learn.com/basic/fileupload.html#simple-uploads
|
512
|
+
# RETURNS: ?
|
513
|
+
def update_profile_image_by_user_id
|
514
|
+
# POST /d2l/api/lp/(version)/profile/user/(userId)/image
|
515
|
+
# RETURNS: ?
|
516
|
+
end
|
517
|
+
|
518
|
+
# TODO: Update the personal profile data for the current user context.
|
519
|
+
# NOTE: block's data will replace all user profile data
|
520
|
+
# RETURNS: a UserProfile JSON data block for the updated current user profile.
|
521
|
+
def update_current_user_profile_data(user_profile_data)
|
522
|
+
# PUT /d2l/api/lp/(version)/profile/myProfile
|
523
|
+
end
|
524
|
+
|
525
|
+
# TODO: Update a particular personal profile, by Profile ID.
|
526
|
+
# NOTE: block's data will replace all user profile data
|
527
|
+
# RETURNS: a UserProfile JSON data block for the updated personal profile.
|
528
|
+
def update_profile_by_profile_id(profile_id, user_profile_data)
|
529
|
+
# PUT /d2l/api/lp/(version)/profile/(profileId)
|
530
|
+
# NOTE: Example of User.UserProfile JSON Data Block
|
531
|
+
# { "Nickname": <string>,
|
532
|
+
# "Birthday": {
|
533
|
+
# "Month": <number>,
|
534
|
+
# "Day": <number>
|
535
|
+
# },
|
536
|
+
# "HomeTown": <string>,
|
537
|
+
# "Email": <string>,
|
538
|
+
# "HomePage": <string>,
|
539
|
+
# "HomePhone": <string>,
|
540
|
+
# "BusinessPhone": <string>,
|
541
|
+
# "MobilePhone": <string>,
|
542
|
+
# "FaxNumber": <string>,
|
543
|
+
# "Address1": <string>,
|
544
|
+
# "Address2": <string>,
|
545
|
+
# "City": <string>,
|
546
|
+
# "Province": <string>,
|
547
|
+
# "PostalCode": <string>,
|
548
|
+
# "Country": <string>,
|
549
|
+
# "Company": <string>,
|
550
|
+
# "JobTitle": <string>,
|
551
|
+
# "HighSchool": <string>,
|
552
|
+
# "University": <string>,
|
553
|
+
# "Hobbies": <string>,
|
554
|
+
# "FavMusic": <string>,
|
555
|
+
# "FavTVShows": <string>,
|
556
|
+
# "FavMovies": <string>,
|
557
|
+
# "FavBooks": <string>,
|
558
|
+
# "FavQuotations": <string>,
|
559
|
+
# "FavWebSites": <string>,
|
560
|
+
# "FutureGoals": <string>,
|
561
|
+
# "FavMemory": <string>,
|
562
|
+
# "SocialMediaUrls": [ // Array of SocialMediaUrl blocks
|
563
|
+
# {
|
564
|
+
# "Name": <string>,
|
565
|
+
# "Url": <string:URL>
|
566
|
+
# },
|
567
|
+
# { <composite:SocialMediaUrl> }, ...
|
568
|
+
# ]
|
569
|
+
# }
|
570
|
+
# NOTE: The back-end service also expects a file names "profileImage"
|
571
|
+
# RETURNS: a UserProfile JSON data block for the updated personal profile.
|
572
|
+
end
|
573
|
+
|
574
|
+
#####################################
|
575
|
+
# IMS/LIS role configuration:########
|
576
|
+
#####################################
|
577
|
+
|
578
|
+
# NOTE: UNSTABLE
|
579
|
+
# REVIEW: retrieve list of known LIS roles
|
580
|
+
def get_lis_roles(lis_urn = "")
|
581
|
+
path = "/d2l/api/lp/#{$lp_ver}/imsconfig/roles/"
|
582
|
+
path += "#{lis_urn}" if lis_urn != ""
|
337
583
|
_get(path)
|
584
|
+
# returns array of LIS role data blocks
|
338
585
|
end
|
339
586
|
|
340
|
-
|
341
|
-
|
587
|
+
# NOTE: UNSTABLE
|
588
|
+
# REVIEW: retrieve mappings between user roles and LIS roles
|
589
|
+
def get_user_role_lis_mappings(lis_urn = "", d2lid = 0)
|
590
|
+
path = "/d2l/api/lp/#{$lp_ver}/imsconfig/map/roles/"
|
591
|
+
path += "#{lis_urn}" if lis_urn != ""
|
592
|
+
path += "#{d2lid}" if d2lid != 0
|
342
593
|
_get(path)
|
594
|
+
# returns JSON array of LIS role mapping data blocks
|
343
595
|
end
|
344
596
|
|
345
|
-
|
346
|
-
|
347
|
-
|
597
|
+
# NOTE: UNSTABLE
|
598
|
+
# REVIEW: retrieve mapping between a user role and a LIS role
|
599
|
+
def get_user_role_lis_mappings(role_id, d2lid = 0)
|
600
|
+
path = "/d2l/api/lp/#{$lp_ver}/imsconfig/map/roles/#{role_id}"
|
601
|
+
path += "#{d2lid}" if d2lid != 0
|
602
|
+
_get(path)
|
603
|
+
# returns JSON array of LIS role mapping data blocks
|
348
604
|
end
|
349
605
|
|
350
|
-
|
351
|
-
|
352
|
-
#
|
353
|
-
def
|
354
|
-
|
355
|
-
_get(path)
|
356
|
-
# returns Locale JSON block
|
606
|
+
# NOTE: UNSTABLE
|
607
|
+
# TODO: --UNSTABLE-- Map a user role to a set of LIS Roles.
|
608
|
+
# input: Mappings = String array
|
609
|
+
def map_user_role_to_lis_roles(role_id, mappings)
|
610
|
+
# PUT /d2l/api/lp/(version)/imsconfig/map/roles/(roleId)
|
357
611
|
end
|
358
612
|
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
613
|
+
|
614
|
+
########################
|
615
|
+
# SETTINGS:#############
|
616
|
+
########################
|
617
|
+
# NOTE: As the settings page only has 4 functions, these functions are simply
|
618
|
+
# appended to this, the most relevant file.
|
619
|
+
|
620
|
+
# REVIEW: Retrieve the current user’s locale account settings.
|
621
|
+
def get_current_user_locale_settings
|
622
|
+
path = "/d2l/api/lp/#{$lp_ver}/accountSettings/mySettings/locale/"
|
363
623
|
_get(path)
|
364
|
-
#
|
624
|
+
# RETURNS: a Locale JSON block
|
365
625
|
end
|
366
626
|
|
367
|
-
#
|
368
|
-
def
|
369
|
-
path = "/d2l/api/lp/#{$lp_ver}/
|
627
|
+
# REVIEW: retrieve the locale account settings for a particular user.
|
628
|
+
def get_locale_account_settings(user_id)
|
629
|
+
path = "/d2l/api/lp/#{$lp_ver}/accountSettings/#{user_id}/locale/"
|
370
630
|
_get(path)
|
371
631
|
# returns Locale JSON block
|
372
632
|
end
|
373
633
|
|
374
|
-
def is_valid_locale_id(locale_id)
|
375
634
|
|
376
635
|
|
636
|
+
# TODO: Add schema check for update_locale conforming to the D2L update_locale
|
637
|
+
# JSON data block of form: { "LocaleId" : <D2LID>}.
|
638
|
+
def is_valid_locale_id(locale_id)
|
639
|
+
|
377
640
|
end
|
378
641
|
|
379
|
-
# Update the current user
|
642
|
+
# REVIEW: Update the current user’s locale account settings.
|
643
|
+
# TODO: Add schema check for update_locale
|
644
|
+
# update_locale = { "LocaleId" : <D2LID>}
|
380
645
|
def update_current_user_locale_account_settings(update_locale)
|
381
646
|
payload = {"LocaleId" => 0}.merge!(update_locale)
|
382
647
|
path = "/d2l/api/lp/#{$lp_ver}/accountSettings/mysettings/locale/"
|
383
648
|
# requires UpdateSettings JSON data block
|
649
|
+
# update_locale = { "LocaleId" : <D2LID>}
|
384
650
|
_put(path, payload)
|
385
651
|
end
|
386
652
|
|
387
|
-
|
653
|
+
# REVIEW: Update the locale account settings for a particular user.
|
654
|
+
# TODO: Add schema check for update_locale
|
655
|
+
# update_locale = { "LocaleId" : <D2LID>}
|
656
|
+
def update_user_locale_account_settings(user_id, update_locale)
|
388
657
|
payload = {"LocaleId" => 0}.merge!(update_locale)
|
389
658
|
path = "/d2l/api/lp/#{$lp_ver}/accountSettings/#{user_id}/locale/"
|
390
659
|
# requires UpdateSettings JSON data block
|
660
|
+
# update_locale = { "LocaleId" : <D2LID>}
|
391
661
|
_put(path, payload)
|
392
662
|
end
|
393
663
|
|
664
|
+
########################
|
665
|
+
# LOCALE:###############
|
666
|
+
########################
|
667
|
+
# NOTE: As the locale page only has only 2 functions, these functions are simply
|
668
|
+
# appended to this, the most relevant file.
|
394
669
|
|
395
|
-
|
396
|
-
#
|
397
|
-
|
398
|
-
|
399
|
-
path
|
400
|
-
|
401
|
-
# returns array of LIS role data blocks
|
402
|
-
end
|
403
|
-
|
404
|
-
# retrieve mappings between user roles and LIS roles
|
405
|
-
def get_user_role_lis_mappings(lis_urn = "", d2lid = 0)
|
406
|
-
path = "/d2l/api/lp/#{$lp_ver}/imsconfig/map/roles/"
|
407
|
-
path += "#{lis_urn}" if lis_urn != ""
|
408
|
-
path += "#{d2lid}" if d2lid != 0
|
670
|
+
# NOTE: UNSTABLE
|
671
|
+
# optional parameter 'bookmark' for querying with a paging offset
|
672
|
+
# Retrieve the collection of all known locales.
|
673
|
+
def get_all_locales(bookmark = '')
|
674
|
+
path = "/d2l/api/lp/#{$lp_ver}/locales/"
|
675
|
+
path += "?bookmark=#{bookmark}" if bookmark != ''
|
409
676
|
_get(path)
|
410
|
-
# returns
|
677
|
+
# returns paged result set containing Locale data blocks
|
411
678
|
end
|
412
679
|
|
413
|
-
#
|
414
|
-
|
415
|
-
|
416
|
-
path
|
680
|
+
# NOTE: UNSTABLE
|
681
|
+
# Retrieve the properties for a particular locale.
|
682
|
+
def get_locale_properties(locale_id)
|
683
|
+
path = "/d2l/api/lp/#{$lp_ver}/locales/#{locale_id}"
|
417
684
|
_get(path)
|
418
|
-
# returns JSON
|
685
|
+
# returns Locale JSON block
|
419
686
|
end
|
420
|
-
=end
|