function test_ws_url($url) { try { $urlok = rcommon_get_wsdl($url); if ($urlok) { return $url; } } catch (Exception $e) { return false; } return false; }
/** * Web Service to authenticate users credentials * @param object $data -> mod values * @return obj -> web service response */ function AuthenticateUserContent($data, $usr_creden = false, $showurl = true) { global $CFG, $DB, $USER, $OUTPUT; $from = optional_param('from', '', PARAM_TEXT); if (!isset($data->bookid) || ($book = $DB->get_record('rcommon_books', array('id' => $data->bookid))) == false) { print_error(get_string('nobookid', 'local_rcommon')); //save error on bd } elseif (($publisher = $DB->get_record('rcommon_publisher', array('id' => $book->publisherid))) == false) { print_error(get_string('nopublisher', 'local_rcommon')); //save error on bd } if (!$usr_creden) { $usr_creden = credentials::get_by_user_isbn($USER->id, $book->isbn); } if (!$usr_creden) { // Moved $url variable to use it also in the else clause and changed the default behavior /*set url*/ if (isset($_SERVER)) { $SERVER_NAME = $_SERVER['SERVER_NAME']; $SERVER_PORT = $_SERVER['SERVER_PORT']; $SCRIPT_NAME = $_SERVER['REQUEST_URI']; $HTTPS = isset($_SERVER['HTTPS']) ? $_SERVER['HTTPS'] : (isset($HTTP_SERVER_VARS['HTTPS']) ? $HTTP_SERVER_VARS['HTTPS'] : 'off'); } elseif (isset($HTTP_SERVER_VARS)) { $SERVER_NAME = $HTTP_SERVER_VARS['SERVER_NAME']; $SERVER_PORT = $HTTP_SERVER_VARS['SERVER_PORT']; $SCRIPT_NAME = $HTTP_SERVER_VARS['REQUEST_URI']; $HTTPS = isset($HTTP_SERVER_VARS['HTTPS']) ? $HTTP_SERVER_VARS['HTTPS'] : 'off'; } if ($SERVER_PORT == 80) { $SERVER_PORT = ''; } else { $SERVER_PORT = ':' . $SERVER_PORT; } if ($HTTPS == '1' || $HTTPS == 'on') { $SCHEME = 'https'; } else { $SCHEME = 'http'; } $url = "{$SCHEME}://{$SERVER_NAME}{$SERVER_PORT}{$SCRIPT_NAME}"; redirect($CFG->wwwroot . '/local/rcommon/formInsert.php?url=' . base64_encode($url) . '&isbn=' . $book->isbn); exit; //save error on bd } else { if (!empty($data->unitid) && ($unit = $DB->get_record('rcommon_books_units', array('id' => $data->unitid))) == false) { print_error(get_string('nounit', 'block_rcommon')); //save error on bd } else { if (!empty($data->activityid) && ($activ = $DB->get_record('rcommon_books_activities', array('id' => $data->activityid))) == false) { print_error('noactivity', 'block_rcommon'); //save error on bd } } } //look for the group if he has anyone assigned $grupo = $DB->get_recordset_sql("SELECT GRUPO.id\r\n FROM {user} USERS\r\n JOIN {role_assignments} ra ON ra.userid = USERS.id\r\n JOIN {role} r ON ra.roleid = r.id\r\n JOIN {context} con ON ra.contextid = con.id\r\n JOIN {course} COURSE ON COURSE.id = con.instanceid\r\n AND con.contextlevel =50\r\n JOIN {groups} GRUPO ON GRUPO.courseid = COURSE.id\r\n JOIN {groups_members} MEMBER ON MEMBER.groupid = GRUPO.id\r\n AND MEMBER.userid = USERS.id\r\n WHERE COURSE.id = {$data->course}\r\n AND USERS.id = {$USER->id}"); foreach ($grupo as $grp) { $grupoid = $grp->id; } try { $client = get_marsupial_ws_client($publisher, true); $params = new stdClass(); $params->Credencial = new SoapVar($usr_creden->credentials, XSD_STRING, "string", "http://www.w3.org/2001/XMLSchema"); $params->ISBN = new SoapVar($book->isbn, XSD_STRING, "string", "http://www.w3.org/2001/XMLSchema"); $params->IdUsuario = new SoapVar($usr_creden->euserid, XSD_STRING, "string", "http://www.w3.org/2001/XMLSchema"); //$params->NombreApe = new SoapVar($USER->firstname." ".$USER->lastname, XSD_STRING, "string", "http://www.w3.org/2001/XMLSchema"); //convert rcommon_teacherroles to array $rcommon_teacherroles = explode(',', get_config('rcommon', 'teacherroles')); //get user role // To avoid problems because in some cases the courseid was null $context = context_course::instance($data->course); $iduserrole = array(); if ($roles = get_user_roles($context, $USER->id)) { foreach ($roles as $role) { $iduserrole = $role->roleid; } } //set role string $rolestring = "ESTUDIANTE"; if (in_array($iduserrole, $rcommon_teacherroles)) { $rolestring = "PROFESOR"; } //check if the web service is prepared to receive rol parameter $parsed_wsdl = rcommon_get_wsdl($publisher->urlwsauthentication . '?wsdl'); if (core_text::strpos($parsed_wsdl, 'name="Rol"') && $rolestring == "PROFESOR") { $params->Rol = new SoapVar($rolestring, XSD_STRING, "string", "http://www.w3.org/2001/XMLSchema"); } $params->IdCurso = new SoapVar($data->course, XSD_STRING, "string", "http://www.w3.org/2001/XMLSchema"); $centerid = isset($CFG->center) ? $CFG->center : ''; $params->IdCentro = new SoapVar($centerid, XSD_STRING, "string", "http://www.w3.org/2001/XMLSchema"); $params->URLResultado = new SoapVar("{$CFG->wwwroot}/mod/rcontent/WebServices/wsSeguimiento.php", XSD_STRING, "string", "http://www.w3.org/2001/XMLSchema"); $params->IdContenidoLMS = new SoapVar($data->id, XSD_STRING, "string", "http://www.w3.org/2001/XMLSchema"); $unitid = isset($unit->code) ? $unit->code : ''; $params->IdUnidad = new SoapVar($unitid, XSD_STRING, "string", "http://www.w3.org/2001/XMLSchema"); $activid = isset($activ->code) ? $activ->code : ''; $params->IdActividad = new SoapVar($activid, XSD_STRING, "string", "http://www.w3.org/2001/XMLSchema"); // He has been assigned a group if (isset($grupoid)) { $params->IdGrupo = new SoapVar($grupoid, XSD_STRING, "string", "http://www.w3.org/2001/XMLSchema"); } $response = $client->__soapCall("AutenticarUsuarioContenido", array($params)); log_to_file("wsAutenthication request: " . $client->__getLastRequest()); log_to_file("wsAutenthication response: " . $client->__getLastResponse()); } catch (Exception $e) { log_to_file("wsAutenthication exception: " . get_string('bad_wsdl_connection', 'local_rcommon')); echo '<script type="text/javascript">window.alert("' . get_string('bad_wsdl_connection', 'local_rcommon') . '"); history.go(-1);</script>'; echo $OUTPUT->notification(get_string('bad_wsdl_connection', 'local_rcommon')); die; } //test the response to set parameters name to the standars foreach ($response->AutenticarUsuarioContenidoResult as $key => $value) { switch (core_text::strtolower($key)) { case "descripcion": $response->AutenticarUsuarioContenidoResult->Descripcion = $value; break; case "codigo": $response->AutenticarUsuarioContenidoResult->Codigo = $value; break; case "url": $response->AutenticarUsuarioContenidoResult->URL = $value; break; } } //check if there are any response error if ($response->AutenticarUsuarioContenidoResult->Codigo <= 0) { //test if isset the url // $urlok = false; $message = "Instance ID: " . $data->id . ", Text: " . get_string('wsautenticationerror', $data->module == 'check_credentials' ? 'rcontent' : $data->module) . ", Code: " . $response->AutenticarUsuarioContenidoResult->Codigo . ", Detail: " . $response->AutenticarUsuarioContenidoResult->Descripcion; if (isset($response->AutenticarUsuarioContenidoResult->URL)) { $urlok = test_ws_url($response->AutenticarUsuarioContenidoResult->URL); } if ($urlok) { $message .= ", URL: " . $urlok; } rcommon_ws_error('AuthenticateUserContent', $message, $data->module, $data->cmid, $data->course); if ($urlok && $showurl) { $msg = '<br><br>' . @get_string('urlmoreinfo', 'local_rcommon', $urlok); } else { $msg = ""; } //set the description to show $desctext = get_string('error_code_' . $response->AutenticarUsuarioContenidoResult->Codigo, 'local_rcommon'); if (core_text::substr($desctext, 0, 2) == '[[') { $desctext = $response->AutenticarUsuarioContenidoResult->Codigo; } if (isset($response->AutenticarUsuarioContenidoResult->Descripcion) && !empty($response->AutenticarUsuarioContenidoResult->Descripcion)) { $desctext .= '<br>' . $response->AutenticarUsuarioContenidoResult->Descripcion; } print_error(get_string('error_authentication', 'local_rcommon', $response->AutenticarUsuarioContenidoResult->Codigo) . '<br>' . $desctext . $msg); } else { return $response; } }