PrairieLearn / PrairieLearn

Online problem-driving learning system
http://prairielearn.readthedocs.io/
Other
356 stars 325 forks source link

Support relative startDate/endDate from start of course instance #3061

Open mwest1066 opened 4 years ago

mwest1066 commented 4 years ago

To make it easier to copy courses instances, we could set "dateOrigin": "2020-01-19" in infoCourseInstance.json and then allow all other dates in the course to be specified relative to this origin date, using ISO 8601 interval notation. PostgreSQL accepts ISO 8601 intervals which are like P5D for 5 days, or P12W for 12 weeks. These can be combined, so P8W3DT6H is 8 weeks + 3 days + 6 hours.

When copying a course instance for a new semester, we would then only need to change the dateOrigin and everything else would shift automatically. Of course some manual editing might also be needed to line things up with break weeks, but it might be easier to edit relative dates in weeks rather than absolute dates.

For example, infoCourseInstance.json could include:

{
    "dateOrigin": "2020-01-19",
    "allowAccess": [
        {
            "startDate": "P-3D",
            "endDate": "P16W3D"
        }
    ]
}

This would allow access from three days before Jan 19 up to 16 weeks + 3 days after.

margoseltzer commented 3 years ago

This basic idea is wonderful; a potentially simpler alternative that would still be a win would be to do this via export/import: export a list of all assessment dates into into a CSV and then allow an import with the dates modified. This isn't quite as wonderful as the automatic conversion, but would still save 90% of the work. (Hmmm -- thinking a bit more: one might be able to apply the date changes from one term to the next via Excel macros to the CSV, which could then automate even more, but I think the export/import would simplify sufficiently that you might not need anything else.)

mwest1066 commented 3 years ago

This basic idea is wonderful; a potentially simpler alternative that would still be a win would be to do this via export/import: export a list of all assessment dates into into a CSV and then allow an import with the dates modified. This isn't quite as wonderful as the automatic conversion, but would still save 90% of the work. (Hmmm -- thinking a bit more: one might be able to apply the date changes from one term to the next via Excel macros to the CSV, which could then automate even more, but I think the export/import would simplify sufficiently that you might not need anything else.)

Awesome idea! This general pattern of "download CSV, modify, upload again" is a really good idea that we should be using more often.

I don't suppose you know anyone who'd be interested in implementing this? 😄 I don't think it would be very hard, and I'd be very happy to discuss implementation with anyone in @cheeren's weekly dev meeting.

margoseltzer commented 3 years ago

I am probably going to a version of this over our Winter break (2/15) that works for my course; if I can also find the time to figure out how to do this generically, I'll certainly try. If @cheeren has the resources, I'm happy to work with them.

cheeren commented 3 years ago

I do have resources... I have a nice little team that is willing to work on this. (recording this issue in a planning doc)

mwest1066 commented 3 years ago

I do have resources... I have a nice little team that is willing to work on this. (recording this issue in a planning doc)

Yay!