Coder Social home page Coder Social logo

signup's Introduction

SignUp for Canvas

Manage Appointment Groups and Time Slots in Canvas. More info here.

Dev Setup

  1. Install Grails 3.3.2

  2. Create environment variables for application.yml properties

    mail:
        host: '${MAIL_HOST}'
        default:
            from: '${MAIL_FROM_ADDRESS}'
            replyTo: '${MAIL_REPLYTO_ADDRESS}'
    canvas:
        #Canvas Admin Access Token
        oauthToken: '${CANVAS_API_TOKEN}'
        #Base URL ex. https://<school>.instructure.com
        canvasBaseUrl: '${CANVAS_BASE_URL}'
        #Shared Secret used during LTI Install
        ltiSecret: '${SIGNUP_LTI_SECRET}'
        #Comma Delimited List of Canvas Role IDs that can manage Calendars
        #Viewable at Admin -> Permissions -> Course Calendar
        manageCalendarRoles: '${SIGNUP_CALENDAR_ROLE_IDS}'
        #Namespace used for storing custom user data via Users API
        customDataNS: '${CANVAS_API_CUSTOM_NS}'
    dataSource:
        username: '${DB_USERNAME}'
        password: '${DB_PASSWORD}'
  3. Build & Run: grails run-app

  4. Install LTI in Canvas via XML Config

    <?xml version="1.0" encoding="UTF-8"?>
    <cartridge_basiclti_link xmlns="http://www.imsglobal.org/xsd/
    imslticc_v1p0"
       xmlns:blti = "http://www.imsglobal.org/xsd/imsbasiclti_v1p0"
       xmlns:lticm ="http://www.imsglobal.org/xsd/imslticm_v1p0"
       xmlns:lticp ="http://www.imsglobal.org/xsd/imslticp_v1p0"
       xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation = "http://www.imsglobal.org/xsd/imslticc_v1p0
    http://www.imsglobal.org/xsd/lti/ltiv1p0/imslticc_v1p0.xsd
       http://www.imsglobal.org/xsd/imsbasiclti_v1p0 http://
    www.imsglobal.org/xsd/lti/ltiv1p0/imsbasiclti_v1p0.xsd
       http://www.imsglobal.org/xsd/imslticm_v1p0 http://
    www.imsglobal.org/xsd/lti/ltiv1p0/imslticm_v1p0.xsd
       http://www.imsglobal.org/xsd/imslticp_v1p0 http://
    www.imsglobal.org/xsd/lti/ltiv1p0/imslticp_v1p0.xsd">
    <blti:launch_url>http://<HOST>:8080/signup/LTI/launch</blti:launch_url>
       <blti:title>Signup Tool</blti:title>
       <blti:description>Alternate to Canvas Scheduler</blti:description>
       <blti:extensions platform="canvas.instructure.com">
         <lticm:property name="privacy_level">public</lticm:property>
         <lticm:options name="global_navigation">
           <lticm:property name="icon_url">http://<HOST>:8080/signup/assets/calendar-clock_lg.svg</lticm:property>
           <lticm:property name="default">enabled</lticm:property>
           <lticm:property name="enabled">true</lticm:property>
           <lticm:property name="display_type">full_width</lticm:property>
         </lticm:options>
       </blti:extensions>
    </cartridge_basiclti_link>

Features

Creating Appointment Blocks

  • Any role in Canvas that has the ability to manage a course calendar will be able to create & manage Appointment Blocks (role ids configured in application.yml)
    • The ability to create new Appointment Blocks is limited to the active term
  • New Appointment Form
    • Location is stored as custom user data in Canvas
      • scope: /signup/location
      • ns: configured in application.yml
    • Calendars are limited to courses in the active term where the user is enrolled as a role with calendar management permissions

Edit Appointment Blocks

  • Slot Management
    • New slots can be added, but won't be created until submitting the form
    • Existing slots can be updated/deleted through the Save/Trash icons on the corresponding row

Reserving Appointment Slot

  • Calendar managers (ie. Instructors, TAs, etc) can unreserve/reserve slots on behalf of a student or group
  • Students can unreserve/reserve on behalf of themselves or their Group
    • Student calendars are validated for both individual and Group reservation (warning will appear)
    • If conflict exists, an option to delete conflicting appointment is displayed

Notifications

  • Notifications are managed in the MySQL database
    • When Appointment Block is created, by default all notifications are disabled for the block
  • Direct Message
    • Calendar managers can send messages to participants of an Appointment Block
  • The email address is retrieved from the user's Canvas profile
  • All emails are sent asynchronously

Viewing Participant Summary

  • Calendar managers can view a summary of all reservations in the Appointment Block

Deleting Appointment Blocks

  • Deleting an Appointment Block will also delete all its slots and existing reservations

Installation

  • The tool is installed in the Global Navigation bar
  • "LOR External Tools" Feature needs to be enabled for it to appear
  • The icon is packaged with the application and retrieved via URL

Limitations

Canvas API Restrictions

  • Unpublishing Appointment Groups not allowed
    • Solved by storing published status in MySQL DB, although still visible in Canvas Scheduler
  • Updating Calendar
    • Courses & Sections - Removing course/section is not supported by Canvas API, only adding
    • Groups - Changing Group Calendar is not supported by Canvas API
  • Participant Visibility
    • Changing from "Not Visible" to "Visible" does not reflect retroactively, only new slots

Notifications from Canvas are still triggered

  • Canvas notifications are still triggered by appointment group events. The Canvas user would need to disable their “Scheduling” Notifications

Course Home Calendar Links point to Canvas Scheduler

  • Adding custom javascript to Canvas theme is needed to change these links

Instructor can reserve slots on behalf of student/groups

  • Student/Group calendars are not validated when an Instructor does this, so conflicts may exist

signup's People

Contributors

iorabi avatar dependabot[bot] avatar

Watchers

Matthew Buckett avatar James Cloos avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.