Moodle
  1. Moodle
  2. MDL-7315

Give time/date extensions to individual students for course activities.

    Details

    • Affected Branches:
      MOODLE_17_STABLE, MOODLE_18_STABLE, MOODLE_19_STABLE, MOODLE_20_STABLE
    • Rank:
      3342

      Description

      Have the ability to extend time/date limitations for activities for individual students. It would be nice to be able to set this at a course OR student level.

      Discussed in various ways at:

      http://moodle.org/mod/forum/discuss.php?d=57271
      http://moodle.org/mod/forum/discuss.php?d=52690&parent=241064

      and probably others.

      1. patch.txt
        77 kB
        yogeshrl
      1. mainExtensionsWindow.png
        150 kB
      2. singleUserExtension.png
        129 kB

        Issue Links

          Activity

          Hide
          Anthony Borrow added a comment -

          As per, http://moodle.org/mod/forum/discuss.php?d=57271 for quizzes and lessons this would help accomodate what we refer to as extended time. I think with one table the extension of times could be handled on a per user basis. I think the interface for adding the entries would be the more complicated part.

          Show
          Anthony Borrow added a comment - As per, http://moodle.org/mod/forum/discuss.php?d=57271 for quizzes and lessons this would help accomodate what we refer to as extended time. I think with one table the extension of times could be handled on a per user basis. I think the interface for adding the entries would be the more complicated part.
          Hide
          Timothy Takemoto added a comment -

          Bearing in mind the
          http://tracker.moodle.org/browse/MDL-4464
          bug, I often have to extend quiz submission times for students, I do this with a password and general extension but as was pointed out in other forums, this is confusing to other students, who think that they should be able to take the test and ask me what the password is.

          Show
          Timothy Takemoto added a comment - Bearing in mind the http://tracker.moodle.org/browse/MDL-4464 bug, I often have to extend quiz submission times for students, I do this with a password and general extension but as was pointed out in other forums, this is confusing to other students, who think that they should be able to take the test and ask me what the password is.
          Hide
          Anthony Borrow added a comment -

          FYI - Just to update here that in MDL-14234 we were discussing a way of implementing adding time extensions for user activities. Peace - Anthony

          Show
          Anthony Borrow added a comment - FYI - Just to update here that in MDL-14234 we were discussing a way of implementing adding time extensions for user activities. Peace - Anthony
          Hide
          Anthony Borrow added a comment -

          adding 1.8, 1.9, and 2.0 to list of affected versions. I doubt this will be fixed in versions prior to 2.0. Perhaps we can get an updated fix version from Nick. Peace - Anthony

          Show
          Anthony Borrow added a comment - adding 1.8, 1.9, and 2.0 to list of affected versions. I doubt this will be fixed in versions prior to 2.0. Perhaps we can get an updated fix version from Nick. Peace - Anthony
          Hide
          Glenn Ansley added a comment -

          Hello,
          I've taken a swing at this. It's a big swing so I'm going to assume a miss followed by several revisions with your help. I've not undertaken a patch this big for Moodle core before so please offer advice where needed.

          Modifications made (per conversation here, in the forums, and on MDL-14234):

          • I created a new class inside the lib/ folder. I've constructed this class in a manner that any activity module should be able to use it to create individual student/cm extensions or 'customizations' to any of the db fields that activity normally supports.
          • I've added one table to the DB structure
          • I've updated the install.xml and the upgrade.php files to handle that.
          • I've modified the Quiz module to demonstrate how integration could take place.

          Caveats

          • I have developed this for Moodle 1.9.11 as that is what version I needed it for
          • I've written this with hopes of it being brushed up by the community and included in core so its not written as a module.
          • I've only prototyped - though extensively - so there are no translation strings available yet and i imagine custom capabilities might be suggested.
          • Because I created it for core and not for a module, you will need to bump your main Moodle version # to get the tables installed.

          Use

          • Create a quiz w/o starttime, endtime, or timelimit
          • Attempt the quiz with multiple students (or multiple times with one student)
          • Go back to the Edit Quiz screen
          • Navigate to the bottom and assign an extension to a student for the quiz. (extend the timeclose for them or something)
          • Log back in as a student and see that quiz has been updated.

          Notes

          • Regrade compensates for changed values
          • The class I added to the /lib folder has PHPDoc so use that if you need to.
          • I'm probably forgetting to mention something else.

          Warning DO NOT INSTALL THIS ON PRODUCTION. THIS IS NOT SAFE FOR PRODUCTION.

          You can pull my modifications here: https://github.com/glennansley/moodle/tree/MDL-7315-time-date-extensions

          I look forward to your feedback.

          Show
          Glenn Ansley added a comment - Hello, I've taken a swing at this. It's a big swing so I'm going to assume a miss followed by several revisions with your help. I've not undertaken a patch this big for Moodle core before so please offer advice where needed. Modifications made (per conversation here, in the forums, and on MDL-14234 ): I created a new class inside the lib/ folder. I've constructed this class in a manner that any activity module should be able to use it to create individual student/cm extensions or 'customizations' to any of the db fields that activity normally supports. I've added one table to the DB structure I've updated the install.xml and the upgrade.php files to handle that. I've modified the Quiz module to demonstrate how integration could take place. Caveats I have developed this for Moodle 1.9.11 as that is what version I needed it for I've written this with hopes of it being brushed up by the community and included in core so its not written as a module. I've only prototyped - though extensively - so there are no translation strings available yet and i imagine custom capabilities might be suggested. Because I created it for core and not for a module, you will need to bump your main Moodle version # to get the tables installed. Use Create a quiz w/o starttime, endtime, or timelimit Attempt the quiz with multiple students (or multiple times with one student) Go back to the Edit Quiz screen Navigate to the bottom and assign an extension to a student for the quiz. (extend the timeclose for them or something) Log back in as a student and see that quiz has been updated. Notes Regrade compensates for changed values The class I added to the /lib folder has PHPDoc so use that if you need to. I'm probably forgetting to mention something else. Warning DO NOT INSTALL THIS ON PRODUCTION. THIS IS NOT SAFE FOR PRODUCTION. You can pull my modifications here: https://github.com/glennansley/moodle/tree/MDL-7315-time-date-extensions I look forward to your feedback.
          Hide
          Tim Hunt added a comment -

          I assume you spotted that this has already been implemented in the quiz module in Moodle 2.0. (Of course, it would be better to implement this in a way that works in all modules eventually.)

          Show
          Tim Hunt added a comment - I assume you spotted that this has already been implemented in the quiz module in Moodle 2.0. (Of course, it would be better to implement this in a way that works in all modules eventually.)
          Hide
          Glenn Ansley added a comment -

          I honestly didn't look at 2.0 because that's probably a year out at this point for us. I will now though. I'd be interested to see how you do your interface and probably mimic that.

          Show
          Glenn Ansley added a comment - I honestly didn't look at 2.0 because that's probably a year out at this point for us. I will now though. I'd be interested to see how you do your interface and probably mimic that.
          Hide
          Mark Drechsler added a comment -

          Can this please have the 'partner' tag added? It is one on my hit list for clients - even if its not as pressing as rubric grading forms

          Show
          Mark Drechsler added a comment - Can this please have the 'partner' tag added? It is one on my hit list for clients - even if its not as pressing as rubric grading forms
          Hide
          Anthony Borrow added a comment -

          Mark - Since this is working for the quiz activity module, I would think that a similar strategy could be applied to all modules as Tim mentions. Seems like a reasonable request as I like to see that type of consistency with activity modules. Peace - Anthony

          Show
          Anthony Borrow added a comment - Mark - Since this is working for the quiz activity module, I would think that a similar strategy could be applied to all modules as Tim mentions. Seems like a reasonable request as I like to see that type of consistency with activity modules. Peace - Anthony
          Hide
          Anthony Borrow added a comment -

          I'm bumping the priority of this to major and set the fix version to dev backlog. I'll let one of the Michael's do the tagging of the issue. Peace - Anthony

          Show
          Anthony Borrow added a comment - I'm bumping the priority of this to major and set the fix version to dev backlog. I'll let one of the Michael's do the tagging of the issue. Peace - Anthony
          Hide
          Mark Drechsler added a comment -

          Sounds like a plan Anthony - love the way it works in quizzes, having this extended to other activities.

          Cheers,

          Mark.

          Show
          Mark Drechsler added a comment - Sounds like a plan Anthony - love the way it works in quizzes, having this extended to other activities. Cheers, Mark.
          Hide
          Michael Blake added a comment -

          This issue is affecting MP clients. Please give it priority.

          Show
          Michael Blake added a comment - This issue is affecting MP clients. Please give it priority.
          Hide
          Michael de Raadt added a comment -

          Bumping priority on this.

          Show
          Michael de Raadt added a comment - Bumping priority on this.
          Hide
          Tim Hunt added a comment -

          Did you read the comments above before adding component quiz? Seemingly not. This was implemented in the quiz for Moodle 2.1 - so no more work needed there.

          Show
          Tim Hunt added a comment - Did you read the comments above before adding component quiz? Seemingly not. This was implemented in the quiz for Moodle 2.1 - so no more work needed there.
          Hide
          Adam Olley added a comment -

          I've posted a proposed way of handling this that'd work for all activities on the forums.

          http://moodle.org/mod/forum/discuss.php?d=183478

          Very much RFC. Let me know if I'm on the right track or completely mad.

          Cheers,
          Adam.

          Show
          Adam Olley added a comment - I've posted a proposed way of handling this that'd work for all activities on the forums. http://moodle.org/mod/forum/discuss.php?d=183478 Very much RFC. Let me know if I'm on the right track or completely mad. Cheers, Adam.
          Hide
          Mark Drechsler added a comment -

          Anyone got any comments on Adam's suggested implementation? Like many, I would love to see Tim's quiz solution implemented in at the very least the Assignment module, which is where I get the majority of queries around how to make extensions for individuals and groups.

          Keep voting, keep talking.

          Show
          Mark Drechsler added a comment - Anyone got any comments on Adam's suggested implementation? Like many, I would love to see Tim's quiz solution implemented in at the very least the Assignment module, which is where I get the majority of queries around how to make extensions for individuals and groups. Keep voting, keep talking.
          Hide
          Tim Hunt added a comment -

          Adam's suggested implementation is too simplistic. There is no way that this can be done completely generically, because different activities have different DB columns that need to be overridden.

          Compare this with Moodle works for editing the basic activity settings. The mod has to create all the DB columns itself; it has be define the editing form; it has to provide specific add/update_instance functions.

          To implement overrides 'generally' you would require at least that much specific support from each module. Not impossible, but a substantial task.

          My suggestion would be that whoever wants to implement this should first implement it in a single module (e.g. assignment) while looking at the quiz code and basically copying it. Only then, once there are two different working implementations, so you try to refactor this into a generic system with callbacks in the modules.

          Show
          Tim Hunt added a comment - Adam's suggested implementation is too simplistic. There is no way that this can be done completely generically, because different activities have different DB columns that need to be overridden. Compare this with Moodle works for editing the basic activity settings. The mod has to create all the DB columns itself; it has be define the editing form; it has to provide specific add/update_instance functions. To implement overrides 'generally' you would require at least that much specific support from each module. Not impossible, but a substantial task. My suggestion would be that whoever wants to implement this should first implement it in a single module (e.g. assignment) while looking at the quiz code and basically copying it. Only then, once there are two different working implementations, so you try to refactor this into a generic system with callbacks in the modules.
          Hide
          Adam Olley added a comment -

          All the main interface would require is to know which user you want to apply an override for, and the new override time(s)/setting(s). The modules can decide themselves what they apply those to, if at all.

          It seems far less work would be involved in having modules define a FEATURE_OVERRIDE in their supports method and to then provide a function or two to supply stuff like a list of possible fields to be overriden and their type.

          Naturally any module that will support this will need to alter its checks on any override-able fields to make sure they haven't been overridden.

          Merely copying how its done in quiz for another mod, say assignment (where this is most requested), would pretty much be a carbon copy and bring us no closer to a generic solution.

          What may be a good idea is rather than one big table for overrides site-wide, you instead have a table per supported module (much like we have quiz_overrides). This would give each module more control over its override data (and would be beneficial for lookups and other stuff like backup/restore).

          Show
          Adam Olley added a comment - All the main interface would require is to know which user you want to apply an override for, and the new override time(s)/setting(s). The modules can decide themselves what they apply those to, if at all. It seems far less work would be involved in having modules define a FEATURE_OVERRIDE in their supports method and to then provide a function or two to supply stuff like a list of possible fields to be overriden and their type. Naturally any module that will support this will need to alter its checks on any override-able fields to make sure they haven't been overridden. Merely copying how its done in quiz for another mod, say assignment (where this is most requested), would pretty much be a carbon copy and bring us no closer to a generic solution. What may be a good idea is rather than one big table for overrides site-wide, you instead have a table per supported module (much like we have quiz_overrides). This would give each module more control over its override data (and would be beneficial for lookups and other stuff like backup/restore).
          Hide
          yogeshrl added a comment -

          Hi all,
          I want to Participant to this issue , how should i go for it?

          Show
          yogeshrl added a comment - Hi all, I want to Participant to this issue , how should i go for it?
          Hide
          Michael Hughes added a comment -

          We would like to issue "permits" (for lack of a better term) for late submission (this is typically specifically around assignment submissions). These would 'administratively' grant a student the ability to submit a piece of work late and take some sort of sanction (or none) that would be applied against the grade they get for the activity.

          In my head it makes sense for this to be applied at the Gradebook level as the sanction is modifier of the result of their performance rather than a modifier before the performance result is reported (if that makes sense).

          It would seem to me that a separate "Extensions Manager" module could implement the necessary database tables to record the issue(and revocation) of permits and then a gradebook report could display the information. I'm not sure how this could be implemented with the current gradebook API for updating grade items (so that a permit's sanction is applied to raw grade as it is being reported to the gradebook) without core changes...

          It also potentially raises the prospect that you could have "stacking" permits (e.g. 1st extension applies a 10%, 2nd one applies an additional 10% etc).

          The only permit I can think of at the moment is "extend submission deadline".

          Show
          Michael Hughes added a comment - We would like to issue "permits" (for lack of a better term) for late submission (this is typically specifically around assignment submissions). These would 'administratively' grant a student the ability to submit a piece of work late and take some sort of sanction (or none) that would be applied against the grade they get for the activity. In my head it makes sense for this to be applied at the Gradebook level as the sanction is modifier of the result of their performance rather than a modifier before the performance result is reported (if that makes sense). It would seem to me that a separate "Extensions Manager" module could implement the necessary database tables to record the issue(and revocation) of permits and then a gradebook report could display the information. I'm not sure how this could be implemented with the current gradebook API for updating grade items (so that a permit's sanction is applied to raw grade as it is being reported to the gradebook) without core changes... It also potentially raises the prospect that you could have "stacking" permits (e.g. 1st extension applies a 10%, 2nd one applies an additional 10% etc). The only permit I can think of at the moment is "extend submission deadline".
          Hide
          yogeshrl added a comment -

          hello all,
          I have almost finished the coding part of giving time/date extensions to individual students for assignment module.
          I am going to send a patch in upcoming 2-3 days, before that I have some doubts.

          1)Display strings (lang) must be added into the lang pack.I am thinking to create the local lang for this, am i right, if not, Tell me what to do? and how to do?

          2)There should be button to open the main window of extensions. considering the capabilities are given to teacher , editing teacher, manager. Where do I add this button/link so that user with specified capability can see the button/link? and how to add this?

          3) I have added a new table (assignment_extensions) in to database manually. how to add this new table into database, so others can upgrade there database to use this functionality.

          please give me some suggestion to do this, that will finalize my work and i can switch to new task.

          thanks..

          see screenshots attached above how this feature look likes.

          Show
          yogeshrl added a comment - hello all, I have almost finished the coding part of giving time/date extensions to individual students for assignment module. I am going to send a patch in upcoming 2-3 days, before that I have some doubts. 1)Display strings (lang) must be added into the lang pack.I am thinking to create the local lang for this, am i right, if not, Tell me what to do? and how to do? 2)There should be button to open the main window of extensions. considering the capabilities are given to teacher , editing teacher, manager. Where do I add this button/link so that user with specified capability can see the button/link? and how to add this? 3) I have added a new table (assignment_extensions) in to database manually. how to add this new table into database, so others can upgrade there database to use this functionality. please give me some suggestion to do this, that will finalize my work and i can switch to new task. thanks.. see screenshots attached above how this feature look likes.
          Hide
          yogeshrl added a comment - - edited

          see the attachment above, How does it look like.
          1)main extension window. -> displays the all all users the the course and extension table, different filters are also provided like 1) show all, extended, requireextension etc. Also provides a way to give one or more student extension by selecting "QUICKEXTEND".

          2)single user extension window -> display the all info about the single user, his extension field, and lots more.

          please help me to do task maintained in above post.

          thanks..

          Show
          yogeshrl added a comment - - edited see the attachment above, How does it look like. 1)main extension window. -> displays the all all users the the course and extension table, different filters are also provided like 1) show all, extended, requireextension etc. Also provides a way to give one or more student extension by selecting "QUICKEXTEND". 2)single user extension window -> display the all info about the single user, his extension field, and lots more. please help me to do task maintained in above post. thanks..
          Hide
          Ray Lawrence added a comment -

          Where do you access the page to grant extensions?

          Show
          Ray Lawrence added a comment - Where do you access the page to grant extensions?
          Hide
          yogeshrl added a comment - - edited

          For the main extensions window, I need to type url every time.
          like..
          localhost/moodle/mod/assignment/extensions.php?id=2 or
          localhost/moodle/mod/assignment/extensions.php?a=3

          Here value of "id" is course module id and "a" is assignment id. you can see attachment url also.
          After loading the main window, buttons are provided for displaying single user extension in the main window.
          so, where do I link the main window? considering the capabilities are given to teacher, editing teacher, manager .

          Show
          yogeshrl added a comment - - edited For the main extensions window, I need to type url every time. like.. localhost/moodle/mod/assignment/extensions.php?id=2 or localhost/moodle/mod/assignment/extensions.php?a=3 Here value of "id" is course module id and "a" is assignment id. you can see attachment url also. After loading the main window, buttons are provided for displaying single user extension in the main window. so, where do I link the main window? considering the capabilities are given to teacher, editing teacher, manager .
          Hide
          yogeshrl added a comment -

          Hello all,
          I have solved the problem (how to add a new table in database) as stated in earlier post.I fixed it using XMLDB and changing install.xml version.php upgrade.php.
          Until now I could't fix..
          1) how to add lang (display string ) in newly created feature(patch).
          2) Button that will display main extensions window for selected assignment, which has input course_module id or assignment id, Considering capabilities are given to teacher, editing teacher and manager.

          Thanks.

          Show
          yogeshrl added a comment - Hello all, I have solved the problem (how to add a new table in database) as stated in earlier post.I fixed it using XMLDB and changing install.xml version.php upgrade.php. Until now I could't fix.. 1) how to add lang (display string ) in newly created feature(patch). 2) Button that will display main extensions window for selected assignment, which has input course_module id or assignment id, Considering capabilities are given to teacher, editing teacher and manager. Thanks.
          Hide
          miki Alliel added a comment -

          hello yogeshrl '
          is this only for moodle 2?
          is it also to moodle 1.9.x?
          thanks

          Show
          miki Alliel added a comment - hello yogeshrl ' is this only for moodle 2? is it also to moodle 1.9.x? thanks
          Hide
          yogeshrl added a comment -

          I am writing it in moodle 2.2+ code, so it will be functional in moodle 2.2+ and further versions.
          For making it functional in lower versions, I need to change some some part of code ( functions that are part of moodle 2.2+ versions and not of moodle 1.9+, which I am using in extensions code), not more than 10 line of code.
          I am sending patch in few hours here. please check it and give me feedback.

          Show
          yogeshrl added a comment - I am writing it in moodle 2.2+ code, so it will be functional in moodle 2.2+ and further versions. For making it functional in lower versions, I need to change some some part of code ( functions that are part of moodle 2.2+ versions and not of moodle 1.9+, which I am using in extensions code), not more than 10 line of code. I am sending patch in few hours here. please check it and give me feedback.
          Hide
          yogeshrl added a comment -

          I am sending patch here, I think, I don't have permissions to add label, so i am sending patch.txt file through attachment. Please promote this patch. If possible I will be giving github pull url.

          HOW TO TEST.
          0) your moodle version must be moodle2.2+
          1) merge this patch in your moodle
          2) upgrade your moodle
          3) create a course and provide a assignment(any type) by setting up timedue and preventlate.
          4) login as teacher or admin.
          5) click on assignment to view it, that will display assignment. If you are logged in as teacher, then will get a link below and right of assignment dates. click on that, main extensions window will be displayed, containing all student in the course who are have permission to submit assignment.
          5) give extension to the student, on using various options like "Quickextend" or "extend". You can give multiple extension at a time by selecting "Quickextend" option. Also provided comment text box helps to give feedback to the student who has given extension, when they view assignment.
          6) Option like final are really helpful for not to give extension to student many times.
          7) After providing extension, login as a student, view the assignment, you will get all extension details like how much extension given and time due of assignment including extension. The upload link will be available until the extension date of that student.
          8) login as another student who haven't given extension, view assignment, will display original assignment dates and link will be available as per timedue of assignment.

          Other features....
          1) When teacher opens the grading window, the student who had given extension will be displayed in faint red color along with the extension time and submission time. This will be helpful for teacher while grading student.
          2) Another hack is that when teacher is in single user grading window, there also he/she can view extension time, and submission time.

          Different options...
          1) filters are provided like extended, require extension, per page extensions to show etc.
          2) save, saveandnext, next, cancel buttons are provided.
          3) for open assignment means not set preventlate and time, no require extension facility is provided.

          Future work....
          1) handling groups in the course.
          2) giving extension to the group.

          PLEASE PROMOTE THIS PATCH, THIS WILL BE MINIMAL VERSION OF EXTENSION TO COURSE ACTIVITY, WE WILL BE PLANING TO DO OTHER TASKS LIKE EXTENSION TO QUIZ AND LESSON MODULE.

          Show
          yogeshrl added a comment - I am sending patch here, I think, I don't have permissions to add label, so i am sending patch.txt file through attachment. Please promote this patch. If possible I will be giving github pull url. HOW TO TEST. 0) your moodle version must be moodle2.2+ 1) merge this patch in your moodle 2) upgrade your moodle 3) create a course and provide a assignment(any type) by setting up timedue and preventlate. 4) login as teacher or admin. 5) click on assignment to view it, that will display assignment. If you are logged in as teacher, then will get a link below and right of assignment dates. click on that, main extensions window will be displayed, containing all student in the course who are have permission to submit assignment. 5) give extension to the student, on using various options like "Quickextend" or "extend". You can give multiple extension at a time by selecting "Quickextend" option. Also provided comment text box helps to give feedback to the student who has given extension, when they view assignment. 6) Option like final are really helpful for not to give extension to student many times. 7) After providing extension, login as a student, view the assignment, you will get all extension details like how much extension given and time due of assignment including extension. The upload link will be available until the extension date of that student. 8) login as another student who haven't given extension, view assignment, will display original assignment dates and link will be available as per timedue of assignment. Other features.... 1) When teacher opens the grading window, the student who had given extension will be displayed in faint red color along with the extension time and submission time. This will be helpful for teacher while grading student. 2) Another hack is that when teacher is in single user grading window, there also he/she can view extension time, and submission time. Different options... 1) filters are provided like extended, require extension, per page extensions to show etc. 2) save, saveandnext, next, cancel buttons are provided. 3) for open assignment means not set preventlate and time, no require extension facility is provided. Future work.... 1) handling groups in the course. 2) giving extension to the group. PLEASE PROMOTE THIS PATCH, THIS WILL BE MINIMAL VERSION OF EXTENSION TO COURSE ACTIVITY, WE WILL BE PLANING TO DO OTHER TASKS LIKE EXTENSION TO QUIZ AND LESSON MODULE.
          Hide
          yogeshrl added a comment -

          patch

          patch.txt for giving time/date extension to individual students to assignment module.

          Show
          yogeshrl added a comment - patch patch.txt for giving time/date extension to individual students to assignment module.
          Hide
          Damyon Wiese added a comment -

          This was implemented for the new assignment.

          Show
          Damyon Wiese added a comment - This was implemented for the new assignment.
          Hide
          James McLean added a comment -

          We have been working on a module for extensions in 2.4, which implements some advanced functionality. We are aiming this at being usable for all activities in Moodle, rather than just Assign.

          For a full rundown of what our module supports and the progress on porting to 2.4 from 1.9, have a read of: https://moodle.org/mod/forum/discuss.php?d=216784

          In line with Tim's comments above, we're willing to do the work to implement this properly so that any module can be modified to use it, as we will be doing it anyway one way or another.

          I will contact Tim to discuss.

          Show
          James McLean added a comment - We have been working on a module for extensions in 2.4, which implements some advanced functionality. We are aiming this at being usable for all activities in Moodle, rather than just Assign. For a full rundown of what our module supports and the progress on porting to 2.4 from 1.9, have a read of: https://moodle.org/mod/forum/discuss.php?d=216784 In line with Tim's comments above, we're willing to do the work to implement this properly so that any module can be modified to use it, as we will be doing it anyway one way or another. I will contact Tim to discuss.
          Hide
          Nadav Kavalerchik added a comment -

          @James,
          Beautiful work! with the Global Time Extension plugin you are developing.
          I am Looking forward to see it in action, when it is ready for testing.

          Show
          Nadav Kavalerchik added a comment - @James, Beautiful work! with the Global Time Extension plugin you are developing. I am Looking forward to see it in action, when it is ready for testing.
          Hide
          James McLean added a comment -

          Following the guidelines at: http://docs.moodle.org/dev/Process#New_feature_development I have begun work on a specification to outline implementing this in the Core; initially I have focused mainly on the actual core changes required, however I have touched on exactly what functionality our code will bring, and suggested a couple of ways it could be implemented.

          The specification is located here: http://docs.moodle.org/dev/Moodle_Activity_Extensions_Spec but should be considered a draft for the moment. I have created a tracker issue https://tracker.moodle.org/browse/MDL-37505 to track suggestions to the specification so this can be implemented, so any suggestions should be made on that tracker item please.

          I am aware that the new item I have created is essentially a duplicate of this issue, however I felt the spec and it's discussion should be separated from this tracker item.

          Show
          James McLean added a comment - Following the guidelines at: http://docs.moodle.org/dev/Process#New_feature_development I have begun work on a specification to outline implementing this in the Core; initially I have focused mainly on the actual core changes required, however I have touched on exactly what functionality our code will bring, and suggested a couple of ways it could be implemented. The specification is located here: http://docs.moodle.org/dev/Moodle_Activity_Extensions_Spec but should be considered a draft for the moment. I have created a tracker issue https://tracker.moodle.org/browse/MDL-37505 to track suggestions to the specification so this can be implemented, so any suggestions should be made on that tracker item please. I am aware that the new item I have created is essentially a duplicate of this issue, however I felt the spec and it's discussion should be separated from this tracker item.
          Hide
          Tim Hunt added a comment -

          One normally discusses specs in a forum, not a tracker issue. Your spec does not discuss performance implications. I think that what you are proposing is insufficient to handle batch operations. It will be a classic performance failure (DB query in a loop). It would also be better if you removed my name from that spec.

          Show
          Tim Hunt added a comment - One normally discusses specs in a forum, not a tracker issue. Your spec does not discuss performance implications. I think that what you are proposing is insufficient to handle batch operations. It will be a classic performance failure (DB query in a loop). It would also be better if you removed my name from that spec.
          Hide
          Mark Drechsler added a comment -

          ... but aside from all that, thanks for investing the time and effort to get a spec going for this development.

          One comment after a brief flick (leaving the serious work for Tim to pass judgement on of course) is that this will have an impact on the existing assignment module which already has some of this functionality built in to core, even if not using Tim's code for quiz extensions. Also, looking at the broadness in the scope of the changes, and having been through the Assignment upgrade project, I'd suggest that this will take a much more comprehensive spec, and a whole lot more discussion with HQ, before it would have any chance of being done - and even then it would probably need to be targeted for 2.6 - at best. Not meaning to sound pessimistic, just sharing previous experiences as an 'outsider' working to get changes made to core code.

          Show
          Mark Drechsler added a comment - ... but aside from all that, thanks for investing the time and effort to get a spec going for this development. One comment after a brief flick (leaving the serious work for Tim to pass judgement on of course) is that this will have an impact on the existing assignment module which already has some of this functionality built in to core, even if not using Tim's code for quiz extensions. Also, looking at the broadness in the scope of the changes, and having been through the Assignment upgrade project, I'd suggest that this will take a much more comprehensive spec, and a whole lot more discussion with HQ, before it would have any chance of being done - and even then it would probably need to be targeted for 2.6 - at best. Not meaning to sound pessimistic, just sharing previous experiences as an 'outsider' working to get changes made to core code.
          Hide
          Michael Hughes added a comment -

          Would it not then be feasible to have this as an interface that modules would be able to opt into over the next few version (*_supports('deadline') springs to mind)? instead of a big "bang lets upgrade every module"?

          If you strip it back surely the biggest core changes are (I'm glossing over lots of implementation details yes):

          1. every (instance of a) mod may observe a core deadline
          2. and every mod that supports (1) should be calling a function that might change the deadline reported by core.

          We have a "deadlines" block that amalgamates the deadlines from the quiz and assignment modules into a single chronological list for an individual user and just these 2 modules use different field names to store the "deadline" (timeclose and timedue). We'd like to extend this plugin to for other modules but we have to look at how each one stores its (student) deadline, so just ironing out this inconsistency would be nice.

          Show
          Michael Hughes added a comment - Would it not then be feasible to have this as an interface that modules would be able to opt into over the next few version (*_supports('deadline') springs to mind)? instead of a big "bang lets upgrade every module"? If you strip it back surely the biggest core changes are (I'm glossing over lots of implementation details yes): every (instance of a) mod may observe a core deadline and every mod that supports (1) should be calling a function that might change the deadline reported by core. We have a "deadlines" block that amalgamates the deadlines from the quiz and assignment modules into a single chronological list for an individual user and just these 2 modules use different field names to store the "deadline" (timeclose and timedue). We'd like to extend this plugin to for other modules but we have to look at how each one stores its (student) deadline, so just ironing out this inconsistency would be nice .
          Hide
          James McLean added a comment -

          Thanks for the comments; the spec is definitely still in Draft and shouldn't be considered final. I'm a developer not a BA, so the time I can spend writing specs is limited but I will see what I can do. I am most interested in the best way to integrate it into Core at this point, from our perspective the extensions management is well defined (for our needs specifically, admittedly). I may be able to provide our internal spec, however I cannot do that without permission from superiors.

          @Tim: I'll remove your name. I created a thread in the forum last night as suggested in the wiki: https://moodle.org/mod/forum/discuss.php?d=219620. Apologies for implying discussion should take place in the tracker.

          @Mark: Yes that's an unfortunate side affect. Though if this does go ahead the advanced extensions management this new code will provide would probably be welcomed in a lot of situations. I realise this will take time to be implemented, 2.6 was my initial thought, but that doesn't stop us integrating locally and testing in our own environments - in fact its probably a good idea.

          @Michael: Thanks for your thoughts, that does sound like a good way to go. I'll investigate further.

          Show
          James McLean added a comment - Thanks for the comments; the spec is definitely still in Draft and shouldn't be considered final. I'm a developer not a BA, so the time I can spend writing specs is limited but I will see what I can do. I am most interested in the best way to integrate it into Core at this point, from our perspective the extensions management is well defined (for our needs specifically, admittedly). I may be able to provide our internal spec, however I cannot do that without permission from superiors. @Tim: I'll remove your name. I created a thread in the forum last night as suggested in the wiki: https://moodle.org/mod/forum/discuss.php?d=219620 . Apologies for implying discussion should take place in the tracker. @Mark: Yes that's an unfortunate side affect. Though if this does go ahead the advanced extensions management this new code will provide would probably be welcomed in a lot of situations. I realise this will take time to be implemented, 2.6 was my initial thought, but that doesn't stop us integrating locally and testing in our own environments - in fact its probably a good idea. @Michael: Thanks for your thoughts, that does sound like a good way to go. I'll investigate further.
          Hide
          Michael Hughes added a comment -

          Just reading about Assignment Re-submission (https://tracker.moodle.org/browse/MDL-36804) development work and thought it should be raised in relation to any ideas about extension management (both on that issue and this one), since I think that they are related to each other!

          Show
          Michael Hughes added a comment - Just reading about Assignment Re-submission ( https://tracker.moodle.org/browse/MDL-36804 ) development work and thought it should be raised in relation to any ideas about extension management (both on that issue and this one), since I think that they are related to each other!
          Hide
          James McLean added a comment -

          Just a quick heads up; My priorities were temporarily shifted the last two weeks onto another urgent task, but I'll be working on this again this week.

          Show
          James McLean added a comment - Just a quick heads up; My priorities were temporarily shifted the last two weeks onto another urgent task, but I'll be working on this again this week.
          Hide
          James McLean added a comment -

          I have been developing on this further locally against 2.5dev.

          Michael's suggestions seemed to be a good way to implement this, so I have started working on a deadline plugin architecture which borrows heavily from the way the Plagiarism plugin system is implemented. In conjunction with this I have been modifying the mod_assign module to use the deadlines plugin for storing it's opening/deadline/cutoff dates.

          So far I have a deadlines plugin which is a basic plugin that does the translation between the activity and the open/deadline dates it expects and the column names used in the deadlines table. Deadline loads the plugins it knows about (deadlines and extensions currently) each which will return a date, specifically in the case of the Extensions plugin it will check the relevant details of the activity and the user and return the extension date.
          I expect that at a point in the future the open/close/deadline column names in the relevant modules could be standardised, simplifying the deadlines code a little.

          There is a lot to be implemented yet, but what's here so far is a reasonable starting point which is very flexible and provides some excellent scope for future plugins.

          No public GIT code yet, due to my local network denying upload access (temporary, help desk issue lodged to have this allowed).

          Show
          James McLean added a comment - I have been developing on this further locally against 2.5dev. Michael's suggestions seemed to be a good way to implement this, so I have started working on a deadline plugin architecture which borrows heavily from the way the Plagiarism plugin system is implemented. In conjunction with this I have been modifying the mod_assign module to use the deadlines plugin for storing it's opening/deadline/cutoff dates. So far I have a deadlines plugin which is a basic plugin that does the translation between the activity and the open/deadline dates it expects and the column names used in the deadlines table. Deadline loads the plugins it knows about (deadlines and extensions currently) each which will return a date, specifically in the case of the Extensions plugin it will check the relevant details of the activity and the user and return the extension date. I expect that at a point in the future the open/close/deadline column names in the relevant modules could be standardised, simplifying the deadlines code a little. There is a lot to be implemented yet, but what's here so far is a reasonable starting point which is very flexible and provides some excellent scope for future plugins. No public GIT code yet, due to my local network denying upload access (temporary, help desk issue lodged to have this allowed).
          Hide
          James McLean added a comment - - edited

          The code for deadline/deadlines/extensions is getting to the point where it will shortly be ready for others to look at, I'm still waiting for my local network issue to be resolved (but there has been progress on that front) so I'm hoping by mid next week, I will have pushed to my GIT repo for others to have a look at it.

          The code has been written with production in mind, and as few changes to core and modules as possible.

          It is of course still under development, so of course is not 100% functional, but enough has been done that others should be able to say if we're on the right track or not, and offer suggestions for improvements.

          Show
          James McLean added a comment - - edited The code for deadline/deadlines/extensions is getting to the point where it will shortly be ready for others to look at, I'm still waiting for my local network issue to be resolved (but there has been progress on that front) so I'm hoping by mid next week, I will have pushed to my GIT repo for others to have a look at it. The code has been written with production in mind, and as few changes to core and modules as possible. It is of course still under development, so of course is not 100% functional, but enough has been done that others should be able to say if we're on the right track or not, and offer suggestions for improvements.
          Hide
          James McLean added a comment -

          I've made further progress on this, and updated my forum thread: https://moodle.org/mod/forum/discuss.php?d=216784#p970601

          Could I please ask that people have a look, and if you have any suggestions please make those in the thread?

          Show
          James McLean added a comment - I've made further progress on this, and updated my forum thread: https://moodle.org/mod/forum/discuss.php?d=216784#p970601 Could I please ask that people have a look, and if you have any suggestions please make those in the thread?
          Hide
          James McLean added a comment -

          Our deadlines/extensions code is nearly ready for our internal UAT and should go for that this week. I'm certain they'll find some issues, which I'll then need to resolve.
          The plan is that once it's passed our internal UAT i'll make the code public.

          In the meantime I am happy to provide a github link privately with the understanding it's probably broken; but i'm most interested in hearing feedback on the architecture and implementation.

          Show
          James McLean added a comment - Our deadlines/extensions code is nearly ready for our internal UAT and should go for that this week. I'm certain they'll find some issues, which I'll then need to resolve. The plan is that once it's passed our internal UAT i'll make the code public. In the meantime I am happy to provide a github link privately with the understanding it's probably broken; but i'm most interested in hearing feedback on the architecture and implementation.
          Hide
          Jackson D'souza added a comment - - edited

          Hi James

          We are interested in having a look at your deadline/extenstion code, please can you email me the github link.

          Thanks
          Jackson
          jacksond at epic dot co dot uk

          Show
          Jackson D'souza added a comment - - edited Hi James We are interested in having a look at your deadline/extenstion code, please can you email me the github link. Thanks Jackson jacksond at epic dot co dot uk
          Hide
          James McLean added a comment -

          Hi Jackson,
          Certainly. The github branch hasn't been maintained for a little while so lags behind updates that were required for 2.6. There has also been a lot of bugs we have resolved that are not on Github. I'll push my changes up shortly and let you know the details.
          Thanks

          Show
          James McLean added a comment - Hi Jackson, Certainly. The github branch hasn't been maintained for a little while so lags behind updates that were required for 2.6. There has also been a lot of bugs we have resolved that are not on Github. I'll push my changes up shortly and let you know the details. Thanks
          Hide
          Jackson D'souza added a comment -

          That's great. Thanks James. Will wait for your reply

          Show
          Jackson D'souza added a comment - That's great. Thanks James. Will wait for your reply

            People

            • Votes:
              63 Vote for this issue
              Watchers:
              38 Start watching this issue

              Dates

              • Created:
                Updated: