diff --git a/swad_action.c b/swad_action.c
index 4620316c2..8c858b07a 100644
--- a/swad_action.c
+++ b/swad_action.c
@@ -861,6 +861,10 @@ Users:
710. ActReqAccEnrCrs Confirm acceptation / refusion of enrollment in current course
711. ActAccEnrCrs Accept enrollment in current course
712. ActRemMeCrs Refuse enrollment in current course
+ ---. ActNewAdmIns Register an administrador in this institution
+ ---. ActRemAdmIns Remove an administrador of this institution
+ ---. ActNewAdmCtr Register an administrador in this centre
+ ---. ActRemAdmCtr Remove an administrador of this centre
713. ActNewAdmDeg Register an administrador in this degree
714. ActRemAdmDeg Remove an administrador of this degree
715. ActRcvFrmMdfUsrCrs Receive a form with IDs of users to be registeres/removed to/from current course
@@ -2156,6 +2160,12 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
/* ActAccEnrCrs */{ 558,-1,TabUsr,ActReqMdfSevUsr ,0x1F8,0x000,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Enr_AcceptRegisterMeInCrs ,NULL},
/* ActRemMeCrs */{ 559,-1,TabUsr,ActReqMdfSevUsr ,0x1F8,0x000,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Enr_ReqRemMeFromCrs ,NULL},
+ /* ActNewAdmIns */{1337,-1,TabUsr,ActReqMdfSevUsr ,0x100,0x100,0x100,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Enr_AddAdmToIns ,NULL},
+ /* ActRemAdmIns */{1338,-1,TabUsr,ActReqMdfSevUsr ,0x180,0x180,0x180,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Enr_RemAdmIns ,NULL},
+
+ /* ActNewAdmCtr */{1339,-1,TabUsr,ActReqMdfSevUsr ,0x100,0x100,0x100,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Enr_AddAdmToCtr ,NULL},
+ /* ActRemAdmCtr */{1340,-1,TabUsr,ActReqMdfSevUsr ,0x1C0,0x1C0,0x1C0,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Enr_RemAdmCtr ,NULL},
+
/* ActNewAdmDeg */{ 586,-1,TabUsr,ActReqMdfSevUsr ,0x100,0x100,0x100,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Enr_AddAdmToDeg ,NULL},
/* ActRemAdmDeg */{ 584,-1,TabUsr,ActReqMdfSevUsr ,0x1E0,0x1E0,0x1E0,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Enr_RemAdmDeg ,NULL},
@@ -3838,6 +3848,10 @@ Act_Action_t Act_FromActCodToAction[1+Act_MAX_ACTION_COD] = // Do not reuse uniq
ActReqDatAdmDocIns, // #1334
ActChgDatAdmDocIns, // #1335
ActDowAdmDocIns, // #1336
+ ActNewAdmIns, // #1337
+ ActRemAdmIns, // #1338
+ ActNewAdmCtr, // #1339
+ ActRemAdmCtr, // #1340
};
/*****************************************************************************/
diff --git a/swad_action.h b/swad_action.h
index 3aef6bf9c..004d8312a 100644
--- a/swad_action.h
+++ b/swad_action.h
@@ -69,9 +69,9 @@ typedef enum
typedef int Act_Action_t; // Must be a signed type, because -1 is used to indicate obsolete action
-#define Act_NUM_ACTIONS (7+52+15+70+53+48+204+184+94+168+28+75)
+#define Act_NUM_ACTIONS (7+52+15+70+53+48+204+184+98+168+28+75)
-#define Act_MAX_ACTION_COD 1336
+#define Act_MAX_ACTION_COD 1340
#define Act_MAX_OPTIONS_IN_MENU_PER_TAB 20
@@ -893,23 +893,27 @@ typedef int Act_Action_t; // Must be a signed type, because -1 is used to indica
#define ActAccEnrCrs (ActChgNumRowFooGrp+79)
#define ActRemMeCrs (ActChgNumRowFooGrp+80)
-#define ActNewAdmDeg (ActChgNumRowFooGrp+81)
-#define ActRemAdmDeg (ActChgNumRowFooGrp+82)
+#define ActNewAdmIns (ActChgNumRowFooGrp+81)
+#define ActRemAdmIns (ActChgNumRowFooGrp+82)
+#define ActNewAdmCtr (ActChgNumRowFooGrp+83)
+#define ActRemAdmCtr (ActChgNumRowFooGrp+84)
+#define ActNewAdmDeg (ActChgNumRowFooGrp+85)
+#define ActRemAdmDeg (ActChgNumRowFooGrp+86)
-#define ActRcvFrmMdfUsrCrs (ActChgNumRowFooGrp+83)
-#define ActFrmIDsOthUsr (ActChgNumRowFooGrp+84)
-#define ActRemIDOth (ActChgNumRowFooGrp+85)
-#define ActNewIDOth (ActChgNumRowFooGrp+86)
-#define ActFrmPwdOthUsr (ActChgNumRowFooGrp+87)
-#define ActChgPwdOthUsr (ActChgNumRowFooGrp+88)
-#define ActRemUsrCrs (ActChgNumRowFooGrp+89)
-#define ActRemUsrGbl (ActChgNumRowFooGrp+90)
+#define ActRcvFrmMdfUsrCrs (ActChgNumRowFooGrp+87)
+#define ActFrmIDsOthUsr (ActChgNumRowFooGrp+88)
+#define ActRemIDOth (ActChgNumRowFooGrp+89)
+#define ActNewIDOth (ActChgNumRowFooGrp+90)
+#define ActFrmPwdOthUsr (ActChgNumRowFooGrp+91)
+#define ActChgPwdOthUsr (ActChgNumRowFooGrp+92)
+#define ActRemUsrCrs (ActChgNumRowFooGrp+93)
+#define ActRemUsrGbl (ActChgNumRowFooGrp+94)
-#define ActReqRemAllStdCrs (ActChgNumRowFooGrp+91)
-#define ActRemAllStdCrs (ActChgNumRowFooGrp+92)
+#define ActReqRemAllStdCrs (ActChgNumRowFooGrp+95)
+#define ActRemAllStdCrs (ActChgNumRowFooGrp+96)
-#define ActReqRemOldUsr (ActChgNumRowFooGrp+93)
-#define ActRemOldUsr (ActChgNumRowFooGrp+94)
+#define ActReqRemOldUsr (ActChgNumRowFooGrp+97)
+#define ActRemOldUsr (ActChgNumRowFooGrp+98)
/*****************************************************************************/
/******************************* Messages tab ********************************/
diff --git a/swad_changelog.h b/swad_changelog.h
index 6906895fc..7f0032d6b 100644
--- a/swad_changelog.h
+++ b/swad_changelog.h
@@ -39,11 +39,20 @@
/****************************** Public constants *****************************/
/*****************************************************************************/
-#define Log_PLATFORM_VERSION "SWAD 14.72 (2015/01/31)"
+#define Log_PLATFORM_VERSION "SWAD 14.72.1 (2015/02/01)"
// 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 | tail -1
/*
+ Version 14.72.1: Feb 01, 2015 New options to register and remove institution and centre admins. (177477 lines)
+ 6 changes necessary in database:
+UPDATE actions SET Txt='Añadir administrador de titulación' WHERE ActCod='586' AND Language='es';
+UPDATE actions SET Txt='Eliminar administrador de titulación' WHERE ActCod='584' AND Language='es';
+INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1337','es','N','Añadir administrador de institución');
+INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1338','es','N','Eliminar administrador de institución');
+INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1339','es','N','Añadir administrador de centro');
+INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1340','es','N','Eliminar administrador de centro');
+
Version 14.72: Jan 31, 2015 New options to register and remove institution and centre admins (not finished). (176934 lines)
Version 14.71: Jan 29, 2015 New table admin to store system, institution, centre or degree admins. (176255 lines)
4 changes necessary in database:
diff --git a/swad_enrollment.c b/swad_enrollment.c
index 599d6a66e..031733e5f 100644
--- a/swad_enrollment.c
+++ b/swad_enrollment.c
@@ -107,6 +107,8 @@ static void Enr_AskIfRegRemUsr (struct ListUsrCods *ListUsrCods);
static void Enr_ShowFormToEditOtherUsr (void);
+static void Enr_RegisterAdminInCurrentIns (struct UsrData *UsrDat);
+static void Enr_RegisterAdminInCurrentCtr (struct UsrData *UsrDat);
static void Enr_RegisterAdminInCurrentDeg (struct UsrData *UsrDat);
static void Enr_ReqRemOrRemUsrFromCrs (Enr_ReqDelOrDelUsr_t ReqDelOrDelUsr);
static void Enr_ReqRemAdmOfDeg (void);
@@ -1018,7 +1020,7 @@ static bool Enr_PutActionsRegRemOneUsr (bool ItsMe)
sprintf (Gbl.Message,
ItsMe ? Txt_Remove_me_as_an_administrator_of_the_institution_X :
Txt_Remove_user_as_an_administrator_of_the_institution_X,
- Gbl.CurrentDeg.Deg.ShortName);
+ Gbl.CurrentIns.Ins.ShortName);
fprintf (Gbl.F.Out,"
"
"");
}
+/*****************************************************************************/
+/*************** Add an administrator to current institution *****************/
+/*****************************************************************************/
+
+void Enr_AddAdmToIns (void)
+ {
+ extern const char *Txt_User_not_found_or_you_do_not_have_permission_;
+
+ if (Gbl.CurrentIns.Ins.InsCod > 0)
+ {
+ /***** Get plain user's ID of the user to add/modify *****/
+ if (Usr_GetParamOtherUsrCodEncryptedAndGetUsrData ())
+ {
+ /* Check if it's allowed to register this administrator in institution */
+ if (Gbl.Usrs.Me.LoggedRole == Rol_ROLE_SUPERUSER)
+ {
+ /***** Register administrator in current institution in database *****/
+ Enr_RegisterAdminInCurrentIns (&Gbl.Usrs.Other.UsrDat);
+
+ /***** Show user's record *****/
+ Rec_ShowCommonRecordUnmodifiable (&Gbl.Usrs.Other.UsrDat);
+ }
+ else
+ Lay_ShowAlert (Lay_WARNING,Txt_User_not_found_or_you_do_not_have_permission_);
+ }
+ else
+ Lay_ShowAlert (Lay_WARNING,Txt_User_not_found_or_you_do_not_have_permission_);
+ }
+ }
+
+/*****************************************************************************/
+/******************* Add an administrator to current centre ******************/
+/*****************************************************************************/
+
+void Enr_AddAdmToCtr (void)
+ {
+ extern const char *Txt_User_not_found_or_you_do_not_have_permission_;
+
+ if (Gbl.CurrentCtr.Ctr.CtrCod > 0)
+ {
+ /***** Get plain user's ID of the user to add/modify *****/
+ if (Usr_GetParamOtherUsrCodEncryptedAndGetUsrData ())
+ {
+ /* Check if it's allowed to register this administrator in centre */
+ if (Gbl.Usrs.Me.LoggedRole == Rol_ROLE_SUPERUSER)
+ {
+ /***** Register administrator in current centre in database *****/
+ Enr_RegisterAdminInCurrentCtr (&Gbl.Usrs.Other.UsrDat);
+
+ /***** Show user's record *****/
+ Rec_ShowCommonRecordUnmodifiable (&Gbl.Usrs.Other.UsrDat);
+ }
+ else
+ Lay_ShowAlert (Lay_WARNING,Txt_User_not_found_or_you_do_not_have_permission_);
+ }
+ else
+ Lay_ShowAlert (Lay_WARNING,Txt_User_not_found_or_you_do_not_have_permission_);
+ }
+ }
+
/*****************************************************************************/
/******************* Add an administrator to current degree ******************/
/*****************************************************************************/
@@ -2873,6 +2935,62 @@ void Enr_AddAdmToDeg (void)
}
}
+/*****************************************************************************/
+/**************** Register administrator in current institution **************/
+/*****************************************************************************/
+
+static void Enr_RegisterAdminInCurrentIns (struct UsrData *UsrDat)
+ {
+ extern const char *Txt_THE_USER_X_is_already_an_administrator_of_the_institution_Y;
+ extern const char *Txt_THE_USER_X_has_been_enrolled_as_administrator_of_the_institution_Y;
+ char Query[512];
+
+ /***** Check if user was and administrator of current institution *****/
+ if (Usr_CheckIfUsrIsAdmOfIns (UsrDat->UsrCod,Gbl.CurrentIns.Ins.InsCod))
+ sprintf (Gbl.Message,Txt_THE_USER_X_is_already_an_administrator_of_the_institution_Y,
+ UsrDat->FullName,Gbl.CurrentIns.Ins.FullName);
+ else // User was not administrator of current institution
+ {
+ /***** Insert or replace administrator in current institution *****/
+ sprintf (Query,"REPLACE INTO admin (UsrCod,Scope,Cod)"
+ " VALUES ('%ld','Ins','%ld')",
+ UsrDat->UsrCod,Gbl.CurrentIns.Ins.InsCod);
+ DB_QueryREPLACE (Query,"can not create administrator of institution");
+
+ sprintf (Gbl.Message,Txt_THE_USER_X_has_been_enrolled_as_administrator_of_the_institution_Y,
+ UsrDat->FullName,Gbl.CurrentIns.Ins.FullName);
+ }
+ Lay_ShowAlert (Lay_SUCCESS,Gbl.Message);
+ }
+
+/*****************************************************************************/
+/******************* Register administrator in current centre ****************/
+/*****************************************************************************/
+
+static void Enr_RegisterAdminInCurrentCtr (struct UsrData *UsrDat)
+ {
+ extern const char *Txt_THE_USER_X_is_already_an_administrator_of_the_centre_Y;
+ extern const char *Txt_THE_USER_X_has_been_enrolled_as_administrator_of_the_centre_Y;
+ char Query[512];
+
+ /***** Check if user was and administrator of current centre *****/
+ if (Usr_CheckIfUsrIsAdmOfCtr (UsrDat->UsrCod,Gbl.CurrentCtr.Ctr.CtrCod))
+ sprintf (Gbl.Message,Txt_THE_USER_X_is_already_an_administrator_of_the_centre_Y,
+ UsrDat->FullName,Gbl.CurrentCtr.Ctr.FullName);
+ else // User was not administrator of current centre
+ {
+ /***** Insert or replace administrator in current centre *****/
+ sprintf (Query,"REPLACE INTO admin (UsrCod,Scope,Cod)"
+ " VALUES ('%ld','Ctr','%ld')",
+ UsrDat->UsrCod,Gbl.CurrentCtr.Ctr.CtrCod);
+ DB_QueryREPLACE (Query,"can not create administrator of centre");
+
+ sprintf (Gbl.Message,Txt_THE_USER_X_has_been_enrolled_as_administrator_of_the_centre_Y,
+ UsrDat->FullName,Gbl.CurrentCtr.Ctr.FullName);
+ }
+ Lay_ShowAlert (Lay_SUCCESS,Gbl.Message);
+ }
+
/*****************************************************************************/
/******************* Register administrator in current degree ****************/
/*****************************************************************************/
@@ -2890,8 +3008,8 @@ static void Enr_RegisterAdminInCurrentDeg (struct UsrData *UsrDat)
else // User was not administrator of current degree
{
/***** Insert or replace administrator in current degree *****/
- sprintf (Query,"REPLACE INTO deg_admin (UsrCod,DegCod)"
- " VALUES ('%ld','%ld')",
+ sprintf (Query,"REPLACE INTO admin (UsrCod,Scope,Cod)"
+ " VALUES ('%ld','Deg','%ld')",
UsrDat->UsrCod,Gbl.CurrentDeg.Deg.DegCod);
DB_QueryREPLACE (Query,"can not create administrator of degree");
@@ -3753,7 +3871,7 @@ static void Enr_EffectivelyRemAdmFromIns (struct UsrData *UsrDat)
extern const char *Txt_THE_USER_X_is_not_an_administrator_of_the_institution_Y;
char Query[1024];
- if (Usr_CheckIfUsrIsAdmOfDeg (UsrDat->UsrCod,Gbl.CurrentIns.Ins.InsCod)) // User is administrator of current institution
+ if (Usr_CheckIfUsrIsAdmOfIns (UsrDat->UsrCod,Gbl.CurrentIns.Ins.InsCod)) // User is administrator of current institution
{
/***** Remove user from the table of admins *****/
sprintf (Query,"DELETE FROM admin"
@@ -3783,7 +3901,7 @@ static void Enr_EffectivelyRemAdmFromCtr (struct UsrData *UsrDat)
extern const char *Txt_THE_USER_X_is_not_an_administrator_of_the_centre_Y;
char Query[1024];
- if (Usr_CheckIfUsrIsAdmOfDeg (UsrDat->UsrCod,Gbl.CurrentCtr.Ctr.CtrCod)) // User is administrator of current centre
+ if (Usr_CheckIfUsrIsAdmOfCtr (UsrDat->UsrCod,Gbl.CurrentCtr.Ctr.CtrCod)) // User is administrator of current centre
{
/***** Remove user from the table of admins *****/
sprintf (Query,"DELETE FROM admin"
diff --git a/swad_enrollment.h b/swad_enrollment.h
index 0c662b684..bbabf6265 100644
--- a/swad_enrollment.h
+++ b/swad_enrollment.h
@@ -105,6 +105,8 @@ void Enr_ShowEnrollmentRequests (void);
void Enr_ReqRegRemUsr (void);
void Enr_AskIfRegRemAnotherUsr (void);
+void Enr_AddAdmToIns (void);
+void Enr_AddAdmToCtr (void);
void Enr_AddAdmToDeg (void);
void Enr_ReqRemMeFromCrs (void);
diff --git a/swad_text.c b/swad_text.c
index db869ff74..47b2346d4 100644
--- a/swad_text.c
+++ b/swad_text.c
@@ -7980,6 +7980,27 @@ const char *Txt_Do_not_show_again =
"Não mostrar novamente";
#endif
+const char *Txt_Do_you_really_want_to_be_removed_as_an_administrator_of_the_centre_X = // Warning: it is very important to include %s in the following sentences
+#if L==0
+ "¿Realmente desea dejar de ser administrador/a del centro %s?"; // Necessita traduccio
+#elif L==1
+ "Do you really want to be removed as an administrator of the centre %s?"; // Need Übersetzung
+#elif L==2
+ "Do you really want to be removed as an administrator of the centre %s?";
+#elif L==3
+ "¿Realmente desea dejar de ser administrador/a del centro %s?";
+#elif L==4
+ "Do you really want to be removed as an administrator of the centre %s?"; // Besoin de traduction
+#elif L==5
+ "¿Realmente desea dejar de ser administrador/a del centro %s?"; // Okoteve traducción
+#elif L==6
+ "Vuole realmente essere rimosso come amministratore del centro %s?";
+#elif L==7
+ "Czy naprawde chcesz byc usuniety jako administrator centrum %s?";
+#elif L==8
+ "Do you really want to be removed as an administrator of the centre %s?"; // Necessita de tradução
+#endif
+
const char *Txt_Do_you_really_want_to_be_removed_as_an_administrator_of_the_degree_X = // Warning: it is very important to include %s in the following sentences
#if L==0
"¿Realmente desea dejar de ser administrador/a de la titulación %s?"; // Necessita traduccio
@@ -8001,6 +8022,27 @@ const char *Txt_Do_you_really_want_to_be_removed_as_an_administrator_of_the_degr
"Do you really want to be removed as an administrator of the degree %s?"; // Necessita de tradução
#endif
+const char *Txt_Do_you_really_want_to_be_removed_as_an_administrator_of_the_institution_X = // Warning: it is very important to include %s in the following sentences
+#if L==0
+ "¿Realmente desea dejar de ser administrador/a de la institución %s?"; // Necessita traduccio
+#elif L==1
+ "Do you really want to be removed as an administrator of the institution %s?"; // Need Übersetzung
+#elif L==2
+ "Do you really want to be removed as an administrator of the institution %s?";
+#elif L==3
+ "¿Realmente desea dejar de ser administrador/a de la institución %s?";
+#elif L==4
+ "Do you really want to be removed as an administrator of the institution %s?"; // Besoin de traduction
+#elif L==5
+ "¿Realmente desea dejar de ser administrador/a de la institución %s?"; // Okoteve traducción
+#elif L==6
+ "Vuole realmente essere rimosso come amministratore della istituzione %s?";
+#elif L==7
+ "Czy naprawde chcesz byc usuniety jako administrator instytucji %s?";
+#elif L==8
+ "Do you really want to be removed as an administrator of the institution %s?"; // Necessita de tradução
+#endif
+
const char *Txt_Do_you_really_want_to_be_removed_from_the_course_X = // Warning: it is very important to include %s in the following sentences
#if L==0
"¿Realmente desea ser eliminado de la asignatura %s"
@@ -8238,25 +8280,94 @@ const char *Txt_Do_you_really_want_to_delete_the_unread_messages_received_from_U
" from %s from %s related to %s?"; // Necessita de tradução
#endif
+const char *Txt_Do_you_really_want_to_register_the_following_user_as_an_administrator_of_the_centre_X = // Warning: it is very important to include %s in the following sentences
+#if L==0
+ "¿Realmente desea inscribir el siguiente usuario"
+ " como administrador del centro %s?"; // Necessita traduccio
+#elif L==1
+ "Do you really want to register the following user"
+ " as an administrator of the centre %s?"; // Need Übersetzung
+#elif L==2
+ "Do you really want to register the following user"
+ " as an administrator of the centre %s?";
+#elif L==3
+ "¿Realmente desea inscribir el siguiente usuario"
+ " como administrador del centro %s?";
+#elif L==4
+ "Do you really want to register the following user"
+ " as an administrator of the centre %s?"; // Besoin de traduction
+#elif L==5
+ "¿Realmente desea inscribir el siguiente usuario"
+ " como administrador del centro %s?"; // Okoteve traducción
+#elif L==6
+ "Vuoi realmente registrare il seguente utente"
+ " come amministratore del centro %s?";
+#elif L==7
+ "Czy na pewno chcesz sie zarejestrowac nastepujace użytkownika"
+ " jako administratora centrum %s?";
+#elif L==8
+ "Do you really want to register the following user"
+ " as an administrator of the centre %s?"; // Necessita de tradução
+#endif
+
const char *Txt_Do_you_really_want_to_register_the_following_user_as_an_administrator_of_the_degree_X = // Warning: it is very important to include %s in the following sentences
#if L==0
- "¿Realmente desea inscribir el siguiente usuario como administrador de la titulación %s?"; // Necessita traduccio
+ "¿Realmente desea inscribir el siguiente usuario"
+ " como administrador de la titulación %s?"; // Necessita traduccio
#elif L==1
- "Do you really want to register the following user as an administrator of the degree %s?"; // Need Übersetzung
+ "Do you really want to register the following user"
+ " as an administrator of the degree %s?"; // Need Übersetzung
#elif L==2
- "Do you really want to register the following user as an administrator of the degree %s?";
+ "Do you really want to register the following user"
+ " as an administrator of the degree %s?";
#elif L==3
- "¿Realmente desea inscribir el siguiente usuario como administrador de la titulación %s?";
+ "¿Realmente desea inscribir el siguiente usuario"
+ " como administrador de la titulación %s?";
#elif L==4
- "Do you really want to register the following user as an administrator of the degree %s?"; // Besoin de traduction
+ "Do you really want to register the following user"
+ " as an administrator of the degree %s?"; // Besoin de traduction
#elif L==5
- "¿Realmente desea inscribir el siguiente usuario como administrador de la titulación %s?"; // Okoteve traducción
+ "¿Realmente desea inscribir el siguiente usuario"
+ " como administrador de la titulación %s?"; // Okoteve traducción
#elif L==6
- "Vuoi realmente registrare il seguente utente come amministratore della laurea %s?";
+ "Vuoi realmente registrare il seguente utente"
+ " come amministratore della laurea %s?";
#elif L==7
- "Czy na pewno chcesz sie zarejestrowac nastepujace użytkownika jako administratora stopnia %s?";
+ "Czy na pewno chcesz sie zarejestrowac nastepujace użytkownika"
+ " jako administratora stopnia %s?";
#elif L==8
- "Do you really want to register the following user as an administrator of the degree %s?"; // Necessita de tradução
+ "Do you really want to register the following user"
+ " as an administrator of the degree %s?"; // Necessita de tradução
+#endif
+
+const char *Txt_Do_you_really_want_to_register_the_following_user_as_an_administrator_of_the_institution_X = // Warning: it is very important to include %s in the following sentences
+#if L==0
+ "¿Realmente desea inscribir el siguiente usuario"
+ " como administrador de la institución %s?"; // Necessita traduccio
+#elif L==1
+ "Do you really want to register the following user"
+ " as an administrator of the institution %s?"; // Need Übersetzung
+#elif L==2
+ "Do you really want to register the following user"
+ " as an administrator of the institution %s?";
+#elif L==3
+ "¿Realmente desea inscribir el siguiente usuario"
+ " como administrador de la institución %s?";
+#elif L==4
+ "Do you really want to register the following user"
+ " as an administrator of the institution %s?"; // Besoin de traduction
+#elif L==5
+ "¿Realmente desea inscribir el siguiente usuario"
+ " como administrador de la institución %s?"; // Okoteve traducción
+#elif L==6
+ "Vuoi realmente registrare il seguente utente"
+ " come amministratore della istituzione %s?";
+#elif L==7
+ "Czy na pewno chcesz sie zarejestrowac nastepujace użytkownika"
+ " jako administratora instytucji %s?";
+#elif L==8
+ "Do you really want to register the following user"
+ " as an administrator of the institution %s?"; // Necessita de tradução
#endif
const char *Txt_Do_you_really_want_to_reject_the_enrollment_request_ = // Warning: it is very important to include three %s in the following sentences
@@ -8492,44 +8603,122 @@ const char *Txt_Do_you_really_want_to_remove_FILE_OR_LINK_X = // Warning: it is
const char *Txt_Do_you_really_want_to_remove_the_folder_X = // Warning: it is very important to include %s in the following sentences
#if L==0
- "¿Realmente desea eliminar la carpeta %s y todo su contenido?"; // Necessita traduccio
+ "¿Realmente desea eliminar"
+ " la carpeta %s y todo su contenido?"; // Necessita traduccio
#elif L==1
- "Wollen Sie wirklich das Verzeichnis %s und alle Inhalte entfernen?";
+ "Wollen Sie wirklich"
+ " das Verzeichnis %s und alle Inhalte entfernen?";
#elif L==2
- "Do you really want to remove the folder %s and all its contents?";
+ "Do you really want to remove"
+ " the folder %s and all its contents?";
#elif L==3
- "¿Realmente desea eliminar la carpeta %s y todo su contenido?";
+ "¿Realmente desea eliminar"
+ " la carpeta %s y todo su contenido?";
#elif L==4
- "Voulez-vous vraiment supprimer le répertoire %s et l'ensemble de son contenu?";
+ "Voulez-vous vraiment supprimer"
+ " le répertoire %s et l'ensemble de son contenu?";
#elif L==5
- "¿Realmente desea eliminar la carpeta %s y todo su contenido?"; // Okoteve traducción
+ "¿Realmente desea eliminar"
+ " la carpeta %s y todo su contenido?"; // Okoteve traducción
#elif L==6
- "Vuoi realmente rimuovere la cartella %s e tutto il suo contenuto?";
+ "Vuoi realmente rimuovere"
+ " la cartella %s e tutto il suo contenuto?";
#elif L==7
- "Czy na pewno chcesz usunac folder %s i wszystkie jego skladniki?";
+ "Czy na pewno chcesz usunac"
+ " folder %s i wszystkie jego skladniki?";
#elif L==8
- "Você realmente deseja remover o diretório %s e todo o seu conteúdo?";
+ "Você realmente deseja remover"
+ " o diretório %s e todo o seu conteúdo?";
+#endif
+
+const char *Txt_Do_you_really_want_to_remove_the_following_user_as_an_administrator_of_the_centre_X = // Warning: it is very important to include %s in the following sentences
+#if L==0
+ "¿Realmente desea eliminar el siguiente usuario"
+ " como administrador del centro %s?"; // Necessita traduccio
+#elif L==1
+ "Do you really want to remove the following user"
+ " as an administrator of the centre %s?"; // Need Übersetzung
+#elif L==2
+ "Do you really want to remove the following user"
+ " as an administrator of the centre %s?";
+#elif L==3
+ "¿Realmente desea eliminar el siguiente usuario"
+ " como administrador del centro %s?";
+#elif L==4
+ "Do you really want to remove the following user"
+ " as an administrator of the centre %s?"; // Besoin de traduction
+#elif L==5
+ "¿Realmente desea eliminar el siguiente usuario"
+ " como administrador del centro %s?"; // Okoteve traducción
+#elif L==6
+ "Vuoi realmente rimuovere il seguente utente"
+ " come amministratore del centro %s?";
+#elif L==7
+ "Czy na pewno chcesz usunac nastepujace użytkownika"
+ " jako administratora centrum %s?";
+#elif L==8
+ "Do you really want to remove the following user"
+ " as an administrator of the centre %s?"; // Necessita de tradução
#endif
const char *Txt_Do_you_really_want_to_remove_the_following_user_as_an_administrator_of_the_degree_X = // Warning: it is very important to include %s in the following sentences
#if L==0
- "¿Realmente desea eliminar el siguiente usuario como administrador de la titulación %s?"; // Necessita traduccio
+ "¿Realmente desea eliminar el siguiente usuario"
+ " como administrador de la titulación %s?"; // Necessita traduccio
#elif L==1
- "Do you really want to remove the following user as an administrator of the degree %s?"; // Need Übersetzung
+ "Do you really want to remove the following user"
+ " as an administrator of the degree %s?"; // Need Übersetzung
#elif L==2
- "Do you really want to remove the following user as an administrator of the degree %s?";
+ "Do you really want to remove the following user"
+ " as an administrator of the degree %s?";
#elif L==3
- "¿Realmente desea eliminar el siguiente usuario como administrador de la titulación %s?";
+ "¿Realmente desea eliminar el siguiente usuario"
+ " como administrador de la titulación %s?";
#elif L==4
- "Do you really want to remove the following user as an administrator of the degree %s?"; // Besoin de traduction
+ "Do you really want to remove the following user"
+ " as an administrator of the degree %s?"; // Besoin de traduction
#elif L==5
- "¿Realmente desea eliminar el siguiente usuario como administrador de la titulación %s?"; // Okoteve traducción
+ "¿Realmente desea eliminar el siguiente usuario"
+ " como administrador de la titulación %s?"; // Okoteve traducción
#elif L==6
- "Vuoi realmente rimuovere il seguente utente come amministratore della laurea %s?";
+ "Vuoi realmente rimuovere il seguente utente"
+ " come amministratore della laurea %s?";
#elif L==7
- "Czy na pewno chcesz usunac nastepujace użytkownika jako administratora stopnia %s?";
+ "Czy na pewno chcesz usunac nastepujace użytkownika"
+ " jako administratora stopnia %s?";
#elif L==8
- "Do you really want to remove the following user as an administrator of the degree %s?"; // Necessita de tradução
+ "Do you really want to remove the following user"
+ " as an administrator of the degree %s?"; // Necessita de tradução
+#endif
+
+const char *Txt_Do_you_really_want_to_remove_the_following_user_as_an_administrator_of_the_institution_X = // Warning: it is very important to include %s in the following sentences
+#if L==0
+ "¿Realmente desea eliminar el siguiente usuario"
+ " como administrador de la institución %s?"; // Necessita traduccio
+#elif L==1
+ "Do you really want to remove the following user"
+ " as an administrator of the institution %s?"; // Need Übersetzung
+#elif L==2
+ "Do you really want to remove the following user"
+ " as an administrator of the institution %s?";
+#elif L==3
+ "¿Realmente desea eliminar el siguiente usuario"
+ " como administrador de la institución %s?";
+#elif L==4
+ "Do you really want to remove the following user"
+ " as an administrator of the degree %s?"; // Besoin de traduction
+#elif L==5
+ "¿Realmente desea eliminar el siguiente usuario"
+ " como administrador de la institución %s?"; // Okoteve traducción
+#elif L==6
+ "Vuoi realmente rimuovere il seguente utente"
+ " come amministratore della istituzione %s?";
+#elif L==7
+ "Czy na pewno chcesz usunac nastepujace użytkownika"
+ " jako administratora instytucji %s?";
+#elif L==8
+ "Do you really want to remove the following user"
+ " as an administrator of the institution %s?"; // Necessita de tradução
#endif
const char *Txt_Do_you_really_want_to_remove_the_following_user_from_the_course_X = // Warning: it is very important to include %s in the following sentences
@@ -41686,6 +41875,36 @@ const char *Txt_THE_USER_X_already_exists_in_Y_but_is_not_yet_enrolled_in_the_co
" in the course %s."; // Necessita de tradução
#endif
+const char *Txt_THE_USER_X_has_been_enrolled_as_administrator_of_the_centre_Y = // Warning: it is very important to include two %s in the following sentences
+#if L==0
+ "%s ha sido añadido/a como administrador/a"
+ " del centro %s."; // Necessita traduccio
+#elif L==1
+ "%s has been enrolled as administrator"
+ " of the centre %s."; // Übersetzung notwendig
+#elif L==2
+ "%s has been enrolled as administrator"
+ " of the centre %s.";
+#elif L==3
+ "%s ha sido añadido/a como administrador/a"
+ " del centro %s.";
+#elif L==4
+ "%s has been enrolled as administrator"
+ " of the centre %s."; // Besoin de traduction
+#elif L==5
+ "%s ha sido añadido/a como administrador/a"
+ " del centro %s."; // Okoteve traducción
+#elif L==6
+ "%s è stato registrato come amministratore"
+ " del centro %s.";
+#elif L==7
+ "%s has been enrolled as administrator"
+ " of the centre %s."; // Potrzebujesz tlumaczenie
+#elif L==8
+ "%s has been enrolled as administrator"
+ " of the centre %s."; // Necessita de tradução
+#endif
+
const char *Txt_THE_USER_X_has_been_enrolled_as_administrator_of_the_degree_Y = // Warning: it is very important to include two %s in the following sentences
#if L==0
"%s ha sido añadido/a como administrador/a"
@@ -41716,6 +41935,36 @@ const char *Txt_THE_USER_X_has_been_enrolled_as_administrator_of_the_degree_Y =
" of the degree %s."; // Necessita de tradução
#endif
+const char *Txt_THE_USER_X_has_been_enrolled_as_administrator_of_the_institution_Y = // Warning: it is very important to include two %s in the following sentences
+#if L==0
+ "%s ha sido añadido/a como administrador/a"
+ " de la institución %s."; // Necessita traduccio
+#elif L==1
+ "%s has been enrolled as administrator"
+ " of the institution %s."; // Übersetzung notwendig
+#elif L==2
+ "%s has been enrolled as administrator"
+ " of the institution %s.";
+#elif L==3
+ "%s ha sido añadido/a como administrador/a"
+ " de la institución %s.";
+#elif L==4
+ "%s has been enrolled as administrator"
+ " of the institution %s."; // Besoin de traduction
+#elif L==5
+ "%s ha sido añadido/a como administrador/a"
+ " de la institución %s."; // Okoteve traducción
+#elif L==6
+ "%s è stato registrato come amministratore"
+ " della istituzione %s.";
+#elif L==7
+ "%s has been enrolled as administrator"
+ " of the institution %s."; // Potrzebujesz tlumaczenie
+#elif L==8
+ "%s has been enrolled as administrator"
+ " of the institution %s."; // Necessita de tradução
+#endif
+
const char *Txt_THE_USER_X_has_been_enrolled_in_the_course_Y = // Warning: it is very important to include two %s in the following sentences
#if L==0
"%s ha estat afegit/da"
@@ -41950,6 +42199,36 @@ const char *Txt_THE_USER_X_has_been_removed_from_the_course_Y = // Warning: it i
" from the course %s."; // Necessita de tradução
#endif
+const char *Txt_THE_USER_X_has_been_removed_as_administrator_of_the_centre_Y = // Warning: it is very important to include two %s in the following sentences
+#if L==0
+ "%s ha sido eliminado/a como administrador"
+ " del centro %s."; // Necessita traduccio
+#elif L==1
+ "%s has been removed as administrator"
+ " of the centre %s."; // Übersetzung notwendig
+#elif L==2
+ "%s has been removed as administrator"
+ " of the centre %s.";
+#elif L==3
+ "%s ha sido eliminado/a como administrador"
+ " del centro %s.";
+#elif L==4
+ "%s has been removed as administrator"
+ " of the centre %s."; // Besoin de traduction
+#elif L==5
+ "%s ha sido eliminado/a como administrador"
+ " del centro %s."; // Okoteve traducción
+#elif L==6
+ "%s è stato rimosso come amministratore"
+ " del centro %s.";
+#elif L==7
+ "%s has been removed as administrator"
+ " of the centre %s."; // Potrzebujesz tlumaczenie
+#elif L==8
+ "%s has been removed as administrator"
+ " of the centre %s."; // Necessita de tradução
+#endif
+
const char *Txt_THE_USER_X_has_been_removed_as_administrator_of_the_degree_Y = // Warning: it is very important to include two %s in the following sentences
#if L==0
"%s ha sido eliminado/a como administrador"
@@ -41980,6 +42259,36 @@ const char *Txt_THE_USER_X_has_been_removed_as_administrator_of_the_degree_Y = /
" of the degree %s."; // Necessita de tradução
#endif
+const char *Txt_THE_USER_X_has_been_removed_as_administrator_of_the_institution_Y = // Warning: it is very important to include two %s in the following sentences
+#if L==0
+ "%s ha sido eliminado/a como administrador"
+ " de la institución %s."; // Necessita traduccio
+#elif L==1
+ "%s has been removed as administrator"
+ " of the institution %s."; // Übersetzung notwendig
+#elif L==2
+ "%s has been removed as administrator"
+ " of the institution %s.";
+#elif L==3
+ "%s ha sido eliminado/a como administrador"
+ " de la institución %s.";
+#elif L==4
+ "%s has been removed as administrator"
+ " of the institution %s."; // Besoin de traduction
+#elif L==5
+ "%s ha sido eliminado/a como administrador"
+ " de la institución %s."; // Okoteve traducción
+#elif L==6
+ "%s è stato rimosso come amministratore"
+ " della istituzione %s.";
+#elif L==7
+ "%s has been removed as administrator"
+ " of the institution %s."; // Potrzebujesz tlumaczenie
+#elif L==8
+ "%s has been removed as administrator"
+ " of the institution %s."; // Necessita de tradução
+#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
#if L==0
"%s ha sido eliminado/a"
@@ -42040,6 +42349,36 @@ const char *Txt_THE_USER_X_has_not_been_removed_from_any_group = // Warning: it
" from any group."; // Necessita de tradução
#endif
+const char *Txt_THE_USER_X_is_already_an_administrator_of_the_centre_Y = // Warning: it is very important to include two %s in the following sentences
+#if L==0
+ "%s ya es administrador/a"
+ " del centro %s."; // Necessita traduccio
+#elif L==1
+ "%s is already an administrator"
+ " of the centre %s."; // Übersetzung notwendig
+#elif L==2
+ "%s is already an administrator"
+ " of the centre %s.";
+#elif L==3
+ "%s ya es administrador/a"
+ " de la titulación %s.";
+#elif L==4
+ "%s is already an administrator"
+ " of the centre %s."; // Besoin de traduction
+#elif L==5
+ "%s ya es administrador/a"
+ " del centro %s."; // Okoteve traducción
+#elif L==6
+ "%s è già un amministratore"
+ " del centro %s.";
+#elif L==7
+ "%s is already an administrator"
+ " of the centre %s."; // Potrzebujesz tlumaczenie
+#elif L==8
+ "%s is already an administrator"
+ " of the centre %s."; // Necessita de tradução
+#endif
+
const char *Txt_THE_USER_X_is_already_an_administrator_of_the_degree_Y = // Warning: it is very important to include two %s in the following sentences
#if L==0
"%s ya es administrador/a"
@@ -42070,6 +42409,36 @@ const char *Txt_THE_USER_X_is_already_an_administrator_of_the_degree_Y = // Warn
" of the degree %s."; // Necessita de tradução
#endif
+const char *Txt_THE_USER_X_is_already_an_administrator_of_the_institution_Y = // Warning: it is very important to include two %s in the following sentences
+#if L==0
+ "%s ya es administrador/a"
+ " de la institución %s."; // Necessita traduccio
+#elif L==1
+ "%s is already an administrator"
+ " of the institution %s."; // Übersetzung notwendig
+#elif L==2
+ "%s is already an administrator"
+ " of the institution %s.";
+#elif L==3
+ "%s ya es administrador/a"
+ " de la institución %s.";
+#elif L==4
+ "%s is already an administrator"
+ " of the institution %s."; // Besoin de traduction
+#elif L==5
+ "%s ya es administrador/a"
+ " de la institución %s."; // Okoteve traducción
+#elif L==6
+ "%s è già un amministratore"
+ " della istituzione %s.";
+#elif L==7
+ "%s is already an administrator"
+ " of the institution %s."; // Potrzebujesz tlumaczenie
+#elif L==8
+ "%s is already an administrator"
+ " of the institution %s."; // Necessita de tradução
+#endif
+
const char *Txt_THE_USER_X_is_already_in_the_course_Y_but_has_not_yet_accepted_the_enrollment = // Warning: it is very important to include %s in the following sentences
#if L==0
"%s ya está"
@@ -42160,6 +42529,36 @@ const char *Txt_The_user_is_new_does_not_exists_yet_in_X = // Warning: it is ver
"The user is new, does not exist yet in %s."; // Necessita de tradução
#endif
+const char *Txt_THE_USER_X_is_not_an_administrator_of_the_centre_Y = // Warning: it is very important to include two %s in the following sentences
+#if L==0
+ "%s no es administrador/a"
+ " del centro %s."; // Necessita traduccio
+#elif L==1
+ "%s is not an administrator"
+ " of the centre %s."; // Übersetzung notwendig
+#elif L==2
+ "%s is not an administrator"
+ " of the centre %s.";
+#elif L==3
+ "%s no es administrador/a"
+ " del centro %s.";
+#elif L==4
+ "%s is not an administrator"
+ " of the centre %s."; // Besoin de traduction
+#elif L==5
+ "%s no es administrador/a"
+ " del centro %s."; // Okoteve traducción
+#elif L==6
+ "%s non è un amministratore"
+ " del centro %s.";
+#elif L==7
+ "%s is not an administrator"
+ " of the centre %s."; // Potrzebujesz tlumaczenie
+#elif L==8
+ "%s is not an administrator"
+ " of the centre %s."; // Necessita de tradução
+#endif
+
const char *Txt_THE_USER_X_is_not_an_administrator_of_the_degree_Y = // Warning: it is very important to include two %s in the following sentences
#if L==0
"%s no es administrador/a"
@@ -42190,6 +42589,36 @@ const char *Txt_THE_USER_X_is_not_an_administrator_of_the_degree_Y = // Warning:
" of the degree %s."; // Necessita de tradução
#endif
+const char *Txt_THE_USER_X_is_not_an_administrator_of_the_institution_Y = // Warning: it is very important to include two %s in the following sentences
+#if L==0
+ "%s no es administrador/a"
+ " de la institución %s."; // Necessita traduccio
+#elif L==1
+ "%s is not an administrator"
+ " of the institution %s."; // Übersetzung notwendig
+#elif L==2
+ "%s is not an administrator"
+ " of the institution %s.";
+#elif L==3
+ "%s no es administrador/a"
+ " de la institución %s.";
+#elif L==4
+ "%s is not an administrator"
+ " of the institution %s."; // Besoin de traduction
+#elif L==5
+ "%s no es administrador/a"
+ " de la institución %s."; // Okoteve traducción
+#elif L==6
+ "%s non è un amministratore"
+ " della istituzione %s.";
+#elif L==7
+ "%s is not an administrator"
+ " of the institution %s."; // Potrzebujesz tlumaczenie
+#elif L==8
+ "%s is not an administrator"
+ " of the institution %s."; // Necessita de tradução
+#endif
+
const char *Txt_THE_USER_X_is_not_found_in_the_file_of_marks = // Warning: it is very important to include %s in the following sentences
#if L==0
"No se ha encontrado a %s en el archivo de calificaciones."; // Necessita traduccio