diff --git a/swad_changelog.h b/swad_changelog.h index ad7a6286c..ec3085940 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -138,13 +138,14 @@ /****************************** Public constants *****************************/ /*****************************************************************************/ -#define Log_PLATFORM_VERSION "SWAD 15.240.3 (2016-07-04)" +#define Log_PLATFORM_VERSION "SWAD 15.240.4 (2016-07-04)" #define CSS_FILE "swad15.229.css" #define JS_FILE "swad15.238.1.js" // Number of lines (includes comments but not blank lines) has been got with the following command: // nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*.h sql/swad*.sql | tail -1 /* + Version 15.240.4: Jul 04, 2015 Fixed bugs in web service, reported by Rubén Martín Hidalgo. (203589 lines) Version 15.240.3: Jul 04, 2015 N.A. year is shown at foot in edition of courses. (? lines) Version 15.240.2: Jul 02, 2015 Fixed bug in edition of courses. (203548 lines) Version 15.240.1: Jul 02, 2015 Fixed bug in web service. (203539 lines) diff --git a/swad_web_service.c b/swad_web_service.c index ac901b738..ee21c1973 100644 --- a/swad_web_service.c +++ b/swad_web_service.c @@ -156,6 +156,36 @@ static const char *Svc_Functions[1+Svc_NUM_FUNCTIONS] = "findUsers", // 25 }; +#define Svc_NUM_ROLES 4 +typedef enum + { + Svc_ROLE_UNKNOWN = 0, // User not logged in + Svc_ROLE__GUEST_ = 1, // User not belonging to any course + Svc_ROLE_STUDENT = 2, // Student in current course + Svc_ROLE_TEACHER = 3, // Teacher in current course + } Svc_Role_t; + +Rol_Role_t Svc_SvcRole_to_RolRole[Svc_NUM_ROLES] = + { + Rol_UNKNOWN, // Svc_ROLE_UNKNOWN + Rol__GUEST_, // Svc_ROLE__GUEST_ + Rol_STUDENT, // Svc_ROLE_STUDENT + Rol_TEACHER, // Svc_ROLE_TEACHER + }; + +Svc_Role_t Svc_RolRole_to_SvcRole[Rol_NUM_ROLES] = + { + Svc_ROLE_UNKNOWN, // Rol_UNKNOWN + Svc_ROLE__GUEST_, // Rol__GUEST_ + Svc_ROLE_UNKNOWN, // Rol_VISITOR + Svc_ROLE_STUDENT, // Rol_STUDENT + Svc_ROLE_TEACHER, // Rol_TEACHER + Svc_ROLE_UNKNOWN, // Rol_DEG_ADM + Svc_ROLE_UNKNOWN, // Rol_CTR_ADM + Svc_ROLE_UNKNOWN, // Rol_INS_ADM + Svc_ROLE_UNKNOWN, // Rol_SYS_ADM + }; + /*****************************************************************************/ /********************************* Data types ********************************/ /*****************************************************************************/ @@ -174,7 +204,6 @@ static int Svc_GenerateNewWSKey (long UsrCod,char *WSKey); static int Svc_RemoveOldWSKeys (void); static int Svc_GetCurrentDegCodFromCurrentCrsCod (void); static int Svc_GetSomeUsrDataFromUsrCod (struct UsrData *UsrDat,long CrsCod); -static int Svc_GetRoleFromInternalRole (Rol_Role_t Role); static int Svc_CheckParamsNewAccount (char *NewNicknameWithArroba, // Input char *NewNicknameWithoutArroba, // Output @@ -600,27 +629,6 @@ static int Svc_GetSomeUsrDataFromUsrCod (struct UsrData *UsrDat,long CrsCod) return SOAP_OK; } -/*****************************************************************************/ -/****** Get the role returned via web service from internal role code ********/ -/*****************************************************************************/ - -static int Svc_GetRoleFromInternalRole (Rol_Role_t Role) - { - switch (Role) - { - case Rol__GUEST_: - case Rol_VISITOR: - return 1; // guest or visitor - case Rol_STUDENT: - return 2; // student - case Rol_TEACHER: - return 3; // teacher - default: - return 0; // unknown - } - return 0; // unknown - } - /*****************************************************************************/ /**************************** Get info of my marks ***************************/ /*****************************************************************************/ @@ -876,7 +884,7 @@ int swad__loginByUserPasswordKey (struct soap *soap, strncpy (loginByUserPasswordKeyOut->userBirthday,Gbl.Usrs.Me.UsrDat.Birthday.YYYYMMDD,4+2+2); loginByUserPasswordKeyOut->userBirthday[4+2+2] = '\0'; - loginByUserPasswordKeyOut->userRole = Svc_GetRoleFromInternalRole (Gbl.Usrs.Me.UsrDat.RoleInCurrentCrsDB); + loginByUserPasswordKeyOut->userRole = Svc_RolRole_to_SvcRole[Gbl.Usrs.Me.UsrDat.RoleInCurrentCrsDB]; } else { @@ -1011,7 +1019,7 @@ int swad__loginBySessionKey (struct soap *soap, strncpy (loginBySessionKeyOut->userBirthday,Gbl.Usrs.Me.UsrDat.Birthday.YYYYMMDD,4+2+2); loginBySessionKeyOut->userBirthday[4+2+2] = '\0'; - loginBySessionKeyOut->userRole = Svc_GetRoleFromInternalRole (Gbl.Usrs.Me.UsrDat.RoleInCurrentCrsDB); + loginBySessionKeyOut->userRole = Svc_RolRole_to_SvcRole[Gbl.Usrs.Me.UsrDat.RoleInCurrentCrsDB]; } else { @@ -1212,7 +1220,7 @@ int swad__getCourses (struct soap *soap, /* Get role (row[3]) */ if (sscanf (row[3],"%u",&Role) != 1) // Role in this course Role = Rol_UNKNOWN; - getCoursesOut->coursesArray.__ptr[NumRow].userRole = Svc_GetRoleFromInternalRole (Role); + getCoursesOut->coursesArray.__ptr[NumRow].userRole = Svc_RolRole_to_SvcRole[Role]; } } @@ -1390,12 +1398,12 @@ int swad__getUsers (struct soap *soap, return ReturnCode; /***** Check requested users' role *****/ - if (userRole < 2 || // Students - userRole > 3) // Teachers + if (userRole != Svc_ROLE_STUDENT && // Students + userRole != Svc_ROLE_TEACHER) // Teachers return soap_sender_fault (Gbl.soap, "Bad requested users' type", "User roles allowed are 2 (students) or 3 (teachers)"); - Role = (Rol_Role_t) userRole; + Role = Svc_SvcRole_to_RolRole[userRole]; /***** Create a list of groups selected *****/ Svc_GetLstGrpsSel (groups); @@ -1469,12 +1477,12 @@ int swad__findUsers (struct soap *soap, } /***** Check requested users' role *****/ - if (userRole < 0 || - userRole > 3) + if (userRole < Svc_ROLE_UNKNOWN || + userRole > Svc_ROLE_TEACHER) return soap_sender_fault (Gbl.soap, "Bad requested users' type", - "User roles allowed are 0 (all),1 (guests), 2 (students) or 3 (teachers)"); - Role = (Rol_Role_t) userRole; + "User roles allowed are 0 (all), 1 (guests), 2 (students) or 3 (teachers)"); + Role = Svc_SvcRole_to_RolRole[userRole]; /***** Query users beloging to course or group from database *****/ strncpy (Gbl.Search.Str,filter,Sch_MAX_LENGTH_STRING_TO_FIND);