Merge branch 'MDL-68177-master_course_renderer_split_methods' of https://github.com...
authorSara Arjona <sara@moodle.com>
Mon, 25 May 2020 15:11:03 +0000 (17:11 +0200)
committerSara Arjona <sara@moodle.com>
Mon, 25 May 2020 15:11:03 +0000 (17:11 +0200)
1  2 
course/renderer.php

diff --combined course/renderer.php
@@@ -158,11 -158,7 +158,11 @@@ class core_course_renderer extends plug
              return '';
          }
  
 -        $this->page->requires->js_call_amd('core_course/activitychooser', 'init', [$courseid]);
 +        // Build an object of config settings that we can then hook into in the Activity Chooser.
 +        $chooserconfig = (object) [
 +            'tabmode' => get_config('core', 'activitychoosertabmode'),
 +        ];
 +        $this->page->requires->js_call_amd('core_course/activitychooser', 'init', [$courseid, $chooserconfig]);
  
          return '';
      }
              $ajaxcontrol .= html_writer::start_tag('div', array('class' => 'section-modchooser'));
              $icon = $this->output->pix_icon('t/add', '');
              $span = html_writer::tag('span', $straddeither, array('class' => 'section-modchooser-text'));
 -            $ajaxcontrol .= html_writer::tag('button', $icon . $span, array(
 +            $ajaxcontrol .= html_writer::tag('button', $icon . $span, [
                      'class' => 'section-modchooser-link btn btn-link',
                      'data-action' => 'open-chooser',
                      'data-sectionid' => $section,
 -                )
 +                ]
              );
              $ajaxcontrol .= html_writer::end_tag('div');
              $ajaxcontrol .= html_writer::end_tag('div');
              $output .= course_get_cm_move($mod, $sectionreturn);
          }
  
 -        $output .= html_writer::start_tag('div', array('class' => 'mod-indent-outer'));
 +        $output .= html_writer::start_tag('div', array('class' => 'mod-indent-outer w-100'));
  
          // This div is used to indent the content.
          $output .= html_writer::div('', $indentclasses);
          return $content;
      }
  
+     /**
+      * Returns HTML to display course name.
+      *
+      * @param coursecat_helper $chelper
+      * @param core_course_list_element $course
+      * @return string
+      */
+     protected function course_name(coursecat_helper $chelper, core_course_list_element $course): string {
+         $content = '';
+         if ($chelper->get_show_courses() >= self::COURSECAT_SHOW_COURSES_EXPANDED) {
+             $nametag = 'h3';
+         } else {
+             $nametag = 'div';
+         }
+         $coursename = $chelper->get_course_formatted_name($course);
+         $coursenamelink = html_writer::link(new moodle_url('/course/view.php', ['id' => $course->id]),
+             $coursename, ['class' => $course->visible ? '' : 'dimmed']);
+         $content .= html_writer::tag($nametag, $coursenamelink, ['class' => 'coursename']);
+         // If we display course in collapsed form but the course has summary or course contacts, display the link to the info page.
+         $content .= html_writer::start_tag('div', ['class' => 'moreinfo']);
+         if ($chelper->get_show_courses() < self::COURSECAT_SHOW_COURSES_EXPANDED) {
+             if ($course->has_summary() || $course->has_course_contacts() || $course->has_course_overviewfiles()
+                 || $course->has_custom_fields()) {
+                 $url = new moodle_url('/course/info.php', ['id' => $course->id]);
+                 $image = $this->output->pix_icon('i/info', $this->strings->summary);
+                 $content .= html_writer::link($url, $image, ['title' => $this->strings->summary]);
+                 // Make sure JS file to expand course content is included.
+                 $this->coursecat_include_js();
+             }
+         }
+         $content .= html_writer::end_tag('div');
+         return $content;
+     }
+     /**
+      * Returns HTML to display course enrolment icons.
+      *
+      * @param core_course_list_element $course
+      * @return string
+      */
+     protected function course_enrolment_icons(core_course_list_element $course): string {
+         $content = '';
+         if ($icons = enrol_get_course_info_icons($course)) {
+             $content .= html_writer::start_tag('div', ['class' => 'enrolmenticons']);
+             foreach ($icons as $icon) {
+                 $content .= $this->render($icon);
+             }
+             $content .= html_writer::end_tag('div');
+         }
+         return $content;
+     }
      /**
       * Displays one course in the list of courses.
       *
          }
          $content = '';
          $classes = trim('coursebox clearfix '. $additionalclasses);
-         if ($chelper->get_show_courses() >= self::COURSECAT_SHOW_COURSES_EXPANDED) {
-             $nametag = 'h3';
-         } else {
+         if ($chelper->get_show_courses() < self::COURSECAT_SHOW_COURSES_EXPANDED) {
              $classes .= ' collapsed';
-             $nametag = 'div';
          }
  
          // .coursebox
          ));
  
          $content .= html_writer::start_tag('div', array('class' => 'info'));
-         // course name
-         $coursename = $chelper->get_course_formatted_name($course);
-         $coursenamelink = html_writer::link(new moodle_url('/course/view.php', array('id' => $course->id)),
-                                             $coursename, array('class' => $course->visible ? '' : 'dimmed'));
-         $content .= html_writer::tag($nametag, $coursenamelink, array('class' => 'coursename'));
-         // If we display course in collapsed form but the course has summary or course contacts, display the link to the info page.
-         $content .= html_writer::start_tag('div', array('class' => 'moreinfo'));
-         if ($chelper->get_show_courses() < self::COURSECAT_SHOW_COURSES_EXPANDED) {
-             if ($course->has_summary() || $course->has_course_contacts() || $course->has_course_overviewfiles()
-                     || $course->has_custom_fields()) {
-                 $url = new moodle_url('/course/info.php', array('id' => $course->id));
-                 $image = $this->output->pix_icon('i/info', $this->strings->summary);
-                 $content .= html_writer::link($url, $image, array('title' => $this->strings->summary));
-                 // Make sure JS file to expand course content is included.
-                 $this->coursecat_include_js();
-             }
-         }
-         $content .= html_writer::end_tag('div'); // .moreinfo
-         // print enrolmenticons
-         if ($icons = enrol_get_course_info_icons($course)) {
-             $content .= html_writer::start_tag('div', array('class' => 'enrolmenticons'));
-             foreach ($icons as $pix_icon) {
-                 $content .= $this->render($pix_icon);
-             }
-             $content .= html_writer::end_tag('div'); // .enrolmenticons
-         }
-         $content .= html_writer::end_tag('div'); // .info
+         $content .= $this->course_name($chelper, $course);
+         $content .= $this->course_enrolment_icons($course);
+         $content .= html_writer::end_tag('div');
  
          $content .= html_writer::start_tag('div', array('class' => 'content'));
          $content .= $this->coursecat_coursebox_content($chelper, $course);
-         $content .= html_writer::end_tag('div'); // .content
+         $content .= html_writer::end_tag('div');
  
          $content .= html_writer::end_tag('div'); // .coursebox
          return $content;
      }
  
      /**
-      * Returns HTML to display course content (summary, course contacts and optionally category name)
-      *
-      * This method is called from coursecat_coursebox() and may be re-used in AJAX
+      * Returns HTML to display course summary.
       *
-      * @param coursecat_helper $chelper various display options
-      * @param stdClass|core_course_list_element $course
+      * @param coursecat_helper $chelper
+      * @param core_course_list_element $course
       * @return string
       */
-     protected function coursecat_coursebox_content(coursecat_helper $chelper, $course) {
-         global $CFG;
-         if ($chelper->get_show_courses() < self::COURSECAT_SHOW_COURSES_EXPANDED) {
-             return '';
-         }
-         if ($course instanceof stdClass) {
-             $course = new core_course_list_element($course);
-         }
+     protected function course_summary(coursecat_helper $chelper, core_course_list_element $course): string {
          $content = '';
-         // display course summary
          if ($course->has_summary()) {
-             $content .= html_writer::start_tag('div', array('class' => 'summary'));
+             $content .= html_writer::start_tag('div', ['class' => 'summary']);
              $content .= $chelper->get_course_formatted_summary($course,
-                     array('overflowdiv' => true, 'noclean' => true, 'para' => false));
-             $content .= html_writer::end_tag('div'); // .summary
+                 array('overflowdiv' => true, 'noclean' => true, 'para' => false));
+             $content .= html_writer::end_tag('div');
          }
+         return $content;
+     }
+     /**
+      * Returns HTML to display course contacts.
+      *
+      * @param core_course_list_element $course
+      * @return string
+      */
+     protected function course_contacts(core_course_list_element $course) {
+         $content = '';
+         if ($course->has_course_contacts()) {
+             $content .= html_writer::start_tag('ul', ['class' => 'teachers']);
+             foreach ($course->get_course_contacts() as $coursecontact) {
+                 $rolenames = array_map(function ($role) {
+                     return $role->displayname;
+                 }, $coursecontact['roles']);
+                 $name = implode(", ", $rolenames).': '.
+                     html_writer::link(new moodle_url('/user/view.php',
+                         ['id' => $coursecontact['user']->id, 'course' => SITEID]),
+                         $coursecontact['username']);
+                 $content .= html_writer::tag('li', $name);
+             }
+             $content .= html_writer::end_tag('ul');
+         }
+         return $content;
+     }
+     /**
+      * Returns HTML to display course overview files.
+      *
+      * @param core_course_list_element $course
+      * @return string
+      */
+     protected function course_overview_files(core_course_list_element $course): string {
+         global $CFG;
  
-         // display course overview files
          $contentimages = $contentfiles = '';
          foreach ($course->get_course_overviewfiles() as $file) {
              $isimage = $file->is_valid_image();
-             $url = file_encode_url("$CFG->wwwroot/pluginfile.php",
-                     '/'. $file->get_contextid(). '/'. $file->get_component(). '/'.
-                     $file->get_filearea(). $file->get_filepath(). $file->get_filename(), !$isimage);
+             $url = moodle_url::make_file_url("$CFG->wwwroot/pluginfile.php",
+                 '/' . $file->get_contextid() . '/' . $file->get_component() . '/' .
+                 $file->get_filearea() . $file->get_filepath() . $file->get_filename(), !$isimage);
              if ($isimage) {
                  $contentimages .= html_writer::tag('div',
-                         html_writer::empty_tag('img', array('src' => $url)),
-                         array('class' => 'courseimage'));
+                     html_writer::empty_tag('img', ['src' => $url]),
+                     ['class' => 'courseimage']);
              } else {
                  $image = $this->output->pix_icon(file_file_icon($file, 24), $file->get_filename(), 'moodle');
-                 $filename = html_writer::tag('span', $image, array('class' => 'fp-icon')).
-                         html_writer::tag('span', $file->get_filename(), array('class' => 'fp-filename'));
+                 $filename = html_writer::tag('span', $image, ['class' => 'fp-icon']).
+                     html_writer::tag('span', $file->get_filename(), ['class' => 'fp-filename']);
                  $contentfiles .= html_writer::tag('span',
-                         html_writer::link($url, $filename),
-                         array('class' => 'coursefile fp-filename-icon'));
-             }
-         }
-         $content .= $contentimages. $contentfiles;
-         // Display course contacts. See core_course_list_element::get_course_contacts().
-         if ($course->has_course_contacts()) {
-             $content .= html_writer::start_tag('ul', array('class' => 'teachers'));
-             foreach ($course->get_course_contacts() as $coursecontact) {
-                 $rolenames = array_map(function ($role) {
-                     return $role->displayname;
-                 }, $coursecontact['roles']);
-                 $name = implode(", ", $rolenames).': '.
-                         html_writer::link(new moodle_url('/user/view.php',
-                                 array('id' => $coursecontact['user']->id, 'course' => SITEID)),
-                             $coursecontact['username']);
-                 $content .= html_writer::tag('li', $name);
+                     html_writer::link($url, $filename),
+                     ['class' => 'coursefile fp-filename-icon']);
              }
-             $content .= html_writer::end_tag('ul'); // .teachers
          }
+         return $contentimages . $contentfiles;
+     }
  
-         // display course category if necessary (for example in search results)
+     /**
+      * Returns HTML to display course category name.
+      *
+      * @param coursecat_helper $chelper
+      * @param core_course_list_element $course
+      * @return string
+      */
+     protected function course_category_name(coursecat_helper $chelper, core_course_list_element $course): string {
+         $content = '';
+         // Display course category if necessary (for example in search results).
          if ($chelper->get_show_courses() == self::COURSECAT_SHOW_COURSES_EXPANDED_WITH_CAT) {
              if ($cat = core_course_category::get($course->category, IGNORE_MISSING)) {
-                 $content .= html_writer::start_tag('div', array('class' => 'coursecat'));
+                 $content .= html_writer::start_tag('div', ['class' => 'coursecat']);
                  $content .= get_string('category').': '.
-                         html_writer::link(new moodle_url('/course/index.php', array('categoryid' => $cat->id)),
-                                 $cat->get_formatted_name(), array('class' => $cat->visible ? '' : 'dimmed'));
-                 $content .= html_writer::end_tag('div'); // .coursecat
+                     html_writer::link(new moodle_url('/course/index.php', ['categoryid' => $cat->id]),
+                         $cat->get_formatted_name(), ['class' => $cat->visible ? '' : 'dimmed']);
+                 $content .= html_writer::end_tag('div');
              }
          }
+         return $content;
+     }
  
-         // Display custom fields.
+     /**
+      * Returns HTML to display course custom fields.
+      *
+      * @param core_course_list_element $course
+      * @return string
+      */
+     protected function course_custom_fields(core_course_list_element $course): string {
+         $content = '';
          if ($course->has_custom_fields()) {
              $handler = core_course\customfield\course_handler::create();
              $customfields = $handler->display_custom_fields_data($course->get_custom_fields());
              $content .= \html_writer::tag('div', $customfields, ['class' => 'customfields-container']);
          }
+         return $content;
+     }
  
+     /**
+      * Returns HTML to display course content (summary, course contacts and optionally category name)
+      *
+      * This method is called from coursecat_coursebox() and may be re-used in AJAX
+      *
+      * @param coursecat_helper $chelper various display options
+      * @param stdClass|core_course_list_element $course
+      * @return string
+      */
+     protected function coursecat_coursebox_content(coursecat_helper $chelper, $course) {
+         if ($chelper->get_show_courses() < self::COURSECAT_SHOW_COURSES_EXPANDED) {
+             return '';
+         }
+         if ($course instanceof stdClass) {
+             $course = new core_course_list_element($course);
+         }
+         $content = $this->course_summary($chelper, $course);
+         $content .= $this->course_overview_files($course);
+         $content .= $this->course_contacts($course);
+         $content .= $this->course_category_name($chelper, $course);
+         $content .= $this->course_custom_fields($course);
          return $content;
      }