/**
  * Launches a oauth tool
  */
 public function call()
 {
     if (!$this->hasRequestParameter('ltiConsumerUri')) {
         throw new common_exception_MissingParameter('ltiConsumerUri', get_class($this));
     }
     if (!$this->hasRequestParameter('ltiLaunchUrl')) {
         throw new common_exception_MissingParameter('ltiLaunchUrl', get_class($this));
     }
     $ltiConsumer = new tao_models_classes_oauth_Credentials($this->getRequestParameter('ltiConsumerUri'));
     $launchUrl = $this->getRequestParameter('ltiLaunchUrl');
     $serviceCallId = $this->getServiceCallId() . '_c';
     $session = common_session_SessionManager::getSession();
     $roles = array();
     foreach ($session->getUserRoles() as $role) {
         foreach (taoLti_models_classes_LtiUtils::mapTaoRole2LTIRoles($role) as $ltiRole) {
             $roles[] = $ltiRole;
         }
     }
     $ltiData = array('lti_message_type' => 'basic-lti-launch-request', 'lti_version' => 'LTI-1p0', 'resource_link_id' => rand(0, 9999999), 'resource_link_title' => 'Launch Title', 'resource_link_label' => 'Launch label', 'context_id' => $serviceCallId, 'context_title' => 'Launch Title', 'context_label' => 'Launch label', 'user_id' => $session->getUserUri(), 'roles' => implode(',', $roles), 'lis_person_name_full' => $session->getUserLabel(), 'tool_consumer_info_product_family_code' => PRODUCT_NAME, 'tool_consumer_info_version' => TAO_VERSION);
     // @todo add:
     /*
     user_id:
     roles:
     
     lis_person_name_full:
     lis_person_name_family:
     lis_person_name_given:
     lis_person_contact_email_primary:
     lis_person_sourcedid:
     
     tool_consumer_info_product_family_code:
     tool_consumer_info_version:
     tool_consumer_instance_guid:
     tool_consumer_instance_description:
     */
     $request = new common_http_Request($launchUrl, common_http_Request::METHOD_POST, $ltiData);
     $service = new tao_models_classes_oauth_Service();
     $signedRequest = $service->sign($request, $ltiConsumer);
     $this->setData('launchUrl', $launchUrl);
     $this->setData('ltiData', $signedRequest->getParams());
     $this->setData('client_config_url', $this->getClientConfigUrl());
     $this->setView('ltiConsumer.tpl');
 }
 private function determinTaoRoles()
 {
     $roles = array();
     if ($this->getLaunchData()->hasVariable(taoLti_models_classes_LtiLaunchData::ROLES)) {
         foreach ($this->getLaunchData()->getUserRoles() as $role) {
             $taoRole = taoLti_models_classes_LtiUtils::mapLTIRole2TaoRole($role);
             if (!is_null($taoRole)) {
                 $roles[] = $taoRole;
                 foreach (core_kernel_users_Service::singleton()->getIncludedRoles(new core_kernel_classes_Resource($taoRole)) as $includedRole) {
                     $roles[] = $includedRole->getUri();
                 }
             }
         }
         $roles = array_unique($roles);
     } else {
         return array(INSTANCE_ROLE_LTI_BASE);
     }
     return $roles;
 }
 private function determinTaoRoles()
 {
     $roles = array();
     if ($this->getLaunchData()->hasVariable(taoLti_models_classes_LtiLaunchData::ROLES)) {
         foreach ($this->getLaunchData()->getUserRoles() as $role) {
             $taoRole = taoLti_models_classes_LtiUtils::mapLTIRole2TaoRole($role);
             if (!is_null($taoRole)) {
                 $roles[] = $taoRole;
             }
         }
     } else {
         return array(INSTANCE_ROLE_LTI_BASE);
     }
     return $roles;
 }