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";