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
 * Prints information about the reengagement to the user.
19
 *
20
 * @package    mod_reengagement
21
 * @author     Peter Bulmer <peter.bulmer@catlayst.net.nz>
22
 * @copyright  2016 Catalyst IT {@link http://www.catalyst.net.nz}
23
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
24
 */
25
 
26
use core_table\local\filter\filter;
27
use core_table\local\filter\integer_filter;
28
 
29
require_once(dirname(dirname(dirname(__FILE__))) . '/config.php');
30
require_once(dirname(__FILE__) . '/lib.php');
31
 
32
define('DEFAULT_PAGE_SIZE', 20);
33
define('SHOW_ALL_PAGE_SIZE', 5000);
34
 
35
$id = optional_param('id', 0, PARAM_INT); // Course_module ID.
36
$a = optional_param('a', 0, PARAM_INT);  // Reengagement instance ID.
37
$page = optional_param('page', 0, PARAM_INT); // Which page to show.
38
$perpage = optional_param('perpage', DEFAULT_PAGE_SIZE, PARAM_INT); // How many per page.
39
$selectall = optional_param('selectall', false, PARAM_BOOL); // When rendering checkboxes against users mark them all checked.
40
 
41
$params = array();
42
 
43
if ($id) {
44
    $params['id'] = $id;
45
} else {
46
    $params['a'] = $a;
47
}
48
 
49
$PAGE->set_url('/mod/reengagement/view.php', $params);
50
 
51
if ($id) {
52
    $cm = get_coursemodule_from_id('reengagement', $id, 0, false, MUST_EXIST);
53
    $course = $DB->get_record('course', array('id' => $cm->course), '*', MUST_EXIST);
54
    $reengagement = $DB->get_record('reengagement', array('id' => $cm->instance), '*', MUST_EXIST);
55
 
56
} else if ($a) {
57
    $reengagement = $DB->get_record('reengagement', array('id' => $a), '*', MUST_EXIST);
58
    $course = $DB->get_record('course', array('id' => $reengagement->course), '*', MUST_EXIST);
59
    $cm = get_coursemodule_from_instance('reengagement', $reengagement->id, $course->id, false, MUST_EXIST);
60
} else {
61
    throw new moodle_exception('errornoid', 'mod_reengagement');
62
}
63
 
64
require_login($course, true, $cm);
65
 
66
// Make sure completion and restriction is enabled.
67
if (empty($CFG->enablecompletion) || empty($CFG->enableavailability)) {
68
    throw new moodle_exception('mustenablecompletionavailability', 'mod_reengagement');
69
}
70
 
71
$context = context_module::instance($cm->id);
72
 
73
$event = \mod_reengagement\event\course_module_viewed::create(array(
74
    'objectid' => $reengagement->id,
75
    'context' => $context,
76
));
77
$event->add_record_snapshot('course', $course);
78
$event->add_record_snapshot('reengagement', $reengagement);
79
$event->trigger();
80
 
81
// Print the page header.
82
$strreengagements = get_string('modulenameplural', 'reengagement');
83
$strreengagement = get_string('modulename', 'reengagement');
84
 
85
$PAGE->set_title(format_string($reengagement->name));
86
$PAGE->set_heading(format_string($course->fullname));
87
 
88
echo $OUTPUT->header();
89
// Print the main part of the page.
90
 
91
$PAGE->set_context($context);
92
 
93
$canstart = has_capability('mod/reengagement:startreengagement', $context, null, false);
94
$canedit = has_capability('mod/reengagement:editreengagementduration', $context);
95
$bulkoperations = has_capability('mod/reengagement:bulkactions', $context);
96
 
97
if (empty($canstart) && empty($canedit)) {
98
    throw new moodle_exception('errorreengagementnotvalid', 'mod_reengagement');
99
}
100
 
101
if ($canstart) {
102
    // Check reengagement record for this user.
103
    echo reengagement_checkstart($course, $cm, $reengagement);
104
}
105
 
106
if ($canedit) {
107
    $task = \core\task\manager::get_scheduled_task('\mod_reengagement\task\cron_task');
108
    $lastrun = $task->get_last_run_time();
109
    if ($lastrun < time() - 28800) { // Check if cron run in last 8hrs.
110
        echo $OUTPUT->notification(get_string('cronwarning', 'reengagement'));
111
    }
112
 
113
    $filterset = new \mod_reengagement\table\reengagement_participants_filterset();
114
    // We pretend the courseid is the cmid, because the core Moodle participants filter doesn't allow adding new filter types.
115
    $filterset->add_filter(new integer_filter('courseid', filter::JOINTYPE_DEFAULT, [(int) $cm->id]));
116
    $participanttable = new \mod_reengagement\table\reengagement_participants("reengagement-index-participants-{$cm->id}");
117
 
118
    echo '<div class="userlist">';
119
 
120
    // Should use this variable so that we don't break stuff every time a variable is added or changed.
121
    $baseurl = new moodle_url('/mod/reengagement/view.php', array(
122
        'contextid' => $context->id,
123
        'id' => $cm->id,
124
        'perpage' => $perpage));
125
 
126
    $participanttable->set_filterset($filterset);
127
 
128
    ob_start();
129
    $participanttable->out($perpage, true);
130
    $participanttablehtml = ob_get_contents();
131
    ob_end_clean();
132
 
133
    echo html_writer::start_tag('form', [
134
        'action' => 'bulkchange.php',
135
        'method' => 'post',
136
        'id' => 'participantsform',
137
        'data-course-id' => $cm->id,
138
        'data-table-unique-id' => $participanttable->uniqueid,
139
        'data-table-default-per-page' => ($perpage < DEFAULT_PAGE_SIZE) ? $perpage : DEFAULT_PAGE_SIZE,
140
    ]);
141
 
142
    echo '<div>';
143
    echo '<input type="hidden" name="id" value="' . $cm->id . '" />';
144
    echo '<input type="hidden" name="sesskey" value="' . sesskey() . '" />';
145
    echo '<input type="hidden" name="returnto" value="' . s($PAGE->url->out(false)) . '" />';
146
 
147
    echo html_writer::tag(
148
        'p',
149
        get_string('countparticipantsfound', 'core_user', $participanttable->totalrows),
150
        [
151
            'data-region' => 'participant-count',
152
        ]
153
    );
154
 
155
    echo $participanttablehtml;
156
    $perpagevisible = '';
157
    $perpagestring = '';
158
    $perpagesize = '';
159
    $perpageurl = clone($baseurl);
160
    $perpageurl->remove_params('perpage');
161
    if ($perpage == SHOW_ALL_PAGE_SIZE && $participanttable->totalrows > DEFAULT_PAGE_SIZE) {
162
        $perpageurl->param('perpage', $participanttable->totalrows);
163
        $perpagesize = SHOW_ALL_PAGE_SIZE;
164
        $perpagevisible = true;
165
        $perpagestring = get_string('showperpage', '', DEFAULT_PAGE_SIZE);
166
    } else if ($participanttable->get_page_size() < $participanttable->totalrows) {
167
        $perpageurl->param('perpage', SHOW_ALL_PAGE_SIZE);
168
        $perpagesize = SHOW_ALL_PAGE_SIZE;
169
        $perpagevisible = true;
170
        $perpagestring = get_string('showall', '', $participanttable->totalrows);
171
    }
172
 
173
    $perpageclasses = '';
174
    if (!$perpagevisible) {
175
        $perpageclasses = 'hidden';
176
    }
177
 
178
    echo $OUTPUT->container(html_writer::link(
179
        $perpageurl,
180
        $perpagestring,
181
        [
182
            'data-action' => 'showcount',
183
            'data-target-page-size' => $perpagesize,
184
            'class' => $perpageclasses,
185
        ]
186
    ), [], 'showall');
187
 
188
    $options = new stdClass();
189
    $options->courseid = $cm->id;
190
    $options->stateHelpIcon = $OUTPUT->help_icon('publishstate', 'notes');
191
 
192
    if ($bulkoperations) {
193
        echo '<br /><div class="buttons"><div class="form-inline">';
194
 
195
        if ($participanttable->get_page_size() < $participanttable->totalrows) {
196
            // Select all users, refresh table showing all users and mark them all selected.
197
            $label = get_string('selectalluserswithcount', 'moodle', $participanttable->totalrows);
198
            echo html_writer::empty_tag('input', [
199
                'type' => 'button',
200
                'id' => 'checkall',
201
                'class' => 'btn btn-secondary',
202
                'value' => $label,
203
                'data-target-page-size' => $participanttable->totalrows,
204
            ]);
205
        }
206
        echo html_writer::end_tag('div');
207
        $displaylist = array();
208
        $displaylist['#messageselect'] = get_string('messageselectadd');
209
 
210
        $pluginoptions = [];
211
        $params = ['operation' => 'resetbyfirstcourseaccess'];
212
        $url = new moodle_url('bulkchange.php', $params);
213
        list ($periodcount, $period) = reengagement_get_readable_duration($reengagement->duration, true);
214
        $duration = $periodcount . " " . $period;
215
        $pluginoptions['resetbyfirstaccess'] = get_string('resetbyfirstaccess', 'mod_reengagement', $duration);
216
        $pluginoptions['resetbyenrolment'] = get_string('resetbyenrolment', 'mod_reengagement', $duration);
217
        $pluginoptions['resetbyspecificdate'] = get_string('resetbyspecificdate', 'mod_reengagement');
218
 
219
        $name = get_string('resetcompletion', 'mod_reengagement');
220
        $displaylist[] = [$name => $pluginoptions];
221
 
222
        echo $OUTPUT->help_icon('withselectedusers', 'mod_reengagement');
223
        echo html_writer::tag('label', get_string("withselectedusers"), array('for' => 'formactionid'));
224
        echo html_writer::select($displaylist, 'formaction', '', array('' => 'choosedots'), array('id' => 'formactionid'));
225
 
226
        echo '<noscript style="display:inline">';
227
        echo '<div><input type="submit" value="' . get_string('ok') . '" /></div>';
228
        echo '</noscript>';
229
        echo '</div></div>';
230
        $options->noteStateNames = note_get_state_names();
231
    }
232
    echo '</form>';
233
    $PAGE->requires->js_call_amd('core_user/participants', 'init', [$options]);
234
 
235
    echo '</div>';  // Userlist.
236
 
237
}
238
 
239
// Finish the page.
240
echo $OUTPUT->footer($course);