Version 18.26.1

This commit is contained in:
Antonio Cañas Vargas 2019-01-02 22:06:29 +01:00
parent 7db7b51de2
commit 75ddfa7385
7 changed files with 210 additions and 132 deletions

View File

@ -185,7 +185,7 @@ CREATE TABLE IF NOT EXISTS classrooms (
CtrCod INT NOT NULL,
ShortName VARCHAR(511) NOT NULL,
FullName VARCHAR(2047) NOT NULL,
MaxStudents INT NOT NULL,
Capacity INT NOT NULL,
UNIQUE INDEX(ClaCod),
INDEX(CtrCod));
--

View File

@ -364,10 +364,15 @@ En OpenSWAD:
ps2pdf source.ps destination.pdf
*/
#define Log_PLATFORM_VERSION "SWAD 18.26 (2019-01-02)"
#define Log_PLATFORM_VERSION "SWAD 18.26.1 (2019-01-02)"
#define CSS_FILE "swad18.22.css"
#define JS_FILE "swad17.17.1.js"
/*
Version 18.26.1: Jan 02, 2019 "Maximum number of students" in a classroom is changed to "(seating) capacity". (238702 lines)
2 changes necessary in database:
ALTER TABLE classrooms CHANGE COLUMN MaxStudents Capacity INT NOT NULL;
UPDATE actions SET Txt='Cambiar aforo de aula' WHERE ActCod='1750' AND Language='es';
Version 18.26: Jan 02, 2019 New form and action to change maximum number of students in a classroom. (? lines)
4 changes necessary in database:
DROP INDEX NumStds ON classrooms;

View File

@ -70,7 +70,7 @@ static void Cla_RenameClassroom (Cns_ShrtOrFullName_t ShrtOrFullName);
static bool Cla_CheckIfClassroomNameExists (const char *FieldName,const char *Name,long ClaCod);
static void Cla_UpdateClaNameDB (long ClaCod,const char *FieldName,const char *NewClaName);
static void Cla_WriteMaxStds (unsigned MaxStudents);
static void Cla_WriteCapacity (unsigned Capacity);
static void Cla_PutFormToCreateClassroom (void);
static void Cla_PutHeadClassrooms (void);
@ -104,7 +104,7 @@ void Cla_SeeClassrooms (void)
Tbl_StartTableWideMargin (2);
fprintf (Gbl.F.Out,"<tr>");
for (Order = Cla_ORDER_BY_CLASSROOM;
Order <= Cla_ORDER_BY_MAX_STDS;
Order <= Cla_ORDER_BY_CAPACITY;
Order++)
{
fprintf (Gbl.F.Out,"<th class=\"LEFT_MIDDLE\">");
@ -134,7 +134,7 @@ void Cla_SeeClassrooms (void)
"</td>"
"<td class=\"DAT RIGHT_MIDDLE\">",
Gbl.Classrooms.Lst[NumCla].FullName);
Cla_WriteMaxStds (Gbl.Classrooms.Lst[NumCla].MaxStudents);
Cla_WriteCapacity (Gbl.Classrooms.Lst[NumCla].Capacity);
fprintf (Gbl.F.Out,"</td>"
"</tr>");
}
@ -274,15 +274,15 @@ void Cla_GetListClassrooms (void)
case Cla_ORDER_BY_CLASSROOM:
sprintf (OrderBySubQuery,"FullName");
break;
case Cla_ORDER_BY_MAX_STDS:
sprintf (OrderBySubQuery,"MaxStudents DESC,FullName");
case Cla_ORDER_BY_CAPACITY:
sprintf (OrderBySubQuery,"Capacity DESC,FullName");
break;
}
NumRows = DB_QuerySELECT (&mysql_res,"can not get classrooms",
"SELECT ClaCod,"
"ShortName,"
"FullName,"
"MaxStudents"
"Capacity"
" FROM classrooms"
" WHERE CtrCod=%ld"
" ORDER BY %s",
@ -320,9 +320,9 @@ void Cla_GetListClassrooms (void)
Str_Copy (Cla->FullName,row[2],
Cla_MAX_BYTES_CLASSROOM_FULL_NAME);
/* Get maximum number of students in this classroom (row[3]) */
if (sscanf (row[3],"%u",&Cla->MaxStudents) != 1)
Cla->MaxStudents = 0;
/* Get seating capacity in this classroom (row[3]) */
if (sscanf (row[3],"%u",&Cla->Capacity) != 1)
Cla->Capacity = Cla_UNLIMITED_CAPACITY;
}
}
else
@ -347,7 +347,7 @@ void Cla_GetDataOfClassroomByCod (struct Classroom *Cla)
/***** Clear data *****/
Cla->ShrtName[0] = '\0';
Cla->FullName[0] = '\0';
Cla->MaxStudents = 0;
Cla->Capacity = Cla_UNLIMITED_CAPACITY;
/***** Check if classroom code is correct *****/
if (Cla->ClaCod < 0)
@ -370,7 +370,7 @@ void Cla_GetDataOfClassroomByCod (struct Classroom *Cla)
NumRows = DB_QuerySELECT (&mysql_res,"can not get data of a classroom",
"SELECT ShortName,"
"FullName,"
"MaxStudents"
"Capacity"
" FROM classrooms"
" WHERE ClaCod=%ld",
Cla->ClaCod);
@ -389,9 +389,9 @@ void Cla_GetDataOfClassroomByCod (struct Classroom *Cla)
Str_Copy (Cla->FullName,row[1],
Cla_MAX_BYTES_CLASSROOM_FULL_NAME);
/* Get maximum number of students in this classroom (row[2]) */
if (sscanf (row[2],"%u",&Cla->MaxStudents) != 1)
Cla->MaxStudents = 0;
/* Get seating capacity in this classroom (row[2]) */
if (sscanf (row[2],"%u",&Cla->Capacity) != 1)
Cla->Capacity = Cla_UNLIMITED_CAPACITY;
}
/***** Free structure that stores the query result *****/
@ -473,13 +473,13 @@ static void Cla_ListClassroomsForEdition (void)
Frm_EndForm ();
fprintf (Gbl.F.Out,"</td>");
/* Maximum number of students */
/* Seating capacity */
fprintf (Gbl.F.Out,"<td class=\"CENTER_MIDDLE\">");
Frm_StartForm (ActChgClaMaxStd);
Cla_PutParamClaCod (Cla->ClaCod);
fprintf (Gbl.F.Out,"<input type=\"text\" name=\"MaxStudents\""
fprintf (Gbl.F.Out,"<input type=\"text\" name=\"Capacity\""
" size=\"3\" maxlength=\"10\" value=\"");
Cla_WriteMaxStds (Cla->MaxStudents);
Cla_WriteCapacity (Cla->Capacity);
fprintf (Gbl.F.Out,"\" onchange=\"document.getElementById('%s').submit();\" />",
Gbl.Form.Id);
Frm_EndForm ();
@ -687,11 +687,11 @@ static void Cla_UpdateClaNameDB (long ClaCod,const char *FieldName,const char *N
void Cla_ChangeMaxStudents (void)
{
extern const char *Txt_The_maximum_number_of_students_has_not_changed;
extern const char *Txt_The_classroom_X_does_not_have_a_student_limit_now;
extern const char *Txt_The_maximum_number_of_students_is_now_X;
extern const char *Txt_The_capacity_of_classroom_X_has_not_changed;
extern const char *Txt_The_classroom_X_does_not_have_a_limited_capacity_now;
extern const char *Txt_The_capacity_of_classroom_X_is_now_Y;
struct Classroom *Cla;
unsigned NewMaxStds;
unsigned NewCapacity;
/***** Use current editing classroom *****/
Cla = &Gbl.Classrooms.EditingCla;
@ -701,44 +701,44 @@ void Cla_ChangeMaxStudents (void)
if ((Cla->ClaCod = Cla_GetParamClaCod ()) == -1L)
Lay_ShowErrorAndExit ("Code of classroom is missing.");
/* Get the new maximum number of students of the group */
NewMaxStds = (unsigned)
Par_GetParToUnsignedLong ("MaxStudents",
/* Get the seating capacity of the classroom */
NewCapacity = (unsigned)
Par_GetParToUnsignedLong ("Capacity",
0,
Cla_MAX_STUDENTS_IN_A_CLASSROOM,
Cla_NUM_STUDENTS_NOT_LIMITED);
Cla_MAX_CAPACITY_OF_A_CLASSROOM,
Cla_UNLIMITED_CAPACITY);
/***** Get data of the classroom from database *****/
Cla_GetDataOfClassroomByCod (Cla);
/***** Check if the old maximum of students equals the new one
/***** Check if the old capacity equals the new one
(this happens when return is pressed without changes) *****/
if (Cla->MaxStudents == NewMaxStds)
if (Cla->Capacity == NewCapacity)
{
/***** Message to show no changes made *****/
Gbl.Alert.Type = Ale_INFO;
Str_Copy (Gbl.Alert.Txt,Txt_The_maximum_number_of_students_has_not_changed,
Ale_MAX_BYTES_ALERT);
snprintf (Gbl.Alert.Txt,sizeof (Gbl.Alert.Txt),
Txt_The_capacity_of_classroom_X_has_not_changed,
Cla->FullName);
}
else
{
/***** Update the table of groups changing the old maximum of students to the new *****/
DB_QueryUPDATE ("can not update the maximum number of students"
" in a classroom",
"UPDATE classrooms SET MaxStudents=%u WHERE ClaCod=%ld",
NewMaxStds,Cla->ClaCod);
Cla->MaxStudents = NewMaxStds;
/***** Update the table of groups changing the old capacity to the new *****/
DB_QueryUPDATE ("can not update the capacity of a classroom",
"UPDATE classrooms SET Capacity=%u WHERE ClaCod=%ld",
NewCapacity,Cla->ClaCod);
Cla->Capacity = NewCapacity;
/***** Message to show the change made *****/
Gbl.Alert.Type = Ale_SUCCESS;
if (NewMaxStds > Grp_MAX_STUDENTS_IN_A_GROUP)
if (NewCapacity > Grp_MAX_STUDENTS_IN_A_GROUP)
snprintf (Gbl.Alert.Txt,sizeof (Gbl.Alert.Txt),
Txt_The_classroom_X_does_not_have_a_student_limit_now,
Txt_The_classroom_X_does_not_have_a_limited_capacity_now,
Cla->FullName);
else
snprintf (Gbl.Alert.Txt,sizeof (Gbl.Alert.Txt),
Txt_The_maximum_number_of_students_is_now_X,
NewMaxStds);
Txt_The_capacity_of_classroom_X_is_now_Y,
Cla->FullName,NewCapacity);
}
Ale_ShowAlert (Gbl.Alert.Type,Gbl.Alert.Txt);
@ -747,13 +747,13 @@ void Cla_ChangeMaxStudents (void)
}
/*****************************************************************************/
/*********** Write the maximum number of students in a classroom *************/
/****************** Write seating capacity of a classroom ********************/
/*****************************************************************************/
static void Cla_WriteMaxStds (unsigned MaxStudents)
static void Cla_WriteCapacity (unsigned Capacity)
{
if (MaxStudents <= Cla_MAX_STUDENTS_IN_A_CLASSROOM)
fprintf (Gbl.F.Out,"%u",MaxStudents);
if (Capacity <= Cla_MAX_CAPACITY_OF_A_CLASSROOM)
fprintf (Gbl.F.Out,"%u",Capacity);
}
/*****************************************************************************/
@ -804,11 +804,11 @@ static void Cla_PutFormToCreateClassroom (void)
"</td>",
Cla_MAX_CHARS_CLASSROOM_FULL_NAME,Cla->FullName);
/***** Number of students *****/
/***** Seating capacity *****/
fprintf (Gbl.F.Out,"<td class=\"CENTER_MIDDLE\">"
"<input type=\"text\" name=\"MaxStudents\""
"<input type=\"text\" name=\"Capacity\""
" size=\"3\" maxlength=\"10\" value=\"");
Cla_WriteMaxStds (Cla->MaxStudents);
Cla_WriteCapacity (Cla->Capacity);
fprintf (Gbl.F.Out,"\" />"
"</td>"
"</tr>");
@ -829,7 +829,7 @@ static void Cla_PutHeadClassrooms (void)
extern const char *Txt_Code;
extern const char *Txt_Short_name;
extern const char *Txt_Full_name;
extern const char *Txt_Max_BR_students;
extern const char *Txt_Capacity_OF_A_CLASSROOM;
fprintf (Gbl.F.Out,"<tr>"
"<th class=\"BM\"></th>"
@ -849,7 +849,7 @@ static void Cla_PutHeadClassrooms (void)
Txt_Code,
Txt_Short_name,
Txt_Full_name,
Txt_Max_BR_students);
Txt_Capacity_OF_A_CLASSROOM);
}
/*****************************************************************************/
@ -871,12 +871,12 @@ void Cla_RecFormNewClassroom (void)
/* Get classroom full name */
Par_GetParToText ("FullName",Cla->FullName,Cla_MAX_BYTES_CLASSROOM_FULL_NAME);
/* Get maximum number of students */
Cla->MaxStudents = (unsigned)
Par_GetParToUnsignedLong ("MaxStudents",
0,
Cla_MAX_STUDENTS_IN_A_CLASSROOM,
Cla_NUM_STUDENTS_NOT_LIMITED);
/* Get seating capacity */
Cla->Capacity = (unsigned)
Par_GetParToUnsignedLong ("Capacity",
0,
Cla_MAX_CAPACITY_OF_A_CLASSROOM,
Cla_UNLIMITED_CAPACITY);
if (Cla->ShrtName[0] && Cla->FullName[0]) // If there's a classroom name
{
@ -916,11 +916,11 @@ static void Cla_CreateClassroom (struct Classroom *Cla)
/***** Create a new classroom *****/
DB_QueryINSERT ("can not create classroom",
"INSERT INTO classrooms"
" (CtrCod,ShortName,FullName,MaxStudents)"
" (CtrCod,ShortName,FullName,Capacity)"
" VALUES"
" (%ld,'%s','%s',%u)",
Gbl.CurrentCtr.Ctr.CtrCod,
Cla->ShrtName,Cla->FullName,Cla->MaxStudents);
Cla->ShrtName,Cla->FullName,Cla->Capacity);
/***** Write success message *****/
snprintf (Gbl.Alert.Txt,sizeof (Gbl.Alert.Txt),

View File

@ -39,9 +39,9 @@
#define Cla_MAX_CHARS_CLASSROOM_FULL_NAME (128 - 1) // 127
#define Cla_MAX_BYTES_CLASSROOM_FULL_NAME ((Cla_MAX_CHARS_CLASSROOM_FULL_NAME + 1) * Str_MAX_BYTES_PER_CHAR - 1) // 2047
#define Cla_MAX_STUDENTS_IN_A_CLASSROOM 10000 // If max of students in a classroom is greater than this, it is considered infinite
#define Cla_NUM_STUDENTS_NOT_LIMITED INT_MAX // This number can be stored in database as an integer...
// ...and means that a classroom has no limit of students
#define Cla_MAX_CAPACITY_OF_A_CLASSROOM 10000 // If capacity of a classroom is greater than this, it is considered infinite
#define Cla_UNLIMITED_CAPACITY INT_MAX // This number can be stored in database as an integer...
// ...and means that a classroom has no limited capacity
struct Classroom
{
@ -49,14 +49,14 @@ struct Classroom
long InsCod;
char ShrtName[Cla_MAX_BYTES_CLASSROOM_SHRT_NAME + 1];
char FullName[Cla_MAX_BYTES_CLASSROOM_FULL_NAME + 1];
unsigned MaxStudents;
unsigned Capacity; // Seating capacity (maximum number of people that fit in the room)
};
#define Cla_NUM_ORDERS 2
typedef enum
{
Cla_ORDER_BY_CLASSROOM = 0,
Cla_ORDER_BY_MAX_STDS = 1,
Cla_ORDER_BY_CAPACITY = 1,
} Cla_Order_t;
#define Cla_ORDER_DEFAULT Cla_ORDER_BY_CLASSROOM

View File

@ -235,7 +235,7 @@ void Gbl_InitializeGlobals (void)
Gbl.CurrentDeg.Deg.DegCod = -1L;
Gbl.CurrentDeg.Deg.ShrtName[0] = Gbl.CurrentDeg.Deg.FullName[0] = '\0';
Gbl.Classrooms.EditingCla.MaxStudents = Cla_NUM_STUDENTS_NOT_LIMITED;
Gbl.Classrooms.EditingCla.Capacity = Cla_UNLIMITED_CAPACITY;
Gbl.CurrentCrs.Crs.CrsCod = -1L;
Gbl.CurrentCrs.Crs.ShrtName[0] = Gbl.CurrentCrs.Crs.FullName[0] = '\0';

View File

@ -4476,9 +4476,9 @@ void Grp_ChangeOpenTimeGrpTyp (void)
void Grp_ChangeMaxStdsGrp (void)
{
extern const char *Txt_The_maximum_number_of_students_has_not_changed;
extern const char *Txt_The_maximum_number_of_students_in_group_X_has_not_changed;
extern const char *Txt_The_group_X_does_not_have_a_student_limit_now;
extern const char *Txt_The_maximum_number_of_students_is_now_X;
extern const char *Txt_The_maximum_number_of_students_in_group_X_is_now_Y;
struct GroupData GrpDat;
unsigned NewMaxStds;
Ale_AlertType_t AlertType;
@ -4504,8 +4504,9 @@ void Grp_ChangeMaxStdsGrp (void)
if (GrpDat.MaxStudents == NewMaxStds)
{
AlertType = Ale_INFO;
Str_Copy (Gbl.Alert.Txt,Txt_The_maximum_number_of_students_has_not_changed,
Ale_MAX_BYTES_ALERT);
snprintf (Gbl.Alert.Txt,sizeof (Gbl.Alert.Txt),
Txt_The_maximum_number_of_students_in_group_X_has_not_changed,
GrpDat.GrpName);
}
else
{
@ -4523,8 +4524,8 @@ void Grp_ChangeMaxStdsGrp (void)
GrpDat.GrpName);
else
snprintf (Gbl.Alert.Txt,sizeof (Gbl.Alert.Txt),
Txt_The_maximum_number_of_students_is_now_X,
NewMaxStds);
Txt_The_maximum_number_of_students_in_group_X_is_now_Y,
GrpDat.GrpName,NewMaxStds);
}
/***** Show the form again *****/

View File

@ -3179,6 +3179,27 @@ const char *Txt_Can_not_rename_a_folder_of_assignment =
"N&atilde;o &eacute; poss&iacute;vel renomear um diret&oacute;rio de actividade.";
#endif
const char *Txt_Capacity_OF_A_CLASSROOM =
#if L==1 // ca
"Aforo";
#elif L==2 // de
"Kapazit&auml;t";
#elif L==3 // en
"Capacity";
#elif L==4 // es
"Aforo";
#elif L==5 // fr
"Capacit&eacute;";
#elif L==6 // gn
"Aforo"; // Okoteve traducción
#elif L==7 // it
"Capacit&agrave;";
#elif L==8 // pl
"Pojemno&sacute;&cacute;";
#elif L==9 // pt
"Capacidade";
#endif
const char *Txt_Centre =
#if L==1 // ca
"Centre";
@ -3917,23 +3938,23 @@ const char *Txt_CLASSROOMS_HELP_ORDER[Cla_NUM_ORDERS] =
#endif
,
#if L==1 // ca
"Ordenar per nombre m&agrave;xim d'estudiants"
"Ordenar per aforo"
#elif L==2 // de
"Sortieren nach maximaler Sch&uuml;lerzahl"
"Sortieren nach Sitzplatzkapazit&auml;t"
#elif L==3 // en
"Sort by maximum number of students"
"Sort by seating capacity"
#elif L==4 // es
"Ordenar por n&ordm; m&aacute;ximo de estudiantes"
"Ordenar por aforo"
#elif L==5 // fr
"Trier par nombre maximum d'&eacute;tudiants"
"Trier par nombre de places"
#elif L==6 // gn
"Ordenar por n&ordm; m&aacute;ximo de estudiantes" // Okoteve traducción
"Ordenar por aforo" // Okoteve traducción
#elif L==7 // it
"Ordina per numero massimo di studenti"
"Ordina per capacit&agrave; di posti"
#elif L==8 // pl
"Sortuj wed&lsgtrok;ug maksymalnej liczby student&oacute;w"
"Sortuj wed&lsgtrok;ug pojemno&sacute;ci miejsc"
#elif L==9 // pt
"Ordenar pelo n&uacute;mero m&aacute;ximo de estudantes"
"Ordenar por capacidade"
#endif
};
@ -3960,23 +3981,23 @@ const char *Txt_CLASSROOMS_ORDER[Cla_NUM_ORDERS] =
#endif
,
#if L==1 // ca
"M&agrave;xim<br />d'est."
"Aforo"
#elif L==2 // de
"Max.<br />Stud."
"Kapazit&auml;t"
#elif L==3 // en
"Max.<br />stud."
"Capacity"
#elif L==4 // es
"M&aacute;x.<br />estu."
"Aforo"
#elif L==5 // fr
"Max.<br />&eacute;tud."
"Capacit&eacute;"
#elif L==6 // gn
"M&aacute;x.<br />estu." // Okoteve traducción
"Aforo" // Okoteve traducción
#elif L==7 // it
"Max.<br />stud."
"Capacit&agrave;"
#elif L==8 // pl
"Max.<br />stud."
"Pojemno&sacute;&cacute;"
#elif L==9 // pt
"M&aacute;x.<br />estu."
"Capacidade"
#endif
};
@ -43561,6 +43582,48 @@ const char *Txt_The_banner_X_is_now_visible = // Warning: it is very important t
"O banner <strong>%s</strong> &eacute; agora visible.";
#endif
const char *Txt_The_capacity_of_classroom_X_has_not_changed = // Warning: it is very important to include %s in the following sentences
#if L==1 // ca
"L'aforament de l'aula <strong>%s</strong> no ha canviat.";
#elif L==2 // de
"Die Kapazit&auml;t des Klassenzimmers <strong>%s</strong> hat sich nicht ge&auml;ndert.";
#elif L==3 // en
"The capacity of classroom <strong>%s</strong> has not changed.";
#elif L==4 // es
"El aforo del aula <strong>%s</strong> no ha cambiado.";
#elif L==5 // fr
"La capacit&eacute; de la salle de classe <strong>%s</strong> n'a pas chang&eacute;.";
#elif L==6 // gn
"El aforo del aula <strong>%s</strong> no ha cambiado."; // Okoteve traducción
#elif L==7 // it
"La capacit&agrave; della aula <strong>%s</strong> non &egrave; cambiata.";
#elif L==8 // pl
"Pojemno&sacute;&cacute; klasy <strong>%s</strong> nie uleg&lstrok;a zmianie.";
#elif L==9 // pt
"A capacidade da sala de aula <strong>%s</strong> n&atilde;o mudou.";
#endif
const char *Txt_The_capacity_of_classroom_X_is_now_Y = // Warning: it is very important to include %s and %u in the following sentences
#if L==1 // ca
"L'aforament de l'aula <strong>%s</strong> ara &eacute;s <strong>%u</strong>.";
#elif L==2 // de
"Die Kapazit&auml;t des Klassenzimmers <strong>%s</strong> betr&auml;gt jetzt <strong>%u</strong>.";
#elif L==3 // en
"The capacity of classroom <strong>%s</strong> is now <strong>%u</strong>.";
#elif L==4 // es
"El aforo del aula <strong>%s</strong> ahora es <strong>%u</strong>.";
#elif L==5 // fr
"La capacit&eacute; de la salle de classe <strong>%s</strong> est maintenant de <strong>%u</strong>.";
#elif L==6 // gn
"El aforo del aula <strong>%s</strong> ahora es <strong>%u</strong>."; // Okoteve traducción
#elif L==7 // it
"La capacit&agrave; della aula <strong>%s</strong> &egrave; ora <strong>%u</strong>.";
#elif L==8 // pl
"Pojemno&sacute;&cacute; klasy <strong>%s</strong> wynosi teraz <strong>%u</strong>.";
#elif L==9 // pt
"A capacidade da sala de aula <strong>%s</strong> &eacute; agora <strong>%u</strong>.";
#endif
const char *Txt_The_centre_X_already_exists = // Warning: it is very important to include %s in the following sentences
#if L==1 // ca
"El centro <strong>%s</strong> ya existe."; // Necessita traduccio
@ -43654,25 +43717,25 @@ const char *Txt_The_classroom_X_already_exists = // Warning: it is very importan
"A sala de clase <strong>%s</strong> j&aacute; existe.";
#endif
const char *Txt_The_classroom_X_does_not_have_a_student_limit_now = // Warning: it is very important to include %s in the following sentences
const char *Txt_The_classroom_X_does_not_have_a_limited_capacity_now = // Warning: it is very important to include %s in the following sentences
#if L==1 // ca
"L'aula <strong>%s</strong> ara no t&eacute; cap l&iacute;mit d'estudiants.";
"L'aula <strong>%s</strong> ja no t&eacute; un aforament limitat.";
#elif L==2 // de
"Das Klassenzimmer <strong>%s</strong> hat jetzt kein Studentenlimit.";
"Das Klassenzimmer <strong>%s</strong> hat jetzt keine begrenzte Kapazit&auml;t.";
#elif L==3 // en
"The classroom <strong>%s</strong> does not have a student limit now.";
"The classroom <strong>%s</strong> does not have a limited capacity now.";
#elif L==4 // es
"El aula <strong>%s</strong> no tiene ahora l&iacute;mite de estudiantes.";
"El aula <strong>%s</strong> ya no tiene un aforo limitado.";
#elif L==5 // fr
"La salle de classe <strong>%s</strong> n'a plus de limite d'&eacute;tudiants.";
"La salle de classe <strong>%s</strong> n'a plus de capacit&eacute; limit&eacute;e.";
#elif L==6 // gn
"El aula <strong>%s</strong> no tiene ahora l&iacute;mite de estudiantes."; // Okoteve traducción
"El aula <strong>%s</strong> ya no tiene un aforo limitado."; // Okoteve traducción
#elif L==7 // it
"L'aula <strong>%s</strong> ora non ha limite di studenti.";
"L'aula <strong>%s</strong> non ha una capacit&agrave; limitata ora.";
#elif L==8 // pl
"Klasa <strong>%s</strong> nie ma teraz &zdot;adnych limit&oacute;w uczni&oacute;w.";
"Klasa <strong>%s</strong> nie ma teraz ograniczonej pojemno&sacute;ci.";
#elif L==9 // pt
"A sala de clase <strong>%s</strong> n&atilde;o tem limite de estudantes agora.";
"A sala de clase <strong>%s</strong> n&atilde;o tem capacidade limitada agora.";
#endif
const char *Txt_The_classroom_X_has_been_renamed_as_Y = // Warning: it is very important to include two %s in the following sentences
@ -45574,55 +45637,64 @@ const char *Txt_the_marks_of_a_student_chosen_at_random_ =
" se voc&ecirc; vir mais de um estudante, isso significa que o n&uacute;mero de cabe&ccedil;a ou p&eacute; linhas n&atilde;o est&aacute; correto";
#endif
const char *Txt_The_maximum_number_of_students_has_not_changed =
#if L==1 // ca
"El nombre m&agrave;xim d'estudiants no ha canviat.";
#elif L==2 // de
"Die maximale Anzahl von Studenten hat sich nicht ge&auml;ndert.";
#elif L==3 // en
"The maximum number of students has not changed.";
#elif L==4 // es
"El n&ordm; m&aacute;ximo de estudiantes no ha cambiado.";
#elif L==5 // fr
"Le nombre maximum d'&eacute;tudiants n'a pas chang&eacute;.";
#elif L==6 // gn
"El n&ordm; m&aacute;ximo de estudiantes no ha cambiado."; // Okoteve traducción
#elif L==7 // it
"Il numero massimo di studenti non &egrave; cambiato.";
#elif L==8 // pl
"Maksymalna liczba student&oacute;w nie uleg&lstrok;a zmianie.";
#elif L==9 // pt
"O n&uacute;mero m&aacute;ximo de estudantes n&atilde;o foi alterado.";
#endif
const char *Txt_The_maximum_number_of_students_is_now_X = // Warning: it is very important to include %u in the following sentences
const char *Txt_The_maximum_number_of_students_in_group_X_has_not_changed = // Warning: it is very important to include %s in the following sentences
#if L==1 // ca
"El nombre m&agrave;xim d'estudiants"
" ara &eacute;s <strong>%u</strong>.";
" del grup <strong>%s</strong> no ha canviat.";
#elif L==2 // de
"Die maximale Anzahl von Studenten"
" betr&auml;gt jetzt <strong>%u</strong>.";
"Die maximale Anzahl der Studenten"
" in Gruppe <strong>%s</strong> hat sich nicht ge&auml;ndert.";
#elif L==3 // en
"The maximum number of students"
" is now <strong>%u</strong>.";
" in group <strong>%s</strong> has not changed.";
#elif L==4 // es
"El n&ordm; m&aacute;ximo de estudiantes"
" ahora es <strong>%u</strong>.";
" del grupo <strong>%s</strong> no ha cambiado.";
#elif L==5 // fr
"Le nombre maximum d'&eacute;tudiants"
" est maintenant de <strong>%u</strong>.";
" du groupe <strong>%s</strong> n'a pas chang&eacute;.";
#elif L==6 // gn
"El n&ordm; m&aacute;ximo de estudiantes"
" ahora es <strong>%u</strong>."; // Okoteve traducción
" del grupo <strong>%s</strong> no ha cambiado."; // Okoteve traducción
#elif L==7 // it
"Il numero massimo di studenti"
" &egrave; ora <strong>%u</strong>.";
" nel gruppo <strong>%s</strong> non &egrave; cambiato.";
#elif L==8 // pl
"Maksymalna liczba student&oacute;w"
" wynosi teraz <strong>%u</strong>.";
"Maksymalna liczba uczni&oacute;w"
" w grupie <strong>%s</strong> nie uleg&lstrok;a zmianie.";
#elif L==9 // pt
"O n&uacute;mero m&aacute;ximo de estudantes"
" &eacute; agora <strong>%u</strong>.";
" no grupo <strong>%s</strong> n&atilde;o foi alterado.";
#endif
const char *Txt_The_maximum_number_of_students_in_group_X_is_now_Y = // Warning: it is very important to include %s and %u in the following sentences
#if L==1 // ca
"El nombre m&agrave;xim d'estudiants"
" del grup <strong>%s</strong> ara &eacute;s <strong>%u</strong>.";
#elif L==2 // de
"Die maximale Anzahl der Studenten"
" in Gruppe <strong>%s</strong> betr&auml;gt jetzt <strong>%u</strong>.";
#elif L==3 // en
"The maximum number of students"
" in group <strong>%s</strong> is now <strong>%u</strong>.";
#elif L==4 // es
"El n&ordm; m&aacute;ximo de estudiantes"
" del grupo <strong>%s</strong> ahora es <strong>%u</strong>.";
#elif L==5 // fr
"Le nombre maximum d'&eacute;tudiants"
" du groupe <strong>%s</strong> est maintenant de <strong>%u</strong>.";
#elif L==6 // gn
"El n&ordm; m&aacute;ximo de estudiantes"
" del grupo <strong>%s</strong> ahora es <strong>%u</strong>."; // Okoteve traducción
#elif L==7 // it
"Il numero massimo di studenti"
" nel gruppo <strong>%s</strong> &egrave; ora <strong>%u</strong>.";
#elif L==8 // pl
"Maksymalna liczba student&oacute;w"
" w grupie <strong>%s</strong> wynosi teraz <strong>%u</strong>.";
#elif L==9 // pt
"O n&uacute;mero m&aacute;ximo de estudantes"
" no grupo <strong>%s</strong> &eacute; agora <strong>%u</strong>.";
#endif
const char *Txt_The_message_has_not_been_sent_to_any_recipient =