Forum .LRN Q&A: Courses with expired term (Expired Courses)

Hi everyone,

I've been thinking how to manage "Expired Courses". An Expired Course is a class instance with an out of date term.

We need that the course staff (students, tas, professors, etc) access the course items after the end date of the term BUT without modifying any item, I mean only read access.

I uploaded the porposal of the implementation here:
expired-courses-w-term-out-of-date/

Please, don't hesitate to post your comments or suggestions.

Thanks in advance.

Collapse
Posted by Deirdre Kane on
Enrique,

Our issues here at Sloan are slightly different and so I hope you can accommodate thatm in what you plan to do. In our case, I close each class at the end of each term so that it is no longer available for anyone new to join it, but unless I am asked, students are not removed from their classes. And i do not use the 'archive' function for classes for the same reason - for the most part, our professors do not mind if their students retain access to class materials after the end of the term and actually, students really like this 'feature.' I think we need to change the way students access content from previous terms, but we haven't gotten to that yet (and by this i mean that we need to expand the functionality of the Join/Drop page to include browsing by term).

So, though some of what you propose - an automated way of expiring classes and the ability to make content read-only - would be very useful to have, i would want the option of allowing students read-only access to their old classes as well. Would you be willing to include this as an option?

Collapse
Posted by Enrique Catalan on
Deirdre,

Yes, allowing students read-only to their old classes will be an option. Actually, there are going to be two options : read only to students and read only to course admins. You would be able to 'expire the class for students', 'expire the class for course admins' or 'expire the course for everyone' (give read-only per each case).

About browsing by term: In the groups portlet (user portal) We will only show the current courses and will add a link to show all the 'expired courses' grouped/ordered by term. What do you think?

Thanks for your comments :).

Collapse
Posted by Deirdre Kane on
Enrique,

That's good news about read-only for students.

About browsing by term: In the groups portlet (user portal) >We will only show the current courses and will add a link to >show all the 'expired courses' grouped/ordered by term. What >do you think?

I think that is a great idea. Clutter for the user portal for students is an issue here, so this would reduce clutter in the Groups portlet and our students will appreciate that.

DeeDee

Collapse
Posted by Enrique Catalan on
Now, We've already developed the GUI and the privilege stuff to the community and it works and looks good.

About the read-only access I tried the solutions with the 'rel types' described in link above and I tried with 'staff privileges' and it didn't work neither, So my possible solution is:

Modify each application of .Lrn/OACS to validate that their items are not shown and not modified (This could be a lot of modifications). I believe that maybe there is another solution instead of mine, so if you have another one, please let me know.

Collapse
Posted by Rocael Hernández Rizzardini on
This has been implemented at Galileo's .LRN instance, hacking db_dml & db_exec_plsql to abort the execution if the context for the original caller (top parent) of the function have a given permission (like "view_only_mode") to a set of users.

For db_dml we block everything that has such permission.
For db_exec_plsql we block also based on the naming convention (i.e. if you are executing something called .new or __new, then that is blocked, the same for .del / __delete) in combination with the permission.
Also we added extra stuff to handle those cases when the db_dml is called from a scheduled proc in order to avoid the check of a permission.

This functionality has been on production for more than 6 months, working fine and no performance penalties has been detected. And it is a general purpouse feature, not just for .LRN.

Unless we as a community want to refactor the whole bunch of applications we don't see a straightforward way to "freeze" an application in a view only mode. As you can see, this is a feature that we need to support.

We would like to go ahead on this and contribute, any comments for a better approach?

Collapse
Posted by Malte Sussdorff on
In my opinion this change needs a TIP, at least some better explanation because I'm yet unsure what it exactly is supposed to do and how it is to work (and I'm wary of undocumented side effects).

Furthermore, I'm a little bit concerned about usability. If I understand correctly, the user is able to call the "edit" page and make all corrections there, but when he hits submit, nothing is happening. Some users might be smart enought to realize they are in a "read only" community, but others will just complain that the work they did got submitted and did not show up on the plattform. What are your experiences over the past six months regarding to that ?

Yes, we'll post exactly what the changes are.
The user gets a message saying "you cannot perform this action..."
Collapse
Posted by Malte Sussdorff on
This message is good, but actually a user should not even have the chance to go to the page and add/edit the content. I would personally wish the developer dead if I had filled out an assessment of sixty questions in a community that is closed only to find out that the last 30 minutes that I spend filling it out is mute due to "you don't have permission for this action". Gosh, why couldn't the system tell me in advance!

(Disclaimer: The wish lasts only one minute and luckily I'm out of fulfilling wishes at the moment, otherwise I'd be in grave danger myself 😊)

Collapse
Posted by Enrique Catalan on
Yes, you're right Malte.

In our case, the user is adviced by a "Warning Message" in the header that says "EXPIRED COURSE" with big/red/bold font. The users know that when this message appears any member can't modifiy items.

Collapse
Posted by Dave Bauer on
Is there any reason you can't revoke permissions except READ on the community?
Collapse
Posted by Andrew Grumet on
Is there any reason you can't revoke permissions except READ on the community?

Course admins should still be able to get to the adminstrative parts of the site. So they need 'admin' privilege.

Collapse
Posted by Dave Bauer on
Ok, So is that a serious problem, admins having admin, they would end up with admin over everything. and could change stuff. but is that a real world problem?
Collapse
Posted by Andrew Grumet on
I like the idea of a general-purpose way of preventing writes. I haven't thought carefully about how this could be done solely through the permissions system, but I can see how it could be tricky. It's probably worth having a few more heads bang against it.

Some smaller but notable stuff to watch out for:

1) In postgres I'm pretty sure you can modify data in a SELECT some_function(args), which means you may not catch everything. That's mostly an enforcement and engineering standards issue.

2) If you're hanging all of the checks on [ad_conn package_id], you're going to miss anything processed in the background, such as email notifications.

Collapse
Posted by Andrew Grumet on
such as email notifications.

Correction: inbound replies to email notifications.

Yes, it is a real world problem, many things that the end user might need to check are under /admin dirs, evaluation, lors and others has that.

And of course, we base this on an engineering standard, since pg invokes functions in a select statement.

Inboud replies is an special case that needs to be handled.

Collapse
Posted by Dave Bauer on
Ok,

I am just worried about adding complexity to the db_* procs which get called probably as much as any other procedures in the toolkit.