diff --git a/swad_changelog.h b/swad_changelog.h
index e341552a3..00d1c8c9d 100644
--- a/swad_changelog.h
+++ b/swad_changelog.h
@@ -252,13 +252,14 @@
/****************************** Public constants *****************************/
/*****************************************************************************/
-#define Log_PLATFORM_VERSION "SWAD 17.6 (2017-09-22)"
+#define Log_PLATFORM_VERSION "SWAD 17.7 (2017-09-23)"
#define CSS_FILE "swad17.0.css"
#define JS_FILE "swad16.206.3.js"
// Number of lines (includes comments but not blank lines) has been got with the following command:
// nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*?.h sql/swad*.sql | tail -1
/*
+ Version 17.7: Sep 23, 2017 Remove user from project. (230798 lines)
Version 17.6: Sep 22, 2017 Actions to remove user from project. (230559 lines)
6 changes necessary in database:
UPDATE actions SET Txt='Solicitar ID añadir evaluador a proyecto' WHERE ActCod='1686' AND Language='es';
diff --git a/swad_project.c b/swad_project.c
index 9cc99cac2..868bddb0a 100644
--- a/swad_project.c
+++ b/swad_project.c
@@ -50,19 +50,6 @@ extern struct Globals Gbl;
/*****************************************************************************/
/************************* Public constants and types ************************/
/*****************************************************************************/
-// Related with user's roles in a project
-/*
- Don't change these numbers! They are used in database
-*/
-
-#define Prj_NUM_ROLES_IN_PROJECT 4
-typedef enum
- {
- Prj_ROLE_UNK = 0, // Unknown
- Prj_ROLE_STD = 1, // Student
- Prj_ROLE_TUT = 2, // Tutor
- Prj_ROLE_EVA = 3, // Evaluator
- } Prj_RoleInProject_t;
typedef enum
{
@@ -99,6 +86,7 @@ static void Prj_WriteUsrs (long PrjCod,Prj_ProjectView_t ProjectView,
static void Prj_ReqAnotherUsrID (Prj_RoleInProject_t RoleInProject);
static void Prj_AddUsrToProject (Prj_RoleInProject_t RoleInProject);
static void Prj_ReqRemUsrFromPrj (Prj_RoleInProject_t RoleInProject);
+static void Prj_RemUsrFromPrj (Prj_RoleInProject_t RoleInProject);
static bool Prj_CheckIfICanRemUsrFromPrj (void);
static void Prj_GetParamPrjOrder (void);
@@ -367,9 +355,8 @@ static void Prj_ShowOneProject (struct Project *Prj,Prj_ProjectView_t ProjectVie
extern const char *Txt_Required_knowledge;
extern const char *Txt_Required_materials;
extern const char *Txt_Preassigned_QUESTION;
- extern const char *Txt_Tutors;
- extern const char *Txt_ROLES_PLURAL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS];
- extern const char *Txt_Evaluators;
+ extern const char *Txt_PROJECT_ROLES_PLURAL_Abc[Prj_NUM_ROLES_IN_PROJECT];
+ Prj_RoleInProject_t RoleInProject;
static unsigned UniqueId = 0;
/***** Get data of this project *****/
@@ -476,17 +463,12 @@ static void Prj_ShowOneProject (struct Project *Prj,Prj_ProjectView_t ProjectVie
(Prj->Preassigned == Prj_PREASSIGNED) ? Txt_Yes :
Txt_No);
- /* Project tutors */
- Prj_ShowOneProjectUsrsRow (Prj,ProjectView,
- Txt_Tutors,Prj_ROLE_TUT);
-
- /* Project students */
- Prj_ShowOneProjectUsrsRow (Prj,ProjectView,
- Txt_ROLES_PLURAL_Abc[Rol_STD][Usr_SEX_UNKNOWN],Prj_ROLE_STD);
-
- /* Project evaluators */
- Prj_ShowOneProjectUsrsRow (Prj,ProjectView,
- Txt_Evaluators,Prj_ROLE_EVA);
+ /* Project members */
+ for (RoleInProject = Prj_ROLE_STD;
+ RoleInProject <= Prj_ROLE_EVA;
+ RoleInProject++)
+ Prj_ShowOneProjectUsrsRow (Prj,ProjectView,
+ Txt_PROJECT_ROLES_PLURAL_Abc[RoleInProject],RoleInProject);
Gbl.RowEvenOdd = 1 - Gbl.RowEvenOdd;
}
@@ -609,7 +591,8 @@ static void Prj_WriteUsrs (long PrjCod,Prj_ProjectView_t ProjectView,
extern const char *Txt_Remove;
extern const char *Txt_ROLES_SINGUL_abc[Rol_NUM_ROLES][Usr_NUM_SEXS];
extern const char *Txt_ROLES_PLURAL_abc[Rol_NUM_ROLES][Usr_NUM_SEXS];
- extern const char *Txt_Add_user;
+ extern const char *Txt_Add_USER;
+ extern const char *Txt_PROJECT_ROLES_SINGUL_abc[Prj_NUM_ROLES_IN_PROJECT];
char Query[2048];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
@@ -730,9 +713,10 @@ static void Prj_WriteUsrs (long PrjCod,Prj_ProjectView_t ProjectView,
fprintf (Gbl.F.Out,"
"
"");
Gbl.Prjs.PrjCodToEdit = PrjCod; // Used to pass project code as a parameter
+ sprintf (Gbl.Title,Txt_Add_USER,Txt_PROJECT_ROLES_SINGUL_abc[RoleInProject]);
Lay_PutContextualLink (ActionReqAddUsr[RoleInProject],NULL,Prj_PutParams,
"plus64x64.png",
- Txt_Add_user,Txt_Add_user,
+ Gbl.Title,Gbl.Title,
NULL);
fprintf (Gbl.F.Out," | "
"
");
@@ -767,7 +751,8 @@ void Prj_ReqAddEva (void)
static void Prj_ReqAnotherUsrID (Prj_RoleInProject_t RoleInProject)
{
extern const char *Hlp_ASSESSMENT_Projects_add_user;
- extern const char *Txt_Add_user;
+ extern const char *Txt_Add_USER;
+ extern const char *Txt_PROJECT_ROLES_SINGUL_abc[Prj_NUM_ROLES_IN_PROJECT];
static Act_Action_t ActionAddUsr[Prj_NUM_ROLES_IN_PROJECT] =
{
ActUnk, // Prj_ROLE_UNK, Unknown
@@ -781,7 +766,8 @@ static void Prj_ReqAnotherUsrID (Prj_RoleInProject_t RoleInProject)
Lay_ShowErrorAndExit ("Code of project is missing.");
/***** Start box *****/
- Box_StartBox (NULL,Txt_Add_user,NULL,
+ sprintf (Gbl.Title,Txt_Add_USER,Txt_PROJECT_ROLES_SINGUL_abc[RoleInProject]);
+ Box_StartBox (NULL,Gbl.Title,NULL,
Hlp_ASSESSMENT_Projects_add_user,Box_NOT_CLOSABLE);
/***** Write form to request another user's ID *****/
@@ -815,7 +801,8 @@ void Prj_AddEva (void)
static void Prj_AddUsrToProject (Prj_RoleInProject_t RoleInProject)
{
- extern const char *Txt_THE_USER_X_has_been_enroled_in_the_project;
+ 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_THE_USER_X_already_exists_in_Y_but_is_not_yet_enroled_in_the_course_Z;
extern const char *Txt_User_not_found_or_you_do_not_have_permission_;
long PrjCod;
@@ -852,8 +839,9 @@ static void Prj_AddUsrToProject (Prj_RoleInProject_t RoleInProject)
PrjCod,(unsigned) RoleInProject,Gbl.Usrs.Other.UsrDat.UsrCod);
DB_QueryREPLACE (Query,"can not add user to project");
- sprintf (Gbl.Alert.Txt,Txt_THE_USER_X_has_been_enroled_in_the_project,
- Gbl.Usrs.Other.UsrDat.FullName);
+ sprintf (Gbl.Alert.Txt,Txt_THE_USER_X_has_been_enroled_as_a_Y_in_the_project,
+ Gbl.Usrs.Other.UsrDat.FullName,
+ Txt_PROJECT_ROLES_SINGUL_abc[RoleInProject]);
Ale_ShowAlert (Ale_SUCCESS,Gbl.Alert.Txt);
}
else // User does not belong to the current course
@@ -895,8 +883,9 @@ void Prj_ReqRemEva (void)
static void Prj_ReqRemUsrFromPrj (Prj_RoleInProject_t RoleInProject)
{
- extern const char *Txt_Do_you_really_want_to_be_removed_from_the_project_X;
- extern const char *Txt_Do_you_really_want_to_remove_the_following_user_from_the_project_X;
+ 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_User_not_found_or_you_do_not_have_permission_;
@@ -907,8 +896,21 @@ static void Prj_ReqRemUsrFromPrj (Prj_RoleInProject_t RoleInProject)
ActRemTutPrj, // Prj_ROLE_TUT, Tutor
ActRemEvaPrj, // Prj_ROLE_EVA, Evaluator
};
+ struct Project Prj;
bool ItsMe;
+ /***** Allocate memory for the project *****/
+ Prj_AllocMemProject (&Prj);
+
+ /***** Get parameters *****/
+ Prj_GetParamPrjOrder ();
+ Gbl.Prjs.CurrentPage = Pag_GetParamPagNum (Pag_PROJECTS);
+ if ((Prj.PrjCod = Prj_GetParamPrjCod ()) == -1L)
+ Lay_ShowErrorAndExit ("Code of project is missing.");
+
+ /***** Get data of the project from database *****/
+ Prj_GetDataOfProjectByCod (&Prj);
+
/***** Get user to be removed *****/
if (Usr_GetParamOtherUsrCodEncryptedAndGetUsrData ())
{
@@ -919,9 +921,10 @@ static void Prj_ReqRemUsrFromPrj (Prj_RoleInProject_t RoleInProject)
/***** Show question and button to remove user as administrator *****/
/* Start alert */
sprintf (Gbl.Alert.Txt,
- ItsMe ? Txt_Do_you_really_want_to_be_removed_from_the_project_X :
- Txt_Do_you_really_want_to_remove_the_following_user_from_the_project_X,
- Gbl.CurrentCrs.Crs.FullName);
+ 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],
+ Prj.Title);
Ale_ShowAlertAndButton1 (Ale_QUESTION,Gbl.Alert.Txt);
/* Show user's record */
@@ -929,7 +932,8 @@ static void Prj_ReqRemUsrFromPrj (Prj_RoleInProject_t RoleInProject)
/* Show form to request confirmation */
Act_FormStart (ActionRemUsr[RoleInProject]);
- Usr_PutParamUsrCodEncrypted (Gbl.Usrs.Other.UsrDat.EncryptedUsrCod);
+ Gbl.Prjs.PrjCodToEdit = Prj.PrjCod;
+ Prj_PutParams ();
Btn_PutRemoveButton (ItsMe ? Txt_Remove_me_from_this_project :
Txt_Remove_user_from_this_project);
Act_FormEnd ();
@@ -942,6 +946,84 @@ static void Prj_ReqRemUsrFromPrj (Prj_RoleInProject_t RoleInProject)
}
else
Ale_ShowAlert (Ale_WARNING,Txt_User_not_found_or_you_do_not_have_permission_);
+
+ /***** Free memory of the project *****/
+ Prj_FreeMemProject (&Prj);
+
+ /***** Put form to edit project again *****/
+ Prj_RequestCreatOrEditPrj (Prj.PrjCod);
+ }
+
+/*****************************************************************************/
+/************************ Remove user from project ***************************/
+/*****************************************************************************/
+
+void Prj_RemStd (void)
+ {
+ Prj_RemUsrFromPrj (Prj_ROLE_STD);
+ }
+
+void Prj_RemTut (void)
+ {
+ Prj_RemUsrFromPrj (Prj_ROLE_TUT);
+ }
+
+void Prj_RemEva (void)
+ {
+ Prj_RemUsrFromPrj (Prj_ROLE_EVA);
+ }
+
+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_User_not_found_or_you_do_not_have_permission_;
+ char Query[256];
+ struct Project Prj;
+
+ /***** Allocate memory for the project *****/
+ Prj_AllocMemProject (&Prj);
+
+ /***** Get parameters *****/
+ Prj_GetParamPrjOrder ();
+ Gbl.Prjs.CurrentPage = Pag_GetParamPagNum (Pag_PROJECTS);
+ if ((Prj.PrjCod = Prj_GetParamPrjCod ()) == -1L)
+ Lay_ShowErrorAndExit ("Code of project is missing.");
+
+ /***** Get data of the project from database *****/
+ Prj_GetDataOfProjectByCod (&Prj);
+
+ /***** Get user to be removed *****/
+ if (Usr_GetParamOtherUsrCodEncryptedAndGetUsrData ())
+ {
+ if (Prj_CheckIfICanRemUsrFromPrj ())
+ {
+ /***** Remove user from the table of project-users *****/
+ sprintf (Query,"DELETE FROM prj_usr"
+ " WHERE PrjCod=%ld AND RoleInProject=%u AND UsrCod=%ld",
+ Prj.PrjCod,
+ (unsigned) RoleInProject,
+ Gbl.Usrs.Other.UsrDat.UsrCod);
+ DB_QueryDELETE (Query,"can not remove a user from a project");
+
+ /***** Show success alert *****/
+ sprintf (Gbl.Alert.Txt,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],
+ Prj.Title);
+ Ale_ShowAlert (Ale_SUCCESS,Gbl.Alert.Txt);
+ }
+ else
+ Ale_ShowAlert (Ale_WARNING,Txt_User_not_found_or_you_do_not_have_permission_);
+ }
+ else
+ Ale_ShowAlert (Ale_WARNING,Txt_User_not_found_or_you_do_not_have_permission_);
+
+ /***** Free memory of the project *****/
+ Prj_FreeMemProject (&Prj);
+
+ /***** Put form to edit project again *****/
+ Prj_RequestCreatOrEditPrj (Prj.PrjCod);
}
/*****************************************************************************/
@@ -953,25 +1035,6 @@ static bool Prj_CheckIfICanRemUsrFromPrj (void)
return true; // TODO: Rewrite this function
}
-/*****************************************************************************/
-/************************ Remove user from project ***************************/
-/*****************************************************************************/
-
-void Prj_RemStd (void)
- {
- Prj_AddUsrToProject (Prj_ROLE_STD);
- }
-
-void Prj_RemTut (void)
- {
- Prj_AddUsrToProject (Prj_ROLE_TUT);
- }
-
-void Prj_RemEva (void)
- {
- Prj_AddUsrToProject (Prj_ROLE_EVA);
- }
-
/*****************************************************************************/
/********* Get parameter with the type or order in list of projects **********/
/*****************************************************************************/
@@ -1511,11 +1574,10 @@ static void Prj_RequestCreatOrEditPrj (long PrjCod)
extern const char *Txt_Create_project;
extern const char *Txt_Save;
extern const char *Txt_Project_members;
- extern const char *Txt_Tutors;
- extern const char *Txt_ROLES_PLURAL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS];
- extern const char *Txt_Evaluators;
+ extern const char *Txt_PROJECT_ROLES_PLURAL_Abc[Prj_NUM_ROLES_IN_PROJECT];
struct Project Prj;
bool ItsANewProject;
+ Prj_RoleInProject_t RoleInProject;
/***** Allocate memory for the project *****/
Prj_AllocMemProject (&Prj);
@@ -1653,15 +1715,11 @@ static void Prj_RequestCreatOrEditPrj (long PrjCod)
{
Box_StartBoxTable (NULL,Txt_Project_members,NULL,
NULL,Box_NOT_CLOSABLE,2);
- Prj_ShowOneProjectUsrsRow (&Prj,Prj_EDIT_ONE_PROJECT,
- Txt_Tutors,
- Prj_ROLE_TUT); // Tutors
- Prj_ShowOneProjectUsrsRow (&Prj,Prj_EDIT_ONE_PROJECT,
- Txt_ROLES_PLURAL_Abc[Rol_STD][Usr_SEX_UNKNOWN],
- Prj_ROLE_STD); // Students
- Prj_ShowOneProjectUsrsRow (&Prj,Prj_EDIT_ONE_PROJECT,
- Txt_Evaluators,
- Prj_ROLE_EVA); // Evaluators
+ for (RoleInProject = Prj_ROLE_STD;
+ RoleInProject <= Prj_ROLE_EVA;
+ RoleInProject++)
+ Prj_ShowOneProjectUsrsRow (&Prj,Prj_EDIT_ONE_PROJECT,
+ Txt_PROJECT_ROLES_PLURAL_Abc[RoleInProject],RoleInProject);
Box_EndBoxTable ();
}
diff --git a/swad_project.h b/swad_project.h
index fc06b41cc..6d2d62b28 100644
--- a/swad_project.h
+++ b/swad_project.h
@@ -46,6 +46,17 @@ typedef enum
Prj_PREASSIGNED = 1,
} Prj_Preassigned_t;
+// Related with user's roles in a project
+// Don't change these numbers! They are used in database
+#define Prj_NUM_ROLES_IN_PROJECT 4
+typedef enum
+ {
+ Prj_ROLE_UNK = 0, // Unknown
+ Prj_ROLE_STD = 1, // Student
+ Prj_ROLE_TUT = 2, // Tutor
+ Prj_ROLE_EVA = 3, // Evaluator
+ } Prj_RoleInProject_t;
+
struct Project
{
long PrjCod;
diff --git a/swad_text.c b/swad_text.c
index 3c2e5a508..5db5d390a 100644
--- a/swad_text.c
+++ b/swad_text.c
@@ -2908,25 +2908,25 @@ const char *Txt_Add_this_ID =
"Adicionar este nº identif.";
#endif
-const char *Txt_Add_user =
+const char *Txt_Add_USER = // Warning: it is very important to include %s in the following sentences
#if L==1
- "Afegir usuari";
+ "Afegir %s";
#elif L==2
- "Fügen Benutzer";
+ "Fügen %s";
#elif L==3
- "Add user";
+ "Add %s";
#elif L==4
- "Añadir usuario";
+ "Añadir %s";
#elif L==5
- "Ajouter utilisateur";
+ "Ajouter %s";
#elif L==6
- "Añadir usuario"; // Okoteve traducción
+ "Añadir %s"; // Okoteve traducción
#elif L==7
- "Aggiungere utente";
+ "Aggiungere %s";
#elif L==8
- "Dodaj użytkownika";
+ "Dodaj %s";
#elif L==9
- "Adicionar usuário";
+ "Adicionar %s";
#endif
const char *Txt_Announcement_created =
@@ -8999,25 +8999,34 @@ const char *Txt_Do_you_really_want_to_be_removed_from_the_course_X = // Warning:
" (removing your works, enrolment in groups, etc.)?"; // Necessita de tradução
#endif
-const char *Txt_Do_you_really_want_to_be_removed_from_the_project_X = // Warning: it is very important to include %s in the following sentences
+const char *Txt_Do_you_really_want_to_be_removed_as_a_X_from_the_project_Y = // Warning: it is very important to include two %s in the following sentences
#if L==1
- "¿De veres voleu ser eliminat del projecte %s?";
+ "¿De veres voleu ser eliminat"
+ " como a %s del projecte %s?";
#elif L==2
- "Möchten Sie wirklich aus dem Projekt %s entfernt werden?";
+ "Möchten Sie wirklich"
+ " als %s aus dem Projekt %s entfernt werden?";
#elif L==3
- "Do you really want to be removed from the project %s";
+ "Do you really want to be removed"
+ " as a %s from the project %s";
#elif L==4
- "¿Realmente desea ser eliminado del proyecto %s?";
+ "¿Realmente desea ser eliminado"
+ " como %s del proyecto %s?";
#elif L==5
- "Voulez-vous vraiment être retiré du projet %s?";
+ "Voulez-vous vraiment être retiré"
+ " en tant que %sdu projet %s?";
#elif L==6
- "¿Realmente desea ser eliminado del proyecto %s?"; // Okoteve traducción
+ "¿Realmente desea ser eliminado"
+ " como %s del proyecto %s?"; // Okoteve traducción
#elif L==7
- "Vuoi realmente rimuovere dal progetto %s?";
+ "Vuoi realmente rimuovere"
+ " come %s dal progetto %s?";
#elif L==8
- "Czy naprawdę chcesz zostać usunięty z projektu %s?";
+ "Czy naprawdę chcesz zostać usunięty"
+ " jako %s z projektu %s?";
#elif L==9
- "Você realmente quer ser removido do projeto %s?";
+ "Você realmente quer ser removido"
+ " como %s do projeto %s?";
#endif
const char *Txt_Do_you_really_want_to_completely_eliminate_the_following_user =
@@ -9632,25 +9641,34 @@ const char *Txt_Do_you_really_want_to_remove_the_following_user_from_the_course_
" (removendo seus trabalhos, inscrição em grupos, etc.)?";
#endif
-const char *Txt_Do_you_really_want_to_remove_the_following_user_from_the_project_X = // Warning: it is very important to include %s in the following sentences
+const char *Txt_Do_you_really_want_to_remove_the_following_user_as_a_X_from_the_project_Y = // Warning: it is very important to include two %s in the following sentences
#if L==1
- "¿De veres voleu eliminar el següent usuari del projecte %s?";
+ "¿De veres voleu eliminar el següent usuari"
+ " com a %s del projecte %s?";
#elif L==2
- "Möchten Sie den folgenden Benutzer wirklich aus dem Projekt %s entfernen?";
+ "Möchten Sie den folgenden Benutzer wirklich"
+ " als %s aus dem Projekt %s entfernen?";
#elif L==3
- "Do you really want to remove the following user from the project %s";
+ "Do you really want to remove the following user"
+ " as a %s from the project %s";
#elif L==4
- "¿Realmente desea eliminar el siguiente usuario del proyecto %s?";
+ "¿Realmente desea eliminar el siguiente usuario"
+ " como %s del proyecto %s?";
#elif L==5
- "Voulez-vous vraiment supprimer l'utilisateur suivant du projet %s?";
+ "Voulez-vous vraiment supprimer l'utilisateur suivant"
+ " en tant que %s du projet %s?";
#elif L==6
- "¿Realmente desea eliminar el siguiente usuario del proyecto %s?"; // Okoteve traducción
+ "¿Realmente desea eliminar el siguiente usuario"
+ " como %s del proyecto %s?"; // Okoteve traducción
#elif L==7
- "Vuoi realmente rimuovere il seguente utente dal progetto %s?";
+ "Vuoi realmente rimuovere il seguente utente"
+ " como %s dal progetto %s?";
#elif L==8
- "Czy na pewno chcesz usunąć następujący użytkownik z projekt %s?";
+ "Czy na pewno chcesz usunąć następujący użytkownik"
+ " jako %s z projektu %s?";
#elif L==9
- "Você deseja realmente remover o seguinte usuário do projeto %s?";
+ "Você deseja realmente remover o seguinte usuário"
+ " como %s do projeto %s?";
#endif
const char *Txt_Do_you_really_want_to_remove_the_game_X = // Warning: it is very important to include %s in the following sentences
@@ -11527,27 +11545,6 @@ const char *Txt_Error_receiving_or_processing_image =
"Erro no recebimento ou processamento de imagem.";
#endif
-const char *Txt_Evaluators =
-#if L==1
- "Avaluadors";
-#elif L==2
- "Auswerter";
-#elif L==3
- "Evaluators";
-#elif L==4
- "Evaluadores";
-#elif L==5
- "Évaluateurs";
-#elif L==6
- "Evaluadores"; // Okoteve traducción
-#elif L==7
- "Valutatori";
-#elif L==8
- "Oceniający";
-#elif L==9
- "Avaliadores";
-#endif
-
const char *Txt_Event =
#if L==1
"Esdeveniment";
@@ -30870,6 +30867,172 @@ const char *Txt_Project_X_removed = // Warning: it is very important to include
"Projeto %s removido.";
#endif
+const char *Txt_PROJECT_ROLES_SINGUL_abc[Prj_NUM_ROLES_IN_PROJECT] =
+ {
+#if L==1 // Prj_ROLE_UNK
+ "desconegut/da"
+#elif L==2
+ "Unbekannter/e"
+#elif L==3
+ "unknown"
+#elif L==4
+ "desconocido/a"
+#elif L==5
+ "inconnu/e"
+#elif L==6
+ "desconocido/a" // Okoteve traducción
+#elif L==7
+ "sconosciuto/a"
+#elif L==8
+ "nieznany"
+#elif L==9
+ "desconhecido/a"
+#endif
+ ,
+#if L==1 // Prj_ROLE_STD
+ "estudiant"
+#elif L==2
+ "Student"
+#elif L==3
+ "student"
+#elif L==4
+ "estudiante"
+#elif L==5
+ "étudiant/e"
+#elif L==6
+ "temimbo'e"
+#elif L==7
+ "studente"
+#elif L==8
+ "student"
+#elif L==9
+ "estudante"
+#endif
+ ,
+#if L==1 // Prj_ROLE_TUT
+ "tutor"
+#elif L==2
+ "Tutor"
+#elif L==3
+ "tutor"
+#elif L==4
+ "tutor"
+#elif L==5
+ "tuteur"
+#elif L==6
+ "tutor" // Okoteve traducción
+#elif L==7
+ "precettore"
+#elif L==8
+ "nauczyciel"
+#elif L==9
+ "tutor"
+#endif
+ ,
+#if L==1 // Prj_ROLE_EVA
+ "avaluador"
+#elif L==2
+ "Auswerter"
+#elif L==3
+ "evaluator"
+#elif L==4
+ "evaluador"
+#elif L==5
+ "évaluateur"
+#elif L==6
+ "evaluador" // Okoteve traducción
+#elif L==7
+ "valutatore"
+#elif L==8
+ "ewaluator"
+#elif L==9
+ "avaliador"
+#endif
+ };
+
+const char *Txt_PROJECT_ROLES_PLURAL_Abc[Prj_NUM_ROLES_IN_PROJECT] =
+ {
+#if L==1 // Prj_ROLE_UNK
+ "Desconeguts"
+#elif L==2
+ "Unbekannte"
+#elif L==3
+ "Unknown"
+#elif L==4
+ "Desconocidos"
+#elif L==5
+ "Inconnus"
+#elif L==6
+ "Desconocidos" // Okoteve traducción
+#elif L==7
+ "Sconosciuti"
+#elif L==8
+ "Nieznany"
+#elif L==9
+ "Desconhecidos"
+#endif
+ ,
+#if L==1 // Prj_ROLE_STD
+ "Estudiants"
+#elif L==2
+ "Studenten"
+#elif L==3
+ "Students"
+#elif L==4
+ "Estudiantes"
+#elif L==5
+ "Étudiants"
+#elif L==6
+ "Temimbo'e"
+#elif L==7
+ "Studenti"
+#elif L==8
+ "Studenci"
+#elif L==9
+ "Estudantes"
+#endif
+ ,
+#if L==1 // Prj_ROLE_TUT
+ "Tutors"
+#elif L==2
+ "Tutoren"
+#elif L==3
+ "Tutors"
+#elif L==4
+ "Tutores"
+#elif L==5
+ "Tuteurs"
+#elif L==6
+ "Tutores" // Okoteve traducción
+#elif L==7
+ "Precettori"
+#elif L==8
+ "Nauczyciele"
+#elif L==9
+ "Tutores"
+#endif
+ ,
+#if L==1 // Prj_ROLE_EVA
+ "Avaluadors"
+#elif L==2
+ "Auswerter"
+#elif L==3
+ "Evaluators"
+#elif L==4
+ "Evaluadores"
+#elif L==5
+ "Évaluateurs"
+#elif L==6
+ "Evaluadores" // Okoteve traducción
+#elif L==7
+ "Valutatori"
+#elif L==8
+ "Ewaluatorów"
+#elif L==9
+ "Avaliadores"
+#endif
+ };
+
const char *Txt_Projects =
#if L==1
"Projectes (treballs fi de grau, projectes final de carrera, tesi…)";
@@ -47566,25 +47729,34 @@ const char *Txt_THE_USER_X_already_exists_in_Y_but_is_not_yet_enroled_in_the_cou
" in the course %s."; // Necessita de tradução
#endif
-const char *Txt_THE_USER_X_has_been_enroled_in_the_project = // Warning: it is very important to include %s in the following sentences
+const char *Txt_THE_USER_X_has_been_enroled_as_a_Y_in_the_project = // Warning: it is very important to include two %s in the following sentences
#if L==1
- "%s ha estat afegit/da al projecte.";
+ "%s ha estat afegit/da"
+ " com a %s al projecte.";
#elif L==2
- "%s hat sich im Projekt eingeschrieben.";
+ "%s hat sich"
+ " als %s im Projekt eingeschrieben.";
#elif L==3
- "%s has been enroled in the project.";
+ "%s has been enroled"
+ " as a %s in the project.";
#elif L==4
- "%s ha sido añadido/a al proyecto.";
+ "%s ha sido añadido/a"
+ " como %s al proyecto.";
#elif L==5
- "%s a été inscrit dans le projet.";
+ "%s a été inscrit"
+ " en tant que %s dans le projet.";
#elif L==6
- "%s ha sido añadido/a al proyecto."; // Okoteve traducción
+ "%s ha sido añadido/a"
+ " como %s al proyecto."; // Okoteve traducción
#elif L==7
- "%s è stato registrato/a nel progetto.";
+ "%s è stato registrato/a"
+ " como %s nel progetto.";
#elif L==8
- "%s został zapisany do projektu.";
+ "%s został zapisany"
+ " jako %s do projektu.";
#elif L==9
- "%s foi matriculado/a no projeto.";
+ "%s foi matriculado/a"
+ " como %s no projeto.";
#endif
const char *Txt_THE_USER_X_has_been_enroled_as_administrator_of_Y = // Warning: it is very important to include two %s in the following sentences
@@ -47698,6 +47870,36 @@ const char *Txt_THE_USER_X_has_been_removed_as_administrator = // Warning: it is
"%s has been removed as administrator."; // Necessita de tradução
#endif
+const char *Txt_THE_USER_X_has_been_removed_as_administrator_of_Y = // Warning: it is very important to include two %s in the following sentences
+#if L==1
+ "%s ha sido eliminado/a como administrador/a"
+ " de %s."; // Necessita traduccio
+#elif L==2
+ "%s has been removed as administrator"
+ " of %s."; // Übersetzung notwendig
+#elif L==3
+ "%s has been removed as administrator"
+ " of %s.";
+#elif L==4
+ "%s ha sido eliminado/a como administrador/a"
+ " de %s.";
+#elif L==5
+ "%s has been removed as administrator"
+ " of %s."; // Besoin de traduction
+#elif L==6
+ "%s ha sido eliminado/a como administrador/a"
+ " de %s."; // Okoteve traducción
+#elif L==7
+ "%s è stato rimosso come amministratore"
+ " de %s.";
+#elif L==8
+ "%s has been removed as administrator"
+ " of %s."; // Potrzebujesz tlumaczenie
+#elif L==9
+ "%s has been removed as administrator"
+ " of %s."; // Necessita de tradução
+#endif
+
const char *Txt_THE_USER_X_has_been_removed_from_all_his_her_courses = // Warning: it is very important to include %s in the following sentences
#if L==1
"%s ha sido eliminado/a de todas sus asignaturas."; // Necessita traduccio
@@ -47719,6 +47921,36 @@ const char *Txt_THE_USER_X_has_been_removed_from_all_his_her_courses = // Warnin
"%s has been removed from all her/his courses."; // Necessita de tradução
#endif
+const char *Txt_THE_USER_X_has_not_been_removed_from_any_group = // Warning: it is very important to include %s in the following sentences
+#if L==1
+ "%s no ha sido eliminado/a"
+ " de ningún grupo."; // Necessita traduccio
+#elif L==2
+ "%s has not been removed"
+ " from any group."; // Übersetzung notwendig
+#elif L==3
+ "%s has not been removed"
+ " from any group.";
+#elif L==4
+ "%s no ha sido eliminado/a"
+ " de ningún grupo.";
+#elif L==5
+ "%s has not been removed"
+ " from any group."; // Besoin de traduction
+#elif L==6
+ "%s no ha sido eliminado/a"
+ " de ningún grupo."; // Okoteve traducción
+#elif L==7
+ "%s non è stato rimosso"
+ " da alcun gruppo.";
+#elif L==8
+ "%s has not been removed"
+ " from any group."; // Potrzebujesz tlumaczenie
+#elif L==9
+ "%s has not been removed"
+ " from any group."; // Necessita de tradução
+#endif
+
const char *Txt_THE_USER_X_has_been_removed_from_Y_groups = // Warning: it is very important to include %s and %u in the following sentences
#if L==1
"%s ha sido eliminado/a de %u grupos."; // Necessita traduccio
@@ -47763,11 +47995,11 @@ const char *Txt_THE_USER_X_has_been_removed_from_one_group = // Warning: it is v
const char *Txt_THE_USER_X_has_been_removed_from_the_course_Y = // Warning: it is very important to include two %s in the following sentences
#if L==1
- "%s ha sido eliminado/a"
- " de la asignatura %s."; // Necessita traduccio
+ "%s ha estat eliminat"
+ " de l'assignatura %s.";
#elif L==2
- "%s has been removed"
- " from the course %s."; // Übersetzung notwendig
+ "%s wurde aus"
+ " dem Kurs %s entfernt.";
#elif L==3
"%s has been removed"
" from the course %s.";
@@ -47775,8 +48007,8 @@ const char *Txt_THE_USER_X_has_been_removed_from_the_course_Y = // Warning: it i
"%s ha sido eliminado/a"
" de la asignatura %s.";
#elif L==5
- "%s has been removed"
- " from the course %s."; // Besoin de traduction
+ "%s a été retiré"
+ " de la matière %s.";
#elif L==6
"%s ha sido eliminado/a"
" de la asignatura %s."; // Okoteve traducción
@@ -47784,41 +48016,11 @@ const char *Txt_THE_USER_X_has_been_removed_from_the_course_Y = // Warning: it i
"%s è stato rimosso"
" dal corso %s.";
#elif L==8
- "%s has been removed"
- " from the course %s."; // Potrzebujesz tlumaczenie
+ "%s został usunięty"
+ " z trasy %s.";
#elif L==9
- "%s has been removed"
- " from the course %s."; // Necessita de tradução
-#endif
-
-const char *Txt_THE_USER_X_has_been_removed_as_administrator_of_Y = // Warning: it is very important to include two %s in the following sentences
-#if L==1
- "%s ha sido eliminado/a como administrador/a"
- " de %s."; // Necessita traduccio
-#elif L==2
- "%s has been removed as administrator"
- " of %s."; // Übersetzung notwendig
-#elif L==3
- "%s has been removed as administrator"
- " of %s.";
-#elif L==4
- "%s ha sido eliminado/a como administrador/a"
- " de %s.";
-#elif L==5
- "%s has been removed as administrator"
- " of %s."; // Besoin de traduction
-#elif L==6
- "%s ha sido eliminado/a como administrador/a"
- " de %s."; // Okoteve traducción
-#elif L==7
- "%s è stato rimosso come amministratore"
- " de %s.";
-#elif L==8
- "%s has been removed as administrator"
- " of %s."; // Potrzebujesz tlumaczenie
-#elif L==9
- "%s has been removed as administrator"
- " of %s."; // Necessita de tradução
+ "%s foi removido"
+ " da disciplina %s.";
#endif
const char *Txt_THE_USER_X_has_been_removed_from_the_group_of_type_Y_to_which_it_belonged = // Warning: it is very important to include two %s in the following sentences
@@ -47851,34 +48053,34 @@ const char *Txt_THE_USER_X_has_been_removed_from_the_group_of_type_Y_to_which_it
" from the group of type %s to which it belonged."; // Necessita de tradução
#endif
-const char *Txt_THE_USER_X_has_not_been_removed_from_any_group = // Warning: it is very important to include %s in the following sentences
+const char *Txt_THE_USER_X_has_been_removed_as_a_Y_from_the_project_Z = // Warning: it is very important to include three %s in the following sentences
#if L==1
- "%s no ha sido eliminado/a"
- " de ningún grupo."; // Necessita traduccio
+ "%s ha estat eliminat"
+ " como a %s del projecte %s.";
#elif L==2
- "%s has not been removed"
- " from any group."; // Übersetzung notwendig
+ "%s wurde"
+ " als %s aus dem Projekt %s entfernt.";
#elif L==3
- "%s has not been removed"
- " from any group.";
+ "%s has been removed"
+ " as a %s from the project %s.";
#elif L==4
- "%s no ha sido eliminado/a"
- " de ningún grupo.";
+ "%s ha sido eliminado/a"
+ " como %s del proyecto %s.";
#elif L==5
- "%s has not been removed"
- " from any group."; // Besoin de traduction
+ "%s a été retiré"
+ " en tant que %s du projet %s.";
#elif L==6
- "%s no ha sido eliminado/a"
- " de ningún grupo."; // Okoteve traducción
+ "%s ha sido eliminado/a"
+ " como %s del proyecto %s."; // Okoteve traducción
#elif L==7
- "%s non è stato rimosso"
- " da alcun gruppo.";
+ "%s è stato rimosso"
+ " come %s dal progetto %s.";
#elif L==8
- "%s has not been removed"
- " from any group."; // Potrzebujesz tlumaczenie
+ "%s został wyeliminowany"
+ " jako %s z projektu %s.";
#elif L==9
- "%s has not been removed"
- " from any group."; // Necessita de tradução
+ "%s foi removido"
+ " como %s do projeto %s.";
#endif
const char *Txt_THE_USER_X_is_already_an_administrator_of_Y = // Warning: it is very important to include two %s in the following sentences
@@ -50323,27 +50525,6 @@ const char *Txt_TF_QST[2] =
#endif
};
-const char *Txt_Tutors =
-#if L==1
- "Tutors";
-#elif L==2
- "Tutoren";
-#elif L==3
- "Tutors";
-#elif L==4
- "Tutores";
-#elif L==5
- "Tuteurs";
-#elif L==6
- "Tutores"; // Okoteve traducción
-#elif L==7
- "Tutori";
-#elif L==8
- "Opiekunowie";
-#elif L==9
- "Tutores";
-#endif
-
const char *Txt_Type =
#if L==1
"Tipus";