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
namespace mod_forum\output;
18
 
19
use moodle_url;
20
use renderer_base;
21
use url_select;
22
use renderable;
23
use templatable;
24
 
25
/**
26
 * Renders the subscribers page for this activity.
27
 *
28
 * @package   mod_forum
29
 * @copyright 2021 Sujith Haridasan <sujith@moodle.com>
30
 * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
31
 */
32
class subscription_actionbar implements renderable, templatable {
33
    /** @var int course id */
34
    private $id;
35
 
36
    /** @var moodle_url */
37
    private $currenturl;
38
 
39
    /** @var \stdClass  */
40
    private $forum;
41
 
42
    /** @var int */
43
    private $edit;
44
 
45
    /**
46
     * subscription_actionbar constructor.
47
     *
48
     * @param int $id The forum id.
49
     * @param moodle_url $currenturl Current URL.
50
     * @param \stdClass $forum The forum object.
51
     * @param int $edit This argument decides to show view/manage subscribers view.
52
     */
53
    public function __construct(int $id, moodle_url $currenturl, \stdClass $forum, int $edit) {
54
        $this->id = $id;
55
        $this->currenturl = $currenturl;
56
        $this->forum = $forum;
57
        $this->edit = $edit;
58
    }
59
 
60
    /**
61
     * Create url select menu for subscription option
62
     *
63
     * @return url_select|null the url_select object
64
     */
65
    private function create_subscription_menu(): ?url_select {
66
        // When user is on manage subscription, we don't have to show the subscription selector.
67
        if ($this->edit === 1 && !\mod_forum\subscriptions::is_forcesubscribed($this->forum)) {
68
            return  null;
69
        }
70
 
71
        $sesskey = sesskey();
72
        $modeset = \mod_forum\subscriptions::get_subscription_mode($this->forum);
73
        $optionallink = new moodle_url('/mod/forum/subscribe.php',
74
            ['id' => $this->id, 'mode' => FORUM_CHOOSESUBSCRIBE, 'sesskey' => $sesskey, 'edit' => $this->edit]);
75
        $forcedlink = new moodle_url('/mod/forum/subscribe.php',
76
            ['id' => $this->id, 'mode' => FORUM_FORCESUBSCRIBE, 'sesskey' => $sesskey, 'edit' => $this->edit]);
77
        $autolink = new moodle_url('/mod/forum/subscribe.php',
78
            ['id' => $this->id, 'mode' => FORUM_INITIALSUBSCRIBE, 'sesskey' => $sesskey, 'edit' => $this->edit]);
79
        $disabledlink = new moodle_url('/mod/forum/subscribe.php',
80
            ['id' => $this->id, 'mode' => FORUM_DISALLOWSUBSCRIBE, 'sesskey' => $sesskey, 'edit' => $this->edit]);
81
 
82
        $menu = [
83
            $optionallink->out(false) => get_string('subscriptionoptional', 'forum'),
84
            $forcedlink->out(false) => get_string('subscriptionforced', 'forum'),
85
            $autolink->out(false) => get_string('subscriptionauto', 'forum'),
86
            $disabledlink->out(false) => get_string('subscriptiondisabled', 'forum'),
87
        ];
88
 
89
        switch ($modeset) {
90
            case FORUM_CHOOSESUBSCRIBE:
91
                $set = get_string('subscriptionoptional', 'forum');
92
                break;
93
            case FORUM_FORCESUBSCRIBE:
94
                $set = get_string('subscriptionforced', 'forum');
95
                break;
96
            case FORUM_INITIALSUBSCRIBE:
97
                $set = get_string('subscriptionauto', 'forum');
98
                break;
99
            case FORUM_DISALLOWSUBSCRIBE:
100
                $set = get_string('subscriptiondisabled', 'forum');
101
                break;
102
            default:
103
                throw new \moodle_exception(get_string('invalidforcesubscribe', 'forum'));
104
        }
105
 
106
        $menu = array_filter($menu, function($key) use ($set) {
107
            if ($key !== $set) {
108
                return true;
109
            }
110
        });
111
        $urlselect = new url_select($menu, $this->currenturl, ['' => $set], 'selectsubscriptionoptions');
112
        $urlselect->set_label(get_string('subscriptionmode', 'mod_forum'), ['class' => 'mr-1']);
113
        $urlselect->set_help_icon('subscriptionmode', 'mod_forum');
114
        $urlselect->class .= ' float-right';
115
        return $urlselect;
116
    }
117
 
118
    /**
119
     * Create view and manage subscribers select menu.
120
     *
121
     * @return url_select|null get url_select object.
122
     */
123
    private function create_view_manage_menu(): ?url_select {
124
        // If forced subscription is used then no need to show the view.
125
        if (\mod_forum\subscriptions::is_forcesubscribed($this->forum)) {
126
            return null;
127
        }
128
 
129
        $viewlink = new moodle_url('/mod/forum/subscribers.php', ['id' => $this->id, 'edit' => 'off']);
130
        $managelink = new moodle_url('/mod/forum/subscribers.php', ['id' => $this->id, 'edit' => 'on']);
131
 
132
        $menu = [
133
            $viewlink->out(false) => get_string('forum:viewsubscribers', 'forum'),
134
            $managelink->out(false) => get_string('managesubscriptionson', 'forum'),
135
        ];
136
 
137
        if ($this->edit === 0) {
138
            $this->currenturl = $viewlink;
139
        } else {
140
            $this->currenturl = $managelink;
141
        }
142
        $urlselect = new url_select($menu, $this->currenturl->out(false), null, 'selectviewandmanagesubscribers');
143
        $urlselect->set_label(get_string('subscribers', 'forum'), ['class' => 'accesshide']);
144
        return $urlselect;
145
    }
146
 
147
    /**
148
     * Data for the template.
149
     *
150
     * @param renderer_base $output The render_base object.
151
     * @return array data for template
152
     */
153
    public function export_for_template(renderer_base $output): array {
154
        $data = [];
155
        $subscribeoptionselect = $this->create_subscription_menu();
156
        $viewmanageselect = $this->create_view_manage_menu();
157
 
158
        if ($subscribeoptionselect) {
159
            $data ['subscriptionoptions'] = $subscribeoptionselect->export_for_template($output);
160
        }
161
        if ($viewmanageselect) {
162
            $data['viewandmanageselect'] = $viewmanageselect->export_for_template($output);
163
        }
164
        return $data;
165
    }
166
}