Version 23.73: Apr 06, 2024 Code refactoring related to new type Usr_ICan_t.

This commit is contained in:
acanas 2024-04-06 21:23:53 +02:00
parent b44376b118
commit d6df495d93
35 changed files with 3150 additions and 2719 deletions

View File

@ -5261,20 +5261,22 @@ int swad__getLastLocation (struct soap *soap,
The other user does not have to share any course with me, The other user does not have to share any course with me,
but at least some course of each one has to share center. but at least some course of each one has to share center.
*/ */
if (Roo_DB_CheckIfICanSeeUsrLocation ((long) userCode) == Usr_I_CAN) switch (Roo_DB_CheckIfICanSeeUsrLocation ((long) userCode))
{ {
case Usr_I_CAN:
/***** Get list of locations *****/ /***** Get list of locations *****/
NumLocs = Roo_DB_GetUsrLastLocation (&mysql_res,(long) userCode); NumLocs = Roo_DB_GetUsrLastLocation (&mysql_res,(long) userCode);
API_GetLocationData (soap, API_GetLocationData (soap,
&(getLastLocationOut->location), &(getLastLocationOut->location),
&(getLastLocationOut->checkinTime), // Get check in time &(getLastLocationOut->checkinTime), // Get check in time
&mysql_res,NumLocs); &mysql_res,NumLocs);
} break;
else case Usr_I_CAN_NOT:
{ default:
/* I can not see user's location ==> reset output */ /* I can not see user's location ==> reset output */
API_ResetLocation (soap, &(getLastLocationOut->location)); API_ResetLocation (soap, &(getLastLocationOut->location));
getLastLocationOut->checkinTime = 0L; getLastLocationOut->checkinTime = 0L;
break;
} }
return SOAP_OK; return SOAP_OK;

View File

@ -328,14 +328,21 @@ void ID_WriteUsrIDs (struct Usr_Data *UsrDat,const char *Anchor)
UsrDat->IDs.List[NumID].Confirmed ? "USR_ID_C" : UsrDat->IDs.List[NumID].Confirmed ? "USR_ID_C" :
"USR_ID_NC", "USR_ID_NC",
The_GetSuffix ()); The_GetSuffix ());
if (ICanSeeUsrID == Usr_I_CAN) switch (ICanSeeUsrID)
{
case Usr_I_CAN:
HTM_Txt (UsrDat->IDs.List[NumID].ID); HTM_Txt (UsrDat->IDs.List[NumID].ID);
else break;
case Usr_I_CAN_NOT:
default:
HTM_Txt ("********"); HTM_Txt ("********");
break;
}
HTM_SPAN_End (); HTM_SPAN_End ();
/* Put link to confirm ID? */ /* Put link to confirm ID? */
if (ICanConfirmUsrID == Usr_I_CAN && !UsrDat->IDs.List[NumID].Confirmed) if (ICanConfirmUsrID == Usr_I_CAN &&
!UsrDat->IDs.List[NumID].Confirmed)
ID_PutLinkToConfirmID (UsrDat,NumID,Anchor); ID_PutLinkToConfirmID (UsrDat,NumID,Anchor);
} }
} }
@ -691,9 +698,9 @@ void ID_RemoveOtherUsrID (void)
{ {
/***** Get other user's code from form and get user's data *****/ /***** Get other user's code from form and get user's data *****/
if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ()) if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ())
switch (Usr_CheckIfICanEditOtherUsr (&Gbl.Usrs.Other.UsrDat))
{ {
if (Usr_CheckIfICanEditOtherUsr (&Gbl.Usrs.Other.UsrDat) == Usr_I_CAN) case Usr_I_CAN:
{
/***** Remove user's ID *****/ /***** Remove user's ID *****/
ID_RemoveUsrID (&Gbl.Usrs.Other.UsrDat, ID_RemoveUsrID (&Gbl.Usrs.Other.UsrDat,
Usr_ItsMe (Gbl.Usrs.Other.UsrDat.UsrCod)); Usr_ItsMe (Gbl.Usrs.Other.UsrDat.UsrCod));
@ -703,9 +710,11 @@ void ID_RemoveOtherUsrID (void)
/***** Show form again *****/ /***** Show form again *****/
Acc_ShowFormChgOtherUsrAccount (); Acc_ShowFormChgOtherUsrAccount ();
} break;
else case Usr_I_CAN_NOT:
default:
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
break;
} }
else // User not found else // User not found
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
@ -720,19 +729,18 @@ static void ID_RemoveUsrID (const struct Usr_Data *UsrDat,Usr_MeOrOther_t MeOrOt
extern const char *Txt_ID_X_removed; extern const char *Txt_ID_X_removed;
extern const char *Txt_You_can_not_delete_this_ID; extern const char *Txt_You_can_not_delete_this_ID;
char UsrID[ID_MAX_BYTES_USR_ID + 1]; char UsrID[ID_MAX_BYTES_USR_ID + 1];
Usr_ICan_t ICanRemove; Usr_ICan_t ICanRemove = Usr_I_CAN_NOT;
if (Usr_CheckIfICanEditOtherUsr (UsrDat) == Usr_I_CAN) switch (Usr_CheckIfICanEditOtherUsr (UsrDat))
{ {
case Usr_I_CAN:
/***** Get user's ID from form *****/ /***** Get user's ID from form *****/
Par_GetParText ("UsrID",UsrID,ID_MAX_BYTES_USR_ID); Par_GetParText ("UsrID",UsrID,ID_MAX_BYTES_USR_ID);
// Users' IDs are always stored internally in capitals and without leading zeros // Users' IDs are always stored internally in capitals and without leading zeros
Str_RemoveLeadingZeros (UsrID); Str_RemoveLeadingZeros (UsrID);
Str_ConvertToUpperText (UsrID); Str_ConvertToUpperText (UsrID);
if (UsrDat->IDs.Num < 2) // One unique ID if (UsrDat->IDs.Num >= 2)
ICanRemove = Usr_I_CAN_NOT;
else
switch (MeOrOther) switch (MeOrOther)
{ {
case Usr_ME: case Usr_ME:
@ -741,27 +749,32 @@ static void ID_RemoveUsrID (const struct Usr_Data *UsrDat,Usr_MeOrOther_t MeOrOt
Usr_I_CAN; Usr_I_CAN;
break; break;
case Usr_OTHER: case Usr_OTHER:
default:
ICanRemove = Usr_I_CAN; ICanRemove = Usr_I_CAN;
break; break;
} }
if (ICanRemove == Usr_I_CAN) switch (ICanRemove)
{ {
case Usr_I_CAN:
/***** Remove one of the user's IDs *****/ /***** Remove one of the user's IDs *****/
ID_DB_RemoveUsrID (UsrDat->UsrCod,UsrID); ID_DB_RemoveUsrID (UsrDat->UsrCod,UsrID);
/***** Show message *****/ /***** Show message *****/
Ale_CreateAlert (Ale_SUCCESS,ID_ID_SECTION_ID, Ale_CreateAlert (Ale_SUCCESS,ID_ID_SECTION_ID,
Txt_ID_X_removed, Txt_ID_X_removed,UsrID);
UsrID); break;
} case Usr_I_CAN_NOT:
else default:
Ale_CreateAlert (Ale_WARNING,ID_ID_SECTION_ID, Ale_CreateAlert (Ale_WARNING,ID_ID_SECTION_ID,
Txt_You_can_not_delete_this_ID); Txt_You_can_not_delete_this_ID);
break;
} }
else break;
case Usr_I_CAN_NOT:
default:
Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission (); Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission ();
break;
}
} }
/*****************************************************************************/ /*****************************************************************************/
@ -788,9 +801,9 @@ void ID_ChangeOtherUsrID (void)
{ {
/***** Get other user's code from form and get user's data *****/ /***** Get other user's code from form and get user's data *****/
if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ()) if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ())
switch (Usr_CheckIfICanEditOtherUsr (&Gbl.Usrs.Other.UsrDat))
{ {
if (Usr_CheckIfICanEditOtherUsr (&Gbl.Usrs.Other.UsrDat) == Usr_I_CAN) case Usr_I_CAN:
{
/***** Change user's ID *****/ /***** Change user's ID *****/
ID_ChangeUsrID (&Gbl.Usrs.Other.UsrDat, ID_ChangeUsrID (&Gbl.Usrs.Other.UsrDat,
Usr_ItsMe (Gbl.Usrs.Other.UsrDat.UsrCod)); Usr_ItsMe (Gbl.Usrs.Other.UsrDat.UsrCod));
@ -800,9 +813,11 @@ void ID_ChangeOtherUsrID (void)
/***** Show form again *****/ /***** Show form again *****/
Acc_ShowFormChgOtherUsrAccount (); Acc_ShowFormChgOtherUsrAccount ();
} break;
else case Usr_I_CAN_NOT:
default:
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
break;
} }
else // User not found else // User not found
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
@ -824,8 +839,9 @@ static void ID_ChangeUsrID (const struct Usr_Data *UsrDat,Usr_MeOrOther_t MeOrOt
bool AlreadyExists; bool AlreadyExists;
unsigned NumIDFound = 0; // Initialized to avoid warning unsigned NumIDFound = 0; // Initialized to avoid warning
if (Usr_CheckIfICanEditOtherUsr (UsrDat) == Usr_I_CAN) switch (Usr_CheckIfICanEditOtherUsr (UsrDat))
{ {
case Usr_I_CAN:
/***** Get new user's ID from form *****/ /***** Get new user's ID from form *****/
Par_GetParText ("NewID",NewID,ID_MAX_BYTES_USR_ID); Par_GetParText ("NewID",NewID,ID_MAX_BYTES_USR_ID);
// Users' IDs are always stored internally in capitals and without leading zeros // Users' IDs are always stored internally in capitals and without leading zeros
@ -880,9 +896,12 @@ static void ID_ChangeUsrID (const struct Usr_Data *UsrDat,Usr_MeOrOther_t MeOrOt
Ale_CreateAlert (Ale_WARNING,ID_ID_SECTION_ID, Ale_CreateAlert (Ale_WARNING,ID_ID_SECTION_ID,
Txt_The_ID_X_is_not_valid, Txt_The_ID_X_is_not_valid,
NewID); NewID);
} break;
else case Usr_I_CAN_NOT:
default:
Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission (); Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission ();
break;
}
} }
/*****************************************************************************/ /*****************************************************************************/
@ -917,8 +936,9 @@ void ID_ConfirmOtherUsrID (void)
ICanConfirm = Usr_I_CAN; ICanConfirm = Usr_I_CAN;
} }
if (ICanConfirm == Usr_I_CAN) switch (ICanConfirm)
{ {
case Usr_I_CAN:
/***** Get user's ID from form *****/ /***** Get user's ID from form *****/
Par_GetParText ("UsrID",UsrID,ID_MAX_BYTES_USR_ID); Par_GetParText ("UsrID",UsrID,ID_MAX_BYTES_USR_ID);
// Users' IDs are always stored internally in capitals and without leading zeros // Users' IDs are always stored internally in capitals and without leading zeros
@ -956,9 +976,12 @@ void ID_ConfirmOtherUsrID (void)
} }
else // User's ID not found else // User's ID not found
Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission (); Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission ();
} break;
else // I can not confirm case Usr_I_CAN_NOT:
default:
Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission (); Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission ();
break;
}
/***** Show one or multiple records *****/ /***** Show one or multiple records *****/
switch (Gbl.Action.Original) switch (Gbl.Action.Original)

View File

@ -487,9 +487,9 @@ void Acc_ShowFormChgOtherUsrAccount (void)
{ {
/***** Get user whose account must be changed *****/ /***** Get user whose account must be changed *****/
if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ()) if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ())
switch (Usr_CheckIfICanEditOtherUsr (&Gbl.Usrs.Other.UsrDat))
{ {
if (Usr_CheckIfICanEditOtherUsr (&Gbl.Usrs.Other.UsrDat) == Usr_I_CAN) case Usr_I_CAN:
{
/***** Get user's nickname and email address /***** Get user's nickname and email address
It's necessary because nickname or email could be just updated *****/ It's necessary because nickname or email could be just updated *****/
Nck_DB_GetNicknameFromUsrCod (Gbl.Usrs.Other.UsrDat.UsrCod,Gbl.Usrs.Other.UsrDat.Nickname); Nck_DB_GetNicknameFromUsrCod (Gbl.Usrs.Other.UsrDat.UsrCod,Gbl.Usrs.Other.UsrDat.Nickname);
@ -514,11 +514,13 @@ void Acc_ShowFormChgOtherUsrAccount (void)
ID_ShowFormChangeOtherUsrID (); ID_ShowFormChangeOtherUsrID ();
HTM_DIV_End (); HTM_DIV_End ();
/***** Begin container for this user *****/ /***** End container for this user *****/
HTM_DIV_End (); HTM_DIV_End ();
} break;
else case Usr_I_CAN_NOT:
default:
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
break;
} }
else // User not found else // User not found
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
@ -770,13 +772,17 @@ void Acc_GetUsrCodAndRemUsrGbl (void)
bool Error = false; bool Error = false;
if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ()) if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ())
switch (Acc_CheckIfICanEliminateAccount (Gbl.Usrs.Other.UsrDat.UsrCod))
{ {
if (Acc_CheckIfICanEliminateAccount (Gbl.Usrs.Other.UsrDat.UsrCod) == Usr_I_CAN) case Usr_I_CAN:
Acc_ReqRemAccountOrRemAccount (Acc_REMOVE_USR); Acc_ReqRemAccountOrRemAccount (Acc_REMOVE_USR);
else break;
case Usr_I_CAN_NOT:
default:
Error = true; Error = true;
break;
} }
else else // User not found
Error = true; Error = true;
if (Error) if (Error)
@ -827,11 +833,12 @@ Usr_ICan_t Acc_CheckIfICanEliminateAccount (long UsrCod)
return (Gbl.Usrs.Me.Role.Available & (1 << Rol_SYS_ADM)) == 0 ? Usr_I_CAN : return (Gbl.Usrs.Me.Role.Available & (1 << Rol_SYS_ADM)) == 0 ? Usr_I_CAN :
Usr_I_CAN_NOT; Usr_I_CAN_NOT;
case Usr_OTHER: case Usr_OTHER:
default:
// Only a system admin can eliminate other's account // Only a system admin can eliminate other's account
return Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM ? Usr_I_CAN : return Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM ? Usr_I_CAN :
Usr_I_CAN_NOT; Usr_I_CAN_NOT;
} }
return Usr_I_CAN_NOT;
} }
/*****************************************************************************/ /*****************************************************************************/
@ -1103,7 +1110,6 @@ void Acc_PutIconToChangeUsrAccount (struct Usr_Data *UsrDat)
"at.svg",Ico_BLACK); "at.svg",Ico_BLACK);
break; break;
case Usr_OTHER: case Usr_OTHER:
default:
if (Usr_CheckIfICanEditOtherUsr (UsrDat) == Usr_I_CAN) if (Usr_CheckIfICanEditOtherUsr (UsrDat) == Usr_I_CAN)
Lay_PutContextualLinkOnlyIcon (NextAction[UsrDat->Roles.InCurrentCrs],NULL, Lay_PutContextualLinkOnlyIcon (NextAction[UsrDat->Roles.InCurrentCrs],NULL,
Rec_PutParUsrCodEncrypted,NULL, Rec_PutParUsrCodEncrypted,NULL,

View File

@ -102,8 +102,9 @@ void Adm_ReqAddAdm (Hie_Level_t Level)
(Level == Hie_CTR && Gbl.Usrs.Me.Role.Logged >= Rol_INS_ADM) || (Level == Hie_CTR && Gbl.Usrs.Me.Role.Logged >= Rol_INS_ADM) ||
(Level == Hie_INS && Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM)) ? Usr_I_CAN : (Level == Hie_INS && Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM)) ? Usr_I_CAN :
Usr_I_CAN_NOT; Usr_I_CAN_NOT;
if (ICanRegister == Usr_I_CAN) switch (ICanRegister)
{ {
case Usr_I_CAN:
if (Adm_DB_CheckIfUsrIsAdm (Gbl.Usrs.Other.UsrDat.UsrCod,Level)) // User is already an administrator of current institution/center/degree if (Adm_DB_CheckIfUsrIsAdm (Gbl.Usrs.Other.UsrDat.UsrCod,Level)) // User is already an administrator of current institution/center/degree
{ {
Ale_ShowAlert (Ale_INFO,Txt_THE_USER_X_is_already_an_administrator_of_Y, Ale_ShowAlert (Ale_INFO,Txt_THE_USER_X_is_already_an_administrator_of_Y,
@ -126,9 +127,12 @@ void Adm_ReqAddAdm (Hie_Level_t Level)
Usr_PutParOtherUsrCodEncrypted,Gbl.Usrs.Other.UsrDat.EnUsrCod, Usr_PutParOtherUsrCodEncrypted,Gbl.Usrs.Other.UsrDat.EnUsrCod,
Btn_CREATE_BUTTON,Txt_Register_user_IN_A_COURSE_OR_DEGREE); Btn_CREATE_BUTTON,Txt_Register_user_IN_A_COURSE_OR_DEGREE);
} }
} break;
else case Usr_I_CAN_NOT:
default:
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
break;
}
} }
else else
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
@ -198,16 +202,20 @@ static void Adm_AddAdm (Hie_Level_t Level)
(Level == Hie_CTR && Gbl.Usrs.Me.Role.Logged >= Rol_INS_ADM) || (Level == Hie_CTR && Gbl.Usrs.Me.Role.Logged >= Rol_INS_ADM) ||
(Level == Hie_INS && Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM)) ? Usr_I_CAN : (Level == Hie_INS && Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM)) ? Usr_I_CAN :
Usr_I_CAN_NOT; Usr_I_CAN_NOT;
if (ICanRegister == Usr_I_CAN) switch (ICanRegister)
{ {
case Usr_I_CAN:
/***** Register administrator in current institution/center/degree in database *****/ /***** Register administrator in current institution/center/degree in database *****/
Adm_RegisterAdmin (&Gbl.Usrs.Other.UsrDat,Level); Adm_RegisterAdmin (&Gbl.Usrs.Other.UsrDat,Level);
/***** Show user's record *****/ /***** Show user's record *****/
Rec_ShowSharedRecordUnmodifiable (&Gbl.Usrs.Other.UsrDat); Rec_ShowSharedRecordUnmodifiable (&Gbl.Usrs.Other.UsrDat);
} break;
else case Usr_I_CAN_NOT:
default:
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
break;
}
} }
else else
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
@ -314,8 +322,9 @@ static void Adm_ReqRemOrRemAdm (Enr_ReqDelOrDelUsr_t ReqDelOrDelUsr,
(Level == Hie_CTR && Gbl.Usrs.Me.Role.Logged >= Rol_INS_ADM) || (Level == Hie_CTR && Gbl.Usrs.Me.Role.Logged >= Rol_INS_ADM) ||
(Level == Hie_INS && Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM)) ? Usr_I_CAN : (Level == Hie_INS && Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM)) ? Usr_I_CAN :
Usr_I_CAN_NOT; Usr_I_CAN_NOT;
if (ICanRemove == Usr_I_CAN) switch (ICanRemove)
{ {
case Usr_I_CAN:
/* Check if the other user is an admin of the current institution/center/degree */ /* Check if the other user is an admin of the current institution/center/degree */
if (Adm_DB_CheckIfUsrIsAdm (Gbl.Usrs.Other.UsrDat.UsrCod,Level)) if (Adm_DB_CheckIfUsrIsAdm (Gbl.Usrs.Other.UsrDat.UsrCod,Level))
{ // The other user is an administrator of current institution/center/degree ==> ask for removing or remove her/him { // The other user is an administrator of current institution/center/degree ==> ask for removing or remove her/him
@ -333,9 +342,12 @@ static void Adm_ReqRemOrRemAdm (Enr_ReqDelOrDelUsr_t ReqDelOrDelUsr,
Ale_ShowAlert (Ale_WARNING,Txt_THE_USER_X_is_not_an_administrator_of_Y, Ale_ShowAlert (Ale_WARNING,Txt_THE_USER_X_is_not_an_administrator_of_Y,
Gbl.Usrs.Other.UsrDat.FullName, Gbl.Usrs.Other.UsrDat.FullName,
Gbl.Hierarchy.Node[Level].FullName); Gbl.Hierarchy.Node[Level].FullName);
} break;
else case Usr_I_CAN_NOT:
default:
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
break;
}
} }
else else
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();

View File

@ -393,7 +393,6 @@ void Agd_ShowUsrAgenda (void)
extern const char *Hlp_PROFILE_Agenda_public_agenda; extern const char *Hlp_PROFILE_Agenda_public_agenda;
extern const char *Txt_Public_agenda_USER; extern const char *Txt_Public_agenda_USER;
struct Agd_Agenda Agenda; struct Agd_Agenda Agenda;
bool Error = true;
Usr_MeOrOther_t MeOrOther; Usr_MeOrOther_t MeOrOther;
char *Title; char *Title;
static struct Usr_Data *UsrDat[Usr_NUM_ME_OR_OTHER] = static struct Usr_Data *UsrDat[Usr_NUM_ME_OR_OTHER] =
@ -409,10 +408,9 @@ void Agd_ShowUsrAgenda (void)
/***** Get user *****/ /***** Get user *****/
if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ()) if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ())
if (Agd_CheckIfICanViewUsrAgenda (&Gbl.Usrs.Other.UsrDat) == Usr_I_CAN) switch (Agd_CheckIfICanViewUsrAgenda (&Gbl.Usrs.Other.UsrDat))
{ {
Error = false; case Usr_I_CAN:
/***** Reset agenda context *****/ /***** Reset agenda context *****/
Agd_ResetAgenda (&Agenda); Agd_ResetAgenda (&Agenda);
@ -433,9 +431,13 @@ void Agd_ShowUsrAgenda (void)
/***** End box *****/ /***** End box *****/
Box_BoxEnd (); Box_BoxEnd ();
break;
case Usr_I_CAN_NOT:
default:
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
break;
} }
else
if (Error)
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
} }

View File

@ -1757,20 +1757,22 @@ static void Att_WriteRowUsrToCallTheRoll (unsigned NumUsr,
"DAT_SMALL", "DAT_SMALL",
The_GetSuffix (), The_GetSuffix (),
The_GetColorRows ()); The_GetColorRows ());
if (ICanEditStdComment == Usr_I_CAN) // Show with form switch (ICanEditStdComment)
{ {
case Usr_I_CAN: // Show with form
HTM_TEXTAREA_Begin ("name=\"CommentStd%s\" cols=\"40\" rows=\"3\"" HTM_TEXTAREA_Begin ("name=\"CommentStd%s\" cols=\"40\" rows=\"3\""
" class=\"INPUT_%s\"", " class=\"INPUT_%s\"",
UsrDat->EnUsrCod, UsrDat->EnUsrCod,
The_GetSuffix ()); The_GetSuffix ());
HTM_Txt (CommentStd); HTM_Txt (CommentStd);
HTM_TEXTAREA_End (); HTM_TEXTAREA_End ();
} break;
else // Show without form case Usr_I_CAN_NOT: // Show without form
{ default:
Str_ChangeFormat (Str_FROM_HTML,Str_TO_RIGOROUS_HTML, Str_ChangeFormat (Str_FROM_HTML,Str_TO_RIGOROUS_HTML,
CommentStd,Cns_MAX_BYTES_TEXT,Str_DONT_REMOVE_SPACES); CommentStd,Cns_MAX_BYTES_TEXT,Str_DONT_REMOVE_SPACES);
HTM_Txt (CommentStd); HTM_Txt (CommentStd);
break;
} }
HTM_TD_End (); HTM_TD_End ();
@ -1780,22 +1782,27 @@ static void Att_WriteRowUsrToCallTheRoll (unsigned NumUsr,
"DAT_SMALL", "DAT_SMALL",
The_GetSuffix (), The_GetSuffix (),
The_GetColorRows ()); The_GetColorRows ());
if (ICanEditTchComment == Usr_I_CAN) // Show with form switch (ICanEditTchComment)
{ {
case Usr_I_CAN: // Show with form
HTM_TEXTAREA_Begin ("name=\"CommentTch%s\" cols=\"40\" rows=\"3\"" HTM_TEXTAREA_Begin ("name=\"CommentTch%s\" cols=\"40\" rows=\"3\""
" class=\"INPUT_%s\"", " class=\"INPUT_%s\"",
UsrDat->EnUsrCod, UsrDat->EnUsrCod,
The_GetSuffix ()); The_GetSuffix ());
HTM_Txt (CommentTch); HTM_Txt (CommentTch);
HTM_TEXTAREA_End (); HTM_TEXTAREA_End ();
} break;
else if (Event->CommentTchVisible) // Show without form case Usr_I_CAN_NOT: // Show without form
default:
if (Event->CommentTchVisible)
{ {
Str_ChangeFormat (Str_FROM_HTML,Str_TO_RIGOROUS_HTML, Str_ChangeFormat (Str_FROM_HTML,Str_TO_RIGOROUS_HTML,
CommentTch,Cns_MAX_BYTES_TEXT, CommentTch,Cns_MAX_BYTES_TEXT,
Str_DONT_REMOVE_SPACES); Str_DONT_REMOVE_SPACES);
HTM_Txt (CommentTch); HTM_Txt (CommentTch);
} }
break;
}
HTM_TD_End (); HTM_TD_End ();
/***** End table row *****/ /***** End table row *****/

View File

@ -4183,25 +4183,35 @@ static void Brw_PutIconRemove (void)
{ {
HTM_TD_Begin ("class=\"BM %s\"",The_GetColorRows ()); HTM_TD_Begin ("class=\"BM %s\"",The_GetColorRows ());
if (Brw_GetIfICanEditFileOrFolder () == Usr_I_CAN) // Can I remove this? switch (Brw_GetIfICanEditFileOrFolder ()) // Can I remove this?
{
case Usr_I_CAN:
switch (Gbl.FileBrowser.FilFolLnk.Type) switch (Gbl.FileBrowser.FilFolLnk.Type)
{ {
case Brw_IS_FILE: case Brw_IS_FILE:
case Brw_IS_LINK: case Brw_IS_LINK:
/***** Form to remove a file or link *****/ /***** Form to remove a file or link *****/
Ico_PutContextualIconToRemove (Brw_ActAskRemoveFile[Gbl.FileBrowser.Type],NULL, Ico_PutContextualIconToRemove (Brw_ActAskRemoveFile[Gbl.FileBrowser.Type],
Brw_PutImplicitParsFileBrowser,&Gbl.FileBrowser.FilFolLnk); NULL,
Brw_PutImplicitParsFileBrowser,
&Gbl.FileBrowser.FilFolLnk);
break; break;
case Brw_IS_FOLDER: case Brw_IS_FOLDER:
/***** Form to remove a folder *****/ /***** Form to remove a folder *****/
Ico_PutContextualIconToRemove (Brw_ActRemoveFolder[Gbl.FileBrowser.Type],NULL, Ico_PutContextualIconToRemove (Brw_ActRemoveFolder[Gbl.FileBrowser.Type],
Brw_PutImplicitParsFileBrowser,&Gbl.FileBrowser.FilFolLnk); NULL,
Brw_PutImplicitParsFileBrowser,
&Gbl.FileBrowser.FilFolLnk);
break; break;
default: default:
break; break;
} }
else break;
case Usr_I_CAN_NOT:
default:
Ico_PutIconRemovalNotAllowed (); Ico_PutIconRemovalNotAllowed ();
break;
}
HTM_TD_End (); HTM_TD_End ();
} }
@ -4232,17 +4242,20 @@ static void Brw_PutIconPaste (unsigned Level)
HTM_TD_Begin ("class=\"BM %s\"",The_GetColorRows ()); HTM_TD_Begin ("class=\"BM %s\"",The_GetColorRows ());
if (Gbl.FileBrowser.FilFolLnk.Type == Brw_IS_FOLDER) // Can't paste in a file or link if (Gbl.FileBrowser.FilFolLnk.Type == Brw_IS_FOLDER) // Can't paste in a file or link
/***** Icon to paste *****/
switch (Brw_CheckIfCanPasteIn (Level))
{ {
/* Icon to paste */ case Usr_I_CAN:
if (Brw_CheckIfCanPasteIn (Level) == Usr_I_CAN) /* Form to paste the content of the clipboard */
{
/***** Form to paste the content of the clipboard *****/
Ico_PutContextualIconToPaste (Brw_ActPaste[Gbl.FileBrowser.Type], Ico_PutContextualIconToPaste (Brw_ActPaste[Gbl.FileBrowser.Type],
Brw_PutImplicitParsFileBrowser,&Gbl.FileBrowser.FilFolLnk); Brw_PutImplicitParsFileBrowser,
} &Gbl.FileBrowser.FilFolLnk);
else break;
case Usr_I_CAN_NOT:
default:
/* Icon to paste inactive */ /* Icon to paste inactive */
Ico_PutIconOff ("paste.svg",Ico_BLACK,Txt_Copy_not_allowed); Ico_PutIconOff ("paste.svg",Ico_BLACK,Txt_Copy_not_allowed);
break;
} }
HTM_TD_End (); HTM_TD_End ();
@ -4464,59 +4477,61 @@ static void Brw_PutIconFolder (unsigned Level,
HTM_TD_Begin ("class=\"BM %s\"",The_GetColorRows ()); HTM_TD_Begin ("class=\"BM %s\"",The_GetColorRows ());
/***** Put icon to create a new file or folder *****/ /***** Put icon to create a new file or folder *****/
if (Brw_CheckIfICanCreateIntoFolder (Level) == Usr_I_CAN) // I can create a new file or folder switch (Brw_CheckIfICanCreateIntoFolder (Level)) // I can create a new file or folder
{ {
case Usr_I_CAN:
if (IconSubtree == Brw_ICON_TREE_EXPAND) if (IconSubtree == Brw_ICON_TREE_EXPAND)
{ {
/***** Visible icon with folder closed *****/ /* Visible icon with folder closed */
Brw_PutIconFolderWithPlus (FileBrowserId,RowId, Brw_PutIconFolderWithPlus (FileBrowserId,RowId,
false, // Closed false, // Closed
HidVis_VISIBLE); // Visible HidVis_VISIBLE); // Visible
/***** Hidden icon with folder open *****/ /* Hidden icon with folder open */
Brw_PutIconFolderWithPlus (FileBrowserId,RowId, Brw_PutIconFolderWithPlus (FileBrowserId,RowId,
true, // Open true, // Open
HidVis_HIDDEN); // Hidden HidVis_HIDDEN); // Hidden
} }
else else
{ {
/***** Hidden icon with folder closed *****/ /* Hidden icon with folder closed */
Brw_PutIconFolderWithPlus (FileBrowserId,RowId, Brw_PutIconFolderWithPlus (FileBrowserId,RowId,
false, // Closed false, // Closed
HidVis_HIDDEN); // Hidden HidVis_HIDDEN); // Hidden
/***** Visible icon with folder open *****/ /* Visible icon with folder open */
Brw_PutIconFolderWithPlus (FileBrowserId,RowId, Brw_PutIconFolderWithPlus (FileBrowserId,RowId,
true, // Open true, // Open
HidVis_VISIBLE); // Visible HidVis_VISIBLE); // Visible
} }
} break;
else // I can't create a new file or folder case Usr_I_CAN_NOT:
{ default:
if (IconSubtree == Brw_ICON_TREE_EXPAND) if (IconSubtree == Brw_ICON_TREE_EXPAND)
{ {
/***** Visible icon with folder closed *****/ /* Visible icon with folder closed */
Brw_PutIconFolderWithoutPlus (FileBrowserId,RowId, Brw_PutIconFolderWithoutPlus (FileBrowserId,RowId,
false, // Closed false, // Closed
HidVis_VISIBLE); HidVis_VISIBLE);
/***** Hidden icon with folder open *****/ /* Hidden icon with folder open */
Brw_PutIconFolderWithoutPlus (FileBrowserId,RowId, Brw_PutIconFolderWithoutPlus (FileBrowserId,RowId,
true, // Open true, // Open
HidVis_HIDDEN); HidVis_HIDDEN);
} }
else else
{ {
/***** Hidden icon with folder closed *****/ /* Hidden icon with folder closed */
Brw_PutIconFolderWithoutPlus (FileBrowserId,RowId, Brw_PutIconFolderWithoutPlus (FileBrowserId,RowId,
false, // Closed false, // Closed
HidVis_HIDDEN); HidVis_HIDDEN);
/***** Visible icon with folder open *****/ /* Visible icon with folder open */
Brw_PutIconFolderWithoutPlus (FileBrowserId,RowId, Brw_PutIconFolderWithoutPlus (FileBrowserId,RowId,
true, // Open true, // Open
HidVis_VISIBLE); HidVis_VISIBLE);
} }
break;
} }
/***** End cell *****/ /***** End cell *****/
@ -4720,12 +4735,14 @@ static void Brw_WriteFileName (unsigned Level,bool IsPublic,
HTM_NBSP (); HTM_NBSP ();
if (Brw_GetIfICanEditFileOrFolder () == Usr_I_CAN) // Can I rename this folder? switch (Brw_GetIfICanEditFileOrFolder ()) // Can I rename this folder?
{ {
case Usr_I_CAN:
/***** Form to rename folder *****/ /***** Form to rename folder *****/
Frm_BeginForm (Brw_ActRenameFolder[Gbl.FileBrowser.Type]); Frm_BeginForm (Brw_ActRenameFolder[Gbl.FileBrowser.Type]);
Brw_PutImplicitParsFileBrowser (&Gbl.FileBrowser.FilFolLnk); Brw_PutImplicitParsFileBrowser (&Gbl.FileBrowser.FilFolLnk);
HTM_INPUT_TEXT ("NewFolderName",Brw_MAX_CHARS_FOLDER,Gbl.FileBrowser.FilFolLnk.Name, HTM_INPUT_TEXT ("NewFolderName",Brw_MAX_CHARS_FOLDER,
Gbl.FileBrowser.FilFolLnk.Name,
HTM_SUBMIT_ON_CHANGE, HTM_SUBMIT_ON_CHANGE,
"class=\"LST_EDIT %s_%s %s\"", "class=\"LST_EDIT %s_%s %s\"",
InputStyle, InputStyle,
@ -4733,9 +4750,9 @@ static void Brw_WriteFileName (unsigned Level,bool IsPublic,
Gbl.FileBrowser.Clipboard.IsThisFile ? "LIGHT_GREEN" : Gbl.FileBrowser.Clipboard.IsThisFile ? "LIGHT_GREEN" :
The_GetColorRows ()); The_GetColorRows ());
Frm_EndForm (); Frm_EndForm ();
} break;
else case Usr_I_CAN_NOT:
{ default:
/***** Write name of the folder *****/ /***** Write name of the folder *****/
if (Level == 1 && Brw_TypeIsAdmAsg[Gbl.FileBrowser.Type]) if (Level == 1 && Brw_TypeIsAdmAsg[Gbl.FileBrowser.Type])
HTM_SPAN_Begin ("title=\"%s\"",Gbl.FileBrowser.Asg.Title); HTM_SPAN_Begin ("title=\"%s\"",Gbl.FileBrowser.Asg.Title);
@ -4747,6 +4764,7 @@ static void Brw_WriteFileName (unsigned Level,bool IsPublic,
if (Level == 1 && Brw_TypeIsAdmAsg[Gbl.FileBrowser.Type]) if (Level == 1 && Brw_TypeIsAdmAsg[Gbl.FileBrowser.Type])
HTM_SPAN_End (); HTM_SPAN_End ();
break;
} }
/***** End cell *****/ /***** End cell *****/
@ -4934,8 +4952,9 @@ void Brw_AskRemFileFromTree (void)
Brw_GetParAndInitFileBrowser (); Brw_GetParAndInitFileBrowser ();
/***** Button of confirmation of removing *****/ /***** Button of confirmation of removing *****/
if (Brw_CheckIfICanEditFileOrFolder (Gbl.FileBrowser.Level) == Usr_I_CAN) // Can I remove this file? switch (Brw_CheckIfICanEditFileOrFolder (Gbl.FileBrowser.Level)) // Can I remove this file?
{ {
case Usr_I_CAN:
/***** Show question and button to remove file/link *****/ /***** Show question and button to remove file/link *****/
Brw_GetFileNameToShowDependingOnLevel (Gbl.FileBrowser.Type, Brw_GetFileNameToShowDependingOnLevel (Gbl.FileBrowser.Type,
Gbl.FileBrowser.Level, Gbl.FileBrowser.Level,
@ -4946,9 +4965,12 @@ void Brw_AskRemFileFromTree (void)
Brw_PutImplicitParsFileBrowser,&Gbl.FileBrowser.FilFolLnk, Brw_PutImplicitParsFileBrowser,&Gbl.FileBrowser.FilFolLnk,
Txt_Do_you_really_want_to_remove_FILE_OR_LINK_X, Txt_Do_you_really_want_to_remove_FILE_OR_LINK_X,
FileNameToShow); FileNameToShow);
} break;
else case Usr_I_CAN_NOT:
default:
Err_ShowErrorAndExit (Txt_You_can_not_remove_this_file_or_link); Err_ShowErrorAndExit (Txt_You_can_not_remove_this_file_or_link);
break;
}
/***** Show again file browser *****/ /***** Show again file browser *****/
Brw_ShowAgainFileBrowserOrWorks (); Brw_ShowAgainFileBrowserOrWorks ();
@ -4969,8 +4991,9 @@ void Brw_RemFileFromTree (void)
/***** Get parameters related to file browser *****/ /***** Get parameters related to file browser *****/
Brw_GetParAndInitFileBrowser (); Brw_GetParAndInitFileBrowser ();
if (Brw_CheckIfICanEditFileOrFolder (Gbl.FileBrowser.Level) == Usr_I_CAN) // Can I remove this file? switch (Brw_CheckIfICanEditFileOrFolder (Gbl.FileBrowser.Level)) // Can I remove this file?
{ {
case Usr_I_CAN:
snprintf (Path,sizeof (Path),"%s/%s", snprintf (Path,sizeof (Path),"%s/%s",
Gbl.FileBrowser.Path.AboveRootFolder, Gbl.FileBrowser.Path.AboveRootFolder,
Gbl.FileBrowser.FilFolLnk.Full); Gbl.FileBrowser.FilFolLnk.Full);
@ -5000,9 +5023,12 @@ void Brw_RemFileFromTree (void)
} }
else // File / link not found else // File / link not found
Err_FileFolderNotFoundExit (); Err_FileFolderNotFoundExit ();
} break;
else case Usr_I_CAN_NOT:
default:
Err_ShowErrorAndExit (Txt_You_can_not_remove_this_file_or_link); Err_ShowErrorAndExit (Txt_You_can_not_remove_this_file_or_link);
break;
}
/***** Show again file browser *****/ /***** Show again file browser *****/
Brw_ShowAgainFileBrowserOrWorks (); Brw_ShowAgainFileBrowserOrWorks ();
@ -5022,8 +5048,9 @@ void Brw_RemFolderFromTree (void)
/***** Get parameters related to file browser *****/ /***** Get parameters related to file browser *****/
Brw_GetParAndInitFileBrowser (); Brw_GetParAndInitFileBrowser ();
if (Brw_CheckIfICanEditFileOrFolder (Gbl.FileBrowser.Level) == Usr_I_CAN) // Can I remove this folder? switch (Brw_CheckIfICanEditFileOrFolder (Gbl.FileBrowser.Level)) // Can I remove this folder?
{ {
case Usr_I_CAN:
snprintf (Path,sizeof (Path),"%s/%s", snprintf (Path,sizeof (Path),"%s/%s",
Gbl.FileBrowser.Path.AboveRootFolder, Gbl.FileBrowser.Path.AboveRootFolder,
Gbl.FileBrowser.FilFolLnk.Full); Gbl.FileBrowser.FilFolLnk.Full);
@ -5053,9 +5080,12 @@ void Brw_RemFolderFromTree (void)
} }
else // Folder not found else // Folder not found
Err_FileFolderNotFoundExit (); Err_FileFolderNotFoundExit ();
} break;
else case Usr_I_CAN_NOT:
default:
Err_ShowErrorAndExit (Txt_You_can_not_remove_this_folder); Err_ShowErrorAndExit (Txt_You_can_not_remove_this_folder);
break;
}
/***** Show again file browser *****/ /***** Show again file browser *****/
Brw_ShowAgainFileBrowserOrWorks (); Brw_ShowAgainFileBrowserOrWorks ();
@ -5769,8 +5799,9 @@ static void Brw_PasteClipboard (struct BrwSiz_BrowserSize *Size)
Pasted.NumFolds = 0; Pasted.NumFolds = 0;
Gbl.FileBrowser.Clipboard.IsThisTree = Brw_CheckIfClipboardIsInThisTree (); Gbl.FileBrowser.Clipboard.IsThisTree = Brw_CheckIfClipboardIsInThisTree ();
if (Brw_CheckIfCanPasteIn (Gbl.FileBrowser.Level) == Usr_I_CAN) switch (Brw_CheckIfCanPasteIn (Gbl.FileBrowser.Level))
{ {
case Usr_I_CAN:
/***** Construct the relative path of the origin file or folder *****/ /***** Construct the relative path of the origin file or folder *****/
switch (Gbl.FileBrowser.Clipboard.FileBrowser) switch (Gbl.FileBrowser.Clipboard.FileBrowser)
{ {
@ -5949,9 +5980,13 @@ static void Brw_PasteClipboard (struct BrwSiz_BrowserSize *Size)
/***** Add path where new tree is pasted to table of expanded folders *****/ /***** Add path where new tree is pasted to table of expanded folders *****/
Brw_InsFoldersInPathAndUpdOtherFoldersInExpandedFolders (Gbl.FileBrowser.FilFolLnk.Full); Brw_InsFoldersInPathAndUpdOtherFoldersInExpandedFolders (Gbl.FileBrowser.FilFolLnk.Full);
break;
case Usr_I_CAN_NOT:
default:
// It's difficult, but not impossible that a user sees this message
Err_ShowErrorAndExit (Txt_You_can_not_paste_file_or_folder_here);
break;
} }
else
Err_ShowErrorAndExit (Txt_You_can_not_paste_file_or_folder_here); // It's difficult, but not impossible that a user sees this message
} }
/*****************************************************************************/ /*****************************************************************************/
@ -6190,8 +6225,9 @@ void Brw_ShowFormFileBrowser (void)
Brw_GetParAndInitFileBrowser (); Brw_GetParAndInitFileBrowser ();
/***** Check if creating a new folder or file is allowed *****/ /***** Check if creating a new folder or file is allowed *****/
if (Brw_CheckIfICanCreateIntoFolder (Gbl.FileBrowser.Level) == Usr_I_CAN) switch (Brw_CheckIfICanCreateIntoFolder (Gbl.FileBrowser.Level))
{ {
case Usr_I_CAN:
/***** Name of the folder to be shown ****/ /***** Name of the folder to be shown ****/
Brw_GetFileNameToShowDependingOnLevel (Gbl.FileBrowser.Type, Brw_GetFileNameToShowDependingOnLevel (Gbl.FileBrowser.Type,
Gbl.FileBrowser.Level, Gbl.FileBrowser.Level,
@ -6221,13 +6257,14 @@ void Brw_ShowFormFileBrowser (void)
if (Gbl.FileBrowser.Type != Brw_ADMI_MRK_CRS && if (Gbl.FileBrowser.Type != Brw_ADMI_MRK_CRS &&
Gbl.FileBrowser.Type != Brw_ADMI_MRK_GRP) // Do not create links in marks Gbl.FileBrowser.Type != Brw_ADMI_MRK_GRP) // Do not create links in marks
Brw_PutFormToCreateALink (FileNameToShow); Brw_PutFormToCreateALink (FileNameToShow);
} break;
else case Usr_I_CAN_NOT:
{ default:
Err_ShowErrorAndExit (Txt_You_can_not_create_folders_files_or_links_here); // It's difficult, but not impossible that a user sees this message Err_ShowErrorAndExit (Txt_You_can_not_create_folders_files_or_links_here); // It's difficult, but not impossible that a user sees this message
/***** Show again file browser *****/ /***** Show again file browser *****/
Brw_ShowAgainFileBrowserOrWorks (); Brw_ShowAgainFileBrowserOrWorks ();
break;
} }
} }
@ -6486,8 +6523,9 @@ void Brw_RecFolderFileBrowser (void)
Brw_GetParAndInitFileBrowser (); Brw_GetParAndInitFileBrowser ();
/***** Check if creating a new folder is allowed *****/ /***** Check if creating a new folder is allowed *****/
if (Brw_CheckIfICanCreateIntoFolder (Gbl.FileBrowser.Level) == Usr_I_CAN) switch (Brw_CheckIfICanCreateIntoFolder (Gbl.FileBrowser.Level))
{ {
case Usr_I_CAN:
if (Str_ConvertFilFolLnkNameToValid (Gbl.FileBrowser.NewFilFolLnkName)) if (Str_ConvertFilFolLnkNameToValid (Gbl.FileBrowser.NewFilFolLnkName))
{ {
/* In Gbl.FileBrowser.NewFilFolLnkName is the name of the new folder */ /* In Gbl.FileBrowser.NewFilFolLnkName is the name of the new folder */
@ -6560,9 +6598,13 @@ void Brw_RecFolderFileBrowser (void)
} }
else // Folder name not valid else // Folder name not valid
Ale_ShowAlerts (NULL); Ale_ShowAlerts (NULL);
break;
case Usr_I_CAN_NOT:
default:
// It's difficult, but not impossible that a user sees this message
Err_ShowErrorAndExit (Txt_You_can_not_create_folders_here);
break;
} }
else
Err_ShowErrorAndExit (Txt_You_can_not_create_folders_here); // It's difficult, but not impossible that a user sees this message
/***** Show again the file browser *****/ /***** Show again the file browser *****/
Brw_ShowAgainFileBrowserOrWorks (); Brw_ShowAgainFileBrowserOrWorks ();
@ -6586,11 +6628,13 @@ void Brw_RenFolderFileBrowser (void)
/***** Get parameters related to file browser *****/ /***** Get parameters related to file browser *****/
Brw_GetParAndInitFileBrowser (); Brw_GetParAndInitFileBrowser ();
if (Brw_CheckIfICanEditFileOrFolder (Gbl.FileBrowser.Level) == Usr_I_CAN) // Can I rename this folder? switch (Brw_CheckIfICanEditFileOrFolder (Gbl.FileBrowser.Level)) // Can I rename this folder?
{ {
case Usr_I_CAN:
if (Str_ConvertFilFolLnkNameToValid (Gbl.FileBrowser.NewFilFolLnkName)) if (Str_ConvertFilFolLnkNameToValid (Gbl.FileBrowser.NewFilFolLnkName))
{ {
if (strcmp (Gbl.FileBrowser.FilFolLnk.Name,Gbl.FileBrowser.NewFilFolLnkName)) // The name has changed if (strcmp (Gbl.FileBrowser.FilFolLnk.Name,
Gbl.FileBrowser.NewFilFolLnkName)) // The name has changed
{ {
/* Gbl.FileBrowser.FilFolLnk.Name holds the new name of the folder */ /* Gbl.FileBrowser.FilFolLnk.Name holds the new name of the folder */
snprintf (OldPathInTree,sizeof (OldPathInTree),"%s/%s", snprintf (OldPathInTree,sizeof (OldPathInTree),"%s/%s",
@ -6621,8 +6665,10 @@ void Brw_RenFolderFileBrowser (void)
case ENOTEMPTY: case ENOTEMPTY:
case EEXIST: case EEXIST:
case ENOTDIR: case ENOTDIR:
Ale_ShowAlert (Ale_WARNING,Txt_The_folder_name_X_has_not_changed_because_there_is_already_a_folder_or_a_file_with_the_name_Y, Ale_ShowAlert (Ale_WARNING,
Gbl.FileBrowser.FilFolLnk.Name,Gbl.FileBrowser.NewFilFolLnkName); Txt_The_folder_name_X_has_not_changed_because_there_is_already_a_folder_or_a_file_with_the_name_Y,
Gbl.FileBrowser.FilFolLnk.Name,
Gbl.FileBrowser.NewFilFolLnkName);
break; break;
case EACCES: case EACCES:
Err_ShowErrorAndExit ("Write forbidden."); Err_ShowErrorAndExit ("Write forbidden.");
@ -6669,9 +6715,12 @@ void Brw_RenFolderFileBrowser (void)
} }
else // Folder name not valid else // Folder name not valid
Ale_ShowAlerts (NULL); Ale_ShowAlerts (NULL);
} break;
else case Usr_I_CAN_NOT:
default:
Err_ShowErrorAndExit (Txt_You_can_not_rename_this_folder); Err_ShowErrorAndExit (Txt_You_can_not_rename_this_folder);
break;
}
/***** Show again file browser *****/ /***** Show again file browser *****/
Brw_ShowAgainFileBrowserOrWorks (); Brw_ShowAgainFileBrowserOrWorks ();
@ -6757,8 +6806,9 @@ static bool Brw_RcvFileInFileBrw (struct BrwSiz_BrowserSize *Size,
Brw_GetParAndInitFileBrowser (); Brw_GetParAndInitFileBrowser ();
/***** Check if creating a new file is allowed *****/ /***** Check if creating a new file is allowed *****/
if (Brw_CheckIfICanCreateIntoFolder (Gbl.FileBrowser.Level) == Usr_I_CAN) switch (Brw_CheckIfICanCreateIntoFolder (Gbl.FileBrowser.Level))
{ {
case Usr_I_CAN:
/***** First, we save in disk the file received *****/ /***** First, we save in disk the file received *****/
Par = Fil_StartReceptionOfFile (Fil_NAME_OF_PARAM_FILENAME_ORG, Par = Fil_StartReceptionOfFile (Fil_NAME_OF_PARAM_FILENAME_ORG,
SrcFileName,MIMEType); SrcFileName,MIMEType);
@ -6901,10 +6951,14 @@ static bool Brw_RcvFileInFileBrw (struct BrwSiz_BrowserSize *Size,
else // Empty filename else // Empty filename
Ale_CreateAlert (Ale_WARNING,NULL, Ale_CreateAlert (Ale_WARNING,NULL,
Txt_UPLOAD_FILE_You_must_specify_the_file_NO_HTML); Txt_UPLOAD_FILE_You_must_specify_the_file_NO_HTML);
} break;
else // I do not have permission to create files here case Usr_I_CAN_NOT:
default:
// I do not have permission to create files here
Ale_CreateAlert (Ale_WARNING,NULL, Ale_CreateAlert (Ale_WARNING,NULL,
Txt_UPLOAD_FILE_Forbidden_NO_HTML); Txt_UPLOAD_FILE_Forbidden_NO_HTML);
break;
}
return UploadSucessful; return UploadSucessful;
} }
@ -6937,8 +6991,9 @@ void Brw_RecLinkFileBrowser (void)
Brw_GetParAndInitFileBrowser (); Brw_GetParAndInitFileBrowser ();
/***** Check if creating a new link is allowed *****/ /***** Check if creating a new link is allowed *****/
if (Brw_CheckIfICanCreateIntoFolder (Gbl.FileBrowser.Level) == Usr_I_CAN) switch (Brw_CheckIfICanCreateIntoFolder (Gbl.FileBrowser.Level))
{ {
case Usr_I_CAN:
/***** Create a new file to store URL ****/ /***** Create a new file to store URL ****/
Par_GetParText ("NewLinkURL",URL,PATH_MAX); Par_GetParText ("NewLinkURL",URL,PATH_MAX);
if ((LengthURL = strlen (URL))) if ((LengthURL = strlen (URL)))
@ -7071,9 +7126,13 @@ void Brw_RecLinkFileBrowser (void)
} }
else // Link URL not valid else // Link URL not valid
Ale_ShowAlert (Ale_WARNING,Txt_UPLOAD_FILE_Invalid_link); Ale_ShowAlert (Ale_WARNING,Txt_UPLOAD_FILE_Invalid_link);
break;
case Usr_I_CAN_NOT:
default:
// It's difficult, but not impossible that a user sees this message
Err_ShowErrorAndExit (Txt_You_can_not_create_links_here);
break;
} }
else
Err_ShowErrorAndExit (Txt_You_can_not_create_links_here); // It's difficult, but not impossible that a user sees this message
/***** Show again the file browser *****/ /***** Show again the file browser *****/
Brw_ShowAgainFileBrowserOrWorks (); Brw_ShowAgainFileBrowserOrWorks ();
@ -7313,8 +7372,9 @@ void Brw_ShowFileMetadata (void)
} }
} }
if (ICanView == Usr_I_CAN) switch (ICanView)
{ {
case Usr_I_CAN:
if (FileMetadata.FilFolLnk.Type == Brw_IS_FILE || if (FileMetadata.FilFolLnk.Type == Brw_IS_FILE ||
FileMetadata.FilFolLnk.Type == Brw_IS_LINK) FileMetadata.FilFolLnk.Type == Brw_IS_LINK)
{ {
@ -7354,15 +7414,14 @@ void Brw_ShowFileMetadata (void)
/***** Begin box *****/ /***** Begin box *****/
// Put icon to get link? // Put icon to get link?
if (Brw_ActReqLnk[Gbl.FileBrowser.Type] != ActUnk && if ((Brw_ActReqLnk[Gbl.FileBrowser.Type] != ActUnk &&
(FileMetadata.FilFolLnk.Type == Brw_IS_FILE || // Only files or links (FileMetadata.FilFolLnk.Type == Brw_IS_FILE || // Only files or links
FileMetadata.FilFolLnk.Type == Brw_IS_LINK) && FileMetadata.FilFolLnk.Type == Brw_IS_LINK) &&
Rsc_CheckIfICanGetLink () == Usr_I_CAN) Rsc_CheckIfICanGetLink ()) == Usr_I_CAN)
Box_BoxShadowBegin (NULL,Brw_PutIconToGetLinkToFile,&FileMetadata, Box_BoxShadowBegin (NULL,Brw_PutIconToGetLinkToFile,
NULL); &FileMetadata,NULL);
else else
Box_BoxShadowBegin (NULL,NULL,NULL, Box_BoxShadowBegin (NULL,NULL,NULL,NULL);
NULL);
/***** Begin form to update the metadata of a file *****/ /***** Begin form to update the metadata of a file *****/
@ -7371,14 +7430,10 @@ void Brw_ShowFileMetadata (void)
/* Can the file be public? */ /* Can the file be public? */
switch (Gbl.FileBrowser.Type) switch (Gbl.FileBrowser.Type)
{ {
case Brw_ADMI_DOC_INS: case Brw_ADMI_DOC_INS: case Brw_ADMI_SHR_INS:
case Brw_ADMI_SHR_INS: case Brw_ADMI_DOC_CTR: case Brw_ADMI_SHR_CTR:
case Brw_ADMI_DOC_CTR: case Brw_ADMI_DOC_DEG: case Brw_ADMI_SHR_DEG:
case Brw_ADMI_SHR_CTR: case Brw_ADMI_DOC_CRS: case Brw_ADMI_SHR_CRS:
case Brw_ADMI_DOC_DEG:
case Brw_ADMI_SHR_DEG:
case Brw_ADMI_DOC_CRS:
case Brw_ADMI_SHR_CRS:
ICanChangePublic = Usr_I_CAN; ICanChangePublic = Usr_I_CAN;
break; break;
default: default:
@ -7630,33 +7685,27 @@ void Brw_ShowFileMetadata (void)
/***** Add paths until file to table of expanded folders *****/ /***** Add paths until file to table of expanded folders *****/
Brw_InsFoldersInPathAndUpdOtherFoldersInExpandedFolders (Gbl.FileBrowser.FilFolLnk.Path); Brw_InsFoldersInPathAndUpdOtherFoldersInExpandedFolders (Gbl.FileBrowser.FilFolLnk.Path);
} break;
else // ICanView == Usr_I_CAN_NOT case Usr_I_CAN_NOT:
{ default:
/***** Mark possible notifications about non visible file as removed *****/ /***** Mark possible notifications about non visible file as removed *****/
switch (Gbl.FileBrowser.Type) switch (Gbl.FileBrowser.Type)
{ {
case Brw_SHOW_DOC_CRS: case Brw_SHOW_DOC_CRS: case Brw_SHOW_DOC_GRP:
case Brw_SHOW_DOC_GRP: case Brw_ADMI_DOC_CRS: case Brw_ADMI_DOC_GRP:
case Brw_ADMI_DOC_CRS:
case Brw_ADMI_DOC_GRP:
Ntf_DB_MarkNotifAsRemoved (Ntf_EVENT_DOCUMENT_FILE, Ntf_DB_MarkNotifAsRemoved (Ntf_EVENT_DOCUMENT_FILE,
FileMetadata.FilCod); FileMetadata.FilCod);
break; break;
case Brw_ADMI_TCH_CRS: case Brw_ADMI_TCH_CRS: case Brw_ADMI_TCH_GRP:
case Brw_ADMI_TCH_GRP:
Ntf_DB_MarkNotifAsRemoved (Ntf_EVENT_TEACHERS_FILE, Ntf_DB_MarkNotifAsRemoved (Ntf_EVENT_TEACHERS_FILE,
FileMetadata.FilCod); FileMetadata.FilCod);
break; break;
case Brw_ADMI_SHR_CRS: case Brw_ADMI_SHR_CRS: case Brw_ADMI_SHR_GRP:
case Brw_ADMI_SHR_GRP:
Ntf_DB_MarkNotifAsRemoved (Ntf_EVENT_SHARED_FILE, Ntf_DB_MarkNotifAsRemoved (Ntf_EVENT_SHARED_FILE,
FileMetadata.FilCod); FileMetadata.FilCod);
break; break;
case Brw_SHOW_MRK_CRS: case Brw_SHOW_MRK_CRS: case Brw_SHOW_MRK_GRP:
case Brw_SHOW_MRK_GRP: case Brw_ADMI_MRK_CRS: case Brw_ADMI_MRK_GRP:
case Brw_ADMI_MRK_CRS:
case Brw_ADMI_MRK_GRP:
Ntf_DB_MarkNotifAsRemoved (Ntf_EVENT_MARKS_FILE, Ntf_DB_MarkNotifAsRemoved (Ntf_EVENT_MARKS_FILE,
FileMetadata.FilCod); FileMetadata.FilCod);
break; break;
@ -7664,7 +7713,9 @@ void Brw_ShowFileMetadata (void)
break; break;
} }
Ale_ShowAlert (Ale_WARNING,Txt_The_file_of_folder_no_longer_exists_or_is_now_hidden); Ale_ShowAlert (Ale_WARNING,
Txt_The_file_of_folder_no_longer_exists_or_is_now_hidden);
break;
} }
/***** Show again the file browser *****/ /***** Show again the file browser *****/
@ -7792,8 +7843,9 @@ void Brw_DownloadFile (void)
} }
} }
if (ICanView == Usr_I_CAN) switch (ICanView)
{ {
case Usr_I_CAN:
if (FileMetadata.FilFolLnk.Type == Brw_IS_FILE || if (FileMetadata.FilFolLnk.Type == Brw_IS_FILE ||
FileMetadata.FilFolLnk.Type == Brw_IS_LINK) FileMetadata.FilFolLnk.Type == Brw_IS_LINK)
{ {
@ -7851,33 +7903,27 @@ void Brw_DownloadFile (void)
Gbl.Layout.HTMLStartWritten = Gbl.Layout.HTMLStartWritten =
Gbl.Layout.DivsEndWritten = Gbl.Layout.DivsEndWritten =
Gbl.Layout.HTMLEndWritten = true; // Don't write HTML at all Gbl.Layout.HTMLEndWritten = true; // Don't write HTML at all
} break;
else // ICanView == Usr_I_CAN_NOT case Usr_I_CAN_NOT:
{ default:
/***** Mark possible notifications about non visible file as removed *****/ /***** Mark possible notifications about non visible file as removed *****/
switch (Gbl.FileBrowser.Type) switch (Gbl.FileBrowser.Type)
{ {
case Brw_SHOW_DOC_CRS: case Brw_SHOW_DOC_CRS: case Brw_SHOW_DOC_GRP:
case Brw_SHOW_DOC_GRP: case Brw_ADMI_DOC_CRS: case Brw_ADMI_DOC_GRP:
case Brw_ADMI_DOC_CRS:
case Brw_ADMI_DOC_GRP:
Ntf_DB_MarkNotifAsRemoved (Ntf_EVENT_DOCUMENT_FILE, Ntf_DB_MarkNotifAsRemoved (Ntf_EVENT_DOCUMENT_FILE,
FileMetadata.FilCod); FileMetadata.FilCod);
break; break;
case Brw_ADMI_TCH_CRS: case Brw_ADMI_TCH_CRS: case Brw_ADMI_TCH_GRP:
case Brw_ADMI_TCH_GRP:
Ntf_DB_MarkNotifAsRemoved (Ntf_EVENT_TEACHERS_FILE, Ntf_DB_MarkNotifAsRemoved (Ntf_EVENT_TEACHERS_FILE,
FileMetadata.FilCod); FileMetadata.FilCod);
break; break;
case Brw_ADMI_SHR_CRS: case Brw_ADMI_SHR_CRS: case Brw_ADMI_SHR_GRP:
case Brw_ADMI_SHR_GRP:
Ntf_DB_MarkNotifAsRemoved (Ntf_EVENT_SHARED_FILE, Ntf_DB_MarkNotifAsRemoved (Ntf_EVENT_SHARED_FILE,
FileMetadata.FilCod); FileMetadata.FilCod);
break; break;
case Brw_SHOW_MRK_CRS: case Brw_SHOW_MRK_CRS: case Brw_SHOW_MRK_GRP:
case Brw_SHOW_MRK_GRP: case Brw_ADMI_MRK_CRS: case Brw_ADMI_MRK_GRP:
case Brw_ADMI_MRK_CRS:
case Brw_ADMI_MRK_GRP:
Ntf_DB_MarkNotifAsRemoved (Ntf_EVENT_MARKS_FILE, Ntf_DB_MarkNotifAsRemoved (Ntf_EVENT_MARKS_FILE,
FileMetadata.FilCod); FileMetadata.FilCod);
break; break;
@ -7889,6 +7935,7 @@ void Brw_DownloadFile (void)
/***** Show again the file browser *****/ /***** Show again the file browser *****/
Brw_ShowAgainFileBrowserOrWorks (); Brw_ShowAgainFileBrowserOrWorks ();
break;
} }
} }

View File

@ -85,12 +85,16 @@ unsigned Cfe_DB_GetCallsForExamsInCurrentCrs (MYSQL_RES **mysql_res)
char SubQueryStatus[64]; char SubQueryStatus[64];
/***** Build subquery about status depending on my role *****/ /***** Build subquery about status depending on my role *****/
if (Cfe_CheckIfICanEditCallsForExams () == Usr_I_CAN) switch (Cfe_CheckIfICanEditCallsForExams ())
sprintf (SubQueryStatus,"Status<>%u", {
(unsigned) Cfe_DELETED_CALL_FOR_EXAM); case Usr_I_CAN:
else sprintf (SubQueryStatus,"Status<>%u",(unsigned) Cfe_DELETED_CALL_FOR_EXAM);
sprintf (SubQueryStatus,"Status=%u", break;
(unsigned) Cfe_VISIBLE_CALL_FOR_EXAM); case Usr_I_CAN_NOT:
default:
sprintf (SubQueryStatus,"Status=%u",(unsigned) Cfe_VISIBLE_CALL_FOR_EXAM);
break;
}
/***** Get calls for exams (the most recent first) /***** Get calls for exams (the most recent first)
in current course from database *****/ in current course from database *****/

View File

@ -793,8 +793,9 @@ static void Ctr_ListCentersForEdition (const struct Plc_Places *Places)
/* Place */ /* Place */
HTM_TD_Begin ("class=\"LT DAT_%s\"",The_GetSuffix ()); HTM_TD_Begin ("class=\"LT DAT_%s\"",The_GetSuffix ());
if (ICanEdit == Usr_I_CAN) switch (ICanEdit)
{ {
case Usr_I_CAN:
Frm_BeginForm (ActChgCtrPlc); Frm_BeginForm (ActChgCtrPlc);
ParCod_PutPar (ParCod_OthHie,Ctr->HieCod); ParCod_PutPar (ParCod_OthHie,Ctr->HieCod);
HTM_SELECT_Begin (HTM_SUBMIT_ON_CHANGE,NULL, HTM_SELECT_Begin (HTM_SUBMIT_ON_CHANGE,NULL,
@ -819,13 +820,16 @@ static void Ctr_ListCentersForEdition (const struct Plc_Places *Places)
} }
HTM_SELECT_End (); HTM_SELECT_End ();
Frm_EndForm (); Frm_EndForm ();
} break;
else case Usr_I_CAN_NOT:
default:
for (NumPlc = 0; for (NumPlc = 0;
NumPlc < Places->Num; NumPlc < Places->Num;
NumPlc++) NumPlc++)
if (Places->Lst[NumPlc].PlcCod == Ctr->Specific.PlcCod) if (Places->Lst[NumPlc].PlcCod == Ctr->Specific.PlcCod)
HTM_Txt (Places->Lst[NumPlc].ShrtName); HTM_Txt (Places->Lst[NumPlc].ShrtName);
break;
}
HTM_TD_End (); HTM_TD_End ();
/* Center short name and full name */ /* Center short name and full name */
@ -839,8 +843,9 @@ static void Ctr_ListCentersForEdition (const struct Plc_Places *Places)
/* Center WWW */ /* Center WWW */
HTM_TD_Begin ("class=\"LT DAT_%s\"",The_GetSuffix ()); HTM_TD_Begin ("class=\"LT DAT_%s\"",The_GetSuffix ());
if (ICanEdit == Usr_I_CAN) switch (ICanEdit)
{ {
case Usr_I_CAN:
Frm_BeginForm (ActChgCtrWWW); Frm_BeginForm (ActChgCtrWWW);
ParCod_PutPar (ParCod_OthHie,Ctr->HieCod); ParCod_PutPar (ParCod_OthHie,Ctr->HieCod);
HTM_INPUT_URL ("WWW",Ctr->WWW,HTM_SUBMIT_ON_CHANGE, HTM_INPUT_URL ("WWW",Ctr->WWW,HTM_SUBMIT_ON_CHANGE,
@ -848,9 +853,9 @@ static void Ctr_ListCentersForEdition (const struct Plc_Places *Places)
" required=\"required\"", " required=\"required\"",
The_GetSuffix ()); The_GetSuffix ());
Frm_EndForm (); Frm_EndForm ();
} break;
else case Usr_I_CAN_NOT:
{ default:
Str_Copy (WWW,Ctr->WWW,sizeof (WWW) - 1); Str_Copy (WWW,Ctr->WWW,sizeof (WWW) - 1);
HTM_DIV_Begin ("class=\"EXTERNAL_WWW_SHRT\""); HTM_DIV_Begin ("class=\"EXTERNAL_WWW_SHRT\"");
HTM_A_Begin ("href=\"%s\" target=\"_blank\"" HTM_A_Begin ("href=\"%s\" target=\"_blank\""
@ -861,6 +866,7 @@ static void Ctr_ListCentersForEdition (const struct Plc_Places *Places)
HTM_Txt (WWW); HTM_Txt (WWW);
HTM_A_End (); HTM_A_End ();
HTM_DIV_End (); HTM_DIV_End ();
break;
} }
HTM_TD_End (); HTM_TD_End ();

View File

@ -633,10 +633,11 @@ Me sale este error, no s
"can npt create received message (duplicated entry '243218-2160773' for key 'UsrCod_MsgCod') "can npt create received message (duplicated entry '243218-2160773' for key 'UsrCod_MsgCod')
*/ */
#define Log_PLATFORM_VERSION "SWAD 23.72.2 (2024-04-02)" #define Log_PLATFORM_VERSION "SWAD 23.73 (2024-04-06)"
#define CSS_FILE "swad23.67.2.css" #define CSS_FILE "swad23.67.2.css"
#define JS_FILE "swad23.53.6.js" #define JS_FILE "swad23.53.6.js"
/* /*
Version 23.73: Apr 06, 2024 Code refactoring related to new type Usr_ICan_t. (335399 lines)
Version 23.72.2: Apr 02, 2024 Code refactoring related to new type Usr_ICan_t. (334970 lines) Version 23.72.2: Apr 02, 2024 Code refactoring related to new type Usr_ICan_t. (334970 lines)
Version 23.72.1: Apr 01, 2024 Code refactoring related to new type Usr_ICan_t. (334912 lines) Version 23.72.1: Apr 01, 2024 Code refactoring related to new type Usr_ICan_t. (334912 lines)
Version 23.72: Apr 01, 2024 New type Usr_ICan_t. (334879 lines) Version 23.72: Apr 01, 2024 New type Usr_ICan_t. (334879 lines)

View File

@ -539,7 +539,7 @@ static void Con_WriteRowConnectedUsrOnRightColumn (Rol_Role_t Role)
const char *ClassTxt; const char *ClassTxt;
long UsrCod; long UsrCod;
Usr_MeOrOther_t MeOrOther; Usr_MeOrOther_t MeOrOther;
struct Usr_Data *UsrDat; struct Usr_Data *UsrDat = NULL; // To avoid warning
struct Usr_Data OtherUsrDat; struct Usr_Data OtherUsrDat;
/***** Get user's code from list *****/ /***** Get user's code from list *****/
@ -552,7 +552,6 @@ static void Con_WriteRowConnectedUsrOnRightColumn (Rol_Role_t Role)
UsrDat = &Gbl.Usrs.Me.UsrDat; UsrDat = &Gbl.Usrs.Me.UsrDat;
break; break;
case Usr_OTHER: case Usr_OTHER:
default:
/***** Initialize structure with user's data *****/ /***** Initialize structure with user's data *****/
OtherUsrDat.UsrCod = UsrCod; OtherUsrDat.UsrCod = UsrCod;
Usr_UsrDataConstructor (&OtherUsrDat); Usr_UsrDataConstructor (&OtherUsrDat);
@ -609,7 +608,6 @@ static void Con_WriteRowConnectedUsrOnRightColumn (Rol_Role_t Role)
case Usr_ME: case Usr_ME:
break; break;
case Usr_OTHER: case Usr_OTHER:
default:
/***** Free memory used for user's data *****/ /***** Free memory used for user's data *****/
Usr_UsrDataDestructor (&OtherUsrDat); Usr_UsrDataDestructor (&OtherUsrDat);
break; break;

View File

@ -705,8 +705,9 @@ static void Crs_ListCoursesOfAYearForEdition (unsigned Year)
/* Course year */ /* Course year */
HTM_TD_Begin ("class=\"CT DAT_%s\"",The_GetSuffix ()); HTM_TD_Begin ("class=\"CT DAT_%s\"",The_GetSuffix ());
if (ICanEdit == Usr_I_CAN) switch (ICanEdit)
{ {
case Usr_I_CAN:
Frm_BeginForm (ActChgCrsYea); Frm_BeginForm (ActChgCrsYea);
ParCod_PutPar (ParCod_OthHie,Crs->HieCod); ParCod_PutPar (ParCod_OthHie,Crs->HieCod);
HTM_SELECT_Begin (HTM_SUBMIT_ON_CHANGE,NULL, HTM_SELECT_Begin (HTM_SUBMIT_ON_CHANGE,NULL,
@ -725,15 +726,19 @@ static void Crs_ListCoursesOfAYearForEdition (unsigned Year)
"%s",Txt_YEAR_OF_DEGREE[YearAux]); "%s",Txt_YEAR_OF_DEGREE[YearAux]);
HTM_SELECT_End (); HTM_SELECT_End ();
Frm_EndForm (); Frm_EndForm ();
} break;
else case Usr_I_CAN_NOT:
default:
HTM_Txt (Txt_YEAR_OF_DEGREE[Crs->Specific.Year]); HTM_Txt (Txt_YEAR_OF_DEGREE[Crs->Specific.Year]);
break;
}
HTM_TD_End (); HTM_TD_End ();
/* Institutional code of the course */ /* Institutional code of the course */
HTM_TD_Begin ("class=\"LT DAT_%s\"",The_GetSuffix ()); HTM_TD_Begin ("class=\"LT DAT_%s\"",The_GetSuffix ());
if (ICanEdit == Usr_I_CAN) switch (ICanEdit)
{ {
case Usr_I_CAN:
Frm_BeginForm (ActChgInsCrsCod); Frm_BeginForm (ActChgInsCrsCod);
ParCod_PutPar (ParCod_OthHie,Crs->HieCod); ParCod_PutPar (ParCod_OthHie,Crs->HieCod);
HTM_INPUT_TEXT ("InsCrsCod",Hie_MAX_CHARS_INSTITUTIONAL_COD, HTM_INPUT_TEXT ("InsCrsCod",Hie_MAX_CHARS_INSTITUTIONAL_COD,
@ -741,9 +746,12 @@ static void Crs_ListCoursesOfAYearForEdition (unsigned Year)
"class=\"INPUT_INS_CODE INPUT_%s\"", "class=\"INPUT_INS_CODE INPUT_%s\"",
The_GetSuffix ()); The_GetSuffix ());
Frm_EndForm (); Frm_EndForm ();
} break;
else case Usr_I_CAN_NOT:
default:
HTM_Txt (Crs->InstitutionalCod); HTM_Txt (Crs->InstitutionalCod);
break;
}
HTM_TD_End (); HTM_TD_End ();
/* Course short name and full name */ /* Course short name and full name */

View File

@ -389,8 +389,9 @@ static void Deg_ListDegreesForEdition (const struct DegTyp_DegTypes *DegTypes)
/* Degree type */ /* Degree type */
HTM_TD_Begin ("class=\"LT DAT_%s\"",The_GetSuffix ()); HTM_TD_Begin ("class=\"LT DAT_%s\"",The_GetSuffix ());
if (ICanEdit == Usr_I_CAN) switch (ICanEdit)
{ {
case Usr_I_CAN:
Frm_BeginForm (ActChgDegTyp); Frm_BeginForm (ActChgDegTyp);
ParCod_PutPar (ParCod_OthHie,Deg->HieCod); ParCod_PutPar (ParCod_OthHie,Deg->HieCod);
HTM_SELECT_Begin (HTM_SUBMIT_ON_CHANGE,NULL, HTM_SELECT_Begin (HTM_SUBMIT_ON_CHANGE,NULL,
@ -410,8 +411,9 @@ static void Deg_ListDegreesForEdition (const struct DegTyp_DegTypes *DegTypes)
} }
HTM_SELECT_End (); HTM_SELECT_End ();
Frm_EndForm (); Frm_EndForm ();
} break;
else case Usr_I_CAN_NOT:
default:
for (NumDegTyp = 0; for (NumDegTyp = 0;
NumDegTyp < DegTypes->Num; NumDegTyp < DegTypes->Num;
NumDegTyp++) NumDegTyp++)
@ -420,12 +422,15 @@ static void Deg_ListDegreesForEdition (const struct DegTyp_DegTypes *DegTypes)
if (DegTyp->DegTypCod == Deg->Specific.TypCod) if (DegTyp->DegTypCod == Deg->Specific.TypCod)
HTM_Txt (DegTyp->DegTypName); HTM_Txt (DegTyp->DegTypName);
} }
break;
}
HTM_TD_End (); HTM_TD_End ();
/* Degree WWW */ /* Degree WWW */
HTM_TD_Begin ("class=\"LT DAT_%s\"",The_GetSuffix ()); HTM_TD_Begin ("class=\"LT DAT_%s\"",The_GetSuffix ());
if (ICanEdit == Usr_I_CAN) switch (ICanEdit)
{ {
case Usr_I_CAN:
Frm_BeginForm (ActChgDegWWW); Frm_BeginForm (ActChgDegWWW);
ParCod_PutPar (ParCod_OthHie,Deg->HieCod); ParCod_PutPar (ParCod_OthHie,Deg->HieCod);
HTM_INPUT_URL ("WWW",Deg->WWW,HTM_SUBMIT_ON_CHANGE, HTM_INPUT_URL ("WWW",Deg->WWW,HTM_SUBMIT_ON_CHANGE,
@ -433,9 +438,9 @@ static void Deg_ListDegreesForEdition (const struct DegTyp_DegTypes *DegTypes)
" required=\"required\"", " required=\"required\"",
The_GetSuffix ()); The_GetSuffix ());
Frm_EndForm (); Frm_EndForm ();
} break;
else case Usr_I_CAN_NOT:
{ default:
Str_Copy (WWW,Deg->WWW,sizeof (WWW) - 1); Str_Copy (WWW,Deg->WWW,sizeof (WWW) - 1);
HTM_DIV_Begin ("class=\"EXTERNAL_WWW_SHRT\""); HTM_DIV_Begin ("class=\"EXTERNAL_WWW_SHRT\"");
HTM_A_Begin ("href=\"%s\" target=\"_blank\" title=\"%s\"" HTM_A_Begin ("href=\"%s\" target=\"_blank\" title=\"%s\""
@ -446,6 +451,7 @@ static void Deg_ListDegreesForEdition (const struct DegTyp_DegTypes *DegTypes)
HTM_Txt (WWW); HTM_Txt (WWW);
HTM_A_End (); HTM_A_End ();
HTM_DIV_End (); HTM_DIV_End ();
break;
} }
HTM_TD_End (); HTM_TD_End ();

View File

@ -2443,12 +2443,18 @@ void Enr_ReqRegRemTch (void)
static void Enr_ReqRegRemUsr (Rol_Role_t Role) static void Enr_ReqRegRemUsr (Rol_Role_t Role)
{ {
if (Adm_CheckIfICanAdminOtherUsrs () == Usr_I_CAN) switch (Adm_CheckIfICanAdminOtherUsrs ())
{
case Usr_I_CAN:
/***** Form to request the user's ID of another user *****/ /***** Form to request the user's ID of another user *****/
Enr_ReqAnotherUsrIDToRegisterRemove (Role); Enr_ReqAnotherUsrIDToRegisterRemove (Role);
else break;
case Usr_I_CAN_NOT:
default:
/***** Form to request if register/remove me *****/ /***** Form to request if register/remove me *****/
Enr_AskIfRegRemMe (Role); Enr_AskIfRegRemMe (Role);
break;
}
} }
/*****************************************************************************/ /*****************************************************************************/
@ -2672,11 +2678,15 @@ void Enr_ReqRemUsrFromCrs (void)
{ {
/***** Get user to be removed *****/ /***** Get user to be removed *****/
if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ()) if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ())
switch (Enr_CheckIfICanRemUsrFromCrs ())
{ {
if (Enr_CheckIfICanRemUsrFromCrs () == Usr_I_CAN) case Usr_I_CAN:
Enr_AskIfRemoveUsrFromCrs (&Gbl.Usrs.Other.UsrDat); Enr_AskIfRemoveUsrFromCrs (&Gbl.Usrs.Other.UsrDat);
else break;
case Usr_I_CAN_NOT:
default:
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
break;
} }
else else
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
@ -2692,13 +2702,18 @@ void Enr_RemUsrFromCrs1 (void)
{ {
/***** Get user to be removed *****/ /***** Get user to be removed *****/
if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ()) if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ())
switch (Enr_CheckIfICanRemUsrFromCrs ())
{ {
if (Enr_CheckIfICanRemUsrFromCrs () == Usr_I_CAN) case Usr_I_CAN:
Enr_EffectivelyRemUsrFromCrs (&Gbl.Usrs.Other.UsrDat,&Gbl.Hierarchy.Node[Hie_CRS], Enr_EffectivelyRemUsrFromCrs (&Gbl.Usrs.Other.UsrDat,
&Gbl.Hierarchy.Node[Hie_CRS],
Enr_DO_NOT_REMOVE_USR_PRODUCTION, Enr_DO_NOT_REMOVE_USR_PRODUCTION,
Cns_VERBOSE); Cns_VERBOSE);
else break;
case Usr_I_CAN_NOT:
default:
Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission (); Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission ();
break;
} }
else else
Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission (); Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission ();
@ -2951,7 +2966,6 @@ void Enr_ModifyUsr1 (void)
Grp_ChangeMyGrps (Cns_QUIET); Grp_ChangeMyGrps (Cns_QUIET);
break; break;
case Usr_OTHER: case Usr_OTHER:
default:
Grp_ChangeOtherUsrGrps (); Grp_ChangeOtherUsrGrps ();
break; break;
} }
@ -3206,7 +3220,6 @@ static void Enr_EffectivelyRemUsrFromCrs (struct Usr_Data *UsrDat,
Rol_SetMyRoles (); Rol_SetMyRoles ();
break; break;
case Usr_OTHER: case Usr_OTHER:
default:
/* Now he/she does not belong to current course */ /* Now he/she does not belong to current course */
UsrDat->Accepted = false; UsrDat->Accepted = false;
UsrDat->Roles.InCurrentCrs = Rol_USR; UsrDat->Roles.InCurrentCrs = Rol_USR;

View File

@ -2325,7 +2325,6 @@ unsigned Exa_DB_GetResults (MYSQL_RES **mysql_res,
Err_NotEnoughMemoryExit (); Err_NotEnoughMemoryExit ();
break; break;
case Usr_OTHER: // A teacher/admin watching the results of other users case Usr_OTHER: // A teacher/admin watching the results of other users
default:
if (asprintf (&HidSesSubQuery,"%s","") < 0) if (asprintf (&HidSesSubQuery,"%s","") < 0)
Err_NotEnoughMemoryExit (); Err_NotEnoughMemoryExit ();
break; break;
@ -2368,7 +2367,6 @@ unsigned Exa_DB_GetResults (MYSQL_RES **mysql_res,
Err_NotEnoughMemoryExit (); Err_NotEnoughMemoryExit ();
break; break;
case Usr_OTHER: // A teacher/admin watching the results of other users case Usr_OTHER: // A teacher/admin watching the results of other users
default:
if (asprintf (&HidExaSubQuery,"%s","") < 0) if (asprintf (&HidExaSubQuery,"%s","") < 0)
Err_NotEnoughMemoryExit (); Err_NotEnoughMemoryExit ();
break; break;

View File

@ -178,8 +178,9 @@ void ExaPrn_ShowExamPrint (void)
ExaSes_GetAndCheckPars (&Exams,&Session); ExaSes_GetAndCheckPars (&Exams,&Session);
/***** Check if I can access to this session *****/ /***** Check if I can access to this session *****/
if (ExaSes_CheckIfICanAnswerThisSession (&Exams.Exam,&Session) == Usr_I_CAN) switch (ExaSes_CheckIfICanAnswerThisSession (&Exams.Exam,&Session))
{ {
case Usr_I_CAN:
/***** Set basic data of exam print *****/ /***** Set basic data of exam print *****/
Print.SesCod = Session.SesCod; Print.SesCod = Session.SesCod;
Print.UsrCod = Gbl.Usrs.Me.UsrDat.UsrCod; Print.UsrCod = Gbl.Usrs.Me.UsrDat.UsrCod;
@ -223,10 +224,13 @@ void ExaPrn_ShowExamPrint (void)
/***** Show test to be answered *****/ /***** Show test to be answered *****/
ExaPrn_ShowExamPrintToFillIt (&Exams,&Print); ExaPrn_ShowExamPrintToFillIt (&Exams,&Print);
} break;
else // Session not open or accessible case Usr_I_CAN_NOT: // Session not open or accessible
default:
/***** Show warning *****/ /***** Show warning *****/
Ale_ShowAlert (Ale_INFO,Txt_You_dont_have_access_to_the_exam); Ale_ShowAlert (Ale_INFO,Txt_You_dont_have_access_to_the_exam);
break;
}
} }
/*****************************************************************************/ /*****************************************************************************/
@ -996,8 +1000,9 @@ void ExaPrn_ReceivePrintAnswer (void)
ExaLog_SetQstInd (QstInd); ExaLog_SetQstInd (QstInd);
/***** Check if session if visible and open *****/ /***** Check if session if visible and open *****/
if (ExaSes_CheckIfICanAnswerThisSession (&Exams.Exam,&Session) == Usr_I_CAN) switch (ExaSes_CheckIfICanAnswerThisSession (&Exams.Exam,&Session))
{ {
case Usr_I_CAN:
/***** Set log open to true ****/ /***** Set log open to true ****/
ExaLog_SetIfCanAnswer (true); ExaLog_SetIfCanAnswer (true);
@ -1018,9 +1023,9 @@ void ExaPrn_ReceivePrintAnswer (void)
/***** Show table with questions to answer *****/ /***** Show table with questions to answer *****/
ExaPrn_ShowTableWithQstsToFill (&Exams,&Print); ExaPrn_ShowTableWithQstsToFill (&Exams,&Print);
} break;
else // Not accessible to answer case Usr_I_CAN_NOT: // Not accessible to answer
{ default:
/***** Set log open to false ****/ /***** Set log open to false ****/
ExaLog_SetIfCanAnswer (false); ExaLog_SetIfCanAnswer (false);
@ -1032,6 +1037,7 @@ void ExaPrn_ReceivePrintAnswer (void)
ExaSes_PutParsEdit (&Exams); ExaSes_PutParsEdit (&Exams);
Btn_PutCreateButton (Txt_Continue); Btn_PutCreateButton (Txt_Continue);
Frm_EndForm (); Frm_EndForm ();
break;
} }
} }

View File

@ -825,8 +825,7 @@ static void ExaRes_ShowResults (struct Exa_Exams *Exams,
/* Write session title */ /* Write session title */
HTM_TD_Begin ("class=\"LT DAT_%s %s\"", HTM_TD_Begin ("class=\"LT DAT_%s %s\"",
The_GetSuffix (), The_GetSuffix (),The_GetColorRows ());
The_GetColorRows ());
HTM_Txt (Session.Title); HTM_Txt (Session.Title);
HTM_TD_End (); HTM_TD_End ();
@ -850,163 +849,201 @@ static void ExaRes_ShowResults (struct Exa_Exams *Exams,
/* Write total number of questions */ /* Write total number of questions */
HTM_TD_Begin ("class=\"RT DAT_%s LINE_LEFT %s\"", HTM_TD_Begin ("class=\"RT DAT_%s LINE_LEFT %s\"",
The_GetSuffix (), The_GetSuffix (),The_GetColorRows ());
The_GetColorRows ()); switch (ICanView.Score)
if (ICanView.Score == Usr_I_CAN) {
case Usr_I_CAN:
HTM_Unsigned (Print.NumQsts.All); HTM_Unsigned (Print.NumQsts.All);
else break;
case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible (); Ico_PutIconNotVisible ();
break;
}
HTM_TD_End (); HTM_TD_End ();
/* Valid questions */ /* Valid questions */
HTM_TD_Begin ("class=\"RT DAT_GREEN_%s %s\"", HTM_TD_Begin ("class=\"RT DAT_GREEN_%s %s\"",
The_GetSuffix (), The_GetSuffix (),The_GetColorRows ());
The_GetColorRows ()); switch (ICanView.Score)
if (ICanView.Score == Usr_I_CAN)
{ {
case Usr_I_CAN:
if (Print.NumQsts.Valid.Total) if (Print.NumQsts.Valid.Total)
HTM_Unsigned (Print.NumQsts.Valid.Total); HTM_Unsigned (Print.NumQsts.Valid.Total);
else else
HTM_Light0 (); HTM_Light0 ();
} break;
else case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible (); Ico_PutIconNotVisible ();
break;
}
HTM_TD_End (); HTM_TD_End ();
/* Invalid questions */ /* Invalid questions */
HTM_TD_Begin ("class=\"RT DAT_RED_%s %s\"", HTM_TD_Begin ("class=\"RT DAT_RED_%s %s\"",
The_GetSuffix (), The_GetSuffix (),The_GetColorRows ());
The_GetColorRows ()); switch (ICanView.Score)
if (ICanView.Score == Usr_I_CAN)
{ {
NumQstsInvalid = Print.NumQsts.All - Print.NumQsts.Valid.Total; case Usr_I_CAN:
NumQstsInvalid = Print.NumQsts.All -
Print.NumQsts.Valid.Total;
if (NumQstsInvalid) if (NumQstsInvalid)
HTM_Unsigned (NumQstsInvalid); HTM_Unsigned (NumQstsInvalid);
else else
HTM_Light0 (); HTM_Light0 ();
} break;
else case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible (); Ico_PutIconNotVisible ();
break;
}
HTM_TD_End (); HTM_TD_End ();
/* Write number of correct questions */ /* Write number of correct questions */
HTM_TD_Begin ("class=\"RT DAT_%s LINE_LEFT %s\"", HTM_TD_Begin ("class=\"RT DAT_%s LINE_LEFT %s\"",
The_GetSuffix (), The_GetSuffix (),The_GetColorRows ());
The_GetColorRows ()); switch (ICanView.Score)
if (ICanView.Score == Usr_I_CAN)
{ {
case Usr_I_CAN:
if (Print.NumQsts.Valid.Correct) if (Print.NumQsts.Valid.Correct)
HTM_Unsigned (Print.NumQsts.Valid.Correct); HTM_Unsigned (Print.NumQsts.Valid.Correct);
else else
HTM_Light0 (); HTM_Light0 ();
} break;
else case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible (); Ico_PutIconNotVisible ();
break;
}
HTM_TD_End (); HTM_TD_End ();
/* Write number of wrong questions */ /* Write number of wrong questions */
HTM_TD_Begin ("class=\"RT DAT_%s %s\"", HTM_TD_Begin ("class=\"RT DAT_%s %s\"",
The_GetSuffix (), The_GetSuffix (),The_GetColorRows ());
The_GetColorRows ()); switch (ICanView.Score)
if (ICanView.Score == Usr_I_CAN)
{ {
case Usr_I_CAN:
if (Print.NumQsts.Valid.Wrong.Negative) if (Print.NumQsts.Valid.Wrong.Negative)
HTM_Unsigned (Print.NumQsts.Valid.Wrong.Negative); HTM_Unsigned (Print.NumQsts.Valid.Wrong.Negative);
else else
HTM_Light0 (); HTM_Light0 ();
} break;
else case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible (); Ico_PutIconNotVisible ();
break;
}
HTM_TD_End (); HTM_TD_End ();
HTM_TD_Begin ("class=\"RT DAT_%s %s\"", HTM_TD_Begin ("class=\"RT DAT_%s %s\"",
The_GetSuffix (), The_GetSuffix (),The_GetColorRows ());
The_GetColorRows ()); switch (ICanView.Score)
if (ICanView.Score == Usr_I_CAN)
{ {
case Usr_I_CAN:
if (Print.NumQsts.Valid.Wrong.Zero) if (Print.NumQsts.Valid.Wrong.Zero)
HTM_Unsigned (Print.NumQsts.Valid.Wrong.Zero); HTM_Unsigned (Print.NumQsts.Valid.Wrong.Zero);
else else
HTM_Light0 (); HTM_Light0 ();
} break;
else case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible (); Ico_PutIconNotVisible ();
break;
}
HTM_TD_End (); HTM_TD_End ();
HTM_TD_Begin ("class=\"RT DAT_%s %s\"", HTM_TD_Begin ("class=\"RT DAT_%s %s\"",
The_GetSuffix (), The_GetSuffix (),The_GetColorRows ());
The_GetColorRows ()); switch (ICanView.Score)
if (ICanView.Score == Usr_I_CAN)
{ {
case Usr_I_CAN:
if (Print.NumQsts.Valid.Wrong.Positive) if (Print.NumQsts.Valid.Wrong.Positive)
HTM_Unsigned (Print.NumQsts.Valid.Wrong.Positive); HTM_Unsigned (Print.NumQsts.Valid.Wrong.Positive);
else else
HTM_Light0 (); HTM_Light0 ();
} break;
else case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible (); Ico_PutIconNotVisible ();
break;
}
HTM_TD_End (); HTM_TD_End ();
/* Write number of blank questions */ /* Write number of blank questions */
HTM_TD_Begin ("class=\"RT DAT_%s %s\"", HTM_TD_Begin ("class=\"RT DAT_%s %s\"",
The_GetSuffix (), The_GetSuffix (),The_GetColorRows ());
The_GetColorRows ()); switch (ICanView.Score)
if (ICanView.Score == Usr_I_CAN)
{ {
case Usr_I_CAN:
if (Print.NumQsts.Valid.Blank) if (Print.NumQsts.Valid.Blank)
HTM_Unsigned (Print.NumQsts.Valid.Blank); HTM_Unsigned (Print.NumQsts.Valid.Blank);
else else
HTM_Light0 (); HTM_Light0 ();
} break;
else case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible (); Ico_PutIconNotVisible ();
break;
}
HTM_TD_End (); HTM_TD_End ();
/* Write score valid (taking into account only valid questions) */ /* Write score valid (taking into account only valid questions) */
HTM_TD_Begin ("class=\"RT DAT_%s LINE_LEFT %s\"", HTM_TD_Begin ("class=\"RT DAT_%s LINE_LEFT %s\"",
The_GetSuffix (), The_GetSuffix (),The_GetColorRows ());
The_GetColorRows ()); switch (ICanView.Score)
if (ICanView.Score == Usr_I_CAN)
{ {
case Usr_I_CAN:
HTM_Double2Decimals (Print.Score.Valid); HTM_Double2Decimals (Print.Score.Valid);
HTM_Txt ("/"); HTM_Txt ("/");
HTM_Unsigned (Print.NumQsts.Valid.Total); HTM_Unsigned (Print.NumQsts.Valid.Total);
} break;
else case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible (); Ico_PutIconNotVisible ();
break;
}
HTM_TD_End (); HTM_TD_End ();
/* Write average score per question (taking into account only valid questions) */ /* Write average score per question (taking into account only valid questions) */
HTM_TD_Begin ("class=\"RT DAT_%s %s\"", HTM_TD_Begin ("class=\"RT DAT_%s %s\"",
The_GetSuffix (), The_GetSuffix (),The_GetColorRows ());
The_GetColorRows ()); switch (ICanView.Score)
if (ICanView.Score == Usr_I_CAN) {
case Usr_I_CAN:
HTM_Double2Decimals (Print.NumQsts.Valid.Total ? Print.Score.Valid / HTM_Double2Decimals (Print.NumQsts.Valid.Total ? Print.Score.Valid /
(double) Print.NumQsts.Valid.Total : (double) Print.NumQsts.Valid.Total :
0.0); 0.0);
else break;
case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible (); Ico_PutIconNotVisible ();
break;
}
HTM_TD_End (); HTM_TD_End ();
/* Write grade over maximum grade (taking into account only valid questions) */ /* Write grade over maximum grade (taking into account only valid questions) */
HTM_TD_Begin ("class=\"RT DAT_%s LINE_LEFT %s\"", HTM_TD_Begin ("class=\"RT DAT_%s LINE_LEFT %s\"",
The_GetSuffix (), The_GetSuffix (),The_GetColorRows ());
The_GetColorRows ()); switch (ICanView.Score)
if (ICanView.Score == Usr_I_CAN)
{ {
case Usr_I_CAN:
Grade = TstPrn_ComputeGrade (Print.NumQsts.Valid.Total,Print.Score.Valid,Exam.MaxGrade); Grade = TstPrn_ComputeGrade (Print.NumQsts.Valid.Total,Print.Score.Valid,Exam.MaxGrade);
TstPrn_ShowGrade (Grade,Exam.MaxGrade); TstPrn_ShowGrade (Grade,Exam.MaxGrade);
TotalGrade += Grade; TotalGrade += Grade;
} break;
else case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible (); Ico_PutIconNotVisible ();
break;
}
HTM_TD_End (); HTM_TD_End ();
/* Link to show this result */ /* Link to show this result */
HTM_TD_Begin ("class=\"RT LINE_LEFT %s\"", HTM_TD_Begin ("class=\"RT LINE_LEFT %s\"",The_GetColorRows ());
The_GetColorRows ()); switch (ICanView.Result)
if (ICanView.Result == Usr_I_CAN)
{ {
case Usr_I_CAN:
Exams->Exam.ExaCod = Session.ExaCod; Exams->Exam.ExaCod = Session.ExaCod;
Exams->SesCod = Session.SesCod; Exams->SesCod = Session.SesCod;
switch (MeOrOther) switch (MeOrOther)
@ -1024,9 +1061,12 @@ static void ExaRes_ShowResults (struct Exa_Exams *Exams,
break; break;
} }
Frm_EndForm (); Frm_EndForm ();
} break;
else case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible (); Ico_PutIconNotVisible ();
break;
}
HTM_TD_End (); HTM_TD_End ();
HTM_TR_End (); HTM_TR_End ();
@ -1280,7 +1320,6 @@ void ExaRes_ShowOneExaResult (void)
UsrDat = &Gbl.Usrs.Me.UsrDat; UsrDat = &Gbl.Usrs.Me.UsrDat;
break; break;
case Usr_OTHER: case Usr_OTHER:
default:
UsrDat = &Gbl.Usrs.Other.UsrDat; UsrDat = &Gbl.Usrs.Other.UsrDat;
Usr_GetParOtherUsrCodEncrypted (UsrDat); Usr_GetParOtherUsrCodEncrypted (UsrDat);
break; break;
@ -1403,13 +1442,19 @@ static void ExaRes_CheckIfICanViewResult (const struct Exa_Exam *Exam,
// Whether I belong or not to groups of session is not checked here... // Whether I belong or not to groups of session is not checked here...
// ...because I should be able to see old exams made in old groups to which I belonged // ...because I should be able to see old exams made in old groups to which I belonged
if (ICanView->Result == Usr_I_CAN) switch (ICanView->Result)
{
case Usr_I_CAN:
// Depends on 5 visibility icons associated to exam // Depends on 5 visibility icons associated to exam
ICanView->Score = TstVis_IsVisibleTotalScore (Exam->Visibility) ? Usr_I_CAN : ICanView->Score = TstVis_IsVisibleTotalScore (Exam->Visibility) ? Usr_I_CAN :
Usr_I_CAN_NOT; Usr_I_CAN_NOT;
else break;
case Usr_I_CAN_NOT:
default:
ICanView->Score = Usr_I_CAN_NOT; ICanView->Score = Usr_I_CAN_NOT;
break; break;
}
break;
case Rol_NET: case Rol_NET:
case Rol_TCH: case Rol_TCH:
case Rol_DEG_ADM: case Rol_DEG_ADM:
@ -1602,8 +1647,9 @@ static void ExaRes_ShowExamResultNumQsts (struct ExaPrn_Print *Print,
/***** Number of questions *****/ /***** Number of questions *****/
HTM_TD_Begin ("class=\"LB DAT_%s\"",The_GetSuffix ()); HTM_TD_Begin ("class=\"LB DAT_%s\"",The_GetSuffix ());
if (ICanView->Result == Usr_I_CAN) switch (ICanView->Result)
{ {
case Usr_I_CAN:
HTM_TxtF ("%u",Print->NumQsts.All); HTM_TxtF ("%u",Print->NumQsts.All);
if (Print->NumQsts.All != Print->NumQsts.Valid.Total) if (Print->NumQsts.All != Print->NumQsts.Valid.Total)
{ {
@ -1625,9 +1671,12 @@ static void ExaRes_ShowExamResultNumQsts (struct ExaPrn_Print *Print,
HTM_Txt (")"); HTM_Txt (")");
} }
} break;
else case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible (); Ico_PutIconNotVisible ();
break;
}
HTM_TD_End (); HTM_TD_End ();
/***** Row end *****/ /***** Row end *****/
@ -1656,7 +1705,9 @@ static void ExaRes_ShowExamResultNumAnss (struct ExaPrn_Print *Print,
/***** Number of answers *****/ /***** Number of answers *****/
HTM_TD_Begin ("class=\"LB DAT_%s\"",The_GetSuffix ()); HTM_TD_Begin ("class=\"LB DAT_%s\"",The_GetSuffix ());
if (ICanView->Score == Usr_I_CAN) switch (ICanView->Score)
{
case Usr_I_CAN:
HTM_TxtF ("%s(<em>p<sub>i</sub></em>=1):&nbsp;%u; " HTM_TxtF ("%s(<em>p<sub>i</sub></em>=1):&nbsp;%u; "
"%s(-1&le;<em>p<sub>i</sub></em>&lt;0):&nbsp;%u; " "%s(-1&le;<em>p<sub>i</sub></em>&lt;0):&nbsp;%u; "
"%s(<em>p<sub>i</sub></em>=0):&nbsp;%u; " "%s(<em>p<sub>i</sub></em>=0):&nbsp;%u; "
@ -1667,8 +1718,12 @@ static void ExaRes_ShowExamResultNumAnss (struct ExaPrn_Print *Print,
Txt_ANSWERS_wrong ,Print->NumQsts.Valid.Wrong.Zero, Txt_ANSWERS_wrong ,Print->NumQsts.Valid.Wrong.Zero,
Txt_ANSWERS_wrong ,Print->NumQsts.Valid.Wrong.Positive, Txt_ANSWERS_wrong ,Print->NumQsts.Valid.Wrong.Positive,
Txt_ANSWERS_blank ,Print->NumQsts.Valid.Blank); Txt_ANSWERS_blank ,Print->NumQsts.Valid.Blank);
else break;
case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible (); Ico_PutIconNotVisible ();
break;
}
HTM_TD_End (); HTM_TD_End ();
/***** Row end *****/ /***** Row end *****/
@ -1695,8 +1750,9 @@ static void ExaRes_ShowExamResultScore (struct ExaPrn_Print *Print,
/***** Score *****/ /***** Score *****/
HTM_TD_Begin ("class=\"LB DAT_%s\"",The_GetSuffix ()); HTM_TD_Begin ("class=\"LB DAT_%s\"",The_GetSuffix ());
if (ICanView->Score == Usr_I_CAN) switch (ICanView->Score)
{ {
case Usr_I_CAN:
/* Score counting all questions */ /* Score counting all questions */
if (Print->NumQsts.All == Print->NumQsts.Valid.Total) if (Print->NumQsts.All == Print->NumQsts.Valid.Total)
HTM_STRONG_Begin (); HTM_STRONG_Begin ();
@ -1717,9 +1773,12 @@ static void ExaRes_ShowExamResultScore (struct ExaPrn_Print *Print,
HTM_Unsigned (Print->NumQsts.Valid.Total); HTM_Unsigned (Print->NumQsts.Valid.Total);
HTM_STRONG_End (); HTM_STRONG_End ();
} }
} break;
else case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible (); Ico_PutIconNotVisible ();
break;
}
HTM_TD_End (); HTM_TD_End ();
/***** Row end *****/ /***** Row end *****/
@ -1747,8 +1806,9 @@ static void ExaRes_ShowExamResultGrade (const struct Exa_Exam *Exam,
/***** Grade *****/ /***** Grade *****/
HTM_TD_Begin ("class=\"LB DAT_%s\"",The_GetSuffix ()); HTM_TD_Begin ("class=\"LB DAT_%s\"",The_GetSuffix ());
if (ICanView->Score == Usr_I_CAN) switch (ICanView->Score)
{ {
case Usr_I_CAN:
/* Grade counting all questions */ /* Grade counting all questions */
if (Print->NumQsts.All == Print->NumQsts.Valid.Total) if (Print->NumQsts.All == Print->NumQsts.Valid.Total)
HTM_STRONG_Begin (); HTM_STRONG_Begin ();
@ -1762,12 +1822,17 @@ static void ExaRes_ShowExamResultGrade (const struct Exa_Exam *Exam,
HTM_Txt ("; "); HTM_Txt ("; ");
HTM_TxtColonNBSP (Txt_valid_grade); HTM_TxtColonNBSP (Txt_valid_grade);
HTM_STRONG_Begin (); HTM_STRONG_Begin ();
TstPrn_ComputeAndShowGrade (Print->NumQsts.Valid.Total,Print->Score.Valid,Exam->MaxGrade); TstPrn_ComputeAndShowGrade (Print->NumQsts.Valid.Total,
Print->Score.Valid,
Exam->MaxGrade);
HTM_STRONG_End (); HTM_STRONG_End ();
} }
} break;
else case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible (); Ico_PutIconNotVisible ();
break;
}
HTM_TD_End (); HTM_TD_End ();
/***** Row end *****/ /***** Row end *****/

View File

@ -500,8 +500,9 @@ static void ExaSes_ListOneOrMoreSessionsTitleGrps (struct Exa_Exams *Exams,
/***** Session title *****/ /***** Session title *****/
HTM_ARTICLE_Begin (Anchor); HTM_ARTICLE_Begin (Anchor);
if (ExaSes_CheckIfICanAnswerThisSession (&Exams->Exam,Session) == Usr_I_CAN) switch (ExaSes_CheckIfICanAnswerThisSession (&Exams->Exam,Session))
{ {
case Usr_I_CAN:
Frm_BeginForm (ActSeeExaPrn); Frm_BeginForm (ActSeeExaPrn);
Exa_PutPars (Exams); Exa_PutPars (Exams);
ParCod_PutPar (ParCod_Ses,Session->SesCod); ParCod_PutPar (ParCod_Ses,Session->SesCod);
@ -513,14 +514,15 @@ static void ExaSes_ListOneOrMoreSessionsTitleGrps (struct Exa_Exams *Exams,
HTM_Txt (Session->Title); HTM_Txt (Session->Title);
HTM_BUTTON_End (); HTM_BUTTON_End ();
Frm_EndForm (); Frm_EndForm ();
} break;
else case Usr_I_CAN_NOT:
{ default:
HTM_SPAN_Begin ("class=\"%s_%s\"", HTM_SPAN_Begin ("class=\"%s_%s\"",
HidVis_TitleClass[Session->HiddenOrVisible], HidVis_TitleClass[Session->HiddenOrVisible],
The_GetSuffix ()); The_GetSuffix ());
HTM_Txt (Session->Title); HTM_Txt (Session->Title);
HTM_SPAN_End (); HTM_SPAN_End ();
break;
} }
HTM_ARTICLE_End (); HTM_ARTICLE_End ();
@ -650,8 +652,9 @@ static void ExaSes_ListOneOrMoreSessionsResultTch (struct Exa_Exams *Exams,
"trophy.svg",Ico_BLACK); "trophy.svg",Ico_BLACK);
/***** Check if visibility of session results can be changed *****/ /***** Check if visibility of session results can be changed *****/
if (ExaSes_CheckIfICanChangeVisibilityOfResults (Session) == Usr_I_CAN) switch (ExaSes_CheckIfICanChangeVisibilityOfResults (Session))
{ {
case Usr_I_CAN:
/***** Put form to change visibility of session results *****/ /***** Put form to change visibility of session results *****/
if (Session->ShowUsrResults) if (Session->ShowUsrResults)
Lay_PutContextualLinkOnlyIcon (ActChgVisExaRes,NULL, Lay_PutContextualLinkOnlyIcon (ActChgVisExaRes,NULL,
@ -661,14 +664,15 @@ static void ExaSes_ListOneOrMoreSessionsResultTch (struct Exa_Exams *Exams,
Lay_PutContextualLinkOnlyIcon (ActChgVisExaRes,NULL, Lay_PutContextualLinkOnlyIcon (ActChgVisExaRes,NULL,
ExaSes_PutParsEdit,Exams, ExaSes_PutParsEdit,Exams,
"eye-slash.svg",Ico_RED); "eye-slash.svg",Ico_RED);
} break;
else // Don't put form case Usr_I_CAN_NOT: // Don't put form
{ default:
/***** Put icon showing the current visibility of session results *****/ /***** Put icon showing the current visibility of session results *****/
if (Session->ShowUsrResults) if (Session->ShowUsrResults)
Ico_PutIconOff ("eye.svg" ,Ico_GREEN,Txt_Visible_results); Ico_PutIconOff ("eye.svg" ,Ico_GREEN,Txt_Visible_results);
else else
Ico_PutIconOff ("eye-slash.svg",Ico_RED ,Txt_Hidden_results); Ico_PutIconOff ("eye-slash.svg",Ico_RED ,Txt_Hidden_results);
break;
} }
} }

View File

@ -588,11 +588,17 @@ static void ExaSet_ListOneOrMoreSetsForEdition (struct Exa_Exams *Exams,
The_GetColorRows ()); The_GetColorRows ());
/* Put icon to remove the set */ /* Put icon to remove the set */
if (ICanEditSets == Usr_I_CAN) switch (ICanEditSets)
{
case Usr_I_CAN:
Ico_PutContextualIconToRemove (ActReqRemExaSet,NULL, Ico_PutContextualIconToRemove (ActReqRemExaSet,NULL,
ExaSet_PutParsOneSet,Exams); ExaSet_PutParsOneSet,Exams);
else break;
case Usr_I_CAN_NOT:
default:
Ico_PutIconRemovalNotAllowed (); Ico_PutIconRemovalNotAllowed ();
break;
}
/* Put icon to move up the question */ /* Put icon to move up the question */
if (ICanEditSets == Usr_I_CAN && Set.SetInd > 1) if (ICanEditSets == Usr_I_CAN && Set.SetInd > 1)
@ -841,11 +847,17 @@ static void ExaSet_ListOneOrMoreQuestionsForEdition (struct Exa_Exams *Exams,
HTM_TD_Begin ("class=\"BT %s\"",The_GetColorRows ()); HTM_TD_Begin ("class=\"BT %s\"",The_GetColorRows ());
/* Put icon to remove the question */ /* Put icon to remove the question */
if (ICanEditQuestions == Usr_I_CAN) switch (ICanEditQuestions)
{
case Usr_I_CAN:
Ico_PutContextualIconToRemove (ActReqRemSetQst,NULL, Ico_PutContextualIconToRemove (ActReqRemSetQst,NULL,
ExaSet_PutParsOneQst,Exams); ExaSet_PutParsOneQst,Exams);
else break;
case Usr_I_CAN_NOT:
default:
Ico_PutIconRemovalNotAllowed (); Ico_PutIconRemovalNotAllowed ();
break;
}
/* Put icon to validate/invalidate the question */ /* Put icon to validate/invalidate the question */
Lay_PutContextualLinkOnlyIcon (ValInv[Question.Validity].NextAction,Anchor, Lay_PutContextualLinkOnlyIcon (ValInv[Question.Validity].NextAction,Anchor,
@ -1405,12 +1417,20 @@ void ExaSet_MoveDownSet (void)
static Usr_ICan_t ExaSet_CheckIfICanEditExamSets (const struct Exa_Exam *Exam) static Usr_ICan_t ExaSet_CheckIfICanEditExamSets (const struct Exa_Exam *Exam)
{ {
if (Exa_CheckIfICanEditExams () == Usr_I_CAN) switch (Exa_CheckIfICanEditExams ())
{
case Usr_I_CAN:
/***** Questions are editable only if exam has no sessions *****/ /***** Questions are editable only if exam has no sessions *****/
return (Exam->NumSess == 0) ? Usr_I_CAN : // Exams with sessions should not be edited return (Exam->NumSess == 0) ? Usr_I_CAN : // Exams with sessions should not be edited
Usr_I_CAN_NOT; Usr_I_CAN_NOT;
else break;
case Usr_I_CAN_NOT:
default:
return Usr_I_CAN_NOT; // Sets of questions are not editable return Usr_I_CAN_NOT; // Sets of questions are not editable
break;
}
return Usr_I_CAN_NOT;
} }
/*****************************************************************************/ /*****************************************************************************/

View File

@ -1004,22 +1004,24 @@ static void For_ShowAForumPost (struct For_Forums *Forums,
/***** Form to ban/unban post *****/ /***** Form to ban/unban post *****/
HTM_TD_Begin ("class=\"CONTEXT_COL\""); HTM_TD_Begin ("class=\"CONTEXT_COL\"");
if (ICanModerateForum == Usr_I_CAN) switch (ICanModerateForum)
{ {
case Usr_I_CAN:
NextAction = DisabledOrEnabled == Cns_ENABLED ? For_ActionsDisPstFor[Forums->Forum.Type] : NextAction = DisabledOrEnabled == Cns_ENABLED ? For_ActionsDisPstFor[Forums->Forum.Type] :
For_ActionsEnbPstFor[Forums->Forum.Type]; For_ActionsEnbPstFor[Forums->Forum.Type];
Frm_BeginFormAnchor (NextAction,For_FORUM_POSTS_SECTION_ID); Frm_BeginFormAnchor (NextAction,For_FORUM_POSTS_SECTION_ID);
For_PutParsForum (Forums); For_PutParsForum (Forums);
Ico_PutIconLink (Icon[DisabledOrEnabled],Color[DisabledOrEnabled],NextAction); Ico_PutIconLink (Icon[DisabledOrEnabled],Color[DisabledOrEnabled],NextAction);
Frm_EndForm (); Frm_EndForm ();
} break;
else case Usr_I_CAN_NOT:
{ default:
if (asprintf (&Title,*TxtAllowedBanned[DisabledOrEnabled],PstNum) < 0) if (asprintf (&Title,*TxtAllowedBanned[DisabledOrEnabled],PstNum) < 0)
Err_NotEnoughMemoryExit (); Err_NotEnoughMemoryExit ();
Ico_PutIcon (Icon[DisabledOrEnabled],Color[DisabledOrEnabled],Title, Ico_PutIcon (Icon[DisabledOrEnabled],Color[DisabledOrEnabled],Title,
"ICO_HIDDEN ICO16x16"); "ICO_HIDDEN ICO16x16");
free (Title); free (Title);
break;
} }
/***** Form to remove post *****/ /***** Form to remove post *****/
@ -1518,7 +1520,8 @@ static void For_WriteLinksToPlatformForums (const struct For_Forums *Forums,
Forum.HieCod = -1L; Forum.HieCod = -1L;
Highlight = (Forums->Forum.Type == For_FORUM__SWAD__USRS) ? Lay_HIGHLIGHT : Highlight = (Forums->Forum.Type == For_FORUM__SWAD__USRS) ? Lay_HIGHLIGHT :
Lay_NO_HIGHLIGHT; Lay_NO_HIGHLIGHT;
IsLastItemInLevel[1] = (IsLastForum && ICanSeeTeacherForum == Usr_I_CAN_NOT) ? Lay_LAST_ITEM : IsLastItemInLevel[1] = (IsLastForum &&
ICanSeeTeacherForum == Usr_I_CAN_NOT) ? Lay_LAST_ITEM :
Lay_NO_LAST_ITEM; Lay_NO_LAST_ITEM;
For_WriteLinkToForum (Forums,&Forum,Highlight,1,IsLastItemInLevel); For_WriteLinkToForum (Forums,&Forum,Highlight,1,IsLastItemInLevel);
@ -1563,7 +1566,8 @@ static long For_WriteLinksToInsForums (const struct For_Forums *Forums,
Highlight = (Forums->Forum.Type == For_FORUM_INSTIT_USRS && Highlight = (Forums->Forum.Type == For_FORUM_INSTIT_USRS &&
Forums->Forum.HieCod == InsCod) ? Lay_HIGHLIGHT : Forums->Forum.HieCod == InsCod) ? Lay_HIGHLIGHT :
Lay_NO_HIGHLIGHT; Lay_NO_HIGHLIGHT;
IsLastItemInLevel[2] = (IsLastIns && ICanSeeTeacherForum == Usr_I_CAN_NOT) ? Lay_LAST_ITEM : IsLastItemInLevel[2] = (IsLastIns &&
ICanSeeTeacherForum == Usr_I_CAN_NOT) ? Lay_LAST_ITEM :
Lay_NO_LAST_ITEM; Lay_NO_LAST_ITEM;
For_WriteLinkToForum (Forums,&Forum,Highlight,2,IsLastItemInLevel); For_WriteLinkToForum (Forums,&Forum,Highlight,2,IsLastItemInLevel);
@ -1611,7 +1615,8 @@ static long For_WriteLinksToCtrForums (const struct For_Forums *Forums,
Highlight = (Forums->Forum.Type == For_FORUM_CENTER_USRS && Highlight = (Forums->Forum.Type == For_FORUM_CENTER_USRS &&
Forums->Forum.HieCod == CtrCod) ? Lay_HIGHLIGHT : Forums->Forum.HieCod == CtrCod) ? Lay_HIGHLIGHT :
Lay_NO_HIGHLIGHT; Lay_NO_HIGHLIGHT;
IsLastItemInLevel[3] = (IsLastCtr && ICanSeeTeacherForum == Usr_I_CAN_NOT) ? Lay_LAST_ITEM : IsLastItemInLevel[3] = (IsLastCtr &&
ICanSeeTeacherForum == Usr_I_CAN_NOT) ? Lay_LAST_ITEM :
Lay_NO_LAST_ITEM; Lay_NO_LAST_ITEM;
For_WriteLinkToForum (Forums,&Forum,Highlight,3,IsLastItemInLevel); For_WriteLinkToForum (Forums,&Forum,Highlight,3,IsLastItemInLevel);
@ -1659,7 +1664,8 @@ static long For_WriteLinksToDegForums (const struct For_Forums *Forums,
Highlight = (Forums->Forum.Type == For_FORUM_DEGREE_USRS && Highlight = (Forums->Forum.Type == For_FORUM_DEGREE_USRS &&
Forums->Forum.HieCod == DegCod) ? Lay_HIGHLIGHT : Forums->Forum.HieCod == DegCod) ? Lay_HIGHLIGHT :
Lay_NO_HIGHLIGHT; Lay_NO_HIGHLIGHT;
IsLastItemInLevel[4] = (IsLastDeg && ICanSeeTeacherForum == Usr_I_CAN_NOT) ? Lay_LAST_ITEM : IsLastItemInLevel[4] = (IsLastDeg &&
ICanSeeTeacherForum == Usr_I_CAN_NOT) ? Lay_LAST_ITEM :
Lay_NO_LAST_ITEM; Lay_NO_LAST_ITEM;
For_WriteLinkToForum (Forums,&Forum,Highlight,4,IsLastItemInLevel); For_WriteLinkToForum (Forums,&Forum,Highlight,4,IsLastItemInLevel);

View File

@ -1636,16 +1636,24 @@ static void Gam_ListGameQuestions (struct Gam_Games *Games)
MYSQL_RES *mysql_res; MYSQL_RES *mysql_res;
unsigned NumQsts; unsigned NumQsts;
Usr_ICan_t ICanEditQuestions = Gam_CheckIfICanEditGame (&Games->Game); Usr_ICan_t ICanEditQuestions = Gam_CheckIfICanEditGame (&Games->Game);
static void (*FunctionToDrawContextualIcons[Usr_NUM_I_CAN]) (void *Args) =
{
[Usr_I_CAN_NOT] = NULL,
[Usr_I_CAN ] = Gam_PutIconToAddNewQuestions,
};
void *Args[Usr_NUM_I_CAN] =
{
[Usr_I_CAN_NOT] = NULL,
[Usr_I_CAN ] = Games,
};
/***** Get data of questions from database *****/ /***** Get data of questions from database *****/
NumQsts = Gam_DB_GetGameQuestionsBasic (&mysql_res,Games->Game.GamCod); NumQsts = Gam_DB_GetGameQuestionsBasic (&mysql_res,Games->Game.GamCod);
/***** Begin box *****/ /***** Begin box *****/
Box_BoxBegin (Txt_Questions, Box_BoxBegin (Txt_Questions,
ICanEditQuestions == Usr_I_CAN ? Gam_PutIconToAddNewQuestions : FunctionToDrawContextualIcons[ICanEditQuestions],
NULL, Args[ICanEditQuestions],
ICanEditQuestions == Usr_I_CAN ? Games :
NULL,
Hlp_ASSESSMENT_Games_questions,Box_NOT_CLOSABLE); Hlp_ASSESSMENT_Games_questions,Box_NOT_CLOSABLE);
/***** Show table with questions *****/ /***** Show table with questions *****/
@ -1736,11 +1744,17 @@ static void Gam_ListOneOrMoreQuestionsForEdition (struct Gam_Games *Games,
HTM_TD_Begin ("class=\"BT %s\"",The_GetColorRows ()); HTM_TD_Begin ("class=\"BT %s\"",The_GetColorRows ());
/* Put icon to remove the question */ /* Put icon to remove the question */
if (ICanEditQuestions == Usr_I_CAN) switch (ICanEditQuestions)
{
case Usr_I_CAN:
Ico_PutContextualIconToRemove (ActReqRemGamQst,NULL, Ico_PutContextualIconToRemove (ActReqRemGamQst,NULL,
Gam_PutParsOneQst,Games); Gam_PutParsOneQst,Games);
else break;
case Usr_I_CAN_NOT:
default:
Ico_PutIconRemovalNotAllowed (); Ico_PutIconRemovalNotAllowed ();
break;
}
/* Put icon to move up the question */ /* Put icon to move up the question */
if (ICanEditQuestions == Usr_I_CAN && QstInd > 1) if (ICanEditQuestions == Usr_I_CAN && QstInd > 1)
@ -2154,10 +2168,10 @@ static Usr_ICan_t Gam_CheckIfICanEditGame (const struct Gam_Game *Game)
{ {
if (Gam_CheckIfICanEditGames () == Usr_I_CAN) if (Gam_CheckIfICanEditGames () == Usr_I_CAN)
/***** Questions are editable only if game has no matches *****/ /***** Questions are editable only if game has no matches *****/
return Game->NumMchs == 0 ? Usr_I_CAN : // Games with matches should not be edited if (Game->NumMchs == 0)
Usr_I_CAN_NOT; return Usr_I_CAN;
else
return Usr_I_CAN_NOT; // Questions are not editable return Usr_I_CAN_NOT;
} }
/*****************************************************************************/ /*****************************************************************************/

View File

@ -349,6 +349,11 @@ void Grp_ShowFormToSelectSeveralGroups (Act_Action_t NextAction,
extern const char *Txt_Update_users; extern const char *Txt_Update_users;
unsigned NumGrpTyp; unsigned NumGrpTyp;
Usr_ICan_t ICanEdit; Usr_ICan_t ICanEdit;
static void (*FunctionToDrawContextualIcons[Usr_NUM_I_CAN]) (void *Args) =
{
[Usr_I_CAN_NOT] = NULL,
[Usr_I_CAN ] = Grp_PutIconToEditGroups,
};
/***** Trivial check: if no groups ==> nothing to do *****/ /***** Trivial check: if no groups ==> nothing to do *****/
if (!Gbl.Crs.Grps.NumGrps) if (!Gbl.Crs.Grps.NumGrps)
@ -360,9 +365,7 @@ void Grp_ShowFormToSelectSeveralGroups (Act_Action_t NextAction,
Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM)) ? Usr_I_CAN : Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM)) ? Usr_I_CAN :
Usr_I_CAN_NOT; Usr_I_CAN_NOT;
Box_BoxBegin (Txt_Groups, Box_BoxBegin (Txt_Groups,
ICanEdit == Usr_I_CAN ? Grp_PutIconToEditGroups : FunctionToDrawContextualIcons[ICanEdit],NULL,
NULL,
NULL,
Hlp_USERS_Groups,Box_CLOSABLE); Hlp_USERS_Groups,Box_CLOSABLE);
/***** Begin form to update the students listed /***** Begin form to update the students listed
@ -630,8 +633,9 @@ void Grp_ChangeMyGrps (Cns_QuietOrVerbose_t QuietOrVerbose)
bool ChangesMade; bool ChangesMade;
/***** Can I change my groups? *****/ /***** Can I change my groups? *****/
if (Grp_CheckIfICanChangeGrps () == Usr_I_CAN) if (Grp_CheckIfICanChangeGrps () == Usr_I_CAN_NOT)
{ return;
/***** Get list of groups types and groups in this course *****/ /***** Get list of groups types and groups in this course *****/
Grp_GetListGrpTypesAndGrpsInThisCrs (Grp_ONLY_GROUP_TYPES_WITH_GROUPS); Grp_GetListGrpTypesAndGrpsInThisCrs (Grp_ONLY_GROUP_TYPES_WITH_GROUPS);
@ -674,7 +678,6 @@ void Grp_ChangeMyGrps (Cns_QuietOrVerbose_t QuietOrVerbose)
/***** Free memory with the list of groups which I want to belong to *****/ /***** Free memory with the list of groups which I want to belong to *****/
Grp_FreeListCodGrp (&LstGrpsIWant); Grp_FreeListCodGrp (&LstGrpsIWant);
} }
}
/*****************************************************************************/ /*****************************************************************************/
/********************** Change groups of another user ************************/ /********************** Change groups of another user ************************/
@ -689,8 +692,9 @@ void Grp_ChangeOtherUsrGrps (void)
bool SelectionIsValid; bool SelectionIsValid;
/***** Can I change another user's groups? *****/ /***** Can I change another user's groups? *****/
if (Grp_CheckIfICanChangeGrps () == Usr_I_CAN) if (Grp_CheckIfICanChangeGrps () == Usr_I_CAN_NOT)
{ return;
/***** Get list of groups types and groups in current course *****/ /***** Get list of groups types and groups in current course *****/
Grp_GetListGrpTypesAndGrpsInThisCrs (Grp_ONLY_GROUP_TYPES_WITH_GROUPS); Grp_GetListGrpTypesAndGrpsInThisCrs (Grp_ONLY_GROUP_TYPES_WITH_GROUPS);
@ -719,7 +723,6 @@ void Grp_ChangeOtherUsrGrps (void)
/***** Free memory with the list of groups to/from which register/remove users *****/ /***** Free memory with the list of groups to/from which register/remove users *****/
Grp_FreeListCodGrp (&LstGrpsUsrWants); Grp_FreeListCodGrp (&LstGrpsUsrWants);
} }
}
/*****************************************************************************/ /*****************************************************************************/
/********************** Change my groups atomically **************************/ /********************** Change my groups atomically **************************/
@ -1714,6 +1717,11 @@ void Grp_ShowLstGrpsToChgMyGrps (void)
Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM)) ? Usr_I_CAN : Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM)) ? Usr_I_CAN :
Usr_I_CAN_NOT; Usr_I_CAN_NOT;
Usr_ICan_t ICanChangeMyGrps = Usr_I_CAN_NOT; Usr_ICan_t ICanChangeMyGrps = Usr_I_CAN_NOT;
static void (*FunctionToDrawContextualIcons[Usr_NUM_I_CAN]) (void *Args) =
{
[Usr_I_CAN_NOT] = NULL,
[Usr_I_CAN ] = Grp_PutIconToEditGroups,
};
if (Gbl.Crs.Grps.NumGrps) // This course has groups if (Gbl.Crs.Grps.NumGrps) // This course has groups
{ {
@ -1728,9 +1736,7 @@ void Grp_ShowLstGrpsToChgMyGrps (void)
/***** Begin box *****/ /***** Begin box *****/
Box_BoxBegin (Txt_My_groups, Box_BoxBegin (Txt_My_groups,
ICanEdit == Usr_I_CAN ? Grp_PutIconToEditGroups : FunctionToDrawContextualIcons[ICanEdit],NULL,
NULL,
NULL,
Hlp_USERS_Groups,Box_NOT_CLOSABLE); Hlp_USERS_Groups,Box_NOT_CLOSABLE);
if (Gbl.Crs.Grps.NumGrps) // This course has groups if (Gbl.Crs.Grps.NumGrps) // This course has groups
@ -1852,7 +1858,8 @@ static Usr_ICan_t Grp_ListGrpsForChangeMySelection (struct GroupType *GrpTyp,
if (GrpTyp->MultipleEnrolment) // Enrolment is multiple if (GrpTyp->MultipleEnrolment) // Enrolment is multiple
{ {
for (NumGrpThisType = 0, ICanChangeMySelectionForThisGrpTyp = Usr_I_CAN_NOT; for (NumGrpThisType = 0, ICanChangeMySelectionForThisGrpTyp = Usr_I_CAN_NOT;
NumGrpThisType < GrpTyp->NumGrps && ICanChangeMySelectionForThisGrpTyp == Usr_I_CAN_NOT; NumGrpThisType < GrpTyp->NumGrps &&
ICanChangeMySelectionForThisGrpTyp == Usr_I_CAN_NOT;
NumGrpThisType++) NumGrpThisType++)
{ {
Grp = &(GrpTyp->LstGrps[NumGrpThisType]); Grp = &(GrpTyp->LstGrps[NumGrpThisType]);
@ -1888,7 +1895,8 @@ static Usr_ICan_t Grp_ListGrpsForChangeMySelection (struct GroupType *GrpTyp,
else // I don't belong to a closed group else // I don't belong to a closed group
/* Step 2: Check if I can register in at least one group to which I don't belong */ /* Step 2: Check if I can register in at least one group to which I don't belong */
for (NumGrpThisType = 0, ICanChangeMySelectionForThisGrpTyp = Usr_I_CAN_NOT; for (NumGrpThisType = 0, ICanChangeMySelectionForThisGrpTyp = Usr_I_CAN_NOT;
NumGrpThisType < GrpTyp->NumGrps && ICanChangeMySelectionForThisGrpTyp == Usr_I_CAN_NOT; NumGrpThisType < GrpTyp->NumGrps &&
ICanChangeMySelectionForThisGrpTyp == Usr_I_CAN_NOT;
NumGrpThisType++) NumGrpThisType++)
{ {
Grp = &(GrpTyp->LstGrps[NumGrpThisType]); Grp = &(GrpTyp->LstGrps[NumGrpThisType]);
@ -1920,8 +1928,9 @@ static Usr_ICan_t Grp_ListGrpsForChangeMySelection (struct GroupType *GrpTyp,
IBelongToThisGroup = Grp_CheckIfGrpIsInList (Grp->GrpCod,&LstGrpsIBelong); IBelongToThisGroup = Grp_CheckIfGrpIsInList (Grp->GrpCod,&LstGrpsIBelong);
/* Selection disabled? */ /* Selection disabled? */
if (ICanChangeMySelectionForThisGrpTyp == Usr_I_CAN) // I can change my selection for this group type switch (ICanChangeMySelectionForThisGrpTyp) // I can change my selection for this group type
{ {
case Usr_I_CAN:
ICanChangeMySelectionForThisGrp = Usr_I_CAN; ICanChangeMySelectionForThisGrp = Usr_I_CAN;
if (Gbl.Usrs.Me.Role.Logged == Rol_STD) if (Gbl.Usrs.Me.Role.Logged == Rol_STD)
{ {
@ -1934,9 +1943,12 @@ static Usr_ICan_t Grp_ListGrpsForChangeMySelection (struct GroupType *GrpTyp,
else // If group is closed else // If group is closed
ICanChangeMySelectionForThisGrp = Usr_I_CAN_NOT; ICanChangeMySelectionForThisGrp = Usr_I_CAN_NOT;
} }
} break;
else // I can not change my selection for this group type case Usr_I_CAN_NOT: // I can not change my selection for this group type
default:
ICanChangeMySelectionForThisGrp = Usr_I_CAN_NOT; ICanChangeMySelectionForThisGrp = Usr_I_CAN_NOT;
break;
}
/* Put radio item or checkbox to select the group */ /* Put radio item or checkbox to select the group */
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);
@ -2188,8 +2200,9 @@ static void Grp_ListGrpsForMultipleSelection (struct GroupType *GrpTyp)
/* Write checkbox to select the group */ /* Write checkbox to select the group */
ICanSelUnselGroup = (Gbl.Usrs.Me.Role.Logged >= Rol_STD) ? Usr_I_CAN : ICanSelUnselGroup = (Gbl.Usrs.Me.Role.Logged >= Rol_STD) ? Usr_I_CAN :
Usr_I_CAN_NOT; Usr_I_CAN_NOT;
if (ICanSelUnselGroup == Usr_I_CAN) switch (ICanSelUnselGroup)
{ {
case Usr_I_CAN:
if (Gbl.Crs.Grps.AllGrps) if (Gbl.Crs.Grps.AllGrps)
Checked = true; Checked = true;
else else
@ -2201,9 +2214,12 @@ static void Grp_ListGrpsForMultipleSelection (struct GroupType *GrpTyp)
Checked = true; Checked = true;
break; break;
} }
} break;
else case Usr_I_CAN_NOT:
default:
Checked = false; Checked = false;
break;
}
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);

View File

@ -127,23 +127,6 @@ static Act_Action_t Inf_ActionsInfo[Inf_NUM_SOURCES][Inf_NUM_TYPES] =
[Inf_URL ][Inf_ASSESSMENT ] = ActRcvURLAss, [Inf_URL ][Inf_ASSESSMENT ] = ActRcvURLAss,
}; };
/***** Help *****/
extern const char *Hlp_COURSE_Information_textual_information;
extern const char *Hlp_COURSE_Guide;
extern const char *Hlp_COURSE_Syllabus;
extern const char *Hlp_COURSE_Bibliography;
extern const char *Hlp_COURSE_FAQ;
extern const char *Hlp_COURSE_Links;
extern const char *Hlp_COURSE_Assessment;
extern const char *Hlp_COURSE_Information_edit;
extern const char *Hlp_COURSE_Guide_edit;
extern const char *Hlp_COURSE_Syllabus_edit;
extern const char *Hlp_COURSE_Bibliography_edit;
extern const char *Hlp_COURSE_FAQ_edit;
extern const char *Hlp_COURSE_Links_edit;
extern const char *Hlp_COURSE_Assessment_edit;
/*****************************************************************************/ /*****************************************************************************/
/**************************** Private prototypes *****************************/ /**************************** Private prototypes *****************************/
/*****************************************************************************/ /*****************************************************************************/
@ -181,6 +164,13 @@ static bool Inf_CheckAndShowRichTxt (void);
void Inf_ShowInfo (void) void Inf_ShowInfo (void)
{ {
extern const char *Hlp_COURSE_Information_textual_information;
extern const char *Hlp_COURSE_Guide;
extern const char *Hlp_COURSE_Syllabus;
extern const char *Hlp_COURSE_Bibliography;
extern const char *Hlp_COURSE_FAQ;
extern const char *Hlp_COURSE_Links;
extern const char *Hlp_COURSE_Assessment;
extern const char *Txt_INFO_TITLE[Inf_NUM_TYPES]; extern const char *Txt_INFO_TITLE[Inf_NUM_TYPES];
extern const char *Txt_No_information; extern const char *Txt_No_information;
struct Syl_Syllabus Syllabus; struct Syl_Syllabus Syllabus;
@ -190,16 +180,26 @@ void Inf_ShowInfo (void)
Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM) ? Usr_I_CAN : Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM) ? Usr_I_CAN :
Usr_I_CAN_NOT; Usr_I_CAN_NOT;
bool ShowWarningNoInfo = false; bool ShowWarningNoInfo = false;
const char *Help[Inf_NUM_TYPES] = static void (*FunctionToDrawContextualIcons[Usr_NUM_I_CAN]) (void *Args) =
{ {
[Inf_INFORMATION ] = Hlp_COURSE_Information_textual_information, [Usr_I_CAN_NOT] = NULL,
[Inf_TEACHING_GUIDE] = Hlp_COURSE_Guide, [Usr_I_CAN ] = Inf_PutIconToEditInfo,
[Inf_LECTURES ] = Hlp_COURSE_Syllabus, };
[Inf_PRACTICALS ] = Hlp_COURSE_Syllabus, static void *Args[Usr_NUM_I_CAN] =
[Inf_BIBLIOGRAPHY ] = Hlp_COURSE_Bibliography, {
[Inf_FAQ ] = Hlp_COURSE_FAQ, [Usr_I_CAN_NOT] = NULL,
[Inf_LINKS ] = Hlp_COURSE_Links, [Usr_I_CAN ] = &Gbl.Crs.Info.Type,
[Inf_ASSESSMENT ] = Hlp_COURSE_Assessment, };
static const char **Help[Inf_NUM_TYPES] =
{
[Inf_INFORMATION ] = &Hlp_COURSE_Information_textual_information,
[Inf_TEACHING_GUIDE] = &Hlp_COURSE_Guide,
[Inf_LECTURES ] = &Hlp_COURSE_Syllabus,
[Inf_PRACTICALS ] = &Hlp_COURSE_Syllabus,
[Inf_BIBLIOGRAPHY ] = &Hlp_COURSE_Bibliography,
[Inf_FAQ ] = &Hlp_COURSE_FAQ,
[Inf_LINKS ] = &Hlp_COURSE_Links,
[Inf_ASSESSMENT ] = &Hlp_COURSE_Assessment,
}; };
/***** Reset syllabus context *****/ /***** Reset syllabus context *****/
@ -245,11 +245,8 @@ void Inf_ShowInfo (void)
/***** Begin box *****/ /***** Begin box *****/
Box_BoxBegin (Txt_INFO_TITLE[Gbl.Crs.Info.Type], Box_BoxBegin (Txt_INFO_TITLE[Gbl.Crs.Info.Type],
(ICanEdit == Usr_I_CAN) ? Inf_PutIconToEditInfo : FunctionToDrawContextualIcons[ICanEdit],Args[ICanEdit],
NULL, *Help[Gbl.Crs.Info.Type],Box_NOT_CLOSABLE);
(ICanEdit == Usr_I_CAN) ? &Gbl.Crs.Info.Type :
NULL,
Help[Gbl.Crs.Info.Type],Box_NOT_CLOSABLE);
/****** Form to select syllabus *****/ /****** Form to select syllabus *****/
Syl_PutFormWhichSyllabus (Syllabus.WhichSyllabus); Syl_PutFormWhichSyllabus (Syllabus.WhichSyllabus);
@ -809,6 +806,13 @@ void Inf_SetInfoSrc (void)
void Inf_FormsToSelSendInfo (void) void Inf_FormsToSelSendInfo (void)
{ {
extern const char *Hlp_COURSE_Information_edit;
extern const char *Hlp_COURSE_Guide_edit;
extern const char *Hlp_COURSE_Syllabus_edit;
extern const char *Hlp_COURSE_Bibliography_edit;
extern const char *Hlp_COURSE_FAQ_edit;
extern const char *Hlp_COURSE_Links_edit;
extern const char *Hlp_COURSE_Assessment_edit;
extern const char *Txt_Source_of_information; extern const char *Txt_Source_of_information;
extern const char *Txt_INFO_SRC_FULL_TEXT[Inf_NUM_SOURCES]; extern const char *Txt_INFO_SRC_FULL_TEXT[Inf_NUM_SOURCES];
extern const char *Txt_INFO_SRC_HELP[Inf_NUM_SOURCES]; extern const char *Txt_INFO_SRC_HELP[Inf_NUM_SOURCES];
@ -837,16 +841,16 @@ void Inf_FormsToSelSendInfo (void)
[Inf_PAGE ] = Inf_FormToSendPage, [Inf_PAGE ] = Inf_FormToSendPage,
[Inf_URL ] = Inf_FormToSendURL, [Inf_URL ] = Inf_FormToSendURL,
}; };
const char *HelpEdit[Inf_NUM_TYPES] = static const char **HelpEdit[Inf_NUM_TYPES] =
{ {
[Inf_INFORMATION ] = Hlp_COURSE_Information_edit, [Inf_INFORMATION ] = &Hlp_COURSE_Information_edit,
[Inf_TEACHING_GUIDE] = Hlp_COURSE_Guide_edit, [Inf_TEACHING_GUIDE] = &Hlp_COURSE_Guide_edit,
[Inf_LECTURES ] = Hlp_COURSE_Syllabus_edit, [Inf_LECTURES ] = &Hlp_COURSE_Syllabus_edit,
[Inf_PRACTICALS ] = Hlp_COURSE_Syllabus_edit, [Inf_PRACTICALS ] = &Hlp_COURSE_Syllabus_edit,
[Inf_BIBLIOGRAPHY ] = Hlp_COURSE_Bibliography_edit, [Inf_BIBLIOGRAPHY ] = &Hlp_COURSE_Bibliography_edit,
[Inf_FAQ ] = Hlp_COURSE_FAQ_edit, [Inf_FAQ ] = &Hlp_COURSE_FAQ_edit,
[Inf_LINKS ] = Hlp_COURSE_Links_edit, [Inf_LINKS ] = &Hlp_COURSE_Links_edit,
[Inf_ASSESSMENT ] = Hlp_COURSE_Assessment_edit, [Inf_ASSESSMENT ] = &Hlp_COURSE_Assessment_edit,
}; };
/***** Reset syllabus context *****/ /***** Reset syllabus context *****/
@ -880,7 +884,7 @@ void Inf_FormsToSelSendInfo (void)
/* Begin box and table */ /* Begin box and table */
Box_BoxTableBegin (Txt_Source_of_information, Box_BoxTableBegin (Txt_Source_of_information,
Inf_PutIconToViewInfo,&Gbl.Crs.Info.Type, Inf_PutIconToViewInfo,&Gbl.Crs.Info.Type,
HelpEdit[Gbl.Crs.Info.Type],Box_NOT_CLOSABLE,4); *HelpEdit[Gbl.Crs.Info.Type],Box_NOT_CLOSABLE,4);
/* Options */ /* Options */
for (InfoSrc = (Inf_Src_t) 0; for (InfoSrc = (Inf_Src_t) 0;
@ -1493,6 +1497,13 @@ static bool Inf_CheckAndShowRichTxt (void)
void Inf_EditPlainTxtInfo (void) void Inf_EditPlainTxtInfo (void)
{ {
extern const char *Hlp_COURSE_Information_edit;
extern const char *Hlp_COURSE_Guide_edit;
extern const char *Hlp_COURSE_Syllabus_edit;
extern const char *Hlp_COURSE_Bibliography_edit;
extern const char *Hlp_COURSE_FAQ_edit;
extern const char *Hlp_COURSE_Links_edit;
extern const char *Hlp_COURSE_Assessment_edit;
extern Syl_WhichSyllabus_t Syl_WhichSyllabus[Syl_NUM_WHICH_SYLLABUS]; extern Syl_WhichSyllabus_t Syl_WhichSyllabus[Syl_NUM_WHICH_SYLLABUS];
extern const char *Txt_INFO_TITLE[Inf_NUM_TYPES]; extern const char *Txt_INFO_TITLE[Inf_NUM_TYPES];
extern const char *Txt_Save_changes; extern const char *Txt_Save_changes;
@ -1509,16 +1520,16 @@ void Inf_EditPlainTxtInfo (void)
[Inf_LINKS ] = {ActRcvPlaTxtCrsLnk,NULL,NULL}, [Inf_LINKS ] = {ActRcvPlaTxtCrsLnk,NULL,NULL},
[Inf_ASSESSMENT ] = {ActRcvPlaTxtAss ,NULL,NULL}, [Inf_ASSESSMENT ] = {ActRcvPlaTxtAss ,NULL,NULL},
}; };
const char *HelpEdit[Inf_NUM_TYPES] = static const char **HelpEdit[Inf_NUM_TYPES] =
{ {
[Inf_INFORMATION ] = Hlp_COURSE_Information_edit, [Inf_INFORMATION ] = &Hlp_COURSE_Information_edit,
[Inf_TEACHING_GUIDE] = Hlp_COURSE_Guide_edit, [Inf_TEACHING_GUIDE] = &Hlp_COURSE_Guide_edit,
[Inf_LECTURES ] = Hlp_COURSE_Syllabus_edit, [Inf_LECTURES ] = &Hlp_COURSE_Syllabus_edit,
[Inf_PRACTICALS ] = Hlp_COURSE_Syllabus_edit, [Inf_PRACTICALS ] = &Hlp_COURSE_Syllabus_edit,
[Inf_BIBLIOGRAPHY ] = Hlp_COURSE_Bibliography_edit, [Inf_BIBLIOGRAPHY ] = &Hlp_COURSE_Bibliography_edit,
[Inf_FAQ ] = Hlp_COURSE_FAQ_edit, [Inf_FAQ ] = &Hlp_COURSE_FAQ_edit,
[Inf_LINKS ] = Hlp_COURSE_Links_edit, [Inf_LINKS ] = &Hlp_COURSE_Links_edit,
[Inf_ASSESSMENT ] = Hlp_COURSE_Assessment_edit, [Inf_ASSESSMENT ] = &Hlp_COURSE_Assessment_edit,
}; };
/***** Reset syllabus context *****/ /***** Reset syllabus context *****/
@ -1532,7 +1543,7 @@ void Inf_EditPlainTxtInfo (void)
if (Inf_Actions[Gbl.Crs.Info.Type].FuncPars) if (Inf_Actions[Gbl.Crs.Info.Type].FuncPars)
Inf_Actions[Gbl.Crs.Info.Type].FuncPars (Inf_Actions[Gbl.Crs.Info.Type].Args); Inf_Actions[Gbl.Crs.Info.Type].FuncPars (Inf_Actions[Gbl.Crs.Info.Type].Args);
Box_BoxBegin (Txt_INFO_TITLE[Gbl.Crs.Info.Type],NULL,NULL, Box_BoxBegin (Txt_INFO_TITLE[Gbl.Crs.Info.Type],NULL,NULL,
HelpEdit[Gbl.Crs.Info.Type],Box_NOT_CLOSABLE); *HelpEdit[Gbl.Crs.Info.Type],Box_NOT_CLOSABLE);
switch (Gbl.Crs.Info.Type) switch (Gbl.Crs.Info.Type)
{ {
@ -1569,6 +1580,13 @@ void Inf_EditPlainTxtInfo (void)
void Inf_EditRichTxtInfo (void) void Inf_EditRichTxtInfo (void)
{ {
extern const char *Hlp_COURSE_Information_edit;
extern const char *Hlp_COURSE_Guide_edit;
extern const char *Hlp_COURSE_Syllabus_edit;
extern const char *Hlp_COURSE_Bibliography_edit;
extern const char *Hlp_COURSE_FAQ_edit;
extern const char *Hlp_COURSE_Links_edit;
extern const char *Hlp_COURSE_Assessment_edit;
extern Syl_WhichSyllabus_t Syl_WhichSyllabus[Syl_NUM_WHICH_SYLLABUS]; extern Syl_WhichSyllabus_t Syl_WhichSyllabus[Syl_NUM_WHICH_SYLLABUS];
extern const char *Txt_INFO_TITLE[Inf_NUM_TYPES]; extern const char *Txt_INFO_TITLE[Inf_NUM_TYPES];
extern const char *Txt_Save_changes; extern const char *Txt_Save_changes;
@ -1585,16 +1603,16 @@ void Inf_EditRichTxtInfo (void)
[Inf_LINKS ] = {ActRcvRchTxtCrsLnk,NULL,NULL}, [Inf_LINKS ] = {ActRcvRchTxtCrsLnk,NULL,NULL},
[Inf_ASSESSMENT ] = {ActRcvRchTxtAss ,NULL,NULL}, [Inf_ASSESSMENT ] = {ActRcvRchTxtAss ,NULL,NULL},
}; };
const char *HelpEdit[Inf_NUM_TYPES] = static const char **HelpEdit[Inf_NUM_TYPES] =
{ {
[Inf_INFORMATION ] = Hlp_COURSE_Information_edit, [Inf_INFORMATION ] = &Hlp_COURSE_Information_edit,
[Inf_TEACHING_GUIDE] = Hlp_COURSE_Guide_edit, [Inf_TEACHING_GUIDE] = &Hlp_COURSE_Guide_edit,
[Inf_LECTURES ] = Hlp_COURSE_Syllabus_edit, [Inf_LECTURES ] = &Hlp_COURSE_Syllabus_edit,
[Inf_PRACTICALS ] = Hlp_COURSE_Syllabus_edit, [Inf_PRACTICALS ] = &Hlp_COURSE_Syllabus_edit,
[Inf_BIBLIOGRAPHY ] = Hlp_COURSE_Bibliography_edit, [Inf_BIBLIOGRAPHY ] = &Hlp_COURSE_Bibliography_edit,
[Inf_FAQ ] = Hlp_COURSE_FAQ_edit, [Inf_FAQ ] = &Hlp_COURSE_FAQ_edit,
[Inf_LINKS ] = Hlp_COURSE_Links_edit, [Inf_LINKS ] = &Hlp_COURSE_Links_edit,
[Inf_ASSESSMENT ] = Hlp_COURSE_Assessment_edit, [Inf_ASSESSMENT ] = &Hlp_COURSE_Assessment_edit,
}; };
/***** Reset syllabus context *****/ /***** Reset syllabus context *****/
@ -1608,7 +1626,7 @@ void Inf_EditRichTxtInfo (void)
if (Inf_Actions[Gbl.Crs.Info.Type].FuncPars) if (Inf_Actions[Gbl.Crs.Info.Type].FuncPars)
Inf_Actions[Gbl.Crs.Info.Type].FuncPars (Inf_Actions[Gbl.Crs.Info.Type].Args); Inf_Actions[Gbl.Crs.Info.Type].FuncPars (Inf_Actions[Gbl.Crs.Info.Type].Args);
Box_BoxBegin (Txt_INFO_TITLE[Gbl.Crs.Info.Type],NULL,NULL, Box_BoxBegin (Txt_INFO_TITLE[Gbl.Crs.Info.Type],NULL,NULL,
HelpEdit[Gbl.Crs.Info.Type],Box_NOT_CLOSABLE); *HelpEdit[Gbl.Crs.Info.Type],Box_NOT_CLOSABLE);
switch (Gbl.Crs.Info.Type) switch (Gbl.Crs.Info.Type)
{ {

View File

@ -950,8 +950,9 @@ static void Ins_ListInstitutionsForEdition (void)
/* Institution WWW */ /* Institution WWW */
HTM_TD_Begin ("class=\"LT DAT_%s\"",The_GetSuffix ()); HTM_TD_Begin ("class=\"LT DAT_%s\"",The_GetSuffix ());
if (ICanEdit == Usr_I_CAN) switch (ICanEdit)
{ {
case Usr_I_CAN:
Frm_BeginForm (ActChgInsWWW); Frm_BeginForm (ActChgInsWWW);
ParCod_PutPar (ParCod_OthHie,Ins->HieCod); ParCod_PutPar (ParCod_OthHie,Ins->HieCod);
HTM_INPUT_URL ("WWW",Ins->WWW,HTM_SUBMIT_ON_CHANGE, HTM_INPUT_URL ("WWW",Ins->WWW,HTM_SUBMIT_ON_CHANGE,
@ -959,9 +960,9 @@ static void Ins_ListInstitutionsForEdition (void)
" required=\"required\"", " required=\"required\"",
The_GetSuffix ()); The_GetSuffix ());
Frm_EndForm (); Frm_EndForm ();
} break;
else case Usr_I_CAN_NOT:
{ default:
Str_Copy (WWW,Ins->WWW,sizeof (WWW) - 1); Str_Copy (WWW,Ins->WWW,sizeof (WWW) - 1);
HTM_DIV_Begin ("class=\"EXTERNAL_WWW_SHRT\""); HTM_DIV_Begin ("class=\"EXTERNAL_WWW_SHRT\"");
HTM_A_Begin ("href=\"%s\" target=\"_blank\" title=\"%s\"" HTM_A_Begin ("href=\"%s\" target=\"_blank\" title=\"%s\""
@ -972,6 +973,7 @@ static void Ins_ListInstitutionsForEdition (void)
HTM_Txt (WWW); HTM_Txt (WWW);
HTM_A_End (); HTM_A_End ();
HTM_DIV_End (); HTM_DIV_End ();
break;
} }
HTM_TD_End (); HTM_TD_End ();

View File

@ -1296,17 +1296,19 @@ void Mai_RemoveOtherUsrEmail (void)
{ {
/***** Get other user's code from form and get user's data *****/ /***** Get other user's code from form and get user's data *****/
if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ()) if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ())
switch (Usr_CheckIfICanEditOtherUsr (&Gbl.Usrs.Other.UsrDat))
{ {
if (Usr_CheckIfICanEditOtherUsr (&Gbl.Usrs.Other.UsrDat) == Usr_I_CAN) case Usr_I_CAN:
{
/***** Remove user's email *****/ /***** Remove user's email *****/
Mai_RemoveEmail (&Gbl.Usrs.Other.UsrDat); Mai_RemoveEmail (&Gbl.Usrs.Other.UsrDat);
/***** Show form again *****/ /***** Show form again *****/
Acc_ShowFormChgOtherUsrAccount (); Acc_ShowFormChgOtherUsrAccount ();
} break;
else case Usr_I_CAN_NOT:
default:
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
break;
} }
else // User not found else // User not found
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
@ -1321,8 +1323,9 @@ static void Mai_RemoveEmail (struct Usr_Data *UsrDat)
extern const char *Txt_Email_X_removed; extern const char *Txt_Email_X_removed;
char Email[Cns_MAX_BYTES_EMAIL_ADDRESS + 1]; char Email[Cns_MAX_BYTES_EMAIL_ADDRESS + 1];
if (Usr_CheckIfICanEditOtherUsr (UsrDat) == Usr_I_CAN) switch (Usr_CheckIfICanEditOtherUsr (UsrDat))
{ {
case Usr_I_CAN:
/***** Get new email from form *****/ /***** Get new email from form *****/
Par_GetParText ("Email",Email,Cns_MAX_BYTES_EMAIL_ADDRESS); Par_GetParText ("Email",Email,Cns_MAX_BYTES_EMAIL_ADDRESS);
@ -1336,9 +1339,12 @@ static void Mai_RemoveEmail (struct Usr_Data *UsrDat)
/***** Update list of emails *****/ /***** Update list of emails *****/
Mai_GetEmailFromUsrCod (UsrDat); Mai_GetEmailFromUsrCod (UsrDat);
} break;
else case Usr_I_CAN_NOT:
default:
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
break;
}
} }
/*****************************************************************************/ /*****************************************************************************/
@ -1362,18 +1368,20 @@ void Mai_ChangeOtherUsrEmail (void)
{ {
/***** Get other user's code from form and get user's data *****/ /***** Get other user's code from form and get user's data *****/
if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ()) if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ())
switch (Usr_CheckIfICanEditOtherUsr (&Gbl.Usrs.Other.UsrDat))
{ {
if (Usr_CheckIfICanEditOtherUsr (&Gbl.Usrs.Other.UsrDat) == Usr_I_CAN) case Usr_I_CAN:
{
/***** Change user's ID *****/ /***** Change user's ID *****/
Mai_ChangeUsrEmail (&Gbl.Usrs.Other.UsrDat, Mai_ChangeUsrEmail (&Gbl.Usrs.Other.UsrDat,
Usr_ItsMe (Gbl.Usrs.Other.UsrDat.UsrCod)); Usr_ItsMe (Gbl.Usrs.Other.UsrDat.UsrCod));
/***** Show form again *****/ /***** Show form again *****/
Acc_ShowFormChgOtherUsrAccount (); Acc_ShowFormChgOtherUsrAccount ();
} break;
else case Usr_I_CAN_NOT:
default:
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
break;
} }
else // User not found else // User not found
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
@ -1391,8 +1399,9 @@ static void Mai_ChangeUsrEmail (struct Usr_Data *UsrDat,Usr_MeOrOther_t MeOrOthe
extern const char *Txt_The_email_address_entered_X_is_not_valid; extern const char *Txt_The_email_address_entered_X_is_not_valid;
char NewEmail[Cns_MAX_BYTES_EMAIL_ADDRESS + 1]; char NewEmail[Cns_MAX_BYTES_EMAIL_ADDRESS + 1];
if (Usr_CheckIfICanEditOtherUsr (UsrDat) == Usr_I_CAN) switch (Usr_CheckIfICanEditOtherUsr (UsrDat))
{ {
case Usr_I_CAN:
/***** Get new email from form *****/ /***** Get new email from form *****/
Par_GetParText ("NewEmail",NewEmail,Cns_MAX_BYTES_EMAIL_ADDRESS); Par_GetParText ("NewEmail",NewEmail,Cns_MAX_BYTES_EMAIL_ADDRESS);
@ -1431,9 +1440,12 @@ static void Mai_ChangeUsrEmail (struct Usr_Data *UsrDat,Usr_MeOrOther_t MeOrOthe
Ale_CreateAlert (Ale_WARNING,Mai_EMAIL_SECTION_ID, Ale_CreateAlert (Ale_WARNING,Mai_EMAIL_SECTION_ID,
Txt_The_email_address_entered_X_is_not_valid, Txt_The_email_address_entered_X_is_not_valid,
NewEmail); NewEmail);
} break;
else case Usr_I_CAN_NOT:
default:
Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission (); Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission ();
break;
}
} }
/*****************************************************************************/ /*****************************************************************************/

View File

@ -551,8 +551,9 @@ static void Mch_ListOneOrMoreMatchesIcons (struct Gam_Games *Games,
{ {
HTM_TD_Begin ("rowspan=\"2\" class=\"BT %s\"",The_GetColorRows ()); HTM_TD_Begin ("rowspan=\"2\" class=\"BT %s\"",The_GetColorRows ());
if (Mch_CheckIfICanEditThisMatch (Match) == Usr_I_CAN) switch (Mch_CheckIfICanEditThisMatch (Match))
{ {
case Usr_I_CAN:
Games->MchCod = Match->MchCod; Games->MchCod = Match->MchCod;
/***** Put icon to remove the match *****/ /***** Put icon to remove the match *****/
@ -560,9 +561,12 @@ static void Mch_ListOneOrMoreMatchesIcons (struct Gam_Games *Games,
/***** Put icon to edit the match *****/ /***** Put icon to edit the match *****/
Ico_PutContextualIconToEdit (ActReqChgMch,Anchor,Mch_PutParsEdit,Games); Ico_PutContextualIconToEdit (ActReqChgMch,Anchor,Mch_PutParsEdit,Games);
} break;
else case Usr_I_CAN_NOT:
default:
Ico_PutIconRemovalNotAllowed (); Ico_PutIconRemovalNotAllowed ();
break;
}
HTM_TD_End (); HTM_TD_End ();
} }
@ -835,8 +839,9 @@ static void Mch_ListOneOrMoreMatchesResultTch (struct Gam_Games *Games,
"trophy.svg",Ico_BLACK); "trophy.svg",Ico_BLACK);
/***** Check if visibility of session results can be changed *****/ /***** Check if visibility of session results can be changed *****/
if (Mch_CheckIfICanChangeVisibilityOfResults (Match) == Usr_I_CAN) switch (Mch_CheckIfICanChangeVisibilityOfResults (Match))
{ {
case Usr_I_CAN:
/* I can edit visibility */ /* I can edit visibility */
if (Match->Status.ShowUsrResults) if (Match->Status.ShowUsrResults)
Lay_PutContextualLinkOnlyIcon (ActChgVisResMchUsr,NULL, Lay_PutContextualLinkOnlyIcon (ActChgVisResMchUsr,NULL,
@ -846,14 +851,15 @@ static void Mch_ListOneOrMoreMatchesResultTch (struct Gam_Games *Games,
Lay_PutContextualLinkOnlyIcon (ActChgVisResMchUsr,NULL, Lay_PutContextualLinkOnlyIcon (ActChgVisResMchUsr,NULL,
Mch_PutParsEdit,Games, Mch_PutParsEdit,Games,
"eye-slash.svg",Ico_RED); "eye-slash.svg",Ico_RED);
} break;
else case Usr_I_CAN_NOT:
{ default:
/* I can not edit visibility */ /* I can not edit visibility */
if (Match->Status.ShowUsrResults) if (Match->Status.ShowUsrResults)
Ico_PutIconOff ("eye.svg" ,Ico_GREEN,Txt_Visible_results); Ico_PutIconOff ("eye.svg" ,Ico_GREEN,Txt_Visible_results);
else else
Ico_PutIconOff ("eye-slash.svg",Ico_RED ,Txt_Hidden_results ); Ico_PutIconOff ("eye-slash.svg",Ico_RED ,Txt_Hidden_results );
break;
} }
} }

View File

@ -761,8 +761,7 @@ static void MchRes_ShowMchResults (struct Gam_Games *Games,
(unsigned) StartEndTime,UniqueId) < 0) (unsigned) StartEndTime,UniqueId) < 0)
Err_NotEnoughMemoryExit (); Err_NotEnoughMemoryExit ();
HTM_TD_Begin ("id=\"%s\" class=\"LT DAT_%s %s\"", HTM_TD_Begin ("id=\"%s\" class=\"LT DAT_%s %s\"",
Id,The_GetSuffix (), Id,The_GetSuffix (),The_GetColorRows ());
The_GetColorRows ());
Dat_WriteLocalDateHMSFromUTC (Id,Print.TimeUTC[StartEndTime], Dat_WriteLocalDateHMSFromUTC (Id,Print.TimeUTC[StartEndTime],
Gbl.Prefs.DateFormat,Dat_SEPARATOR_BREAK, Gbl.Prefs.DateFormat,Dat_SEPARATOR_BREAK,
true,true,false,0x7); true,true,false,0x7);
@ -772,8 +771,7 @@ static void MchRes_ShowMchResults (struct Gam_Games *Games,
/* Write match title */ /* Write match title */
HTM_TD_Begin ("class=\"LT DAT_%s %s\"", HTM_TD_Begin ("class=\"LT DAT_%s %s\"",
The_GetSuffix (), The_GetSuffix (),The_GetColorRows ());
The_GetColorRows ());
HTM_Txt (Match.Title); HTM_Txt (Match.Title);
HTM_TD_End (); HTM_TD_End ();
@ -787,90 +785,114 @@ static void MchRes_ShowMchResults (struct Gam_Games *Games,
/* Write number of questions */ /* Write number of questions */
HTM_TD_Begin ("class=\"RT DAT_%s LINE_LEFT %s\"", HTM_TD_Begin ("class=\"RT DAT_%s LINE_LEFT %s\"",
The_GetSuffix (), The_GetSuffix (),The_GetColorRows ());
The_GetColorRows ()); switch (ICanView.Score)
if (ICanView.Score == Usr_I_CAN) {
case Usr_I_CAN:
HTM_Unsigned (Print.NumQsts.All); HTM_Unsigned (Print.NumQsts.All);
else break;
case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible (); Ico_PutIconNotVisible ();
break;
}
HTM_TD_End (); HTM_TD_End ();
/* Write number of non-blank answers */ /* Write number of non-blank answers */
HTM_TD_Begin ("class=\"RT DAT_%s LINE_LEFT %s\"", HTM_TD_Begin ("class=\"RT DAT_%s LINE_LEFT %s\"",
The_GetSuffix (), The_GetSuffix (),The_GetColorRows ());
The_GetColorRows ()); switch (ICanView.Score)
if (ICanView.Score == Usr_I_CAN)
{ {
case Usr_I_CAN:
if (Print.NumQsts.NotBlank) if (Print.NumQsts.NotBlank)
HTM_Unsigned (Print.NumQsts.NotBlank); HTM_Unsigned (Print.NumQsts.NotBlank);
else else
HTM_Light0 (); HTM_Light0 ();
} break;
else case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible (); Ico_PutIconNotVisible ();
break;
}
HTM_TD_End (); HTM_TD_End ();
/* Write number of blank answers */ /* Write number of blank answers */
HTM_TD_Begin ("class=\"RT DAT_%s %s\"", HTM_TD_Begin ("class=\"RT DAT_%s %s\"",
The_GetSuffix (), The_GetSuffix (),The_GetColorRows ());
The_GetColorRows ());
NumQstsBlank = Print.NumQsts.All - Print.NumQsts.NotBlank; NumQstsBlank = Print.NumQsts.All - Print.NumQsts.NotBlank;
if (ICanView.Score == Usr_I_CAN) switch (ICanView.Score)
{ {
case Usr_I_CAN:
if (NumQstsBlank) if (NumQstsBlank)
HTM_Unsigned (NumQstsBlank); HTM_Unsigned (NumQstsBlank);
else else
HTM_Light0 (); HTM_Light0 ();
} break;
else case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible (); Ico_PutIconNotVisible ();
break;
}
HTM_TD_End (); HTM_TD_End ();
/* Write score */ /* Write score */
HTM_TD_Begin ("class=\"RT DAT_%s LINE_LEFT %s\"", HTM_TD_Begin ("class=\"RT DAT_%s LINE_LEFT %s\"",
The_GetSuffix (), The_GetSuffix (),The_GetColorRows ());
The_GetColorRows ()); switch (ICanView.Score)
if (ICanView.Score == Usr_I_CAN)
{ {
case Usr_I_CAN:
HTM_Double2Decimals (Print.Score); HTM_Double2Decimals (Print.Score);
HTM_Txt ("/"); HTM_Txt ("/");
HTM_Unsigned (Print.NumQsts.All); HTM_Unsigned (Print.NumQsts.All);
} break;
else case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible (); Ico_PutIconNotVisible ();
break;
}
HTM_TD_End (); HTM_TD_End ();
/* Write average score per question */ /* Write average score per question */
HTM_TD_Begin ("class=\"RT DAT_%s %s\"", HTM_TD_Begin ("class=\"RT DAT_%s %s\"",
The_GetSuffix (), The_GetSuffix (),The_GetColorRows ());
The_GetColorRows ()); switch (ICanView.Score)
if (ICanView.Score == Usr_I_CAN) {
case Usr_I_CAN:
HTM_Double2Decimals (Print.NumQsts.All ? Print.Score / HTM_Double2Decimals (Print.NumQsts.All ? Print.Score /
(double) Print.NumQsts.All : (double) Print.NumQsts.All :
0.0); 0.0);
else break;
case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible (); Ico_PutIconNotVisible ();
break;
}
HTM_TD_End (); HTM_TD_End ();
/* Write grade over maximum grade */ /* Write grade over maximum grade */
HTM_TD_Begin ("class=\"RT DAT_%s LINE_LEFT %s\"", HTM_TD_Begin ("class=\"RT DAT_%s LINE_LEFT %s\"",
The_GetSuffix (), The_GetSuffix (),The_GetColorRows ());
The_GetColorRows ()); switch (ICanView.Score)
if (ICanView.Score == Usr_I_CAN)
{ {
Grade = TstPrn_ComputeGrade (Print.NumQsts.All,Print.Score,Games->Game.MaxGrade); case Usr_I_CAN:
Grade = TstPrn_ComputeGrade (Print.NumQsts.All,Print.Score,
Games->Game.MaxGrade);
TstPrn_ShowGrade (Grade,Games->Game.MaxGrade); TstPrn_ShowGrade (Grade,Games->Game.MaxGrade);
TotalGrade += Grade; TotalGrade += Grade;
} break;
else case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible (); Ico_PutIconNotVisible ();
break;
}
HTM_TD_End (); HTM_TD_End ();
/* Link to show this result */ /* Link to show this result */
HTM_TD_Begin ("class=\"RT LINE_LEFT %s\"", HTM_TD_Begin ("class=\"RT LINE_LEFT %s\"",
The_GetColorRows ()); The_GetColorRows ());
if (ICanView.Result == Usr_I_CAN) switch (ICanView.Result)
{ {
case Usr_I_CAN:
Games->Game.GamCod = Match.GamCod; Games->Game.GamCod = Match.GamCod;
Games->MchCod = Match.MchCod; Games->MchCod = Match.MchCod;
switch (MeOrOther) switch (MeOrOther)
@ -888,9 +910,12 @@ static void MchRes_ShowMchResults (struct Gam_Games *Games,
break; break;
} }
Frm_EndForm (); Frm_EndForm ();
} break;
else case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible (); Ico_PutIconNotVisible ();
break;
}
HTM_TD_End (); HTM_TD_End ();
HTM_TR_End (); HTM_TR_End ();
@ -1071,7 +1096,6 @@ void MchRes_ShowOneMchResult (void)
UsrDat = &Gbl.Usrs.Me.UsrDat; UsrDat = &Gbl.Usrs.Me.UsrDat;
break; break;
case Usr_OTHER: case Usr_OTHER:
default:
UsrDat = &Gbl.Usrs.Other.UsrDat; UsrDat = &Gbl.Usrs.Other.UsrDat;
Usr_GetParOtherUsrCodEncrypted (UsrDat); Usr_GetParOtherUsrCodEncrypted (UsrDat);
break; break;
@ -1201,16 +1225,20 @@ void MchRes_ShowOneMchResult (void)
HTM_TD_Begin ("class=\"LB DAT_%s\"", HTM_TD_Begin ("class=\"LB DAT_%s\"",
The_GetSuffix ()); The_GetSuffix ());
if (ICanView.Score == Usr_I_CAN) switch (ICanView.Score)
{ {
case Usr_I_CAN:
HTM_STRONG_Begin (); HTM_STRONG_Begin ();
HTM_Double2Decimals (Print.Score); HTM_Double2Decimals (Print.Score);
HTM_Txt ("/"); HTM_Txt ("/");
HTM_Unsigned (Print.NumQsts.All); HTM_Unsigned (Print.NumQsts.All);
HTM_STRONG_End (); HTM_STRONG_End ();
} break;
else case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible (); Ico_PutIconNotVisible ();
break;
}
HTM_TD_End (); HTM_TD_End ();
HTM_TR_End (); HTM_TR_End ();
@ -1225,14 +1253,19 @@ void MchRes_ShowOneMchResult (void)
HTM_TD_Begin ("class=\"LB DAT_%s\"", HTM_TD_Begin ("class=\"LB DAT_%s\"",
The_GetSuffix ()); The_GetSuffix ());
if (ICanView.Score == Usr_I_CAN) switch (ICanView.Score)
{ {
case Usr_I_CAN:
HTM_STRONG_Begin (); HTM_STRONG_Begin ();
TstPrn_ComputeAndShowGrade (Print.NumQsts.All,Print.Score,Games.Game.MaxGrade); TstPrn_ComputeAndShowGrade (Print.NumQsts.All,Print.Score,
Games.Game.MaxGrade);
HTM_STRONG_End (); HTM_STRONG_End ();
} break;
else case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible (); Ico_PutIconNotVisible ();
break;
}
HTM_TD_End (); HTM_TD_End ();
HTM_TR_End (); HTM_TR_End ();
@ -1287,13 +1320,19 @@ static void MchRes_CheckIfICanViewMatchResult (const struct Gam_Game *Game,
// Whether I belong or not to groups of match is not checked here... // Whether I belong or not to groups of match is not checked here...
// ...because I should be able to see old matches made in old groups to which I belonged // ...because I should be able to see old matches made in old groups to which I belonged
if (ICanView->Result == Usr_I_CAN) switch (ICanView->Result)
{
case Usr_I_CAN:
// Depends on 5 visibility icons associated to game // Depends on 5 visibility icons associated to game
ICanView->Score = TstVis_IsVisibleTotalScore (Game->Visibility) ? Usr_I_CAN : ICanView->Score = TstVis_IsVisibleTotalScore (Game->Visibility) ? Usr_I_CAN :
Usr_I_CAN_NOT; Usr_I_CAN_NOT;
else break;
case Usr_I_CAN_NOT:
default:
ICanView->Score = Usr_I_CAN_NOT; ICanView->Score = Usr_I_CAN_NOT;
break; break;
}
break;
case Rol_NET: case Rol_NET:
case Rol_TCH: case Rol_TCH:
case Rol_DEG_ADM: case Rol_DEG_ADM:

View File

@ -423,9 +423,9 @@ void Nck_RemoveOtherUsrNick (void)
/***** Get user whose nick must be removed *****/ /***** Get user whose nick must be removed *****/
if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ()) if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ())
switch (Usr_CheckIfICanEditOtherUsr (&Gbl.Usrs.Other.UsrDat))
{ {
if (Usr_CheckIfICanEditOtherUsr (&Gbl.Usrs.Other.UsrDat) == Usr_I_CAN) case Usr_I_CAN:
{
/***** Get nickname from form *****/ /***** Get nickname from form *****/
Par_GetParText ("Nick",NickWithoutArr, Par_GetParText ("Nick",NickWithoutArr,
Nck_MAX_BYTES_NICK_WITHOUT_ARROBA); Nck_MAX_BYTES_NICK_WITHOUT_ARROBA);
@ -440,9 +440,11 @@ void Nck_RemoveOtherUsrNick (void)
/***** Show user's account again *****/ /***** Show user's account again *****/
Acc_ShowFormChgOtherUsrAccount (); Acc_ShowFormChgOtherUsrAccount ();
} break;
else case Usr_I_CAN_NOT:
default:
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
break;
} }
else // User not found else // User not found
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
@ -469,17 +471,19 @@ void Nck_ChangeOtherUsrNick (void)
{ {
/***** Get user whose nick must be changed *****/ /***** Get user whose nick must be changed *****/
if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ()) if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ())
switch (Usr_CheckIfICanEditOtherUsr (&Gbl.Usrs.Other.UsrDat))
{ {
if (Usr_CheckIfICanEditOtherUsr (&Gbl.Usrs.Other.UsrDat) == Usr_I_CAN) case Usr_I_CAN:
{
/***** Update user's nickname *****/ /***** Update user's nickname *****/
Nck_ChangeUsrNick (&Gbl.Usrs.Other.UsrDat); Nck_ChangeUsrNick (&Gbl.Usrs.Other.UsrDat);
/***** Show user's account again *****/ /***** Show user's account again *****/
Acc_ShowFormChgOtherUsrAccount (); Acc_ShowFormChgOtherUsrAccount ();
} break;
else case Usr_I_CAN_NOT:
default:
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
break;
} }
else // User not found else // User not found
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();

View File

@ -176,12 +176,16 @@ void Pwd_UpdateOtherUsrPwd (void)
{ {
/***** Get other user's code from form and get user's data *****/ /***** Get other user's code from form and get user's data *****/
if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ()) if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ())
switch (Usr_CheckIfICanEditOtherUsr (&Gbl.Usrs.Other.UsrDat))
{ {
if (Usr_CheckIfICanEditOtherUsr (&Gbl.Usrs.Other.UsrDat) == Usr_I_CAN) case Usr_I_CAN:
/***** Check and update password *****/ /***** Check and update password *****/
Pwd_CheckAndUpdateNewPwd (&Gbl.Usrs.Other.UsrDat); Pwd_CheckAndUpdateNewPwd (&Gbl.Usrs.Other.UsrDat);
else break;
case Usr_I_CAN_NOT:
default:
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
break;
} }
else // User not found else // User not found
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();

View File

@ -198,7 +198,6 @@ void Pho_PutIconToChangeUsrPhoto (struct Usr_Data *UsrDat)
"camera.svg",Ico_BLACK); "camera.svg",Ico_BLACK);
break; break;
case Usr_OTHER: case Usr_OTHER:
default:
if (Pho_ICanChangeOtherUsrPhoto (UsrDat) == Usr_I_CAN) if (Pho_ICanChangeOtherUsrPhoto (UsrDat) == Usr_I_CAN)
Lay_PutContextualLinkOnlyIcon (NextAction[UsrDat->Roles.InCurrentCrs],NULL, Lay_PutContextualLinkOnlyIcon (NextAction[UsrDat->Roles.InCurrentCrs],NULL,
Rec_PutParUsrCodEncrypted,NULL, Rec_PutParUsrCodEncrypted,NULL,
@ -318,7 +317,6 @@ static void Pho_ReqPhoto (const struct Usr_Data *UsrDat)
Frm_BeginForm (ActDetMyPho); Frm_BeginForm (ActDetMyPho);
break; break;
case Usr_OTHER: case Usr_OTHER:
default:
Frm_BeginForm (NextAction[Gbl.Usrs.Other.UsrDat.Roles.InCurrentCrs]); Frm_BeginForm (NextAction[Gbl.Usrs.Other.UsrDat.Roles.InCurrentCrs]);
Usr_PutParUsrCodEncrypted (UsrDat->EnUsrCod); Usr_PutParUsrCodEncrypted (UsrDat->EnUsrCod);
break; break;
@ -368,7 +366,6 @@ void Pho_SendPhotoUsr (void)
Pho_ReqMyPhoto (); Pho_ReqMyPhoto ();
break; break;
case Usr_OTHER: case Usr_OTHER:
default:
/***** Form to send another user's photo *****/ /***** Form to send another user's photo *****/
Pho_ReqOtherUsrPhoto (); Pho_ReqOtherUsrPhoto ();
break; break;
@ -521,9 +518,9 @@ void Pho_ReqRemUsrPhoto (void)
if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&Gbl.Usrs.Other.UsrDat, if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&Gbl.Usrs.Other.UsrDat,
Usr_DONT_GET_PREFS, Usr_DONT_GET_PREFS,
Usr_DONT_GET_ROLE_IN_CRS)) Usr_DONT_GET_ROLE_IN_CRS))
switch (Pho_ICanChangeOtherUsrPhoto (&Gbl.Usrs.Other.UsrDat))
{ {
if (Pho_ICanChangeOtherUsrPhoto (&Gbl.Usrs.Other.UsrDat) == Usr_I_CAN) case Usr_I_CAN:
{
/***** Show current photo and help message *****/ /***** Show current photo and help message *****/
if (Pho_BuildLinkToPhoto (&Gbl.Usrs.Other.UsrDat,PhotoURL)) if (Pho_BuildLinkToPhoto (&Gbl.Usrs.Other.UsrDat,PhotoURL))
{ {
@ -543,9 +540,11 @@ void Pho_ReqRemUsrPhoto (void)
} }
else else
Ale_ShowAlert (Ale_INFO,Txt_The_photo_no_longer_exists); Ale_ShowAlert (Ale_INFO,Txt_The_photo_no_longer_exists);
} break;
else case Usr_I_CAN_NOT:
default:
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
break;
} }
else else
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();

View File

@ -3050,9 +3050,9 @@ static void Prj_ReqRemUsrFromPrj (struct Prj_Projects *Projects,
/***** Get user to be removed *****/ /***** Get user to be removed *****/
if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ()) if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ())
switch (Prj_CheckIfICanEditProject (&Projects->Prj))
{ {
if (Prj_CheckIfICanEditProject (&Projects->Prj) == Usr_I_CAN) case Usr_I_CAN:
{
/***** Show question and button to remove user as a role from project *****/ /***** Show question and button to remove user as a role from project *****/
/* Begin alert */ /* Begin alert */
Ale_ShowAlertAndButtonBegin (Ale_QUESTION,Question[Usr_ItsMe (Gbl.Usrs.Other.UsrDat.UsrCod)], Ale_ShowAlertAndButtonBegin (Ale_QUESTION,Question[Usr_ItsMe (Gbl.Usrs.Other.UsrDat.UsrCod)],
@ -3074,9 +3074,11 @@ static void Prj_ReqRemUsrFromPrj (struct Prj_Projects *Projects,
/* End alert */ /* End alert */
Ale_ShowAlertAndButtonEnd (ActUnk,NULL,NULL,NULL,NULL,Btn_NO_BUTTON,NULL); Ale_ShowAlertAndButtonEnd (ActUnk,NULL,NULL,NULL,NULL,Btn_NO_BUTTON,NULL);
} break;
else case Usr_I_CAN_NOT:
default:
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
break;
} }
else else
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
@ -3128,9 +3130,9 @@ static void Prj_RemUsrFromPrj (Prj_RoleInProject_t RoleInPrj)
/***** Get user to be removed *****/ /***** Get user to be removed *****/
if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ()) if (Usr_GetParOtherUsrCodEncryptedAndGetUsrData ())
switch (Prj_CheckIfICanEditProject (&Projects.Prj))
{ {
if (Prj_CheckIfICanEditProject (&Projects.Prj) == Usr_I_CAN) case Usr_I_CAN:
{
/***** Remove user from the table of project-users *****/ /***** Remove user from the table of project-users *****/
Prj_DB_RemoveUsrFromPrj (Projects.Prj.PrjCod,RoleInPrj,Gbl.Usrs.Other.UsrDat.UsrCod); Prj_DB_RemoveUsrFromPrj (Projects.Prj.PrjCod,RoleInPrj,Gbl.Usrs.Other.UsrDat.UsrCod);
@ -3143,9 +3145,11 @@ static void Prj_RemUsrFromPrj (Prj_RoleInProject_t RoleInPrj)
Gbl.Usrs.Other.UsrDat.FullName, Gbl.Usrs.Other.UsrDat.FullName,
Txt_PROJECT_ROLES_SINGUL_abc[RoleInPrj][Gbl.Usrs.Other.UsrDat.Sex], Txt_PROJECT_ROLES_SINGUL_abc[RoleInPrj][Gbl.Usrs.Other.UsrDat.Sex],
Projects.Prj.Title); Projects.Prj.Title);
} break;
else case Usr_I_CAN_NOT:
default:
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
break;
} }
else else
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission (); Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
@ -3208,17 +3212,21 @@ static void Prj_PutIconsToRemEditOnePrj (struct Prj_Projects *Projects,
Ico_PutContextualIconToPrint (ActPrnOnePrj,Prj_PutCurrentPars,Projects); Ico_PutContextualIconToPrint (ActPrnOnePrj,Prj_PutCurrentPars,Projects);
/***** Locked/unlocked project edition *****/ /***** Locked/unlocked project edition *****/
if (PrjCfg_CheckIfICanConfig () == Usr_I_CAN) switch (PrjCfg_CheckIfICanConfig ())
{ {
case Usr_I_CAN:
/* Icon to lock/unlock project edition */ /* Icon to lock/unlock project edition */
HTM_DIV_Begin ("id=\"prj_lck_%ld\" class=\"PRJ_LOCK\"", HTM_DIV_Begin ("id=\"prj_lck_%ld\" class=\"PRJ_LOCK\"",
Projects->Prj.PrjCod); Projects->Prj.PrjCod);
Prj_FormLockUnlock (&Projects->Prj); Prj_FormLockUnlock (&Projects->Prj);
HTM_DIV_End (); HTM_DIV_End ();
} break;
else case Usr_I_CAN_NOT:
default:
/* Icon to inform about locked/unlocked project edition */ /* Icon to inform about locked/unlocked project edition */
Prj_PutIconOffLockedUnlocked (&Projects->Prj); Prj_PutIconOffLockedUnlocked (&Projects->Prj);
break;
}
/***** Link to get resource link *****/ /***** Link to get resource link *****/
if (Rsc_CheckIfICanGetLink () == Usr_I_CAN) if (Rsc_CheckIfICanGetLink () == Usr_I_CAN)
@ -4680,10 +4688,16 @@ void Prj_ChangeCriterionScore (void)
Err_WrongRubricExit (); Err_WrongRubricExit ();
/***** Update review *****/ /***** Update review *****/
if (Prj_CheckIfICanFillRubric (Prj.PrjCod,WhichRubric) == Usr_I_CAN) switch (Prj_CheckIfICanFillRubric (Prj.PrjCod,WhichRubric))
{
case Usr_I_CAN:
Rub_DB_UpdateScore (Rsc_PROJECT,Prj.PrjCod,-1L,CriCod,Score); Rub_DB_UpdateScore (Rsc_PROJECT,Prj.PrjCod,-1L,CriCod,Score);
else break;
case Usr_I_CAN_NOT:
default:
Err_NoPermission (); Err_NoPermission ();
break;
}
/***** Free memory of the project *****/ /***** Free memory of the project *****/
Prj_FreeMemProject (&Prj); Prj_FreeMemProject (&Prj);

View File

@ -1733,8 +1733,9 @@ static void Rec_ShowCrsRecord (Rec_CourseRecordViewType_t TypeOfView,
HTM_TD_Begin ("class=\"REC_C2_BOT LT DAT_STRONG_%s %s\"", HTM_TD_Begin ("class=\"REC_C2_BOT LT DAT_STRONG_%s %s\"",
The_GetSuffix (), The_GetSuffix (),
The_GetColorRows ()); The_GetColorRows ());
if (ICanEditThisField == Usr_I_CAN) // Show with form switch (ICanEditThisField)
{ {
case Usr_I_CAN: // Show with form
HTM_TEXTAREA_Begin ("name=\"Field%ld\" rows=\"%u\"" HTM_TEXTAREA_Begin ("name=\"Field%ld\" rows=\"%u\""
" class=\"REC_C2_BOT_INPUT INPUT_%s\"", " class=\"REC_C2_BOT_INPUT INPUT_%s\"",
Gbl.Crs.Records.LstFields.Lst[NumField].FieldCod, Gbl.Crs.Records.LstFields.Lst[NumField].FieldCod,
@ -1743,9 +1744,9 @@ static void Rec_ShowCrsRecord (Rec_CourseRecordViewType_t TypeOfView,
if (ThisFieldHasText) if (ThisFieldHasText)
HTM_Txt (row[0]); HTM_Txt (row[0]);
HTM_TEXTAREA_End (); HTM_TEXTAREA_End ();
} break;
else // Show without form case Usr_I_CAN_NOT: // Show without form
{ default:
if (ThisFieldHasText) if (ThisFieldHasText)
{ {
Str_Copy (Text,row[0],sizeof (Text)); Str_Copy (Text,row[0],sizeof (Text));
@ -1756,6 +1757,7 @@ static void Rec_ShowCrsRecord (Rec_CourseRecordViewType_t TypeOfView,
} }
else else
HTM_Hyphen (); HTM_Hyphen ();
break;
} }
HTM_TD_End (); HTM_TD_End ();
@ -1767,17 +1769,21 @@ static void Rec_ShowCrsRecord (Rec_CourseRecordViewType_t TypeOfView,
} }
/***** End box *****/ /***** End box *****/
if (ICanEdit == Usr_I_CAN) switch (ICanEdit)
{ {
case Usr_I_CAN:
/* End table, send button and end box */ /* End table, send button and end box */
Box_BoxTableWithButtonEnd (Btn_CONFIRM_BUTTON,Txt_Save_changes); Box_BoxTableWithButtonEnd (Btn_CONFIRM_BUTTON,Txt_Save_changes);
/* End form */ /* End form */
Frm_EndForm (); Frm_EndForm ();
} break;
else case Usr_I_CAN_NOT:
default:
/* End table and box */ /* End table and box */
Box_BoxTableEnd (); Box_BoxTableEnd ();
break;
}
} }
/*****************************************************************************/ /*****************************************************************************/
@ -2254,7 +2260,6 @@ void Rec_ShowSharedUsrRecord (Rec_SharedRecordViewType_t TypeOfView,
Grp_ShowLstGrpsToChgMyGrps (); Grp_ShowLstGrpsToChgMyGrps ();
break; break;
case Usr_OTHER: case Usr_OTHER:
default:
Grp_ShowLstGrpsToChgOtherUsrsGrps (UsrDat->UsrCod); Grp_ShowLstGrpsToChgOtherUsrsGrps (UsrDat->UsrCod);
break; break;
} }
@ -2679,19 +2684,20 @@ static void Rec_ShowEmail (struct Usr_Data *UsrDat)
Frm_LabelColumn ("REC_C1_BOT RM",NULL,Txt_Email); Frm_LabelColumn ("REC_C1_BOT RM",NULL,Txt_Email);
/* Data */ /* Data */
HTM_TD_Begin ("class=\"REC_C2_BOT LM DAT_STRONG_%s\"", HTM_TD_Begin ("class=\"REC_C2_BOT LM DAT_STRONG_%s\"",The_GetSuffix ());
The_GetSuffix ());
if (UsrDat->Email[0]) if (UsrDat->Email[0])
switch (Mai_ICanSeeOtherUsrEmail (UsrDat))
{ {
if (Mai_ICanSeeOtherUsrEmail (UsrDat) == Usr_I_CAN) case Usr_I_CAN:
{
HTM_A_Begin ("href=\"mailto:%s\" class=\"DAT_STRONG_%s\"", HTM_A_Begin ("href=\"mailto:%s\" class=\"DAT_STRONG_%s\"",
UsrDat->Email,The_GetSuffix ()); UsrDat->Email,The_GetSuffix ());
HTM_Txt (UsrDat->Email); HTM_Txt (UsrDat->Email);
HTM_A_End (); HTM_A_End ();
} break;
else case Usr_I_CAN_NOT:
default:
HTM_Txt ("********"); HTM_Txt ("********");
break;
} }
HTM_TD_End (); HTM_TD_End ();

View File

@ -246,6 +246,7 @@ Usr_ICan_t Rub_CheckIfICanEditRubrics (void)
bool Rub_CheckIfEditable (void) bool Rub_CheckIfEditable (void)
{ {
if (Rub_CheckIfICanEditRubrics () == Usr_I_CAN) if (Rub_CheckIfICanEditRubrics () == Usr_I_CAN)
{
/***** Rubric is editable only if ... *****/ /***** Rubric is editable only if ... *****/
// TODO: Change to control that a rubric is not edited in some circunstances? // TODO: Change to control that a rubric is not edited in some circunstances?
/* /*
@ -253,7 +254,8 @@ bool Rub_CheckIfEditable (void)
Rubric->NumCriteria != 0; Rubric->NumCriteria != 0;
*/ */
return true; return true;
else }
return false; // Questions are not editable return false; // Questions are not editable
} }

View File

@ -60,8 +60,8 @@
struct TstRes_ICanView struct TstRes_ICanView
{ {
bool Result; Usr_ICan_t Result;
bool Score; Usr_ICan_t Score;
}; };
/*****************************************************************************/ /*****************************************************************************/
@ -680,8 +680,7 @@ static void TstPrn_WriteQstAndAnsExam (struct Usr_Data *UsrDat,
/* Write score retrieved from database */ /* Write score retrieved from database */
if (ICanView[TstVis_VISIBLE_EACH_QST_SCORE] == Usr_I_CAN) if (ICanView[TstVis_VISIBLE_EACH_QST_SCORE] == Usr_I_CAN)
{ {
HTM_DIV_Begin ("class=\"LM DAT_SMALL_%s\"", HTM_DIV_Begin ("class=\"LM DAT_SMALL_%s\"",The_GetSuffix ());
The_GetSuffix ());
HTM_TxtColonNBSP (Txt_Score); HTM_TxtColonNBSP (Txt_Score);
HTM_SPAN_Begin ("class=\"%s_%s\"", HTM_SPAN_Begin ("class=\"%s_%s\"",
PrintedQuestions[QstInd].StrAnswers[0] ? PrintedQuestions[QstInd].StrAnswers[0] ?
@ -1239,8 +1238,7 @@ static void TstPrn_WriteIntAnsPrint (struct Usr_Data *UsrDat,
} }
else else
{ {
HTM_TD_Begin ("class=\"CM Qst_ANS_0_%s\"", HTM_TD_Begin ("class=\"CM Qst_ANS_0_%s\"",The_GetSuffix ());
The_GetSuffix ());
HTM_Txt ("?"); HTM_Txt ("?");
HTM_TD_End (); HTM_TD_End ();
} }
@ -1250,10 +1248,16 @@ static void TstPrn_WriteIntAnsPrint (struct Usr_Data *UsrDat,
/***** Write the correct answer *****/ /***** Write the correct answer *****/
HTM_TD_Begin ("class=\"CM Qst_ANS_0_%s\"",The_GetSuffix ()); HTM_TD_Begin ("class=\"CM Qst_ANS_0_%s\"",The_GetSuffix ());
if (ICanView[TstVis_VISIBLE_CORRECT_ANSWER] == Usr_I_CAN) switch (ICanView[TstVis_VISIBLE_CORRECT_ANSWER])
{
case Usr_I_CAN:
HTM_Long (Question->Answer.Integer); HTM_Long (Question->Answer.Integer);
else break;
case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible (); Ico_PutIconNotVisible ();
break;
}
HTM_TD_End (); HTM_TD_End ();
HTM_TR_End (); HTM_TR_End ();
@ -1308,16 +1312,20 @@ static void TstPrn_WriteFltAnsPrint (struct Usr_Data *UsrDat,
/***** Write the correct answer *****/ /***** Write the correct answer *****/
HTM_TD_Begin ("class=\"CM Qst_ANS_0_%s\"",The_GetSuffix ()); HTM_TD_Begin ("class=\"CM Qst_ANS_0_%s\"",The_GetSuffix ());
if (ICanView[TstVis_VISIBLE_CORRECT_ANSWER] == Usr_I_CAN) switch (ICanView[TstVis_VISIBLE_CORRECT_ANSWER])
{ {
case Usr_I_CAN:
HTM_Txt ("["); HTM_Txt ("[");
HTM_Double (Question->Answer.FloatingPoint[0]); HTM_Double (Question->Answer.FloatingPoint[0]);
HTM_Txt ("; "); HTM_Txt ("; ");
HTM_Double (Question->Answer.FloatingPoint[1]); HTM_Double (Question->Answer.FloatingPoint[1]);
HTM_Txt ("]"); HTM_Txt ("]");
} break;
else case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible (); Ico_PutIconNotVisible ();
break;
}
HTM_TD_End (); HTM_TD_End ();
HTM_TR_End (); HTM_TR_End ();
@ -1366,10 +1374,16 @@ static void TstPrn_WriteTF_AnsPrint (struct Usr_Data *UsrDat,
/***** Write the correct answer *****/ /***** Write the correct answer *****/
HTM_TD_Begin ("class=\"CM Qst_ANS_0_%s\"",The_GetSuffix ()); HTM_TD_Begin ("class=\"CM Qst_ANS_0_%s\"",The_GetSuffix ());
if (ICanView[TstVis_VISIBLE_CORRECT_ANSWER] == Usr_I_CAN) switch (ICanView[TstVis_VISIBLE_CORRECT_ANSWER])
{
case Usr_I_CAN:
Qst_WriteAnsTF (Question->Answer.TF); Qst_WriteAnsTF (Question->Answer.TF);
else break;
case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible (); Ico_PutIconNotVisible ();
break;
}
HTM_TD_End (); HTM_TD_End ();
HTM_TR_End (); HTM_TR_End ();
@ -1430,8 +1444,9 @@ static void TstPrn_WriteChoAnsPrint (struct Usr_Data *UsrDat,
/* Draw icon depending on user's answer */ /* Draw icon depending on user's answer */
if (UsrAnswers[Indexes[NumOpt]]) // This answer has been selected by the user if (UsrAnswers[Indexes[NumOpt]]) // This answer has been selected by the user
{ {
if (ICanView[TstVis_VISIBLE_CORRECT_ANSWER] == Usr_I_CAN) switch (ICanView[TstVis_VISIBLE_CORRECT_ANSWER])
{ {
case Usr_I_CAN:
if (Question->Answer.Options[Indexes[NumOpt]].Correct) if (Question->Answer.Options[Indexes[NumOpt]].Correct)
{ {
Ans.Class = "Qst_ANS_OK"; // Correct Ans.Class = "Qst_ANS_OK"; // Correct
@ -1442,13 +1457,13 @@ static void TstPrn_WriteChoAnsPrint (struct Usr_Data *UsrDat,
Ans.Class = "Qst_ANS_BAD"; // Wrong Ans.Class = "Qst_ANS_BAD"; // Wrong
Ans.Str = "&cross;"; Ans.Str = "&cross;";
} }
} break;
else case Usr_I_CAN_NOT:
{ default:
Ans.Class = "Qst_ANS_0"; // Blank answer Ans.Class = "Qst_ANS_0"; // Blank answer
Ans.Str = "&bull;"; Ans.Str = "&bull;";
break;
} }
HTM_TD_Begin ("class=\"CT %s_%s\" title=\"%s\"", HTM_TD_Begin ("class=\"CT %s_%s\" title=\"%s\"",
Ans.Class,The_GetSuffix (), Ans.Class,The_GetSuffix (),
Txt_TST_Answer_given_by_the_user); Txt_TST_Answer_given_by_the_user);
@ -1459,8 +1474,9 @@ static void TstPrn_WriteChoAnsPrint (struct Usr_Data *UsrDat,
HTM_TD_Empty (1); HTM_TD_Empty (1);
/* Draw icon that indicates whether the answer is correct */ /* Draw icon that indicates whether the answer is correct */
if (ICanView[TstVis_VISIBLE_CORRECT_ANSWER] == Usr_I_CAN) switch (ICanView[TstVis_VISIBLE_CORRECT_ANSWER])
{ {
case Usr_I_CAN:
if (Question->Answer.Options[Indexes[NumOpt]].Correct) if (Question->Answer.Options[Indexes[NumOpt]].Correct)
{ {
HTM_TD_Begin ("class=\"CT Qst_ANS_0_%s\" title=\"%s\"", HTM_TD_Begin ("class=\"CT Qst_ANS_0_%s\" title=\"%s\"",
@ -1471,35 +1487,37 @@ static void TstPrn_WriteChoAnsPrint (struct Usr_Data *UsrDat,
} }
else else
HTM_TD_Empty (1); HTM_TD_Empty (1);
} break;
else case Usr_I_CAN_NOT:
{ default:
HTM_TD_Begin ("class=\"CT Qst_ANS_0_%s\"", HTM_TD_Begin ("class=\"CT Qst_ANS_0_%s\"",The_GetSuffix ());
The_GetSuffix ());
Ico_PutIconNotVisible (); Ico_PutIconNotVisible ();
HTM_TD_End (); HTM_TD_End ();
break;
} }
/* Answer letter (a, b, c,...) */ /* Answer letter (a, b, c,...) */
HTM_TD_Begin ("class=\"LT %s_%s\"", HTM_TD_Begin ("class=\"LT %s_%s\"",ClassTxt,The_GetSuffix ());
ClassTxt,The_GetSuffix ());
HTM_TxtF ("%c)&nbsp;",'a' + (char) NumOpt); HTM_TxtF ("%c)&nbsp;",'a' + (char) NumOpt);
HTM_TD_End (); HTM_TD_End ();
/* Answer text and feedback */ /* Answer text and feedback */
HTM_TD_Begin ("class=\"LT\""); HTM_TD_Begin ("class=\"LT\"");
HTM_DIV_Begin ("class=\"%s_%s\"", HTM_DIV_Begin ("class=\"%s_%s\"",ClassTxt,The_GetSuffix ());
ClassTxt,The_GetSuffix ()); switch (ICanView[TstVis_VISIBLE_QST_ANS_TXT])
if (ICanView[TstVis_VISIBLE_QST_ANS_TXT] == Usr_I_CAN)
{ {
case Usr_I_CAN:
HTM_Txt (Question->Answer.Options[Indexes[NumOpt]].Text); HTM_Txt (Question->Answer.Options[Indexes[NumOpt]].Text);
Med_ShowMedia (&Question->Answer.Options[Indexes[NumOpt]].Media, Med_ShowMedia (&Question->Answer.Options[Indexes[NumOpt]].Media,
"Tst_MED_SHOW_CONT", "Tst_MED_SHOW_CONT",
"Tst_MED_SHOW"); "Tst_MED_SHOW");
} break;
else case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible (); Ico_PutIconNotVisible ();
break;
}
HTM_DIV_End (); HTM_DIV_End ();
if (ICanView[TstVis_VISIBLE_CORRECT_ANSWER] == Usr_I_CAN) if (ICanView[TstVis_VISIBLE_CORRECT_ANSWER] == Usr_I_CAN)
@ -1593,8 +1611,9 @@ static void TstPrn_WriteTxtAnsPrint (struct Usr_Data *UsrDat,
HTM_TD_Empty (1); HTM_TD_Empty (1);
/***** Write the correct answers *****/ /***** Write the correct answers *****/
if (ICanView[TstVis_VISIBLE_CORRECT_ANSWER] == Usr_I_CAN) switch (ICanView[TstVis_VISIBLE_CORRECT_ANSWER])
{ {
case Usr_I_CAN:
HTM_TD_Begin ("class=\"CT\""); HTM_TD_Begin ("class=\"CT\"");
HTM_TABLE_BeginPadding (2); HTM_TABLE_BeginPadding (2);
@ -1634,14 +1653,15 @@ static void TstPrn_WriteTxtAnsPrint (struct Usr_Data *UsrDat,
HTM_TABLE_End (); HTM_TABLE_End ();
HTM_TD_End (); HTM_TD_End ();
} break;
else case Usr_I_CAN_NOT:
{ default:
HTM_TD_Begin ("class=\"CT Qst_ANS_0_%s\"", HTM_TD_Begin ("class=\"CT Qst_ANS_0_%s\"",The_GetSuffix ());
The_GetSuffix ());
Ico_PutIconNotVisible (); Ico_PutIconNotVisible ();
HTM_TD_End (); HTM_TD_End ();
break;
} }
HTM_TR_End (); HTM_TR_End ();
HTM_TABLE_End (); HTM_TABLE_End ();
@ -1914,8 +1934,7 @@ static void TstPrn_ShowUsrPrints (struct Usr_Data *UsrDat)
if (asprintf (&Id,"tst_date_%u_%u",(unsigned) StartEndTime,UniqueId) < 0) if (asprintf (&Id,"tst_date_%u_%u",(unsigned) StartEndTime,UniqueId) < 0)
Err_NotEnoughMemoryExit (); Err_NotEnoughMemoryExit ();
HTM_TD_Begin ("id=\"%s\" class=\"LT %s_%s %s\"", HTM_TD_Begin ("id=\"%s\" class=\"LT %s_%s %s\"",
Id,ClassDat,The_GetSuffix (), Id,ClassDat,The_GetSuffix (),The_GetColorRows ());
The_GetColorRows ());
Dat_WriteLocalDateHMSFromUTC (Id,Print.TimeUTC[StartEndTime], Dat_WriteLocalDateHMSFromUTC (Id,Print.TimeUTC[StartEndTime],
Gbl.Prefs.DateFormat,Dat_SEPARATOR_BREAK, Gbl.Prefs.DateFormat,Dat_SEPARATOR_BREAK,
true,true,false,0x7); true,true,false,0x7);
@ -1933,86 +1952,111 @@ static void TstPrn_ShowUsrPrints (struct Usr_Data *UsrDat)
/* Write number of questions */ /* Write number of questions */
HTM_TD_Begin ("class=\"RT %s_%s LINE_LEFT %s\"", HTM_TD_Begin ("class=\"RT %s_%s LINE_LEFT %s\"",
ClassDat,The_GetSuffix (), ClassDat,The_GetSuffix (),The_GetColorRows ());
The_GetColorRows ()); switch (ICanView.Result)
if (ICanView.Result == Usr_I_CAN) {
case Usr_I_CAN:
HTM_Unsigned (Print.NumQsts.All); HTM_Unsigned (Print.NumQsts.All);
else break;
case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible (); Ico_PutIconNotVisible ();
break;
}
HTM_TD_End (); HTM_TD_End ();
/* Write number of non-blank answers */ /* Write number of non-blank answers */
HTM_TD_Begin ("class=\"RT %s_%s LINE_LEFT %s\"", HTM_TD_Begin ("class=\"RT %s_%s LINE_LEFT %s\"",
ClassDat,The_GetSuffix (), ClassDat,The_GetSuffix (),The_GetColorRows ());
The_GetColorRows ()); switch (ICanView.Result)
if (ICanView.Result == Usr_I_CAN)
{ {
case Usr_I_CAN:
if (Print.NumQsts.NotBlank) if (Print.NumQsts.NotBlank)
HTM_Unsigned (Print.NumQsts.NotBlank); HTM_Unsigned (Print.NumQsts.NotBlank);
else else
HTM_Light0 (); HTM_Light0 ();
} break;
else case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible (); Ico_PutIconNotVisible ();
break;
}
HTM_TD_End (); HTM_TD_End ();
/* Write number of blank answers */ /* Write number of blank answers */
HTM_TD_Begin ("class=\"RT %s_%s %s\"", HTM_TD_Begin ("class=\"RT %s_%s %s\"",
ClassDat,The_GetSuffix (), ClassDat,The_GetSuffix (),The_GetColorRows ());
The_GetColorRows ()); switch (ICanView.Result)
if (ICanView.Result == Usr_I_CAN)
{ {
case Usr_I_CAN:
NumQstsBlank = Print.NumQsts.All - Print.NumQsts.NotBlank; NumQstsBlank = Print.NumQsts.All - Print.NumQsts.NotBlank;
if (NumQstsBlank) if (NumQstsBlank)
HTM_Unsigned (NumQstsBlank); HTM_Unsigned (NumQstsBlank);
else else
HTM_Light0 (); HTM_Light0 ();
} break;
else case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible (); Ico_PutIconNotVisible ();
break;
}
HTM_TD_End (); HTM_TD_End ();
/* Write score */ /* Write score */
HTM_TD_Begin ("class=\"RT %s_%s LINE_LEFT %s\"", HTM_TD_Begin ("class=\"RT %s_%s LINE_LEFT %s\"",
ClassDat,The_GetSuffix (), ClassDat,The_GetSuffix (),The_GetColorRows ());
The_GetColorRows ()); switch (ICanView.Score)
if (ICanView.Score == Usr_I_CAN)
{ {
case Usr_I_CAN:
HTM_Double2Decimals (Print.Score); HTM_Double2Decimals (Print.Score);
HTM_Txt ("/"); HTM_Txt ("/");
HTM_Unsigned (Print.NumQsts.All); HTM_Unsigned (Print.NumQsts.All);
} break;
else case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible (); Ico_PutIconNotVisible ();
break;
}
HTM_TD_End (); HTM_TD_End ();
/* Write average score per question */ /* Write average score per question */
HTM_TD_Begin ("class=\"RT %s_%s %s\"", HTM_TD_Begin ("class=\"RT %s_%s %s\"",
ClassDat,The_GetSuffix (), ClassDat,The_GetSuffix (),The_GetColorRows ());
The_GetColorRows ()); switch (ICanView.Score)
if (ICanView.Score == Usr_I_CAN) {
case Usr_I_CAN:
HTM_Double2Decimals (Print.NumQsts.All ? Print.Score / HTM_Double2Decimals (Print.NumQsts.All ? Print.Score /
(double) Print.NumQsts.All : (double) Print.NumQsts.All :
0.0); 0.0);
else break;
case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible (); Ico_PutIconNotVisible ();
break;
}
HTM_TD_End (); HTM_TD_End ();
/* Write grade */ /* Write grade */
HTM_TD_Begin ("class=\"RT %s_%s LINE_LEFT %s\"", HTM_TD_Begin ("class=\"RT %s_%s LINE_LEFT %s\"",
ClassDat,The_GetSuffix (), ClassDat,The_GetSuffix (),The_GetColorRows ());
The_GetColorRows ()); switch (ICanView.Score)
if (ICanView.Score == Usr_I_CAN) {
TstPrn_ComputeAndShowGrade (Print.NumQsts.All,Print.Score,Tst_SCORE_MAX); case Usr_I_CAN:
else TstPrn_ComputeAndShowGrade (Print.NumQsts.All,Print.Score,
Tst_SCORE_MAX);
break;
case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible (); Ico_PutIconNotVisible ();
break;
}
HTM_TD_End (); HTM_TD_End ();
/* Link to show this test */ /* Link to show this test */
HTM_TD_Begin ("class=\"RT LINE_LEFT %s\"", HTM_TD_Begin ("class=\"RT LINE_LEFT %s\"",The_GetColorRows ());
The_GetColorRows ()); switch (ICanView.Result)
if (ICanView.Result == Usr_I_CAN)
{ {
case Usr_I_CAN:
Frm_BeginForm (Gbl.Action.Act == ActSeeMyTstResCrs ? ActSeeOneTstResMe : Frm_BeginForm (Gbl.Action.Act == ActSeeMyTstResCrs ? ActSeeOneTstResMe :
ActSeeOneTstResOth); ActSeeOneTstResOth);
ParCod_PutPar (ParCod_Prn,Print.PrnCod); ParCod_PutPar (ParCod_Prn,Print.PrnCod);
@ -2020,9 +2064,12 @@ static void TstPrn_ShowUsrPrints (struct Usr_Data *UsrDat)
Gbl.Action.Act == ActSeeMyTstResCrs ? ActSeeOneTstResMe : Gbl.Action.Act == ActSeeMyTstResCrs ? ActSeeOneTstResMe :
ActSeeOneTstResOth); ActSeeOneTstResOth);
Frm_EndForm (); Frm_EndForm ();
} break;
else case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible (); Ico_PutIconNotVisible ();
break;
}
HTM_TD_End (); HTM_TD_End ();
HTM_TR_End (); HTM_TR_End ();
@ -2339,16 +2386,20 @@ void TstPrn_ShowOnePrint (void)
HTM_TD_Begin ("class=\"LB DAT_%s\"", HTM_TD_Begin ("class=\"LB DAT_%s\"",
The_GetSuffix ()); The_GetSuffix ());
if (ICanView.Score == Usr_I_CAN) switch (ICanView.Score)
{ {
case Usr_I_CAN:
HTM_STRONG_Begin (); HTM_STRONG_Begin ();
HTM_Double2Decimals (Print.Score); HTM_Double2Decimals (Print.Score);
HTM_Txt ("/"); HTM_Txt ("/");
HTM_Unsigned (Print.NumQsts.All); HTM_Unsigned (Print.NumQsts.All);
HTM_STRONG_End (); HTM_STRONG_End ();
} break;
else case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible (); Ico_PutIconNotVisible ();
break;
}
HTM_TD_End (); HTM_TD_End ();
HTM_TR_End (); HTM_TR_End ();
@ -2363,14 +2414,19 @@ void TstPrn_ShowOnePrint (void)
HTM_TD_Begin ("class=\"LB DAT_%s\"", HTM_TD_Begin ("class=\"LB DAT_%s\"",
The_GetSuffix ()); The_GetSuffix ());
if (ICanView.Score == Usr_I_CAN) switch (ICanView.Score)
{ {
case Usr_I_CAN:
HTM_STRONG_Begin (); HTM_STRONG_Begin ();
TstPrn_ComputeAndShowGrade (Print.NumQsts.All,Print.Score,Tst_SCORE_MAX); TstPrn_ComputeAndShowGrade (Print.NumQsts.All,Print.Score,
Tst_SCORE_MAX);
HTM_STRONG_End (); HTM_STRONG_End ();
} break;
else case Usr_I_CAN_NOT:
default:
Ico_PutIconNotVisible (); Ico_PutIconNotVisible ();
break;
}
HTM_TD_End (); HTM_TD_End ();
HTM_TR_End (); HTM_TR_End ();
@ -2420,13 +2476,19 @@ static void TstRes_CheckIfICanSeePrintResult (const struct TstPrn_Print *Print,
// if the print is not sent ==> I can not view results // if the print is not sent ==> I can not view results
ICanView->Result = (Print->Sent && Usr_ItsMe (UsrCod) == Usr_ME) ? Usr_I_CAN : ICanView->Result = (Print->Sent && Usr_ItsMe (UsrCod) == Usr_ME) ? Usr_I_CAN :
Usr_I_CAN_NOT; Usr_I_CAN_NOT;
if (ICanView->Result == Usr_I_CAN) switch (ICanView->Result)
{
case Usr_I_CAN:
// Depends on 5 visibility icons associated to tests // Depends on 5 visibility icons associated to tests
ICanView->Score = TstVis_IsVisibleTotalScore (TstCfg_GetConfigVisibility ()) ? Usr_I_CAN : ICanView->Score = TstVis_IsVisibleTotalScore (TstCfg_GetConfigVisibility ()) ? Usr_I_CAN :
Usr_I_CAN_NOT; Usr_I_CAN_NOT;
else break;
case Usr_I_CAN_NOT:
default:
ICanView->Score = Usr_I_CAN_NOT; ICanView->Score = Usr_I_CAN_NOT;
break; break;
}
break;
case Rol_NET: case Rol_NET:
case Rol_TCH: case Rol_TCH:
case Rol_DEG_ADM: case Rol_DEG_ADM:

View File

@ -298,7 +298,6 @@ void TmlUsr_PutIconFavSha (TmlUsr_FavSha_t FavSha,
TmlUsr_PutDisabledIconFavSha (FavSha,NumUsrs); TmlUsr_PutDisabledIconFavSha (FavSha,NumUsrs);
break; break;
case Usr_OTHER: // I am not the author case Usr_OTHER: // I am not the author
default:
TmlFrm_PutFormToFavUnfShaUns (FavSha,Cod); TmlFrm_PutFormToFavUnfShaUns (FavSha,Cod);
break; break;
} }