Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
<?php// This file is part of Moodle - http://moodle.org///// Moodle is free software: you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation, either version 3 of the License, or// (at your option) any later version.//// Moodle is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.//// You should have received a copy of the GNU General Public License// along with Moodle. If not, see <http://www.gnu.org/licenses/>./*** Contains the default activities summary (used for singlesection format).** @package core_courseformat* @copyright 2020 Ferran Recio <ferran@moodle.com>* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later*/namespace core_courseformat\output\local\content\section;use completion_info;use core\output\named_templatable;use core_courseformat\base as course_format;use core_courseformat\output\local\courseformat_named_templatable;use renderable;use section_info;use stdClass;/*** Base class to render a course section summary.** @package core_courseformat* @copyright 2020 Ferran Recio <ferran@moodle.com>* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later*/class cmsummary implements named_templatable, renderable {use courseformat_named_templatable;/** @var course_format the course format class */protected $format;/** @var section_info the course section class */protected $section;/*** Constructor.** @param course_format $format the course format* @param section_info $section the section info*/public function __construct(course_format $format, section_info $section) {$this->format = $format;$this->section = $section;}/*** Export this data so it can be used as the context for a mustache template.** @param renderer_base $output typically, the renderer that's calling this function* @return array data context for a mustache template*/public function export_for_template(\renderer_base $output): stdClass {list($mods, $complete, $total, $showcompletion) = $this->calculate_section_stats();$totalactivities = array_reduce($mods, fn($carry, $item) => $carry + ($item["count"] ?? 0), 0);$data = (object)['showcompletion' => $showcompletion,'total' => $total,'complete' => $complete,'mods' => array_values($mods),'totalactivities' => $totalactivities,];$data->modprogress = get_string('progresstotal', 'completion', $data);return $data;}/*** Calculate the activities count of the current section.** @return array with [[count by activity type], completed activities, total of activitites]*/private function calculate_section_stats(): array {$format = $this->format;$course = $format->get_course();$section = $this->section;$modinfo = $format->get_modinfo();$completioninfo = new completion_info($course);$mods = [];$total = 0;$complete = 0;$cmids = $modinfo->sections[$section->section] ?? [];$cancomplete = isloggedin() && !isguestuser();$showcompletion = false;foreach ($cmids as $cmid) {$thismod = $modinfo->cms[$cmid];if ($thismod->uservisible) {if (isset($mods[$thismod->modname])) {$mods[$thismod->modname]['name'] = $thismod->modplural;$mods[$thismod->modname]['count']++;} else {$mods[$thismod->modname]['name'] = $thismod->modfullname;$mods[$thismod->modname]['count'] = 1;}if ($cancomplete && $completioninfo->is_enabled($thismod) != COMPLETION_TRACKING_NONE) {$showcompletion = true;$total++;$completiondata = $completioninfo->get_data($thismod, true);if ($completiondata->completionstate == COMPLETION_COMPLETE ||$completiondata->completionstate == COMPLETION_COMPLETE_PASS) {$complete++;}}}}return [$mods, $complete, $total, $showcompletion];}}