diff --git a/Makefile b/Makefile
index a071f961e..3fae87791 100644
--- a/Makefile
+++ b/Makefile
@@ -28,7 +28,7 @@
OBJS = swad_account.o swad_action.o swad_agenda.o swad_alert.o \
swad_announcement.o swad_API.o swad_assignment.o swad_attendance.o \
- swad_banner.o swad_box.o swad_button.o \
+ swad_banner.o swad_box.o swad_building.o swad_button.o \
swad_calendar.o swad_centre.o swad_centre_config.o swad_chat.o \
swad_config.o swad_connected.o swad_cookie.o swad_country.o \
swad_country_config.o swad_course.o \
diff --git a/sql/cambios.sql b/sql/cambios.sql
index e340ad19f..b57910cae 100644
--- a/sql/cambios.sql
+++ b/sql/cambios.sql
@@ -13331,4 +13331,11 @@ SELECT my_courses.CrsCod,COUNT(*) AS N FROM (SELECT CrsCod,UsrCod,Role FROM crs_
SELECT my_courses.CrsCod,COUNT(*) AS N FROM (SELECT CrsCod FROM crs_usr WHERE UsrCod=1346 AND Role=5) AS my_courses LEFT JOIN log ON (my_courses.CrsCod=log.CrsCod) WHERE log.UsrCod=1346 AND log.Role=5 GROUP BY my_courses.CrsCod ORDER BY N DESC,my_courses.CrsCod DESC;
+
+--------------------
+
+SELECT COUNT(*) FROM usr_data WHERE InsCod=25037;
+UPDATE usr_data SET InsCod=1130 WHERE InsCod=25037;
+
+
\ No newline at end of file
diff --git a/sql/swad.sql b/sql/swad.sql
index 2d88ac853..59e9f43ac 100644
--- a/sql/swad.sql
+++ b/sql/swad.sql
@@ -154,6 +154,17 @@ CREATE TABLE IF NOT EXISTS birthdays_today (
UNIQUE INDEX(UsrCod),
INDEX(Today));
--
+-- Table buildings: buildings in a centre
+--
+CREATE TABLE IF NOT EXISTS buildings (
+ BldCod INT NOT NULL AUTO_INCREMENT,
+ CtrCod INT NOT NULL,
+ ShortName VARCHAR(511) NOT NULL,
+ FullName VARCHAR(2047) NOT NULL,
+ Location VARCHAR(2047) NOT NULL,
+ UNIQUE INDEX(BldCod),
+ INDEX(CtrCod));
+--
-- Table centres: centres (faculties, schools...)
--
CREATE TABLE IF NOT EXISTS centres (
diff --git a/swad_action.c b/swad_action.c
index 691c3aa9b..1cd72087b 100644
--- a/swad_action.c
+++ b/swad_action.c
@@ -30,6 +30,7 @@
#include "swad_announcement.h"
#include "swad_attendance.h"
#include "swad_banner.h"
+#include "swad_building.h"
#include "swad_calendar.h"
#include "swad_centre_config.h"
#include "swad_config.h"
@@ -315,6 +316,7 @@ const struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
// Actions in menu:
[ActSeeCtrInf ] = {1151, 0,TabCtr,ActSeeCtrInf , 0, 0, 0,0x3C7, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,CtrCfg_ShowConfiguration ,"info" },
[ActSeeDeg ] = {1011, 1,TabCtr,ActSeeDeg , 0, 0, 0,0x3C7, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Deg_ShowDegsOfCurrentCtr ,"graduation-cap" },
+ [ActSeeBld ] = {1838, 2,TabCtr,ActSeeBld , 0, 0, 0,0x3C7, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Bld_SeeBuildings ,"building" },
[ActSeeRoo ] = {1744, 2,TabCtr,ActSeeRoo , 0, 0, 0,0x3C7, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Roo_SeeRooms ,"classroom" },
// Actions not in menu:
@@ -350,13 +352,20 @@ const struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
[ActChgDegWWW ] = { 554,-1,TabUnk,ActSeeDeg , 0, 0, 0,0x3C6, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Deg_ChangeDegWWW ,Deg_ContEditAfterChgDeg ,NULL},
[ActChgDegSta ] = {1207,-1,TabUnk,ActSeeDeg , 0, 0, 0,0x380, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Deg_ChangeDegStatus ,Deg_ContEditAfterChgDeg ,NULL},
- [ActEdiRoo ] = {1745,-1,TabUnk,ActSeeRoo , 0, 0, 0,0x3C6, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Roo_EditRooms ,NULL},
- [ActNewRoo ] = {1746,-1,TabUnk,ActSeeRoo , 0, 0, 0,0x3C6, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Roo_RecFormNewRoom ,Roo_ContEditAfterChgRoom ,NULL},
- [ActRemRoo ] = {1747,-1,TabUnk,ActSeeRoo , 0, 0, 0,0x3C6, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Roo_RemoveRoom ,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},
+ [ActEdiBld ] = {1839,-1,TabUnk,ActSeeBld , 0, 0, 0,0x3C6, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Bld_EditBuildings ,NULL},
+ [ActNewBld ] = {1840,-1,TabUnk,ActSeeBld , 0, 0, 0,0x3C6, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Bld_RecFormNewBuilding ,Bld_ContEditAfterChgBuilding ,NULL},
+ [ActRemBld ] = {1841,-1,TabUnk,ActSeeBld , 0, 0, 0,0x3C6, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Bld_RemoveBuilding ,Bld_ContEditAfterChgBuilding ,NULL},
+ [ActRenBldSho ] = {1842,-1,TabUnk,ActSeeBld , 0, 0, 0,0x3C6, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Bld_RenameBuildingShort ,Bld_ContEditAfterChgBuilding ,NULL},
+ [ActRenBldFul ] = {1843,-1,TabUnk,ActSeeBld , 0, 0, 0,0x3C6, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Bld_RenameBuildingFull ,Bld_ContEditAfterChgBuilding ,NULL},
+ [ActRenBldLoc ] = {1844,-1,TabUnk,ActSeeBld , 0, 0, 0,0x3C6, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Bld_ChangeBuildingLocation ,Bld_ContEditAfterChgBuilding ,NULL},
+
+ [ActEdiRoo ] = {1745,-1,TabUnk,ActSeeRoo , 0, 0, 0,0x3C6, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Roo_EditRooms ,NULL},
+ [ActNewRoo ] = {1746,-1,TabUnk,ActSeeRoo , 0, 0, 0,0x3C6, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Roo_RecFormNewRoom ,Roo_ContEditAfterChgRoom ,NULL},
+ [ActRemRoo ] = {1747,-1,TabUnk,ActSeeRoo , 0, 0, 0,0x3C6, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Roo_RemoveRoom ,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},
[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},
+ [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:
@@ -3575,6 +3584,13 @@ Act_Action_t Act_FromActCodToAction[1 + Act_MAX_ACTION_COD] = // Do not reuse un
ActReqRemSevTstQst, // #1835
ActRemSevTstQst, // #1836
ActReqAssTst, // #1837
+ ActSeeBld, // #1838
+ ActEdiBld, // #1839
+ ActNewBld, // #1840
+ ActRemBld, // #1841
+ ActRenBldSho, // #1842
+ ActRenBldFul, // #1843
+ ActRenBldLoc, // #1844
};
/*****************************************************************************/
diff --git a/swad_action.h b/swad_action.h
index 61bc153e8..4b0077c19 100644
--- a/swad_action.h
+++ b/swad_action.h
@@ -64,7 +64,7 @@ typedef enum
typedef signed int Act_Action_t; // Must be a signed type, because -1 is used to indicate obsolete action
-#define Act_MAX_ACTION_COD 1837
+#define Act_MAX_ACTION_COD 1844
#define Act_MAX_OPTIONS_IN_MENU_PER_TAB 13
@@ -293,48 +293,56 @@ typedef signed int Act_Action_t; // Must be a signed type, because -1 is used to
// Actions in menu
#define ActSeeCtrInf (ActRenHld + 1)
#define ActSeeDeg (ActRenHld + 2)
-#define ActSeeRoo (ActRenHld + 3)
+#define ActSeeBld (ActRenHld + 3)
+#define ActSeeRoo (ActRenHld + 4)
// Secondary actions
-#define ActPrnCtrInf (ActRenHld + 4)
-#define ActChgCtrInsCfg (ActRenHld + 5)
-#define ActRenCtrShoCfg (ActRenHld + 6)
-#define ActRenCtrFulCfg (ActRenHld + 7)
-#define ActChgCtrPlcCfg (ActRenHld + 8)
-#define ActChgCtrLatCfg (ActRenHld + 9)
-#define ActChgCtrLgtCfg (ActRenHld + 10)
-#define ActChgCtrAltCfg (ActRenHld + 11)
-#define ActChgCtrWWWCfg (ActRenHld + 12)
-#define ActReqCtrLog (ActRenHld + 13)
-#define ActRecCtrLog (ActRenHld + 14)
-#define ActRemCtrLog (ActRenHld + 15)
-#define ActReqCtrPho (ActRenHld + 16)
-#define ActRecCtrPho (ActRenHld + 17)
-#define ActChgCtrPhoAtt (ActRenHld + 18)
+#define ActPrnCtrInf (ActRenHld + 5)
+#define ActChgCtrInsCfg (ActRenHld + 6)
+#define ActRenCtrShoCfg (ActRenHld + 7)
+#define ActRenCtrFulCfg (ActRenHld + 8)
+#define ActChgCtrPlcCfg (ActRenHld + 9)
+#define ActChgCtrLatCfg (ActRenHld + 10)
+#define ActChgCtrLgtCfg (ActRenHld + 11)
+#define ActChgCtrAltCfg (ActRenHld + 12)
+#define ActChgCtrWWWCfg (ActRenHld + 13)
+#define ActReqCtrLog (ActRenHld + 14)
+#define ActRecCtrLog (ActRenHld + 15)
+#define ActRemCtrLog (ActRenHld + 16)
+#define ActReqCtrPho (ActRenHld + 17)
+#define ActRecCtrPho (ActRenHld + 18)
+#define ActChgCtrPhoAtt (ActRenHld + 19)
-#define ActSeeDegTyp (ActRenHld + 19)
-#define ActEdiDegTyp (ActRenHld + 20)
-#define ActNewDegTyp (ActRenHld + 21)
-#define ActRemDegTyp (ActRenHld + 22)
-#define ActRenDegTyp (ActRenHld + 23)
+#define ActSeeDegTyp (ActRenHld + 20)
+#define ActEdiDegTyp (ActRenHld + 21)
+#define ActNewDegTyp (ActRenHld + 22)
+#define ActRemDegTyp (ActRenHld + 23)
+#define ActRenDegTyp (ActRenHld + 24)
-#define ActEdiDeg (ActRenHld + 24)
-#define ActReqDeg (ActRenHld + 25)
-#define ActNewDeg (ActRenHld + 26)
-#define ActRemDeg (ActRenHld + 27)
-#define ActRenDegSho (ActRenHld + 28)
-#define ActRenDegFul (ActRenHld + 29)
-#define ActChgDegTyp (ActRenHld + 30)
-#define ActChgDegWWW (ActRenHld + 31)
-#define ActChgDegSta (ActRenHld + 32)
+#define ActEdiDeg (ActRenHld + 25)
+#define ActReqDeg (ActRenHld + 26)
+#define ActNewDeg (ActRenHld + 27)
+#define ActRemDeg (ActRenHld + 28)
+#define ActRenDegSho (ActRenHld + 29)
+#define ActRenDegFul (ActRenHld + 30)
+#define ActChgDegTyp (ActRenHld + 31)
+#define ActChgDegWWW (ActRenHld + 32)
+#define ActChgDegSta (ActRenHld + 33)
-#define ActEdiRoo (ActRenHld + 33)
-#define ActNewRoo (ActRenHld + 34)
-#define ActRemRoo (ActRenHld + 35)
-#define ActRenRooSho (ActRenHld + 36)
-#define ActRenRooFul (ActRenHld + 37)
-#define ActChgRooMaxUsr (ActRenHld + 38)
-#define ActRenRooLoc (ActRenHld + 39)
+#define ActEdiBld (ActRenHld + 34)
+#define ActNewBld (ActRenHld + 35)
+#define ActRemBld (ActRenHld + 36)
+#define ActRenBldSho (ActRenHld + 37)
+#define ActRenBldFul (ActRenHld + 38)
+#define ActRenBldLoc (ActRenHld + 39)
+
+#define ActEdiRoo (ActRenHld + 40)
+#define ActNewRoo (ActRenHld + 41)
+#define ActRemRoo (ActRenHld + 42)
+#define ActRenRooSho (ActRenHld + 43)
+#define ActRenRooFul (ActRenHld + 44)
+#define ActChgRooMaxUsr (ActRenHld + 45)
+#define ActRenRooLoc (ActRenHld + 46)
/*****************************************************************************/
/********************************* Degree tab ********************************/
diff --git a/swad_changelog.h b/swad_changelog.h
index 2e500a1f3..c1d9af595 100644
--- a/swad_changelog.h
+++ b/swad_changelog.h
@@ -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.185 (2020-04-14)"
+#define Log_PLATFORM_VERSION "SWAD 19.186 (2020-04-14)"
#define CSS_FILE "swad19.146.css"
#define JS_FILE "swad19.172.1.js"
/*
@@ -548,13 +548,16 @@ 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.186: Apr 14, 2020 New module swad_building for buildings in a centre. (287372 lines)
+ 1 change necessary in database:
+CREATE TABLE IF NOT EXISTS buildings (BldCod INT NOT NULL AUTO_INCREMENT,CtrCod INT NOT NULL,ShortName VARCHAR(511) NOT NULL,FullName VARCHAR(2047) NOT NULL,Location VARCHAR(2047) NOT NULL,UNIQUE INDEX(BldCod),INDEX(CtrCod));
+
Version 19.185: Apr 14, 2020 Module swad_classroom is renamed as swad_room.
Improvement in querying the database in the usage report. (285813 lines)
5 changes necessary in database:
RENAME TABLE classrooms TO rooms;
ALTER TABLE rooms CHANGE COLUMN ClaCod RooCod INT NOT NULL AUTO_INCREMENT;
ALTER TABLE rooms DROP INDEX ClaCod,ADD UNIQUE INDEX(RooCod);
-
ALTER TABLE crs_grp CHANGE COLUMN ClaCod RooCod INT NOT NULL DEFAULT -1;
ALTER TABLE crs_grp DROP INDEX ClaCod,ADD INDEX(RooCod);
diff --git a/swad_database.c b/swad_database.c
index b53ae0afd..b60e2d7f8 100644
--- a/swad_database.c
+++ b/swad_database.c
@@ -416,6 +416,29 @@ mysql> DESCRIBE birthdays_today;
"UNIQUE INDEX(UsrCod),"
"INDEX(Today))");
+ /***** Table buildings *****/
+/*
+mysql> DESCRIBE buildings;
++-----------+---------------+------+-----+---------+----------------+
+| Field | Type | Null | Key | Default | Extra |
++-----------+---------------+------+-----+---------+----------------+
+| BldCod | int(11) | NO | PRI | NULL | auto_increment |
+| CtrCod | int(11) | NO | MUL | NULL | |
+| ShortName | varchar(511) | NO | | NULL | |
+| FullName | varchar(2047) | NO | | NULL | |
+| Location | varchar(2047) | NO | | NULL | |
++-----------+---------------+------+-----+---------+----------------+
+5 rows in set (0.00 sec)
+*/
+ DB_CreateTable ("CREATE TABLE IF NOT EXISTS buildings ("
+ "BldCod INT NOT NULL AUTO_INCREMENT,"
+ "CtrCod INT NOT NULL,"
+ "ShortName VARCHAR(511) NOT NULL," // Bld_MAX_BYTES_SHRT_NAME
+ "FullName VARCHAR(2047) NOT NULL," // Bld_MAX_BYTES_FULL_NAME
+ "Location VARCHAR(2047) NOT NULL," // Bld_MAX_BYTES_LOCATION
+ "UNIQUE INDEX(BldCod),"
+ "INDEX(CtrCod))");
+
/***** Table centres *****/
/*
mysql> DESCRIBE centres;
diff --git a/swad_help_URL.c b/swad_help_URL.c
index bc7ab0f62..5519c11f9 100644
--- a/swad_help_URL.c
+++ b/swad_help_URL.c
@@ -627,6 +627,48 @@ const char *Hlp_CENTRE_Degrees =
"CENTRE.Degrees.en";
#endif
+const char *Hlp_CENTRE_Buildings =
+#if L==1
+ "CENTRE.Buildings.es";
+#elif L==2
+ "CENTRE.Buildings.en";
+#elif L==3
+ "CENTRE.Buildings.en";
+#elif L==4
+ "CENTRE.Buildings.es";
+#elif L==5
+ "CENTRE.Buildings.en";
+#elif L==6
+ "CENTRE.Buildings.es";
+#elif L==7
+ "CENTRE.Buildings.en";
+#elif L==8
+ "CENTRE.Buildings.en";
+#elif L==9
+ "CENTRE.Buildings.en";
+#endif
+
+const char *Hlp_CENTRE_Buildings_edit =
+#if L==1
+ "CENTRE.Buildings.es#editar";
+#elif L==2
+ "CENTRE.Buildings.en#edit";
+#elif L==3
+ "CENTRE.Buildings.en#edit";
+#elif L==4
+ "CENTRE.Buildings.es#editar";
+#elif L==5
+ "CENTRE.Buildings.en#edit";
+#elif L==6
+ "CENTRE.Buildings.es#editar";
+#elif L==7
+ "CENTRE.Buildings.en#edit";
+#elif L==8
+ "CENTRE.Buildings.en#edit";
+#elif L==9
+ "CENTRE.Buildings.en#edit";
+#endif
+
const char *Hlp_CENTRE_Rooms =
#if L==1
"CENTRE.Rooms.es";
diff --git a/swad_menu.c b/swad_menu.c
index 0548cddd8..78561b6a3 100644
--- a/swad_menu.c
+++ b/swad_menu.c
@@ -94,7 +94,8 @@ static const Act_Action_t Mnu_MenuActions[Tab_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_
[TabCtr] = {
[ 0] = ActSeeCtrInf,
[ 1] = ActSeeDeg,
- [ 2] = ActSeeRoo,
+ [ 2] = ActSeeBld,
+ [ 3] = ActSeeRoo,
},
[TabDeg] = {
[ 0] = ActSeeDegInf,
diff --git a/swad_room.c b/swad_room.c
index bfbf9b7b9..6e3d18839 100644
--- a/swad_room.c
+++ b/swad_room.c
@@ -490,7 +490,7 @@ void Roo_FreeListRooms (struct Roo_Rooms *Rooms)
static void Roo_ListRoomsForEdition (const struct Roo_Rooms *Rooms)
{
- unsigned NumCla;
+ unsigned NumRoom;
struct Roo_Room *Room;
char StrCapacity[Cns_MAX_DECIMAL_DIGITS_UINT + 1];
@@ -499,11 +499,11 @@ static void Roo_ListRoomsForEdition (const struct Roo_Rooms *Rooms)
Roo_PutHeadRooms ();
/***** Write all the rooms *****/
- for (NumCla = 0;
- NumCla < Rooms->Num;
- NumCla++)
+ for (NumRoom = 0;
+ NumRoom < Rooms->Num;
+ NumRoom++)
{
- Room = &Rooms->Lst[NumCla];
+ Room = &Rooms->Lst[NumRoom];
HTM_TR_Begin (NULL);
diff --git a/swad_text.c b/swad_text.c
index 4eb9492d9..d1103a482 100644
--- a/swad_text.c
+++ b/swad_text.c
@@ -58,6 +58,7 @@
#include "swad_action.h"
#include "swad_assignment.h"
+#include "swad_building.h"
#include "swad_centre.h"
#include "swad_config.h"
#include "swad_country.h"
@@ -2979,6 +2980,201 @@ const char *Txt_Briefcases =
"Pasta";
#endif
+const char *Txt_Building =
+#if L==1 // ca
+ "Edifici";
+#elif L==2 // de
+ "Gebäude";
+#elif L==3 // en
+ "Building";
+#elif L==4 // es
+ "Edificio";
+#elif L==5 // fr
+ "Bâtiment";
+#elif L==6 // gn
+ "Edificio"; // Okoteve traducción
+#elif L==7 // it
+ "Edificio";
+#elif L==8 // pl
+ "Budynek";
+#elif L==9 // pt
+ "Edifício";
+#endif
+
+const char *Txt_Building_X_removed = // Warning: it is very important to include %s in the following sentences
+#if L==1 // ca
+ "Edifici %s eliminat.";
+#elif L==2 // de
+ "Gebäude %s entfernt.";
+#elif L==3 // en
+ "Building %s removed.";
+#elif L==4 // es
+ "Edificio %s eliminado.";
+#elif L==5 // fr
+ "Bâtiment %s supprimé.";
+#elif L==6 // gn
+ "Edificio %s eliminado."; // Okoteve traducción
+#elif L==7 // it
+ "Edificio %s rimosso.";
+#elif L==8 // pl
+ "Budynek %s usuniete.";
+#elif L==9 // pt
+ "Edifício %s removido.";
+#endif
+
+const char *Txt_BUILDINGS_HELP_ORDER[Bld_NUM_ORDERS] =
+ {
+ [Bld_ORDER_BY_SHRT_NAME] =
+#if L==1 // ca
+ "Ordenar per nom breu"
+#elif L==2 // de
+ "Nach Kurzname sortieren"
+#elif L==3 // en
+ "Sort by short name"
+#elif L==4 // es
+ "Ordenar por nombre breve"
+#elif L==5 // fr
+ "Trier par nom abrégé"
+#elif L==6 // gn
+ "Ordenar por nombre breve" // Okoteve traducción
+#elif L==7 // it
+ "Ordina per nome breve"
+#elif L==8 // pl
+ "Sortuj według krótkiej nazwy"
+#elif L==9 // pt
+ "Classificar por nome abreviado"
+#endif
+ ,
+ [Bld_ORDER_BY_FULL_NAME] =
+#if L==1 // ca
+ "Ordenar per nom complet"
+#elif L==2 // de
+ "Nach vollständiger Name sortieren"
+#elif L==3 // en
+ "Sort by full name"
+#elif L==4 // es
+ "Ordenar por nombre completo"
+#elif L==5 // fr
+ "Trier par nom complet"
+#elif L==6 // gn
+ "Ordenar por nombre completo" // Okoteve traducción
+#elif L==7 // it
+ "Ordina per nome completo"
+#elif L==8 // pl
+ "Sortuj według pełna nazwa"
+#elif L==9 // pt
+ "Classificar por nome completo"
+#endif
+ ,
+ [Bld_ORDER_BY_LOCATION] =
+#if L==1 // ca
+ "Ordenar per ubicació"
+#elif L==2 // de
+ "Nach Standort sortieren"
+#elif L==3 // en
+ "Sort by location"
+#elif L==4 // es
+ "Ordenar por ubicación"
+#elif L==5 // fr
+ "Trier par emplacement"
+#elif L==6 // gn
+ "Ordenar por ubicación" // Okoteve traducción
+#elif L==7 // it
+ "Ordina per posizione"
+#elif L==8 // pl
+ "Sortuj według lokacja"
+#elif L==9 // pt
+ "Classificar por localização"
+#endif
+ };
+
+const char *Txt_BUILDINGS_ORDER[Bld_NUM_ORDERS] =
+ {
+ [Bld_ORDER_BY_SHRT_NAME] =
+#if L==1 // ca
+ "Nom breu"
+#elif L==2 // de
+ "Kurzname"
+#elif L==3 // en
+ "Short name"
+#elif L==4 // es
+ "Nombre breve"
+#elif L==5 // fr
+ "Nom abrégé"
+#elif L==6 // gn
+ "Nombre breve" // Okoteve traducción
+#elif L==7 // it
+ "Nome breve"
+#elif L==8 // pl
+ "Krótkiej nazwy"
+#elif L==9 // pt
+ "Nome abreviado"
+#endif
+ ,
+ [Bld_ORDER_BY_FULL_NAME] =
+#if L==1 // ca
+ "Nom complet"
+#elif L==2 // de
+ "Vollständiger Name"
+#elif L==3 // en
+ "Full name"
+#elif L==4 // es
+ "Nombre completo"
+#elif L==5 // fr
+ "Nom complet"
+#elif L==6 // gn
+ "Nombre completo" // Okoteve traducción
+#elif L==7 // it
+ "Nome completo"
+#elif L==8 // pl
+ "Pełna nazwa"
+#elif L==9 // pt
+ "Nome completo"
+#endif
+ ,
+ [Bld_ORDER_BY_LOCATION] =
+#if L==1 // ca
+ "Ubicació"
+#elif L==2 // de
+ "Standort"
+#elif L==3 // en
+ "Location"
+#elif L==4 // es
+ "Ubicación"
+#elif L==5 // fr
+ "Emplacement"
+#elif L==6 // gn
+ "Ñemohenda"
+#elif L==7 // it
+ "Posizione"
+#elif L==8 // pl
+ "Lokacja"
+#elif L==9 // pt
+ "Localização"
+#endif
+ };
+
+const char *Txt_Buildings =
+#if L==1 // ca
+ "Edificis";
+#elif L==2 // de
+ "Gebäude";
+#elif L==3 // en
+ "Buildings";
+#elif L==4 // es
+ "Edificios";
+#elif L==5 // fr
+ "Bâtiments";
+#elif L==6 // gn
+ "Edificios"; // Okoteve traducción
+#elif L==7 // it
+ "Edifici";
+#elif L==8 // pl
+ "Budynki";
+#elif L==9 // pt
+ "Edifícios";
+#endif
+
const char *Txt_Calculate =
#if L==1 // ca
"Calcular";
@@ -5452,6 +5648,27 @@ const char *Txt_Create_banner =
"Criar banner";
#endif
+const char *Txt_Create_building =
+#if L==1 // ca
+ "Crear edifici";
+#elif L==2 // de
+ "Gebäude eingeben";
+#elif L==3 // en
+ "Create building";
+#elif L==4 // es
+ "Crear edificio";
+#elif L==5 // fr
+ "Créer bâtiment";
+#elif L==6 // gn
+ "Crear edificio"; // Okoteve traducción
+#elif L==7 // it
+ "Crea edificio";
+#elif L==8 // pl
+ "Utwórz budynek";
+#elif L==9 // pt
+ "Criar edifício";
+#endif
+
const char *Txt_Create_centre =
#if L==1 // ca
"Crear centre";
@@ -5473,27 +5690,6 @@ const char *Txt_Create_centre =
"Criar centro";
#endif
-const char *Txt_Create_room =
-#if L==1 // ca
- "Crear sala";
-#elif L==2 // de
- "Raum eingeben";
-#elif L==3 // en
- "Create room";
-#elif L==4 // es
- "Crear sala";
-#elif L==5 // fr
- "Créer salle";
-#elif L==6 // gn
- "Crear sala"; // Okoteve traducción
-#elif L==7 // it
- "Crea aula";
-#elif L==8 // pl
- "Utwórz klasa";
-#elif L==9 // pt
- "Criar sala";
-#endif
-
const char *Txt_Create_country =
#if L==1 // ca
"Crear país"; // Necessita traduccio
@@ -5956,6 +6152,27 @@ const char *Txt_Create_record_field =
"Criar campo de cartão";
#endif
+const char *Txt_Create_room =
+#if L==1 // ca
+ "Crear sala";
+#elif L==2 // de
+ "Raum eingeben";
+#elif L==3 // en
+ "Create room";
+#elif L==4 // es
+ "Crear sala";
+#elif L==5 // fr
+ "Créer salle";
+#elif L==6 // gn
+ "Crear sala"; // Okoteve traducción
+#elif L==7 // it
+ "Crea aula";
+#elif L==8 // pl
+ "Utwórz klasa";
+#elif L==9 // pt
+ "Criar sala";
+#endif
+
const char *Txt_Create_survey =
#if L==1 // ca
"Crear enquesta";
@@ -6103,6 +6320,27 @@ const char *Txt_Created_new_banner_X = // Warning: it is very important to inclu
"Criado novo banner %s.";
#endif
+const char *Txt_Created_new_building_X = // Warning: it is very important to include %s in the following sentences
+#if L==1 // ca
+ "Creat nou edifici %s.";
+#elif L==2 // de
+ "Neues Gebäude %s eingegeben.";
+#elif L==3 // en
+ "Created new building %s.";
+#elif L==4 // es
+ "Creada nuevo edificio %s.";
+#elif L==5 // fr
+ "Créé nouveau bâtiment %s.";
+#elif L==6 // gn
+ "Creada nuevo edificio %s."; // Okoteve traducción
+#elif L==7 // it
+ "Creato nuovo edificio %s.";
+#elif L==8 // pl
+ "Utworzono nowe budynek %s.";
+#elif L==9 // pt
+ "Criado novo edifício %s.";
+#endif
+
const char *Txt_Created_new_centre_X = // Warning: it is very important to include %s in the following sentences
#if L==1 // ca
"Creat nou centre %s."; // Necessita traduccio
@@ -6124,27 +6362,6 @@ const char *Txt_Created_new_centre_X = // Warning: it is very important to inclu
"Criado novo centro %s.";
#endif
-const char *Txt_Created_new_room_X = // Warning: it is very important to include %s in the following sentences
-#if L==1 // ca
- "Creada nova sala %s.";
-#elif L==2 // de
- "Neuer Raum %s eingegeben.";
-#elif L==3 // en
- "Created new room %s.";
-#elif L==4 // es
- "Creada nueva sala %s.";
-#elif L==5 // fr
- "Créé nouvelle salle %s.";
-#elif L==6 // gn
- "Creada nueva sala %s."; // Okoteve traducción
-#elif L==7 // it
- "Creata nuova aula %s.";
-#elif L==8 // pl
- "Utworzono nowe klasa %s.";
-#elif L==9 // pt
- "Criada nova sala %s.";
-#endif
-
const char *Txt_Created_new_country_X = // Warning: it is very important to include %s in the following sentences
#if L==1 // ca
"Creado nuevo país %s."; // Necessita traduccio
@@ -6460,6 +6677,27 @@ const char *Txt_Created_new_record_field_X = // Warning: it is very important to
"Criado novo campo de cartão %s.";
#endif
+const char *Txt_Created_new_room_X = // Warning: it is very important to include %s in the following sentences
+#if L==1 // ca
+ "Creada nova sala %s.";
+#elif L==2 // de
+ "Neuer Raum %s eingegeben.";
+#elif L==3 // en
+ "Created new room %s.";
+#elif L==4 // es
+ "Creada nueva sala %s.";
+#elif L==5 // fr
+ "Créé nouvelle salle %s.";
+#elif L==6 // gn
+ "Creada nueva sala %s."; // Okoteve traducción
+#elif L==7 // it
+ "Creata nuova aula %s.";
+#elif L==8 // pl
+ "Utworzono nowe klasa %s.";
+#elif L==9 // pt
+ "Criada nova sala %s.";
+#endif
+
const char *Txt_Created_new_survey_X = // Warning: it is very important to include %s in the following sentences
#if L==1 // ca
"Creada nova enquesta %s.";
@@ -19022,7 +19260,28 @@ const char *Txt_MENU_TITLE[Tab_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB] =
"Graus"
#endif
,
- // 2: ActSeeRoo
+ // 2: ActSeeBld
+#if L==1 // ca
+ "Edificis"
+#elif L==2 // de
+ "Gebäude"
+#elif L==3 // en
+ "Buildings"
+#elif L==4 // es
+ "Edificios"
+#elif L==5 // fr
+ "Bâtiments"
+#elif L==6 // gn
+ "Edificios" // Okoteve traducción
+#elif L==7 // it
+ "Edifici"
+#elif L==8 // pl
+ "Budynki"
+#elif L==9 // pt
+ "Edifícios"
+#endif
+ ,
+ // 3: ActSeeRoo
#if L==1 // ca
"Sales"
#elif L==2 // de
@@ -19043,7 +19302,6 @@ const char *Txt_MENU_TITLE[Tab_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB] =
"Salas"
#endif
,
- NULL, // 3
NULL, // 4
NULL, // 5
NULL, // 6
@@ -20878,7 +21136,28 @@ const char *Txt_MENU_SUBTITLE[Tab_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB] =
"Graus"
#endif
,
- // 2: ActSeeRoo
+ // 2: ActSeeBld
+#if L==1 // ca
+ "Edificis de el centre educatiu"
+#elif L==2 // de
+ "Gebäude des Bildungszentrums"
+#elif L==3 // en
+ "Educational center buildings"
+#elif L==4 // es
+ "Edificios del centro educativo"
+#elif L==5 // fr
+ "Bâtiments du centre éducatif"
+#elif L==6 // gn
+ "Edificios del centro educativo" // Okoteve traducción
+#elif L==7 // it
+ "Edifici del centro educativo"
+#elif L==8 // pl
+ "Budynki centrum edukacyjnego"
+#elif L==9 // pt
+ "Edifícios do centro educacional"
+#endif
+ ,
+ // 3: ActSeeRoo
#if L==1 // ca
"Aules, laboratoris o altres llocs"
#elif L==2 // de
@@ -20899,7 +21178,6 @@ const char *Txt_MENU_SUBTITLE[Tab_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB] =
"Salas de aula, laboratórios ou outros locais"
#endif
,
- NULL, // 3
NULL, // 4
NULL, // 5
NULL, // 6
@@ -24079,6 +24357,27 @@ const char *Txt_New_banner =
"Novo banner";
#endif
+const char *Txt_New_building =
+#if L==1 // ca
+ "Nou edifici";
+#elif L==2 // de
+ "Neues Gebäude";
+#elif L==3 // en
+ "New building";
+#elif L==4 // es
+ "Nuevo edificio";
+#elif L==5 // fr
+ "Nouveau bâtiment";
+#elif L==6 // gn
+ "Nuevo edificio"; // Okoteve traducción
+#elif L==7 // it
+ "Nuovo edificio";
+#elif L==8 // pl
+ "Nowe budynek";
+#elif L==9 // pt
+ "Novo edifício";
+#endif
+
const char *Txt_New_centre =
#if L==1 // ca
"Nou centre (facultat, escola, institut, divisió, edifici...)";
@@ -24100,27 +24399,6 @@ const char *Txt_New_centre =
"Novo centro (faculdade, escola, faculdade, divisão, construção...)";
#endif
-const char *Txt_New_room =
-#if L==1 // ca
- "Nova sala";
-#elif L==2 // de
- "Neue Raum";
-#elif L==3 // en
- "New room";
-#elif L==4 // es
- "Nueva sala";
-#elif L==5 // fr
- "Nouvelle salle";
-#elif L==6 // gn
- "Nueva sala"; // Okoteve traducción
-#elif L==7 // it
- "Nuova aula";
-#elif L==8 // pl
- "Nowe klasa";
-#elif L==9 // pt
- "Nova sala";
-#endif
-
const char *Txt_New_country =
#if L==1 // ca
"Nuevo país"; // Necessita traduccio
@@ -24667,6 +24945,27 @@ const char *Txt_New_record_field =
"Novo campo de cartão";
#endif
+const char *Txt_New_room =
+#if L==1 // ca
+ "Nova sala";
+#elif L==2 // de
+ "Neue Raum";
+#elif L==3 // en
+ "New room";
+#elif L==4 // es
+ "Nueva sala";
+#elif L==5 // fr
+ "Nouvelle salle";
+#elif L==6 // gn
+ "Nueva sala"; // Okoteve traducción
+#elif L==7 // it
+ "Nuova aula";
+#elif L==8 // pl
+ "Nowe klasa";
+#elif L==9 // pt
+ "Nova sala";
+#endif
+
const char *Txt_New_TIMELINE_comment =
#if L==1 // ca
"Nou comentari";
@@ -44244,6 +44543,48 @@ const char *Txt_The_banner_X_has_been_renamed_as_Y = // Warning: it is very impo
"O banner %s foi renomeado como %s.";
#endif
+const char *Txt_The_building_X_already_exists = // Warning: it is very important to include %s in the following sentences
+#if L==1 // ca
+ "L'edifici %s ja existeix.";
+#elif L==2 // de
+ "Das Gebäude %s wurde bereits eingegeben.";
+#elif L==3 // en
+ "The building %s already exists.";
+#elif L==4 // es
+ "El edificio %s ya existe.";
+#elif L==5 // fr
+ "Le bâtiment %s existe déjà.";
+#elif L==6 // gn
+ "El edificio %s ya existe."; // Okoteve traducción
+#elif L==7 // it
+ "L'edificio %s già esiste.";
+#elif L==8 // pl
+ "Budynek %s już istnieje.";
+#elif L==9 // pt
+ "O edifício %s já existe.";
+#endif
+
+const char *Txt_The_building_X_has_been_renamed_as_Y = // Warning: it is very important to include two %s in the following sentences
+#if L==1 // ca
+ "L'edifici %s ha passat a denominar-se %s.";
+#elif L==2 // de
+ "Das Gebäude %s wurde in %s umbenannt.";
+#elif L==3 // en
+ "The building %s has been renamed as %s.";
+#elif L==4 // es
+ "El edificio %s ha pasado a denominarse %s.";
+#elif L==5 // fr
+ "Le bâtiment %s a été renommée en %s.";
+#elif L==6 // gn
+ "El edificio %s ha pasado a denominarse %s."; // Okoteve traducción
+#elif L==7 // it
+ "L'edificio %s è stata rinominata come %s.";
+#elif L==8 // pl
+ "Budynek %s zostało przemianowane na %s.";
+#elif L==9 // pt
+ "O edifício %s foi renomeado como %s.";
+#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 %s no ha canviat.";
@@ -44358,90 +44699,6 @@ const char *Txt_The_centre_X_has_been_renamed_as_Y = // Warning: it is very impo
"O centro %s foi renomeado como %s.";
#endif
-const char *Txt_The_room_X_already_exists = // Warning: it is very important to include %s in the following sentences
-#if L==1 // ca
- "La sala %s ja existeix.";
-#elif L==2 // de
- "Das Raum %s wurde bereits eingegeben.";
-#elif L==3 // en
- "The room %s already exists.";
-#elif L==4 // es
- "La sala %s ya existe.";
-#elif L==5 // fr
- "La salle %s existe déjà.";
-#elif L==6 // gn
- "La sala %s ya existe."; // Okoteve traducción
-#elif L==7 // it
- "L'aula %s già esiste.";
-#elif L==8 // pl
- "Klasa %s już istnieje.";
-#elif L==9 // pt
- "A sala %s já existe.";
-#endif
-
-const char *Txt_The_room_X_does_not_have_a_limited_capacity_now = // Warning: it is very important to include %s in the following sentences
-#if L==1 // ca
- "La sala %s ja no té un aforament limitat.";
-#elif L==2 // de
- "Das Raum %s hat jetzt keine begrenzte Kapazität.";
-#elif L==3 // en
- "The room %s does not have a limited capacity now.";
-#elif L==4 // es
- "La sala %s ya no tiene un aforo limitado.";
-#elif L==5 // fr
- "La salle %s n'a plus de capacité limitée.";
-#elif L==6 // gn
- "La sala %s ya no tiene un aforo limitado."; // Okoteve traducción
-#elif L==7 // it
- "L'aula %s non ha una capacità limitata ora.";
-#elif L==8 // pl
- "Klasa %s nie ma teraz ograniczonej pojemności.";
-#elif L==9 // pt
- "A sala %s não tem capacidade limitada agora.";
-#endif
-
-const char *Txt_The_room_X_has_been_renamed_as_Y = // Warning: it is very important to include two %s in the following sentences
-#if L==1 // ca
- "La sala %s ha passat a denominar-se %s.";
-#elif L==2 // de
- "Das Raum %s wurde in %s umbenannt.";
-#elif L==3 // en
- "The room %s has been renamed as %s.";
-#elif L==4 // es
- "La sala %s ha pasado a denominarse %s.";
-#elif L==5 // fr
- "La salle %s a été renommée en %s.";
-#elif L==6 // gn
- "La sala %s ha pasado a denominarse %s."; // Okoteve traducción
-#elif L==7 // it
- "L'aula %s è stata rinominata come %s.";
-#elif L==8 // pl
- "Klasa %s zostało przemianowane na %s.";
-#elif L==9 // pt
- "A sala %s foi renomeada como %s.";
-#endif
-
-const char *Txt_The_room_assigned_to_the_group_X_has_changed =
-#if L==1 // ca
- "La sala assignada al grup %s ha canviat.";
-#elif L==2 // de
- "Das der Gruppe %s zugeordnete Raum hat sich geändert.";
-#elif L==3 // en
- "The room assigned to the group %s has changed.";
-#elif L==4 // es
- "La sala asignada al grupo %s ha cambiado.";
-#elif L==5 // fr
- "La salle affectée au groupe %s a changé.";
-#elif L==6 // gn
- "La sala asignada al grupo %s ha cambiado."; // Okoteve traducción
-#elif L==7 // it
- "L'aula assegnata al gruppo %s è cambiata.";
-#elif L==8 // pl
- "Klasa przypisana do grupy %s uległa zmianie.";
-#elif L==9 // pt
- "A sala atribuída ao grupo %s mudou.";
-#endif
-
const char *Txt_The_comment_no_longer_exists =
#if L==1 // ca
"El comentari ja no existeix.";
@@ -46302,6 +46559,66 @@ const char *Txt_The_list_of_X_users_is_too_large_to_be_displayed = // Warning: i
"A lista de %u usuários é muito grande para ser exibida.";
#endif
+const char *Txt_The_location_of_the_building_X_has_changed_to_Y = // Warning: it is very important to include two %s in the following sentences
+#if L==1 // ca
+ "La ubicació de l'edifici %s"
+ " ha canviat a %s.";
+#elif L==2 // de
+ "Der Standort des Gebäudes %s"
+ " wurde in %s geändert.";
+#elif L==3 // en
+ "The location of the building %s"
+ " has changed to %s.";
+#elif L==4 // es
+ "La ubicación del edificio %s"
+ " ha cambiado a %s.";
+#elif L==5 // fr
+ "L'emplacement du bâtiment %s"
+ " a été remplacé par %s.";
+#elif L==6 // gn
+ "La ubicación del edificio %s"
+ " ha cambiado a %s."; // Okoteve traducción
+#elif L==7 // it
+ "La posizione dell'edificio %s"
+ " è cambiata in %s.";
+#elif L==8 // pl
+ "Lokalizacja budynek %s"
+ " zmieniła się na %s.";
+#elif L==9 // pt
+ "A localização do edifício %s"
+ " mudou para %s.";
+#endif
+
+const char *Txt_The_location_of_the_building_X_has_not_changed = // Warning: it is very important to include %s in the following sentences
+#if L==1 // ca
+ "La ubicació de l'edifici %s"
+ " no ha canviat.";
+#elif L==2 // de
+ "Der Standort des Gebäudes %s"
+ " hat sich nicht geändert.";
+#elif L==3 // en
+ "The location of the building %s"
+ " has not changed.";
+#elif L==4 // es
+ "La ubicación del edificio %s"
+ " no ha cambiado.";
+#elif L==5 // fr
+ "L'emplacement du bâtiment %s"
+ " n'a pas changé.";
+#elif L==6 // gn
+ "La ubicación del edificio %s"
+ " no ha cambiado."; // Okoteve traducción
+#elif L==7 // it
+ "La posizione dell'edificio %s"
+ " non è cambiata.";
+#elif L==8 // pl
+ "Lokalizacja budynek %s"
+ " nie uległa zmianie.";
+#elif L==9 // pt
+ "A localização do edifício %s"
+ " nã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ó de la sala %s"
@@ -46566,6 +46883,27 @@ const char *Txt_The_name_of_the_banner_X_has_not_changed = // Warning: it is ver
"O nome do banner %s não foi alterado.";
#endif
+const char *Txt_The_name_of_the_building_X_has_not_changed = // Warning: it is very important to include %s in the following sentences
+#if L==1 // ca
+ "El nom de l'edifici %s no ha canviat.";
+#elif L==2 // de
+ "Der Name des Gebäudes %s hat sich nicht geändert.";
+#elif L==3 // en
+ "The name of the building %s has not changed.";
+#elif L==4 // es
+ "El nombre del edificio %s no ha cambiado.";
+#elif L==5 // fr
+ "Le nom du bâtiment %s n'a pas changé.";
+#elif L==6 // gn
+ "El nombre del edificio %s no ha cambiado."; // Okoteve traducción
+#elif L==7 // it
+ "Il nome dell'edificio %s non è cambiato.";
+#elif L==8 // pl
+ "Nazwa budynek %s nie uległa zmianie.";
+#elif L==9 // pt
+ "O nome do edifício %s não foi alterado.";
+#endif
+
const char *Txt_The_name_of_the_centre_X_has_not_changed = // Warning: it is very important to include %s in the following sentences
#if L==1 // ca
"El nombre del centro %s no ha cambiado."; // Necessita traduccio
@@ -46587,27 +46925,6 @@ const char *Txt_The_name_of_the_centre_X_has_not_changed = // Warning: it is ver
"O nome do centro %s não foi alterado.";
#endif
-const char *Txt_The_name_of_the_room_X_has_not_changed = // Warning: it is very important to include %s in the following sentences
-#if L==1 // ca
- "El nom de la sala %s no ha canviat.";
-#elif L==2 // de
- "Der Name des Raum %s hat sich nicht geändert.";
-#elif L==3 // en
- "The name of the room %s has not changed.";
-#elif L==4 // es
- "El nombre de la sala %s no ha cambiado.";
-#elif L==5 // fr
- "Le nom de la salle %s n'a pas changé.";
-#elif L==6 // gn
- "El nombre de la sala %s no ha cambiado."; // Okoteve traducción
-#elif L==7 // it
- "Il nome della aula %s non è cambiato.";
-#elif L==8 // pl
- "Nazwa klasy %s nie uległa zmianie.";
-#elif L==9 // pt
- "O nome da sala %s não foi alterado.";
-#endif
-
const char *Txt_The_name_of_the_country_X_has_not_changed = // Warning: it is very important to include %s in the following sentences
#if L==1 // ca
"El nombre del país %s no ha cambiado."; // Necessita traduccio
@@ -46902,6 +47219,27 @@ const char *Txt_The_name_of_the_plugin_X_has_not_changed = // Warning: it is ver
"O nome do plugin %s não foi alterado.";
#endif
+const char *Txt_The_name_of_the_room_X_has_not_changed = // Warning: it is very important to include %s in the following sentences
+#if L==1 // ca
+ "El nom de la sala %s no ha canviat.";
+#elif L==2 // de
+ "Der Name des Raum %s hat sich nicht geändert.";
+#elif L==3 // en
+ "The name of the room %s has not changed.";
+#elif L==4 // es
+ "El nombre de la sala %s no ha cambiado.";
+#elif L==5 // fr
+ "Le nom de la salle %s n'a pas changé.";
+#elif L==6 // gn
+ "El nombre de la sala %s no ha cambiado."; // Okoteve traducción
+#elif L==7 // it
+ "Il nome della aula %s non è cambiato.";
+#elif L==8 // pl
+ "Nazwa klasy %s nie uległa zmianie.";
+#elif L==9 // pt
+ "O nome da sala %s não foi alterado.";
+#endif
+
const char *Txt_The_name_of_the_type_of_degree_X_has_not_changed = // Warning: it is very important to include %s in the following sentences
#if L==1 // ca
"El nombre del tipo de titulación %s no ha cambiado."; // Necessita traduccio
@@ -47880,6 +48218,90 @@ const char *Txt_The_role_of_THE_USER_X_in_the_course_Y_has_changed_from_A_to_B =
" mudou de %s para %s.";
#endif
+const char *Txt_The_room_X_already_exists = // Warning: it is very important to include %s in the following sentences
+#if L==1 // ca
+ "La sala %s ja existeix.";
+#elif L==2 // de
+ "Das Raum %s wurde bereits eingegeben.";
+#elif L==3 // en
+ "The room %s already exists.";
+#elif L==4 // es
+ "La sala %s ya existe.";
+#elif L==5 // fr
+ "La salle %s existe déjà.";
+#elif L==6 // gn
+ "La sala %s ya existe."; // Okoteve traducción
+#elif L==7 // it
+ "L'aula %s già esiste.";
+#elif L==8 // pl
+ "Klasa %s już istnieje.";
+#elif L==9 // pt
+ "A sala %s já existe.";
+#endif
+
+const char *Txt_The_room_X_does_not_have_a_limited_capacity_now = // Warning: it is very important to include %s in the following sentences
+#if L==1 // ca
+ "La sala %s ja no té un aforament limitat.";
+#elif L==2 // de
+ "Das Raum %s hat jetzt keine begrenzte Kapazität.";
+#elif L==3 // en
+ "The room %s does not have a limited capacity now.";
+#elif L==4 // es
+ "La sala %s ya no tiene un aforo limitado.";
+#elif L==5 // fr
+ "La salle %s n'a plus de capacité limitée.";
+#elif L==6 // gn
+ "La sala %s ya no tiene un aforo limitado."; // Okoteve traducción
+#elif L==7 // it
+ "L'aula %s non ha una capacità limitata ora.";
+#elif L==8 // pl
+ "Klasa %s nie ma teraz ograniczonej pojemności.";
+#elif L==9 // pt
+ "A sala %s não tem capacidade limitada agora.";
+#endif
+
+const char *Txt_The_room_X_has_been_renamed_as_Y = // Warning: it is very important to include two %s in the following sentences
+#if L==1 // ca
+ "La sala %s ha passat a denominar-se %s.";
+#elif L==2 // de
+ "Das Raum %s wurde in %s umbenannt.";
+#elif L==3 // en
+ "The room %s has been renamed as %s.";
+#elif L==4 // es
+ "La sala %s ha pasado a denominarse %s.";
+#elif L==5 // fr
+ "La salle %s a été renommée en %s.";
+#elif L==6 // gn
+ "La sala %s ha pasado a denominarse %s."; // Okoteve traducción
+#elif L==7 // it
+ "L'aula %s è stata rinominata come %s.";
+#elif L==8 // pl
+ "Klasa %s zostało przemianowane na %s.";
+#elif L==9 // pt
+ "A sala %s foi renomeada como %s.";
+#endif
+
+const char *Txt_The_room_assigned_to_the_group_X_has_changed =
+#if L==1 // ca
+ "La sala assignada al grup %s ha canviat.";
+#elif L==2 // de
+ "Das der Gruppe %s zugeordnete Raum hat sich geändert.";
+#elif L==3 // en
+ "The room assigned to the group %s has changed.";
+#elif L==4 // es
+ "La sala asignada al grupo %s ha cambiado.";
+#elif L==5 // fr
+ "La salle affectée au groupe %s a changé.";
+#elif L==6 // gn
+ "La sala asignada al grupo %s ha cambiado."; // Okoteve traducción
+#elif L==7 // it
+ "L'aula assegnata al gruppo %s è cambiata.";
+#elif L==8 // pl
+ "Klasa przypisana do grupy %s uległa zmianie.";
+#elif L==9 // pt
+ "A sala atribuída ao grupo %s mudou.";
+#endif
+
const char *Txt_The_X_students_who_belonged_to_the_course_Y_have_been_removed_from_it = // Warning: it is very important to include %u and %s in the following sentences
#if L==1 // ca
"Se han eliminado los %u estudiantes que había"
@@ -56782,6 +57204,36 @@ const char *Txt_You_must_specify_the_short_name_and_the_full_name_of_the_new_ban
" do novo banner.";
#endif
+const char *Txt_You_must_specify_the_short_name_and_the_full_name_of_the_new_building =
+#if L==1 // ca
+ "Heu d'especificar el nom curt i el nom complet"
+ " de el nou edifici.";
+#elif L==2 // de
+ "Sie m¨ssen den Kurznamen und den vollständigen Namen"
+ " des neuen Gebäude angeben.";
+#elif L==3 // en
+ "You must specify the short name and the full name"
+ " of the new building.";
+#elif L==4 // es
+ "Debe especificar el nombre breve y el nombre completo"
+ " del nuevo edificio.";
+#elif L==5 // fr
+ "Vous devez spécifier le nom abrégé et le nom complet"
+ " du nouveau bâtiment.";
+#elif L==6 // gn
+ "Debe especificar el nombre breve y el nombre completo"
+ " del nuevo edificio."; // Okoteve traducción
+#elif L==7 // it
+ "Devi specificare il nome breve e completo"
+ " del nuovo edificio.";
+#elif L==8 // pl
+ "Musisz podać krótką nazwę i pełną nazwę"
+ " nowej budynek.";
+#elif L==9 // pt
+ "Você deve especificar o nome abreviado e o nome completo"
+ " do novo edifício.";
+#endif
+
const char *Txt_You_must_specify_the_short_name_and_the_full_name_of_the_new_centre =
#if L==1 // ca
"Debe especificar el nombre breve y el nombre completo"
@@ -56812,36 +57264,6 @@ const char *Txt_You_must_specify_the_short_name_and_the_full_name_of_the_new_cen
" do novo centro.";
#endif
-const char *Txt_You_must_specify_the_short_name_and_the_full_name_of_the_new_room =
-#if L==1 // ca
- "Heu d'especificar el nom curt i el nom complet"
- " de la nova sala.";
-#elif L==2 // de
- "Sie m¨ssen den Kurznamen und den vollständigen Namen"
- " des neuen Raum angeben.";
-#elif L==3 // en
- "You must specify the short name and the full name"
- " of the new room.";
-#elif L==4 // es
- "Debe especificar el nombre breve y el nombre completo"
- " de la nueva sala.";
-#elif L==5 // fr
- "Vous devez spécifier le nom abrégé et le nom complet"
- " de la nouvelle salle.";
-#elif L==6 // gn
- "Debe especificar el nombre breve y el nombre completo"
- " de la nueva sala."; // Okoteve traducción
-#elif L==7 // it
- "Devi specificare il nome breve e completo"
- " della nuova aula.";
-#elif L==8 // pl
- "Musisz podać krótką nazwę i pełną nazwę"
- " nowej klasy.";
-#elif L==9 // pt
- "Você deve especificar o nome abreviado e o nome completo"
- " da nova sala.";
-#endif
-
const char *Txt_You_must_specify_the_short_name_and_the_full_name_of_the_new_course =
#if L==1 // ca
"Debe especificar el nombre breve y el nombre completo"
@@ -57052,6 +57474,36 @@ const char *Txt_You_must_specify_the_short_name_and_the_full_name_of_the_new_pla
" da nova localização.";
#endif
+const char *Txt_You_must_specify_the_short_name_and_the_full_name_of_the_new_room =
+#if L==1 // ca
+ "Heu d'especificar el nom curt i el nom complet"
+ " de la nova sala.";
+#elif L==2 // de
+ "Sie m¨ssen den Kurznamen und den vollständigen Namen"
+ " des neuen Raum angeben.";
+#elif L==3 // en
+ "You must specify the short name and the full name"
+ " of the new room.";
+#elif L==4 // es
+ "Debe especificar el nombre breve y el nombre completo"
+ " de la nueva sala.";
+#elif L==5 // fr
+ "Vous devez spécifier le nom abrégé et le nom complet"
+ " de la nouvelle salle.";
+#elif L==6 // gn
+ "Debe especificar el nombre breve y el nombre completo"
+ " de la nueva sala."; // Okoteve traducción
+#elif L==7 // it
+ "Devi specificare il nome breve e completo"
+ " della nuova aula.";
+#elif L==8 // pl
+ "Musisz podać krótką nazwę i pełną nazwę"
+ " nowej klasy.";
+#elif L==9 // pt
+ "Você deve especificar o nome abreviado e o nome completo"
+ " da nova sala.";
+#endif
+
const char *Txt_You_must_specify_the_title_of_the_assignment =
#if L==1 // ca
"Cal especificar el títol de l'activitat.";
diff --git a/swad_text_action.c b/swad_text_action.c
index a9b523aeb..4a32e12c6 100644
--- a/swad_text_action.c
+++ b/swad_text_action.c
@@ -3567,6 +3567,27 @@ const char *Txt_Actions[Act_NUM_ACTIONS] =
"" // Potrzebujesz tlumaczenie
#elif L==9 // pt
"" // Precisa de tradução
+#endif
+ ,
+ [ActSeeBld] =
+#if L==1 // ca
+ "" // Necessita traducció
+#elif L==2 // de
+ "" // Need Übersetzung
+#elif L==3 // en
+ "List buildings in a centre"
+#elif L==4 // es
+ "Listar edificios de un centro"
+#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
,
[ActSeeRoo] =
@@ -4197,6 +4218,132 @@ const char *Txt_Actions[Act_NUM_ACTIONS] =
"" // Potrzebujesz tlumaczenie
#elif L==9 // pt
"" // Precisa de tradução
+#endif
+ ,
+ [ActEdiBld] =
+#if L==1 // ca
+ "" // Necessita traducció
+#elif L==2 // de
+ "" // Need Übersetzung
+#elif L==3 // en
+ "Edit buildings"
+#elif L==4 // es
+ "Editar edificios"
+#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
+ ,
+ [ActNewBld] =
+#if L==1 // ca
+ "" // Necessita traducció
+#elif L==2 // de
+ "" // Need Übersetzung
+#elif L==3 // en
+ "Request the creation of a building"
+#elif L==4 // es
+ "Solicitar la creación de un edificio"
+#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
+ ,
+ [ActRemBld] =
+#if L==1 // ca
+ "" // Necessita traducció
+#elif L==2 // de
+ "" // Need Übersetzung
+#elif L==3 // en
+ "Remove a building"
+#elif L==4 // es
+ "Eliminar edificio"
+#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
+ ,
+ [ActRenBldSho] =
+#if L==1 // ca
+ "" // Necessita traducció
+#elif L==2 // de
+ "" // Need Übersetzung
+#elif L==3 // en
+ "Change short name of a building"
+#elif L==4 // es
+ "Cambiar nombre breve de edificio"
+#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
+ ,
+ [ActRenBldFul] =
+#if L==1 // ca
+ "" // Necessita traducció
+#elif L==2 // de
+ "" // Need Übersetzung
+#elif L==3 // en
+ "Change full name of a building"
+#elif L==4 // es
+ "Cambiar nombre completo de edificio"
+#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
+ ,
+ [ActRenBldLoc] =
+#if L==1 // ca
+ "" // Necessita traducció
+#elif L==2 // de
+ "" // Need Übersetzung
+#elif L==3 // en
+ "Change location of a building"
+#elif L==4 // es
+ "Cambiar ubicación de un edificio"
+#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
,
[ActEdiRoo] =