Moodle
  1. Moodle
  2. MDL-26997

META: Refactor all Assignment subtypes into a single activity module

    Details

    • Rank:
      16627

      Description

      The assignment module is a core part of Moodle that has evolved over a long time. Unfortunately it's a lot more complicated than it should be due to the old subtypes that were added.

      To simplify the code and the interface, all of these subtypes can be replaced by one module that takes the following inputs:

      • a HTML text (via editor)
      • a set of files

      and provides the following items for feedback:

      • a HTML text (via editor)
      • a set of files
      • one or more grades (numerical or scales)

      For the time being (2.1) we do not need to consider enhancements. This is just a refactor. All old assignments should upgrade cleanly to the new structure without losing any features.

      This issue details the sub-tasks required to make this happen.

        Issue Links

        Progress
        Resolved Sub-Tasks

        Sub-Tasks

        1.
        New assignment module to replace all existing subtypes Sub-task Closed Damyon Wiese
         
        2.
        Assignment Subtypes Combined: Implement Changes Sub-task Closed Damyon Wiese
         
        3.
        Assignment Subtypes Combined: Documentation Sub-task Closed Damyon Wiese
         
        4.
        Assignment Web Services: Decide on list of supported functions Sub-task Closed Unassigned
         
        5.
        Assignment Web Services: Implement new web services Sub-task Closed Damyon Wiese
         
        6.
        Assignment Web Services: Documentation Sub-task Closed Damyon Wiese
         
        7.
        Assignment Offline Marking: Decide all settings/ui/design Sub-task Closed Damyon Wiese
         
        8.
        Assignment Offline Marking: Implement Changes Sub-task Closed Damyon Wiese
         
        9.
        Assignment Offline Marking: Documentation Sub-task Closed Damyon Wiese
         
        10.
        Assignment Student Submission Receipts: Decide all settings/ui/design Sub-task Closed Damyon Wiese
         
        11.
        Assignment Student Submission Receipts: Implement Changes Sub-task Closed Damyon Wiese
         
        12.
        Assignment Student Submission Receipts: Documentation Sub-task Closed Damyon Wiese
         
        13.
        Team based assignments: Decide all settings/ui/design Sub-task Closed Damyon Wiese
         
        14.
        Team based assignments: Implement Changes Sub-task Closed Damyon Wiese
         
        15.
        Team based assignments: Documentation Sub-task Closed Damyon Wiese
         
        16.
        Assignment Submission Statement: Decide on settings/ui/design Sub-task Closed Damyon Wiese
         
        17.
        Assignment Submission Statement: Implement Changes Sub-task Closed Damyon Wiese
         
        18.
        Assignment Submission Statement: Documentation Sub-task Closed Damyon Wiese
         
        19.
        Assignment Blind Marking: Decide settings/ui/design Sub-task Closed Damyon Wiese
         
        20.
        Assignment Blind Marking: Implement Changes Sub-task Closed Damyon Wiese
         
        21.
        Assignment Blind Marking: Documentation Sub-task Closed Mary Cooch
         
        22.
        Assignment Submission Date Extensions: Decide settings/ui/design Sub-task Closed Damyon Wiese
         
        23.
        Assignment Submission Date Extensions: Implement Changes Sub-task Closed Damyon Wiese
         
        24.
        Assignment Submission Date Extensions: Documentation Sub-task Closed Damyon Wiese
         
        25.
        Assignment Marking Group Support: Decide settings/ui/design Sub-task Closed Damyon Wiese
         
        26.
        Assignment Marking Group Support: Implement Changes Sub-task Closed Damyon Wiese
         
        27.
        Assignment Marking Group Support: Documentation Sub-task Closed Damyon Wiese
         
        28.
        Assignment Send Notification UI Improvements: Decide settings/ui/design Sub-task Closed Damyon Wiese
         
        29.
        Assignment Send Notification UI Improvements: Implement Changes Sub-task Closed Damyon Wiese
         
        30.
        Assignment Send Notification UI Improvements: Documentation Sub-task Closed Damyon Wiese
         
        31.
        Rename old assignment in 2.3 to "Assignment (2.2)" Sub-task Closed David Mudrak
         
        32.
        fix mod_assign settings Sub-task Closed Damyon Wiese
         
        33.
        Implement Unit tests for mod_assign Sub-task Closed Damyon Wiese
         

          Activity

          Hide
          Davo Smith added a comment -

          I was just wondering how this is likely to affect those of us maintaining 3rd-party assignment type plugins? My UploadPDF assignment type makes heavy use of the assignment functionality, whilst also extending it beyond simply returning a set of files & a comment (although that is what it does 'behind the scenes').

          Show
          Davo Smith added a comment - I was just wondering how this is likely to affect those of us maintaining 3rd-party assignment type plugins? My UploadPDF assignment type makes heavy use of the assignment functionality, whilst also extending it beyond simply returning a set of files & a comment (although that is what it does 'behind the scenes').
          Hide
          Martin Dougiamas added a comment -

          Hi Davo.

          It's likely that the new assignment module will have a new name. The old one will be deprecated but still available to support those subtypes if required.

          Long term, though, most of the sub-plugins should become full modules.

          Show
          Martin Dougiamas added a comment - Hi Davo. It's likely that the new assignment module will have a new name. The old one will be deprecated but still available to support those subtypes if required. Long term, though, most of the sub-plugins should become full modules.
          Hide
          Martin Dougiamas added a comment -

          Note this has been pushed to 2.2. The next step here is a comprehensive specification describing all the details and issues.

          Show
          Martin Dougiamas added a comment - Note this has been pushed to 2.2. The next step here is a comprehensive specification describing all the details and issues.
          Hide
          Henning Bostelmann added a comment -

          Actually, I was quite happy that I was (recently) able to refactor our necessary local customization to the assignment module into an assignment subplugin, without modifying core code too much. Enhanced subplugin support from 2.0 on seems to make it even easier (I'm currently in the process of upgrading). It would be a pity to lose that option.

          Show
          Henning Bostelmann added a comment - Actually, I was quite happy that I was (recently) able to refactor our necessary local customization to the assignment module into an assignment subplugin, without modifying core code too much. Enhanced subplugin support from 2.0 on seems to make it even easier (I'm currently in the process of upgrading). It would be a pity to lose that option.
          Hide
          Miroslav Fikar added a comment -

          I agree with Henning. From the point of view of 3rd party assignment plugin developer (random_assignment in our case), I do not like much the idea of cancelling the subtypes. In the current state we do not need to take care of many things that are automatically solved by the main assignment module. I do not say that we are lazy, but it takes quite a long time / money to learn all new ways how to implement the old ideas using new API.

          Show
          Miroslav Fikar added a comment - I agree with Henning. From the point of view of 3rd party assignment plugin developer (random_assignment in our case), I do not like much the idea of cancelling the subtypes. In the current state we do not need to take care of many things that are automatically solved by the main assignment module. I do not say that we are lazy, but it takes quite a long time / money to learn all new ways how to implement the old ideas using new API.
          Hide
          David Mudrak added a comment -

          Well, the idea comes in one hand with the improvements offered by gradebook. So then modules that need just assignment-like grading would use an interface provided by the gradebook and they would not need to implement their own grading tools. From this point of view - what remains there that should be provided by the mod/assignment core?

          Show
          David Mudrak added a comment - Well, the idea comes in one hand with the improvements offered by gradebook. So then modules that need just assignment-like grading would use an interface provided by the gradebook and they would not need to implement their own grading tools. From this point of view - what remains there that should be provided by the mod/assignment core?
          Hide
          Miroslav Fikar added a comment -

          The core provides update form with all settings where we just provide one more block with specific information. It also provides grading page. Under the hood assignment subplugins can profit from gradebook interactions, backup/restore functions, reset, and many more. Not to mention security guaranteed by the core.

          Show
          Miroslav Fikar added a comment - The core provides update form with all settings where we just provide one more block with specific information. It also provides grading page. Under the hood assignment subplugins can profit from gradebook interactions, backup/restore functions, reset, and many more. Not to mention security guaranteed by the core.
          Hide
          Martin Dougiamas added a comment -

          Note that this can sort of shortcut still be provided using core functions and classes stored in /lib/assignmentlib.php (similar to /lib/resourcelib.php).

          Show
          Martin Dougiamas added a comment - Note that this can sort of shortcut still be provided using core functions and classes stored in /lib/assignmentlib.php (similar to /lib/resourcelib.php).
          Hide
          Henning Bostelmann added a comment -

          > what remains there that should be provided by the mod/assignment core?

          Well, basically, we use all of the functionality of mod/assignment core - the module settings, the grading screen, the interface with the calendar, access control; indeed, the entire code. What the assignment type plugin in our case provides is some extra functionality (without going into details, it's some extra attachments called "problem sheets" and "solution sheets" which are visible only at certain times to certain people under certain conditions). It's functionality that is critically needed by us but unlikely ever to be provided by core.

          For this purpose, the subplugin concept just fits perfectly. In 1.9, this still needed some core hacks, mainly for access control to the files; since 2.0, with the new File API, it works with just changing 2 or 3 lines of core, plus the plugin.

          Show
          Henning Bostelmann added a comment - > what remains there that should be provided by the mod/assignment core? Well, basically, we use all of the functionality of mod/assignment core - the module settings, the grading screen, the interface with the calendar, access control; indeed, the entire code. What the assignment type plugin in our case provides is some extra functionality (without going into details, it's some extra attachments called "problem sheets" and "solution sheets" which are visible only at certain times to certain people under certain conditions). It's functionality that is critically needed by us but unlikely ever to be provided by core. For this purpose, the subplugin concept just fits perfectly. In 1.9, this still needed some core hacks, mainly for access control to the files; since 2.0, with the new File API, it works with just changing 2 or 3 lines of core, plus the plugin.
          Hide
          Martin Dougiamas added a comment -

          I'm starting to build up the spec for this here http://docs.moodle.org/dev/Assignment

          One option is that we could make this a new module (perhaps /mod/assign) and keep but deprecate the old one (make it disabled by default) so Assignment sub-plugins still work. But only on the understanding that eventually it might stop being supported.

          Show
          Martin Dougiamas added a comment - I'm starting to build up the spec for this here http://docs.moodle.org/dev/Assignment One option is that we could make this a new module (perhaps /mod/assign) and keep but deprecate the old one (make it disabled by default) so Assignment sub-plugins still work. But only on the understanding that eventually it might stop being supported.
          Hide
          Fernando Oliveira added a comment -

          I don't mean to muddy the waters here, but our organization has been using a custom-made activity type that amalagamates the standard activity types for a number of years. I just wanted to share it with your team since its been a very popular module with our teachers and I think it contains some useful features. You can see a quick mock-up here: http://moodle.org/mod/forum/discuss.php?d=185676. Cheers.

          Show
          Fernando Oliveira added a comment - I don't mean to muddy the waters here, but our organization has been using a custom-made activity type that amalagamates the standard activity types for a number of years. I just wanted to share it with your team since its been a very popular module with our teachers and I think it contains some useful features. You can see a quick mock-up here: http://moodle.org/mod/forum/discuss.php?d=185676 . Cheers.
          Hide
          Martin Dougiamas added a comment -

          I think you mean "assignment types" not "activity types", right?

          Show
          Martin Dougiamas added a comment - I think you mean "assignment types" not "activity types", right?
          Hide
          Michael Hughes added a comment - - edited

          We've been looking at the same idea of rationalising the Assignment Types (albeit for 1.9) which we've done as a assignment sub-type that provides numerous options for enabling/disabling things like Turnitin Originality Check, Pre/post submission activities, anonymous marking etc.

          We have also been developing a set of (modular) "Grading" tools that are displayed and the member of staff can select which one they wish applied when they are creating the assignment.

          The assignment sub-type that we've been building inherits from the current Advanced Upload assignment type and uses 80% of that plugin's UI & features, so being able to inherit that much functionality for free would be good and only override it if necessary...

          We also have a Group submission assignment type

          In either case we'd be looking to port this to 2.x if it weren't available when we upgrade, so we'd be interested in being involved in developing (or helping to) this.

          Show
          Michael Hughes added a comment - - edited We've been looking at the same idea of rationalising the Assignment Types (albeit for 1.9) which we've done as a assignment sub-type that provides numerous options for enabling/disabling things like Turnitin Originality Check, Pre/post submission activities, anonymous marking etc. We have also been developing a set of (modular) "Grading" tools that are displayed and the member of staff can select which one they wish applied when they are creating the assignment. The assignment sub-type that we've been building inherits from the current Advanced Upload assignment type and uses 80% of that plugin's UI & features, so being able to inherit that much functionality for free would be good and only override it if necessary... We also have a Group submission assignment type In either case we'd be looking to port this to 2.x if it weren't available when we upgrade, so we'd be interested in being involved in developing (or helping to) this.
          Hide
          Fernando Oliveira added a comment -

          Sorry, yes, I meant "assignment types" not "activity types".... but this module also makes a mean cup of coffee!

          Show
          Fernando Oliveira added a comment - Sorry, yes, I meant "assignment types" not "activity types".... but this module also makes a mean cup of coffee!
          Hide
          Martin Dougiamas added a comment -

          Development is going ahead on a new mod/assign that supercedes mod/assignment and contains everything that the old one did plus group assignments and a lot more. It will not, however, support sub-assignment types.

          mod/assignment can remain installed to support those existing assignment plugins for the near term. The upgrade process when mod/assign is installed will give admins the choice of migrating all the old core assignment types to the new module.

          Can I have a vote from people who develop custom assignment types? What would you prefer:

          a) A lib/assignmentlib.php with a base class (also used by mod/assign) that implements some core assignment functionality with basic functionality for you to extend in your own mod/myassignmenttype, or

          b) A clean mod/assign that you can easily copy and extend to do whatever you wish.

          Show
          Martin Dougiamas added a comment - Development is going ahead on a new mod/assign that supercedes mod/assignment and contains everything that the old one did plus group assignments and a lot more. It will not, however, support sub-assignment types. mod/assignment can remain installed to support those existing assignment plugins for the near term. The upgrade process when mod/assign is installed will give admins the choice of migrating all the old core assignment types to the new module. Can I have a vote from people who develop custom assignment types? What would you prefer: a) A lib/assignmentlib.php with a base class (also used by mod/assign) that implements some core assignment functionality with basic functionality for you to extend in your own mod/myassignmenttype, or b) A clean mod/assign that you can easily copy and extend to do whatever you wish.
          Hide
          Michael Hughes added a comment -

          My vote would be for (a).

          The main reason that we've sub-classed a core assignment type is that it already provides significant UI parts that work fine, so an assignmentlib.php that provides these at a suitably granular level would work for us. I'd rather not have to maintain copies of code..sort of offends my OO sensibilities...

          Show
          Michael Hughes added a comment - My vote would be for (a). The main reason that we've sub-classed a core assignment type is that it already provides significant UI parts that work fine, so an assignmentlib.php that provides these at a suitably granular level would work for us. I'd rather not have to maintain copies of code..sort of offends my OO sensibilities...
          Hide
          Davo Smith added a comment -

          I think I'd prefer a) as well - as that means the assignment subtypes, once converted, are easier to keep up to date, as Moodle evolves.

          Show
          Davo Smith added a comment - I think I'd prefer a) as well - as that means the assignment subtypes, once converted, are easier to keep up to date, as Moodle evolves.
          Hide
          Miroslav Fikar added a comment -

          Option A: to extend, not to copy

          Show
          Miroslav Fikar added a comment - Option A: to extend, not to copy
          Hide
          David Balch added a comment -

          Another vote for option A here.

          Show
          David Balch added a comment - Another vote for option A here.
          Hide
          Damyon Wiese added a comment -

          My vote is A too. The grading screen in particular would be a lot of code to copy and maintain in each module.

          Show
          Damyon Wiese added a comment - My vote is A too. The grading screen in particular would be a lot of code to copy and maintain in each module.
          Hide
          Henning Bostelmann added a comment -

          The modifications I make are usually small, so b) would not make sense. a) is more plausible.

          However, how would that work in detail? For example, would mod/myassignmenttype, as a separate module, use separate database tables from mod/assign? separate backup structures? separate implementations of the gradebook API? It all seems quite a lot for making small extensions to the functionality.

          Show
          Henning Bostelmann added a comment - The modifications I make are usually small, so b) would not make sense. a) is more plausible. However, how would that work in detail? For example, would mod/myassignmenttype, as a separate module, use separate database tables from mod/assign? separate backup structures? separate implementations of the gradebook API? It all seems quite a lot for making small extensions to the functionality.
          Hide
          David Mudrak added a comment -

          To be honest, such general vote options are not clear enough to make any decision. As Henning correctly raises, the module has to implement a lot of tiny pieces that form the full API (see mod/

          {anymodule}

          /lib.php). Is the base class offered in the a) option going to implement them all? If so, I would strongly suggest to start with a clear base class for all activity modules that this assignment-base class extends. Anyway, even if the base class covers most of lib.php, there are still install.xml, backup/restore, access control etc.

          I would really need to see some more detailed spec of the a) approach before I give my +1 to it.

          Show
          David Mudrak added a comment - To be honest, such general vote options are not clear enough to make any decision. As Henning correctly raises, the module has to implement a lot of tiny pieces that form the full API (see mod/ {anymodule} /lib.php). Is the base class offered in the a) option going to implement them all? If so, I would strongly suggest to start with a clear base class for all activity modules that this assignment-base class extends. Anyway, even if the base class covers most of lib.php, there are still install.xml, backup/restore, access control etc. I would really need to see some more detailed spec of the a) approach before I give my +1 to it.
          Hide
          Damyon Wiese added a comment -

          Hi Martin,

          I have come up with an Option C which is to support sub-types in the new module - but do it with a different API that prevents some of the problems with subtypes in the past. I have put some more detail in the wiki page (http://docs.moodle.org/dev/Assignment_Subtypes_Combined) and there is a class diagram there as well.

          Specifically the sub-types would only be used to support additional methods of assignment submission - the grading interface would always be the same.

          There will be more restrictions on what an assignment sub-type can do:

          • If it saves data it will require it's own database tables
          • It will require it's own upgrade/install code
          • It must write it's own backup/restore code

          Note: This is only required to save the additional information that this submission type generates. The core assignment module will save it's own data about the assignment instance, submissions and grades.

          Also the custom submission types can be used in combination with any or all of the other submission types installed. This would for example allow an assignment that accepts online text and audio recordings.

          Does this address the concerns with the old assignment subtype support or not?

          • Damyon
          Show
          Damyon Wiese added a comment - Hi Martin, I have come up with an Option C which is to support sub-types in the new module - but do it with a different API that prevents some of the problems with subtypes in the past. I have put some more detail in the wiki page ( http://docs.moodle.org/dev/Assignment_Subtypes_Combined ) and there is a class diagram there as well. Specifically the sub-types would only be used to support additional methods of assignment submission - the grading interface would always be the same. There will be more restrictions on what an assignment sub-type can do: If it saves data it will require it's own database tables It will require it's own upgrade/install code It must write it's own backup/restore code Note: This is only required to save the additional information that this submission type generates. The core assignment module will save it's own data about the assignment instance, submissions and grades. Also the custom submission types can be used in combination with any or all of the other submission types installed. This would for example allow an assignment that accepts online text and audio recordings. Does this address the concerns with the old assignment subtype support or not? Damyon
          Hide
          Michael Hughes added a comment -

          Option A in my mind seemed always support the idea of sub-types (certainly from a programming perspective) in the that extending from the base mod_assign class (or another assignment type) is what we're doing any way. Whether or not we have to put that code in to a "sub-types" location or it defines an entirely "new" mod is somewhat irrelevant to me, as long as the Assignment API provides a quick way to get at the "core" bits that I want to re-use either because the parent class implements it or it is called from a "static" library of methods.

          So I'm not sure that Option C is really anything more than Option A with a formal model that defines a programming interface for displaying different user interface mechanisms (lets face it things like online text & audio recordings can just be represented as files...how you create file is what changes).
          (I'd hasten to add I'd support this...just no sure it counts as a whole new option )

          Also the nice thing about all the "core" information going into the base mod_assign is that it could be up to the implementing assignment type to serialise/deserialise the data appropriate when needed, and you don't have to write code to test for a whole load of other "mod_assign_*" tables to simply iterate through all assignments.

          The model we've used has been to hold the base information in "assignments" and only have additional non-core data in separate table and handle the updating/deletion of the data through the existing add/update/delete_instance() methods...

          I hope this made sense...

          Show
          Michael Hughes added a comment - Option A in my mind seemed always support the idea of sub-types (certainly from a programming perspective) in the that extending from the base mod_assign class (or another assignment type) is what we're doing any way. Whether or not we have to put that code in to a "sub-types" location or it defines an entirely "new" mod is somewhat irrelevant to me, as long as the Assignment API provides a quick way to get at the "core" bits that I want to re-use either because the parent class implements it or it is called from a "static" library of methods. So I'm not sure that Option C is really anything more than Option A with a formal model that defines a programming interface for displaying different user interface mechanisms (lets face it things like online text & audio recordings can just be represented as files... how you create file is what changes). (I'd hasten to add I'd support this...just no sure it counts as a whole new option ) Also the nice thing about all the "core" information going into the base mod_assign is that it could be up to the implementing assignment type to serialise/deserialise the data appropriate when needed, and you don't have to write code to test for a whole load of other "mod_assign_*" tables to simply iterate through all assignments. The model we've used has been to hold the base information in "assignments" and only have additional non-core data in separate table and handle the updating/deletion of the data through the existing add/update/delete_instance() methods... I hope this made sense...
          Hide
          Davo Smith added a comment -

          I've not managed to look at option 'C' in great detail, but I'm not sure it would meet my requirements.

          On the submission side, my UploadPDF assignment type is fairly similar to the upload multiple type (with some restrictions on the file types and some post-processing of the files when they are submitted for marking).

          On the grading side, I replace the file download link with a pop-up window that allows annotation of the submitted files. If the grading interface was always the same, with no ability to customise it to the needs of the plugin, then it would be useless for my assignment type. On the other hand, a standard 'grade' + 'comment' box, delegating the display of whatever the teacher has been asked to grade to the individual plugins (with some helper functions available for 'display a list of files', etc.) would be fine.

          Show
          Davo Smith added a comment - I've not managed to look at option 'C' in great detail, but I'm not sure it would meet my requirements. On the submission side, my UploadPDF assignment type is fairly similar to the upload multiple type (with some restrictions on the file types and some post-processing of the files when they are submitted for marking). On the grading side, I replace the file download link with a pop-up window that allows annotation of the submitted files. If the grading interface was always the same, with no ability to customise it to the needs of the plugin, then it would be useless for my assignment type. On the other hand, a standard 'grade' + 'comment' box, delegating the display of whatever the teacher has been asked to grade to the individual plugins (with some helper functions available for 'display a list of files', etc.) would be fine.
          Hide
          David Mudrak added a comment -

          To me, the option C seems to be most readable so far. Moodle core has an in-built support for subplugins within activity modules. So far, these subplugins were successfully implemented in several standard activity modules (including the Quiz and the Workshop modules). I can imagine the internal API of the new Assignment module is designed in a way that the subplugins can override most of the functionality provided by a base class, while the subplugins machinery allows to easily maintain versions, own tables, backup and restore, access control etc. AKA the best of both worlds.

          Show
          David Mudrak added a comment - To me, the option C seems to be most readable so far. Moodle core has an in-built support for subplugins within activity modules. So far, these subplugins were successfully implemented in several standard activity modules (including the Quiz and the Workshop modules). I can imagine the internal API of the new Assignment module is designed in a way that the subplugins can override most of the functionality provided by a base class, while the subplugins machinery allows to easily maintain versions, own tables, backup and restore, access control etc. AKA the best of both worlds.
          Hide
          Damyon Wiese added a comment -

          Hi Davo,

          In the class diagram I posted, the sub-types must implement view and view_summary methods. This is where you would customise the display for your upload pdf type and this would be shown in the grading interface.

          view() is intended for displaying the entire submission, and view_summary is intended to display on pages like the grading page where there is not enough room to display the entire submission.

          Does this sound like it would work for you?

          • Damyon
          Show
          Damyon Wiese added a comment - Hi Davo, In the class diagram I posted, the sub-types must implement view and view_summary methods. This is where you would customise the display for your upload pdf type and this would be shown in the grading interface. view() is intended for displaying the entire submission, and view_summary is intended to display on pages like the grading page where there is not enough room to display the entire submission. Does this sound like it would work for you? Damyon
          Hide
          Martin Dougiamas added a comment - - edited

          I think option C is OK, but it won't work for all cases. Those who need more than being able to override submission form/display are still going to have to write whole new modules, and they won't have an assignmentlib.php to work with. But I'm OK with that if those authors are.

          Can someone analyse the plugins at : http://moodle.org/plugins/browse.php?list=category&id=12 and http://moodle.org/mod/data/view.php?d=13&perpage=10&search=&sort=0&order=DESC&advanced=0&filter=1&advanced=1&f_44=&f_45=&f_46=Assignment+Type&f_47 and work out which ones would be possible to implement using option C?

          (And BTW, I think the feature of allowing to teachers to require certain file types (like audio, or pdf) should be a core feature)

          Show
          Martin Dougiamas added a comment - - edited I think option C is OK, but it won't work for all cases. Those who need more than being able to override submission form/display are still going to have to write whole new modules, and they won't have an assignmentlib.php to work with. But I'm OK with that if those authors are. Can someone analyse the plugins at : http://moodle.org/plugins/browse.php?list=category&id=12 and http://moodle.org/mod/data/view.php?d=13&perpage=10&search=&sort=0&order=DESC&advanced=0&filter=1&advanced=1&f_44=&f_45=&f_46=Assignment+Type&f_47 and work out which ones would be possible to implement using option C? (And BTW, I think the feature of allowing to teachers to require certain file types (like audio, or pdf) should be a core feature)
          Hide
          Damyon Wiese added a comment -

          Thanks Martin - I'll go through those plugins and post a list of what could and could not be done in option C.

          Show
          Damyon Wiese added a comment - Thanks Martin - I'll go through those plugins and post a list of what could and could not be done in option C.
          Hide
          Damyon Wiese added a comment -

          Hi All,

          Here is a summary of the existing assignment subtypes and whether they would be supported by the proposed submission-plugin model.

          rtcollaboration
          Collaborative real-time editor
          Supported: Yes

          assignment_onlineaudio
          Online Audio Recording
          Supported: Yes

          assignment_random
          Random assignment
          Supported: No
          Comments: This assignment type is about a semi automated workflow for providing randomised instructions to students via files.

          assignment_uploadpdf
          Upload PDF
          Supported: No
          Comments: This assignment is about an interactive editing interface for providing feedback files to students.

          Mailsimulator
          Mail Simulator Assignment
          Supported: Partially
          Comments: The email submission component could be supported, but not the feedback.

          Reflection
          Reflection Assignment
          Supported: Partially
          Comments: The only bit I don't think could be done right now is this: "When at least one comment is made on each of the other group members reflections, the student will be able to confirm them self ready for grading." - but we could change the API to allow a plugin to control if a student is allowed to finalize a submission or not.

          Peer Review
          Supported: No
          Comments: This is similar to the Reflection Assignment type but without the reliance on a discussion forum.

          Team Assignment Type
          Supported: No
          Comments: This will be built into the core module

          Online Judge
          Supported: Yes
          Comments: The code could be submitted to the judging server when the submission is saved. The view submission could then show the results of the compilation/unit tests by loading them from the server - or the server could post the results back into the gradebook via webservices.

          Nanagong
          Supported: Yes

          Summary: From the list here there are 5 Supported (or will be builtin to the core module) and 5 unsupported. However if we add support for "feedback" plugins as well (same idea as submission plugins except they are shown in the feedback block for students, on the grading page for markers and can add to the intro section for an assignment) then we could support the other 5 as well. I'll write up something about feedback plugins soon.

          Show
          Damyon Wiese added a comment - Hi All, Here is a summary of the existing assignment subtypes and whether they would be supported by the proposed submission-plugin model. rtcollaboration Collaborative real-time editor Supported: Yes assignment_onlineaudio Online Audio Recording Supported: Yes assignment_random Random assignment Supported: No Comments: This assignment type is about a semi automated workflow for providing randomised instructions to students via files. assignment_uploadpdf Upload PDF Supported: No Comments: This assignment is about an interactive editing interface for providing feedback files to students. Mailsimulator Mail Simulator Assignment Supported: Partially Comments: The email submission component could be supported, but not the feedback. Reflection Reflection Assignment Supported: Partially Comments: The only bit I don't think could be done right now is this: "When at least one comment is made on each of the other group members reflections, the student will be able to confirm them self ready for grading." - but we could change the API to allow a plugin to control if a student is allowed to finalize a submission or not. Peer Review Supported: No Comments: This is similar to the Reflection Assignment type but without the reliance on a discussion forum. Team Assignment Type Supported: No Comments: This will be built into the core module Online Judge Supported: Yes Comments: The code could be submitted to the judging server when the submission is saved. The view submission could then show the results of the compilation/unit tests by loading them from the server - or the server could post the results back into the gradebook via webservices. Nanagong Supported: Yes Summary: From the list here there are 5 Supported (or will be builtin to the core module) and 5 unsupported. However if we add support for "feedback" plugins as well (same idea as submission plugins except they are shown in the feedback block for students, on the grading page for markers and can add to the intro section for an assignment) then we could support the other 5 as well. I'll write up something about feedback plugins soon.
          Hide
          Davo Smith added a comment -

          Just to update this list, having looked in a bit more detail at the proposal, I think option C would probably work for my UploadPDF assignment type, the main things I need to be able to do, which are different from the standard 'upload' assignment are:

          • Add some extra settings to the settings page
          • Have control over what file types can be uploaded and also display some extra text boxes before students are allowed to submit the work for marking
          • Be able to post-process the files when the student submits their work (including rejecting the submission in some circumstances)
          • Have full control over the display of the student's submission (on both the student view and the teacher grading view) - so I can replace the download link with a link to annotate the work online.

          Pretty much everything else I do with my plugin happens in the external files called when you click on the annotate link.

          (Note that the above list is mostly off the top of my head and I may have done changed other bits that I can no longer remember a couple of years later)

          There are a couple other small changes, which I guess wouldn't be covered in this new version:
          1. I change the 'View X assignments' display to read 'View X(Y) assignments', where Y is the number of assignments that have been submitted, but not yet graded (this was a massive time-saver for me as a teacher, so I'd love to see this in the new version of 'assignment'.
          2. I changed the display of the 'intro' to optionally show the progress bar from my checklist plugin and refuse to allow students to submit work, if they've not completed the checklist (useful in preventing partially complete submissions).

          I hope that's a helpful addition to the discussion - but accept that if the needs of my particular plugin doesn't fit in with the redesigned assignment module, then I might have to do a major rewrite at some point in the future ...

          Show
          Davo Smith added a comment - Just to update this list, having looked in a bit more detail at the proposal, I think option C would probably work for my UploadPDF assignment type, the main things I need to be able to do, which are different from the standard 'upload' assignment are: Add some extra settings to the settings page Have control over what file types can be uploaded and also display some extra text boxes before students are allowed to submit the work for marking Be able to post-process the files when the student submits their work (including rejecting the submission in some circumstances) Have full control over the display of the student's submission (on both the student view and the teacher grading view) - so I can replace the download link with a link to annotate the work online. Pretty much everything else I do with my plugin happens in the external files called when you click on the annotate link. (Note that the above list is mostly off the top of my head and I may have done changed other bits that I can no longer remember a couple of years later) There are a couple other small changes, which I guess wouldn't be covered in this new version: 1. I change the 'View X assignments' display to read 'View X(Y) assignments', where Y is the number of assignments that have been submitted, but not yet graded (this was a massive time-saver for me as a teacher, so I'd love to see this in the new version of 'assignment'. 2. I changed the display of the 'intro' to optionally show the progress bar from my checklist plugin and refuse to allow students to submit work, if they've not completed the checklist (useful in preventing partially complete submissions). I hope that's a helpful addition to the discussion - but accept that if the needs of my particular plugin doesn't fit in with the redesigned assignment module, then I might have to do a major rewrite at some point in the future ...
          Hide
          Grette Wilkinson added a comment -

          The feature "allowing to teachers to require certain file types (like audio, or pdf)" could be achieved either by via the file picker, or via form validation according to extra settings in the assignment activity.

          Thoughts?

          Show
          Grette Wilkinson added a comment - The feature "allowing to teachers to require certain file types (like audio, or pdf)" could be achieved either by via the file picker, or via form validation according to extra settings in the assignment activity. Thoughts?
          Hide
          Minh-Tam Nguyen added a comment -

          file type restriction: the file picker must already include some logic that restricts file types, as not all repositories appear and not all files are listed when performing certain functions, such as inserting a picture into a label (Youtube repository is not shown).
          So if that could be harnessed to only allow *.pdf to be submitted to an assignment it would be consistent with other functionality.

          Show
          Minh-Tam Nguyen added a comment - file type restriction: the file picker must already include some logic that restricts file types, as not all repositories appear and not all files are listed when performing certain functions, such as inserting a picture into a label (Youtube repository is not shown). So if that could be harnessed to only allow *.pdf to be submitted to an assignment it would be consistent with other functionality.
          Hide
          David Mudrak added a comment -

          Correct, the current file picker already implements the option to accept just a limited set of file types.

          Show
          David Mudrak added a comment - Correct, the current file picker already implements the option to accept just a limited set of file types.
          Hide
          Grette Wilkinson added a comment -

          So could a teacher setting up an assignment set the assignment to accept only .xls (for example)..ie. could a setting in the assignment control the file picker?

          Show
          Grette Wilkinson added a comment - So could a teacher setting up an assignment set the assignment to accept only .xls (for example)..ie. could a setting in the assignment control the file picker?
          Hide
          David Mudrak added a comment -

          Well, the filepicker can be given a list of accepted mime types (like "any image" or "any JPEG"). So then it's just a matter of the UI how to offer a list like the one returned by get_mimetypes_array() in an understandable way to the users to make the selection...

          Show
          David Mudrak added a comment - Well, the filepicker can be given a list of accepted mime types (like "any image" or "any JPEG"). So then it's just a matter of the UI how to offer a list like the one returned by get_mimetypes_array() in an understandable way to the users to make the selection...
          Hide
          Damyon Wiese added a comment -

          FYI I have updated the wiki page for the core assignment rewrite. You can find it here:

          http://docs.moodle.org/dev/Assignment_Subtypes_Combined

          Regards, Damyon

          Show
          Damyon Wiese added a comment - FYI I have updated the wiki page for the core assignment rewrite. You can find it here: http://docs.moodle.org/dev/Assignment_Subtypes_Combined Regards, Damyon
          Hide
          Paul Charsley added a comment -

          One of the main features of Lightwork that we are aiming to introduce into moodle 2.3 is the ability to manage the marking process by allocating markers to students and introducing a process by which marking is managed and reviewed by a marking manager prior to release to students. See our mockups of the proposed process at

          http://docs.moodle.org/dev/Lightwork#User_Interface_-_Marker_allocation_and_management

          In order to integrate this feature with the new assignment module I would like to propose a new table "assign_marking_allocations". The table would have the following fields:

          • id - int
          • assignment - int
          • userid - int (the student whose work is being marked)
          • markerid - int (the teacher allocated to mark)
          • status - string (marking status - ALLOCATED,IN MARKING,MARKING FINISHED,IN REVIEW,READY FOR RELEASE,RELEASED)
          • orderid - int
          • timemodified - int

          unique key - assignment,userid,orderid

          The data in this table describes the students assigned to each marker and the status of the marking process. It also allows the history of the marking process to be viewed and students to be reallocated to different markers.

          Please let me know what you think.

          Show
          Paul Charsley added a comment - One of the main features of Lightwork that we are aiming to introduce into moodle 2.3 is the ability to manage the marking process by allocating markers to students and introducing a process by which marking is managed and reviewed by a marking manager prior to release to students. See our mockups of the proposed process at http://docs.moodle.org/dev/Lightwork#User_Interface_-_Marker_allocation_and_management In order to integrate this feature with the new assignment module I would like to propose a new table "assign_marking_allocations". The table would have the following fields: id - int assignment - int userid - int (the student whose work is being marked) markerid - int (the teacher allocated to mark) status - string (marking status - ALLOCATED,IN MARKING,MARKING FINISHED,IN REVIEW,READY FOR RELEASE,RELEASED) orderid - int timemodified - int unique key - assignment,userid,orderid The data in this table describes the students assigned to each marker and the status of the marking process. It also allows the history of the marking process to be viewed and students to be reallocated to different markers. Please let me know what you think.
          Hide
          Jean-Philippe Gaudreau added a comment -

          Hi everyone,

          I just want to know if the many improvements of this task will include being able to grade assignment with decimals?

          Thx!

          Jean-Philippe

          Show
          Jean-Philippe Gaudreau added a comment - Hi everyone, I just want to know if the many improvements of this task will include being able to grade assignment with decimals? Thx! Jean-Philippe
          Hide
          David Mudrak added a comment -

          OMG I sort of expected that decimal grades is a must in any future version of the Assignment. What a shock to see

          <FIELD NAME="grade" TYPE="int" ...>
          

          everywhere in https://github.com/netspotau/moodle-mod_assign/blob/master/mod/assign/db/install.xml

          Really, this should (read: MUST) be changed to decimal number column with 5 valid decimals (which is the precision for grades that Moodle supports).

          Show
          David Mudrak added a comment - OMG I sort of expected that decimal grades is a must in any future version of the Assignment. What a shock to see <FIELD NAME= "grade" TYPE= " int " ...> everywhere in https://github.com/netspotau/moodle-mod_assign/blob/master/mod/assign/db/install.xml Really, this should (read: MUST) be changed to decimal number column with 5 valid decimals (which is the precision for grades that Moodle supports).
          Hide
          Damyon Wiese added a comment - - edited

          Hi David and Jean-Philippe,

          It's more a matter of when not if that change is made (float for grade column). I was trying to keep the initial version of the rewrite as close in functionality as possible to the old assignment and then adding additional features on top with separate tracker issues - but in this case I have been swayed and I now think we should get the database right from the start. I'll push an update for this change soon.

          • Damyon
          Show
          Damyon Wiese added a comment - - edited Hi David and Jean-Philippe, It's more a matter of when not if that change is made (float for grade column). I was trying to keep the initial version of the rewrite as close in functionality as possible to the old assignment and then adding additional features on top with separate tracker issues - but in this case I have been swayed and I now think we should get the database right from the start. I'll push an update for this change soon. Damyon
          Hide
          Nadav Kavalerchik added a comment -

          Please add a Template option to the "Online Assignment type" which will allow teachers to present a template into which students can submit their work. see patch for Moodle 1.9.x : MDL-19299

          Show
          Nadav Kavalerchik added a comment - Please add a Template option to the "Online Assignment type" which will allow teachers to present a template into which students can submit their work. see patch for Moodle 1.9.x : MDL-19299
          Hide
          Jean-Philippe Gaudreau added a comment -

          Hi Damyon,

          Thx for adding the decimals for the new module it's really appreciated!

          When do you intend to release a beta/final version of the plugin ?
          We would be interested to take part in the testing process of the new module when it is ready for it.

          ciao!

          Show
          Jean-Philippe Gaudreau added a comment - Hi Damyon, Thx for adding the decimals for the new module it's really appreciated! When do you intend to release a beta/final version of the plugin ? We would be interested to take part in the testing process of the new module when it is ready for it. ciao!
          Hide
          Davo Smith added a comment -

          Daymon - would it be possible to add some plugin hooks into the submit for marking and revert to draft functions? Including the ability to cancel such operations would also be helpful.

          My assignment plugin does some processing of the uploaded files when they are submitted for marking and may wish to abort the submission if a problem is encountered.

          Thanks (and, whilst I'm commenting, the code is looking good)

          Show
          Davo Smith added a comment - Daymon - would it be possible to add some plugin hooks into the submit for marking and revert to draft functions? Including the ability to cancel such operations would also be helpful. My assignment plugin does some processing of the uploaded files when they are submitted for marking and may wish to abort the submission if a problem is encountered. Thanks (and, whilst I'm commenting, the code is looking good)
          Hide
          Fernando Oliveira added a comment -

          Can someone please verify that this module will allow teachers to create a single activity with multiple submission options? For example, an activity can have an Online Editor AND File Submissions (not either/or). I assume as much but need to be sure. Thx.

          Show
          Fernando Oliveira added a comment - Can someone please verify that this module will allow teachers to create a single activity with multiple submission options? For example, an activity can have an Online Editor AND File Submissions (not either/or). I assume as much but need to be sure. Thx.
          Hide
          Damyon Wiese added a comment -

          Hi Fernando - it definitely allows multiple submission types in the same assignment.

          Show
          Damyon Wiese added a comment - Hi Fernando - it definitely allows multiple submission types in the same assignment.
          Hide
          Tim Barker added a comment -

          Hi, I'm currently looking at the acceptance the cases for assignment and will be automating them. I would like to know if any new acceptance test cases are required for the changes to assignment. There are currently 21 Moodle acceptance tests for assignment and they can be viewed here http://tracker.moodle.org/secure/IssueNavigator!executeAdvanced.jspa?jqlQuery=parent+%3D+MDLQA-1+AND+component+%3D+Assignment&runQuery=true&clear=true.

          Aside from re-wording these to take into account references to adding assignments by the old sub-types; do any of the developers have any additional acceptance tests? Is there any new functionality in these changes to Assignment that I will need distinct user test cases for? Or are is what is being delivered suitable for regression testing only?

          Show
          Tim Barker added a comment - Hi, I'm currently looking at the acceptance the cases for assignment and will be automating them. I would like to know if any new acceptance test cases are required for the changes to assignment. There are currently 21 Moodle acceptance tests for assignment and they can be viewed here http://tracker.moodle.org/secure/IssueNavigator!executeAdvanced.jspa?jqlQuery=parent+%3D+MDLQA-1+AND+component+%3D+Assignment&runQuery=true&clear=true . Aside from re-wording these to take into account references to adding assignments by the old sub-types; do any of the developers have any additional acceptance tests? Is there any new functionality in these changes to Assignment that I will need distinct user test cases for? Or are is what is being delivered suitable for regression testing only?
          Hide
          Damyon Wiese added a comment -

          Hi Tim,

          The code under MDL-31270 should contain just the features from the old assignment type and no new functionality. Any additional features should have acceptance tests to cover the new functionality (they are split into separate sub tasks under this one meta ticket).

          The one exception I can think of is that the new assignment can handle floating point grades in the assignment which could probably do with a test case.

          Regards, Damyon

          Show
          Damyon Wiese added a comment - Hi Tim, The code under MDL-31270 should contain just the features from the old assignment type and no new functionality. Any additional features should have acceptance tests to cover the new functionality (they are split into separate sub tasks under this one meta ticket). The one exception I can think of is that the new assignment can handle floating point grades in the assignment which could probably do with a test case. Regards, Damyon
          Hide
          Tim Barker added a comment -

          Thanks Damyon, I noticed on the screen shots attached to http://docs.moodle.org/dev/Assignment_Subtypes_Combined there was an option to enable Feedback files. Do I need to include something for this?

          Show
          Tim Barker added a comment - Thanks Damyon, I noticed on the screen shots attached to http://docs.moodle.org/dev/Assignment_Subtypes_Combined there was an option to enable Feedback files. Do I need to include something for this?
          Hide
          Michael Hughes added a comment -

          I've just been playing with the code off git hub, and have been trying to extend the mod_assign activity to replace the grading list. I was just wondering if there was a planned way for doing this. So far I've come up with 2 options: 1) Override the renderer (by overriding this in a custom theme that inserts itself between the only theme we're permitting and the other parents) or 2) creating a new activity module that extends mod_assign.

          Both of which are quite awkward ways to change the behaviour of the grading table interface (not the individual grading screens). I'd also looked at changing this via the Advanced Grading options mechanism but that again only hooks in to grading an individual submission not at a collection level of submissions level.

          The reason for this is that we have a "team marking" approach in use for some classes and the list of students to be graded should be limited to the students assigned to the staff user.

          It would be quite helpful if there was a mechanism for overriding mod_assign_grading_options_form and assign_grading_table...even if this was something that had to be set at a server level, as long as it didn't require changing the actual code to do this...

          Otherwise I'm back to cloning the whole module to just change 1 bit of it.

          Hope this made sense...

          Show
          Michael Hughes added a comment - I've just been playing with the code off git hub, and have been trying to extend the mod_assign activity to replace the grading list. I was just wondering if there was a planned way for doing this. So far I've come up with 2 options: 1) Override the renderer (by overriding this in a custom theme that inserts itself between the only theme we're permitting and the other parents) or 2) creating a new activity module that extends mod_assign. Both of which are quite awkward ways to change the behaviour of the grading table interface (not the individual grading screens). I'd also looked at changing this via the Advanced Grading options mechanism but that again only hooks in to grading an individual submission not at a collection level of submissions level. The reason for this is that we have a "team marking" approach in use for some classes and the list of students to be graded should be limited to the students assigned to the staff user. It would be quite helpful if there was a mechanism for overriding mod_assign_grading_options_form and assign_grading_table...even if this was something that had to be set at a server level, as long as it didn't require changing the actual code to do this... Otherwise I'm back to cloning the whole module to just change 1 bit of it. Hope this made sense...
          Hide
          Fernando Oliveira added a comment -

          A number of years ago, we created a custom assignment type and “marking manager” so that students and teachers can track past submissions, thereby tracking progress over time. Here’s a screenshot: http://screencast.com/t/LaPLhDELYt - notice all past submissions (and grades) are listed. In this system, when an activity is opened for grading, all past submissions (and teacher feedback) is also shown in chronological order. Student also sees past submissions when viewing the activity. This is a vital feature for our teachers and students.

          Before we start looking around for a coder to take on the task of integrating the new assignment mod into our marking system, is it possible to find out if the new mod will store past submissions? In other words, once a student REsubmits an assignment can the original submission and feedback still be retrieved? Thanks.

          Show
          Fernando Oliveira added a comment - A number of years ago, we created a custom assignment type and “marking manager” so that students and teachers can track past submissions, thereby tracking progress over time. Here’s a screenshot: http://screencast.com/t/LaPLhDELYt - notice all past submissions (and grades) are listed. In this system, when an activity is opened for grading, all past submissions (and teacher feedback) is also shown in chronological order. Student also sees past submissions when viewing the activity. This is a vital feature for our teachers and students. Before we start looking around for a coder to take on the task of integrating the new assignment mod into our marking system, is it possible to find out if the new mod will store past submissions? In other words, once a student REsubmits an assignment can the original submission and feedback still be retrieved? Thanks.
          Hide
          Petr Škoda added a comment -

          Hi, I noticed a few problems in the https://github.com/netspotau/moodle-mod_assign repo, I guess it is related to this issue:

          • subplugins are using incorrect table names - for example all assignfeedback_comments tables should start with assignfeedback_comments.*, assign_feedback_comments would not be found during forced plugin uninstallation
          • the "assignment" class name is reserved for mod_assignment plugin, all classes in mod_assign should be something like (mod_)?assign.*, the same for assignment_plugin, assignment_feedback_plugin classes, assignment_plugin_manager
          • mod/assignúsettings.php seems to load too many libs on each page, it could be imo optimised
          • all assignfeedback_file constants should start with "ASSIGNFEEDBACK_FILE_", some of these look like settings to me (max files), if you want them changeable you should if (!defined()) around them; the same applies to other subplugin constants
          • mod/assign/gradingtable.php has some really nasty concatenated SQL that is not using parameter placeholders
            *

          Ciao

          Show
          Petr Škoda added a comment - Hi, I noticed a few problems in the https://github.com/netspotau/moodle-mod_assign repo, I guess it is related to this issue: subplugins are using incorrect table names - for example all assignfeedback_comments tables should start with assignfeedback_comments.*, assign_feedback_comments would not be found during forced plugin uninstallation the "assignment" class name is reserved for mod_assignment plugin, all classes in mod_assign should be something like (mod_)?assign.*, the same for assignment_plugin, assignment_feedback_plugin classes, assignment_plugin_manager mod/assignúsettings.php seems to load too many libs on each page, it could be imo optimised all assignfeedback_file constants should start with "ASSIGNFEEDBACK_FILE_", some of these look like settings to me (max files), if you want them changeable you should if (!defined()) around them; the same applies to other subplugin constants mod/assign/gradingtable.php has some really nasty concatenated SQL that is not using parameter placeholders * Ciao
          Hide
          Damyon Wiese added a comment -

          Thanks Petr,

          I'll look at these issues now.

          • Damyon
          Show
          Damyon Wiese added a comment - Thanks Petr, I'll look at these issues now. Damyon
          Hide
          Damyon Wiese added a comment -

          Hi Petr,

          Thanks for looking at this.

          The issues you raised have all now been addressed. All of the comments from the review are currently on MDL-31270 as that covers the first part of the assignment work (all the additional features are separated into their own tickets). I'll post an update there about these changes.

          Regards, Damyon

          Show
          Damyon Wiese added a comment - Hi Petr, Thanks for looking at this. The issues you raised have all now been addressed. All of the comments from the review are currently on MDL-31270 as that covers the first part of the assignment work (all the additional features are separated into their own tickets). I'll post an update there about these changes. Regards, Damyon
          Hide
          Dan Poltawski added a comment -

          Hi Damyon,

          Sorry for another request - is there any chance one of you guys could close of these the subtasks here which have been done as part of MDL-31270?

          I'd quite like to retitle 'MDL-31270' to reflect what that issue actually is now

          cheers,
          dan

          Show
          Dan Poltawski added a comment - Hi Damyon, Sorry for another request - is there any chance one of you guys could close of these the subtasks here which have been done as part of MDL-31270 ? I'd quite like to retitle ' MDL-31270 ' to reflect what that issue actually is now cheers, dan
          Hide
          Damyon Wiese added a comment - - edited

          Hi Dan,

          None of the other subtasks are included in MDL-31270 - that is just the rewrite with as close to the same feature set as the old assignment as possible. All of these other tasks are in separate branches waiting for MDL-31270 to be integrated so we can rebase them and submit them for review.

          • Damyon
          Show
          Damyon Wiese added a comment - - edited Hi Dan, None of the other subtasks are included in MDL-31270 - that is just the rewrite with as close to the same feature set as the old assignment as possible. All of these other tasks are in separate branches waiting for MDL-31270 to be integrated so we can rebase them and submit them for review. Damyon
          Hide
          Enrique Castro added a comment -

          Hi, I have been reviewing the new Assign module in Moodle 2.3 alpha in the last week. The work is superb, brilliant. It incorporates, out of the box, a lot of local customizations we have been accumulating at ULPGC along several years. And those not already incorporated can be added as plugins, without having to edit the core code, as we had had to do in 1.x versions.

          I have filed two issues related to this META task

          • MDL-33498 - Inconsistent management of decimal grades in mod Assign
          • MDL-33499 - Assign mod do not inform grader of FINAL gradebook grade, only the raw assignment grade.

          And a proposal for a new subplugin type within Assign:

          • MDL-33500 - Adding "actions" plugins to Assign module
            I am eager to discuss the details to better implement such plugins in order to be able to share our tools without imposing third parties the burden of over-writing core code of the module.

          Congratulations to Damyon's team fro a great work!

          Show
          Enrique Castro added a comment - Hi, I have been reviewing the new Assign module in Moodle 2.3 alpha in the last week. The work is superb, brilliant. It incorporates, out of the box, a lot of local customizations we have been accumulating at ULPGC along several years. And those not already incorporated can be added as plugins, without having to edit the core code, as we had had to do in 1.x versions. I have filed two issues related to this META task MDL-33498 - Inconsistent management of decimal grades in mod Assign MDL-33499 - Assign mod do not inform grader of FINAL gradebook grade, only the raw assignment grade. And a proposal for a new subplugin type within Assign: MDL-33500 - Adding "actions" plugins to Assign module I am eager to discuss the details to better implement such plugins in order to be able to share our tools without imposing third parties the burden of over-writing core code of the module. Congratulations to Damyon's team fro a great work!
          Hide
          Fernando Oliveira added a comment -

          Any chance of getting the "Allow resubmitting" setting into the new assignment module?

          Show
          Fernando Oliveira added a comment - Any chance of getting the "Allow resubmitting" setting into the new assignment module?
          Hide
          Mark Ward added a comment -

          Great work so far!

          I am slightly concerned that things have gone quiet on the "anonymous submissions" front. This is a very important for our HE courses which are required to ensure that work is marked anonymously by tutors. Are we likely to see this feature soon?

          Show
          Mark Ward added a comment - Great work so far! I am slightly concerned that things have gone quiet on the "anonymous submissions" front. This is a very important for our HE courses which are required to ensure that work is marked anonymously by tutors. Are we likely to see this feature soon?
          Hide
          Michael Hughes added a comment -

          A quick question (and some context first). I'm looking at wanting to change (slightly) the way that the Download All function works for mod_assign (basically to use an institutional identifier instead of their name). We like to minimise changes to core code so ideally I'd like to simply extend the assign class:

          class strathassign extends assign {}
          

          and have a mechanism to have this overloaded class loaded in place of assign so something like (in view.php)

          $assign_class='strathassign';
          $assign_class_path = $CFG->customscripts.'/mod/assign/strathassign.php';
          require_once($assign_class_path);
          if ($assign_class!='') {
              $assign = new $assign_class($context,$cm,$course);
          } else {
              $assign = new assign($context,$cm,$course);
          }
          

          So having done this (as proof of concept) it leads me to my actual question...

          Why are there "private" functions in the assign class? Few of them seem like functions I'd never want to override (load_plugins($subtype) for example), but things like can_grade() and download_submissions() are.

          It seems to me that there is a tendency to private methods rather than considering what might actually be useful as protected methods given the object-orientated nature here.

          I know that there might not be many other people affect by this but this makes it pretty heavy overhead to "tweak" the logic of mod_assign to fit our needs.

          Show
          Michael Hughes added a comment - A quick question (and some context first). I'm looking at wanting to change (slightly) the way that the Download All function works for mod_assign (basically to use an institutional identifier instead of their name). We like to minimise changes to core code so ideally I'd like to simply extend the assign class: class strathassign extends assign {} and have a mechanism to have this overloaded class loaded in place of assign so something like (in view.php) $assign_class='strathassign'; $assign_class_path = $CFG->customscripts.'/mod/assign/strathassign.php'; require_once($assign_class_path); if ($assign_class!='') { $assign = new $assign_class($context,$cm,$course); } else { $assign = new assign($context,$cm,$course); } So having done this (as proof of concept) it leads me to my actual question... Why are there "private" functions in the assign class? Few of them seem like functions I'd never want to override (load_plugins($subtype) for example), but things like can_grade() and download_submissions() are. It seems to me that there is a tendency to private methods rather than considering what might actually be useful as protected methods given the object-orientated nature here. I know that there might not be many other people affect by this but this makes it pretty heavy overhead to "tweak" the logic of mod_assign to fit our needs.
          Hide
          Aparup Banerjee added a comment -

          I've created MDL-35413 to look towards implementing unit tests.

          Show
          Aparup Banerjee added a comment - I've created MDL-35413 to look towards implementing unit tests.
          Hide
          mazhar@edc added a comment -

          Any patch I could get just to add decimals in the assignment quick grade tool?

          Show
          mazhar@edc added a comment - Any patch I could get just to add decimals in the assignment quick grade tool?
          Hide
          Damyon Wiese added a comment -

          Hi Mazhar

          No you cannot take that change and apply it to the old assignment module as this is a completely new module and has no shared code with the old one. Your best bet is to upgrade.

          Damyon

          Show
          Damyon Wiese added a comment - Hi Mazhar No you cannot take that change and apply it to the old assignment module as this is a completely new module and has no shared code with the old one. Your best bet is to upgrade. Damyon
          Hide
          Martin Dougiamas added a comment -

          Hi Damyon,

          Perhaps you need to close this and move remaining subtasks out?

          Show
          Martin Dougiamas added a comment - Hi Damyon, Perhaps you need to close this and move remaining subtasks out?
          Hide
          miki Alliel added a comment -

          I have noticed that in Moodle 2.5 there is a "template" feature to Quiz Question Type Essay which could be very helpful in Online Assignment. Is there any chance it could be implemented like here MDL-10516?

          Show
          miki Alliel added a comment - I have noticed that in Moodle 2.5 there is a "template" feature to Quiz Question Type Essay which could be very helpful in Online Assignment. Is there any chance it could be implemented like here MDL-10516 ?
          Hide
          Damyon Wiese added a comment -

          This issue was assigned to me automatically, however I will not be able to work on this issue in the immediate future. In order to create a truer sense of the state of this issue and to allow other developers to have chance to become involved, I am removing myself as the assignee of this issue.

          For more information, see http://docs.moodle.org/dev/Changes_to_issue_assignment

          Show
          Damyon Wiese added a comment - This issue was assigned to me automatically, however I will not be able to work on this issue in the immediate future. In order to create a truer sense of the state of this issue and to allow other developers to have chance to become involved, I am removing myself as the assignee of this issue. For more information, see http://docs.moodle.org/dev/Changes_to_issue_assignment
          Hide
          Damyon Wiese added a comment -

          All issues in this meta are complete. Closing.

          Show
          Damyon Wiese added a comment - All issues in this meta are complete. Closing.

            People

            • Votes:
              25 Vote for this issue
              Watchers:
              42 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: