Moodle
  1. Moodle
  2. MDL-32523

Copy (Duplicate) question(s) in the Question Bank

    Details

    • Type: New Feature New Feature
    • Status: Closed
    • Priority: Minor Minor
    • Resolution: Fixed
    • Affects Version/s: 2.2.2, 2.7
    • Fix Version/s: 2.7
    • Component/s: Questions
    • Labels:
    • Testing Instructions:
      Hide
      1. Go to Administration -> Question bank -> Questions in a course. (If needed create a couple of questions.)
      2. In the table in question bank click on “Duplicate” icon for a question
      3. This take you to the question editing page and you will see that the information on the question editing form is taken from the given question you decided to duplicate
      4. The string ‘ (copy)’ is concatenated to the end of the question name, modify form as you require and click on ‘Save changes’
      5. The new question appear in the list of questions in the question bank
      6. Repeat steps 2-5 for these cases:
        • Simple qtype like multichoice.
        • Simple qtype, but with images embedded in lots of the text fields.
        • A multianswer (Cloze) question.
        • A calculated question.

      This can be equally be done from the question bank displayed on quiz editing page.

      Show
      Go to Administration -> Question bank -> Questions in a course. (If needed create a couple of questions.) In the table in question bank click on “Duplicate” icon for a question This take you to the question editing page and you will see that the information on the question editing form is taken from the given question you decided to duplicate The string ‘ (copy)’ is concatenated to the end of the question name, modify form as you require and click on ‘Save changes’ The new question appear in the list of questions in the question bank Repeat steps 2-5 for these cases: Simple qtype like multichoice. Simple qtype, but with images embedded in lots of the text fields. A multianswer (Cloze) question. A calculated question. This can be equally be done from the question bank displayed on quiz editing page.
    • Affected Branches:
      MOODLE_22_STABLE, MOODLE_27_STABLE
    • Fixed Branches:
      MOODLE_27_STABLE
    • Pull from Repository:
    • Pull Master Branch:

      Description

      Add a "Copy" button to the buttom of the question list (Inside the Question Bank) that enable the question creator to duplicate a question inside the same category or a different one. (next to the "Move" button)

      Question's data should be duplicated and not "linked" to, to enable teachers to change the copied question(s) without changing the original question inside the Quiz that was using the original questions.

        Gliffy Diagrams

          Issue Links

            Activity

            Hide
            Pierre Pichet added a comment -

            Say in other words you want to have the same result as the "save as a new question" button in the edit form where nothing except possibly the category has been changed.

            As usual calculated will need special handling

            Show
            Pierre Pichet added a comment - Say in other words you want to have the same result as the "save as a new question" button in the edit form where nothing except possibly the category has been changed. As usual calculated will need special handling
            Hide
            Nadav Kavalerchik added a comment -

            @Pierre
            Yes

            Show
            Nadav Kavalerchik added a comment - @Pierre Yes
            Hide
            Tim Hunt added a comment -

            Acutally, I was already considering this. I think it would be a much less confusing user-interface is we separated copy question and move question behaviour from the edit question behaviour. It would also simplify the code, which means fewer bugs.

            I mean, how many times have you clicked on the 'Edit' icon for an question intending to make some changes, and then click 'Make copy', but then clicked 'Save changes' by mistake, and broken the original question.

            Show
            Tim Hunt added a comment - Acutally, I was already considering this. I think it would be a much less confusing user-interface is we separated copy question and move question behaviour from the edit question behaviour. It would also simplify the code, which means fewer bugs. I mean, how many times have you clicked on the 'Edit' icon for an question intending to make some changes, and then click 'Make copy', but then clicked 'Save changes' by mistake, and broken the original question.
            Hide
            Nadav Kavalerchik added a comment -

            @Tim
            +1 (or Like) to your previous comment

            btw, I was going through the code and found out the question_save function
            and I think it is very easy to implement. and if you are busy... i will have it done next week or so.
            Unless, of course... you already on it

            Show
            Nadav Kavalerchik added a comment - @Tim +1 (or Like) to your previous comment btw, I was going through the code and found out the question_save function and I think it is very easy to implement. and if you are busy... i will have it done next week or so. Unless, of course... you already on it
            Hide
            Tim Hunt added a comment -

            No. I am not on it. I am on MDL-3030. Until that is done, I cannot promise to peer review anything.

            As Pierre says, make sure to test calculated questions. Also, you will need to read http://docs.moodle.org/dev/Question_data_structures

            Show
            Tim Hunt added a comment - No. I am not on it. I am on MDL-3030 . Until that is done, I cannot promise to peer review anything. As Pierre says, make sure to test calculated questions. Also, you will need to read http://docs.moodle.org/dev/Question_data_structures
            Hide
            Nadav Kavalerchik added a comment -

            @Tim, ok I will patch it and add a link to it when I am done.

            Show
            Nadav Kavalerchik added a comment - @Tim, ok I will patch it and add a link to it when I am done.
            Hide
            Nadav Kavalerchik added a comment -

            I have made some progress, BUT I am stuck. and love to get some help...

            I have added the following code to moodle/question/editlib.php (around/after line 403)
            Which adds a listbox of "my courses" at the end of the Question Bank dialog, to which i am about to copy a question

            question_category_select_menu($addcontexts, false, 0, "$category->id,$category->contextid");
            // new code start here
            echo "<hr/>";   
            $mycourses = get_my_courses($USER->id);
            foreach($mycourses as $mycourse) {
              $mycourseslist[$mycourse->id] = $mycourse->fullname;
            }
            echo choose_from_menu($mycourseslist,'selectedcourse');
            echo '<input type="submit" name="copy" value="'.get_string('copyto', 'quiz')."\" />\n";
            // new code end here
            }
            

            And added a new Action:"copy" to handle to copy/duplicate request,
            around line 442 (inside question_showbank_action() function):

                if (optional_param('copy', false, PARAM_BOOL) and confirm_sesskey()) {
                $courseid = required_param('courseid', PARAM_SEQUENCE);
                $sql = "SELECT qc.id as tocategoryid, qc.contextid as contextid
            FROM `mdl_context` c
            JOIN `mdl_question_categories` qc ON c.id = qc.contextid
            WHERE `instanceid` = $courseid ";
             
            $questioncategory = get_record_sql($sql);
                  if (! $tocategory = get_record('question_categories', 'id', $questioncategory->tocategoryid, 'contextid', $questioncategory->contextid)) {
                      error('Could not find category record');
                  }
                  $tocontext = get_context_instance_by_id($questioncategory->contextid);
             
             
                  $rawdata = (array) data_submitted();
                  $questionids = array();
                  foreach ($rawdata as $key => $value) {    // Parse input for question ids
                      if (preg_match('!^q([0-9]+)$!', $key, $matches)) {
                          $key = $matches[1];
                          $questionids[] = $key;
                      }
                  }
                  if ($questionids){
                    $questionidlist = join($questionids, ',');
                    $sql = "SELECT q.*, c.contextid FROM {$CFG->prefix}question q, {$CFG->prefix}question_categories c WHERE q.id IN ($questionidlist) AND c.id = q.category";
                    if (!$questions = get_records_sql($sql)){
                        print_error('questiondoesnotexist', 'question', $pageurl->out());
                    }
                    foreach($questions as $question) {
                      $question->id = NULL;
                      echo $question->name = 'copy_'.$question->name; echo "<br/>";
                      $newquestion = $QTYPES[$question->qtype]->save_question($question, $question);                    
                    }
                  }
                  die;
                }
            

            What I am trying to do is, to copy the selected question(s) to the first question category of the selected course.
            I am calling $QTYPES[$question->qtype]->save_question() for each question. BUT! it seems that the save_question_options() for each question type does not get invoked and the question is "half" duplicated.
            I see it on the question bank list, but, with no content.
            While examining the question/type/questiontype.php - save_question() function I saw that it is suppose to be invoked from within the function.
            Should I invoke it explicitly? (For each question type and 3rd-party question type too)
            And am I on the right track with this implementation? (Should it be done in a different way?)

            Show
            Nadav Kavalerchik added a comment - I have made some progress, BUT I am stuck. and love to get some help... I have added the following code to moodle/question/editlib.php (around/after line 403) Which adds a listbox of "my courses" at the end of the Question Bank dialog, to which i am about to copy a question question_category_select_menu($addcontexts, false, 0, "$category->id,$category->contextid"); // new code start here echo "<hr/>"; $mycourses = get_my_courses($USER->id); foreach($mycourses as $mycourse) { $mycourseslist[$mycourse->id] = $mycourse->fullname; } echo choose_from_menu($mycourseslist,'selectedcourse'); echo '<input type="submit" name="copy" value="'.get_string('copyto', 'quiz')."\" />\n"; // new code end here } And added a new Action:"copy" to handle to copy/duplicate request, around line 442 (inside question_showbank_action() function): if (optional_param('copy', false, PARAM_BOOL) and confirm_sesskey()) { $courseid = required_param('courseid', PARAM_SEQUENCE); $sql = "SELECT qc.id as tocategoryid, qc.contextid as contextid FROM `mdl_context` c JOIN `mdl_question_categories` qc ON c.id = qc.contextid WHERE `instanceid` = $courseid ";   $questioncategory = get_record_sql($sql); if (! $tocategory = get_record('question_categories', 'id', $questioncategory->tocategoryid, 'contextid', $questioncategory->contextid)) { error('Could not find category record'); } $tocontext = get_context_instance_by_id($questioncategory->contextid);     $rawdata = (array) data_submitted(); $questionids = array(); foreach ($rawdata as $key => $value) { // Parse input for question ids if (preg_match('!^q([0-9]+)$!', $key, $matches)) { $key = $matches[1]; $questionids[] = $key; } } if ($questionids){ $questionidlist = join($questionids, ','); $sql = "SELECT q.*, c.contextid FROM {$CFG->prefix}question q, {$CFG->prefix}question_categories c WHERE q.id IN ($questionidlist) AND c.id = q.category"; if (!$questions = get_records_sql($sql)){ print_error('questiondoesnotexist', 'question', $pageurl->out()); } foreach($questions as $question) { $question->id = NULL; echo $question->name = 'copy_'.$question->name; echo "<br/>"; $newquestion = $QTYPES[$question->qtype]->save_question($question, $question); } } die; } What I am trying to do is, to copy the selected question(s) to the first question category of the selected course. I am calling $QTYPES [$question->qtype] ->save_question() for each question. BUT! it seems that the save_question_options() for each question type does not get invoked and the question is "half" duplicated. I see it on the question bank list, but, with no content. While examining the question/type/questiontype.php - save_question() function I saw that it is suppose to be invoked from within the function. Should I invoke it explicitly? (For each question type and 3rd-party question type too) And am I on the right track with this implementation? (Should it be done in a different way?)
            Hide
            Tim Hunt added a comment -

            Try reading http://docs.moodle.org/dev/Question_data_structures if you have never read it before.

            You need to make sure you pass the right data to save_question, which is non-trivial, because get_question_options does not return the data structure that save_question expects.

            Show
            Tim Hunt added a comment - Try reading http://docs.moodle.org/dev/Question_data_structures if you have never read it before. You need to make sure you pass the right data to save_question, which is non-trivial, because get_question_options does not return the data structure that save_question expects.
            Hide
            Nadav Kavalerchik added a comment -

            Tim, Thanks you very much!

            I wish I came across the document before, though i read a few "neighboring" documents and read through several question types too.

            Again, thank you!

            Show
            Nadav Kavalerchik added a comment - Tim, Thanks you very much! I wish I came across the document before, though i read a few "neighboring" documents and read through several question types too. Again, thank you!
            Hide
            chester folming added a comment -

            Our teachers would love this "save as a new question" button.
            Is this coming?

            Show
            chester folming added a comment - Our teachers would love this "save as a new question" button. Is this coming?
            Hide
            Tim Hunt added a comment -

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

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

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

            I have done the fix

            Here is the diff:

            https://github.com/mkassaei/moodle/compare/mdl_32523?expand=1

            BTW, I deleted the "Make a copy" from the form and its occurrence in the code apart from

            } else if (!empty($form->makecopy)) {
            in question/type/calculated/questiontype.php and

            if (empty($question->makecopy) && $question->itemid[$i]) {
            and
            if (!empty($question->makecopy) && !empty($question->convert)) {
            in question/type/calculatedsimple/questiontype.php

            I believe that 'makecopy' need to be replaced by 'duplicate', since we have a hidden element 'duplicate' in question/type/edit_question_form.php. Alternatively, we could replace 'duplicate' in new changes with 'makecopy' and therefore we might get away with not changing the above calculated qtypes.

            Show
            Mahmoud Kassaei added a comment - I have done the fix Here is the diff: https://github.com/mkassaei/moodle/compare/mdl_32523?expand=1 BTW, I deleted the "Make a copy" from the form and its occurrence in the code apart from } else if (!empty($form->makecopy)) { in question/type/calculated/questiontype.php and if (empty($question->makecopy) && $question->itemid [$i] ) { and if (!empty($question->makecopy) && !empty($question->convert)) { in question/type/calculatedsimple/questiontype.php I believe that 'makecopy' need to be replaced by 'duplicate', since we have a hidden element 'duplicate' in question/type/edit_question_form.php. Alternatively, we could replace 'duplicate' in new changes with 'makecopy' and therefore we might get away with not changing the above calculated qtypes.
            Hide
            Tim Hunt added a comment -

            I have not yet tested this yet, I have just looked at the code, but it is looking very good. A pleasingly small patch.

            Some minor points:

            1. I think that, to duplicate a question, you need moodle/question:add on the context of the currently selected category, and question_has_capability_on($question, 'view') on the question being copied. I think this affects

            • question_bank_duplicate_action_column
            • question/question.php
            • validation() in question/type/edit_question_form.php.

            2. I am not sure why you need protected $duplicatequestionurl;

            3. I wonder if we can use the name makecopy instead of duplicate? If we are lucky that might make things like caclulated and STACK just work. If we are unlucky, it will cause problems.

            4. I don't think you should remove the // Copies should not be hidden comment.

            5. Please can you edit this issue, and write some testing instructions. We will need those before this can be integrated.

            6. Also, if it were me, I would probably add more to the commit comment explaining what this change is.

            Show
            Tim Hunt added a comment - I have not yet tested this yet, I have just looked at the code, but it is looking very good. A pleasingly small patch. Some minor points: 1. I think that, to duplicate a question, you need moodle/question:add on the context of the currently selected category, and question_has_capability_on($question, 'view') on the question being copied. I think this affects question_bank_duplicate_action_column question/question.php validation() in question/type/edit_question_form.php. 2. I am not sure why you need protected $duplicatequestionurl; 3. I wonder if we can use the name makecopy instead of duplicate? If we are lucky that might make things like caclulated and STACK just work. If we are unlucky, it will cause problems. 4. I don't think you should remove the // Copies should not be hidden comment. 5. Please can you edit this issue, and write some testing instructions. We will need those before this can be integrated. 6. Also, if it were me, I would probably add more to the commit comment explaining what this change is.
            Hide
            Mahmoud Kassaei added a comment -

            Thanks Tim,
            I have replaced 'duplicate' with 'makecopy' accordingly and added other minor changes.
            I also tested with calculated qtype and it worked.

            Show
            Mahmoud Kassaei added a comment - Thanks Tim, I have replaced 'duplicate' with 'makecopy' accordingly and added other minor changes. I also tested with calculated qtype and it worked.
            Hide
            Tim Hunt added a comment -

            That is getting better, but two more things:

            1. I just noticed ' (copy)' was hard-coded. It needs to be a langauge string, and you should not concatenate strings, because that does not work for languages taht need a different word order. So, you need a string like

            $string['questionnamecopy'] = '{$a} (copy)';
            

            2. I think you should not use 'makecopy' in question_bank_makecopy_action_column or makecopyaction. I think in those two you could just use the word 'copy'.

            3. You need to rebase -i to reduce this to a single commit.

            Show
            Tim Hunt added a comment - That is getting better, but two more things: 1. I just noticed ' (copy)' was hard-coded. It needs to be a langauge string, and you should not concatenate strings, because that does not work for languages taht need a different word order. So, you need a string like $string['questionnamecopy'] = '{$a} (copy)'; 2. I think you should not use 'makecopy' in question_bank_makecopy_action_column or makecopyaction. I think in those two you could just use the word 'copy'. 3. You need to rebase -i to reduce this to a single commit.
            Hide
            Mahmoud Kassaei added a comment -

            I have amended the code to accommodate the above changes including checking for capabilities that the user can add a question in the same category as the existing question and to view and edit the details of the question being copied.

            Show
            Mahmoud Kassaei added a comment - I have amended the code to accommodate the above changes including checking for capabilities that the user can add a question in the same category as the existing question and to view and edit the details of the question being copied.
            Hide
            Tim Hunt added a comment -

            Oops! Typo. The new lang string has ' {copy)'. They should both be round brackets.

            Show
            Tim Hunt added a comment - Oops! Typo. The new lang string has ' {copy)'. They should both be round brackets.
            Hide
            Tim Hunt added a comment -

            Also, I just tested with qtype_multianswer, and that does not work for some reason.

            Show
            Tim Hunt added a comment - Also, I just tested with qtype_multianswer, and that does not work for some reason.
            Hide
            Tim Hunt added a comment -

            I also tested a STACK question, which is a particularly complicated qtype, and that worked fine . So, we just need to fix multianswer, and the type, and we are done.

            Show
            Tim Hunt added a comment - I also tested a STACK question, which is a particularly complicated qtype, and that worked fine . So, we just need to fix multianswer, and the type, and we are done.
            Hide
            Mahmoud Kassaei added a comment -

            I have created two multianswer questions taking the two examples form
            http://docs.moodle.org/26/en/question/type/multianswer
            It was able to duplicate both of them.

            Show
            Mahmoud Kassaei added a comment - I have created two multianswer questions taking the two examples form http://docs.moodle.org/26/en/question/type/multianswer It was able to duplicate both of them.
            Hide
            Mahmoud Kassaei added a comment -

            I have changed the typo '{cop)' to '(cop)' and pushed it github

            Show
            Mahmoud Kassaei added a comment - I have changed the typo '{cop)' to '(cop)' and pushed it github
            Hide
            Tim Hunt added a comment -

            I don't know what happened before, but when I test again, multianswer questions are fine.

            So, this is now ready for integration. We just need to wait for 2.6 to be released, then we can rebase this.

            Show
            Tim Hunt added a comment - I don't know what happened before, but when I test again, multianswer questions are fine. So, this is now ready for integration. We just need to wait for 2.6 to be released, then we can rebase this.
            Hide
            Mahmoud Kassaei added a comment -

            Rebased on latest version of master (Moodle 2.7 dev)
            See https://github.com/mkassaei/moodle/compare/master...MDL-32523

            Show
            Mahmoud Kassaei added a comment - Rebased on latest version of master (Moodle 2.7 dev) See https://github.com/mkassaei/moodle/compare/master...MDL-32523
            Hide
            Dan Poltawski added a comment -

            The main moodle.git repository has just been updated with latest weekly modifications. You may wish to rebase your PULL branches to simplify history and avoid any possible merge conflicts. This would also make integrator's life easier next week.

            TIA and ciao

            Show
            Dan Poltawski added a comment - The main moodle.git repository has just been updated with latest weekly modifications. You may wish to rebase your PULL branches to simplify history and avoid any possible merge conflicts. This would also make integrator's life easier next week. TIA and ciao
            Hide
            Mahmoud Kassaei added a comment -

            I have rebased this on latest main Moodle git repository

            Show
            Mahmoud Kassaei added a comment - I have rebased this on latest main Moodle git repository
            Hide
            Marina Glancy added a comment -

            Hi Mahmoud, this is a very nice change!
            Please correct the following:
            1. class definition must have phpdocs block with class description, copyright and package
            2. there are trailing whitespaces in question/type/edit_question_form.php line 247
            and the most important
            3. this issue needs behat test, all other buttons have tests in question/tests/behat/*.feature
            I can help you with behat test if you need it

            Show
            Marina Glancy added a comment - Hi Mahmoud, this is a very nice change! Please correct the following: 1. class definition must have phpdocs block with class description, copyright and package 2. there are trailing whitespaces in question/type/edit_question_form.php line 247 and the most important 3. this issue needs behat test, all other buttons have tests in question/tests/behat/*.feature I can help you with behat test if you need it
            Hide
            Marina Glancy added a comment -

            linking to the css issue I found: MDL-43284

            Show
            Marina Glancy added a comment - linking to the css issue I found: MDL-43284
            Hide
            CiBoT added a comment -

            Moving this reopened issue out from current integration. Please, re-submit it for integration once ready.

            Show
            CiBoT added a comment - Moving this reopened issue out from current integration. Please, re-submit it for integration once ready.
            Hide
            Mahmoud Kassaei added a comment -

            Thanks Marina, I have done the suggested changes and wrote a behat test (I have not checked them in becasue I need to run behat before doing so). However, I has some issue with installing behat for windows.

            I get the follwoing message:

            Connection Error [ERR_CONNECTION]: Unable to connect to getcomposer.org

            Request to https://getcomposer.org/installer failed with errors:
            Failed to open stream: No connection could be made because the target machine actively refused it.

            I can see the php code when I go to https://getcomposer.org/installer

            Show
            Mahmoud Kassaei added a comment - Thanks Marina, I have done the suggested changes and wrote a behat test (I have not checked them in becasue I need to run behat before doing so). However, I has some issue with installing behat for windows. I get the follwoing message: — Connection Error [ERR_CONNECTION] : Unable to connect to getcomposer.org Request to https://getcomposer.org/installer failed with errors: Failed to open stream: No connection could be made because the target machine actively refused it. – I can see the php code when I go to https://getcomposer.org/installer
            Hide
            Marina Glancy added a comment -

            Hi Mahmoud,
            please try the following (from http://docs.moodle.org/dev/Acceptance_testing#Installation)

            If you don't have curl installed or you have problems running curl http://getcomposer.org/installer | php:
             
                Download http://getcomposer.org/installer
                Store it in /your/moodle/dirroot/composerinstaller.php for example
                Run it from /your/moodle/dirroot with php composerinstaller.php, you can delete this file after running the next step (php composer.phar update --dev) 
            

            Show
            Marina Glancy added a comment - Hi Mahmoud, please try the following (from http://docs.moodle.org/dev/Acceptance_testing#Installation ) If you don't have curl installed or you have problems running curl http://getcomposer.org/installer | php:   Download http://getcomposer.org/installer Store it in /your/moodle/dirroot/composerinstaller.php for example Run it from /your/moodle/dirroot with php composerinstaller.php, you can delete this file after running the next step (php composer.phar update --dev)
            Hide
            Mahmoud Kassaei added a comment -

            I have written a behat test-file for this, However, I have not tested it because I had some issues with my local server and behat installation after updating my master branch.

            In terms of the order of integration, this should be integrated before

            https://tracker.moodle.org/browse/MDL-33839
            and
            https://tracker.moodle.org/browse/MDL-33653

            I have just rebased this on latest version of Moodle master

            Show
            Mahmoud Kassaei added a comment - I have written a behat test-file for this, However, I have not tested it because I had some issues with my local server and behat installation after updating my master branch. In terms of the order of integration, this should be integrated before https://tracker.moodle.org/browse/MDL-33839 and https://tracker.moodle.org/browse/MDL-33653 I have just rebased this on latest version of Moodle master
            Hide
            CiBoT added a comment -

            Results for MDL-32523

            • Remote repository: git://github.com/mkassaei/moodle.git
            Show
            CiBoT added a comment - Results for MDL-32523 Remote repository: git://github.com/mkassaei/moodle.git Remote branch MDL-32523 to be integrated into upstream master Executed job http://integration.moodle.org/job/Precheck%20remote%20branch/523 Details: http://integration.moodle.org/job/Precheck%20remote%20branch/523/artifact/work/smurf.html
            Hide
            CiBoT added a comment -

            Results for MDL-32523

            • Remote repository: git://github.com/mkassaei/moodle.git
            Show
            CiBoT added a comment - Results for MDL-32523 Remote repository: git://github.com/mkassaei/moodle.git Remote branch MDL-32523 to be integrated into upstream master Executed job http://integration.moodle.org/job/Precheck%20remote%20branch/538 Details: http://integration.moodle.org/job/Precheck%20remote%20branch/538/artifact/work/smurf.html
            Hide
            Tim Hunt added a comment -

            Mahmoud, I just pushed three small commits on top of your work: https://github.com/timhunt/moodle/compare/master...MDL-32523 Are you happy with those changes?

            Show
            Tim Hunt added a comment - Mahmoud, I just pushed three small commits on top of your work: https://github.com/timhunt/moodle/compare/master...MDL-32523 Are you happy with those changes?
            Hide
            Tim Hunt added a comment -

            Mahmoud checked out my new commits, and was happy. I squashed two into the main commit, and left the third one separate. I hope that makes sense.

            Submitting for integration.

            Show
            Tim Hunt added a comment - Mahmoud checked out my new commits, and was happy. I squashed two into the main commit, and left the third one separate. I hope that makes sense. Submitting for integration.
            Hide
            Damyon Wiese added a comment -

            Thanks Tim and Mahmoud Kassaei,

            Looks good to me, + passes all tests.

            Integrated to master only.

            Show
            Damyon Wiese added a comment - Thanks Tim and Mahmoud Kassaei, Looks good to me, + passes all tests. Integrated to master only.
            Hide
            Marina Glancy added a comment -

            works good, thanks

            Show
            Marina Glancy added a comment - works good, thanks
            Hide
            Eloy Lafuente (stronk7) added a comment -

            I won't be saying "Thanks!" this week. I'm tired of it.

            For the good (and the bad), your code is now part of Moodle, the best LMS in the world. Hope you are contributing for that to continue being a fact (and not the opposite), sincerely.

            Just closing this as fixed, ciao

            PS: Just a bit of black/cruel humor, sorry, LOL!

            Show
            Eloy Lafuente (stronk7) added a comment - I won't be saying "Thanks!" this week. I'm tired of it. For the good (and the bad), your code is now part of Moodle, the best LMS in the world. Hope you are contributing for that to continue being a fact (and not the opposite), sincerely. Just closing this as fixed, ciao PS: Just a bit of black/cruel humor, sorry, LOL!

              People

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

                Dates

                • Created:
                  Updated:
                  Resolved: