function lti_do_actions($tool_provider) { // Insert code here to handle incoming connections - use the user // and resource_link properties of the $tool_provider parameter // to access the current user and resource link. // Get consumer key $consumer_key = $tool_provider->consumer->getKey(); // Get user ID $user_id = $tool_provider->user->getId(); $blogType = new blogTypeLoader($tool_provider->resource_link->getSetting('custom_blogtype', 'defaultType')); if ($blogType->error < 0) { wp_die("BASIC LTI loading Types Aula Failed " . $blogType->error_miss); return; } //TODO Get the list of users $resource_link = $tool_provider->resource_link; if (false) { //$users = $resource_link->doMembershipsService(); //TODO test save grade $user = $tool_provider->user; //In Moodle we need to delete the dobre quote $result_sourcedid = str_replace('\\"', '"', $user->lti_result_sourcedid); $outcome = new LTI_Outcome($result_sourcedid); $score = 0.66; $outcome->setValue($score); $ok = $resource_link->doOutcomesService(LTI_Resource_Link::EXT_WRITE, $outcome); /*if (!$ok) { var_dump($_POST); var_dump($outcome); die(); }*/ //TODO read result $outcome_read = new LTI_Outcome($result_sourcedid); if ($score = $resource_link->doOutcomesService(LTI_Resource_Link::EXT_READ, $outcome_read)) { //Doesn't work not retrieve the score //$score = $outcome_read->getValue(); } } // Set up the user... $userkey = getUserkeyLTI($tool_provider); $userkey = apply_filters('pre_user_login', $userkey); $userkey = trim($userkey); if (empty($userkey)) { wp_die('<p>Empty username</p><p>Cannot create a user without username</p>'); } $uinfo = get_user_by('login', $userkey); $og_old_user_meta = null; if (isset($uinfo) && $uinfo != false) { //CHANGED WHY DO THIS INSERT /*$ret_id = wp_insert_user(array( 'ID' => $uinfo->ID, 'user_login' => $userkey, 'user_nicename'=> $tool_provider->user->fullname, 'first_name'=> $tool_provider->user->firstname, 'last_name'=> $tool_provider->user->lastname, 'user_email'=> $tool_provider->user->email, 'user_url' => 'http://a', 'display_name' => $tool_provider->user->fullname, 'role' => get_option('default_role') )); if (is_object($ret_id) && isset($ret_id->errors)){ $msg = ''; foreach ($ret_id->errors as $key => $error){ $msg .= "<p><b>$key</b> "; foreach($error as $erroMsg){ $msg .= "<p> $erroMsg</p>"; } $msg .= "</p>"; } wp_die($msg); } */ // og : get the user's capabilities before they get removed, so we can restore them later $og_old_user_meta = get_user_meta($uinfo->ID, 'wp_capabilities', true); // error_log("og caps before:".print_r(og_old_user_meta, true)); } else { // new user!!!! // og LTI: set the user_login and user_nicename to the same value, // , because we want the wordpress-login cookie to have the username // otherwise caching won't work properly! //$trim_name = trim($tool_provider->user->fullname); $trim_name = str_replace(' ', '', $tool_provider->user->fullname); $ogmydefaultrole = get_option('default_role'); //error_log("og uinfo:". $uinfo); //error_log("og LTI user fullname:". $tool_provider->user->fullname); $ret_id = wp_insert_user(array('user_login' => $userkey, 'user_nicename' => $userkey, 'first_name' => $tool_provider->user->firstname, 'last_name' => $tool_provider->user->lastname, 'user_email' => $tool_provider->user->email, 'user_url' => 'http://edx.org', 'display_name' => $userkey)); if (is_object($ret_id) && isset($ret_id->errors)) { $msg = ''; foreach ($ret_id->errors as $key => $error) { $msg .= "<p><b>{$key}</b> "; foreach ($error as $erroMsg) { $msg .= "<p> {$erroMsg}</p>"; } $msg .= "</p>"; } wp_die($msg); } $uinfo = get_user_by('login', $userkey); } //Eliminem del blog Principal (si no es admin) http://jira.uoc.edu/jira/browse/BLOGA-218 if (!$is_admin) { //error_log("removing user caps"); $user = new WP_User($uinfo->ID); //error_log("og LTI uinfo: ".print_r($uinfo, true)); $user->remove_all_caps(); } $_SERVER['REMOTE_USER'] = $userkey; $password = md5($uinfo->user_pass); // User is now authorized; force WordPress to use the generated password //login, set cookies, and set current user wp_authenticate($userkey, $password); wp_set_auth_cookie($user->ID, false); wp_set_current_user($user->ID, $userkey); //// og hack: I added wp_og_LTI_login in order to get wordpress to update the user specific cookie during LTI login //do_action("wp_og_LTI_login", $user->user_login, $user); $siteUrl = substr(get_option("siteurl"), 7); // - "http://" $siteUrlArray = explode("/", $siteUrl); $domain = $siteUrlArray[0]; unset($siteUrlArray[0]); //error_log("og LTI domain: ". $domain); $course = $blogType->getCoursePath($tool_provider, $siteUrlArray, $domain); // Get resource link ID $context_id = $tool_provider->resource_link->getId(); if (isset($context_id)) { $course .= '-' . $context_id; } $course = sanitize_user($course, true); //Bug wordpress doesn't get stye sheet if has a dot $course = str_replace('.', '_', $course); ###CHANGED ##$path_base = "/".implode("/",$siteUrlArray)."/".$course; $path_base = "/" . implode("/", $siteUrlArray); $path_base = str_replace('//', '/', $path_base); $path = $path_base . "/"; $path = str_replace('//', '/', $path); $blog_created = false; $overwrite_plugins_theme = $tool_provider->resource_link->getSetting(OVERWRITE_PLUGINS_THEME, false); $overwrite_roles = $tool_provider->resource_link->getSetting(OVERWRITE_ROLES, false); $blog_id = domain_exists($domain, $path); $blog_is_new = false; if (!isset($blog_id)) { $title = __("Blog ") . $blogType->getCourseName($tool_provider); $blog_is_new = true; $meta = $blogType->getMetaBlog($tool_provider); $old_site_language = get_site_option('WPLANG'); $blogType->setLanguage($tool_provider); $blog_id = wpmu_create_blog($domain, $path, $title, $user_id, $meta); update_site_option('WPLANG', $old_site_language); $blogType->checkErrorCreatingBlog($blog_id, $path); $blog_created = true; } // Connect the user to the blog if (isset($blog_id)) { switch_to_blog($blog_id); ob_start(); if ($overwrite_plugins_theme || $blog_created) { $blogType->loadPlugins(); $blogType->changeTheme(); } //Agafem el rol anterior $old_role = null; if (!$blog_created && !$overwrite_roles) { //$old_role_array = get_usermeta($user->id, 'wp_'.$blog_id.'_capabilities'); $old_role_array = get_user_meta($user->id, 'wp_capabilities', true); //error_log("og caps:".print_r($old_role_array, true)); if (count($old_role_array) > 0) { foreach ($old_role_array as $key => $value) { if ($value == true) { $old_role = $key; } } } } if (count($uinfo->role > 1)) { //error_log("og setting old role again ".print_r($uinfo,1)); $old_role = $uinfo->role[1]; } else { $obj->role = get_option('default_role'); } //error_log("og old role before:".$old_role); remove_user_from_blog($uinfo->ID, $blog_id); $obj = new stdClass(); $obj->blog_id = $blog_id; $obj->userkey = $userkey; $obj->path_base = $path_base; $obj->domain = $domain; $obj->context = $tool_provider; $obj->uinfoID = $uinfo->ID; $obj->blog_is_new = $blog_is_new; if ($overwrite_roles || $old_role == null) { $obj->role = $blogType->roleMapping($tool_provider->resource_link->getSetting(FIELD_ROLE_UOC_CAMPUS), $tool_provider); } else { $obj->role = $old_role; } //error_log("og old role:".$obj->role); $obj->role = get_option('default_role'); // oritgigo: added $blogType->postActions($obj); add_user_to_blog($blog_id, $uinfo->ID, $obj->role); //Si posem el restore_current_blog ens va al principi // restore_current_blog(); ob_end_clean(); // og : update the user's capabilities back to what they were before the changes were made // This code fixes a bug where the user's capabilities would reset to participant each // time they logged in. This code prevents this from happening by restoring the user's roles // after the reset happens. if ($og_old_user_meta != null) { update_user_meta($uinfo->ID, 'wp_capabilities', $og_old_user_meta); //error_log("og caps after:".print_r($og_old_user_meta, true)); } } // og hack: I added wp_og_LTI_login in order to get wordpress to update the user specific cookie during LTI login do_action("wp_og_LTI_login", $user->user_login, $user, $og_old_user_meta); $redirecturl = get_option("siteurl"); //error_log("og LTI redirect URL: ".$redirecturl); $redirecturl = str_replace("http://", "https://", $redirecturl); //error_log("og LTI new redirect URL: ".$redirecturl); //error_log("og LTI request: ". print_r($_REQUEST,true)); wp_redirect($redirecturl . '/'); exit; }
/** * Convert data type of value to a supported type if possible. * * @param LTI_Outcome $lti_outcome Outcome object * @param string[] $supported_types Array of outcome types to be supported (optional, default is null to use supported types reported in the last launch for this resource link) * * @return boolean True if the type/value are valid and supported */ private function checkValueType($lti_outcome, $supported_types = NULL) { if (empty($supported_types)) { $supported_types = explode(',', str_replace(' ', '', strtolower($this->getSetting('ext_ims_lis_resultvalue_sourcedids', self::EXT_TYPE_DECIMAL)))); } $type = $lti_outcome->type; $value = $lti_outcome->getValue(); // Check whether the type is supported or there is no value $ok = in_array($type, $supported_types) || strlen($value) <= 0; if (!$ok) { // Convert numeric values to decimal if ($type == self::EXT_TYPE_PERCENTAGE) { if (substr($value, -1) == '%') { $value = substr($value, 0, -1); } $ok = is_numeric($value) && $value >= 0 && $value <= 100; if ($ok) { $lti_outcome->setValue($value / 100); $lti_outcome->type = self::EXT_TYPE_DECIMAL; } } else { if ($type == self::EXT_TYPE_RATIO) { $parts = explode('/', $value, 2); $ok = count($parts) == 2 && is_numeric($parts[0]) && is_numeric($parts[1]) && $parts[0] >= 0 && $parts[1] > 0; if ($ok) { $lti_outcome->setValue($parts[0] / $parts[1]); $lti_outcome->type = self::EXT_TYPE_DECIMAL; } // Convert letter_af to letter_af_plus or text } else { if ($type == self::EXT_TYPE_LETTER_AF) { if (in_array(self::EXT_TYPE_LETTER_AF_PLUS, $supported_types)) { $ok = TRUE; $lti_outcome->type = self::EXT_TYPE_LETTER_AF_PLUS; } else { if (in_array(self::EXT_TYPE_TEXT, $supported_types)) { $ok = TRUE; $lti_outcome->type = self::EXT_TYPE_TEXT; } } // Convert letter_af_plus to letter_af or text } else { if ($type == self::EXT_TYPE_LETTER_AF_PLUS) { if (in_array(self::EXT_TYPE_LETTER_AF, $supported_types) && strlen($value) == 1) { $ok = TRUE; $lti_outcome->type = self::EXT_TYPE_LETTER_AF; } else { if (in_array(self::EXT_TYPE_TEXT, $supported_types)) { $ok = TRUE; $lti_outcome->type = self::EXT_TYPE_TEXT; } } // Convert text to decimal } else { if ($type == self::EXT_TYPE_TEXT) { $ok = is_numeric($value) && $value >= 0 && $value <= 1; if ($ok) { $lti_outcome->type = self::EXT_TYPE_DECIMAL; } else { if (substr($value, -1) == '%') { $value = substr($value, 0, -1); $ok = is_numeric($value) && $value >= 0 && $value <= 100; if ($ok) { if (in_array(self::EXT_TYPE_PERCENTAGE, $supported_types)) { $lti_outcome->type = self::EXT_TYPE_PERCENTAGE; } else { $lti_outcome->setValue($value / 100); $lti_outcome->type = self::EXT_TYPE_DECIMAL; } } } } } } } } } } return $ok; }