$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; }