[Course Settings] Add Ability to Create Custom Course and Section Data

Problem statement:

Currently, we are limited in the data we can store about a course/section based on the available Canvas course/section settings. Thus, we rely on following strict naming conventions to convey some of this information, but try not to include too much to be overwhelming. This results in some other potentially useful information for reporting/analysis being excluded.

For example, we have more variety of course formats than the currently available options. We currently use an abbreviation of our true course format in our naming conventions. In addition, we have various instructional methods that are not currently represented in our naming conventions. While these are not currently a part of our naming conventions, it would be helpful to store this information to help simplify reporting. It would also help with analyzing course activity as two courses with the same name that have different instructional methods may have significantly different expectations for Canvas activity. This is useful to know when monitoring for students in need of attention and monitoring faculty activity.

Another useful data point we have is a cross-listing group ID. This would be useful in validating that the appropriate sections are cross-listed together. It would also help to differentiate courses that are cross-listed based on SIS defined cross-listing vs manual cross-listing requests. In addition, since some data may vary among the sections of a course, it would be ideal to have the ability to store custom data at the section level too as some data may not apply to the course as a whole. This ability to store custom course/section data may also assist with LTIs. With this custom data, theme customizations and/or LTIs could be built to show this information when relevant.

Proposed solution:

Add the ability to store custom data about courses and sections like we can do for users. The permission to access this data should be less restrictive than the custom user data though. At a minimum, it would be ideal to control if students should have access to the data or not. While most cases I can think of would be appropriate for students to have access to as well, there may be some use cases others have that they would want the data restricted from students and only available to teachers and/or admins. Ideally there would also be granular permissions for create, update, and delete. While I see these being limited to select admin roles for our school, there may be other use cases to allow select course roles access to this too.

User role(s):

admin,instructor