diff --git a/soap/swad_web_service.h b/soap/swad_web_service.h index a0ac7e779..b089bd955 100644 --- a/soap/swad_web_service.h +++ b/soap/swad_web_service.h @@ -14,6 +14,21 @@ struct swad__createAccountOutput char *wsKey; // key used in subsequent calls to other web services }; +/* loginByUserPasswordKey */ +struct swad__loginByUserPasswordKeyOutput + { + int userCode; + char *wsKey; // key used in subsequent calls to other web services + char *userNickname; + char *userID; + char *userSurname1; + char *userSurname2; + char *userFirstname; + char *userPhoto; + char *userBirthday; + int userRole; // 1 = guest, no courses; 2 = student in all courses; 3 = teacher in one course at least + }; + /* loginBySessionKey */ struct swad__loginBySessionKeyOutput { @@ -35,19 +50,10 @@ struct swad__loginBySessionKeyOutput char *courseName; }; -/* loginByUserPasswordKey */ -struct swad__loginByUserPasswordKeyOutput +/* getAvailableRoles */ +struct swad__getAvailableRolesOutput { - int userCode; - char *wsKey; // key used in subsequent calls to other web services - char *userNickname; - char *userID; - char *userSurname1; - char *userSurname2; - char *userFirstname; - char *userPhoto; - char *userBirthday; - int userRole; // 1 = guest, no courses; 2 = student in all courses; 3 = teacher in one course at least + int roles; }; /* getNewPassword */ @@ -488,6 +494,8 @@ int swad__loginByUserPasswordKey (char *userID,char *userPassword,char *appKey, struct swad__loginByUserPasswordKeyOutput *loginByUserPasswordKeyOut); int swad__loginBySessionKey (char *sessionID,char *appKey, struct swad__loginBySessionKeyOutput *loginBySessionKeyOut); +int swad__getAvailableRoles (char *wsKey, + struct swad__getAvailableRolesOutput *getAvailableRolesOut); int swad__getNewPassword (char *userID,char *appKey, struct swad__getNewPasswordOutput *getNewPasswordOut); diff --git a/swad_API.c b/swad_API.c index 7ad9e6054..828ea4f10 100644 --- a/swad_API.c +++ b/swad_API.c @@ -114,6 +114,7 @@ cp -f /home/acanas/swad/swad/swad /var/www/cgi-bin/ #include "swad_notice.h" #include "swad_notification.h" #include "swad_password.h" +#include "swad_role.h" #include "swad_search.h" #include "swad_test_config.h" #include "swad_test_visibility.h" @@ -134,41 +135,42 @@ extern const char Str_BIN_TO_BASE64URL[64 + 1]; // Add new functions at the end static const char *API_Functions[1 + API_NUM_FUNCTIONS] = { - [API_unknown ] = "?", // 0 ==> unknown function - [API_loginBySessionKey ] = "loginBySession", // 1 - [API_loginByUserPassword ] = "loginByUserPassword", // 2 (deprecated) - [API_loginByUserPasswordKey ] = "loginByUserPasswordKey", // 3 - [API_getCourses ] = "getCourses", // 4 - [API_getUsers ] = "getUsers", // 5 - [API_getNotifications ] = "getNotifications", // 6 - [API_getTestConfig ] = "getTestConfig", // 7 - [API_getTests ] = "getTests", // 8 - [API_sendMessage ] = "sendMessage", // 9 - [API_sendNotice ] = "sendNotice", // 10 - [API_getDirectoryTree ] = "getDirectoryTree", // 11 - [API_getGroups ] = "getGroups", // 12 - [API_getGroupTypes ] = "getGroupTypes", // 13 - [API_sendMyGroups ] = "sendMyGroups", // 14 - [API_getFile ] = "getFile", // 15 - [API_markNotificationsAsRead] = "markNotificationsAsRead", // 16 - [API_getNewPassword ] = "getNewPassword", // 17 - [API_getCourseInfo ] = "getCourseInfo", // 18 - [API_getAttendanceEvents ] = "getAttendanceEvents", // 19 - [API_sendAttendanceEvent ] = "sendAttendanceEvent", // 20 - [API_getAttendanceUsers ] = "getAttendanceUsers", // 21 - [API_sendAttendanceUsers ] = "sendAttendanceUsers", // 22 - [API_createAccount ] = "createAccount", // 23 - [API_getMarks ] = "getMarks", // 24 - [API_getTrivialQuestion ] = "getTrivialQuestion", // 25 - [API_findUsers ] = "findUsers", // 26 - [API_removeAttendanceEvent ] = "removeAttendanceEvent", // 27 - [API_getGames ] = "getGames", // 28 - [API_getMatches ] = "getMatches", // 29 - [API_getMatchStatus ] = "getMatchStatus", // 30 - [API_answerMatchQuestion ] = "answerMatchQuestion", // 31 - [API_getLocation ] = "getLocation", // 32 - [API_sendMyLocation ] = "sendMyLocation", // 33 - [API_getLastLocation ] = "getLastLocation", // 34 + [API_unknown ] = "?", // 0 ==> unknown function + [API_loginBySessionKey ] = "loginBySession", // 1 + [API_loginByUserPassword ] = "loginByUserPassword", // 2 (deprecated) + [API_loginByUserPasswordKey ] = "loginByUserPasswordKey", // 3 + [API_getCourses ] = "getCourses", // 4 + [API_getUsers ] = "getUsers", // 5 + [API_getNotifications ] = "getNotifications", // 6 + [API_getTestConfig ] = "getTestConfig", // 7 + [API_getTests ] = "getTests", // 8 + [API_sendMessage ] = "sendMessage", // 9 + [API_sendNotice ] = "sendNotice", // 10 + [API_getDirectoryTree ] = "getDirectoryTree", // 11 + [API_getGroups ] = "getGroups", // 12 + [API_getGroupTypes ] = "getGroupTypes", // 13 + [API_sendMyGroups ] = "sendMyGroups", // 14 + [API_getFile ] = "getFile", // 15 + [API_markNotificationsAsRead ] = "markNotificationsAsRead", // 16 + [API_getNewPassword ] = "getNewPassword", // 17 + [API_getCourseInfo ] = "getCourseInfo", // 18 + [API_getAttendanceEvents ] = "getAttendanceEvents", // 19 + [API_sendAttendanceEvent ] = "sendAttendanceEvent", // 20 + [API_getAttendanceUsers ] = "getAttendanceUsers", // 21 + [API_sendAttendanceUsers ] = "sendAttendanceUsers", // 22 + [API_createAccount ] = "createAccount", // 23 + [API_getMarks ] = "getMarks", // 24 + [API_getTrivialQuestion ] = "getTrivialQuestion", // 25 + [API_findUsers ] = "findUsers", // 26 + [API_removeAttendanceEvent ] = "removeAttendanceEvent", // 27 + [API_getGames ] = "getGames", // 28 + [API_getMatches ] = "getMatches", // 29 + [API_getMatchStatus ] = "getMatchStatus", // 30 + [API_answerMatchQuestion ] = "answerMatchQuestion", // 31 + [API_getLocation ] = "getLocation", // 32 + [API_sendMyLocation ] = "sendMyLocation", // 33 + [API_getLastLocation ] = "getLastLocation", // 34 + [API_getAvailableRoles ] = "getAvailableRoles", // 35 }; /* Web service roles (they do not match internal swad-core roles) */ @@ -1177,6 +1179,49 @@ int swad__loginBySessionKey (struct soap *soap, "Session identifier does not exist in database"); } +/*****************************************************************************/ +/***************** Get available roles in the current course *****************/ +/*****************************************************************************/ +/* +With this function, SWADroid is able to check if user can see the button to show the MAC address of the nearest WiFi access point +*/ + +int swad__getAvailableRoles (struct soap *soap, + char *wsKey, // input + struct swad__getAvailableRolesOutput *getAvailableRolesOut) // output + { + int ReturnCode; + + /***** Initializations *****/ + API_Set_gSOAP_RuntimeEnv (soap); + Gbl.WebService.Function = API_getAvailableRoles; + + /***** Default value returned on error *****/ + getAvailableRolesOut->roles = 0; // error + + /***** Check web service key *****/ + if ((ReturnCode = API_CheckWSKey (wsKey)) != SOAP_OK) + return ReturnCode; + if (Gbl.Usrs.Me.UsrDat.UsrCod < 0) // Web service key does not exist in database + return soap_receiver_fault (soap, + "Bad web service key", + "Web service key does not exist in database"); + + /***** Get some of my data *****/ + if (!API_GetSomeUsrDataFromUsrCod (&Gbl.Usrs.Me.UsrDat,-1L)) + return soap_receiver_fault (soap, + "Can not get user's data from database", + "User does not exist in database"); + Gbl.Usrs.Me.Logged = true; + Gbl.Usrs.Me.Role.Logged = Gbl.Usrs.Me.UsrDat.Roles.InCurrentCrs.Role; + + /***** Return available roles *****/ + Rol_SetMyRoles (); + getAvailableRolesOut->roles = Gbl.Usrs.Me.Role.Available; + + return SOAP_OK; + } + /*****************************************************************************/ /*********************** Send a new password by email ************************/ /*****************************************************************************/ @@ -1196,7 +1241,7 @@ int swad__getNewPassword (struct soap *soap, API_Set_gSOAP_RuntimeEnv (soap); Gbl.WebService.Function = API_getNewPassword; - /***** Default values returned on error *****/ + /***** Default value returned on error *****/ getNewPasswordOut->success = 0; // error /***** Get plugin code *****/ diff --git a/swad_API.h b/swad_API.h index 32d769a57..b6abd0338 100644 --- a/swad_API.h +++ b/swad_API.h @@ -31,7 +31,7 @@ /***************************** Public constants ******************************/ /*****************************************************************************/ -#define API_NUM_FUNCTIONS 34 +#define API_NUM_FUNCTIONS 35 /*****************************************************************************/ /******************************* Public types ********************************/ @@ -75,6 +75,7 @@ typedef enum API_getLocation = 32, API_sendMyLocation = 33, API_getLastLocation = 34, + API_getAvailableRoles = 35, } API_Function_t; /*****************************************************************************/ diff --git a/swad_changelog.h b/swad_changelog.h index eafeb9c32..d35192193 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -497,9 +497,7 @@ Har Poblar base de datos: En Usuarios > Ubicación aparecería un botón pequeño de "Añadir ubicación". -Se preguntaría a SWAD a través de una función de la API -si el usuario tiene permiso para añadir ubicaciones. -Función API checkPermissionToAdminCenter +Se preguntaría a SWAD a través de una función de la API getAvailableRoles si el usuario tiene permiso para añadir ubicaciones. Si es así, se llamaría a la función: Función API newLocation... @@ -519,14 +517,6 @@ dentro siempre de lo que haya guardado en la tabla de ubicaciones limitada a 12/ ------------------------------------------------------------------------------- -Función API -getAvailableRoles - -Devuelve el campo Gbl.Usr.Role.Available. -Con esta función SWADroid sabe si al usuario se le puede mostrar un botón para ver la MAC más cercana - - - */ // TODO: Sugerencia de Jesús García Miranda. En las preguntas de tipo test de elección única (o un nuevo tipo con un nuevo nombre), @@ -569,6 +559,8 @@ ps2pdf source.ps destination.pdf #define CSS_FILE "swad19.253.css" #define JS_FILE "swad19.254.js" /* +TODO: Juan Miguel Boyero Corral: Este verano ha habido varias personas que han solicitado incluir la funcionalidad del apartado de Actividades en SWADroid. Si lo ves viable podríamos estudiarlo. + TODO: José Martínez Aroza: Si estoy viendo la lista de trabajos de un grupo de estudiantes y pulso F5 (reenviando datos) entonces sale el listado duplicado, y la siguiente vez triplicado, etc. TODO: Raymon Moreno Colina: ¿sera posible colocarle a las preguntas distinta ponderación (puntuación)?; porque como docente a veces uno formula en un examen cuestiones que tienen mayor profundidad que otras y considero que no debería ser la misma puntuación para toda las preguntas. @@ -581,8 +573,7 @@ TODO: Que al generar un examen s TODO: Create module swad_test_result "sudo apt install webp" en Ubuntu, y "yum install libwebp libwebp-tools" en CentOS, para decodificar imágenes Web/ug reportado por Javier Fernández Baldomero. -TODO: Escribir la función getAvailableRoles - + Version 19.260: Aug 23, 2020 New API function getAvailableRoles. (304009 lines) Version 19.259: Aug 22, 2020 Changes in API function answerMatchQuestion. (303969 lines) Version 19.258: Aug 11, 2020 Changes in API functions related to games and matches. (303951 lines) Version 19.257: Jun 24, 2020 New module swad_match_print. (303887 lines)