Commit Graph

166 Commits

Author SHA1 Message Date
Sarah Gerard a96956601c BP and CC work with page availability dates
we should be able to lock availability dates for pages in
blueprint courses, and availability dates should copy over
when doing course copy, and they should be able to be shifted
when adjusted dates is requested.

closes LX-1849
flag=selective_release_backend

test plan:
- For blue print locking:
- create a blue print course by checking Enable course
  as a Blueprint Course in the settings page
- under 'Locked Objects by Type', under pages,
  check the 'availability dates' check box
- create a page and add availability dates, and then lock
  the page by clicking the blueprint button on the show page
- associate and sync a course
- in the associated course, check any place where the assign to
  tray is and ensure that you cannot edit the availability
  dates

- For course copy:
- create a course that has a page with availability dates
- copy the course, ensure that the page in the copied course
  has availability dates
- copy the course again, this time checking the 'adjust events
  and due dates' box, and enter dates to shift the copied
  course to. Ensure that the dates of the page are shifted in
  the copied course
- copy the original course one more time, this time checking
  the 'adjust events and due dates' box, and checking 'remove
  dates'. Ensure that the page's availability dates have been
  removed in the copied course.

Change-Id: I932dbabc968316b5be367ea02d6dd7af255af35a
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/356510
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
QA-Review: Robin Kuss <rkuss@instructure.com>
Reviewed-by: Robin Kuss <rkuss@instructure.com>
Product-Review: Sarah Gerard <sarah.gerard@instructure.com>
2024-09-06 16:05:10 +00:00
Daniel, Torok b685d23dc2 XML parsing support for Discussion Checkpoint related fields
refs VICE-4576
flag=discussion_checkpoints

test plan:
 - tests pass

Change-Id: I1f59bb8e30a2b5d11c3980f85aacf22340913b92
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/356047
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
QA-Review: Dora Csolakov <dora.csolakov@instructure.com>
Product-Review: Kata Virag Keri <kata.keri@instructure.com>
Reviewed-by: Viktor Szpisják <viktor.szpisjak@instructure.com>
2024-09-04 14:42:13 +00:00
Mysti Lilla 2b2182da47 QTI export/import not linking to files
fixes RCX-2121
flag=none

Test plan
- Set up a quiz with a link to an image in the RCE
- Export the quiz as a QTI
- Import the quiz to a new course and ensure
  the image is properly linked

Change-Id: Ifca00347d673f8eb8306ce09c0a8a3a56a4b321e
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/353272
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Product-Review: Mysti Lilla <mysti@instructure.com>
Reviewed-by: Jeremy Stanley <jeremy@instructure.com>
QA-Review: Jacob DeWar <jacob.dewar@instructure.com>
2024-08-01 19:37:59 +00:00
murilo.paiva 28bed562db Fix Course File Quotas are set in Mebibytes, not Megabytes
fixes RCX-1833
flag=none

Test plan:
- Create a new course
- In course settings, check the file storage
- If it is an old account, it will show 524MB
- If it is a new account, it will show 500MB

Change-Id: Idea02d4b12f1fcb3e1754d990f44dfb7ee575a39
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/349916
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Jacob DeWar <jacob.dewar@instructure.com>
QA-Review: Jacob DeWar <jacob.dewar@instructure.com>
Product-Review: Murilo Paiva <murilo.paiva@instructure.com>
2024-06-14 18:11:12 +00:00
Adrian Diaz ac91d0d795 preserve qti new quizzes identifier
closes QUIZ-13486
flag = common_cartridge_qti_new_quizzes_import

Test plan: specs should pass

Change-Id: Ib370b8e0a32a1e503a10b0798e8861e4ee0c3e8e
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/343664
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: James Logan <james.logan@instructure.com>
QA-Review: James Logan <james.logan@instructure.com>
Product-Review: Marissa Pio Roda <marissa.pioroda@instructure.com>
2024-04-29 19:47:33 +00:00
viktor.szpisjak 07b42df821 Fix discussion setting import
closes CLAB-26
flag=none

Test plan:
- Create a course, enable Discussions Redesign FF
- Go to Discussion page and:
-- Turn off Report replies
-- Turn on Create anonymous discussion topics
- Save settings
- Now create another course, enable Discussions Redesign FF
- Go to second course import page, and copy over the first course
- See if the discussion page has the similar settings

Change-Id: I887cdfc811b93491d2a6ce87d525a156a4facad9
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/345150
QA-Review: Omar Soto-Fortuño <omar.soto@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Product-Review: Kata Virag Keri <kata.keri@instructure.com>
Reviewed-by: Mysti Lilla <mysti@instructure.com>
2024-04-19 07:45:51 +00:00
Jacob Burroughs 3b7130c161 Remove a lot of settings
[ignore-stage-results=Flakey Spec Catcher]

refs AE-551

Change-Id: If7b5191c20cfadc438cdc2bc8b489eb2806582fe
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/334831
Reviewed-by: Isaac Moore <isaac.moore@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
QA-Review: Jacob Burroughs <jburroughs@instructure.com>
Product-Review: Jacob Burroughs <jburroughs@instructure.com>
2024-01-09 21:32:17 +00:00
Kai Bjorkman aae897f7fa preserve points based grading in course copy
flag=points_based_grading_schemes
closes EVAL-3553

Test Plan:
    Prerequisites: - Two courses (src and dest) with grading schemes
                    enabled in the course settings.
                   - Points Based FF turned ON
- In src create a points based grading scheme.
- Go to dest and run a course copy to copy all of the contents of src
into dest (or just the course settings).
- Ensure that the points based grading scheme from src has imported as
a points based grading scheme in dest with the correct scaling factor.

Change-Id: I4f6e096f8bc1c4231055296843be5eea542c0846
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/329755
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Christopher Soto <christopher.soto@instructure.com>
Reviewed-by: Derek Williams <derek.williams@instructure.com>
QA-Review: Christopher Soto <christopher.soto@instructure.com>
Product-Review: Ravi Koll <ravi.koll@instructure.com>
2023-10-31 21:15:55 +00:00
Sleyder Zuleta d6ed45d595 preserve restrict quantitative data in course copy
flag=restrict_quantitative_data
closes EVAL-3585

Test Plan:
- Enable restrict_quantitative_data flag
- create a course
- go to courses/:course_id/settings#tab-details
- check 'Restrict view of quantitative data' and click update
- copy the course
- the copy should has 'Restrict view of quantitative data'
checked

Change-Id: I6e5ad1bd34a20ddfb73fa2eef27a73a7da72b77f
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/330507
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Derek Williams <derek.williams@instructure.com>
Reviewed-by: Samuel Lee <samuel.lee@instructure.com>
QA-Review: Kai Bjorkman <kbjorkman@instructure.com>
Product-Review: Ravi Koll <ravi.koll@instructure.com>
2023-10-24 14:16:25 +00:00
Matheus ff00a37ff3 Support recurring calendar events in course migrations
fixes LF-720
flag=none

Test Plan:
- Create several recurring course calendar events
- Export the course and import it into another
- Check that the recurring events made it correctly
  to the destination course
- Try the same with Blueprint Syncs and Course copies
- Ensure the recurring events are properly linked in
  their destinations

Change-Id: I16297906bcabc7c23620f6cf4467baecb37f9615
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/327058
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Robin Kuss <rkuss@instructure.com>
Reviewed-by: Mysti Lilla <mysti@instructure.com>
QA-Review: Robin Kuss <rkuss@instructure.com>
Product-Review: Luis Oliveira <luis.oliveira@instructure.com>
2023-09-12 13:59:52 +00:00
Cody Cutrer 5088ae332d bundle update nokogiri
Change-Id: I6f47dd35205d7d463e93dcfdca032080d7626272
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/325721
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Jacob Burroughs <jburroughs@instructure.com>
QA-Review: Cody Cutrer <cody@instructure.com>
Product-Review: Cody Cutrer <cody@instructure.com>
Build-Review: Cody Cutrer <cody@instructure.com>
2023-08-21 19:08:06 +00:00
Roberto Noguera 8a8eca6e38 Add param to live event messages for course copy
creating a new database field to track the orignal outcome id in
copied outcomes with the course copy process, adding the new param
in the live event message to outcome service.

closes OUT-5561
closes OUT-5562
closes OUT-5571
flag=none

test plan:
- Tests pass

Change-Id: If53821426a115a0f6635d22cf59026c14892bace
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/316476
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Chrystal Langston <chrystal.langston@instructure.com>
QA-Review: Chrystal Langston <chrystal.langston@instructure.com>
Product-Review: Kyle Rosenbaum <krosenbaum@instructure.com>
Migration-Review: Cody Cutrer <cody@instructure.com>
2023-07-10 23:57:37 +00:00
Jacob Burroughs 7dcc507d0a Rubocop for ruby 3.1
[skip-stages=Flakey]

Change-Id: I6abefdfa9fed6dd4525c8786e93efa548b3710f2
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/319603
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Isaac Moore <isaac.moore@instructure.com>
QA-Review: Jacob Burroughs <jburroughs@instructure.com>
Product-Review: Jacob Burroughs <jburroughs@instructure.com>
Build-Review: Jacob Burroughs <jburroughs@instructure.com>
Migration-Review: Jacob Burroughs <jburroughs@instructure.com>
2023-06-06 16:44:26 +00:00
Mysti Lilla 573fc47c46 Copy media tracks during course copy
Media tracks (captions) will be linked to
attachments directly as well as media
objects so that teachers can update captions
on videos they didn't originally upload

This commit allows those attachment linked
captions to be copied to new courses

closes MAT-1204
flag=none
QA-risk: medium, course copy could be
affect, though there are specs in place

[fsc-timeout=30]

Test plan
- Create a course with a video with captions
- Copy that course to another course
- Have a teacher without access to the
  original edit the caption using the new
  media_attachment route (sadly the UI
  won't handle this yet, you'll have to do
  it on the back end)
- Copy the second course and make sure that a new
  media track was created for the new attachment
  that points to the video in the new course
- Check to make sure the media object didn't get
  copied

- Note that BluePrint relocking on Media Tracks
  is not currently working. I think this is because
  of Media Tracks not being soft-deletable, but
  also may have something to do with me using
  attachments as the base for checking whether
  we're allowed to change things.

  Please note anything weird you find in that
  department so that we can look at it later, but
  don't worry overly much about testing it at the
  moment.

Change-Id: Id8f965496d1499949adf6d014454ab1c8163c98f
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/315468
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Eric Saupe <eric.saupe@instructure.com>
Reviewed-by: Jeremy Stanley <jeremy@instructure.com>
QA-Review: Eric Saupe <eric.saupe@instructure.com>
Product-Review: Mysti Lilla <mysti@instructure.com>
2023-05-19 21:01:03 +00:00
Cody Cutrer 502aa068da rubocop: Layout/Multiline*LineBreaks
[skip-stages=Flakey]

Change-Id: I24912809267088bc19a4082c49bc5f78ca7b76bb
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/317302
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Jacob Burroughs <jburroughs@instructure.com>
Build-Review: Jacob Burroughs <jburroughs@instructure.com>
Migration-Review: Jacob Burroughs <jburroughs@instructure.com>
QA-Review: Cody Cutrer <cody@instructure.com>
Product-Review: Cody Cutrer <cody@instructure.com>
2023-05-01 19:31:42 +00:00
Cody Cutrer f46fef5599 rubocop: Style/MapToHash, Style/MapToSet
Change-Id: I75a78a3d86d5875b450d4f32c2f71d8a44a735f4
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/315125
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Aaron Ogata <aogata@instructure.com>
QA-Review: Cody Cutrer <cody@instructure.com>
Product-Review: Cody Cutrer <cody@instructure.com>
2023-04-11 14:41:55 +00:00
Jeremy Stanley 09e90cc9a6 (attempt to) track source course across export/import
when exporting a canvas cartridge, add a context.xml file
containing the course id as well as the root account
global id, uuid, and (if available) domain

then when importing a package, find the original source course
(if possible) using the root account uuid and/or domain.
this will allow the asset_id_map API endpoint (and
forthcoming live event info) to function for export/import

(subject to some limitations, of course, since the source
course may have changed by the time the import happens
or may not even belong to the same canvas instance at all)

test plan:
 - export a package
 - import it again
 - use the content migration show endpoint to view the
   import migration
 - it should include source course information
   (which was previously only available for course copy)

refs FOO-3302

Change-Id: I36c519634413f606042d400a27c5dd2ee4d3df7b
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/308822
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Luis Oliveira <luis.oliveira@instructure.com>
QA-Review: Luis Oliveira <luis.oliveira@instructure.com>
Product-Review: Jeremy Stanley <jeremy@instructure.com>
2023-01-18 03:39:15 +00:00
Jeremy Stanley 4d3e9ddfa5 copy blueprint settings
this isn't about blueprint syncing, it's about copying
the blueprint course itself and making the destination
also a blueprint course with the same settings and
locked items

test plan:
 - set up a course as a blueprint course
 - set up custom options for locking different types
   of learning objects
 - lock objects of each lockable type
   (assignment, file, topic, quiz, page, course pace)
 - copy the blueprint to a new course shell
   via Settings / Copy This Course
   - check the "Copy Blueprint Settings" box
   - the blueprint settings and locked items should
     be preserved in the destination

flag=copy_blueprint_settings
refs LS-3574

Change-Id: I0dab774731dcc2143743aa1f9a6bb35646ac00d8
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/304671
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Luis Oliveira <luis.oliveira@instructure.com>
QA-Review: Luis Oliveira <luis.oliveira@instructure.com>
Product-Review: Allison Howell <allison.howell@instructure.com>
2022-11-15 19:38:34 +00:00
Jeremy Stanley 7c24e2053b copy time zone in course settings
but only if it's modified from the account default

test plan:
 - have two subaccounts with different time zones
 - copy a course shell from one to the other
 - the destination course's time zone should still match its
   subaccount's time zone, not the original course's time zone
 - modify the time zone in the original course
 - recopy it
 - now the time zone in the destination course should
   match the original

flag=none
closes LS-3577

Change-Id: Ia9f7f83f32ff74ee906f7792315b522a58ecbdb7
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/304719
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Product-Review: Jeremy Stanley <jeremy@instructure.com>
Reviewed-by: Luis Oliveira <luis.oliveira@instructure.com>
QA-Review: Luis Oliveira <luis.oliveira@instructure.com>
2022-11-14 14:14:31 +00:00
Jeremy Stanley 33dd2726dc scheduled publication of pages
test plan:
 - enable the scheduled page publication feature in
   your account
 - create or edit a page and set a publish_at date
   in the near future
 - wait for that time (and ensure jobs are running and
   not backlogged)
 - ensure the page became published (and its module item was
   published if it's in a module)
 - ensure when a page scheduled to be published in the future
   is copied as part of course copy, the copy gets published
   at that time too
   - unless dates are shifted. the publish_at date should be
     shifted the same as the others
   - if a page is scheduled for publication in the near
     future, then the course is copied after the page is
     published, shifting the publish_at date into the future,
     the page in the destination course should be unpublished
     (and the calendar icon should show the publication date)
 - ensure when a page in a blueprint associated course is
   automatically published, future syncs still update the page
   (the auto-publish isn't counted as a downstream change
   that causes sync exceptions)
 - on the pages index, a page that is scheduled for publication
   but not yet published shows a red calendar icon in place of
   the gray circle-slash thing ordinarily seen next to unpublished
   pages
   - same goes for the modules page
     and the button at the top of page show
   - clicking the icon lets you publish the page now,
     unpublish it (remove the scheduled publication), or
     change the publication date
 - when a page that is scheduled for publication is included in
   an unpublished module, publishing the module doesn't publish
   the page (and you get a notice)

if the feature is turned off after scheduling pages to be published,
no evidence of it is visible in the UI and the page will not be
published when the time arrives. (we figure this is easier than
updating all pages in the account to wipe the publish_at date
for a scenario that doesn't seem likely to begin with anyway)

note that I removed the tooltip from the publish button on page show
because it always duplicates the button text, but the tooltip
remains on the publish icon

closes DE-1346

flag=scheduled_page_publication

Change-Id: Iba16b3d788bcb0051e022e2706446020e6b8171b
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/297715
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Ed Schiebel <eschiebel@instructure.com>
QA-Review: Ed Schiebel <eschiebel@instructure.com>
Product-Review: David Lyons <lyons@instructure.com>
Migration-Review: Jacob Burroughs <jburroughs@instructure.com>
2022-08-30 16:10:55 +00:00
Paul Gray bbe1da583a Persist nil resource link urls during course copy
why

With resource_links now having urls, when looked up via retrieve, the
url launched is taken from the resource link's url column. If that
column is nil, then the tool's url will be used. Some resource links
rely on this behavior to launch the url. During course copy, the url in
the export is now included in the export and persisted in the import,
causing all imported resource links to never persist a nil url.

This commit updates the exporter with a new custom property in the cc
export, a resource_link_url, which includes the url column from the
exported resource_link. The importer will use this to populate the new
resource link's url column, and will use the standard cc launch_url
simply to lookup the tool to associate.

fixes INTEROP-7572

flag=none

test plan:
Find an existing course with a resource_link that has a nil url, and
copy that course. the new course should have the same resource_link,
except the url in the new resource link should still be nil.

Change-Id: I62f85689a4a6a7a2cbd8f95f82c6dde343d7b8e0
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/297340
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Xander Moffatt <xmoffatt@instructure.com>
QA-Review: Xander Moffatt <xmoffatt@instructure.com>
Migration-Review: Jeremy Stanley <jeremy@instructure.com>
Product-Review: Paul Gray <paul.gray@instructure.com>
2022-07-29 21:31:41 +00:00
Luis Oliveira c2e5418ddc Add course paces to blueprint syncs
fixes LS-3162
flag=course_paces
[fsc-max-nodes=18] [fsc-timeout=30]

test plan:
- Configure course paces in a course
- Make that course a blueprint
- Associate it and sync it to a second course
- Check that the proper assignment durations
  flow downstream
- Alter course pacing in the child course
- Check that on further syncs downstream
  changes aren't overwritten
- Lock the duration for some assignments
- Check that on further syncs those durations
  are now overwritten

Change-Id: I0a92835407566bd47581c7782039def18d31fe2c
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/293351
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Robin Kuss <rkuss@instructure.com>
QA-Review: Robin Kuss <rkuss@instructure.com>
Product-Review: Allison Howell <allison.howell@instructure.com>
Migration-Review: Jeremy Stanley <jeremy@instructure.com>
2022-07-28 19:41:51 +00:00
Omar Gerardo Soto-Fortuño efb3347b0a Add Discussion anonymous state to Course Importer
flag=none
closes VICE-2774

Test Plan:
 - Tests pass
 - Go to course A
 - Create an Anonymous Discussion Topic
 - Go to course B
 - Go to Settings
 - On the right side, click on Import Course Content
 - On Content Type select Copy a Canvas Course
 - Search for the course A (whatever name it has)
 - On Content choose: "Select specific content"
 - Click on Import
 - Then on the Current Jobs table click on Select Content
 - Expand Discussion Topics (clicking on the arrow)
 - Select the discussion topic to import
 - Click on Select Content.
 - Once the job is completed, verify that the
     Discussion Topic was added to the course
     as anonymous.

Change-Id: I0ce26478c3f3fea3a7fb3c305ef8985390ab606a
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/295548
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
QA-Review: Caleb Guanzon <cguanzon@instructure.com>
Reviewed-by: Jeffrey Johnson <jeffrey.johnson@instructure.com>
Product-Review: Jeffrey Johnson <jeffrey.johnson@instructure.com>
2022-07-19 18:13:44 +00:00
August Thornton 7cb84dbb91 include :filter_speed_grader_by_student_group in course settings converter
fixes FOO-2934
flag = none

Test plan:
• Enable the following root account features:
   • :course_templates
   • :filter_speed_grader_by_student_group
• Create a course and check the following boxes in the course
  settings:
   • Enable course as course template
   • Launch SpeedGrader Filtered by Student Group
• Create a sub-account, in the account settings designate the
  course as the “Course Template” and save your changes
• In that sub-account, create a new course and wait for the
  template import to finish
• Once done, check the course settings and note that
  “Launch SpeedGrader Filtered by Student Group” *is* checked

Change-Id: I41265f1dbc076a2895a8100f2202353276da9dc3
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/295797
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Ben Rinaca <brinaca@instructure.com>
QA-Review: August Thornton <august@instructure.com>
Product-Review: August Thornton <august@instructure.com>
2022-07-08 21:56:48 +00:00
Jeffrey Johnson 4d6d231c2c Revert "Add Discussion anonymous state to Course Importer"
refs VICE-2952

Test Plan
1. Repro steps in VICE-2952 should not remove author of announcemcent

Change-Id: Ia1ed4f360bd7a5745dc2d5dffc07e9931276c636
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/294466
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Omar Soto-Fortuño <omar.soto@instructure.com>
QA-Review: Omar Soto-Fortuño <omar.soto@instructure.com>
Product-Review: Omar Soto-Fortuño <omar.soto@instructure.com>
2022-06-22 12:57:55 +00:00
Omar Gerardo Soto-Fortuño dffb146bd1 Add Discussion anonymous state to Course Importer
flag=none
closes VICE-2774

Test Plan:
 - Tests pass
 - Go to course A
 - Create an Anonymous Discussion Topic
 - Go to course B
 - Go to Settings
 - On the right side, click on Import Course Content
 - On Content Type select Copy a Canvas Course
 - Search for the course A (whatever name it has)
 - On Content choose: "Select specific content"
 - Click on Import
 - Then on the Current Jobs table click on Select Content
 - Expand Discussion Topics (clicking on the arrow)
 - Select the discussion topic to import
 - Click on Select Content.
 - Once the job is completed, verify that the
     Discussion Topic was added to the course
     as anonymous.

Change-Id: Ib9c4e2ba3e112805e5d68b7feabd94ab34bae20b
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/293232
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Drake Harper <drake.harper@instructure.com>
Product-Review: Drake Harper <drake.harper@instructure.com>
QA-Review: Chawn Neal <chawn.neal@instructure.com>
2022-06-06 14:33:23 +00:00
Eric Saupe 6ba814bed7 Refactor PacePlan to CoursePace
fixes LS-2989, LS-2988
flag=pace_plans

test plan:
- Specs should pass
- Enable the course paces account feature flag
- Enable the course paces setting on a course
- All current pacing related features should work as expected

Change-Id: Ibd1d9f3295f624a3f2411c72ad5ace9410d965ca
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/286519
Migration-Review: Jeremy Stanley <jeremy@instructure.com>
Product-Review: Eric Saupe <eric.saupe@instructure.com>
Reviewed-by: Robin Kuss <rkuss@instructure.com>
QA-Review: Robin Kuss <rkuss@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
2022-03-15 19:10:16 +00:00
Weston Dransfield 021092d6c3 Support sharing buttons & icons with "send to"
Closes MAT-715
flag=buttons_and_icons_root_account

Test Plan:
- build canvas-rce and canvas JS bundles
- navigate to (or create) a course with a teacher
  enrolled
- Act as the teacher in the course
- In a new browser or incognito window that does
  not share the same session, navigate to a different
  canvas course. No need to act as a teacher, just
  use your site admin user
- In the second session and second course, create a
  button and icon
- Navigate to the files UI in the second course
- Find the button and icon you created and click
  them menu on the file. Choose "Send To"
- Type the name of the teacher in the first course
- Select the teacher and choose "Send"
- Make sure delayed jobs are running
- As the teacher in the first course, refresh the
  page until a notification shows up on your account
  profile picture
- Click the notification and then "Shared Content"
- Choose to import the new share
- Select the teacher's course in the tray that opens up
  and click import
- Wait for the import to complete (You will see jobs stop
  running)
- As the teacher in the first course, navigate to an RCE
- Open the saved buttons and icons tray and validate the
  shared button and icon is present

Change-Id: I438f03ea9216ba8a6131a24ca2914c00d9ac1067
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/285977
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Juan Chavez <juan.chavez@instructure.com>
QA-Review: Juan Chavez <juan.chavez@instructure.com>
Product-Review: David Lyons <lyons@instructure.com>
2022-03-07 21:44:09 +00:00
Evan Battaglia c856299406 Do not crash import on ResourceLinks w/o url
refs INTEROP-7258
flag=none

These can exist when exporting a course where there are
Lti::ResourceLinks whose current_external_tool is an LTI 1.1 tool
without a URL. A future commit will prevent ResourceLinks with no URL
from appearing in an export, but since people already have export files
with these LRLs without URLs, we should fix it to not crash the import.

Test plan:
- Have a course with some resource links (e.g. create an LTI 1.3
  assignmentor use deep linking in RCE in the syllabus, when editing an
  assignment body, etc.)
- Create an LTI 1.1 tool without a URL (but with a domain) in the course
  or account.
- In a Rails console, change the context_external_tool_id of the
  Lti::ResourceLink to point to the LTI 1.1 tool with no URL.
- Export the course. Check in the resulting imscc file (actually a zip
  file) that there is a file in lti_resource_links/ that does not have a
  launch_url or secure_launch_url.
- Import the course content in some course. The import should succeed.
- In a rails console lookup resource links with the same lookup_uuid as
  the one pointing to an LTI 1.1 tool to make sure no resource links
  were created by the import:
    Lti::ResourceLinks.where(lookup_uuid:
    lrl_pointing_to_11tool.lookup_uuid)

Change-Id: I420929b2d291d551f43bd2189a48cb911971e1cf
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/285477
Product-Review: Evan Battaglia <ebattaglia@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Xander Moffatt <xmoffatt@instructure.com>
QA-Review: Xander Moffatt <xmoffatt@instructure.com>
2022-02-23 21:19:54 +00:00
Xander Moffatt ed7d9965b4 include module item link settings in migration
why:
* without this, module item launch dimensions don't carry over to
the new course during course copy
* this commit includes both export and import

closes INTEROP-6837
flag=none

test plan:
* create a module item that launches a 1.3 tool
* in the rails console update the content tag's link settings:
`ContentTag.last.update!(link_settings: { selection_height: 123,
selection_width: 789 })`
* launch this module item and confirm the dimensions are not normal
* create a new course and Import Course Content
* select the old course and the module item to import
* launch the module item in the new course - it should have the same
not-normal dimensions as the old module item

Change-Id: If66c9ba11b341979ed8542663cbd2bd127477094
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/281623
Reviewed-by: Mysti Lilla <mysti@instructure.com>
QA-Review: Tucker Mcknight <tmcknight@instructure.com>
Product-Review: Xander Moffatt <xmoffatt@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
2021-12-21 20:06:15 +00:00
Jeremy Stanley 14417a91cb persist the course banner image across content migrations
test plan:
 1. enable K5 mode
 2. set a wide banner image on a course to a file from the course
 3. copy the course
 4. the image should follow
 5. repeat steps 2-4 using an external URL instead of a course file
 6. repeat steps 2-5 only export/import instead of course copy

flag=none
fixes LS-2881

Change-Id: I7184e8a6d77d5b793fbfe3d2a4582ab5df1b00f9
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/280538
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Ed Schiebel <eschiebel@instructure.com>
QA-Review: Ed Schiebel <eschiebel@instructure.com>
Product-Review: Jeremy Stanley <jeremy@instructure.com>
2021-12-09 22:23:26 +00:00
Adrian Packel 927fec35af include final grade override in course copy
Copy over a course's final_grade_override setting as part of a course
copy. Note that the Final Grade Override feature flag must be enabled on
a parent account (not on the course itself) for FGO to be enabled on the
destination course, since feature flag statuses are not included in
course copies.

closes EVAL-2071
flag=none

Test plan:
- Have a course with final grade override enabled
  - To test copying the setting, the Final Grade Override feature flag
    should be enabled on the course's account, or higher up
- Copy the course
  - Check that final grade override is enabled on the destination course

Change-Id: I9f0401f4a737deffb4dac9ae4a9294a6fcd3a28d
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/277992
Reviewed-by: Spencer Olson <solson@instructure.com>
Reviewed-by: Dustin Cowles <dustin.cowles@instructure.com>
Reviewed-by: Eduardo Escobar <eduardo.escobar@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Product-Review: Syed Hussain <shussain@instructure.com>
QA-Review: Kai Bjorkman <kbjorkman@instructure.com>
2021-12-06 15:37:30 +00:00
Cody Cutrer c2cba46851 RuboCop: Style/StringLiterals, Style/StringLiteralsInInterpolation
[skip-stages=Flakey]

auto-corrected

Change-Id: I4a0145abfd50f126669b20f3deaeae8377bac24d
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/279535
Tested-by: Cody Cutrer <cody@instructure.com>
QA-Review: Cody Cutrer <cody@instructure.com>
Product-Review: Cody Cutrer <cody@instructure.com>
Migration-Review: Cody Cutrer <cody@instructure.com>
Reviewed-by: Jacob Burroughs <jburroughs@instructure.com>
2021-11-25 14:03:06 +00:00
Cody Cutrer e73cf9ddf4 RuboCop: Style/HashSyntax
[skip-stages=Flakey]

auto-corrected

Change-Id: I9371a61046aee6b148f89dd434114a8ba2b1188c
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/279533
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
QA-Review: Cody Cutrer <cody@instructure.com>
Product-Review: Cody Cutrer <cody@instructure.com>
Migration-Review: Cody Cutrer <cody@instructure.com>
Reviewed-by: Jacob Burroughs <jburroughs@instructure.com>
2021-11-25 14:02:35 +00:00
Cody Cutrer c302dd8bc1 RuboCop: Style/SymbolArray, Style/WordArray
[skip-stages=Flakey]

auto-corrected

Change-Id: Id187ed60c5590025e780d81b85b5212f51368f27
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/279196
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Jacob Burroughs <jburroughs@instructure.com>
QA-Review: Cody Cutrer <cody@instructure.com>
Product-Review: Cody Cutrer <cody@instructure.com>
Migration-Review: Cody Cutrer <cody@instructure.com>
2021-11-23 14:30:08 +00:00
Cody Cutrer 04e28fd25c RuboCop: Style/Next
[skip-stages=Flakey]

auto-corrected

Change-Id: Ia842e948dc2f6f0eb2d39a66e1c56cc4fe90bd5c
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/279168
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Jacob Burroughs <jburroughs@instructure.com>
QA-Review: Cody Cutrer <cody@instructure.com>
Product-Review: Cody Cutrer <cody@instructure.com>
2021-11-23 14:29:04 +00:00
Cody Cutrer 4d43809cae RuboCop: Style/PercentLiteralDelimiters
[skip-stages=Flakey]

auto-corrected, with a post-review looking for multiline strings
to convert to heredocs

Change-Id: I7f7afb11edd63415cde10866822dd2ac5ba0d8be
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/278669
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Jacob Burroughs <jburroughs@instructure.com>
QA-Review: Cody Cutrer <cody@instructure.com>
Product-Review: Cody Cutrer <cody@instructure.com>
Migration-Review: Cody Cutrer <cody@instructure.com>
2021-11-18 23:05:50 +00:00
Eric Saupe 16dc3bcd6d Add late policy to content migration
fixes LS-2665
flag=none

test plan:
- Create a course with a late policy
- Export and import the course to a new course
- Verify the late policy was copied as well
- Verify copying the course also brings the late policy with it

Change-Id: I403a5ac2ae0b5dfea84f6d9f8ba4cf6e3cc6661e
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/278450
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Jackson Howe <jackson.howe@instructure.com>
QA-Review: Jackson Howe <jackson.howe@instructure.com>
Product-Review: Eric Saupe <eric.saupe@instructure.com>
2021-11-17 20:19:46 +00:00
Cody Cutrer f76cbff3ac RuboCop: Performance/RedundantMerge
[skip-stages=Flakey]

auto-corrected

Change-Id: Ib7cb61f100d3ff41887c5ace9441f70fc30c9a69
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/278319
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Simon Williams <simon@instructure.com>
QA-Review: Cody Cutrer <cody@instructure.com>
Product-Review: Cody Cutrer <cody@instructure.com>
2021-11-16 16:35:34 +00:00
Cody Cutrer fd6b50710c RuboCop: Style/CaseLikeIf
[skip-stages=Flakey]

auto-corrected

Change-Id: I1f6b8a5f58a97a3ef17004ba9bf7a0940632dd55
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/278161
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Simon Williams <simon@instructure.com>
QA-Review: Cody Cutrer <cody@instructure.com>
Product-Review: Cody Cutrer <cody@instructure.com>
2021-11-12 20:24:23 +00:00
Cody Cutrer 44614b47d7 RuboCop: Lint/UselessAssignment app, config, doc, gems, lib
(everything except spec)

all manual

Change-Id: I6c49a3139efb0f0802ba63a15cab4d4d2cd0b8dd
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/276310
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Simon Williams <simon@instructure.com>
QA-Review: Cody Cutrer <cody@instructure.com>
Product-Review: Cody Cutrer <cody@instructure.com>
2021-10-27 15:36:29 +00:00
Eric Saupe 023f356e85 Remove pace plans start_date column
fixes LS-2723
flag=pace_plans

test plan:
- Creating and publishing pace plans for courses, sections, and users
should create all relevant assignment overrides with correct dates
- Pace plans frontend should continue to work as expected
- Pace plans should no longer have the start_date column but should
return a start_date for the relevant context's start_at date. For example,
if the pace plan is for the user then the start_date will be the start_at
date for the user's enrollment. Course section pace plans return the
course_section.start_at. The fallback for all start_at is the course's
start_at date.

Change-Id: Iffce86bd0eca65a4f51db5f88e2b35833b7bc1f1
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/276317
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Jeremy Stanley <jeremy@instructure.com>
QA-Review: Jeremy Stanley <jeremy@instructure.com>
Product-Review: Eric Saupe <eric.saupe@instructure.com>
2021-10-20 21:57:54 +00:00
Cody Cutrer 58d528037e RuboCop: Lint/AssignmentInCondition
[skip-stages=Flakey]

(manual)

Change-Id: I855b13a7888f4926df42fe6306cc248e611efdf6
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/274712
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Simon Williams <simon@instructure.com>
QA-Review: Cody Cutrer <cody@instructure.com>
Product-Review: Cody Cutrer <cody@instructure.com>
2021-09-29 03:38:39 +00:00
Cody Cutrer c65d57737a RuboCop: Layout lib
Change-Id: I0655d9a9d750f2debd6378b03d8ddc1403ebc31b
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/274158
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Simon Williams <simon@instructure.com>
QA-Review: Cody Cutrer <cody@instructure.com>
Product-Review: Cody Cutrer <cody@instructure.com>
2021-09-22 20:01:52 +00:00
Jeremy Stanley 4ad0004d11 migrate pace plans
test plan:
 - create a pace plan in a course
 - set attributes on the pace plan
 - set durations for module items
 - copy the course
 - the destination course should preserve pace plan attributes
   and module item durations

flag = none
closes LS-2451

Change-Id: If13cbb61ddbd1edc5cc23fd90cd2f74e4a274179
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/272073
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Jeff Largent <jeff.largent@instructure.com>
QA-Review: Jeff Largent <jeff.largent@instructure.com>
Product-Review: Jeremy Stanley <jeremy@instructure.com>
2021-09-02 22:19:43 +00:00
Angela Gomba 9be319934a Import friendlyDescription from course import
closes OUT-4493
flag=outcomes_friendly_description

test plan:
- Do each of the following:
  - Import a course with an outcome that has a
  friendly description
  - Course copy a course with an outcome that has
  a friendly description
  - Create a blueprint course with an outcome that
  has a friendly description
- Observe that the friendly description is imported
properly and is present within the imported
outcome

Change-Id: I824853e5ccccca7e37fc3598aa1f761c36355e9e
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/270994
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
QA-Review: Pat Renner <prenner@instructure.com>
Product-Review: Ben Friedman <ben.friedman@instructure.com>
Reviewed-by: Pat Renner <prenner@instructure.com>
Reviewed-by: Martin Yosifov <martin.yosifov@instructure.com>
2021-08-23 21:54:37 +00:00
Jeremy Stanley 571017196d Canvas for Elementary: friendly course names
test plan:
 - in a course where C4E is enabled, there should be
   a "friendly name" option in course settings.
 - if a friendly name is set, it should be used on
   the dashboard, in important dates, in the
   filter calendars modal, and in email notifications
 - if C4E is turned off, the friendly name option
   doesn't appear and any name that was set
   there previously doesn't appear either

closes LS-2388

Change-Id: I245cac21d92f0f4b81c1598e24af6dbc7dcef807
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/270755
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
QA-Review: Robin Kuss <rkuss@instructure.com>
Reviewed-by: Robin Kuss <rkuss@instructure.com>
Product-Review: Peyton Craighill <pcraighill@instructure.com>
2021-08-10 03:45:43 +00:00
Manoel Quirino Neto 25b74134d5 Add 'source_learning_outcome_group_id' to course copy importers
closes OUT-4548
flag=improved_outcomes_management

Test plan:
  Step 1: Setup a course group with source_outcome_group_id present:
    You can do this in 2 differents way:
    * 1: In any course, grab a learning outcome group and set the
      "source_outcome_group_id" attribute.
      This id must be the group id of an account group.
    * 2: Or use the graphql import API to import a group from the account
      Follow instructions on g/259131, section "Import a whole
      group from account to course"
    * After you setup the group, let's say you setup the group called
      "group 1", grab the id of "group 1" and hold for now as GROUP_1_ID.
    * You can grab the id by using the web inspector and inspect the
      graphql request after selecting the group in the LHS

  Step 2: Export course content:
    * Go to course -> settings -> export course content
      Export type: course
    * Click "Create export"
    * Wait the export to finish and click in "New Export"

  Step 3: Verify exported content.
    * Go to finder and find the exported file, it should has the
    .imscc extension. Replace the extension to .zip and unzip it
    * Open the file course_settings -> learning_outcomes.xml
    * Assert it's populated some source_outcome_group_id nodes of
    learningOutcomeGroup node
    * rename it back to .imscc

  Step 4: Import the course content in a blank course at the same account.
    * Go to account -> "+ course"
    * Go to the new course -> settings
    * Import course content
      Content type: Canvas Course Export Package
      Source: the imscc file
      Content: All content
      Click "Import"
      Wait until its done

  Step 5: Assert import works properly
    * Go to course -> outcomes
      You should see same outcomes as the exported course
    * Grab the id of the "group 1" that was just imported, lets
      hold in IMPORTED_GROUP_1_ID.
    * Go to console:
      Assert the source_outcome_group_id of GROUP_1 is the same
      of IMPORTED_GROUP_1_ID
      Assert the source_outcome_group_id are present (not nil)
      LearningOutcomeGroup.find(GROUP_1_ID)
      LearningOutcomeGroup.find(IMPORTED_GROUP_1_ID)

  Step 6: Import the course content in a blank course IN A DIFFERENT
  account.
    * Same as step 4

  Step 7: Assert import works properly
    * Same as step 5, but now the source_outcome_group_id should
      not be populated, since its belongs to a different account.
      Check this behavior in console

  Step 8: Assert course copy also copy the source_outcome_group_id
    * go to settings in course you want to copy > copy this course
    * check in console like step 4

Change-Id: Iada96de5b614441d86cdab96644d6110d7e3fe58
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/268694
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Augusto Callejas <acallejas@instructure.com>
Reviewed-by: Pat Renner <prenner@instructure.com>
QA-Review: Martin Yosifov <martin.yosifov@instructure.com>
Product-Review: Augusto Callejas <acallejas@instructure.com>
2021-07-19 21:41:10 +00:00
Ryan Hawkins 5e7af26998 Copy Custom Params for Tool Module Items
Previously, we had added support for migrating custom parameters for
tools that were in a course or assignment context. The next step logical
step after this was to add support for copying over custom params for
tools that were module items. This means that teachers will no longer
have to manually re-add LTI 1.3 tools to their modules after doing a
course copy.

closes INTEROP-6881

flag = none

test-plan:
* Install the LTI 1.3 Test Tool. You'll want to make sure it has the
  module item placement, so you can add it as a module item. In addition,
  you'll want to give it no custom parameters.
* Create a new course and add the test tool to a module as a module
  item. When you're adding it, make sure to define some custom
  parameters, something like `{ "context_id": "$Context.id" }`  Also add an assignment and a URL, just to be thorough.
* Create a new empty course and perform a course copy from the original
  course.
* Launch the tool from the module. You should see in the custom
  parameters section that the custom parameters you defined in the
  original course!
* Export the original course into an IMS Common Cartridge file. Then
  import that file in a new course. You should still be able to launch the
  tool from the module and have the custom params get copied over.

Change-Id: I37265ea8a28f15e6ebc711e18df6aad1c6ef883a
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/268683
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Jeremy Stanley <jeremy@instructure.com>
Reviewed-by: Mysti Lilla <mysti@instructure.com>
QA-Review: Xander Moffatt <xmoffatt@instructure.com>
Product-Review: Ryan Hawkins <ryan.hawkins@instructure.com>
2021-07-13 21:12:24 +00:00
Jeremy Stanley 2244a69bcc parse wiki pages in migrations with HTML5
this matches the version used by Canvas proper when it
sanitizes user HTML, to prevent surprises in migrations

test plan:
 - put the HTML attached to the ticket in a page
 - it should survive an export/import or course copy round trip

flag = none
fixes LS-2241

Change-Id: Iae07c73e3b994dddf814ad5ee7dc4c2bd0284559
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/267889
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Nate Armstrong <narmstrong@instructure.com>
QA-Review: Nate Armstrong <narmstrong@instructure.com>
Product-Review: Jeremy Stanley <jeremy@instructure.com>
2021-06-28 15:52:37 +00:00