Coder Social home page Coder Social logo

reysantos / signup Goto Github PK

View Code? Open in Web Editor NEW

This project forked from yaleopen/signup

0.0 2.0 0.0 145 KB

Alternate to native Canvas Scheduler - Manage Appointment Groups and Time Slots

License: MIT License

Dockerfile 0.68% Shell 2.06% Groovy 35.52% Batchfile 0.77% JavaScript 60.97%

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

Watchers

James Cloos 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.