Version 23.87: Jul 16, 2024 Changes in layout of project filters.

This commit is contained in:
acanas 2024-07-16 14:59:55 +02:00
parent 3bdb133611
commit eabfd1716f
8 changed files with 324 additions and 224 deletions

View File

@ -633,10 +633,11 @@ Me sale este error, no s
"can npt create received message (duplicated entry '243218-2160773' for key 'UsrCod_MsgCod') "can npt create received message (duplicated entry '243218-2160773' for key 'UsrCod_MsgCod')
*/ */
#define Log_PLATFORM_VERSION "SWAD 23.86 (2024-07-15)" #define Log_PLATFORM_VERSION "SWAD 23.87 (2024-07-16)"
#define CSS_FILE "swad23.67.2.css" #define CSS_FILE "swad23.67.2.css"
#define JS_FILE "swad23.79.js" #define JS_FILE "swad23.79.js"
/* /*
Version 23.87: Jul 16, 2024 Changes in layout of project filters. (335321 lines)
Version 23.86: Jul 15, 2024 Fixed bug in list of centers. Version 23.86: Jul 15, 2024 Fixed bug in list of centers.
Changes in selection of users in projects. Changes in selection of users in projects.
Code refactoring in projects. (335225 lines) Code refactoring in projects. (335225 lines)

View File

@ -4295,10 +4295,7 @@ void Grp_ShowFormToSelWhichGrps (Act_Action_t Action,
extern const char *Txt_GROUP_WHICH_GROUPS[2]; extern const char *Txt_GROUP_WHICH_GROUPS[2];
Grp_WhichGroups_t WhichGrps; Grp_WhichGroups_t WhichGrps;
/***** Begin setting selector *****/
Set_BeginOneSettingSelector (); Set_BeginOneSettingSelector ();
/***** Put icons to select which groups *****/
for (WhichGrps = Grp_MY_GROUPS; for (WhichGrps = Grp_MY_GROUPS;
WhichGrps <= Grp_ALL_GROUPS; WhichGrps <= Grp_ALL_GROUPS;
WhichGrps++) WhichGrps++)
@ -4314,8 +4311,6 @@ void Grp_ShowFormToSelWhichGrps (Act_Action_t Action,
Frm_EndForm (); Frm_EndForm ();
Set_EndPref (); Set_EndPref ();
} }
/***** End setting selector *****/
Set_EndOneSettingSelector (); Set_EndOneSettingSelector ();
} }

View File

@ -2542,9 +2542,7 @@ static void Mch_ShowFormColumns (const struct Mch_Match *Match)
"4col.png", // 4 columns "4col.png", // 4 columns
}; };
/***** Begin selector *****/
Set_BeginOneSettingSelector (); Set_BeginOneSettingSelector ();
for (NumCols = 1; for (NumCols = 1;
NumCols <= Mch_MAX_COLS; NumCols <= Mch_MAX_COLS;
NumCols++) NumCols++)
@ -2573,8 +2571,6 @@ static void Mch_ShowFormColumns (const struct Mch_Match *Match)
/* End container for this option */ /* End container for this option */
HTM_DIV_End (); HTM_DIV_End ();
} }
/***** End selector *****/
Set_EndOneSettingSelector (); Set_EndOneSettingSelector ();
} }

View File

@ -204,9 +204,9 @@ static void Prj_ShowPrjsInCurrentPage (void *Projects);
static void Prj_ShowFormToFilterByMy_All (const struct Prj_Projects *Projects); static void Prj_ShowFormToFilterByMy_All (const struct Prj_Projects *Projects);
static void Prj_ShowFormToFilterByRoleInPrj (const struct Prj_Projects *Projects); static void Prj_ShowFormToFilterByRoleInPrj (const struct Prj_Projects *Projects);
static void Prj_ShowFormToFilterByAssign (const struct Prj_Projects *Projects); static void Prj_ShowFormToFilterByAssignation (const struct Prj_Projects *Projects);
static void Prj_ShowFormToFilterByHidden (const struct Prj_Projects *Projects); static void Prj_ShowFormToFilterByHidden (const struct Prj_Projects *Projects);
static void Prj_ShowFormToFilterByWarning (const struct Prj_Projects *Projects); static void Prj_ShowFormToFilterByFaultiness (const struct Prj_Projects *Projects);
static void Prj_ShowFormToFilterByReview (const struct Prj_Projects *Projects); static void Prj_ShowFormToFilterByReview (const struct Prj_Projects *Projects);
static void Prj_ShowFormToFilterByDpt (const struct Prj_Projects *Projects); static void Prj_ShowFormToFilterByDpt (const struct Prj_Projects *Projects);
@ -542,12 +542,23 @@ static void Prj_ShowPrjsInCurrentPage (void *Projects)
extern const char *Hlp_ASSESSMENT_Projects; extern const char *Hlp_ASSESSMENT_Projects;
extern const char *Txt_Projects; extern const char *Txt_Projects;
extern const char *Txt_Filters; extern const char *Txt_Filters;
extern const char *Txt_Users;
extern const char *Txt_Roles;
extern const char *Txt_Assignation;
extern const char *Txt_Visibility;
extern const char *Txt_Faultiness;
extern const char *Txt_Review;
extern const char *Txt_Department;
extern const char *Txt_No_projects; extern const char *Txt_No_projects;
struct Pag_Pagination Pagination; struct Pag_Pagination Pagination;
unsigned NumPrj; unsigned NumPrj;
if (Projects) if (Projects)
{ {
/***** Students will see only visible projects *****/
if (Gbl.Usrs.Me.Role.Logged == Rol_STD)
((struct Prj_Projects *) Projects)->Filter.Hidden &= ~(1 << HidVis_HIDDEN);
/***** Get list of projects *****/ /***** Get list of projects *****/
Prj_GetListProjects ((struct Prj_Projects *) Projects); Prj_GetListProjects ((struct Prj_Projects *) Projects);
@ -566,29 +577,81 @@ static void Prj_ShowPrjsInCurrentPage (void *Projects)
HTM_FIELDSET_Begin (NULL); HTM_FIELDSET_Begin (NULL);
HTM_LEGEND (Txt_Filters); HTM_LEGEND (Txt_Filters);
/* 1st. row */ HTM_TABLE_BeginPadding (2);
Set_BeginSettingsHead ();
// TODO: Put the following in a loop
/***** Users *****/
HTM_TR_Begin (NULL);
Frm_LabelColumn ("Frm_C1 RT","",Txt_Users);
HTM_TD_Begin ("class=\"Frm_C2 LT\"");
HTM_LABEL_Begin ("class=\"FORM_IN_%s\"",The_GetSuffix ());
Prj_ShowFormToFilterByMy_All ((struct Prj_Projects *) Projects); Prj_ShowFormToFilterByMy_All ((struct Prj_Projects *) Projects);
HTM_LABEL_End ();
HTM_TD_End ();
HTM_TR_End ();
/***** Roles in project *****/
HTM_TR_Begin (NULL);
Frm_LabelColumn ("Frm_C1 RT","",Txt_Roles);
HTM_TD_Begin ("class=\"Frm_C2 LT\"");
HTM_LABEL_Begin ("class=\"FORM_IN_%s\"",The_GetSuffix ());
Prj_ShowFormToFilterByRoleInPrj ((struct Prj_Projects *) Projects); Prj_ShowFormToFilterByRoleInPrj ((struct Prj_Projects *) Projects);
Prj_ShowFormToFilterByAssign ((struct Prj_Projects *) Projects); HTM_LABEL_End ();
switch (Gbl.Usrs.Me.Role.Logged) HTM_TD_End ();
{ HTM_TR_End ();
case Rol_NET:
case Rol_TCH: /***** Assignation to students *****/
case Rol_SYS_ADM: HTM_TR_Begin (NULL);
Frm_LabelColumn ("Frm_C1 RT","",Txt_Assignation);
HTM_TD_Begin ("class=\"Frm_C2 LT\"");
HTM_LABEL_Begin ("class=\"FORM_IN_%s\"",The_GetSuffix ());
Prj_ShowFormToFilterByAssignation ((struct Prj_Projects *) Projects);
HTM_LABEL_End ();
HTM_TD_End ();
HTM_TR_End ();
/***** Hidden/visible projects *****/
HTM_TR_Begin (NULL);
Frm_LabelColumn ("Frm_C1 RT","",Txt_Visibility);
HTM_TD_Begin ("class=\"Frm_C2 LT\"");
HTM_LABEL_Begin ("class=\"FORM_IN_%s\"",The_GetSuffix ());
Prj_ShowFormToFilterByHidden ((struct Prj_Projects *) Projects); Prj_ShowFormToFilterByHidden ((struct Prj_Projects *) Projects);
break; HTM_LABEL_End ();
default: // Students will see only visible projects HTM_TD_End ();
break; HTM_TR_End ();
}
Prj_ShowFormToFilterByWarning ((struct Prj_Projects *) Projects); /***** Faultiness *****/
HTM_TR_Begin (NULL);
Frm_LabelColumn ("Frm_C1 RT","",Txt_Faultiness);
HTM_TD_Begin ("class=\"Frm_C2 LT\"");
HTM_LABEL_Begin ("class=\"FORM_IN_%s\"",The_GetSuffix ());
Prj_ShowFormToFilterByFaultiness ((struct Prj_Projects *) Projects);
HTM_LABEL_End ();
HTM_TD_End ();
HTM_TR_End ();
/***** Review status *****/
HTM_TR_Begin (NULL);
Frm_LabelColumn ("Frm_C1 RT","",Txt_Review);
HTM_TD_Begin ("class=\"Frm_C2 LT\"");
HTM_LABEL_Begin ("class=\"FORM_IN_%s\"",The_GetSuffix ());
Prj_ShowFormToFilterByReview ((struct Prj_Projects *) Projects); Prj_ShowFormToFilterByReview ((struct Prj_Projects *) Projects);
HTM_LABEL_End ();
HTM_TD_End ();
HTM_TR_End ();
Set_EndSettingsHead (); /***** Department *****/
HTM_TR_Begin (NULL);
/* 2nd. row */ Frm_LabelColumn ("Frm_C1 RT","",Txt_Department);
HTM_TD_Begin ("class=\"Frm_C2 LT\"");
HTM_LABEL_Begin ("class=\"FORM_IN_%s\"",The_GetSuffix ());
Prj_ShowFormToFilterByDpt ((struct Prj_Projects *) Projects); Prj_ShowFormToFilterByDpt ((struct Prj_Projects *) Projects);
HTM_LABEL_End ();
HTM_TD_End ();
HTM_TR_End ();
HTM_TABLE_End ();
/* End fieldset */ /* End fieldset */
HTM_FIELDSET_End (); HTM_FIELDSET_End ();
@ -670,7 +733,6 @@ static void Prj_ShowFormToFilterByMy_All (const struct Prj_Projects *Projects)
1 << Usr_WHO_SELECTED | 1 << Usr_WHO_SELECTED |
1 << Usr_WHO_ALL; 1 << Usr_WHO_ALL;
Set_BeginOneSettingSelector ();
for (Who = (Usr_Who_t) 1; for (Who = (Usr_Who_t) 1;
Who <= (Usr_Who_t) (Usr_NUM_WHO - 1); Who <= (Usr_Who_t) (Usr_NUM_WHO - 1);
Who++) Who++)
@ -696,7 +758,6 @@ static void Prj_ShowFormToFilterByMy_All (const struct Prj_Projects *Projects)
Frm_EndForm (); Frm_EndForm ();
Set_EndPref (); Set_EndPref ();
} }
Set_EndOneSettingSelector ();
} }
/*****************************************************************************/ /*****************************************************************************/
@ -709,7 +770,6 @@ static void Prj_ShowFormToFilterByRoleInPrj (const struct Prj_Projects *Projects
struct Prj_Filter Filter; struct Prj_Filter Filter;
Prj_RoleInProject_t RoleInPrj; Prj_RoleInProject_t RoleInPrj;
Set_BeginOneSettingSelector ();
for (RoleInPrj = (Prj_RoleInProject_t) 0; for (RoleInPrj = (Prj_RoleInProject_t) 0;
RoleInPrj <= (Prj_RoleInProject_t) (Prj_NUM_ROLES_IN_PROJECT - 1); RoleInPrj <= (Prj_RoleInProject_t) (Prj_NUM_ROLES_IN_PROJECT - 1);
RoleInPrj++) RoleInPrj++)
@ -733,20 +793,18 @@ static void Prj_ShowFormToFilterByRoleInPrj (const struct Prj_Projects *Projects
Frm_EndForm (); Frm_EndForm ();
Set_EndPref (); Set_EndPref ();
} }
Set_EndOneSettingSelector ();
} }
/*****************************************************************************/ /*****************************************************************************/
/*********** Show form to select assigned / non-assigned projects ************/ /*********** Show form to select assigned / non-assigned projects ************/
/*****************************************************************************/ /*****************************************************************************/
static void Prj_ShowFormToFilterByAssign (const struct Prj_Projects *Projects) static void Prj_ShowFormToFilterByAssignation (const struct Prj_Projects *Projects)
{ {
extern const char *Txt_PROJECT_NONASSIGNED_ASSIGNED_PLURAL[Prj_NUM_ASSIGNED]; extern const char *Txt_PROJECT_NONASSIGNED_ASSIGNED_PLURAL[Prj_NUM_ASSIGNED];
struct Prj_Filter Filter; struct Prj_Filter Filter;
Prj_Assigned_t Assign; Prj_Assigned_t Assign;
Set_BeginOneSettingSelector ();
for (Assign = (Prj_Assigned_t) 0; for (Assign = (Prj_Assigned_t) 0;
Assign <= (Prj_Assigned_t) (Prj_NUM_ASSIGNED - 1); Assign <= (Prj_Assigned_t) (Prj_NUM_ASSIGNED - 1);
Assign++) Assign++)
@ -770,7 +828,6 @@ static void Prj_ShowFormToFilterByAssign (const struct Prj_Projects *Projects)
Frm_EndForm (); Frm_EndForm ();
Set_EndPref (); Set_EndPref ();
} }
Set_EndOneSettingSelector ();
} }
/*****************************************************************************/ /*****************************************************************************/
@ -792,7 +849,6 @@ static void Prj_ShowFormToFilterByHidden (const struct Prj_Projects *Projects)
[HidVis_VISIBLE] = {"eye.svg" ,Ico_GREEN}, [HidVis_VISIBLE] = {"eye.svg" ,Ico_GREEN},
}; };
Set_BeginOneSettingSelector ();
for (HidVis = (HidVis_HiddenOrVisible_t) 0; for (HidVis = (HidVis_HiddenOrVisible_t) 0;
HidVis <= (HidVis_HiddenOrVisible_t) (HidVis_NUM_HIDDEN_VISIBLE - 1); HidVis <= (HidVis_HiddenOrVisible_t) (HidVis_NUM_HIDDEN_VISIBLE - 1);
HidVis++) HidVis++)
@ -817,14 +873,13 @@ static void Prj_ShowFormToFilterByHidden (const struct Prj_Projects *Projects)
Frm_EndForm (); Frm_EndForm ();
Set_EndPref (); Set_EndPref ();
} }
Set_EndOneSettingSelector ();
} }
/*****************************************************************************/ /*****************************************************************************/
/************** Show form to select faulty/faultless projects ****************/ /************** Show form to select faulty/faultless projects ****************/
/*****************************************************************************/ /*****************************************************************************/
static void Prj_ShowFormToFilterByWarning (const struct Prj_Projects *Projects) static void Prj_ShowFormToFilterByFaultiness (const struct Prj_Projects *Projects)
{ {
extern const char *Txt_PROJECT_FAULTY_FAULTLESS_PROJECTS[Prj_NUM_FAULTINESS]; extern const char *Txt_PROJECT_FAULTY_FAULTLESS_PROJECTS[Prj_NUM_FAULTINESS];
struct Prj_Filter Filter; struct Prj_Filter Filter;
@ -839,7 +894,6 @@ static void Prj_ShowFormToFilterByWarning (const struct Prj_Projects *Projects)
[Prj_FAULTLESS] = {"check-circle.svg" ,Ico_GREEN }, [Prj_FAULTLESS] = {"check-circle.svg" ,Ico_GREEN },
}; };
Set_BeginOneSettingSelector ();
for (Faultiness = (Prj_Faultiness_t) 0; for (Faultiness = (Prj_Faultiness_t) 0;
Faultiness <= (Prj_Faultiness_t) (Prj_NUM_FAULTINESS - 1); Faultiness <= (Prj_Faultiness_t) (Prj_NUM_FAULTINESS - 1);
Faultiness++) Faultiness++)
@ -864,7 +918,6 @@ static void Prj_ShowFormToFilterByWarning (const struct Prj_Projects *Projects)
Frm_EndForm (); Frm_EndForm ();
Set_EndPref (); Set_EndPref ();
} }
Set_EndOneSettingSelector ();
} }
/*****************************************************************************/ /*****************************************************************************/
@ -877,7 +930,6 @@ static void Prj_ShowFormToFilterByReview (const struct Prj_Projects *Projects)
struct Prj_Filter Filter; struct Prj_Filter Filter;
Prj_ReviewStatus_t ReviewStatus; Prj_ReviewStatus_t ReviewStatus;
Set_BeginOneSettingSelector ();
for (ReviewStatus = (Prj_ReviewStatus_t) 0; for (ReviewStatus = (Prj_ReviewStatus_t) 0;
ReviewStatus <= (Prj_ReviewStatus_t) (Prj_NUM_REVIEW_STATUS - 1); ReviewStatus <= (Prj_ReviewStatus_t) (Prj_NUM_REVIEW_STATUS - 1);
ReviewStatus++) ReviewStatus++)
@ -902,7 +954,6 @@ static void Prj_ShowFormToFilterByReview (const struct Prj_Projects *Projects)
Frm_EndForm (); Frm_EndForm ();
Set_EndPref (); Set_EndPref ();
} }
Set_EndOneSettingSelector ();
} }
/*****************************************************************************/ /*****************************************************************************/
@ -916,7 +967,6 @@ static void Prj_ShowFormToFilterByDpt (const struct Prj_Projects *Projects)
char *SelectClass; char *SelectClass;
/***** Begin form *****/ /***** Begin form *****/
HTM_DIV_Begin (NULL);
Frm_BeginForm (ActSeeAllPrj); Frm_BeginForm (ActSeeAllPrj);
Filter.Who = Projects->Filter.Who; Filter.Who = Projects->Filter.Who;
Filter.RolPrj = Projects->Filter.RolPrj; Filter.RolPrj = Projects->Filter.RolPrj;
@ -932,8 +982,7 @@ static void Prj_ShowFormToFilterByDpt (const struct Prj_Projects *Projects)
Usr_USE_LIST_SELECTED_USERS); Usr_USE_LIST_SELECTED_USERS);
/***** Write selector with departments *****/ /***** Write selector with departments *****/
if (asprintf (&SelectClass,"Frm_C2_INPUT INPUT_%s", if (asprintf (&SelectClass,"Frm_C2_INPUT INPUT_%s",The_GetSuffix ()) < 0)
The_GetSuffix ()) < 0)
Err_NotEnoughMemoryExit (); Err_NotEnoughMemoryExit ();
Dpt_WriteSelectorDepartment (Gbl.Hierarchy.Node[Hie_INS].HieCod, // Departments in current institution Dpt_WriteSelectorDepartment (Gbl.Hierarchy.Node[Hie_INS].HieCod, // Departments in current institution
Projects->Filter.DptCod, // Selected department Projects->Filter.DptCod, // Selected department
@ -946,7 +995,6 @@ static void Prj_ShowFormToFilterByDpt (const struct Prj_Projects *Projects)
/***** End form *****/ /***** End form *****/
Frm_EndForm (); Frm_EndForm ();
HTM_DIV_End ();
} }
/*****************************************************************************/ /*****************************************************************************/
@ -1169,13 +1217,6 @@ static unsigned Prj_GetParAssign (void)
static unsigned Prj_GetParHidden (void) static unsigned Prj_GetParHidden (void)
{ {
switch (Gbl.Usrs.Me.Role.Logged)
{
case Rol_STD: // Students can view only visible projects
return (unsigned) (1 << HidVis_VISIBLE); // Only visible projects
case Rol_NET:
case Rol_TCH:
case Rol_SYS_ADM:
return (unsigned) return (unsigned)
Par_GetParUnsignedLong (Prj_PAR_FILTER_HID_VIS_NAME, Par_GetParUnsignedLong (Prj_PAR_FILTER_HID_VIS_NAME,
0, 0,
@ -1183,10 +1224,6 @@ static unsigned Prj_GetParHidden (void)
(1 << HidVis_VISIBLE), (1 << HidVis_VISIBLE),
(unsigned) Prj_FILTER_HIDDEN_DEFAULT | (unsigned) Prj_FILTER_HIDDEN_DEFAULT |
(unsigned) Prj_FILTER_VISIBL_DEFAULT); (unsigned) Prj_FILTER_VISIBL_DEFAULT);
default:
Err_WrongRoleExit ();
return Prj_NEW_PRJ_HIDDEN_VISIBL_DEFAULT; // Not reached
}
} }
static unsigned Prj_GetParFaulti (void) static unsigned Prj_GetParFaulti (void)

View File

@ -519,27 +519,6 @@ unsigned Prj_DB_GetListProjects (MYSQL_RES **mysql_res,
case Prj_ORDER_START_TIME: case Prj_ORDER_START_TIME:
case Prj_ORDER_END_TIME: case Prj_ORDER_END_TIME:
case Prj_ORDER_TITLE: case Prj_ORDER_TITLE:
Ale_ShowAlert (Ale_INFO,
"SELECT prj_projects.PrjCod"
" FROM prj_projects LEFT JOIN prj_users"
" ON prj_projects.PrjCod=prj_users.PrjCod"
" WHERE prj_projects.CrsCod=%ld"
"%s"
"%s"
"%s"
"%s"
"%s"
" ORDER BY %s",
Gbl.Hierarchy.Node[Hie_CRS].HieCod,
AssignSubQuery,
HidVisSubQuery,
ReviewSubQuery,
DptCodSubQuery,
RolPrjSubQuery[Projects->Filter.RolPrj],
OrderBySubQuery[Projects->SelectedOrder]);
NumPrjsFromDB = (unsigned) NumPrjsFromDB = (unsigned)
DB_QuerySELECT (mysql_res,"can not get projects", DB_QuerySELECT (mysql_res,"can not get projects",
"SELECT prj_projects.PrjCod" "SELECT prj_projects.PrjCod"

View File

@ -2804,6 +2804,29 @@ const char *Txt_START_END_TIME[Dat_NUM_START_END_TIME] =
#endif #endif
}; };
const char *Txt_Assignation = // Project assigned/non-assigned to students
#if L==1 // ca
"Assignaci&oacute;";
#elif L==2 // de
"Zuweisung";
#elif L==3 // en
"Assignation";
#elif L==4 // es
"Asignaci&oacute;n";
#elif L==5 // fr
"Assignation";
#elif L==6 // gn
"Assignaci&oacute;n"; // Okoteve traducción
#elif L==7 // it
"Assegnazione";
#elif L==8 // pl
"Ustalenie";
#elif L==9 // pt
"Atribui&ccedil;&atilde,o";
#elif L==10 // tr
"Atama";
#endif
const char *Txt_Assignments_area = const char *Txt_Assignments_area =
#if L==1 // ca #if L==1 // ca
"Zona d'activitats"; "Zona d'activitats";
@ -12445,6 +12468,29 @@ const char *Txt_Failed_email_confirmation_key =
"Failed email confirmation key."; // Çeviri lazim! "Failed email confirmation key."; // Çeviri lazim!
#endif #endif
const char *Txt_Faultiness = // In projects
#if L==1 // ca
"Defectuositat";
#elif L==2 // de
"Mangelhaftigkeit";
#elif L==3 // en
"Faultiness";
#elif L==4 // es
"Defectuosos";
#elif L==5 // fr
"D&eacute;fectueux";
#elif L==6 // gn
"Defectuosos"; // Okoteve traducción
#elif L==7 // it
"Difettosi";
#elif L==8 // pl
"Wadliwo&sacute;&cacute;";
#elif L==9 // pt
"Defeituosos";
#elif L==10 // tr
"Kusurlu";
#endif
const char *Txt_Feedback = const char *Txt_Feedback =
#if L==1 // ca #if L==1 // ca
"Realimentaci&oacute;"; "Realimentaci&oacute;";
@ -34775,7 +34821,7 @@ const char *Txt_Review =
#elif L==5 // fr #elif L==5 // fr
"Examen"; "Examen";
#elif L==6 // gn #elif L==6 // gn
"Revisi&oacute;n"; // Okoteve traducción "Hechajey";
#elif L==7 // it #elif L==7 // it
"Revisione"; "Revisione";
#elif L==8 // pl #elif L==8 // pl
@ -34798,7 +34844,7 @@ const char *Txt_Role =
#elif L==5 // fr #elif L==5 // fr
"R&ocirc;le"; "R&ocirc;le";
#elif L==6 // gn #elif L==6 // gn
"Rol"; // Okoteve traducción "Kuatia";
#elif L==7 // it #elif L==7 // it
"Ruolo"; "Ruolo";
#elif L==8 // pl #elif L==8 // pl
@ -34806,7 +34852,30 @@ const char *Txt_Role =
#elif L==9 // pt #elif L==9 // pt
"Papel"; "Papel";
#elif L==10 // tr #elif L==10 // tr
"Role"; // Çeviri lazim! "Rol";
#endif
const char *Txt_Roles =
#if L==1 // ca
"Rols";
#elif L==2 // de
"Rollen";
#elif L==3 // en
"Roles";
#elif L==4 // es
"Roles";
#elif L==5 // fr
"R&ocirc;les";
#elif L==6 // gn
"Kuatia";
#elif L==7 // it
"Ruoli";
#elif L==8 // pl
"Role";
#elif L==9 // pt
"Pap&eacute;is";
#elif L==10 // tr
"Roller";
#endif #endif
const char *Txt_ROLE_STATS[Sta_NUM_ROLES_STAT] = const char *Txt_ROLE_STATS[Sta_NUM_ROLES_STAT] =
@ -56841,6 +56910,29 @@ const char *Txt_View_homework =
"View homework"; // Çeviri lazim! "View homework"; // Çeviri lazim!
#endif #endif
const char *Txt_Visibility =
#if L==1 // ca
"Visibilitat";
#elif L==2 // de
"Sichtweite";
#elif L==3 // en
"Visibility";
#elif L==4 // es
"Visibilidad";
#elif L==5 // fr
"Visibilit&eacute;";
#elif L==6 // gn
"Visibilidad"; // Okoteve traducción
#elif L==7 // it
"Visibilit&agrave;";
#elif L==8 // pl
"Widoczno&sacute;&cacute;";
#elif L==9 // pt
"Visibilidade";
#elif L==10 // tr
"G&ouml;r&uuml;n&uuml;rl&uuml;&gbreve;&uuml;k";
#endif
const char *Txt_Visible = const char *Txt_Visible =
#if L==1 // ca #if L==1 // ca
"Visible"; "Visible";
@ -56853,7 +56945,7 @@ const char *Txt_Visible =
#elif L==5 // fr #elif L==5 // fr
"Visible"; "Visible";
#elif L==6 // gn #elif L==6 // gn
"Visible"; // Okoteve traducción "Ojehecha";
#elif L==7 // it #elif L==7 // it
"Visibile"; "Visibile";
#elif L==8 // pl #elif L==8 // pl