Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
<?php
2
// This file is part of Moodle - http://moodle.org/
3
//
4
// Moodle is free software: you can redistribute it and/or modify
5
// it under the terms of the GNU General Public License as published by
6
// the Free Software Foundation, either version 3 of the License, or
7
// (at your option) any later version.
8
//
9
// Moodle is distributed in the hope that it will be useful,
10
// but WITHOUT ANY WARRANTY; without even the implied warranty of
11
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
// GNU General Public License for more details.
13
//
14
// You should have received a copy of the GNU General Public License
15
// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
16
 
17
/**
18
 * Contains the default activity name inplace editable.
19
 *
20
 * @package   core_courseformat
21
 * @copyright 2020 Ferran Recio <ferran@moodle.com>
22
 * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23
 */
24
 
25
namespace core_courseformat\output\local\content\cm;
26
 
27
use cm_info;
28
use core\output\named_templatable;
29
use core_courseformat\base as course_format;
30
use core_courseformat\output\local\courseformat_named_templatable;
31
use renderable;
32
use section_info;
33
use stdClass;
34
 
35
/**
36
 * Base class to render a course module inplace editable header.
37
 *
38
 * @package   core_courseformat
39
 * @copyright 2020 Ferran Recio <ferran@moodle.com>
40
 * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
41
 */
42
class cmname implements named_templatable, renderable {
43
 
44
    use courseformat_named_templatable;
45
 
46
    /** @var course_format the course format */
47
    protected $format;
48
 
49
    /** @var section_info the section object */
50
    private $section;
51
 
52
    /** @var cm_info the course module instance */
53
    protected $mod;
54
 
55
    /** @var array optional display options */
56
    protected $displayoptions;
57
 
58
    /** @var string the activity title output class name */
59
    protected $titleclass;
60
 
61
    /** @var string the activity icon output class name */
62
    protected $iconclass;
63
 
64
    /**
65
     * Constructor.
66
     *
67
     * @param course_format $format the course format
68
     * @param section_info $section the section info
69
     * @param cm_info $mod the course module ionfo
70
     * @param null $unused This parameter has been deprecated since 4.1 and should not be used anymore.
71
     * @param array $displayoptions optional extra display options
72
     */
73
    public function __construct(
74
        course_format $format,
75
        section_info $section,
76
        cm_info $mod,
77
        ?bool $unused = null,
78
        array $displayoptions = []
79
    ) {
80
        if ($unused !== null) {
81
            debugging('Deprecated argument passed to ' . __FUNCTION__, DEBUG_DEVELOPER);
82
        }
83
 
84
        $this->format = $format;
85
        $this->section = $section;
86
        $this->mod = $mod;
87
        $this->displayoptions = $displayoptions;
88
 
89
        // Get the necessary classes.
90
        $this->titleclass = $format->get_output_classname('content\\cm\\title');
91
        $this->iconclass = $format->get_output_classname('content\\cm\\cmicon');
92
    }
93
 
94
    /**
95
     * Export this data so it can be used as the context for a mustache template.
96
     *
97
     * @param \renderer_base $output typically, the renderer that's calling this function
98
     * @return stdClass data context for a mustache template
99
     */
100
    public function export_for_template(\renderer_base $output): array {
101
        $mod = $this->mod;
102
        $displayoptions = $this->displayoptions;
103
 
104
        if (!$this->has_name()) {
105
            // Nothing to be displayed to the user.
106
            return [];
107
        }
108
 
109
        $data = [
110
            'url' => $mod->url,
111
            'modname' => $mod->modname,
112
            'textclasses' => $displayoptions['textclasses'] ?? '',
113
            'activityicon' => $this->get_icon_data($output),
114
            'activityname' => $this->get_title_data($output),
115
        ];
116
 
117
        return $data;
118
    }
119
 
120
    /**
121
     * Get the title data.
122
     *
123
     * @param \renderer_base $output typically, the renderer that's calling this function
124
     * @return array data context for a mustache template
125
     */
126
    protected function get_title_data(\renderer_base $output): array {
127
        $title = new $this->titleclass(
128
            $this->format,
129
            $this->section,
130
            $this->mod,
131
            $this->displayoptions
132
        );
133
        return (array) $title->export_for_template($output);
134
    }
135
 
136
    /**
137
     * Get the icon data.
138
     *
139
     * @param \renderer_base $output typically, the renderer that's calling this function
140
     * @return array data context for a mustache template
141
     */
142
    protected function get_icon_data(\renderer_base $output): array {
143
        $icon = new $this->iconclass(
144
            $this->format,
145
            $this->mod,
146
        );
147
        return (array) $icon->export_for_template($output);
148
    }
149
 
150
    /**
151
     * Return if the activity has a visible name.
152
     *
153
     * @return bool if the title is visible.
154
     */
155
    public function has_name(): bool {
156
        return $this->mod->is_visible_on_course_page() && $this->mod->url;
157
    }
158
}