Version 14.132.5

This commit is contained in:
Antonio Cañas Vargas 2015-09-16 22:13:00 +02:00
parent 8a816b0ef3
commit 9f7b4f5918
4 changed files with 214 additions and 156 deletions

View File

@ -938,7 +938,9 @@ Users:
767b. ActRemGstPho Remove other user's photo
767c. ActRemStdPho Remove other user's photo
767d. ActRemTchPho Remove other user's photo
768. ActCreOthUsrDat Insertar a new user in this course
768b. ActCreGst Create a new user
768c. ActCreStd Create a new user
768d. ActCreTch Create a new user
769b. ActUpdOthGst Update another user's data and groups
769c. ActUpdOthStd Update another user's data and groups
769d. ActUpdOthTch Update another user's data and groups
@ -2326,10 +2328,10 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
/* ActReqMdfOneTch */{1416,-1,TabUsr,ActLstTch ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Enr_ReqRegRemTch ,NULL},
/* ActReqMdfOneAdm */{1417,-1,TabUsr,ActLstAdm ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Enr_ReqRegRemAdm ,NULL},
/* ActReqMdfUsr */{1418,-1,TabUsr,ActLstGst ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Enr_AskIfRegRemAnotherGst ,NULL},
/* ActReqMdfUsr */{1419,-1,TabUsr,ActLstStd ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Enr_AskIfRegRemAnotherStd ,NULL},
/* ActReqMdfUsr */{1420,-1,TabUsr,ActLstTch ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Enr_AskIfRegRemAnotherTch ,NULL},
/* ActReqMdfUsr */{1421,-1,TabUsr,ActLstAdm ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Enr_AskIfRegRemAnotherAdm ,NULL},
/* ActReqMdfGst */{1418,-1,TabUsr,ActLstGst ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Enr_AskIfRegRemAnotherGst ,NULL},
/* ActReqMdfStd */{1419,-1,TabUsr,ActLstStd ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Enr_AskIfRegRemAnotherStd ,NULL},
/* ActReqMdfTch */{1420,-1,TabUsr,ActLstTch ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Enr_AskIfRegRemAnotherTch ,NULL},
/* ActReqMdfAdm */{1421,-1,TabUsr,ActLstAdm ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Enr_AskIfRegRemAnotherAdm ,NULL},
/* ActReqGstPho */{1432,-1,TabUsr,ActLstGst ,0x1F0,0x1E0,0x1E0,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Pho_SendPhotoUsr ,NULL},
/* ActReqStdPho */{1433,-1,TabUsr,ActLstStd ,0x1F0,0x1E0,0x1E0,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Pho_SendPhotoUsr ,NULL},
@ -2347,7 +2349,10 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
/* ActRemStdPho */{1442,-1,TabUsr,ActLstStd ,0x1F0,0x1E0,0x1E0,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Pho_RemoveUsrPhoto ,NULL},
/* ActRemTchPho */{1443,-1,TabUsr,ActLstTch ,0x1F0,0x1E0,0x1E0,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Pho_RemoveUsrPhoto ,NULL},
/* ActCreOthUsrDat */{ 440,-1,TabUsr,ActLstStd ,0x1F0,0x1E0,0x1E0,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Enr_CreateNewUsr ,NULL},
/* ActCreGst */{1444,-1,TabUsr,ActLstGst ,0x1F0,0x1E0,0x1E0,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Enr_CreateNewUsr ,NULL},
/* ActCreStd */{1445,-1,TabUsr,ActLstStd ,0x1F0,0x1E0,0x1E0,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Enr_CreateNewUsr ,NULL},
/* ActCreTch */{1446,-1,TabUsr,ActLstTch ,0x1F0,0x1E0,0x1E0,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Enr_CreateNewUsr ,NULL},
/* ActUpdOthGst */{1422,-1,TabUsr,ActLstGst ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Enr_ModifyUsr ,NULL},
/* ActUpdOthStd */{1423,-1,TabUsr,ActLstStd ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Enr_ModifyUsr ,NULL},
/* ActUpdOthTch */{1424,-1,TabUsr,ActLstTch ,0x1FE,0x1FE,0x1FE,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Enr_ModifyUsr ,NULL},
@ -3164,7 +3169,7 @@ Act_Action_t Act_FromActCodToAction[1+Act_MAX_ACTION_COD] = // Do not reuse uniq
-1, // #437 (obsolete action)
-1, // #438 (obsolete action)
-1, // #439 (obsolete action)
ActCreOthUsrDat, // #440
-1, // #440 (obsolete action)
-1, // #441 (obsolete action)
-1, // #442 (obsolete action)
ActPrnTchPho, // #443
@ -4171,6 +4176,9 @@ Act_Action_t Act_FromActCodToAction[1+Act_MAX_ACTION_COD] = // Do not reuse uniq
ActRemGstPho, // #1441
ActRemStdPho, // #1442
ActRemTchPho, // #1443
ActCreGst, // #1444
ActCreStd, // #1445
ActCreTch, // #1446
};
/*****************************************************************************/

View File

@ -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+90+73+68+204+182+129+168+28+79)
#define Act_NUM_ACTIONS (7+52+15+90+73+68+204+182+131+168+28+79)
#define Act_MAX_ACTION_COD 1443
#define Act_MAX_ACTION_COD 1446
#define Act_MAX_OPTIONS_IN_MENU_PER_TAB 20
@ -966,51 +966,53 @@ typedef int Act_Action_t; // Must be a signed type, because -1 is used to indica
#define ActRemGstPho (ActChgNumRowFooGrp+ 90)
#define ActRemStdPho (ActChgNumRowFooGrp+ 91)
#define ActRemTchPho (ActChgNumRowFooGrp+ 92)
#define ActCreOthUsrDat (ActChgNumRowFooGrp+ 93)
#define ActUpdOthGst (ActChgNumRowFooGrp+ 94)
#define ActUpdOthStd (ActChgNumRowFooGrp+ 95)
#define ActUpdOthTch (ActChgNumRowFooGrp+ 96)
#define ActUpdOthAdm (ActChgNumRowFooGrp+ 97)
#define ActCreGst (ActChgNumRowFooGrp+ 93)
#define ActCreStd (ActChgNumRowFooGrp+ 94)
#define ActCreTch (ActChgNumRowFooGrp+ 95)
#define ActUpdOthGst (ActChgNumRowFooGrp+ 96)
#define ActUpdOthStd (ActChgNumRowFooGrp+ 97)
#define ActUpdOthTch (ActChgNumRowFooGrp+ 98)
#define ActUpdOthAdm (ActChgNumRowFooGrp+ 99)
#define ActReqAccEnrCrs (ActChgNumRowFooGrp+ 98)
#define ActAccEnrCrs (ActChgNumRowFooGrp+ 99)
#define ActRemMeCrs (ActChgNumRowFooGrp+100)
#define ActReqAccEnrCrs (ActChgNumRowFooGrp+100)
#define ActAccEnrCrs (ActChgNumRowFooGrp+101)
#define ActRemMeCrs (ActChgNumRowFooGrp+102)
#define ActNewAdmIns (ActChgNumRowFooGrp+101)
#define ActRemAdmIns (ActChgNumRowFooGrp+102)
#define ActNewAdmCtr (ActChgNumRowFooGrp+103)
#define ActRemAdmCtr (ActChgNumRowFooGrp+104)
#define ActNewAdmDeg (ActChgNumRowFooGrp+105)
#define ActRemAdmDeg (ActChgNumRowFooGrp+106)
#define ActNewAdmIns (ActChgNumRowFooGrp+103)
#define ActRemAdmIns (ActChgNumRowFooGrp+104)
#define ActNewAdmCtr (ActChgNumRowFooGrp+105)
#define ActRemAdmCtr (ActChgNumRowFooGrp+106)
#define ActNewAdmDeg (ActChgNumRowFooGrp+107)
#define ActRemAdmDeg (ActChgNumRowFooGrp+108)
#define ActRcvFrmEnrSevStd (ActChgNumRowFooGrp+107)
#define ActRcvFrmEnrSevTch (ActChgNumRowFooGrp+108)
#define ActRcvFrmEnrSevStd (ActChgNumRowFooGrp+109)
#define ActRcvFrmEnrSevTch (ActChgNumRowFooGrp+110)
#define ActFrmIDsOthUsr (ActChgNumRowFooGrp+109)
#define ActRemIDOth (ActChgNumRowFooGrp+110)
#define ActNewIDOth (ActChgNumRowFooGrp+111)
#define ActFrmPwdOthUsr (ActChgNumRowFooGrp+112)
#define ActChgPwdOthUsr (ActChgNumRowFooGrp+113)
#define ActRemUsrCrs (ActChgNumRowFooGrp+114)
#define ActRemUsrGbl (ActChgNumRowFooGrp+115)
#define ActFrmIDsOthUsr (ActChgNumRowFooGrp+111)
#define ActRemIDOth (ActChgNumRowFooGrp+112)
#define ActNewIDOth (ActChgNumRowFooGrp+113)
#define ActFrmPwdOthUsr (ActChgNumRowFooGrp+114)
#define ActChgPwdOthUsr (ActChgNumRowFooGrp+115)
#define ActRemUsrCrs (ActChgNumRowFooGrp+116)
#define ActRemUsrGbl (ActChgNumRowFooGrp+117)
#define ActReqRemAllStdCrs (ActChgNumRowFooGrp+116)
#define ActRemAllStdCrs (ActChgNumRowFooGrp+117)
#define ActReqRemAllStdCrs (ActChgNumRowFooGrp+118)
#define ActRemAllStdCrs (ActChgNumRowFooGrp+119)
#define ActReqRemOldUsr (ActChgNumRowFooGrp+118)
#define ActRemOldUsr (ActChgNumRowFooGrp+119)
#define ActReqRemOldUsr (ActChgNumRowFooGrp+120)
#define ActRemOldUsr (ActChgNumRowFooGrp+121)
#define ActSeePubPrf (ActChgNumRowFooGrp+120)
#define ActCal1stClkTim (ActChgNumRowFooGrp+121)
#define ActCalNumClk (ActChgNumRowFooGrp+122)
#define ActCalNumFilVie (ActChgNumRowFooGrp+123)
#define ActCalNumForPst (ActChgNumRowFooGrp+124)
#define ActCalNumMsgSnt (ActChgNumRowFooGrp+125)
#define ActSeePubPrf (ActChgNumRowFooGrp+122)
#define ActCal1stClkTim (ActChgNumRowFooGrp+123)
#define ActCalNumClk (ActChgNumRowFooGrp+124)
#define ActCalNumFilVie (ActChgNumRowFooGrp+125)
#define ActCalNumForPst (ActChgNumRowFooGrp+126)
#define ActCalNumMsgSnt (ActChgNumRowFooGrp+127)
#define ActFolUsr (ActChgNumRowFooGrp+126)
#define ActUnfUsr (ActChgNumRowFooGrp+127)
#define ActSeeFlg (ActChgNumRowFooGrp+128)
#define ActSeeFlr (ActChgNumRowFooGrp+129)
#define ActFolUsr (ActChgNumRowFooGrp+128)
#define ActUnfUsr (ActChgNumRowFooGrp+129)
#define ActSeeFlg (ActChgNumRowFooGrp+130)
#define ActSeeFlr (ActChgNumRowFooGrp+131)
/*****************************************************************************/
/******************************* Messages tab ********************************/

View File

@ -98,11 +98,18 @@
/****************************** Public constants *****************************/
/*****************************************************************************/
#define Log_PLATFORM_VERSION "SWAD 14.132.4 (2015/09/16)"
#define Log_PLATFORM_VERSION "SWAD 14.132.5 (2015/09/16)"
// 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 14.132.5: Sep 16, 2015 Changes in user enrollment. (184592 lines)
4 changes necessary in database:
UPDATE actions SET Obsolete='Y' WHERE ActCod='440';
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1444','es','N','Crear invitado');
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1445','es','N','Crear usuario como estudiante');
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1446','es','N','Crear usuario como profesor');
Version 14.132.4: Sep 16, 2015 Changes in users' photos. (184536 lines)
4 changes necessary in database:
UPDATE actions SET Obsolete='Y' WHERE ActCod='429';

View File

@ -1991,53 +1991,52 @@ void Rec_ShowSharedUsrRecord (Rec_RecordViewType_t TypeOfView,
UsrDat->RoleInCurrentCrsDB == Rol_TEACHER);
bool CountryForm = (TypeOfView == Rec_FORM_MY_COMMON_RECORD ||
TypeOfView == Rec_FORM_NEW_RECORD_OTHER_NEW_USR);
bool RoleForm = Gbl.CurrentCrs.Crs.CrsCod > 0 &&
(TypeOfView == Rec_FORM_SIGN_UP ||
bool RoleForm = (TypeOfView == Rec_FORM_SIGN_UP ||
TypeOfView == Rec_FORM_NEW_RECORD_OTHER_NEW_USR ||
TypeOfView == Rec_FORM_MODIFY_RECORD_OTHER_EXISTING_USR);
bool SexForm = TypeOfView == Rec_FORM_MY_COMMON_RECORD;
bool DataForm = TypeOfView == Rec_FORM_MY_COMMON_RECORD ||
bool SexForm = (TypeOfView == Rec_FORM_MY_COMMON_RECORD);
bool DataForm = (TypeOfView == Rec_FORM_MY_COMMON_RECORD ||
TypeOfView == Rec_FORM_NEW_RECORD_OTHER_NEW_USR ||
(TypeOfView == Rec_FORM_MODIFY_RECORD_OTHER_EXISTING_USR &&
Gbl.Usrs.Me.LoggedRole >= Rol_DEG_ADM);
Gbl.Usrs.Me.LoggedRole >= Rol_DEG_ADM));
bool PutFormLinks; // Put links (forms) inside record card
bool ShowEmail = ItsMe ||
bool ShowEmail = (ItsMe ||
Gbl.Usrs.Me.LoggedRole >= Rol_DEG_ADM ||
DataForm ||
TypeOfView == Rec_FORM_MY_COMMON_RECORD ||
TypeOfView == Rec_MY_COMMON_RECORD_CHECK ||
TypeOfView == Rec_FORM_MY_COURSE_RECORD_AS_STUDENT ||
TypeOfView == Rec_CHECK_MY_COURSE_RECORD_AS_STUDENT ||
(UsrDat->Accepted &&
(TypeOfView == Rec_CHECK_OTHER_USR_COMMON_RECORD ||
((TypeOfView == Rec_RECORD_LIST ||
TypeOfView == Rec_RECORD_PRINT) &&
(IAmLoggedAsTeacher || Gbl.Usrs.Listing.RecsUsrs == Rec_RECORD_USERS_TEACHERS)))));
bool ShowID = (ItsMe ||
Gbl.Usrs.Me.LoggedRole >= Rol_DEG_ADM ||
DataForm ||
TypeOfView == Rec_FORM_MY_COMMON_RECORD ||
TypeOfView == Rec_MY_COMMON_RECORD_CHECK ||
TypeOfView == Rec_FORM_MY_COURSE_RECORD_AS_STUDENT ||
TypeOfView == Rec_CHECK_MY_COURSE_RECORD_AS_STUDENT ||
(UsrDat->Accepted &&
((TypeOfView == Rec_CHECK_OTHER_USR_COMMON_RECORD &&
!(IAmLoggedAsTeacher && HeIsTeacherInAnyCourse)) || // A teacher can not see another teacher's ID
((TypeOfView == Rec_RECORD_LIST ||
TypeOfView == Rec_RECORD_PRINT) &&
IAmLoggedAsTeacher && Gbl.Usrs.Listing.RecsUsrs == Rec_RECORD_USERS_STUDENTS))));
bool ShowData = (ItsMe ||
Gbl.Usrs.Me.LoggedRole >= Rol_DEG_ADM ||
DataForm ||
TypeOfView == Rec_FORM_MY_COMMON_RECORD ||
TypeOfView == Rec_MY_COMMON_RECORD_CHECK ||
TypeOfView == Rec_FORM_MY_COURSE_RECORD_AS_STUDENT ||
TypeOfView == Rec_CHECK_MY_COURSE_RECORD_AS_STUDENT ||
(UsrDat->Accepted &&
(TypeOfView == Rec_CHECK_OTHER_USR_COMMON_RECORD ||
((TypeOfView == Rec_RECORD_LIST ||
TypeOfView == Rec_RECORD_PRINT) &&
(IAmLoggedAsTeacher || Gbl.Usrs.Listing.RecsUsrs == Rec_RECORD_USERS_TEACHERS))));
bool ShowID = ItsMe ||
Gbl.Usrs.Me.LoggedRole >= Rol_DEG_ADM ||
DataForm ||
TypeOfView == Rec_FORM_MY_COMMON_RECORD ||
TypeOfView == Rec_MY_COMMON_RECORD_CHECK ||
TypeOfView == Rec_FORM_MY_COURSE_RECORD_AS_STUDENT ||
TypeOfView == Rec_CHECK_MY_COURSE_RECORD_AS_STUDENT ||
(UsrDat->Accepted &&
((TypeOfView == Rec_CHECK_OTHER_USR_COMMON_RECORD &&
!(IAmLoggedAsTeacher && HeIsTeacherInAnyCourse)) || // A teacher can not see another teacher's ID
((TypeOfView == Rec_RECORD_LIST ||
TypeOfView == Rec_RECORD_PRINT) &&
IAmLoggedAsTeacher && Gbl.Usrs.Listing.RecsUsrs == Rec_RECORD_USERS_STUDENTS)));
bool ShowData = ItsMe ||
Gbl.Usrs.Me.LoggedRole >= Rol_DEG_ADM ||
UsrDat->Accepted;
bool ShowIDRows = TypeOfView != Rec_RECORD_PUBLIC;
bool ShowAddressRows = TypeOfView == Rec_FORM_MY_COMMON_RECORD ||
TypeOfView == Rec_MY_COMMON_RECORD_CHECK ||
TypeOfView == Rec_FORM_MY_COURSE_RECORD_AS_STUDENT ||
TypeOfView == Rec_CHECK_MY_COURSE_RECORD_AS_STUDENT ||
((TypeOfView == Rec_RECORD_LIST ||
TypeOfView == Rec_RECORD_PRINT) &&
(IAmLoggedAsTeacher || IAmLoggedAsSysAdm) &&
UsrDat->RoleInCurrentCrsDB == Rol_STUDENT);
UsrDat->Accepted);
bool ShowIDRows = (TypeOfView != Rec_RECORD_PUBLIC);
bool ShowAddressRows = (TypeOfView == Rec_FORM_MY_COMMON_RECORD ||
TypeOfView == Rec_MY_COMMON_RECORD_CHECK ||
TypeOfView == Rec_FORM_MY_COURSE_RECORD_AS_STUDENT ||
TypeOfView == Rec_CHECK_MY_COURSE_RECORD_AS_STUDENT ||
((TypeOfView == Rec_RECORD_LIST ||
TypeOfView == Rec_RECORD_PRINT) &&
(IAmLoggedAsTeacher || IAmLoggedAsSysAdm) &&
UsrDat->RoleInCurrentCrsDB == Rol_STUDENT));
bool ShowTeacherRows = (((TypeOfView == Rec_FORM_MY_COMMON_RECORD ||
TypeOfView == Rec_MY_COMMON_RECORD_CHECK ||
TypeOfView == Rec_FORM_MY_COURSE_RECORD_AS_STUDENT ||
@ -2448,7 +2447,9 @@ void Rec_ShowSharedUsrRecord (Rec_RecordViewType_t TypeOfView,
Act_FormStart (ActChgMyData);
break;
case Rec_FORM_NEW_RECORD_OTHER_NEW_USR:
Act_FormStart (ActCreOthUsrDat);
Act_FormStart ( Gbl.CurrentAct == ActReqMdfStd ? ActCreStd :
(Gbl.CurrentAct == ActReqMdfTch ? ActCreTch :
ActCreGst));
ID_PutParamOtherUsrIDPlain (); // New user
break;
case Rec_FORM_MODIFY_RECORD_OTHER_EXISTING_USR:
@ -2522,7 +2523,7 @@ void Rec_ShowSharedUsrRecord (Rec_RecordViewType_t TypeOfView,
{
case Rec_FORM_SIGN_UP: // I want to apply for enrollment
DefaultRoleInCurrentCrs = (UsrDat->Roles & (1 << Rol_TEACHER)) ? Rol_TEACHER :
Rol_STUDENT;
Rol_STUDENT;
fprintf (Gbl.F.Out,"<select name=\"Role\">");
for (Role = Rol_STUDENT;
Role <= Rol_TEACHER;
@ -2537,32 +2538,49 @@ void Rec_ShowSharedUsrRecord (Rec_RecordViewType_t TypeOfView,
fprintf (Gbl.F.Out,"</select>");
break;
case Rec_FORM_MODIFY_RECORD_OTHER_EXISTING_USR: // The other user already exists in the platform
if (UsrDat->RoleInCurrentCrsDB < Rol_STUDENT) // The other user does not belong to current course
{
/* If there is a request of this user, default role is the requested role */
if ((DefaultRoleInCurrentCrs = Rol_GetRequestedRole (UsrDat->UsrCod)) == Rol_UNKNOWN)
DefaultRoleInCurrentCrs = (UsrDat->Roles & (1 << Rol_TEACHER)) ? Rol_TEACHER :
Rol_STUDENT;
}
else
DefaultRoleInCurrentCrs = UsrDat->RoleInCurrentCrsDB;
fprintf (Gbl.F.Out,"<select name=\"Role\">");
switch (Gbl.Usrs.Me.LoggedRole)
if (Gbl.CurrentCrs.Crs.CrsCod > 0) // Course selected
{
case Rol__GUEST_:
case Rol_VISITOR:
case Rol_STUDENT:
fprintf (Gbl.F.Out,"<option value=\"%u\" selected=\"selected\" disabled=\"disabled\">%s</option>",
(unsigned) Gbl.Usrs.Me.LoggedRole,
Txt_ROLES_SINGUL_Abc[Gbl.Usrs.Me.LoggedRole][UsrDat->Sex]);
break;
case Rol_TEACHER:
for (Role = Rol_STUDENT;
Role <= Rol_TEACHER;
Role++)
if (Role == Rol_STUDENT ||
(UsrDat->Roles & (1 << Role))) // A teacher can not upgrade a student (in all other courses) to teacher
if (UsrDat->RoleInCurrentCrsDB < Rol_STUDENT) // The other user does not belong to current course
{
/* If there is a request of this user, default role is the requested role */
if ((DefaultRoleInCurrentCrs = Rol_GetRequestedRole (UsrDat->UsrCod)) == Rol_UNKNOWN)
DefaultRoleInCurrentCrs = (UsrDat->Roles & (1 << Rol_TEACHER)) ? Rol_TEACHER :
Rol_STUDENT;
}
else
DefaultRoleInCurrentCrs = UsrDat->RoleInCurrentCrsDB;
switch (Gbl.Usrs.Me.LoggedRole)
{
case Rol__GUEST_:
case Rol_VISITOR:
case Rol_STUDENT:
fprintf (Gbl.F.Out,"<option value=\"%u\" selected=\"selected\" disabled=\"disabled\">%s</option>",
(unsigned) Gbl.Usrs.Me.LoggedRole,
Txt_ROLES_SINGUL_Abc[Gbl.Usrs.Me.LoggedRole][UsrDat->Sex]);
break;
case Rol_TEACHER:
for (Role = Rol_STUDENT;
Role <= Rol_TEACHER;
Role++)
if (Role == Rol_STUDENT ||
(UsrDat->Roles & (1 << Role))) // A teacher can not upgrade a student (in all other courses) to teacher
{
fprintf (Gbl.F.Out,"<option value=\"%u\"",(unsigned) Role);
if (Role == DefaultRoleInCurrentCrs)
fprintf (Gbl.F.Out," selected=\"selected\"");
fprintf (Gbl.F.Out,">%s</option>",
Txt_ROLES_SINGUL_Abc[Role][UsrDat->Sex]);
}
break;
case Rol_DEG_ADM:
case Rol_CTR_ADM:
case Rol_INS_ADM:
case Rol_SYS_ADM:
for (Role = Rol_STUDENT;
Role <= Rol_TEACHER;
Role++)
{
fprintf (Gbl.F.Out,"<option value=\"%u\"",(unsigned) Role);
if (Role == DefaultRoleInCurrentCrs)
@ -2570,43 +2588,54 @@ void Rec_ShowSharedUsrRecord (Rec_RecordViewType_t TypeOfView,
fprintf (Gbl.F.Out,">%s</option>",
Txt_ROLES_SINGUL_Abc[Role][UsrDat->Sex]);
}
break;
case Rol_DEG_ADM:
case Rol_SYS_ADM:
for (Role = Rol_STUDENT;
Role <= Rol_TEACHER;
Role++)
{
fprintf (Gbl.F.Out,"<option value=\"%u\"",(unsigned) Role);
if (Role == DefaultRoleInCurrentCrs)
fprintf (Gbl.F.Out," selected=\"selected\"");
fprintf (Gbl.F.Out,">%s</option>",
Txt_ROLES_SINGUL_Abc[Role][UsrDat->Sex]);
}
break;
default: // The rest of users can not register other users
break;
break;
default: // The rest of users can not register other users
break;
}
}
else // No course selected
{
DefaultRoleInCurrentCrs = (UsrDat->Roles & ((1 << Rol_STUDENT) |
(1 << Rol_TEACHER))) ? Rol_VISITOR :
Rol__GUEST_;
fprintf (Gbl.F.Out,"<option value=\"%u\" selected=\"selected\" disabled=\"disabled\">%s</option>",
(unsigned) DefaultRoleInCurrentCrs,
Txt_ROLES_SINGUL_Abc[DefaultRoleInCurrentCrs][UsrDat->Sex]);
}
fprintf (Gbl.F.Out,"</select>");
break;
case Rec_FORM_NEW_RECORD_OTHER_NEW_USR: // The other user does not exist in platform
fprintf (Gbl.F.Out,"<select name=\"Role\">");
switch (Gbl.Usrs.Me.LoggedRole)
{
case Rol_TEACHER: // A teacher only can create students
fprintf (Gbl.F.Out,"<option value=\"%u\" selected=\"selected\">%s</option>",
(unsigned) Rol_STUDENT,Txt_ROLES_SINGUL_Abc[Rol_STUDENT][Usr_SEX_UNKNOWN]);
break;
case Rol_DEG_ADM: // An administrator or a superuser can create students and teachers
case Rol_SYS_ADM:
fprintf (Gbl.F.Out,"<option value=\"%u\" selected=\"selected\">%s</option>"
"<option value=\"%u\">%s</option>",
(unsigned) Rol_STUDENT,Txt_ROLES_SINGUL_Abc[Rol_STUDENT][Usr_SEX_UNKNOWN],
(unsigned) Rol_TEACHER,Txt_ROLES_SINGUL_Abc[Rol_TEACHER][Usr_SEX_UNKNOWN]);
break;
default: // The rest of users can not register other users
break;
}
if (Gbl.CurrentCrs.Crs.CrsCod > 0) // Course selected
switch (Gbl.Usrs.Me.LoggedRole)
{
case Rol_TEACHER: // A teacher only can create students
fprintf (Gbl.F.Out,"<option value=\"%u\" selected=\"selected\">%s</option>",
(unsigned) Rol_STUDENT,Txt_ROLES_SINGUL_Abc[Rol_STUDENT][Usr_SEX_UNKNOWN]);
break;
case Rol_DEG_ADM: // An administrator can create students and teachers in a course
case Rol_CTR_ADM:
case Rol_INS_ADM:
case Rol_SYS_ADM:
fprintf (Gbl.F.Out,"<option value=\"%u\" selected=\"selected\">%s</option>"
"<option value=\"%u\">%s</option>",
(unsigned) Rol_STUDENT,Txt_ROLES_SINGUL_Abc[Rol_STUDENT][Usr_SEX_UNKNOWN],
(unsigned) Rol_TEACHER,Txt_ROLES_SINGUL_Abc[Rol_TEACHER][Usr_SEX_UNKNOWN]);
break;
default: // The rest of users can not register other users
break;
}
else // No course selected
switch (Gbl.Usrs.Me.LoggedRole)
{
case Rol_SYS_ADM:
fprintf (Gbl.F.Out,"<option value=\"%u\" selected=\"selected\">%s</option>",
(unsigned) Rol__GUEST_,Txt_ROLES_SINGUL_Abc[Rol__GUEST_][Usr_SEX_UNKNOWN]);
break;
default: // The rest of users can not register other users
break;
}
fprintf (Gbl.F.Out,"</select>");
break;
default:
@ -3164,6 +3193,7 @@ Rol_Role_t Rec_GetRoleFromRecordForm (void)
{
char UnsignedStr[10+1];
Rol_Role_t Role;
bool RoleOK = false;
/***** Get role as a parameter from form *****/
Par_GetParToText ("Role",UnsignedStr,10);
@ -3171,31 +3201,42 @@ Rol_Role_t Rec_GetRoleFromRecordForm (void)
/***** Check if I can register a user
with the received role in current course *****/
/* Received role must be student or teacher */
if (!(Role == Rol_STUDENT ||
Role == Rol_TEACHER))
Lay_ShowErrorAndExit ("Wrong user's role.");
/* Check for other possible errors */
switch (Gbl.Usrs.Me.LoggedRole)
{
case Rol_STUDENT: // I am logged as student
/* A student can only change his/her data, but not his/her role */
if (Role != Rol_STUDENT)
Lay_ShowErrorAndExit ("Wrong user's role.");
if (Role == Rol_STUDENT)
RoleOK = true;
break;
case Rol_TEACHER: // I am logged as teacher
/* A teacher can only register another user as teacher
if the other is already teacher in any course.
That is, a teacher can not upgrade a student
(in all other courses) to teacher */
if (Role == Rol_TEACHER && // He/she will be a teacher in current course
!(Gbl.Usrs.Other.UsrDat.Roles & (1 << Rol_TEACHER))) // He/she was not a teacher in any course
Lay_ShowErrorAndExit ("Wrong user's role.");
if ( Role == Rol_STUDENT ||
(Role == Rol_TEACHER && // He/she will be a teacher in current course
(Gbl.Usrs.Other.UsrDat.Roles & (1 << Rol_TEACHER)))) // He/she was a teacher in some courses
RoleOK = true;
break;
case Rol_DEG_ADM: // I am logged as admin
case Rol_CTR_ADM:
case Rol_INS_ADM:
if (Role == Rol_STUDENT ||
Role == Rol_TEACHER)
RoleOK = true;
break;
case Rol_SYS_ADM:
if ( Role == Rol_STUDENT ||
Role == Rol_TEACHER ||
(Role == Rol__GUEST_ && Gbl.CurrentCrs.Crs.CrsCod <= 0))
RoleOK = true;
break;
default:
break;
}
if (!RoleOK)
Lay_ShowErrorAndExit ("Wrong user's role.");
return Role;
}