Version19.188

This commit is contained in:
acanas 2020-04-15 14:33:31 +02:00
parent 0083dbe54d
commit e682976b35
9 changed files with 420 additions and 376 deletions

View File

@ -1140,7 +1140,6 @@ CREATE TABLE IF NOT EXISTS rooms (
ShortName VARCHAR(511) NOT NULL, ShortName VARCHAR(511) NOT NULL,
FullName VARCHAR(2047) NOT NULL, FullName VARCHAR(2047) NOT NULL,
Capacity INT NOT NULL, Capacity INT NOT NULL,
Location VARCHAR(2047) NOT NULL,
UNIQUE INDEX(RooCod), UNIQUE INDEX(RooCod),
INDEX(CtrCod,BldCod,Floor)); INDEX(CtrCod,BldCod,Floor));
-- --

View File

@ -367,7 +367,6 @@ const struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
[ActRenRooSho ] = {1748,-1,TabUnk,ActSeeRoo , 0, 0, 0,0x3C6, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Roo_RenameRoomShort ,Roo_ContEditAfterChgRoom ,NULL}, [ActRenRooSho ] = {1748,-1,TabUnk,ActSeeRoo , 0, 0, 0,0x3C6, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Roo_RenameRoomShort ,Roo_ContEditAfterChgRoom ,NULL},
[ActRenRooFul ] = {1749,-1,TabUnk,ActSeeRoo , 0, 0, 0,0x3C6, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Roo_RenameRoomFull ,Roo_ContEditAfterChgRoom ,NULL}, [ActRenRooFul ] = {1749,-1,TabUnk,ActSeeRoo , 0, 0, 0,0x3C6, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Roo_RenameRoomFull ,Roo_ContEditAfterChgRoom ,NULL},
[ActChgRooMaxUsr ] = {1750,-1,TabUnk,ActSeeRoo , 0, 0, 0,0x3C6, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Roo_ChangeCapacity ,Roo_ContEditAfterChgRoom ,NULL}, [ActChgRooMaxUsr ] = {1750,-1,TabUnk,ActSeeRoo , 0, 0, 0,0x3C6, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Roo_ChangeCapacity ,Roo_ContEditAfterChgRoom ,NULL},
[ActRenRooLoc ] = {1751,-1,TabUnk,ActSeeRoo , 0, 0, 0,0x3C6, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Roo_ChangeRoomLocation ,Roo_ContEditAfterChgRoom ,NULL},
// TabDeg ****************************************************************** // TabDeg ******************************************************************
// Actions in menu: // Actions in menu:
@ -3499,7 +3498,7 @@ Act_Action_t Act_FromActCodToAction[1 + Act_MAX_ACTION_COD] = // Do not reuse un
ActRenRooSho, // #1748 ActRenRooSho, // #1748
ActRenRooFul, // #1749 ActRenRooFul, // #1749
ActChgRooMaxUsr, // #1750 ActChgRooMaxUsr, // #1750
ActRenRooLoc, // #1751 -1, // #1751 (obsolete action)
ActChgGrpRoo, // #1752 ActChgGrpRoo, // #1752
ActDoActOnSevGst, // #1753 ActDoActOnSevGst, // #1753
ActDoActOnSevStd, // #1754 ActDoActOnSevStd, // #1754

View File

@ -344,34 +344,33 @@ typedef signed int Act_Action_t; // Must be a signed type, because -1 is used to
#define ActRenRooSho (ActRenHld + 45) #define ActRenRooSho (ActRenHld + 45)
#define ActRenRooFul (ActRenHld + 46) #define ActRenRooFul (ActRenHld + 46)
#define ActChgRooMaxUsr (ActRenHld + 47) #define ActChgRooMaxUsr (ActRenHld + 47)
#define ActRenRooLoc (ActRenHld + 48)
/*****************************************************************************/ /*****************************************************************************/
/********************************* Degree tab ********************************/ /********************************* Degree tab ********************************/
/*****************************************************************************/ /*****************************************************************************/
// Actions in menu // Actions in menu
#define ActSeeDegInf (ActRenRooLoc + 1) #define ActSeeDegInf (ActChgRooMaxUsr + 1)
#define ActSeeCrs (ActRenRooLoc + 2) #define ActSeeCrs (ActChgRooMaxUsr + 2)
// Secondary actions // Secondary actions
#define ActPrnDegInf (ActRenRooLoc + 3) #define ActPrnDegInf (ActChgRooMaxUsr + 3)
#define ActChgDegCtrCfg (ActRenRooLoc + 4) #define ActChgDegCtrCfg (ActChgRooMaxUsr + 4)
#define ActRenDegShoCfg (ActRenRooLoc + 5) #define ActRenDegShoCfg (ActChgRooMaxUsr + 5)
#define ActRenDegFulCfg (ActRenRooLoc + 6) #define ActRenDegFulCfg (ActChgRooMaxUsr + 6)
#define ActChgDegWWWCfg (ActRenRooLoc + 7) #define ActChgDegWWWCfg (ActChgRooMaxUsr + 7)
#define ActReqDegLog (ActRenRooLoc + 8) #define ActReqDegLog (ActChgRooMaxUsr + 8)
#define ActRecDegLog (ActRenRooLoc + 9) #define ActRecDegLog (ActChgRooMaxUsr + 9)
#define ActRemDegLog (ActRenRooLoc + 10) #define ActRemDegLog (ActChgRooMaxUsr + 10)
#define ActEdiCrs (ActRenRooLoc + 11) #define ActEdiCrs (ActChgRooMaxUsr + 11)
#define ActReqCrs (ActRenRooLoc + 12) #define ActReqCrs (ActChgRooMaxUsr + 12)
#define ActNewCrs (ActRenRooLoc + 13) #define ActNewCrs (ActChgRooMaxUsr + 13)
#define ActRemCrs (ActRenRooLoc + 14) #define ActRemCrs (ActChgRooMaxUsr + 14)
#define ActChgInsCrsCod (ActRenRooLoc + 15) #define ActChgInsCrsCod (ActChgRooMaxUsr + 15)
#define ActChgCrsYea (ActRenRooLoc + 16) #define ActChgCrsYea (ActChgRooMaxUsr + 16)
#define ActRenCrsSho (ActRenRooLoc + 17) #define ActRenCrsSho (ActChgRooMaxUsr + 17)
#define ActRenCrsFul (ActRenRooLoc + 18) #define ActRenCrsFul (ActChgRooMaxUsr + 18)
#define ActChgCrsSta (ActRenRooLoc + 19) #define ActChgCrsSta (ActChgRooMaxUsr + 19)
/*****************************************************************************/ /*****************************************************************************/
/******************************** Course tab *********************************/ /******************************** Course tab *********************************/

View File

@ -497,7 +497,7 @@ enscript -2 --landscape --color --file-align=2 --highlight --line-numbers -o - *
En OpenSWAD: En OpenSWAD:
ps2pdf source.ps destination.pdf ps2pdf source.ps destination.pdf
*/ */
#define Log_PLATFORM_VERSION "SWAD 19.187 (2020-04-15)" #define Log_PLATFORM_VERSION "SWAD 19.188 (2020-04-15)"
#define CSS_FILE "swad19.187.css" #define CSS_FILE "swad19.187.css"
#define JS_FILE "swad19.172.1.js" #define JS_FILE "swad19.172.1.js"
/* /*
@ -548,6 +548,10 @@ Funci
// TODO: Oresti Baños: cambiar ojos por candados en descriptores para prohibir/permitir y dejar los ojos para poder elegir descriptores // TODO: Oresti Baños: cambiar ojos por candados en descriptores para prohibir/permitir y dejar los ojos para poder elegir descriptores
// TODO: Integrar pull requests con traducciones del alemán del usuario eruedin en GitHub // TODO: Integrar pull requests con traducciones del alemán del usuario eruedin en GitHub
Version 19.188: Apr 15, 2020 Changes in listing and edition of rooms. (287713 lines)
1 change necessary in database:
ALTER TABLE rooms DROP COLUMN Location;
Version 19.187: Apr 15, 2020 New columns in rooms for building and floor. Not finished. (287671 lines) Version 19.187: Apr 15, 2020 New columns in rooms for building and floor. Not finished. (287671 lines)
3 changes necessary in database: 3 changes necessary in database:
ALTER TABLE rooms ADD COLUMN BldCod INT NOT NULL DEFAULT -1 AFTER CtrCod; ALTER TABLE rooms ADD COLUMN BldCod INT NOT NULL DEFAULT -1 AFTER CtrCod;

View File

@ -2364,9 +2364,8 @@ mysql> DESCRIBE rooms;
| ShortName | varchar(511) | NO | | NULL | | | ShortName | varchar(511) | NO | | NULL | |
| FullName | varchar(2047) | NO | | NULL | | | FullName | varchar(2047) | NO | | NULL | |
| Capacity | int(11) | NO | | NULL | | | Capacity | int(11) | NO | | NULL | |
| Location | varchar(2047) | NO | | NULL | |
+-----------+---------------+------+-----+---------+----------------+ +-----------+---------------+------+-----+---------+----------------+
8 rows in set (0.00 sec) 7 rows in set (0.00 sec)
*/ */
DB_CreateTable ("CREATE TABLE IF NOT EXISTS rooms (" DB_CreateTable ("CREATE TABLE IF NOT EXISTS rooms ("
"RooCod INT NOT NULL AUTO_INCREMENT," "RooCod INT NOT NULL AUTO_INCREMENT,"
@ -2376,7 +2375,6 @@ mysql> DESCRIBE rooms;
"ShortName VARCHAR(511) NOT NULL," // Roo_MAX_BYTES_SHRT_NAME "ShortName VARCHAR(511) NOT NULL," // Roo_MAX_BYTES_SHRT_NAME
"FullName VARCHAR(2047) NOT NULL," // Roo_MAX_BYTES_FULL_NAME "FullName VARCHAR(2047) NOT NULL," // Roo_MAX_BYTES_FULL_NAME
"Capacity INT NOT NULL," "Capacity INT NOT NULL,"
"Location VARCHAR(2047) NOT NULL," // Roo_MAX_BYTES_LOCATION
"UNIQUE INDEX(RooCod)," "UNIQUE INDEX(RooCod),"
"INDEX(CtrCod,BldCod,Floor))"); "INDEX(CtrCod,BldCod,Floor))");

View File

@ -67,13 +67,18 @@ static void Roo_PutIconsListingRooms (__attribute__((unused)) void *Args);
static void Roo_PutIconToEditRooms (void); static void Roo_PutIconToEditRooms (void);
static void Roo_PutIconsEditingRooms (__attribute__((unused)) void *Args); static void Roo_PutIconsEditingRooms (__attribute__((unused)) void *Args);
static void Roo_GetDataOfRoomByCod (struct Roo_Room *Room);
static void Roo_GetBldShrtName (struct Roo_Room *Room,const char *BldShrtNameFromDB);
static void Roo_EditRoomsInternal (void); static void Roo_EditRoomsInternal (void);
static void Roo_ListRoomsForEdition (const struct Bld_Buildings *Buildings, static void Roo_ListRoomsForEdition (const struct Bld_Buildings *Buildings,
const struct Roo_Rooms *Rooms); const struct Roo_Rooms *Rooms);
static void Roo_PutSelectorBuilding (long BldCod, static void Roo_PutSelectorBuilding (long BldCod,
const struct Bld_Buildings *Buildings); const struct Bld_Buildings *Buildings,
bool SubmitOnChange);
static void Roo_PutParamRooCod (long RooCod); static void Roo_PutParamRooCod (long RooCod);
static int Roo_GetParamFloor (void);
static void Roo_RenameRoom (Cns_ShrtOrFullName_t ShrtOrFullName); static void Roo_RenameRoom (Cns_ShrtOrFullName_t ShrtOrFullName);
static bool Roo_CheckIfRoomNameExists (const char *FieldName,const char *Name,long RooCod); static bool Roo_CheckIfRoomNameExists (const char *FieldName,const char *Name,long RooCod);
@ -83,7 +88,7 @@ static void Roo_WriteCapacity (char Str[Cns_MAX_DECIMAL_DIGITS_UINT + 1],unsigne
static void Roo_PutFormToCreateRoom (const struct Bld_Buildings *Buildings); static void Roo_PutFormToCreateRoom (const struct Bld_Buildings *Buildings);
static void Roo_PutHeadRooms (void); static void Roo_PutHeadRooms (void);
static void Roo_CreateRoom (struct Roo_Room *Room); static void Roo_CreateRoom (const struct Roo_Room *Room);
static void Roo_EditingRoomConstructor (void); static void Roo_EditingRoomConstructor (void);
static void Roo_EditingRoomDestructor (void); static void Roo_EditingRoomDestructor (void);
@ -161,6 +166,16 @@ void Roo_SeeRooms (void)
{ {
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);
/* Building short name */
HTM_TD_Begin ("class=\"DAT LM %s\"",Gbl.ColorRows[RowEvenOdd]);
HTM_Txt (Rooms.Lst[NumRoom].BldShrtName);
HTM_TD_End ();
/* Floor */
HTM_TD_Begin ("class=\"DAT RM %s\"",Gbl.ColorRows[RowEvenOdd]);
HTM_Int (Rooms.Lst[NumRoom].Floor);
HTM_TD_End ();
/* Short name */ /* Short name */
HTM_TD_Begin ("class=\"DAT LM %s\"",Gbl.ColorRows[RowEvenOdd]); HTM_TD_Begin ("class=\"DAT LM %s\"",Gbl.ColorRows[RowEvenOdd]);
HTM_Txt (Rooms.Lst[NumRoom].ShrtName); HTM_Txt (Rooms.Lst[NumRoom].ShrtName);
@ -177,11 +192,6 @@ void Roo_SeeRooms (void)
HTM_Txt (StrCapacity); HTM_Txt (StrCapacity);
HTM_TD_End (); HTM_TD_End ();
/* Location */
HTM_TD_Begin ("class=\"DAT LM %s\"",Gbl.ColorRows[RowEvenOdd]);
HTM_Txt (Rooms.Lst[NumRoom].Location);
HTM_TD_End ();
HTM_TR_End (); HTM_TR_End ();
} }
@ -329,10 +339,11 @@ void Roo_GetListRooms (struct Roo_Rooms *Rooms,
{ {
static const char *OrderBySubQuery[Roo_NUM_ORDERS] = static const char *OrderBySubQuery[Roo_NUM_ORDERS] =
{ {
[Roo_ORDER_BY_SHRT_NAME] = "ShortName", [Roo_ORDER_BY_BUILDING ] = "buildings.ShortName,rooms.Floor,rooms.ShortName",
[Roo_ORDER_BY_FULL_NAME] = "FullName", [Roo_ORDER_BY_FLOOR ] = "rooms.Floor,buildings.ShortName,rooms.ShortName",
[Roo_ORDER_BY_CAPACITY ] = "Capacity DESC,ShortName", [Roo_ORDER_BY_SHRT_NAME] = "rooms.ShortName,rooms.FullName",
[Roo_ORDER_BY_LOCATION ] = "Location,ShortName", [Roo_ORDER_BY_FULL_NAME] = "rooms.FullName,rooms.ShortName",
[Roo_ORDER_BY_CAPACITY ] = "rooms.Capacity DESC,rooms.ShortName",
}; };
MYSQL_RES *mysql_res; MYSQL_RES *mysql_res;
MYSQL_ROW row; MYSQL_ROW row;
@ -345,15 +356,16 @@ void Roo_GetListRooms (struct Roo_Rooms *Rooms,
{ {
case Roo_ALL_DATA: case Roo_ALL_DATA:
NumRows = DB_QuerySELECT (&mysql_res,"can not get rooms", NumRows = DB_QuerySELECT (&mysql_res,"can not get rooms",
"SELECT RooCod," // row[0] "SELECT rooms.RooCod," // row[0]
"ShortName," // row[1] "rooms.BldCod," // row[1]
"BldCod," // row[2] "buildings.ShortName," // row[2]
"Floor," // row[3] "rooms.Floor," // row[3]
"FullName," // row[4] "rooms.ShortName," // row[4]
"Capacity," // row[5] "rooms.FullName," // row[5]
"Location" // row[6] "rooms.Capacity" // row[6]
" FROM rooms" " FROM rooms LEFT JOIN buildings"
" WHERE CtrCod=%ld" " ON rooms.BldCod=buildings.BldCod"
" WHERE rooms.CtrCod=%ld"
" ORDER BY %s", " ORDER BY %s",
Gbl.Hierarchy.Ctr.CtrCod, Gbl.Hierarchy.Ctr.CtrCod,
OrderBySubQuery[Rooms->SelectedOrder]); OrderBySubQuery[Rooms->SelectedOrder]);
@ -361,12 +373,14 @@ void Roo_GetListRooms (struct Roo_Rooms *Rooms,
case Roo_ONLY_SHRT_NAME: case Roo_ONLY_SHRT_NAME:
default: default:
NumRows = DB_QuerySELECT (&mysql_res,"can not get rooms", NumRows = DB_QuerySELECT (&mysql_res,"can not get rooms",
"SELECT RooCod," // row[0] "SELECT rooms.RooCod," // row[0]
"ShortName" // row[1] "rooms.ShortName" // row[1]
" FROM rooms" " FROM rooms LEFT JOIN buildings"
" WHERE CtrCod=%ld" " ON rooms.BldCod=buildings.BldCod"
" ORDER BY ShortName", " WHERE rooms.CtrCod=%ld"
Gbl.Hierarchy.Ctr.CtrCod); " ORDER BY %s",
Gbl.Hierarchy.Ctr.CtrCod,
OrderBySubQuery[Roo_ORDER_DEFAULT]);
break; break;
} }
@ -395,29 +409,36 @@ void Roo_GetListRooms (struct Roo_Rooms *Rooms,
if ((Room->RooCod = Str_ConvertStrCodToLongCod (row[0])) < 0) if ((Room->RooCod = Str_ConvertStrCodToLongCod (row[0])) < 0)
Lay_ShowErrorAndExit ("Wrong code of room."); Lay_ShowErrorAndExit ("Wrong code of room.");
/* Get the short name of the room (row[1]) */ switch (WhichData)
Str_Copy (Room->ShrtName,row[1], {
Roo_MAX_BYTES_SHRT_NAME); case Roo_ALL_DATA:
/* Get building code (row[1]) */
Room->BldCod = Str_ConvertStrCodToLongCod (row[1]);
if (WhichData == Roo_ALL_DATA) /* Get the short name of the building (row[2]) */
{ Roo_GetBldShrtName (Room,row[2]);
/* Get building code (row[2]) */
Room->BldCod = Str_ConvertStrCodToLongCod (row[2]);
/* Get floor (row[3]) */ /* Get floor (row[3]) */
Room->Floor = Str_ConvertStrCodToLongCod (row[3]); Room->Floor = Str_ConvertStrCodToLongCod (row[3]);
/* Get the full name of the room (row[4]) */ /* Get the short name of the room (row[4]) */
Str_Copy (Room->FullName,row[4], Str_Copy (Room->ShrtName,row[4],
Roo_MAX_BYTES_FULL_NAME); Roo_MAX_BYTES_SHRT_NAME);
/* Get seating capacity in this room (row[5]) */ /* Get the full name of the room (row[5]) */
if (sscanf (row[5],"%u",&Room->Capacity) != 1) Str_Copy (Room->FullName,row[5],
Room->Capacity = Roo_UNLIMITED_CAPACITY; Roo_MAX_BYTES_FULL_NAME);
/* Get the full name of the room (row[6]) */ /* Get seating capacity in this room (row[6]) */
Str_Copy (Room->Location,row[6], if (sscanf (row[6],"%u",&Room->Capacity) != 1)
Roo_MAX_BYTES_LOCATION); Room->Capacity = Roo_UNLIMITED_CAPACITY;
break;
case Roo_ONLY_SHRT_NAME:
default:
/* Get the short name of the room (row[1]) */
Str_Copy (Room->ShrtName,row[1],
Roo_MAX_BYTES_SHRT_NAME);
break;
} }
} }
} }
@ -429,67 +450,85 @@ void Roo_GetListRooms (struct Roo_Rooms *Rooms,
} }
/*****************************************************************************/ /*****************************************************************************/
/***************************** Get room full name ****************************/ /************* Get room data from database using the room code ***************/
/*****************************************************************************/ /*****************************************************************************/
void Roo_GetDataOfRoomByCod (struct Roo_Room *Room) static void Roo_GetDataOfRoomByCod (struct Roo_Room *Room)
{ {
MYSQL_RES *mysql_res; MYSQL_RES *mysql_res;
MYSQL_ROW row; MYSQL_ROW row;
unsigned long NumRows; unsigned long NumRows;
/***** Clear data *****/ /***** Trivial check *****/
Room->ShrtName[0] = '\0'; if (Room->RooCod <= 0)
Room->FullName[0] = '\0'; return;
Room->Capacity = Roo_UNLIMITED_CAPACITY;
Room->Location[0] = '\0';
/***** Check if room code is correct *****/ /***** Get data of a room from database *****/
if (Room->RooCod > 0) NumRows = DB_QuerySELECT (&mysql_res,"can not get data of a room",
"SELECT rooms.BldCod," // row[0]
"buildings.ShortName," // row[1]
"rooms.Floor," // row[2]
"rooms.ShortName," // row[3]
"rooms.FullName," // row[4]
"rooms.Capacity" // row[5]
" FROM rooms LEFT JOIN buildings"
" ON rooms.BldCod=buildings.BldCod"
" WHERE rooms.RooCod=%ld",
Room->RooCod);
/***** Count number of rows in result *****/
if (NumRows) // Room found...
{ {
/***** Get data of a room from database *****/ /* Get row */
NumRows = DB_QuerySELECT (&mysql_res,"can not get data of a room", row = mysql_fetch_row (mysql_res);
"SELECT BldCod," // row[0]
"Floor," // row[1]
"ShortName," // row[2]
"FullName," // row[3]
"Capacity," // row[4]
"Location" // row[5]
" FROM rooms"
" WHERE RooCod=%ld",
Room->RooCod);
/***** Count number of rows in result *****/ /* Get building code (row[0]) */
if (NumRows) // Room found... Room->BldCod = Str_ConvertStrCodToLongCod (row[0]);
{
/* Get row */
row = mysql_fetch_row (mysql_res);
/* Get building code (row[0]) */ /* Get the short name of the building (row[1]) */
Room->BldCod = Str_ConvertStrCodToLongCod (row[0]); Roo_GetBldShrtName (Room,row[1]);
/* Get floor (row[1]) */ /* Get floor (row[2]) */
Room->Floor = Str_ConvertStrCodToLongCod (row[1]); Room->Floor = Str_ConvertStrCodToLongCod (row[2]);
/* Get the short name of the room (row[2]) */ /* Get the short name of the room (row[3]) */
Str_Copy (Room->ShrtName,row[2], Str_Copy (Room->ShrtName,row[3],
Roo_MAX_BYTES_SHRT_NAME); Roo_MAX_BYTES_SHRT_NAME);
/* Get the full name of the room (row[3]) */ /* Get the full name of the room (row[4]) */
Str_Copy (Room->FullName,row[3], Str_Copy (Room->FullName,row[4],
Roo_MAX_BYTES_FULL_NAME); Roo_MAX_BYTES_FULL_NAME);
/* Get seating capacity in this room (row[4]) */ /* Get seating capacity in this room (row[5]) */
if (sscanf (row[4],"%u",&Room->Capacity) != 1) if (sscanf (row[5],"%u",&Room->Capacity) != 1)
Room->Capacity = Roo_UNLIMITED_CAPACITY; Room->Capacity = Roo_UNLIMITED_CAPACITY;
}
/* Get the location of the room (row[5]) */ /***** Free structure that stores the query result *****/
Str_Copy (Room->Location,row[5], DB_FreeMySQLResult (&mysql_res);
Roo_MAX_BYTES_LOCATION); }
}
/***** Free structure that stores the query result *****/ /*****************************************************************************/
DB_FreeMySQLResult (&mysql_res); /****************** Get building short name from database ********************/
/*****************************************************************************/
static void Roo_GetBldShrtName (struct Roo_Room *Room,const char *BldShrtNameFromDB)
{
extern const char *Txt_No_assigned_building;
extern const char *Txt_Another_building;
if (Room->BldCod < 0)
Str_Copy (Room->BldShrtName,Txt_No_assigned_building,
Bld_MAX_BYTES_SHRT_NAME);
else if (Room->BldCod == 0)
Str_Copy (Room->BldShrtName,Txt_Another_building,
Bld_MAX_BYTES_SHRT_NAME);
else // Room->BldCod > 0
{
Room->BldShrtName[0] = '\0';
if (BldShrtNameFromDB)
Str_Copy (Room->BldShrtName,BldShrtNameFromDB,
Bld_MAX_BYTES_SHRT_NAME);
} }
} }
@ -549,7 +588,8 @@ static void Roo_ListRoomsForEdition (const struct Bld_Buildings *Buildings,
HTM_TD_Begin ("class=\"CM\""); HTM_TD_Begin ("class=\"CM\"");
Frm_StartForm (ActChgRooBld); Frm_StartForm (ActChgRooBld);
Roo_PutParamRooCod (Room->RooCod); Roo_PutParamRooCod (Room->RooCod);
Roo_PutSelectorBuilding (Room->BldCod,Buildings); Roo_PutSelectorBuilding (Room->BldCod,Buildings,
true); // Submit on change
Frm_EndForm (); Frm_EndForm ();
HTM_TD_End (); HTM_TD_End ();
@ -590,15 +630,6 @@ static void Roo_ListRoomsForEdition (const struct Bld_Buildings *Buildings,
Frm_EndForm (); Frm_EndForm ();
HTM_TD_End (); HTM_TD_End ();
/* Room location */
HTM_TD_Begin ("class=\"LM\"");
Frm_StartForm (ActRenRooLoc);
Roo_PutParamRooCod (Room->RooCod);
HTM_INPUT_TEXT ("Location",Roo_MAX_CHARS_LOCATION,Room->Location,true,
"size=\"15\" class=\"INPUT_FULL_NAME\"");
Frm_EndForm ();
HTM_TD_End ();
HTM_TR_End (); HTM_TR_End ();
} }
@ -611,14 +642,15 @@ static void Roo_ListRoomsForEdition (const struct Bld_Buildings *Buildings,
/*****************************************************************************/ /*****************************************************************************/
static void Roo_PutSelectorBuilding (long BldCod, static void Roo_PutSelectorBuilding (long BldCod,
const struct Bld_Buildings *Buildings) const struct Bld_Buildings *Buildings,
bool SubmitOnChange)
{ {
extern const char *Txt_No_assigned_building; extern const char *Txt_No_assigned_building;
extern const char *Txt_Another_building; extern const char *Txt_Another_building;
unsigned NumBld; unsigned NumBld;
/***** Begin selector *****/ /***** Begin selector *****/
HTM_SELECT_Begin (true, HTM_SELECT_Begin (SubmitOnChange,
"name=\"BldCod\" class=\"BLD_SEL\""); "name=\"BldCod\" class=\"BLD_SEL\"");
/***** Option for no assigned building *****/ /***** Option for no assigned building *****/
@ -662,6 +694,16 @@ long Roo_GetParamRooCod (void)
return Par_GetParToLong ("RooCod"); return Par_GetParToLong ("RooCod");
} }
/*****************************************************************************/
/************************** Get parameter with floor *************************/
/*****************************************************************************/
static int Roo_GetParamFloor (void)
{
/***** Get code of room *****/
return (int) Par_GetParToLong ("Floor");
}
/*****************************************************************************/ /*****************************************************************************/
/******************************** Remove a room ******************************/ /******************************** Remove a room ******************************/
/*****************************************************************************/ /*****************************************************************************/
@ -716,8 +758,8 @@ void Roo_RemoveAllRoomsInCtr (long CtrCod)
void Roo_ChangeBuilding (void) void Roo_ChangeBuilding (void)
{ {
extern const char *Txt_The_capacity_of_room_X_has_not_changed; extern const char *Txt_The_building_of_room_X_has_not_changed;
extern const char *Txt_The_capacity_of_room_X_is_now_Y; extern const char *Txt_The_building_of_room_X_is_now_Y;
long NewBldCod; long NewBldCod;
/***** Room constructor *****/ /***** Room constructor *****/
@ -729,7 +771,7 @@ void Roo_ChangeBuilding (void)
Lay_ShowErrorAndExit ("Code of room is missing."); Lay_ShowErrorAndExit ("Code of room is missing.");
/* Get the building of the room */ /* Get the building of the room */
NewBldCod = Par_GetParToLong ("BldCod"); NewBldCod = Bld_GetParamBldCod ();
/***** Get data of the room from database *****/ /***** Get data of the room from database *****/
Roo_GetDataOfRoomByCod (Roo_EditingRoom); Roo_GetDataOfRoomByCod (Roo_EditingRoom);
@ -742,7 +784,7 @@ void Roo_ChangeBuilding (void)
if (NewBldCod == Roo_EditingRoom->BldCod) if (NewBldCod == Roo_EditingRoom->BldCod)
/***** Message to show no changes made *****/ /***** Message to show no changes made *****/
Ale_CreateAlert (Ale_INFO,NULL, Ale_CreateAlert (Ale_INFO,NULL,
Txt_The_capacity_of_room_X_has_not_changed, // TODO: Change Txt_The_building_of_room_X_has_not_changed,
Roo_EditingRoom->FullName); Roo_EditingRoom->FullName);
else else
{ {
@ -750,12 +792,14 @@ void Roo_ChangeBuilding (void)
DB_QueryUPDATE ("can not update the capacity of a room", DB_QueryUPDATE ("can not update the capacity of a room",
"UPDATE rooms SET BldCod=%ld WHERE RooCod=%ld", "UPDATE rooms SET BldCod=%ld WHERE RooCod=%ld",
NewBldCod,Roo_EditingRoom->RooCod); NewBldCod,Roo_EditingRoom->RooCod);
Roo_EditingRoom->BldCod = NewBldCod;
/***** Get updated data of the room from database *****/
Roo_GetDataOfRoomByCod (Roo_EditingRoom);
/***** Message to show the change made *****/ /***** Message to show the change made *****/
Ale_CreateAlert (Ale_SUCCESS,NULL, Ale_CreateAlert (Ale_SUCCESS,NULL,
Txt_The_capacity_of_room_X_is_now_Y, // TODO: Change Txt_The_building_of_room_X_is_now_Y,
Roo_EditingRoom->FullName,0); Roo_EditingRoom->FullName,Roo_EditingRoom->BldShrtName);
} }
} }
@ -765,8 +809,8 @@ void Roo_ChangeBuilding (void)
void Roo_ChangeFloor (void) void Roo_ChangeFloor (void)
{ {
extern const char *Txt_The_capacity_of_room_X_has_not_changed; extern const char *Txt_The_floor_of_room_X_has_not_changed;
extern const char *Txt_The_capacity_of_room_X_is_now_Y; extern const char *Txt_The_floor_of_room_X_is_now_Y;
int NewFloor; int NewFloor;
/***** Room constructor *****/ /***** Room constructor *****/
@ -778,7 +822,7 @@ void Roo_ChangeFloor (void)
Lay_ShowErrorAndExit ("Code of room is missing."); Lay_ShowErrorAndExit ("Code of room is missing.");
/* Get the floor of the room */ /* Get the floor of the room */
NewFloor = Par_GetParToLong ("Floor"); NewFloor = Roo_GetParamFloor ();
/***** Get data of the room from database *****/ /***** Get data of the room from database *****/
Roo_GetDataOfRoomByCod (Roo_EditingRoom); Roo_GetDataOfRoomByCod (Roo_EditingRoom);
@ -788,7 +832,7 @@ void Roo_ChangeFloor (void)
if (NewFloor == Roo_EditingRoom->Floor) if (NewFloor == Roo_EditingRoom->Floor)
/***** Message to show no changes made *****/ /***** Message to show no changes made *****/
Ale_CreateAlert (Ale_INFO,NULL, Ale_CreateAlert (Ale_INFO,NULL,
Txt_The_capacity_of_room_X_has_not_changed, // TODO: Change Txt_The_floor_of_room_X_has_not_changed,
Roo_EditingRoom->FullName); Roo_EditingRoom->FullName);
else else
{ {
@ -796,12 +840,14 @@ void Roo_ChangeFloor (void)
DB_QueryUPDATE ("can not update the capacity of a room", DB_QueryUPDATE ("can not update the capacity of a room",
"UPDATE rooms SET Floor=%d WHERE RooCod=%ld", "UPDATE rooms SET Floor=%d WHERE RooCod=%ld",
NewFloor,Roo_EditingRoom->RooCod); NewFloor,Roo_EditingRoom->RooCod);
Roo_EditingRoom->Floor = NewFloor;
/***** Get updated data of the room from database *****/
Roo_GetDataOfRoomByCod (Roo_EditingRoom);
/***** Message to show the change made *****/ /***** Message to show the change made *****/
Ale_CreateAlert (Ale_SUCCESS,NULL, Ale_CreateAlert (Ale_SUCCESS,NULL,
Txt_The_capacity_of_room_X_is_now_Y, // TODO: Change Txt_The_floor_of_room_X_is_now_Y,
Roo_EditingRoom->FullName,0); Roo_EditingRoom->FullName,Roo_EditingRoom->Floor);
} }
} }
@ -1007,50 +1053,6 @@ static void Roo_WriteCapacity (char Str[Cns_MAX_DECIMAL_DIGITS_UINT + 1],unsigne
Str[0] = '\0'; Str[0] = '\0';
} }
/*****************************************************************************/
/********************** Change the location of a room ************************/
/*****************************************************************************/
void Roo_ChangeRoomLocation (void)
{
extern const char *Txt_The_location_of_the_room_X_has_changed_to_Y;
extern const char *Txt_The_location_of_the_room_X_has_not_changed;
char NewLocation[Roo_MAX_BYTES_FULL_NAME + 1];
/***** Room constructor *****/
Roo_EditingRoomConstructor ();
/***** Get parameters from form *****/
/* Get the code of the room */
if ((Roo_EditingRoom->RooCod = Roo_GetParamRooCod ()) == -1L)
Lay_ShowErrorAndExit ("Code of room is missing.");
/* Get the new location for the room */
Par_GetParToText ("Location",NewLocation,Roo_MAX_BYTES_LOCATION);
/***** Get from the database the old location of the room *****/
Roo_GetDataOfRoomByCod (Roo_EditingRoom);
/***** Check if old and new locations are the same
(this happens when return is pressed without changes) *****/
if (strcmp (NewLocation,Roo_EditingRoom->Location)) // Different locations
{
/* Update the table changing old name by new name */
Roo_UpdateRoomNameDB (Roo_EditingRoom->RooCod,"Location",NewLocation);
Str_Copy (Roo_EditingRoom->Location,NewLocation,
Roo_MAX_BYTES_LOCATION);
/* Write message to show the change made */
Ale_CreateAlert (Ale_SUCCESS,NULL,
Txt_The_location_of_the_room_X_has_changed_to_Y,
Roo_EditingRoom->FullName,NewLocation);
}
else // The same location
Ale_CreateAlert (Ale_INFO,NULL,
Txt_The_location_of_the_room_X_has_not_changed,
Roo_EditingRoom->FullName);
}
/*****************************************************************************/ /*****************************************************************************/
/********* Show alerts after changing a room and continue editing ************/ /********* Show alerts after changing a room and continue editing ************/
/*****************************************************************************/ /*****************************************************************************/
@ -1100,7 +1102,8 @@ static void Roo_PutFormToCreateRoom (const struct Bld_Buildings *Buildings)
/***** Building *****/ /***** Building *****/
HTM_TD_Begin ("class=\"LM\""); HTM_TD_Begin ("class=\"LM\"");
Roo_PutSelectorBuilding (Roo_EditingRoom->BldCod,Buildings); Roo_PutSelectorBuilding (Roo_EditingRoom->BldCod,Buildings,
false); // Don't submit on change
HTM_TD_End (); HTM_TD_End ();
/***** Floor *****/ /***** Floor *****/
@ -1128,12 +1131,6 @@ static void Roo_PutFormToCreateRoom (const struct Bld_Buildings *Buildings)
"size=\"3\""); "size=\"3\"");
HTM_TD_End (); HTM_TD_End ();
/***** Room location *****/
HTM_TD_Begin ("class=\"LM\"");
HTM_INPUT_TEXT ("Location",Roo_MAX_CHARS_LOCATION,Roo_EditingRoom->Location,false,
"size=\"15\" class=\"INPUT_FULL_NAME\"");
HTM_TD_End ();
HTM_TR_End (); HTM_TR_End ();
/***** End table, send button and end box *****/ /***** End table, send button and end box *****/
@ -1155,7 +1152,6 @@ static void Roo_PutHeadRooms (void)
extern const char *Txt_Short_name; extern const char *Txt_Short_name;
extern const char *Txt_Full_name; extern const char *Txt_Full_name;
extern const char *Txt_Capacity_OF_A_ROOM; extern const char *Txt_Capacity_OF_A_ROOM;
extern const char *Txt_Location;
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);
@ -1166,7 +1162,6 @@ static void Roo_PutHeadRooms (void)
HTM_TH (1,1,"LM",Txt_Short_name); HTM_TH (1,1,"LM",Txt_Short_name);
HTM_TH (1,1,"LM",Txt_Full_name); HTM_TH (1,1,"LM",Txt_Full_name);
HTM_TH (1,1,"LM",Txt_Capacity_OF_A_ROOM); HTM_TH (1,1,"LM",Txt_Capacity_OF_A_ROOM);
HTM_TH (1,1,"LM",Txt_Location);
HTM_TR_End (); HTM_TR_End ();
} }
@ -1185,6 +1180,12 @@ void Roo_RecFormNewRoom (void)
Roo_EditingRoomConstructor (); Roo_EditingRoomConstructor ();
/***** Get parameters from form *****/ /***** Get parameters from form *****/
/* Get room building */
Roo_EditingRoom->BldCod = Bld_GetParamBldCod ();
/* Get room floor */
Roo_EditingRoom->Floor = Roo_GetParamFloor ();
/* Get room short name */ /* Get room short name */
Par_GetParToText ("ShortName",Roo_EditingRoom->ShrtName,Roo_MAX_BYTES_SHRT_NAME); Par_GetParToText ("ShortName",Roo_EditingRoom->ShrtName,Roo_MAX_BYTES_SHRT_NAME);
@ -1193,13 +1194,10 @@ void Roo_RecFormNewRoom (void)
/* Get seating capacity */ /* Get seating capacity */
Roo_EditingRoom->Capacity = (unsigned) Roo_EditingRoom->Capacity = (unsigned)
Par_GetParToUnsignedLong ("Capacity", Par_GetParToUnsignedLong ("Capacity",
0, 0,
Roo_MAX_CAPACITY, Roo_MAX_CAPACITY,
Roo_UNLIMITED_CAPACITY); Roo_UNLIMITED_CAPACITY);
/* Get room location */
Par_GetParToText ("Location",Roo_EditingRoom->Location,Roo_MAX_BYTES_LOCATION);
if (Roo_EditingRoom->ShrtName[0] && if (Roo_EditingRoom->ShrtName[0] &&
Roo_EditingRoom->FullName[0]) // If there's a room name Roo_EditingRoom->FullName[0]) // If there's a room name
@ -1230,16 +1228,20 @@ void Roo_RecFormNewRoom (void)
/**************************** Create a new room ******************************/ /**************************** Create a new room ******************************/
/*****************************************************************************/ /*****************************************************************************/
static void Roo_CreateRoom (struct Roo_Room *Room) static void Roo_CreateRoom (const struct Roo_Room *Room)
{ {
/***** Create a new room *****/ /***** Create a new room *****/
DB_QueryINSERT ("can not create room", DB_QueryINSERT ("can not create room",
"INSERT INTO rooms" "INSERT INTO rooms"
" (CtrCod,ShortName,FullName,Capacity,Location)" " (CtrCod,BldCod,Floor,ShortName,FullName,Capacity)"
" VALUES" " VALUES"
" (%ld,'%s','%s',%u,'%s')", " (%ld,%ld,%d,'%s','%s',%u)",
Gbl.Hierarchy.Ctr.CtrCod, Gbl.Hierarchy.Ctr.CtrCod,
Room->ShrtName,Room->FullName,Room->Capacity,Room->Location); Room->BldCod,
Room->Floor,
Room->ShrtName,
Room->FullName,
Room->Capacity);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -1257,14 +1259,14 @@ static void Roo_EditingRoomConstructor (void)
Lay_ShowErrorAndExit ("Error allocating memory for room."); Lay_ShowErrorAndExit ("Error allocating memory for room.");
/***** Reset room *****/ /***** Reset room *****/
Roo_EditingRoom->RooCod = -1L; Roo_EditingRoom->RooCod = -1L;
Roo_EditingRoom->CtrCod = -1L; Roo_EditingRoom->CtrCod = -1L;
Roo_EditingRoom->BldCod = -1L; Roo_EditingRoom->BldCod = -1L;
Roo_EditingRoom->Floor = 0; Roo_EditingRoom->BldShrtName[0] = '\0';
Roo_EditingRoom->ShrtName[0] = '\0'; Roo_EditingRoom->Floor = 0;
Roo_EditingRoom->FullName[0] = '\0'; Roo_EditingRoom->ShrtName[0] = '\0';
Roo_EditingRoom->Capacity = Roo_UNLIMITED_CAPACITY; Roo_EditingRoom->FullName[0] = '\0';
Roo_EditingRoom->Location[0] = '\0'; Roo_EditingRoom->Capacity = Roo_UNLIMITED_CAPACITY;
} }
static void Roo_EditingRoomDestructor (void) static void Roo_EditingRoomDestructor (void)

View File

@ -27,6 +27,7 @@
/********************************** Headers **********************************/ /********************************** Headers **********************************/
/*****************************************************************************/ /*****************************************************************************/
#include "swad_building.h"
#include "swad_string.h" #include "swad_string.h"
/*****************************************************************************/ /*****************************************************************************/
@ -43,30 +44,29 @@
#define Roo_UNLIMITED_CAPACITY INT_MAX // This number can be stored in database as an integer... #define Roo_UNLIMITED_CAPACITY INT_MAX // This number can be stored in database as an integer...
// ...and means that a room has no limited capacity // ...and means that a room has no limited capacity
#define Roo_MAX_CHARS_LOCATION (128 - 1) // 127
#define Roo_MAX_BYTES_LOCATION ((Roo_MAX_CHARS_LOCATION + 1) * Str_MAX_BYTES_PER_CHAR - 1) // 2047
struct Roo_Room struct Roo_Room
{ {
long RooCod; long RooCod; // Room code
long CtrCod; long CtrCod; // Centre code
long BldCod; long BldCod; // Building code
int Floor; char BldShrtName[Bld_MAX_BYTES_SHRT_NAME + 1]; // Building short name
char ShrtName[Roo_MAX_BYTES_SHRT_NAME + 1]; int Floor; // Room floor
char FullName[Roo_MAX_BYTES_FULL_NAME + 1]; char ShrtName[Roo_MAX_BYTES_SHRT_NAME + 1]; // Room short name
unsigned Capacity; // Seating capacity (maximum number of people that fit in the room) char FullName[Roo_MAX_BYTES_FULL_NAME + 1]; // Room full name
char Location[Roo_MAX_BYTES_LOCATION + 1]; // Examples: Ground floor, first floor, basement unsigned Capacity; // Room seating capacity
// (maximum people who fit in the room)
}; };
#define Roo_NUM_ORDERS 4 #define Roo_NUM_ORDERS 5
typedef enum typedef enum
{ {
Roo_ORDER_BY_SHRT_NAME = 0, Roo_ORDER_BY_BUILDING = 0,
Roo_ORDER_BY_FULL_NAME = 1, Roo_ORDER_BY_FLOOR = 1,
Roo_ORDER_BY_CAPACITY = 2, Roo_ORDER_BY_SHRT_NAME = 2,
Roo_ORDER_BY_LOCATION = 3, Roo_ORDER_BY_FULL_NAME = 3,
Roo_ORDER_BY_CAPACITY = 4,
} Roo_Order_t; } Roo_Order_t;
#define Roo_ORDER_DEFAULT Roo_ORDER_BY_LOCATION #define Roo_ORDER_DEFAULT Roo_ORDER_BY_BUILDING
/***** Get all data or only short name *****/ /***** Get all data or only short name *****/
typedef enum typedef enum
@ -97,7 +97,6 @@ void Roo_FreeListRooms (struct Roo_Rooms *Rooms);
void Roo_GetListRoomsInThisCtr (void); void Roo_GetListRoomsInThisCtr (void);
void Roo_GetDataOfRoomByCod (struct Roo_Room *Roo);
long Roo_GetParamRooCod (void); long Roo_GetParamRooCod (void);
void Roo_RemoveRoom (void); void Roo_RemoveRoom (void);
@ -107,7 +106,6 @@ void Roo_ChangeFloor (void);
void Roo_RenameRoomShort (void); void Roo_RenameRoomShort (void);
void Roo_RenameRoomFull (void); void Roo_RenameRoomFull (void);
void Roo_ChangeCapacity (void); void Roo_ChangeCapacity (void);
void Roo_ChangeRoomLocation (void);
void Roo_ContEditAfterChgRoom (void); void Roo_ContEditAfterChgRoom (void);
void Roo_RecFormNewRoom (void); void Roo_RecFormNewRoom (void);

View File

@ -1633,25 +1633,25 @@ const char *Txt_Announcements_of_exams =
"Chamadas para exames"; "Chamadas para exames";
#endif #endif
const char *Txt_Another_building = // TODO: Translate const char *Txt_Another_building =
#if L==1 // ca #if L==1 // ca
"Una altra sala"; "Un altre edifici";
#elif L==2 // de #elif L==2 // de
"Eine weitere Raum"; "Eine weitere Geb&auml;ude";
#elif L==3 // en #elif L==3 // en
"Another room"; "Another building";
#elif L==4 // es #elif L==4 // es
"Otra sala"; "Otro edificio";
#elif L==5 // fr #elif L==5 // fr
"Un autre salle"; "Un autre b&acirc;timent";
#elif L==6 // gn #elif L==6 // gn
"Otra sala"; // Okoteve traducción "Otro edificio"; // Okoteve traducción
#elif L==7 // it #elif L==7 // it
"Un'altra aula"; "Un altro edificio";
#elif L==8 // pl #elif L==8 // pl
"Kolejna klasa"; "Kolejna budynek";
#elif L==9 // pt #elif L==9 // pt
"Outra sala"; "Outro edif&iacute;cio";
#endif #endif
const char *Txt_Another_centre = const char *Txt_Another_centre =
@ -1685,7 +1685,7 @@ const char *Txt_Another_room =
#elif L==4 // es #elif L==4 // es
"Otra sala"; "Otra sala";
#elif L==5 // fr #elif L==5 // fr
"Un autre salle"; "Une autre salle";
#elif L==6 // gn #elif L==6 // gn
"Otra sala"; // Okoteve traducción "Otra sala"; // Okoteve traducción
#elif L==7 // it #elif L==7 // it
@ -25344,25 +25344,25 @@ const char *Txt_No_announcements_of_exams_of_X = // Warning: it is very importan
"N&atilde;o chamadas para exame de <strong>%s</strong>."; "N&atilde;o chamadas para exame de <strong>%s</strong>.";
#endif #endif
const char *Txt_No_assigned_building = // TODO: Translate const char *Txt_No_assigned_building =
#if L==1 // ca #if L==1 // ca
"Sense sala assignada"; "Sense edifici assignat";
#elif L==2 // de #elif L==2 // de
"Kein zugewiesenes Raum"; "Kein zugewiesenes Geb&auml;ude";
#elif L==3 // en #elif L==3 // en
"No assigned room"; "No assigned building";
#elif L==4 // es #elif L==4 // es
"Sin sala asignada"; "Sin edificio asignado";
#elif L==5 // fr #elif L==5 // fr
"Aucune salle assign&eacute;e"; "Aucun b&acirc;timent assign&eacute;";
#elif L==6 // gn #elif L==6 // gn
"Sin sala asignada"; // Okoteve traducción "Sin edificio asignado"; // Okoteve traducción
#elif L==7 // it #elif L==7 // it
"Nessuna aula assegnata"; "Nessun edificio assegnato";
#elif L==8 // pl #elif L==8 // pl
"Brak przydzielonej sali lekcyjnej"; "Brak przydzielonej budynek lekcyjnej";
#elif L==9 // pt #elif L==9 // pt
"Nenhuma sala atribu&iacute;da"; "Nenhum edif&iacute;cio atribu&iacute;do";
#endif #endif
const char *Txt_No_assigned_room = const char *Txt_No_assigned_room =
@ -38161,6 +38161,48 @@ const char *Txt_Room_X_removed = // Warning: it is very important to include %s
const char *Txt_ROOMS_HELP_ORDER[Roo_NUM_ORDERS] = const char *Txt_ROOMS_HELP_ORDER[Roo_NUM_ORDERS] =
{ {
[Roo_ORDER_BY_BUILDING] =
#if L==1 // ca
"Ordenar per edifici"
#elif L==2 // de
"Nach Geb&auml;ude sortieren"
#elif L==3 // en
"Sort by building"
#elif L==4 // es
"Ordenar por edificio"
#elif L==5 // fr
"Trier par b&acirc;timent"
#elif L==6 // gn
"Ordenar por edificio" // Okoteve traducción
#elif L==7 // it
"Ordina per edificio"
#elif L==8 // pl
"Sortuj wed&lstrok;ug budynek"
#elif L==9 // pt
"Classificar por edif&iacute;cio"
#endif
,
[Roo_ORDER_BY_FLOOR] =
#if L==1 // ca
"Ordenar per planta"
#elif L==2 // de
"Nach Stock sortieren"
#elif L==3 // en
"Sort by floor"
#elif L==4 // es
"Ordenar por planta"
#elif L==5 // fr
"Trier par &eacute;tage"
#elif L==6 // gn
"Ordenar por planta" // Okoteve traducción
#elif L==7 // it
"Ordina per piano"
#elif L==8 // pl
"Sortuj wed&lstrok;ug pi&eogon;trze"
#elif L==9 // pt
"Classificar por andar"
#endif
,
[Roo_ORDER_BY_SHRT_NAME] = [Roo_ORDER_BY_SHRT_NAME] =
#if L==1 // ca #if L==1 // ca
"Ordenar per nom breu" "Ordenar per nom breu"
@ -38222,32 +38264,53 @@ const char *Txt_ROOMS_HELP_ORDER[Roo_NUM_ORDERS] =
"Sortuj wed&lsgtrok;ug pojemno&sacute;ci miejsc" "Sortuj wed&lsgtrok;ug pojemno&sacute;ci miejsc"
#elif L==9 // pt #elif L==9 // pt
"Ordenar por capacidade" "Ordenar por capacidade"
#endif
,
[Roo_ORDER_BY_LOCATION] =
#if L==1 // ca
"Ordenar per ubicaci&oacute;"
#elif L==2 // de
"Nach Standort sortieren"
#elif L==3 // en
"Sort by location"
#elif L==4 // es
"Ordenar por ubicaci&oacute;n"
#elif L==5 // fr
"Trier par emplacement"
#elif L==6 // gn
"Ordenar por ubicaci&oacute;n" // Okoteve traducción
#elif L==7 // it
"Ordina per posizione"
#elif L==8 // pl
"Sortuj wed&lstrok;ug lokacja"
#elif L==9 // pt
"Classificar por localiza&ccedil;&atilde;o"
#endif #endif
}; };
const char *Txt_ROOMS_ORDER[Roo_NUM_ORDERS] = const char *Txt_ROOMS_ORDER[Roo_NUM_ORDERS] =
{ {
[Roo_ORDER_BY_BUILDING] =
#if L==1 // ca
"Edifici"
#elif L==2 // de
"Geb&auml;ude"
#elif L==3 // en
"Building"
#elif L==4 // es
"Edificio"
#elif L==5 // fr
"B&acirc;timent"
#elif L==6 // gn
"Edificio" // Okoteve traducción
#elif L==7 // it
"Edificio"
#elif L==8 // pl
"Budynek"
#elif L==9 // pt
"Edif&iacute;cio"
#endif
,
[Roo_ORDER_BY_FLOOR] =
#if L==1 // ca
"Planta"
#elif L==2 // de
"Stock"
#elif L==3 // en
"Floor"
#elif L==4 // es
"Planta"
#elif L==5 // fr
"&Eacute;tage"
#elif L==6 // gn
"Planta" // Okoteve traducción
#elif L==7 // it
"Piano"
#elif L==8 // pl
"Pi&eogon;trze"
#elif L==9 // pt
"Andar"
#endif
,
[Roo_ORDER_BY_SHRT_NAME] = [Roo_ORDER_BY_SHRT_NAME] =
#if L==1 // ca #if L==1 // ca
"Nom breu" "Nom breu"
@ -38309,27 +38372,6 @@ const char *Txt_ROOMS_ORDER[Roo_NUM_ORDERS] =
"Pojemno&sacute;&cacute;" "Pojemno&sacute;&cacute;"
#elif L==9 // pt #elif L==9 // pt
"Capacidade" "Capacidade"
#endif
,
[Roo_ORDER_BY_LOCATION] =
#if L==1 // ca
"Ubicaci&oacute;"
#elif L==2 // de
"Standort"
#elif L==3 // en
"Location"
#elif L==4 // es
"Ubicaci&oacute;n"
#elif L==5 // fr
"Emplacement"
#elif L==6 // gn
"&Ntilde;emohenda"
#elif L==7 // it
"Posizione"
#elif L==8 // pl
"Lokacja"
#elif L==9 // pt
"Localiza&ccedil;&atilde;o"
#endif #endif
}; };
@ -44648,6 +44690,48 @@ const char *Txt_The_building_X_has_been_renamed_as_Y = // Warning: it is very im
"O edif&iacute;cio <strong>%s</strong> foi renomeado como <strong>%s</strong>."; "O edif&iacute;cio <strong>%s</strong> foi renomeado como <strong>%s</strong>.";
#endif #endif
const char *Txt_The_building_of_room_X_has_not_changed = // Warning: it is very important to include %s in the following sentences
#if L==1 // ca
"L'edifici de la sala <strong>%s</strong> no ha canviat.";
#elif L==2 // de
"Das Geb&auml;ude des Raum <strong>%s</strong> hat sich nicht ge&auml;ndert.";
#elif L==3 // en
"The building of room <strong>%s</strong> has not changed.";
#elif L==4 // es
"El edificio de la sala <strong>%s</strong> no ha cambiado.";
#elif L==5 // fr
"Le b&acirc;timent de la salle <strong>%s</strong> n'a pas chang&eacute;.";
#elif L==6 // gn
"El edificio de la sala <strong>%s</strong> no ha cambiado."; // Okoteve traducción
#elif L==7 // it
"L'edificio della aula <strong>%s</strong> non &egrave; cambiata.";
#elif L==8 // pl
"Budynek klasy <strong>%s</strong> nie uleg&lstrok;a zmianie.";
#elif L==9 // pt
"O edif&iacute;cio da sala <strong>%s</strong> n&atilde;o mudou.";
#endif
const char *Txt_The_building_of_room_X_is_now_Y = // Warning: it is very important to include two %s in the following sentences
#if L==1 // ca
"L'edifici de la sala <strong>%s</strong> ara &eacute;s <strong>%s</strong>.";
#elif L==2 // de
"Das Geb&auml;ude des Raum <strong>%s</strong> betr&auml;gt jetzt <strong>%s</strong>.";
#elif L==3 // en
"The building of room <strong>%s</strong> is now <strong>%s</strong>.";
#elif L==4 // es
"El edificio de la sala <strong>%s</strong> ahora es <strong>%s</strong>.";
#elif L==5 // fr
"Le b&acirc;timent de la salle <strong>%s</strong> est maintenant de <strong>%s</strong>.";
#elif L==6 // gn
"El edificio de la sala <strong>%s</strong> ahora es <strong>%s</strong>."; // Okoteve traducción
#elif L==7 // it
"L'edificio della aula <strong>%s</strong> &egrave; ora <strong>%s</strong>.";
#elif L==8 // pl
"Budynek klasy <strong>%s</strong> wynosi teraz <strong>%s</strong>.";
#elif L==9 // pt
"O edif&iacute;cio da sala <strong>%s</strong> &eacute; agora <strong>%s</strong>.";
#endif
const char *Txt_The_capacity_of_room_X_has_not_changed = // Warning: it is very important to include %s in the following sentences const char *Txt_The_capacity_of_room_X_has_not_changed = // Warning: it is very important to include %s in the following sentences
#if L==1 // ca #if L==1 // ca
"L'aforament de la sala <strong>%s</strong> no ha canviat."; "L'aforament de la sala <strong>%s</strong> no ha canviat.";
@ -45842,6 +45926,48 @@ const char *Txt_The_file_type_should_be_HTML_or_ZIP =
"O tipo de arquivo deve ser <em>HTML</em> ou <em>ZIP</em>."; "O tipo de arquivo deve ser <em>HTML</em> ou <em>ZIP</em>.";
#endif #endif
const char *Txt_The_floor_of_room_X_has_not_changed = // Warning: it is very important to include %s in the following sentences
#if L==1 // ca
"La planta de la sala <strong>%s</strong> no ha canviat.";
#elif L==2 // de
"Der Stock des Raum <strong>%s</strong> hat sich nicht ge&auml;ndert.";
#elif L==3 // en
"The floor of room <strong>%s</strong> has not changed.";
#elif L==4 // es
"La planta de la sala <strong>%s</strong> no ha cambiado.";
#elif L==5 // fr
"L'&eacute;tage de la salle <strong>%s</strong> n'a pas chang&eacute;.";
#elif L==6 // gn
"La planta de la sala <strong>%s</strong> no ha cambiado."; // Okoteve traducción
#elif L==7 // it
"Il piano della aula <strong>%s</strong> non &egrave; cambiata.";
#elif L==8 // pl
"Pi&eogon;trze klasy <strong>%s</strong> nie uleg&lstrok;a zmianie.";
#elif L==9 // pt
"O andar da sala <strong>%s</strong> n&atilde;o mudou.";
#endif
const char *Txt_The_floor_of_room_X_is_now_Y = // Warning: it is very important to include %s and %d in the following sentences
#if L==1 // ca
"La planta de la sala <strong>%s</strong> ara &eacute;s <strong>%d</strong>.";
#elif L==2 // de
"Der Stock des Raum <strong>%s</strong> betr&auml;gt jetzt <strong>%d</strong>.";
#elif L==3 // en
"The floor of room <strong>%s</strong> is now <strong>%d</strong>.";
#elif L==4 // es
"La planta de la sala <strong>%s</strong> ahora es <strong>%d</strong>.";
#elif L==5 // fr
"L'&eacute;tage de la salle <strong>%s</strong> est maintenant de <strong>%d</strong>.";
#elif L==6 // gn
"La planta de la sala <strong>%s</strong> ahora es <strong>%d</strong>."; // Okoteve traducción
#elif L==7 // it
"Il piano della aula <strong>%s</strong> &egrave; ora <strong>%d</strong>.";
#elif L==8 // pl
"Pi&eogon;trze klasy <strong>%s</strong> wynosi teraz <strong>%d</strong>.";
#elif L==9 // pt
"O andar da sala <strong>%s</strong> &eacute; agora <strong>%d</strong>.";
#endif
const char *Txt_The_folder_X_has_been_created_inside_the_folder_Y = // Warning: it is very important to include two %s in the following sentences const char *Txt_The_folder_X_has_been_created_inside_the_folder_Y = // Warning: it is very important to include two %s in the following sentences
#if L==1 // ca #if L==1 // ca
"Se ha creado la carpeta <strong>%s</strong> dentro de la carpeta <strong>%s</strong>."; // Necessita traduccio "Se ha creado la carpeta <strong>%s</strong> dentro de la carpeta <strong>%s</strong>."; // Necessita traduccio
@ -46682,66 +46808,6 @@ const char *Txt_The_location_of_the_building_X_has_not_changed = // Warning: it
" n&atilde;o foi alterada."; " n&atilde;o foi alterada.";
#endif #endif
const char *Txt_The_location_of_the_room_X_has_changed_to_Y = // Warning: it is very important to include two %s in the following sentences
#if L==1 // ca
"La ubicaci&oacute; de la sala <strong>%s</strong>"
" ha canviat a <strong>%s</strong>.";
#elif L==2 // de
"Der Standort des Raum <strong>%s</strong>"
" wurde in <strong>%s</strong> ge&auml;ndert.";
#elif L==3 // en
"The location of the room <strong>%s</strong>"
" has changed to <strong>%s</strong>.";
#elif L==4 // es
"La ubicaci&oacute;n de la sala <strong>%s</strong>"
" ha cambiado a <strong>%s</strong>.";
#elif L==5 // fr
"L'emplacement de la salle <strong>%s</strong>"
" a &eacute;t&eacute; remplac&eacute; par <strong>%s</strong>.";
#elif L==6 // gn
"La ubicaci&oacute;n de la sala <strong>%s</strong>"
" ha cambiado a <strong>%s</strong>."; // Okoteve traducción
#elif L==7 // it
"La posizione della aula <strong>%s</strong>"
" &egrave; cambiata in <strong>%s</strong>.";
#elif L==8 // pl
"Lokalizacja klasy <strong>%s</strong>"
" zmieni&lstrok;a si&eogon; na <strong>%s</strong>.";
#elif L==9 // pt
"A localiza&ccedil;&atilde;o da sala <strong>%s</strong>"
" mudou para <strong>%s</strong>.";
#endif
const char *Txt_The_location_of_the_room_X_has_not_changed = // Warning: it is very important to include %s in the following sentences
#if L==1 // ca
"La ubicaci&oacute; de la sala <strong>%s</strong>"
" no ha canviat.";
#elif L==2 // de
"Der Standort des Raum <strong>%s</strong>"
" hat sich nicht ge&auml;ndert.";
#elif L==3 // en
"The location of the room <strong>%s</strong>"
" has not changed.";
#elif L==4 // es
"La ubicaci&oacute;n de la sala <strong>%s</strong>"
" no ha cambiado.";
#elif L==5 // fr
"L'emplacement de la salle <strong>%s</strong>"
" n'a pas chang&eacute;.";
#elif L==6 // gn
"La ubicaci&oacute;n de la sala <strong>%s</strong>"
" no ha cambiado."; // Okoteve traducción
#elif L==7 // it
"La posizione della aula <strong>%s</strong>"
" non &egrave; cambiata.";
#elif L==8 // pl
"Lokalizacja klasy <strong>%s</strong>"
" nie uleg&lstrok;a zmianie.";
#elif L==9 // pt
"A localiza&ccedil;&atilde;o da sala <strong>%s</strong>"
" n&atilde;o foi alterada.";
#endif
const char *Txt_The_lower_limit_of_correct_answers_must_be_less_than_or_equal_to_the_upper_limit = const char *Txt_The_lower_limit_of_correct_answers_must_be_less_than_or_equal_to_the_upper_limit =
#if L==1 // ca #if L==1 // ca
"El l&iacute;mite inferior del intervalo de respuestas correctas" "El l&iacute;mite inferior del intervalo de respuestas correctas"

View File

@ -4512,27 +4512,6 @@ const char *Txt_Actions[Act_NUM_ACTIONS] =
"" // Potrzebujesz tlumaczenie "" // Potrzebujesz tlumaczenie
#elif L==9 // pt #elif L==9 // pt
"" // Precisa de tradução "" // Precisa de tradução
#endif
,
[ActRenRooLoc] =
#if L==1 // ca
"" // Necessita traducció
#elif L==2 // de
"" // Need Übersetzung
#elif L==3 // en
"Change location of a room"
#elif L==4 // es
"Cambiar ubicaci&oacute;n de una sala"
#elif L==5 // fr
"" // Besoin de traduction
#elif L==6 // gn
"" // Okoteve traducción
#elif L==7 // it
"" // Bisogno di traduzione
#elif L==8 // pl
"" // Potrzebujesz tlumaczenie
#elif L==9 // pt
"" // Precisa de tradução
#endif #endif
, ,
[ActSeeDegInf] = [ActSeeDegInf] =