function ProvisionLTIGroup($tool_provider) { // Get status of group provisining $values = GetPluginSettings(); $groupprovision = $values['groupprovision']; $groupname = $tool_provider->context->title; // Get context_id and consumer_key for primary context $context_id = $tool_provider->context->id; $consumer_key = $tool_provider->context->consumer_instance->consumer_guid; $user_id = $tool_provider->user->getID(BasicLTI_Tool_Provider::ID_SCOPE_GLOBAL); // Check if we are dealing with an unapproved share. If so return // to consumer with suitable message if (!empty($tool_provider->user->context->share_approved) && !$tool_provider->user->context->share_approved) { $urlencode = urlencode(sprintf(elgg_echo('LTI:error:sharing'), elgg_get_config('sitename'))); forward($tool_provider->return_url . '<i_msg=' . $urlencode); return false; } // Get user $user = CheckLTIUser($user_id); $user_guid = $user->getGUID(); $_SESSION['lti_logger_id'] = $user->getGUID(); $staff = $tool_provider->user->isStaff(); // Check that groups are present and provisioning is on if (elgg_is_active_plugin('groups') && $groupprovision) { $group = CheckLTIGroup($groupname, $context_id, $consumer_key); // Only staff can create groups. if ($staff && is_null($group)) { $group = CreateLTIGroup($user, $groupname, $context_id, $consumer_key); // Ensure that the owner is instructor as simpifies matters add_entity_relationship($user_guid, 'instructor', $group->getGUID()); system_message(elgg_echo('LTI:info:newgroup')); forward($group->getURL()); } if (is_null($group)) { system_messages(elgg_echo('LTI:info:nogroup')); forward(); } $group_guid = $group->getGUID(); $_SESSION['lti_group_id'] = $group->getGUID(); // Is this user a member of the group if ($group->isMember($user)) { // If user used to be instructor but is now student remove 'instructor' relationship if ($tool_provider->user->isLearner() && check_entity_relationship($user_guid, 'instructor', $group_guid)) { remove_entity_relationship($user_guid, 'instructor', $group->getGUID()); system_messages(elgg_echo('LTI:change:downgrade')); forward($group->getURL()); } // If user is staff add instructor relationship unless they are group owner if ($staff && !check_entity_relationship($user_guid, 'instructor', $group_guid) && $user_guid != $group_guid) { add_entity_relationship($user_guid, 'instructor', $group_guid); system_messages(elgg_echo('LTI:change:upgrade')); forward($group->getURL()); } system_messages('Forwarded to Group'); forward($group->getURL()); } // If not member join $group->join($user); // If instructor but not owner give instructor relationship to group. This makes // other consumer instructors able to edit the group in Elgg if ($staff && !check_entity_relationship($user_guid, 'instructor', $group_guid)) { add_entity_relationship($user_guid, 'instructor', $group_guid); system_messages(elgg_echo('LTI:change:upgrade')); forward($group->getURL()); } system_messages('Forwarded to Group'); forward($group->getURL()); } }
function CreateFromLTIMembership($member) { $user_id = $member->getID(BasicLTI_Tool_Provider::ID_SCOPE_GLOBAL); $values = GetPluginSettings(); $userprovision = $values['userprovision']; // Does user exist $user = CheckLTIUser($user_id); if ((is_null($user) || empty($user)) && $userprovision) { $fullname = $member->fullname; $email = $member->email; if (empty($email)) { $email = '*****@*****.**'; } $password = random_string(10); $guid = register_user($user_id, $password, $fullname, $email, True, 0, ''); if (!$guid) { return null; } $user = get_entity($guid); $user->enable(); $user->consumer_key = $member->context->consumer_instance->guid; $user->context_id = $member->context->id; $user->save(); } return $user; }
function InformInstructorsViaLTIMembership($group, $context, $consumer_key) { // Get the consumer name $consumer = new LTI_Tool_Consumer($consumer_key, elgg_get_config('dbprefix')); $name = $consumer->name; // Get current members $members = $context->doMembershipsService(); foreach ($members as $member) { // Find stadd if ($member->isStaff()) { $user = CheckLTIUser($member['user_id'], $consumer_key); // Ensure message goes via email (given that user may no // longer have access to Elgg to use the standard notifications systems) add_entity_relationship($user->guid, 'notifyemail', $group->guid); notify_user($user->guid, $group->guid, sprintf(elgg_echo('LTI:group:delete:subject'), $group->name), sprintf(elgg_echo('LTI:group:delete:message'), $group->name, $name)); } } }