Community

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Bill_Pratt
Community Contributor

Is there a way to change the default Course Details "more options" and Navigation options?

I am curious if I can change the default options globally for new courses for the Course Details tab "more options" section. Right now, most teachers are unchecking boxes and checking boxes that are opposite of what prepopulates. Essentially, I want to uncheck the three that are checked and check the bottom three.

Screen Shot 2016-07-11 at 12.09.09 PM.png

Also, I want to default some options "below the line" in the Navigation section of all courses--such as Chat (which none of our teachers use or want to use since it is unfiltered and not monitored (until after the fact).

I can't seem to find any information on these options.

Thanks.

9 Replies
Robbie_Grant
Community Coach
Community Coach

Bill.Pratt,

We are giving the Canvas Admins area a little bit of love (especially questions that are really, really old) and just want to check in with you.  This will also bring this question new attention. 

 

Were you able to find an answer to your question? I am going to go ahead and mark this question as answered because there hasn't been any more activity in a while so I assume that you have the information that you need. If you still have a question about this or if you have information that you would like to share with the community, by all means, please do come back and leave a comment.  Also, if this question has been answered by one of the previous replies, please feel free to mark that answer as correct.

 

Robbie

tdelillo
Community Champion

I seem to keep stumbling upon this question. Probably because I really wish the answer was "yes" (especially for the 'more options' defaults), but clearly there is not a way to alter the more options and navigation defaults system-wide. 

EDIT: There IS in fact an account level setting for the last option - Disable comments on announcements.

That said, our Chat feature IS hidden by default (thanks to our CSM). I think that's an exception because technically it's an LTI, not a native feature.

mark_wittervan
New Member

We use template to set these plus other things in a course.  When we create a course we automatically do a course copy from our template course and more setting come across with the course copy.  I agree it would be useful at be able to set defaults at the root or sub account level

a_craik
Community Contributor

Hi Mark

Just wondering if something similar could work for us - are your Canvas courses created by your SIS integration or is it manual creation?

Cheers

Adam

Hi Adam,

We use SIS.  Once a new course is created via the SIS integration we use the API's to copy a template to it.  If you want further technical details I can get one of out IT people to contact you.

Mark

a_craik
Community Contributor

That would be really useful, thanks! It'd be really useful to hear about the following:

  1. What triggers the API call? Does it run automatically after any new course is created? (and any code sharing is always appreciated!)
  2. Is there any plan to evolve the same approach, replacing a template with a Blueprint?

Cheers

Adam

1. I'll ask one of our developers to contact you about how it works technically.

2. We have looked at Blueprint, but at the moment we want to keep it available for use at a program level.  As you can only have one Blueprint per course, if we use it as a template we cannot use it gain in that course.  If think we may get to the point where we use a template as a bulk mechanism for courses and then use Blueprint for specific purposes i.e. adding a specific module to a group of course.

The templating is done using the content migration endpoints Content Migrations - Canvas LMS REST API Documentation and doing a course copy over the newly created course.

The call looks something like this: 

curl 'https://<canvas>/api/v1/courses/sis_course_id:<course_sis_id>/content_migrations' \
     -F 'migration_type=course_copy_importer' \
     -F 'settings[source_course_id]=sis_course_id:<template_course_sis_id>' \
     -H 'Authorization: Bearer <token>'‍‍‍‍‍‍‍‍

NB: We don't actually use cURL for this but rather a bunch of ruby libraries, this is just an example of how to do it.

We currently still use the CSV endpoints to sync our courses to canvas. So we keep track of the already templated courses and add any course not in the list to a queue for templating. Then another process polls canvas until the course is there and then calls the content migration endpoint. It then polls the progress_url (which is returned from the POST above) until the course_copy is done and then the course is added to list of already templated courses.

This all happens as part of our integration middleware service.

We are planning to use the live events for course creation in the future as that is a better approach, since we can't use blueprints for the reasons Mark Wittervan mentioned.

Right now I am doing something pretty similar to what Niko described. Once my CSV import completes, I pull a list of all active courses and then pull the content migration list for each course. If the course has no content migrations then I create one to copy the template into it. Here's my Python code:

import requests

from config.state import state


def _get_active_courses() -> list:
    url = state.config.BASE_URL + 'accounts/ACCOUNT_ID_HERE/courses'

    # Per page max value appears to be 100
    params = {
        'blueprint': False,
        'blueprint_associated': True,
        'completed': False,
        'per_page': 100
    }

    response = requests.get(url=url, headers=state.config.HEADER, params=params)
    active_courses = response.json()

    # If there is another page of results, Canvas provides a 'next' link in the header
    while 'next' in response.links:
        # We don't need to include params anymore - the given 'next' URL includes previously included params
        response = requests.get(url=response.links['next']['url'], headers=state.config.HEADER)
        courses = response.json()

        active_courses = active_courses + courses

    return active_courses


def copy_template():
    # Copy template into new courses
    print('Copying template into new courses...')

    courses = _get_active_courses()

    for course in courses:
        url = state.config.BASE_URL + 'courses/' + str(course['id']) + '/content_migrations'
        response = requests.get(url=url, headers=state.config.HEADER)
        response.raise_for_status()
        content_migrations = response.json()
        if not content_migrations:
            # Create a content migration to copy the template into the Blueprint
            params = {
                'migration_type': 'course_copy_importer',
                'settings[source_course_id]': 'TEMPLATE_ID_HERE'
            }

            response = requests.post(url=url, headers=state.config.HEADER, params=params)
            response.raise_for_status()