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,
FullName VARCHAR(2047) NOT NULL,
Capacity INT NOT NULL,
Location VARCHAR(2047) NOT NULL,
UNIQUE INDEX(RooCod),
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},
[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},
[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 ******************************************************************
// Actions in menu:
@ -3499,7 +3498,7 @@ Act_Action_t Act_FromActCodToAction[1 + Act_MAX_ACTION_COD] = // Do not reuse un
ActRenRooSho, // #1748
ActRenRooFul, // #1749
ActChgRooMaxUsr, // #1750
ActRenRooLoc, // #1751
-1, // #1751 (obsolete action)
ActChgGrpRoo, // #1752
ActDoActOnSevGst, // #1753
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 ActRenRooFul (ActRenHld + 46)
#define ActChgRooMaxUsr (ActRenHld + 47)
#define ActRenRooLoc (ActRenHld + 48)
/*****************************************************************************/
/********************************* Degree tab ********************************/
/*****************************************************************************/
// Actions in menu
#define ActSeeDegInf (ActRenRooLoc + 1)
#define ActSeeCrs (ActRenRooLoc + 2)
#define ActSeeDegInf (ActChgRooMaxUsr + 1)
#define ActSeeCrs (ActChgRooMaxUsr + 2)
// Secondary actions
#define ActPrnDegInf (ActRenRooLoc + 3)
#define ActChgDegCtrCfg (ActRenRooLoc + 4)
#define ActRenDegShoCfg (ActRenRooLoc + 5)
#define ActRenDegFulCfg (ActRenRooLoc + 6)
#define ActChgDegWWWCfg (ActRenRooLoc + 7)
#define ActReqDegLog (ActRenRooLoc + 8)
#define ActRecDegLog (ActRenRooLoc + 9)
#define ActRemDegLog (ActRenRooLoc + 10)
#define ActPrnDegInf (ActChgRooMaxUsr + 3)
#define ActChgDegCtrCfg (ActChgRooMaxUsr + 4)
#define ActRenDegShoCfg (ActChgRooMaxUsr + 5)
#define ActRenDegFulCfg (ActChgRooMaxUsr + 6)
#define ActChgDegWWWCfg (ActChgRooMaxUsr + 7)
#define ActReqDegLog (ActChgRooMaxUsr + 8)
#define ActRecDegLog (ActChgRooMaxUsr + 9)
#define ActRemDegLog (ActChgRooMaxUsr + 10)
#define ActEdiCrs (ActRenRooLoc + 11)
#define ActReqCrs (ActRenRooLoc + 12)
#define ActNewCrs (ActRenRooLoc + 13)
#define ActRemCrs (ActRenRooLoc + 14)
#define ActChgInsCrsCod (ActRenRooLoc + 15)
#define ActChgCrsYea (ActRenRooLoc + 16)
#define ActRenCrsSho (ActRenRooLoc + 17)
#define ActRenCrsFul (ActRenRooLoc + 18)
#define ActChgCrsSta (ActRenRooLoc + 19)
#define ActEdiCrs (ActChgRooMaxUsr + 11)
#define ActReqCrs (ActChgRooMaxUsr + 12)
#define ActNewCrs (ActChgRooMaxUsr + 13)
#define ActRemCrs (ActChgRooMaxUsr + 14)
#define ActChgInsCrsCod (ActChgRooMaxUsr + 15)
#define ActChgCrsYea (ActChgRooMaxUsr + 16)
#define ActRenCrsSho (ActChgRooMaxUsr + 17)
#define ActRenCrsFul (ActChgRooMaxUsr + 18)
#define ActChgCrsSta (ActChgRooMaxUsr + 19)
/*****************************************************************************/
/******************************** Course tab *********************************/

View File

@ -497,7 +497,7 @@ enscript -2 --landscape --color --file-align=2 --highlight --line-numbers -o - *
En OpenSWAD:
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 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: 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)
3 changes necessary in database:
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 | |
| FullName | varchar(2047) | 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 ("
"RooCod INT NOT NULL AUTO_INCREMENT,"
@ -2376,7 +2375,6 @@ mysql> DESCRIBE rooms;
"ShortName VARCHAR(511) NOT NULL," // Roo_MAX_BYTES_SHRT_NAME
"FullName VARCHAR(2047) NOT NULL," // Roo_MAX_BYTES_FULL_NAME
"Capacity INT NOT NULL,"
"Location VARCHAR(2047) NOT NULL," // Roo_MAX_BYTES_LOCATION
"UNIQUE INDEX(RooCod),"
"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_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_ListRoomsForEdition (const struct Bld_Buildings *Buildings,
const struct Roo_Rooms *Rooms);
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 int Roo_GetParamFloor (void);
static void Roo_RenameRoom (Cns_ShrtOrFullName_t ShrtOrFullName);
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_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_EditingRoomDestructor (void);
@ -161,6 +166,16 @@ void Roo_SeeRooms (void)
{
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 */
HTM_TD_Begin ("class=\"DAT LM %s\"",Gbl.ColorRows[RowEvenOdd]);
HTM_Txt (Rooms.Lst[NumRoom].ShrtName);
@ -177,11 +192,6 @@ void Roo_SeeRooms (void)
HTM_Txt (StrCapacity);
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 ();
}
@ -329,10 +339,11 @@ void Roo_GetListRooms (struct Roo_Rooms *Rooms,
{
static const char *OrderBySubQuery[Roo_NUM_ORDERS] =
{
[Roo_ORDER_BY_SHRT_NAME] = "ShortName",
[Roo_ORDER_BY_FULL_NAME] = "FullName",
[Roo_ORDER_BY_CAPACITY ] = "Capacity DESC,ShortName",
[Roo_ORDER_BY_LOCATION ] = "Location,ShortName",
[Roo_ORDER_BY_BUILDING ] = "buildings.ShortName,rooms.Floor,rooms.ShortName",
[Roo_ORDER_BY_FLOOR ] = "rooms.Floor,buildings.ShortName,rooms.ShortName",
[Roo_ORDER_BY_SHRT_NAME] = "rooms.ShortName,rooms.FullName",
[Roo_ORDER_BY_FULL_NAME] = "rooms.FullName,rooms.ShortName",
[Roo_ORDER_BY_CAPACITY ] = "rooms.Capacity DESC,rooms.ShortName",
};
MYSQL_RES *mysql_res;
MYSQL_ROW row;
@ -345,15 +356,16 @@ void Roo_GetListRooms (struct Roo_Rooms *Rooms,
{
case Roo_ALL_DATA:
NumRows = DB_QuerySELECT (&mysql_res,"can not get rooms",
"SELECT RooCod," // row[0]
"ShortName," // row[1]
"BldCod," // row[2]
"Floor," // row[3]
"FullName," // row[4]
"Capacity," // row[5]
"Location" // row[6]
" FROM rooms"
" WHERE CtrCod=%ld"
"SELECT rooms.RooCod," // row[0]
"rooms.BldCod," // row[1]
"buildings.ShortName," // row[2]
"rooms.Floor," // row[3]
"rooms.ShortName," // row[4]
"rooms.FullName," // row[5]
"rooms.Capacity" // row[6]
" FROM rooms LEFT JOIN buildings"
" ON rooms.BldCod=buildings.BldCod"
" WHERE rooms.CtrCod=%ld"
" ORDER BY %s",
Gbl.Hierarchy.Ctr.CtrCod,
OrderBySubQuery[Rooms->SelectedOrder]);
@ -361,12 +373,14 @@ void Roo_GetListRooms (struct Roo_Rooms *Rooms,
case Roo_ONLY_SHRT_NAME:
default:
NumRows = DB_QuerySELECT (&mysql_res,"can not get rooms",
"SELECT RooCod," // row[0]
"ShortName" // row[1]
" FROM rooms"
" WHERE CtrCod=%ld"
" ORDER BY ShortName",
Gbl.Hierarchy.Ctr.CtrCod);
"SELECT rooms.RooCod," // row[0]
"rooms.ShortName" // row[1]
" FROM rooms LEFT JOIN buildings"
" ON rooms.BldCod=buildings.BldCod"
" WHERE rooms.CtrCod=%ld"
" ORDER BY %s",
Gbl.Hierarchy.Ctr.CtrCod,
OrderBySubQuery[Roo_ORDER_DEFAULT]);
break;
}
@ -395,29 +409,36 @@ void Roo_GetListRooms (struct Roo_Rooms *Rooms,
if ((Room->RooCod = Str_ConvertStrCodToLongCod (row[0])) < 0)
Lay_ShowErrorAndExit ("Wrong code of room.");
/* Get the short name of the room (row[1]) */
Str_Copy (Room->ShrtName,row[1],
Roo_MAX_BYTES_SHRT_NAME);
switch (WhichData)
{
case Roo_ALL_DATA:
/* Get building code (row[1]) */
Room->BldCod = Str_ConvertStrCodToLongCod (row[1]);
if (WhichData == Roo_ALL_DATA)
{
/* Get building code (row[2]) */
Room->BldCod = Str_ConvertStrCodToLongCod (row[2]);
/* Get the short name of the building (row[2]) */
Roo_GetBldShrtName (Room,row[2]);
/* Get floor (row[3]) */
Room->Floor = Str_ConvertStrCodToLongCod (row[3]);
/* Get floor (row[3]) */
Room->Floor = Str_ConvertStrCodToLongCod (row[3]);
/* Get the full name of the room (row[4]) */
Str_Copy (Room->FullName,row[4],
Roo_MAX_BYTES_FULL_NAME);
/* Get the short name of the room (row[4]) */
Str_Copy (Room->ShrtName,row[4],
Roo_MAX_BYTES_SHRT_NAME);
/* Get seating capacity in this room (row[5]) */
if (sscanf (row[5],"%u",&Room->Capacity) != 1)
Room->Capacity = Roo_UNLIMITED_CAPACITY;
/* Get the full name of the room (row[5]) */
Str_Copy (Room->FullName,row[5],
Roo_MAX_BYTES_FULL_NAME);
/* Get the full name of the room (row[6]) */
Str_Copy (Room->Location,row[6],
Roo_MAX_BYTES_LOCATION);
/* Get seating capacity in this room (row[6]) */
if (sscanf (row[6],"%u",&Room->Capacity) != 1)
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_ROW row;
unsigned long NumRows;
/***** Clear data *****/
Room->ShrtName[0] = '\0';
Room->FullName[0] = '\0';
Room->Capacity = Roo_UNLIMITED_CAPACITY;
Room->Location[0] = '\0';
/***** Trivial check *****/
if (Room->RooCod <= 0)
return;
/***** Check if room code is correct *****/
if (Room->RooCod > 0)
/***** Get data of a room from database *****/
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 *****/
NumRows = DB_QuerySELECT (&mysql_res,"can not get data of a room",
"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);
/* Get row */
row = mysql_fetch_row (mysql_res);
/***** Count number of rows in result *****/
if (NumRows) // Room found...
{
/* Get row */
row = mysql_fetch_row (mysql_res);
/* Get building code (row[0]) */
Room->BldCod = Str_ConvertStrCodToLongCod (row[0]);
/* Get building code (row[0]) */
Room->BldCod = Str_ConvertStrCodToLongCod (row[0]);
/* Get the short name of the building (row[1]) */
Roo_GetBldShrtName (Room,row[1]);
/* Get floor (row[1]) */
Room->Floor = Str_ConvertStrCodToLongCod (row[1]);
/* Get floor (row[2]) */
Room->Floor = Str_ConvertStrCodToLongCod (row[2]);
/* Get the short name of the room (row[2]) */
Str_Copy (Room->ShrtName,row[2],
Roo_MAX_BYTES_SHRT_NAME);
/* Get the short name of the room (row[3]) */
Str_Copy (Room->ShrtName,row[3],
Roo_MAX_BYTES_SHRT_NAME);
/* Get the full name of the room (row[3]) */
Str_Copy (Room->FullName,row[3],
Roo_MAX_BYTES_FULL_NAME);
/* Get the full name of the room (row[4]) */
Str_Copy (Room->FullName,row[4],
Roo_MAX_BYTES_FULL_NAME);
/* Get seating capacity in this room (row[4]) */
if (sscanf (row[4],"%u",&Room->Capacity) != 1)
Room->Capacity = Roo_UNLIMITED_CAPACITY;
/* Get seating capacity in this room (row[5]) */
if (sscanf (row[5],"%u",&Room->Capacity) != 1)
Room->Capacity = Roo_UNLIMITED_CAPACITY;
}
/* Get the location of the room (row[5]) */
Str_Copy (Room->Location,row[5],
Roo_MAX_BYTES_LOCATION);
}
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);
}
/***** 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\"");
Frm_StartForm (ActChgRooBld);
Roo_PutParamRooCod (Room->RooCod);
Roo_PutSelectorBuilding (Room->BldCod,Buildings);
Roo_PutSelectorBuilding (Room->BldCod,Buildings,
true); // Submit on change
Frm_EndForm ();
HTM_TD_End ();
@ -590,15 +630,6 @@ static void Roo_ListRoomsForEdition (const struct Bld_Buildings *Buildings,
Frm_EndForm ();
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 ();
}
@ -611,14 +642,15 @@ static void Roo_ListRoomsForEdition (const struct Bld_Buildings *Buildings,
/*****************************************************************************/
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_Another_building;
unsigned NumBld;
/***** Begin selector *****/
HTM_SELECT_Begin (true,
HTM_SELECT_Begin (SubmitOnChange,
"name=\"BldCod\" class=\"BLD_SEL\"");
/***** Option for no assigned building *****/
@ -662,6 +694,16 @@ long Roo_GetParamRooCod (void)
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 ******************************/
/*****************************************************************************/
@ -716,8 +758,8 @@ void Roo_RemoveAllRoomsInCtr (long CtrCod)
void Roo_ChangeBuilding (void)
{
extern const char *Txt_The_capacity_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_has_not_changed;
extern const char *Txt_The_building_of_room_X_is_now_Y;
long NewBldCod;
/***** Room constructor *****/
@ -729,7 +771,7 @@ void Roo_ChangeBuilding (void)
Lay_ShowErrorAndExit ("Code of room is missing.");
/* Get the building of the room */
NewBldCod = Par_GetParToLong ("BldCod");
NewBldCod = Bld_GetParamBldCod ();
/***** Get data of the room from database *****/
Roo_GetDataOfRoomByCod (Roo_EditingRoom);
@ -742,7 +784,7 @@ void Roo_ChangeBuilding (void)
if (NewBldCod == Roo_EditingRoom->BldCod)
/***** Message to show no changes made *****/
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);
else
{
@ -750,12 +792,14 @@ void Roo_ChangeBuilding (void)
DB_QueryUPDATE ("can not update the capacity of a room",
"UPDATE rooms SET BldCod=%ld WHERE RooCod=%ld",
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 *****/
Ale_CreateAlert (Ale_SUCCESS,NULL,
Txt_The_capacity_of_room_X_is_now_Y, // TODO: Change
Roo_EditingRoom->FullName,0);
Txt_The_building_of_room_X_is_now_Y,
Roo_EditingRoom->FullName,Roo_EditingRoom->BldShrtName);
}
}
@ -765,8 +809,8 @@ void Roo_ChangeBuilding (void)
void Roo_ChangeFloor (void)
{
extern const char *Txt_The_capacity_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_has_not_changed;
extern const char *Txt_The_floor_of_room_X_is_now_Y;
int NewFloor;
/***** Room constructor *****/
@ -778,7 +822,7 @@ void Roo_ChangeFloor (void)
Lay_ShowErrorAndExit ("Code of room is missing.");
/* Get the floor of the room */
NewFloor = Par_GetParToLong ("Floor");
NewFloor = Roo_GetParamFloor ();
/***** Get data of the room from database *****/
Roo_GetDataOfRoomByCod (Roo_EditingRoom);
@ -788,7 +832,7 @@ void Roo_ChangeFloor (void)
if (NewFloor == Roo_EditingRoom->Floor)
/***** Message to show no changes made *****/
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);
else
{
@ -796,12 +840,14 @@ void Roo_ChangeFloor (void)
DB_QueryUPDATE ("can not update the capacity of a room",
"UPDATE rooms SET Floor=%d WHERE RooCod=%ld",
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 *****/
Ale_CreateAlert (Ale_SUCCESS,NULL,
Txt_The_capacity_of_room_X_is_now_Y, // TODO: Change
Roo_EditingRoom->FullName,0);
Txt_The_floor_of_room_X_is_now_Y,
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';
}
/*****************************************************************************/
/********************** 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 ************/
/*****************************************************************************/
@ -1100,7 +1102,8 @@ static void Roo_PutFormToCreateRoom (const struct Bld_Buildings *Buildings)
/***** Building *****/
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 ();
/***** Floor *****/
@ -1128,12 +1131,6 @@ static void Roo_PutFormToCreateRoom (const struct Bld_Buildings *Buildings)
"size=\"3\"");
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 ();
/***** 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_Full_name;
extern const char *Txt_Capacity_OF_A_ROOM;
extern const char *Txt_Location;
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_Full_name);
HTM_TH (1,1,"LM",Txt_Capacity_OF_A_ROOM);
HTM_TH (1,1,"LM",Txt_Location);
HTM_TR_End ();
}
@ -1185,6 +1180,12 @@ void Roo_RecFormNewRoom (void)
Roo_EditingRoomConstructor ();
/***** Get parameters from form *****/
/* Get room building */
Roo_EditingRoom->BldCod = Bld_GetParamBldCod ();
/* Get room floor */
Roo_EditingRoom->Floor = Roo_GetParamFloor ();
/* Get room short name */
Par_GetParToText ("ShortName",Roo_EditingRoom->ShrtName,Roo_MAX_BYTES_SHRT_NAME);
@ -1193,13 +1194,10 @@ void Roo_RecFormNewRoom (void)
/* Get seating capacity */
Roo_EditingRoom->Capacity = (unsigned)
Par_GetParToUnsignedLong ("Capacity",
0,
Roo_MAX_CAPACITY,
Roo_UNLIMITED_CAPACITY);
/* Get room location */
Par_GetParToText ("Location",Roo_EditingRoom->Location,Roo_MAX_BYTES_LOCATION);
Par_GetParToUnsignedLong ("Capacity",
0,
Roo_MAX_CAPACITY,
Roo_UNLIMITED_CAPACITY);
if (Roo_EditingRoom->ShrtName[0] &&
Roo_EditingRoom->FullName[0]) // If there's a room name
@ -1230,16 +1228,20 @@ void Roo_RecFormNewRoom (void)
/**************************** 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 *****/
DB_QueryINSERT ("can not create room",
"INSERT INTO rooms"
" (CtrCod,ShortName,FullName,Capacity,Location)"
" (CtrCod,BldCod,Floor,ShortName,FullName,Capacity)"
" VALUES"
" (%ld,'%s','%s',%u,'%s')",
" (%ld,%ld,%d,'%s','%s',%u)",
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.");
/***** Reset room *****/
Roo_EditingRoom->RooCod = -1L;
Roo_EditingRoom->CtrCod = -1L;
Roo_EditingRoom->BldCod = -1L;
Roo_EditingRoom->Floor = 0;
Roo_EditingRoom->ShrtName[0] = '\0';
Roo_EditingRoom->FullName[0] = '\0';
Roo_EditingRoom->Capacity = Roo_UNLIMITED_CAPACITY;
Roo_EditingRoom->Location[0] = '\0';
Roo_EditingRoom->RooCod = -1L;
Roo_EditingRoom->CtrCod = -1L;
Roo_EditingRoom->BldCod = -1L;
Roo_EditingRoom->BldShrtName[0] = '\0';
Roo_EditingRoom->Floor = 0;
Roo_EditingRoom->ShrtName[0] = '\0';
Roo_EditingRoom->FullName[0] = '\0';
Roo_EditingRoom->Capacity = Roo_UNLIMITED_CAPACITY;
}
static void Roo_EditingRoomDestructor (void)

View File

@ -27,6 +27,7 @@
/********************************** Headers **********************************/
/*****************************************************************************/
#include "swad_building.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...
// ...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
{
long RooCod;
long CtrCod;
long BldCod;
int Floor;
char ShrtName[Roo_MAX_BYTES_SHRT_NAME + 1];
char FullName[Roo_MAX_BYTES_FULL_NAME + 1];
unsigned Capacity; // Seating capacity (maximum number of people that fit in the room)
char Location[Roo_MAX_BYTES_LOCATION + 1]; // Examples: Ground floor, first floor, basement
long RooCod; // Room code
long CtrCod; // Centre code
long BldCod; // Building code
char BldShrtName[Bld_MAX_BYTES_SHRT_NAME + 1]; // Building short name
int Floor; // Room floor
char ShrtName[Roo_MAX_BYTES_SHRT_NAME + 1]; // Room short name
char FullName[Roo_MAX_BYTES_FULL_NAME + 1]; // Room full name
unsigned Capacity; // Room seating capacity
// (maximum people who fit in the room)
};
#define Roo_NUM_ORDERS 4
#define Roo_NUM_ORDERS 5
typedef enum
{
Roo_ORDER_BY_SHRT_NAME = 0,
Roo_ORDER_BY_FULL_NAME = 1,
Roo_ORDER_BY_CAPACITY = 2,
Roo_ORDER_BY_LOCATION = 3,
Roo_ORDER_BY_BUILDING = 0,
Roo_ORDER_BY_FLOOR = 1,
Roo_ORDER_BY_SHRT_NAME = 2,
Roo_ORDER_BY_FULL_NAME = 3,
Roo_ORDER_BY_CAPACITY = 4,
} 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 *****/
typedef enum
@ -97,7 +97,6 @@ void Roo_FreeListRooms (struct Roo_Rooms *Rooms);
void Roo_GetListRoomsInThisCtr (void);
void Roo_GetDataOfRoomByCod (struct Roo_Room *Roo);
long Roo_GetParamRooCod (void);
void Roo_RemoveRoom (void);
@ -107,7 +106,6 @@ void Roo_ChangeFloor (void);
void Roo_RenameRoomShort (void);
void Roo_RenameRoomFull (void);
void Roo_ChangeCapacity (void);
void Roo_ChangeRoomLocation (void);
void Roo_ContEditAfterChgRoom (void);
void Roo_RecFormNewRoom (void);

View File

@ -1633,25 +1633,25 @@ const char *Txt_Announcements_of_exams =
"Chamadas para exames";
#endif
const char *Txt_Another_building = // TODO: Translate
const char *Txt_Another_building =
#if L==1 // ca
"Una altra sala";
"Un altre edifici";
#elif L==2 // de
"Eine weitere Raum";
"Eine weitere Geb&auml;ude";
#elif L==3 // en
"Another room";
"Another building";
#elif L==4 // es
"Otra sala";
"Otro edificio";
#elif L==5 // fr
"Un autre salle";
"Un autre b&acirc;timent";
#elif L==6 // gn
"Otra sala"; // Okoteve traducción
"Otro edificio"; // Okoteve traducción
#elif L==7 // it
"Un'altra aula";
"Un altro edificio";
#elif L==8 // pl
"Kolejna klasa";
"Kolejna budynek";
#elif L==9 // pt
"Outra sala";
"Outro edif&iacute;cio";
#endif
const char *Txt_Another_centre =
@ -1685,7 +1685,7 @@ const char *Txt_Another_room =
#elif L==4 // es
"Otra sala";
#elif L==5 // fr
"Un autre salle";
"Une autre salle";
#elif L==6 // gn
"Otra sala"; // Okoteve traducción
#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>.";
#endif
const char *Txt_No_assigned_building = // TODO: Translate
const char *Txt_No_assigned_building =
#if L==1 // ca
"Sense sala assignada";
"Sense edifici assignat";
#elif L==2 // de
"Kein zugewiesenes Raum";
"Kein zugewiesenes Geb&auml;ude";
#elif L==3 // en
"No assigned room";
"No assigned building";
#elif L==4 // es
"Sin sala asignada";
"Sin edificio asignado";
#elif L==5 // fr
"Aucune salle assign&eacute;e";
"Aucun b&acirc;timent assign&eacute;";
#elif L==6 // gn
"Sin sala asignada"; // Okoteve traducción
"Sin edificio asignado"; // Okoteve traducción
#elif L==7 // it
"Nessuna aula assegnata";
"Nessun edificio assegnato";
#elif L==8 // pl
"Brak przydzielonej sali lekcyjnej";
"Brak przydzielonej budynek lekcyjnej";
#elif L==9 // pt
"Nenhuma sala atribu&iacute;da";
"Nenhum edif&iacute;cio atribu&iacute;do";
#endif
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] =
{
[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] =
#if L==1 // ca
"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"
#elif L==9 // pt
"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
};
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] =
#if L==1 // ca
"Nom breu"
@ -38309,27 +38372,6 @@ const char *Txt_ROOMS_ORDER[Roo_NUM_ORDERS] =
"Pojemno&sacute;&cacute;"
#elif L==9 // pt
"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
};
@ -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>.";
#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
#if L==1 // ca
"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>.";
#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
#if L==1 // ca
"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.";
#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 =
#if L==1 // ca
"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
#elif L==9 // pt
"" // 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
,
[ActSeeDegInf] =