Skip to content

Commit

Permalink
version 0.0.4
Browse files Browse the repository at this point in the history
  • Loading branch information
tin900 authored and cran-robot committed Apr 30, 2024
1 parent e344205 commit 2110b05
Show file tree
Hide file tree
Showing 26 changed files with 612 additions and 30 deletions.
6 changes: 3 additions & 3 deletions DESCRIPTION
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Package: vvcanvas
Title: 'Canvas' LMS API Integration
Version: 0.0.3
Version: 0.0.4
Authors@R:
person("Tomer", "Iwan", , "t.iwan@vu.nl", role = c("aut", "cre", "cph"))
Description: Allow R users to interact with the 'Canvas' Learning Management System (LMS) API (see
Expand All @@ -17,8 +17,8 @@ Imports: dplyr, htm2txt, httr, jsonlite, magrittr, purrr, rlang,
Suggests: knitr, rmarkdown
VignetteBuilder: knitr
NeedsCompilation: no
Packaged: 2023-10-23 07:11:29 UTC; tin900
Packaged: 2024-04-29 07:58:29 UTC; tin900
Author: Tomer Iwan [aut, cre, cph]
Maintainer: Tomer Iwan <t.iwan@vu.nl>
Repository: CRAN
Date/Publication: 2023-10-23 07:30:02 UTC
Date/Publication: 2024-04-29 09:10:04 UTC
36 changes: 25 additions & 11 deletions MD5
Original file line number Diff line number Diff line change
@@ -1,21 +1,24 @@
318980283b9112dbfd014902388370d9 *DESCRIPTION
a1e2123524531b0e45e74c946f7410d9 *DESCRIPTION
1b8deee5fe0f1057bd6851116f16ab12 *LICENSE
d3db22ab7b81e2eaaf04ea779b414053 *NAMESPACE
dbffcb7dfe7958770ad547f5b8961be5 *NEWS.md
1ffd848a562acb318b17c776243eee4a *R/authenticate.R
166e3b96e79a2c2773f9cac3df9c4a13 *NAMESPACE
28edcb30eac4e0afe8f518bcc3a9ecd9 *NEWS.md
499db4f2a7feb6e427b6d4bc6ddc8641 *R/authenticate.R
0527a3fc989ccaf9a9babc8bf20f430a *R/create_assignment_group.R
6b1b2cc09c3091bbbb230c4894c84eea *R/create_course_datalake.R
071500146ff500f663e5bccf303bb53c *R/create_course_section.R
c2ec9e85639de0a76af3fc55e6ec4817 *R/create_folder.R
c4e4ae963022568a344f574781d34e1c *R/create_group_category.R
1f6e9851bdb88d155d9508181834753e *R/create_page.R
113a12fa8dc343843584eb8c15b05782 *R/delete_course_section.R
d765023c5dc951e91ceefd345d6e1b82 *R/download_course_file.R
281058e5d168a38adb410b70c862825c *R/edit_section.R
57806f9d68735a7950146590679caa87 *R/get_accounts.R
d26a1b15daf6095c02b71c0bae2fa922 *R/get_all_courses.R
86459fa2995b859b761efccde71a89e0 *R/get_assignment_data.R
cd8aa2586b8b32ce602d4e3859948375 *R/get_assignment_details.R
02f1e55ba0b89f0c73b24dc61508da63 *R/get_assignment_submissions.R
bd61f231f18e52eb104989a6b90670cf *R/get_assignments.R
6f1ab7440a473473414ae4bb748594f7 *R/get_calendar_events.R
fb2c8813b984a489e45ade37c3a8d01b *R/get_course_announcements.R
c2570fcd902099204c453d13b48a47f8 *R/get_course_details.R
59f419c2b6abbaa562ceb2b2b691f5f4 *R/get_course_enrollments.R
Expand All @@ -33,42 +36,50 @@ b708ac50f23c7d4ed9ce0dbd228aa667 *R/get_department_grade_data.R
eb95f314e221a907958ee4b8287c7879 *R/get_department_statistics.R
e80eae6e0ab4970f2f1cdabd78ff8c6f *R/get_department_statistics_by_subaccount.R
dca252a56126012853c86f393454439a *R/get_discussions.R
36dff3c672544ee16118ea3bf61442bc *R/get_favorite_courses.R
f8f2f19a197c3b58a61a26857a5dff5b *R/get_group_categories.R
5613b5b8b51910854e77e120c05e7c62 *R/get_group_info.R
ad48a0bd64f10246df3bef32d52c6cf6 *R/get_group_memberships.R
fc5b8f7534ff2557ac0a5f7a0634014e *R/get_group_users.R
201c16e04f1808313d8024bea53f1ef7 *R/get_module_items.R
a8401e39f00a34c2bc76d4c73f921eee *R/get_modules.R
62289c9eb3f3dc26092b9c18b95ac413 *R/get_page_content.R
386f965471e7a322f35ef06ffea8fa79 *R/get_roles.R
71267b44b40eec70ec3274739ef1100c *R/get_section_information.R
1407da1a3d83d0ed2f84bcf6bdedd3c1 *R/get_student_summaries.R
3d22aa2f1d8bad9541ae1282a41f29b7 *R/get_user_course_assignment_data.R
f7e4d6ef5606ab82aef19bb52e957afb *R/get_user_course_messaging_data.R
071c15b0b28add369130e3731a672b24 *R/get_user_course_participation_data.R
48335a3deca9047e399ac94b23aa9711 *R/post_new_discussion.R
cf794928715019cf81bd51d467156178 *R/utils-pipe.R
47aae0da75aa119264430b25a90f5f0b *README.md
a96a8dfc02d9b9398852bf73389be703 *README.md
ebbcb3235ee094b517802b9df3eaeb10 *build/vignette.rds
1af298d75f70dcedd71606da80417c8f *inst/doc/getting_started.R
cf7591bbd6cd619dbba9f18781cfdef7 *inst/doc/getting_started.Rmd
29d736615b48145c5b40be8c25d91f3f *inst/doc/getting_started.html
30e47ee440f3b437587a0f7b43d4a3cf *inst/doc/groups_use_case.R
67347f3cdf7c6840a1b4548d21ace0c4 *inst/doc/getting_started.R
d340ca0a165317377680f7da0c2c1df1 *inst/doc/getting_started.Rmd
3c6d7f95770523f2a3b174212447dc8e *inst/doc/getting_started.html
d86eccd3f5893be250e2804d24e3f760 *inst/doc/groups_use_case.R
aad32c5daf87d56a9024a3f010bcaf48 *inst/doc/groups_use_case.Rmd
0e13a84d473e3b878213db491661676a *inst/doc/groups_use_case.html
247a02aacd62dcb1d2883b204b05d7d7 *man/canvas_authenticate.Rd
77d2e58ad7280f5de3e6f5798aa6c6db *man/canvas_api_key.Rd
d2357dfae85634cbb6deaf2016665b60 *man/canvas_authenticate.Rd
f57b047c5c5a4f273c1c5a52238acd61 *man/canvas_base_url.Rd
0dd4b56528be5aa462e17a53c81e1d8f *man/create_assignment_group.Rd
526325e06aaa1cd14697626c9dfa5b52 *man/create_course_datalake.Rd
f088d71c7f0d81a13410a90b5d7ddff6 *man/create_course_section.Rd
d83dbbbe47a1378610a0cd05b62f21b5 *man/create_folder.Rd
ee4efc352842b5752d91aabf30d84a2e *man/create_group_category.Rd
2742684b616f2b23f1542ea2cfa051b5 *man/create_page.Rd
fcdb77d1435084c26032d85604ad25de *man/delete_course_section.Rd
8d9ad91b940d4500598b89f4fb48a40a *man/download_course_file.Rd
57b01d5d9a721708a01e9b80e5489c4d *man/edit_section.Rd
13ae9ca562e01de350568c0f5527ed40 *man/figures/logo.png
a958b4a7e51d9bdd9e93b68caf9b0fda *man/get_accounts.Rd
2dcf25870be7968287b990e6da840def *man/get_all_courses.Rd
4cabed3793f63a40ddcf52eb2916441e *man/get_assignment_data.Rd
cb7204772b3532853bd2c85c5645aa6b *man/get_assignment_details.Rd
7e067514ffeedec8b64b43f3b0fea65f *man/get_assignment_submissions.Rd
276246c9515c7f9f36688e70b4244ad6 *man/get_assignments.Rd
2d2a37ec472899457638b305e619612f *man/get_calendar_events.Rd
fff408ce113eff43fbad99bd0aaeb7c3 *man/get_course_announcements.Rd
627f1d82b633ff9b2e97b247342f2c12 *man/get_course_details.Rd
749a2651983271a8a341553968bab216 *man/get_course_enrollments.Rd
Expand All @@ -86,18 +97,21 @@ f6b39a7503aa6cc07d99526826a42707 *man/get_course_sections.Rd
f2fc495e97242c855891d73d232dafa8 *man/get_department_statistics.Rd
69b091372a8fd59845cbb49a1d3fb16c *man/get_department_statistics_by_subaccount.Rd
f88f3fd47a6993cd5c00fe2b21a2e7fe *man/get_discussions.Rd
3a451758cdc3043778b5a546f016367a *man/get_favorite_courses.Rd
7af130c0cf2bbf214e145121b45e6e62 *man/get_group_categories.Rd
356f407ef76d75f9a501b5fcf0a246b2 *man/get_group_info.Rd
e9f492c9c9f1c6e733d68b12b8fa245c *man/get_group_memberships.Rd
36893de13eb281c18bdcc2663e22f54c *man/get_group_users.Rd
d1414a365f740809901d2192642b0827 *man/get_module_items.Rd
2a2f762d6aaa2012ae2f76e4f8883b8e *man/get_modules.Rd
38fbff68c69fad28f5c85c9d2bfbfebf *man/get_page_content.Rd
9c23f70d7c7770f739fb4a7e7d586a95 *man/get_roles.Rd
47d17323ffcbdb3b73a9ce09bda923d0 *man/get_section_information.Rd
d60c887c058e971b49e6f66060e60b36 *man/get_student_summaries.Rd
08a793158e3ee94d5b1d5d1a9425622f *man/get_user_course_assignment_data.Rd
e066e46021d442a71adf2bec7a7abf56 *man/get_user_course_messaging_data.Rd
29cf2466c748a1fe0981f72191a0b439 *man/get_user_course_participation_data.Rd
29ee7383caa7fc8c14f52bd035509064 *man/pipe.Rd
08a074827e85195c793d16707f2d979c *man/post_new_discussion.Rd
cf7591bbd6cd619dbba9f18781cfdef7 *vignettes/getting_started.Rmd
d340ca0a165317377680f7da0c2c1df1 *vignettes/getting_started.Rmd
aad32c5daf87d56a9024a3f010bcaf48 *vignettes/groups_use_case.Rmd
6 changes: 6 additions & 0 deletions NAMESPACE
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,16 @@ export(create_course_section)
export(create_folder)
export(create_group_category)
export(create_page)
export(delete_course_section)
export(download_course_file)
export(edit_section)
export(get_accounts)
export(get_all_courses)
export(get_assignment_data)
export(get_assignment_details)
export(get_assignment_submissions)
export(get_assignments)
export(get_calendar_events)
export(get_course_announcements)
export(get_course_details)
export(get_course_enrollments)
Expand All @@ -32,13 +35,16 @@ export(get_department_participation_data)
export(get_department_statistics)
export(get_department_statistics_by_subaccount)
export(get_discussions)
export(get_favorite_courses)
export(get_group_categories)
export(get_group_info)
export(get_group_memberships)
export(get_group_users)
export(get_module_items)
export(get_modules)
export(get_page_content)
export(get_roles)
export(get_section_information)
export(get_student_summaries)
export(get_user_course_assignment_data)
export(get_user_course_messaging_data)
Expand Down
9 changes: 9 additions & 0 deletions NEWS.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,12 @@
# vvcanvas 0.0.4

* Added methods for sections.
* Added methods for favorites.
* Updated authentication method.
* Updated vignette.
* Added method for calendar events.
* Added method for account roles.

# vvcanvas 0.0.3

* Added methods for all Analytics endpoints.
Expand Down
35 changes: 31 additions & 4 deletions R/authenticate.R
Original file line number Diff line number Diff line change
@@ -1,11 +1,16 @@
#' Authenticate with Canvas LMS API
#'
#' Handles authentication with the Canvas LMS API using the provided API key and base URL.
#' This function handles authentication with the Canvas LMS API.
#' It uses the provided API key and base URL, or falls back to the `CANVAS_API_KEY` and `CANVAS_BASE_URL` environment variables if none are provided.
#'
#' @param api_key The API key for authenticating with the Canvas LMS API.
#' @param base_url The base URL of the Canvas instance.
#' @param api_key The API key for authenticating with the Canvas LMS API. Defaults to the `CANVAS_API_KEY` environment variable.
#' @param base_url The base URL of the Canvas instance. Defaults to the `CANVAS_BASE_URL` environment variable.
#'
#' @return A list containing the authenticated 'api_key' and 'base_url'.
#'
#' @note The function verifies authentication by making a test request to the `/api/v1/users/self` endpoint of the Canvas instance.
#' If the response status code is not 200, it throws an error message indicating that authentication failed.
#'
#' @export
#' @examples
#' \dontrun{
Expand All @@ -14,7 +19,7 @@
#' base_url <- "https://canvas.example.com"
#' canvas <- canvas_authenticate(api_key, base_url)
#' }
canvas_authenticate <- function(api_key, base_url) {
canvas_authenticate <- function(api_key = canvas_api_key(), base_url = canvas_base_url()) {
# Create a canvas object to store the API key and base URL
canvas <- list(api_key = api_key, base_url = base_url)

Expand All @@ -35,3 +40,25 @@ canvas_authenticate <- function(api_key, base_url) {
# Return the canvas object
return(canvas)
}

#' Get the Canvas API key from the environment variable
#'
#' @return The Canvas API key stored in the CANVAS_API_KEY environment variable.
canvas_api_key <- function() {
api_key <- Sys.getenv("CANVAS_API_KEY")
if (api_key == "") {
stop("CANVAS_API_KEY environment variable is not set.")
}
return(api_key)
}

#' Get the Canvas base URL from the environment variable
#'
#' @return The Canvas base URL stored in the CANVAS_BASE_URL environment variable.
canvas_base_url <- function() {
base_url <- Sys.getenv("CANVAS_BASE_URL")
if (base_url == "") {
stop("CANVAS_BASE_URL environment variable is not set.")
}
return(base_url)
}
26 changes: 26 additions & 0 deletions R/delete_course_section.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#' Delete a Course Section in Canvas LMS
#'
#' Deletes an existing course section using the Canvas LMS API.
#'
#' @param canvas A list containing the 'api_key' and 'base_url' for authentication.
#' @param section_id The ID of the section to delete.
#'
#' @return A confirmation message that the section has been deleted.
#' @export
#'
delete_course_section <- function(canvas, section_id) {
# Construct the API endpoint URL
url <- paste0(canvas$base_url, "/api/v1/sections/", section_id)

# Make the API request
response <- httr::DELETE(url,
httr::add_headers(Authorization = paste("Bearer", canvas$api_key)))

# Check the response status code
if (httr::status_code(response) != 200) {
stop("Failed to delete course section. Please check your authentication and API endpoint.")
}

# Return a confirmation message
return("The course section has been deleted.")
}
45 changes: 45 additions & 0 deletions R/edit_section.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
#' Edit a Course Section in Canvas LMS
#'
#' Modifies an existing course section using the Canvas LMS API.
#'
#' @param canvas A list containing the 'api_key' and 'base_url' for authentication.
#' @param section_id The ID of the section to edit.
#' @param section_name The new name of the section (optional).
#' @param sis_section_id The new SIS ID of the section (optional).
#' @param integration_id The new integration ID of the section (optional).
#' @param section_start_date The new start date of the section (optional).
#' @param section_end_date The new end date of the section (optional).
#' @param restrict_enrollments_to_section_dates Whether to restrict user enrollments to the start and end dates of the section (optional).
#' @param override_sis_stickiness Whether to override SIS stickiness (optional).
#'
#' @return A confirmation message that the section has been edited.
#' @export
#'
edit_section <- function(canvas, section_id, section_name = NULL, sis_section_id = NULL, integration_id = NULL, section_start_date = NULL, section_end_date = NULL, restrict_enrollments_to_section_dates = NULL, override_sis_stickiness = NULL) {
# Construct the API endpoint URL
url <- paste0(canvas$base_url, "/api/v1/sections/", section_id)

# Create the request payload
payload <- list()
if (!is.null(section_name)) payload$course_section$name <- section_name
if (!is.null(sis_section_id)) payload$course_section$sis_section_id <- sis_section_id
if (!is.null(integration_id)) payload$course_section$integration_id <- integration_id
if (!is.null(section_start_date)) payload$course_section$start_at <- section_start_date
if (!is.null(section_end_date)) payload$course_section$end_at <- section_end_date
if (!is.null(restrict_enrollments_to_section_dates)) payload$course_section$restrict_enrollments_to_section_dates <- restrict_enrollments_to_section_dates
if (!is.null(override_sis_stickiness)) payload$override_sis_stickiness <- override_sis_stickiness

# Make the API request
response <- httr::PUT(url,
httr::add_headers(Authorization = paste("Bearer", canvas$api_key)),
body = payload,
encode = "json")

# Check the response status code
if (httr::status_code(response) != 200) {
stop("Failed to edit course section. Please check your authentication and API endpoint.")
}

# Return a confirmation message
return("The course section has been edited.")
}

0 comments on commit 2110b05

Please sign in to comment.