Moodle
  1. Moodle
  2. MDL-27764

Topic Summary Restore/Import Problem

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 2.0.3, 2.1.3, 2.2.1, 2.3
    • Fix Version/s: 2.1.5, 2.2.2
    • Component/s: Backup
    • Environment:
      Ubuntu Server 11.04, Apache
    • Database:
      MySQL
    • Testing Instructions:
      Hide

      1) Create one new course ("orig") with 3 topics on it. Edit sections 2 & 3 and put some name and summary on them.

      2) Perform one backup of that course, don't need to include any activity nor user information, but you can if you want.

      3) Restore the backup created in 2) to new course.
      4) TEST: the names and summaries of section 2 & 3 are restored.

      5) Create one new course with any number of topics on it. Edit section 2 and put some name and summary on it.
      6) Restore the backup created in 2) into the course created in 5), adding information.
      7) TEST: Section 2 name and summary are unmodified, showing the information introduced in 5)
      8) TEST: Section 3 name and summary have been added, showing the information coming from 1)

      9) Restore the backup created in 2) into the course created in 5), deleting information.
      10) TEST: Both section 2 and 3 names and summaries have been added, showing the information coming from 1)

      11) Edit the course created in 1) ("orig") and add some image to the section 2 summary.
      12) Create one new course with any number of topics on it. Edit section 3 and put some name and summary on it.
      13) From the course created in 12), import information from the course created in 1)
      14) TEST: Section 3 name and summary are unmodified, showing the information introduced in 12)
      15) TEST: Section 2 name and summary have been added, showing the information coming from 1)
      16) TEST: The image added to section 2 summary by 11) is also displayed properly after import.

      That is, all types of restore, with and without pre-existing information in target sections.

      Ciao

      Show
      1) Create one new course ("orig") with 3 topics on it. Edit sections 2 & 3 and put some name and summary on them. 2) Perform one backup of that course, don't need to include any activity nor user information, but you can if you want. 3) Restore the backup created in 2) to new course. 4) TEST: the names and summaries of section 2 & 3 are restored. 5) Create one new course with any number of topics on it. Edit section 2 and put some name and summary on it. 6) Restore the backup created in 2) into the course created in 5), adding information. 7) TEST: Section 2 name and summary are unmodified, showing the information introduced in 5) 8) TEST: Section 3 name and summary have been added, showing the information coming from 1) 9) Restore the backup created in 2) into the course created in 5), deleting information. 10) TEST: Both section 2 and 3 names and summaries have been added, showing the information coming from 1) 11) Edit the course created in 1) ("orig") and add some image to the section 2 summary. 12) Create one new course with any number of topics on it. Edit section 3 and put some name and summary on it. 13) From the course created in 12), import information from the course created in 1) 14) TEST: Section 3 name and summary are unmodified, showing the information introduced in 12) 15) TEST: Section 2 name and summary have been added, showing the information coming from 1) 16) TEST: The image added to section 2 summary by 11) is also displayed properly after import. That is, all types of restore, with and without pre-existing information in target sections. Ciao
    • Workaround:
      Hide

      One way to get around this issue is to use labels instead of the summary. These are imported correctly. This still leaves out the topic heading and you will have to fix topics already using summaries.

      Show
      One way to get around this issue is to use labels instead of the summary. These are imported correctly. This still leaves out the topic heading and you will have to fix topics already using summaries.
    • Affected Branches:
      MOODLE_20_STABLE, MOODLE_21_STABLE, MOODLE_22_STABLE, MOODLE_23_STABLE
    • Fixed Branches:
      MOODLE_21_STABLE, MOODLE_22_STABLE
    • Pull from Repository:
    • Pull Master Branch:
    • Rank:
      17421

      Description

      When importing a topic (or section) from another course into your own course, You would expect the Topic Heading and summary to be imported as well. Currently it is not.

      When Restoring a course into your own (by merging) you would expect topic headings and summaries to be restored as well. They currently are not.

      Some things of interest:
      When restoring a course as a new course, the headings and summaries ARE restored.

      When restoring a course into your course (Using "Merge the backup course into this course"), if you select yes for "Overwrite course configuration" on the Schema page, the topic heading and summary will be restored correctly. This is not a real workaround however because all the course settings will be changed and this could have disastrous effects.

      1. MDL-27764_section_summaries_moodle22.patch
        9 kB
        mikehas
      1. 1_course_selection.png
        28 kB
      2. 2_import_settings.png
        31 kB
      3. 3_section_item_settings.png
        55 kB
      4. 4_import_confirmation.png
        43 kB

        Issue Links

          Activity

          Hide
          Michael de Raadt added a comment -

          I can confirm this for Import on current 2.0.3 master. The backup on my 2.0.3 master is currently broken, but I assume it is happening there also.

          Show
          Michael de Raadt added a comment - I can confirm this for Import on current 2.0.3 master. The backup on my 2.0.3 master is currently broken, but I assume it is happening there also.
          Hide
          Clark Shah-Nelson added a comment -

          Here's a vote for this! I would still like to see topic summaries have checkboxes on both the import and restore pages, just like all the resources and activities do. Actually, I'd like to see check boxes for blocks as well (custom and HTML blocks in particular) - because these too are copied on restore (when deleting first) but not when importing.

          Show
          Clark Shah-Nelson added a comment - Here's a vote for this! I would still like to see topic summaries have checkboxes on both the import and restore pages, just like all the resources and activities do. Actually, I'd like to see check boxes for blocks as well (custom and HTML blocks in particular) - because these too are copied on restore (when deleting first) but not when importing.
          Hide
          Gisele Brugger added a comment - - edited

          Hello everyone,
          summaries of the topics are not imported.
          1) I did the tests making backup course and then restoring
          2) I did the tests importing of the course
          In both cases the summaries came empty.

          Moodle Moodle 2.0.3+ (Build: 20110726)
          PHP Version 5.3.5-0.dotdeb.0
          Mysql 5.0.51.24.5

          Show
          Gisele Brugger added a comment - - edited Hello everyone, summaries of the topics are not imported. 1) I did the tests making backup course and then restoring 2) I did the tests importing of the course In both cases the summaries came empty. Moodle Moodle 2.0.3+ (Build: 20110726) PHP Version 5.3.5-0.dotdeb.0 Mysql 5.0.51.24.5
          Hide
          Michael de Raadt added a comment -

          Just correcting the link type here.

          Show
          Michael de Raadt added a comment - Just correcting the link type here.
          Hide
          Nadav Kavalerchik added a comment -

          I confirm this issue too for Moodle 2.1.1+ (Build: 20110803)

          Show
          Nadav Kavalerchik added a comment - I confirm this issue too for Moodle 2.1.1+ (Build: 20110803)
          Hide
          Nadav Kavalerchik added a comment -

          Anybody working on this?

          We need to import from a very large amount of courses, soon (in the next few days)
          And i am asking, before i start to figure it out on my own to see if someone is already figure it out or currently working on this issue.

          Nadav

          Show
          Nadav Kavalerchik added a comment - Anybody working on this? We need to import from a very large amount of courses, soon (in the next few days) And i am asking, before i start to figure it out on my own to see if someone is already figure it out or currently working on this issue. Nadav
          Hide
          Nadav Kavalerchik added a comment - - edited

          I am stuck and need some help, please
          (I am using Moodle 2.2 Dev 20111012 git code)

          I have used XDEBUG to try and figure out why Course Summaries are not Imported
          and got to the "foreach" loop (line 72) that is not entered for the "course_sections" restore task.
          (moodle/backup/util/helper/restore_decode_content.class.php)

             public function process($processor) {
                  if (!$processor instanceof restore_decode_processor) { // No correct processor, throw exception
                      throw new restore_decode_content_exception('incorrect_restore_decode_processor', get_class($processor));
                  }
                  if (!$this->restoreid) { // Check restoreid is set
                      throw new restore_decode_rule_exception('decode_content_restoreid_not_set');
                  }
          
                  // Get the iterator of contents
                  $it = $this->get_iterator();
                  foreach ($it as $itrow) {     
          

          I have checked the temporary backup folder on the disk,
          and it has all the Section's proper information, including the Summery field.

          Also, it appears $it->current = null after call to get_iterator that returned no records with the following SQL:

          SELECT t.id, t.summary
          FROM mdl_course_sections t
          JOIN mdl_backup_ids_temp b ON b.newitemid = t.id
          WHERE b.backupid = 'fb2cd5954dfba382ddc48b5373878997'
          AND b.itemname = 'course_section'
          
          Show
          Nadav Kavalerchik added a comment - - edited I am stuck and need some help, please (I am using Moodle 2.2 Dev 20111012 git code) I have used XDEBUG to try and figure out why Course Summaries are not Imported and got to the "foreach" loop (line 72) that is not entered for the "course_sections" restore task. (moodle/backup/util/helper/restore_decode_content.class.php) public function process($processor) { if (!$processor instanceof restore_decode_processor) { // No correct processor, throw exception throw new restore_decode_content_exception('incorrect_restore_decode_processor', get_class($processor)); } if (!$ this ->restoreid) { // Check restoreid is set throw new restore_decode_rule_exception('decode_content_restoreid_not_set'); } // Get the iterator of contents $it = $ this ->get_iterator(); foreach ($it as $itrow) { I have checked the temporary backup folder on the disk, and it has all the Section's proper information, including the Summery field. Also, it appears $it->current = null after call to get_iterator that returned no records with the following SQL: SELECT t.id, t.summary FROM mdl_course_sections t JOIN mdl_backup_ids_temp b ON b.newitemid = t.id WHERE b.backupid = 'fb2cd5954dfba382ddc48b5373878997' AND b.itemname = 'course_section'
          Hide
          Nadav Kavalerchik added a comment - - edited

          Status update: no progress. still. MHQ, i'd love some help/guidance. if you have any time to spare (i know you do not )
          Any tip will help. and i will keep digging myself.

          Show
          Nadav Kavalerchik added a comment - - edited Status update: no progress. still. MHQ, i'd love some help/guidance. if you have any time to spare (i know you do not ) Any tip will help. and i will keep digging myself.
          Hide
          mikehas added a comment - - edited

          A preferred behavior was discussed and implemented in 1.x versions of moodle, MDL-8848:

          Current behaviour is: (1.X)

          a) If we are restoring to a NEW course (not existing yet), section summaries ARE restored.
          b) If we are restoring to an EXISTING course, DELETING previous data, section summaries ARE restored.
          c) If we are restoring to an EXISTING course, KEEPING previous data, section summaries ARE RESTORED IF target section summary is empty.
          d) If we are importing to an EXISTING course, section summaries ARE RESTORED IF target section summary is empty.

          So section summaries are ALWAYS restored UNLESS there are some content in them.

          No new setting nor more options. Just new behaviour.

          Credit goes to Dan Poltawski for the patch (I forgot to credit you in the commit, Dan, sorry).

          Ciao

          Others suggested there be a check box for choosing if summaries should be imported or not.

          Show
          mikehas added a comment - - edited A preferred behavior was discussed and implemented in 1.x versions of moodle, MDL-8848 : Current behaviour is: (1.X) a) If we are restoring to a NEW course (not existing yet), section summaries ARE restored. b) If we are restoring to an EXISTING course, DELETING previous data, section summaries ARE restored. c) If we are restoring to an EXISTING course, KEEPING previous data, section summaries ARE RESTORED IF target section summary is empty. d) If we are importing to an EXISTING course, section summaries ARE RESTORED IF target section summary is empty. So section summaries are ALWAYS restored UNLESS there are some content in them. No new setting nor more options. Just new behaviour. Credit goes to Dan Poltawski for the patch (I forgot to credit you in the commit, Dan, sorry). Ciao Others suggested there be a check box for choosing if summaries should be imported or not.
          Hide
          mikehas added a comment - - edited

          I have a working patch that gives users an option to include section summaries during import.

          Here's a summary of how it works for end users:

          When using the import feature to copy course content from an old course
          to a new course, there is now an option to "Include Section Summaries".
          This option is checked by default.

          With the "Include Section Summaries" option checked:
          The section summary will be copied if both:
          The course section is selected during import (checked)
          The course section summary you are copying to is blank (It won't overwrite existing summaries)

          • The section name is also copied in this process if it is not set.

          The code is a fork off of MOODLE_21_STABLE (currently 2.1.3) and is available on github here:

          https://github.com/mikehas/moodle/tree/MDL-27764_SECTION_SUMMARIES

          I am new to the process of contributing upstream, but I am hoping someone has time to do a peer review and give feedback.

          • Mike
          Show
          mikehas added a comment - - edited I have a working patch that gives users an option to include section summaries during import. Here's a summary of how it works for end users: When using the import feature to copy course content from an old course to a new course, there is now an option to "Include Section Summaries". This option is checked by default. With the "Include Section Summaries" option checked: The section summary will be copied if both: The course section is selected during import (checked) The course section summary you are copying to is blank (It won't overwrite existing summaries) The section name is also copied in this process if it is not set. The code is a fork off of MOODLE_21_STABLE (currently 2.1.3) and is available on github here: https://github.com/mikehas/moodle/tree/MDL-27764_SECTION_SUMMARIES I am new to the process of contributing upstream, but I am hoping someone has time to do a peer review and give feedback. Mike
          Hide
          mikehas added a comment -

          I just made an update to include a file I missed on the initial upload.

          https://github.com/mikehas/moodle/tree/MDL-27764_SECTION_SUMMARIES

          Show
          mikehas added a comment - I just made an update to include a file I missed on the initial upload. https://github.com/mikehas/moodle/tree/MDL-27764_SECTION_SUMMARIES
          Hide
          mikehas added a comment -

          UI with section summaries option.

          Show
          mikehas added a comment - UI with section summaries option.
          Hide
          mikehas added a comment -

          Here are screenshots of the process.

          Initial import - Select the course to import from:

          Course settings for the import (Note new setting to include section summaries):

          Section and item settings (Checking a section will now include that section's summary and title):

          Confirmation screen:

          I'm hoping to get some feedback, does this look like a reasonable interface? We are going to be running this code this upcoming quarter. Unfortunately, due to the way we provision users – they do not have the ability to add themselves to a course – a full backup and restore will lock them out of their course until the next day; Modifying the import was the preferred option.

          I'm hoping I can get a few people take a look at this and potentially get the code, or some form of it, adopted into moodle for simpler long-term maintenance.

          One current limitation is:

          • If the course you are importing from has more sections than the course you are importing to, then the section names and summary information is not copied to the new course.

          Any ideas or feedback would be helpful. Are others still interested?

          Show
          mikehas added a comment - Here are screenshots of the process. Initial import - Select the course to import from: Course settings for the import (Note new setting to include section summaries): Section and item settings (Checking a section will now include that section's summary and title): Confirmation screen: I'm hoping to get some feedback, does this look like a reasonable interface? We are going to be running this code this upcoming quarter. Unfortunately, due to the way we provision users – they do not have the ability to add themselves to a course – a full backup and restore will lock them out of their course until the next day; Modifying the import was the preferred option. I'm hoping I can get a few people take a look at this and potentially get the code, or some form of it, adopted into moodle for simpler long-term maintenance. One current limitation is: If the course you are importing from has more sections than the course you are importing to, then the section names and summary information is not copied to the new course. Any ideas or feedback would be helpful. Are others still interested?
          Hide
          Kory Prince added a comment -

          Hey Mike.
          Thanks for all the great work. Unfortunately I can't test your patch as I'm on moodle 2.2.
          It'll probably hard to get your patch included unless you write it for the newest release (I could be wrong about that.)

          The interface looks exactly like what I would want, and how most people would think it works.

          The limitation you mentioned would be a big one for teachers trying to share content.
          Here's something you might consider as well.
          Instead of just including section summaries for all sections or none at all,
          you might have it add a checkbox for each section so they could be handled separately. I imagine coding it this way would also get rid of limitation.
          This would allow for importing activities/etc from one section without importing the summary, while importing a summary from another section at the same time.
          Thanks for the great work!
          Kory

          Show
          Kory Prince added a comment - Hey Mike. Thanks for all the great work. Unfortunately I can't test your patch as I'm on moodle 2.2. It'll probably hard to get your patch included unless you write it for the newest release (I could be wrong about that.) The interface looks exactly like what I would want, and how most people would think it works. The limitation you mentioned would be a big one for teachers trying to share content. Here's something you might consider as well. Instead of just including section summaries for all sections or none at all, you might have it add a checkbox for each section so they could be handled separately. I imagine coding it this way would also get rid of limitation. This would allow for importing activities/etc from one section without importing the summary, while importing a summary from another section at the same time. Thanks for the great work! Kory
          Hide
          mikehas added a comment -

          Thanks for the feedback Kory.

          I did look into adding a section summary option under each section, I opt'd not to for two reasons:

          • It cluttered up the screen quite a bit with a new section summary option for each section.
          • It was difficult to write the code for this behavior AND to make it look OK in the GUI ( displaying the option at the activity/block level when it is really a section level setting, if that makes sense). This could be overcome with a bit more time.

          "The limitation you mentioned would be a big one for teachers trying to share content"

          • "If the course you are importing from has more sections than the course you are importing to, then the section names and summary information is not copied to the new course."
          • As a work around it would be possible to create extra sections, then perform the import.
          • I am working on mimicking the behavior of activities. That is to append the summaries to first section if a corresponding section doesn't exist in the new course.

          "Unfortunately I can't test your patch as I'm on moodle 2.2"

          • I'm looking into implementing this in 2.2 and 2.3. If there aren't any conflicts, it should be simple.
          Show
          mikehas added a comment - Thanks for the feedback Kory. I did look into adding a section summary option under each section, I opt'd not to for two reasons: It cluttered up the screen quite a bit with a new section summary option for each section. It was difficult to write the code for this behavior AND to make it look OK in the GUI ( displaying the option at the activity/block level when it is really a section level setting, if that makes sense). This could be overcome with a bit more time. "The limitation you mentioned would be a big one for teachers trying to share content" "If the course you are importing from has more sections than the course you are importing to, then the section names and summary information is not copied to the new course." As a work around it would be possible to create extra sections, then perform the import. I am working on mimicking the behavior of activities. That is to append the summaries to first section if a corresponding section doesn't exist in the new course. "Unfortunately I can't test your patch as I'm on moodle 2.2" I'm looking into implementing this in 2.2 and 2.3. If there aren't any conflicts, it should be simple.
          Hide
          Kory Prince added a comment -

          "It was difficult to write the code for this behavior AND to make it look OK in the GUI ( displaying the option at the activity/block level when it is really a section level setting, if that makes sense). This could be overcome with a bit more time."

          What if you put this checkbox (for whether or not to import the summary) next to the section title. e.g.
          something like
          General □ Include Summary □

          Or is that what you meant?
          Perhaps if it is too cluttered you could use an icon with hovertext explaining?

          "As a work around it would be possible to create extra sections, then perform the import."
          Definitely. Perhaps even the code could create these extra sections if needed?

          "I am working on mimicking the behavior of activities. That is to append the summaries to first section if a corresponding section doesn't exist in the new course."

          Wouldn't it make more sense to create another section and stick everything in it?

          "I'm looking into implementing this in 2.2 and 2.3. If there aren't any conflicts, it should be simple."

          As soon as you do let me know and you'll have your first beta tester

          Kory

          Show
          Kory Prince added a comment - "It was difficult to write the code for this behavior AND to make it look OK in the GUI ( displaying the option at the activity/block level when it is really a section level setting, if that makes sense). This could be overcome with a bit more time." What if you put this checkbox (for whether or not to import the summary) next to the section title. e.g. something like General □ Include Summary □ Or is that what you meant? Perhaps if it is too cluttered you could use an icon with hovertext explaining? "As a work around it would be possible to create extra sections, then perform the import." Definitely. Perhaps even the code could create these extra sections if needed? "I am working on mimicking the behavior of activities. That is to append the summaries to first section if a corresponding section doesn't exist in the new course." Wouldn't it make more sense to create another section and stick everything in it? "I'm looking into implementing this in 2.2 and 2.3. If there aren't any conflicts, it should be simple." As soon as you do let me know and you'll have your first beta tester Kory
          Hide
          mikehas added a comment -

          "It was difficult to write the code for this behavior AND to make it look OK in the GUI ( displaying the option at the activity/block level when it is really a section level setting, if that makes sense). This could be overcome with a bit more time."

          What if you put this checkbox (for whether or not to import the summary) next to the section title. e.g.
          something like
          General □ Include Summary □

          The way moodle2 displays backups settings is very structured. By default, when I added the setting to each section, it displayed directly under the section setting in the same format as the section itself (this was confusing, because it looked like a separate section itself). Modifying the way this displayed would be possible, but would require separate code for display, which may require CSS which is theme dependent for the most part. This was a light-weight solution.

          When displayed as a sub-element like the activities, I wasn't able to make a dependency between the "include section summary" option and the "section included" setting. Another look at this with fresh eyes could produce another solution.

          Or is that what you meant?
          Perhaps if it is too cluttered you could use an icon with hovertext explaining?

          "As a work around it would be possible to create extra sections, then perform the import."
          Definitely. Perhaps even the code could create these extra sections if needed?

          This would be possible, but then there would be a distinct difference from all other import options, (e.g. In this scenario when you import activities no new sections are created.)

          "I am working on mimicking the behavior of activities. That is to append the summaries to first section if a corresponding section doesn't exist in the new course."

          Wouldn't it make more sense to create another section and stick everything in it?

          Again, this would be possible, but it would differ from the way all other import options work.

          "I'm looking into implementing this in 2.2 and 2.3. If there aren't any conflicts, it should be simple."

          As soon as you do let me know and you'll have your first beta tester

          Kory

          Will do, thanks Kory.

          Show
          mikehas added a comment - "It was difficult to write the code for this behavior AND to make it look OK in the GUI ( displaying the option at the activity/block level when it is really a section level setting, if that makes sense). This could be overcome with a bit more time." What if you put this checkbox (for whether or not to import the summary) next to the section title. e.g. something like General □ Include Summary □ The way moodle2 displays backups settings is very structured. By default, when I added the setting to each section, it displayed directly under the section setting in the same format as the section itself (this was confusing, because it looked like a separate section itself). Modifying the way this displayed would be possible, but would require separate code for display, which may require CSS which is theme dependent for the most part. This was a light-weight solution. When displayed as a sub-element like the activities, I wasn't able to make a dependency between the "include section summary" option and the "section included" setting. Another look at this with fresh eyes could produce another solution. Or is that what you meant? Perhaps if it is too cluttered you could use an icon with hovertext explaining? "As a work around it would be possible to create extra sections, then perform the import." Definitely. Perhaps even the code could create these extra sections if needed? This would be possible, but then there would be a distinct difference from all other import options, (e.g. In this scenario when you import activities no new sections are created.) "I am working on mimicking the behavior of activities. That is to append the summaries to first section if a corresponding section doesn't exist in the new course." Wouldn't it make more sense to create another section and stick everything in it? Again, this would be possible, but it would differ from the way all other import options work. "I'm looking into implementing this in 2.2 and 2.3. If there aren't any conflicts, it should be simple." As soon as you do let me know and you'll have your first beta tester Kory Will do, thanks Kory.
          Hide
          mikehas added a comment -

          Section summaries patch for moodle 22.

          Show
          mikehas added a comment - Section summaries patch for moodle 22.
          Hide
          mikehas added a comment - - edited

          Kory,

          Here is the patch for moodle 2.2+ (Build: 20111209)

          MDL-27764_section_summaries_moodle22.patch

          You should be able to apply the patch with something like:

          $git apply "MDL-27764_section_summaries_moodle22.patch"

          Show
          mikehas added a comment - - edited Kory, Here is the patch for moodle 2.2+ (Build: 20111209) MDL-27764_section_summaries_moodle22.patch You should be able to apply the patch with something like: $git apply " MDL-27764 _section_summaries_moodle22.patch"
          Hide
          mikehas added a comment -

          Confirmed affects versions 2.1 and 2.2. Affected version only lists 2.0.3.

          Show
          mikehas added a comment - Confirmed affects versions 2.1 and 2.2. Affected version only lists 2.0.3.
          Hide
          Doug Moody added a comment -

          I noticed this behavior for some time. For large courses, it is VERY tedious to UN-check all the activities or blocks you want to import (from the INCLUDE" section, especially if you only want to import one or two activities.
          A better approach is to have a "Check All" and an "UNCheck All"checkbox at the top of the page that would then allow me to manually pick only the one I want to import, instead of having to uncheck every activity in the course.

          Show
          Doug Moody added a comment - I noticed this behavior for some time. For large courses, it is VERY tedious to UN-check all the activities or blocks you want to import (from the INCLUDE" section, especially if you only want to import one or two activities. A better approach is to have a "Check All" and an "UNCheck All"checkbox at the top of the page that would then allow me to manually pick only the one I want to import, instead of having to uncheck every activity in the course.
          Hide
          mikehas added a comment -

          I agree the uncheck/check all feature would be nice. Note: if you uncheck the section, then it will essentially uncheck all activities and resources for that section during import.

          Show
          mikehas added a comment - I agree the uncheck/check all feature would be nice. Note: if you uncheck the section, then it will essentially uncheck all activities and resources for that section during import.
          Hide
          Sebastian Berm added a comment -

          Confirmed sections summaries patch for 2.1 ( https://github.com/mikehas/moodle/tree/MDL-27764_SECTION_SUMMARIES ) also functions correctly in 2.0.
          (Note; I just applied the diff at the correct lines, actually merging was not a real option).

          Show
          Sebastian Berm added a comment - Confirmed sections summaries patch for 2.1 ( https://github.com/mikehas/moodle/tree/MDL-27764_SECTION_SUMMARIES ) also functions correctly in 2.0. (Note; I just applied the diff at the correct lines, actually merging was not a real option).
          Hide
          mikehas added a comment -

          Good to hear Sebastian! I haven't seen any other recent activity on this. I'm not sure what triaged signifies.

          Show
          mikehas added a comment - Good to hear Sebastian! I haven't seen any other recent activity on this. I'm not sure what triaged signifies.
          Hide
          Eloy Lafuente (stronk7) added a comment -

          Hi,

          Michael just pinged me about this. I'll be on it, re-reading and discussing a bit here along the week (once we complete this week's integration).

          Thanks for all the feedback and sorry for the delay, this was well hidden in my flood of issues.

          In the mean time... just one reflexion...

          I remember myself implementing the logic present in 1.9 ( MDL-8848, pasted by "mikehas" above) into the 2.x restore/import. In fact I can see how it's implemented @ restore_section_structure_step, always setting the section's name and summary if empty @ target course.

          In which cases is this approach failing? Note I've only overviewed the issue comments and the proposed patch. Just want to know the exact situations when the "planned logic" is not working as expected.

          Note that, surely I'm a bit reticent to include new settings if we can provide a settings-free alternative, mainly because the introduction of settings is like a virus and somebody could start arguing that the "include section summaries" should be spread to every section in the course, to decide about it. Or also somebody could argue that there should be 3 alternatives for the setting (ignore, set if empty, set always)... so if we can achieve a good solution without any new setting...

          So, can you confirm the combinations where the current logic (mimicked from 1.9) is failing?

          TIA and ciao, will be back soon.

          Show
          Eloy Lafuente (stronk7) added a comment - Hi, Michael just pinged me about this. I'll be on it, re-reading and discussing a bit here along the week (once we complete this week's integration). Thanks for all the feedback and sorry for the delay, this was well hidden in my flood of issues. In the mean time... just one reflexion... I remember myself implementing the logic present in 1.9 ( MDL-8848 , pasted by "mikehas" above) into the 2.x restore/import. In fact I can see how it's implemented @ restore_section_structure_step, always setting the section's name and summary if empty @ target course. In which cases is this approach failing? Note I've only overviewed the issue comments and the proposed patch. Just want to know the exact situations when the "planned logic" is not working as expected. Note that, surely I'm a bit reticent to include new settings if we can provide a settings-free alternative, mainly because the introduction of settings is like a virus and somebody could start arguing that the "include section summaries" should be spread to every section in the course, to decide about it. Or also somebody could argue that there should be 3 alternatives for the setting (ignore, set if empty, set always)... so if we can achieve a good solution without any new setting... So, can you confirm the combinations where the current logic (mimicked from 1.9) is failing? TIA and ciao, will be back soon.
          Hide
          Martin Schwinzerl added a comment -

          In our case, the minimal example to show the failing logic is the following:

          (tested with moodle 2.2.1 (Build: 20120109) )

          1.) Create course with the following settings:

          • Topics format
          • 10 Topics

          2.) Alter summaries of sections 1 and 2 ->

          moodledb=# SELECT * FROM mdl_course_sections WHERE course = 2;

          id | course | section | name | summary | summaryformat | sequence | visible
          ------------------------------------------------------------------------------------------------------------------------------------+--------
          2 | 2 | 0 | | | 1 | 1 | 1
          3 | 2 | 1 | | <p>Some test</p>\r | 1 | 2 | 1
          : <p><span style="color: #ff0000;">Test Test Test</span></p>\r
          : <p><span style="background-color: #ffff00;">Some other test</span></p>\r
          : <p><img src="@@PLUGINFILE@@/IMG_0185.JPG" height="500" width="375" /></p>
          4 | 2 | 2 | This is a test section | <p>Some test</p>\r | 1 | | 1
          : <p>&</p>
          5 | 2 | 3 | | | 1 | | 1
          6 | 2 | 4 | | | 1 | | 1
          7 | 2 | 5 | | | 1 | | 1
          8 | 2 | 6 | | | 1 | | 1
          9 | 2 | 7 | | | 1 | | 1
          10 | 2 | 8 | | | 1 | | 1
          11 | 2 | 9 | | | 1 | | 1
          12 | 2 | 10 | | | 1 | | 1

          3. Create another empty course, same settings as in 1.) ->

          moodledb=# SELECT * FROM mdl_course_sections WHERE course = 3;

          id | course | section | name | summary | summaryformat | sequence | visible
          ------------------------------------------------+--------
          13 | 3 | 0 | | | 1 | 3 | 1

          4.) Import contents of course with id=2 into course with id=3 ->

          moodledb=# SELECT * FROM mdl_course_sections WHERE course = 3;

          id | course | section | name | summary | summaryformat | sequence | visible
          ------------------------------------------------+--------
          13 | 3 | 0 | | | 1 | 3 | 1
          25 | 3 | 1 | | | 1 | 5 | 1
          26 | 3 | 2 | | | 1 | | 1
          27 | 3 | 3 | | | 1 | | 1
          28 | 3 | 4 | | | 1 | | 1
          29 | 3 | 5 | | | 1 | | 1
          30 | 3 | 6 | | | 1 | | 1
          31 | 3 | 7 | | | 1 | | 1
          32 | 3 | 8 | | | 1 | | 1
          33 | 3 | 9 | | | 1 | | 1
          34 | 3 | 10 | | | 1 | | 1

          Note that the summary for course id = 3 is blank (e.g. the query SELECT * FROM mdl_course_sections WHERE summary = '' AND course = 3 yields the same set of sections)

          Hope this helps, please feel free to ask for more details.

          Best regards & thanks for addressing this issue
          Martin

          Show
          Martin Schwinzerl added a comment - In our case, the minimal example to show the failing logic is the following: (tested with moodle 2.2.1 (Build: 20120109) ) 1.) Create course with the following settings: Topics format 10 Topics 2.) Alter summaries of sections 1 and 2 -> moodledb=# SELECT * FROM mdl_course_sections WHERE course = 2; id | course | section | name | summary | summaryformat | sequence | visible --- ------ ------- ---------------------- ------------------------------------------------------------------------- ------------- -------- + -------- 2 | 2 | 0 | | | 1 | 1 | 1 3 | 2 | 1 | | <p>Some test</p>\r | 1 | 2 | 1 : <p><span style="color: #ff0000;">Test Test Test</span></p>\r : <p><span style="background-color: #ffff00;">Some other test</span></p>\r : <p><img src="@@PLUGINFILE@@/IMG_0185.JPG" height="500" width="375" /></p> 4 | 2 | 2 | This is a test section | <p>Some test</p>\r | 1 | | 1 : <p>&</p> 5 | 2 | 3 | | | 1 | | 1 6 | 2 | 4 | | | 1 | | 1 7 | 2 | 5 | | | 1 | | 1 8 | 2 | 6 | | | 1 | | 1 9 | 2 | 7 | | | 1 | | 1 10 | 2 | 8 | | | 1 | | 1 11 | 2 | 9 | | | 1 | | 1 12 | 2 | 10 | | | 1 | | 1 3. Create another empty course, same settings as in 1.) -> moodledb=# SELECT * FROM mdl_course_sections WHERE course = 3; id | course | section | name | summary | summaryformat | sequence | visible --- ------ ------- ---- ------- ------------- -------- + -------- 13 | 3 | 0 | | | 1 | 3 | 1 4.) Import contents of course with id=2 into course with id=3 -> moodledb=# SELECT * FROM mdl_course_sections WHERE course = 3; id | course | section | name | summary | summaryformat | sequence | visible --- ------ ------- ---- ------- ------------- -------- + -------- 13 | 3 | 0 | | | 1 | 3 | 1 25 | 3 | 1 | | | 1 | 5 | 1 26 | 3 | 2 | | | 1 | | 1 27 | 3 | 3 | | | 1 | | 1 28 | 3 | 4 | | | 1 | | 1 29 | 3 | 5 | | | 1 | | 1 30 | 3 | 6 | | | 1 | | 1 31 | 3 | 7 | | | 1 | | 1 32 | 3 | 8 | | | 1 | | 1 33 | 3 | 9 | | | 1 | | 1 34 | 3 | 10 | | | 1 | | 1 Note that the summary for course id = 3 is blank (e.g. the query SELECT * FROM mdl_course_sections WHERE summary = '' AND course = 3 yields the same set of sections) Hope this helps, please feel free to ask for more details. Best regards & thanks for addressing this issue Martin
          Hide
          Eloy Lafuente (stronk7) added a comment - - edited

          Adding patches for 21_STABLE, 22_STABLE and master.

          They, simply, restitute old Moodle 1.9 behavior, where:

          • Restore always tries to use as much information from sections as possible.
          • Section names and summaries are always restored, but
          • If there is already information in the target section, it's not overwritten.

          So, with the patch, any restore operation (course restore, import, to new or to existing courses, adding or deleting information) will follow the (1.9) behavior explained above.

          It does not use any new setting at all, just applies the rules above.

          Plz, comment/test it and I'll be happy to send this to integration.

          Ciao

          Show
          Eloy Lafuente (stronk7) added a comment - - edited Adding patches for 21_STABLE, 22_STABLE and master. They, simply, restitute old Moodle 1.9 behavior, where: Restore always tries to use as much information from sections as possible. Section names and summaries are always restored, but If there is already information in the target section, it's not overwritten. So, with the patch, any restore operation (course restore, import, to new or to existing courses, adding or deleting information) will follow the (1.9) behavior explained above. It does not use any new setting at all, just applies the rules above. Plz, comment/test it and I'll be happy to send this to integration. Ciao
          Hide
          Chris Follin added a comment -

          Thank you, Eloy. I tested it in 2.1.3 and it works. The only negative thing I noticed is that I ended up with two News forums in the zero section. I tested without the patch and did not end up with two News forums. This is minor but I wanted to mention it.

          Show
          Chris Follin added a comment - Thank you, Eloy. I tested it in 2.1.3 and it works. The only negative thing I noticed is that I ended up with two News forums in the zero section. I tested without the patch and did not end up with two News forums. This is minor but I wanted to mention it.
          Hide
          Eloy Lafuente (stronk7) added a comment -

          Aha, thanks Chris...

          about the duped News forums, I'm 100% sure it's unrelated with the change I did to sections restore... perhaps creating a new issue is the best way about that.

          So I'm sending this to integration... let's see if it lands this week or next one.

          Ciao

          PS: Many thanks to all by your support and patience, specially to "mikehas" !

          Show
          Eloy Lafuente (stronk7) added a comment - Aha, thanks Chris... about the duped News forums, I'm 100% sure it's unrelated with the change I did to sections restore... perhaps creating a new issue is the best way about that. So I'm sending this to integration... let's see if it lands this week or next one. Ciao PS: Many thanks to all by your support and patience, specially to "mikehas" !
          Hide
          Sam Hemelryk added a comment -

          Thanks Eloy - spot on 100% and integrated

          Show
          Sam Hemelryk added a comment - Thanks Eloy - spot on 100% and integrated
          Hide
          Michael de Raadt added a comment -

          Test result: Unsuccessful.

          I was able to generate an error during a restore/import. I was able to isolate the cause. When a source course has a section with a name+summary and I restore+merge/import into a course where the corresponding section has no name (default name checked) but has a summary, the following error is thrown (two or three times).

          Error: mdb->get_record() found more than one record!
          
              line 1335 of \lib\dml\moodle_database.php: call to debugging()
              line 1398 of \lib\dml\moodle_database.php: call to moodle_database->get_record_sql()
              line 156 of \backup\moodle2\restore_qtype_plugin.class.php: call to moodle_database->get_field_sql()
              line 131 of \backup\util\plan\restore_structure_step.class.php: call to restore_qtype_plugin->process_question_answer()
              line 103 of \backup\util\helper\restore_structure_parser_processor.class.php: call to restore_structure_step->process()
              line 125 of \backup\util\xml\parser\processors\grouped_parser_processor.class.php: call to restore_structure_parser_processor->dispatch_chunk()
              line 91 of \backup\util\helper\restore_structure_parser_processor.class.php: call to grouped_parser_processor->postprocess_chunk()
              line 148 of \backup\util\xml\parser\processors\simplified_parser_processor.class.php: call to restore_structure_parser_processor->postprocess_chunk()
              line 92 of \backup\util\xml\parser\processors\progressive_parser_processor.class.php: call to simplified_parser_processor->process_chunk()
              line 169 of \backup\util\xml\parser\progressive_parser.class.php: call to progressive_parser_processor->receive_chunk()
              line 253 of \backup\util\xml\parser\progressive_parser.class.php: call to progressive_parser->publish()
              line ? of unknownfile: call to progressive_parser->end_tag()
              line 158 of \backup\util\xml\parser\progressive_parser.class.php: call to xml_parse()
              line 137 of \backup\util\xml\parser\progressive_parser.class.php: call to progressive_parser->parse()
              line 105 of \backup\util\plan\restore_structure_step.class.php: call to progressive_parser->process()
              line 153 of \backup\util\plan\base_task.class.php: call to restore_structure_step->execute()
              line 148 of \backup\util\plan\base_plan.class.php: call to base_task->execute()
              line 157 of \backup\util\plan\restore_plan.class.php: call to base_plan->execute()
              line 310 of \backup\controller\restore_controller.class.php: call to restore_plan->execute()
              line 147 of \backup\util\ui\restore_ui.class.php: call to restore_controller->execute_plan()
              line 46 of \backup\restore.php: call to restore_ui->execute()
          

          On the page, the following information was given once (I'm not sure if it's pertinent)...

          Debug info: Duplicate entry '3-24' for key 'mdl_gradgrad_useite_uix'
          INSERT INTO mdl_grade_grades (userid,rawgrade,rawgrademax,rawgrademin,rawscaleid,usermodified,finalgrade,hidden,locked,locktime,exported,overridden,excluded,feedback,feedbackformat,information,informationformat,timecreated,timemodified,itemid) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
          [array (
          0 => '3',
          1 => NULL,
          2 => '100.00000',
          3 => '0.00000',
          4 => NULL,
          5 => NULL,
          6 => '64.50000',
          7 => '0',
          8 => '0',
          9 => '0',
          10 => '0',
          11 => '0',
          12 => '0',
          13 => NULL,
          14 => '0',
          15 => NULL,
          16 => '0',
          17 => NULL,
          18 => NULL,
          19 => '24',
          )]
          Stack trace:
          
              line 413 of \lib\dml\moodle_database.php: dml_write_exception thrown
              line 901 of \lib\dml\mysqli_native_moodle_database.php: call to moodle_database->query_end()
              line 943 of \lib\dml\mysqli_native_moodle_database.php: call to mysqli_native_moodle_database->insert_record_raw()
              line 222 of \backup\moodle2\restore_stepslib.php: call to mysqli_native_moodle_database->insert_record()
              line 131 of \backup\util\plan\restore_structure_step.class.php: call to restore_gradebook_structure_step->process_grade_grade()
              line 103 of \backup\util\helper\restore_structure_parser_processor.class.php: call to restore_structure_step->process()
              line 125 of \backup\util\xml\parser\processors\grouped_parser_processor.class.php: call to restore_structure_parser_processor->dispatch_chunk()
              line 91 of \backup\util\helper\restore_structure_parser_processor.class.php: call to grouped_parser_processor->postprocess_chunk()
              line 148 of \backup\util\xml\parser\processors\simplified_parser_processor.class.php: call to restore_structure_parser_processor->postprocess_chunk()
              line 92 of \backup\util\xml\parser\processors\progressive_parser_processor.class.php: call to simplified_parser_processor->process_chunk()
              line 169 of \backup\util\xml\parser\progressive_parser.class.php: call to progressive_parser_processor->receive_chunk()
              line 253 of \backup\util\xml\parser\progressive_parser.class.php: call to progressive_parser->publish()
              line ? of unknownfile: call to progressive_parser->end_tag()
              line 158 of \backup\util\xml\parser\progressive_parser.class.php: call to xml_parse()
              line 137 of \backup\util\xml\parser\progressive_parser.class.php: call to progressive_parser->parse()
              line 105 of \backup\util\plan\restore_structure_step.class.php: call to progressive_parser->process()
              line 153 of \backup\util\plan\base_task.class.php: call to restore_structure_step->execute()
              line 148 of \backup\util\plan\base_plan.class.php: call to base_task->execute()
              line 157 of \backup\util\plan\restore_plan.class.php: call to base_plan->execute()
              line 310 of \backup\controller\restore_controller.class.php: call to restore_plan->execute()
              line 147 of \backup\util\ui\restore_ui.class.php: call to restore_controller->execute_plan()
              line 46 of \backup\restore.php: call to restore_ui->execute()
          

          The restore is working properly still, despite the error.

          Show
          Michael de Raadt added a comment - Test result: Unsuccessful. I was able to generate an error during a restore/import. I was able to isolate the cause. When a source course has a section with a name+summary and I restore+merge/import into a course where the corresponding section has no name (default name checked) but has a summary, the following error is thrown (two or three times). Error: mdb->get_record() found more than one record! line 1335 of \lib\dml\moodle_database.php: call to debugging() line 1398 of \lib\dml\moodle_database.php: call to moodle_database->get_record_sql() line 156 of \backup\moodle2\restore_qtype_plugin.class.php: call to moodle_database->get_field_sql() line 131 of \backup\util\plan\restore_structure_step.class.php: call to restore_qtype_plugin->process_question_answer() line 103 of \backup\util\helper\restore_structure_parser_processor.class.php: call to restore_structure_step->process() line 125 of \backup\util\xml\parser\processors\grouped_parser_processor.class.php: call to restore_structure_parser_processor->dispatch_chunk() line 91 of \backup\util\helper\restore_structure_parser_processor.class.php: call to grouped_parser_processor->postprocess_chunk() line 148 of \backup\util\xml\parser\processors\simplified_parser_processor.class.php: call to restore_structure_parser_processor->postprocess_chunk() line 92 of \backup\util\xml\parser\processors\progressive_parser_processor.class.php: call to simplified_parser_processor->process_chunk() line 169 of \backup\util\xml\parser\progressive_parser.class.php: call to progressive_parser_processor->receive_chunk() line 253 of \backup\util\xml\parser\progressive_parser.class.php: call to progressive_parser->publish() line ? of unknownfile: call to progressive_parser->end_tag() line 158 of \backup\util\xml\parser\progressive_parser.class.php: call to xml_parse() line 137 of \backup\util\xml\parser\progressive_parser.class.php: call to progressive_parser->parse() line 105 of \backup\util\plan\restore_structure_step.class.php: call to progressive_parser->process() line 153 of \backup\util\plan\base_task.class.php: call to restore_structure_step->execute() line 148 of \backup\util\plan\base_plan.class.php: call to base_task->execute() line 157 of \backup\util\plan\restore_plan.class.php: call to base_plan->execute() line 310 of \backup\controller\restore_controller.class.php: call to restore_plan->execute() line 147 of \backup\util\ui\restore_ui.class.php: call to restore_controller->execute_plan() line 46 of \backup\restore.php: call to restore_ui->execute() On the page, the following information was given once (I'm not sure if it's pertinent)... Debug info: Duplicate entry '3-24' for key 'mdl_gradgrad_useite_uix' INSERT INTO mdl_grade_grades (userid,rawgrade,rawgrademax,rawgrademin,rawscaleid,usermodified,finalgrade,hidden,locked,locktime,exported,overridden,excluded,feedback,feedbackformat,information,informationformat,timecreated,timemodified,itemid) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) [array ( 0 => '3', 1 => NULL, 2 => '100.00000', 3 => '0.00000', 4 => NULL, 5 => NULL, 6 => '64.50000', 7 => '0', 8 => '0', 9 => '0', 10 => '0', 11 => '0', 12 => '0', 13 => NULL, 14 => '0', 15 => NULL, 16 => '0', 17 => NULL, 18 => NULL, 19 => '24', )] Stack trace: line 413 of \lib\dml\moodle_database.php: dml_write_exception thrown line 901 of \lib\dml\mysqli_native_moodle_database.php: call to moodle_database->query_end() line 943 of \lib\dml\mysqli_native_moodle_database.php: call to mysqli_native_moodle_database->insert_record_raw() line 222 of \backup\moodle2\restore_stepslib.php: call to mysqli_native_moodle_database->insert_record() line 131 of \backup\util\plan\restore_structure_step.class.php: call to restore_gradebook_structure_step->process_grade_grade() line 103 of \backup\util\helper\restore_structure_parser_processor.class.php: call to restore_structure_step->process() line 125 of \backup\util\xml\parser\processors\grouped_parser_processor.class.php: call to restore_structure_parser_processor->dispatch_chunk() line 91 of \backup\util\helper\restore_structure_parser_processor.class.php: call to grouped_parser_processor->postprocess_chunk() line 148 of \backup\util\xml\parser\processors\simplified_parser_processor.class.php: call to restore_structure_parser_processor->postprocess_chunk() line 92 of \backup\util\xml\parser\processors\progressive_parser_processor.class.php: call to simplified_parser_processor->process_chunk() line 169 of \backup\util\xml\parser\progressive_parser.class.php: call to progressive_parser_processor->receive_chunk() line 253 of \backup\util\xml\parser\progressive_parser.class.php: call to progressive_parser->publish() line ? of unknownfile: call to progressive_parser->end_tag() line 158 of \backup\util\xml\parser\progressive_parser.class.php: call to xml_parse() line 137 of \backup\util\xml\parser\progressive_parser.class.php: call to progressive_parser->parse() line 105 of \backup\util\plan\restore_structure_step.class.php: call to progressive_parser->process() line 153 of \backup\util\plan\base_task.class.php: call to restore_structure_step->execute() line 148 of \backup\util\plan\base_plan.class.php: call to base_task->execute() line 157 of \backup\util\plan\restore_plan.class.php: call to base_plan->execute() line 310 of \backup\controller\restore_controller.class.php: call to restore_plan->execute() line 147 of \backup\util\ui\restore_ui.class.php: call to restore_controller->execute_plan() line 46 of \backup\restore.php: call to restore_ui->execute() The restore is working properly still, despite the error.
          Hide
          Eloy Lafuente (stronk7) added a comment -

          Hi Michael,

          I think the first notices are one "old" issue, happening when one question has 2 answers with the same text. It has been reported multiple times in the past (MDL-28539 for example) and I'm 99.99% sure it is unrelated with the change in sections restore performed here. We also have the (somehow) opposite issue (0 answers found, like MDL-26442). We need to find an alternative way to handle those repeated/missing answers, just I don't know how, yet.

          And the second error is also an existing one, see MDL-31337 (and it sounds to me that there are more reports similar), about gradebook restore duplicating some grades already existing. Again, I think this is unrelated with the sections fix implemented here. Seems to be something happening when the same course is being restore multiple times onto the same target course (initial thought), but cannot tell much more about it for now.

          So, IMO, we can safely consider this as passed if the (sections-centered) testing worked as expected.

          Also, given that you've in your hands one backup file able to reproduce the 2 issues above, it would be great to have access to it, if it's not private. So we can try to fix those bugs using such backup as reference.

          Ciao

          Show
          Eloy Lafuente (stronk7) added a comment - Hi Michael, I think the first notices are one "old" issue, happening when one question has 2 answers with the same text. It has been reported multiple times in the past ( MDL-28539 for example) and I'm 99.99% sure it is unrelated with the change in sections restore performed here. We also have the (somehow) opposite issue (0 answers found, like MDL-26442 ). We need to find an alternative way to handle those repeated/missing answers, just I don't know how, yet. And the second error is also an existing one, see MDL-31337 (and it sounds to me that there are more reports similar), about gradebook restore duplicating some grades already existing. Again, I think this is unrelated with the sections fix implemented here. Seems to be something happening when the same course is being restore multiple times onto the same target course (initial thought), but cannot tell much more about it for now. So, IMO, we can safely consider this as passed if the (sections-centered) testing worked as expected. Also, given that you've in your hands one backup file able to reproduce the 2 issues above, it would be great to have access to it, if it's not private. So we can try to fix those bugs using such backup as reference. Ciao
          Hide
          Eloy Lafuente (stronk7) added a comment -

          reseting to "testing" status.

          Show
          Eloy Lafuente (stronk7) added a comment - reseting to "testing" status.
          Hide
          Michael de Raadt added a comment -

          OK, it looks like a backup without any activities was still carrying over questions and question categories, and this was the source of the problem.

          After repeating this with fresh course that did not have any questions/categories, the result is a big .

          Show
          Michael de Raadt added a comment - OK, it looks like a backup without any activities was still carrying over questions and question categories, and this was the source of the problem. After repeating this with fresh course that did not have any questions/categories, the result is a big .
          Hide
          Eloy Lafuente (stronk7) added a comment -

          Your changes are now upstream and will be included in the next minor released scheduled for March 13th (next Monday!).

          icao_reverse('arreis olik rebemevon afla letoh ognat');
          

          Closing, ciao

          Show
          Eloy Lafuente (stronk7) added a comment - Your changes are now upstream and will be included in the next minor released scheduled for March 13th (next Monday!). icao_reverse('arreis olik rebemevon afla letoh ognat'); Closing, ciao

            People

            • Votes:
              47 Vote for this issue
              Watchers:
              30 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: