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