Completed
Push — master ( 883a01...166724 )
by Jesus
02:02
created

view.php ➔ bigbluebuttonbn_verify_passwords()   A

Complexity

Conditions 3
Paths 2

Size

Total Lines 9
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 6
nc 2
nop 1
dl 0
loc 9
rs 9.6666
c 0
b 0
f 0
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
 * View a BigBlueButton room.
19
 *
20
 * @package   mod_bigbluebuttonbn
21
 * @copyright 2010-2017 Blindside Networks Inc
22
 * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v2 or later
23
 * @author    Jesus Federico  (jesus [at] blindsidenetworks [dt] com)
24
 * @author    Fred Dixon  (ffdixon [at] blindsidenetworks [dt] com)
25
 */
26
27
require_once(dirname(dirname(dirname(__FILE__))).'/config.php');
28
require_once(dirname(__FILE__).'/locallib.php');
29
30
$id = required_param('id', PARAM_INT);
31
$bn = optional_param('n', 0, PARAM_INT);
32
$group = optional_param('group', 0, PARAM_INT);
33
34
$viewinstance = bigbluebuttonbn_views_validator($id, $bn);
35
if (!$viewinstance) {
36
    print_error(get_string('view_error_url_missing_parameters', 'bigbluebuttonbn'));
37
}
38
39
$cm = $viewinstance['cm'];
40
$course = $viewinstance['course'];
41
$bigbluebuttonbn = $viewinstance['bigbluebuttonbn'];
42
43
require_login($course, true, $cm);
44
45
$context = context_module::instance($cm->id);
46
47
bigbluebuttonbn_event_log(BIGBLUEBUTTON_EVENT_ACTIVITY_VIEWED, $bigbluebuttonbn, $cm);
48
49
// Additional info related to the course.
50
$bbbsession['course'] = $course;
51
$bbbsession['coursename'] = $course->fullname;
52
$bbbsession['cm'] = $cm;
53
// Hot-fix: Only for v2017101004, to be removed in the next release if db upgrade is added.
54
bigbluebuttonbn_verify_passwords($bigbluebuttonbn);
55
$bbbsession['bigbluebuttonbn'] = $bigbluebuttonbn;
56
bigbluebuttonbn_view_bbbsession_set($context, $bbbsession);
57
58
// Validates if the BigBlueButton server is working.
59
$serverversion = bigbluebuttonbn_get_server_version();
60
if (is_null($serverversion)) {
61
    if ($bbbsession['administrator']) {
62
        print_error('view_error_unable_join', 'bigbluebuttonbn',
63
            $CFG->wwwroot.'/admin/settings.php?section=modsettingbigbluebuttonbn');
64
        exit;
65
    }
66
67
    if ($bbbsession['moderator']) {
68
        print_error('view_error_unable_join_teacher', 'bigbluebuttonbn',
69
            $CFG->wwwroot.'/course/view.php?id='.$bigbluebuttonbn->course);
70
        exit;
71
    }
72
73
    print_error('view_error_unable_join_student', 'bigbluebuttonbn',
74
        $CFG->wwwroot.'/course/view.php?id='.$bigbluebuttonbn->course);
75
    exit;
76
}
77
$bbbsession['serverversion'] = (string) $serverversion;
78
79
// Mark viewed by user (if required).
80
$completion = new completion_info($course);
81
$completion->set_module_viewed($cm);
82
83
// Print the page header.
84
$PAGE->set_context($context);
85
$PAGE->set_url($CFG->wwwroot.'/mod/bigbluebuttonbn/view.php', array('id' => $cm->id));
86
$PAGE->set_title(format_string($bigbluebuttonbn->name));
87
$PAGE->set_cacheable(false);
88
$PAGE->set_heading($course->fullname);
89
$PAGE->set_pagelayout('incourse');
90
91
// Validate if the user is in a role allowed to join.
92
if (!has_capability('moodle/category:manage', $context) && !has_capability('mod/bigbluebuttonbn:join', $context)) {
93
    echo $OUTPUT->header();
94
    if (isguestuser()) {
95
        echo $OUTPUT->confirm('<p>'.get_string('view_noguests', 'bigbluebuttonbn').'</p>'.get_string('liketologin'),
96
            get_login_url(), $CFG->wwwroot.'/course/view.php?id='.$course->id);
97
    } else {
98
        echo $OUTPUT->confirm('<p>'.get_string('view_nojoin', 'bigbluebuttonbn').'</p>'.get_string('liketologin'),
99
            get_login_url(), $CFG->wwwroot.'/course/view.php?id='.$course->id);
100
    }
101
    echo $OUTPUT->footer();
102
    exit;
103
}
104
105
// Operation URLs.
106
$bbbsession['bigbluebuttonbnURL'] = $CFG->wwwroot . '/mod/bigbluebuttonbn/view.php?id=' . $bbbsession['cm']->id;
107
$bbbsession['logoutURL'] = $CFG->wwwroot . '/mod/bigbluebuttonbn/bbb_view.php?action=logout&id='.$id .
108
    '&bn=' . $bbbsession['bigbluebuttonbn']->id;
109
$bbbsession['recordingReadyURL'] = $CFG->wwwroot . '/mod/bigbluebuttonbn/bbb_broker.php?action=recording_' .
110
    'ready&bigbluebuttonbn=' . $bbbsession['bigbluebuttonbn']->id;
111
$bbbsession['meetingEventsURL'] = $CFG->wwwroot . '/mod/bigbluebuttonbn/bbb_broker.php?action=meeting' .
112
    '_events&bigbluebuttonbn=' . $bbbsession['bigbluebuttonbn']->id;
113
$bbbsession['joinURL'] = $CFG->wwwroot . '/mod/bigbluebuttonbn/bbb_view.php?action=join&id=' . $id .
114
    '&bn=' . $bbbsession['bigbluebuttonbn']->id;
115
116
// Output starts.
117
echo $OUTPUT->header();
118
119
bigbluebuttonbn_view_groups($bbbsession);
120
121
bigbluebuttonbn_view_render($bbbsession, bigbluebuttonbn_view_get_activity_status($bbbsession));
122
123
// Output finishes.
124
echo $OUTPUT->footer();
125
126
// Shows version as a comment.
127
echo '<!-- '.$bbbsession['originTag'].' -->'."\n";
128
129
// Initialize session variable used across views.
130
$SESSION->bigbluebuttonbn_bbbsession = $bbbsession;
131
132
function bigbluebuttonbn_view_bbbsession_set($context, &$bbbsession) {
133
    global $CFG, $USER;
134
135
    // User data.
136
    $bbbsession['username'] = fullname($USER);
137
    $bbbsession['userID'] = $USER->id;
138
    $bbbsession['roles'] = bigbluebuttonbn_view_bbbsession_roles($context, $USER->id);
139
140
    // User roles.
141
    $bbbsession['administrator'] = is_siteadmin($bbbsession['userID']);
142
    $participantlist = bigbluebuttonbn_get_participant_list($bbbsession['bigbluebuttonbn'], $context);
143
    $bbbsession['moderator'] = bigbluebuttonbn_is_moderator(
144
        $context, json_encode($participantlist), $bbbsession['userID'], $bbbsession['roles']);
145
    $bbbsession['managerecordings'] = ($bbbsession['administrator']
146
        || has_capability('mod/bigbluebuttonbn:managerecordings', $context));
147
    $bbbsession['importrecordings'] = ($bbbsession['managerecordings']);
148
149
    // Server data.
150
    $bbbsession['modPW'] = $bbbsession['bigbluebuttonbn']->moderatorpass;
151
    $bbbsession['viewerPW'] = $bbbsession['bigbluebuttonbn']->viewerpass;
152
153
    // Database info related to the activity.
154
    $bbbsession['meetingid'] = $bbbsession['bigbluebuttonbn']->meetingid.'-'.$bbbsession['course']->id.'-'.
155
        $bbbsession['bigbluebuttonbn']->id;
156
    $bbbsession['meetingname'] = $bbbsession['bigbluebuttonbn']->name;
157
    $bbbsession['meetingdescription'] = $bbbsession['bigbluebuttonbn']->intro;
158
159
    $bbbsession['userlimit'] = intval((int)\mod_bigbluebuttonbn\locallib\config::get('userlimit_default'));
160
    if ((boolean)\mod_bigbluebuttonbn\locallib\config::get('userlimit_editable')) {
161
        $bbbsession['userlimit'] = intval($bbbsession['bigbluebuttonbn']->userlimit);
162
    }
163
    $bbbsession['voicebridge'] = $bbbsession['bigbluebuttonbn']->voicebridge;
164
    if ($bbbsession['bigbluebuttonbn']->voicebridge > 0) {
165
        $bbbsession['voicebridge'] = 70000 + $bbbsession['bigbluebuttonbn']->voicebridge;
166
    }
167
    $bbbsession['wait'] = $bbbsession['bigbluebuttonbn']->wait;
168
    $bbbsession['record'] = $bbbsession['bigbluebuttonbn']->record;
169
170
    $bbbsession['welcome'] = $bbbsession['bigbluebuttonbn']->welcome;
171
    if (!isset($bbbsession['welcome']) || $bbbsession['welcome'] == '') {
172
        $bbbsession['welcome'] = get_string('mod_form_field_welcome_default', 'bigbluebuttonbn');
173
    }
174
    if ($bbbsession['bigbluebuttonbn']->record) {
175
        $bbbsession['welcome'] .= '<br><br>'.get_string('bbbrecordwarning', 'bigbluebuttonbn');
176
    }
177
178
    $bbbsession['openingtime'] = $bbbsession['bigbluebuttonbn']->openingtime;
179
    $bbbsession['closingtime'] = $bbbsession['bigbluebuttonbn']->closingtime;
180
181
    // Additional info related to the course.
182
    $bbbsession['context'] = $context;
183
184
    // Metadata (origin).
185
    $bbbsession['origin'] = 'Moodle';
186
    $bbbsession['originVersion'] = $CFG->release;
187
    $parsedurl = parse_url($CFG->wwwroot);
188
    $bbbsession['originServerName'] = $parsedurl['host'];
189
    $bbbsession['originServerUrl'] = $CFG->wwwroot;
190
    $bbbsession['originServerCommonName'] = '';
191
    $bbbsession['originTag'] = 'moodle-mod_bigbluebuttonbn ('.get_config('mod_bigbluebuttonbn', 'version').')';
192
}
193
194
function bigbluebuttonbn_view_bbbsession_roles($context, $userid) {
195
    if (isguestuser()) {
196
        return bigbluebuttonbn_get_guest_role();
197
    }
198
    return bigbluebuttonbn_get_user_roles($context, $userid);
199
}
200
201
function bigbluebuttonbn_view_get_activity_status(&$bbbsession) {
202
    $now = time();
203
    if (!empty($bbbsession['bigbluebuttonbn']->openingtime) && $now < $bbbsession['bigbluebuttonbn']->openingtime) {
204
        // The activity has not been opened.
205
        return 'not_started';
206
    }
207
208
    if (!empty($bbbsession['bigbluebuttonbn']->closingtime) && $now > $bbbsession['bigbluebuttonbn']->closingtime) {
209
        // The activity has been closed.
210
        $bbbsession['presentation'] = bigbluebuttonbn_get_presentation_array(
211
            $bbbsession['context'], $bbbsession['bigbluebuttonbn']->presentation);
212
        return 'ended';
213
    }
214
215
    // The activity is open.
216
    $bbbsession['presentation'] = bigbluebuttonbn_get_presentation_array(
217
        $bbbsession['context'], $bbbsession['bigbluebuttonbn']->presentation, $bbbsession['bigbluebuttonbn']->id);
218
    return 'open';
219
}
220
221
/*
222
There are no groups,
223
*/
224
function bigbluebuttonbn_view_groups(&$bbbsession) {
225
    global $CFG;
226
227
    // Find out current group mode.
228
    $groupmode = groups_get_activity_groupmode($bbbsession['cm']);
229
    if ($groupmode == NOGROUPS) {
230
        // No groups mode.
231
        return;
232
    }
233
234
    // Separate or visible group mode.
235
    $groups = groups_get_all_groups($bbbsession['course']->id);
236
    if (empty($groups)) {
237
        // No groups in this course.
238
        bigbluebuttonbn_view_message_box($bbbsession, get_string('view_groups_nogroups_warning', 'bigbluebuttonbn'), 'info', true);
239
        return;
240
    }
241
242
    if ($groupmode == SEPARATEGROUPS) {
243
        $groups = groups_get_activity_allowed_groups($bbbsession['cm']);
244
    }
245
246
    $bbbsession['group'] = groups_get_activity_group($bbbsession['cm'], true);
247
    $groupname = get_string('allparticipants');
248
    if ($bbbsession['group'] != 0) {
249
        $groupname = groups_get_group_name($bbbsession['group']);
250
    }
251
252
    // Assign group default values.
253
    $bbbsession['meetingid'] = $bbbsession['bigbluebuttonbn']->meetingid.'-'.$bbbsession['course']->id.'-'.
254
        $bbbsession['bigbluebuttonbn']->id.'['.$bbbsession['group'].']';
255
    $bbbsession['meetingname'] = $bbbsession['bigbluebuttonbn']->name.' ('.$groupname.')';
256
257
    if (count($groups) == 0) {
258
        // Only the All participants group exists.
259
        bigbluebuttonbn_view_message_box($bbbsession,
260
            get_string('view_groups_notenrolled_warning', 'bigbluebuttonbn'), 'info', false);
261
        return;
262
    }
263
264
    if (count($groups) == 1) {
265
        // There is only one group and the user has access to it.
266
        return;
267
    }
268
269
    bigbluebuttonbn_view_message_box($bbbsession, get_string('view_groups_selection_warning', 'bigbluebuttonbn'), 'warning');
270
    $urltoroot = $CFG->wwwroot.'/mod/bigbluebuttonbn/view.php?id='.$bbbsession['cm']->id;
271
    groups_print_activity_menu($bbbsession['cm'], $urltoroot);
272
    echo '<br><br>';
273
}
274
275
function bigbluebuttonbn_view_message_box(&$bbbsession, $message, $type='warning', $onlymoderator=false) {
276
    global $OUTPUT;
277
    if ($onlymoderator && !$bbbsession['moderator'] && !$bbbsession['administrator']) {
278
        return;
279
    }
280
    echo $OUTPUT->box_start('generalbox boxaligncenter');
281
    echo '<br><div class="alert alert-' . $type . '">' . $message . '</div>';
282
    echo $OUTPUT->box_end();
283
}
284
285
function bigbluebuttonbn_view_render(&$bbbsession, $activity) {
286
    global $OUTPUT, $PAGE;
287
288
    $type = null;
289
    if (isset($bbbsession['bigbluebuttonbn']->type)) {
290
        $type = $bbbsession['bigbluebuttonbn']->type;
291
    }
292
293
    $typeprofiles = bigbluebuttonbn_get_instance_type_profiles();
294
    $enabledfeatures = bigbluebuttonbn_get_enabled_features($typeprofiles, $type);
295
    $pinginterval = (int)\mod_bigbluebuttonbn\locallib\config::get('waitformoderator_ping_interval') * 1000;
296
297
    // JavaScript for locales.
298
    $PAGE->requires->strings_for_js(array_keys(bigbluebuttonbn_get_strings_for_js()), 'bigbluebuttonbn');
299
300
    // JavaScript variables.
301
    $jsvars = array('activity' => $activity, 'ping_interval' => $pinginterval,
302
        'locale' => bigbluebuttonbn_get_localcode(), 'profile_features' => $typeprofiles[0]['features']);
303
304
    // Renders general warning when configured.
305
    $cfg = \mod_bigbluebuttonbn\locallib\config::get_options();
306
    $output  = bigbluebuttonbn_view_render_warning(
307
        (string)$cfg['general_warning_message'],
308
        (string)$cfg['general_warning_box_type'],
309
        (string)$cfg['general_warning_button_href'],
310
        (string)$cfg['general_warning_button_text'],
311
        (string)$cfg['general_warning_button_class']);
312
313
    $output .= $OUTPUT->heading($bbbsession['meetingname'], 3);
314
    $output .= $OUTPUT->heading($bbbsession['meetingdescription'], 5);
315
316
    if ($enabledfeatures['showroom']) {
317
        $output .= bigbluebuttonbn_view_render_room($bbbsession, $activity, $jsvars);
318
        $PAGE->requires->yui_module('moodle-mod_bigbluebuttonbn-rooms',
319
            'M.mod_bigbluebuttonbn.rooms.init', array($jsvars));
320
    }
321
322
    if ($enabledfeatures['showrecordings']) {
323
        $output .= bigbluebuttonbn_view_render_recording_section($bbbsession, $type, $enabledfeatures, $jsvars);
324
        $PAGE->requires->yui_module('moodle-mod_bigbluebuttonbn-recordings',
325
                'M.mod_bigbluebuttonbn.recordings.init', array($jsvars));
326
    }
327
328
    echo $output.html_writer::empty_tag('br').html_writer::empty_tag('br').html_writer::empty_tag('br');
329
    $PAGE->requires->yui_module('moodle-mod_bigbluebuttonbn-broker', 'M.mod_bigbluebuttonbn.broker.init', array($jsvars));
330
}
331
332
function bigbluebuttonbn_view_render_recording_section(&$bbbsession, $type, $enabledfeatures, &$jsvars) {
333
    $output = '';
334
    // Evaluates if the recordings are enterely disabled.
335
    if (!(boolean)\mod_bigbluebuttonbn\locallib\config::recordings_enabled()) {
336
        if ($type == BIGBLUEBUTTONBN_TYPE_RECORDING_ONLY) {
337
            $output .= bigbluebuttonbn_view_render_warning(
338
                get_string('view_message_recordings_disabled', 'bigbluebuttonbn'), 'danger');
339
        }
340
        return $output;
341
    }
342
    // Recordings are rendered either if it is a 'recordings only' instance or it is set to be recorded.
343
    if ($type == BIGBLUEBUTTONBN_TYPE_RECORDING_ONLY || $bbbsession['record']) {
344
        $output .= html_writer::tag('h4', get_string('view_section_title_recordings', 'bigbluebuttonbn'));
345
        $output .= bigbluebuttonbn_view_render_recordings($bbbsession, $enabledfeatures['showroom'], $jsvars);
346
        if ($enabledfeatures['importrecordings'] && $bbbsession['importrecordings']) {
347
            $output .= bigbluebuttonbn_view_render_imported($bbbsession);
348
        }
349
    }
350
    return $output;
351
}
352
353
function bigbluebuttonbn_view_render_warning($message, $type='info', $href='', $text='', $class='') {
354
    global $OUTPUT;
355
    $output = "\n";
356
    // Evaluates if config_warning is enabled.
357
    if (empty($message)) {
358
        return $output;
359
    }
360
    $output .= $OUTPUT->box_start('box boxalignleft adminerror alert alert-' . $type . ' alert-block fade in',
361
      'bigbluebuttonbn_view_general_warning')."\n";
362
    $output .= '  <button type="button" class="close" data-dismiss="alert">&times;</button>'.$message."\n";
363
    $output .= '  <div class="singlebutton">'."\n";
364
    if (!empty($href)) {
365
        $output .= bigbluebuttonbn_view_render_warning_button($href, $text, $class);
366
    }
367
    $output .= '  </div>'."\n";
368
    $output .= $OUTPUT->box_end()."\n";
369
    return $output;
370
}
371
372
function bigbluebuttonbn_view_render_warning_button($href, $text = '', $class = '') {
373
    if ($text == '') {
374
        $text = get_string('ok', 'moodle');
375
    }
376
    if ($class == '') {
377
        $class = 'btn btn-secondary';
378
    }
379
    $output  = '  <form method="post" action="' . $href . '" class="form-inline">'."\n";
380
    $output .= '      <button type="submit" class="' . $class . '"'."\n";
381
    $output .= '          title=""'."\n";
382
    $output .= '          >' . $text . '</button>'."\n";
383
    $output .= '  </form>'."\n";
384
    return $output;
385
}
386
387
function bigbluebuttonbn_view_render_room(&$bbbsession, $activity, &$jsvars) {
388
    global $OUTPUT;
389
390
    // JavaScript variables for room.
391
    $openingtime = '';
392
    if ($bbbsession['openingtime']) {
393
        $openingtime = get_string('mod_form_field_openingtime', 'bigbluebuttonbn').': '.
394
            userdate($bbbsession['openingtime']);
395
    }
396
    $closingtime = '';
397
    if ($bbbsession['closingtime']) {
398
        $closingtime = get_string('mod_form_field_closingtime', 'bigbluebuttonbn').': '.
399
            userdate($bbbsession['closingtime']);
400
    }
401
    $jsvars += array(
402
        'meetingid' => $bbbsession['meetingid'],
403
        'bigbluebuttonbnid' => $bbbsession['bigbluebuttonbn']->id,
404
        'userlimit' => $bbbsession['userlimit'],
405
        'opening' => $openingtime,
406
        'closing' => $closingtime,
407
    );
408
409
    $output = $OUTPUT->box_start('generalbox boxaligncenter', 'bigbluebuttonbn_view_message_box');
410
    $output .= '<br><span id="status_bar"></span><br>';
411
    $output .= '<span id="control_panel"></span>';
412
    $output .= $OUTPUT->box_end();
413
414
    $output .= $OUTPUT->box_start('generalbox boxaligncenter', 'bigbluebuttonbn_view_action_button_box');
415
    $output .= '<br><br><span id="join_button"></span>&nbsp;<span id="end_button"></span>'."\n";
416
    $output .= $OUTPUT->box_end();
417
418
    if ($activity == 'ended') {
419
        $output .= bigbluebuttonbn_view_ended($bbbsession);
420
    }
421
422
    return $output;
423
}
424
425
function bigbluebuttonbn_view_include_recordings(&$bbbsession) {
426
    if ($bbbsession['bigbluebuttonbn']->type == BIGBLUEBUTTONBN_TYPE_RECORDING_ONLY &&
427
        $bbbsession['bigbluebuttonbn']->recordings_imported) {
428
        return false;
429
    }
430
    return true;
431
}
432
433
function bigbluebuttonbn_view_render_recordings(&$bbbsession, $showroom, &$jsvars) {
434
    $bigbluebuttonbnid = null;
435
    if ($showroom) {
436
        $bigbluebuttonbnid = $bbbsession['bigbluebuttonbn']->id;
437
    }
438
439
    // Get recordings.
440
    $recordings = array();
441
    if ( bigbluebuttonbn_view_include_recordings($bbbsession) ) {
442
        $recordings = bigbluebuttonbn_get_recordings(
443
            $bbbsession['course']->id, $bigbluebuttonbnid, $showroom,
444
            $bbbsession['bigbluebuttonbn']->recordings_deleted
445
          );
446
    }
447
448
    // Get recording links.
449
    $recordingsimported = bigbluebuttonbn_get_recordings_imported_array(
450
        $bbbsession['course']->id, $bigbluebuttonbnid, $showroom
451
      );
452
453
    /* Perform aritmetic addition instead of merge so the imported recordings corresponding to existent
454
     * recordings are not included. */
455
    $recordings += $recordingsimported;
456
457
    if (empty($recordings) || array_key_exists('messageKey', $recordings)) {
458
        // There are no recordings to be shown.
459
        return html_writer::div(get_string('view_message_norecordings', 'bigbluebuttonbn'), '',
460
            array('id' => 'bigbluebuttonbn_html_table'));
461
    }
462
463
    // There are recordings for this meeting.
464
    // JavaScript variables for recordings.
465
    $jsvars += array(
466
            'recordings_html' => $bbbsession['bigbluebuttonbn']->recordings_html == '1',
467
          );
468
469
    // If there are meetings with recordings load the data to the table.
470
    if ($bbbsession['bigbluebuttonbn']->recordings_html) {
471
        // Render a plain html table.
472
        return bigbluebutton_output_recording_table($bbbsession, $recordings)."\n";
473
    }
474
475
    // JavaScript variables for recordings with YUI.
476
    $jsvars += array(
477
            'columns' => bigbluebuttonbn_get_recording_columns($bbbsession),
478
            'data' => bigbluebuttonbn_get_recording_data($bbbsession, $recordings),
479
          );
480
481
    // Render a YUI table.
482
    return html_writer::div('', '', array('id' => 'bigbluebuttonbn_yui_table'));
483
}
484
485
function bigbluebuttonbn_view_render_imported(&$bbbsession) {
486
    global $CFG;
487
488
    $button = html_writer::tag('input', '',
489
        array('type' => 'button',
490
              'value' => get_string('view_recording_button_import', 'bigbluebuttonbn'),
491
              'class' => 'btn btn-secondary',
492
              'onclick' => 'window.location=\''.$CFG->wwwroot.'/mod/bigbluebuttonbn/import_view.php?bn='.
493
                  $bbbsession['bigbluebuttonbn']->id.'\''));
494
    $output = html_writer::start_tag('br');
495
    $output .= html_writer::tag('span', $button, array('id' => 'import_recording_links_button'));
496
    $output .= html_writer::tag('span', '', array('id' => 'import_recording_links_table'));
497
498
    return $output;
499
}
500
501
function bigbluebuttonbn_view_ended(&$bbbsession) {
502
    global $OUTPUT;
503
504
    if (!is_null($bbbsession['presentation']['url'])) {
505
        $attributes = array('title' => $bbbsession['presentation']['name']);
506
        $icon = new pix_icon($bbbsession['presentation']['icon'], $bbbsession['presentation']['mimetype_description']);
507
508
        return '<h4>'.get_string('view_section_title_presentation', 'bigbluebuttonbn').'</h4>'.
509
                ''.$OUTPUT->action_icon($bbbsession['presentation']['url'], $icon, null, array(), false).''.
510
                ''.$OUTPUT->action_link($bbbsession['presentation']['url'],
511
                      $bbbsession['presentation']['name'], null, $attributes).'<br><br>';
512
    }
513
514
    return '';
515
}
516
517
// Hot-fix: Only for v2017101004, to be removed in the next release if db upgrade is added.
518
function bigbluebuttonbn_verify_passwords(&$bigbluebuttonbn) {
519
    global $DB;
520
    if (empty($bigbluebuttonbn->moderatorpass) || empty($bigbluebuttonbn->viewerpass)) {
521
        $bigbluebuttonbn->moderatorpass = bigbluebuttonbn_random_password(12);
522
        $bigbluebuttonbn->viewerpass = bigbluebuttonbn_random_password(12, $bigbluebuttonbn->moderatorpass);
523
        // Store passwords in the database.
524
        $DB->update_record('bigbluebuttonbn', $bigbluebuttonbn);
525
    }
526
}
527