jamesjonesmath/canvancement

Multiple Assignment Dates

Closed this issue · 2 comments

Hi James,

This is an awesome project.

Canvas allows multiple assignment dates. When you load dues dates it seems like you only get one for each assignment. Could you add an option to bring every unique due date for each assignment with some identifier?

The identifier could just be the canvas key for each unique due date (there must be one). If you could add the students associated with each unique due date that would be even more awesome. That would allow us to assign specific students different due dates.

We have a three year set of project based learning courses in engineering that really all follow a single sequence of assignments. The assignments are typically a series short learning tasks followed buy a project That pattern repeats twice each year or that is our hope. Student work at different paces and by the third year there is a lot of variation on where students are in the sequence. It would be great to batch upload who is assigned what and when.

Thanks for considering.

Dave

Dave,

I prefer that discussion about changes or improvements to functionality take place in the associated page in the the Canvas Community: Adjust All Assignment Dates on One Page. If you have comments about the code itself, they can take place here. Generally, though, I use GitHub as a place to hold the code but I don't know how to manage code with it. In fact, I need to update the code for this script to the latest production version contained in the Google Sheet.

This question has been addressed and answered several times on that Community page already. I will not be adding differentiated assignments to this script unless someone can find a way to keep it simple for the majority of the people. I have thought about that for years and don't have a good solution. Everything that I can think of has major drawbacks that overly complicate it or remove the one-row/one-assignment setup that allows for sorting and deletion without having to worry about missing some information (e.g., if someone deletes overrides and changes the date for the main assignment, does that mean they want the overrides removed or are they just changing the date for everyone else?). Those may have solutions (to remove an override, leave it there but remove the dates -- but the script doesn't do any removal of anything right now).

There is also the timing issue involved with including overrides. You can get extension overrides with an assignment. but writing them back to Canvas requires a network call for each override. You can send all overrides for a course at one time, but it will delete any that are not provided, meaning that breaks the ability for people to delete rows they're not using to speed up the process. Google App Scripts has a hard time limit of 5 minutes and network calls occur in a synchronous manner. Variables do not persist in Google App Scripts. In other words, I can't save the values that exist in Canvas when I load them the first time and have them available when I go to save them and have to check to see what has changed. I have to load them again a second time, then check them, then save them, all within that 5 minute time limit. 5 minutes is probably enough, but if you start having to write lots of overrides, it may not be.

Including multiple rows per assignment or columns that extend past the main block will cause more confusion and possibility of error. There are Canvas IDs for everything. Overrides are tied to the assignment, and I don't think you can look up an override without the assignment ID to go along with it. That means that we then need to include the assignment ID and the override ID, adding a column that will, for most people, be blank.

Referring to a student by a Canvas ID moves this script from the realm of (hopefully) easy to use to difficult. The script does not create assignments, nor would it create overrides. People would still have to go into every assignment and manually create the overrides. A different script might be able to do this and the code is free for people to take and modify to make that happen, but it just doesn't fit with the purpose of this script.

From the description of what you want, it sounds like some programming would be more beneficial than this script. You could write code that would look at when a student completes an assignment and then adjust the due date for the next assignment based on that.

Finally, I do not have time right now to do anything more than maintain existing scripts or add small tweaks.