diff --git a/css/swad18.92.css b/css/swad18.112.1.css
similarity index 99%
rename from css/swad18.92.css
rename to css/swad18.112.1.css
index 65fd5c55b..13704f1c3 100644
--- a/css/swad18.92.css
+++ b/css/swad18.112.1.css
@@ -2420,6 +2420,25 @@ a:hover img.CENTRE_PHOTO_SHOW
{
max-width:500px;
}
+.PRJ_MEMBER_ICO
+ {
+ width:30px;
+ text-align:center;
+ vertical-align:middle;
+ }
+.PRJ_MEMBER_PHO
+ {
+ width:30px;
+ text-align:center;
+ vertical-align:middle;
+ }
+.PRJ_MEMBER_NAM
+ {
+ text-align:left;
+ vertical-align:middle;
+ color:#4D88A1;
+ font-size:11pt;
+ }
/********************************** Tests ************************************/
.TAG_SEL {box-sizing:border-box; width:346px;}
@@ -2807,7 +2826,7 @@ a:hover img.CENTRE_PHOTO_SHOW
overflow:hidden;
text-overflow:ellipsis;
}
-.AUTHOR_TXT {color:#4D88A1; font-size:11pt;}
+.AUTHOR_TXT {color:#4D88A1; font-size:11pt;}
.AUTHOR_TXT_LIGHT {color:#AFC4CC; font-size:11pt;}
.AUTHOR_TXT_NEW {color:#4D88A1; font-size:11pt; font-weight:bold;}
diff --git a/swad_changelog.h b/swad_changelog.h
index f533014a2..94e5a94cf 100644
--- a/swad_changelog.h
+++ b/swad_changelog.h
@@ -456,10 +456,11 @@ En OpenSWAD:
ps2pdf source.ps destination.pdf
*/
-#define Log_PLATFORM_VERSION "SWAD 18.112 (2019-04-11)"
-#define CSS_FILE "swad18.92.css"
+#define Log_PLATFORM_VERSION "SWAD 18.112.1 (2019-04-12)"
+#define CSS_FILE "swad18.112.1.css"
#define JS_FILE "swad18.92.js"
/*
+ Version 18.112.1: Apr 12, 2019 Minor changes in layout of projects. (? lines)
Version 18.112: Apr 11, 2019 Code refactoring related to attendance. (242538 lines)
Version 18.111: Apr 11, 2019 New option to select users to compose an email to them. (242541 lines)
1 change necessary in database:
diff --git a/swad_project.c b/swad_project.c
index c6ab664aa..2efbc4f27 100644
--- a/swad_project.c
+++ b/swad_project.c
@@ -1667,7 +1667,7 @@ static void Prj_ShowOneProjectMembersWithARole (const struct Project *Prj,
/* Icon to remove user */
if (ProjectView == Prj_EDIT_ONE_PROJECT)
{
- fprintf (Gbl.F.Out,"
");
+ fprintf (Gbl.F.Out," | ");
Lay_PutContextualLinkOnlyIcon (ActionReqRemUsr[RoleInProject],NULL,
Prj_PutCurrentParams,
"trash.svg",
@@ -1676,7 +1676,7 @@ static void Prj_ShowOneProjectMembersWithARole (const struct Project *Prj,
}
/* Put user's photo */
- fprintf (Gbl.F.Out," | ");
+ fprintf (Gbl.F.Out," | ");
ShowPhoto = Pho_ShowingUsrPhotoIsAllowed (&Gbl.Usrs.Other.UsrDat,PhotoURL);
Pho_ShowUsrPhoto (&Gbl.Usrs.Other.UsrDat,ShowPhoto ? PhotoURL :
NULL,
@@ -1684,7 +1684,7 @@ static void Prj_ShowOneProjectMembersWithARole (const struct Project *Prj,
fprintf (Gbl.F.Out," | ");
/* Write user's name */
- fprintf (Gbl.F.Out,"%s | ",
+ fprintf (Gbl.F.Out,"%s | ",
Gbl.Usrs.Other.UsrDat.FullName);
/* End row for this user */
@@ -1697,7 +1697,7 @@ static void Prj_ShowOneProjectMembersWithARole (const struct Project *Prj,
{
case Prj_EDIT_ONE_PROJECT:
fprintf (Gbl.F.Out,""
- "");
+ " | ");
Gbl.Prjs.PrjCod = Prj->PrjCod; // Used to pass project code as a parameter
snprintf (Gbl.Title,sizeof (Gbl.Title),
Txt_Add_USERS,
@@ -1706,11 +1706,8 @@ static void Prj_ShowOneProjectMembersWithARole (const struct Project *Prj,
Prj_PutCurrentParams,
Gbl.Title);
fprintf (Gbl.F.Out," | "
- "" // Column for photo
- " | ");
- if (RoleInProject == Prj_ROLE_STD)
- fprintf (Gbl.F.Out," | "); // Column for user's IDs
- fprintf (Gbl.F.Out," | " // Column for name
+ " | " // Column for photo
+ " | " // Column for name
"
");
break;
default:
@@ -1958,7 +1955,7 @@ static void Prj_AddEvls (void)
static void Prj_AddUsrsToProject (Prj_RoleInProject_t RoleInProject)
{
extern const char *Txt_THE_USER_X_has_been_enroled_as_a_Y_in_the_project;
- extern const char *Txt_PROJECT_ROLES_SINGUL_abc[Prj_NUM_ROLES_IN_PROJECT];
+ extern const char *Txt_PROJECT_ROLES_SINGUL_abc[Prj_NUM_ROLES_IN_PROJECT][Usr_NUM_SEXS];
long PrjCod;
const char *Ptr;
bool ItsMe;
@@ -1996,7 +1993,7 @@ static void Prj_AddUsrsToProject (Prj_RoleInProject_t RoleInProject)
/* Show success alert */
Ale_ShowAlert (Ale_SUCCESS,Txt_THE_USER_X_has_been_enroled_as_a_Y_in_the_project,
Gbl.Usrs.Other.UsrDat.FullName,
- Txt_PROJECT_ROLES_SINGUL_abc[RoleInProject]);
+ Txt_PROJECT_ROLES_SINGUL_abc[RoleInProject][Gbl.Usrs.Other.UsrDat.Sex]);
}
}
@@ -2027,9 +2024,8 @@ static void Prj_ReqRemUsrFromPrj (Prj_RoleInProject_t RoleInProject)
{
extern const char *Txt_Do_you_really_want_to_be_removed_as_a_X_from_the_project_Y;
extern const char *Txt_Do_you_really_want_to_remove_the_following_user_as_a_X_from_the_project_Y;
- extern const char *Txt_PROJECT_ROLES_SINGUL_abc[Prj_NUM_ROLES_IN_PROJECT];
- extern const char *Txt_Remove_me_from_this_project;
- extern const char *Txt_Remove_user_from_this_project;
+ extern const char *Txt_PROJECT_ROLES_SINGUL_abc[Prj_NUM_ROLES_IN_PROJECT][Usr_NUM_SEXS];
+ extern const char *Txt_Remove_USER_from_this_project;
static Act_Action_t ActionRemUsr[Prj_NUM_ROLES_IN_PROJECT] =
{
ActUnk, // Prj_ROLE_UNK, Unknown
@@ -2058,11 +2054,11 @@ static void Prj_ReqRemUsrFromPrj (Prj_RoleInProject_t RoleInProject)
{
ItsMe = Usr_ItsMe (Gbl.Usrs.Other.UsrDat.UsrCod);
- /***** Show question and button to remove user as administrator *****/
+ /***** Show question and button to remove user as a role from project *****/
/* Start alert */
Ale_ShowAlertAndButton1 (Ale_QUESTION,ItsMe ? Txt_Do_you_really_want_to_be_removed_as_a_X_from_the_project_Y :
Txt_Do_you_really_want_to_remove_the_following_user_as_a_X_from_the_project_Y,
- Txt_PROJECT_ROLES_SINGUL_abc[RoleInProject],
+ Txt_PROJECT_ROLES_SINGUL_abc[RoleInProject][Gbl.Usrs.Other.UsrDat.Sex],
Prj.Title);
/* Show user's record */
@@ -2072,8 +2068,10 @@ static void Prj_ReqRemUsrFromPrj (Prj_RoleInProject_t RoleInProject)
Frm_StartForm (ActionRemUsr[RoleInProject]);
Gbl.Prjs.PrjCod = Prj.PrjCod;
Prj_PutCurrentParams ();
- Btn_PutRemoveButton (ItsMe ? Txt_Remove_me_from_this_project :
- Txt_Remove_user_from_this_project);
+ snprintf (Gbl.Title,sizeof (Gbl.Title),
+ Txt_Remove_USER_from_this_project,
+ Txt_PROJECT_ROLES_SINGUL_abc[RoleInProject][Gbl.Usrs.Other.UsrDat.Sex]);
+ Btn_PutRemoveButton (Gbl.Title);
Frm_EndForm ();
/* End alert */
@@ -2114,7 +2112,7 @@ void Prj_RemEvl (void)
static void Prj_RemUsrFromPrj (Prj_RoleInProject_t RoleInProject)
{
extern const char *Txt_THE_USER_X_has_been_removed_as_a_Y_from_the_project_Z;
- extern const char *Txt_PROJECT_ROLES_SINGUL_abc[Prj_NUM_ROLES_IN_PROJECT];
+ extern const char *Txt_PROJECT_ROLES_SINGUL_abc[Prj_NUM_ROLES_IN_PROJECT][Usr_NUM_SEXS];
struct Project Prj;
bool ItsMe;
@@ -2151,7 +2149,7 @@ static void Prj_RemUsrFromPrj (Prj_RoleInProject_t RoleInProject)
/***** Show success alert *****/
Ale_ShowAlert (Ale_SUCCESS,Txt_THE_USER_X_has_been_removed_as_a_Y_from_the_project_Z,
Gbl.Usrs.Other.UsrDat.FullName,
- Txt_PROJECT_ROLES_SINGUL_abc[RoleInProject],
+ Txt_PROJECT_ROLES_SINGUL_abc[RoleInProject][Gbl.Usrs.Other.UsrDat.Sex],
Prj.Title);
}
else
diff --git a/swad_text.c b/swad_text.c
index 1679b4fa9..d751cdd47 100644
--- a/swad_text.c
+++ b/swad_text.c
@@ -30161,9 +30161,10 @@ const char *Txt_PROJECT_ROLES_SINGUL_Abc[Prj_NUM_ROLES_IN_PROJECT] =
#endif
};
-const char *Txt_PROJECT_ROLES_SINGUL_abc[Prj_NUM_ROLES_IN_PROJECT] =
+const char *Txt_PROJECT_ROLES_SINGUL_abc[Prj_NUM_ROLES_IN_PROJECT][Usr_NUM_SEXS] =
+{
{
-#if L==1 // ca // Prj_ROLE_UNK
+#if L==1 // ca // Prj_ROLE_UNK - Usr_SEX_UNKNOWN
"desconegut/da"
#elif L==2 // de
"Unbekannter/e"
@@ -30182,8 +30183,69 @@ const char *Txt_PROJECT_ROLES_SINGUL_abc[Prj_NUM_ROLES_IN_PROJECT] =
#elif L==9 // pt
"desconhecido/a"
#endif
- ,
-#if L==1 // ca // Prj_ROLE_STD
+ ,
+#if L==1 // ca // Prj_ROLE_UNK - Usr_SEX_FEMALE
+ "desconeguda"
+#elif L==2 // de
+ "Unbekanntere"
+#elif L==3 // en
+ "unknown"
+#elif L==4 // es
+ "desconocida"
+#elif L==5 // fr
+ "inconnu/e"
+#elif L==6 // gn
+ "desconocida" // Okoteve traducción
+#elif L==7 // it
+ "sconosciuta"
+#elif L==8 // pl
+ "nieznany"
+#elif L==9 // pt
+ "desconhecida"
+#endif
+ ,
+#if L==1 // ca // Prj_ROLE_UNK - Usr_SEX_MALE
+ "desconegut"
+#elif L==2 // de
+ "Unbekannter"
+#elif L==3 // en
+ "unknown"
+#elif L==4 // es
+ "desconocido"
+#elif L==5 // fr
+ "inconnu"
+#elif L==6 // gn
+ "desconocido" // Okoteve traducción
+#elif L==7 // it
+ "sconosciuto"
+#elif L==8 // pl
+ "nieznany"
+#elif L==9 // pt
+ "desconhecido"
+#endif
+ ,
+#if L==1 // ca // Prj_ROLE_UNK - Usr_SEX_ALL
+ "desconegut/da"
+#elif L==2 // de
+ "Unbekannter/e"
+#elif L==3 // en
+ "unknown"
+#elif L==4 // es
+ "desconocido/a"
+#elif L==5 // fr
+ "inconnu/e"
+#elif L==6 // gn
+ "desconocido/a" // Okoteve traducción
+#elif L==7 // it
+ "sconosciuto/a"
+#elif L==8 // pl
+ "nieznany"
+#elif L==9 // pt
+ "desconhecido/a"
+#endif
+ },
+ {
+#if L==1 // ca // Prj_ROLE_STD - Usr_SEX_UNKNOWN
"estudiant"
#elif L==2 // de
"Student"
@@ -30202,8 +30264,69 @@ const char *Txt_PROJECT_ROLES_SINGUL_abc[Prj_NUM_ROLES_IN_PROJECT] =
#elif L==9 // pt
"estudante"
#endif
- ,
-#if L==1 // ca // Prj_ROLE_TUT
+ ,
+#if L==1 // ca // Prj_ROLE_STD - Usr_SEX_FEMALE
+ "estudiant"
+#elif L==2 // de
+ "Student"
+#elif L==3 // en
+ "student"
+#elif L==4 // es
+ "estudiante"
+#elif L==5 // fr
+ "étudiante"
+#elif L==6 // gn
+ "temimbo'e"
+#elif L==7 // it
+ "studente"
+#elif L==8 // pl
+ "student"
+#elif L==9 // pt
+ "estudante"
+#endif
+ ,
+#if L==1 // ca // Prj_ROLE_STD - Usr_SEX_MALE
+ "estudiant"
+#elif L==2 // de
+ "Student"
+#elif L==3 // en
+ "student"
+#elif L==4 // es
+ "estudiante"
+#elif L==5 // fr
+ "étudiant"
+#elif L==6 // gn
+ "temimbo'e"
+#elif L==7 // it
+ "studente"
+#elif L==8 // pl
+ "student"
+#elif L==9 // pt
+ "estudante"
+#endif
+ ,
+#if L==1 // ca // Prj_ROLE_STD - Usr_SEX_ALL
+ "estudiant"
+#elif L==2 // de
+ "Student"
+#elif L==3 // en
+ "student"
+#elif L==4 // es
+ "estudiante"
+#elif L==5 // fr
+ "étudiant/e"
+#elif L==6 // gn
+ "temimbo'e"
+#elif L==7 // it
+ "studente"
+#elif L==8 // pl
+ "student"
+#elif L==9 // pt
+ "estudante"
+#endif
+ },
+ {
+#if L==1 // ca // Prj_ROLE_TUT - Usr_SEX_UNKNOWN
"tutor/a"
#elif L==2 // de
"Tutor"
@@ -30212,7 +30335,7 @@ const char *Txt_PROJECT_ROLES_SINGUL_abc[Prj_NUM_ROLES_IN_PROJECT] =
#elif L==4 // es
"tutor/a"
#elif L==5 // fr
- "tuteur"
+ "tuteur/trice"
#elif L==6 // gn
"tutor/a" // Okoteve traducción
#elif L==7 // it
@@ -30222,8 +30345,69 @@ const char *Txt_PROJECT_ROLES_SINGUL_abc[Prj_NUM_ROLES_IN_PROJECT] =
#elif L==9 // pt
"tutor/a"
#endif
- ,
-#if L==1 // ca // Prj_ROLE_EVL
+ ,
+#if L==1 // ca // Prj_ROLE_TUT - Usr_SEX_FEMALE
+ "tutora"
+#elif L==2 // de
+ "Tutor"
+#elif L==3 // en
+ "tutor"
+#elif L==4 // es
+ "tutora"
+#elif L==5 // fr
+ "tutrice"
+#elif L==6 // gn
+ "tutora" // Okoteve traducción
+#elif L==7 // it
+ "precettore"
+#elif L==8 // pl
+ "nauczyciel"
+#elif L==9 // pt
+ "tutora"
+#endif
+ ,
+#if L==1 // ca // Prj_ROLE_TUT - Usr_SEX_MALE
+ "tutor"
+#elif L==2 // de
+ "Tutor"
+#elif L==3 // en
+ "tutor"
+#elif L==4 // es
+ "tutor"
+#elif L==5 // fr
+ "tuteur"
+#elif L==6 // gn
+ "tutor" // Okoteve traducción
+#elif L==7 // it
+ "precettore"
+#elif L==8 // pl
+ "nauczyciel"
+#elif L==9 // pt
+ "tutor"
+#endif
+ ,
+#if L==1 // ca // Prj_ROLE_TUT - Usr_SEX_ALL
+ "tutor/a"
+#elif L==2 // de
+ "Tutor"
+#elif L==3 // en
+ "tutor"
+#elif L==4 // es
+ "tutor/a"
+#elif L==5 // fr
+ "tuteur/trice"
+#elif L==6 // gn
+ "tutor/a" // Okoteve traducción
+#elif L==7 // it
+ "precettore"
+#elif L==8 // pl
+ "nauczyciel"
+#elif L==9 // pt
+ "tutor/a"
+#endif
+ },
+ {
+#if L==1 // ca // Prj_ROLE_EVL - Usr_SEX_UNKNOWN
"avaluador/a"
#elif L==2 // de
"Auswerter"
@@ -30232,7 +30416,7 @@ const char *Txt_PROJECT_ROLES_SINGUL_abc[Prj_NUM_ROLES_IN_PROJECT] =
#elif L==4 // es
"evaluador/a"
#elif L==5 // fr
- "évaluateur"
+ "évaluateur/trice"
#elif L==6 // gn
"evaluador/a" // Okoteve traducción
#elif L==7 // it
@@ -30242,7 +30426,68 @@ const char *Txt_PROJECT_ROLES_SINGUL_abc[Prj_NUM_ROLES_IN_PROJECT] =
#elif L==9 // pt
"avaliador/a"
#endif
- };
+ ,
+#if L==1 // ca // Prj_ROLE_EVL - Usr_SEX_FEMALE
+ "avaluadora"
+#elif L==2 // de
+ "Auswerter"
+#elif L==3 // en
+ "evaluator"
+#elif L==4 // es
+ "evaluadora"
+#elif L==5 // fr
+ "évaluatrice"
+#elif L==6 // gn
+ "evaluadora" // Okoteve traducción
+#elif L==7 // it
+ "valutatore"
+#elif L==8 // pl
+ "ewaluator"
+#elif L==9 // pt
+ "avaliadora"
+#endif
+ ,
+#if L==1 // ca // Prj_ROLE_EVL - Usr_SEX_MALE
+ "avaluador"
+#elif L==2 // de
+ "Auswerter"
+#elif L==3 // en
+ "evaluator"
+#elif L==4 // es
+ "evaluador"
+#elif L==5 // fr
+ "évaluateur"
+#elif L==6 // gn
+ "evaluador" // Okoteve traducción
+#elif L==7 // it
+ "valutatore"
+#elif L==8 // pl
+ "ewaluator"
+#elif L==9 // pt
+ "avaliador"
+#endif
+ ,
+#if L==1 // ca // Prj_ROLE_EVL - Usr_SEX_ALL
+ "avaluador/a"
+#elif L==2 // de
+ "Auswerter"
+#elif L==3 // en
+ "evaluator"
+#elif L==4 // es
+ "evaluador/a"
+#elif L==5 // fr
+ "évaluateur/trice"
+#elif L==6 // gn
+ "evaluador/a" // Okoteve traducción
+#elif L==7 // it
+ "valutatore"
+#elif L==8 // pl
+ "ewaluator"
+#elif L==9 // pt
+ "avaliador/a"
+#endif
+ }
+};
const char *Txt_PROJECT_ROLES_PLURAL_Abc[Prj_NUM_ROLES_IN_PROJECT] =
{
@@ -32193,27 +32438,6 @@ const char *Txt_Remove_me_from_this_course =
"Tirar me desta disciplina";
#endif
-const char *Txt_Remove_me_from_this_project =
-#if L==1 // ca
- "Eliminarme d'aquest projecte";
-#elif L==2 // de
- "Entfernen Sie diesen Projekt";
-#elif L==3 // en
- "Remove me from this project";
-#elif L==4 // es
- "Eliminarme de este proyecto";
-#elif L==5 // fr
- "Enlever-moi de ce projet";
-#elif L==6 // gn
- "Eliminarme de este proyecto"; // Okoteve traducción
-#elif L==7 // it
- "Rimuovimi da questo progetto";
-#elif L==8 // pl
- "Usuñ z projekt";
-#elif L==9 // pt
- "Tirar me deste projeto";
-#endif
-
const char *Txt_Remove_me_from_THE_COURSE_X = // Warning: it is very important to include %s in the following sentences
#if L==1 // ca
"Eliminarme de %s";
@@ -32466,25 +32690,25 @@ const char *Txt_Remove_user_from_this_course =
"Tirar utilizador desta disciplina";
#endif
-const char *Txt_Remove_user_from_this_project =
+const char *Txt_Remove_USER_from_this_project = // Warning: it is very important to include %s in the following sentences
#if L==1 // ca
- "Eliminar usuari d'aquest projecte";
+ "Eliminar %s d'aquest projecte";
#elif L==2 // de
- "Entfernen Benutzer Sie diesen Projekt";
+ "Entfernen %s Sie diesen Projekt";
#elif L==3 // en
- "Remove user from this project";
+ "Remove %s from this project";
#elif L==4 // es
- "Eliminar usuario de este proyecto";
+ "Eliminar %s de este proyecto";
#elif L==5 // fr
- "Enlever utilisateur de ce projet";
+ "Enlever %s de ce projet";
#elif L==6 // gn
- "Eliminar usuario de este proyecto"; // Okoteve traducción
+ "Eliminar %s de este proyecto"; // Okoteve traducción
#elif L==7 // it
- "Rimuovi utente da questo progetto";
+ "Rimuovi %s da questo progetto";
#elif L==8 // pl
- "Usuñ użytkownika z projekt";
+ "Usuñ %s z projekt";
#elif L==9 // pt
- "Tirar utilizador deste projeto";
+ "Tirar %s deste projeto";
#endif
const char *Txt_Remove_USER_as_an_administrator =