Uploaded image for project: 'Moodle'
  1. Moodle
  2. MDL-74358

Error in availability code when importing activity from old course using PHP8.0

    XMLWordPrintable

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 3.11.6, 3.11.7, 4.0.1
    • 3.11.8, 4.0.2
    • Other
    • MOODLE_311_STABLE, MOODLE_400_STABLE
    • MOODLE_311_STABLE, MOODLE_400_STABLE
    • MDL-74358_311
    • MDL-74358_400
    • Hide

      Requirements

      • Web server running php 8.0.x
      • Repeat the before/after steps below with 311, 400 and master.

      Before the patch

      • Restore (admin -> courses -> restore course) the attached course backup into a new course. Don't change any setting.
      • Verify that you get the error "Exception - array_values(): Argument #1 ($array) must be of type array, null given" (in the web page or in the web server logs).
      • Go to the "Site home" (front page). Click in the jus restored course (surely its name will be "Course A - MDL-74358 copy 1"
      • Verify that you can see the "A page with restrictions" resource and it shows 2 restrictions.
      • Verify that the first restriction is "It's on or after 12 June 2021, 11 pm".
      • Verify that the second restriction is "You belong to a group in (Missing grouping)"

      After the patch

      • Restore (admin -> courses -> restore course) the attached course backup into a new course. Don't change any setting.
      • Verify that the process ends ok, without any error. The "The course was restored successfully" on green background should be shown.
      • Go to the "Site home" (front page). Click in the jus restored course (surely its name will be "Course A - MDL-74358 copy 2"
      • Verify that you can see the "A page with restrictions" resource and it shows 1 restriction only.
      • Verify that the first restriction is "It's on or after 12 June 2021, 11 pm".
      • Verify that there isn't any "grouping" second restriction.
      Show
      Requirements Web server running php 8.0.x Repeat the before/after steps below with 311, 400 and master. Before the patch Restore (admin -> courses -> restore course) the attached course backup into a new course. Don't change any setting. Verify that you get the error " Exception - array_values(): Argument #1 ($array) must be of type array, null given " (in the web page or in the web server logs). Go to the "Site home" (front page). Click in the jus restored course (surely its name will be "Course A - MDL-74358 copy 1" Verify that you can see the "A page with restrictions" resource and it shows 2 restrictions. Verify that the first restriction is "It's on or after 12 June 2021, 11 pm". Verify that the second restriction is "You belong to a group in (Missing grouping)" After the patch Restore (admin -> courses -> restore course) the attached course backup into a new course. Don't change any setting. Verify that the process ends ok, without any error. The "The course was restored successfully" on green background should be shown. Go to the "Site home" (front page). Click in the jus restored course (surely its name will be "Course A - MDL-74358 copy 2" Verify that you can see the "A page with restrictions" resource and it shows 1 restriction only. Verify that the first restriction is "It's on or after 12 June 2021, 11 pm". Verify that there isn't any "grouping" second restriction.

    Description

      On build 20220315:

      Attempt to import an activity from one course to another.

      Traceback:

      [30-Mar-2022 11:02:58 Pacific/Auckland] Default exception handler: Exception - array_values(): Argument #1 ($array) must be of type array, null given Debug:
      Error code: generalexceptionmessage

      • line 687 of /availability/classes/tree.php: TypeError thrown
      • line 687 of /availability/classes/tree.php: call to array_values()
      • line 323 of /availability/classes/info.php: call to core_availability\tree->update_after_restore()
      • line 926 of /backup/moodle2/restore_stepslib.php: call to core_availability\info->update_after_restore()
      • line 34 of /backup/util/plan/restore_execution_step.class.php: call to restore_update_availability->define_execution()
      • line 181 of /backup/util/plan/base_task.class.php: call to restore_execution_step->execute()
      • line 191 of /backup/util/plan/base_plan.class.php: call to base_task->execute()
      • line 168 of /backup/util/plan/restore_plan.class.php: call to base_plan->execute()
      • line 394 of /backup/controller/restore_controller.class.php: call to restore_plan->execute()
      • line 193 of /backup/import.php: call to restore_controller->execute_plan()

      It seems this must be a bug rather than "just" duff data, as core_availability\info->update_after_restore() has just created a new tree, which uses decode_availability, which is supposed to either discard invalid data or throw an exception.

      Attempting to replicate the problem on a dev instance, backing up and then restoring the course did complete successfully. Restoring the same backup onto the original prod instance did not succeed.

      Attachments

        1. backup-MDL-74358-nu.mbz
          5 kB
        2. MDL-74358_after_1.png
          MDL-74358_after_1.png
          73 kB
        3. MDL-74358_after_2.png
          MDL-74358_after_2.png
          73 kB
        4. MDL-74358_before_1.png
          MDL-74358_before_1.png
          134 kB
        5. MDL-74358_before_2.png
          MDL-74358_before_2.png
          77 kB

        Issue Links

          Activity

            People

              stronk7 Eloy Lafuente (stronk7)
              nwpotago Nick Phillips
              Sam Marshall Sam Marshall
              Jun Pataleta Jun Pataleta
              Angelia Dela Cruz Angelia Dela Cruz
              Adrian Greeve, David Woloszyn, Huong Nguyen, Jake Dallimore, Michael Hawkins, Stevani Andolo
              Votes:
              0 Vote for this issue
              Watchers:
              7 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:
                11/Jul/22

                Time Tracking

                  Estimated:
                  Original Estimate - 0 minutes
                  0m
                  Remaining:
                  Remaining Estimate - 0 minutes
                  0m
                  Logged:
                  Time Spent - 3 hours, 20 minutes
                  3h 20m