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

PHP notice and warning when editing a course with course tags disabled.

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Open
    • Priority: Minor
    • Resolution: Unresolved
    • Affects Version/s: 3.8, 3.8.1
    • Fix Version/s: None
    • Component/s: Course, Tags
    • Labels:

      Description

      If tags are enabled site wide (site administration -> advanced features), but are disabled for courses (site administration -> appearance -> manage tags), and course settings are saved, you get a warning and notice because $data ->tags is undefined. 

       

      Steps to reproduce: 

      1. Turn on debugging
      2. Go to Site administration -> Advanced features 
      3. Make sure tags functionality is enabled
      4. Go to Site administration -> Appearance -> Manage tags 
      5. In the tags area, find the Courses row and disable it
      6. Create a course and go to it
      7. Edit setting
      8. Save and display

      Output: 

       

      Notice: Undefined property: stdClass::$tags in /var/www/html/course/lib.php on line 2570
       
      Warning: array_values() expects parameter 1 to be array, null given in /var/www/html/course/lib.php on line 2570
       
      Notice: Undefined property: stdClass::$tags in /var/www/html/course/lib.php on line 2571

       

       

      Expected: 

      Not see a notice or warning when saving a course. 

       

      Related issue: 

      https://tracker.moodle.org/browse/MDL-66446

      Looks like this was reported and partially fixed before. That fix added a check to the if statement in the code on line 2568 in course/lib.php for the site wide tags setting, but we are still missing a solution for the other way to disable course tags (setting under site administration -> appearance -> manage tags). 

       

      Potential solution: 

      Replace the check for tags being enabled on line 2568 of course/lib.php  

      } else if ($field == 'tags' && !empty($CFG->usetags)) {

      with

      } else if ($field == 'tags' && isset($data->tags)) {

      or potentially add this check to the current line if the other part is still needed for something. Or maybe add something else so that it includes a check for the manage tags setting. 

      The reasoning behind this suggestion though is that further below in the same function (update_course), the part that actually updates the tags in the course is wrapped in a check for isset($data->tags). So it would make sense that the code checking if it should add tags to $updatedfields would also use the same criteria as the part that actually updates them. 

       

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                Unassigned
                Reporter:
                radzisze Anthony Radziszewski
                Participants:
                Component watchers:
                Amaia Anabitarte, Carlos Escobedo, Ferran Recio, Sara Arjona (@sarjona), Víctor Déniz Falcón, Amaia Anabitarte, Carlos Escobedo, Ferran Recio, Sara Arjona (@sarjona), Víctor Déniz Falcón
              • Votes:
                3 Vote for this issue
                Watchers:
                3 Start watching this issue

                Dates

                • Created:
                  Updated: