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, CtrCod INT NOT NULL,
ShortName VARCHAR(511) NOT NULL, ShortName VARCHAR(511) NOT NULL,
FullName VARCHAR(2047) NOT NULL, FullName VARCHAR(2047) NOT NULL,
MaxStudents INT NOT NULL, Capacity INT NOT NULL,
UNIQUE INDEX(ClaCod), UNIQUE INDEX(ClaCod),
INDEX(CtrCod)); INDEX(CtrCod));
-- --

View File

@ -364,10 +364,15 @@ En OpenSWAD:
ps2pdf source.ps destination.pdf 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 CSS_FILE "swad18.22.css"
#define JS_FILE "swad17.17.1.js" #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) 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: 4 changes necessary in database:
DROP INDEX NumStds ON classrooms; 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 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_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_PutFormToCreateClassroom (void);
static void Cla_PutHeadClassrooms (void); static void Cla_PutHeadClassrooms (void);
@ -104,7 +104,7 @@ void Cla_SeeClassrooms (void)
Tbl_StartTableWideMargin (2); Tbl_StartTableWideMargin (2);
fprintf (Gbl.F.Out,"<tr>"); fprintf (Gbl.F.Out,"<tr>");
for (Order = Cla_ORDER_BY_CLASSROOM; for (Order = Cla_ORDER_BY_CLASSROOM;
Order <= Cla_ORDER_BY_MAX_STDS; Order <= Cla_ORDER_BY_CAPACITY;
Order++) Order++)
{ {
fprintf (Gbl.F.Out,"<th class=\"LEFT_MIDDLE\">"); fprintf (Gbl.F.Out,"<th class=\"LEFT_MIDDLE\">");
@ -134,7 +134,7 @@ void Cla_SeeClassrooms (void)
"</td>" "</td>"
"<td class=\"DAT RIGHT_MIDDLE\">", "<td class=\"DAT RIGHT_MIDDLE\">",
Gbl.Classrooms.Lst[NumCla].FullName); Gbl.Classrooms.Lst[NumCla].FullName);
Cla_WriteMaxStds (Gbl.Classrooms.Lst[NumCla].MaxStudents); Cla_WriteCapacity (Gbl.Classrooms.Lst[NumCla].Capacity);
fprintf (Gbl.F.Out,"</td>" fprintf (Gbl.F.Out,"</td>"
"</tr>"); "</tr>");
} }
@ -274,15 +274,15 @@ void Cla_GetListClassrooms (void)
case Cla_ORDER_BY_CLASSROOM: case Cla_ORDER_BY_CLASSROOM:
sprintf (OrderBySubQuery,"FullName"); sprintf (OrderBySubQuery,"FullName");
break; break;
case Cla_ORDER_BY_MAX_STDS: case Cla_ORDER_BY_CAPACITY:
sprintf (OrderBySubQuery,"MaxStudents DESC,FullName"); sprintf (OrderBySubQuery,"Capacity DESC,FullName");
break; break;
} }
NumRows = DB_QuerySELECT (&mysql_res,"can not get classrooms", NumRows = DB_QuerySELECT (&mysql_res,"can not get classrooms",
"SELECT ClaCod," "SELECT ClaCod,"
"ShortName," "ShortName,"
"FullName," "FullName,"
"MaxStudents" "Capacity"
" FROM classrooms" " FROM classrooms"
" WHERE CtrCod=%ld" " WHERE CtrCod=%ld"
" ORDER BY %s", " ORDER BY %s",
@ -320,9 +320,9 @@ void Cla_GetListClassrooms (void)
Str_Copy (Cla->FullName,row[2], Str_Copy (Cla->FullName,row[2],
Cla_MAX_BYTES_CLASSROOM_FULL_NAME); Cla_MAX_BYTES_CLASSROOM_FULL_NAME);
/* Get maximum number of students in this classroom (row[3]) */ /* Get seating capacity in this classroom (row[3]) */
if (sscanf (row[3],"%u",&Cla->MaxStudents) != 1) if (sscanf (row[3],"%u",&Cla->Capacity) != 1)
Cla->MaxStudents = 0; Cla->Capacity = Cla_UNLIMITED_CAPACITY;
} }
} }
else else
@ -347,7 +347,7 @@ void Cla_GetDataOfClassroomByCod (struct Classroom *Cla)
/***** Clear data *****/ /***** Clear data *****/
Cla->ShrtName[0] = '\0'; Cla->ShrtName[0] = '\0';
Cla->FullName[0] = '\0'; Cla->FullName[0] = '\0';
Cla->MaxStudents = 0; Cla->Capacity = Cla_UNLIMITED_CAPACITY;
/***** Check if classroom code is correct *****/ /***** Check if classroom code is correct *****/
if (Cla->ClaCod < 0) 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", NumRows = DB_QuerySELECT (&mysql_res,"can not get data of a classroom",
"SELECT ShortName," "SELECT ShortName,"
"FullName," "FullName,"
"MaxStudents" "Capacity"
" FROM classrooms" " FROM classrooms"
" WHERE ClaCod=%ld", " WHERE ClaCod=%ld",
Cla->ClaCod); Cla->ClaCod);
@ -389,9 +389,9 @@ void Cla_GetDataOfClassroomByCod (struct Classroom *Cla)
Str_Copy (Cla->FullName,row[1], Str_Copy (Cla->FullName,row[1],
Cla_MAX_BYTES_CLASSROOM_FULL_NAME); Cla_MAX_BYTES_CLASSROOM_FULL_NAME);
/* Get maximum number of students in this classroom (row[2]) */ /* Get seating capacity in this classroom (row[2]) */
if (sscanf (row[2],"%u",&Cla->MaxStudents) != 1) if (sscanf (row[2],"%u",&Cla->Capacity) != 1)
Cla->MaxStudents = 0; Cla->Capacity = Cla_UNLIMITED_CAPACITY;
} }
/***** Free structure that stores the query result *****/ /***** Free structure that stores the query result *****/
@ -473,13 +473,13 @@ static void Cla_ListClassroomsForEdition (void)
Frm_EndForm (); Frm_EndForm ();
fprintf (Gbl.F.Out,"</td>"); fprintf (Gbl.F.Out,"</td>");
/* Maximum number of students */ /* Seating capacity */
fprintf (Gbl.F.Out,"<td class=\"CENTER_MIDDLE\">"); fprintf (Gbl.F.Out,"<td class=\"CENTER_MIDDLE\">");
Frm_StartForm (ActChgClaMaxStd); Frm_StartForm (ActChgClaMaxStd);
Cla_PutParamClaCod (Cla->ClaCod); 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=\""); " size=\"3\" maxlength=\"10\" value=\"");
Cla_WriteMaxStds (Cla->MaxStudents); Cla_WriteCapacity (Cla->Capacity);
fprintf (Gbl.F.Out,"\" onchange=\"document.getElementById('%s').submit();\" />", fprintf (Gbl.F.Out,"\" onchange=\"document.getElementById('%s').submit();\" />",
Gbl.Form.Id); Gbl.Form.Id);
Frm_EndForm (); Frm_EndForm ();
@ -687,11 +687,11 @@ static void Cla_UpdateClaNameDB (long ClaCod,const char *FieldName,const char *N
void Cla_ChangeMaxStudents (void) void Cla_ChangeMaxStudents (void)
{ {
extern const char *Txt_The_maximum_number_of_students_has_not_changed; extern const char *Txt_The_capacity_of_classroom_X_has_not_changed;
extern const char *Txt_The_classroom_X_does_not_have_a_student_limit_now; extern const char *Txt_The_classroom_X_does_not_have_a_limited_capacity_now;
extern const char *Txt_The_maximum_number_of_students_is_now_X; extern const char *Txt_The_capacity_of_classroom_X_is_now_Y;
struct Classroom *Cla; struct Classroom *Cla;
unsigned NewMaxStds; unsigned NewCapacity;
/***** Use current editing classroom *****/ /***** Use current editing classroom *****/
Cla = &Gbl.Classrooms.EditingCla; Cla = &Gbl.Classrooms.EditingCla;
@ -701,44 +701,44 @@ void Cla_ChangeMaxStudents (void)
if ((Cla->ClaCod = Cla_GetParamClaCod ()) == -1L) if ((Cla->ClaCod = Cla_GetParamClaCod ()) == -1L)
Lay_ShowErrorAndExit ("Code of classroom is missing."); Lay_ShowErrorAndExit ("Code of classroom is missing.");
/* Get the new maximum number of students of the group */ /* Get the seating capacity of the classroom */
NewMaxStds = (unsigned) NewCapacity = (unsigned)
Par_GetParToUnsignedLong ("MaxStudents", Par_GetParToUnsignedLong ("Capacity",
0, 0,
Cla_MAX_STUDENTS_IN_A_CLASSROOM, Cla_MAX_CAPACITY_OF_A_CLASSROOM,
Cla_NUM_STUDENTS_NOT_LIMITED); Cla_UNLIMITED_CAPACITY);
/***** Get data of the classroom from database *****/ /***** Get data of the classroom from database *****/
Cla_GetDataOfClassroomByCod (Cla); 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) *****/ (this happens when return is pressed without changes) *****/
if (Cla->MaxStudents == NewMaxStds) if (Cla->Capacity == NewCapacity)
{ {
/***** Message to show no changes made *****/ /***** Message to show no changes made *****/
Gbl.Alert.Type = Ale_INFO; Gbl.Alert.Type = Ale_INFO;
Str_Copy (Gbl.Alert.Txt,Txt_The_maximum_number_of_students_has_not_changed, snprintf (Gbl.Alert.Txt,sizeof (Gbl.Alert.Txt),
Ale_MAX_BYTES_ALERT); Txt_The_capacity_of_classroom_X_has_not_changed,
Cla->FullName);
} }
else else
{ {
/***** Update the table of groups changing the old maximum of students to the new *****/ /***** Update the table of groups changing the old capacity to the new *****/
DB_QueryUPDATE ("can not update the maximum number of students" DB_QueryUPDATE ("can not update the capacity of a classroom",
" in a classroom", "UPDATE classrooms SET Capacity=%u WHERE ClaCod=%ld",
"UPDATE classrooms SET MaxStudents=%u WHERE ClaCod=%ld", NewCapacity,Cla->ClaCod);
NewMaxStds,Cla->ClaCod); Cla->Capacity = NewCapacity;
Cla->MaxStudents = NewMaxStds;
/***** Message to show the change made *****/ /***** Message to show the change made *****/
Gbl.Alert.Type = Ale_SUCCESS; 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), 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); Cla->FullName);
else else
snprintf (Gbl.Alert.Txt,sizeof (Gbl.Alert.Txt), snprintf (Gbl.Alert.Txt,sizeof (Gbl.Alert.Txt),
Txt_The_maximum_number_of_students_is_now_X, Txt_The_capacity_of_classroom_X_is_now_Y,
NewMaxStds); Cla->FullName,NewCapacity);
} }
Ale_ShowAlert (Gbl.Alert.Type,Gbl.Alert.Txt); 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) if (Capacity <= Cla_MAX_CAPACITY_OF_A_CLASSROOM)
fprintf (Gbl.F.Out,"%u",MaxStudents); fprintf (Gbl.F.Out,"%u",Capacity);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -804,11 +804,11 @@ static void Cla_PutFormToCreateClassroom (void)
"</td>", "</td>",
Cla_MAX_CHARS_CLASSROOM_FULL_NAME,Cla->FullName); Cla_MAX_CHARS_CLASSROOM_FULL_NAME,Cla->FullName);
/***** Number of students *****/ /***** Seating capacity *****/
fprintf (Gbl.F.Out,"<td class=\"CENTER_MIDDLE\">" fprintf (Gbl.F.Out,"<td class=\"CENTER_MIDDLE\">"
"<input type=\"text\" name=\"MaxStudents\"" "<input type=\"text\" name=\"Capacity\""
" size=\"3\" maxlength=\"10\" value=\""); " size=\"3\" maxlength=\"10\" value=\"");
Cla_WriteMaxStds (Cla->MaxStudents); Cla_WriteCapacity (Cla->Capacity);
fprintf (Gbl.F.Out,"\" />" fprintf (Gbl.F.Out,"\" />"
"</td>" "</td>"
"</tr>"); "</tr>");
@ -829,7 +829,7 @@ static void Cla_PutHeadClassrooms (void)
extern const char *Txt_Code; extern const char *Txt_Code;
extern const char *Txt_Short_name; extern const char *Txt_Short_name;
extern const char *Txt_Full_name; extern const char *Txt_Full_name;
extern const char *Txt_Max_BR_students; extern const char *Txt_Capacity_OF_A_CLASSROOM;
fprintf (Gbl.F.Out,"<tr>" fprintf (Gbl.F.Out,"<tr>"
"<th class=\"BM\"></th>" "<th class=\"BM\"></th>"
@ -849,7 +849,7 @@ static void Cla_PutHeadClassrooms (void)
Txt_Code, Txt_Code,
Txt_Short_name, Txt_Short_name,
Txt_Full_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 */ /* Get classroom full name */
Par_GetParToText ("FullName",Cla->FullName,Cla_MAX_BYTES_CLASSROOM_FULL_NAME); Par_GetParToText ("FullName",Cla->FullName,Cla_MAX_BYTES_CLASSROOM_FULL_NAME);
/* Get maximum number of students */ /* Get seating capacity */
Cla->MaxStudents = (unsigned) Cla->Capacity = (unsigned)
Par_GetParToUnsignedLong ("MaxStudents", Par_GetParToUnsignedLong ("Capacity",
0, 0,
Cla_MAX_STUDENTS_IN_A_CLASSROOM, Cla_MAX_CAPACITY_OF_A_CLASSROOM,
Cla_NUM_STUDENTS_NOT_LIMITED); Cla_UNLIMITED_CAPACITY);
if (Cla->ShrtName[0] && Cla->FullName[0]) // If there's a classroom name 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 *****/ /***** Create a new classroom *****/
DB_QueryINSERT ("can not create classroom", DB_QueryINSERT ("can not create classroom",
"INSERT INTO classrooms" "INSERT INTO classrooms"
" (CtrCod,ShortName,FullName,MaxStudents)" " (CtrCod,ShortName,FullName,Capacity)"
" VALUES" " VALUES"
" (%ld,'%s','%s',%u)", " (%ld,'%s','%s',%u)",
Gbl.CurrentCtr.Ctr.CtrCod, Gbl.CurrentCtr.Ctr.CtrCod,
Cla->ShrtName,Cla->FullName,Cla->MaxStudents); Cla->ShrtName,Cla->FullName,Cla->Capacity);
/***** Write success message *****/ /***** Write success message *****/
snprintf (Gbl.Alert.Txt,sizeof (Gbl.Alert.Txt), 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_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_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_MAX_CAPACITY_OF_A_CLASSROOM 10000 // If capacity of 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... #define Cla_UNLIMITED_CAPACITY INT_MAX // This number can be stored in database as an integer...
// ...and means that a classroom has no limit of students // ...and means that a classroom has no limited capacity
struct Classroom struct Classroom
{ {
@ -49,14 +49,14 @@ struct Classroom
long InsCod; long InsCod;
char ShrtName[Cla_MAX_BYTES_CLASSROOM_SHRT_NAME + 1]; char ShrtName[Cla_MAX_BYTES_CLASSROOM_SHRT_NAME + 1];
char FullName[Cla_MAX_BYTES_CLASSROOM_FULL_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 #define Cla_NUM_ORDERS 2
typedef enum typedef enum
{ {
Cla_ORDER_BY_CLASSROOM = 0, Cla_ORDER_BY_CLASSROOM = 0,
Cla_ORDER_BY_MAX_STDS = 1, Cla_ORDER_BY_CAPACITY = 1,
} Cla_Order_t; } Cla_Order_t;
#define Cla_ORDER_DEFAULT Cla_ORDER_BY_CLASSROOM #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.DegCod = -1L;
Gbl.CurrentDeg.Deg.ShrtName[0] = Gbl.CurrentDeg.Deg.FullName[0] = '\0'; 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.CrsCod = -1L;
Gbl.CurrentCrs.Crs.ShrtName[0] = Gbl.CurrentCrs.Crs.FullName[0] = '\0'; 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) 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_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; struct GroupData GrpDat;
unsigned NewMaxStds; unsigned NewMaxStds;
Ale_AlertType_t AlertType; Ale_AlertType_t AlertType;
@ -4504,8 +4504,9 @@ void Grp_ChangeMaxStdsGrp (void)
if (GrpDat.MaxStudents == NewMaxStds) if (GrpDat.MaxStudents == NewMaxStds)
{ {
AlertType = Ale_INFO; AlertType = Ale_INFO;
Str_Copy (Gbl.Alert.Txt,Txt_The_maximum_number_of_students_has_not_changed, snprintf (Gbl.Alert.Txt,sizeof (Gbl.Alert.Txt),
Ale_MAX_BYTES_ALERT); Txt_The_maximum_number_of_students_in_group_X_has_not_changed,
GrpDat.GrpName);
} }
else else
{ {
@ -4523,8 +4524,8 @@ void Grp_ChangeMaxStdsGrp (void)
GrpDat.GrpName); GrpDat.GrpName);
else else
snprintf (Gbl.Alert.Txt,sizeof (Gbl.Alert.Txt), snprintf (Gbl.Alert.Txt,sizeof (Gbl.Alert.Txt),
Txt_The_maximum_number_of_students_is_now_X, Txt_The_maximum_number_of_students_in_group_X_is_now_Y,
NewMaxStds); GrpDat.GrpName,NewMaxStds);
} }
/***** Show the form again *****/ /***** 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."; "N&atilde;o &eacute; poss&iacute;vel renomear um diret&oacute;rio de actividade.";
#endif #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 = const char *Txt_Centre =
#if L==1 // ca #if L==1 // ca
"Centre"; "Centre";
@ -3917,23 +3938,23 @@ const char *Txt_CLASSROOMS_HELP_ORDER[Cla_NUM_ORDERS] =
#endif #endif
, ,
#if L==1 // ca #if L==1 // ca
"Ordenar per nombre m&agrave;xim d'estudiants" "Ordenar per aforo"
#elif L==2 // de #elif L==2 // de
"Sortieren nach maximaler Sch&uuml;lerzahl" "Sortieren nach Sitzplatzkapazit&auml;t"
#elif L==3 // en #elif L==3 // en
"Sort by maximum number of students" "Sort by seating capacity"
#elif L==4 // es #elif L==4 // es
"Ordenar por n&ordm; m&aacute;ximo de estudiantes" "Ordenar por aforo"
#elif L==5 // fr #elif L==5 // fr
"Trier par nombre maximum d'&eacute;tudiants" "Trier par nombre de places"
#elif L==6 // gn #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 #elif L==7 // it
"Ordina per numero massimo di studenti" "Ordina per capacit&agrave; di posti"
#elif L==8 // pl #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 #elif L==9 // pt
"Ordenar pelo n&uacute;mero m&aacute;ximo de estudantes" "Ordenar por capacidade"
#endif #endif
}; };
@ -3960,23 +3981,23 @@ const char *Txt_CLASSROOMS_ORDER[Cla_NUM_ORDERS] =
#endif #endif
, ,
#if L==1 // ca #if L==1 // ca
"M&agrave;xim<br />d'est." "Aforo"
#elif L==2 // de #elif L==2 // de
"Max.<br />Stud." "Kapazit&auml;t"
#elif L==3 // en #elif L==3 // en
"Max.<br />stud." "Capacity"
#elif L==4 // es #elif L==4 // es
"M&aacute;x.<br />estu." "Aforo"
#elif L==5 // fr #elif L==5 // fr
"Max.<br />&eacute;tud." "Capacit&eacute;"
#elif L==6 // gn #elif L==6 // gn
"M&aacute;x.<br />estu." // Okoteve traducción "Aforo" // Okoteve traducción
#elif L==7 // it #elif L==7 // it
"Max.<br />stud." "Capacit&agrave;"
#elif L==8 // pl #elif L==8 // pl
"Max.<br />stud." "Pojemno&sacute;&cacute;"
#elif L==9 // pt #elif L==9 // pt
"M&aacute;x.<br />estu." "Capacidade"
#endif #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."; "O banner <strong>%s</strong> &eacute; agora visible.";
#endif #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 const char *Txt_The_centre_X_already_exists = // Warning: it is very important to include %s in the following sentences
#if L==1 // ca #if L==1 // ca
"El centro <strong>%s</strong> ya existe."; // Necessita traduccio "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."; "A sala de clase <strong>%s</strong> j&aacute; existe.";
#endif #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 #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 #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 #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 #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 #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 #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 #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 #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 #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 #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 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"; " 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 #endif
const char *Txt_The_maximum_number_of_students_has_not_changed = 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 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
#if L==1 // ca #if L==1 // ca
"El nombre m&agrave;xim d'estudiants" "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 #elif L==2 // de
"Die maximale Anzahl von Studenten" "Die maximale Anzahl der Studenten"
" betr&auml;gt jetzt <strong>%u</strong>."; " in Gruppe <strong>%s</strong> hat sich nicht ge&auml;ndert.";
#elif L==3 // en #elif L==3 // en
"The maximum number of students" "The maximum number of students"
" is now <strong>%u</strong>."; " in group <strong>%s</strong> has not changed.";
#elif L==4 // es #elif L==4 // es
"El n&ordm; m&aacute;ximo de estudiantes" "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 #elif L==5 // fr
"Le nombre maximum d'&eacute;tudiants" "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 #elif L==6 // gn
"El n&ordm; m&aacute;ximo de estudiantes" "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 #elif L==7 // it
"Il numero massimo di studenti" "Il numero massimo di studenti"
" &egrave; ora <strong>%u</strong>."; " nel gruppo <strong>%s</strong> non &egrave; cambiato.";
#elif L==8 // pl #elif L==8 // pl
"Maksymalna liczba student&oacute;w" "Maksymalna liczba uczni&oacute;w"
" wynosi teraz <strong>%u</strong>."; " w grupie <strong>%s</strong> nie uleg&lstrok;a zmianie.";
#elif L==9 // pt #elif L==9 // pt
"O n&uacute;mero m&aacute;ximo de estudantes" "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 #endif
const char *Txt_The_message_has_not_been_sent_to_any_recipient = const char *Txt_The_message_has_not_been_sent_to_any_recipient =