Esempio n. 1
0
    $notice_object = prepare_notice_object($invitation);
    $invitationacceptance = get_string('invitationacceptance', 'enrol_invitation', $notice_object);
    // If invitation has "daysexpire" set, then give notice.
    if (!empty($invitation->daysexpire)) {
        $invitationacceptance .= html_writer::tag('p', get_string('daysexpire_notice', 'enrol_invitation', $invitation->daysexpire));
    }
    echo $OUTPUT->confirm($invitationacceptance, $accept, $cancel);
    echo $OUTPUT->footer();
    exit;
} else {
    if ($invitation->email != $USER->email) {
        add_to_log($invitation->courseid, 'course', 'invitation mismatch', "../enrol/invitation/history.php?courseid={$invitation->courseid}", $course->fullname);
    }
    // User confirmed, so add them.
    require_once $CFG->dirroot . '/enrol/invitation/locallib.php';
    $invitationmanager = new invitation_manager($invitation->courseid);
    $invitationmanager->enroluser($invitation);
    add_to_log($invitation->courseid, 'course', 'invitation claim', "../enrol/invitation/history.php?courseid={$invitation->courseid}", $course->fullname);
    // Set token as used and mark which user was assigned the token.
    $invitation->tokenused = true;
    $invitation->timeused = time();
    $invitation->userid = $USER->id;
    $DB->update_record('enrol_invitation', $invitation);
    if (!empty($invitation->notify_inviter)) {
        // Send an email to the user who sent the invitation.
        $inviter = $DB->get_record('user', array('id' => $invitation->inviterid));
        $contactuser = new object();
        $contactuser->email = $inviter->email;
        $contactuser->firstname = $inviter->firstname;
        $contactuser->lastname = $inviter->lastname;
        $contactuser->maildisplay = true;
$PAGE->set_course($course);
$pagetitle = get_string('invitehistory', 'enrol_invitation');
$PAGE->set_heading($pagetitle);
$PAGE->set_title($pagetitle);
$PAGE->navbar->add($pagetitle);
// Do not display the page if we are going to be redirecting the user.
if ($actionid != invitation_manager::INVITE_RESEND) {
    // OUTPUT form.
    echo $OUTPUT->header();
    // Print out a heading.
    echo $OUTPUT->heading($pagetitle, 2, 'headingblock');
    // OUTPUT page tabs.
    print_page_tabs('history');
}
// Course must have invitation plugin installed (will give error if not found).
$invitationmanager = new invitation_manager($courseid, true);
// Get invites and display them.
$invites = $invitationmanager->get_invites();
if (empty($invites)) {
    echo $OUTPUT->notification(get_string('noinvitehistory', 'enrol_invitation'), 'notifymessage');
} else {
    // Update invitation if the user decided to revoke/extend/resend an invite.
    if ($inviteid && $actionid) {
        if (!($curr_invite = $invites[$inviteid])) {
            print_error('invalidinviteid');
        }
        if ($actionid == invitation_manager::INVITE_REVOKE) {
            // Set the invite to be expired.
            $DB->set_field('enrol_invitation', 'timeexpiration', time() - 1, array('courseid' => $curr_invite->courseid, 'id' => $curr_invite->id));
            add_to_log($course->id, 'course', 'invitation revoke', "../enrol/invitation/history.php?courseid={$course->id}", $course->fullname);
            echo $OUTPUT->notification(get_string('revoke_invite_sucess', 'enrol_invitation'), 'notifysuccess');
    throw new moodle_exception('nopermissiontosendinvitation', 'enrol_invitation', $courseurl);
}
$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');
/**
 * 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;
}