Moodle
  1. Moodle
  2. MDL-13680

Add Plagiarism support for user submitted files.

    Details

    • Type: Improvement Improvement
    • Status: Closed
    • Priority: Blocker Blocker
    • Resolution: Fixed
    • Affects Version/s: 2.0
    • Fix Version/s: 2.0
    • Labels:
      None
    • Rank:
      32667

      Description

      Add Plagiarism Support as a global lib that allows any other module that handles files to make use of it. Initially adding to the Assignment module and including the Turnitin service - long term would like to add the other plagiarism services to this lib as well for example crot.

        Issue Links

          Activity

          Hide
          Anthony Borrow added a comment -

          I would like to see this developed in CONTRIB and then once it seems to be stable and working we can consider moving it to core. Peace - Anthony

          Show
          Anthony Borrow added a comment - I would like to see this developed in CONTRIB and then once it seems to be stable and working we can consider moving it to core. Peace - Anthony
          Hide
          Dan Marsden added a comment -

          I'd already added it to the agenda for the dev meeting tomorrow - I want to look at getting it in Moodle 2.0 - but if it needs to go to CONTRIB first, that's fine.

          Dan

          Show
          Dan Marsden added a comment - I'd already added it to the agenda for the dev meeting tomorrow - I want to look at getting it in Moodle 2.0 - but if it needs to go to CONTRIB first, that's fine. Dan
          Hide
          Anthony Borrow added a comment -

          Dan - Generally speaking, I think if we can begin getting in the habit of things starting in CONTRIB that will help facilitate getting things into core. My only objection is that TII is a paid service and not available to all. Then again, a similar argument could be made for PayPal. Either way, I'm here to be supportive. Just let me know how I can help. Peace - Anthony

          Show
          Anthony Borrow added a comment - Dan - Generally speaking, I think if we can begin getting in the habit of things starting in CONTRIB that will help facilitate getting things into core. My only objection is that TII is a paid service and not available to all. Then again, a similar argument could be made for PayPal. Either way, I'm here to be supportive. Just let me know how I can help. Peace - Anthony
          Hide
          Dan Marsden added a comment -

          Yeah - I don't think it's a problem being a "paid" service, - there are a large number of users in the forums with existing subscriptions who aren't using the turnitin plugin developed by iparadigms - and as it's an optional feature, I think it will be well received if we get it in core!

          MD 'almost' implies that he's happy for it be in core by this post too:
          http://moodle.org/mod/forum/discuss.php?d=16306#p249689

          I have a couple of things regarding the design of my existing code that I'm thinking about modifying at the moment.... one, I want to minimise the amount of xml api calls it makes to TII by storing the similarity value returned in the db and only requesting a new similarity score when a new file is uploaded.
          2 - I think that I will seperate out the upload to TII function/return of the similarity data into cron. - especially the file upload to TII - this process can take a wee bit longer than I like, and in the current method, the user must wait an extended time for the upload process to complete. - 1st upload to moodle, then 2nd upload to TII.

          I have tried to design the new assignment_files table to be usable by other assignment types if needed by keeping the naming generic. but if anyone has any ideas on how to manage this better, I'm keen to hear!

          Dan

          Show
          Dan Marsden added a comment - Yeah - I don't think it's a problem being a "paid" service, - there are a large number of users in the forums with existing subscriptions who aren't using the turnitin plugin developed by iparadigms - and as it's an optional feature, I think it will be well received if we get it in core! MD 'almost' implies that he's happy for it be in core by this post too: http://moodle.org/mod/forum/discuss.php?d=16306#p249689 I have a couple of things regarding the design of my existing code that I'm thinking about modifying at the moment.... one, I want to minimise the amount of xml api calls it makes to TII by storing the similarity value returned in the db and only requesting a new similarity score when a new file is uploaded. 2 - I think that I will seperate out the upload to TII function/return of the similarity data into cron. - especially the file upload to TII - this process can take a wee bit longer than I like, and in the current method, the user must wait an extended time for the upload process to complete. - 1st upload to moodle, then 2nd upload to TII. I have tried to design the new assignment_files table to be usable by other assignment types if needed by keeping the naming generic. but if anyone has any ideas on how to manage this better, I'm keen to hear! Dan
          Hide
          Dan Marsden added a comment -

          as discussed in the dev meeting today, we are aiming to get this in for Moodle 2.0

          it has evolved slightly - the plan is to make turnitin a global lib to allow other activities/modules to use it. - like the Forum - allowing admins/teachers to enable turnitin submission for files uploaded to discussion postings etc.

          Catalyst are also interested in partnering with me to get this up and going! - thanks Martin Langhoff!

          Dan

          Show
          Dan Marsden added a comment - as discussed in the dev meeting today, we are aiming to get this in for Moodle 2.0 it has evolved slightly - the plan is to make turnitin a global lib to allow other activities/modules to use it. - like the Forum - allowing admins/teachers to enable turnitin submission for files uploaded to discussion postings etc. Catalyst are also interested in partnering with me to get this up and going! - thanks Martin Langhoff! Dan
          Hide
          Dan Marsden added a comment -

          first version of the new Plagiarism Lib for Moodle 2.0 is here:
          http://git.catalyst.net.nz/gw?p=moodle-r2.git;a=shortlog;h=refs/heads/mdl20-plagiarism

          this is designed to allow a range of different Plagiarsim products to be added in future (starting with Turnitin) - Ideally I'd like to see this leveraged for Crot and other plagiarsim prevention tools.

          Show
          Dan Marsden added a comment - first version of the new Plagiarism Lib for Moodle 2.0 is here: http://git.catalyst.net.nz/gw?p=moodle-r2.git;a=shortlog;h=refs/heads/mdl20-plagiarism this is designed to allow a range of different Plagiarsim products to be added in future (starting with Turnitin) - Ideally I'd like to see this leveraged for Crot and other plagiarsim prevention tools.
          Hide
          Dan Marsden added a comment -

          Note: I've deliberately left out backup/restore functions to avoid conflicts with Eloys new backup/restore code

          Show
          Dan Marsden added a comment - Note: I've deliberately left out backup/restore functions to avoid conflicts with Eloys new backup/restore code
          Hide
          Dan Marsden added a comment -

          first version now in HEAD - I haven't included any backup code - need to check with Eloy if it's stable yet first, and I expect there will be a few changes needed to the file handling - similar to changes needed in MDL-7206 I think.

          Show
          Dan Marsden added a comment - first version now in HEAD - I haven't included any backup code - need to check with Eloy if it's stable yet first, and I expect there will be a few changes needed to the file handling - similar to changes needed in MDL-7206 I think.
          Hide
          Petr Škoda added a comment -

          hmm, the /admin/ is getting a bit crowded again, could you please move the plagiarism* files into /admin/plagiarism/* instead?
          thanks

          Show
          Petr Škoda added a comment - hmm, the /admin/ is getting a bit crowded again, could you please move the plagiarism* files into /admin/plagiarism/* instead? thanks
          Hide
          Dan Marsden added a comment -

          done - thanks for the feedback Petr!

          Show
          Dan Marsden added a comment - done - thanks for the feedback Petr!
          Hide
          Martin Dougiamas added a comment - - edited

          Sorry for the lack of feedback on this earlier. I appreciate the frustration of no feedback, but I really don't think this should have gone into HEAD in the current condition (particularly with database upgrades) but now it has I hope you are able to work on it a lot this week!

          A few notes:

          1) There really MUST be a spec document for this so that developers can understand the design quickly. eg http://docs.moodle.org/en/Development:Plagiarism_API

          2) The current code has a lot of hardcoded stuff everywhere for a) activity modules like assignment and b) plagiarism engines like turnitin - none of these should appear there. Likewise all the admin forms have turnitin hardcoded all over the place.

          A more conventional Moodle design would be to put EVERYTHING in a top level folder 'plagiarism' (since it does have UI interfaces) and have /plagiarism/lib.php implement a core class that provides an API for modules to use to send files, get files etc without knowing what plagiarism service is being used. This requires plagiarism being added as a core feature so string manager can find stuff etc.

          The different services should be implemented (and completely encapsulated) as true plugin folders under /plagiarism/turnitin etc (with db folder for defining capabilites etc), and each one extends some class in plagiarism/locallib.php to define all the different bits of functionality. Exactly which plugin is used is determined by admin settings (and later possibly other more local settings).

          Finally, if the plagiarism library ever needs to get any information from modules, it should look for a callback function in mod/xxx/lib.php.

          3) Please check all the code for coding style, 4-space indents, "if else" not "ifelse" and so on.

          In the meantime I think all this should be reverted from CVS until it can be redesigned in a modular way.

          Show
          Martin Dougiamas added a comment - - edited Sorry for the lack of feedback on this earlier. I appreciate the frustration of no feedback, but I really don't think this should have gone into HEAD in the current condition (particularly with database upgrades) but now it has I hope you are able to work on it a lot this week! A few notes: 1) There really MUST be a spec document for this so that developers can understand the design quickly. eg http://docs.moodle.org/en/Development:Plagiarism_API 2) The current code has a lot of hardcoded stuff everywhere for a) activity modules like assignment and b) plagiarism engines like turnitin - none of these should appear there. Likewise all the admin forms have turnitin hardcoded all over the place. A more conventional Moodle design would be to put EVERYTHING in a top level folder 'plagiarism' (since it does have UI interfaces) and have /plagiarism/lib.php implement a core class that provides an API for modules to use to send files, get files etc without knowing what plagiarism service is being used. This requires plagiarism being added as a core feature so string manager can find stuff etc. The different services should be implemented (and completely encapsulated) as true plugin folders under /plagiarism/turnitin etc (with db folder for defining capabilites etc), and each one extends some class in plagiarism/locallib.php to define all the different bits of functionality. Exactly which plugin is used is determined by admin settings (and later possibly other more local settings). Finally, if the plagiarism library ever needs to get any information from modules, it should look for a callback function in mod/xxx/lib.php. 3) Please check all the code for coding style, 4-space indents, "if else" not "ifelse" and so on. In the meantime I think all this should be reverted from CVS until it can be redesigned in a modular way.
          Hide
          Dan Marsden added a comment -

          here's an updated patch that uses a more modular design

          thanks!

          Show
          Dan Marsden added a comment - here's an updated patch that uses a more modular design thanks!
          Hide
          Martin Dougiamas added a comment -

          Wow, lots of work! That is a million times better!

          Show
          Martin Dougiamas added a comment - Wow, lots of work! That is a million times better!
          Hide
          Dan Marsden added a comment -

          improved patch - tidied up lang files, few Turnitin specific fixes, and few bugs fixed with main plagiarism/lib.php file.

          Show
          Dan Marsden added a comment - improved patch - tidied up lang files, few Turnitin specific fixes, and few bugs fixed with main plagiarism/lib.php file.
          Hide
          Dan Marsden added a comment -

          new patch based on latest HEAD

          Show
          Dan Marsden added a comment - new patch based on latest HEAD
          Hide
          Dan Marsden added a comment -

          I've split this patch out a bit and moved the db tables into the plugin folder instead of the core db/install.xml
          plagiarism_core.patch contains a patch for core files - including the global plagiarism lib

          plagiarism_turnitin contains the files for /plagiarism/turnitin

          thanks!

          Show
          Dan Marsden added a comment - I've split this patch out a bit and moved the db tables into the plugin folder instead of the core db/install.xml plagiarism_core.patch contains a patch for core files - including the global plagiarism lib plagiarism_turnitin contains the files for /plagiarism/turnitin thanks!
          Hide
          Dan Marsden added a comment -

          updated patches - improved help langs/removed old functions - general tidy.

          Show
          Dan Marsden added a comment - updated patches - improved help langs/removed old functions - general tidy.
          Hide
          Dan Marsden added a comment -
          Show
          Dan Marsden added a comment - I've also started basic docs here: http://docs.moodle.org/en/Plagiarism_Prevention and dev/spec stuff here: http://docs.moodle.org/en/Development:Plagiarism_API
          Hide
          Martín Langhoff added a comment -

          Hope CVS and GIT never implement this. Everytime I commit a file, it's mostly plagiarised...

          Show
          Martín Langhoff added a comment - Hope CVS and GIT never implement this. Everytime I commit a file, it's mostly plagiarised...
          Hide
          Dan Marsden added a comment -

          new version of Core patch that adds hooks into Quiz and into essay question types to allow display of plagiarism links. - also slightly tidied versions of Turnitin plugin.

          Show
          Dan Marsden added a comment - new version of Core patch that adds hooks into Quiz and into essay question types to allow display of plagiarism links. - also slightly tidied versions of Turnitin plugin.
          Hide
          Dan Marsden added a comment -

          heh - I think we would all be in trouble if our scm implemented plagiarism detection!

          Show
          Dan Marsden added a comment - heh - I think we would all be in trouble if our scm implemented plagiarism detection!
          Hide
          Sebastian Berm added a comment -

          This seems to be interesting.
          I'm one of the people currently working on the 1.9.x plugin for the Ephorus plagiarism prevention system, that particular module was based upon the assignment module with some added stuff.

          If this is indeed going to make it to the core, and it's certain the design won't chance, it might be interesting to see if we can actually port the current API system we have to support this, instead of starting from scratch with a copy of the 2.0 version of the assignment module.

          I haven't looked at the module in great detail, but it should be possible for us to create an compliant Ephorus module.
          Is there any possibility of two systems being included in the core, or isn't there a chance that even the Turn it in version will be included?

          Show
          Sebastian Berm added a comment - This seems to be interesting. I'm one of the people currently working on the 1.9.x plugin for the Ephorus plagiarism prevention system, that particular module was based upon the assignment module with some added stuff. If this is indeed going to make it to the core, and it's certain the design won't chance, it might be interesting to see if we can actually port the current API system we have to support this, instead of starting from scratch with a copy of the 2.0 version of the assignment module. I haven't looked at the module in great detail, but it should be possible for us to create an compliant Ephorus module. Is there any possibility of two systems being included in the core, or isn't there a chance that even the Turn it in version will be included?
          Hide
          Dan Marsden added a comment -

          Hi Sebastian,

          It would be great to see an Ephorus plugin using the 2.0 plagiarism API - the API is designed to facilitate a pluggable architecture and in future I hope to see range of different Plagiarism systems available.

          It's probably wise to wait for the plagiarism core code to be reviewed and included in 2.0 before you put too much effort into designing your own Plagiarism plugin, but check out the spec/detail here:
          http://docs.moodle.org/en/Development:Plagiarism_API

          I haven't updated that documentation to include the quiz question hooks yet. (still in progress anyway)

          You're right - it's possible that the Turnitin plugin itself may not actually end up in Core in time for 2.0 release, however the plagiarism Lib definitely should. It's highly unlikely that an ephorus plugin would be ready in time for review and inclusion in 2.0 core before release, but the pluggable architecture will hopefully allow the ephorus code to be completely contained within a single directory and not require any changes to core code - so installing it should be really easy for users.

          I'm hoping that a Crot plugin will also become available relatively soon (I've been talking with Sergey briefly about this as well) - it would be great if you could have a look at the specs and let me know if there are any other hooks that you think would be useful to add.

          thanks,

          Dan

          Show
          Dan Marsden added a comment - Hi Sebastian, It would be great to see an Ephorus plugin using the 2.0 plagiarism API - the API is designed to facilitate a pluggable architecture and in future I hope to see range of different Plagiarism systems available. It's probably wise to wait for the plagiarism core code to be reviewed and included in 2.0 before you put too much effort into designing your own Plagiarism plugin, but check out the spec/detail here: http://docs.moodle.org/en/Development:Plagiarism_API I haven't updated that documentation to include the quiz question hooks yet. (still in progress anyway) You're right - it's possible that the Turnitin plugin itself may not actually end up in Core in time for 2.0 release, however the plagiarism Lib definitely should. It's highly unlikely that an ephorus plugin would be ready in time for review and inclusion in 2.0 core before release, but the pluggable architecture will hopefully allow the ephorus code to be completely contained within a single directory and not require any changes to core code - so installing it should be really easy for users. I'm hoping that a Crot plugin will also become available relatively soon (I've been talking with Sergey briefly about this as well) - it would be great if you could have a look at the specs and let me know if there are any other hooks that you think would be useful to add. thanks, Dan
          Hide
          Dan Marsden added a comment -

          new plagiarism_core patch for review - this isn't compatible with the turnitin plugin code (yet) - I'll upload an updated plugin later.

          MD - One problem with this use of the single event_handler function is that the eventdata doesn't contain the eventname of the triggered event by default.

          for example the event is triggered like this:
          events_trigger('assignment_file_sent', $eventdata);
          but $eventdata doesn't contain the name "assignment_file_sent" so the handler doesn't really know what event has been triggered.

          We could add the name to the $eventdata object before triggering it, but it would be nicer if the eventname was automatically added to the $eventdata object in eventslib.php events_trigger - does that make sense?

          thanks!

          Show
          Dan Marsden added a comment - new plagiarism_core patch for review - this isn't compatible with the turnitin plugin code (yet) - I'll upload an updated plugin later. MD - One problem with this use of the single event_handler function is that the eventdata doesn't contain the eventname of the triggered event by default. for example the event is triggered like this: events_trigger('assignment_file_sent', $eventdata); but $eventdata doesn't contain the name "assignment_file_sent" so the handler doesn't really know what event has been triggered. We could add the name to the $eventdata object before triggering it, but it would be nicer if the eventname was automatically added to the $eventdata object in eventslib.php events_trigger - does that make sense? thanks!
          Hide
          Martin Dougiamas added a comment -

          Sorry, shooting by late at night and can't look at the code just now, but your comment makes me think there may be some crossed wires ... this is how I think it should be working ...

          The core libraries should never know anything about modules at all.

          The events should be very generic things for plagiarism (and possible other subsystems) to pick up on, like

          text_created
          text_updated
          document_created
          document_updated

          and the $eventdata should contain all the information about the text or document, such as where it is, itemids etc, and then, if required, information about a callback function to call in the module.

          So then the plagiarism system installs a handler for that event, gets all the $eventdata, uses it to

          • call appropriate plugins depending on plagiarism system setitngs
          • and then perhaps in realtime or otherwise later on after plagiarism plugins are finished, call the callback function in the module to finish the processing, throw up alerts etc or whatever it does.

          From a module author's perspective, all they have to do is:

          • fire the event when data comes in or changes, and then
          • write a function to respond to the plagiarism system results

          Does this make sense?

          Show
          Martin Dougiamas added a comment - Sorry, shooting by late at night and can't look at the code just now, but your comment makes me think there may be some crossed wires ... this is how I think it should be working ... The core libraries should never know anything about modules at all. The events should be very generic things for plagiarism (and possible other subsystems) to pick up on, like text_created text_updated document_created document_updated and the $eventdata should contain all the information about the text or document, such as where it is, itemids etc, and then, if required, information about a callback function to call in the module. So then the plagiarism system installs a handler for that event, gets all the $eventdata, uses it to call appropriate plugins depending on plagiarism system setitngs and then perhaps in realtime or otherwise later on after plagiarism plugins are finished, call the callback function in the module to finish the processing, throw up alerts etc or whatever it does. From a module author's perspective, all they have to do is: fire the event when data comes in or changes, and then write a function to respond to the plagiarism system results Does this make sense?
          Hide
          Dan Marsden added a comment -

          I think so - the patch I've posted here uses a single function event_handler in the core lib that handles all events - problem is that the eventdata being passed doesn't contain the name of the event being triggered - currently in assignment there's an event called "assignment_file_sent" - this triggers the plagiarism event_handler function but the events lib doesn't pass the "name" of the event in the eventdata - which is a problem if we only have one function in core lib handling all the events as the handler can't easily tell what "event" has been triggered.

          we can manage this by adding the "name" of the event into the eventdata - it seems strange that an event can be triggered, but the name of that event isn't passed to the handler - that way the plagiarism plugin can see the exact event that was triggered and handle it as required.

          or... we can add 5 event handler functions to the core plagiarism lib:
          text_created
          text_updated
          module_created
          module_updated
          module_deleted

          I assume that you'd prefer the 5 seperate core functions?

          Show
          Dan Marsden added a comment - I think so - the patch I've posted here uses a single function event_handler in the core lib that handles all events - problem is that the eventdata being passed doesn't contain the name of the event being triggered - currently in assignment there's an event called "assignment_file_sent" - this triggers the plagiarism event_handler function but the events lib doesn't pass the "name" of the event in the eventdata - which is a problem if we only have one function in core lib handling all the events as the handler can't easily tell what "event" has been triggered. we can manage this by adding the "name" of the event into the eventdata - it seems strange that an event can be triggered, but the name of that event isn't passed to the handler - that way the plagiarism plugin can see the exact event that was triggered and handle it as required. or... we can add 5 event handler functions to the core plagiarism lib: text_created text_updated module_created module_updated module_deleted I assume that you'd prefer the 5 seperate core functions?
          Hide
          Martin Dougiamas added a comment -

          You don't need events in the modules at all ... assignment just triggers the generic text_updated core event and includes "assignment" in the event data.

          Show
          Martin Dougiamas added a comment - You don't need events in the modules at all ... assignment just triggers the generic text_updated core event and includes "assignment" in the event data.
          Hide
          Martin Dougiamas added a comment -

          Any chance of time to work on this?

          Show
          Martin Dougiamas added a comment - Any chance of time to work on this?
          Hide
          Dan Marsden added a comment -

          hoping to look at this as soon as I get the Mahara Repository plugin working properly. either later tonight or tomorrow!

          Show
          Dan Marsden added a comment - hoping to look at this as soon as I get the Mahara Repository plugin working properly. either later tonight or tomorrow!
          Hide
          Dan Marsden added a comment -

          Hi Martin,

          How do you suggest I handle the "modulename_mod_created", "modulename_mod_updated" "modulename_mod_deleted" style events? - should I change the way those are triggered to make them generic "mod_created" core events and pass those through to the plagiarism lib?

          Show
          Dan Marsden added a comment - Hi Martin, How do you suggest I handle the "modulename_mod_created", "modulename_mod_updated" "modulename_mod_deleted" style events? - should I change the way those are triggered to make them generic "mod_created" core events and pass those through to the plagiarism lib?
          Hide
          Dan Marsden added a comment -

          also - looking at lib/db/events.php I see comments like "Core should not consume any events" - is that not valid?

          Show
          Dan Marsden added a comment - also - looking at lib/db/events.php I see comments like "Core should not consume any events" - is that not valid?
          Hide
          Martin Dougiamas added a comment -

          Well, generally core functions should just be called directly by modules, true.

          In this case we have stuff that can possibly take a long time to process, and we don't want the user waiting, so we do need some queuing somewhere, and events make that convenient.

          Even without events I think we are basically talking about this sequence, right?

          1. module calls a plagiarism function direct to ask for a file to be processed, passing files, module name and perhaps some internal reference (eg submission id)
          2. plagiarism lib stores details and has a cron function to process it in the background
          3. plagiarism lib calls module functions at the end to tell the module what happened, passing back result and reference
          4. module alters internal tables to show status

          Alternatively, this might be even simpler:

          1. module calls a plagiarism function direct to ask for a file to be processed, passing files, module name and perhaps some internal reference (eg submission id)
          2. plagiarism lib stores details in internal table and has a cron function to process it in the background
          3. plagiarism sets flags/results on the entries in the internal table when processing is finished
          4. module can call a second plagiarism function to query this table for status whenever it wants (eg, when displaying an assignment)

          (Why do you need mod created/updated/deleted events ?)

          Show
          Martin Dougiamas added a comment - Well, generally core functions should just be called directly by modules, true. In this case we have stuff that can possibly take a long time to process, and we don't want the user waiting, so we do need some queuing somewhere, and events make that convenient. Even without events I think we are basically talking about this sequence, right? module calls a plagiarism function direct to ask for a file to be processed, passing files, module name and perhaps some internal reference (eg submission id) plagiarism lib stores details and has a cron function to process it in the background plagiarism lib calls module functions at the end to tell the module what happened, passing back result and reference module alters internal tables to show status Alternatively, this might be even simpler: module calls a plagiarism function direct to ask for a file to be processed, passing files, module name and perhaps some internal reference (eg submission id) plagiarism lib stores details in internal table and has a cron function to process it in the background plagiarism sets flags/results on the entries in the internal table when processing is finished module can call a second plagiarism function to query this table for status whenever it wants (eg, when displaying an assignment) (Why do you need mod created/updated/deleted events ?)
          Hide
          Dan Marsden added a comment -

          new file removing event handling from module specific code.

          Show
          Dan Marsden added a comment - new file removing event handling from module specific code.
          Hide
          Dan Marsden added a comment -

          right patch

          Show
          Dan Marsden added a comment - right patch
          Hide
          Dan Marsden added a comment -

          new patch including admin setting to enable/disable plagiarism api - disabled by default. also fix capitalisation of strings.

          Show
          Dan Marsden added a comment - new patch including admin setting to enable/disable plagiarism api - disabled by default. also fix capitalisation of strings.
          Hide
          Dan Marsden added a comment -

          new patch file for plagiarism plugin (Martin: this hasn't been tested properly yet - will verify this and post back here later tonight)

          Show
          Dan Marsden added a comment - new patch file for plagiarism plugin (Martin: this hasn't been tested properly yet - will verify this and post back here later tonight)
          Hide
          Martin Dougiamas added a comment -

          OK, I've been looking at this. Great Dan!

          It looks very minimal now and shouldn't affect anyone who isn't using plagiarism plugins.

          My +1 for checkin and further refinement in HEAD if required (though I can't see anything significant).

          I should note here that Dan made a design decision here to use course module id as a main key instead of components and itemids. However, in this case I think it's OK to keep that because of the obvious link between plagiarism and gradeable items.

          Show
          Martin Dougiamas added a comment - OK, I've been looking at this. Great Dan! It looks very minimal now and shouldn't affect anyone who isn't using plagiarism plugins. My +1 for checkin and further refinement in HEAD if required (though I can't see anything significant). I should note here that Dan made a design decision here to use course module id as a main key instead of components and itemids. However, in this case I think it's OK to keep that because of the obvious link between plagiarism and gradeable items.
          Hide
          Martin Dougiamas added a comment - - edited

          One thing to consider - do we need to include support for this in backup/restore? I think we might have to.

          However, it's going to be really difficult, because the plagiarism plugins all implement their own tables. So maybe we just leave that out.

          Show
          Martin Dougiamas added a comment - - edited One thing to consider - do we need to include support for this in backup/restore? I think we might have to. However, it's going to be really difficult, because the plagiarism plugins all implement their own tables. So maybe we just leave that out.
          Hide
          Dan Marsden added a comment -

          Core Plagiarism API now in HEAD. - Thanks Martin!

          I'm keen to add hooks somewhere so that the plugins can handle their own backup/restore, but this isn't needed right now. will talk to Eloy about the best place to put these sometime later.

          Note: to others keen to use this, the Turnitin plugin attached here won't work with the latest API due to some structural changes - I hope to have a working Turnitin plugin available for people to test with the latest API by the end of this week.

          thanks!

          Show
          Dan Marsden added a comment - Core Plagiarism API now in HEAD. - Thanks Martin! I'm keen to add hooks somewhere so that the plugins can handle their own backup/restore, but this isn't needed right now. will talk to Eloy about the best place to put these sometime later. Note: to others keen to use this, the Turnitin plugin attached here won't work with the latest API due to some structural changes - I hope to have a working Turnitin plugin available for people to test with the latest API by the end of this week. thanks!
          Hide
          Dan Marsden added a comment -

          for those interested in creating their own plagiarism plugin I've just created a template to use here:
          http://github.com/danmarsden/moodle-plagiarism_new

          I have a turnitin plugin currently in testing here:
          http://github.com/danmarsden/moodle-plagiarism_turnitin
          (but there seems to be a bug with the way it/Turnitin handles dates - the assignment due/open dates passed to Turnitin aren't being correctly identified by the turnitin API - fix should be coming soon)

          Show
          Dan Marsden added a comment - for those interested in creating their own plagiarism plugin I've just created a template to use here: http://github.com/danmarsden/moodle-plagiarism_new I have a turnitin plugin currently in testing here: http://github.com/danmarsden/moodle-plagiarism_turnitin (but there seems to be a bug with the way it/Turnitin handles dates - the assignment due/open dates passed to Turnitin aren't being correctly identified by the turnitin API - fix should be coming soon)
          Hide
          Joseph Rézeau added a comment -

          Hi all,
          I am really sorry that Moodle should consider including an anti-plagiarism feature in its core.
          I am as much against anti-plagiarism software as I am against plagiarism itself, for the reasons I explained here:
          http://moodle.org/mod/forum/discuss.php?d=147423#p644524
          I think that anti-plagiarism features go against the moodle "philosophy". No amount of anti-plagiarism features will replace education.

          Martin, please consider removing this feature from core moodle as being "anti-moodle".

          Joseph

          Show
          Joseph Rézeau added a comment - Hi all, I am really sorry that Moodle should consider including an anti-plagiarism feature in its core. I am as much against anti-plagiarism software as I am against plagiarism itself, for the reasons I explained here: http://moodle.org/mod/forum/discuss.php?d=147423#p644524 I think that anti-plagiarism features go against the moodle "philosophy". No amount of anti-plagiarism features will replace education . Martin, please consider removing this feature from core moodle as being "anti-moodle". Joseph
          Hide
          Dan Marsden added a comment -

          Hi Joseph,

          probably not the best place to discuss this... but here are my thoughts on the issue.

          personally I don't like the way a lot of institutions use Plagiarism tools either - but it doesn't have to be used as a "Big stick" - they can be used as an educational tool to help teach students about plagiarism and how to specify bibliography references - if I had my way - students would be able to make a submission and see the results before "final grading" - the tool could show up bibliography references that were missed and allow the student to add them - improving the quality of their submission.

          Moodle is highly modular - and so is the plagiarism API - in fact at the moment NO actual plugins exist in Moodle core - only the structure to allow an institution to install one. The decision to include plugins in future will be one that Moodle HQ/Martin will make, but as it is modular it would be very easy for someone like yourself to remove the plugin directories if required.

          The fact is that large numbers of institutions who use Moodle also want to use plagiarism software - those that don't want to - don't need to even install/enable a plugin.

          The Moodle "philosophy" - at least the one I've grown to love is one of openness - it shouldn't dictate a "personal" or "political" view, but provide features that educational institutions want - just because only 30% of institutions "want" a feedback module, or "want" a quiz module - doesn't mean it should be excluded as a feature. Just because I think SCORM is a silly standard (sometimes due to the grief it causes me as a developer!) doesn't mean that we shouldn't include it in Moodle.

          Personally I think your comments seem to be more "anti-moodle" than allowing the inclusion of a feature that large numbers of institutions/people want that makes very minimal impact on core code, but I respect your right not to include any plagiarism plugins in your installation and I respect that you have a differing opinion to mine - One of the great strengths of Moodle is the community of people who thoroughly discuss and debate a range of topics. Thanks for pointing out the discussion above - I hadn't seen that before and I'll try to get some time to read through it sometime this week!

          Show
          Dan Marsden added a comment - Hi Joseph, probably not the best place to discuss this... but here are my thoughts on the issue. personally I don't like the way a lot of institutions use Plagiarism tools either - but it doesn't have to be used as a "Big stick" - they can be used as an educational tool to help teach students about plagiarism and how to specify bibliography references - if I had my way - students would be able to make a submission and see the results before "final grading" - the tool could show up bibliography references that were missed and allow the student to add them - improving the quality of their submission. Moodle is highly modular - and so is the plagiarism API - in fact at the moment NO actual plugins exist in Moodle core - only the structure to allow an institution to install one. The decision to include plugins in future will be one that Moodle HQ/Martin will make, but as it is modular it would be very easy for someone like yourself to remove the plugin directories if required. The fact is that large numbers of institutions who use Moodle also want to use plagiarism software - those that don't want to - don't need to even install/enable a plugin. The Moodle "philosophy" - at least the one I've grown to love is one of openness - it shouldn't dictate a "personal" or "political" view, but provide features that educational institutions want - just because only 30% of institutions "want" a feedback module, or "want" a quiz module - doesn't mean it should be excluded as a feature. Just because I think SCORM is a silly standard (sometimes due to the grief it causes me as a developer!) doesn't mean that we shouldn't include it in Moodle. Personally I think your comments seem to be more "anti-moodle" than allowing the inclusion of a feature that large numbers of institutions/people want that makes very minimal impact on core code, but I respect your right not to include any plagiarism plugins in your installation and I respect that you have a differing opinion to mine - One of the great strengths of Moodle is the community of people who thoroughly discuss and debate a range of topics. Thanks for pointing out the discussion above - I hadn't seen that before and I'll try to get some time to read through it sometime this week!
          Hide
          Dan Marsden added a comment -

          also - I'm surprised to see the comment "No amount of anti-plagiarism features will replace education."

          I don't think anyone (certainly not me or Moodle HQ) is suggesting that it should. It's just another "tool" that teachers/institutions can choose to use if they wish - either as an educational tool (my preference) or as a "big stick" - but who are we to dictate what an institution should do - we should provide the tools to allow people to do what they want - otherwise they'll find another sub-standard tool to do the job for them.

          Show
          Dan Marsden added a comment - also - I'm surprised to see the comment "No amount of anti-plagiarism features will replace education." I don't think anyone (certainly not me or Moodle HQ) is suggesting that it should. It's just another "tool" that teachers/institutions can choose to use if they wish - either as an educational tool (my preference) or as a "big stick" - but who are we to dictate what an institution should do - we should provide the tools to allow people to do what they want - otherwise they'll find another sub-standard tool to do the job for them.
          Hide
          Ashley Holman added a comment -

          Like it or not, many institutions require plagiarism detection and have existing investments in plagiarism detection tools that already integrate with other learning management systems. Removing this from core will simply force these users to install third party non-core plugins to achieve this. The core API provides many advantages over the 1.9 plagiarism plugins which were simply activity modules, blocks, or core hacks. The API allows for a much deeper integration with these tools, eg. providing the ability for other third party plugins to call upon plagiarism detection without needing to know specific details of the implementation. So this is a good step forward for Moodle and is yet another tick in the box for institutions considering Moodle for their teaching.

          Show
          Ashley Holman added a comment - Like it or not, many institutions require plagiarism detection and have existing investments in plagiarism detection tools that already integrate with other learning management systems. Removing this from core will simply force these users to install third party non-core plugins to achieve this. The core API provides many advantages over the 1.9 plagiarism plugins which were simply activity modules, blocks, or core hacks. The API allows for a much deeper integration with these tools, eg. providing the ability for other third party plugins to call upon plagiarism detection without needing to know specific details of the implementation. So this is a good step forward for Moodle and is yet another tick in the box for institutions considering Moodle for their teaching.
          Hide
          Joseph Rézeau added a comment -

          Hi Dan,

          My sincere thanks for your speedy comments on my comment re anti-plagiarism. I admit that the way I expressed my view somewhat lacked in "openness" and may have been resented as anti-Moodle, which is of course the last thing I want to express!

          "The fact is that large numbers of institutions who use Moodle also want to use plagiarism software..."
          Probably right, and I lament that fact. Mine is of course a political (but primarily pedagogic) point of view. I'm afraid that it's not so much that many institutions want plagiarism software than commercial firms who produce that software push the institutions into buying it. And those firms certainly do not share Moodle's "open" philosophy, nor do they have pedagogic values, they are only after the money. That is why I lament the fact that, by providing plugins to such plagiarism software, Moodle indirectly promotes values which run counter to what I perceive to be its philosophy.

          "Plagiarism tools [...] can be used as an educational tool to help teach students about plagiarism and how to specify bibliography references ".
          Point taken, but... do universities need to spend lots of money on such tools for doing something which is (or should be) part and parcel of their normal teaching? I have recently given courses to university students precisely about plagiarism and correct referencing. This is what I mean by "education".

          "It's just another "tool" that teachers/institutions can choose to use if they wish"
          I have devoted a number of pages in my PhD thesis to the analysis of such concepts as "tool", "instrument", "machine". The frequent expression "[...] is just a tool / is another tool" is usually followed by "... it's not the tool that matters but what you do with it". Pushed to the extreme, we get such (to me horrifying) statements as "guns don't kill, people who use guns do" to justify the (again to me horrifying) number of weapons circulating in the US. A tool is never neutral. Of course you can kill people with a screwdriver or a pair of scissors. Of course you can own a gun and never use it. It remains that a gun has been built to kill.

          I beg to disagree with the view is that "if Moodle will supply a plagiarism plugin, it does not mean that Moodle supports the validity of plagiarism software".

          Let's see what Martin D. has to say on the matter. And - again- many thanks for taking part in this interesting discussion.

          Joseph

          Show
          Joseph Rézeau added a comment - Hi Dan, My sincere thanks for your speedy comments on my comment re anti-plagiarism. I admit that the way I expressed my view somewhat lacked in "openness" and may have been resented as anti-Moodle, which is of course the last thing I want to express! "The fact is that large numbers of institutions who use Moodle also want to use plagiarism software..." Probably right, and I lament that fact. Mine is of course a political (but primarily pedagogic) point of view. I'm afraid that it's not so much that many institutions want plagiarism software than commercial firms who produce that software push the institutions into buying it. And those firms certainly do not share Moodle's "open" philosophy, nor do they have pedagogic values, they are only after the money. That is why I lament the fact that, by providing plugins to such plagiarism software, Moodle indirectly promotes values which run counter to what I perceive to be its philosophy. "Plagiarism tools [...] can be used as an educational tool to help teach students about plagiarism and how to specify bibliography references ". Point taken, but... do universities need to spend lots of money on such tools for doing something which is (or should be) part and parcel of their normal teaching? I have recently given courses to university students precisely about plagiarism and correct referencing. This is what I mean by "education". "It's just another "tool" that teachers/institutions can choose to use if they wish" I have devoted a number of pages in my PhD thesis to the analysis of such concepts as "tool", "instrument", "machine". The frequent expression " [...] is just a tool / is another tool" is usually followed by "... it's not the tool that matters but what you do with it". Pushed to the extreme, we get such (to me horrifying) statements as "guns don't kill, people who use guns do" to justify the (again to me horrifying) number of weapons circulating in the US. A tool is never neutral . Of course you can kill people with a screwdriver or a pair of scissors. Of course you can own a gun and never use it. It remains that a gun has been built to kill. I beg to disagree with the view is that "if Moodle will supply a plagiarism plugin, it does not mean that Moodle supports the validity of plagiarism software". Let's see what Martin D. has to say on the matter. And - again- many thanks for taking part in this interesting discussion. Joseph
          Hide
          Dan Marsden added a comment -

          Wow - I admire the passion you have, although comparing plagiarism tools to a gun seems rather over dramatic.

          It is obvious to me that we will both continue to sit on different sides of the fence but I'll make one last comment.

          Martin has already had a very significant say in this by suggesting modifications to the initial proposal and approving it for inclusion. I'm sure he'll add something here if he feels otherwise.

          There are people who share your beliefs on other topics in Moodle - some people might say that the use of an open/pluggable database layer that supports MS Sql just enables institutions to continue spending money on unnecessary "tools" as well as many other negative opinions towards closed source/Microsoft in general. I'm glad that the Moodle Community/Moodle HQ has not taken this "closed" stance as I believe it stifles creativity and innovation.

          Personally I'm proud of the fact that Moodle provides a good base for innovation and I think the new plagiarism API contributes a significant advancement - I'm not at all concerned if people decide not to install any plugins. I feel confident that many institutions will find it a valuable improvement in 2.0 - the votes on this bug are certainly an encouragement.

          Show
          Dan Marsden added a comment - Wow - I admire the passion you have, although comparing plagiarism tools to a gun seems rather over dramatic. It is obvious to me that we will both continue to sit on different sides of the fence but I'll make one last comment. Martin has already had a very significant say in this by suggesting modifications to the initial proposal and approving it for inclusion. I'm sure he'll add something here if he feels otherwise. There are people who share your beliefs on other topics in Moodle - some people might say that the use of an open/pluggable database layer that supports MS Sql just enables institutions to continue spending money on unnecessary "tools" as well as many other negative opinions towards closed source/Microsoft in general. I'm glad that the Moodle Community/Moodle HQ has not taken this "closed" stance as I believe it stifles creativity and innovation. Personally I'm proud of the fact that Moodle provides a good base for innovation and I think the new plagiarism API contributes a significant advancement - I'm not at all concerned if people decide not to install any plugins. I feel confident that many institutions will find it a valuable improvement in 2.0 - the votes on this bug are certainly an encouragement.
          Hide
          Anthony Borrow added a comment -

          Joseph - From a pedagogical perspective, I agree with you. The term plagiarism is negative and implies cheating. When used as a positive tool for helping students check the originality of their work I think some of the tools can be useful as students learn how to write for an academic setting. In so far as it can help them, I say go ahead and make it available. As I understand the Moodle development process, we are trying to make points of entry for a variety of functionality. Moodle does not need to have all of the tools (like repositories, portfolios, etc.) but it should be able to play nicely with them. There are a variety of ways to approach plagiarism. Some may be commercial offerings, others like CROT may be based on simpler techniques. Actually I think having the Plagiarism API allows for more creativity among developers for a quality, free plagiarism/originality checker. As such, I am glad to see the API supported in core now we just need to make sure that we provide some good alternatives. Peace - Anthony

          Show
          Anthony Borrow added a comment - Joseph - From a pedagogical perspective, I agree with you. The term plagiarism is negative and implies cheating. When used as a positive tool for helping students check the originality of their work I think some of the tools can be useful as students learn how to write for an academic setting. In so far as it can help them, I say go ahead and make it available. As I understand the Moodle development process, we are trying to make points of entry for a variety of functionality. Moodle does not need to have all of the tools (like repositories, portfolios, etc.) but it should be able to play nicely with them. There are a variety of ways to approach plagiarism. Some may be commercial offerings, others like CROT may be based on simpler techniques. Actually I think having the Plagiarism API allows for more creativity among developers for a quality, free plagiarism/originality checker. As such, I am glad to see the API supported in core now we just need to make sure that we provide some good alternatives. Peace - Anthony
          Hide
          Dan Marsden added a comment -

          I should probably have mentioned that I also agree with many of the arguments against the use of Plagiarism tools - although I still see a use for them - as a former student I like the "idea" that the use of a plagiarism tool improves fairness - there were some students I knew of at university level that would have ignored any form of "education" around plagiarism - they did it to be lazy, and with classes of over 500 I can't expect the marker to "know" the student or know that this paper was submitted in it's exact form last year by the students cousin. With large classes the marker may even be different.

          Show
          Dan Marsden added a comment - I should probably have mentioned that I also agree with many of the arguments against the use of Plagiarism tools - although I still see a use for them - as a former student I like the "idea" that the use of a plagiarism tool improves fairness - there were some students I knew of at university level that would have ignored any form of "education" around plagiarism - they did it to be lazy, and with classes of over 500 I can't expect the marker to "know" the student or know that this paper was submitted in it's exact form last year by the students cousin. With large classes the marker may even be different.
          Hide
          Martin Dougiamas added a comment -

          Well, I already approved it because it's a useful thing that many people want. That's not changing.

          Plagiarism is unfortunately a loaded word. The API is really a "content checking" API, all it does is pass files out and get back some info. This is a really useful mechanism to have as it allows developers to integrate Moodle with all kinds of system, many of which we can't imagine yet.

          It's true that most of the existing use cases involve plagiarism detection services, which is why the API is called that, so people understand what sort of thing it does.

          Please note it's just an API though. We don't include any actual plugins for this in Moodle. So there is some philosophical ground if you like.

          Show
          Martin Dougiamas added a comment - Well, I already approved it because it's a useful thing that many people want. That's not changing. Plagiarism is unfortunately a loaded word. The API is really a "content checking" API, all it does is pass files out and get back some info. This is a really useful mechanism to have as it allows developers to integrate Moodle with all kinds of system, many of which we can't imagine yet. It's true that most of the existing use cases involve plagiarism detection services, which is why the API is called that, so people understand what sort of thing it does. Please note it's just an API though. We don't include any actual plugins for this in Moodle. So there is some philosophical ground if you like.
          Hide
          Martin Dougiamas added a comment -

          As an example of different uses of content checking, see http://www.writecheck.com/static/home.html

          Show
          Martin Dougiamas added a comment - As an example of different uses of content checking, see http://www.writecheck.com/static/home.html

            People

            • Votes:
              10 Vote for this issue
              Watchers:
              19 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: