Esempio n. 1
0
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 . '&lti_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());
    }
}
Esempio n. 2
0
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;
}
Esempio n. 3
0
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));
        }
    }
}