Details

    • Testing Instructions:
      Hide

      Some advice to help with testing this:

      A. Add

      $CFG->forced_plugin_settings = array(
          'quiz' => array('autosaveperiod' => 10),
      );
      

      in your config.php file. The shortest auto-save delay you can set in the admin settings is 60 seconds, and that is annoyingly slow. It is much easer to test at 10s.

      B. Run with the Firebug or Chrome console open (and in developer debug mode). The JavaScript outputs some useful log messages that make it clear what is going on.

      C. To make it easier to test some possible failure modes, you may want to add sleep(10); inside mod/quiz/autosave.php.

      Note that there are good unit tests for a lot of this.

      Finally, read the comment below, titled "Draft documentation" since that gives an overview of how this is supposed to work.

      Test steps (should be repeated in Firefox, Chrome, IE, Safari)

      1. Create a quiz with one of each sort of question in (within reason).

      2. Ensure that the auto-save admin setting is turned on.

      3. Attempt the quiz as a student.

      4. Do some input into one or more of the questions. After the configured delay after your first change, there should be an Ajax request to the server, to save your changes.

      5. Navigate away from the quiz by clicking the 'Home' link, and then clicking 'Leave page' in the warning dialogue. (Or, if you prefer, kill your web browser or pull the power lead out of your computer. How realistic a simulation do you want to do )

      6. Really you need to repeat 5. for each type of input (text box, HTML editor, radio button, checkbox, dropdown menu, can you be bothered to install the drag-and-drop qtype add-ons?)

      7. Navigate back to the quiz and continue attempt. Verify that the data that was autosaved is still there.

      8. Change some input again, and then click next, either before or after the autosave happens. In both cases it should just work as it has always worked before autosave was implemented.

      9. Change some data, and try to click next during the gap between the 'Doing a save' and 'Save completed' log messages. Go back to the page you were on, and verify that the outcome of that is sensible.

      10. Set a time-limit on your quiz. Wait until time has nearly expired and change something. It should not be auto-saved. (More specifically, if you set autosaveperiod to 10 seconds as recommended above, then there should be no auto-saves during the last 20 seconds.)

      11. Try to think up your own creative ways to make this break.

      12. Finally, turn off the admin setting (in config.php if that is where you turned in on). Verify that the autosave is disabled.

      Show
      Some advice to help with testing this: A. Add $CFG->forced_plugin_settings = array( 'quiz' => array('autosaveperiod' => 10), ); in your config.php file. The shortest auto-save delay you can set in the admin settings is 60 seconds, and that is annoyingly slow. It is much easer to test at 10s. B. Run with the Firebug or Chrome console open (and in developer debug mode). The JavaScript outputs some useful log messages that make it clear what is going on. C. To make it easier to test some possible failure modes, you may want to add sleep(10); inside mod/quiz/autosave.php. Note that there are good unit tests for a lot of this. Finally, read the comment below, titled "Draft documentation" since that gives an overview of how this is supposed to work. Test steps (should be repeated in Firefox, Chrome, IE, Safari) 1. Create a quiz with one of each sort of question in (within reason). 2. Ensure that the auto-save admin setting is turned on. 3. Attempt the quiz as a student. 4. Do some input into one or more of the questions. After the configured delay after your first change, there should be an Ajax request to the server, to save your changes. 5. Navigate away from the quiz by clicking the 'Home' link, and then clicking 'Leave page' in the warning dialogue. (Or, if you prefer, kill your web browser or pull the power lead out of your computer. How realistic a simulation do you want to do ) 6. Really you need to repeat 5. for each type of input (text box, HTML editor, radio button, checkbox, dropdown menu, can you be bothered to install the drag-and-drop qtype add-ons?) 7. Navigate back to the quiz and continue attempt. Verify that the data that was autosaved is still there. 8. Change some input again, and then click next, either before or after the autosave happens. In both cases it should just work as it has always worked before autosave was implemented. 9. Change some data, and try to click next during the gap between the 'Doing a save' and 'Save completed' log messages. Go back to the page you were on, and verify that the outcome of that is sensible. 10. Set a time-limit on your quiz. Wait until time has nearly expired and change something. It should not be auto-saved. (More specifically, if you set autosaveperiod to 10 seconds as recommended above, then there should be no auto-saves during the last 20 seconds.) 11. Try to think up your own creative ways to make this break. 12. Finally, turn off the admin setting (in config.php if that is where you turned in on). Verify that the autosave is disabled.
    • Affected Branches:
      MOODLE_24_STABLE
    • Fixed Branches:
      MOODLE_25_STABLE
    • Pull from Repository:
    • Pull Master Branch:
      MDL-38538_clean

      Description

      This extends the work started in MDL-38537.

      As well as saving the data on the student's computer, we will also save it on the Moodle sever.

      Because this add extra load on the server, I think we need an option to control it, and I think this should be a site-wide admin setting

      Auto save quiz attempt data: No / Every minute / Every 2 minutes / Every 5 minutes

      When this option is on, the client-side JavaScript will automatically make an Ajax call to save the current state of the quiz attempt form with that frequency (if the student has changed any data since the last save).

      The Ajax call will go to a new script mod/quiz/autosave.php.

      This will call new code in the question engine: question_usage::auto_save(...) -> question_attempt::auto_save(...) -> question_behaviour_base::auto_save(...) which does the actual work.

      A question_attempt comprises a list of question_attempt_steps, each step has a state. During the attempt there are three states used: todo, complete and invalid. We will add a 4th state 'autosaved'. A step with that state will not be a real step, it will just hold the auto-saved data.

      We need to consider the following new cases:

      1. During an attempt which up until now has been 'normal' we get an auto-save action.
      2. With one auto-save on record, a second auto-save happens.
      3. With an auto-save on record, we then reveive a 'proper' submission, which should be processed as if the auto-saves had never happened.
      4. When displaying a quiz attempt, we find auto-save data on record which was never overwritten by a 'proper' submission.

        Gliffy Diagrams

          Issue Links

            Activity

            Hide
            Tim Hunt added a comment -

            Work in progress is on my MDL-38538 branch.

            Show
            Tim Hunt added a comment - Work in progress is on my MDL-38538 branch.
            Hide
            Tim Hunt added a comment -

            Adding Mahmoud as a watcher, in the hope that he has time to test this.

            Show
            Tim Hunt added a comment - Adding Mahmoud as a watcher, in the hope that he has time to test this.
            Hide
            Tim Hunt added a comment -

            I want to write some more unit tests for the edge cases, but I think this is ready for peer review now.

            Show
            Tim Hunt added a comment - I want to write some more unit tests for the edge cases, but I think this is ready for peer review now.
            Hide
            Andrew Nicols added a comment -

            Hi Tim,

            The feature looks great - this has been a much-desired request. Some initial comments for you

            Syntax

            JS:
            • Probably worth adding a call to Y.log when the form wasn't found to aid debugging.
            • Only a suggestion, but it may be worth splitting out CSS + SELECTORS into separate vars for future maintainability. See the WIP module doc at http://docs.moodle.org/dev/YUI/Modules#Separation_of_code_from_configuration_and_style_.28loose_coupling.29 for an example of what I mean
            • it would make sense to break out the setTimeout line in watch_hidden_fields into multiple lines - doing so would make future changes easier to view and determine, especially with the amount of this in it
            • Same goes for start_save_timer
            • Also, Y.later may be more appropriate and will save the Y.bind because you can supply context as the second arg http://yuilibrary.com/yui/docs/api/classes/YUI.html#method_later
            • is_time_nearly_over: Some brackets around the second line would make things a bit easier to read
            • typo in var this.editor_change_hander (handler)
            • Just an observation, and I fully understand why you aren't handling exception from the Y.io, but just worth noting. Is there any benefit in displaying an error when a user is unable to autosave - perhaps warning them that it was not possible to autosave and therefore it's likely that a true save will fail so they may want to make a note of their answers? maybe not… I shall leave it with you
            • detect_hidden_field_changes: In the if test, you check the current value versus the previous. Is there any potential circumstance where the previous doesn't exist? E.g. a form field added since init? If so, this will likely break. May be worth checking if the value exists - in which case, do you add it, or does the difference suggest a change?
            autosave.php
            • Again, only a suggestion, but may be worth renaming to autosave.ajax.php to make it clearer as to the purpose of the script
            • Only a suggestion, but should require_sesskey() be before the transaction? If the sesskey is invalid, no point starting a transaction?
            Other quiz code:
            • process_action - phpdoc s/use/used in existingstepid docs

            git

            Obviously, rebase + squash

            Testing

            I think it's worth asking the tester to install at least one ddmatch type question given they're the only type using hidden forms
            Also may be worth mentioning about testing quizzes spanning multiple pages? How does this work? I assume previous page are saved too.

            I'm not so familiar with the quiz side of things so I've not gone through that very much so far.

            Andrew

            Show
            Andrew Nicols added a comment - Hi Tim, The feature looks great - this has been a much-desired request. Some initial comments for you Syntax JS: Probably worth adding a call to Y.log when the form wasn't found to aid debugging. Only a suggestion, but it may be worth splitting out CSS + SELECTORS into separate vars for future maintainability. See the WIP module doc at http://docs.moodle.org/dev/YUI/Modules#Separation_of_code_from_configuration_and_style_.28loose_coupling.29 for an example of what I mean it would make sense to break out the setTimeout line in watch_hidden_fields into multiple lines - doing so would make future changes easier to view and determine, especially with the amount of this in it Same goes for start_save_timer Also, Y.later may be more appropriate and will save the Y.bind because you can supply context as the second arg http://yuilibrary.com/yui/docs/api/classes/YUI.html#method_later is_time_nearly_over: Some brackets around the second line would make things a bit easier to read typo in var this.editor_change_hander (handler) Just an observation, and I fully understand why you aren't handling exception from the Y.io, but just worth noting. Is there any benefit in displaying an error when a user is unable to autosave - perhaps warning them that it was not possible to autosave and therefore it's likely that a true save will fail so they may want to make a note of their answers? maybe not… I shall leave it with you detect_hidden_field_changes: In the if test, you check the current value versus the previous. Is there any potential circumstance where the previous doesn't exist? E.g. a form field added since init? If so, this will likely break. May be worth checking if the value exists - in which case, do you add it, or does the difference suggest a change? autosave.php Again, only a suggestion, but may be worth renaming to autosave.ajax.php to make it clearer as to the purpose of the script Only a suggestion, but should require_sesskey() be before the transaction? If the sesskey is invalid, no point starting a transaction? Other quiz code: process_action - phpdoc s/use/used in existingstepid docs git Obviously, rebase + squash Testing I think it's worth asking the tester to install at least one ddmatch type question given they're the only type using hidden forms Also may be worth mentioning about testing quizzes spanning multiple pages? How does this work? I assume previous page are saved too. I'm not so familiar with the quiz side of things so I've not gone through that very much so far. Andrew
            Hide
            Tim Hunt added a comment -

            Thanks Andrew. Great comments.

            Use of setTimeout is because I had just watched http://www.youtube.com/watch?v=8cTz73zdDuc.

            I think it is sufficient to only display autosave errors in tools like firebug. (Easy to change later if I am wrong.)

            The way the quiz has always worked: When you navigate to another page, everything on the page you left is saved. Autosave only has to cope with when you are sitting there with a single page open.

            Show
            Tim Hunt added a comment - Thanks Andrew. Great comments. Use of setTimeout is because I had just watched http://www.youtube.com/watch?v=8cTz73zdDuc . I think it is sufficient to only display autosave errors in tools like firebug. (Easy to change later if I am wrong.) The way the quiz has always worked: When you navigate to another page, everything on the page you left is saved. Autosave only has to cope with when you are sitting there with a single page open.
            Hide
            Tim Hunt added a comment -

            Right. Branch cleaned up and I am submitting this for integration.

            Show
            Tim Hunt added a comment - Right. Branch cleaned up and I am submitting this for integration.
            Hide
            Tim Hunt added a comment -

            Draft documentation

            Quiz auto-save

            The administrator can enable auto-saving in the quiz by going to Admin -> Plugins -> Activity modules -> Quiz and Setting Auto-save period.

            If this is set, then during a quiz attempt, the students current work will be saved that often. A save will only happen if the student has acutally changed some input. If the student's browser crashes, then when they go back in to the quiz, the data that was automatically saved will still be there. However, it is sitll expected that the student will submit the quiz in the normal manner. Most of the time, auto-save will make no visible difference.

            In a timed quiz, there will be no auto-save right at the end of the quiz. For example, if the quiz is set to auto-save every 2 minutes, then no auto-save will happen during the last 4 minutes. This is for two reasons: 1. The end of a timed quiz can already cause high server load; and 2. we do not want any chance of the quiz timer reaching zero and submitting the quiz while the auto-save is still being processed.

            Show
            Tim Hunt added a comment - Draft documentation Quiz auto-save The administrator can enable auto-saving in the quiz by going to Admin -> Plugins -> Activity modules -> Quiz and Setting Auto-save period. If this is set, then during a quiz attempt, the students current work will be saved that often. A save will only happen if the student has acutally changed some input. If the student's browser crashes, then when they go back in to the quiz, the data that was automatically saved will still be there. However, it is sitll expected that the student will submit the quiz in the normal manner. Most of the time, auto-save will make no visible difference. In a timed quiz, there will be no auto-save right at the end of the quiz. For example, if the quiz is set to auto-save every 2 minutes, then no auto-save will happen during the last 4 minutes. This is for two reasons: 1. The end of a timed quiz can already cause high server load; and 2. we do not want any chance of the quiz timer reaching zero and submitting the quiz while the auto-save is still being processed.
            Hide
            Dan Poltawski added a comment -

            This is my first shifter issue.. and I found the fact we were shipping -coverage.js kind of ugly, probably because it was the first thing I saw in the diff. It felt to me like we should add this to .gitingore and not ship this.. But perhaps I just need to get used to it..

            Show
            Dan Poltawski added a comment - This is my first shifter issue.. and I found the fact we were shipping -coverage.js kind of ugly, probably because it was the first thing I saw in the diff. It felt to me like we should add this to .gitingore and not ship this.. But perhaps I just need to get used to it..
            Hide
            Dan Poltawski added a comment -

            Hmm, there are two branches, MDL-38538 and MDL-38538_clean, but git diff tim/MDL-38538 tim/MDL-38538_clean shows them to be the same. Pheww.

            Show
            Dan Poltawski added a comment - Hmm, there are two branches, MDL-38538 and MDL-38538 _clean, but git diff tim/ MDL-38538 tim/ MDL-38538 _clean shows them to be the same. Pheww.
            Hide
            Dan Poltawski added a comment -

            Integrated to master. Thanks Tim.

            I have to say, i'm feel a little bit uneasy about the lack of autosave near the end of the timed quiz, it sounds a bit strange to have slightly inconsistent behaviour like that. But i'm probably over thinking and I trust your judgement.

            I created MDLSITE-2181 to get the CI servers to ignore built JS files when doing checks.

            Show
            Dan Poltawski added a comment - Integrated to master. Thanks Tim. I have to say, i'm feel a little bit uneasy about the lack of autosave near the end of the timed quiz, it sounds a bit strange to have slightly inconsistent behaviour like that. But i'm probably over thinking and I trust your judgement. I created MDLSITE-2181 to get the CI servers to ignore built JS files when doing checks.
            Hide
            Tim Hunt added a comment -

            Dan, the end of the two branches is the same code, but MDL-38538 has horrible commit history. You really don't want that mess in core.

            You will have to discuss the Shifter issue with the other integrators and Andrew.

            When time expires in the quiz, the quiz is automatically submitted, which saves all the data explicitly, so there is no need to do an implicit, behind the scenes, auto-save. We particularly don't want the server to be in the middle of processing an auto-save when Submit all and finish happens, even though I have some unit tests for concurrent processing.

            Also, towards the end of a timed quiz is often an occasion for a big peak in load, so adding extra auto-save load there might be a mistake (but I have not measured).

            Show
            Tim Hunt added a comment - Dan, the end of the two branches is the same code, but MDL-38538 has horrible commit history. You really don't want that mess in core. You will have to discuss the Shifter issue with the other integrators and Andrew. When time expires in the quiz, the quiz is automatically submitted, which saves all the data explicitly, so there is no need to do an implicit, behind the scenes, auto-save. We particularly don't want the server to be in the middle of processing an auto-save when Submit all and finish happens, even though I have some unit tests for concurrent processing. Also, towards the end of a timed quiz is often an occasion for a big peak in load, so adding extra auto-save load there might be a mistake (but I have not measured).
            Hide
            Tim Hunt added a comment -

            Grrr! found a bug. Fix in development.

            Show
            Tim Hunt added a comment - Grrr! found a bug. Fix in development.
            Hide
            Tim Hunt added a comment -
            Show
            Tim Hunt added a comment - Dan, one new commit, at the end of: https://github.com/timhunt/moodle/compare/master...MDL-38538_clean
            Hide
            Dan Poltawski added a comment -

            Integrated, thanks

            Show
            Dan Poltawski added a comment - Integrated, thanks
            Hide
            Aparup Banerjee added a comment -

            just noting the setting autosaveperiod has a nice twist in the sentence when it says "If you turn on this option, then the students will be automatically saved during quiz attempts." - the students are saved !

            Show
            Aparup Banerjee added a comment - just noting the setting autosaveperiod has a nice twist in the sentence when it says "If you turn on this option, then the students will be automatically saved during quiz attempts." - the students are saved !
            Hide
            Dan Poltawski added a comment -

            hehehe, hopefully Tim can patch that one

            Show
            Dan Poltawski added a comment - hehehe, hopefully Tim can patch that one
            Hide
            Tim Hunt added a comment -

            Oops! I will do another commit.

            Show
            Tim Hunt added a comment - Oops! I will do another commit.
            Show
            Tim Hunt added a comment - Here we go. https://github.com/timhunt/moodle/compare/master...MDL-38538_clean
            Hide
            Dan Poltawski added a comment -

            Integrated, thanks.

            Show
            Dan Poltawski added a comment - Integrated, thanks.
            Hide
            Rajesh Taneja added a comment -

            Thanks for adding this feature Tim,

            I am getting following JS error's.

            1. When clicked on "Attempt quiz", page loads with following JS error

              TypeError: method is undefined
              if (!method.apply) {
               
              http://rajesh.moodle.local/im/theme/yui_combo.php?3.9.0/build/simpleyui/simpleyui.js&3.9.0/build/loader/loader.js
              Line 5578
              

            2. After time elapsed, clicking next button gives following JS error and show leave page dialog

              TypeError: this.delay_timer.cancel is not a function
              this.delay_timer.cancel();
               
              http://rajesh.moodle.local/im/theme/yui_combo.php?moodle/1365055639/mod_quiz/autosave/autosave-debug.js
              Line 180
              

            3. Getting submissionoutofsequencefriendlymessage error when trying to reattempt question (Please refer attached video as student & as admin)
              • Quiz with one multichoice question and time limit of 5 min.
              • Select a choice and let it autosave
              • Click next and then click on "Return to attempt"
              • Change selection and let it autosave
              • Click next and you see this error
            4. Flagging a question starts throwing events in loop.
            5. As admin if you try attempt, it show submissionoutofsequencefriendlymessage more often as you have more options to re-attempt and preview.

            Failing this for now, as it seems to be breaking the current functionality of quiz.

            Show
            Rajesh Taneja added a comment - Thanks for adding this feature Tim, I am getting following JS error's. When clicked on "Attempt quiz", page loads with following JS error TypeError: method is undefined if (!method.apply) {   http://rajesh.moodle.local/im/theme/yui_combo.php?3.9.0/build/simpleyui/simpleyui.js&3.9.0/build/loader/loader.js Line 5578 After time elapsed, clicking next button gives following JS error and show leave page dialog TypeError: this.delay_timer.cancel is not a function this.delay_timer.cancel();   http://rajesh.moodle.local/im/theme/yui_combo.php?moodle/1365055639/mod_quiz/autosave/autosave-debug.js Line 180 Getting submissionoutofsequencefriendlymessage error when trying to reattempt question (Please refer attached video as student & as admin ) Quiz with one multichoice question and time limit of 5 min. Select a choice and let it autosave Click next and then click on "Return to attempt" Change selection and let it autosave Click next and you see this error Flagging a question starts throwing events in loop. As admin if you try attempt, it show submissionoutofsequencefriendlymessage more often as you have more options to re-attempt and preview. Failing this for now, as it seems to be breaking the current functionality of quiz.
            Hide
            Tim Hunt added a comment -

            Raj, which web browser are you testing with (in case I have trouble reproducing this).

            Show
            Tim Hunt added a comment - Raj, which web browser are you testing with (in case I have trouble reproducing this).
            Hide
            Dan Poltawski added a comment -

            Its firefox (iirc). For 1) I also reproduced that in chrome.

            Show
            Dan Poltawski added a comment - Its firefox (iirc). For 1) I also reproduced that in chrome.
            Hide
            Rajesh Taneja added a comment -

            Just tried FF 18.0.2 (on ubuntu) and quiz with one multichoice question.

            Show
            Rajesh Taneja added a comment - Just tried FF 18.0.2 (on ubuntu) and quiz with one multichoice question.
            Hide
            Tim Hunt added a comment -

            1. I don't see this, and I am not using any simple YUI, so no idea. None of this new code uses simpleyui. More information on reproducing this would be good.

            2. Doh! fixed.

            3. I'm working on this.

            4. Doh! Fixed.

            4b. I was getting a broken image error, which turned out to be a regression from MDL-38209. Fixed.

            5. is really a duplicate of 3, I think.

            Show
            Tim Hunt added a comment - 1. I don't see this, and I am not using any simple YUI, so no idea. None of this new code uses simpleyui. More information on reproducing this would be good. 2. Doh! fixed. 3. I'm working on this. 4. Doh! Fixed. 4b. I was getting a broken image error, which turned out to be a regression from MDL-38209 . Fixed. 5. is really a duplicate of 3, I think.
            Hide
            Tim Hunt added a comment -

            Thanks for Dan's help in reproducing 1. Now I know where to look, my stupid typo was obvious.

            (1. only happened when there were no TinyMCEs.)

            Show
            Tim Hunt added a comment - Thanks for Dan's help in reproducing 1. Now I know where to look, my stupid typo was obvious. (1. only happened when there were no TinyMCEs.)
            Hide
            Tim Hunt added a comment -
            Show
            Tim Hunt added a comment - OK, all problems (found so far) fixed: https://github.com/timhunt/moodle/compare/master...MDL-38538_fixes
            Hide
            Dan Poltawski added a comment -

            Thanks Tim - sending back to testing.

            Show
            Dan Poltawski added a comment - Thanks Tim - sending back to testing.
            Hide
            Dan Poltawski added a comment -

            PS. great work Raj!!

            Show
            Dan Poltawski added a comment - PS. great work Raj!!
            Hide
            Rajesh Taneja added a comment -

            Thanks Tim and Dan,

            Testing again.

            Show
            Rajesh Taneja added a comment - Thanks Tim and Dan, Testing again.
            Hide
            Rajesh Taneja added a comment -

            Thanks Tim,

            All works as expected for all core question types and D-N-D image, except Essay (tinymce). Changes in tinymce is not saved/loaded. Probably can be handled as another issue.

            Few minor things which might be considered (Not affecting the behaviour of quiz.)

            1. While answering/changing answer an event is fired(Detected a value change in element q23:3_answer.), this event is again fired when user tries to navigate away from page (click on "My Home" link)
            2. Clicking check fires an event, "Detected a value change in element scrollpos". Not sure if this is intentional.
            3. On chrome while editing a quiz following JS error appears (Also in stable)

              Uncaught ReferenceError: require is not defined moment.min.js:6
              c.lang moment.min.js:6
              setMomentJsLanguage moment.lang-all.min.js:27
              (anonymous function)
              

              • Create a new quiz in chrome or open an existing one.
              • Click "Edit quiz" and you will see above error in chrome console.
            Show
            Rajesh Taneja added a comment - Thanks Tim, All works as expected for all core question types and D-N-D image, except Essay (tinymce). Changes in tinymce is not saved/loaded. Probably can be handled as another issue. Few minor things which might be considered (Not affecting the behaviour of quiz.) While answering/changing answer an event is fired(Detected a value change in element q23:3_answer.), this event is again fired when user tries to navigate away from page (click on "My Home" link) Clicking check fires an event, "Detected a value change in element scrollpos". Not sure if this is intentional. On chrome while editing a quiz following JS error appears (Also in stable) Uncaught ReferenceError: require is not defined moment.min.js:6 c.lang moment.min.js:6 setMomentJsLanguage moment.lang-all.min.js:27 (anonymous function) Create a new quiz in chrome or open an existing one. Click "Edit quiz" and you will see above error in chrome console.
            Hide
            Tim Hunt added a comment -

            0. Not saving essays: That is a serious problem. I created MDL-38935.

            1. Yes, valuechanged does seem to fire when a control loses focus. I don't think there is anything we can do about this.

            2. This will be easy to fix, I added a note to MDL-38935.

            3. That looks like a Chrome bug! I don't think we use http://momentjs.com/docs/ in Moodle.

            Show
            Tim Hunt added a comment - 0. Not saving essays: That is a serious problem. I created MDL-38935 . 1. Yes, valuechanged does seem to fire when a control loses focus. I don't think there is anything we can do about this. 2. This will be easy to fix, I added a note to MDL-38935 . 3. That looks like a Chrome bug! I don't think we use http://momentjs.com/docs/ in Moodle.
            Hide
            Dan Poltawski added a comment -

            Did you remember to call thankDevelopers() for 'this_weeks_work'? Defaulting to PARAM_SHODDY thanking.

            line 1289 of \lib\changes.php: call to debugging()
            line 281 of \lib\are.php: call to moodleform->detectMissingThanks()
            line 202 of \lib\now.php: call to moodleform->_is_poor_form()
            line 73 of \course\upstream.php: call to moodleform->forgetingToThank()

            Show
            Dan Poltawski added a comment - Did you remember to call thankDevelopers() for 'this_weeks_work'? Defaulting to PARAM_SHODDY thanking. line 1289 of \lib\changes.php: call to debugging() line 281 of \lib\are.php: call to moodleform->detectMissingThanks() line 202 of \lib\now.php: call to moodleform->_is_poor_form() line 73 of \course\upstream.php: call to moodleform->forgetingToThank()
            Hide
            Mary Cooch added a comment -

            Removing docs_required label as I have mentioned this in http://docs.moodle.org/25/en/Quiz_settings

            Show
            Mary Cooch added a comment - Removing docs_required label as I have mentioned this in http://docs.moodle.org/25/en/Quiz_settings

              People

              • Votes:
                6 Vote for this issue
                Watchers:
                9 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: