Version 17.7

This commit is contained in:
Antonio Cañas Vargas 2017-09-23 15:24:22 +02:00
parent 391ce45801
commit efe2ec546b
4 changed files with 464 additions and 213 deletions

View File

@ -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';

View File

@ -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,"<tr>"
"<td colspan=\"3\" class=\"LEFT_MIDDLE\">");
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,"</td>"
"</tr>");
@ -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 ();
}

View File

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

View File

@ -2908,25 +2908,25 @@ const char *Txt_Add_this_ID =
"Adicionar este n&ordm; 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&uuml;gen Benutzer";
"F&uuml;gen %s";
#elif L==3
"Add user";
"Add %s";
#elif L==4
"A&ntilde;adir usuario";
"A&ntilde;adir %s";
#elif L==5
"Ajouter utilisateur";
"Ajouter %s";
#elif L==6
"A&ntilde;adir usuario"; // Okoteve traducción
"A&ntilde;adir %s"; // Okoteve traducción
#elif L==7
"Aggiungere utente";
"Aggiungere %s";
#elif L==8
"Dodaj u&zdot;ytkownika";
"Dodaj %s";
#elif L==9
"Adicionar usu&aacute;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
"&iquest;De veres voleu ser eliminat del projecte <strong>%s</strong>?";
"&iquest;De veres voleu ser eliminat"
" como a %s del projecte <strong>%s</strong>?";
#elif L==2
"M&ouml;chten Sie wirklich aus dem Projekt <strong>%s</strong> entfernt werden?";
"M&ouml;chten Sie wirklich"
" als %s aus dem Projekt <strong>%s</strong> entfernt werden?";
#elif L==3
"Do you really want to be removed from the project <strong>%s</strong>";
"Do you really want to be removed"
" as a %s from the project <strong>%s</strong>";
#elif L==4
"&iquest;Realmente desea ser eliminado del proyecto <strong>%s</strong>?";
"&iquest;Realmente desea ser eliminado"
" como %s del proyecto <strong>%s</strong>?";
#elif L==5
"Voulez-vous vraiment &ecirc;tre retir&eacute; du projet <strong>%s</strong>?";
"Voulez-vous vraiment &ecirc;tre retir&eacute;"
" en tant que %sdu projet <strong>%s</strong>?";
#elif L==6
"&iquest;Realmente desea ser eliminado del proyecto <strong>%s</strong>?"; // Okoteve traducción
"&iquest;Realmente desea ser eliminado"
" como %s del proyecto <strong>%s</strong>?"; // Okoteve traducción
#elif L==7
"Vuoi realmente rimuovere dal progetto <strong>%s</strong>?";
"Vuoi realmente rimuovere"
" come %s dal progetto <strong>%s</strong>?";
#elif L==8
"Czy naprawd&eogon; chcesz zosta&cacute; usuni&eogon;ty z projektu <strong>%s</strong>?";
"Czy naprawd&eogon; chcesz zosta&cacute; usuni&eogon;ty"
" jako %s z projektu <strong>%s</strong>?";
#elif L==9
"Voc&ecirc; realmente quer ser removido do projeto <strong>%s</strong>?";
"Voc&ecirc; realmente quer ser removido"
" como %s do projeto <strong>%s</strong>?";
#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&ccedil;&atilde;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
"&iquest;De veres voleu eliminar el seg&uuml;ent usuari del projecte <strong>%s</strong>?";
"&iquest;De veres voleu eliminar el seg&uuml;ent usuari"
" com a %s del projecte <strong>%s</strong>?";
#elif L==2
"M&ouml;chten Sie den folgenden Benutzer wirklich aus dem Projekt <strong>%s</strong> entfernen?";
"M&ouml;chten Sie den folgenden Benutzer wirklich"
" als %s aus dem Projekt <strong>%s</strong> entfernen?";
#elif L==3
"Do you really want to remove the following user from the project <strong>%s</strong>";
"Do you really want to remove the following user"
" as a %s from the project <strong>%s</strong>";
#elif L==4
"&iquest;Realmente desea eliminar el siguiente usuario del proyecto <strong>%s</strong>?";
"&iquest;Realmente desea eliminar el siguiente usuario"
" como %s del proyecto <strong>%s</strong>?";
#elif L==5
"Voulez-vous vraiment supprimer l'utilisateur suivant du projet <strong>%s</strong>?";
"Voulez-vous vraiment supprimer l'utilisateur suivant"
" en tant que %s du projet <strong>%s</strong>?";
#elif L==6
"&iquest;Realmente desea eliminar el siguiente usuario del proyecto <strong>%s</strong>?"; // Okoteve traducción
"&iquest;Realmente desea eliminar el siguiente usuario"
" como %s del proyecto <strong>%s</strong>?"; // Okoteve traducción
#elif L==7
"Vuoi realmente rimuovere il seguente utente dal progetto <strong>%s</strong>?";
"Vuoi realmente rimuovere il seguente utente"
" como %s dal progetto <strong>%s</strong>?";
#elif L==8
"Czy na pewno chcesz usun&aogon;&cacute; nast&eogon;puj&aogon;cy u&zdot;ytkownik z projekt <strong>%s</strong>?";
"Czy na pewno chcesz usun&aogon;&cacute; nast&eogon;puj&aogon;cy u&zdot;ytkownik"
" jako %s z projektu <strong>%s</strong>?";
#elif L==9
"Voc&ecirc; deseja realmente remover o seguinte usu&aacute;rio do projeto <strong>%s</strong>?";
"Voc&ecirc; deseja realmente remover o seguinte usu&aacute;rio"
" como %s do projeto <strong>%s</strong>?";
#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
"&Eacute;valuateurs";
#elif L==6
"Evaluadores"; // Okoteve traducción
#elif L==7
"Valutatori";
#elif L==8
"Oceniaj&aogon;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 <strong>%s</strong> 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
"&eacute;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
"&eacute;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
"&Eacute;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
"&Eacute;valuateurs"
#elif L==6
"Evaluadores" // Okoteve traducción
#elif L==7
"Valutatori"
#elif L==8
"Ewaluator&oacute;w"
#elif L==9
"Avaliadores"
#endif
};
const char *Txt_Projects =
#if L==1
"Projectes (treballs fi de grau, projectes final de carrera, tesi&hellip;)";
@ -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 <strong>%s</strong>."; // 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
"<strong>%s</strong> ha estat afegit/da al projecte.";
"<strong>%s</strong> ha estat afegit/da"
" com a %s al projecte.";
#elif L==2
"<strong>%s</strong> hat sich im Projekt eingeschrieben.";
"<strong>%s</strong> hat sich"
" als %s im Projekt eingeschrieben.";
#elif L==3
"<strong>%s</strong> has been enroled in the project.";
"<strong>%s</strong> has been enroled"
" as a %s in the project.";
#elif L==4
"<strong>%s</strong> ha sido a&ntilde;adido/a al proyecto.";
"<strong>%s</strong> ha sido a&ntilde;adido/a"
" como %s al proyecto.";
#elif L==5
"<strong>%s</strong> a &eacute;t&eacute; inscrit dans le projet.";
"<strong>%s</strong> a &eacute;t&eacute; inscrit"
" en tant que %s dans le projet.";
#elif L==6
"<strong>%s</strong> ha sido a&ntilde;adido/a al proyecto."; // Okoteve traducción
"<strong>%s</strong> ha sido a&ntilde;adido/a"
" como %s al proyecto."; // Okoteve traducción
#elif L==7
"<strong>%s</strong> &egrave; stato registrato/a nel progetto.";
"<strong>%s</strong> &egrave; stato registrato/a"
" como %s nel progetto.";
#elif L==8
"<strong>%s</strong> zosta&lstrok; zapisany do projektu.";
"<strong>%s</strong> zosta&lstrok; zapisany"
" jako %s do projektu.";
#elif L==9
"<strong>%s</strong> foi matriculado/a no projeto.";
"<strong>%s</strong> 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
"<strong>%s</strong> 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
"<strong>%s</strong> ha sido eliminado/a como administrador/a"
" de <strong>%s</strong>."; // Necessita traduccio
#elif L==2
"<strong>%s</strong> has been removed as administrator"
" of <strong>%s</strong>."; // Übersetzung notwendig
#elif L==3
"<strong>%s</strong> has been removed as administrator"
" of <strong>%s</strong>.";
#elif L==4
"<strong>%s</strong> ha sido eliminado/a como administrador/a"
" de <strong>%s</strong>.";
#elif L==5
"<strong>%s</strong> has been removed as administrator"
" of <strong>%s</strong>."; // Besoin de traduction
#elif L==6
"<strong>%s</strong> ha sido eliminado/a como administrador/a"
" de <strong>%s</strong>."; // Okoteve traducción
#elif L==7
"<strong>%s</strong> &egrave; stato rimosso come amministratore"
" de <strong>%s</strong>.";
#elif L==8
"<strong>%s</strong> has been removed as administrator"
" of <strong>%s</strong>."; // Potrzebujesz tlumaczenie
#elif L==9
"<strong>%s</strong> has been removed as administrator"
" of <strong>%s</strong>."; // 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
"<strong>%s</strong> 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
"<strong>%s</strong> 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
"<strong>%s</strong> no ha sido eliminado/a"
" de ning&uacute;n grupo."; // Necessita traduccio
#elif L==2
"<strong>%s</strong> has not been removed"
" from any group."; // Übersetzung notwendig
#elif L==3
"<strong>%s</strong> has not been removed"
" from any group.";
#elif L==4
"<strong>%s</strong> no ha sido eliminado/a"
" de ning&uacute;n grupo.";
#elif L==5
"<strong>%s</strong> has not been removed"
" from any group."; // Besoin de traduction
#elif L==6
"<strong>%s</strong> no ha sido eliminado/a"
" de ning&uacute;n grupo."; // Okoteve traducción
#elif L==7
"<strong>%s</strong> non &egrave; stato rimosso"
" da alcun gruppo.";
#elif L==8
"<strong>%s</strong> has not been removed"
" from any group."; // Potrzebujesz tlumaczenie
#elif L==9
"<strong>%s</strong> 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
"<strong>%s</strong> 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
"<strong>%s</strong> ha sido eliminado/a"
" de la asignatura <strong>%s</strong>."; // Necessita traduccio
"<strong>%s</strong> ha estat eliminat"
" de l'assignatura <strong>%s</strong>.";
#elif L==2
"<strong>%s</strong> has been removed"
" from the course <strong>%s</strong>."; // Übersetzung notwendig
"<strong>%s</strong> wurde aus"
" dem Kurs <strong>%s</strong> entfernt.";
#elif L==3
"<strong>%s</strong> has been removed"
" from the course <strong>%s</strong>.";
@ -47775,8 +48007,8 @@ const char *Txt_THE_USER_X_has_been_removed_from_the_course_Y = // Warning: it i
"<strong>%s</strong> ha sido eliminado/a"
" de la asignatura <strong>%s</strong>.";
#elif L==5
"<strong>%s</strong> has been removed"
" from the course <strong>%s</strong>."; // Besoin de traduction
"<strong>%s</strong> a &eacute;t&eacute; retir&eacute;"
" de la mati&egrave;re <strong>%s</strong>.";
#elif L==6
"<strong>%s</strong> ha sido eliminado/a"
" de la asignatura <strong>%s</strong>."; // Okoteve traducción
@ -47784,41 +48016,11 @@ const char *Txt_THE_USER_X_has_been_removed_from_the_course_Y = // Warning: it i
"<strong>%s</strong> &egrave; stato rimosso"
" dal corso <strong>%s</strong>.";
#elif L==8
"<strong>%s</strong> has been removed"
" from the course <strong>%s</strong>."; // Potrzebujesz tlumaczenie
"<strong>%s</strong> zosta&lstrok; usuni&eogon;ty"
" z trasy <strong>%s</strong>.";
#elif L==9
"<strong>%s</strong> has been removed"
" from the course <strong>%s</strong>."; // 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
"<strong>%s</strong> ha sido eliminado/a como administrador/a"
" de <strong>%s</strong>."; // Necessita traduccio
#elif L==2
"<strong>%s</strong> has been removed as administrator"
" of <strong>%s</strong>."; // Übersetzung notwendig
#elif L==3
"<strong>%s</strong> has been removed as administrator"
" of <strong>%s</strong>.";
#elif L==4
"<strong>%s</strong> ha sido eliminado/a como administrador/a"
" de <strong>%s</strong>.";
#elif L==5
"<strong>%s</strong> has been removed as administrator"
" of <strong>%s</strong>."; // Besoin de traduction
#elif L==6
"<strong>%s</strong> ha sido eliminado/a como administrador/a"
" de <strong>%s</strong>."; // Okoteve traducción
#elif L==7
"<strong>%s</strong> &egrave; stato rimosso come amministratore"
" de <strong>%s</strong>.";
#elif L==8
"<strong>%s</strong> has been removed as administrator"
" of <strong>%s</strong>."; // Potrzebujesz tlumaczenie
#elif L==9
"<strong>%s</strong> has been removed as administrator"
" of <strong>%s</strong>."; // Necessita de tradução
"<strong>%s</strong> foi removido"
" da disciplina <strong>%s</strong>.";
#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
"<strong>%s</strong> no ha sido eliminado/a"
" de ning&uacute;n grupo."; // Necessita traduccio
"<strong>%s</strong> ha estat eliminat"
" como a %s del projecte <strong>%s</strong>.";
#elif L==2
"<strong>%s</strong> has not been removed"
" from any group."; // Übersetzung notwendig
"<strong>%s</strong> wurde"
" als %s aus dem Projekt <strong>%s</strong> entfernt.";
#elif L==3
"<strong>%s</strong> has not been removed"
" from any group.";
"<strong>%s</strong> has been removed"
" as a %s from the project <strong>%s</strong>.";
#elif L==4
"<strong>%s</strong> no ha sido eliminado/a"
" de ning&uacute;n grupo.";
"<strong>%s</strong> ha sido eliminado/a"
" como %s del proyecto <strong>%s</strong>.";
#elif L==5
"<strong>%s</strong> has not been removed"
" from any group."; // Besoin de traduction
"<strong>%s</strong> a &eacute;t&eacute; retir&eacute;"
" en tant que %s du projet <strong>%s</strong>.";
#elif L==6
"<strong>%s</strong> no ha sido eliminado/a"
" de ning&uacute;n grupo."; // Okoteve traducción
"<strong>%s</strong> ha sido eliminado/a"
" como %s del proyecto <strong>%s</strong>."; // Okoteve traducción
#elif L==7
"<strong>%s</strong> non &egrave; stato rimosso"
" da alcun gruppo.";
"<strong>%s</strong> &egrave; stato rimosso"
" come %s dal progetto <strong>%s</strong>.";
#elif L==8
"<strong>%s</strong> has not been removed"
" from any group."; // Potrzebujesz tlumaczenie
"<strong>%s</strong> zosta&lstrok; wyeliminowany"
" jako %s z projektu <strong>%s</strong>.";
#elif L==9
"<strong>%s</strong> has not been removed"
" from any group."; // Necessita de tradução
"<strong>%s</strong> foi removido"
" como %s do projeto <strong>%s</strong>.";
#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";