function xmldb_block_demostudent_upgrade($oldversion = 0)
{
    global $CFG;
    $result = true;
    // Assign moodle/course:viewhiddencourses capability to demostudent role.
    if ($oldversion < 2013100201) {
        if (get_capability_info('moodle/course:viewhiddencourses')) {
            $demostudentroleid = get_roleid_by_roleshortname('demostudent');
            assign_capability('moodle/course:viewhiddencourses', CAP_ALLOW, $demostudentroleid, 1);
        }
        upgrade_plugin_savepoint(true, 2013100201, 'block', 'demostudent');
    }
    return $result;
}
 private function render_view($viewrole = 'demostudent')
 {
     global $CFG, $COURSE, $USER, $OUTPUT;
     $this->content->text = '';
     // If the demostudent role is missing from the system, give a warning.
     $demostudentroleid = get_roleid_by_roleshortname('demostudent');
     if (!$demostudentroleid) {
         // Test this by changing mdl_role.shortname from 'demostudent' to 'demostudent2' in the DB.
         $this->content->text .= get_string('warningmissingrole', 'block_demostudent');
     }
     // If the course is not available to students, give a warning to everyone who sees the block.
     if (!$COURSE->visible) {
         $this->content->text .= get_string('warningcoursenotvisible', 'block_demostudent');
     }
     $this->content->text .= get_string('viewis' . $viewrole, 'block_demostudent');
     $buttontext = get_string('buttonfor' . $viewrole, 'block_demostudent');
     $buttontooltip = get_string('switchfrom' . $viewrole . 'view', 'block_demostudent');
     $buttonunenroltext = get_string('buttonforunenrol', 'block_demostudent');
     $buttonunenroltooltip = get_string('unenroltip', 'block_demostudent');
     $this->content->text .= '<div class="searchform">';
     $this->content->text .= '<form action="' . $CFG->wwwroot . '/blocks/demostudent/switchview.php" style="display:inline"><fieldset class="invisiblefieldset">';
     $this->content->text .= '<legend class="accesshide">' . $buttontooltip . '</legend>';
     $this->content->text .= '<input name="url" type="hidden" value="' . $this->page->url . '" />';
     $this->content->text .= '<input name="viewrole" type="hidden" value="' . $viewrole . '" />';
     $this->content->text .= '<input name="courseid" type="hidden" value="' . $this->page->course->id . '" />';
     $this->content->text .= '<input name="sesskey" type="hidden" value="' . $USER->sesskey . '" />';
     $this->content->text .= '<button id="switchview_button" type="submit" title="' . $buttontooltip . '">' . $buttontext . '</button><br />';
     // Somebody add some help here: $this->content->text .= $OUTPUT->help_icon('demostudent'); !
     $this->content->text .= '</fieldset></form>';
     $this->content->text .= '</div>';
     $this->content->text .= get_string('advicefor' . $viewrole, 'block_demostudent');
     if ($viewrole == 'demostudent' && $this->ismoonfull()) {
         $this->content->text .= get_string('advicetwowindows', 'block_demostudent');
     }
     if ($viewrole == 'instructor') {
         // Need to allow the instructor to unenrol the demo student, add another form.
         $this->content->text .= '<div class="searchform">';
         $this->content->text .= '<form action="' . $CFG->wwwroot . '/blocks/demostudent/remove.php" style="display:inline">';
         $this->content->text .= '<fieldset class="invisiblefieldset">';
         $this->content->text .= '<input name="viewrole" type="hidden" value="' . $viewrole . '" />';
         $this->content->text .= '<input name="courseid" type="hidden" value="' . $this->page->course->id . '" />';
         $this->content->text .= '<input name="sesskey" type="hidden" value="' . $USER->sesskey . '" />';
         $this->content->text .= '<button id="unenrol_button" type="submit" title="' . $buttonunenroltooltip . '">' . $buttonunenroltext . '</button><br />';
         $this->content->text .= '</fieldset></form>';
         $this->content->text .= '</div>';
     }
 }
 $demostudentuser = get_complete_user_data('username', $demostudentusername);
 if (!$demostudentuser) {
     // DemoStudent account does not exist yet.  Let's create it.
     // Test this by deleting your DemoStudent account from mdl_user DB table.
     $demostudentuser = create_demostudent_account($demostudentusername);
     if (!$demostudentuser) {
         // Test this by setting $demostudentuser to false.
         print get_string('errorfailedtocreateuser', 'block_demostudent', $demostudentusername);
         print get_string('returntocourse', 'block_demostudent', $url);
         exit;
     }
 }
 // Else DemoStudent user already exists for this instructor.
 $demostudentid = $demostudentuser->id;
 // Enrol DemoStudent in this course (as a demostudent).
 $demostudentroleid = get_roleid_by_roleshortname('demostudent');
 if (!$demostudentroleid) {
     print get_string('warningmissingrole', 'block_demostudent');
 }
 if (!is_enrolled($coursecontext, $demostudentuser)) {
     if (!enrol_try_internal_enrol($courseid, $demostudentid, $demostudentroleid)) {
         // Enrolment failed.  Haven't seen this happen yet.
         trigger_error('DemoStudent user enrolment failed!<br>Parameters:<br>' . '<br> url=' . var_export($url, true) . '<br> viewrole=' . var_export($viewrole, true) . '<br> courseid=' . var_export($courseid, true) . '<br>Globals:' . '<br> userid=' . var_export($userid, true) . '<br> username='******'<br>Locals:' . '<br> demostudentid=' . var_export($demostudentid, true) . '<br> demostudentroleid=' . var_export($demostudentroleid, true) . '<br> coursecontext=' . var_export($coursecontext, true) . '<br> demostudentuser='******'s possible that the function failed, but that the user is nevertheless enrolled.
         // If the user is not enrolled, a later check will take care of things.
     }
 }
 // Aditionally, if we are switching from 'instructor' view (i.e., not in 'firstuse' mode), switch user.
 if ($viewrole == 'instructor') {
     if (is_siteadmin($demostudentid)) {
         // This should never happen.  Haven't seen it happen yet.