$PAGE->set_context($context);
$PAGE->set_url(new moodle_url('/enrol/invitation/invitation.php', array('courseid' => $courseid)));
$PAGE->set_pagelayout('course');
$PAGE->set_course($course);
$pagetitle = get_string('inviteusers', 'enrol_invitation');
$PAGE->set_heading($pagetitle);
$PAGE->set_title($pagetitle);
$PAGE->navbar->add($pagetitle);
echo $OUTPUT->header();
// Print out a heading.
echo $OUTPUT->heading($pagetitle, 2, 'headingblock');
print_page_tabs('invite');
// OUTPUT page tabs.
$invitationmanager = new invitation_manager($courseid);
// Make sure that site has invitation plugin installed.
$instance = $invitationmanager->get_invitation_instance($courseid, true);
// If the user was sent to this page by selecting 'resend invite', then
// prefill the form with the data used to resend the invite.
$prefilled = array();
if ($inviteid) {
    if ($invite = $DB->get_record('enrol_invitation', array('courseid' => $courseid, 'id' => $inviteid))) {
        $prefilled['roleid'] = $invite->roleid;
        $prefilled['email'] = $invite->email;
        $prefilled['subject'] = $invite->subject;
        $prefilled['message'] = $invite->message;
        $prefilled['show_from_email'] = $invite->show_from_email;
        $prefilled['notify_inviter'] = $invite->notify_inviter;
    } else {
        print_error('invalidinviteid');
    }
}
Esempio n. 2
0
}
// Make sure that course exists.
$course = $DB->get_record('course', array('id' => $invitation->courseid), '*', MUST_EXIST);
$context = context_course::instance($course->id);
// Set up page.
$PAGE->set_context($context);
$PAGE->set_url(new moodle_url('/enrol/invitation/enrol.php', array('token' => $enrolinvitationtoken)));
$PAGE->set_pagelayout('course');
$PAGE->set_course($course);
$pagetitle = get_string('invitation_acceptance_title', 'enrol_invitation');
$PAGE->set_heading($pagetitle);
$PAGE->set_title($pagetitle);
$PAGE->navbar->add($pagetitle);
// Get.
$invitationmanager = new invitation_manager($invitation->courseid);
$instance = $invitationmanager->get_invitation_instance($invitation->courseid);
// First multiple check related to the invitation plugin config.
// @Todo better handle exceptions here.
if (isguestuser()) {
    // Can not enrol guest!!
    echo $OUTPUT->header();
    // Print out a heading.
    echo $OUTPUT->heading($pagetitle, 2, 'headingblock');
    echo $OUTPUT->box_start('generalbox', 'notice');
    $notice_object = prepare_notice_object($invitation);
    echo get_string('loggedinnot', 'enrol_invitation', $notice_object);
    $loginbutton = new single_button(new moodle_url($CFG->wwwroot . '/login/index.php'), get_string('login'));
    echo $OUTPUT->render($loginbutton);
    echo $OUTPUT->box_end();
    echo $OUTPUT->footer();
    exit;
/**
 * Performs any needed database upgrades between version upgrades.
 *
 * @param int $oldversion
 * @return boolean
 */
function xmldb_enrol_invitation_upgrade($oldversion)
{
    global $CFG, $DB, $OUTPUT;
    $dbman = $DB->get_manager();
    // Moodle v2.1.0 release upgrade line.
    // Put any upgrade step following this.
    if ($oldversion < 2011100302) {
        // Changing type of field userid on table enrol_invitation to int.
        $table = new xmldb_table('enrol_invitation');
        $field = new xmldb_field('userid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, 'email');
        // Launch change of type for field userid.
        $dbman->change_field_type($table, $field);
        // Changing sign of field userid on table enrol_invitation to unsigned.
        $field = new xmldb_field('userid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, 'email');
        // Launch change of sign for field userid.
        $dbman->change_field_unsigned($table, $field);
        // Invitation savepoint reached.
        upgrade_plugin_savepoint(true, 2011100302, 'enrol', 'invitation');
    }
    if ($oldversion < 2011100303) {
        // Define field creatorid to be added to enrol_invitation.
        $table = new xmldb_table('enrol_invitation');
        $field = new xmldb_field('creatorid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, 'timeused');
        // Conditionally launch add field creatorid.
        if (!$dbman->field_exists($table, $field)) {
            $dbman->add_field($table, $field);
        }
        // Invitation savepoint reached.
        upgrade_plugin_savepoint(true, 2011100303, 'enrol', 'invitation');
    }
    // Add roleid, timeexpiration, added foreign keys and indexes and fixed
    // some default values.
    if ($oldversion < 2013030100) {
        $table = new xmldb_table('enrol_invitation');
        // Add fields.
        $fields[] = new xmldb_field('roleid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, '0', 'userid');
        $fields[] = new xmldb_field('timeexpiration', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, '0', 'timesent');
        foreach ($fields as $field) {
            if (!$dbman->field_exists($table, $field)) {
                $dbman->add_field($table, $field);
            }
        }
        // Since we are adding new columns called roleid and timeexpiration, we
        // need to convert existing invitations to use these fields.
        $existinginvitations = $DB->get_recordset('enrol_invitation');
        if ($existinginvitations->valid()) {
            require_once $CFG->dirroot . '/enrol/invitation/locallib.php';
            $enrolinstances = array();
            // Cache for
            foreach ($existinginvitations as $existinginvitation) {
                // Get enrol instance, but look in cache first.
                $courseid = $existinginvitation->courseid;
                if (!isset($enrolinstances[$courseid])) {
                    $invitemanager = new invitation_manager($courseid, false);
                    $enrolinstance = $invitemanager->get_invitation_instance($courseid);
                    if (empty($enrolinstance)) {
                        // Course must have deleted enrolment plugin, skip it.
                        continue;
                    } else {
                        $enrolinstances[$courseid] = $enrolinstance;
                    }
                }
                $enrolinstance = $enrolinstances[$courseid];
                // Now, update roleid and timeexpiration.
                $existinginvitation->roleid = $enrolinstance->roleid;
                // Default to 2 weeks expiration for active invitations.
                if (empty($existinginvitation->tokenused)) {
                    $existinginvitation->timeexpiration = $existinginvitation->timesent + 1209600;
                }
                $DB->update_record('enrol_invitation', $existinginvitation, true);
            }
        }
        // Change defaults/null settings.
        $fields = array();
        $fields[] = new xmldb_field('timeused', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, 'timeexpiration');
        $fields[] = new xmldb_field('creatorid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, '0', 'timeused');
        foreach ($fields as $field) {
            $dbman->change_field_default($table, $field);
            $dbman->change_field_notnull($table, $field);
        }
        // Add foreign keys.
        $keys[] = new xmldb_key('userid', XMLDB_KEY_FOREIGN, array('userid'), 'user', array('id'));
        $keys[] = new xmldb_key('courseid', XMLDB_KEY_FOREIGN, array('courseid'), 'course', array('id'));
        $keys[] = new xmldb_key('roleid', XMLDB_KEY_FOREIGN, array('roleid'), 'role', array('id'));
        $keys[] = new xmldb_key('creatorid', XMLDB_KEY_FOREIGN, array('creatorid'), 'user', array('id'));
        foreach ($keys as $key) {
            $dbman->add_key($table, $key);
        }
        // Add index.
        $index = new xmldb_index('token', XMLDB_INDEX_UNIQUE, array('token'));
        if (!$dbman->index_exists($table, $index)) {
            $dbman->add_index($table, $index);
        }
        // Invitation savepoint reached.
        upgrade_plugin_savepoint(true, 2013030100, 'enrol', 'invitation');
    }
    // Rename creatorid to inviterid & add subject, message, notify_inviter,
    // show_from_email columns.
    if ($oldversion < 2013030101) {
        $table = new xmldb_table('enrol_invitation');
        // 1) Rename creatorid to inviterid.
        // First delete old key.
        $key = new xmldb_key('creatorid', XMLDB_KEY_FOREIGN, array('creatorid'), 'user', array('id'));
        $dbman->drop_key($table, $key);
        // Rename creatorid to inviterid.
        $field = new xmldb_field('creatorid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, '0', 'timeused');
        $dbman->rename_field($table, $field, 'inviterid');
        // Re-add key.
        $key = new xmldb_key('inviterid', XMLDB_KEY_FOREIGN, array('inviterid'), 'user', array('id'));
        $dbman->add_key($table, $key);
        // 2) Add subject, message, notify_inviter, show_from_email columns.
        $fields[] = new xmldb_field('subject', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, 'inviterid');
        $fields[] = new xmldb_field('message', XMLDB_TYPE_TEXT, 'small', null, null, null, null, 'subject');
        $fields[] = new xmldb_field('notify_inviter', XMLDB_TYPE_INTEGER, '1', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, '0', 'message');
        $fields[] = new xmldb_field('show_from_email', XMLDB_TYPE_INTEGER, '1', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, '0', 'notify_inviter');
        foreach ($fields as $field) {
            // Conditionally launch add field subject.
            if (!$dbman->field_exists($table, $field)) {
                $dbman->add_field($table, $field);
            }
        }
        // Invitation savepoint reached.
        upgrade_plugin_savepoint(true, 2013030101, 'enrol', 'invitation');
    }
    // Fix role_assignments to include enrol_invitation.
    if ($oldversion < 2013030102) {
        /**
         * Go through each accepted invite and look for an entry in
         * role_assignments with component set to "" and userid, roleid, and
         * context match given invite's user, role, course context.
         */
        // Get all invites (use record set, since it can be huge).
        $invites = $DB->get_recordset('enrol_invitation', array('tokenused' => 1));
        if ($invites->valid()) {
            foreach ($invites as $invite) {
                // Get course context.
                $coursecontext = context_course::instance($invite->courseid);
                if (empty($coursecontext)) {
                    continue;
                }
                // Find course's enrollment plugin to use as itemid later on.
                $invitation_enrol = $DB->get_record('enrol', array('enrol' => 'invitation', 'courseid' => $invite->courseid));
                if (empty($invitation_enrol)) {
                    continue;
                }
                // Find corresponding role_assignments record (there SHOULD only
                // be one record, but testing/playing around might result in
                // dups, just choose one).
                $role_assignment = $DB->get_record('role_assignments', array('roleid' => $invite->roleid, 'contextid' => $coursecontext->id, 'userid' => $invite->userid, 'component' => ''), '*', IGNORE_MULTIPLE);
                if (empty($role_assignment)) {
                    continue;
                }
                // Set component & itemid.
                $role_assignment->component = 'enrol_invitation';
                $role_assignment->itemid = $invitation_enrol->id;
                // Save it.
                $DB->update_record('role_assignments', $role_assignment, true);
            }
            $invites->close();
        }
        // Invitation savepoint reached.
        upgrade_plugin_savepoint(true, 2013030102, 'enrol', 'invitation');
    }
    return true;
}