diff --git a/soap/swad_web_service.h b/soap/swad_web_service.h index 165ede896..75e9e393b 100644 --- a/soap/swad_web_service.h +++ b/soap/swad_web_service.h @@ -441,7 +441,7 @@ struct swad__sendMessageOutput }; /* structs used in getLocations */ -struct swad__location +struct swad__getLocationsOutput { int institutionCode; char *institutionShortName; @@ -457,18 +457,6 @@ struct swad__location char *roomShortName; char *roomFullName; }; -struct swad__locationsArray - { - struct swad__location *__ptr; // pointer to array - int __size; // number of elements pointed to - }; - -/* getLocations */ -struct swad__getLocationsOutput - { - int numLocations; - struct swad__locationsArray locationsArray; - }; /*****************************************************************************/ /*************************** Web service functions ***************************/ diff --git a/swad_API.c b/swad_API.c index cb03bea3b..746c50784 100644 --- a/swad_API.c +++ b/swad_API.c @@ -5902,7 +5902,6 @@ int swad__getLocations (struct soap *soap, MYSQL_RES *mysql_res; MYSQL_ROW row; unsigned NumLocs; - unsigned NumLoc; size_t Length; /***** Initializations *****/ @@ -5953,99 +5952,112 @@ int swad__getLocations (struct soap *soap, " AND rooms.BldCod=buildings.BldCod" " AND buildings.CtrCod=centres.CtrCod" " AND centres.InsCod=institutions.InsCod" - " ORDER BY institutions.FullName," - "centres.FullName," - "buildings.FullName," - "rooms.Floor," - "rooms.FullName", + " ORDER BY rooms.Capacity DESC LIMIT 1", // Get the biggest room MACnum); - getLocationsOut->locationsArray.__size = - getLocationsOut->numLocations = (int) NumLocs; - if (getLocationsOut->numLocations == 0) - getLocationsOut->locationsArray.__ptr = NULL; - else // Matches found + if (NumLocs) // Rooms found { - getLocationsOut->locationsArray.__ptr = soap_malloc (soap, - (getLocationsOut->locationsArray.__size) * - sizeof (*(getLocationsOut->locationsArray.__ptr))); - for (NumLoc = 0; - NumLoc < NumLocs; - NumLoc++) - { - /* Get next location */ - row = mysql_fetch_row (mysql_res); - /* - institutions.InsCod // row[ 0] - institutions.ShortName // row[ 1] - institutions.FullName // row[ 2] - centres.CtrCod // row[ 3] - centres.ShortName // row[ 4] - centres.FullName // row[ 5] - buildings.BldCod // row[ 6] - buildings.ShortName // row[ 7] - buildings.FullName // row[ 8] - rooms.Floor // row[ 9] - rooms.RooCod // row[10] - rooms.ShortName // row[11] - rooms.FullName // row[12] - */ + /* Get next location */ + row = mysql_fetch_row (mysql_res); + /* + institutions.InsCod // row[ 0] + institutions.ShortName // row[ 1] + institutions.FullName // row[ 2] + centres.CtrCod // row[ 3] + centres.ShortName // row[ 4] + centres.FullName // row[ 5] + buildings.BldCod // row[ 6] + buildings.ShortName // row[ 7] + buildings.FullName // row[ 8] + rooms.Floor // row[ 9] + rooms.RooCod // row[10] + rooms.ShortName // row[11] + rooms.FullName // row[12] + */ - /* Get institution code (row[0]) */ - getLocationsOut->locationsArray.__ptr[NumLoc].institutionCode = (int) Str_ConvertStrCodToLongCod (row[0]); + /* Get institution code (row[0]) */ + getLocationsOut->institutionCode = (int) Str_ConvertStrCodToLongCod (row[0]); - /* Get institution short name (row[1]) */ - Length = strlen (row[1]); - getLocationsOut->locationsArray.__ptr[NumLoc].institutionShortName = (char *) soap_malloc (soap,Length + 1); - Str_Copy (getLocationsOut->locationsArray.__ptr[NumLoc].institutionShortName,row[1],Length); + /* Get institution short name (row[1]) */ + Length = strlen (row[1]); + getLocationsOut->institutionShortName = (char *) soap_malloc (soap,Length + 1); + Str_Copy (getLocationsOut->institutionShortName,row[1],Length); - /* Get institution full name (row[2]) */ - Length = strlen (row[2]); - getLocationsOut->locationsArray.__ptr[NumLoc].institutionFullName = (char *) soap_malloc (soap,Length + 1); - Str_Copy (getLocationsOut->locationsArray.__ptr[NumLoc].institutionFullName,row[2],Length); + /* Get institution full name (row[2]) */ + Length = strlen (row[2]); + getLocationsOut->institutionFullName = (char *) soap_malloc (soap,Length + 1); + Str_Copy (getLocationsOut->institutionFullName,row[2],Length); - /* Get center code (row[3]) */ - getLocationsOut->locationsArray.__ptr[NumLoc].centerCode = (int) Str_ConvertStrCodToLongCod (row[3]); + /* Get center code (row[3]) */ + getLocationsOut->centerCode = (int) Str_ConvertStrCodToLongCod (row[3]); - /* Get center short name (row[4]) */ - Length = strlen (row[4]); - getLocationsOut->locationsArray.__ptr[NumLoc].centerShortName = (char *) soap_malloc (soap,Length + 1); - Str_Copy (getLocationsOut->locationsArray.__ptr[NumLoc].centerShortName,row[4],Length); + /* Get center short name (row[4]) */ + Length = strlen (row[4]); + getLocationsOut->centerShortName = (char *) soap_malloc (soap,Length + 1); + Str_Copy (getLocationsOut->centerShortName,row[4],Length); - /* Get center full name (row[5]) */ - Length = strlen (row[5]); - getLocationsOut->locationsArray.__ptr[NumLoc].centerFullName = (char *) soap_malloc (soap,Length + 1); - Str_Copy (getLocationsOut->locationsArray.__ptr[NumLoc].centerFullName,row[5],Length); + /* Get center full name (row[5]) */ + Length = strlen (row[5]); + getLocationsOut->centerFullName = (char *) soap_malloc (soap,Length + 1); + Str_Copy (getLocationsOut->centerFullName,row[5],Length); - /* Get building code (row[6]) */ - getLocationsOut->locationsArray.__ptr[NumLoc].buildingCode = (int) Str_ConvertStrCodToLongCod (row[6]); + /* Get building code (row[6]) */ + getLocationsOut->buildingCode = (int) Str_ConvertStrCodToLongCod (row[6]); - /* Get building short name (row[7]) */ - Length = strlen (row[7]); - getLocationsOut->locationsArray.__ptr[NumLoc].buildingShortName = (char *) soap_malloc (soap,Length + 1); - Str_Copy (getLocationsOut->locationsArray.__ptr[NumLoc].buildingShortName,row[7],Length); + /* Get building short name (row[7]) */ + Length = strlen (row[7]); + getLocationsOut->buildingShortName = (char *) soap_malloc (soap,Length + 1); + Str_Copy (getLocationsOut->buildingShortName,row[7],Length); - /* Get building full name (row[8]) */ - Length = strlen (row[8]); - getLocationsOut->locationsArray.__ptr[NumLoc].buildingFullName = (char *) soap_malloc (soap,Length + 1); - Str_Copy (getLocationsOut->locationsArray.__ptr[NumLoc].buildingFullName,row[8],Length); + /* Get building full name (row[8]) */ + Length = strlen (row[8]); + getLocationsOut->buildingFullName = (char *) soap_malloc (soap,Length + 1); + Str_Copy (getLocationsOut->buildingFullName,row[8],Length); - /* Get floor (row[9]) */ - getLocationsOut->locationsArray.__ptr[NumLoc].floor = (int) Str_ConvertStrCodToLongCod (row[9]); + /* Get floor (row[9]) */ + getLocationsOut->floor = (int) Str_ConvertStrCodToLongCod (row[9]); - /* Get room code (row[10]) */ - getLocationsOut->locationsArray.__ptr[NumLoc].roomCode = (int) Str_ConvertStrCodToLongCod (row[10]); + /* Get room code (row[10]) */ + getLocationsOut->roomCode = (int) Str_ConvertStrCodToLongCod (row[10]); - /* Get room short name (row[11]) */ - Length = strlen (row[11]); - getLocationsOut->locationsArray.__ptr[NumLoc].roomShortName = (char *) soap_malloc (soap,Length + 1); - Str_Copy (getLocationsOut->locationsArray.__ptr[NumLoc].roomShortName,row[11],Length); + /* Get room short name (row[11]) */ + Length = strlen (row[11]); + getLocationsOut->roomShortName = (char *) soap_malloc (soap,Length + 1); + Str_Copy (getLocationsOut->roomShortName,row[11],Length); - /* Get room full name (row[12]) */ - Length = strlen (row[12]); - getLocationsOut->locationsArray.__ptr[NumLoc].roomFullName = (char *) soap_malloc (soap,Length + 1); - Str_Copy (getLocationsOut->locationsArray.__ptr[NumLoc].roomFullName,row[12],Length); - } + /* Get room full name (row[12]) */ + Length = strlen (row[12]); + getLocationsOut->roomFullName = (char *) soap_malloc (soap,Length + 1); + Str_Copy (getLocationsOut->roomFullName,row[12],Length); + } + else + { + /* No room found ==> reset output */ + getLocationsOut->institutionCode = -1; + getLocationsOut->institutionShortName = (char *) soap_malloc (soap,1); + getLocationsOut->institutionShortName[0] = '\0'; + getLocationsOut->institutionFullName = (char *) soap_malloc (soap,1); + getLocationsOut->institutionFullName[0] = '\0'; + + getLocationsOut->centerCode = -1; + getLocationsOut->centerShortName = (char *) soap_malloc (soap,1); + getLocationsOut->centerShortName[0] = '\0'; + getLocationsOut->centerFullName = (char *) soap_malloc (soap,1); + getLocationsOut->centerFullName[0] = '\0'; + + getLocationsOut->buildingCode = -1; + getLocationsOut->buildingShortName = (char *) soap_malloc (soap,1); + getLocationsOut->buildingShortName[0] = '\0'; + getLocationsOut->buildingFullName = (char *) soap_malloc (soap,1); + getLocationsOut->buildingFullName[0] = '\0'; + + getLocationsOut->floor = 0; + + getLocationsOut->roomCode = -1; + getLocationsOut->roomShortName = (char *) soap_malloc (soap,1); + getLocationsOut->roomShortName[0] = '\0'; + getLocationsOut->roomFullName = (char *) soap_malloc (soap,1); + getLocationsOut->roomFullName[0] = '\0'; } /***** Free structure that stores the query result *****/ diff --git a/swad_changelog.h b/swad_changelog.h index 81ef724f5..ff43b5a5d 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -548,11 +548,12 @@ enscript -2 --landscape --color --file-align=2 --highlight --line-numbers -o - * En OpenSWAD: ps2pdf source.ps destination.pdf */ -#define Log_PLATFORM_VERSION "SWAD 19.223.3 (2020-05-11)" +#define Log_PLATFORM_VERSION "SWAD 19.224 (2020-05-11)" #define CSS_FILE "swad19.217.css" #define JS_FILE "swad19.223.js" /* - Version 19.223.4: May 11, 2020 Stored unique/multiple choice questions in exam print. (? lines) + Version 19.224.1: May 11, 2020 Stored unique/multiple choice questions in exam print. (? lines) + Version 19.224: May 11, 2020 API function getLocations returns only one room. (303048 lines) Version 19.223.3: May 11, 2020 Fixed bug in test exam print, reported by Julio Ortega Lopera. (303050 lines) Version 19.223.2: May 11, 2020 Stored T/F answers in exam print. (303034 lines) Version 19.223.1: May 11, 2020 Code refactoring in exam print. Stored float and text answers. (303023 lines)